Languages
By default the UI follows your browser's language. This is the Auto setting, which takes the first language in the browser's preferred list with a translation, matching a regional variant to its base language when there's no exact match (so it-CH gets Italian), and falls back to en_US when none match. Visitors who aren't signed in, such as in Kiosk mode, always get Auto.
Picking a specific language overrides Auto. The choice is stored server-side with your other UI settings, so it follows you across devices, and switching back to Auto lets each browser follow its own language again.
Supported locales
| Code | Language |
|---|---|
en_US |
English (United States), default |
en_GB |
English (United Kingdom) |
es_ES |
Spanish (Spain) |
fr_FR |
French |
de_DE |
German |
it_IT |
Italian |
pt_BR |
Portuguese (Brazil) |
ja_JP |
Japanese |
ko_KR |
Korean |
ru_RU |
Russian |
pl_PL |
Polish |
cs_CZ |
Czech |
hu_HU |
Hungarian |
ro_RO |
Romanian |
bg_BG |
Bulgarian |
zh_CN |
Chinese (Simplified) |
zh_TW |
Chinese (Traditional) |
tr_TR |
Turkish |
What gets translated
- All UI strings: menus, buttons, labels, tooltips, dialogs
- Error messages and notifications
- Help text and inline instructions
Not translated:
- Game metadata: titles, descriptions, and genres come from metadata providers, and English is usually the source language. IGDB has some localisation, but coverage is uneven.
- Your own content: collection names, notes, user-uploaded media
Contributing a translation
Add missing strings to an existing locale
- Fork rommapp/romm.
- Under
frontend/src/locales/<your-locale>/, open the JSON/YAML files. - Add the missing keys (they're all present in
en_USfor reference). - Open a PR.
Add a new locale
- Create
frontend/src/locales/<your-locale>/by copying the structure fromen_US. - Translate.
- Register the locale in the
frontend/src/locales/index.tsfile (the filename may change, so follow the pattern in the repo). - Open a PR.
See Translations (i18n) for the full contributor walkthrough.