> For the complete documentation index, see [llms.txt](https://postica.gitbook.io/binding-system-3/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://postica.gitbook.io/binding-system-3/reference/localization.md).

# Language and Localization

The editor UI in your language.

The package's editor UI is translated. Nothing about the runtime is affected: this is window titles, labels, tooltips and menu entries.

## Languages

<table><thead><tr><th width="290">Language</th><th>Status</th></tr></thead><tbody><tr><td>English</td><td>The source language. Always available.</td></tr><tr><td>日本語</td><td>Japanese, <code>ja</code></td></tr><tr><td>한국어</td><td>Korean, <code>ko</code></td></tr><tr><td>简体中文</td><td>Simplified Chinese, <code>zh-CN</code></td></tr><tr><td>繁體中文</td><td>Traditional Chinese, <code>zh-TW</code></td></tr></tbody></table>

## Choosing one

**Project Settings ▸ Binding System ▸ Language**

<table><thead><tr><th width="290">Language Source</th><th>What it does</th></tr></thead><tbody><tr><td><strong>Unity Editor Language</strong></td><td>Follows the editor's own language setting. The default.</td></tr><tr><td><strong>System Language</strong></td><td>Follows the operating system's UI culture.</td></tr><tr><td><strong>Custom</strong></td><td>Pick from the languages the package ships. A second dropdown appears.</td></tr></tbody></table>

## How it falls back

A missing translation falls back to the English source string, so a partially translated release is never broken, only partly English.

Region codes fall back to language codes: `zh-TW` tries `zh-TW`, then `zh`. So a translation table registered for a language covers all its regions.

## Adding a language

Translation tables are plain dictionaries registered at editor load. To add one, write a class in your own project:

```csharp
using System.Collections.Generic;
using Postica.Common;
using UnityEditor;

[InitializeOnLoad]
static class FrLocale
{
    static FrLocale()
    {
        EditorL10n.RegisterTable("fr", new Dictionary<string, string>(System.StringComparer.Ordinal)
        {
            ["Bindings Monitor"]  = "Moniteur de liaisons",
            ["Binding System"]    = "Système de liaison",
            ["Add Modifier"]      = "Ajouter un modificateur",
            // ... and so on
        });
    }
}
```

The **key is the English source string, exactly as it appears in the UI**. Any key you do not provide stays English.

Once registered, the language appears in the **Custom** dropdown.

{% hint style="success" %}
Translations are welcome. If you build a table for a language the package does not ship, send it in and it can be included for everybody. See [Support](/binding-system-3/help/support.md).
{% endhint %}

## Using it in your own extensions

If your converters, modifiers or editor tools should follow the same setting:

```csharp
using static Postica.Common.EditorL10n;

var label = new Label(T("My Custom Modifier"));
var text  = T("Found {0} bindings", count);
```

`T` returns the key unchanged when there is no translation, so passing an English string is always safe.
