modularize i18n

This commit is contained in:
Florian Dold 2016-11-27 22:13:24 +01:00
parent f72af162a0
commit d57b6a4bcc
No known key found for this signature in database
GPG Key ID: D2E4F00F29D02A4B
25 changed files with 519 additions and 532 deletions

1
.gitignore vendored
View File

@ -2,7 +2,6 @@ src/**/*.js.map
src/**/*.js
!src/vendor/*.js
!src/i18n/*.js
!src/content_scripts/*.js
!src/module-trampoline.js
!src/emscripten/taler-emscripten-lib.js

View File

@ -6,15 +6,15 @@ gulp = node_modules/gulp/bin/gulp.js
tsc = node_modules/typescript/bin/tsc
po2json = node_modules/po2json/bin/po2json
.PHONY: pogen src/i18n/strings.js yarn-install
.PHONY: pogen src/i18n/strings.ts yarn-install
package-stable: tsc i18n yarn-install
package-stable: tsc yarn-install
$(gulp) package-stable
package-unstable: tsc i18n yarn-install
package-unstable: tsc yarn-install
$(gulp) package-unstable
tsc: tsconfig.json yarn-install
tsc: tsconfig.json yarn-install src/i18n/strings.ts
$(tsc)
yarn-install:
@ -23,8 +23,6 @@ yarn-install:
tsconfig.json: gulpfile.js yarn-install
$(gulp) tsconfig
i18n: pogen msgmerge src/i18n/strings.js
pogen/pogen.js: pogen/pogen.ts pogen/tsconfig.json
cd pogen; ../$(tsc)
@ -44,12 +42,13 @@ msgmerge:
dist:
$(gulp) srcdist
src/i18n/strings.js: # $(ts)
cp src/i18n/strings-prelude.js src/i18n/strings.js
src/i18n/strings.ts: pogen msgmerge
cp src/i18n/strings-prelude src/i18n/strings.ts
for pofile in src/i18n/*.po; do \
b=`basename $$pofile`; \
lang=$${b%%.po}; \
$(po2json) -F -f jed1.x -d $$lang $$pofile $$pofile.json; \
(echo -n "i18n.strings['$$lang'] = "; cat $$pofile.json; echo ';') >> $@; \
(echo -n "strings['$$lang'] = "; cat $$pofile.json; echo ';') >> $@; \
rm $$pofile.json; \
done

View File

@ -39,7 +39,7 @@
"serve-static": "^1.11.1",
"systemjs": "^0.19.14",
"through2": "^2.0.1",
"typescript": "^2.2.0-dev",
"typescript": "next",
"typhonjs-istanbul-instrument-jspm": "^0.1.0",
"vinyl": "^2.0.0",
"vinyl-fs": "^2.4.3"

View File

@ -16,26 +16,26 @@
"use strict";
document.addEventListener(
"DOMContentLoaded",
function () {
try {
document.body.lang = chrome.i18n.getUILanguage();
} catch (e) {
// chrome.* not available?
}
});
import {default as Jed} from "src/vendor/jed";
import {strings} from "src/i18n/strings";
declare var i18n: any;
console.log("jed:", Jed);
/**
* Information about the last two i18n results, used by plural()
* 2-element array, each element contains { stringFound: boolean, pluralValue: number }
*/
var i18nResult = [] as any;
const i18nResult = [] as any;
const JedModule: any = (window as any)["Jed"];
var jed: any;
let lang: string;
try {
lang = chrome.i18n.getUILanguage();
} catch (e) {
lang = "en";
console.warn("i18n default language not available");
}
let jed = new Jed(strings[lang]);
class PluralNumber {
@ -55,28 +55,10 @@ class PluralNumber {
}
/**
* Initialize Jed
*/
function init () {
if ("object" === typeof jed) {
return;
}
if ("function" !== typeof JedModule) {
return;
}
if (!(i18n.lang in i18n.strings)) {
i18n.lang = "en-US";
return;
}
jed = new JedModule(i18n.strings[i18n.lang]);
}
/**
* Convert template strings to a msgid
*/
function toI18nString(strings: string[]) {
function toI18nString(strings: ReadonlyArray<string>) {
let str = "";
for (let i = 0; i < strings.length; i++) {
str += strings[i];
@ -113,7 +95,7 @@ function getPluralValue (values: any) {
function setI18nResult (i18nString: string, pluralValue: number) {
i18nResult[1] = i18nResult[0];
i18nResult[0] = {
stringFound: i18nString in i18n.strings[i18n.lang].locale_data[i18n.lang],
stringFound: i18nString in strings[lang].locale_data[lang],
pluralValue: pluralValue
};
}
@ -122,35 +104,21 @@ function setI18nResult (i18nString: string, pluralValue: number) {
/**
* Internationalize a string template with arbitrary serialized values.
*/
var i18n = (function i18n(strings: string[], ...values: any[]) {
init();
//console.log('i18n:', strings, values);
if ("object" !== typeof jed) {
// Fallback implementation in case i18n lib is not there
return String.raw(strings as any, ...values);
}
let str = toI18nString (strings);
let n = getPluralValue (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);
setI18nResult(str, n);
return tr;
}) as any;
try {
i18n.lang = chrome.i18n.getUILanguage();
} catch (e) {
console.warn("i18n default language not available");
}
i18n.strings = {};
/**
* Pluralize based on first numeric parameter in the template.
* @todo The plural argument is used for extraction by pogen.js
*/
i18n.plural = function (singular: any, plural: any) {
function plural(singular: any, plural: any) {
if (i18nResult[1].stringFound) { // string found in translation file?
// 'singular' has the correctly translated & pluralized text
return singular;
@ -167,7 +135,7 @@ interface TranslateSwitchProps {
/**
* Return a number that is used to determine the plural form for a template.
*/
i18n.number = function (n : number) {
function number(n : number) {
return new PluralNumber (n);
};
@ -196,12 +164,9 @@ interface TranslateProps {
wrapProps?: any;
}
i18n.Translate = class extends React.Component<TranslateProps,void> {
export class Translate extends React.Component<TranslateProps,void> {
render(): JSX.Element {
init();
if (typeof jed !== "object") {
return <div>{this.props.children}</div>;
}
let s = stringifyChildren(this.props.children);
let tr = jed.ngettext(s, s, 1).split(/%(\d+)\$s/).filter((e: any, i: number) => i % 2 == 0);
let childArray = React.Children.toArray(this.props.children!);
@ -231,17 +196,18 @@ i18n.Translate = class extends React.Component<TranslateProps,void> {
}
}
i18n.TranslateSwitch = class extends React.Component<TranslateSwitchProps,void>{
export class TranslateSwitch extends React.Component<TranslateSwitchProps,void>{
render(): JSX.Element {
let singular: React.ReactElement<TranslationPluralProps> | undefined;
let plural: React.ReactElement<TranslationPluralProps> | undefined;
let children = this.props.children;
if (children) {
React.Children.forEach(children, (child: any) => {
if (child.type == i18n.TranslatePlural) {
if (child.type == TranslatePlural) {
plural = child;
}
if (child.type == i18n.TranslateSingular) {
if (child.type == TranslateSingular) {
singular = child;
}
});
@ -250,33 +216,22 @@ i18n.TranslateSwitch = class extends React.Component<TranslateSwitchProps,void>{
console.error("translation not found");
return React.createElement("span", {}, ["translation not found"]);
}
init();
singular.props.target = this.props.target;
plural.props.target = this.props.target;;
if (typeof "jed" !== "object") {
if (this.props.target == 1) {
return singular;
} else {
return plural;
}
} else {
// We're looking up the translation based on the
// singular, even if we must use the plural form.
return singular;
}
// We're looking up the translation based on the
// singular, even if we must use the plural form.
return singular;
}
}
interface TranslationPluralProps {
target: number;
}
class TranslatePlural extends React.Component<TranslationPluralProps,void> {
export class TranslatePlural extends React.Component<TranslationPluralProps,void> {
render(): JSX.Element {
init();
if (typeof jed !== "object") {
return <div>{this.props.children}</div>;
}
let s = stringifyChildren(this.props.children);
let tr = jed.ngettext(s, s, 1).split(/%(\d+)\$s/).filter((e: any, i: number) => i % 2 == 0);
let childArray = React.Children.toArray(this.props.children!);
@ -303,14 +258,9 @@ class TranslatePlural extends React.Component<TranslationPluralProps,void> {
}
}
i18n.TranslatePlural = TranslatePlural;
class TranslateSingular extends React.Component<TranslationPluralProps,void> {
export class TranslateSingular extends React.Component<TranslationPluralProps,void> {
render(): JSX.Element {
init();
if (typeof jed !== "object") {
return <div>{this.props.children}</div>;
}
let s = stringifyChildren(this.props.children);
let tr = jed.ngettext(s, s, 1).split(/%(\d+)\$s/).filter((e: any, i: number) => i % 2 == 0);
let childArray = React.Children.toArray(this.props.children!);
@ -336,5 +286,3 @@ class TranslateSingular extends React.Component<TranslationPluralProps,void> {
return <div>{result}</div>;
}
}
i18n.TranslateSingular = TranslateSingular;

View File

@ -27,27 +27,27 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
#: src/pages/confirm-contract.tsx:61
#: src/pages/confirm-contract.tsx:62
#, c-format
msgid "show more details\n"
msgstr ""
#: src/pages/confirm-contract.tsx:75
#: src/pages/confirm-contract.tsx:76
#, c-format
msgid "Accepted exchanges:"
msgstr ""
#: src/pages/confirm-contract.tsx:80
#: src/pages/confirm-contract.tsx:81
#, c-format
msgid "Exchanges in the wallet:"
msgstr ""
#: src/pages/confirm-contract.tsx:156
#: src/pages/confirm-contract.tsx:157
#, c-format
msgid "You have insufficient funds of the requested currency in your wallet."
msgstr ""
#: src/pages/confirm-contract.tsx:157
#: src/pages/confirm-contract.tsx:158
#, c-format
msgid ""
"You do not have any funds from an exchange that is accepted by this "
@ -55,196 +55,203 @@ msgid ""
"wallet."
msgstr ""
#: src/pages/confirm-create-reserve.tsx:105
#: src/pages/confirm-create-reserve.tsx:106
#, fuzzy, c-format
msgid "Withdrawal fees: %1$s"
msgstr "Abheben bei %1$s"
#: src/pages/confirm-create-reserve.tsx:106
#: src/pages/confirm-create-reserve.tsx:107
#, c-format
msgid "Rounding loss: %1$s"
msgstr ""
#: src/pages/confirm-create-reserve.tsx:109
#: src/pages/confirm-create-reserve.tsx:110
#, c-format
msgid "# Coins"
msgstr ""
#: src/pages/confirm-create-reserve.tsx:110
#: src/pages/confirm-create-reserve.tsx:111
#, c-format
msgid "Value"
msgstr ""
#: src/pages/confirm-create-reserve.tsx:111
#: src/pages/confirm-create-reserve.tsx:112
#, fuzzy, c-format
msgid "Withdraw Fee"
msgstr "Abheben bei %1$s"
#: src/pages/confirm-create-reserve.tsx:112
#: src/pages/confirm-create-reserve.tsx:113
#, c-format
msgid "Refresh Fee"
msgstr ""
#: src/pages/confirm-create-reserve.tsx:113
#: src/pages/confirm-create-reserve.tsx:114
#, c-format
msgid "Deposit Fee"
msgstr ""
#: src/pages/confirm-create-reserve.tsx:146
#: src/pages/confirm-create-reserve.tsx:147
#, fuzzy, c-format
msgid "Withdraw fees:"
msgstr "Abheben bei %1$s"
#: src/pages/confirm-create-reserve.tsx:180
#: src/pages/confirm-create-reserve.tsx:182
#, c-format
msgid "view fee structure / select different exchange provider"
msgstr ""
#: src/pages/confirm-create-reserve.tsx:194
#: src/pages/confirm-create-reserve.tsx:196
#, c-format
msgid "Detailed Fee Structure"
msgstr ""
#: src/pages/confirm-create-reserve.tsx:210
#: src/pages/confirm-create-reserve.tsx:212
#, c-format
msgid ""
"The exchange provider will charge\n"
" %1$s in fees.\n"
msgstr ""
#: src/pages/confirm-create-reserve.tsx:222
#: src/pages/confirm-create-reserve.tsx:224
#, c-format
msgid ""
"Waiting for a response from\n"
" %1$s"
msgstr ""
#: src/pages/confirm-create-reserve.tsx:233
#: src/pages/confirm-create-reserve.tsx:235
#, c-format
msgid "A problem occured, see below."
msgstr ""
#: src/pages/confirm-create-reserve.tsx:239
#: src/pages/confirm-create-reserve.tsx:241
#, c-format
msgid ""
"Information about fees will be available when an exchange provider is "
"selected."
msgstr ""
#: src/pages/confirm-create-reserve.tsx:247
#: src/pages/confirm-create-reserve.tsx:249
#, c-format
msgid "You are about to withdraw %1$s from your bank account into your wallet."
msgstr ""
#: src/pages/confirm-create-reserve.tsx:256
#: src/pages/confirm-create-reserve.tsx:258
#, c-format
msgid "Accept fees and withdraw"
msgstr ""
#: src/pages/confirm-create-reserve.tsx:278
#: src/pages/confirm-create-reserve.tsx:280
#, c-format
msgid "Error: URL is empty"
msgstr ""
#: src/pages/confirm-create-reserve.tsx:286
#: src/pages/confirm-create-reserve.tsx:288
#, c-format
msgid "Error: URL may not be relative"
msgstr ""
#: src/pages/confirm-create-reserve.tsx:344
#: src/pages/confirm-create-reserve.tsx:347
#, c-format
msgid ""
"Oops, something went wrong. The wallet responded with error status (%1$s)."
msgstr ""
#: src/pages/confirm-create-reserve.tsx:371
#: src/pages/confirm-create-reserve.tsx:374
#, c-format
msgid "Checking URL, please wait ..."
msgstr ""
#: src/pages/confirm-create-reserve.tsx:385
#: src/pages/confirm-create-reserve.tsx:388
#, c-format
msgid "Can't parse amount: %1$s"
msgstr ""
#: src/pages/confirm-create-reserve.tsx:393
#: src/pages/confirm-create-reserve.tsx:396
#, c-format
msgid "Can't parse wire_types: %1$s"
msgstr ""
#. TODO:generic error reporting function or component.
#: src/pages/confirm-create-reserve.tsx:410
#: src/pages/confirm-create-reserve.tsx:413
#, c-format
msgid "Fatal error: \"%1$s\"."
msgstr ""
#: src/popup/popup.tsx:173
#: src/popup/popup.tsx:172
#, c-format
msgid "Balance"
msgstr "Saldo"
#: src/popup/popup.tsx:176
#: src/popup/popup.tsx:175
#, c-format
msgid "History"
msgstr "Verlauf"
#: src/popup/popup.tsx:179
#: src/popup/popup.tsx:178
#, c-format
msgid "Debug"
msgstr "Debug"
#: src/popup/popup.tsx:239
#: src/popup/popup.tsx:238
#, c-format
msgid "help"
msgstr ""
#: src/popup/popup.tsx:244
#: src/popup/popup.tsx:243
#, fuzzy, c-format
msgid ""
"You have no balance to show. Need some\n"
" %1$s getting started?\n"
msgstr "Sie haben kein Digitalgeld. Wollen Sie %1$s? abheben?"
#: src/popup/popup.tsx:261
#: src/popup/popup.tsx:260
#, c-format
msgid "%1$s incoming\n"
msgstr ""
#: src/popup/popup.tsx:274
#: src/popup/popup.tsx:273
#, c-format
msgid "%1$s being spent\n"
msgstr ""
#: src/popup/popup.tsx:300
#: src/popup/popup.tsx:299
#, c-format
msgid "Error: could not retrieve balance information."
msgstr ""
#: src/popup/popup.tsx:340
#: src/popup/popup.tsx:337
#, fuzzy, c-format
msgid "Bank requested reserve (%1$s) for %2$s."
msgid "Bank requested reserve (%1$s) for%2$s.\n"
msgstr "Bank bestätig anlegen der Reserve (%1$s) bei %2$s"
#: src/popup/popup.tsx:351
#: src/popup/popup.tsx:346
#, fuzzy, c-format
msgid "Started to withdraw %1$s from %2$s (%3$s)."
msgid ""
"Started to withdraw\n"
" %1$s from%2$s(%3$s).\n"
msgstr "Reserve (%1$s) mit %2$s bei %3$s erzeugt"
#: src/popup/popup.tsx:361
#: src/popup/popup.tsx:358
#, c-format
msgid "Merchant %1$s offered contract %2$s."
msgid "Merchant%1$soffered contract%2$s;\n"
msgstr ""
#: src/popup/popup.tsx:371
#: src/popup/popup.tsx:368
#, fuzzy, c-format
msgid "Withdrew %1$s from %2$s (%3$s)."
msgid "Withdrew%1$sfrom%2$s(%3$s).\n"
msgstr "Reserve (%1$s) mit %2$s bei %3$s erzeugt"
#: src/popup/popup.tsx:382
#: src/popup/popup.tsx:379
#, fuzzy, c-format
msgid "Paid %1$s to merchant %2$s. (%3$s)"
msgid "Paid%1$sto merchant%2$s. (%3$s)\n"
msgstr "Reserve (%1$s) mit %2$s bei %3$s erzeugt"
#: src/popup/popup.tsx:386
#, c-format
msgid "Unknown event (%1$s)"
msgstr ""
#: src/popup/popup.tsx:429
#, c-format
msgid "Error: could not retrieve event history"
@ -255,20 +262,19 @@ msgstr ""
msgid "Your wallet has no events recorded."
msgstr "Ihre Geldbörse verzeichnet keine Vorkommnisse."
#: src/renderHtml.tsx:42
#: src/renderHtml.tsx:38
#, fuzzy, c-format
msgid "The merchant%1$swants to enter a contract over%2$s with you.\n"
msgstr ""
"%1$s\n"
" möchte einen Vertrag über %2$s\n"
" mit Ihnen abschließen."
#: src/renderHtml.tsx:43
#, fuzzy, c-format
msgid "You are about to purchase:"
msgstr "Sie sind dabei, Folgendes zu kaufen:"
#~ msgid ""
#~ "%1$s\n"
#~ " wants to enter a contract over %2$s\n"
#~ " with you."
#~ msgstr ""
#~ "%1$s\n"
#~ " möchte einen Vertrag über %2$s\n"
#~ " mit Ihnen abschließen."
#~ msgid "Confirm Payment"
#~ msgstr "Bezahlung bestätigen"

View File

@ -27,27 +27,27 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
#: src/pages/confirm-contract.tsx:61
#: src/pages/confirm-contract.tsx:62
#, c-format
msgid "show more details\n"
msgstr ""
#: src/pages/confirm-contract.tsx:75
#: src/pages/confirm-contract.tsx:76
#, c-format
msgid "Accepted exchanges:"
msgstr ""
#: src/pages/confirm-contract.tsx:80
#: src/pages/confirm-contract.tsx:81
#, c-format
msgid "Exchanges in the wallet:"
msgstr ""
#: src/pages/confirm-contract.tsx:156
#: src/pages/confirm-contract.tsx:157
#, c-format
msgid "You have insufficient funds of the requested currency in your wallet."
msgstr ""
#: src/pages/confirm-contract.tsx:157
#: src/pages/confirm-contract.tsx:158
#, c-format
msgid ""
"You do not have any funds from an exchange that is accepted by this "
@ -55,194 +55,201 @@ msgid ""
"wallet."
msgstr ""
#: src/pages/confirm-create-reserve.tsx:105
#: src/pages/confirm-create-reserve.tsx:106
#, c-format
msgid "Withdrawal fees: %1$s"
msgstr ""
#: src/pages/confirm-create-reserve.tsx:106
#: src/pages/confirm-create-reserve.tsx:107
#, c-format
msgid "Rounding loss: %1$s"
msgstr ""
#: src/pages/confirm-create-reserve.tsx:109
#: src/pages/confirm-create-reserve.tsx:110
#, c-format
msgid "# Coins"
msgstr ""
#: src/pages/confirm-create-reserve.tsx:110
#: src/pages/confirm-create-reserve.tsx:111
#, c-format
msgid "Value"
msgstr ""
#: src/pages/confirm-create-reserve.tsx:111
#: src/pages/confirm-create-reserve.tsx:112
#, c-format
msgid "Withdraw Fee"
msgstr ""
#: src/pages/confirm-create-reserve.tsx:112
#: src/pages/confirm-create-reserve.tsx:113
#, c-format
msgid "Refresh Fee"
msgstr ""
#: src/pages/confirm-create-reserve.tsx:113
#: src/pages/confirm-create-reserve.tsx:114
#, c-format
msgid "Deposit Fee"
msgstr ""
#: src/pages/confirm-create-reserve.tsx:146
#: src/pages/confirm-create-reserve.tsx:147
#, c-format
msgid "Withdraw fees:"
msgstr ""
#: src/pages/confirm-create-reserve.tsx:180
#: src/pages/confirm-create-reserve.tsx:182
#, c-format
msgid "view fee structure / select different exchange provider"
msgstr ""
#: src/pages/confirm-create-reserve.tsx:194
#: src/pages/confirm-create-reserve.tsx:196
#, c-format
msgid "Detailed Fee Structure"
msgstr ""
#: src/pages/confirm-create-reserve.tsx:210
#: src/pages/confirm-create-reserve.tsx:212
#, c-format
msgid ""
"The exchange provider will charge\n"
" %1$s in fees.\n"
msgstr ""
#: src/pages/confirm-create-reserve.tsx:222
#: src/pages/confirm-create-reserve.tsx:224
#, c-format
msgid ""
"Waiting for a response from\n"
" %1$s"
msgstr ""
#: src/pages/confirm-create-reserve.tsx:233
#: src/pages/confirm-create-reserve.tsx:235
#, c-format
msgid "A problem occured, see below."
msgstr ""
#: src/pages/confirm-create-reserve.tsx:239
#: src/pages/confirm-create-reserve.tsx:241
#, c-format
msgid ""
"Information about fees will be available when an exchange provider is "
"selected."
msgstr ""
#: src/pages/confirm-create-reserve.tsx:247
#: src/pages/confirm-create-reserve.tsx:249
#, c-format
msgid "You are about to withdraw %1$s from your bank account into your wallet."
msgstr ""
#: src/pages/confirm-create-reserve.tsx:256
#: src/pages/confirm-create-reserve.tsx:258
#, c-format
msgid "Accept fees and withdraw"
msgstr ""
#: src/pages/confirm-create-reserve.tsx:278
#: src/pages/confirm-create-reserve.tsx:280
#, c-format
msgid "Error: URL is empty"
msgstr ""
#: src/pages/confirm-create-reserve.tsx:286
#: src/pages/confirm-create-reserve.tsx:288
#, c-format
msgid "Error: URL may not be relative"
msgstr ""
#: src/pages/confirm-create-reserve.tsx:344
#: src/pages/confirm-create-reserve.tsx:347
#, c-format
msgid ""
"Oops, something went wrong. The wallet responded with error status (%1$s)."
msgstr ""
#: src/pages/confirm-create-reserve.tsx:371
#: src/pages/confirm-create-reserve.tsx:374
#, c-format
msgid "Checking URL, please wait ..."
msgstr ""
#: src/pages/confirm-create-reserve.tsx:385
#: src/pages/confirm-create-reserve.tsx:388
#, c-format
msgid "Can't parse amount: %1$s"
msgstr ""
#: src/pages/confirm-create-reserve.tsx:393
#: src/pages/confirm-create-reserve.tsx:396
#, c-format
msgid "Can't parse wire_types: %1$s"
msgstr ""
#. TODO:generic error reporting function or component.
#: src/pages/confirm-create-reserve.tsx:410
#: src/pages/confirm-create-reserve.tsx:413
#, c-format
msgid "Fatal error: \"%1$s\"."
msgstr ""
#: src/popup/popup.tsx:173
#: src/popup/popup.tsx:172
#, c-format
msgid "Balance"
msgstr ""
#: src/popup/popup.tsx:176
#: src/popup/popup.tsx:175
#, c-format
msgid "History"
msgstr ""
#: src/popup/popup.tsx:179
#: src/popup/popup.tsx:178
#, c-format
msgid "Debug"
msgstr ""
#: src/popup/popup.tsx:239
#: src/popup/popup.tsx:238
#, c-format
msgid "help"
msgstr ""
#: src/popup/popup.tsx:244
#: src/popup/popup.tsx:243
#, c-format
msgid ""
"You have no balance to show. Need some\n"
" %1$s getting started?\n"
msgstr ""
#: src/popup/popup.tsx:261
#: src/popup/popup.tsx:260
#, c-format
msgid "%1$s incoming\n"
msgstr ""
#: src/popup/popup.tsx:274
#: src/popup/popup.tsx:273
#, c-format
msgid "%1$s being spent\n"
msgstr ""
#: src/popup/popup.tsx:300
#: src/popup/popup.tsx:299
#, c-format
msgid "Error: could not retrieve balance information."
msgstr ""
#: src/popup/popup.tsx:340
#: src/popup/popup.tsx:337
#, c-format
msgid "Bank requested reserve (%1$s) for %2$s."
msgid "Bank requested reserve (%1$s) for%2$s.\n"
msgstr ""
#: src/popup/popup.tsx:351
#: src/popup/popup.tsx:346
#, c-format
msgid "Started to withdraw %1$s from %2$s (%3$s)."
msgid ""
"Started to withdraw\n"
" %1$s from%2$s(%3$s).\n"
msgstr ""
#: src/popup/popup.tsx:361
#: src/popup/popup.tsx:358
#, c-format
msgid "Merchant %1$s offered contract %2$s."
msgid "Merchant%1$soffered contract%2$s;\n"
msgstr ""
#: src/popup/popup.tsx:371
#: src/popup/popup.tsx:368
#, c-format
msgid "Withdrew %1$s from %2$s (%3$s)."
msgid "Withdrew%1$sfrom%2$s(%3$s).\n"
msgstr ""
#: src/popup/popup.tsx:382
#: src/popup/popup.tsx:379
#, c-format
msgid "Paid %1$s to merchant %2$s. (%3$s)"
msgid "Paid%1$sto merchant%2$s. (%3$s)\n"
msgstr ""
#: src/popup/popup.tsx:386
#, c-format
msgid "Unknown event (%1$s)"
msgstr ""
#: src/popup/popup.tsx:429
@ -255,7 +262,12 @@ msgstr ""
msgid "Your wallet has no events recorded."
msgstr ""
#: src/renderHtml.tsx:42
#: src/renderHtml.tsx:38
#, c-format
msgid "The merchant%1$swants to enter a contract over%2$s with you.\n"
msgstr ""
#: src/renderHtml.tsx:43
#, c-format
msgid "You are about to purchase:"
msgstr ""

View File

@ -27,27 +27,27 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
#: src/pages/confirm-contract.tsx:61
#: src/pages/confirm-contract.tsx:62
#, c-format
msgid "show more details\n"
msgstr ""
#: src/pages/confirm-contract.tsx:75
#: src/pages/confirm-contract.tsx:76
#, c-format
msgid "Accepted exchanges:"
msgstr ""
#: src/pages/confirm-contract.tsx:80
#: src/pages/confirm-contract.tsx:81
#, c-format
msgid "Exchanges in the wallet:"
msgstr ""
#: src/pages/confirm-contract.tsx:156
#: src/pages/confirm-contract.tsx:157
#, c-format
msgid "You have insufficient funds of the requested currency in your wallet."
msgstr ""
#: src/pages/confirm-contract.tsx:157
#: src/pages/confirm-contract.tsx:158
#, c-format
msgid ""
"You do not have any funds from an exchange that is accepted by this "
@ -55,194 +55,201 @@ msgid ""
"wallet."
msgstr ""
#: src/pages/confirm-create-reserve.tsx:105
#: src/pages/confirm-create-reserve.tsx:106
#, c-format
msgid "Withdrawal fees: %1$s"
msgstr ""
#: src/pages/confirm-create-reserve.tsx:106
#: src/pages/confirm-create-reserve.tsx:107
#, c-format
msgid "Rounding loss: %1$s"
msgstr ""
#: src/pages/confirm-create-reserve.tsx:109
#: src/pages/confirm-create-reserve.tsx:110
#, c-format
msgid "# Coins"
msgstr ""
#: src/pages/confirm-create-reserve.tsx:110
#: src/pages/confirm-create-reserve.tsx:111
#, c-format
msgid "Value"
msgstr ""
#: src/pages/confirm-create-reserve.tsx:111
#: src/pages/confirm-create-reserve.tsx:112
#, c-format
msgid "Withdraw Fee"
msgstr ""
#: src/pages/confirm-create-reserve.tsx:112
#: src/pages/confirm-create-reserve.tsx:113
#, c-format
msgid "Refresh Fee"
msgstr ""
#: src/pages/confirm-create-reserve.tsx:113
#: src/pages/confirm-create-reserve.tsx:114
#, c-format
msgid "Deposit Fee"
msgstr ""
#: src/pages/confirm-create-reserve.tsx:146
#: src/pages/confirm-create-reserve.tsx:147
#, c-format
msgid "Withdraw fees:"
msgstr ""
#: src/pages/confirm-create-reserve.tsx:180
#: src/pages/confirm-create-reserve.tsx:182
#, c-format
msgid "view fee structure / select different exchange provider"
msgstr ""
#: src/pages/confirm-create-reserve.tsx:194
#: src/pages/confirm-create-reserve.tsx:196
#, c-format
msgid "Detailed Fee Structure"
msgstr ""
#: src/pages/confirm-create-reserve.tsx:210
#: src/pages/confirm-create-reserve.tsx:212
#, c-format
msgid ""
"The exchange provider will charge\n"
" %1$s in fees.\n"
msgstr ""
#: src/pages/confirm-create-reserve.tsx:222
#: src/pages/confirm-create-reserve.tsx:224
#, c-format
msgid ""
"Waiting for a response from\n"
" %1$s"
msgstr ""
#: src/pages/confirm-create-reserve.tsx:233
#: src/pages/confirm-create-reserve.tsx:235
#, c-format
msgid "A problem occured, see below."
msgstr ""
#: src/pages/confirm-create-reserve.tsx:239
#: src/pages/confirm-create-reserve.tsx:241
#, c-format
msgid ""
"Information about fees will be available when an exchange provider is "
"selected."
msgstr ""
#: src/pages/confirm-create-reserve.tsx:247
#: src/pages/confirm-create-reserve.tsx:249
#, c-format
msgid "You are about to withdraw %1$s from your bank account into your wallet."
msgstr ""
#: src/pages/confirm-create-reserve.tsx:256
#: src/pages/confirm-create-reserve.tsx:258
#, c-format
msgid "Accept fees and withdraw"
msgstr ""
#: src/pages/confirm-create-reserve.tsx:278
#: src/pages/confirm-create-reserve.tsx:280
#, c-format
msgid "Error: URL is empty"
msgstr ""
#: src/pages/confirm-create-reserve.tsx:286
#: src/pages/confirm-create-reserve.tsx:288
#, c-format
msgid "Error: URL may not be relative"
msgstr ""
#: src/pages/confirm-create-reserve.tsx:344
#: src/pages/confirm-create-reserve.tsx:347
#, c-format
msgid ""
"Oops, something went wrong. The wallet responded with error status (%1$s)."
msgstr ""
#: src/pages/confirm-create-reserve.tsx:371
#: src/pages/confirm-create-reserve.tsx:374
#, c-format
msgid "Checking URL, please wait ..."
msgstr ""
#: src/pages/confirm-create-reserve.tsx:385
#: src/pages/confirm-create-reserve.tsx:388
#, c-format
msgid "Can't parse amount: %1$s"
msgstr ""
#: src/pages/confirm-create-reserve.tsx:393
#: src/pages/confirm-create-reserve.tsx:396
#, c-format
msgid "Can't parse wire_types: %1$s"
msgstr ""
#. TODO:generic error reporting function or component.
#: src/pages/confirm-create-reserve.tsx:410
#: src/pages/confirm-create-reserve.tsx:413
#, c-format
msgid "Fatal error: \"%1$s\"."
msgstr ""
#: src/popup/popup.tsx:173
#: src/popup/popup.tsx:172
#, c-format
msgid "Balance"
msgstr ""
#: src/popup/popup.tsx:176
#: src/popup/popup.tsx:175
#, c-format
msgid "History"
msgstr ""
#: src/popup/popup.tsx:179
#: src/popup/popup.tsx:178
#, c-format
msgid "Debug"
msgstr ""
#: src/popup/popup.tsx:239
#: src/popup/popup.tsx:238
#, c-format
msgid "help"
msgstr ""
#: src/popup/popup.tsx:244
#: src/popup/popup.tsx:243
#, c-format
msgid ""
"You have no balance to show. Need some\n"
" %1$s getting started?\n"
msgstr ""
#: src/popup/popup.tsx:261
#: src/popup/popup.tsx:260
#, c-format
msgid "%1$s incoming\n"
msgstr ""
#: src/popup/popup.tsx:274
#: src/popup/popup.tsx:273
#, c-format
msgid "%1$s being spent\n"
msgstr ""
#: src/popup/popup.tsx:300
#: src/popup/popup.tsx:299
#, c-format
msgid "Error: could not retrieve balance information."
msgstr ""
#: src/popup/popup.tsx:340
#: src/popup/popup.tsx:337
#, c-format
msgid "Bank requested reserve (%1$s) for %2$s."
msgid "Bank requested reserve (%1$s) for%2$s.\n"
msgstr ""
#: src/popup/popup.tsx:351
#: src/popup/popup.tsx:346
#, c-format
msgid "Started to withdraw %1$s from %2$s (%3$s)."
msgid ""
"Started to withdraw\n"
" %1$s from%2$s(%3$s).\n"
msgstr ""
#: src/popup/popup.tsx:361
#: src/popup/popup.tsx:358
#, c-format
msgid "Merchant %1$s offered contract %2$s."
msgid "Merchant%1$soffered contract%2$s;\n"
msgstr ""
#: src/popup/popup.tsx:371
#: src/popup/popup.tsx:368
#, c-format
msgid "Withdrew %1$s from %2$s (%3$s)."
msgid "Withdrew%1$sfrom%2$s(%3$s).\n"
msgstr ""
#: src/popup/popup.tsx:382
#: src/popup/popup.tsx:379
#, c-format
msgid "Paid %1$s to merchant %2$s. (%3$s)"
msgid "Paid%1$sto merchant%2$s. (%3$s)\n"
msgstr ""
#: src/popup/popup.tsx:386
#, c-format
msgid "Unknown event (%1$s)"
msgstr ""
#: src/popup/popup.tsx:429
@ -255,7 +262,12 @@ msgstr ""
msgid "Your wallet has no events recorded."
msgstr ""
#: src/renderHtml.tsx:42
#: src/renderHtml.tsx:38
#, c-format
msgid "The merchant%1$swants to enter a contract over%2$s with you.\n"
msgstr ""
#: src/renderHtml.tsx:43
#, c-format
msgid "You are about to purchase:"
msgstr ""

View File

@ -27,27 +27,27 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
#: src/pages/confirm-contract.tsx:61
#: src/pages/confirm-contract.tsx:62
#, c-format
msgid "show more details\n"
msgstr ""
#: src/pages/confirm-contract.tsx:75
#: src/pages/confirm-contract.tsx:76
#, c-format
msgid "Accepted exchanges:"
msgstr ""
#: src/pages/confirm-contract.tsx:80
#: src/pages/confirm-contract.tsx:81
#, c-format
msgid "Exchanges in the wallet:"
msgstr ""
#: src/pages/confirm-contract.tsx:156
#: src/pages/confirm-contract.tsx:157
#, c-format
msgid "You have insufficient funds of the requested currency in your wallet."
msgstr ""
#: src/pages/confirm-contract.tsx:157
#: src/pages/confirm-contract.tsx:158
#, c-format
msgid ""
"You do not have any funds from an exchange that is accepted by this "
@ -55,194 +55,201 @@ msgid ""
"wallet."
msgstr ""
#: src/pages/confirm-create-reserve.tsx:105
#: src/pages/confirm-create-reserve.tsx:106
#, c-format
msgid "Withdrawal fees: %1$s"
msgstr ""
#: src/pages/confirm-create-reserve.tsx:106
#: src/pages/confirm-create-reserve.tsx:107
#, c-format
msgid "Rounding loss: %1$s"
msgstr ""
#: src/pages/confirm-create-reserve.tsx:109
#: src/pages/confirm-create-reserve.tsx:110
#, c-format
msgid "# Coins"
msgstr ""
#: src/pages/confirm-create-reserve.tsx:110
#: src/pages/confirm-create-reserve.tsx:111
#, c-format
msgid "Value"
msgstr ""
#: src/pages/confirm-create-reserve.tsx:111
#: src/pages/confirm-create-reserve.tsx:112
#, c-format
msgid "Withdraw Fee"
msgstr ""
#: src/pages/confirm-create-reserve.tsx:112
#: src/pages/confirm-create-reserve.tsx:113
#, c-format
msgid "Refresh Fee"
msgstr ""
#: src/pages/confirm-create-reserve.tsx:113
#: src/pages/confirm-create-reserve.tsx:114
#, c-format
msgid "Deposit Fee"
msgstr ""
#: src/pages/confirm-create-reserve.tsx:146
#: src/pages/confirm-create-reserve.tsx:147
#, c-format
msgid "Withdraw fees:"
msgstr ""
#: src/pages/confirm-create-reserve.tsx:180
#: src/pages/confirm-create-reserve.tsx:182
#, c-format
msgid "view fee structure / select different exchange provider"
msgstr ""
#: src/pages/confirm-create-reserve.tsx:194
#: src/pages/confirm-create-reserve.tsx:196
#, c-format
msgid "Detailed Fee Structure"
msgstr ""
#: src/pages/confirm-create-reserve.tsx:210
#: src/pages/confirm-create-reserve.tsx:212
#, c-format
msgid ""
"The exchange provider will charge\n"
" %1$s in fees.\n"
msgstr ""
#: src/pages/confirm-create-reserve.tsx:222
#: src/pages/confirm-create-reserve.tsx:224
#, c-format
msgid ""
"Waiting for a response from\n"
" %1$s"
msgstr ""
#: src/pages/confirm-create-reserve.tsx:233
#: src/pages/confirm-create-reserve.tsx:235
#, c-format
msgid "A problem occured, see below."
msgstr ""
#: src/pages/confirm-create-reserve.tsx:239
#: src/pages/confirm-create-reserve.tsx:241
#, c-format
msgid ""
"Information about fees will be available when an exchange provider is "
"selected."
msgstr ""
#: src/pages/confirm-create-reserve.tsx:247
#: src/pages/confirm-create-reserve.tsx:249
#, c-format
msgid "You are about to withdraw %1$s from your bank account into your wallet."
msgstr ""
#: src/pages/confirm-create-reserve.tsx:256
#: src/pages/confirm-create-reserve.tsx:258
#, c-format
msgid "Accept fees and withdraw"
msgstr ""
#: src/pages/confirm-create-reserve.tsx:278
#: src/pages/confirm-create-reserve.tsx:280
#, c-format
msgid "Error: URL is empty"
msgstr ""
#: src/pages/confirm-create-reserve.tsx:286
#: src/pages/confirm-create-reserve.tsx:288
#, c-format
msgid "Error: URL may not be relative"
msgstr ""
#: src/pages/confirm-create-reserve.tsx:344
#: src/pages/confirm-create-reserve.tsx:347
#, c-format
msgid ""
"Oops, something went wrong. The wallet responded with error status (%1$s)."
msgstr ""
#: src/pages/confirm-create-reserve.tsx:371
#: src/pages/confirm-create-reserve.tsx:374
#, c-format
msgid "Checking URL, please wait ..."
msgstr ""
#: src/pages/confirm-create-reserve.tsx:385
#: src/pages/confirm-create-reserve.tsx:388
#, c-format
msgid "Can't parse amount: %1$s"
msgstr ""
#: src/pages/confirm-create-reserve.tsx:393
#: src/pages/confirm-create-reserve.tsx:396
#, c-format
msgid "Can't parse wire_types: %1$s"
msgstr ""
#. TODO:generic error reporting function or component.
#: src/pages/confirm-create-reserve.tsx:410
#: src/pages/confirm-create-reserve.tsx:413
#, c-format
msgid "Fatal error: \"%1$s\"."
msgstr ""
#: src/popup/popup.tsx:173
#: src/popup/popup.tsx:172
#, c-format
msgid "Balance"
msgstr ""
#: src/popup/popup.tsx:176
#: src/popup/popup.tsx:175
#, c-format
msgid "History"
msgstr ""
#: src/popup/popup.tsx:179
#: src/popup/popup.tsx:178
#, c-format
msgid "Debug"
msgstr ""
#: src/popup/popup.tsx:239
#: src/popup/popup.tsx:238
#, c-format
msgid "help"
msgstr ""
#: src/popup/popup.tsx:244
#: src/popup/popup.tsx:243
#, c-format
msgid ""
"You have no balance to show. Need some\n"
" %1$s getting started?\n"
msgstr ""
#: src/popup/popup.tsx:261
#: src/popup/popup.tsx:260
#, c-format
msgid "%1$s incoming\n"
msgstr ""
#: src/popup/popup.tsx:274
#: src/popup/popup.tsx:273
#, c-format
msgid "%1$s being spent\n"
msgstr ""
#: src/popup/popup.tsx:300
#: src/popup/popup.tsx:299
#, c-format
msgid "Error: could not retrieve balance information."
msgstr ""
#: src/popup/popup.tsx:340
#: src/popup/popup.tsx:337
#, c-format
msgid "Bank requested reserve (%1$s) for %2$s."
msgid "Bank requested reserve (%1$s) for%2$s.\n"
msgstr ""
#: src/popup/popup.tsx:351
#: src/popup/popup.tsx:346
#, c-format
msgid "Started to withdraw %1$s from %2$s (%3$s)."
msgid ""
"Started to withdraw\n"
" %1$s from%2$s(%3$s).\n"
msgstr ""
#: src/popup/popup.tsx:361
#: src/popup/popup.tsx:358
#, c-format
msgid "Merchant %1$s offered contract %2$s."
msgid "Merchant%1$soffered contract%2$s;\n"
msgstr ""
#: src/popup/popup.tsx:371
#: src/popup/popup.tsx:368
#, c-format
msgid "Withdrew %1$s from %2$s (%3$s)."
msgid "Withdrew%1$sfrom%2$s(%3$s).\n"
msgstr ""
#: src/popup/popup.tsx:382
#: src/popup/popup.tsx:379
#, c-format
msgid "Paid %1$s to merchant %2$s. (%3$s)"
msgid "Paid%1$sto merchant%2$s. (%3$s)\n"
msgstr ""
#: src/popup/popup.tsx:386
#, c-format
msgid "Unknown event (%1$s)"
msgstr ""
#: src/popup/popup.tsx:429
@ -255,7 +262,12 @@ msgstr ""
msgid "Your wallet has no events recorded."
msgstr ""
#: src/renderHtml.tsx:42
#: src/renderHtml.tsx:38
#, c-format
msgid "The merchant%1$swants to enter a contract over%2$s with you.\n"
msgstr ""
#: src/renderHtml.tsx:43
#, c-format
msgid "You are about to purchase:"
msgstr ""

17
src/i18n/strings-prelude Normal file
View File

@ -0,0 +1,17 @@
/*
This file is part of TALER
(C) 2016 Inria
TALER is free software; you can redistribute it and/or modify it under the
terms of the GNU General Public License as published by the Free Software
Foundation; either version 3, or (at your option) any later version.
TALER is distributed in the hope that it will be useful, but WITHOUT ANY
WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
A PARTICULAR PURPOSE. See the GNU General Public License for more details.
You should have received a copy of the GNU General Public License along with
TALER; see the file COPYING. If not, see <http://www.gnu.org/licenses/>
*/
export let strings: {[s: string]: any} = {};

View File

@ -1,3 +0,0 @@
if (!window.i18n) {
throw Error("Module loading order incorrect, please load i18n module before loading i18n-strings");
}

21
src/i18n/strings.ts Normal file
View File

@ -0,0 +1,21 @@
/*
This file is part of TALER
(C) 2016 Inria
TALER is free software; you can redistribute it and/or modify it under the
terms of the GNU General Public License as published by the Free Software
Foundation; either version 3, or (at your option) any later version.
TALER is distributed in the hope that it will be useful, but WITHOUT ANY
WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
A PARTICULAR PURPOSE. See the GNU General Public License for more details.
You should have received a copy of the GNU General Public License along with
TALER; see the file COPYING. If not, see <http://www.gnu.org/licenses/>
*/
export let strings: {[s: string]: any} = {};
strings['de'] = {"domain":"de","locale_data":{"de":{"":{"domain":"de","plural_forms":"nplurals=2; plural=(n != 1);","lang":""},"show more details\n":[""],"Accepted exchanges:":[""],"Exchanges in the wallet:":[""],"You have insufficient funds of the requested currency in your wallet.":[""],"You do not have any funds from an exchange that is accepted by this merchant. None of the exchanges accepted by the merchant is known to your wallet.":[""],"Withdrawal fees: %1$s":["Abheben bei %1$s"],"Rounding loss: %1$s":[""],"# Coins":[""],"Value":[""],"Withdraw Fee":["Abheben bei %1$s"],"Refresh Fee":[""],"Deposit Fee":[""],"Withdraw fees:":["Abheben bei %1$s"],"view fee structure / select different exchange provider":[""],"Detailed Fee Structure":[""],"The exchange provider will charge\n %1$s in fees.\n":[""],"Waiting for a response from\n %1$s":[""],"A problem occured, see below.":[""],"Information about fees will be available when an exchange provider is selected.":[""],"You are about to withdraw %1$s from your bank account into your wallet.":[""],"Accept fees and withdraw":[""],"Error: URL is empty":[""],"Error: URL may not be relative":[""],"Oops, something went wrong. The wallet responded with error status (%1$s).":[""],"Checking URL, please wait ...":[""],"Can't parse amount: %1$s":[""],"Can't parse wire_types: %1$s":[""],"Fatal error: \"%1$s\".":[""],"Balance":["Saldo"],"History":["Verlauf"],"Debug":["Debug"],"help":[""],"You have no balance to show. Need some\n %1$s getting started?\n":["Sie haben kein Digitalgeld. Wollen Sie %1$s? abheben?"],"%1$s incoming\n":[""],"%1$s being spent\n":[""],"Error: could not retrieve balance information.":[""],"Bank requested reserve (%1$s) for%2$s.\n":["Bank bestätig anlegen der Reserve (%1$s) bei %2$s"],"Started to withdraw\n %1$s from%2$s(%3$s).\n":["Reserve (%1$s) mit %2$s bei %3$s erzeugt"],"Merchant%1$soffered contract%2$s;\n":[""],"Withdrew%1$sfrom%2$s(%3$s).\n":["Reserve (%1$s) mit %2$s bei %3$s erzeugt"],"Paid%1$sto merchant%2$s. (%3$s)\n":["Reserve (%1$s) mit %2$s bei %3$s erzeugt"],"Unknown event (%1$s)":[""],"Error: could not retrieve event history":[""],"Your wallet has no events recorded.":["Ihre Geldbörse verzeichnet keine Vorkommnisse."],"The merchant%1$swants to enter a contract over%2$s with you.\n":["%1$s\n möchte einen Vertrag über %2$s\n mit Ihnen abschließen."],"You are about to purchase:":["Sie sind dabei, Folgendes zu kaufen:"]}}};
strings['en-US'] = {"domain":"en-US","locale_data":{"en-US":{"":{"domain":"en-US","plural_forms":"nplurals=2; plural=(n != 1);","lang":""},"show more details\n":[""],"Accepted exchanges:":[""],"Exchanges in the wallet:":[""],"You have insufficient funds of the requested currency in your wallet.":[""],"You do not have any funds from an exchange that is accepted by this merchant. None of the exchanges accepted by the merchant is known to your wallet.":[""],"Withdrawal fees: %1$s":[""],"Rounding loss: %1$s":[""],"# Coins":[""],"Value":[""],"Withdraw Fee":[""],"Refresh Fee":[""],"Deposit Fee":[""],"Withdraw fees:":[""],"view fee structure / select different exchange provider":[""],"Detailed Fee Structure":[""],"The exchange provider will charge\n %1$s in fees.\n":[""],"Waiting for a response from\n %1$s":[""],"A problem occured, see below.":[""],"Information about fees will be available when an exchange provider is selected.":[""],"You are about to withdraw %1$s from your bank account into your wallet.":[""],"Accept fees and withdraw":[""],"Error: URL is empty":[""],"Error: URL may not be relative":[""],"Oops, something went wrong. The wallet responded with error status (%1$s).":[""],"Checking URL, please wait ...":[""],"Can't parse amount: %1$s":[""],"Can't parse wire_types: %1$s":[""],"Fatal error: \"%1$s\".":[""],"Balance":[""],"History":[""],"Debug":[""],"help":[""],"You have no balance to show. Need some\n %1$s getting started?\n":[""],"%1$s incoming\n":[""],"%1$s being spent\n":[""],"Error: could not retrieve balance information.":[""],"Bank requested reserve (%1$s) for%2$s.\n":[""],"Started to withdraw\n %1$s from%2$s(%3$s).\n":[""],"Merchant%1$soffered contract%2$s;\n":[""],"Withdrew%1$sfrom%2$s(%3$s).\n":[""],"Paid%1$sto merchant%2$s. (%3$s)\n":[""],"Unknown event (%1$s)":[""],"Error: could not retrieve event history":[""],"Your wallet has no events recorded.":[""],"The merchant%1$swants to enter a contract over%2$s with you.\n":[""],"You are about to purchase:":[""]}}};
strings['fr'] = {"domain":"fr","locale_data":{"fr":{"":{"domain":"fr","plural_forms":"nplurals=2; plural=(n != 1);","lang":""},"show more details\n":[""],"Accepted exchanges:":[""],"Exchanges in the wallet:":[""],"You have insufficient funds of the requested currency in your wallet.":[""],"You do not have any funds from an exchange that is accepted by this merchant. None of the exchanges accepted by the merchant is known to your wallet.":[""],"Withdrawal fees: %1$s":[""],"Rounding loss: %1$s":[""],"# Coins":[""],"Value":[""],"Withdraw Fee":[""],"Refresh Fee":[""],"Deposit Fee":[""],"Withdraw fees:":[""],"view fee structure / select different exchange provider":[""],"Detailed Fee Structure":[""],"The exchange provider will charge\n %1$s in fees.\n":[""],"Waiting for a response from\n %1$s":[""],"A problem occured, see below.":[""],"Information about fees will be available when an exchange provider is selected.":[""],"You are about to withdraw %1$s from your bank account into your wallet.":[""],"Accept fees and withdraw":[""],"Error: URL is empty":[""],"Error: URL may not be relative":[""],"Oops, something went wrong. The wallet responded with error status (%1$s).":[""],"Checking URL, please wait ...":[""],"Can't parse amount: %1$s":[""],"Can't parse wire_types: %1$s":[""],"Fatal error: \"%1$s\".":[""],"Balance":[""],"History":[""],"Debug":[""],"help":[""],"You have no balance to show. Need some\n %1$s getting started?\n":[""],"%1$s incoming\n":[""],"%1$s being spent\n":[""],"Error: could not retrieve balance information.":[""],"Bank requested reserve (%1$s) for%2$s.\n":[""],"Started to withdraw\n %1$s from%2$s(%3$s).\n":[""],"Merchant%1$soffered contract%2$s;\n":[""],"Withdrew%1$sfrom%2$s(%3$s).\n":[""],"Paid%1$sto merchant%2$s. (%3$s)\n":[""],"Unknown event (%1$s)":[""],"Error: could not retrieve event history":[""],"Your wallet has no events recorded.":[""],"The merchant%1$swants to enter a contract over%2$s with you.\n":[""],"You are about to purchase:":[""]}}};
strings['it'] = {"domain":"it","locale_data":{"it":{"":{"domain":"it","plural_forms":"nplurals=2; plural=(n != 1);","lang":""},"show more details\n":[""],"Accepted exchanges:":[""],"Exchanges in the wallet:":[""],"You have insufficient funds of the requested currency in your wallet.":[""],"You do not have any funds from an exchange that is accepted by this merchant. None of the exchanges accepted by the merchant is known to your wallet.":[""],"Withdrawal fees: %1$s":[""],"Rounding loss: %1$s":[""],"# Coins":[""],"Value":[""],"Withdraw Fee":[""],"Refresh Fee":[""],"Deposit Fee":[""],"Withdraw fees:":[""],"view fee structure / select different exchange provider":[""],"Detailed Fee Structure":[""],"The exchange provider will charge\n %1$s in fees.\n":[""],"Waiting for a response from\n %1$s":[""],"A problem occured, see below.":[""],"Information about fees will be available when an exchange provider is selected.":[""],"You are about to withdraw %1$s from your bank account into your wallet.":[""],"Accept fees and withdraw":[""],"Error: URL is empty":[""],"Error: URL may not be relative":[""],"Oops, something went wrong. The wallet responded with error status (%1$s).":[""],"Checking URL, please wait ...":[""],"Can't parse amount: %1$s":[""],"Can't parse wire_types: %1$s":[""],"Fatal error: \"%1$s\".":[""],"Balance":[""],"History":[""],"Debug":[""],"help":[""],"You have no balance to show. Need some\n %1$s getting started?\n":[""],"%1$s incoming\n":[""],"%1$s being spent\n":[""],"Error: could not retrieve balance information.":[""],"Bank requested reserve (%1$s) for%2$s.\n":[""],"Started to withdraw\n %1$s from%2$s(%3$s).\n":[""],"Merchant%1$soffered contract%2$s;\n":[""],"Withdrew%1$sfrom%2$s(%3$s).\n":[""],"Paid%1$sto merchant%2$s. (%3$s)\n":[""],"Unknown event (%1$s)":[""],"Error: could not retrieve event history":[""],"Your wallet has no events recorded.":[""],"The merchant%1$swants to enter a contract over%2$s with you.\n":[""],"You are about to purchase:":[""]}}};

View File

@ -27,27 +27,27 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
#: src/pages/confirm-contract.tsx:61
#: src/pages/confirm-contract.tsx:62
#, c-format
msgid "show more details\n"
msgstr ""
#: src/pages/confirm-contract.tsx:75
#: src/pages/confirm-contract.tsx:76
#, c-format
msgid "Accepted exchanges:"
msgstr ""
#: src/pages/confirm-contract.tsx:80
#: src/pages/confirm-contract.tsx:81
#, c-format
msgid "Exchanges in the wallet:"
msgstr ""
#: src/pages/confirm-contract.tsx:156
#: src/pages/confirm-contract.tsx:157
#, c-format
msgid "You have insufficient funds of the requested currency in your wallet."
msgstr ""
#: src/pages/confirm-contract.tsx:157
#: src/pages/confirm-contract.tsx:158
#, c-format
msgid ""
"You do not have any funds from an exchange that is accepted by this "
@ -55,194 +55,201 @@ msgid ""
"wallet."
msgstr ""
#: src/pages/confirm-create-reserve.tsx:105
#: src/pages/confirm-create-reserve.tsx:106
#, c-format
msgid "Withdrawal fees: %1$s"
msgstr ""
#: src/pages/confirm-create-reserve.tsx:106
#: src/pages/confirm-create-reserve.tsx:107
#, c-format
msgid "Rounding loss: %1$s"
msgstr ""
#: src/pages/confirm-create-reserve.tsx:109
#: src/pages/confirm-create-reserve.tsx:110
#, c-format
msgid "# Coins"
msgstr ""
#: src/pages/confirm-create-reserve.tsx:110
#: src/pages/confirm-create-reserve.tsx:111
#, c-format
msgid "Value"
msgstr ""
#: src/pages/confirm-create-reserve.tsx:111
#: src/pages/confirm-create-reserve.tsx:112
#, c-format
msgid "Withdraw Fee"
msgstr ""
#: src/pages/confirm-create-reserve.tsx:112
#: src/pages/confirm-create-reserve.tsx:113
#, c-format
msgid "Refresh Fee"
msgstr ""
#: src/pages/confirm-create-reserve.tsx:113
#: src/pages/confirm-create-reserve.tsx:114
#, c-format
msgid "Deposit Fee"
msgstr ""
#: src/pages/confirm-create-reserve.tsx:146
#: src/pages/confirm-create-reserve.tsx:147
#, c-format
msgid "Withdraw fees:"
msgstr ""
#: src/pages/confirm-create-reserve.tsx:180
#: src/pages/confirm-create-reserve.tsx:182
#, c-format
msgid "view fee structure / select different exchange provider"
msgstr ""
#: src/pages/confirm-create-reserve.tsx:194
#: src/pages/confirm-create-reserve.tsx:196
#, c-format
msgid "Detailed Fee Structure"
msgstr ""
#: src/pages/confirm-create-reserve.tsx:210
#: src/pages/confirm-create-reserve.tsx:212
#, c-format
msgid ""
"The exchange provider will charge\n"
" %1$s in fees.\n"
msgstr ""
#: src/pages/confirm-create-reserve.tsx:222
#: src/pages/confirm-create-reserve.tsx:224
#, c-format
msgid ""
"Waiting for a response from\n"
" %1$s"
msgstr ""
#: src/pages/confirm-create-reserve.tsx:233
#: src/pages/confirm-create-reserve.tsx:235
#, c-format
msgid "A problem occured, see below."
msgstr ""
#: src/pages/confirm-create-reserve.tsx:239
#: src/pages/confirm-create-reserve.tsx:241
#, c-format
msgid ""
"Information about fees will be available when an exchange provider is "
"selected."
msgstr ""
#: src/pages/confirm-create-reserve.tsx:247
#: src/pages/confirm-create-reserve.tsx:249
#, c-format
msgid "You are about to withdraw %1$s from your bank account into your wallet."
msgstr ""
#: src/pages/confirm-create-reserve.tsx:256
#: src/pages/confirm-create-reserve.tsx:258
#, c-format
msgid "Accept fees and withdraw"
msgstr ""
#: src/pages/confirm-create-reserve.tsx:278
#: src/pages/confirm-create-reserve.tsx:280
#, c-format
msgid "Error: URL is empty"
msgstr ""
#: src/pages/confirm-create-reserve.tsx:286
#: src/pages/confirm-create-reserve.tsx:288
#, c-format
msgid "Error: URL may not be relative"
msgstr ""
#: src/pages/confirm-create-reserve.tsx:344
#: src/pages/confirm-create-reserve.tsx:347
#, c-format
msgid ""
"Oops, something went wrong. The wallet responded with error status (%1$s)."
msgstr ""
#: src/pages/confirm-create-reserve.tsx:371
#: src/pages/confirm-create-reserve.tsx:374
#, c-format
msgid "Checking URL, please wait ..."
msgstr ""
#: src/pages/confirm-create-reserve.tsx:385
#: src/pages/confirm-create-reserve.tsx:388
#, c-format
msgid "Can't parse amount: %1$s"
msgstr ""
#: src/pages/confirm-create-reserve.tsx:393
#: src/pages/confirm-create-reserve.tsx:396
#, c-format
msgid "Can't parse wire_types: %1$s"
msgstr ""
#. TODO:generic error reporting function or component.
#: src/pages/confirm-create-reserve.tsx:410
#: src/pages/confirm-create-reserve.tsx:413
#, c-format
msgid "Fatal error: \"%1$s\"."
msgstr ""
#: src/popup/popup.tsx:173
#: src/popup/popup.tsx:172
#, c-format
msgid "Balance"
msgstr ""
#: src/popup/popup.tsx:176
#: src/popup/popup.tsx:175
#, c-format
msgid "History"
msgstr ""
#: src/popup/popup.tsx:179
#: src/popup/popup.tsx:178
#, c-format
msgid "Debug"
msgstr ""
#: src/popup/popup.tsx:239
#: src/popup/popup.tsx:238
#, c-format
msgid "help"
msgstr ""
#: src/popup/popup.tsx:244
#: src/popup/popup.tsx:243
#, c-format
msgid ""
"You have no balance to show. Need some\n"
" %1$s getting started?\n"
msgstr ""
#: src/popup/popup.tsx:261
#: src/popup/popup.tsx:260
#, c-format
msgid "%1$s incoming\n"
msgstr ""
#: src/popup/popup.tsx:274
#: src/popup/popup.tsx:273
#, c-format
msgid "%1$s being spent\n"
msgstr ""
#: src/popup/popup.tsx:300
#: src/popup/popup.tsx:299
#, c-format
msgid "Error: could not retrieve balance information."
msgstr ""
#: src/popup/popup.tsx:340
#: src/popup/popup.tsx:337
#, c-format
msgid "Bank requested reserve (%1$s) for %2$s."
msgid "Bank requested reserve (%1$s) for%2$s.\n"
msgstr ""
#: src/popup/popup.tsx:351
#: src/popup/popup.tsx:346
#, c-format
msgid "Started to withdraw %1$s from %2$s (%3$s)."
msgid ""
"Started to withdraw\n"
" %1$s from%2$s(%3$s).\n"
msgstr ""
#: src/popup/popup.tsx:361
#: src/popup/popup.tsx:358
#, c-format
msgid "Merchant %1$s offered contract %2$s."
msgid "Merchant%1$soffered contract%2$s;\n"
msgstr ""
#: src/popup/popup.tsx:371
#: src/popup/popup.tsx:368
#, c-format
msgid "Withdrew %1$s from %2$s (%3$s)."
msgid "Withdrew%1$sfrom%2$s(%3$s).\n"
msgstr ""
#: src/popup/popup.tsx:382
#: src/popup/popup.tsx:379
#, c-format
msgid "Paid %1$s to merchant %2$s. (%3$s)"
msgid "Paid%1$sto merchant%2$s. (%3$s)\n"
msgstr ""
#: src/popup/popup.tsx:386
#, c-format
msgid "Unknown event (%1$s)"
msgstr ""
#: src/popup/popup.tsx:429
@ -255,7 +262,12 @@ msgstr ""
msgid "Your wallet has no events recorded."
msgstr ""
#: src/renderHtml.tsx:42
#: src/renderHtml.tsx:38
#, c-format
msgid "The merchant%1$swants to enter a contract over%2$s with you.\n"
msgstr ""
#: src/renderHtml.tsx:43
#, c-format
msgid "You are about to purchase:"
msgstr ""

View File

@ -12,10 +12,8 @@
<script src="/src/vendor/URI.js"></script>
<script src="/src/vendor/react.js"></script>
<script src="/src/vendor/react-dom.js"></script>
<script src="/src/vendor/system-csp-production.src.js"></script>
<!-- <script src="/src/vendor/jed.js"></script> -->
<script src="/src/i18n.js"></script>
<script src="/src/i18n/strings.js"></script>
<script src="/src/moduleTrampoline.js"></script>
<style>

View File

@ -28,6 +28,7 @@ import {Contract, AmountJson, ExchangeRecord} from "src/types";
import {OfferRecord} from "src/wallet";
import {renderContract, prettyAmount} from "src/renderHtml";
import {getExchanges} from "src/wxApi";
import * as i18n from "src/i18n";
interface DetailState {
@ -72,12 +73,12 @@ class Details extends React.Component<DetailProps, DetailState> {
show less details
</button>
<div>
{i18n`Accepted exchanges:`}
{i18n.str`Accepted exchanges:`}
<ul>
{this.props.contract.exchanges.map(
e => <li>{`${e.url}: ${e.master_pub}`}</li>)}
</ul>
{i18n`Exchanges in the wallet:`}
{i18n.str`Exchanges in the wallet:`}
<ul>
{(this.props.exchanges || []).map(
(e: ExchangeRecord) =>
@ -153,8 +154,8 @@ class ContractPrompt extends React.Component<ContractPromptProps, ContractPrompt
console.log("check-pay error", JSON.stringify(resp));
switch (resp.error) {
case "coins-insufficient":
let msgInsufficient = i18n`You have insufficient funds of the requested currency in your wallet.`;
let msgNoMatch = i18n`You do not have any funds from an exchange that is accepted by this merchant. None of the exchanges accepted by the merchant is known to your wallet.`;
let msgInsufficient = i18n.str`You have insufficient funds of the requested currency in your wallet.`;
let msgNoMatch = i18n.str`You do not have any funds from an exchange that is accepted by this merchant. None of the exchanges accepted by the merchant is known to your wallet.`;
if (this.state.exchanges && this.state.offer) {
let acceptedExchangePubs = this.state.offer.contract.exchanges.map((e) => e.master_pub);
let ex = this.state.exchanges.find((e) => acceptedExchangePubs.indexOf(e.masterPublicKey) >= 0);

View File

@ -10,11 +10,6 @@
<script src="/src/vendor/react.js"></script>
<script src="/src/vendor/react-dom.js"></script>
<!-- i18n -->
<script src="/src/vendor/jed.js"></script>
<script src="/src/i18n.js"></script>
<script src="/src/i18n/strings.js"></script>
<!-- module loading -->
<script src="/src/vendor/system-csp-production.src.js"></script>
<script src="/src/moduleTrampoline.js"></script>

View File

@ -30,6 +30,7 @@ import {
} from "src/types";
import {getReserveCreationInfo} from "src/wxApi";
import {ImplicitStateComponent, StateHolder} from "src/components";
import * as i18n from "src/i18n";
"use strict";
@ -102,15 +103,15 @@ function renderReserveCreationDetails(rci: ReserveCreationInfo|null) {
return (
<div>
<p>{i18n`Withdrawal fees: ${withdrawFeeStr}`}</p>
<p>{i18n`Rounding loss: ${overheadStr}`}</p>
<p>{i18n.str`Withdrawal fees: ${withdrawFeeStr}`}</p>
<p>{i18n.str`Rounding loss: ${overheadStr}`}</p>
<table>
<thead>
<th>{i18n`# Coins`}</th>
<th>{i18n`Value`}</th>
<th>{i18n`Withdraw Fee`}</th>
<th>{i18n`Refresh Fee`}</th>
<th>{i18n`Deposit Fee`}</th>
<th>{i18n.str`# Coins`}</th>
<th>{i18n.str`Value`}</th>
<th>{i18n.str`Withdraw Fee`}</th>
<th>{i18n.str`Refresh Fee`}</th>
<th>{i18n.str`Deposit Fee`}</th>
</thead>
<tbody>
{uniq.map(row)}
@ -143,7 +144,7 @@ function WithdrawFee(props: {reserveCreationInfo: ReserveCreationInfo|null}): JS
if (props.reserveCreationInfo) {
let {overhead, withdrawFee} = props.reserveCreationInfo;
let totalCost = Amounts.add(overhead, withdrawFee).amount;
return <p>{i18n`Withdraw fees:`} {amountToPretty(totalCost)}</p>;
return <p>{i18n.str`Withdraw fees:`} {amountToPretty(totalCost)}</p>;
}
return <p />;
}
@ -178,7 +179,7 @@ class ExchangeSelection extends ImplicitStateComponent<ExchangeSelectionProps> {
return (
<button className="linky"
onClick={() => this.detailCollapsed(false)}>
{i18n`view fee structure / select different exchange provider`}
{i18n.str`view fee structure / select different exchange provider`}
</button>
);
}
@ -192,7 +193,7 @@ class ExchangeSelection extends ImplicitStateComponent<ExchangeSelectionProps> {
onInput={(e) => this.onUrlChanged((e.target as HTMLInputElement).value)}/>
<br />
{this.renderStatus()}
<h2>{i18n`Detailed Fee Structure`}</h2>
<h2>{i18n.str`Detailed Fee Structure`}</h2>
{renderReserveCreationDetails(this.reserveCreationInfo())}
</div>)
}
@ -231,13 +232,13 @@ class ExchangeSelection extends ImplicitStateComponent<ExchangeSelectionProps> {
if (this.statusString()) {
return (
<p>
<strong style={{color: "red"}}>{i18n`A problem occured, see below.`}</strong>
<strong style={{color: "red"}}>{i18n.str`A problem occured, see below.`}</strong>
</p>
);
}
return (
<p>
{i18n`Information about fees will be available when an exchange provider is selected.`}
{i18n.str`Information about fees will be available when an exchange provider is selected.`}
</p>
);
}
@ -254,7 +255,7 @@ class ExchangeSelection extends ImplicitStateComponent<ExchangeSelectionProps> {
<button className="accept"
disabled={this.reserveCreationInfo() == null}
onClick={() => this.confirmReserve()}>
{i18n`Accept fees and withdraw`}
{i18n.str`Accept fees and withdraw`}
</button>
<br/>
{this.renderAdvanced()}
@ -276,7 +277,7 @@ class ExchangeSelection extends ImplicitStateComponent<ExchangeSelectionProps> {
async forceReserveUpdate() {
this.reserveCreationInfo(null);
if (!this.url()) {
this.statusString(i18n`Error: URL is empty`);
this.statusString(i18n.str`Error: URL is empty`);
this.detailCollapsed(false);
return;
}
@ -284,7 +285,7 @@ class ExchangeSelection extends ImplicitStateComponent<ExchangeSelectionProps> {
this.statusString(null);
let parsedUrl = URI(this.url()!);
if (parsedUrl.is("relative")) {
this.statusString(i18n`Error: URL may not be relative`);
this.statusString(i18n.str`Error: URL may not be relative`);
this.detailCollapsed(false);
return;
}
@ -344,7 +345,7 @@ class ExchangeSelection extends ImplicitStateComponent<ExchangeSelectionProps> {
} else {
this.reset();
this.statusString(
i18n`Oops, something went wrong. The wallet responded with error status (${rawResp.error}).`);
i18n.str`Oops, something went wrong. The wallet responded with error status (${rawResp.error}).`);
this.detailCollapsed(false);
}
};
@ -370,7 +371,7 @@ class ExchangeSelection extends ImplicitStateComponent<ExchangeSelectionProps> {
if (this.statusString()) {
return <p><strong style={{color: "red"}}>{this.statusString()}</strong></p>;
} else if (!this.reserveCreationInfo()) {
return <p>{i18n`Checking URL, please wait ...`}</p>;
return <p>{i18n.str`Checking URL, please wait ...`}</p>;
}
return "";
}
@ -384,7 +385,7 @@ export async function main() {
try {
amount = AmountJson.checked(JSON.parse(query.amount));
} catch (e) {
throw Error(i18n`Can't parse amount: ${e.message}`);
throw Error(i18n.str`Can't parse amount: ${e.message}`);
}
const callback_url = query.callback_url;
const bank_url = query.bank_url;
@ -392,7 +393,7 @@ export async function main() {
try {
wt_types = JSON.parse(query.wt_types);
} catch (e) {
throw Error(i18n`Can't parse wire_types: ${e.message}`);
throw Error(i18n.str`Can't parse wire_types: ${e.message}`);
}
const suggestedExchangeUrl = await getSuggestedExchange(amount.currency);
@ -409,7 +410,7 @@ export async function main() {
} catch (e) {
// TODO: provide more context information, maybe factor it out into a
// TODO:generic error reporting function or component.
document.body.innerText = i18n`Fatal error: "${e.message}".`;
document.body.innerText = i18n.str`Fatal error: "${e.message}".`;
console.error(`got error "${e.message}"`, e);
}
}

View File

@ -13,11 +13,6 @@
<script src="/src/vendor/react.js"></script>
<script src="/src/vendor/react-dom.js"></script>
<!-- i18n -->
<script src="/src/vendor/jed.js"></script>
<script src="/src/i18n.js"></script>
<script src="/src/i18n/strings.js"></script>
<script src="/src/vendor/system-csp-production.src.js"></script>
<script src="/src/moduleTrampoline.js"></script>

View File

@ -13,11 +13,6 @@
<script src="/src/vendor/react.js"></script>
<script src="/src/vendor/react-dom.js"></script>
<!-- i18n -->
<script src="/src/vendor/jed.js"></script>
<script src="/src/i18n.js"></script>
<script src="/src/i18n/strings.js"></script>
<script src="/src/vendor/system-csp-production.src.js"></script>
<script src="/src/moduleTrampoline.js"></script>

View File

@ -13,11 +13,6 @@
<script src="/src/vendor/react.js"></script>
<script src="/src/vendor/react-dom.js"></script>
<!-- i18n -->
<script src="/src/vendor/jed.js"></script>
<script src="/src/i18n.js"></script>
<script src="/src/i18n/strings.js"></script>
<script src="/src/vendor/system-csp-production.src.js"></script>
<script src="/src/moduleTrampoline.js"></script>

View File

@ -11,16 +11,12 @@
<script src="/src/vendor/react-dom.js"></script>
<script src="/src/vendor/URI.js"></script>
<script src="/src/vendor/jed.js"></script>
<script src="/src/i18n.js"></script>
<script src="/src/i18n/strings.js"></script>
<script src="/src/vendor/system-csp-production.src.js"></script>
<script src="/src/moduleTrampoline.js"></script>
</head>
<body>
<div id="content" style="margin:0;padding:0"></div>
<div id="content" style="margin:0;padding:0"></div>
</body>
</html>

View File

@ -33,8 +33,7 @@ import {
WalletBalanceEntry
} from "src/types";
import {abbrev, prettyAmount} from "src/renderHtml";
declare var i18n: any;
import * as i18n from "src/i18n";
function onUpdateNotification(f: () => void): () => void {
let port = chrome.runtime.connect({name: "notifications"});
@ -170,13 +169,13 @@ class WalletNavBar extends React.Component<any,any> {
return (
<div className="nav" id="header">
<Tab target="/balance">
{i18n`Balance`}
{i18n.str`Balance`}
</Tab>
<Tab target="/history">
{i18n`History`}
{i18n.str`History`}
</Tab>
<Tab target="/debug">
{i18n`Debug`}
{i18n.str`Debug`}
</Tab>
</div>);
}
@ -236,7 +235,7 @@ class WalletBalanceView extends React.Component<any, any> {
renderEmpty(): JSX.Element {
let helpLink = (
<ExtensionLink target="/src/pages/help/empty-wallet.html">
{i18n`help`}
{i18n.str`help`}
</ExtensionLink>
);
return (
@ -297,7 +296,7 @@ class WalletBalanceView extends React.Component<any, any> {
render(): JSX.Element {
let wallet = this.balance;
if (this.gotError) {
return i18n`Error: could not retrieve balance information.`;
return i18n.str`Error: could not retrieve balance information.`;
}
if (!wallet) {
return <span></span>;
@ -384,7 +383,7 @@ function formatHistoryItem(historyItem: HistoryRecord) {
);
}
default:
return (<p>{i18n`Unknown event (${historyItem.type})`}</p>);
return (<p>{i18n.str`Unknown event (${historyItem.type})`}</p>);
}
}
@ -427,7 +426,7 @@ class WalletHistory extends React.Component<any, any> {
console.log("rendering history");
let history: HistoryRecord[] = this.myHistory;
if (this.gotError) {
return i18n`Error: could not retrieve event history`;
return i18n.str`Error: could not retrieve event history`;
}
if (!history) {
@ -461,7 +460,7 @@ class WalletHistory extends React.Component<any, any> {
if (listing.length > 0) {
return <div className="container">{listing}</div>;
}
return <p>{i18n`Your wallet has no events recorded.`}</p>
return <p>{i18n.str`Your wallet has no events recorded.`}</p>
}
}

View File

@ -22,6 +22,7 @@
import {AmountJson, Contract, Amounts} from "./types";
import * as i18n from "src/i18n";
export function prettyAmount(amount: AmountJson) {
let v = amount.value + amount.fraction / Amounts.fractionalBase;
@ -34,12 +35,12 @@ export function renderContract(contract: Contract): JSX.Element {
return (
<div>
<p>
The merchant {merchantName}
wants to enter a contract over {amount}{" "}
<i18n.Translate wrap="p">
The merchant <span>{merchantName}</span>
wants to enter a contract over <span>{amount}</span>{" "}
with you.
</p>
<p>{i18n`You are about to purchase:`}</p>
</i18n.Translate>
<p>{i18n.str`You are about to purchase:`}</p>
<ul>
{contract.products.map(
(p: any, i: number) => (<li key={i}>{`${p.description}: ${prettyAmount(p.price)}`}</li>))

13
src/vendor/jed.d.ts vendored Normal file
View File

@ -0,0 +1,13 @@
interface JedModule {
translate: any;
ngettext: any;
}
interface JedConstructor {
new(s: any): JedModule;
}
declare const Jed: JedConstructor;
export default Jed;

View File

@ -34,6 +34,7 @@
"src/helpers.ts",
"src/http.ts",
"src/i18n.tsx",
"src/i18n/strings.ts",
"src/logging.ts",
"src/moduleTrampoline.ts",
"src/pages/confirm-contract.tsx",
@ -48,6 +49,7 @@
"src/taler-wallet-lib.ts",
"src/types-test.ts",
"src/types.ts",
"src/vendor/jed.d.ts",
"src/wallet-test.ts",
"src/wallet.ts",
"src/wxApi.ts",

203
yarn.lock
View File

@ -1,5 +1,7 @@
# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY.
# yarn lockfile v1
abbrev@1, abbrev@1.0.x:
version "1.0.9"
resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.0.9.tgz#91b4792588a7738c25f35dd6f63752a2f8776135"
@ -120,7 +122,7 @@ async, async@^2.0.0:
dependencies:
lodash "^4.14.0"
async@^1.4.0, async@1.x:
async@1.x, async@^1.4.0:
version "1.5.2"
resolved "https://registry.yarnpkg.com/async/-/async-1.5.2.tgz#ec6a61ae56480c0c3cb241c95618e20892f9672a"
@ -237,10 +239,6 @@ buffer-crc32@^0.2.1, buffer-crc32@~0.2.3:
version "0.2.5"
resolved "https://registry.yarnpkg.com/buffer-crc32/-/buffer-crc32-0.2.5.tgz#db003ac2671e62ebd6ece78ea2c2e1b405736e91"
buffer-shims@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/buffer-shims/-/buffer-shims-1.0.0.tgz#9978ce317388c649ad8793028c3477ef044a8b51"
builtin-modules@^1.0.0:
version "1.1.1"
resolved "https://registry.yarnpkg.com/builtin-modules/-/builtin-modules-1.1.1.tgz#270f076c5a72c02f5b65a47df94c5fe3a278892f"
@ -415,13 +413,7 @@ dateformat@^1.0.11, dateformat@^1.0.7-1.2.3:
get-stdin "^4.0.1"
meow "^3.3.0"
debug@^2.2.0:
version "2.3.2"
resolved "https://registry.yarnpkg.com/debug/-/debug-2.3.2.tgz#94cb466ef7d6d2c7e5245cdd6e4104f2d0d70d30"
dependencies:
ms "0.7.2"
debug@~2.2.0, debug@2.2.0:
debug@2.2.0, debug@^2.2.0, debug@~2.2.0:
version "2.2.0"
resolved "https://registry.yarnpkg.com/debug/-/debug-2.2.0.tgz#f87057e995b1a1f6ae6a4960664137bc56f039da"
dependencies:
@ -510,9 +502,9 @@ encoding@^0.1.11:
dependencies:
iconv-lite "~0.4.13"
end-of-stream@^1.0.0:
version "1.1.0"
resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.1.0.tgz#e9353258baa9108965efc41cb0ef8ade2f3cfb07"
end-of-stream@1.0.0, end-of-stream@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.0.0.tgz#d4596e702734a93e40e9af864319eabd99ff2f0e"
dependencies:
once "~1.3.0"
@ -522,12 +514,6 @@ end-of-stream@~0.1.5:
dependencies:
once "~1.3.0"
end-of-stream@1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.0.0.tgz#d4596e702734a93e40e9af864319eabd99ff2f0e"
dependencies:
once "~1.3.0"
error-ex@^1.2.0:
version "1.3.0"
resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.0.tgz#e67b43f3e82c96ea3a584ffee0b9fc3325d802d9"
@ -538,11 +524,7 @@ escape-html@~1.0.3:
version "1.0.3"
resolved "https://registry.yarnpkg.com/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988"
escape-string-regexp@^1.0.0, escape-string-regexp@^1.0.2:
version "1.0.5"
resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4"
escape-string-regexp@1.0.2:
escape-string-regexp@1.0.2, escape-string-regexp@^1.0.0, escape-string-regexp@^1.0.2:
version "1.0.2"
resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.2.tgz#4dbc2fe674e71949caf3fb2695ce7f2dc1d9a8d1"
@ -557,7 +539,7 @@ escodegen@1.8.x:
optionalDependencies:
source-map "~0.2.0"
esprima@^2.6.0, esprima@^2.7.1, esprima@2.7.x:
esprima@2.7.x, esprima@^2.6.0, esprima@^2.7.1:
version "2.7.3"
resolved "https://registry.yarnpkg.com/esprima/-/esprima-2.7.3.tgz#96e3b70d5779f6ad49cd032673d1c312767ba581"
@ -770,6 +752,19 @@ glob-watcher@^0.0.6:
dependencies:
gaze "^0.5.1"
glob2base@^0.0.12:
version "0.0.12"
resolved "https://registry.yarnpkg.com/glob2base/-/glob2base-0.0.12.tgz#9d419b3e28f12e83a362164a277055922c9c0d56"
dependencies:
find-index "^0.1.1"
glob@3.2.11:
version "3.2.11"
resolved "https://registry.yarnpkg.com/glob/-/glob-3.2.11.tgz#4a973f635b9190f715d10987d5c00fd2815ebe3d"
dependencies:
inherits "2"
minimatch "0.3"
glob@^4.3.1:
version "4.5.3"
resolved "https://registry.yarnpkg.com/glob/-/glob-4.5.3.tgz#c6cb73d3226c1efef04de3c56d012f03377ee15f"
@ -808,19 +803,6 @@ glob@~3.1.21:
inherits "1"
minimatch "~0.2.11"
glob@3.2.11:
version "3.2.11"
resolved "https://registry.yarnpkg.com/glob/-/glob-3.2.11.tgz#4a973f635b9190f715d10987d5c00fd2815ebe3d"
dependencies:
inherits "2"
minimatch "0.3"
glob2base@^0.0.12:
version "0.0.12"
resolved "https://registry.yarnpkg.com/glob2base/-/glob2base-0.0.12.tgz#9d419b3e28f12e83a362164a277055922c9c0d56"
dependencies:
find-index "^0.1.1"
global-modules@^0.2.3:
version "0.2.3"
resolved "https://registry.yarnpkg.com/global-modules/-/global-modules-0.2.3.tgz#ea5a3bed42c6d6ce995a4f8a1269b5dae223828d"
@ -1103,14 +1085,14 @@ inflight@^1.0.4:
once "^1.3.0"
wrappy "1"
inherits@^2.0.1, inherits@~2.0.1, inherits@2:
version "2.0.3"
resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de"
inherits@1:
version "1.0.2"
resolved "https://registry.yarnpkg.com/inherits/-/inherits-1.0.2.tgz#ca4309dadee6b54cc0b8d247e8d7c7a0975bdc9b"
inherits@2, inherits@^2.0.1, inherits@~2.0.1:
version "2.0.3"
resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de"
inherits@2.0.1:
version "2.0.1"
resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.1.tgz#b17d08d326b4423e568eff719f91b0b1cbdf69f1"
@ -1260,14 +1242,14 @@ is-windows@^0.2.0:
version "0.2.0"
resolved "https://registry.yarnpkg.com/is-windows/-/is-windows-0.2.0.tgz#de1aa6d63ea29dd248737b69f1ff8b8002d2108c"
isarray@~1.0.0, isarray@1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11"
isarray@0.0.1:
version "0.0.1"
resolved "https://registry.yarnpkg.com/isarray/-/isarray-0.0.1.tgz#8a18acfca9a8f4177e09abfc6038939b05d1eedf"
isarray@1.0.0, isarray@~1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11"
isexe@^1.1.1:
version "1.1.2"
resolved "https://registry.yarnpkg.com/isexe/-/isexe-1.1.2.tgz#36f3e22e60750920f5e7241a476a8c6a42275ad0"
@ -1680,15 +1662,22 @@ mime@1.3.4:
version "1.3.4"
resolved "https://registry.yarnpkg.com/mime/-/mime-1.3.4.tgz#115f9e3b6b3daf2959983cb38f149a2d40eb5d53"
minimatch@^2.0.1:
version "2.0.10"
resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-2.0.10.tgz#8d087c39c6b38c001b97fca7ce6d0e1e80afbac7"
minimatch@0.3:
version "0.3.0"
resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-0.3.0.tgz#275d8edaac4f1bb3326472089e7949c8394699dd"
dependencies:
lru-cache "2"
sigmund "~1.0.0"
"minimatch@2 || 3", minimatch@^3.0.2:
version "3.0.3"
resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.3.tgz#2a4e4090b96b2db06a9d7df01055a62a77c9b774"
dependencies:
brace-expansion "^1.0.0"
minimatch@^3.0.2, "minimatch@2 || 3":
version "3.0.3"
resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.3.tgz#2a4e4090b96b2db06a9d7df01055a62a77c9b774"
minimatch@^2.0.1:
version "2.0.10"
resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-2.0.10.tgz#8d087c39c6b38c001b97fca7ce6d0e1e80afbac7"
dependencies:
brace-expansion "^1.0.0"
@ -1699,12 +1688,9 @@ minimatch@~0.2.11:
lru-cache "2"
sigmund "~1.0.0"
minimatch@0.3:
version "0.3.0"
resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-0.3.0.tgz#275d8edaac4f1bb3326472089e7949c8394699dd"
dependencies:
lru-cache "2"
sigmund "~1.0.0"
minimist@0.0.8, minimist@~0.0.1:
version "0.0.8"
resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.8.tgz#857fcabfc3397d2625b8228262e86aa7a011b05d"
minimist@^0.2.0:
version "0.2.0"
@ -1714,24 +1700,16 @@ minimist@^1.1.0, minimist@^1.1.3, minimist@^1.2.0:
version "1.2.0"
resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.0.tgz#a35008b20f41383eec1fb914f4cd5df79a264284"
minimist@~0.0.1:
version "0.0.10"
resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.10.tgz#de3f98543dbf96082be48ad1a0c7cda836301dcf"
mkdirp@0.3.0:
version "0.3.0"
resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.3.0.tgz#1bbf5ab1ba827af23575143490426455f481fe1e"
minimist@0.0.8:
version "0.0.8"
resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.8.tgz#857fcabfc3397d2625b8228262e86aa7a011b05d"
mkdirp@^0.5.0, mkdirp@0.5.1, mkdirp@0.5.x:
mkdirp@0.5.1, mkdirp@0.5.x, mkdirp@^0.5.0:
version "0.5.1"
resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.1.tgz#30057438eac6cf7f8c4767f38648d6697d75c903"
dependencies:
minimist "0.0.8"
mkdirp@0.3.0:
version "0.3.0"
resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.3.0.tgz#1bbf5ab1ba827af23575143490426455f481fe1e"
mocha@^2.4.5:
version "2.5.3"
resolved "https://registry.yarnpkg.com/mocha/-/mocha-2.5.3.tgz#161be5bdeb496771eb9b35745050b622b5aefc58"
@ -1751,10 +1729,6 @@ ms@0.7.1:
version "0.7.1"
resolved "https://registry.yarnpkg.com/ms/-/ms-0.7.1.tgz#9cd13c03adbff25b65effde7ce864ee952017098"
ms@0.7.2:
version "0.7.2"
resolved "https://registry.yarnpkg.com/ms/-/ms-0.7.2.tgz#ae25cf2512b3885a1d95d7f037868d8431124765"
multipipe@^0.1.0, multipipe@^0.1.2:
version "0.1.2"
resolved "https://registry.yarnpkg.com/multipipe/-/multipipe-0.1.2.tgz#2a8f2ddf70eed564dff2d57f1e1a137d9f05078b"
@ -1820,7 +1794,7 @@ on-finished@~2.3.0:
dependencies:
ee-first "1.1.1"
once@^1.3.0, once@1.x:
once@1.x, once@^1.3.0:
version "1.4.0"
resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1"
dependencies:
@ -2022,18 +1996,6 @@ read-pkg@^1.0.0:
normalize-package-data "^2.3.2"
path-type "^1.0.0"
readable-stream@^2.0.0, readable-stream@^2.0.1, readable-stream@^2.0.4, readable-stream@^2.0.5:
version "2.2.2"
resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.2.2.tgz#a9e6fec3c7dda85f8bb1b3ba7028604556fc825e"
dependencies:
buffer-shims "^1.0.0"
core-util-is "~1.0.0"
inherits "~2.0.1"
isarray "~1.0.0"
process-nextick-args "~1.0.6"
string_decoder "~0.10.x"
util-deprecate "~1.0.1"
"readable-stream@>=1.0.33-1 <1.1.0-0", readable-stream@~1.0.17:
version "1.0.34"
resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-1.0.34.tgz#125820e34bc842d2f2aaafafe4c2916ee32c157c"
@ -2043,16 +2005,7 @@ readable-stream@^2.0.0, readable-stream@^2.0.1, readable-stream@^2.0.4, readable
isarray "0.0.1"
string_decoder "~0.10.x"
readable-stream@~1.1.9:
version "1.1.14"
resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-1.1.14.tgz#7cf4c54ef648e3813084c636dd2079e166c081d9"
dependencies:
core-util-is "~1.0.0"
inherits "~2.0.1"
isarray "0.0.1"
string_decoder "~0.10.x"
readable-stream@~2.0.0, readable-stream@~2.0.5:
readable-stream@^2.0.0, readable-stream@^2.0.1, readable-stream@^2.0.4, readable-stream@^2.0.5, readable-stream@~2.0.0, readable-stream@~2.0.5:
version "2.0.6"
resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.0.6.tgz#8f90341e68a53ccc928788dacfcd11b36eb9b78e"
dependencies:
@ -2063,6 +2016,15 @@ readable-stream@~2.0.0, readable-stream@~2.0.5:
string_decoder "~0.10.x"
util-deprecate "~1.0.1"
readable-stream@~1.1.9:
version "1.1.14"
resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-1.1.14.tgz#7cf4c54ef648e3813084c636dd2079e166c081d9"
dependencies:
core-util-is "~1.0.0"
inherits "~2.0.1"
isarray "0.0.1"
string_decoder "~0.10.x"
rechoir@^0.6.2:
version "0.6.2"
resolved "https://registry.yarnpkg.com/rechoir/-/rechoir-0.6.2.tgz#85204b54dba82d5742e28c96756ef43af50e3384"
@ -2105,14 +2067,14 @@ repeating@^2.0.0:
dependencies:
is-finite "^1.0.0"
replace-ext@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/replace-ext/-/replace-ext-1.0.0.tgz#de63128373fcbf7c3ccfa4de5a480c45a67958eb"
replace-ext@0.0.1:
version "0.0.1"
resolved "https://registry.yarnpkg.com/replace-ext/-/replace-ext-0.0.1.tgz#29bbd92078a739f0bcce2b4ee41e837953522924"
replace-ext@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/replace-ext/-/replace-ext-1.0.0.tgz#de63128373fcbf7c3ccfa4de5a480c45a67958eb"
resolve-dir@^0.1.0:
version "0.1.1"
resolved "https://registry.yarnpkg.com/resolve-dir/-/resolve-dir-0.1.1.tgz#b219259a5602fac5c5c496ad894a6e8cc430261e"
@ -2120,7 +2082,7 @@ resolve-dir@^0.1.0:
expand-tilde "^1.2.2"
global-modules "^0.2.3"
resolve@^1.1.6, resolve@^1.1.7, resolve@1.1.x:
resolve@1.1.x, resolve@^1.1.6, resolve@^1.1.7:
version "1.1.7"
resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.1.7.tgz#203114d82ad2c5ed9e8e0411b3932875e889e97b"
@ -2149,14 +2111,14 @@ selenium-webdriver:
tmp "0.0.30"
xml2js "^0.4.17"
"semver@2 || 3 || 4 || 5", semver@^5.3.0:
version "5.3.0"
resolved "https://registry.yarnpkg.com/semver/-/semver-5.3.0.tgz#9b2ce5d3de02d17c6012ad326aa6b4d0cf54f94f"
semver@^4.1.0:
version "4.3.6"
resolved "https://registry.yarnpkg.com/semver/-/semver-4.3.6.tgz#300bc6e0e86374f7ba61068b5b1ecd57fc6532da"
semver@^5.3.0, "semver@2 || 3 || 4 || 5":
version "5.3.0"
resolved "https://registry.yarnpkg.com/semver/-/semver-5.3.0.tgz#9b2ce5d3de02d17c6012ad326aa6b4d0cf54f94f"
send@0.14.1:
version "0.14.1"
resolved "https://registry.yarnpkg.com/send/-/send-0.14.1.tgz#a954984325392f51532a7760760e459598c89f7a"
@ -2307,6 +2269,10 @@ strip-indent@^1.0.1:
dependencies:
get-stdin "^4.0.1"
supports-color@1.2.0:
version "1.2.0"
resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-1.2.0.tgz#ff1ed1e61169d06b3cf2d588e188b18d8847e17e"
supports-color@^0.2.0:
version "0.2.0"
resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-0.2.0.tgz#d92de2694eb3f67323973d7ae3d8b55b4c22190a"
@ -2321,10 +2287,6 @@ supports-color@^3.1.0:
dependencies:
has-flag "^1.0.0"
supports-color@1.2.0:
version "1.2.0"
resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-1.2.0.tgz#ff1ed1e61169d06b3cf2d588e188b18d8847e17e"
systemjs@^0.19.14:
version "0.19.41"
resolved "https://registry.yarnpkg.com/systemjs/-/systemjs-0.19.41.tgz#835d2c0f10bf403b551fedc875f84bb44a02c4eb"
@ -2419,9 +2381,9 @@ typedarray@~0.0.5:
version "0.0.6"
resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777"
typescript@^2.2.0-dev:
version "2.2.0-dev.20161115"
resolved "https://registry.yarnpkg.com/typescript/-/typescript-2.2.0-dev.20161115.tgz#62a9ff8878ac32d8029c3959b33fbae900ee7173"
typescript@next:
version "2.2.0-dev.20161127"
resolved "https://registry.yarnpkg.com/typescript/-/typescript-2.2.0-dev.20161127.tgz#3da590d1a0f15da9c39d2ebeab2006fb6b4d8949"
typhonjs-istanbul-instrument-jspm@^0.1.0:
version "0.1.0"
@ -2582,6 +2544,10 @@ window-size@0.1.0:
version "0.1.0"
resolved "https://registry.yarnpkg.com/window-size/-/window-size-0.1.0.tgz#5438cd2ea93b202efa3a19fe8887aee7c94f9c9d"
wordwrap@0.0.2:
version "0.0.2"
resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-0.0.2.tgz#b79669bb42ecb409f83d583cad52ca17eaa1643f"
wordwrap@^1.0.0, wordwrap@~1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-1.0.0.tgz#27584810891456a4171c8d0226441ade90cbcaeb"
@ -2590,10 +2556,6 @@ wordwrap@~0.0.2:
version "0.0.3"
resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-0.0.3.tgz#a3d5da6cd5c0bc0008d37234bbaf1bed63059107"
wordwrap@0.0.2:
version "0.0.2"
resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-0.0.2.tgz#b79669bb42ecb409f83d583cad52ca17eaa1643f"
wrappy@1:
version "1.0.2"
resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f"
@ -2611,7 +2573,7 @@ xmlbuilder@^4.1.0:
dependencies:
lodash "^4.0.0"
xtend@^4.0.0, "xtend@>=4.0.0 <4.1.0-0", xtend@~4.0.0:
"xtend@>=4.0.0 <4.1.0-0", xtend@^4.0.0, xtend@~4.0.0:
version "4.0.1"
resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.1.tgz#a5c6d532be656e23db820efb943a1f04998d63af"
@ -2648,4 +2610,3 @@ zip-stream@^1.1.0:
compress-commons "^1.1.0"
lodash "^4.8.0"
readable-stream "^2.0.0"