We don’t have support for getting a string the same way when not running in play mode, that’s coming in 0.11.0.
However if you want to get values in an Editor script then we have an Editor API for this under LocalizationEditorSettings.
You can get the StringTableCollection, then the table and finally the entry using this.
For reference, I use this extension method (GetLocalizedStringImmediateSafe) to take care of the checks and always use it from anywhere. It’s not been thoroughly tested, but seems to work fine, though note that it assumes the table has been already loaded if using it at runtime/play mode:
using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.Localization;
using UnityEngine.Localization.Tables;
#if UNITY_EDITOR
using UnityEditor;
using UnityEditor.Localization;
#endif
public static class LocalizationUtils
{
#if UNITY_EDITOR
/// <summary>
/// (Editor only)
/// Gets a locale to use in edit mode in the editor.
/// </summary>
/// <param name="tableCollection">Optional table collection with which to filter the available locales.</param>
/// <returns>The locale, null if none usable found.</returns>
static Locale Editor_GetValidLocaleInEditMode(LocalizationTableCollection tableCollection)
{
foreach (var locale in LocalizationEditorSettings.GetLocales())
{
if (locale != null && (tableCollection == null || tableCollection.GetTable(locale.Identifier) != null))
return locale;
}
return null;
}
#endif
/// <summary>
/// Gets the localized string from an already loaded table, taking into account whether we are in edit mode, play mode, or a build.
/// </summary>
/// <param name="localizedStringReference">The <see cref="LocalizedString"/>.</param>
/// <returns>The localized string.</returns>
public static string GetLocalizedStringImmediateSafe(this LocalizedString localizedStringReference)
{
// If we are in the editor in edit mode, we need to find a valid locale and get the localized string from it:
#if UNITY_EDITOR
{
if (!EditorApplication.isPlaying)
{
string text = null;
if (!localizedStringReference.IsEmpty)
{
var tableCollection = LocalizationEditorSettings.GetStringTableCollection(localizedStringReference.TableReference);
Locale locale = Editor_GetValidLocaleInEditMode(tableCollection);
if (locale != null)
{
StringTable table = (StringTable)tableCollection.GetTable(locale.Identifier);
if (table != null)
text = table.GetEntryFromReference(localizedStringReference.TableEntryReference).LocalizedValue;
}
}
return text;
}
}
#endif
// At runtime (build or editor in play mode), we just get the localized string normally:
return localizedStringReference.GetLocalizedString().Result;
}
}
Is this now supported in the latest version of Localizaiton package?
Can I get the LocalizedString same way as I get it on runtime?
I’m getting this error at the moment:
System.Exception: SelectedLocale is null
UnityEngine.Localization.LocalizedString:GetLocalizedString ()
[Update]
I have noticed if I set the LocalizaitonSceneControl window to English locale then it works fine. But that doesn’t save anywhere, so i need to keep doing it everytime Unity gets opened.