/** * Locale 元数据 —— 供 app 渲染语言切换器。 * 顺序:英语第一公民(`en` 居首,是基准/fallback)。 * * @typedef {'en'|'zh'|'ja'|'ko'|'es'|'pt'} LocaleCode * @typedef {{ code:LocaleCode, label:string, nativeLabel:string, dir:'ltr'|'rtl' }} LocaleMeta */ /** * 支持语言枚举。与 api-sdk 的 `x-locale` 取值、后端约定共用同一套枚举。 * `en` 为基准/fallback(英语第一公民)。 * @type {LocaleCode[]} */ export const SUPPORTED_LOCALES = ['en', 'zh', 'ja', 'ko', 'es', 'pt'] /** 默认 locale(缺省初值与 fallback)。 @type {LocaleCode} */ export const DEFAULT_LOCALE = 'en' /** * 6 语言元数据。`label` 为英文显示名(app 在英语 UI 下用), * `nativeLabel` 为该语言自称(语言切换器优先展示),`dir` 书写方向。 * 当前 6 语言均 `ltr`,结构预留 `rtl` 以便后续接入阿拉伯语等。 * @type {LocaleMeta[]} */ export const LOCALE_META = [ { code: 'en', label: 'English', nativeLabel: 'English', dir: 'ltr' }, { code: 'zh', label: 'Chinese', nativeLabel: '中文', dir: 'ltr' }, { code: 'ja', label: 'Japanese', nativeLabel: '日本語', dir: 'ltr' }, { code: 'ko', label: 'Korean', nativeLabel: '한국어', dir: 'ltr' }, { code: 'es', label: 'Spanish', nativeLabel: 'Español', dir: 'ltr' }, { code: 'pt', label: 'Portuguese', nativeLabel: 'Português', dir: 'ltr' }, ] /** * 判断给定值是否为受支持的 locale 码。 * @param {unknown} code * @returns {code is LocaleCode} */ export function isSupportedLocale(code) { return typeof code === 'string' && SUPPORTED_LOCALES.includes(/** @type {LocaleCode} */ (code)) }