mirror of
https://github.com/misode/misode.github.io.git
synced 2026-04-25 08:06:51 +00:00
37 lines
1.1 KiB
TypeScript
37 lines
1.1 KiB
TypeScript
import config from '../config.json'
|
|
import English from '../locales/en.json'
|
|
|
|
export type Localize = (key: string, ...params: string[]) => string
|
|
|
|
interface Locale {
|
|
[key: string]: string
|
|
}
|
|
|
|
export const Locales: {
|
|
[key: string]: Locale,
|
|
} = {
|
|
fallback: English,
|
|
}
|
|
|
|
function resolveLocaleParams(value: string, params?: string[]): string {
|
|
return value.replace(/%\d+%/g, match => {
|
|
const index = parseInt(match.slice(1, -1))
|
|
return params?.[index] !== undefined ? params[index] : match
|
|
})
|
|
}
|
|
|
|
export function locale(language: string, key: string, ...params: string[]): string {
|
|
const value: string | undefined = Locales[language]?.[key]
|
|
?? Locales.en?.[key] ?? Locales.fallback[key] ?? key
|
|
return resolveLocaleParams(value, params)
|
|
}
|
|
|
|
export async function loadLocale(language: string) {
|
|
const langConfig = config.languages.find(lang => lang.code === language)
|
|
if (!langConfig) return
|
|
const data = await import(`../locales/${language}.json`)
|
|
const schema = langConfig.schemas !== false
|
|
&& await import(`../../node_modules/@mcschema/locales/src/${language}.json`)
|
|
Locales[language] = { ...data.default, ...schema.default }
|
|
}
|