locales.js
1.65 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
/**
* 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))
}