{"id":16123949,"url":"https://github.com/evenchange4/react-intl-po","last_synced_at":"2025-04-06T07:15:06.575Z","repository":{"id":6193984,"uuid":"54898768","full_name":"evenchange4/react-intl-po","owner":"evenchange4","description":":rocket: Extract POT from react-intl and convert back to json.","archived":false,"fork":false,"pushed_at":"2024-04-05T21:28:04.000Z","size":582,"stargazers_count":89,"open_issues_count":20,"forks_count":23,"subscribers_count":4,"default_branch":"master","last_synced_at":"2024-04-14T07:24:43.414Z","etag":null,"topics":["babel-plugin-react-intl","po2json","pot","react-intl"],"latest_commit_sha":null,"homepage":"","language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/evenchange4.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2016-03-28T14:38:28.000Z","updated_at":"2024-06-18T13:59:06.564Z","dependencies_parsed_at":"2023-10-21T01:47:47.793Z","dependency_job_id":"f857a2b3-9497-4fc7-81c9-2732acbd132c","html_url":"https://github.com/evenchange4/react-intl-po","commit_stats":{"total_commits":123,"total_committers":13,"mean_commits":9.461538461538462,"dds":"0.44715447154471544","last_synced_commit":"85313cd481b72de481e4d07526397339821bfa70"},"previous_names":[],"tags_count":21,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/evenchange4%2Freact-intl-po","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/evenchange4%2Freact-intl-po/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/evenchange4%2Freact-intl-po/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/evenchange4%2Freact-intl-po/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/evenchange4","download_url":"https://codeload.github.com/evenchange4/react-intl-po/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":247445682,"owners_count":20939961,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["babel-plugin-react-intl","po2json","pot","react-intl"],"created_at":"2024-10-09T21:19:15.313Z","updated_at":"2025-04-06T07:15:06.537Z","avatar_url":"https://github.com/evenchange4.png","language":"JavaScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# react-intl-po\n\n\u003e Extract POT from react-intl and convert back to json.\n\u003e\n\u003e messages.json → POT → PO → translation.json\n\n[![Travis][build-badge]][build]\n[![Codecov Status][codecov-badge]][codecov]\n[![npm package][npm-badge]][npm]\n[![npm downloads][npm-downloads]][npm]\n\n[![Dependency Status][dependency-badge]][dependency]\n[![devDependency Status][devdependency-badge]][devdependency]\n[![peerDependency Status][peerdependency-badge]][peerdependency]\n\n[![license][license-badge]][license]\n[![prettier](https://img.shields.io/badge/styled_with-prettier-ff69b4.svg)](https://github.com/prettier/prettier)\n\n## Tutorial\n\nPlease take a look at standalone repo based on Create-React-App: https://github.com/evenchange4/react-intl-po-example\n\n## Installation\n\n```sh\n$ yarn add react-intl-po\n```\n\n## Requirements and Workflow\n\n* [react-intl](https://github.com/yahoo/react-intl) `^2.0.0`\n* [babel-plugin-react-intl](https://github.com/yahoo/babel-plugin-react-intl) `^2.0.0`\n\n![RIP Workflow](./docs/workflow.png)\n\n## Usage\n\nThere are two sub-commands of `react-intl-po` or `rip`:\n\n1.  json2pot: Convert the json files extracted from _babel-plugin-react-intl_ into one `.pot` file.\n2.  po2json: Convert translated _.po_ files back to `.json` format.\n\n### json2pot\n\n```sh\n$ rip json2pot '_translations/src/**/*.json' \\\n    -o ./mcs-public.pot\n```\n\n| **Arguments**                     | **Description**                                                       |\n| --------------------------------- | --------------------------------------------------------------------- |\n| `srcPatterns`                     | The pattern of _.json_ files extracted from _babel-plugin-react-intl_ |\n| `-o, --output \u003cpath\u003e`             | The output pathname of _.pot_ file to be translated                   |\n| `-k, --message-key [key]`         | [Optional] Translation message key (default key is `defaultMessage`)  |\n| `-c, --message-context [context]` | [Optional] Translation message context (defaults to no context)       |\n\n### po2json\n\n#### Case 1: Output one file per locale if a `directory` is set\n\n```sh\n$ rip po2json './node_modules/mcs-translation/po/mcs-public*.po' \\\n     -m './_translations/src/**/*.json' \\\n     -o './translations'\n```\n\n#### Case 2: Output one merged file if a `.json file` is set\n\n```sh\n$ rip po2json './node_modules/mcs-translation/po/mcs-public*.po' \\`\n     -m './_translations/src/**/*.json' \\\n     -o './translations.json'\n```\n\n| **Arguments**                             | **Description**                                                                                                                                                                                                                                   |\n| ----------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |\n| `srcPatterns`                             | The pattern of translated _.po_ files                                                                                                                                                                                                             |\n| `-m, --messages-pattern \u003cpath\u003e`           | The pattern of _.json_ files extracted from _babel-plugin-react-intl_                                                                                                                                                                             |\n| `-o, --output \u003cpath\u003e`                     | The output pathname of a file / directory                                                                                                                                                                                                         |\n| `-k, --message-key [key]`                 | [Optional] Translation message key (default key is `defaultMessage`)                                                                                                                                                                              |\n| `-c, --message-context [context]`         | [Optional] Translation message context (defaults to no context)                                                                                                                                                                                   |\n| `-l, --lang-mapper-pattern \u003cpattern\u003e`     | [Optional] Custom regex to use for lang mapping. [PR#122](https://github.com/evenchange4/react-intl-po/pull/122)                                                                                                                                  |\n| `-i, --lang-mapper-pattern-index [index]` | [Optional] When specifying a custom lang-mapper-pattern, the index of match to use for the lang mapping. Default is 1, index is ignored if not using a custom lang mapping regex. [PR#122](https://github.com/evenchange4/react-intl-po/pull/122) |\n| `--indentation \u003cnumber\\|char\u003e`            | [Optional] Specify a number of spaces or a set of characters to be used before each entry of the resulting json file. Defaults to `null`, which means the entries are not prefixed with spaces.                                                   |\n| `--sort-by-id`                            | [Optional] If specified, the entries of each language are sorted by id before being output                                                                                                                                                        |\n\n## Property\n\n## Q\u0026A\n\n### How to translate the same message into two different meanings?\n\n#### Option 1 (Recommended):\n\nSet the `message-context (-c)` to `'id'` of message object from _babel-plugin-react-intl_ (there is no context by default).\n\nThe advantage of this option over Option 2 (below) is that PO file editors that provide features such as translation suggestions or error-checking often expect the message key to be `defaultMessage`.\n\n```sh\n$ rip po2json './node_modules/mcs-translation/po/mcs-public*.po' \\\n     -m './_translations/src/**/*.json' \\\n     -o './translations' \\\n     -c 'id'\n\n$ rip po2json './node_modules/mcs-translation/po/mcs-public*.po' \\`\n    -m './_translations/src/**/*.json' \\\n    -o './translations.json' \\\n    -c 'id'\n```\n\nExample: https://github.com/evenchange4/react-intl-po-example#option\n\n#### Option 2: [Maybe deprecated next major release]\n\nSet the `message-key (-k)` to `'id'` of message object from _babel-plugin-react-intl_ (default key is `'defaultMessage'`). ([#41](https://github.com/evenchange4/react-intl-po/pull/41))\n\n```sh\n$ rip po2json './node_modules/mcs-translation/po/mcs-public*.po' \\\n     -m './_translations/src/**/*.json' \\\n     -o './translations' \\\n     -k 'id'\n\n$ rip po2json './node_modules/mcs-translation/po/mcs-public*.po' \\`\n    -m './_translations/src/**/*.json' \\\n    -o './translations.json' \\\n    -k 'id'\n```\n\n## Development\n\n```sh\n$ yarn install --pure-lockfile\n```\n\n### Ramda.js\n\nYou can use `R.tap()` for developing.\n\n```diff\nR.pipe(\n  R.concat(...),\n+ R.tap(e =\u003e console.log(e)),\n  R.mergeAll,\n);\n```\n\n### Requirements\n\n* node \u003e= 9.11.1\n* yarn \u003e= 1.5.1\n\n### Test\n\n```sh\n$ yarn run format\n$ yarn run eslint\n$ yarn run test:watch\n```\n\n### NPM Release\n\n\u003e Any git tags.\n\n1.  Create a new git tag\n2.  Update `CHANGELOG.md`\n\n```sh\n$ npm version patch\n```\n\n---\n\n## CONTRIBUTING\n\n* ⇄ Pull requests and ★ Stars are always welcome.\n* For bugs and feature requests, please create an issue.\n* Pull requests must be accompanied by passing automated tests (`$ yarn run test`).\n\n## [CHANGELOG](CHANGELOG.md)\n\n## [LICENSE](LICENSE)\n\nMIT: [http://michaelhsu.mit-license.org](http://michaelhsu.mit-license.org)\n\n[build-badge]: https://img.shields.io/travis/evenchange4/react-intl-po/master.svg?style=flat-square\n[build]: https://travis-ci.org/evenchange4/react-intl-po\n[npm-badge]: https://img.shields.io/npm/v/react-intl-po.svg?style=flat-square\n[npm]: https://www.npmjs.org/package/react-intl-po\n[codecov-badge]: https://img.shields.io/codecov/c/github/evenchange4/react-intl-po.svg?style=flat-square\n[codecov]: https://codecov.io/github/evenchange4/react-intl-po?branch=master\n[npm-downloads]: https://img.shields.io/npm/dt/react-intl-po.svg?style=flat-square\n[license-badge]: https://img.shields.io/npm/l/react-intl-po.svg?style=flat-square\n[license]: http://michaelhsu.mit-license.org/\n[dependency-badge]: https://david-dm.org/evenchange4/react-intl-po.svg?style=flat-square\n[dependency]: https://david-dm.org/evenchange4/react-intl-po\n[devdependency-badge]: https://david-dm.org/evenchange4/react-intl-po/dev-status.svg?style=flat-square\n[devdependency]: https://david-dm.org/evenchange4/react-intl-po#info=devDependencies\n[peerdependency-badge]: https://david-dm.org/evenchange4/react-intl-po/peer-status.svg?style=flat-square\n[peerdependency]: https://david-dm.org/evenchange4/react-intl-po#info=peerDependencies\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fevenchange4%2Freact-intl-po","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fevenchange4%2Freact-intl-po","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fevenchange4%2Freact-intl-po/lists"}