diff options
author | Florian Dold <florian.dold@gmail.com> | 2017-05-23 14:29:34 +0200 |
---|---|---|
committer | Florian Dold <florian.dold@gmail.com> | 2017-05-23 14:29:34 +0200 |
commit | 46776d0c309572f54b5c0d34026bd28296bf1a15 (patch) | |
tree | d547362bcd7748ee1f1a1b5be274880e9b1ed5eb | |
parent | 039ab7baef6e1b3a32bd3c4e798672f7626d7807 (diff) |
remove debug logging, add comments
-rw-r--r-- | src/i18n.tsx | 115 | ||||
-rw-r--r-- | webpack.config.js | 3 |
2 files changed, 33 insertions, 85 deletions
diff --git a/src/i18n.tsx b/src/i18n.tsx index aa26407d9..8a31b2d91 100644 --- a/src/i18n.tsx +++ b/src/i18n.tsx @@ -14,21 +14,14 @@ TALER; see the file COPYING. If not, see <http://www.gnu.org/licenses/> */ -"use strict"; +/** + * Translation helpers for React components and template literals. + */ import * as jedLib from "jed"; import {strings} from "./i18n/strings"; - import * as React from "react"; -console.log("jed:", jedLib); - -/** - * Information about the last two i18n results, used by plural() - * 2-element array, each element contains { stringFound: boolean, pluralValue: number } - */ -const i18nResult = [] as any; - let lang: string; try { lang = chrome.i18n.getUILanguage(); @@ -47,23 +40,6 @@ if (!strings[lang]) { let jed = new jedLib.Jed(strings[lang]); -class PluralNumber { - n: number; - - constructor(n: number) { - this.n = n; - } - - valueOf () { - return this.n; - } - - toString () { - return this.n.toString(); - } -} - - /** * Convert template strings to a msgid */ @@ -80,73 +56,19 @@ function toI18nString(strings: ReadonlyArray<string>) { /** - * Use the first number in values to determine plural form - */ -function getPluralValue (values: any) { - let n = null; - for (let i = 0; i < values.length; i++) { - if ("number" === typeof values[i] || values[i] instanceof PluralNumber) { - if (null === n || values[i] instanceof PluralNumber) { - n = values[i].valueOf(); - } - } - } - return (null === n) ? 1 : n; -} - - -/** - * Store information about the result of the last to i18n(). - * - * @param i18nString the string template as found in i18n.strings - * @param pluralValue value returned by getPluralValue() - */ -function setI18nResult (i18nString: string, pluralValue: number) { - i18nResult[1] = i18nResult[0]; - i18nResult[0] = { - stringFound: i18nString in strings[lang].locale_data[lang], - pluralValue: pluralValue - }; -} - - -/** * Internationalize a string template with arbitrary serialized values. */ export function str(strings: TemplateStringsArray, ...values: any[]) { let str = toI18nString(strings); - let n = getPluralValue(values); - let tr = jed.translate(str).ifPlural(n, str).fetch(...values); - - setI18nResult(str, n); + let tr = jed.translate(str).ifPlural(1, str).fetch(...values); return tr; } -/** - * Pluralize based on first numeric parameter in the template. - * @todo The plural argument is used for extraction by pogen.js - */ -function plural(singular: any, plural: any) { - if (i18nResult[1].stringFound) { // string found in translation file? - // 'singular' has the correctly translated & pluralized text - return singular; - } else { - // return appropriate form based on value found in 'singular' - return (1 == i18nResult[1].pluralValue) ? singular : plural; - } -}; - interface TranslateSwitchProps { target: number; } -/** - * Return a number that is used to determine the plural form for a template. - */ -function number(n : number) { - return new PluralNumber (n); -}; function stringifyChildren(children: any): string { let n = 1; @@ -174,6 +96,16 @@ interface TranslateProps { } +/** + * Translate text node children of this component. + * If a child component might produce a text node, it must be wrapped + * in a another non-text element. + * + * Example: + * <Translate> + * Hello. Your score is <span><PlayerScore player={player} /></span> + * </Translate> + */ export class Translate extends React.Component<TranslateProps,void> { render(): JSX.Element { let s = stringifyChildren(this.props.children); @@ -208,6 +140,16 @@ export class Translate extends React.Component<TranslateProps,void> { } +/** + * Switch translation based on singular or plural based on the target prop. + * Should only contain TranslateSingular and TransplatePlural as children. + * + * Example: + * <TranslateSwitch target={n}> + * <TranslateSingular>I have {n} apple.</TranslateSingular> + * <TranslatePlural>I have {n} apples.</TranslatePlural> + * </TranslateSwitch> + */ export class TranslateSwitch extends React.Component<TranslateSwitchProps,void>{ render(): JSX.Element { let singular: React.ReactElement<TranslationPluralProps> | undefined; @@ -228,7 +170,7 @@ export class TranslateSwitch extends React.Component<TranslateSwitchProps,void>{ return React.createElement("span", {}, ["translation not found"]); } singular.props.target = this.props.target; - plural.props.target = this.props.target;; + plural.props.target = this.props.target; // We're looking up the translation based on the // singular, even if we must use the plural form. return singular; @@ -240,7 +182,9 @@ interface TranslationPluralProps { target: number; } - +/** + * @see TranslateSwitch + */ export class TranslatePlural extends React.Component<TranslationPluralProps,void> { render(): JSX.Element { let s = stringifyChildren(this.props.children); @@ -270,6 +214,9 @@ export class TranslatePlural extends React.Component<TranslationPluralProps,void } +/** + * @see TranslateSwitch + */ export class TranslateSingular extends React.Component<TranslationPluralProps,void> { render(): JSX.Element { let s = stringifyChildren(this.props.children); diff --git a/webpack.config.js b/webpack.config.js index 429591220..02b702a8c 100644 --- a/webpack.config.js +++ b/webpack.config.js @@ -9,7 +9,8 @@ module.exports = function (env) { output: { filename: '[name]-bundle.js', chunkFilename: "[id].chunk.js", - path: path.resolve(__dirname, "dist") + path: path.resolve(__dirname, "dist"), + devtoolModuleFilenameTemplate: "file://[absolute-resource-path]", }, module: { noParse: /taler-emscripten-lib/, |