summaryrefslogtreecommitdiff
path: root/packages/taler-util/src/i18n.ts
diff options
context:
space:
mode:
Diffstat (limited to 'packages/taler-util/src/i18n.ts')
-rw-r--r--packages/taler-util/src/i18n.ts40
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,
};
-