- Supported locales:
zh-CN,en-US. - Default locale:
zh-CN. - Fallback locale:
en-US. - Negotiation order:
- Explicit request value (
langquery orX-Localeheader) - User preference (
user.locale, for authenticated requests) - System default locale (
system_settings.default_locale) Accept-Language- Fallback locale (
zh-CN)
- Explicit request value (
- Frontend startup order:
localStorage.locale- user profile locale (after login)
system_settings.default_locale- browser locale
- API responses keep
msgfor backward compatibility. - For i18n-aware clients, responses may include:
error_code: stable machine-readable error code.message_key: translation key.message_params: interpolation parameters.
- Preferred client rendering order:
message_key+message_paramsmsg- local fallback text
- Use semantic keys, never use source text as key.
- Recommended format:
domain.module.action. - Current examples:
common.request_failedauth.token_missingdashboard.logs.tail_invalid
- New business errors should use stable
error_code. - If the message is user-facing, attach
message_key. - Keep logs and telemetry machine-oriented; do not localize log field names.
- New UI text should be added to locale JSON and rendered via
t(). - API error display should prefer
message_keyfrom server. - Send
X-Localeon API requests to allow server-side localization. - User settings should persist personal locale to backend (
user.locale) and switch UI locale immediately after save.
- User-generated content is not auto-translated by backend.
- System-generated content (notification templates, built-in prompts) should come from locale resources keyed by
message_key.