# TS Gettext Extractor ![NPM Version](https://img.shields.io/npm/v/ts-gettext-extractor?style=for-the-badge) ![Crates.io Version](https://img.shields.io/crates/v/ts-gettext-extractor?style=for-the-badge) A command line utility to generate Gettext template files (`.pot`) from Javascript/Typescript code. Uses SWC to parse JS files. ## Usage See help for more details ```console $ ts-gettext-extractor --help Generate Gettext template files from Javascript/Typescript code Usage: ts-gettext-extractor [OPTIONS] --output-folder Options: --exclude [...] A list of patterns to exclude [default: /.git/ /node_modules/ /__tests__/ .test. /__mocks__/ .mock. .story. .cy.] --path The path to the file to read. Defaults to current folder --output-folder The folder where pot files will be written. Each domain will have its own file --references-relative-to Which folder the references are relative to. Defaults to the output folder --default-domain The default domain to use for strings that don't have a domain specified [default: default] -h, --help Print help ``` ## Supported functions - **`gettext`** or **`__`** — e.g. `__('String')` - **`ngettext`** or **`__n`** — e.g. `__n('1 item', '%n items', count)` - **`pgettext`** or **`__p`** — e.g. `__p('context', 'String')` - **`npgettext`** or **`__np`** — e.g. `__np('context', '1 item', '%n items', count)` - **`dgettext`** or **`__d`** — e.g. `__d('domain', 'String')` - **`dngettext`** or **`__dn`** — e.g. `__dn('domain', '1 item', '%n items', count)` - **`dpgettext`** or **`__dp`** — e.g. `__dp('domain', 'context', 'String')` - **`dnpgettext`** or **`__dnp`** — e.g. `__dnp('domain', 'context', '1 item', '%n items', count)` One tagged template literal is supported, which is `__` with no variables. E.g. `` __`My string` `` ## Metadata This library produces a few metadata in the POT files as below. ### References References to the code is produced in accordance with the [po file spec](https://www.gnu.org/software/gettext/manual/html_node/PO-Files.html). Each reference mentioned the source file name and line number. References are relative to the `--references-relative-to` argument (or `--output-folder`). ### Comments Comments before or after a `gettext` function call are also extracted. This only applies to comments directly before the function call, not comments on the previous line. For example, this WILL be extracted: ```js const myText = /* ✅ A comment that will be extracted */ __('My text'); ``` This WILL NOT be extracted: ```js /* ❌ A comment that won't be extracted */ const myText = __('My text'); ```