Skip to content

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

  1. Fork rommapp/romm.
  2. Under frontend/src/locales/<your-locale>/, open the JSON/YAML files.
  3. Add the missing keys (they're all present in en_US for reference).
  4. Open a PR.

Add a new locale

  1. Create frontend/src/locales/<your-locale>/ by copying the structure from en_US.
  2. Translate.
  3. Register the locale in the frontend/src/locales/index.ts file (the filename may change, so follow the pattern in the repo).
  4. Open a PR.

See Translations (i18n) for the full contributor walkthrough.