# 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
```