aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFlorian Dold <florian.dold@gmail.com>2017-05-23 14:29:34 +0200
committerFlorian Dold <florian.dold@gmail.com>2017-05-23 14:29:34 +0200
commit46776d0c309572f54b5c0d34026bd28296bf1a15 (patch)
treed547362bcd7748ee1f1a1b5be274880e9b1ed5eb
parent039ab7baef6e1b3a32bd3c4e798672f7626d7807 (diff)
remove debug logging, add comments
-rw-r--r--src/i18n.tsx115
-rw-r--r--webpack.config.js3
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/,