Skip to content

Translating

yuriy edited this page Oct 18, 2026 · 1 revision

Translating

Sextant's interface is available in English, Russian, Ukrainian, German, French, Spanish, Portuguese (Brazil), Italian, Polish, Turkish, Chinese (Simplified and Traditional), Japanese and Korean. By default it follows the language of your operating system (System); you can choose another one in Settings → General → Appearance → Language (see Settings).

Corrections from native speakers are very welcome. If a word sounds wrong, a sentence is unnatural, or a text does not fit its button, please tell us: open an issue with the language, where you saw the text (a screenshot helps) and what it should say, or send a pull request that fixes the file.

Where the texts are

  • src/locales/<language>/<namespace>.json in the repository: one directory per language (en, ru, uk, de, fr, es, pt-BR, it, pl, tr, zh-CN, zh-TW, ja, ko), one file per part of the interface (common.json, settings.json, tray.json, …). English (en/) is the source.
  • src/locales/TRANSLATING.md: the rules and the glossary. Read it before changing a translation.

The most important rules, in short:

  • Keep {{placeholders}} and $t(…) exactly as they are; move them where your grammar needs them.
  • Kubernetes kinds and API terms stay in English (Pod, Deployment, ConfigMap, namespace, kubeconfig, field names), and so do product names, commands and units. Common words (cluster, node, container, log) are translated, the same way everywhere, by the glossary.
  • Plurals follow your language's CLDR forms: _one/_few/_many/_other in Russian, Ukrainian and Polish; _one/_many/_other in French, Spanish, Italian and Portuguese; _other only in Chinese, Japanese and Korean. Every form keeps {{count}}.
  • Each key is a whole sentence: Sextant never glues pieces together, so word order is yours.
  • Buttons should stay short; long hints may wrap.

Checking a change

npx vitest run src/locales/locales.test.ts   # keys, placeholders, plural forms, markup, empty texts
cargo test -p sextant tray                    # the tray menu has every text

The test compares every language with English and fails on a missing or extra key, an empty text, a changed placeholder and plural forms that do not match the language. It runs in CI with every pull request, so a new interface text has to come with all its translations.

A new language

A new language is a new directory under src/locales/ with the same files and keys as English, named with its language tag (nl, sv, cs…), plus a row in TRANSLATING.md. Sextant picks it up by itself: it appears in the language list and is chosen on systems that use it. Right-to-left languages (Arabic, Hebrew, Persian) need layout work first; ask in an issue before starting one.

The wiki and the project's internal documents stay in English.

Next: Development.

Clone this wiki locally