# 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 at the root of
the package.  All input files inside the package that the compiler would use
are automatically processed.
Further configuration options are specified in the package's ``package.json`` file.
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";
Hello, World
// Placeholders are other React elements
Hello, {userName}
// Plain placeholders are not supported, they must be surrounded
// by an element:
// WRONG: Hello, {userName}
  I have {n} apple
  I have {n} apple
```