Spittal / vue-i18n-extract

Manage vue-i18n localization with static analysis
https://pixari.github.io/vue-i18n-extract/#what-is-it
MIT License
310 stars 85 forks source link
hacktoberfest i18n internationalization internationalization-plugin javascript nodejs vue vue-i18n

vue-i18n-logo

NPM Version Downloads Known Vulnerabilities Maintainability Tests

vue-i18n-extract is built to work with your Vue.js projects using the library vue-i18n. It runs static analysis on your Vue.js source code looking for any vue-i18n usage, in order to:

Content

Usage

From the command line

Run from the command line:

npx vue-i18n-extract report --vueFiles './path/to/source-files/**/*.?(js|vue)' --languageFiles './path/to/language-files/*.?(json|yml|yaml)'

As part of a project

Install the package in your project:

npm install --save-dev vue-i18n-extract

Use it via an npm script in your package.json file:

{
  "scripts": {
    "vue-i18n-extract": "vue-i18n-extract report --vueFiles './path/to/source-files/**/*.?(js|vue)' --languageFiles './path/to/language-files/*.?(json|yml|yaml|js)'"
  }
}

Finally, run:

npm run vue-i18n-extract

This will print out a table of missing keys in your language files, as well as unused keys in your language files.

As part of a Node.js script

Install the package in your project:

npm install --save-dev vue-i18n-extract

Import the module and use it like this:

const VueI18NExtract = require('vue-i18n-extract');

const report = VueI18NExtract.createI18NReport({
  vueFiles: './path/to/vue-files/**/*.?(js|vue)',
  languageFiles: './path/to/language-files/*.?(json|yml|yaml|js)',
});

Configuration

You can use the following configuration options via the vue-i18n-extract command line utility or a vue-i18n-extract.config.js configuration file.

You can generate a default configuration file using npx vue-i18n-extract init (it uses the following options: vue-i18n-extract.config.ts). Once you have a configuration file, you can run npx vue-i18n-extract.

vueFiles

languageFiles

output

add

remove

ci

separator

exclude

detect

noEmptyTranslation

missingTranslationString

Supported vue-i18n Formats

// Without dollar sign t('key.static') t("key.static") t(key.static)

// $tc Support for use with plurals $tc('key.static', 0) $tc("key.static", 1) $tc(key.static, 2)

// Without dollar sign tc('key.static', 0) tc("key.static", 1) tc(key.static, 2)


- i18n component:
```html
<i18n path="key.component"></i18n>
<i18n-t keypath="key.component"></i18n-t>
<Translate keypath="key.component"></Translate>

Note: As of right now there is no support for binding in a path like :path="condition ? 'string1' : 'string2'" there is just support for strings as shown above.

Why?

Setting up a Vue.js app with internationalization (i18n) support is easy nowadays: Once you have installed the plugin and injected into the Vue instance, you can just put $t('Hello World') inside Vue.js component templates to use the plugin. However, in our personal experience we found it very difficult to keep the language files and the .vue files in sync.

That's why we wrote vue-i18n-extract. We needed a way to analyze and compare our language files to our Vue.js source files, then report the result in a useful way.

Contribution

Please make sure to read the Contributing Guide before making a pull request.

License

MIT