@oplayer/core
Version:
Oh! Another HTML5 video player.
375 lines (367 loc) • 5.35 kB
text/typescript
import type { Lang } from '../types'
import { mergeDeep } from '../utils'
import CN from './zh-CN.json'
import FA from "./fa.json"
import PA from "./pa.json"
export default class I18n {
public lang: Lang
private languages: Partial<Record<Lang, any>> = {
zh: CN,
'zh-CN': CN,
fa: FA,
pa: PA,
en: Object.keys(CN).reduce<Record<string, string>>(
(previous, current) => ((previous[current] = current), previous),
{}
),
}
constructor(defaultLang: Lang) {
this.lang = defaultLang === 'auto' ? (navigator.language as Lang) : defaultLang
if (!this.languages[this.lang]) {
navigator.languages.some((lang) => {
if (this.languages[lang as Lang]) {
this.lang = lang as Lang
return true
}
if (lang.indexOf('-') !== -1) {
const short: Lang = lang.split('-')[0]! as Lang
if (short && this.languages[short]) {
this.lang = short
return true
}
}
return false
})
}
if (!this.languages[this.lang]) this.lang = 'en'
}
get(key: string, ...arg: Array<string | number>): string {
const result = this.languages[this.lang][key]
if (result == undefined) return key
let i = 0
return result.replace(/%s/gi, () => arg[i++] ?? '')
}
update(languages: Partial<Record<Lang, any>>): void {
mergeDeep(this.languages, languages)
}
}
// [
// "Cy-az-AZ",
// "Cy-sr-SP",
// "Cy-uz-UZ",
// "Lt-az-AZ",
// "Lt-sr-SP",
// "Lt-uz-UZ",
// "aa",
// "ab",
// "ae",
// "af",
// "af-ZA",
// "ak",
// "am",
// "an",
// "ar",
// "ar-AE",
// "ar-BH",
// "ar-DZ",
// "ar-EG",
// "ar-IQ",
// "ar-JO",
// "ar-KW",
// "ar-LB",
// "ar-LY",
// "ar-MA",
// "ar-OM",
// "ar-QA",
// "ar-SA",
// "ar-SY",
// "ar-TN",
// "ar-YE",
// "as",
// "av",
// "ay",
// "az",
// "ba",
// "be",
// "be-BY",
// "bg",
// "bg-BG",
// "bh",
// "bi",
// "bm",
// "bn",
// "bo",
// "br",
// "bs",
// "ca",
// "ca-ES",
// "ce",
// "ch",
// "co",
// "cr",
// "cs",
// "cs-CZ",
// "cu",
// "cv",
// "cy",
// "da",
// "da-DK",
// "de",
// "de-AT",
// "de-CH",
// "de-DE",
// "de-LI",
// "de-LU",
// "div-MV",
// "dv",
// "dz",
// "ee",
// "el",
// "el-GR",
// "en",
// "en-AU",
// "en-BZ",
// "en-CA",
// "en-CB",
// "en-GB",
// "en-IE",
// "en-JM",
// "en-NZ",
// "en-PH",
// "en-TT",
// "en-US",
// "en-ZA",
// "en-ZW",
// "eo",
// "es",
// "es-AR",
// "es-BO",
// "es-CL",
// "es-CO",
// "es-CR",
// "es-DO",
// "es-EC",
// "es-ES",
// "es-GT",
// "es-HN",
// "es-MX",
// "es-NI",
// "es-PA",
// "es-PE",
// "es-PR",
// "es-PY",
// "es-SV",
// "es-UY",
// "es-VE",
// "et",
// "et-EE",
// "eu",
// "eu-ES",
// "fa",
// "fa-IR",
// "ff",
// "fi",
// "fi-FI",
// "fj",
// "fo",
// "fo-FO",
// "fr",
// "fr-BE",
// "fr-CA",
// "fr-CH",
// "fr-FR",
// "fr-LU",
// "fr-MC",
// "fy",
// "ga",
// "gd",
// "gl",
// "gl-ES",
// "gn",
// "gu",
// "gu-IN",
// "gv",
// "ha",
// "he",
// "he-IL",
// "hi",
// "hi-IN",
// "ho",
// "hr",
// "hr-HR",
// "ht",
// "hu",
// "hu-HU",
// "hy",
// "hy-AM",
// "hz",
// "ia",
// "id",
// "id-ID",
// "ie",
// "ig",
// "ii",
// "ik",
// "io",
// "is",
// "is-IS",
// "it",
// "it-CH",
// "it-IT",
// "iu",
// "ja",
// "ja-JP",
// "jv",
// "ka",
// "ka-GE",
// "kg",
// "ki",
// "kj",
// "kk",
// "kk-KZ",
// "kl",
// "km",
// "kn",
// "kn-IN",
// "ko",
// "ko-KR",
// "kr",
// "ks",
// "ku",
// "kv",
// "kw",
// "ky",
// "ky-KZ",
// "la",
// "lb",
// "lg",
// "li",
// "ln",
// "lo",
// "lt",
// "lt-LT",
// "lu",
// "lv",
// "lv-LV",
// "mg",
// "mh",
// "mi",
// "mk",
// "mk-MK",
// "ml",
// "mn",
// "mn-MN",
// "mr",
// "mr-IN",
// "ms",
// "ms-BN",
// "ms-MY",
// "mt",
// "my",
// "na",
// "nb",
// "nb-NO",
// "nd",
// "ne",
// "ng",
// "nl",
// "nl-BE",
// "nl-NL",
// "nn",
// "nn-NO",
// "no",
// "nr",
// "nv",
// "ny",
// "oc",
// "oj",
// "om",
// "or",
// "os",
// "pa",
// "pa-IN",
// "pi",
// "pl",
// "pl-PL",
// "ps",
// "pt",
// "pt-BR",
// "pt-PT",
// "qu",
// "rm",
// "rn",
// "ro",
// "ro-RO",
// "ru",
// "ru-RU",
// "rw",
// "sa",
// "sa-IN",
// "sc",
// "sd",
// "se",
// "sg",
// "si",
// "sk",
// "sk-SK",
// "sl",
// "sl-SI",
// "sm",
// "sn",
// "so",
// "sq",
// "sq-AL",
// "sr",
// "ss",
// "st",
// "su",
// "sv",
// "sv-FI",
// "sv-SE",
// "sw",
// "sw-KE",
// "ta",
// "ta-IN",
// "te",
// "te-IN",
// "tg",
// "th",
// "th-TH",
// "ti",
// "tk",
// "tl",
// "tn",
// "to",
// "tr",
// "tr-TR",
// "ts",
// "tt",
// "tt-RU",
// "tw",
// "ty",
// "ug",
// "uk",
// "uk-UA",
// "ur",
// "ur-PK",
// "uz",
// "ve",
// "vi",
// "vi-VN",
// "vo",
// "wa",
// "wo",
// "xh",
// "yi",
// "yo",
// "za",
// "zh",
// "zh-CHS",
// "zh-CHT",
// "zh-CN",
// "zh-HK",
// "zh-MO",
// "zh-SG",
// "zh-TW",
// "zu"
// ]