webpack-translations-plugin
Version:
A plugin to create separate bundles for each of your supported languages, with reasonable defaults. #0CJS
167 lines (131 loc) • 5.41 kB
Markdown
# :globe_with_meridians: Webpack Translations Plugin
[](https://www.npmjs.com/package/webpack-translations-plugin)
[](https://github.com/transferwise/webpack-translations-plugin/releases)
[](https://circleci.com/gh/transferwise/webpack-translations-plugin)
[](https://github.com/transferwise/webpack-translations-plugin/blob/master/LICENSE)
This is a [Webpack](https://webpack.js.org/) plugin that creates bundles for each of the existing translations files automatically, with reasonable defaults. [#0CJS](https://twitter.com/hashtag/0CJS?src=hash)
Using it enables only serving the translations the user needs, therefore increasing performance.
## Usage
### Installation
`npm install --save-dev webpack-translations-plugin`
### Webpack config
```javascript
import WebpackTranslationsPlugin from 'webpack-translations-plugin';
export default {
...,
plugins: [..., new WebpackTranslationsPlugin()]
};
```
`WebpackTranslationsPlugin` takes an optional `options` object for configuration:
| Option | Description | Default |
|----------------|--------------------------------------------------------------------------------------------------|-----------------:|
| `directory` | containing translation JSONs | `translations` |
| `fileNameBase` | for translation JSONs (source file name without the extension) | `messages` |
| `moduleName` | will resolve as the translations object | `translations` |
| `development` | if `true`, will double escape the strings to work with webpack-dev-server | `false` |
### Source files
```javascript
import translations from 'translations';
const languages = Object.keys(translations);
if (languages.length === 1) {
// we only have one translation object
const language = languages[0];
console.log(translations[language]['a.translation.key']);
} else {
// we have all translations objects, so f.e. we can do:
console.log(translations['en-US']['a.translation.key']);
}
```
### File tree example
#### With translation files
```bash
.
├── node_modules
├── translations
│ ├── messages.json
│ ├── messages.en.json
│ ├── messages.en-US.json
│ └── messages.it.json
├── package.json
└── webpack.config.js
```
* `options.directory` is `'translations'`
* `options.fileNameBase` is `'messages'`
* `options.moduleName` is `'translations'`
As these are all defaults, no `options` object needs to be passed.
This will produce the following:
```bash
.
├── dist
│ ├── main.js
│ ├── main.en.js
│ ├── main.en-US.js
│ └── main.it.js
├── node_modules
├── translations
│ ├── messages.json
│ ├── messages.en.json
│ ├── messages.en-US.json
│ ├── messages.it.json
├── package.json
└── webpack.config.js
```
where `main.js` contain all the translations, so `'translations'` resolves as:
```javascript
{
"en": {
...
},
"en-US": {
...
},
"it": {
...
}
}
```
and `main.en.js`, `main.en-US.js` and `main.it.js` contain only the specific translations, so for `en-US` `'translations'` resolves as:
```javascript
{
"en-US": {
...
}
}
```
#### With only the source file
```bash
.
├── node_modules
├── translations
│ └── messages.json
├── package.json
└── webpack.config.js
```
No `options` object needs to be passed, as we're using the default values. The following will be built:
```bash
.
├── dist
│ └── main.js
├── node_modules
├── translations
│ └── messages.json
├── package.json
└── webpack.config.js
```
where `main.js` contain the source translations, under the `"source"` key:
```javascript
{
"source": {
...
}
}
```
## Contributing
1. Run tests with `npm run jest`. `npm test` will check for package and changelog version match, ESLint and Prettier format in addition.
1. Develop.
1. **Bump version number in `package.json` according to [semver](http://semver.org/) and add an item that a release will be based on to `CHANGELOG.md`**.
1. Submit your pull request from a feature branch and get code reviewed.
1. If the pull request is approved and the [CircleCI build](https://circleci.com/gh/transferwise/webpack-translations-plugin) passes, you will be able to squash and merge.
1. Code will automatically be released to [GitHub](https://github.com/transferwise/webpack-translations-plugin/releases) and published to [npm](https://www.npmjs.com/package/webpack-translations-plugin) according to the version specified in the changelog and `package.json`.
## Other
For features and bugs, feel free to [add issues](https://github.com/transferwise/webpack-translations-plugin/issues) or contribute.