Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/i18next/i18next-gettext-converter
converts gettext .mo or .po to 18next json format and vice versa
https://github.com/i18next/i18next-gettext-converter
gettext json
Last synced: 5 days ago
JSON representation
converts gettext .mo or .po to 18next json format and vice versa
- Host: GitHub
- URL: https://github.com/i18next/i18next-gettext-converter
- Owner: i18next
- License: mit
- Created: 2012-09-04T13:03:34.000Z (over 12 years ago)
- Default Branch: master
- Last Pushed: 2024-05-01T15:58:38.000Z (8 months ago)
- Last Synced: 2024-05-22T03:03:25.060Z (7 months ago)
- Topics: gettext, json
- Language: JavaScript
- Homepage:
- Size: 1.62 MB
- Stars: 191
- Watchers: 6
- Forks: 56
- Open Issues: 7
-
Metadata Files:
- Readme: README.md
- Changelog: CHANGELOG.md
- License: LICENSE.md
Awesome Lists containing this project
README
# i18next-gettext-converter
[![Build Status][build-badge]][build]
[![npm package][npm-badge]][npm]
[![Coverage Status][coveralls-badge]][coveralls]## Introduction
Project goal is to convert files from gettext to i18next json format and vice versa.
## Installation
1. first install node.js from [nodejs.org](http://nodejs.org/).
2. `npm install i18next-conv -g`For i18next < 2.0.0 use [email protected], for i18next < 3.0.0 use [email protected], for i18next < 12.0.0 use i18next-conv@<8.
## Usage
### convert .mo or .po to i18next json
in your console type:
__for help:__
````
i18next-conv -h
````__to convert a .mo or .po file to i8next json:__
````
i18next-conv -l [locale] -s [sourcePath] -t [targetPath]
````eg.: i18next-conv -l en -s ./locales/en.po -t ./locales/en/translation.json
_if no target (-t) is specified file will be stored to [sourceDir]/[locale]/translation.json._
__to convert i18next json to a .mo or .po file:__
````
i18next-conv -l [locale] -s [sourcePath] -t [targetPath]
````eg.: i18next-conv -l en -s ./locales/en.translation.json -t ./locales/en/translation.mo (or .po)
_if no target (-t) is specified file will be stored to [sourceDir]/[locale]/translation.po._
__for utf8-encoded po-files add these lines to your po file:__
````
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
````It is necessary if you get corrupted output from the command above.
__to filter incoming po-file translations, pass the path to a module that exports a filter function:__
````
i18next-conv -l [locale] -s [sourcePath] -t [targetPath] -f [filterPath]
````eg.: i18next-conv -l en -s ./locales/en.po -t ./locales/en/translation.json -f ./filter.js
The filter module should export a single function that accepts the gettext object, the locale and a callback
as its arguments. For the full API of the gettext object, check [node-gettext](https://github.com/alexanderwallin/node-gettext).
The function can then add/edit/delete translations, invoking the callback with an error object and the
translation table.eg.
```javascript
// Delete all keys which do not belong to the frontend
module.exports = function (gt, locale, callback) {
const clientSideSource = '/frontend/';
const domain = 'messages';
const translations = gt.catalogs[locale][domain].translations;
gt.setLocale(locale); // Needed for when getComment is calledObject.keys(translations).forEach(ctxt => {
Object.keys(translations[ctxt]).forEach(key => {
const comment = gt.getComment('messages', ctxt, key);
if (comment) {
if (comment.reference && comment.reference.indexOf(clientSideSource) === -1) {
delete translations[ctxt][key];
}
}
});
});callback(null, translations);
};
```## Options
```js
program
.version(i18nextConv.version)
.option('-b, --base [path]', 'Specify path for the base language file. only take effect with -K option', '')
.option('-f, --filter ', 'Specify path to gettext filter')
.option('-l, --language ', 'Specify the language code, eg. \'en\'')
.option('-p, --pot', 'Generate POT file.')
.option('-s, --source ', 'Specify path to read from')
.option('-t, --target [path]', 'Specify path to write to', '')
.option('-K, --keyasareference', 'Deal with the reference comment as a key', false)
.option('-k, --keyseparator [path]', 'Specify keyseparator you want to use, defaults to ##', '##')
.option('-P, --plurals ', 'Specify path to plural forms definitions')
.option('--project ', 'Specify the project-id-version when converting json to gettext')
.option('--quiet', 'Silence output', false)
.option('--gettextDefaultCharset', 'Default charset when parsing gettext files with gettext-parser', 'UTF-8')
.option('--skipUntranslated', 'Skip untranslated keys when converting into json', false)
.option('--splitNewLine', 'Silence output', false)
.option('--ctxSeparator [sep]', 'Specify the context separator', '_')
.option('--ignorePlurals', 'Do not process the plurals')
.option('--compatibilityJSON ', "Set to 'v4' to generate i18next@21 compatible json files")
.option('--foldLength', 'Specify the character fold length for strings', 76)
.option('--noDate', 'Removes timestamp related lines from output file (POT-Creation-Date and PO-Revision-Date lines)')
.parse(process.argv);
```## API
This module exposes a few functions to convert json to gettext and gettext to json. It accepts the same options as the cli.
```js
const path = require('path');
const { readFileSync, writeFileSync } = require('fs');
const {
i18nextToPo,
i18nextToPot,
i18nextToMo,
gettextToI18next,
} = require('i18next-conv');const source = path.join(__dirname, '../locales/ua-UK/translation.json');
const options = {/* you options here */}function save(target) {
return result => {
writeFileSync(target, result);
};
}i18nextToPo('ua-UK', readFileSync(source), options).then(save('../locales/ua-UK/translation.po'));
i18nextToPot('ua-UK', readFileSync(source), options).then(save('../locales/ua-UK/translation.pot'));
i18nextToMo('ua-UK', readFileSync(source), options).then(save('../locales/ua-UK/translation.mo'));gettextToI18next('ua-UK', readFileSync('../locales/ua-UK/translation.po'), options)
.then(save('../locales/ua-UK/translation.json'));```
## All credits go to
- [andri9's node-gettext](https://github.com/andris9/node-gettext) for parsing .mo and .po files
- [TJ Holowaychuk's commander.js](https://github.com/visionmedia/commander.js/) for console program## License
See the [LICENSE](LICENSE.md) file for license rights and limitations.
[build-badge]: https://img.shields.io/github/actions/workflow/status/i18next/i18next-gettext-converter/test.yml?event=push&style=flat-square
[build]: https://github.com/i18next/i18next-gettext-converter/actions[npm-badge]: https://img.shields.io/npm/v/i18next-conv.svg?style=flat-square
[npm]: https://www.npmjs.org/package/i18next-conv[coveralls-badge]: https://img.shields.io/coveralls/i18next/i18next-gettext-converter/master.svg?style=flat-square
[coveralls]: https://coveralls.io/r/i18next/i18next-gettext-converter