Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

Awesome Lists | Featured Topics | Projects

https://github.com/gmarty/xgettext

Extracts translatable strings from source. Identical to xgettext but for template languages.
https://github.com/gmarty/xgettext

Last synced: 3 months ago
JSON representation

Extracts translatable strings from source. Identical to xgettext but for template languages.

Awesome Lists containing this project

README

        

# xgettext-template [![Node.js CI](https://github.com/gmarty/xgettext/actions/workflows/node.js.yml/badge.svg)](https://github.com/gmarty/xgettext/actions/workflows/node.js.yml)
Extracts translatable strings from source. Identical to [xgettext(1)](http://www.gnu.org/software/gettext/manual/gettext.html#xgettext-Invocation) but for template languages.

## Template language support
* Handlebars (using [gettext-handlebars](https://github.com/smhg/gettext-handlebars))
* Swig (using [gettext-swig](https://github.com/smhg/gettext-swig))
* Volt (using [gettext-volt](https://github.com/perchlayer/gettext-volt))
* EJS (using [gettext-ejs](https://github.com/pekala/gettext-ejs))

React's **JSX** and **Pug** are todos (PRs are much appreciated).

## Installation
``` bash
$ npm install -g xgettext-template
```

## Usage
``` bash
$ xgettext-template [OPTION] [INPUTFILE]...
```
#### Options
```
Input file location:
-f, --files-from get list of input files from FILE
-D, --directory add DIRECTORY to list for input files search[default: ["."]]

Output file location:
-o, --output write output to specified file [default: "messages.po"]

Choice of input file language:
-L, --language recognise the specified language
(Handlebars, Swig, Volt, EJS, Nunjucks)

Input file interpretation:
--from-code encoding of input files [default: "ascii"]

Operation mode:
-j, --join-existing join messages with existing file [default: false]

Language specific options:
-k, --keyword look for WORD as an additional keyword

Output details:
--force-po write PO file even if empty [default: false]
--no-location do not write '#: filename:line' lines [default: false]
-s, --sort-output generate sorted output [default: false]

Informative output:
-h, --help display this help and exit [boolean]
-V, --version output version information and exit [boolean]
```
More information about each option can be found in the [xgettext manual](https://www.gnu.org/software/gettext/manual/html_node/xgettext-Invocation.html).

#### In Poedit
Go to *File* - *Preferences...* in Poedit and add a new parser in the *Parsers* tab:

![Poedit parser configuration](http://gmarty.github.io/xgettext/Poedit.png)

Please note that in this Windows example you have to use `xgettext-template.cmd`. The `.cmd` extension should not be there on *nix platforms.

## General workflow
In the following Handlebars example translatable content is passed to helpers (`_` and `ngettext`):
``` html
{{_ "Sign in"}}

{{count}} {{ngettext "country" "countries" count}}


```

With Handlebars, this requires helpers being registered:
``` javascript
Handlebars.registerHelper('_', function(msgid) {
return i18n.gettext(msgid);
});

Handlebars.registerHelper('ngettext', function(msgid, plural, count) {
return i18n.ngettext(msgid, plural, count);
});
```
What this `i18n` object refers to is up to you. Some (client/server) options are:
* [node-gettext](https://github.com/andris9/node-gettext)
* [Jed](http://slexaxton.github.io/Jed/)

**xgettext-template** parses the strings above out of your templates into gettext's PO files.
These PO files are then translated and compiled to binary MO files using applications like [Poedit](http://www.poedit.net).
The MO files are passed as input the i18n library (above).

## Development

* Clone repository and run `npm install`.
* Have your editor run eslint or run `npm run lint` to lint.
* Run `npm test` to run tests.

## Note

xgettext-template initial development was founded by Dijiwan.