Search Unity

Bug NRE with list formatting

Discussion in 'Localization Tools' started by syjgin, Oct 10, 2020.

  1. syjgin

    syjgin

    Joined:
    Feb 13, 2015
    Posts:
    136
    I'm trying to display list in smart string. English text:
    "To change the course in the horizontal and vertical planes, you can use the {0:list{}|, |, } keys. Now turn right"
    Code (CSharp):
    1. //keycodes is array with strings
    2. _localizedString.TableEntryReference = replicId;
    3.             yield return Constants.LocalizationUtils.LoadLocalizedString(_localizedString, (result) =>
    4.             {
    5.                 if (keyCodes.Count == 0)
    6.                 {
    7.                     _replicText.text = result;
    8.                 }
    9.                 else
    10.                 {
    11.                     _replicText.text = Smart.Format(result, keyCodes);
    12.                 }
    13.             });
    Code (CSharp):
    1. public static class LocalizationUtils
    2.     {
    3.         public static IEnumerator LoadLocalizedString(LocalizedString localizedString, Action<string> callback)
    4.         {
    5.             UnityEngine.ResourceManagement.AsyncOperations.AsyncOperationHandle<string> asyncOperation =
    6.                 localizedString.GetLocalizedString();
    7.             yield return asyncOperation;
    8.             if (asyncOperation.IsDone)
    9.             {
    10.                 callback?.Invoke(asyncOperation.Result);
    11.             }
    12.         }
    13.     }
    Got the following error:
    Code (CSharp):
    1. NullReferenceException: Object reference not set to an instance of an object
    2. UnityEngine.Localization.SmartFormat.Core.Parsing.LiteralText.ToString () (at Library/PackageCache/com.unity.localization@0.8.1-preview/Runtime/Smart Format/Core/Parsing/LiteralText.cs:23)
    3. UnityEngine.Localization.SmartFormat.SmartFormatter.Format (UnityEngine.Localization.SmartFormat.Core.Formatting.FormattingInfo formattingInfo) (at Library/PackageCache/com.unity.localization@0.8.1-preview/Runtime/Smart Format/SmartFormatter.cs:233)
    4. UnityEngine.Localization.SmartFormat.SmartFormatter.Format (UnityEngine.Localization.SmartFormat.Core.Formatting.FormatDetails formatDetails, UnityEngine.Localization.SmartFormat.Core.Parsing.Format format, System.Object current) (at Library/PackageCache/com.unity.localization@0.8.1-preview/Runtime/Smart Format/SmartFormatter.cs:218)
    5. UnityEngine.Localization.SmartFormat.SmartFormatter.FormatWithCache (UnityEngine.Localization.SmartFormat.Core.Formatting.FormatCache& cache, System.String format, System.Object[] args) (at Library/PackageCache/com.unity.localization@0.8.1-preview/Runtime/Smart Format/SmartFormatter.cs:193)
    6. UnityEngine.Localization.Tables.StringTableEntry.GetLocalizedString (System.Object[] args) (at Library/PackageCache/com.unity.localization@0.8.1-preview/Runtime/Tables/StringTable.cs:89)
    7. UnityEngine.Localization.Settings.LocalizedStringDatabase.GetLocalizedStringProcessTableEntry (UnityEngine.ResourceManagement.AsyncOperations.AsyncOperationHandle`1[TObject] entryOp, UnityEngine.Localization.Tables.TableEntryReference tableEntryReference, UnityEngine.Localization.Locale locale, System.Object[] arguments) (at Library/PackageCache/com.unity.localization@0.8.1-preview/Runtime/Settings/Database/LocalizedStringDatabase.cs:197)
    8. UnityEngine.Localization.Settings.LocalizedStringDatabase.GetLocalizedStringAsyncInternal (UnityEngine.Localization.Tables.TableReference tableReference, UnityEngine.Localization.Tables.TableEntryReference tableEntryReference, UnityEngine.Localization.Locale locale, System.Object[] arguments) (at Library/PackageCache/com.unity.localization@0.8.1-preview/Runtime/Settings/Database/LocalizedStringDatabase.cs:175)
    9. UnityEngine.Localization.Settings.LocalizedStringDatabase.GetLocalizedStringAsync (UnityEngine.Localization.Tables.TableReference tableReference, UnityEngine.Localization.Tables.TableEntryReference tableEntryReference, UnityEngine.Localization.Locale locale, System.Object[] arguments) (at Library/PackageCache/com.unity.localization@0.8.1-preview/Runtime/Settings/Database/LocalizedStringDatabase.cs:166)
    10. UnityEngine.Localization.Settings.LocalizedStringDatabase.GetLocalizedStringAsync (UnityEngine.Localization.Tables.TableReference tableReference, UnityEngine.Localization.Tables.TableEntryReference tableEntryReference, System.Object[] arguments) (at Library/PackageCache/com.unity.localization@0.8.1-preview/Runtime/Settings/Database/LocalizedStringDatabase.cs:144)
    11. UnityEngine.Localization.LocalizedString.GetLocalizedString () (at Library/PackageCache/com.unity.localization@0.8.1-preview/Runtime/Localized Reference/LocalizedString.cs:180)
    12. Constants.LocalizationUtils+<LoadLocalizedString>d__0.MoveNext () (at Assets/Scripts/Constants/LocalizationUtils.cs:11)
    13. UnityEngine.SetupCoroutine.InvokeMoveNext (System.Collections.IEnumerator enumerator, System.IntPtr returnValueAddress) (at /home/bokken/buildslave/unity/build/Runtime/Export/Scripting/Coroutines.cs:17)
    14. UnityEngine.MonoBehaviour:StartCoroutine(IEnumerator)
    15. Dialogues.DialogueDisplay:DisplayReplic(DialogueReplicaDescription) (at Assets/Scripts/Dialogues/DialogueDisplay.cs:167)
    Maybe, something wrong with setup? How to display a smart string properly?
     
  2. syjgin

    syjgin

    Joined:
    Feb 13, 2015
    Posts:
    136
    Already found a solution: just not use the "Smart" toggle in the localization table editor:) Don't know, what's it purpose
     
  3. karl_jones

    karl_jones

    Unity Technologies

    Joined:
    May 5, 2015
    Posts:
    8,280
    The Smart toggle enables/disables Smart Strings. We may remove it in the future and just treat them all as Smart.

    If its still not working it could be because you are using an array with the smart list feature. You need to wrap that array in another one or we dont know its a list and instead treat it as a set of arguments.

    Could you please file a bug report for the exception?
     
    Last edited: Oct 10, 2020
  4. syjgin

    syjgin

    Joined:
    Feb 13, 2015
    Posts:
    136
    Sure, I'll create bugreport for this sutiation. Maybe my use case is not usual: I'm primary using localization via scripts with assign table references via code, so every time I check "Smart" toggle, this exception is fired regardless of string content
     
    karl_jones likes this.
  5. karl_jones

    karl_jones

    Unity Technologies

    Joined:
    May 5, 2015
    Posts:
    8,280
    Hey did you create a bug report for this issue?