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;
      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
         return I2.Loc.LocalizationManager.GetTranslation(Name);

   public string Name;