diff options
Diffstat (limited to 'packages/taler-util/src/i18n.ts')
-rw-r--r-- | packages/taler-util/src/i18n.ts | 40 |
1 files changed, 27 insertions, 13 deletions
diff --git a/packages/taler-util/src/i18n.ts b/packages/taler-util/src/i18n.ts index 227798f48..f43f543ea 100644 --- a/packages/taler-util/src/i18n.ts +++ b/packages/taler-util/src/i18n.ts @@ -10,12 +10,12 @@ export let jed: any = undefined; * Set up jed library for internationalization, * based on browser language settings. */ -export function setupI18n(lang: string, strings: { [s: string]: any }): any { +export function setupI18n(lang: string, strings: { [s: string]: any }): void { lang = lang.replace("_", "-"); if (!strings[lang]) { - lang = "en-US"; - logger.warn(`language ${lang} not found, defaulting to english`); + strings[lang] = {}; + // logger.warn(`language ${lang} not found, defaulting to source strings`); } jed = new jedLib.Jed(strings[lang]); } @@ -28,10 +28,13 @@ export function internalSetStrings(langStrings: any): void { jed = new jedLib.Jed(langStrings); } +declare const __translated: unique symbol; +export type TranslatedString = string & { [__translated]: true }; + /** * Convert template strings to a msgid */ -function toI18nString(stringSeq: ReadonlyArray<string>): string { +function toI18nString(stringSeq: ReadonlyArray<string>): TranslatedString { let s = ""; for (let i = 0; i < stringSeq.length; i++) { s += stringSeq[i]; @@ -39,13 +42,16 @@ function toI18nString(stringSeq: ReadonlyArray<string>): string { s += `%${i + 1}$s`; } } - return s; + return s as TranslatedString; } /** * Internationalize a string template with arbitrary serialized values. */ -export function singular(stringSeq: TemplateStringsArray, ...values: any[]): string { +export function singular( + stringSeq: TemplateStringsArray, + ...values: any[] +): TranslatedString { const s = toI18nString(stringSeq); const tr = jed .translate(s) @@ -60,21 +66,30 @@ export function singular(stringSeq: TemplateStringsArray, ...values: any[]): str export function translate( stringSeq: TemplateStringsArray, ...values: any[] -): any[] { +): TranslatedString[] { const s = toI18nString(stringSeq); if (!s) return []; - const translation: string = jed.ngettext(s, s, 1); + const translation: TranslatedString = jed.ngettext(s, s, 1); return replacePlaceholderWithValues(translation, values); } /** * Internationalize a string template without serializing */ -export function Translate({ children, ...rest }: { children: any }): any { +export function Translate({ + children, + debug, +}: { + children: any; + debug?: boolean; +}): any { const c = [].concat(children); const s = stringifyArray(c); if (!s) return []; - const translation: string = jed.ngettext(s, s, 1); + const translation: TranslatedString = jed.ngettext(s, s, 1); + if (debug) { + console.log("looking for ", s, "got", translation); + } return replacePlaceholderWithValues(translation, c); } @@ -92,12 +107,12 @@ export function getJsonI18n<K extends string>( export function getTranslatedArray(array: Array<any>) { const s = stringifyArray(array); - const translation: string = jed.ngettext(s, s, 1); + const translation: TranslatedString = jed.ngettext(s, s, 1); return replacePlaceholderWithValues(translation, array); } function replacePlaceholderWithValues( - translation: string, + translation: TranslatedString, childArray: Array<any>, ): Array<any> { const tr = translation.split(/%(\d+)\$s/); @@ -145,4 +160,3 @@ export const i18n = { Translate, translate, }; - |