RomM Frontend: i18n / Localization
SkillDev toolsGuides your agent to add and manage translations for the RomM frontend correctly.
Use RomM Frontend: i18n / Localization in Claude, ChatGPT or Ahel Desktop
Free. Sign in, add RomM Frontend: i18n / Localization and connect your AI. About a minute.
Also: Claude Code · Cursor · Codex
Then ask your AI: use the RomM Frontend: i18n / Localization skill
Details
Instructions available. Your AI can read the instructions. Execution depends on the setup they require.
Account requirements not reviewed. Check the skill instructions before use; ahel provides instructions and does not run this skill.
No other account needed.
Add ahel to your AI once: Claude, ChatGPT, Cursor, Claude Code or Codex. Then ask it to use this.
About this skill
Internationalization for the RomM frontend (both v1 and v2). Use whenever adding, renaming, or removing any user-visible string / translation key under frontend/src/locales/. Covers the en_US-is-source rule, the requirement to add every new key to ALL locale directories in the same change, namespace
What this skill tells your AI
The instructions your AI receives, as published by rommapp/romm in .claude/skills/frontend-i18n/SKILL.md and read by ahel’s review.
User-visible strings are never hard-coded in components; they come from locale files via vue-i18n ($t(...) in templates/composites; utils may call i18n.global.t(...); v2 lib primitives must not call $t at all, text passes via props/slots).
Structure
- Locales live in
frontend/src/locales/<locale>/<namespace>.json, loaded by dynamic glob import insrc/locales/index.ts. - 18 locales:
en_US(default + fallback),en_GB,bg_BG,cs_CZ,de_DE,es_ES,fr_FR,hu_HU,it_IT,ja_JP,ko_KR,pl_PL,pt_BR,ro_RO,ru_RU,tr_TR,zh_CN,zh_TW. - Namespaces are per-feature files (e.g.
collection,common,console,detail,emulator,gallery,home,library,login,navigation,patcher,platform,scan,settings,task).
The rule (enforced in CI)
en_USis the source of truth, but every key added toen_USmust be added to all other locale directories in the same change. Never leave a key English-only.en_USuses US spelling: "favorites", "color", "canceled". British forms belong inen_GBonly. This bites tests too: an e2e or unit assertion on a label must expect theen_USstring.- Actually translate the value into each locale's language: never paste English into non-English locales.
- Editing an existing string counts: changing
en_USmeans re-translating that key in every other locale. - Reuse each locale's established terms: grep a sibling key for how it renders "metadata", "provider", etc.
- Copying the English value is a last-resort placeholder, only when no translation is available, and must be flagged to revisit.
- Removing or renaming a key means doing it across every locale.
Verify before handoff
python3 frontend/src/locales/check_i18n_locales.py
python3 frontend/src/locales/check_i18n_sorted.py # add --fix to auto-sort
check_i18n_locales.py compares every non-English locale against en_US and fails on any missing file, missing key, or extra key. check_i18n_sorted.py fails if any locale JSON file's keys aren't sorted alphabetically (run with --fix to sort them in place). CI runs both scripts (.github/workflows/i18n.yml) on any change under frontend/src/locales/**; both must pass.
Adding a new language
Create a new folder under frontend/src/locales/ mirroring en_US/'s files, then translate. Open the PR against master (see the docs/Contributing flow). This is the one i18n change where a new locale directory is expected.
Signals
- GitHub stars
- 13k
- Forks
- 747
- Last commit
- Oct 2026
Advanced
- Item type
- skill
- Key
frontend-i18n- Source
- github.com/rommapp/romm
Related picks
Skill · onweekendd
The pick for Vuevue-composable-patterns
Skill · esposter
The pick for Vuesetup-ts-deep-modules
Skill · mattpocock
The pick for TypeScripttypescript-pro
Skill · jeffallan
The pick for TypeScriptteach
Skill · mattpocock
More in Dev toolsponytail
Skill · dietrichgebert
More in Dev tools