Navigation

Internationalization

A translation layer for the interface: @nuxtjs/i18n (or bare vue-i18n), locale message files, every user-visible string moved behind a key, and locale-prefixed routing with a language switcher.

None of that exists. Neither @nuxtjs/i18n nor vue-i18n is a dependency of any package or an entry in the workspace catalog, there is no locales/ directory and no $t anywhere, and every label, placeholder, empty state, and error message in the app is an English literal written inline. The document declares itself English once, in configuration/app.ts (htmlAttrs: { lang: "en" }), and nothing contradicts it.

Nothing in the repo translates text today: the schema forms show the Zod schema's own messages, and no package carries a translation layer the UI could reuse.

Why deferred

  • The cost is not the plugin, it is the corpus. Adopting i18n means extracting every literal in the app at once — and, more expensively, accepting a permanent obligation that every string written afterwards gets a key and a translation. That is a standing tax on every feature, paid forever, for an audience that is currently one language.
  • Translation is content work, not engineering work. Without someone committed to producing and maintaining non-English copy, the layer ships with exactly one locale populated and every other locale falling back to English — all of the tax, none of the reach.
  • Half-adopting is worse than not adopting: a keyed layer covering some surfaces and literals covering the rest gives a language switcher that visibly half-works, which reads as broken rather than untranslated.

Revisit when

A non-English audience actually exists — a sustained share of users whose browser locale is not English, or a specific deployment/community that requires another language — and someone is committed to maintaining the translations rather than machine-generating them once.

Not the same thing

Game text is the game's own words in its fifteen languages, which the game translated itself: the Genshin page and the persona plugin show them in the reader's language, and none of it is the app's own copy, which stays English.

Message translation is a separate deferred idea: translating user-authored messages on demand via a paid translation API. It shares no machinery with translating the UI, and neither one unblocks the other — a translated chat message still renders inside an English interface, and a translated interface still shows messages in whatever language they were typed.

Details

Command palette

Keyboard shortcuts