Skip to content

Latest commit

 

History

History
113 lines (72 loc) · 3.34 KB

README.md

File metadata and controls

113 lines (72 loc) · 3.34 KB

easygettext

Build Status codecov.io

Simple gettext tokens extraction tools for HTML and Jade files. Also converts from PO to JSON.

Motivation

angular-gettext is a very neat tool, that comes with Grunt tooling to extract translation tokens from your Jade/HTML templates and JavaScript code.

Unfortunately, this has two drawbacks:

  • It isn't a simple command-line interface, and forces the usage of Grunt;
  • It is angular-specific.

This library comes up with two simple CLI tools to extract and compile your HTML tokens.

Why this library?

Our frontend toolchain, systematic doesn't rely on Grunt/Gulp/Broccoli/... and uses a combination of simple Makefiles and CLI tools to do the job.

The toolchain being framework-agnostic, we don't want to depend on Angular to extract our HTML translation tokens. On another note, we use the standard xgettext tool to extract our JavaScript translation tokens.

Nevertheless, the way [angular-gettext] does it (with tokens, directly in HTML) is elegant, is used by many other libraries and will also be the way to do it in Angular2.

Usage & Examples

gettext-extract

Simply invoke the tool on the templates you want to extract a POT dictionary template from. The optional '--ouput' argument enables you to directly output to a file.

gettext-extract --output dictionary.pot foo.html bar.jade

It recognizes the following token flavours (currently; feel free to extend it!)

<div translate>Hello World</div>
<div translate translate-context="According to...">Hello World</div>
<div translate translate-comment="My comment...">Hello World</div>
<div translate translate-plural="Hello worlds">Hello World</div>
<div placeholder="{{ 'Hello World' | translate }}"></div>
<div placeholder="{{ scopeVariable || ('Hello World' | translate) }}"></div>
<translate>Hello World</translate>

You can combine any context, comment and plural together. Also, you can use 'i18n' instead of 'translate' as master token.

You can also provide your own master tokens:

gettext-extract --attribute v-translate --output dictionary.pot foo.html bar.jade

gettext-extract --attribute v-translate --attribute v-i18n --output dictionary.pot foo.html bar.jade
gettext-compile

Outputs or writes to an output file, the sanitized JSON version of a PO file.

gettext-compile --output translations.json fr.po en.po de.po

Testing

Run the tests using mocha:

npm test

We also have extensive coverage:

npm run cover

Testing the CLI

Run:

npm run prepublish

Then run extract-cli.js:

./dist/extract-cli.js --attribute v-translate --attribute v-i18n ~/output.html

Credits

Thanks a million to @rubenv for the initial ideas and implementations in angular-gettext-tools, which inspired me a lot.

Thanks to ES6 and Babel for being awesome.

Licensing

MIT