cf1ccdf8e3
* Update translates from crowdin * Convert language codes from RFC-1766 to RFC-4646 * Update translates from crowdin * Update deviceLocales.ts * Revert 'changes zh-HK to yue' * Fix zh-HK messages.po * Revert 'en/messages.po' * Update deviceLocales.ts * Revert code comments * Update translates from crowdin * zh-TW: Improved translations
77 lines
2.0 KiB
TypeScript
77 lines
2.0 KiB
TypeScript
import {getLocales as defaultGetLocales, Locale} from 'expo-localization'
|
|
|
|
import {dedupArray} from '#/lib/functions'
|
|
|
|
type LocalWithLanguageCode = Locale & {
|
|
languageCode: string
|
|
}
|
|
|
|
/**
|
|
* Normalized locales
|
|
*
|
|
* Handles legacy migration for Java devices.
|
|
*
|
|
* {@link https://github.com/bluesky-social/social-app/pull/4461}
|
|
* {@link https://xml.coverpages.org/iso639a.html}
|
|
*
|
|
* Convert Chinese language tags for Native.
|
|
*
|
|
* {@link https://datatracker.ietf.org/doc/html/rfc5646#appendix-A}
|
|
* {@link https://developer.apple.com/documentation/packagedescription/languagetag}
|
|
* {@link https://gist.github.com/amake/0ac7724681ac1c178c6f95a5b09f03ce#new-locales-vs-old-locales-chinese}
|
|
*/
|
|
export function getLocales() {
|
|
const locales = defaultGetLocales?.() ?? []
|
|
const output: LocalWithLanguageCode[] = []
|
|
|
|
for (const locale of locales) {
|
|
if (typeof locale.languageCode === 'string') {
|
|
if (locale.languageCode === 'in') {
|
|
// indonesian
|
|
locale.languageCode = 'id'
|
|
}
|
|
if (locale.languageCode === 'iw') {
|
|
// hebrew
|
|
locale.languageCode = 'he'
|
|
}
|
|
if (locale.languageCode === 'ji') {
|
|
// yiddish
|
|
locale.languageCode = 'yi'
|
|
}
|
|
}
|
|
|
|
if (typeof locale.languageTag === 'string') {
|
|
if (
|
|
locale.languageTag.startsWith('zh-Hans') ||
|
|
locale.languageTag === 'zh-CN'
|
|
) {
|
|
// Simplified Chinese to zh-Hans-CN
|
|
locale.languageTag = 'zh-Hans-CN'
|
|
}
|
|
if (
|
|
locale.languageTag.startsWith('zh-Hant') ||
|
|
locale.languageTag === 'zh-TW'
|
|
) {
|
|
// Traditional Chinese to zh-Hant-TW
|
|
locale.languageTag = 'zh-Hant-TW'
|
|
}
|
|
}
|
|
|
|
// @ts-ignore checked above
|
|
output.push(locale)
|
|
}
|
|
|
|
return output
|
|
}
|
|
|
|
export const deviceLocales = getLocales()
|
|
|
|
/**
|
|
* BCP-47 language tag without region e.g. array of 2-char lang codes
|
|
*
|
|
* {@link https://docs.expo.dev/versions/latest/sdk/localization/#locale}
|
|
*/
|
|
export const deviceLanguageCodes = dedupArray(
|
|
deviceLocales.map(l => l.languageCode),
|
|
)
|