Im trying to implement localization in my project and for this purpose I need LocalizationManager with next method
public string[][] GetLocalesInfo() {
string[][] localesInfo = new string[LocalizationSettings.AvailableLocales.Locales.Count][];
for (int i = 0; i < localesInfo.Length; i++) {
localesInfo[i] = new string[]{LocalizationSettings.AvailableLocales.Locales[i].Identifier.Code,
LocalizationSettings.AvailableLocales.Locales[i].Identifier.CultureInfo.EnglishName,
LocalizationSettings.AvailableLocales.Locales[i].Identifier.CultureInfo.NativeName};
}
return localesInfo;
}
This method will be called in another MonoBehaviour object to create list for available languages. The issue is LocalizationSettings.AvailableLocales.Locales.Count returns 0 until LocalizationSettings.InitializationOperation is finished. So to be 100% sure that InitializationOperation is finished I need to call desired method in weird way
IEnumerator WaitForLocaleInitializationCoroutine(Action action) {
if (!isInitialized) {
yield return LocalizationSettings.InitializationOperation;
isInitialized = true;
}
action.Invoke();
}
public void ExecuteAfterInitialization(Action action) {
StartCoroutine(WaitForLocaleInitializationCoroutine(action));
}
public string[][] GetLocalesInfo() {
string[][] localesInfo = new string[LocalizationSettings.AvailableLocales.Locales.Count][];
for (int i = 0; i < localesInfo.Length; i++) {
localesInfo[i] = new string[]{LocalizationSettings.AvailableLocales.Locales[i].Identifier.Code,
LocalizationSettings.AvailableLocales.Locales[i].Identifier.CultureInfo.EnglishName,
LocalizationSettings.AvailableLocales.Locales[i].Identifier.CultureInfo.NativeName};
}
return localesInfo;
}
void Start() {
ExecuteAfterInitialization(() => {
string[][] locales = GetLocalesInfo();
foreach(string[] s in locales) {
Debug.Log($"TEST {s[0]}/{s[1]}/{s[2]}");
}
});
}
But I still cant use GetLocalesInfo() method on its own as sync function and need to pass it as some callback function to ‘wait for loading’ function.
So is there any way to make LocalizationSettings be fully initialized in ‘Awake’ method so all next calls of manager function behaved as sync or any other option which will be better than my approaches?