Skip to content

Basic UI Localization

This example shows how to localize basic UI text in a main menu.

String Table Setup

First, create entries in your String Table:

KeyEnglishGerman
menu.titleMain MenuHauptmenü
menu.startStart GameSpiel starten
menu.optionsOptionsOptionen

Code Example

csharp
using Lexis;
using UnityEngine;
using UnityEngine.UI;

public class MainMenu : MonoBehaviour
{
    [SerializeField] private Text titleText;
    [SerializeField] private Text startButtonText;
    [SerializeField] private Text optionsButtonText;

    void Start()
    {
        Localization.Initialize();
        UpdateUI();

        // Subscribe to language changes
        Localization.OnLocaleChanged += _ => UpdateUI();
    }

    void OnDestroy()
    {
        Localization.OnLocaleChanged -= _ => UpdateUI();
    }

    void UpdateUI()
    {
        titleText.text = Localization.Get("menu.title");
        startButtonText.text = Localization.Get("menu.start");
        optionsButtonText.text = Localization.Get("menu.options");
    }
}

Using LocalizedString Fields

A cleaner approach using Inspector-configured fields:

csharp
using Lexis;
using UnityEngine;
using UnityEngine.UI;

public class MainMenuWithFields : MonoBehaviour
{
    [Header("Localized Strings")]
    [SerializeField] private LocalizedString titleString;
    [SerializeField] private LocalizedString startString;
    [SerializeField] private LocalizedString optionsString;

    [Header("UI References")]
    [SerializeField] private Text titleText;
    [SerializeField] private Text startButtonText;
    [SerializeField] private Text optionsButtonText;

    void Start()
    {
        Localization.Initialize();
        UpdateUI();
        Localization.OnLocaleChanged += _ => UpdateUI();
    }

    void OnDestroy()
    {
        Localization.OnLocaleChanged -= _ => UpdateUI();
    }

    void UpdateUI()
    {
        // Implicit conversion from LocalizedString to string
        titleText.text = titleString;
        startButtonText.text = startString;
        optionsButtonText.text = optionsString;
    }
}

Using LocalizedText Components

The simplest approach - no code required:

  1. Add LocalizedText component to each Text GameObject
  2. Configure the LocalizedString in the Inspector
  3. The component handles everything automatically
csharp
// No custom code needed! LocalizedText components handle:
// - Initial text loading
// - Automatic updates on language change
// - Missing translation handling

TextMeshPro Version

csharp
using Lexis;
using TMPro;
using UnityEngine;

public class MainMenuTMP : MonoBehaviour
{
    [SerializeField] private TMP_Text titleText;
    [SerializeField] private TMP_Text startButtonText;
    [SerializeField] private TMP_Text optionsButtonText;

    void Start()
    {
        Localization.Initialize();
        UpdateUI();
        Localization.OnLocaleChanged += _ => UpdateUI();
    }

    void UpdateUI()
    {
        titleText.text = Localization.Get("menu.title");
        startButtonText.text = Localization.Get("menu.start");
        optionsButtonText.text = Localization.Get("menu.options");
    }
}

Or use the LocalizedTMP component for zero-code setup.

Professional Unity Development Tools