mirror of
https://github.com/stablyai/orca.git
synced 2026-10-01 00:02:10 +00:00
69 lines
1.9 KiB
TypeScript
69 lines
1.9 KiB
TypeScript
import {
|
|
UI_LANGUAGE_CHINESE,
|
|
UI_LANGUAGE_ENGLISH,
|
|
UI_LANGUAGE_JAPANESE,
|
|
UI_LANGUAGE_KOREAN,
|
|
UI_LANGUAGE_SPANISH,
|
|
UI_LANGUAGE_SYSTEM,
|
|
type UiLanguage
|
|
} from './ui-language'
|
|
|
|
export const SUPPORTED_UI_LOCALES = ['en', 'zh', 'ko', 'ja', 'es'] as const
|
|
export type SupportedUiLocale = (typeof SUPPORTED_UI_LOCALES)[number]
|
|
|
|
export const DEFAULT_UI_LOCALE: SupportedUiLocale = 'en'
|
|
|
|
function normalizeLocaleTag(locale: string | undefined): string {
|
|
return (locale ?? DEFAULT_UI_LOCALE).trim().toLowerCase().replace(/_/g, '-')
|
|
}
|
|
|
|
export function normalizeSupportedUiLocale(locale: string | undefined): SupportedUiLocale {
|
|
const tag = normalizeLocaleTag(locale)
|
|
const primary = tag.split('-')[0]
|
|
if (primary === 'zh') {
|
|
if (tag.startsWith('zh-tw') || tag.startsWith('zh-hk') || tag.startsWith('zh-hant')) {
|
|
return DEFAULT_UI_LOCALE
|
|
}
|
|
return 'zh'
|
|
}
|
|
return SUPPORTED_UI_LOCALES.includes(primary as SupportedUiLocale)
|
|
? (primary as SupportedUiLocale)
|
|
: DEFAULT_UI_LOCALE
|
|
}
|
|
|
|
export function resolveUiLocale(
|
|
language: UiLanguage,
|
|
systemLocale: string | undefined = DEFAULT_UI_LOCALE
|
|
): SupportedUiLocale {
|
|
if (language === UI_LANGUAGE_ENGLISH) {
|
|
return DEFAULT_UI_LOCALE
|
|
}
|
|
if (language === UI_LANGUAGE_CHINESE) {
|
|
return 'zh'
|
|
}
|
|
if (language === UI_LANGUAGE_KOREAN) {
|
|
return 'ko'
|
|
}
|
|
if (language === UI_LANGUAGE_JAPANESE) {
|
|
return 'ja'
|
|
}
|
|
if (language === UI_LANGUAGE_SPANISH) {
|
|
return 'es'
|
|
}
|
|
return normalizeSupportedUiLocale(systemLocale)
|
|
}
|
|
|
|
export function getRendererSystemLocale(): string {
|
|
if (typeof navigator !== 'undefined' && navigator.language) {
|
|
return navigator.language
|
|
}
|
|
return DEFAULT_UI_LOCALE
|
|
}
|
|
|
|
export function resolveRendererUiLocale(language: UiLanguage): SupportedUiLocale {
|
|
return resolveUiLocale(
|
|
language,
|
|
language === UI_LANGUAGE_SYSTEM ? getRendererSystemLocale() : DEFAULT_UI_LOCALE
|
|
)
|
|
}
|