i18n.ts
57 lines
| 1.8 KiB
| video/mp2t
|
TypeScriptLexer
cin
|
r65 | import { id as mid} from "module"; | ||
cin
|
r120 | import { PromiseOrValue } from "@implab/core-amd/interfaces"; | ||
import { NlsBundle } from "./NlsBundle"; | ||||
cin
|
r65 | import { isPromise } from "@implab/core-amd/safe"; | ||
import { locale as sysLocale } from "dojo/_base/kernel"; | ||||
import { TraceSource } from "@implab/core-amd/log/TraceSource"; | ||||
const trace = TraceSource.get(mid); | ||||
trace.debug("Current sysLocale: {0}", sysLocale); | ||||
export interface OnLoad { | ||||
cin
|
r109 | (result?: unknown): void; | ||
error(err: unknown): void; | ||||
cin
|
r65 | } | ||
cin
|
r120 | export const bundle = <T extends object>(nls: T, locales?: Record<string, () => PromiseOrValue<object>>) : { | ||
cin
|
r122 | i18n: (this: void, locale?: string) => T; | ||
define: (this: void, pack: Partial<T>) => object; | ||||
load: (this: void, id: string, require: Require, cb: OnLoad, config: {isBuild?: boolean}) => void; | ||||
cin
|
r120 | } => { | ||
cin
|
r65 | const nlsBundle = new NlsBundle(nls, locales); | ||
const fn = (_locale?: string) => { | ||||
const locale = _locale || sysLocale; | ||||
const result = nlsBundle.getLocale(locale); | ||||
if (isPromise(result)) | ||||
throw new Error(`The bundle '${locale}' isn't loaded`); | ||||
else | ||||
return result; | ||||
}; | ||||
cin
|
r120 | fn.i18n = fn; | ||
cin
|
r122 | fn.nls = fn; | ||
cin
|
r120 | fn.define = (pack: Partial<T>): object => pack; | ||
cin
|
r109 | fn.load = async (id: string, require: Require, cb: OnLoad, config: {isBuild?: boolean}) => { | ||
cin
|
r65 | const locale = id || sysLocale; | ||
if (config && config.isBuild) { | ||||
cb(); | ||||
} else { | ||||
try { | ||||
await nlsBundle.getLocale(locale); | ||||
cb(); | ||||
} catch (e) { | ||||
if(cb.error) { | ||||
cb.error(e); | ||||
} else { | ||||
// in case the loader doesn't support error reporting | ||||
trace.error("Error loading {0}: {1}", locale, e); | ||||
} | ||||
} | ||||
} | ||||
}; | ||||
return fn; | ||||
cin
|
r120 | }; | ||