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:
| Key | English | German |
|---|---|---|
menu.title | Main Menu | Hauptmenü |
menu.start | Start Game | Spiel starten |
menu.options | Options | Optionen |
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:
- Add
LocalizedTextcomponent to each Text GameObject - Configure the
LocalizedStringin the Inspector - The component handles everything automatically
csharp
// No custom code needed! LocalizedText components handle:
// - Initial text loading
// - Automatic updates on language change
// - Missing translation handlingTextMeshPro 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.
