Can not use strings with more than 7 substitutions

Hello. After upgrade to the 1.0.3 localization version, I can no more use string like that:

Average speed: {0:0.##} km / h
Reverse speed: {1:0.##} km / h
Average fuel consumption: {2:0.##} l / km
Angular velocity: {3:0.##} ° / s
Fuel: {4: 0. ##} / {5:0.##} l
Total Fuel: {6:0.##}
Fuel power: {7:0.##} l
Armor:  {8:0.##}

When I try to use it from code, there are following error:

NullReferenceException: Object reference not set to an instance of an object
UnityEngine.Localization.SmartFormat.Core.Parsing.Parser.HandleParsingErrors (UnityEngine.Localization.SmartFormat.Core.Parsing.ParsingErrors parsingErrors, UnityEngine.Localization.SmartFormat.Core.Parsing.Format currentResult) (at Library/PackageCache/com.unity.localization@1.0.3/Runtime/Smart Format/Core/Parsing/Parser.cs:466)
UnityEngine.Localization.SmartFormat.Core.Parsing.Parser.ParseFormat (System.String format, System.Collections.Generic.IList`1[T] formatterExtensionNames) (at Library/PackageCache/com.unity.localization@1.0.3/Runtime/Smart Format/Core/Parsing/Parser.cs:448)
UnityEngine.Localization.Tables.StringTableEntry.GetOrCreateFormatCache () (at Library/PackageCache/com.unity.localization@1.0.3/Runtime/Tables/StringTable.cs:102)
UnityEngine.Localization.GetLocalizedStringOperation.Execute () (at Library/PackageCache/com.unity.localization@1.0.3/Runtime/Operations/GetLocalizedStringOperation.cs:51)
UnityEngine.ResourceManagement.AsyncOperations.AsyncOperationBase`1[TObject].InvokeExecute () (at Library/PackageCache/com.unity.addressables@1.19.6/Runtime/ResourceManager/AsyncOperations/AsyncOperationBase.cs:474)
UnityEngine.ResourceManagement.AsyncOperations.AsyncOperationBase`1[TObject].Start (UnityEngine.ResourceManagement.ResourceManager rm, UnityEngine.ResourceManagement.AsyncOperations.AsyncOperationHandle dependency, DelegateList`1[T] updateCallbacks) (at Library/PackageCache/com.unity.addressables@1.19.6/Runtime/ResourceManager/AsyncOperations/AsyncOperationBase.cs:469)
UnityEngine.ResourceManagement.ResourceManager.StartOperation[TObject] (UnityEngine.ResourceManagement.AsyncOperations.AsyncOperationBase`1[TObject] operation, UnityEngine.ResourceManagement.AsyncOperations.AsyncOperationHandle dependency) (at Library/PackageCache/com.unity.addressables@1.19.6/Runtime/ResourceManager/ResourceManager.cs:460)
UnityEngine.Localization.Settings.LocalizedStringDatabase.GetLocalizedStringAsync (UnityEngine.Localization.Tables.TableReference tableReference, UnityEngine.Localization.Tables.TableEntryReference tableEntryReference, System.Collections.Generic.IList`1[T] arguments, UnityEngine.Localization.Locale locale, UnityEngine.Localization.Settings.FallbackBehavior fallbackBehavior, UnityEngine.Localization.SmartFormat.PersistentVariables.IVariableGroup localVariables) (at Library/PackageCache/com.unity.localization@1.0.3/Runtime/Settings/Database/LocalizedStringDatabase.cs:215)
UnityEngine.Localization.LocalizedString.GetLocalizedStringAsync (System.Collections.Generic.IList`1[T] arguments) (at Library/PackageCache/com.unity.localization@1.0.3/Runtime/Localized Reference/LocalizedString.cs:287)
UnityEngine.Localization.LocalizedString.GetLocalizedStringAsync () (at Library/PackageCache/com.unity.localization@1.0.3/Runtime/Localized Reference/LocalizedString.cs:239)
Constants.LocalizationUtils+<LocalizationStringsLoadCoroutine>d__3.MoveNext () (at Assets/Scripts/Constants/LocalizationUtils.cs:36)
UnityEngine.SetupCoroutine.InvokeMoveNext (System.Collections.IEnumerator enumerator, System.IntPtr returnValueAddress) (at /home/bokken/buildslave/unity/build/Runtime/Export/Scripting/Coroutines.cs:17)

But with

Average speed: {0:0.##} km / h
Reverse speed: {1:0.##} km / h
Average fuel consumption: {2:0.##} l / km
Angular velocity: {3:0.##} ° / s
Fuel: {4:0.##} / {5:0.##} l
Total Fuel: {6:0.##}
Fuel power: {7:0.##} l

All works fine.
So I have to concatenate from two strings. It’s very strange, that somewhere inside 1.0.3 source code is introduced some hardcoded constant

I can’t see the difference between the 2 strings. Can you please file a bug report so we can look into it?

Difference is the last segment: “Armor: {8:0.##}”. I will fire a bug report today

1 Like

Also https://forum.unity.com/threads/release-version-of-localization-tools-broke-addressables-build.1174376 this and https://forum.unity.com/threads/have-to-manually-set-locale-every-time.1148687 this bugs are returned again in 1.0.3