- [Internationalization (i18n)](#internationalization-i18n) - [Translatable Strings](#translatable-strings) - [Message Definitions](#message-definitions) - [Rendering Messages](#rendering-messages) - [ICU Message Format](#icu-message-format) - [Writing Translation-Friendly Strings](#writing-translation-friendly-strings) - [Rich-Text Messages](#rich-text-messages) - [Vue/ICU Delimiter Collisions](#vueicu-delimiter-collisions) - [Imports](#imports) - [Reference Examples](#reference-examples) # Internationalization (i18n) All user-visible strings in Vue SFCs must use the localization system from `@modrinth/ui`. No hard-coded English strings should appear in templates or script — everything comes from `formatMessage` or ``. ## Translatable Strings User-visible strings include: inner text, `alt` attributes, `placeholder` attributes, button labels, dropdown option labels, notification messages, etc. Dynamic expressions (`{{ user.name }}`) and HTML tags are not translatable strings — only static human-readable text. ## Message Definitions Messages are defined with `defineMessage` or `defineMessages` from `@modrinth/ui` in `