I’m trying to use the Unity Localization package together with a “database” (list of things).
This database is basically a list of a class that contains an ID that the localization system can look up.
However, when trying to get a localized string via scripts, I’m getting the following exception:
Exception: Attempting to use an invalid operation handle
UnityEngine.ResourceManagement.AsyncOperations.AsyncOperationHandle.get_InternalOp () (at Library/PackageCache/com.unity.addressables@1.19.19/Runtime/ResourceManager/AsyncOperations/AsyncOperationHandle.cs:454)
UnityEngine.ResourceManagement.AsyncOperations.AsyncOperationHandle.get_Status () (at Library/PackageCache/com.unity.addressables@1.19.19/Runtime/ResourceManager/AsyncOperations/AsyncOperationHandle.cs:542)
UnityEngine.ResourceManagement.AsyncOperations.GroupOperation.CompleteIfDependenciesComplete () (at Library/PackageCache/com.unity.addressables@1.19.19/Runtime/ResourceManager/AsyncOperations/GroupOperation.cs:172)
UnityEngine.ResourceManagement.AsyncOperations.GroupOperation.OnOperationCompleted (UnityEngine.ResourceManagement.AsyncOperations.AsyncOperationHandle op) (at Library/PackageCache/com.unity.addressables@1.19.19/Runtime/ResourceManager/AsyncOperations/GroupOperation.cs:225)
UnityEngine.ResourceManagement.AsyncOperations.AsyncOperationBase1+<>c__DisplayClass57_0[TObject].<add_CompletedTypeless>b__0 (UnityEngine.ResourceManagement.AsyncOperations.AsyncOperationHandle1[TObject] s) (at Library/PackageCache/com.unity.addressables@1.19.19/Runtime/ResourceManager/AsyncOperations/AsyncOperationBase.cs:286)
DelegateList1[T].Invoke (T res) (at Library/PackageCache/com.unity.addressables@1.19.19/Runtime/ResourceManager/Util/DelegateList.cs:69) UnityEngine.Debug:LogException(Exception) DelegateList1:Invoke(AsyncOperationHandle1) (at Library/PackageCache/com.unity.addressables@1.19.19/Runtime/ResourceManager/Util/DelegateList.cs:73) UnityEngine.Localization.Settings.LocalizedDatabase2:GetTable(TableReference, Locale)
LocalizationUtilities:GetLocalizedString(String, String) (at Assets/Scripts/Utilities/LocalizationUtilities.cs:16)
CourseItem:GetLocalizedCoursePrefix() (at Assets/Scripts/Databases/Courses/CourseItem.cs:53)
CourseItem:GetFullCourseName(Boolean) (at Assets/Scripts/Databases/Courses/CourseItem.cs:29)
CourseSelectManager:Start() (at Assets/Scripts/Course Select/CourseSelectManager.cs:19)
The code I’m using looks like this:
public static string GetLocalizedString(string table, string key)
{
if (LocalizationSettings.SelectedLocale == null)
{
Debug.LogWarning("No locale selected.");
return "";
}
Debug.Log($"{table} {key}");
var localeTable = LocalizationSettings.StringDatabase.GetTable(table);
var operation = LocalizationSettings.StringDatabase.GetLocalizedStringAsync(table, key);
if (operation.IsDone)
return operation.Result;
string result = "";
operation.Completed += op => result = op.Result;
return result;
}
I also tried the GetLocalizedString() method instead of the Async one, but no luck.
What am I doing wrong here?