Files
colorshell/ags/i18n/intl.ts
T
2025-03-23 10:33:53 -03:00

59 lines
1.7 KiB
TypeScript

import { GLib } from "astal";
import en_US from "./lang/en_US";
import pt_BR from "./lang/pt_BR";
const i18nKeys = {
"en_US": en_US,
"pt_BR": pt_BR
};
const languages: Array<string> = Object.keys(i18nKeys);
let language: string = getSystemLanguage();
export function getSystemLanguage(): string {
const sysLanguage: (string|null|undefined) = GLib.getenv("LANG") || GLib.getenv("LANGUAGE");
if(!sysLanguage) {
console.log(`[WARNING] Couldn't get system language, fallback to default ${languages[0]}`);
console.log("[TIP] Please set the LANG or LANGUAGE environment variable");
return languages[0];
}
return sysLanguage.split('.')[0];
}
export function setLanguage(lang: string): string {
languages.map((cur: string) => {
if(cur === lang) {
language = lang;
return lang;
}
});
throw new Error(`(i18n/intl) Couldn't set language: ${lang}`, {
cause: `Language ${lang} not found in languages of type ${typeof languages}`
});
}
export function tr(key: string): string {
let result = i18nKeys[language as keyof typeof i18nKeys],
defResult = i18nKeys[languages[0] as keyof typeof i18nKeys];
for(const keyString of key.split('.')) {
result = result[keyString as keyof typeof result] as never;
defResult = defResult[keyString as keyof typeof defResult] as never;
}
return (typeof result == "string") ?
result
: ((typeof defResult == "string") ?
defResult
: "not found / is not of type \"string\"");
}
export function trGet() {
return i18nKeys[getSystemLanguage() as keyof typeof i18nKeys];
}