wallet-core/packages/pogen
2021-03-18 13:56:20 +01:00
..
example get pogen via npm registry 2019-03-28 01:30:06 +01:00
.gitignore get pogen via npm registry 2019-03-28 01:30:06 +01:00
dumpTree.ts get pogen via npm registry 2019-03-28 01:30:06 +01:00
package.json 0006728: set up wallet CI pipeline for WebExtension build 2021-02-01 17:07:22 -03:00
pogen.ts get pogen via npm registry 2019-03-28 01:30:06 +01:00
README.md pogen readme 2021-03-18 13:56:20 +01:00
tsconfig.json modularize repo, use pnpm, improve typechecking 2020-08-03 13:01:05 +05:30
yarn.lock get pogen via npm registry 2019-03-28 01:30:06 +01:00

pogen - string extraction for internationalizing TypeScript programs

The pogen tool extracts internationalizable strings from TypeScript programs.

Invocation and Configuration

The pogen tool must be called from the root of an NPM package.

The input files are determined from the tsconfig.json file. All input files inside the package that the compiler would use are automatically processed.

Inside package.json, the following configuration options are supported:

{

  // [ ... ]

  "pogen": {
    // Output location of the pofile (mandatory)
    "pofile": "...",

    // Calls to plain i18n functions are extracted if they
    // are imported from this package.
    "plainI18nPackage": "@gnu-taler/taler-util",

    // Calls to react-style i18n functions are extracted if they
    // are imported from this package.
    "reactI18nPackage": "@gnu-taler/preact-i18n",
  }

}

Syntax

Two flavors of syntax are supported:

Template strings:

import { i18n } from "@gnu-taler/taler-util";

console.log(i18n.str`Hello World`);
console.log(i18n.str`Hello ${user}`);

console.log(i18n.plural(n, i18n.lazy`I have ${n} apple`, i18n.lazy`I have ${n} apples`));

React components:


import {
  Translate,
  TranslateSwitch,
  TranslateSingular,
  TranslatePlural
} from "@gnu-taler/preact-i18n";

<Translate>Hello, World</Translate>

// Placeholders are other React elements
<Translate>Hello, <span className="highlight">{userName}<span></Translate>

// Plain placeholders are not supported, they must be surrounded
// by an element:
// WRONG: <Translate>Hello, {userName}</Translate>

<TranslateSwitch n={numApples}>
  <TranslateSingular>I have <span>{n}</span> apple</TranslateSingular>
  <TranslatePlural>I have <span>{n}</span> apple</TranslatePlural>
</TranslateSwitch>