Localization

Most widgets have localization support, exceptions are:

  • AutocompleteString

  • ComboboxString

  • ListViewString

Integration with custom localization system can done with UIWidgets.l10n.Localization class.

Example for the I2 Localization:

protected virtual void Start()
{
        Localization.GetTranslation = I2Translation;
        Localization.GetCountryCode = I2CountryCode; // used by Calendar and similar widgets
        I2.Loc.LocalizationManager.OnLocalizeEvent += Localization.LocaleChanged;
}

public static string I2Translation(string input)
{
        var result = I2.Loc.LocalizationManager.GetTranslation(input);
        if (result == null)
        {
                return input;
        }

        return result;
}

public static string I2CountryCode()
{
        return I2.Loc.LocalizationManager.CurrentLanguageCode;
}

Dialog, Popup Localization

Dialog and Popup widgets requires enabled LocalizationSupport in DialogInfoBase component.

Formatted strings can be used with the SetInfo method:

public void Dialog()
{
        var actions = new DialogButton[]
        {
                new DialogButton("OK", DialogClose),
                new DialogButton("Cancel", DialogClose),
        };

        var instance = DialogTemplate.Clone();
        instance.DialogInfo.LocalizationSupport = true;
        instance.Show(
                buttons: actions,
                focusButton: "Close",
                modal: false,
                onCancel: DialogClose);
        instance.SetInfo("Welcome, {0}", new object[] { "username", }, "Value 1: {0}\nValue 2: {1}", new object[] { "argument 1", "argument 2" });
}

bool DialogClose(int buttonIndex)
{
        return true;
}

Notify Localization

Notify widget requires enabled LocalizationSupport in NotifyInfoBase component.

Formatted strings can be used with the SetMessage method:

public void NotificationFormatted()
{
        var instance = NotificationTemplate.Clone();

        instance.NotifyInfo.LocalizationSupport = true;
        instance.Show(customHideDelay: 0f);
        instance.SetMessage("Welcome, {0} {1}", "FirstName", "LastName");
}

Generated Widgets

The easiest way to add localization support is to implement property returning a localized string in the data class. Widgets are automatically updated on locale changes.

public class Item
{
        public string LocalizedName
        {
                get
                {
                        return I2.Loc.LocalizationManager.GetTranslation(Name);
                }
        }

        public string Name;
}