summaryrefslogtreecommitdiff
path: root/test-client/locale.ts
blob: c49e7d129fd8967510c2966172111ab268da123a (plain)
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
const LANGUAGES = [
    "ar", "de", "en", "es", "eu",
    "fi", "fr", "he", "ja", "nl",
    "pl", "pt", "to", "tr",
    "zh_Hans", "zh_Hant",
]

let TR: { [key: string]: string } = {}
export async function init_locale(lang?: string) {
    if (!lang) return await init_locale(select_language())
    const res = await fetch(`/locale/${encodeURIComponent(lang)}.json`, { headers: { "Accept": "application/json" } })
    if (!res.ok) throw new Error("language pack download failed");
    TR = await res.json()
}

export function tr(key: string, ...args: string[]): string {
    let s = TR[key];
    if (!s) return key
    if (args.length) s = s.replace(/{(\d+)}/ig, (_m, index) => args[parseInt(index)])
    return s
}

function select_language(): string {
    const plang = (new URLSearchParams(globalThis.location.hash.substring(1))).get("lang")
    if (plang) return plang
    const navlang = navigator.language.split("-")[0] ?? "en"
    if (LANGUAGES.includes(navlang)) return navlang
    console.warn("fallback language selected");
    return "en"
}