jsonpo
is a CLI tool to convert JSON i18n entry list to gettext's POT file.
To install jsonpo system-wide, run:
$ sudo npm install -g i18n-json-po
Then you can use it like this:
$ jsonpo --help
i18n JSON -> POT converter
Options:
-h / --help Show this help
-s / --src FILE Define input JSON file name. Defaults
to stdin.
-o / --output FILE Define output PO[T] file name. If a file
already exists, it's contents will be
overwritten. Defaults to stdout.
-p / --printOccurences Print "#:" comments which indicate string
occurences in source code.
-c / --copyrightSubject SUBJ Team name or author name.
-b / --bugsEmail EMAIL Email for sending bugs
-y / --year YEAR Copyright year, defaults to current year.
By default jsonpo
accepts input JSON file from stdin, so it's possible to combine it with i18n-stex nicely:
$ stex -s 'src/**/*.ts' | jsonpo -p > strings.pot
Output defaults to stdout, so you can use standard unix stream redirection syntax.
By default, if optional meta
field is not present in input file, jsonpo
creates POT (template) file without any translations. If you need to add translations into file, you MUST pass meta
field according to its format. This will result in fully translated PO file. Note that if your translations include plural forms, you MUST provide pluralForms
member in meta
field: this field should contain formula describing how to choose proper plural form. See Plural-Forms
header in gettext's PO file description.
Take a look at CLI entry point - index.ts. Usage of the one and only convert
function is pretty straightforward and there you will find all examples you ever need.
i18n-json-po uses github-flow to accept & merge fixes and improvements. Basic process is:
- Fork the repo.
- Create a branch.
- Add or fix some code.
- Run Karma testing suite with
npm run test
and make sure nothing is broken - Add some tests for your new code or fix broken tests.
- Run
npm run build
to build pure-js distribution files. - Commit & push.
- Create a new pull request to original repo.
Pull requests with failing tests will not be accepted. Also, if you add or modify packages to package.json
, make sure you use yarn
and update yarn.lock
.