Files
blitzkit/src/core/localization/translator.ts
T
2024-03-03 22:13:22 -06:00

43 lines
1.1 KiB
TypeScript

import { Language, translations } from './strings';
export async function translator(language: Language) {
const strings = await translations[language];
function translate(key: string) {
const path = key.split('.');
let fragment = strings;
for (const pathItem in path) {
if (typeof fragment === 'string') {
throw new SyntaxError(
`Attempted to access sub-string ("${pathItem}" in "${path}") from a string instead of a tree`,
);
} else {
fragment = fragment[pathItem];
if (typeof fragment === 'undefined') {
throw new Error(
`Undefined translation for key "${key}" (in "${path}") in language "${language}"`,
);
}
}
}
if (typeof fragment === 'string') {
return fragment;
} else if (fragment.$) {
return fragment.$!;
} else {
throw new Error(
`Unresolved tree ending for path "${path}" in language "${language}"`,
);
}
}
function t(strings: TemplateStringsArray) {
return translate(strings[0]);
}
return { translate, t };
}