Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
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.
- Host: GitHub
- URL: https://github.com/gmarty/xgettext
- Owner: gmarty
- License: mit
- Created: 2012-05-30T09:15:12.000Z (over 12 years ago)
- Default Branch: master
- Last Pushed: 2024-06-16T15:05:08.000Z (5 months ago)
- Last Synced: 2024-07-21T16:48:47.660Z (4 months ago)
- Language: JavaScript
- Homepage:
- Size: 850 KB
- Stars: 77
- Watchers: 8
- Forks: 35
- Open Issues: 5
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
- awesome-phalcon - xgettext-template - Extract gettext messages from Volt templates using a command line program that is identical to the [xgettext invocation](http://www.gnu.org/software/gettext/manual/gettext.html#xgettext-Invocation). (i18n)
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 keywordOutput 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.