Full Code of kazupon/vue-i18n for AI

v8.x 76ab980d32a3 cached
556 files
5.2 MB
1.4M tokens
875 symbols
1 requests
Download .txt
Showing preview only (5,579K chars total). Download the full file or copy to clipboard to get everything.
Repository: kazupon/vue-i18n
Branch: v8.x
Commit: 76ab980d32a3
Files: 556
Total size: 5.2 MB

Directory structure:
gitextract_4s507kkn/

├── .babelrc
├── .dependabot/
│   └── config.yml
├── .editorconfig
├── .eslintignore
├── .eslintrc.js
├── .flowconfig
├── .github/
│   ├── FUNDING.yml
│   ├── ISSUE_TEMPLATE/
│   │   ├── bug-report.yml
│   │   ├── config.yml
│   │   └── feature_request.yml
│   └── workflows/
│       ├── ci.yml
│       └── release.yml
├── .gitignore
├── .mergify.yml
├── .npmignore
├── BACKERS.md
├── CHANGELOG.md
├── CONTRIBUTING.md
├── LICENSE
├── README.md
├── SECURITY.md
├── assets/
│   └── README.md
├── config/
│   ├── .eslintrc.js
│   ├── banner.js
│   ├── build.js
│   ├── bundle.js
│   ├── entry.js
│   ├── karma-intl-plugin.js
│   ├── karma.base.conf.js
│   ├── karma.cover.conf.js
│   ├── karma.sauce.conf.js
│   ├── karma.unit.ci.conf.js
│   ├── karma.unit.conf.js
│   ├── nightwatch.conf.js
│   ├── version.js
│   └── webpack.dev.conf.js
├── decls/
│   ├── i18n.js
│   └── module.js
├── dist/
│   ├── README.md
│   ├── vue-i18n.common.js
│   ├── vue-i18n.esm.browser.js
│   ├── vue-i18n.esm.js
│   └── vue-i18n.js
├── docs/
│   ├── 404.html
│   ├── api/
│   │   └── index.html
│   ├── assets/
│   │   ├── css/
│   │   │   └── 0.styles.c299b601.css
│   │   └── js/
│   │       ├── 10.13689381.js
│   │       ├── 11.aa13f293.js
│   │       ├── 12.2b21ead8.js
│   │       ├── 13.b3706367.js
│   │       ├── 14.1819508a.js
│   │       ├── 15.12152ec7.js
│   │       ├── 16.c251473e.js
│   │       ├── 17.311179bd.js
│   │       ├── 18.a9d0f1d4.js
│   │       ├── 19.d0288f09.js
│   │       ├── 2.aa910774.js
│   │       ├── 20.9de38e10.js
│   │       ├── 21.65715f7c.js
│   │       ├── 22.7b59f449.js
│   │       ├── 23.11ece4c3.js
│   │       ├── 24.dffd1071.js
│   │       ├── 25.97b69148.js
│   │       ├── 26.616f0814.js
│   │       ├── 27.adf21b94.js
│   │       ├── 28.6bf6d42b.js
│   │       ├── 29.e8b42909.js
│   │       ├── 3.5e63523d.js
│   │       ├── 30.24889fb9.js
│   │       ├── 31.57bd94a5.js
│   │       ├── 32.14dc9bdc.js
│   │       ├── 33.4d59e7bf.js
│   │       ├── 34.adc9b2af.js
│   │       ├── 35.4e6e5ad7.js
│   │       ├── 36.7b1eb244.js
│   │       ├── 37.6584773d.js
│   │       ├── 38.7879de31.js
│   │       ├── 39.f7496f35.js
│   │       ├── 4.9735c0af.js
│   │       ├── 40.b5b5dc72.js
│   │       ├── 41.638a9c02.js
│   │       ├── 42.222a2780.js
│   │       ├── 43.b28cd4fc.js
│   │       ├── 44.67f64685.js
│   │       ├── 45.550cbef0.js
│   │       ├── 46.5ab1c570.js
│   │       ├── 47.d7b6ca42.js
│   │       ├── 48.185bface.js
│   │       ├── 49.1570bc72.js
│   │       ├── 5.0b14e886.js
│   │       ├── 50.0e187269.js
│   │       ├── 51.c993f5c3.js
│   │       ├── 52.d66b2adb.js
│   │       ├── 53.21ae73c5.js
│   │       ├── 54.cd4c9ca8.js
│   │       ├── 55.caa71074.js
│   │       ├── 56.c8f906b3.js
│   │       ├── 57.388c89dc.js
│   │       ├── 58.ad6e14bc.js
│   │       ├── 59.3d64068b.js
│   │       ├── 6.b88753f1.js
│   │       ├── 60.12bfe8e9.js
│   │       ├── 61.446dac92.js
│   │       ├── 62.88ef088f.js
│   │       ├── 63.b6e0a846.js
│   │       ├── 64.f3210fad.js
│   │       ├── 65.afac79e3.js
│   │       ├── 66.d403fc3a.js
│   │       ├── 67.0bffd98a.js
│   │       ├── 7.eaeacaf7.js
│   │       ├── 8.344bd519.js
│   │       ├── 9.ec02aae8.js
│   │       └── app.5b04e7b0.js
│   ├── guide/
│   │   ├── component.html
│   │   ├── datetime.html
│   │   ├── directive.html
│   │   ├── fallback.html
│   │   ├── formatting.html
│   │   ├── hot-reload.html
│   │   ├── interpolation.html
│   │   ├── lazy-loading.html
│   │   ├── locale.html
│   │   ├── messages.html
│   │   ├── number.html
│   │   ├── pluralization.html
│   │   ├── sfc.html
│   │   └── tooling.html
│   ├── index.html
│   ├── installation.html
│   ├── introduction.html
│   ├── legacy/
│   │   ├── index.html
│   │   └── v5.html
│   ├── ru/
│   │   ├── api/
│   │   │   └── index.html
│   │   ├── guide/
│   │   │   ├── component.html
│   │   │   ├── datetime.html
│   │   │   ├── directive.html
│   │   │   ├── fallback.html
│   │   │   ├── formatting.html
│   │   │   ├── hot-reload.html
│   │   │   ├── interpolation.html
│   │   │   ├── lazy-loading.html
│   │   │   ├── locale.html
│   │   │   ├── messages.html
│   │   │   ├── number.html
│   │   │   ├── pluralization.html
│   │   │   ├── sfc.html
│   │   │   └── tooling.html
│   │   ├── index.html
│   │   ├── installation.html
│   │   ├── introduction.html
│   │   ├── legacy/
│   │   │   ├── index.html
│   │   │   └── v5.html
│   │   └── started.html
│   ├── started.html
│   └── zh/
│       ├── api/
│       │   └── index.html
│       ├── guide/
│       │   ├── component.html
│       │   ├── datetime.html
│       │   ├── directive.html
│       │   ├── fallback.html
│       │   ├── formatting.html
│       │   ├── hot-reload.html
│       │   ├── interpolation.html
│       │   ├── lazy-loading.html
│       │   ├── locale.html
│       │   ├── messages.html
│       │   ├── number.html
│       │   ├── pluralization.html
│       │   ├── sfc.html
│       │   └── tooling.html
│       ├── index.html
│       ├── installation.html
│       ├── introduction.html
│       ├── legacy/
│       │   ├── index.html
│       │   └── v5.html
│       └── started.html
├── examples/
│   ├── .eslintrc.js
│   ├── component/
│   │   └── index.html
│   ├── datetime/
│   │   └── index.html
│   ├── directive/
│   │   └── index.html
│   ├── es-modules/
│   │   └── index.html
│   ├── formatting/
│   │   ├── custom/
│   │   │   ├── .gitignore
│   │   │   ├── README.md
│   │   │   ├── babel.config.js
│   │   │   ├── package.json
│   │   │   ├── public/
│   │   │   │   └── index.html
│   │   │   └── src/
│   │   │       ├── App.vue
│   │   │       ├── formatter.js
│   │   │       ├── i18n.js
│   │   │       └── main.js
│   │   ├── escape-parameter-html/
│   │   │   └── index.html
│   │   ├── html/
│   │   │   └── index.html
│   │   ├── html-warning/
│   │   │   └── index.html
│   │   ├── list/
│   │   │   └── index.html
│   │   ├── named/
│   │   │   └── index.html
│   │   └── rails/
│   │       └── index.html
│   ├── hot/
│   │   ├── .gitignore
│   │   ├── README.md
│   │   ├── babel.config.js
│   │   ├── package.json
│   │   ├── public/
│   │   │   └── index.html
│   │   └── src/
│   │       ├── App.vue
│   │       ├── components/
│   │       │   └── HelloWorld.vue
│   │       ├── i18n.js
│   │       ├── locales/
│   │       │   ├── en.json
│   │       │   └── ja.json
│   │       └── main.js
│   ├── integration/
│   │   └── contentful/
│   │       ├── .contentful.sample.json
│   │       ├── .editorconfig
│   │       ├── .eslintrc.js
│   │       ├── .gitignore
│   │       ├── LICENSE
│   │       ├── README.md
│   │       ├── WHATS-NEXT.md
│   │       ├── assets/
│   │       │   └── README.md
│   │       ├── bin/
│   │       │   └── download-content-model.js
│   │       ├── components/
│   │       │   ├── README.md
│   │       │   ├── article-preview.vue
│   │       │   ├── language-header.vue
│   │       │   └── navigation.vue
│   │       ├── docs/
│   │       │   └── GETTING-STARTED.md
│   │       ├── layouts/
│   │       │   ├── README.md
│   │       │   └── default.vue
│   │       ├── locales/
│   │       │   ├── en-US.json
│   │       │   └── ja.json
│   │       ├── middleware/
│   │       │   └── README.md
│   │       ├── nuxt.config.js
│   │       ├── package.json
│   │       ├── pages/
│   │       │   ├── README.md
│   │       │   ├── blog/
│   │       │   │   ├── _slug.vue
│   │       │   │   └── index.vue
│   │       │   ├── index.vue
│   │       │   └── tags/
│   │       │       └── _tag.vue
│   │       ├── plugins/
│   │       │   ├── README.md
│   │       │   ├── contentful.js
│   │       │   └── i18n.js
│   │       ├── static/
│   │       │   └── README.md
│   │       └── store/
│   │           └── README.md
│   ├── interpolation/
│   │   ├── places/
│   │   │   └── index.html
│   │   └── slots/
│   │       └── index.html
│   ├── module/
│   │   ├── nuxt/
│   │   │   ├── .gitignore
│   │   │   ├── README.md
│   │   │   ├── assets/
│   │   │   │   └── README.md
│   │   │   ├── components/
│   │   │   │   ├── Logo.vue
│   │   │   │   └── README.md
│   │   │   ├── layouts/
│   │   │   │   ├── README.md
│   │   │   │   └── default.vue
│   │   │   ├── locales/
│   │   │   │   ├── en.json
│   │   │   │   └── ja.json
│   │   │   ├── middleware/
│   │   │   │   └── README.md
│   │   │   ├── nuxt.config.js
│   │   │   ├── package.json
│   │   │   ├── pages/
│   │   │   │   ├── README.md
│   │   │   │   └── index.vue
│   │   │   ├── plugins/
│   │   │   │   └── README.md
│   │   │   ├── static/
│   │   │   │   └── README.md
│   │   │   └── store/
│   │   │       └── README.md
│   │   ├── rollup/
│   │   │   ├── .gitignore
│   │   │   ├── README.md
│   │   │   ├── dist/
│   │   │   │   └── index.html
│   │   │   ├── package.json
│   │   │   ├── rollup.config.js
│   │   │   └── src/
│   │   │       ├── App.vue
│   │   │       └── index.js
│   │   └── webpack/
│   │       ├── .gitignore
│   │       ├── README.md
│   │       ├── babel.config.js
│   │       ├── package.json
│   │       ├── public/
│   │       │   └── index.html
│   │       ├── src/
│   │       │   ├── App.vue
│   │       │   └── main.js
│   │       └── vue.config.js
│   ├── number/
│   │   └── index.html
│   ├── number-formatting/
│   │   └── index.html
│   ├── perf/
│   │   ├── .gitignore
│   │   ├── README.md
│   │   ├── compiler/
│   │   │   ├── .gitignore
│   │   │   ├── README.md
│   │   │   ├── babel.config.js
│   │   │   ├── package.json
│   │   │   ├── public/
│   │   │   │   └── index.html
│   │   │   ├── src/
│   │   │   │   ├── App.vue
│   │   │   │   └── main.js
│   │   │   └── vue.config.js
│   │   ├── directive/
│   │   │   ├── .gitignore
│   │   │   ├── README.md
│   │   │   ├── babel.config.js
│   │   │   ├── package.json
│   │   │   ├── public/
│   │   │   │   └── index.html
│   │   │   ├── src/
│   │   │   │   ├── App.vue
│   │   │   │   └── main.js
│   │   │   └── vue.config.js
│   │   ├── generate/
│   │   │   └── .gitkeep
│   │   ├── index.js
│   │   ├── method/
│   │   │   ├── .gitignore
│   │   │   ├── README.md
│   │   │   ├── babel.config.js
│   │   │   ├── package.json
│   │   │   ├── public/
│   │   │   │   └── index.html
│   │   │   ├── src/
│   │   │   │   ├── App.vue
│   │   │   │   └── main.js
│   │   │   └── vue.config.js
│   │   ├── package.json
│   │   └── plain/
│   │       ├── .gitignore
│   │       ├── README.md
│   │       ├── babel.config.js
│   │       ├── package.json
│   │       ├── public/
│   │       │   └── index.html
│   │       ├── src/
│   │       │   ├── App.vue
│   │       │   └── main.js
│   │       └── vue.config.js
│   ├── sfc/
│   │   ├── .gitignore
│   │   ├── README.md
│   │   ├── babel.config.js
│   │   ├── package.json
│   │   ├── public/
│   │   │   └── index.html
│   │   ├── src/
│   │   │   ├── App.vue
│   │   │   └── main.js
│   │   └── vue.config.js
│   ├── ssr/
│   │   ├── hn2/
│   │   │   ├── .babelrc
│   │   │   ├── .gitignore
│   │   │   ├── LICENSE
│   │   │   ├── README.md
│   │   │   ├── build/
│   │   │   │   ├── setup-dev-server.js
│   │   │   │   ├── vue-loader.config.js
│   │   │   │   ├── webpack.base.config.js
│   │   │   │   ├── webpack.client.config.js
│   │   │   │   └── webpack.server.config.js
│   │   │   ├── manifest.json
│   │   │   ├── package.json
│   │   │   ├── server.js
│   │   │   └── src/
│   │   │       ├── App.vue
│   │   │       ├── api/
│   │   │       │   ├── create-api-client.js
│   │   │       │   ├── create-api-server.js
│   │   │       │   └── index.js
│   │   │       ├── app.js
│   │   │       ├── components/
│   │   │       │   ├── Comment.vue
│   │   │       │   ├── Item.vue
│   │   │       │   ├── ProgressBar.vue
│   │   │       │   └── Spinner.vue
│   │   │       ├── entry-client.js
│   │   │       ├── entry-server.js
│   │   │       ├── i18n/
│   │   │       │   ├── en-US.json
│   │   │       │   ├── index.js
│   │   │       │   └── ja-JP.json
│   │   │       ├── index.template.html
│   │   │       ├── router/
│   │   │       │   └── index.js
│   │   │       ├── store/
│   │   │       │   ├── actions.js
│   │   │       │   ├── getters.js
│   │   │       │   ├── index.js
│   │   │       │   └── mutations.js
│   │   │       ├── util/
│   │   │       │   ├── filters.js
│   │   │       │   └── title.js
│   │   │       ├── util.js
│   │   │       └── views/
│   │   │           ├── CreateListView.js
│   │   │           ├── ItemList.vue
│   │   │           ├── ItemView.vue
│   │   │           └── UserView.vue
│   │   └── nuxt/
│   │       ├── .editorconfig
│   │       ├── .eslintrc.js
│   │       ├── .gitignore
│   │       ├── README.md
│   │       ├── assets/
│   │       │   └── README.md
│   │       ├── components/
│   │       │   ├── Logo.vue
│   │       │   └── README.md
│   │       ├── layouts/
│   │       │   ├── README.md
│   │       │   └── default.vue
│   │       ├── locales/
│   │       │   ├── en.json
│   │       │   └── ja.json
│   │       ├── middleware/
│   │       │   └── README.md
│   │       ├── nuxt.config.js
│   │       ├── package.json
│   │       ├── pages/
│   │       │   ├── README.md
│   │       │   └── index.vue
│   │       ├── plugins/
│   │       │   ├── README.md
│   │       │   └── i18n.js
│   │       ├── static/
│   │       │   └── README.md
│   │       └── store/
│   │           └── README.md
│   ├── started/
│   │   └── index.html
│   └── storybook/
│       ├── .babelrc
│       ├── .gitignore
│       ├── .storybook/
│       │   ├── addons.js
│       │   └── config.js
│       ├── README.md
│       ├── index.html
│       ├── package.json
│       ├── src/
│       │   ├── App.vue
│       │   ├── main.js
│       │   └── stories/
│       │       ├── MyButton.vue
│       │       ├── Welcome.vue
│       │       └── index.js
│       └── webpack.config.js
├── gitbook/
│   ├── LANGS.md
│   ├── book.json
│   ├── en/
│   │   ├── SUMMARY.md
│   │   ├── api.md
│   │   ├── component.md
│   │   ├── datetime.md
│   │   ├── directive.md
│   │   ├── fallback.md
│   │   ├── formatting.md
│   │   ├── gotchas.md
│   │   ├── hot-reload.md
│   │   ├── installation.md
│   │   ├── interpolation.md
│   │   ├── lazy-loading.md
│   │   ├── messages.md
│   │   ├── migrations.md
│   │   ├── number.md
│   │   ├── pluralization.md
│   │   ├── sfc.md
│   │   └── started.md
│   └── old/
│       └── README.md
├── package.json
├── scripts/
│   ├── docs-deploy.sh
│   └── remove.sh
├── ship.config.js
├── src/
│   ├── components/
│   │   ├── interpolation.js
│   │   └── number.js
│   ├── directive.js
│   ├── extend.js
│   ├── format.js
│   ├── index.js
│   ├── install.js
│   ├── mixin.js
│   ├── path.js
│   └── util.js
├── test/
│   ├── .eslintrc.js
│   ├── e2e/
│   │   ├── runner.js
│   │   └── test/
│   │       ├── component.js
│   │       ├── datetime.js
│   │       ├── directive.js
│   │       ├── formatting_html.js
│   │       ├── formatting_list.js
│   │       ├── formatting_named.js
│   │       ├── formatting_rails.js
│   │       ├── interpolation.js
│   │       ├── number.js
│   │       ├── number_formatting.js
│   │       └── started.js
│   ├── helpers/
│   │   ├── entry.js
│   │   ├── imports.js
│   │   └── util.js
│   └── unit/
│       ├── basic.test.js
│       ├── component.test.js
│       ├── custom_blocks.test.js
│       ├── datetime.test.js
│       ├── directive.test.js
│       ├── escape_parameter_html.test.js
│       ├── fallback.test.js
│       ├── fixture/
│       │   ├── datetime.js
│       │   ├── index.js
│       │   └── number.js
│       ├── format.test.js
│       ├── format_custom.test.js
│       ├── index.html
│       ├── index.js
│       ├── interpolation.test.js
│       ├── issues.test.js
│       ├── message.test.js
│       ├── message_function.test.js
│       ├── missing.test.js
│       ├── mixin.test.js
│       ├── number.test.js
│       ├── number_component.test.js
│       ├── path.test.js
│       ├── post_translation.test.js
│       ├── silent.test.js
│       └── warn_html_in_message.test.js
├── types/
│   ├── .eslintrc.js
│   ├── index.d.ts
│   ├── test/
│   │   ├── component.ts
│   │   └── index.ts
│   └── tsconfig.json
├── vetur/
│   ├── attributes.json
│   └── tags.json
└── vuepress/
    ├── .vuepress/
    │   ├── components/
    │   │   └── sponsor-button.vue
    │   ├── config.js
    │   └── theme/
    │       ├── Layout.vue
    │       ├── components/
    │       │   └── CarbonAds.vue
    │       └── index.js
    ├── README.md
    ├── api/
    │   └── README.md
    ├── guide/
    │   ├── component.md
    │   ├── datetime.md
    │   ├── directive.md
    │   ├── fallback.md
    │   ├── formatting.md
    │   ├── hot-reload.md
    │   ├── interpolation.md
    │   ├── lazy-loading.md
    │   ├── locale.md
    │   ├── messages.md
    │   ├── number.md
    │   ├── pluralization.md
    │   ├── sfc.md
    │   └── tooling.md
    ├── installation.md
    ├── introduction.md
    ├── pt/
    │   ├── README.md
    │   ├── api/
    │   │   └── README.md
    │   ├── guide/
    │   │   ├── component.md
    │   │   ├── datetime.md
    │   │   ├── directive.md
    │   │   ├── fallback.md
    │   │   ├── formatting.md
    │   │   ├── hot-reload.md
    │   │   ├── interpolation.md
    │   │   ├── lazy-loading.md
    │   │   ├── locale.md
    │   │   ├── messages.md
    │   │   ├── number.md
    │   │   ├── pluralization.md
    │   │   ├── sfc.md
    │   │   └── tooling.md
    │   ├── installation.md
    │   ├── introduction.md
    │   └── started.md
    ├── ru/
    │   ├── README.md
    │   ├── api/
    │   │   └── README.md
    │   ├── guide/
    │   │   ├── component.md
    │   │   ├── datetime.md
    │   │   ├── directive.md
    │   │   ├── fallback.md
    │   │   ├── formatting.md
    │   │   ├── hot-reload.md
    │   │   ├── interpolation.md
    │   │   ├── lazy-loading.md
    │   │   ├── locale.md
    │   │   ├── messages.md
    │   │   ├── number.md
    │   │   ├── pluralization.md
    │   │   ├── sfc.md
    │   │   └── tooling.md
    │   ├── installation.md
    │   ├── introduction.md
    │   └── started.md
    ├── started.md
    └── zh/
        ├── README.md
        ├── api/
        │   └── README.md
        ├── guide/
        │   ├── component.md
        │   ├── datetime.md
        │   ├── directive.md
        │   ├── fallback.md
        │   ├── formatting.md
        │   ├── hot-reload.md
        │   ├── interpolation.md
        │   ├── lazy-loading.md
        │   ├── locale.md
        │   ├── messages.md
        │   ├── number.md
        │   ├── pluralization.md
        │   ├── sfc.md
        │   └── tooling.md
        ├── installation.md
        ├── introduction.md
        └── started.md

================================================
FILE CONTENTS
================================================

================================================
FILE: .babelrc
================================================
{
  "presets": ["@vue/app"],
  "plugins": [
    "@babel/plugin-proposal-class-properties",
    "@babel/plugin-syntax-flow",
    "@babel/plugin-transform-flow-strip-types",
    "babel-plugin-espower"
  ],
  "env": {
    "test": {
      "plugins": ["istanbul"],
      "presets": ["power-assert"]
    }
  },
  "ignore": [
    "dist/*.js"
  ]
}


================================================
FILE: .dependabot/config.yml
================================================
version: 1
update_configs:
  - package_manager: "javascript"
    directory: "/"
    update_schedule: "weekly"

================================================
FILE: .editorconfig
================================================
root = true

[*]
charset = utf-8
indent_style = space
indent_size = 2
end_of_line = lf
insert_final_newline = true
trim_trailing_whitespace = true


================================================
FILE: .eslintignore
================================================
config/*.js


================================================
FILE: .eslintrc.js
================================================
module.exports = {
  root: true,
  parserOptions: {
    ecmaVersion: 2018,
  },
  plugins: ['flowtype', 'ie11', 'no-autofix'],
  extends: [
    'plugin:flowtype/recommended'
  ],
  rules: {
    'ie11/no-collection-args': [ 'error' ],
    'ie11/no-for-in-const': [ 'error' ],
    'ie11/no-loop-func': [ 'warn' ],
    'ie11/no-weak-collections': [ 'error' ],
    'prefer-const': 'off',
    'no-autofix/prefer-const': 'warn',
    'object-curly-spacing': ['error', 'always'],
    'no-multiple-empty-lines': ['error', { max: 2, maxBOF: 1 }]
  }
}


================================================
FILE: .flowconfig
================================================
[ignore]
.*/node_modules/.*
.*/docs/.*
.*/test/.*
.*/types/.*
.*/config/.*
.*/examples/.*

[include]

[libs]
decls

[options]
unsafe.enable_getters_and_setters=true
suppress_comment= \\(.\\|\n\\)*\\$FlowFixMe


================================================
FILE: .github/FUNDING.yml
================================================
# These are supported funding model platforms

github: kazupon
patreon: # kazupon
open_collective: # Replace with a single Open Collective username
ko_fi: # Replace with a single Ko-fi username
tidelift: # Replace with a single Tidelift platform-name/package-name e.g., npm/babel
issuehunt: # kazupon
custom: # Replace with a single custom sponsorship URL


================================================
FILE: .github/ISSUE_TEMPLATE/bug-report.yml
================================================
name: "\U0001F41E Bug report"
description: Report an issue
labels: ['Status: Review Needed']
body:
  - type: markdown
    attributes:
      value: |
        Thanks for taking the time to fill out this bug report!
  - type: textarea
    id: bug-description
    attributes:
      label: Reporting a bug?
      description: A clear and concise description of what the bug is. If you intend to submit a PR for this issue, tell us in the description. Thanks!
      placeholder: Bug description
    validations:
      required: true
  - type: textarea
    id: expected-behavior
    attributes:
      label: Expected behavior
      description: A clear and concise description of what you expected to happen.
      placeholder: Expected behavior
    validations:
      required: true
  - type: textarea
    id: reproduction
    attributes:
      label: Reproduction
      description: |
        Please provide a link to a repo that can reproduce the problem you ran into. https://jsfiddle.net/kazupon/rn724baz/3/ A reproduction is required unless you are absolutely sure that the issue is obvious and the provided information is enough to understand the problem. If a report is vague (e.g. just a generic error message) and has no reproduction, it will receive a "Status: Need More Info" label. If no reproduction is provided after 5 days, it will be closed.
      placeholder: Reproduction
    validations:
      required: true
  - type: textarea
    id: system-info
    attributes:
      label: System Info
      description: Output of `npx envinfo --system --npmPackages '{vue*,@vue/*,vue-i18n*,@intlify/*,vite*,@vitejs/*}' --binaries --browsers`
      render: shell
      placeholder: System, Binaries, Browsers
    validations:
      required: true
  - type: textarea
    id: screenshot
    attributes:
      label: Screenshot
      description: If applicable, add screenshots to help explain your problem
      placeholder: screnshot
  - type: textarea
    id: additional-context
    attributes:
      label: Additional context
      description: Add any other context about the problem here
      placeholder: more context here
  - type: checkboxes
    id: checkboxes
    attributes:
      label: Validations
      description: Before submitting the issue, please make sure you do the following
      options:
        - label: Read the [Contributing Guidelines](https://github.com/kazupon/vue-i18n/blob/v8.x/CONTRIBUTING.md)
          required: true
        - label: Read the [Documentation](https://kazupon.github.io/vue-i18n/)
          required: true
        - label: Check that there isn't [already an issue](https://github.com/kazupon/vue-i18n/issues) that reports the same bug to avoid creating a duplicate.
          required: true
        - label: Check that this is a concrete bug. For Q&A open a [GitHub Discussion](https://github.com/kazupon/vue-i18n/discussions)
          required: true
        - label: The provided reproduction is a [minimal reproducible example](https://stackoverflow.com/help/minimal-reproducible-example) of the bug.
          required: true


================================================
FILE: .github/ISSUE_TEMPLATE/config.yml
================================================
blank_issues_enabled: false
contact_links:
  - name: Discord Chat at Vue Land
    url: https://chat.vuejs.org/
    about: For simple beginner questions, you can get quick answers from Discord
  - name: Questions & Discussions
    url: https://github.com/kazupon/vue-i18n/discussions
    about: Use GitHub discussions for message-board style questions and discussions.


================================================
FILE: .github/ISSUE_TEMPLATE/feature_request.yml
================================================
name: "\U0001F680 New feature proposal"
description: Propose a new feature
labels: ['Status: Proposal']
body:
  - type: markdown
    attributes:
      value: |
        Thanks for your interest in the project and taking the time to fill out this feature report!
  - type: textarea
    id: feature-description
    attributes:
      label: Clear and concise description of the problem
      description: If you intend to submit a PR for this issue, tell us in the description. Thanks!
    validations:
      required: true
  - type: textarea
    id: suggested-solution
    attributes:
      label: Suggested solution
      description: 'In module [xy] we could provide following implementation...'
    validations:
      required: true
  - type: textarea
    id: alternative
    attributes:
      label: Alternative
      description: Clear and concise description of any alternative solutions or features you've considered.
  - type: textarea
    id: additional-context
    attributes:
      label: Additional context
      description: Any other context or screenshots about the feature request here.
  - type: checkboxes
    id: checkboxes
    attributes:
      label: Validations
      description: Before submitting the issue, please make sure you do the following
      options:
        - label: Read the [Contributing Guidelines](https://github.com/kazupon/vue-i18n/blob/v8.x/CONTRIBUTING.md)
          required: true
        - label: Read the [Documentation](https://kazupon.github.io/vue-i18n/)
          required: true
        - label: Check that there isn't already an issue that request the same feature to avoid creating a duplicate.
          required: true


================================================
FILE: .github/workflows/ci.yml
================================================
name: Test
on:
  push:
    branches-ignore:
      - gh-pages
      - releases/**
  pull_request:
    branches-ignore:
      - gh-pages
      - releases/**
    types:
      - opened
      - synchronize
      - reopened
env:
  CI: true
  TZ: Asia/Tokyo
  CHROME_BIN: /usr/bin/google-chrome

jobs:
  build:
    name: "Build on Node.js ${{ matrix.node }} OS: ${{matrix.os}}"
    runs-on: ${{ matrix.os }}
    strategy:
      matrix:
        os: [ubuntu-latest]
        node: [18]
    steps:
      - name: Checkout codes
        uses: actions/checkout@v4

      - name: Setup node
        uses: actions/setup-node@v3
        with:
          node-version: ${{ matrix.node}}
          cache: 'yarn'

      - name: Install
        run: yarn install --frozen-lockfile

      - name: Build
        run: yarn build

      - name: Cache dist
        uses: actions/cache@v3
        with:
          path: dist
          key: ${{ matrix.os }}-node-v${{ matrix.node }}-${{ github.sha }}

  lint:
    name: "Lint on Node.js ${{ matrix.node }} OS: ${{matrix.os}}"
    runs-on: ${{ matrix.os }}
    strategy:
      matrix:
        os: [ubuntu-latest]
        node: [18]
    steps:
      - name: Checkout codes
        uses: actions/checkout@v3

      - name: Setup node
        uses: actions/setup-node@v3
        with:
          node-version: ${{ matrix.node }}
          cache: 'yarn'

      - name: Install
        run: yarn install --frozen-lockfile

      - name: Lint
        run: yarn lint

  test:
    needs:
      - build
    name: "Test on Node.js ${{ matrix.node }} OS: ${{matrix.os}}"
    runs-on: ${{ matrix.os }}
    strategy:
      matrix:
        os: [ubuntu-latest]
        node: [18]
    steps:
      - name: Setup google chrome
        uses: browser-actions/setup-chrome@latest
        with:
          chrome-version: stable
      - run: chrome --version

      - name: Setup firefox
        uses: browser-actions/setup-firefox@latest
        with:
          firefox-version: latest
      - run: firefox --version

      - name: Checkout codes
        uses: actions/checkout@v3

      - name: Setup node
        uses: actions/setup-node@v3
        with:
          node-version: ${{ matrix.node }}
          cache: 'yarn'

      - name: Install
        run: yarn install --frozen-lockfile

      - name: Flow Types
        run: yarn flow

      - name: TS Types
        run: yarn test:types

      - name: Test Coverage
        run: yarn test:cover

      - name: Unit tests
        run: yarn test:unit:ci

      - name: Restore dist cache
        uses: actions/cache@v3
        with:
          path: dist
          key: ${{ matrix.os }}-node-v${{ matrix.node }}-${{ github.sha }}

      - name: E2E Tests
        run: xvfb-run --auto-servernum yarn test:e2e


================================================
FILE: .github/workflows/release.yml
================================================
name: Release

on:
  pull_request:
    types:
      - closed

jobs:
  release:
    name: Release
    if: github.event.pull_request.merged == true && contains(github.event.pull_request.labels.*.name, 'release')
    runs-on: Ubuntu-latest
    steps:
      - uses: actions/checkout@v2
      - uses: actions/setup-node@v1
        with:
          registry-url: "https://registry.npmjs.org"
      - run: git switch master
      - run: |
          if [ -f "yarn.lock" ]; then
            yarn install
          else
            npm install
          fi
      - run: npm run release:trigger
        env:
          GITHUB_TOKEN: ${{ secrets.GH_TOKEN }}
          NODE_AUTH_TOKEN: ${{ secrets.NPM_AUTH_TOKEN }}
          SLACK_INCOMING_HOOK: ${{ secrets.SLACK_INCOMING_HOOK }}

================================================
FILE: .gitignore
================================================
lib
coverage
dist/*.gz
docs/_book
test/e2e/report
test/e2e/screenshots
node_modules
vuepress/.vuepress/dist
.DS_Store
.idea
.vscode
.env
*.log
*.swp
*~


================================================
FILE: .mergify.yml
================================================
pull_request_rules:
  - name: merge pull requests from dependabot if CI passes
    conditions:
    - author=dependabot[bot]
    - status-success=ci/circleci
    actions:
      merge:
        method: merge

================================================
FILE: .npmignore
================================================
.*
*.log
*.swp
*.yml
coverage
docs/_book
config
dist/*.map
lib
test


================================================
FILE: BACKERS.md
================================================
# Backers

You can join them in supporting vue-i18n & Intlify project development by [pledging on GitHub](https://github.com/sponsors/kazupon)! Backers in the same pledge level appear in the order of pledge date.

<h2 align="center">Platinum Sponsors</h2>

<p align="center">
  <a href="https://zenarchitects.co.jp/" target="_blank">
    <img
      src="https://raw.githubusercontent.com/kazupon/vue-i18n/v8.x/vuepress/.vuepress/public/patrons/zenarchitects.png"
      width="600px"
    />
  </a>
</p>

<h2 align="center">Special Sponsors</h2>

<p align="center">
  <a href="ttps://plaid.co.jp/" target="_blank">
    <img
      src="https://raw.githubusercontent.com/kazupon/vue-i18n/v8.x/vuepress/.vuepress/public/patrons/plaid.png"
      width="400px"
    />
  </a>
</p>

<h2 align="center">Gold Sponsors</h2>

<p align="center">
  <a href="https://nuxtjs.org/" target="_blank">
    <img
      src="https://raw.githubusercontent.com/kazupon/vue-i18n/v8.x/vuepress/.vuepress/public/patrons/nuxt.png"
      width="400px"
    />
  </a>
</p>

<p align="center">
  <a 
    href="https://localazy.com/blog/how-to-localize-vuejs-app-with-vue-i18n-and-localazy?utm_source=kazupon&utm_medium=banner&utm_campaign=sponsorships_kazupon&utm_content=logo"
    target="_blank">
    <img
      src="https://raw.githubusercontent.com/kazupon/vue-i18n/v8.x/vuepress/.vuepress/public/patrons/localazy.svg"
      width="400px"
    />
  </a>
</p>

<p align="center">
  <a 
    href="https://crowdin.com/teams/engineering?utm_source=vue-i18n.intlify.dev&utm_medium=referral"
    target="_blank">
    <img
      src="https://raw.githubusercontent.com/kazupon/vue-i18n/v8.x/vuepress/.vuepress/public/patrons/crowdin.svg"
      width="400px"
    />
  </a>
</p>

[It could be you!](https://www.patreon.com/bePatron?c=1597144&patAmt=500.0)

<h2 align="center">Sliver Sponsors</h2>

[It could be you!](https://www.patreon.com/bePatron?c=1597144&patAmt=250.0)

<h2 align="center">Bronze Sponsors</h2>

<p align="center">
  <a href="https://www.vuemastery.com/" target="_blank">
    <img
      src="https://raw.githubusercontent.com/kazupon/vue-i18n/v8.x/vuepress/.vuepress/public/patrons/vuemastery.png"
      width="200px"
    />
  </a>
</p>

- [Illyism](https://github.com/Illyism)

[It could be you!](https://www.patreon.com/bePatron?c=1597144&patAmt=100.0)

<h2 align="center">Awesome Supporters</h2>

- [Shinya Katayama](https://github.com/ktsn)
- [Jeffrey Rennie](https://github.com/surferjeff)

[It could be you!](https://www.patreon.com/bePatron?c=1597144&patAmt=20.0)


================================================
FILE: CHANGELOG.md
================================================
## v8.28.2 (2022-10-31)

#### :bug: Bug Fixes
* [#1575](https://github.com/kazupon/vue-i18n/pull/1575) fix(datetime): fixing calender typo ([@MKhasib](https://github.com/MKhasib))

#### Committers: 1
- Majd Khasib ([@MKhasib](https://github.com/MKhasib))

## v8.28.1 (2022-10-31)

#### :zap: Improved Features
* [#1572](https://github.com/kazupon/vue-i18n/pull/1572) fix(datetime): support all key format object (kazupon#1571) ([@majdkhasib](https://github.com/majdkhasib))

#### Committers: 1
- [@majdkhasib](https://github.com/majdkhasib)

## v8.28.0 (2022-10-30)

#### :star: New Features
* [#1569](https://github.com/kazupon/vue-i18n/pull/1569) fix(datetime): $d supports key format object (#1502) ([@horitaka](https://github.com/horitaka))

#### Committers: 1
- [@horitaka](https://github.com/horitaka)

## v8.27.2 (2022-06-20)

#### :bug: Bug Fixes
* [#1512](https://github.com/kazupon/vue-i18n/pull/1512) Allow modifiers names in pascalCase ([@nofacez](https://github.com/nofacez))

#### :pencil: Documentation
* [#1505](https://github.com/kazupon/vue-i18n/pull/1505) Update interpolation.md ([@victor1014](https://github.com/victor1014))

#### Committers: 2
- Mikhail ([@nofacez](https://github.com/nofacez))
- Victor ([@victor1014](https://github.com/victor1014))

## v8.27.1 (2022-03-29)

#### :zap: Improved Features
* [#1488](https://github.com/kazupon/vue-i18n/pull/1488) Allow colon in locale message keys used in linked locale messages ([@ax-jmckenzie](https://github.com/ax-jmckenzie))

#### :pencil: Documentation
* [#1462](https://github.com/kazupon/vue-i18n/pull/1462) Restrict version to 8 for installing npm package ([@arpi17](https://github.com/arpi17))

#### Committers: 2
- James McKenzie ([@ax-jmckenzie](https://github.com/ax-jmckenzie))
- Árpád Illyés ([@arpi17](https://github.com/arpi17))

## v8.27.0 (2022-01-21)

#### :star: New Features
* [#1441](https://github.com/kazupon/vue-i18n/pull/1441) feat: add a new option fallbackRootWithEmptyString ([@PeterAlfredLee](https://github.com/PeterAlfredLee))

#### Committers: 1
- Lee ([@PeterAlfredLee](https://github.com/PeterAlfredLee))

## v8.26.8 (2021-12-28)

#### :zap: Improved Features
* [#1429](https://github.com/kazupon/vue-i18n/pull/1429) improvement: type definition order for vue-i18n-bridge integration ([@kazupon](https://github.com/kazupon))

#### :pencil: Documentation
* [#1416](https://github.com/kazupon/vue-i18n/pull/1416) Update links to i18n Ally in tooling docs ([@FloEdelmann](https://github.com/FloEdelmann))

#### Committers: 2
- Flo Edelmann ([@FloEdelmann](https://github.com/FloEdelmann))
- kazuya kawaguchi ([@kazupon](https://github.com/kazupon))

## v8.26.7 (2021-11-02)

#### :bug: Bug Fixes
* [#1411](https://github.com/kazupon/vue-i18n/pull/1411) fix: cannot work watchLocale on vue-i18n-bridge ([@kazupon](https://github.com/kazupon))

#### Committers: 1
- kazuya kawaguchi ([@kazupon](https://github.com/kazupon))

## v8.26.6 (2021-11-02)

#### :zap: Improved Features
* [#1409](https://github.com/kazupon/vue-i18n/pull/1409) improvement: notify locale changing to composer ([@kazupon](https://github.com/kazupon))

#### Committers: 1
- kazuya kawaguchi ([@kazupon](https://github.com/kazupon))

## v8.26.5 (2021-10-01)

#### :zap: Improved Features
* [#1396](https://github.com/kazupon/vue-i18n/pull/1396) Revert "improvement:  $i18n property deinition for vue-i18n-bridge" ([@kazupon](https://github.com/kazupon))

#### Committers: 1
- kazuya kawaguchi ([@kazupon](https://github.com/kazupon))

## v8.26.4 (2021-10-01)

#### :zap: Improved Features
* [#1394](https://github.com/kazupon/vue-i18n/pull/1394) improvement:  $i18n property deinition for vue-i18n-bridge ([@kazupon](https://github.com/kazupon))

#### Committers: 1
- kazuya kawaguchi ([@kazupon](https://github.com/kazupon))

## v8.26.3 (2021-09-30)

#### :zap: Improved Features
* [#1392](https://github.com/kazupon/vue-i18n/pull/1392) improvement: vue-i18n-loader bridge mode ([@kazupon](https://github.com/kazupon))

#### Committers: 1
- kazuya kawaguchi ([@kazupon](https://github.com/kazupon))

## v8.26.2 (2021-09-28)

#### :zap: Improved Features
* [#1390](https://github.com/kazupon/vue-i18n/pull/1390) improvement: add flags for vue-i18n-bridge ([@kazupon](https://github.com/kazupon))

#### Committers: 1
- kazuya kawaguchi ([@kazupon](https://github.com/kazupon))

## v8.26.1 (2021-09-23)

#### :zap: Improved Features
* [#1388](https://github.com/kazupon/vue-i18n/pull/1388) feat: add sync property ([@kazupon](https://github.com/kazupon))

#### Committers: 1
- kazuya kawaguchi ([@kazupon](https://github.com/kazupon))

## v8.26.0 (2021-09-22)

#### :star: New Features
* [#1385](https://github.com/kazupon/vue-i18n/pull/1385) feat: support for vue-i18n-bridge ([@kazupon](https://github.com/kazupon))

#### Committers: 1
- kazuya kawaguchi ([@kazupon](https://github.com/kazupon))

## v8.25.1 (2021-09-13)

#### :bug: Bug Fixes
* [#1381](https://github.com/kazupon/vue-i18n/pull/1381) fix: linked messages containing slash symbol ([@Lamberthassel](https://github.com/Lamberthassel))

#### :lock: Security Fixes
* [#1353](https://github.com/kazupon/vue-i18n/pull/1353) build(deps): [security] bump tar from 6.0.2 to 6.1.3 ([@dependabot-preview[bot]](https://github.com/apps/dependabot-preview))

#### :pencil: Documentation
* [#1323](https://github.com/kazupon/vue-i18n/pull/1323) Added version notice for custom pluralizations ([@ingria](https://github.com/ingria))

#### Committers: 3
- Igor Nabebin ([@Lamberthassel](https://github.com/Lamberthassel))
- Ingria ([@ingria](https://github.com/ingria))
- [@dependabot-preview[bot]](https://github.com/apps/dependabot-preview)

## v8.25.0 (2021-07-16)

#### :star: New Features
* [#1271](https://github.com/kazupon/vue-i18n/pull/1271) feat: Added linked, locale, formatter, values, path to MessageContext ([@fabis94](https://github.com/fabis94))

#### :bug: Bug Fixes
* [#1321](https://github.com/kazupon/vue-i18n/pull/1321) fix broken mergeLocaleMessage ([@phonezawphyo](https://github.com/phonezawphyo))

#### Committers: 3
- [@dependabot-preview[bot]](https://github.com/apps/dependabot-preview)
- [@fabis94](https://github.com/fabis94)
- [@phonezawphyo](https://github.com/phonezawphyo)

## v8.24.5 (2021-06-19)

#### :bug: Bug Fixes
* [#1278](https://github.com/kazupon/vue-i18n/pull/1278) fix: Ensure that the order at desroy is the same as before change to `Set` from `Array` ([@kazupon](https://github.com/kazupon))

#### :zap: Improved Features
* [#1194](https://github.com/kazupon/vue-i18n/pull/1194) fix: add locale arg type i18n.n method type signature ([@alireza4050](https://github.com/alireza4050))

#### :pencil: Documentation
* [#1273](https://github.com/kazupon/vue-i18n/pull/1273) docs(api:zh): update the Chinese docs of "API" ([@baboon-king](https://github.com/baboon-king))
* [#1267](https://github.com/kazupon/vue-i18n/pull/1267) Documentation - Update @kazupon/vue-i18n-loader to @intlify/vue-i18n-loader ([@fbigand](https://github.com/fbigand))
* [#1258](https://github.com/kazupon/vue-i18n/pull/1258) Grammar fix for Installing vue-i18n-loader ([@TerabyteTiger](https://github.com/TerabyteTiger))

#### Committers: 5
- Alireza Asgharizadeh ([@alireza4050](https://github.com/alireza4050))
- BaboonKing ([@baboon-king](https://github.com/baboon-king))
- Tyler V ([@TerabyteTiger](https://github.com/TerabyteTiger))
- [@fbigand](https://github.com/fbigand)
- kazuya kawaguchi ([@kazupon](https://github.com/kazupon))

## v8.24.4 (2021-04-28)

#### :bug: Bug Fixes
* [#1192](https://github.com/kazupon/vue-i18n/pull/1192) Revert "fix: i18n reference to root causes memory leak (#1044)" ([@kazupon](https://github.com/kazupon))

#### Committers: 2
- Alexander Sokolov ([@Alex-Sokolov](https://github.com/Alex-Sokolov))
- kazuya kawaguchi ([@kazupon](https://github.com/kazupon))

## v8.24.3 (2021-04-09)

#### :bug: Bug Fixes
* [#1175](https://github.com/kazupon/vue-i18n/pull/1175) [perf] Use Set so lookup of _dataListeners can be O(1) ([@exoego](https://github.com/exoego))

#### :chart_with_upwards_trend: Performance Fixes
* [#1175](https://github.com/kazupon/vue-i18n/pull/1175) [perf] Use Set so lookup of _dataListeners can be O(1) ([@exoego](https://github.com/exoego))

#### Committers: 1
- TATSUNO Yasuhiro ([@exoego](https://github.com/exoego))

## v8.24.2 (2021-03-23)

#### :bug: Bug Fixes
* [#1151](https://github.com/kazupon/vue-i18n/pull/1151) fix: i18n reference to root causes memory leak (#1044) ([@lzxb](https://github.com/lzxb))

#### :pencil: Documentation
* [#1152](https://github.com/kazupon/vue-i18n/pull/1152) $tc return type ([@Glandos](https://github.com/Glandos))

#### Committers: 2
- Glandos ([@Glandos](https://github.com/Glandos))
- 狼族小狈 ([@lzxb](https://github.com/lzxb))

## v8.24.1 (2021-03-11)

#### :bug: Bug Fixes
* [#1145](https://github.com/kazupon/vue-i18n/pull/1145) Allowing paths to be null for lookups. ([@martinheidegger](https://github.com/martinheidegger))

#### Committers: 1
- Martin Heidegger ([@martinheidegger](https://github.com/martinheidegger))

## v8.24.0 (2021-03-08)

#### :star: New Features
* [#1139](https://github.com/kazupon/vue-i18n/pull/1139) experimental: add meta info for intlify tools ([@kazupon](https://github.com/kazupon))

#### Committers: 1
- kazuya kawaguchi ([@kazupon](https://github.com/kazupon))

## v8.23.0 (2021-02-24)

#### :zap: Improved Features
* [#1118](https://github.com/kazupon/vue-i18n/pull/1118) Fix wrong LocaleMatcher type for TS 4.2 ('best-fit' to 'best fit'). ([@mpawelski](https://github.com/mpawelski))

#### :pencil: Documentation
* [#1124](https://github.com/kazupon/vue-i18n/pull/1124) Add documentation for directive `choice` argument ([@Gameghostify](https://github.com/Gameghostify))
* [#1114](https://github.com/kazupon/vue-i18n/pull/1114) Update tooling.md ([@fanlinqiang](https://github.com/fanlinqiang))
* [#1104](https://github.com/kazupon/vue-i18n/pull/1104) Documentation improvemation ([@lucasferreiralimax](https://github.com/lucasferreiralimax))

#### Committers: 4
- Lucas ([@lucasferreiralimax](https://github.com/lucasferreiralimax))
- Mariusz Pawelski ([@mpawelski](https://github.com/mpawelski))
- [@Gameghostify](https://github.com/Gameghostify)
- [@fanlinqiang](https://github.com/fanlinqiang)


## v8.22.4 (2021-01-16)

#### :chart_with_upwards_trend: Performance Fixes
* [#1101](https://github.com/kazupon/vue-i18n/pull/1101) Improve performance of mergeLocaleMessage (#1099) ([@cslee](https://github.com/cslee))

#### Committers: 2
- Eric Lee ([@cslee](https://github.com/cslee))
- Lucas ([@lucasferreiralimax](https://github.com/lucasferreiralimax))


## v8.22.3 (2021-01-08)

#### :zap: Improved Features
* [#1096](https://github.com/kazupon/vue-i18n/pull/1096) @types: Fixed too narrow option types in n() and d() methods ([@gehlert](https://github.com/gehlert))

#### Committers: 3
- MASONGZHI ([@masongzhi](https://github.com/masongzhi))
- TATSUNO Yasuhiro ([@exoego](https://github.com/exoego))
- [@gehlert](https://github.com/gehlert)


## v8.22.2 (2020-11-18)

#### :bug: Bug Fixes
* [#1048](https://github.com/kazupon/vue-i18n/pull/1048) fix: number format keys missing compared the Intl.Number object ([@jevillard](https://github.com/jevillard))

#### Committers: 2
- Alexander Sokolov ([@Alex-Sokolov](https://github.com/Alex-Sokolov))
- Jérémy Villard ([@jevillard](https://github.com/jevillard))


## v8.22.1 (2020-10-19)

#### :boom: Breaking Change
* [#1020](https://github.com/kazupon/vue-i18n/pull/1020) escapeParameterHtml flag: Don't escape ampersand #1019 ([@gardarh](https://github.com/gardarh))

#### Committers: 1
- Gardar Hauksson ([@gardarh](https://github.com/gardarh))


## v8.22.0 (2020-10-06)

#### :star: New Features
* [#1009](https://github.com/kazupon/vue-i18n/pull/1009) Add escapeParameterHtml parameter. #1002 ([@gardarh](https://github.com/gardarh))

#### :bug: Bug Fixes
* [#1003](https://github.com/kazupon/vue-i18n/pull/1003) Bugfix in index.js: wrong if condition in fetchChoice ([@cimchd](https://github.com/cimchd))

#### Committers: 4
- Andreas ([@devmount](https://github.com/devmount))
- Gardar Hauksson ([@gardarh](https://github.com/gardarh))
- Raffaele Pizzari ([@pixari](https://github.com/pixari))
- [@cimchd](https://github.com/cimchd)


## v8.21.1 (2020-09-11)

#### :bug: Bug Fixes
* [#995](https://github.com/kazupon/vue-i18n/pull/995) Update mixin.js ([@ferencbeutel4711](https://github.com/ferencbeutel4711))

#### Committers: 1
- Ferenc Beutel ([@ferencbeutel4711](https://github.com/ferencbeutel4711))


## v8.21.0 (2020-08-13)

#### :star: New Features
* [#972](https://github.com/kazupon/vue-i18n/pull/972) feat: message function ([@kazupon](https://github.com/kazupon))

#### :pencil: Documentation
* [#961](https://github.com/kazupon/vue-i18n/pull/961) Update link to Formatter Interface ([@JohJohan](https://github.com/JohJohan))

#### Committers: 3
- Alexander Sokolov ([@Alex-Sokolov](https://github.com/Alex-Sokolov))
- Johan ([@JohJohan](https://github.com/JohJohan))
- kazuya kawaguchi ([@kazupon](https://github.com/kazupon))


## v8.20.0 (2020-07-30)

#### :star: New Features
* [#959](https://github.com/kazupon/vue-i18n/pull/959) i18n-n component local components passing ([@kazupon](https://github.com/kazupon))
* [#928](https://github.com/kazupon/vue-i18n/pull/928) :zap: improvement(interpolation): enable passage of local components to tag prop ([@vhoyer](https://github.com/vhoyer))

#### Committers: 2
- Vinícius Hoyer ([@vhoyer](https://github.com/vhoyer))
- kazuya kawaguchi ([@kazupon](https://github.com/kazupon))


## v8.19.0 (2020-07-25)

#### :star: New Features
* [#942](https://github.com/kazupon/vue-i18n/pull/942) Add vetur support for tags and attributes ([@phiter](https://github.com/phiter))

#### :pencil: Documentation
* [#925](https://github.com/kazupon/vue-i18n/pull/925) Added missing quote ([@fschlag](https://github.com/fschlag))
* [#921](https://github.com/kazupon/vue-i18n/pull/921) Add lost pluralizationRules option to documentation ([@AleksandrSl](https://github.com/AleksandrSl))
* [#920](https://github.com/kazupon/vue-i18n/pull/920) Make link to API and Guide top level ([@AleksandrSl](https://github.com/AleksandrSl))

#### Committers: 3
- Aleksandr ([@AleksandrSl](https://github.com/AleksandrSl))
- Florian Schlag ([@fschlag](https://github.com/fschlag))
- Phiter Fernandes ([@phiter](https://github.com/phiter))


## v8.18.2 (2020-06-08)

#### :zap: Improved Features
* [#917](https://github.com/kazupon/vue-i18n/pull/917) fix: improve IVueI18n interface ([@kazupon](https://github.com/kazupon))

#### :pencil: Documentation
* [#902](https://github.com/kazupon/vue-i18n/pull/902) docs: [RU] Translation update ([@Alex-Sokolov](https://github.com/Alex-Sokolov))
* [#901](https://github.com/kazupon/vue-i18n/pull/901) docs: (zh) inverse $d $n ([@stan-chen](https://github.com/stan-chen))

#### Committers: 4
- Alexander Sokolov ([@Alex-Sokolov](https://github.com/Alex-Sokolov))
- Rafał Chłodnicki ([@rchl](https://github.com/rchl))
- Stanley Chen ([@stan-chen](https://github.com/stan-chen))
- kazuya kawaguchi ([@kazupon](https://github.com/kazupon))


## v8.18.1 (2020-05-27)

#### :bug: Bug Fixes
* [#896](https://github.com/kazupon/vue-i18n/pull/896) Fix flow types and enable flow types testing on CI ([@rchl](https://github.com/rchl))

#### Committers: 1
- Rafał Chłodnicki ([@rchl](https://github.com/rchl))


## v8.18.0 (2020-05-26)

#### :star: New Features
* [#892](https://github.com/kazupon/vue-i18n/pull/892) Add onComponentInstanceCreated constructor option ([@rchl](https://github.com/rchl))

#### :zap: Improved Features
* [#890](https://github.com/kazupon/vue-i18n/pull/890) chore: set up linting for typescript definitions ([@rchl](https://github.com/rchl))

#### Committers: 1
- Rafał Chłodnicki ([@rchl](https://github.com/rchl))


## v8.17.7 (2020-05-19)

#### :bug: Bug Fixes
* [#882](https://github.com/kazupon/vue-i18n/pull/882) fix v-t pluralisation when choice is 0 ([@mikejacoutot](https://github.com/mikejacoutot))

#### Committers: 1
- [@mikejacoutot](https://github.com/mikejacoutot)


## v8.17.6 (2020-05-15)

#### :bug: Bug Fixes
* [#880](https://github.com/kazupon/vue-i18n/pull/880) Don't delete _i18n in beforeDestroy ([@danimoh](https://github.com/danimoh))

#### :zap: Improved Features
* [#878](https://github.com/kazupon/vue-i18n/pull/878) Allow component interpolation without root element ([@danimoh](https://github.com/danimoh))

#### :pencil: Documentation
* [#875](https://github.com/kazupon/vue-i18n/pull/875) Add new 3rd party tool ([@danigayosog](https://github.com/danigayosog))
* [#872](https://github.com/kazupon/vue-i18n/pull/872) docs: fixes ([@Alex-Sokolov](https://github.com/Alex-Sokolov))
* [#871](https://github.com/kazupon/vue-i18n/pull/871) update pluralization.md ([@Timibadass](https://github.com/Timibadass))

#### Committers: 4
- Alexander Sokolov ([@Alex-Sokolov](https://github.com/Alex-Sokolov))
- Daniel ([@danigayosog](https://github.com/danigayosog))
- Timi Omoyeni ([@Timibadass](https://github.com/Timibadass))
- [@danimoh](https://github.com/danimoh)


## v8.17.5 (2020-05-10)

#### :bug: Bug Fixes
* [#869](https://github.com/kazupon/vue-i18n/pull/869) fix: not string method access error ([@kazupon](https://github.com/kazupon))

#### :pencil: Documentation
* [#867](https://github.com/kazupon/vue-i18n/pull/867) docs: [RU] Translation ([@Alex-Sokolov](https://github.com/Alex-Sokolov))
* [#865](https://github.com/kazupon/vue-i18n/pull/865) improvement(docs): extend Hot reloading section ([@caugner](https://github.com/caugner))

#### Committers: 3
- Alexander Sokolov ([@Alex-Sokolov](https://github.com/Alex-Sokolov))
- Claas Augner ([@caugner](https://github.com/caugner))
- kazuya kawaguchi ([@kazupon](https://github.com/kazupon))


## v8.17.4 (2020-04-26)

#### :bug: Bug Fixes
* [#859](https://github.com/kazupon/vue-i18n/pull/859) fix datetime format cache ([@kazupon](https://github.com/kazupon))
* [#858](https://github.com/kazupon/vue-i18n/pull/858) fix datetime and number format fallbacking ([@kazupon](https://github.com/kazupon))
* [#857](https://github.com/kazupon/vue-i18n/pull/857) fix: alternative array includes ([@kazupon](https://github.com/kazupon))

#### Committers: 1
- kazuya kawaguchi ([@kazupon](https://github.com/kazupon))


## v8.17.3 (2020-04-19)

#### :zap: Improved Features
* [#846](https://github.com/kazupon/vue-i18n/pull/846) add key to postTranslation ([@dmitryuk](https://github.com/dmitryuk))

#### :pencil: Documentation
* [#847](https://github.com/kazupon/vue-i18n/pull/847) docs: Update /api/README.md ([@Alex-Sokolov](https://github.com/Alex-Sokolov))

#### Committers: 2
- Alexander Dmitryuk ([@dmitryuk](https://github.com/dmitryuk))
- Alexander Sokolov ([@Alex-Sokolov](https://github.com/Alex-Sokolov))


## v8.17.2 (2020-04-18)

#### :zap: Improved Features
* [#844](https://github.com/kazupon/vue-i18n/pull/844) Use plain object instead of Map, which is not supported in IE9/10 ([@exoego](https://github.com/exoego))

#### Committers: 1
- TATSUNO Yasuhiro ([@exoego](https://github.com/exoego))


## v8.17.1 (2020-04-16)

#### :bug: Bug Fixes
* [#840](https://github.com/kazupon/vue-i18n/pull/840) fix: altnative endsWidth ([@kazupon](https://github.com/kazupon))

#### :pencil: Documentation
* [#837](https://github.com/kazupon/vue-i18n/pull/837) Fix typo ([@ninofiliu](https://github.com/ninofiliu))

#### Committers: 2
- Nino Filiu ([@ninofiliu](https://github.com/ninofiliu))
- kazuya kawaguchi ([@kazupon](https://github.com/kazupon))


## v8.17.0 (2020-04-11)

#### :star: New Features
* [#829](https://github.com/kazupon/vue-i18n/pull/829) #138 Fallback Locale as array for cascading fallbacks ([@mmokross](https://github.com/mmokross))

#### :pencil: Documentation
* [#834](https://github.com/kazupon/vue-i18n/pull/834) Add capitalize default modifier in doc ([@alexandreDavid](https://github.com/alexandreDavid))
* [#832](https://github.com/kazupon/vue-i18n/pull/832) fix in examples of "Custom pluralization" ([@Perlover](https://github.com/Perlover))

#### Committers: 4
- Alexandre David ([@alexandreDavid](https://github.com/alexandreDavid))
- Kobayashi Kazuhiro ([@kzhrk](https://github.com/kzhrk))
- Michael Mokroß ([@mmokross](https://github.com/mmokross))
- Perlover ([@Perlover](https://github.com/Perlover))


## v8.16.0 (2020-03-27)

#### :star: New Features
* [#822](https://github.com/kazupon/vue-i18n/pull/822) post translation hooking feature ([@kazupon](https://github.com/kazupon))

#### Committers: 1
- kazuya kawaguchi ([@kazupon](https://github.com/kazupon))


## v8.15.7 (2020-03-25)

#### :bug: Bug Fixes
* [#819](https://github.com/kazupon/vue-i18n/pull/819) Fixed bug when changing number format runtime ([@slischka](https://github.com/slischka))

#### Committers: 1
- Jiří Slischka ([@slischka](https://github.com/slischka))


## v8.15.6 (2020-03-23)

#### :bug: Bug Fixes
* [#817](https://github.com/kazupon/vue-i18n/pull/817) Bugfix : 'setLocaleMessage' / 'mergeLocaleMessage' doesn't work if 'warnHtmlInMessage' is set to 'error'  ([@aym3nb](https://github.com/aym3nb))

#### :pencil: Documentation
* [#816](https://github.com/kazupon/vue-i18n/pull/816) Update fallback.md ([@scoutrul](https://github.com/scoutrul))

#### Committers: 3
- Anton ([@scoutrul](https://github.com/scoutrul))
- Aymen Bareche ([@aym3nb](https://github.com/aym3nb))
- TATSUNO Yasuhiro ([@exoego](https://github.com/exoego))


## v8.15.5 (2020-03-07)

#### :star: Features
* [#787](https://github.com/kazupon/vue-i18n/pull/787) Add a 'capitalize' default modifier for linked message ([@charlesmass](https://github.com/charlesmass))

#### :zap: Improvement Features
* [#794](https://github.com/kazupon/vue-i18n/pull/794) Support returning 'string' type for customized interpolation ([@sihyeonn](https://github.com/sihyeonn))

#### :pencil: Documentation
* [#791](https://github.com/kazupon/vue-i18n/pull/791) Revise fallback.md ([@jlebar](https://github.com/jlebar))

#### Committers: 4
- Justin Lebar ([@jlebar](https://github.com/jlebar))
- L M ([@charlesmass](https://github.com/charlesmass))
- Sihyeon Jang ([@sihyeonn](https://github.com/sihyeonn))
- kazuya kawaguchi ([@kazupon](https://github.com/kazupon))

<a name="8.15.4"></a>
## [8.15.4](https://github.com/kazupon/vue-i18n/compare/v8.15.3...v8.15.4) (2020-02-25)


### :bug: Bug Fixes

* **index:** improve formatFallbackMessages code (#779) (#783) by [@masongzhi](https://github.com/masongzhi) ([53895b9](https://github.com/kazupon/vue-i18n/commit/53895b9)))

### :up: Updates

* some fixes ([8a9a950](https://github.com/kazupon/vue-i18n/commit/8a9a950))



<a name="8.15.3"></a>
## [8.15.3](https://github.com/kazupon/vue-i18n/compare/v8.15.2...v8.15.3) (2019-12-18)


### :zap: Improvements

* **index:** fix mergeLocaleMessage. add changes notification on merging with an empty target object ([#752](https://github.com/kazupon/vue-i18n/issues/752)) by [@jekill](https://github.com/jekill) ([048eac5](https://github.com/kazupon/vue-i18n/commit/048eac5)), closes [#752](https://github.com/kazupon/vue-i18n/issues/752)



<a name="8.15.2"></a>
## [8.15.2](https://github.com/kazupon/vue-i18n/compare/v8.15.1...v8.15.2) (2019-12-18)


### :bug: Bug Fixes

* **index:** Fix exception when using unit number formatting by [@simonjodet](https://github.com/simonjodet) ([194b801](https://github.com/kazupon/vue-i18n/commit/194b801)), closes [#750](https://github.com/kazupon/vue-i18n/issues/750) [#751](https://github.com/kazupon/vue-i18n/issues/751)



<a name="8.15.1"></a>
## [8.15.1](https://github.com/kazupon/vue-i18n/compare/v8.15.0...v8.15.1) (2019-11-27)


### :zap: Improvements

* **mixin:** change to custom blocks parse error ([a9858be](https://github.com/kazupon/vue-i18n/commit/a9858be))



<a name="8.15.0"></a>
# [8.15.0](https://github.com/kazupon/vue-i18n/compare/v8.14.1...v8.15.0) (2019-10-16)


### :star: New Features

* Add constructor option for custom modifiers ([#724](https://github.com/kazupon/vue-i18n/issues/724)) by [@epaezrubio](https://github.com/epaezrubio) ([3217212](https://github.com/kazupon/vue-i18n/commit/3217212)), closes [#724](https://github.com/kazupon/vue-i18n/issues/724)



<a name="8.14.1"></a>
## [8.14.1](https://github.com/kazupon/vue-i18n/compare/v8.14.0...v8.14.1) (2019-09-12)


### :bug: Bug Fixes

* **path:** fix branket key error ([8d2aba7](https://github.com/kazupon/vue-i18n/commit/8d2aba7))
* **component:** Fix interpolation component when there are empty text nodes ([547cdd1](https://github.com/kazupon/vue-i18n/commit/547cdd1)) by [@Demivan](https://github.com/Demivan)



<a name="8.14.0"></a>
# [8.14.0](https://github.com/kazupon/vue-i18n/compare/v8.13.0...v8.14.0) (2019-08-12)


### :star: New Features

* fallback formatting ([#637](https://github.com/kazupon/vue-i18n/issues/637)) by [@sebwas](https://github.com/sebwas) ([bf9929c](https://github.com/kazupon/vue-i18n/commit/bf9929c)), closes [#637](https://github.com/kazupon/vue-i18n/issues/637)
* support slots syntax for component interpolation ([#685](https://github.com/kazupon/vue-i18n/issues/685)) by [@aavondet](https://github.com/aavondet) ([71ca843](https://github.com/kazupon/vue-i18n/commit/71ca843)), closes [#685](https://github.com/kazupon/vue-i18n/issues/685)



<a name="8.13.0"></a>
# [8.13.0](https://github.com/kazupon/vue-i18n/compare/v8.12.0...v8.13.0) (2019-08-09)


### :star: New Features

* datetime/number formats fallback warning filter ([46de19e](https://github.com/kazupon/vue-i18n/commit/46de19e)), closes [#558](https://github.com/kazupon/vue-i18n/issues/558)
* fallback translation warning filter ([69fc798](https://github.com/kazupon/vue-i18n/commit/69fc798))
* translation missing warning filter ([666dc9d](https://github.com/kazupon/vue-i18n/commit/666dc9d))



<a name="8.12.0"></a>
# [8.12.0](https://github.com/kazupon/vue-i18n/compare/v8.11.2...v8.12.0) (2019-07-09)


### :star: New Features

* **mixin:** shared locale messages feature ([82543de](https://github.com/kazupon/vue-i18n/commit/82543de))


### :zap: Improvements

* **typing:** sharedMessages option type ([6967a15](https://github.com/kazupon/vue-i18n/commit/6967a15))



<a name="8.11.2"></a>
## [8.11.2](https://github.com/kazupon/vue-i18n/compare/v8.11.1...v8.11.2) (2019-04-30)


### :bug: Bug Fixes

* bug(mixin): fix SSR memory leak by moving subscribeDataChanging calls into beforeMount ([#572](https://github.com/kazupon/vue-i18n/issues/572)) by [@Pindar](https://github.com/Pindar) ([32b5795](https://github.com/kazupon/vue-i18n/commit/32b5795)), closes [#572](https://github.com/kazupon/vue-i18n/issues/572)



<a name="8.11.1"></a>
## [8.11.1](https://github.com/kazupon/vue-i18n/compare/v8.11.0...v8.11.1) (2019-04-26)


### :bug: Bug Fixes

* fix ES Modules distribution ([bb631a1](https://github.com/kazupon/vue-i18n/commit/bb631a1))



<a name="8.11.0"></a>
# [8.11.0](https://github.com/kazupon/vue-i18n/compare/v8.10.0...v8.11.0) (2019-04-26)


### :star: New Features

* ES modules for browser ([#561](https://github.com/kazupon/vue-i18n/issues/561)) ([c9b9adf](https://github.com/kazupon/vue-i18n/commit/c9b9adf)), closes [#561](https://github.com/kazupon/vue-i18n/issues/561)
* HTML locale message warning option ([#567](https://github.com/kazupon/vue-i18n/issues/567)) ([4aecf03](https://github.com/kazupon/vue-i18n/commit/4aecf03)), closes [#567](https://github.com/kazupon/vue-i18n/issues/567)



<a name="8.10.0"></a>
# [8.10.0](https://github.com/kazupon/vue-i18n/compare/v8.9.0...v8.10.0) (2019-03-28)


### :star: New Features

* **number:** i18n-n functional component ([#541](https://github.com/kazupon/vue-i18n/issues/541)) by [@bponomarenko](https://github.com/bponomarenko) ([b33579d](https://github.com/kazupon/vue-i18n/commit/b33579d)), closes [#541](https://github.com/kazupon/vue-i18n/issues/541)
* **path:** Keypath should parse if sub path contains spaces. ([#533](https://github.com/kazupon/vue-i18n/issues/533)) by [@exoego](https://github.com/exoego) ([640daaf](https://github.com/kazupon/vue-i18n/commit/640daaf)), closes [#533](https://github.com/kazupon/vue-i18n/issues/533)


### :zap: Improvements

* **number:** support data fall through in i18n-n ([#545](https://github.com/kazupon/vue-i18n/issues/545)) ([71cadbf](https://github.com/kazupon/vue-i18n/commit/71cadbf)), closes [#545](https://github.com/kazupon/vue-i18n/issues/545)


### :pencil: docs

* **vuepress:** translate documents for chinese ([#536](https://github.com/kazupon/vue-i18n/issues/536)) by [@xuhongbo](https://github.com/xuhongbo) ([ccf29f8](https://github.com/kazupon/vue-i18n/commit/ccf29f8)), closes [#536](https://github.com/kazupon/vue-i18n/issues/536) [#531](https://github.com/kazupon/vue-i18n/issues/531) [#1](https://github.com/kazupon/vue-i18n/issues/1) [#533](https://github.com/kazupon/vue-i18n/issues/533) [#540](https://github.com/kazupon/vue-i18n/issues/540) [#541](https://github.com/kazupon/vue-i18n/issues/541) [#1](https://github.com/kazupon/vue-i18n/issues/1) [#2](https://github.com/kazupon/vue-i18n/issues/2)


<a name="8.9.0"></a>
# [8.9.0](https://github.com/kazupon/vue-i18n/compare/v8.8.2...v8.9.0) (2019-03-08)


### :bug: Bug Fixes

* **index:** Fix [#515](https://github.com/kazupon/vue-i18n/issues/515) empty string not returning true ([#525](https://github.com/kazupon/vue-i18n/issues/525)) by [@kimuraz](https://github.com/kimuraz) ([396c5ca](https://github.com/kazupon/vue-i18n/commit/396c5ca)), closes [#515](https://github.com/kazupon/vue-i18n/issues/515) [#525](https://github.com/kazupon/vue-i18n/issues/525) [#515](https://github.com/kazupon/vue-i18n/issues/515)


### :star: New Features

* **index:** add availableLocales (related issue [#193](https://github.com/kazupon/vue-i18n/issues/193), PR [#528](https://github.com/kazupon/vue-i18n/issues/528)) by [@exoego](https://github.com/exoego) ([8f75b1f](https://github.com/kazupon/vue-i18n/commit/8f75b1f)), closes [#193](https://github.com/kazupon/vue-i18n/issues/193) [#528](https://github.com/kazupon/vue-i18n/issues/528) [#193](https://github.com/kazupon/vue-i18n/issues/193) [#193](https://github.com/kazupon/vue-i18n/issues/193) [#193](https://github.com/kazupon/vue-i18n/issues/193) [#193](https://github.com/kazupon/vue-i18n/issues/193)


### :zap: Improvements

* **flowtype:** Fix missing type declarations in flow type ([#529](https://github.com/kazupon/vue-i18n/issues/529)) by [@exoego](https://github.com/exoego) ([4173764](https://github.com/kazupon/vue-i18n/commit/4173764)), closes [#529](https://github.com/kazupon/vue-i18n/issues/529)



<a name="8.8.2"></a>
## [8.8.2](https://github.com/kazupon/vue-i18n/compare/v8.8.1...v8.8.2) (2019-02-17)


### :bug: Bug Fixes

* **mixin:** fix memory leak ([135058d](https://github.com/kazupon/vue-i18n/commit/135058d)), closes [#514](https://github.com/kazupon/vue-i18n/issues/514)



<a name="8.8.1"></a>
## [8.8.1](https://github.com/kazupon/vue-i18n/compare/v8.8.0...v8.8.1) (2019-02-10)


### :bug: Bug Fixes

* **index:** fixed [#478](https://github.com/kazupon/vue-i18n/issues/478) ([#518](https://github.com/kazupon/vue-i18n/issues/518)) by [@stroncium](https://github.com/stroncium) ([469edd9](https://github.com/kazupon/vue-i18n/commit/469edd9)), closes [#478](https://github.com/kazupon/vue-i18n/issues/478) [#518](https://github.com/kazupon/vue-i18n/issues/518) [#478](https://github.com/kazupon/vue-i18n/issues/478)


### :zap: Improvements

* **flowtype:** update typings ([44e04e7](https://github.com/kazupon/vue-i18n/commit/44e04e7))
* **typescript:** update typings ([dee35b9](https://github.com/kazupon/vue-i18n/commit/dee35b9))



<a name="8.8.0"></a>
# [8.8.0](https://github.com/kazupon/vue-i18n/compare/v8.7.0...v8.8.0) (2019-01-29)


### :bug: Bug Fixes

* **index:** fix flat path based key issue ([bed9c39](https://github.com/kazupon/vue-i18n/commit/bed9c39)), closes [#349](https://github.com/kazupon/vue-i18n/issues/349)
* **mixin:** fix beforeDestroy can not find this.$t ([#500](https://github.com/kazupon/vue-i18n/issues/500)) by [@masongzhi](https://github.com/masongzhi) ([311b8f3](https://github.com/kazupon/vue-i18n/commit/311b8f3)), closes [#500](https://github.com/kazupon/vue-i18n/issues/500)


### :zap: Improvements

* **directive:** Fix typo on warning message ([#509](https://github.com/kazupon/vue-i18n/issues/509)) by [@kimuraz](https://github.com/kimuraz) ([e879024](https://github.com/kazupon/vue-i18n/commit/e879024)), closes [#509](https://github.com/kazupon/vue-i18n/issues/509)
* **index:** silence fallback warnings ([#510](https://github.com/kazupon/vue-i18n/issues/510)) by [@SzNagyMisu](https://github.com/SzNagyMisu) ([ddc0c79](https://github.com/kazupon/vue-i18n/commit/ddc0c79)), closes [#510](https://github.com/kazupon/vue-i18n/issues/510) [#139](https://github.com/kazupon/vue-i18n/issues/139)



<a name="8.7.0"></a>
# [8.7.0](https://github.com/kazupon/vue-i18n/compare/v8.6.0...v8.7.0) (2019-01-02)


### :zap: Improvements

* **directive:** Preserve directive content ([#495](https://github.com/kazupon/vue-i18n/issues/495)) by [@bponomarenko](https://github.com/bponomarenko) ([c29edba](https://github.com/kazupon/vue-i18n/commit/c29edba)), closes [#495](https://github.com/kazupon/vue-i18n/issues/495) [#408](https://github.com/kazupon/vue-i18n/issues/408) [#408](https://github.com/kazupon/vue-i18n/issues/408)



<a name="8.6.0"></a>
# [8.6.0](https://github.com/kazupon/vue-i18n/compare/v8.5.0...v8.6.0) (2018-12-25)


### :bug: Bug Fixes

* **pluralization:** inherit pluralization rules ⚠ ([#493](https://github.com/kazupon/vue-i18n/issues/493)) by [@Raiondesu](https://github.com/Raiondesu) ([7a23f32](https://github.com/kazupon/vue-i18n/commit/7a23f32)), closes [#493](https://github.com/kazupon/vue-i18n/issues/493)


### :zap: Improvements

* **format:** Add the path as argument to the custom formatter ([#489](https://github.com/kazupon/vue-i18n/issues/489)) by [@Raiondesu](https://github.com/Raiondesu) ([b9437ea](https://github.com/kazupon/vue-i18n/commit/b9437ea)), closes [#489](https://github.com/kazupon/vue-i18n/issues/489) [#484](https://github.com/kazupon/vue-i18n/issues/484) [#484](https://github.com/kazupon/vue-i18n/issues/484)



<a name="8.5.0"></a>
# [8.5.0](https://github.com/kazupon/vue-i18n/compare/v8.4.0...v8.5.0) (2018-12-17)


### :bug: Bug Fixes

* **index:** evaluate availabilities lazily (fix [#477](https://github.com/kazupon/vue-i18n/issues/477)) ([#483](https://github.com/kazupon/vue-i18n/issues/483)) by [@gamtiq](https://github.com/gamtiq) ([b66f02e](https://github.com/kazupon/vue-i18n/commit/b66f02e)), closes [#477](https://github.com/kazupon/vue-i18n/issues/477) [#483](https://github.com/kazupon/vue-i18n/issues/483)


### :zap: Improvements

* **index:** Allow pluralization customization via constructor options (closes [#464](https://github.com/kazupon/vue-i18n/issues/464)) ([#482](https://github.com/kazupon/vue-i18n/issues/482)) by [@Raiondesu](https://github.com/Raiondesu) ([ef4b1a6](https://github.com/kazupon/vue-i18n/commit/ef4b1a6)), closes [#464](https://github.com/kazupon/vue-i18n/issues/464) [#482](https://github.com/kazupon/vue-i18n/issues/482) [#464](https://github.com/kazupon/vue-i18n/issues/464) [#464](https://github.com/kazupon/vue-i18n/issues/464) [#464](https://github.com/kazupon/vue-i18n/issues/464) [#464](https://github.com/kazupon/vue-i18n/issues/464) [#451](https://github.com/kazupon/vue-i18n/issues/451)
* **index:** make silentTranslationWarn work for dates and numbers too ([#481](https://github.com/kazupon/vue-i18n/issues/481)) by [@Raiondesu](https://github.com/Raiondesu) ([402092b](https://github.com/kazupon/vue-i18n/commit/402092b)), closes [#481](https://github.com/kazupon/vue-i18n/issues/481)
* **types:** typed autocomplete in date and number format options ([#485](https://github.com/kazupon/vue-i18n/issues/485)) by [@Raiondesu](https://github.com/Raiondesu) ([e2e5993](https://github.com/kazupon/vue-i18n/commit/e2e5993)), closes [#485](https://github.com/kazupon/vue-i18n/issues/485)



<a name="8.4.0"></a>
# [8.4.0](https://github.com/kazupon/vue-i18n/compare/v8.3.2...v8.4.0) (2018-11-30)


### :star: New Features

* **index:** Add linked message formatting ([#467](https://github.com/kazupon/vue-i18n/issues/467)) by [@exoego](https://github.com/exoego) ([776b81b](https://github.com/kazupon/vue-i18n/commit/776b81b)), closes [#467](https://github.com/kazupon/vue-i18n/issues/467)



<a name="8.3.2"></a>
## [8.3.2](https://github.com/kazupon/vue-i18n/compare/v8.3.1...v8.3.2) (2018-11-16)


### :chart_with_upwards_trend: Performance Fixes

* **index:** Optimize unnecessary capturing. ([#462](https://github.com/kazupon/vue-i18n/issues/462)) by [@exoego](https://github.com/exoego) ([116845e](https://github.com/kazupon/vue-i18n/commit/116845e)), closes [#462](https://github.com/kazupon/vue-i18n/issues/462)



<a name="8.3.1"></a>
## [8.3.1](https://github.com/kazupon/vue-i18n/compare/v8.3.0...v8.3.1) (2018-11-08)


### :bug: Bug Fixes

* **directive:** fix cannnot update with v-t when had been changed locale message ([4895a2e](https://github.com/kazupon/vue-i18n/commit/4895a2e)), closes [#450](https://github.com/kazupon/vue-i18n/issues/450)
* **index:** fix merge bug ([1798490](https://github.com/kazupon/vue-i18n/commit/1798490)), closes [#458](https://github.com/kazupon/vue-i18n/issues/458)
* **missing:** fix vm argument passing ([dc48099](https://github.com/kazupon/vue-i18n/commit/dc48099)), closes [#453](https://github.com/kazupon/vue-i18n/issues/453)


### :zap: Improvements

* Optimize path.js and format.js ([#456](https://github.com/kazupon/vue-i18n/issues/456)) by [@exoego](https://github.com/exoego) ([639453c](https://github.com/kazupon/vue-i18n/commit/639453c)), closes [#456](https://github.com/kazupon/vue-i18n/issues/456)



<a name="8.3.0"></a>
# [8.3.0](https://github.com/kazupon/vue-i18n/compare/v8.2.1...v8.3.0) (2018-10-29)


### :zap: Improvements

* **pluralization:** Extendable pluralization by [@Raiondesu](https://github.com/Raiondesu) ([bbab90b](https://github.com/kazupon/vue-i18n/commit/bbab90b))



<a name="8.2.1"></a>
## [8.2.1](https://github.com/kazupon/vue-i18n/compare/v8.2.0...v8.2.1) (2018-10-15)


### :bug: Bug Fixes

* **extend:** fix TypeError: Cannot redefine property: $i18n ([#422](https://github.com/kazupon/vue-i18n/issues/422)) by [@HadiChen](https://github.com/HadiChen) ([cb19082](https://github.com/kazupon/vue-i18n/commit/cb19082)), closes [#422](https://github.com/kazupon/vue-i18n/issues/422)


### :zap: Improvements

* **index:** Suppress some warnings in production: smaller min.js and performance gain. ([#441](https://github.com/kazupon/vue-i18n/issues/441)) by @	exoego ([43931f5](https://github.com/kazupon/vue-i18n/commit/43931f5)), closes [#441](https://github.com/kazupon/vue-i18n/issues/441)



<a name="8.2.0"></a>
# [8.2.0](https://github.com/kazupon/vue-i18n/compare/v8.1.1...v8.2.0) (2018-10-13)


### :bug: Bug Fixes

* **index:** Add warning for circular reference in linked message ([#438](https://github.com/kazupon/vue-i18n/issues/438)) by [@exoego](https://github.com/exoego) ([7583485](https://github.com/kazupon/vue-i18n/commit/7583485)), closes [#438](https://github.com/kazupon/vue-i18n/issues/438)


### :zap: Improvements

* **index:** Allow escaping link key like @:(foo.bar). ([#437](https://github.com/kazupon/vue-i18n/issues/437)) by [@exoego](https://github.com/exoego) ([acfc458](https://github.com/kazupon/vue-i18n/commit/acfc458)), closes [#437](https://github.com/kazupon/vue-i18n/issues/437)
* **index:** Pre-defined named arguments for Pluraization ([#440](https://github.com/kazupon/vue-i18n/issues/440)) by [@exoego](https://github.com/exoego) ([e84f0fb](https://github.com/kazupon/vue-i18n/commit/e84f0fb)), closes [#440](https://github.com/kazupon/vue-i18n/issues/440)
* **path:** Allow non-ascii chars including numbers. ([#436](https://github.com/kazupon/vue-i18n/issues/436)) by [@exoego](https://github.com/exoego) ([a556c58](https://github.com/kazupon/vue-i18n/commit/a556c58)), closes [#436](https://github.com/kazupon/vue-i18n/issues/436)



<a name="8.1.1"></a>
## [8.1.1](https://github.com/kazupon/vue-i18n/compare/v8.1.0...v8.1.1) (2018-10-12)


### :bug: Bug Fixes

* **build:** fix rollup building issues ([1a1958a](https://github.com/kazupon/vue-i18n/commit/1a1958a))
* **format:** Should warn as unknown if named format is not closed. ([#435](https://github.com/kazupon/vue-i18n/issues/435)) by [@exoego](https://github.com/exoego) ([d1f6ed0](https://github.com/kazupon/vue-i18n/commit/d1f6ed0)), closes [#435](https://github.com/kazupon/vue-i18n/issues/435)
* **install:** fix cannot redfine error ([6d5ec61](https://github.com/kazupon/vue-i18n/commit/6d5ec61))


### :zap: Improvements

* **package.json:** tree shaking optimization ([38948c5](https://github.com/kazupon/vue-i18n/commit/38948c5))



<a name="8.1.0"></a>
# [8.1.0](https://github.com/kazupon/vue-i18n/compare/v8.0.0...v8.1.0) (2018-09-03)


### :bug: Bug Fixes

* **install:** add support for Vue.extend vue-i18n instance ([#420](https://github.com/kazupon/vue-i18n/issues/420)) by [@jaredzhu1993](https://github.com/jaredzhu1993) ([a60ea8b](https://github.com/kazupon/vue-i18n/commit/a60ea8b)), closes [#420](https://github.com/kazupon/vue-i18n/issues/420)


### :zap: Improvements

* **warnings:** make warning messages clearer ([#396](https://github.com/kazupon/vue-i18n/issues/396)) by [@kimuraz](https://github.com/kimuraz) ([79eee1b](https://github.com/kazupon/vue-i18n/commit/79eee1b)), closes [#396](https://github.com/kazupon/vue-i18n/issues/396)



<a name="8.0.0"></a>
# [8.0.0](https://github.com/kazupon/vue-i18n/compare/v7.8.1...v8.0.0) (2018-06-23)


### :boom: Breaking changes

* **extend:** fix this context binding ([aa0e831](https://github.com/kazupon/vue-i18n/commit/aa0e831)), closes [#306](https://github.com/kazupon/vue-i18n/issues/306) [#286](https://github.com/kazupon/vue-i18n/issues/286) [#259](https://github.com/kazupon/vue-i18n/issues/259), revert [#260](https://github.com/kazupon/vue-i18n/issues/260)

Note that you need to guarantee this context equal to component instance in lifecycle methods (e.g. in `data` options, `const $t = this.$t.bind(this)`).

```js
export default {
  data () {
    const $t = this.$t.bind(this)
    return { msg: $t('msg') }
  }
}
```

see the [API docs](https://kazupon.github.io/vue-i18n/api/)

### :bug: Bug Fixes

* bug(directive): fix guard checking at unbind ([c74888c](https://github.com/kazupon/vue-i18n/commit/c74888c)), closes [#340](https://github.com/kazupon/vue-i18n/issues/340)


### NOTE

* extend:



<a name="7.8.1"></a>
## [7.8.1](https://github.com/kazupon/vue-i18n/compare/v7.8.0...v7.8.1) (2018-06-18)


### :bug: Bug Fixes

* **directive:** fix cannot unbind bug ([105888d](https://github.com/kazupon/vue-i18n/commit/105888d)), closes [#377](https://github.com/kazupon/vue-i18n/issues/377)



<a name="7.8.0"></a>
# [7.8.0](https://github.com/kazupon/vue-i18n/compare/v7.7.0...v7.8.0) (2018-06-01)


### :zap: Improvements

* **typescript:** add type exportings ([a7cb8da](https://github.com/kazupon/vue-i18n/commit/a7cb8da))



<a name="7.7.0"></a>
# [7.7.0](https://github.com/kazupon/vue-i18n/compare/v7.6.0...v7.7.0) (2018-05-20)


### :zap: Improvements

* **index:** resource reactivity ([887a137](https://github.com/kazupon/vue-i18n/commit/887a137)), closes [#253](https://github.com/kazupon/vue-i18n/issues/253)
* **typescript:** Fix typings in components ([#344](https://github.com/kazupon/vue-i18n/issues/344)) by [@Demivan](https://github.com/Demivan) ([2402893](https://github.com/kazupon/vue-i18n/commit/2402893)), closes [#344](https://github.com/kazupon/vue-i18n/issues/344)



<a name="7.6.0"></a>
# [7.6.0](https://github.com/kazupon/vue-i18n/compare/v7.5.0...v7.6.0) (2018-03-13)


### :zap: Improvements

* **index:** support retunable missing handler ([#256](https://github.com/kazupon/vue-i18n/issues/256)) by [@houd1ni](https://github.com/houd1ni) ([9fbe467](https://github.com/kazupon/vue-i18n/commit/9fbe467))
* **typescript:** update TranslateResult type interface ([dffc678](https://github.com/kazupon/vue-i18n/commit/dffc678))



<a name="7.5.0"></a>
# [7.5.0](https://github.com/kazupon/vue-i18n/compare/v7.4.2...v7.5.0) (2018-03-11)


### :star: New Features

* **directive:** Add pluralization feature to directive ([#304](https://github.com/kazupon/vue-i18n/issues/304)) by [@SirLamer](https://github.com/SirLamer) ([8378859](https://github.com/kazupon/vue-i18n/commit/8378859))


### :zap: Improvements

* **flow:** update TranslateResult type interface ([59f4658](https://github.com/kazupon/vue-i18n/commit/59f4658))
* **index:** support object localization ([#311](https://github.com/kazupon/vue-i18n/issues/311)) by [@manniL](https://github.com/manniL) ([99e5006](https://github.com/kazupon/vue-i18n/commit/99e5006))
* **missing:** Add interpolation values to missing handler ([#308](https://github.com/kazupon/vue-i18n/issues/308)) by [@sebwas](https://github.com/sebwas) ([b912d8a](https://github.com/kazupon/vue-i18n/commit/b912d8a))
* **numberformat:** Explicit number format options ([#305](https://github.com/kazupon/vue-i18n/issues/305)) by [@bponomarenko](https://github.com/bponomarenko) ([aa07450](https://github.com/kazupon/vue-i18n/commit/aa07450))



<a name="7.4.2"></a>
## [7.4.2](https://github.com/kazupon/vue-i18n/compare/v7.4.1...v7.4.2) (2018-02-01)


### :zap: Improvements

* **index:** Fixes global auto installation ([#291](https://github.com/kazupon/vue-i18n/issues/291)) by [@emileber](https://github.com/emileber) ([2f016ff](https://github.com/kazupon/vue-i18n/commit/2f016ff)), closes [#291](https://github.com/kazupon/vue-i18n/issues/291)



<a name="7.4.1"></a>
## [7.4.1](https://github.com/kazupon/vue-i18n/compare/v7.4.0...v7.4.1) (2018-01-25)


### :bug: Bug Fixes

* fix cannot react ([2a8ea1c](https://github.com/kazupon/vue-i18n/commit/2a8ea1c)), closes [#261](https://github.com/kazupon/vue-i18n/issues/261)


### :zap: Improvements

* **formatter:** interpolate messages without values ([#282](https://github.com/kazupon/vue-i18n/issues/282)) by [@cb8](https://github.com/cb8) ([b792ce2](https://github.com/kazupon/vue-i18n/commit/b792ce2))



<a name="7.4.0"></a>
# [7.4.0](https://github.com/kazupon/vue-i18n/compare/v7.3.4...v7.4.0) (2018-01-10)


### :star: New Features

* **typescript:** Allow module augmentation ([#273](https://github.com/kazupon/vue-i18n/issues/273)) by [@CKGrafico](https://github.com/CKGrafico) ([4371344](https://github.com/kazupon/vue-i18n/commit/4371344))



<a name="7.3.4"></a>
## [7.3.4](https://github.com/kazupon/vue-i18n/compare/v7.3.3...v7.3.4) (2018-01-07)


### :bug: Bug Fixes

* **formatter:** Inherit formatter ([#269](https://github.com/kazupon/vue-i18n/issues/269)) by [@podkot](https://github.com/podkot) ([26a33ad](https://github.com/kazupon/vue-i18n/commit/26a33ad))



<a name="7.3.3"></a>
## [7.3.3](https://github.com/kazupon/vue-i18n/compare/v7.3.2...v7.3.3) (2017-12-19)


### :bug: Bug Fixes

* **extend:** Fix this not found [#259](https://github.com/kazupon/vue-i18n/issues/259) ([#260](https://github.com/kazupon/vue-i18n/issues/260)) by [@lzxb](https://github.com/lzxb) ([c29007e](https://github.com/kazupon/vue-i18n/commit/c29007e)), closes [#259](https://github.com/kazupon/vue-i18n/issues/259) [#260](https://github.com/kazupon/vue-i18n/issues/260)
* **types:** fix using old export ([#263](https://github.com/kazupon/vue-i18n/issues/263)) by [@jmigual](https://github.com/jmigual) ([b295fee](https://github.com/kazupon/vue-i18n/commit/b295fee)), closes [#263](https://github.com/kazupon/vue-i18n/issues/263)


<a name="7.3.2"></a>
## [7.3.2](https://github.com/kazupon/vue-i18n/compare/v7.3.1...v7.3.2) (2017-10-19)


### :zap: Improvements

* **typescript:** fix import problem of vue2.5 because of the types update ([#238](https://github.com/kazupon/vue-i18n/issues/238)) by [@peterchealse](https://github.com/peterchealse) ([cb98347](https://github.com/kazupon/vue-i18n/commit/cb98347)), closes [#238](https://github.com/kazupon/vue-i18n/issues/238)



<a name="7.3.1"></a>
## [7.3.1](https://github.com/kazupon/vue-i18n/compare/v7.3.0...v7.3.1) (2017-10-04)


### :bug: Bug Fixes

* **directive:** fix cannot locale reactivity ([e1fc12e](https://github.com/kazupon/vue-i18n/commit/e1fc12e)), closes [#227](https://github.com/kazupon/vue-i18n/issues/227)



<a name="7.3.0"></a>
# [7.3.0](https://github.com/kazupon/vue-i18n/compare/v7.2.0...v7.3.0) (2017-09-22)


### :star: New Features

* **directives:** support v-t custom directive (welcome back!) ([af9a2e7](https://github.com/kazupon/vue-i18n/commit/af9a2e7))


### :up: Updates

* **typing:** fix flowtype ([fa06f44](https://github.com/kazupon/vue-i18n/commit/fa06f44))



<a name="7.2.0"></a>
# [7.2.0](https://github.com/kazupon/vue-i18n/compare/v7.1.2...v7.2.0) (2017-08-28)


### :star: New Features

* **interpolation:** list formatting refactor and places/place feature ([#218](https://github.com/kazupon/vue-i18n/issues/218)) by [@myst729](https://github.com/myst729) ([0f0f3ff](https://github.com/kazupon/vue-i18n/commit/0f0f3ff))



<a name="7.1.2"></a>
## [7.1.2](https://github.com/kazupon/vue-i18n/compare/v7.1.1...v7.1.2) (2017-08-25)


### :zap: Improvements

* **interpolation:** skip non-element VNode in interpolation ([#211](https://github.com/kazupon/vue-i18n/issues/211)) by [@myst729](https://github.com/myst729) ([6be1756](https://github.com/kazupon/vue-i18n/commit/6be1756))



<a name="7.1.1"></a>
## [7.1.1](https://github.com/kazupon/vue-i18n/compare/v7.1.0...v7.1.1) (2017-08-03)


### :bug: Bug Fixes

* **mixin:** fix cannot setup VueI18n instance ([13585a4](https://github.com/kazupon/vue-i18n/commit/13585a4)), closes [#203](https://github.com/kazupon/vue-i18n/issues/203)



<a name="7.1.0"></a>
# [7.1.0](https://github.com/kazupon/vue-i18n/compare/v7.0.5...v7.1.0) (2017-07-30)


### :zap: Improvements

* **custom-block:** support multiple custom blocks ([ab955a5](https://github.com/kazupon/vue-i18n/commit/ab955a5)), closes [#189](https://github.com/kazupon/vue-i18n/issues/189)



<a name="7.0.5"></a>
## [7.0.5](https://github.com/kazupon/vue-i18n/compare/v7.0.4...v7.0.5) (2017-07-08)


### :bug: Bug Fixes

* **format:** fix cannot collectly parse percent ([fc71eda](https://github.com/kazupon/vue-i18n/commit/fc71eda)), closes [#191](https://github.com/kazupon/vue-i18n/issues/191)



<a name="7.0.4"></a>
## [7.0.4](https://github.com/kazupon/vue-i18n/compare/v7.0.3...v7.0.4) (2017-07-01)


### :bug: Bug Fixes

* **link:** fix ie traverse custom Array.prototype method ([#188](https://github.com/kazupon/vue-i18n/issues/188)) by [@632781460](https://github.com/632781460) ([d3b308b](https://github.com/kazupon/vue-i18n/commit/d3b308b)), closes [#188](https://github.com/kazupon/vue-i18n/issues/188)


### :chart_with_upwards_trend: Performance Fixes

* fix blocking at beforeDestroy ([570b215](https://github.com/kazupon/vue-i18n/commit/570b215)), closes [#187](https://github.com/kazupon/vue-i18n/issues/187)



<a name="7.0.3"></a>
## [7.0.3](https://github.com/kazupon/vue-i18n/compare/v7.0.2...v7.0.3) (2017-06-13)


### :bug: Bug Fixes

* **fallback:** fix cannot fallabck localization ([694e6f2](https://github.com/kazupon/vue-i18n/commit/694e6f2)), closes [#176](https://github.com/kazupon/vue-i18n/issues/176)
* **fallback:** fix fallback locale issue ([d9ceddc](https://github.com/kazupon/vue-i18n/commit/d9ceddc)), closes [#174](https://github.com/kazupon/vue-i18n/issues/174)
* **linked:** fix cannot fallback linked localization ([0c572f3](https://github.com/kazupon/vue-i18n/commit/0c572f3)), closes [#172](https://github.com/kazupon/vue-i18n/issues/172)



<a name="7.0.2"></a>
## [7.0.2](https://github.com/kazupon/vue-i18n/compare/v7.0.1...v7.0.2) (2017-06-10)


### :bug: Bug Fixes

* **sfc:** fix cannot parse custom block locale messages ([32eb3a7](https://github.com/kazupon/vue-i18n/commit/32eb3a7)), closes [#173](https://github.com/kazupon/vue-i18n/issues/173)



<a name="7.0.1"></a>
## [7.0.1](https://github.com/kazupon/vue-i18n/compare/v7.0.0...v7.0.1) (2017-06-04)


### :bug: Bug Fixes

* fix cannat single file component translation ([687d406](https://github.com/kazupon/vue-i18n/commit/687d406)), closes [#169](https://github.com/kazupon/vue-i18n/issues/169)
* fix cannnot resolve linked localization with component interpolation ([c973619](https://github.com/kazupon/vue-i18n/commit/c973619)), closes [#171](https://github.com/kazupon/vue-i18n/issues/171)
* fix datetime and number fallback localization ([be9e1bd](https://github.com/kazupon/vue-i18n/commit/be9e1bd)), closes [#168](https://github.com/kazupon/vue-i18n/issues/168)
* fix linked translation with using hyphen or underscore keypath ([6e9f151](https://github.com/kazupon/vue-i18n/commit/6e9f151)), closes [#170](https://github.com/kazupon/vue-i18n/issues/170)


<a name="7.0.0"></a>
# [7.0.0](https://github.com/kazupon/vue-i18n/compare/v7.0.0-rc.1...v7.0.0) (2017-05-29)

:tada: :tada: :tada:

See the [docs](https://kazupon.github.io/vue-i18n/en/)


### :star: New Features

* **datetime localization:**
    * [documentation](https://github.com/kazupon/vue-i18n/blob/dev/gitbook/en/datetime.md)
    * [example](https://github.com/kazupon/vue-i18n/tree/dev/examples/datetime)
* **number localization:**
    * [documentation](https://github.com/kazupon/vue-i18n/blob/dev/gitbook/en/number.md)
    * [example](https://github.com/kazupon/vue-i18n/tree/dev/examples/number)
* **component interpolation:**
    * [documentation](https://github.com/kazupon/vue-i18n/blob/dev/gitbook/en/interpolation.md)
    * [example](https://github.com/kazupon/vue-i18n/tree/dev/examples/interpolation)
* **typescript:**
    * [type definitions](https://github.com/kazupon/vue-i18n/blob/dev/types/index.d.ts)


### :chart_with_upwards_trend: Performance Fixes

* fix translation performance issue ([6032a51](https://github.com/kazupon/vue-i18n/commit/6032a51))


### :zap: Improvements

* **path:** tweak for ssr


### :boom: Breaking changes

* **format:** re-impelement formatter
* **formatter:** change method nam
* **flowtype:** fix locale message related type changing and remove underscore type


### :bug: Bug Fixes

* **examples:** fix ssr demo ([059034f](https://github.com/kazupon/vue-i18n/commit/059034f))
* **pluralization:** fix default choice ([240cfed](https://github.com/kazupon/vue-i18n/commit/240cfed))


<a name="7.0.0-rc.1"></a>
# [7.0.0-rc.1](https://github.com/kazupon/vue-i18n/compare/v7.0.0-beta.4...v7.0.0-rc.1) (2017-05-26)


### :chart_with_upwards_trend: Performance Fixes

* fix translation performance issue ([6032a51](https://github.com/kazupon/vue-i18n/commit/6032a51)), closes [#165](https://github.com/kazupon/vue-i18n/issues/165)


### :up: Updates

* **flowtype:** remove unneccesary type ([eb60156](https://github.com/kazupon/vue-i18n/commit/eb60156))



<a name="7.0.0-beta.4"></a>
# [7.0.0-beta.4](https://github.com/kazupon/vue-i18n/compare/v7.0.0-beta.3...v7.0.0-beta.4) (2017-05-23)


### :bug: Bug Fixes

* **pluralization:** fix default choice ([240cfed](https://github.com/kazupon/vue-i18n/commit/240cfed)), closes [#164](https://github.com/kazupon/vue-i18n/issues/164)



<a name="7.0.0-beta.3"></a>
# [7.0.0-beta.3](https://github.com/kazupon/vue-i18n/compare/v7.0.0-beta.2...v7.0.0-beta.3) (2017-05-15)

### :up: Updates

* bring back from bug fix ([95be4ea](https://github.com/kazupon/vue-i18n/commit/95be4ea))


<a name="7.0.0-beta.2"></a>
# [7.0.0-beta.2](https://github.com/kazupon/vue-i18n/compare/v7.0.0-beta.1...v7.0.0-beta.2) (2017-05-14)


### :zap: Improvements

* **path:** tweak for ssr ([eb21921](https://github.com/kazupon/vue-i18n/commit/eb21921))
* **typescript:** change custom formatter method name ([c5f043f](https://github.com/kazupon/vue-i18n/commit/c5f043f))



<a name="7.0.0-beta.1"></a>
# [7.0.0-beta.1](https://github.com/kazupon/vue-i18n/compare/v6.1.1...v7.0.0-beta.1) (2017-05-11)

### :star: New Features

* **datetime localization:** add datetime localization ([3282075](https://github.com/kazupon/vue-i18n/commit/3282075))
    * [documentation](https://github.com/kazupon/vue-i18n/blob/dev/gitbook/en/datetime.md)
    * [example](https://github.com/kazupon/vue-i18n/tree/dev/examples/datetime)
* **number localization:** add number localization ([87ee7b3](https://github.com/kazupon/vue-i18n/commit/87ee7b3))
    * [documentation](https://github.com/kazupon/vue-i18n/blob/dev/gitbook/en/number.md)
    * [example](https://github.com/kazupon/vue-i18n/tree/dev/examples/number)
* **component interpolation:** ([23f7d34](https://github.com/kazupon/vue-i18n/commit/23f7d34)), closes [#145](https://github.com/kazupon/vue-i18n/issues/145) [#144](https://github.com/kazupon/vue-i18n/issues/144) [#37](https://github.com/kazupon/vue-i18n/issues/37)
    * [documentation](https://github.com/kazupon/vue-i18n/blob/dev/gitbook/en/interpolation.md)
    * [example](https://github.com/kazupon/vue-i18n/tree/dev/examples/interpolation)
* **typescript:** add TypeScript type definitions ([#161](https://github.com/kazupon/vue-i18n/issues/161)) by [@aicest](https://github.com/aicest) ([61cebca](https://github.com/kazupon/vue-i18n/commit/61cebca))
    * [type definitions](https://github.com/kazupon/vue-i18n/blob/dev/types/index.d.ts)


### :boom: Breaking changes

* **format:** re-impelement formatter ([a8c046d](https://github.com/kazupon/vue-i18n/commit/a8c046d))
* **formatter:** change method name ([6eed51c](https://github.com/kazupon/vue-i18n/commit/6eed51c))
* **flowtype:** fix locale message related type changing ([c30d576](https://github.com/kazupon/vue-i18n/commit/c30d576))


### :bug: Bug Fixes

* **examples:** fix ssr demo ([059034f](https://github.com/kazupon/vue-i18n/commit/059034f)), closes [#151](https://github.com/kazupon/vue-i18n/issues/151)


<a name="6.1.3"></a>
## [6.1.3](https://github.com/kazupon/vue-i18n/compare/v6.1.1...v6.1.3) (2017-05-15)


### :bug: Bug Fixes

* fix memory leaks ([95be4ea](https://github.com/kazupon/vue-i18n/commit/95be4ea)), closes [#162](https://github.com/kazupon/vue-i18n/issues/162)



<a name="6.1.2"></a>
## [6.1.2](https://github.com/kazupon/vue-i18n/compare/v6.1.1...v6.1.2) (2017-05-15)


<a name="6.1.1"></a>
## [6.1.1](https://github.com/kazupon/vue-i18n/compare/v6.1.0...v6.1.1) (2017-04-19)


### :bug: Bug Fixes

* **te:** Fix `te()` that always uses `this.locale`, even when `locale` supplied ([#147](https://github.com/kazupon/vue-i18n/issues/147)) by [@aicest](https://github.com/aicest) ([bf15eeb](https://github.com/kazupon/vue-i18n/commit/bf15eeb)), closes [#147](https://github.com/kazupon/vue-i18n/issues/147)



<a name="6.1.0"></a>
# [6.1.0](https://github.com/kazupon/vue-i18n/compare/v6.0.0...v6.1.0) (2017-04-14)


### :star: New Features

* **api:** add 'mergeLocaleMessage' method ([ef21621](https://github.com/kazupon/vue-i18n/commit/ef21621)), closes [#131](https://github.com/kazupon/vue-i18n/issues/131)
* **silent:** add silent translation missing option ([29b3a17](https://github.com/kazupon/vue-i18n/commit/29b3a17)), closes [#139](https://github.com/kazupon/vue-i18n/issues/139)


### :zap: Improvements

* change to method from computed property ([9135a59](https://github.com/kazupon/vue-i18n/commit/9135a59)), closes [#141](https://github.com/kazupon/vue-i18n/issues/141)



<a name="6.0.0"></a>
# [6.0.0](https://github.com/kazupon/vue-i18n/compare/v6.0.0-beta.1...v6.0.0) (2017-04-05)

:tada: :tada: :tada:

See the [docs](https://kazupon.github.io/vue-i18n/en/)

### :zap: Improvements

- Server-Side Rendering: [example](https://github.com/kazupon/vue-i18n/tree/dev/examples/ssr)
- Custom formatter: [example](https://github.com/kazupon/vue-i18n/tree/dev/examples/formatting/custom)


### :star: NEW Features

- Single File Components: [example](https://github.com/kazupon/vue-i18n/tree/dev/examples/sfc)


### :boom: Breaking changes

- API
- Dynamic locale <sup>DEPRECATED</sup>


<a name="6.0.0-beta.1"></a>
# [6.0.0-beta.1](https://github.com/kazupon/vue-i18n/compare/v6.0.0-alpha.6...v6.0.0-beta.1) (2017-03-22)


### :boom: Breaking changes

* change `fallbackRoot` and `sync` option default `true` value ([0890b44](https://github.com/kazupon/vue-i18n/commit/0890b44))
* remove messages settter, and add getLocaleMessage API ([0f0914d](https://github.com/kazupon/vue-i18n/commit/0f0914d))


### :bug: Bug Fixes

* **mixin:** fix computed props errors ([a6b7e37](https://github.com/kazupon/vue-i18n/commit/a6b7e37))


### :up: Updates

* **flowtype:** argument names ([cf14425](https://github.com/kazupon/vue-i18n/commit/cf14425))


### :zap: Improvements

* **fallbackLocale:** support reactivity ([ed758be](https://github.com/kazupon/vue-i18n/commit/ed758be))
* **warn:** suppress warning messages for production ([6e417d2](https://github.com/kazupon/vue-i18n/commit/6e417d2))



<a name="6.0.0-alpha.6"></a>
# [6.0.0-alpha.6](https://github.com/kazupon/vue-i18n/compare/v6.0.0-alpha.5...v6.0.0-alpha.6) (2017-03-16)


### :star: New Features

* add 'setLocaleMessage' API ([8b71eda](https://github.com/kazupon/vue-i18n/commit/8b71eda))



<a name="6.0.0-alpha.5"></a>
# [6.0.0-alpha.5](https://github.com/kazupon/vue-i18n/compare/v6.0.0-alpha.3...v6.0.0-alpha.5) (2017-03-11)


### :bug: Bug Fixes

* **mixin:** fix cannot create VueI18n instance error for minify production ([7eeb29f](https://github.com/kazupon/vue-i18n/commit/7eeb29f))



<a name="6.0.0-alpha.4"></a>
# [6.0.0-alpha.4](https://github.com/kazupon/vue-i18n/compare/v6.0.0-alpha.3...v6.0.0-alpha.4) (2017-03-11)



<a name="6.0.0-alpha.3"></a>
# [6.0.0-alpha.3](https://github.com/kazupon/vue-i18n/compare/v6.0.0-alpha.2...v6.0.0-alpha.3) (2017-03-08)


### :star: New Features

* add `sync` option ([5c46c07](https://github.com/kazupon/vue-i18n/commit/5c46c07))


### :zap: Improvements

* **mixin:** add error throwings and a warning ([0e4ac39](https://github.com/kazupon/vue-i18n/commit/0e4ac39))



<a name="6.0.0-alpha.2"></a>
# [6.0.0-alpha.2](https://github.com/kazupon/vue-i18n/compare/v6.0.0-alpha.1...v6.0.0-alpha.2) (2017-02-27)


### :zap: Improvements

* **mixin:** release i18n instance ([cc362a3](https://github.com/kazupon/vue-i18n/commit/cc362a3))
* **vue:** support vue 2.2 ([5e7bf5e](https://github.com/kazupon/vue-i18n/commit/5e7bf5e))



<a name="6.0.0-alpha.1"></a>
# [6.0.0-alpha.1](https://github.com/kazupon/vue-i18n/compare/v5.0.2...v6.0.0-alpha.1) (2017-02-23)

This is the first release of 6.0.
In this version, we are some big breaking changes.

- Recommended for: experiments, prototypes, upgrading small, non-critical apps
- **NOT** recommended for: production use, upgrading production apps

:warning: Documentation still needs to be worked on. And also, we might change some APIs and features.

In the examples, please refer to this [examples](https://github.com/kazupon/vue-i18n/tree/dev/examples) directory.


## Improvements
- Server-Side Rendering: [example](https://github.com/kazupon/vue-i18n/tree/dev/examples/formatting/custom)
- Custom formatter: [example](https://github.com/kazupon/vue-i18n/tree/dev/examples/ssr)

## Features
- Formatting <sup>support</sup>
- Pluralization <sup>support</sup>
- Locale and KeyPath Syntax <sup>support</sup>
- Linked translation <sup>support</sup>
- Fallback translation <sup>support</sup>
- Component locale <sup>support</sup>
- Dynamic locale <sup>DEPRECATED</sup>
- Hot reload <sup>support</sup>

## API

### Global Config
- Vue.config.lang <sup>DEPRECATED, use VueI18n constructor `locale` option, or VueI18n#locale</sup>
- Vue.config.fallbackLang <sup>DEPRECATED, use VueI18n constructor `fallbackLocale` option, or VueI18n#fallbackLocale</sup>
- Vue.config.missingHandler <sup>DEPRECATED, use VueI18n constructor `missing` option, or VueI18n#missing</sup>
- Vue.config.i18nFormatter <sup>DEPRECATED, use VueI18n constructor `formatter` option, or VueI18n#formatter</sup>

### Global Method
- Vue.locale <sup>DEPRECATED, use VueI18n constructor `messages` option, or VueI18n#messages</sup>
- Vue.t <sup>DEPRECATED, use VueI18n#t</sup>
- Vue.tc <sup>DEPRECATED, use VueI18n#tc</sup>
- Vue.te <sup>DEPRECATED, use VueI18n#te</sup>

### Constructor Options
- locales <sup>DEPRECATED, use `messages` of `i18n` option (e.g `{ i18n: { messaes: ... } }`)</sup>

### Instance Properties
- $lang <sup>DEPRECATED, use `locale` of Vue instance property `$i18n` (e.g `vm.$i18n.locale = 'en'`)

### VueI18n class <sup>NEW</sup>
- constructor options: See the [`I18nOptions` type](https://github.com/kazupon/vue-i18n/blob/dev/decls/i18n.js#L7-L15) of flowtype.
- methods / properties: See the [`I18n` interface definition](https://github.com/kazupon/vue-i18n/blob/dev/decls/i18n.js#L17-L33) of flowtype.


<a name="5.0.2"></a>
## [5.0.2](https://github.com/kazupon/vue-i18n/compare/v5.0.1...v5.0.2) (2017-02-18)


### :zap: Improvements

* **npm:** revert node >= 6.0 engine restriction ([#110](https://github.com/kazupon/vue-i18n/issues/110)) by [@syxolk](https://github.com/syxolk) ([92b1bd1](https://github.com/kazupon/vue-i18n/commit/92b1bd1)), closes [#109](https://github.com/kazupon/vue-i18n/issues/109)



<a name="5.0.1"></a>
## [5.0.1](https://github.com/kazupon/vue-i18n/compare/v5.0.0...v5.0.1) (2017-02-16)


### :zap: Improvements

* **asset:** update locale reactivity setting ([b42fd9a](https://github.com/kazupon/vue-i18n/commit/b42fd9a))



<a name="5.0.0"></a>
# [5.0.0](https://github.com/kazupon/vue-i18n/compare/v4.10.0...v5.0.0) (2017-02-04)


### :boom: Breaking changes

* drop vue 1.0 supporting ([4da26cf](https://github.com/kazupon/vue-i18n/commit/4da26cf)), closes [#105](https://github.com/kazupon/vue-i18n/issues/105)



<a name="4.10.0"></a>
# [4.10.0](https://github.com/kazupon/vue-i18n/compare/v4.9.0...v4.10.0) (2017-01-01)


### :star: New Features

* `$lang` property for all component ([#99](https://github.com/kazupon/vue-i18n/issues/99)) by [@albert](https://github.com/albert)-zhang ([5ed69f8](https://github.com/kazupon/vue-i18n/commit/5ed69f8))


### :up: Updates

* **override:** change langVM keeping variable name ([3ec1bb2](https://github.com/kazupon/vue-i18n/commit/3ec1bb2))



<a name="4.9.0"></a>
# [4.9.0](https://github.com/kazupon/vue-i18n/compare/v4.8.0...v4.9.0) (2016-12-17)


### :bug: Bug Fixes

* **path:** fix nested key translation ([e15ead4](https://github.com/kazupon/vue-i18n/commit/e15ead4)), closes [#97](https://github.com/kazupon/vue-i18n/issues/97)


### :star: New Features

* add globally locale checking ([4cac8b9](https://github.com/kazupon/vue-i18n/commit/4cac8b9))
* locale checking ([#98](https://github.com/kazupon/vue-i18n/issues/98)) by [@long](https://github.com/long)-long-float ([0bc0a6b](https://github.com/kazupon/vue-i18n/commit/0bc0a6b))


<a name="4.8.0"></a>
# [4.8.0](https://github.com/kazupon/vue-i18n/compare/v4.7.4...v4.8.0) (2016-12-08)


### :zap: Improvements

* **extend:** disable no translation warning when set missingHandler ([168a97c](https://github.com/kazupon/vue-i18n/commit/168a97c)), closes [#96](https://github.com/kazupon/vue-i18n/issues/96)



<a name="4.7.4"></a>
## [4.7.4](https://github.com/kazupon/vue-i18n/compare/v4.7.3...v4.7.4) (2016-11-29)


### :bug: Bug Fixes

* **extend:** fix interpolate error [@tariq86](https://github.com/tariq86) ([5f24e17](https://github.com/kazupon/vue-i18n/commit/5f24e17))



<a name="4.7.3"></a>
## [4.7.3](https://github.com/kazupon/vue-i18n/compare/v4.7.2...v4.7.3) (2016-11-24)


### :bug: Bug Fixes

* **extend:** fix array local ([35c268a](https://github.com/kazupon/vue-i18n/commit/35c268a)), closes [#91](https://github.com/kazupon/vue-i18n/issues/91) [#59](https://github.com/kazupon/vue-i18n/issues/59)



<a name="4.7.2"></a>
## [4.7.2](https://github.com/kazupon/vue-i18n/compare/v4.7.1...v4.7.2) (2016-11-19)


### :bug: Bug Fixes

* **observer:** fix dep undefined error ([#88](https://github.com/kazupon/vue-i18n/issues/88)) by [@fandaa](https://github.com/fandaa) ([724974e](https://github.com/kazupon/vue-i18n/commit/724974e)), closes [#88](https://github.com/kazupon/vue-i18n/issues/88)


### :zap: Improvements

* **extend:** support translate empty string ([#86](https://github.com/kazupon/vue-i18n/issues/86)) by [@QingWei](https://github.com/QingWei)-Li ([8e6d154](https://github.com/kazupon/vue-i18n/commit/8e6d154))



<a name="4.7.1"></a>
## [4.7.1](https://github.com/kazupon/vue-i18n/compare/v4.7.0...v4.7.1) (2016-10-29)


### :bug: Bug Fixes

* **interpolate:** named formatting: use name if value is missing ([#77](https://github.com/kazupon/vue-i18n/issues/77)) by [@SebastianS90](https://github.com/SebastianS90) ([a0cc343](https://github.com/kazupon/vue-i18n/commit/a0cc343))


### :zap: Improvements

* **named:** using default use nmae when value is missing ([c34e8f1](https://github.com/kazupon/vue-i18n/commit/c34e8f1))



<a name="4.7.0"></a>
# [4.7.0](https://github.com/kazupon/vue-i18n/compare/v4.6.0...v4.7.0) (2016-10-28)


### :star: New Features

* hot reloading ([#71](https://github.com/kazupon/vue-i18n/issues/71)) by [@gglnx](https://github.com/gglnx) ([7bb94ac](https://github.com/kazupon/vue-i18n/commit/7bb94ac))


### :zap: Improvements

* **pluralization:** zero choice ([#70](https://github.com/kazupon/vue-i18n/issues/70)) by [@sebwas](https://github.com/sebwas) ([5f0004f](https://github.com/kazupon/vue-i18n/commit/5f0004f))



<a name="4.6.0"></a>
# [4.6.0](https://github.com/kazupon/vue-i18n/compare/v4.5.0...v4.6.0) (2016-09-24)


### :star: New Features

* **config:** custom message formatter ([#57](https://github.com/kazupon/vue-i18n/issues/57)) by [@jvmccarthy](https://github.com/jvmccarthy) ([2748eb4](https://github.com/kazupon/vue-i18n/commit/2748eb4))



<a name="4.5.0"></a>
# [4.5.0](https://github.com/kazupon/vue-i18n/compare/v4.4.1...v4.5.0) (2016-09-15)


### :star: New Features

* **config:** translation miss capturing configration ([aca0ed6](https://github.com/kazupon/vue-i18n/commit/aca0ed6)), closes [#54](https://github.com/kazupon/vue-i18n/issues/54)



<a name="4.4.1"></a>
## [4.4.1](https://github.com/kazupon/vue-i18n/compare/v4.4.0...v4.4.1) (2016-09-10)


### :zap: Improvements

* **translate:** support hyphenated key ([#52](https://github.com/kazupon/vue-i18n/issues/52)) by [@tariq86](https://github.com/tariq86) ([a40acfd](https://github.com/kazupon/vue-i18n/commit/a40acfd))



<a name="4.4.0"></a>
# [4.4.0](https://github.com/kazupon/vue-i18n/compare/v4.3.1...v4.4.0) (2016-08-29)


### :star: New Features

* add linked translations ([#50](https://github.com/kazupon/vue-i18n/issues/50)) by [@mmochetti](https://github.com/mmochetti) ([f7ae073](https://github.com/kazupon/vue-i18n/commit/f7ae073))



<a name="4.3.1"></a>
## [4.3.1](https://github.com/kazupon/vue-i18n/compare/v4.3.0...v4.3.1) (2016-08-26)


### :bug: Bug Fixes

* **npm:** fix installing bug ([57e66aa](https://github.com/kazupon/vue-i18n/commit/57e66aa)), closes [#46](https://github.com/kazupon/vue-i18n/issues/46)



<a name="4.3.0"></a>
# [4.3.0](https://github.com/kazupon/vue-i18n/compare/v4.2.3...v4.3.0) (2016-08-26)


### :star: New Features

* add pluralization ([#44](https://github.com/kazupon/vue-i18n/issues/44)) by [@mmochetti](https://github.com/mmochetti) ([b5b84d8](https://github.com/kazupon/vue-i18n/commit/b5b84d8))



<a name="4.2.3"></a>
## [4.2.3](https://github.com/kazupon/vue-i18n/compare/v4.2.2...v4.2.3) (2016-08-23)


### :chart_with_upwards_trend: Performance Fixes

* improve re-rendering cost when change the lang ([0707338](https://github.com/kazupon/vue-i18n/commit/0707338))



<a name="4.2.2"></a>
## [4.2.2](https://github.com/kazupon/vue-i18n/compare/v4.2.1...v4.2.2) (2016-08-15)


### :bug: Bug Fixes

* **path:** fix array path syntax error ([bc9dbee](https://github.com/kazupon/vue-i18n/commit/bc9dbee)), closes [#42](https://github.com/kazupon/vue-i18n/issues/42) [#43](https://github.com/kazupon/vue-i18n/issues/43)



<a name="4.2.1"></a>
## [4.2.1](https://github.com/kazupon/vue-i18n/compare/v4.2.0...v4.2.1) (2016-08-13)


### :zap: Improvements

* **translate:** fallback translation warning ([5f6b271](https://github.com/kazupon/vue-i18n/commit/5f6b271))



<a name="4.2.0"></a>
# [4.2.0](https://github.com/kazupon/vue-i18n/compare/v4.1.0...v4.2.0) (2016-08-12)


### :chart_with_upwards_trend: Performance Fixes

* **format:** use hasOwn function of Vue.util ([a8a19a0](https://github.com/kazupon/vue-i18n/commit/a8a19a0))


### :star: New Features

* **fallback:** add fallback translation feature ([1d1f0f2](https://github.com/kazupon/vue-i18n/commit/1d1f0f2)), closes [#36](https://github.com/kazupon/vue-i18n/issues/36)



<a name="4.1.0"></a>
# [4.1.0](https://github.com/kazupon/vue-i18n/compare/v4.0.1...v4.1.0) (2016-07-25)


### :bug: Bug Fixes

* **util:** fixed isArray reference errors ([0c6f6a0](https://github.com/kazupon/vue-i18n/commit/0c6f6a0))


### :star: New Features

* support vue 2.0.0.beta later ([0e1d2f7](https://github.com/kazupon/vue-i18n/commit/0e1d2f7))



<a name="4.0.1"></a>
## [4.0.1](https://github.com/kazupon/vue-i18n/compare/v4.0.0...v4.0.1) (2016-06-06)


### :bug: Bug Fixes

* **translate:** fix underscore named argument translate issue ([eeaf936](https://github.com/kazupon/vue-i18n/commit/eeaf936))



<a name="4.0.0"></a>
# [4.0.0](https://github.com/kazupon/vue-i18n/compare/v3.1.1...v4.0.0) (2016-05-10)


### :zap: Improvements

* support vue 2.0-pre-alpha ([f6517bc](https://github.com/kazupon/vue-i18n/commit/f6517bc))



<a name="3.1.1"></a>
## [3.1.1](https://github.com/kazupon/vue-i18n/compare/v3.1.0...v3.1.1) (2016-05-09)


### :star: New Features

* auto installation for standalone ([2b0dc09](https://github.com/kazupon/vue-i18n/commit/2b0dc09))



<a name="3.1.0"></a>
# [3.1.0](https://github.com/kazupon/vue-i18n/compare/v3.0.0...v3.1.0) (2016-05-09)


### :star: New Features

* component locales ([12fe695](https://github.com/kazupon/vue-i18n/commit/12fe695)), closes [#29](https://github.com/kazupon/vue-i18n/issues/29)


### :warning: Depcreted

* **options:** remove Vue.use options ([d87b59b](https://github.com/kazupon/vue-i18n/commit/d87b59b))


### :zap: Improvements

* **keypath:** port the object path parser ([3ae04b7](https://github.com/kazupon/vue-i18n/commit/3ae04b7))
* **translation:** fix hypenate included key translating ([d0a415f](https://github.com/kazupon/vue-i18n/commit/d0a415f)), closes [#24](https://github.com/kazupon/vue-i18n/issues/24)
* **translation:** warning outputing when cannot translate with keypath ([b4c7c0e](https://github.com/kazupon/vue-i18n/commit/b4c7c0e)), closes [#22](https://github.com/kazupon/vue-i18n/issues/22)



<a name="3.0.0"></a>
# [3.0.0](https://github.com/kazupon/vue-i18n/compare/v2.4.1...v3.0.0) (2016-04-18)


### Features

* **lang:** support lang reactive changing ([203ee85](https://github.com/kazupon/vue-i18n/commit/203ee85)), closes [#2](https://github.com/kazupon/vue-i18n/issues/2) [#15](https://github.com/kazupon/vue-i18n/issues/15)
* **locale:** support dynamic local ([4d61e8d](https://github.com/kazupon/vue-i18n/commit/4d61e8d)), closes [#6](https://github.com/kazupon/vue-i18n/issues/6) [#21](https://github.com/kazupon/vue-i18n/issues/21)

### DEPRECATED

* **index:** plugin install `Vue.use` options (`options.locales`, `options.lang`). See [README](https://github.com/kazupon/vue-i18n/blob/dev/README.md)


<a name="2.4.1"></a>
## [2.4.1](https://github.com/kazupon/vue-i18n/compare/v2.4.0...v2.4.1) (2016-02-29)

### Features

* **i18n:** support ruby on rails i18n interpolation format ([b6b2490](https://github.com/kazupon/vue-i18n/commit/b6b2490))



<a name="2.4.0"></a>
# [2.4.0](https://github.com/kazupon/vue-i18n/compare/v2.3.3...v2.4.0) (2016-02-06)


### Features

* **i18n:** add Vue.t function ([68935e3](https://github.com/kazupon/vue-i18n/commit/68935e3)), closes [#17](https://github.com/kazupon/vue-i18n/issues/17)



<a name="2.3.3"></a>
## [2.3.3](https://github.com/kazupon/vue-i18n/compare/v2.3.2...v2.3.3) (2015-12-09)


### Bug Fixes

* **npm:** npm install error ([e31e89e](https://github.com/kazupon/vue-i18n/commit/e31e89e))

### Features

* **bower:** good-bye bower :wink: ([d99eb15](https://github.com/kazupon/vue-i18n/commit/d99eb15))


### BREAKING CHANGES

* bower: not support `bower` package manager

I think that bower is dead. :no_good:



<a name="2.3.2"></a>
## [2.3.2](https://github.com/kazupon/vue-i18n/compare/v2.3.1...v2.3.2) (2015-12-09)


### Features

* **bundle:** more compact the vue-i18n distribution file ([2f32ecc](https://github.com/kazupon/vue-i18n/commit/2f32ecc))



<a name="2.3.1"></a>
## [2.3.1](https://github.com/kazupon/vue-i18n/compare/v2.3.0...v2.3.1) (2015-12-01)

### Reverts

* **index:** automatically install for standalone ([25b8059](https://github.com/kazupon/vue-i18n/commit/25b8059))



<a name="2.3.0"></a>
# [2.3.0](https://github.com/kazupon/vue-i18n/compare/v2.2.0...v2.3.0) (2015-11-26)


### Bug Fixes

* **index:** cannot work at Vue 1.0.10 later ([6fd543e](https://github.com/kazupon/vue-i18n/commit/6fd543e)), closes [#9](https://github.com/kazupon/vue-i18n/issues/9)

### Features

* **index:** support automatically install for standalone ([ada2673](https://github.com/kazupon/vue-i18n/commit/ada2673))



# v2.2.0 / 2015-09-16

* Re-implemetation with ES6 (babel)

# v2.1.0 / 2015-07-03

* Add global local language setting with `Vue.config.lang`

# v2.0.0 / 2015-06-29

* Support Vue.js 0.12
* Remove the followings (Breaking Changes)
    * `Vue.t` function
    * `v-t` directive

# v1.1.1 / 2015-04-21

* Fix unit test error

# v1.1.0 / 2015-01-10

* Support template string in `$t` method
* Support language changing in `$t` method

# v1.0.0 / 2015-01-10

* Add `$t` method

# v0.11.0 / 2014-11-07

* Bump to 0.11.0

# v0.2.0 / 2014-10-08

* Support Vue.js 0.11.0-rc

# v0.1.2 / 2014-10-07

* Support bower

# v0.1.1 / 2014-10-06

* Add `Vue.t` function

# v0.1.0 / 2014-05-06

* Release first

# v0.0.0 / 2014-05-03

* Initial project


================================================
FILE: CONTRIBUTING.md
================================================
# vue-i18n Contributing Guide

- [Issue Reporting Guidelines](#issue-reporting-guidelines)
- [Pull Request Guidelines](#pull-request-guidelines)
- [Development Setup](#development-setup)

## General Guidelines

Thanks for understanding that English is used as a shared language in this repository.
Maintainers do not use machine translation to avoid miscommunication due to error in translation.
If description of issue / PR are written in non-English languages, those may be closed.

It is ofcourse fine to use non-English language, when you open a PR to translate documents and communicates with other users in same language.

## Issue Reporting Guidelines

- The issue list of this repo is **exclusively** for bug reports and feature requests. Non-conforming issues will be closed immediately.

  - For simple beginner questions, you can get quick answers from [`#vue-i18n` channel of Discord](https://chat.vuejs.org/)

  - For more complicated questions, you can use [the official forum](http://forum.vuejs.org/) or StackOverflow. Make sure to provide enough information when asking your questions - this makes it easier for others to help you!

- Try to search for your issue, it may have already been answered or even fixed in the development branch.

- Check if the issue is reproducible with the latest stable version of Vue. If you are using a pre-release, please indicate the specific version you are using.

- It is **required** that you clearly describe the steps necessary to reproduce the issue you are running into. Issues with no clear repro steps will not be triaged. If an issue labeled "need repro" receives no further input from the issue author for more than 5 days, it will be closed.

- It is recommended that you make a JSFiddle/JSBin/Codepen/CodeSandbox to demonstrate your issue. You could start based with [this template](http://jsfiddle.net/r8qnsfb1/) that already includes the latest version.

- For bugs that involves build setups, you can create a reproduction repository with steps in the README.

- If your issue is resolved but still open, don’t hesitate to close it. In case you found a solution by yourself, it could be helpful to explain how you fixed it.

## Pull Request Guidelines

- The `master` branch is basically just a snapshot of the latest stable release. All development should be done in dedicated branches. **Do not submit PRs against the `master` branch.**

- Checkout a topic branch from the relevant branch, e.g. `v8.x`, and merge back against that branch.

- Work in the `src` folder and **DO NOT** checkin `dist` in the commits.

- It's OK to have multiple small commits as you work on the PR - we will let GitHub automatically squash it before merging.

- Make sure `npm test` passes. (see [development setup](#development-setup))

- If adding new feature:
  - Add accompanying test case.
  - Provide convincing reason to add this feature. Ideally you should open a suggestion issue first and have it greenlighted before working on it.

- If fixing a bug:
  - Provide detailed description of the bug in the PR. Live demo preferred.
  - Add appropriate test coverage if applicable.

### Work Step Example
- Fork the repository from [kazupon/vue-i18n](https://github.com/kazupon/vue-i18n) !
- Create your topic branch from `v8.x`: `git branch my-new-topic origin/v8.x`
- Add codes and pass tests !
- Commit your changes: `git commit -am 'Add some topic'`
- Push to the branch: `git push origin my-new-topic`
- Submit a pull request to `v8.x` branch of `kazupon/vue-i18n` repository !

## Development Setup

You will need [Node.js](http://nodejs.org) and [Java Runtime Environment](http://www.oracle.com/technetwork/java/javase/downloads/index.html) (needed for running Selenium server during e2e tests).

After cloning the repo, run:

    $ npm install

### Commonly used NPM scripts

    # watch and serve with hot reload unit test at localhost:8080
    $ npm run dev

    # lint source codes
    $ npm run lint

    # run unit tests in browser (firefox/safari/chrome)
    $ npm run test:unit

    # build all dist files, including npm packages
    $ npm run build

    # run the full test suite, include linting / type checking
    $ npm test

There are some other scripts available in the `scripts` section of the `package.json` file.

The default test script will do the following: lint with ESLint -> type check with Flow -> unit tests with coverage -> e2e tests. **Please make sure to have this pass successfully before submitting a PR.** Although the same tests will be run against your PR on the CI server, it is better to have it working locally beforehand.


================================================
FILE: LICENSE
================================================
The MIT License (MIT)

Copyright (c) 2016 kazuya kawaguchi

Permission is hereby granted, free of charge, to any person obtaining a copy of
this software and associated documentation files (the "Software"), to deal in
the Software without restriction, including without limitation the rights to
use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
the Software, and to permit persons to whom the Software is furnished to do so,
subject to the following conditions:

The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.


================================================
FILE: README.md
================================================
<p align="center"><img width="128px" height="112px" src="./assets/vue-i18n-logo.png" alt="Vue I18n logo"></p>
<h1 align="center">vue-i18n</h1>
<p align="center">
  <a href="https://github.com/kazupon/vue-i18n/actions/workflows/ci.yml"><img src="https://github.com/kazupon/vue-i18n/actions/workflows/ci.yml/badge.svg" alt="Test Status"></a>
  <a href="http://badge.fury.io/js/vue-i18n"><img src="https://badge.fury.io/js/vue-i18n.svg" alt="NPM version"></a>
  <a href="https://discord.gg/4yCnk2m"><img src="https://img.shields.io/badge/Discord-join%20chat-738bd7.svg" alt="vue-i18n channel on Discord"></a>
</p>

<p align="center">Internationalization plugin for Vue.js</p>

<br/>

> [!IMPORTANT]
> Vue I18n v8 has reached EOL and is no longer actively maintained. Please upgrade to Vue I18n v9 or later. **The seucirty hotfix is only provided for Vue I18n v8.28 until end of 2024**. Thereafter, security fix is not provide for that version later. However, if it is absolutely necessary, please contact to contact@frapwings.jp

<h3 align="center">🏅 Platinum Sponsors</h3>

<p align="center">
  <a href="https://zenarchitects.co.jp/" target="_blank">
    <img
      src="https://raw.githubusercontent.com/kazupon/vue-i18n/v8.x/vuepress/.vuepress/public/patrons/zenarchitects.png"
      width="400px"
    />
  </a>
</p>

<h3 align="center">✨ Special Sponsors</h3>

<p align="center">
  <a
    href="https://plaid.co.jp/"
    target="_blank">
    <img
      src="https://raw.githubusercontent.com/kazupon/vue-i18n/v8.x/vuepress/.vuepress/public/patrons/plaid.svg"
      width="240px"
    />
  </a>
</p>

<h3 align="center">🥇 Gold Sponsors</h3>

<p align="center">
  <a
    href="https://nuxtlabs.com/"
    target="_blank">
    <img
      src="https://raw.githubusercontent.com/kazupon/vue-i18n/v8.x/vuepress/.vuepress/public/patrons/nuxtlabs.svg"
      width="240px"
    />
  </a>
</p>

<p align="center">
  <a
    href="https://localazy.com/blog/how-to-localize-vuejs-app-with-vue-i18n-and-localazy?utm_source=kazupon&utm_medium=banner&utm_campaign=sponsorships_kazupon&utm_content=logo"
    target="_blank">
    <img
      src="https://raw.githubusercontent.com/kazupon/vue-i18n/v8.x/vuepress/.vuepress/public/patrons/localazy.svg"
      width="240px"
    />
  </a>
</p>

<p align="center">
  <a
    href="https://crowdin.com/teams/engineering?utm_source=vue-i18n.intlify.dev&utm_medium=referral"
    target="_blank">
    <img
      src="https://raw.githubusercontent.com/kazupon/vue-i18n/v8.x/vuepress/.vuepress/public/patrons/crowdin.svg"
      width="240px"
    />
  </a>
</p>

<h3 align="center">🥈 Silver Sponsors</h3>

<h3 align="center">🥉 Bronze Sponsors</h3>

<p align="center">
  <a href="https://www.vuemastery.com/" target="_blank">
    <img
      src="https://raw.githubusercontent.com/kazupon/vue-i18n/v8.x/vuepress/.vuepress/public/patrons/vuemastery.png"
      width="144px"
    />
  </a>
</p>

<p align="center">
  <a href="https://froggly.pl/" target="_blank">
    <img
      src="https://raw.githubusercontent.com/kazupon/vue-i18n/v8.x/vuepress/.vuepress/public/patrons/Froggly.svg"
      width="144px"
    />
  </a>
</p>


<br/>

## ⚠️  NOTICE

**This repository is for Vue I18n v8.x and Vue 2**

**If you want to know about how to usage for Vue I18n v9 on Vue 3, See the [this repository](https://github.com/intlify/vue-i18n-next))**

## 🙋‍♂️ About support for v8

We will follow Vue v2 maintenance lifespan

## 📔 Documentation

About Vue I18n v8.x, See [here](http://kazupon.github.io/vue-i18n/)

If you want to read Vue I18n v9 docs, See [here](https://vue-i18n.intlify.dev/)

## 📜 Changelog

Detailed changes for each release are documented in the [CHANGELOG.md](https://github.com/kazupon/vue-i18n/blob/dev/CHANGELOG.md).


## ❗ Issues

Please make sure to read the [Issue Reporting Checklist](https://github.com/kazupon/vue-i18n/blob/dev/CONTRIBUTING.md#issue-reporting-guidelines) before opening an issue. Issues not conforming to the guidelines may be closed immediately.


## 💪 Contribution

Please make sure to read the [Contributing Guide](https://github.com/kazupon/vue-i18n/blob/dev/CONTRIBUTING.md) before making a pull request.


## ©️ License

[MIT](http://opensource.org/licenses/MIT)


================================================
FILE: SECURITY.md
================================================
# Security Policy

## Supported Versions

| Version | Supported          |
| ------- | ------------------ |
| 8.28.x   | :white_check_mark: |
| < 8.28.0   | :x:                |

## Reporting a Vulnerability

To report a vulnerability, please [privately report it via the Security tab](https://github.com/kazupon/vue-i18n/security/advisories/new) on the correct GitHub repository (see [documentation](https://docs.github.com/en/code-security/security-advisories/guidance-on-reporting-and-writing-information-about-vulnerabilities/privately-reporting-a-security-vulnerability#privately-reporting-a-security-vulnerability)). If that is impossible, feel free to send an email to contact@frapwings.jp instead.

All security vulnerabilities will be promptly verified and addressed.


================================================
FILE: assets/README.md
================================================
# vue-i18n-art

> Vue I18n artworks

<a rel="license" href="http://creativecommons.org/licenses/by-nc-sa/4.0/"><img alt="Creative Commons License" style="border-width:0" src="https://i.creativecommons.org/l/by-nc-sa/4.0/88x31.png" /></a><br /><span xmlns:dct="http://purl.org/dc/terms/" property="dct:title">Vue I18n artworks</span> by <a xmlns:cc="http://creativecommons.org/ns#" href="https://github.com/kazupon" property="cc:attributionName" rel="cc:attributionURL">Kazuya Kawaguchi</a> is licensed under a <a rel="license" href="http://creativecommons.org/licenses/by-nc-sa/4.0/">Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License</a>, with the following extra conditions:

- It is **OK** to use the Vue I18n logo in the following cases:
  - in marketing materials for technical events, e.g. meetups, hackathons, conferences and workshops that are related to Vue I18n.
  - in open source projects related to Vue I18n.
  - in technical articles / videos / books / papers for educational purposes.
  - to illustrate a commercial product's Vue I18n integration in its marketing copy.

- It is **NOT OK** to use the Vue I18n logo in the following cases without prior written consent from the copyright owner:
  - Using the Vue I18n logo in a commercial product for purposes other than illustrating its Vue I18n integration.
  - Sell physical products that uses the Vue I18n logo or its variants, e.g. t-shirts.

The copyright owner reserves the right of final explanation for any use case not explicitly stated above.


================================================
FILE: config/.eslintrc.js
================================================
module.exports = {
  globals: {
    process: true
  },
  extends: 'vue',
  rules: {
    'no-multiple-empty-lines': [2, {max: 2}],
    'no-console': 0
  }
}

================================================
FILE: config/banner.js
================================================
const pack = require('../package.json')
const version = process.env.VERSION || pack.version

module.exports =
  '/*!\n' +
  ` * ${pack.name} v${version} \n` +
  ` * (c) ${new Date().getFullYear()} ${pack.author.name}\n` +
  ` * Released under the ${pack.license} License.\n` +
  ' */'


================================================
FILE: config/build.js
================================================
'use strict'
const fs = require('fs')
const exist = fs.existsSync
const mkdir = fs.mkdirSync
const getAllEntries = require('./entry').getAllEntries
const build = require('./bundle')

if (!exist('dist')) {
  mkdir('dist')
}

let entries = getAllEntries()

// filter entries via command line arg
if (process.argv[2]) {
  const filters = process.argv[2].split(',')
  entries = entries.filter(b => {
    return filters.some(f => b.dest.indexOf(f) > -1)
  })
}

build(entries)


================================================
FILE: config/bundle.js
================================================
const fs = require('fs')
const path = require('path')
const zlib = require('zlib')
const rollup = require('rollup')
const terser = require('terser')

module.exports = build

function build (entries) {
  let built = 0
  const total = entries.length
  const next = () => {
    buildEntry(entries[built]).then(() => {
      built++
      if (built < total) {
        next()
      }
    }).catch(logError)
  }
  next()
}

function buildEntry (config) {
  const output = config.output
  const { file, banner } = output
  const isProd = /min\.js$/.test(file)
  return rollup.rollup(config)
    .then(bundle => bundle.generate(output))
    .then(({ code }) => {
      if (isProd) {
        var minified = (banner ? banner + '\n' : '') + terser.minify(code, {
          toplevel: true,
          output: {
            ascii_only: true
          },
          compress: {
            pure_funcs: ['makeMap']
          }
        }).code
        return write(file, minified, true)
      } else {
        return write(file, code)
      }
    })
}

function write (dest, code, zip) {
  return new Promise((resolve, reject) => {
    function report (extra) {
      console.log(blue(path.relative(process.cwd(), dest)) + ' ' + getSize(code) + (extra || ''))
      resolve()
    }

    fs.writeFile(dest, code, err => {
      if (err) { return reject(err) }
      if (zip) {
        zlib.gzip(code, (err, zipped) => {
          if (err) { return reject(err) }
          report(' (gzipped: ' + getSize(zipped) + ')')
        })
      } else {
        report()
      }
    })
  })
}

function getSize (code) {
  return (code.length / 1024).toFixed(2) + 'kb'
}

function logError (e) {
  console.log(e)
}

function blue (str) {
  return '\x1b[1m\x1b[34m' + str + '\x1b[39m\x1b[22m'
}


================================================
FILE: config/entry.js
================================================
const path = require('path')
const replace = require('rollup-plugin-replace')
const flow = require('rollup-plugin-flow-no-whitespace')
const buble = require('rollup-plugin-buble')
const node = require('rollup-plugin-node-resolve')
const cjs = require('rollup-plugin-commonjs')
const banner = require('./banner')
const pack = require('../package.json')

function toUpper (_, c) {
  return c ? c.toUpperCase() : ''
}

const resolve = _path => path.resolve(__dirname, '../', _path)
const classifyRE = /(?:^|[-_\/])(\w)/g
function classify (str) {
  return str.replace(classifyRE, toUpper)
}
const moduleName = classify(pack.name)

const entries = {
  commonjs: {
    entry: resolve('src/index.js'),
    dest: resolve(`dist/${pack.name}.common.js`),
    format: 'cjs',
    banner
  },
  esm: {
    entry: 'src/index.js',
    dest: resolve(`dist/${pack.name}.esm.js`),
    format: 'es',
    banner
  },
  production: {
    entry: 'src/index.js',
    dest: resolve(`dist/${pack.name}.min.js`),
    format: 'umd',
    env: 'production',
    moduleName,
    banner
  },
  development: {
    entry: 'src/index.js',
    dest: resolve(`dist/${pack.name}.js`),
    format: 'umd',
    env: 'development',
    moduleName,
    banner
  },
  browser_development: {
    entry: 'src/index.js',
    dest: resolve(`dist/${pack.name}.esm.browser.js`),
    format: 'es',
    env: 'development',
    moduleName,
    transpile: false
  },
  browser_production: {
    entry: 'src/index.js',
    dest: resolve(`dist/${pack.name}.esm.browser.min.js`),
    format: 'es',
    env: 'production',
    moduleName,
    transpile: false
  }
}

function genConfig (opts) {
  const config = {
    input: opts.entry,
    output: {
      file: opts.dest,
      name: moduleName,
      format: opts.format,
      banner: opts.banner
    },
    plugins: [
      flow(),
      node(),
      cjs()
    ]
  }

  const replacePluginOptions = { '__VERSION__': pack.version }
  if (opts.env) {
    replacePluginOptions['process.env.NODE_ENV'] = JSON.stringify(opts.env)
  }
  config.plugins.push(replace(replacePluginOptions))

  if (opts.transpile !== false) {
    config.plugins.push(buble())
  }

  return config
}

exports.getEntry = name => genConfig(entries[name])
exports.getAllEntries = () => Object.keys(entries).map(name => genConfig(entries[name]))


================================================
FILE: config/karma-intl-plugin.js
================================================
const path = require('path')

const init = function (files) {
  files.unshift({
    pattern: path.join(__dirname, '../node_modules/intl/dist/Intl.complete.js'),
    included: true,
    served: true,
    watched: false
  })
}

init.$inject = ['config.files']

module.exports = {
  'framework:intl-shim': ['factory', init]
}


================================================
FILE: config/karma.base.conf.js
================================================
const webpack = require('webpack')
const intlPlugin = require('./karma-intl-plugin')

const webpackConfig = {
  module: {
    rules: [{
      test: /\.js$/,
      loader: 'babel-loader',
      exclude: /node_modules/
    }]
  },
  devtool: '#inline-source-map'
}

module.exports = {
  frameworks: ['mocha', 'intl-shim'],
  files: [
    '../test/unit/index.js'
  ],
  preprocessors: {
    '../test/unit/index.js': ['webpack', 'sourcemap']
  },
  webpack: Object.assign({
    mode: 'development',
  }, webpackConfig),
  webpackMiddleware: {
    noInfo: true
  },
  plugins: [
    'karma-mocha',
    'karma-mocha-reporter',
    'karma-sourcemap-loader',
    'karma-webpack',
    intlPlugin,
  ]
}


================================================
FILE: config/karma.cover.conf.js
================================================
const base = require('./karma.base.conf')

module.exports = config => {
  const options = Object.assign(base, {
    browsers: ['ChromeHeadless'],
    reporters: ['mocha', 'coverage'],
    coverageReporter: {
      reporters: [
        { type: 'lcov', dir: '../coverage', subdir: '.' },
        { type: 'text-summary', dir: '../coverage', subdir: '.' }
      ]
    },
    singleRun: true,
    plugins: base.plugins.concat([
      'karma-coverage',
      'karma-chrome-launcher'
    ])
  })

  config.set(options)
}


================================================
FILE: config/karma.sauce.conf.js
================================================
const base = require('./karma.base.conf')
const pack = require('../package.json')

/**
 * Having too many tests running concurrently on saucelabs
 * causes timeouts and errors, so we have to run them in
 * smaller batches.
 */

const batches = [
  // the coolkids
  {
    sl_chrome: {
      base: 'SauceLabs',
      browserName: 'chrome',
      platform: 'Windows 7'
    },
    sl_firefox: {
      base: 'SauceLabs',
      browserName: 'firefox'
    },
    sl_mac_safari: {
      base: 'SauceLabs',
      browserName: 'safari',
      platform: 'OS X 10.10'
    }
  },
  // ie family
  {
    sl_ie_9: {
      base: 'SauceLabs',
      browserName: 'internet explorer',
      platform: 'Windows 7',
      version: '9'
    },
    sl_ie_10: {
      base: 'SauceLabs',
      browserName: 'internet explorer',
      platform: 'Windows 8',
      version: '10'
    },
    sl_ie_11: {
      base: 'SauceLabs',
      browserName: 'internet explorer',
      platform: 'Windows 8.1',
      version: '11'
    },
    sl_edge: {
      base: 'SauceLabs',
      platform: 'Windows 10',
      browserName: 'MicrosoftEdge'
    }
  },
  // mobile
  {
    sl_ios_safari_8: {
      base: 'SauceLabs',
      browserName: 'iphone',
      version: '8.4'
    },
    sl_ios_safari_9: {
      base: 'SauceLabs',
      browserName: 'iphone',
      version: '9.3'
    },
    sl_android_4_4: {
      base: 'SauceLabs',
      browserName: 'android',
      version: '4.4'
    },
    sl_android_5_1: {
      base: 'SauceLabs',
      browserName: 'android',
      version: '5.1'
    }
  }
]

module.exports = config => {
  const batch = batches[process.argv[5] || 0]

  config.set(Object.assign(base, {
    singleRun: true,
    browsers: Object.keys(batch),
    customLaunchers: batch,
    reporters: process.env.CI
      ? ['dots', 'saucelabs'] // avoid spamming CI output
      : ['progress', 'saucelabs'],
    sauceLabs: {
      testName: `${pack.name} unit tests`,
      recordScreenshots: false,
      connectOptions: {
        'no-ssl-bump-domains': 'all' // Ignore SSL error on Android emulator
      },
      build: process.env.CIRCLE_BUILD_NUM || process.env.SAUCE_BUILD_ID || Date.now()
    },
    captureTimeout: 300000,
    browserNoActivityTimeout: 300000,
    plugins: base.plugins.concat([
      'karma-sauce-launcher'
    ])
  }))
}


================================================
FILE: config/karma.unit.ci.conf.js
================================================
const base = require('./karma.base.conf')

module.exports = config => {
  config.set(Object.assign(base, {
    browsers: ['ChromeHeadless', 'FirefoxHeadless'],
    reporters: ['progress'],
    singleRun: true,
    plugins: base.plugins.concat([
      'karma-chrome-launcher',
      'karma-firefox-launcher',
    ])
  }))
}


================================================
FILE: config/karma.unit.conf.js
================================================
const base = require('./karma.base.conf')

module.exports = config => {
  config.set(Object.assign(base, {
    browsers: ['Chrome', 'Firefox', 'Safari'],
    reporters: ['progress'],
    singleRun: true,
    plugins: base.plugins.concat([
      'karma-chrome-launcher',
      'karma-firefox-launcher',
      'karma-safari-launcher'
    ])
  }))
}


================================================
FILE: config/nightwatch.conf.js
================================================
// http://nightwatchjs.org/guide#settings-file
module.exports = {
  src_folders: ['test/e2e/test'],
  output_folder: 'test/e2e/report',
  custom_commands_path: ['node_modules/nightwatch-helpers/commands'],
  custom_assertions_path: ['node_modules/nightwatch-helpers/assertions'],

  selenium: {
    start_process: true,
    server_path: 'node_modules/selenium-server/lib/runner/selenium-server-standalone-3.141.59.jar',
    host: '127.0.0.1',
    port: 4444,
    cli_args: {
      'webdriver.chrome.driver': require('chromedriver').path
    }
  },

  test_settings: {
    default: {
      selenium_port: 4444,
      selenium_host: 'localhost',
      silent: true,
      screenshots: {
        enabled: true,
        on_failure: true,
        on_error: false,
        path: 'test/e2e/screenshots'
      }
    },

    chrome: {
      desiredCapabilities: {
        browserName: 'chrome',
        javascriptEnabled: true,
        acceptSslCerts: true,
        chromeOptions: {
          // Issue https://github.com/nightwatchjs/nightwatch/issues/2149
          w3c: false
        }
      }
    },

    firefox: {
      desiredCapabilities: {
        browserName: 'firefox',
        javascriptEnabled: true,
        acceptSslCerts: true
      }
    },

    headless: {
      desiredCapabilities: {
        browserName: 'chrome',
        chromeOptions : {
          args : ['headless'],
          w3c: false
        },
        javascriptEnabled: true,
        acceptSslCerts: true
      }
    }
  }
}


================================================
FILE: config/version.js
================================================
const fs = require('fs')
const pack = require('../package.json')

// update installation.md
const installation = fs
  .readFileSync('./vuepress/installation.md', 'utf-8')
  .replace(
    /https:\/\/unpkg\.com\/vue-i18n@[\d.]+.[\d]+\/dist\/vue-i18n\.js/,
    'https://unpkg.com/vue-i18n@' + pack.version + '/dist/vue-i18n.js'
  )
fs.writeFileSync('./vuepress/installation.md', installation)


================================================
FILE: config/webpack.dev.conf.js
================================================
const path = require('path')
const webpack = require('webpack')

module.exports = {
  entry: 'mocha-loader!./test/unit/index.js',
  mode: 'development',
  resolve: {
    extensions: ['.js']
  },
  output: {
    path: path.resolve(__dirname, '/test/unit'),
    filename: 'tests.js',
    publicPath: '/'
  },
  module: {
    rules: [{
      test: /\.js$/,
      exclude: /node_modules|vue\/dist/,
      loader: 'babel-loader'
    }]
  },
  devtool: '#eval-source-map'
}


================================================
FILE: decls/i18n.js
================================================
declare var Intl: any;

declare type Path = string;
declare type Locale = string;
declare type MessageContext = {
  list: (index: number) => mixed,
  named: (key: string) => mixed,
  linked: (key: string) => TranslateResult,
  values: any,
  path: string,
  formatter: Formatter,
  messages: LocaleMessages,
  locale: Locale
}
declare type MessageFunction = (ctx: MessageContext) => string
declare type FallbackLocale = string | string[] | false | { [locale: string]: string[] };
declare type LocaleMessage = string | MessageFunction | LocaleMessageObject | LocaleMessageArray;
declare type LocaleMessageObject = { [key: Path]: LocaleMessage };
declare type LocaleMessageArray = Array<LocaleMessage>;
declare type LocaleMessages = { [key: Locale]: LocaleMessageObject };

// This options is the same as Intl.DateTimeFormat constructor options:
// http://www.ecma-international.org/ecma-402/2.0/#sec-intl-datetimeformat-constructor
declare type DateTimeFormatOptions = {
  year?: 'numeric' | '2-digit',
  month?: 'numeric' | '2-digit' | 'narrow' | 'short' | 'long',
  day?: 'numeric' | '2-digit',
  hour?: 'numeric' | '2-digit',
  minute?: 'numeric' | '2-digit',
  second?: 'numeric' | '2-digit',
  weekday?: 'narrow' | 'short' | 'long',
  hour12?: boolean,
  era?: 'narrow' | 'short' | 'long',
  timeZone?: string, // IANA time zone
  timeZoneName?: 'short' | 'long',
  localeMatcher?: 'lookup' | 'best fit',
  formatMatcher?: 'basic' | 'best fit'
};
declare type DateTimeFormat = { [key: string]: DateTimeFormatOptions };
declare type DateTimeFormats = { [key: Locale]: DateTimeFormat };

// This options is the same as Intl.NumberFormat constructor options:
// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/NumberFormat
declare type NumberFormatOptions = {
  style?: 'decimal' | 'currency' | 'percent',
  currency?: string, // ISO 4217 currency codes
  currencyDisplay?: 'symbol' | 'code' | 'name',
  useGrouping?: boolean,
  minimumIntegerDigits?: number,
  minimumFractionDigits?: number,
  maximumFractionDigits?: number,
  minimumSignificantDigits?: number,
  maximumSignificantDigits?: number,
  localeMatcher?: 'lookup' | 'best fit',
  formatMatcher?: 'basic' | 'best fit'
};
declare type NumberFormat = { [key: string]: NumberFormatOptions };
declare type NumberFormats = { [key: Locale]: NumberFormat };
declare type Modifiers = { [key: string]: (str: string) => string };

declare type TranslateResult = string | LocaleMessages;
declare type DateTimeFormatResult = string;
declare type NumberFormatResult = string;
declare type MissingHandler = (locale: Locale, key: Path, vm?: any) => string | void;
declare type PostTranslationHandler = (str: string, key?: string) => string;
declare type GetChoiceIndex = (choice: number, choicesLength: number) => number
declare type ComponentInstanceCreatedListener = (newI18n: I18n, rootI18n: I18n) => void;

declare type FormattedNumberPartType = 'currency' | 'decimal' | 'fraction' | 'group' | 'infinity' | 'integer' | 'literal' | 'minusSign' | 'nan' | 'plusSign' | 'percentSign';
declare type FormattedNumberPart = {
  type: FormattedNumberPartType,
  value: string,
};
// This array is the same as Intl.NumberFormat.formatToParts() return value:
// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/NumberFormat/formatToParts#Return_value
declare type NumberFormatToPartsResult = Array<FormattedNumberPart>;

declare type WarnHtmlInMessageLevel = 'off' | 'warn' | 'error';

declare type I18nOptions = {
  locale?: Locale,
  fallbackLocale?: FallbackLocale,
  messages?: LocaleMessages,
  dateTimeFormats?: DateTimeFormats,
  datetimeFormats?: DateTimeFormats,
  numberFormats?: NumberFormats,
  formatter?: Formatter,
  missing?: MissingHandler,
  modifiers?: Modifiers,
  root?: I18n, // for internal
  fallbackRoot?: boolean,
  fallbackRootWithEmptyString?: boolean,
  formatFallbackMessages?: boolean,
  sync?: boolean,
  silentTranslationWarn?: boolean | RegExp,
  silentFallbackWarn?: boolean | RegExp,
  pluralizationRules?: PluralizationRules,
  preserveDirectiveContent?: boolean,
  warnHtmlInMessage?: WarnHtmlInMessageLevel,
  sharedMessages?: LocaleMessage,
  postTranslation?: PostTranslationHandler,
  componentInstanceCreatedListener?: ComponentInstanceCreatedListener,
  escapeParameterHtml?: boolean,
  __VUE_I18N_BRIDGE__?: string,
};

declare type IntlAvailability = {
  dateTimeFormat: boolean,
  numberFormat: boolean
};

declare type PluralizationRules = {
  [lang: string]: GetChoiceIndex,
}

declare interface I18n {
  static install: () => void, // for Vue plugin interface
  static version: string,
  static availabilities: IntlAvailability,
  get vm (): any, // for internal
  get locale (): Locale,
  set locale (locale: Locale): void,
  get fallbackLocale (): FallbackLocale,
  set fallbackLocale (locale: FallbackLocale): void,
  get messages (): LocaleMessages,
  get dateTimeFormats (): DateTimeFormats,
  get numberFormats (): NumberFormats,
  get availableLocales (): Locale[],
  get missing (): ?MissingHandler,
  set missing (handler: MissingHandler): void,
  get formatter (): Formatter,
  set formatter (formatter: Formatter): void,
  get formatFallbackMessages (): boolean,
  set formatFallbackMessages (fallback: boolean): void,
  get silentTranslationWarn (): boolean | RegExp,
  set silentTranslationWarn (silent: boolean | RegExp): void,
  get silentFallbackWarn (): boolean | RegExp,
  set silentFallbackWarn (slient: boolean | RegExp): void,
  get pluralizationRules (): PluralizationRules,
  set pluralizationRules (rules: PluralizationRules): void,
  get preserveDirectiveContent (): boolean,
  set preserveDirectiveContent (preserve: boolean): void,
  get warnHtmlInMessage (): WarnHtmlInMessageLevel,
  set warnHtmlInMessage (level: WarnHtmlInMessageLevel): void,
  get postTranslation (): ?PostTranslationHandler,
  set postTranslation (handler: PostTranslationHandler): void,

  getLocaleMessage (locale: Locale): LocaleMessageObject,
  setLocaleMessage (locale: Locale, message: LocaleMessageObject): void,
  mergeLocaleMessage (locale: Locale, message: LocaleMessageObject): void,
  t (key: Path, ...values: any): TranslateResult,
  i (key: Path, locale: Locale, values: Object): TranslateResult,
  tc (key: Path, choice?: number, ...values: any): TranslateResult,
  te (key: Path, locale?: Locale): boolean,
  getDateTimeFormat (locale: Locale): DateTimeFormat,
  setDateTimeFormat (locale: Locale, format: DateTimeFormat): void,
  mergeDateTimeFormat (locale: Locale, format: DateTimeFormat): void,
  d (value: number | Date, ...args: any): DateTimeFormatResult,
  getNumberFormat (locale: Locale): NumberFormat,
  setNumberFormat (locale: Locale, format: NumberFormat): void,
  mergeNumberFormat (locale: Locale, format: NumberFormat): void,
  n (value: number, ...args: any): NumberFormatResult,
  getChoiceIndex: GetChoiceIndex,
  pluralizationRules: PluralizationRules,
  preserveDirectiveContent: boolean
};

declare interface Formatter {
  interpolate (message: string, values: any, path: string): (Array<any> | null)
};


================================================
FILE: decls/module.js
================================================
declare type $npm$Vue$Dictionaly<T> = { [key: string]: T }

declare type Util = {
  extend: (to: Object, from: ?Object) => Object,
  hasOwn: (obj: Object, key: string) => boolean,
  isPlainObject: (obj: any) => boolean,
  isObject: (obj: mixed) => boolean,
}

declare type Config = {
  optionMergeStrategies: $npm$Vue$Dictionaly<Function>,
  silent: boolean,
  productionTip: boolean,
  performance: boolean,
  devtools: boolean,
  errorHandler: ?(err: Error, vm: Vue, info: string) => void,
  ignoredElements: Array<string>,
  keyCodes: $npm$Vue$Dictionaly<number>,
  isReservedTag: (x?: string) => boolean,
  parsePlatformTagName: (x: string) => string,
  isUnknownElement: (x?: string) => boolean,
  getTagNamespace: (x?: string) => string | void,
  mustUseProp: (tag: string, type: ?string, name: string) => boolean,
}

declare interface Vue {
  static config: Config,
  static util: Util,
  static version: string,
}


================================================
FILE: dist/README.md
================================================
## Explanation of Different Builds

- UMD: `vue-i18n.js`
- CommonJS: `vue-i18n.common.js`
- ES Module for bundlers: `vue-i18n.esm.js`
- ES Module for browsers: `vue-i18n.esm.browser.js`

### Terms

- **[UMD](https://github.com/umdjs/umd)**: UMD builds can be used directly in the browser via a `<script>` tag. The default file from Unpkg CDN at [https://unpkg.com/vue-i18n](https://unpkg.com/vue-i18n) is the UMD build (`vue-i18n.js`).

- **[CommonJS](http://wiki.commonjs.org/wiki/Modules/1.1)**: CommonJS builds are intended for use with older bundlers like [browserify](http://browserify.org/) or [webpack 1](https://webpack.github.io). The default file for these bundlers (`pkg.main`) is the Runtime only CommonJS build (`vue-i18n.common.js`).

- **[ES Module](http://exploringjs.com/es6/ch_modules.html)**: starting in 8.11 VueI18n provides two ES Modules (ESM) builds:
  - ESM for bundlers: intended for use with modern bundlers like [webpack 2](https://webpack.js.org) or [Rollup](https://rollupjs.org/). ESM format is designed to be statically analyzable so the bundlers can take advantage of that to perform "tree-shaking" and eliminate unused code from your final bundle. The default file for these bundlers (`pkg.module`) is the Runtime only ES Module build (`vue-i18n.esm.js`).
  - ESM for browsers (8.11+ only, `vue-i18n.esm.browser.js`): intended for direct imports in modern browsers via `<script type="module">`.


================================================
FILE: dist/vue-i18n.common.js
================================================
/*!
 * vue-i18n v8.24.4 
 * (c) 2021 kazuya kawaguchi
 * Released under the MIT License.
 */
'use strict';

/*  */

/**
 * constants
 */

var numberFormatKeys = [
  'compactDisplay',
  'currency',
  'currencyDisplay',
  'currencySign',
  'localeMatcher',
  'notation',
  'numberingSystem',
  'signDisplay',
  'style',
  'unit',
  'unitDisplay',
  'useGrouping',
  'minimumIntegerDigits',
  'minimumFractionDigits',
  'maximumFractionDigits',
  'minimumSignificantDigits',
  'maximumSignificantDigits'
];

/**
 * utilities
 */

function warn (msg, err) {
  if (typeof console !== 'undefined') {
    console.warn('[vue-i18n] ' + msg);
    /* istanbul ignore if */
    if (err) {
      console.warn(err.stack);
    }
  }
}

function error (msg, err) {
  if (typeof console !== 'undefined') {
    console.error('[vue-i18n] ' + msg);
    /* istanbul ignore if */
    if (err) {
      console.error(err.stack);
    }
  }
}

var isArray = Array.isArray;

function isObject (obj) {
  return obj !== null && typeof obj === 'object'
}

function isBoolean (val) {
  return typeof val === 'boolean'
}

function isString (val) {
  return typeof val === 'string'
}

var toString = Object.prototype.toString;
var OBJECT_STRING = '[object Object]';
function isPlainObject (obj) {
  return toString.call(obj) === OBJECT_STRING
}

function isNull (val) {
  return val === null || val === undefined
}

function isFunction (val) {
  return typeof val === 'function'
}

function parseArgs () {
  var args = [], len = arguments.length;
  while ( len-- ) args[ len ] = arguments[ len ];

  var locale = null;
  var params = null;
  if (args.length === 1) {
    if (isObject(args[0]) || isArray(args[0])) {
      params = args[0];
    } else if (typeof args[0] === 'string') {
      locale = args[0];
    }
  } else if (args.length === 2) {
    if (typeof args[0] === 'string') {
      locale = args[0];
    }
    /* istanbul ignore if */
    if (isObject(args[1]) || isArray(args[1])) {
      params = args[1];
    }
  }

  return { locale: locale, params: params }
}

function looseClone (obj) {
  return JSON.parse(JSON.stringify(obj))
}

function remove (arr, item) {
  if (arr.delete(item)) {
    return arr
  }
}

function includes (arr, item) {
  return !!~arr.indexOf(item)
}

var hasOwnProperty = Object.prototype.hasOwnProperty;
function hasOwn (obj, key) {
  return hasOwnProperty.call(obj, key)
}

function merge (target) {
  var arguments$1 = arguments;

  var output = Object(target);
  for (var i = 1; i < arguments.length; i++) {
    var source = arguments$1[i];
    if (source !== undefined && source !== null) {
      var key = (void 0);
      for (key in source) {
        if (hasOwn(source, key)) {
          if (isObject(source[key])) {
            output[key] = merge(output[key], source[key]);
          } else {
            output[key] = source[key];
          }
        }
      }
    }
  }
  return output
}

function looseEqual (a, b) {
  if (a === b) { return true }
  var isObjectA = isObject(a);
  var isObjectB = isObject(b);
  if (isObjectA && isObjectB) {
    try {
      var isArrayA = isArray(a);
      var isArrayB = isArray(b);
      if (isArrayA && isArrayB) {
        return a.length === b.length && a.every(function (e, i) {
          return looseEqual(e, b[i])
        })
      } else if (!isArrayA && !isArrayB) {
        var keysA = Object.keys(a);
        var keysB = Object.keys(b);
        return keysA.length === keysB.length && keysA.every(function (key) {
          return looseEqual(a[key], b[key])
        })
      } else {
        /* istanbul ignore next */
        return false
      }
    } catch (e) {
      /* istanbul ignore next */
      return false
    }
  } else if (!isObjectA && !isObjectB) {
    return String(a) === String(b)
  } else {
    return false
  }
}

/**
 * Sanitizes html special characters from input strings. For mitigating risk of XSS attacks.
 * @param rawText The raw input from the user that should be escaped.
 */
function escapeHtml(rawText) {
  return rawText
    .replace(/</g, '&lt;')
    .replace(/>/g, '&gt;')
    .replace(/"/g, '&quot;')
    .replace(/'/g, '&apos;')
}

/**
 * Escapes html tags and special symbols from all provided params which were returned from parseArgs().params.
 * This method performs an in-place operation on the params object.
 *
 * @param {any} params Parameters as provided from `parseArgs().params`.
 *                     May be either an array of strings or a string->any map.
 *
 * @returns The manipulated `params` object.
 */
function escapeParams(params) {
  if(params != null) {
    Object.keys(params).forEach(function (key) {
      if(typeof(params[key]) == 'string') {
        params[key] = escapeHtml(params[key]);
      }
    });
  }
  return params
}

/*  */

function extend (Vue) {
  if (!Vue.prototype.hasOwnProperty('$i18n')) {
    // $FlowFixMe
    Object.defineProperty(Vue.prototype, '$i18n', {
      get: function get () { return this._i18n }
    });
  }

  Vue.prototype.$t = function (key) {
    var values = [], len = arguments.length - 1;
    while ( len-- > 0 ) values[ len ] = arguments[ len + 1 ];

    var i18n = this.$i18n;
    return i18n._t.apply(i18n, [ key, i18n.locale, i18n._getMessages(), this ].concat( values ))
  };

  Vue.prototype.$tc = function (key, choice) {
    var values = [], len = arguments.length - 2;
    while ( len-- > 0 ) values[ len ] = arguments[ len + 2 ];

    var i18n = this.$i18n;
    return i18n._tc.apply(i18n, [ key, i18n.locale, i18n._getMessages(), this, choice ].concat( values ))
  };

  Vue.prototype.$te = function (key, locale) {
    var i18n = this.$i18n;
    return i18n._te(key, i18n.locale, i18n._getMessages(), locale)
  };

  Vue.prototype.$d = function (value) {
    var ref;

    var args = [], len = arguments.length - 1;
    while ( len-- > 0 ) args[ len ] = arguments[ len + 1 ];
    return (ref = this.$i18n).d.apply(ref, [ value ].concat( args ))
  };

  Vue.prototype.$n = function (value) {
    var ref;

    var args = [], len = arguments.length - 1;
    while ( len-- > 0 ) args[ len ] = arguments[ len + 1 ];
    return (ref = this.$i18n).n.apply(ref, [ value ].concat( args ))
  };
}

/*  */

var mixin = {
  beforeCreate: function beforeCreate () {
    var options = this.$options;
    options.i18n = options.i18n || (options.__i18n ? {} : null);

    if (options.i18n) {
      if (options.i18n instanceof VueI18n) {
        // init locale messages via custom blocks
        if (options.__i18n) {
          try {
            var localeMessages = options.i18n && options.i18n.messages ? options.i18n.messages : {};
            options.__i18n.forEach(function (resource) {
              localeMessages = merge(localeMessages, JSON.parse(resource));
            });
            Object.keys(localeMessages).forEach(function (locale) {
              options.i18n.mergeLocaleMessage(locale, localeMessages[locale]);
            });
          } catch (e) {
            if (process.env.NODE_ENV !== 'production') {
              error("Cannot parse locale messages via custom blocks.", e);
            }
          }
        }
        this._i18n = options.i18n;
        this._i18nWatcher = this._i18n.watchI18nData();
      } else if (isPlainObject(options.i18n)) {
        var rootI18n = this.$root && this.$root.$i18n && this.$root.$i18n instanceof VueI18n
          ? this.$root.$i18n
          : null;
        // component local i18n
        if (rootI18n) {
          options.i18n.root = this.$root;
          options.i18n.formatter = rootI18n.formatter;
          options.i18n.fallbackLocale = rootI18n.fallbackLocale;
          options.i18n.formatFallbackMessages = rootI18n.formatFallbackMessages;
          options.i18n.silentTranslationWarn = rootI18n.silentTranslationWarn;
          options.i18n.silentFallbackWarn = rootI18n.silentFallbackWarn;
          options.i18n.pluralizationRules = rootI18n.pluralizationRules;
          options.i18n.preserveDirectiveContent = rootI18n.preserveDirectiveContent;
        }

        // init locale messages via custom blocks
        if (options.__i18n) {
          try {
            var localeMessages$1 = options.i18n && options.i18n.messages ? options.i18n.messages : {};
            options.__i18n.forEach(function (resource) {
              localeMessages$1 = merge(localeMessages$1, JSON.parse(resource));
            });
            options.i18n.messages = localeMessages$1;
          } catch (e) {
            if (process.env.NODE_ENV !== 'production') {
              warn("Cannot parse locale messages via custom blocks.", e);
            }
          }
        }

        var ref = options.i18n;
        var sharedMessages = ref.sharedMessages;
        if (sharedMessages && isPlainObject(sharedMessages)) {
          options.i18n.messages = merge(options.i18n.messages, sharedMessages);
        }

        this._i18n = new VueI18n(options.i18n);
        this._i18nWatcher = this._i18n.watchI18nData();

        if (options.i18n.sync === undefined || !!options.i18n.sync) {
          this._localeWatcher = this.$i18n.watchLocale();
        }

        if (rootI18n) {
          rootI18n.onComponentInstanceCreated(this._i18n);
        }
      } else {
        if (process.env.NODE_ENV !== 'production') {
          warn("Cannot be interpreted 'i18n' option.");
        }
      }
    } else if (this.$root && this.$root.$i18n && this.$root.$i18n instanceof VueI18n) {
      // root i18n
      this._i18n = this.$root.$i18n;
    } else if (options.parent && options.parent.$i18n && options.parent.$i18n instanceof VueI18n) {
      // parent i18n
      this._i18n = options.parent.$i18n;
    }
  },

  beforeMount: function beforeMount () {
    var options = this.$options;
    options.i18n = options.i18n || (options.__i18n ? {} : null);

    if (options.i18n) {
      if (options.i18n instanceof VueI18n) {
        // init locale messages via custom blocks
        this._i18n.subscribeDataChanging(this);
        this._subscribing = true;
      } else if (isPlainObject(options.i18n)) {
        this._i18n.subscribeDataChanging(this);
        this._subscribing = true;
      } else {
        if (process.env.NODE_ENV !== 'production') {
          warn("Cannot be interpreted 'i18n' option.");
        }
      }
    } else if (this.$root && this.$root.$i18n && this.$root.$i18n instanceof VueI18n) {
      this._i18n.subscribeDataChanging(this);
      this._subscribing = true;
    } else if (options.parent && options.parent.$i18n && options.parent.$i18n instanceof VueI18n) {
      this._i18n.subscribeDataChanging(this);
      this._subscribing = true;
    }
  },

  mounted: function mounted () {
    if (this !== this.$root && this.$options.__INTLIFY_META__ && this.$el) {
      this.$el.setAttribute('data-intlify', this.$options.__INTLIFY_META__);
    }
  },

  beforeDestroy: function beforeDestroy () {
    if (!this._i18n) { return }

    var self = this;
    this.$nextTick(function () {
      if (self._subscribing) {
        self._i18n.unsubscribeDataChanging(self);
        delete self._subscribing;
      }

      if (self._i18nWatcher) {
        self._i18nWatcher();
        self._i18n.destroyVM();
        delete self._i18nWatcher;
      }

      if (self._localeWatcher) {
        self._localeWatcher();
        delete self._localeWatcher;
      }
    });
  }
};

/*  */

var interpolationComponent = {
  name: 'i18n',
  functional: true,
  props: {
    tag: {
      type: [String, Boolean, Object],
      default: 'span'
    },
    path: {
      type: String,
      required: true
    },
    locale: {
      type: String
    },
    places: {
      type: [Array, Object]
    }
  },
  render: function render (h, ref) {
    var data = ref.data;
    var parent = ref.parent;
    var props = ref.props;
    var slots = ref.slots;

    var $i18n = parent.$i18n;
    if (!$i18n) {
      if (process.env.NODE_ENV !== 'production') {
        warn('Cannot find VueI18n instance!');
      }
      return
    }

    var path = props.path;
    var locale = props.locale;
    var places = props.places;
    var params = slots();
    var children = $i18n.i(
      path,
      locale,
      onlyHasDefaultPlace(params) || places
        ? useLegacyPlaces(params.default, places)
        : params
    );

    var tag = (!!props.tag && props.tag !== true) || props.tag === false ? props.tag : 'span';
    return tag ? h(tag, data, children) : children
  }
};

function onlyHasDefaultPlace (params) {
  var prop;
  for (prop in params) {
    if (prop !== 'default') { return false }
  }
  return Boolean(prop)
}

function useLegacyPlaces (children, places) {
  var params = places ? createParamsFromPlaces(places) : {};

  if (!children) { return params }

  // Filter empty text nodes
  children = children.filter(function (child) {
    return child.tag || child.text.trim() !== ''
  });

  var everyPlace = children.every(vnodeHasPlaceAttribute);
  if (process.env.NODE_ENV !== 'production' && everyPlace) {
    warn('`place` attribute is deprecated in next major version. Please switch to Vue slots.');
  }

  return children.reduce(
    everyPlace ? assignChildPlace : assignChildIndex,
    params
  )
}

function createParamsFromPlaces (places) {
  if (process.env.NODE_ENV !== 'production') {
    warn('`places` prop is deprecated in next major version. Please switch to Vue slots.');
  }

  return Array.isArray(places)
    ? places.reduce(assignChildIndex, {})
    : Object.assign({}, places)
}

function assignChildPlace (params, child) {
  if (child.data && child.data.attrs && child.data.attrs.place) {
    params[child.data.attrs.place] = child;
  }
  return params
}

function assignChildIndex (params, child, index) {
  params[index] = child;
  return params
}

function vnodeHasPlaceAttribute (vnode) {
  return Boolean(vnode.data && vnode.data.attrs && vnode.data.attrs.place)
}

/*  */

var numberComponent = {
  name: 'i18n-n',
  functional: true,
  props: {
    tag: {
      type: [String, Boolean, Object],
      default: 'span'
    },
    value: {
      type: Number,
      required: true
    },
    format: {
      type: [String, Object]
    },
    locale: {
      type: String
    }
  },
  render: function render (h, ref) {
    var props = ref.props;
    var parent = ref.parent;
    var data = ref.data;

    var i18n = parent.$i18n;

    if (!i18n) {
      if (process.env.NODE_ENV !== 'production') {
        warn('Cannot find VueI18n instance!');
      }
      return null
    }

    var key = null;
    var options = null;

    if (isString(props.format)) {
      key = props.format;
    } else if (isObject(props.format)) {
      if (props.format.key) {
        key = props.format.key;
      }

      // Filter out number format options only
      options = Object.keys(props.format).reduce(function (acc, prop) {
        var obj;

        if (includes(numberFormatKeys, prop)) {
          return Object.assign({}, acc, ( obj = {}, obj[prop] = props.format[prop], obj ))
        }
        return acc
      }, null);
    }

    var locale = props.locale || i18n.locale;
    var parts = i18n._ntp(props.value, locale, key, options);

    var values = parts.map(function (part, index) {
      var obj;

      var slot = data.scopedSlots && data.scopedSlots[part.type];
      return slot ? slot(( obj = {}, obj[part.type] = part.value, obj.index = index, obj.parts = parts, obj )) : part.value
    });

    var tag = (!!props.tag && props.tag !== true) || props.tag === false ? props.tag : 'span';
    return tag
      ? h(tag, {
        attrs: data.attrs,
        'class': data['class'],
        staticClass: data.staticClass
      }, values)
      : values
  }
};

/*  */

function bind (el, binding, vnode) {
  if (!assert(el, vnode)) { return }

  t(el, binding, vnode);
}

function update (el, binding, vnode, oldVNode) {
  if (!assert(el, vnode)) { return }

  var i18n = vnode.context.$i18n;
  if (localeEqual(el, vnode) &&
    (looseEqual(binding.value, binding.oldValue) &&
     looseEqual(el._localeMessage, i18n.getLocaleMessage(i18n.locale)))) { return }

  t(el, binding, vnode);
}

function unbind (el, binding, vnode, oldVNode) {
  var vm = vnode.context;
  if (!vm) {
    warn('Vue instance does not exists in VNode context');
    return
  }

  var i18n = vnode.context.$i18n || {};
  if (!binding.modifiers.preserve && !i18n.preserveDirectiveContent) {
    el.textContent = '';
  }
  el._vt = undefined;
  delete el['_vt'];
  el._locale = undefined;
  delete el['_locale'];
  el._localeMessage = undefined;
  delete el['_localeMessage'];
}

function assert (el, vnode) {
  var vm = vnode.context;
  if (!vm) {
    warn('Vue instance does not exists in VNode context');
    return false
  }

  if (!vm.$i18n) {
    warn('VueI18n instance does not exists in Vue instance');
    return false
  }

  return true
}

function localeEqual (el, vnode) {
  var vm = vnode.context;
  return el._locale === vm.$i18n.locale
}

function t (el, binding, vnode) {
  var ref$1, ref$2;

  var value = binding.value;

  var ref = parseValue(value);
  var path = ref.path;
  var locale = ref.locale;
  var args = ref.args;
  var choice = ref.choice;
  if (!path && !locale && !args) {
    warn('value type not supported');
    return
  }

  if (!path) {
    warn('`path` is required in v-t directive');
    return
  }

  var vm = vnode.context;
  if (choice != null) {
    el._vt = el.textContent = (ref$1 = vm.$i18n).tc.apply(ref$1, [ path, choice ].concat( makeParams(locale, args) ));
  } else {
    el._vt = el.textContent = (ref$2 = vm.$i18n).t.apply(ref$2, [ path ].concat( makeParams(locale, args) ));
  }
  el._locale = vm.$i18n.locale;
  el._localeMessage = vm.$i18n.getLocaleMessage(vm.$i18n.locale);
}

function parseValue (value) {
  var path;
  var locale;
  var args;
  var choice;

  if (isString(value)) {
    path = value;
  } else if (isPlainObject(value)) {
    path = value.path;
    locale = value.locale;
    args = value.args;
    choice = value.choice;
  }

  return { path: path, locale: locale, args: args, choice: choice }
}

function makeParams (locale, args) {
  var params = [];

  locale && params.push(locale);
  if (args && (Array.isArray(args) || isPlainObject(args))) {
    params.push(args);
  }

  return params
}

var Vue;

function install (_Vue) {
  /* istanbul ignore if */
  if (process.env.NODE_ENV !== 'production' && install.installed && _Vue === Vue) {
    warn('already installed.');
    return
  }
  install.installed = true;

  Vue = _Vue;

  var version = (Vue.version && Number(Vue.version.split('.')[0])) || -1;
  /* istanbul ignore if */
  if (process.env.NODE_ENV !== 'production' && version < 2) {
    warn(("vue-i18n (" + (install.version) + ") need to use Vue 2.0 or later (Vue: " + (Vue.version) + ")."));
    return
  }

  extend(Vue);
  Vue.mixin(mixin);
  Vue.directive('t', { bind: bind, update: update, unbind: unbind });
  Vue.component(interpolationComponent.name, interpolationComponent);
  Vue.component(numberComponent.name, numberComponent);

  // use simple mergeStrategies to prevent i18n instance lose '__proto__'
  var strats = Vue.config.optionMergeStrategies;
  strats.i18n = function (parentVal, childVal) {
    return childVal === undefined
      ? parentVal
      : childVal
  };
}

/*  */

var BaseFormatter = function BaseFormatter () {
  this._caches = Object.create(null);
};

BaseFormatter.prototype.interpolate = function interpolate (message, values) {
  if (!values) {
    return [message]
  }
  var tokens = this._caches[message];
  if (!tokens) {
    tokens = parse(message);
    this._caches[message] = tokens;
  }
  return compile(tokens, values)
};



var RE_TOKEN_LIST_VALUE = /^(?:\d)+/;
var RE_TOKEN_NAMED_VALUE = /^(?:\w)+/;

function parse (format) {
  var tokens = [];
  var position = 0;

  var text = '';
  while (position < format.length) {
    var char = format[position++];
    if (char === '{') {
      if (text) {
        tokens.push({ type: 'text', value: text });
      }

      text = '';
      var sub = '';
      char = format[position++];
      while (char !== undefined && char !== '}') {
        sub += char;
        char = format[position++];
      }
      var isClosed = char === '}';

      var type = RE_TOKEN_LIST_VALUE.test(sub)
        ? 'list'
        : isClosed && RE_TOKEN_NAMED_VALUE.test(sub)
          ? 'named'
          : 'unknown';
      tokens.push({ value: sub, type: type });
    } else if (char === '%') {
      // when found rails i18n syntax, skip text capture
      if (format[(position)] !== '{') {
        text += char;
      }
    } else {
      text += char;
    }
  }

  text && tokens.push({ type: 'text', value: text });

  return tokens
}

function compile (tokens, values) {
  var compiled = [];
  var index = 0;

  var mode = Array.isArray(values)
    ? 'list'
    : isObject(values)
      ? 'named'
      : 'unknown';
  if (mode === 'unknown') { return compiled }

  while (index < tokens.length) {
    var token = tokens[index];
    switch (token.type) {
      case 'text':
        compiled.push(token.value);
        break
      case 'list':
        compiled.push(values[parseInt(token.value, 10)]);
        break
      case 'named':
        if (mode === 'named') {
          compiled.push((values)[token.value]);
        } else {
          if (process.env.NODE_ENV !== 'production') {
            warn(("Type of token '" + (token.type) + "' and format of value '" + mode + "' don't match!"));
          }
        }
        break
      case 'unknown':
        if (process.env.NODE_ENV !== 'production') {
          warn("Detect 'unknown' type of token!");
        }
        break
    }
    index++;
  }

  return compiled
}

/*  */

/**
 *  Path parser
 *  - Inspired:
 *    Vue.js Path parser
 */

// actions
var APPEND = 0;
var PUSH = 1;
var INC_SUB_PATH_DEPTH = 2;
var PUSH_SUB_PATH = 3;

// states
var BEFORE_PATH = 0;
var IN_PATH = 1;
var BEFORE_IDENT = 2;
var IN_IDENT = 3;
var IN_SUB_PATH = 4;
var IN_SINGLE_QUOTE = 5;
var IN_DOUBLE_QUOTE = 6;
var AFTER_PATH = 7;
var ERROR = 8;

var pathStateMachine = [];

pathStateMachine[BEFORE_PATH] = {
  'ws': [BEFORE_PATH],
  'ident': [IN_IDENT, APPEND],
  '[': [IN_SUB_PATH],
  'eof': [AFTER_PATH]
};

pathStateMachine[IN_PATH] = {
  'ws': [IN_PATH],
  '.': [BEFORE_IDENT],
  '[': [IN_SUB_PATH],
  'eof': [AFTER_PATH]
};

pathStateMachine[BEFORE_IDENT] = {
  'ws': [BEFORE_IDENT],
  'ident': [IN_IDENT, APPEND],
  '0': [IN_IDENT, APPEND],
  'number': [IN_IDENT, APPEND]
};

pathStateMachine[IN_IDENT] = {
  'ident': [IN_IDENT, APPEND],
  '0': [IN_IDENT, APPEND],
  'number': [IN_IDENT, APPEND],
  'ws': [IN_PATH, PUSH],
  '.': [BEFORE_IDENT, PUSH],
  '[': [IN_SUB_PATH, PUSH],
  'eof': [AFTER_PATH, PUSH]
};

pathStateMachine[IN_SUB_PATH] = {
  "'": [IN_SINGLE_QUOTE, APPEND],
  '"': [IN_DOUBLE_QUOTE, APPEND],
  '[': [IN_SUB_PATH, INC_SUB_PATH_DEPTH],
  ']': [IN_PATH, PUSH_SUB_PATH],
  'eof': ERROR,
  'else': [IN_SUB_PATH, APPEND]
};

pathStateMachine[IN_SINGLE_QUOTE] = {
  "'": [IN_SUB_PATH, APPEND],
  'eof': ERROR,
  'else': [IN_SINGLE_QUOTE, APPEND]
};

pathStateMachine[IN_DOUBLE_QUOTE] = {
  '"': [IN_SUB_PATH, APPEND],
  'eof': ERROR,
  'else': [IN_DOUBLE_QUOTE, APPEND]
};

/**
 * Check if an expression is a literal value.
 */

var literalValueRE = /^\s?(?:true|false|-?[\d.]+|'[^']*'|"[^"]*")\s?$/;
function isLiteral (exp) {
  return literalValueRE.test(exp)
}

/**
 * Strip quotes from a string
 */

function stripQuotes (str) {
  var a = str.charCodeAt(0);
  var b = str.charCodeAt(str.length - 1);
  return a === b && (a === 0x22 || a === 0x27)
    ? str.slice(1, -1)
    : str
}

/**
 * Determine the type of a character in a keypath.
 */

function getPathCharType (ch) {
  if (ch === undefined || ch === null) { return 'eof' }

  var code = ch.charCodeAt(0);

  switch (code) {
    case 0x5B: // [
    case 0x5D: // ]
    case 0x2E: // .
    case 0x22: // "
    case 0x27: // '
      return ch

    case 0x5F: // _
    case 0x24: // $
    case 0x2D: // -
      return 'ident'

    case 0x09: // Tab
    case 0x0A: // Newline
    case 0x0D: // Return
    case 0xA0:  // No-break space
    case 0xFEFF:  // Byte Order Mark
    case 0x2028:  // Line Separator
    case 0x2029:  // Paragraph Separator
      return 'ws'
  }

  return 'ident'
}

/**
 * Format a subPath, return its plain form if it is
 * a literal string or number. Otherwise prepend the
 * dynamic indicator (*).
 */

function formatSubPath (path) {
  var trimmed = path.trim();
  // invalid leading 0
  if (path.charAt(0) === '0' && isNaN(path)) { return false }

  return isLiteral(trimmed) ? stripQuotes(trimmed) : '*' + trimmed
}

/**
 * Parse a string path into an array of segments
 */

function parse$1 (path) {
  var keys = [];
  var index = -1;
  var mode = BEFORE_PATH;
  var subPathDepth = 0;
  var c;
  var key;
  var newChar;
  var type;
  var transition;
  var action;
  var typeMap;
  var actions = [];

  actions[PUSH] = function () {
    if (key !== undefined) {
      keys.push(key);
      key = undefined;
    }
  };

  actions[APPEND] = function () {
    if (key === undefined) {
      key = newChar;
    } else {
      key += newChar;
    }
  };

  actions[INC_SUB_PATH_DEPTH] = function () {
    actions[APPEND]();
    subPathDepth++;
  };

  actions[PUSH_SUB_PATH] = function () {
    if (subPathDepth > 0) {
      subPathDepth--;
      mode = IN_SUB_PATH;
      actions[APPEND]();
    } else {
      subPathDepth = 0;
      if (key === undefined) { return false }
      key = formatSubPath(key);
      if (key === false) {
        return false
      } else {
        actions[PUSH]();
      }
    }
  };

  function maybeUnescapeQuote () {
    var nextChar = path[index + 1];
    if ((mode === IN_SINGLE_QUOTE && nextChar === "'") ||
      (mode === IN_DOUBLE_QUOTE && nextChar === '"')) {
      index++;
      newChar = '\\' + nextChar;
      actions[APPEND]();
      return true
    }
  }

  while (mode !== null) {
    index++;
    c = path[index];

    if (c === '\\' && maybeUnescapeQuote()) {
      continue
    }

    type = getPathCharType(c);
    typeMap = pathStateMachine[mode];
    transition = typeMap[type] || typeMap['else'] || ERROR;

    if (transition === ERROR) {
      return // parse error
    }

    mode = transition[0];
    action = actions[transition[1]];
    if (action) {
      newChar = transition[2];
      newChar = newChar === undefined
        ? c
        : newChar;
      if (action() === false) {
        return
      }
    }

    if (mode === AFTER_PATH) {
      return keys
    }
  }
}





var I18nPath = function I18nPath () {
  this._cache = Object.create(null);
};

/**
 * External parse that check for a cache hit first
 */
I18nPath.prototype.parsePath = function parsePath (path) {
  var hit = this._cache[path];
  if (!hit) {
    hit = parse$1(path);
    if (hit) {
      this._cache[path] = hit;
    }
  }
  return hit || []
};

/**
 * Get path value from path string
 */
I18nPath.prototype.getPathValue = function getPathValue (obj, path) {
  if (!isObject(obj)) { return null }

  var paths = this.parsePath(path);
  if (paths.length === 0) {
    return null
  } else {
    var length = paths.length;
    var last = obj;
    var i = 0;
    while (i < length) {
      var value = last[paths[i]];
      if (value === undefined || value === null) {
        return null
      }
      last = value;
      i++;
    }

    return last
  }
};

/*  */



var htmlTagMatcher = /<\/?[\w\s="/.':;#-\/]+>/;
var linkKeyMatcher = /(?:@(?:\.[a-z]+)?:(?:[\w\-_|.]+|\([\w\-_|.]+\)))/g;
var linkKeyPrefixMatcher = /^@(?:\.([a-z]+))?:/;
var bracketsMatcher = /[()]/g;
var defaultModifiers = {
  'upper': function (str) { return str.toLocaleUpperCase(); },
  'lower': function (str) { return str.toLocaleLowerCase(); },
  'capitalize': function (str) { return ("" + (str.charAt(0).toLocaleUpperCase()) + (str.substr(1))); }
};

var defaultFormatter = new BaseFormatter();

var VueI18n = function VueI18n (options) {
  var this$1 = this;
  if ( options === void 0 ) options = {};

  // Auto install if it is not done yet and `window` has `Vue`.
  // To allow users to avoid auto-installation in some cases,
  // this code should be placed here. See #290
  /* istanbul ignore if */
  if (!Vue && typeof window !== 'undefined' && window.Vue) {
    install(window.Vue);
  }

  var locale = options.locale || 'en-US';
  var fallbackLocale = options.fallbackLocale === false
    ? false
    : options.fallbackLocale || 'en-US';
  var messages = options.messages || {};
  var dateTimeFormats = options.dateTimeFormats || {};
  var numberFormats = options.numberFormats || {};

  this._vm = null;
  this._formatter = options.formatter || defaultFormatter;
  this._modifiers = options.modifiers || {};
  this._missing = options.missing || null;
  this._root = options.root || null;
  this._sync = options.sync === undefined ? true : !!options.sync;
  this._fallbackRoot = options.fallbackRoot === undefined
    ? true
    : !!options.fallbackRoot;
  this._formatFallbackMessages = options.formatFallbackMessages === undefined
    ? false
    : !!options.formatFallbackMessages;
  this._silentTranslationWarn = options.silentTranslationWarn === undefined
    ? false
    : options.silentTranslationWarn;
  this._silentFallbackWarn = options.silentFallbackWarn === undefined
    ? false
    : !!options.silentFallbackWarn;
  this._dateTimeFormatters = {};
  this._numberFormatters = {};
  this._path = new I18nPath();
  this._dataListeners = new Set();
  this._componentInstanceCreatedListener = options.componentInstanceCreatedListener || null;
  this._preserveDirectiveContent = options.preserveDirectiveContent === undefined
    ? false
    : !!options.preserveDirectiveContent;
  this.pluralizationRules = options.pluralizationRules || {};
  this._warnHtmlInMessage = options.warnHtmlInMessage || 'off';
  this._postTranslation = options.postTranslation || null;
  this._escapeParameterHtml = options.escapeParameterHtml || false;

  /**
   * @param choice {number} a choice index given by the input to $tc: `$tc('path.to.rule', choiceIndex)`
   * @param choicesLength {number} an overall amount of available choices
   * @returns a final choice index
  */
  this.getChoiceIndex = function (choice, choicesLength) {
    var thisPrototype = Object.getPrototypeOf(this$1);
    if (thisPrototype && thisPrototype.getChoiceIndex) {
      var prototypeGetChoiceIndex = (thisPrototype.getChoiceIndex);
      return (prototypeGetChoiceIndex).call(this$1, choice, choicesLength)
    }

    // Default (old) getChoiceIndex implementation - english-compatible
    var defaultImpl = function (_choice, _choicesLength) {
      _choice = Math.abs(_choice);

      if (_choicesLength === 2) {
        return _choice
          ? _choice > 1
            ? 1
            : 0
          : 1
      }

      return _choice ? Math.min(_choice, 2) : 0
    };

    if (this$1.locale in this$1.pluralizationRules) {
      return this$1.pluralizationRules[this$1.locale].apply(this$1, [choice, choicesLength])
    } else {
      return defaultImpl(choice, choicesLength)
    }
  };


  this._exist = function (message, key) {
    if (!message || !key) { return false }
    if (!isNull(this$1._path.getPathValue(message, key))) { return true }
    // fallback for flat key
    if (message[key]) { return true }
    return false
  };

  if (this._warnHtmlInMessage === 'warn' || this._warnHtmlInMessage === 'error') {
    Object.keys(messages).forEach(function (locale) {
      this$1._checkLocaleMessage(locale, this$1._warnHtmlInMessage, messages[locale]);
    });
  }

  this._initVM({
    locale: locale,
    fallbackLocale: fallbackLocale,
    messages: messages,
    dateTimeFormats: dateTimeFormats,
    numberFormats: numberFormats
  });
};

var prototypeAccessors = { vm: { configurable: true },messages: { configurable: true },dateTimeFormats: { configurable: true },numberFormats: { configurable: true },availableLocales: { configurable: true },locale: { configurable: true },fallbackLocale: { configurable: true },formatFallbackMessages: { configurable: true },missing: { configurable: true },formatter: { configurable: true },silentTranslationWarn: { configurable: true },silentFallbackWarn: { configurable: true },preserveDirectiveContent: { configurable: true },warnHtmlInMessage: { configurable: true },postTranslation: { configurable: true } };

VueI18n.prototype._checkLocaleMessage = function _checkLocaleMessage (locale, level, message) {
  var paths = [];

  var fn = function (level, locale, message, paths) {
    if (isPlainObject(message)) {
      Object.keys(message).forEach(function (key) {
        var val = message[key];
        if (isPlainObject(val)) {
          paths.push(key);
          paths.push('.');
          fn(level, locale, val, paths);
          paths.pop();
          paths.pop();
        } else {
          paths.push(key);
          fn(level, locale, val, paths);
          paths.pop();
        }
      });
    } else if (isArray(message)) {
      message.forEach(function (item, index) {
        if (isPlainObject(item)) {
          paths.push(("[" + index + "]"));
          paths.push('.');
          fn(level, locale, item, paths);
          paths.pop();
          paths.pop();
        } else {
          paths.push(("[" + index + "]"));
          fn(level, locale, item, paths);
          paths.pop();
        }
      });
    } else if (isString(message)) {
      var ret = htmlTagMatcher.test(message);
      if (ret) {
        var msg = "Detected HTML in message '" + message + "' of keypath '" + (paths.join('')) + "' at '" + locale + "'. Consider component interpolation with '<i18n>' to avoid XSS. See https://bit.ly/2ZqJzkp";
        if (level === 'warn') {
          warn(msg);
        } else if (level === 'error') {
          error(msg);
        }
      }
    }
  };

  fn(level, locale, message, paths);
};

VueI18n.prototype._initVM = function _initVM (data) {
  var silent = Vue.config.silent;
  Vue.config.silent = true;
  this._vm = new Vue({ data: data });
  Vue.config.silent = silent;
};

VueI18n.prototype.destroyVM = function destroyVM () {
  this._vm.$destroy();
};

VueI18n.prototype.subscribeDataChanging = function subscribeDataChanging (vm) {
  this._dataListeners.add(vm);
};

VueI18n.prototype.unsubscribeDataChanging = function unsubscribeDataChanging (vm) {
  remove(this._dataListeners, vm);
};

VueI18n.prototype.watchI18nData = function watchI18nData () {
  var self = this;
  return this._vm.$watch('$data', function () {
    self._dataListeners.forEach(function (e) {
      Vue.nextTick(function () {
        e && e.$forceUpdate();
      });
    });
  }, { deep: true })
};

VueI18n.prototype.watchLocale = function watchLocale () {
  /* istanbul ignore if */
  if (!this._sync || !this._root) { return null }
  var target = this._vm;
  return this._root.$i18n.vm.$watch('locale', function (val) {
    target.$set(target, 'locale', val);
    target.$forceUpdate();
  }, { immediate: true })
};

VueI18n.prototype.onComponentInstanceCreated = function onComponentInstanceCreated (newI18n) {
  if (this._componentInstanceCreatedListener) {
    this._componentInstanceCreatedListener(newI18n, this);
  }
};

prototypeAccessors.vm.get = function () { return this._vm };

prototypeAccessors.messages.get = function () { return looseClone(this._getMessages()) };
prototypeAccessors.dateTimeFormats.get = function () { return looseClone(this._getDateTimeFormats()) };
prototypeAccessors.numberFormats.get = function () { return looseClone(this._getNumberFormats()) };
prototypeAccessors.availableLocales.get = function () { return Object.keys(this.messages).sort() };

prototypeAccessors.locale.get = function () { return this._vm.locale };
prototypeAccessors.locale.set = function (locale) {
  this._vm.$set(this._vm, 'locale', locale);
};

prototypeAccessors.fallbackLocale.get = function () { return this._vm.fallbackLocale };
prototypeAccessors.fallbackLocale.set = function (locale) {
  this._localeChainCache = {};
  this._vm.$set(this._vm, 'fallbackLocale', locale);
};

prototypeAccessors.formatFallbackMessages.get = function () { return this._formatFallbackMessages };
prototypeAccessors.formatFallbackMessages.set = function (fallback) { this._formatFallbackMessages = fallback; };

prototypeAccessors.missing.get = function () { return this._missing };
prototypeAccessors.missing.set = function (handler) { this._missing = handler; };

prototypeAccessors.formatter.get = function () { return this._formatter };
prototypeAccessors.formatter.set = function (formatter) { this._formatter = formatter; };

prototypeAccessors.silentTranslationWarn.get = function () { return this._silentTranslationWarn };
prototypeAccessors.silentTranslationWarn.set = function (silent) { this._silentTranslationWarn = silent; };

prototypeAccessors.silentFallbackWarn.get = function () { return this._silentFallbackWarn };
prototypeAccessors.silentFallbackWarn.set = function (silent) { this._silentFallbackWarn = silent; };

prototypeAccessors.preserveDirectiveContent.get = function () { return this._preserveDirectiveContent };
prototypeAccessors.preserveDirectiveContent.set = function (preserve) { this._preserveDirectiveContent = preserve; };

prototypeAccessors.warnHtmlInMessage.get = function () { return this._warnHtmlInMessage };
prototypeAccessors.warnHtmlInMessage.set = function (level) {
    var this$1 = this;

  var orgLevel = this._warnHtmlInMessage;
  this._warnHtmlInMessage = level;
  if (orgLevel !== level && (level === 'warn' || level === 'error')) {
    var messages = this._getMessages();
    Object.keys(messages).forEach(function (locale) {
      this$1._checkLocaleMessage(locale, this$1._warnHtmlInMessage, messages[locale]);
    });
  }
};

prototypeAccessors.postTranslation.get = function () { return this._postTranslation };
prototypeAccessors.postTranslation.set = function (handler) { this._postTranslation = handler; };

VueI18n.prototype._getMessages = function _getMessages () { return this._vm.messages };
VueI18n.prototype._getDateTimeFormats = function _getDateTimeFormats () { return this._vm.dateTimeFormats };
VueI18n.prototype._getNumberFormats = function _getNumberFormats () { return this._vm.numberFormats };

VueI18n.prototype._warnDefault = function _warnDefault (locale, key, result, vm, values, interpolateMode) {
  if (!isNull(result)) { return result }
  if (this._missing) {
    var missingRet = this._missing.apply(null, [locale, key, vm, values]);
    if (isString(missingRet)) {
      return missingRet
    }
  } else {
    if (process.env.NODE_ENV !== 'production' && !this._isSilentTranslationWarn(key)) {
      warn(
        "Cannot translate the value of keypath '" + key + "'. " +
        'Use the value of keypath as default.'
      );
    }
  }

  if (this._formatFallbackMessages) {
    var parsedArgs = parseArgs.apply(void 0, values);
    return this._render(key, interpolateMode, parsedArgs.params, key)
  } else {
    return key
  }
};

VueI18n.prototype._isFallbackRoot = function _isFallbackRoot (val) {
  return !val && !isNull(this._root) && this._fallbackRoot
};

VueI18n.prototype._isSilentFallbackWarn = function _isSilentFallbackWarn (key) {
  return this._silentFallbackWarn instanceof RegExp
    ? this._silentFallbackWarn.test(key)
    : this._silentFallbackWarn
};

VueI18n.prototype._isSilentFallback = function _isSilentFallback (locale, key) {
  return this._isSilentFallbackWarn(key) && (this._isFallbackRoot() || locale !== this.fallbackLocale)
};

VueI18n.prototype._isSilentTranslationWarn = function _isSilentTranslationWarn (key) {
  return this._silentTranslationWarn instanceof RegExp
    ? this._silentTranslationWarn.test(key)
    : this._silentTranslationWarn
};

VueI18n.prototype._interpolate = function _interpolate (
  locale,
  message,
  key,
  host,
  interpolateMode,
  values,
  visitedLinkStack
) {
  if (!message) { return null }

  var pathRet = this._path.getPathValue(message, key);
  if (isArray(pathRet) || isPlainObject(pathRet)) { return pathRet }

  var ret;
  if (isNull(pathRet)) {
    /* istanbul ignore else */
    if (isPlainObject(message)) {
      ret = message[key];
      if (!(isString(ret) || isFunction(ret))) {
        if (process.env.NODE_ENV !== 'production' && !this._isSilentTranslationWarn(key) && !this._isSilentFallback(locale, key)) {
          warn(("Value of key '" + key + "' is not a string or function !"));
        }
        return null
      }
    } else {
      return null
    }
  } else {
    /* istanbul ignore else */
    if (isString(pathRet) || isFunction(pathRet)) {
      ret = pathRet;
    } else {
      if (process.env.NODE_ENV !== 'production' && !this._isSilentTranslationWarn(key) && !this._isSilentFallback(locale, key)) {
        warn(("Value of key '" + key + "' is not a string or function!"));
      }
      return null
    }
  }

  // Check for the existence of links within the translated string
  if (isString(ret) && (ret.indexOf('@:') >= 0 || ret.indexOf('@.') >= 0)) {
    ret = this._link(locale, message, ret, host, 'raw', values, visitedLinkStack);
  }

  return this._render(ret, interpolateMode, values, key)
};

VueI18n.prototype._link = function _link (
  locale,
  message,
  str,
  host,
  interpolateMode,
  values,
  visitedLinkStack
) {
  var ret = str;

  // Match all the links within the local
  // We are going to replace each of
  // them with its translation
  var matches = ret.match(linkKeyMatcher);
    
  // eslint-disable-next-line no-autofix/prefer-const
  for (var idx in matches) {
    // ie compatible: filter custom array
    // prototype method
    if (!matches.hasOwnProperty(idx)) {
      continue
    }
    var link = matches[idx];
    var linkKeyPrefixMatches = link.match(linkKeyPrefixMatcher);
    var linkPrefix = linkKeyPrefixMatches[0];
      var formatterName = linkKeyPrefixMatches[1];

    // Remove the leading @:, @.case: and the brackets
    var linkPlaceholder = link.replace(linkPrefix, '').replace(bracketsMatcher, '');

    if (includes(visitedLinkStack, linkPlaceholder)) {
      if (process.env.NODE_ENV !== 'production') {
        warn(("Circular reference found. \"" + link + "\" is already visited in the chain of " + (visitedLinkStack.reverse().join(' <- '))));
      }
      return ret
    }
    visitedLinkStack.push(linkPlaceholder);

    // Translate the link
    var translated = this._interpolate(
      locale, message, linkPlaceholder, host,
      interpolateMode === 'raw' ? 'string' : interpolateMode,
      interpolateMode === 'raw' ? undefined : values,
      visitedLinkStack
    );

    if (this._isFallbackRoot(translated)) {
      if (process.env.NODE_ENV !== 'production' && !this._isSilentTranslationWarn(linkPlaceholder)) {
        warn(("Fall back to translate the link placeholder '" + linkPlaceholder + "' with root locale."));
      }
      /* istanbul ignore if */
      if (!this._root) { throw Error('unexpected error') }
      var root = this._root.$i18n;
      translated = root._translate(
        root._getMessages(), root.locale, root.fallbackLocale,
        linkPlaceholder, host, interpolateMode, values
      );
    }
    translated = this._warnDefault(
      locale, linkPlaceholder, translated, host,
      isArray(values) ? values : [values],
      interpolateMode
    );

    if (this._modifiers.hasOwnProperty(formatterName)) {
      translated = this._modifiers[formatterName](translated);
    } else if (defaultModifiers.hasOwnProperty(formatterName)) {
      translated = defaultModifiers[formatterName](translated);
    }

    visitedLinkStack.pop();

    // Replace the link with the translated
    ret = !translated ? ret : ret.replace(link, translated);
  }

  return ret
};

VueI18n.prototype._createMessageContext = function _createMessageContext (values, formatter, path, interpolateMode) {
    var this$1 = this;

  var _list = isArray(values) ? values : [];
  var _named = isObject(values) ? values : {};
  var list = function (index) { return _list[index]; };
  var named = function (key) { return _named[key]; };
  var messages = this._getMessages();
  var locale = this.locale;

  return {
    list: list,
    named: named,
    values: values,
    formatter: formatter,
    path: path,
    messages: messages,
    locale: locale,
    linked: function (linkedKey) { return this$1._interpolate(locale, messages[locale] || {}, linkedKey, null, interpolateMode, undefined, [linkedKey]); }
  }
};

VueI18n.prototype._render = function _render (message, interpolateMode, values, path) {
  if (isFunction(message)) {
    return message(
      this._createMessageContext(values, this._formatter || defaultFormatter, path, interpolateMode)
    )
  }

  var ret = this._formatter.interpolate(message, values, path);

  // If the custom formatter refuses to work - apply the default one
  if (!ret) {
    ret = defaultFormatter.interpolate(message, values, path);
  }

  // if interpolateMode is **not** 'string' ('row'),
  // return the compiled data (e.g. ['foo', VNode, 'bar']) with formatter
  return interpolateMode === 'string' && !isString(ret) ? ret.join('') : ret
};

VueI18n.prototype._appendItemToChain = function _appendItemToChain (chain, item, blocks) {
  var follow = false;
  if (!includes(chain, item)) {
    follow = true;
    if (item) {
      follow = item[item.length - 1] !== '!';
      item = item.replace(/!/g, '');
      chain.push(item);
      if (blocks && blocks[item]) {
        follow = blocks[item];
      }
    }
  }
  return follow
};

VueI18n.prototype._appendLocaleToChain = function _appendLocaleToChain (chain, locale, blocks) {
  var follow;
  var tokens = locale.split('-');
  do {
    var item = tokens.join('-');
    follow = this._appendItemToChain(chain, item, blocks);
    tokens.splice(-1, 1);
  } while (tokens.length && (follow === true))
  return follow
};

VueI18n.prototype._appendBlockToChain = function _appendBlockToChain (chain, block, blocks) {
  var follow = true;
  for (var i = 0; (i < block.length) && (isBoolean(follow)); i++) {
    var locale = block[i];
    if (isString(locale)) {
      follow = this._appendLocaleToChain(chain, locale, blocks);
    }
  }
  return follow
};

VueI18n.prototype._getLocaleChain = function _getLocaleChain (start, fallbackLocale) {
  if (start === '') { return [] }

  if (!this._localeChainCache) {
    this._localeChainCache = {};
  }

  var chain = this._localeChainCache[start];
  if (!chain) {
    if (!fallbackLocale) {
      fallbackLocale = this.fallbackLocale;
    }
    chain = [];

    // first block defined by start
    var block = [start];

    // while any intervening block found
    while (isArray(block)) {
      block = this._appendBlockToChain(
        chain,
        block,
        fallbackLocale
      );
    }

    // last block defined by default
    var defaults;
    if (isArray(fallbackLocale)) {
      defaults = fallbackLocale;
    } else if (isObject(fallbackLocale)) {
      /* $FlowFixMe */
      if (fallbackLocale['default']) {
        defaults = fallbackLocale['default'];
      } else {
        defaults = null;
      }
    } else {
      defaults = fallbackLocale;
    }

    // convert defaults to array
    if (isString(defaults)) {
      block = [defaults];
    } else {
      block = defaults;
    }
    if (block) {
      this._appendBlockToChain(
        chain,
        block,
        null
      );
    }
    this._localeChainCache[start] = chain;
  }
  return chain
};

VueI18n.prototype._translate = function _translate (
  messages,
  locale,
  fallback,
  key,
  host,
  interpolateMode,
  args
) {
  var chain = this._getLocaleChain(locale, fallback);
  var res;
  for (var i = 0; i < chain.length; i++) {
    var step = chain[i];
    res =
      this._interpolate(step, messages[step], key, host, interpolateMode, args, [key]);
    if (!isNull(res)) {
      if (step !== locale && process.env.NODE_ENV !== 'production' && !this._isSilentTranslationWarn(key) && !this._isSilentFallbackWarn(key)) {
        warn(("Fall back to translate the keypath '" + key + "' with '" + step + "' locale."));
      }
      return res
    }
  }
  return null
};

VueI18n.prototype._t = function _t (key, _locale, messages, host) {
    var ref;

    var values = [], len = arguments.length - 4;
    while ( len-- > 0 ) values[ len ] = arguments[ len + 4 ];
  if (!key) { return '' }

  var parsedArgs = parseArgs.apply(void 0, values);
  if(this._escapeParameterHtml) {
    parsedArgs.params = escapeParams(parsedArgs.params);
  }

  var locale = parsedArgs.locale || _locale;

  var ret = this._translate(
    messages, locale, this.fallbackLocale, key,
    host, 'string', parsedArgs.params
  );
  if (this._isFallbackRoot(ret)) {
    if (process.env.NODE_ENV !== 'production' && !this._isSilentTranslationWarn(key) && !this._isSilentFallbackWarn(key)) {
      warn(("Fall back to translate the keypath '" + key + "' with root locale."));
    }
    /* istanbul ignore if */
    if (!this._root) { throw Error('unexpected error') }
    return (ref = this._root).$t.apply(ref, [ key ].concat( values ))
  } else {
    ret = this._warnDefault(locale, key, ret, host, values, 'string');
    if (this._postTranslation && ret !== null && ret !== undefined) {
      ret = this._postTranslation(ret, key);
    }
    return ret
  }
};

VueI18n.prototype.t = function t (key) {
    var ref;

    var values = [], len = arguments.length - 1;
    while ( len-- > 0 ) values[ len ] = arguments[ len + 1 ];
  return (ref = this)._t.apply(ref, [ key, this.locale, this._getMessages(), null ].concat( values ))
};

VueI18n.prototype._i = function _i (key, locale, messages, host, values) {
  var ret =
    this._translate(messages, locale, this.fallbackLocale, key, host, 'raw', values);
  if (this._isFallbackRoot(ret)) {
    if (process.env.NODE_ENV !== 'production' && !this._isSilentTranslationWarn(key)) {
      warn(("Fall back to interpolate the keypath '" + key + "' with root locale."));
    }
    if (!this._root) { throw Error('unexpected error') }
    return this._root.$i18n.i(key, locale, values)
  } else {
    return this._warnDefault(locale, key, ret, host, [values], 'raw')
  }
};

VueI18n.prototype.i = function i (key, locale, values) {
  /* istanbul ignore if */
  if (!key) { return '' }

  if (!isString(locale)) {
    locale = this.locale;
  }

  return this._i(key, locale, this._getMessages(), null, values)
};

VueI18n.prototype._tc = function _tc (
  key,
  _locale,
  messages,
  host,
  choice
) {
    var ref;

    var values = [], len = arguments.length - 5;
    while ( len-- > 0 ) values[ len ] = arguments[ len + 5 ];
  if (!key) { return '' }
  if (choice === undefined) {
    choice = 1;
  }

  var predefined = { 'count': choice, 'n': choice };
  var parsedArgs = parseArgs.apply(void 0, values);
  parsedArgs.params = Object.assign(predefined, parsedArgs.params);
  values = parsedArgs.locale === null ? [parsedArgs.params] : [parsedArgs.locale, parsedArgs.params];
  return this.fetchChoice((ref = this)._t.apply(ref, [ key, _locale, messages, host ].concat( values )), choice)
};

VueI18n.prototype.fetchChoice = function fetchChoice (message, choice) {
  /* istanbul ignore if */
  if (!message || !isString(message)) { return null }
  var choices = message.split('|');

  choice = this.getChoiceIndex(choice, choices.length);
  if (!choices[choice]) { return message }
  return choices[choice].trim()
};

VueI18n.prototype.tc = function tc (key, choice) {
    var ref;

    var values = [], len = arguments.length - 2;
    while ( len-- > 0 ) values[ len ] = arguments[ len + 2 ];
  return (ref = this)._tc.apply(ref, [ key, this.locale, this._getMessages(), null, choice ].concat( values ))
};

VueI18n.prototype._te = function _te (key, locale, messages) {
    var args = [], len = arguments.length - 3;
    while ( len-- > 0 ) args[ len ] = arguments[ len + 3 ];

  var _locale = parseArgs.apply(void 0, args).locale || locale;
  return this._exist(messages[_locale], key)
};

VueI18n.prototype.te = function te (key, locale) {
  return this._te(key, this.locale, this._getMessages(), locale)
};

VueI18n.prototype.getLocaleMessage = function getLocaleMessage (locale) {
  return looseClone(this._vm.messages[locale] || {})
};

VueI18n.prototype.setLocaleMessage = function setLocaleMessage (locale, message) {
  if (this._warnHtmlInMessage === 'warn' || this._warnHtmlInMessage === 'error') {
    this._checkLocaleMessage(locale, this._warnHtmlInMessage, message);
  }
  this._vm.$set(this._vm.messages, locale, message);
};

VueI18n.prototype.mergeLocaleMessage = function mergeLocaleMessage (locale, message) {
  if (this._warnHtmlInMessage === 'warn' || this._warnHtmlInMessage === 'error') {
    this._checkLocaleMessage(locale, this._warnHtmlInMessage, message);
  }
  this._vm.$set(this._vm.messages, locale, merge(
    typeof this._vm.messages[locale] !== 'undefined' && Object.keys(this._vm.messages[locale]).length
      ? this._vm.messages[locale]
      : {},
    message
  ));
};

VueI18n.prototype.getDateTimeFormat = function getDateTimeFormat (locale) {
  return looseClone(this._vm.dateTimeFormats[locale] || {})
};

VueI18n.prototype.setDateTimeFormat = function setDateTimeFormat (locale, format) {
  this._vm.$set(this._vm.dateTimeFormats, locale, format);
  this._clearDateTimeFormat(locale, format);
};

VueI18n.prototype.mergeDateTimeFormat = function mergeDateTimeFormat (locale, format) {
  this._vm.$set(this._vm.dateTimeFormats, locale, merge(this._vm.dateTimeFormats[locale] || {}, format));
  this._clearDateTimeFormat(locale, format);
};

VueI18n.prototype._clearDateTimeFormat = function _clearDateTimeFormat (locale, format) {
  // eslint-disable-next-line no-autofix/prefer-const
  for (var key in format) {
    var id = locale + "__" + key;

    if (!this._dateTimeFormatters.hasOwnProperty(id)) {
      continue
    }

    delete this._dateTimeFormatters[id];
  }
};

VueI18n.prototype._localizeDateTime = function _localizeDateTime (
  value,
  locale,
  fallback,
  dateTimeFormats,
  key
) {
  var _locale = locale;
  var formats = dateTimeFormats[_locale];

  var chain = this._getLocaleChain(locale, fallback);
  for (var i = 0; i < chain.length; i++) {
    var current = _locale;
    var step = chain[i];
    formats = dateTimeFormats[step];
    _locale = step;
    // fallback locale
    if (isNull(formats) || isNull(formats[key])) {
      if (step !== locale && process.env.NODE_ENV !== 'production' && !this._isSilentTranslationWarn(key) && !this._isSilentFallbackWarn(key)) {
        warn(("Fall back to '" + step + "' datetime formats from '" + current + "' datetime formats."));
      }
    } else {
      break
    }
  }

  if (isNull(formats) || isNull(formats[key])) {
    return null
  } else {
    var format = formats[key];
    var id = _locale + "__" + key;
    var formatter = this._dateTimeFormatters[id];
    if (!formatter) {
      formatter = this._dateTimeFormatters[id] = new Intl.DateTimeFormat(_locale, format);
    }
    return formatter.format(value)
  }
};

VueI18n.prototype._d = function _d (value, locale, key) {
  /* istanbul ignore if */
  if (process.env.NODE_ENV !== 'production' && !VueI18n.availabilities.dateTimeFormat) {
    warn('Cannot format a Date value due to not supported Intl.DateTimeFormat.');
    return ''
  }

  if (!key) {
    return new Intl.DateTimeFormat(locale).format(value)
  }

  var ret =
    this._localizeDateTime(value, locale, this.fallbackLocale, this._getDateTimeFormats(), key);
  if (this._isFallbackRoot(ret)) {
    if (process.env.NODE_ENV !== 'production' && !this._isSilentTranslationWarn(key) && !this._isSilentFallbackWarn(key)) {
      warn(("Fall back to datetime localization of root: key '" + key + "'."));
    }
    /* istanbul ignore if */
    if (!this._root) { throw Error('unexpected error') }
    return this._root.$i18n.d(value, key, locale)
  } else {
    return ret || ''
  }
};

VueI18n.prototype.d = function d (value) {
    var args = [], len = arguments.length - 1;
    while ( len-- > 0 ) args[ len ] = arguments[ len + 1 ];

  var locale = this.locale;
  var key = null;

  if (args.length === 1) {
    if (isString(args[0])) {
      key = args[0];
    } else if (isObject(args[0])) {
      if (args[0].locale) {
        locale = args[0].locale;
      }
      if (args[0].key) {
        key = args[0].key;
      }
    }
  } else if (args.length === 2) {
    if (isString(args[0])) {
      key = args[0];
    }
    if (isString(args[1])) {
      locale = args[1];
    }
  }

  return this._d(value, locale, key)
};

VueI18n.prototype.getNumberFormat = function getNumberFormat (locale) {
  return looseClone(this._vm.numberFormats[locale] || {})
};

VueI18n.prototype.setNumberFormat = function setNumberFormat (locale, format) {
  this._vm.$set(this._vm.numberFormats, locale, format);
  this._clearNumberFormat(locale, format);
};

VueI18n.prototype.mergeNumberFormat = function mergeNumberFormat (locale, format) {
  this._vm.$set(this._vm.numberFormats, locale, merge(this._vm.numberFormats[locale] || {}, format));
  this._clearNumberFormat(locale, format);
};

VueI18n.prototype._clearNumberFormat = function _clearNumberFormat (locale, format) {
  // eslint-disable-next-line no-autofix/prefer-const
  for (var key in format) {
    var id = locale + "__" + key;

    if (!this._numberFormatters.hasOwnProperty(id)) {
      continue
    }

    delete this._numberFormatters[id];
  }
};

VueI18n.prototype._getNumberFormatter = function _getNumberFormatter (
  value,
  locale,
  fallback,
  numberFormats,
  key,
  options
) {
  var _locale = locale;
  var formats = numberFormats[_locale];

  var chain = this._getLocaleChain(locale, fallback);
  for (var i = 0; i < chain.length; i++) {
    var current = _locale;
    var step = chain[i];
    formats = numberFormats[step];
    _locale = step;
    // fallback locale
    if (isNull(formats) || isNull(formats[key])) {
      if (step !== locale && process.env.NODE_ENV !== 'production' && !this._isSilentTranslationWarn(key) && !this._isSilentFallbackWarn(key)) {
        warn(("Fall back to '" + step + "' number formats from '" + current + "' number formats."));
      }
    } else {
      break
    }
  }

  if (isNull(formats) || isNull(formats[key])) {
    return null
  } else {
    var format = formats[key];

    var formatter;
    if (options) {
      // If options specified - create one time number formatter
      formatter = new Intl.NumberFormat(_locale, Object.assign({}, format, options));
    } else {
      var id = _locale + "__" + key;
      formatter = this._numberFormatters[id];
      if (!formatter) {
        formatter = this._numberFormatters[id] = new Intl.NumberFormat(_locale, format);
      }
    }
    return formatter
  }
};

VueI18n.prototype._n = function _n (value, locale, key, options) {
  /* istanbul ignore if */
  if (!VueI18n.availabilities.numberFormat) {
    if (process.env.NODE_ENV !== 'production') {
      warn('Cannot format a Number value due to not supported Intl.NumberFormat.');
    }
    return ''
  }

  if (!key) {
    var nf = !options ? new Intl.NumberFormat(locale) : new Intl.NumberFormat(locale, options);
    return nf.format(value)
  }

  var formatter = this._getNumberFormatter(value, locale, this.fallbackLocale, this._getNumberFormats(), key, options);
  var ret = formatter && formatter.format(value);
  if (this._isFallbackRoot(ret)) {
    if (process.env.NODE_ENV !== 'production' && !this._isSilentTranslationWarn(key) && !this._isSilentFallbackWarn(key)) {
      warn(("Fall back to number localization of root: key '" + key + "'."));
    }
    /* istanbul ignore if */
    if (!this._root) { throw Error('unexpected error') }
    return this._root.$i18n.n(value, Object.assign({}, { key: key, locale: locale }, options))
  } else {
    return ret || ''
  }
};

VueI18n.prototype.n = function n (value) {
    var args = [], len = arguments.length - 1;
    while ( len-- > 0 ) args[ len ] = arguments[ len + 1 ];

  var locale = this.locale;
  var key = null;
  var options = null;

  if (args.length === 1) {
    if (isString(args[0])) {
      key = args[0];
    } else if (isObject(args[0])) {
      if (args[0].locale) {
        locale = args[0].locale;
      }
      if (args[0].key) {
        key = args[0].key;
      }

      // Filter out number format options only
      options = Object.keys(args[0]).reduce(function (acc, key) {
          var obj;

        if (includes(numberFormatKeys, key)) {
          return Object.assign({}, acc, ( obj = {}, obj[key] = args[0][key], obj ))
        }
        return acc
      }, null);
    }
  } else if (args.length === 2) {
    if (isString(args[0])) {
      key = args[0];
    }
    if (isString(args[1])) {
      locale = args[1];
    }
  }

  return this._n(value, locale, key, options)
};

VueI18n.prototype._ntp = function _ntp (value, locale, key, options) {
  /* istanbul ignore if */
  if (!VueI18n.availabilities.numberFormat) {
    if (process.env.NODE_ENV !== 'production') {
      warn('Cannot format to parts a Number value due to not supported Intl.NumberFormat.');
    }
    return []
  }

  if (!key) {
    var nf = !options ? new Intl.NumberFormat(locale) : new Intl.NumberFormat(locale, options);
    return nf.formatToParts(value)
  }

  var formatter = this._getNumberFormatter(value, locale, this.fallbackLocale, this._getNumberFormats(), key, options);
  var ret = formatter && formatter.formatToParts(value);
  if (this._isFallbackRoot(ret)) {
    if (process.env.NODE_ENV !== 'production' && !this._isSilentTranslationWarn(key)) {
      warn(("Fall back to format number to parts of root: key '" + key + "' ."));
    }
    /* istanbul ignore if */
    if (!this._root) { throw Error('unexpected error') }
    return this._root.$i18n._ntp(value, locale, key, options)
  } else {
    return ret || []
  }
};

Object.defineProperties( VueI18n.prototype, prototypeAccessors );

var availabilities;
// $FlowFixMe
Object.defineProperty(VueI18n, 'availabilities', {
  get: function get () {
    if (!availabilities) {
      var intlDefined = typeof Intl !== 'undefined';
      availabilities = {
        dateTimeFormat: intlDefined && typeof Intl.DateTimeFormat !== 'undefined',
        numberFormat: intlDefined && typeof Intl.NumberFormat !== 'undefined'
      };
    }

    return availabilities
  }
});

VueI18n.install = install;
VueI18n.version = '8.24.4';

module.exports = VueI18n;


================================================
FILE: dist/vue-i18n.esm.browser.js
================================================
/*  */

/**
 * constants
 */

const numberFormatKeys = [
  'compactDisplay',
  'currency',
  'currencyDisplay',
  'currencySign',
  'localeMatcher',
  'notation',
  'numberingSystem',
  'signDisplay',
  'style',
  'unit',
  'unitDisplay',
  'useGrouping',
  'minimumIntegerDigits',
  'minimumFractionDigits',
  'maximumFractionDigits',
  'minimumSignificantDigits',
  'maximumSignificantDigits'
];

/**
 * utilities
 */

function warn (msg, err) {
  if (typeof console !== 'undefined') {
    console.warn('[vue-i18n] ' + msg);
    /* istanbul ignore if */
    if (err) {
      console.warn(err.stack);
    }
  }
}

function error (msg, err) {
  if (typeof console !== 'undefined') {
    console.error('[vue-i18n] ' + msg);
    /* istanbul ignore if */
    if (err) {
      console.error(err.stack);
    }
  }
}

const isArray = Array.isArray;

function isObject (obj) {
  return obj !== null && typeof obj === 'object'
}

function isBoolean (val) {
  return typeof val === 'boolean'
}

function isString (val) {
  return typeof val === 'string'
}

const toString = Object.prototype.toString;
const OBJECT_STRING = '[object Object]';
function isPlainObject (obj) {
  return toString.call(obj) === OBJECT_STRING
}

function isNull (val) {
  return val === null || val === undefined
}

function isFunction (val) {
  return typeof val === 'function'
}

function parseArgs (...args) {
  let locale = null;
  let params = null;
  if (args.length === 1) {
    if (isObject(args[0]) || isArray(args[0])) {
      params = args[0];
    } else if (typeof args[0] === 'string') {
      locale = args[0];
    }
  } else if (args.length === 2) {
    if (typeof args[0] === 'string') {
      locale = args[0];
    }
    /* istanbul ignore if */
    if (isObject(args[1]) || isArray(args[1])) {
      params = args[1];
    }
  }

  return { locale, params }
}

function looseClone (obj) {
  return JSON.parse(JSON.stringify(obj))
}

function remove (arr, item) {
  if (arr.delete(item)) {
    return arr
  }
}

function includes (arr, item) {
  return !!~arr.indexOf(item)
}

const hasOwnProperty = Object.prototype.hasOwnProperty;
function hasOwn (obj, key) {
  return hasOwnProperty.call(obj, key)
}

function merge (target) {
  const output = Object(target);
  for (let i = 1; i < arguments.length; i++) {
    const source = arguments[i];
    if (source !== undefined && source !== null) {
      let key;
      for (key in source) {
        if (hasOwn(source, key)) {
          if (isObject(source[key])) {
            output[key] = merge(output[key], source[key]);
          } else {
            output[key] = source[key];
          }
        }
      }
    }
  }
  return output
}

function looseEqual (a, b) {
  if (a === b) { return true }
  const isObjectA = isObject(a);
  const isObjectB = isObject(b);
  if (isObjectA && isObjectB) {
    try {
      const isArrayA = isArray(a);
      const isArrayB = isArray(b);
      if (isArrayA && isArrayB) {
        return a.length === b.length && a.every((e, i) => {
          return looseEqual(e, b[i])
        })
      } else if (!isArrayA && !isArrayB) {
        const keysA = Object.keys(a);
        const keysB = Object.keys(b);
        return keysA.length === keysB.length && keysA.every((key) => {
          return looseEqual(a[key], b[key])
        })
      } else {
        /* istanbul ignore next */
        return false
      }
    } catch (e) {
      /* istanbul ignore next */
      return false
    }
  } else if (!isObjectA && !isObjectB) {
    return String(a) === String(b)
  } else {
    return false
  }
}

/**
 * Sanitizes html special characters from input strings. For mitigating risk of XSS attacks.
 * @param rawText The raw input from the user that should be escaped.
 */
function escapeHtml(rawText) {
  return rawText
    .replace(/</g, '&lt;')
    .replace(/>/g, '&gt;')
    .replace(/"/g, '&quot;')
    .replace(/'/g, '&apos;')
}

/**
 * Escapes html tags and special symbols from all provided params which were returned from parseArgs().params.
 * This method performs an in-place operation on the params object.
 *
 * @param {any} params Parameters as provided from `parseArgs().params`.
 *                     May be either an array of strings or a string->any map.
 *
 * @returns The manipulated `params` object.
 */
function escapeParams(params) {
  if(params != null) {
    Object.keys(params).forEach(key => {
      if(typeof(params[key]) == 'string') {
        params[key] = escapeHtml(params[key]);
      }
    });
  }
  return params
}

/*  */

function extend (Vue) {
  if (!Vue.prototype.hasOwnProperty('$i18n')) {
    // $FlowFixMe
    Object.defineProperty(Vue.prototype, '$i18n', {
      get () { return this._i18n }
    });
  }

  Vue.prototype.$t = function (key, ...values) {
    const i18n = this.$i18n;
    return i18n._t(key, i18n.locale, i18n._getMessages(), this, ...values)
  };

  Vue.prototype.$tc = function (key, choice, ...values) {
    const i18n = this.$i18n;
    return i18n._tc(key, i18n.locale, i18n._getMessages(), this, choice, ...values)
  };

  Vue.prototype.$te = function (key, locale) {
    const i18n = this.$i18n;
    return i18n._te(key, i18n.locale, i18n._getMessages(), locale)
  };

  Vue.prototype.$d = function (value, ...args) {
    return this.$i18n.d(value, ...args)
  };

  Vue.prototype.$n = function (value, ...args) {
    return this.$i18n.n(value, ...args)
  };
}

/*  */

var mixin = {
  beforeCreate () {
    const options = this.$options;
    options.i18n = options.i18n || (options.__i18n ? {} : null);

    if (options.i18n) {
      if (options.i18n instanceof VueI18n) {
        // init locale messages via custom blocks
        if (options.__i18n) {
          try {
            let localeMessages = options.i18n && options.i18n.messages ? options.i18n.messages : {};
            options.__i18n.forEach(resource => {
              localeMessages = merge(localeMessages, JSON.parse(resource));
            });
            Object.keys(localeMessages).forEach((locale) => {
              options.i18n.mergeLocaleMessage(locale, localeMessages[locale]);
            });
          } catch (e) {
            {
              error(`Cannot parse locale messages via custom blocks.`, e);
            }
          }
        }
        this._i18n = options.i18n;
        this._i18nWatcher = this._i18n.watchI18nData();
      } else if (isPlainObject(options.i18n)) {
        const rootI18n = this.$root && this.$root.$i18n && this.$root.$i18n instanceof VueI18n
          ? this.$root.$i18n
          : null;
        // component local i18n
        if (rootI18n) {
          options.i18n.root = this.$root;
          options.i18n.formatter = rootI18n.formatter;
          options.i18n.fallbackLocale = rootI18n.fallbackLocale;
          options.i18n.formatFallbackMessages = rootI18n.formatFallbackMessages;
          options.i18n.silentTranslationWarn = rootI18n.silentTranslationWarn;
          options.i18n.silentFallbackWarn = rootI18n.silentFallbackWarn;
          options.i18n.pluralizationRules = rootI18n.pluralizationRules;
          options.i18n.preserveDirectiveContent = rootI18n.preserveDirectiveContent;
        }

        // init locale messages via custom blocks
        if (options.__i18n) {
          try {
            let localeMessages = options.i18n && options.i18n.messages ? options.i18n.messages : {};
            options.__i18n.forEach(resource => {
              localeMessages = merge(localeMessages, JSON.parse(resource));
            });
            options.i18n.messages = localeMessages;
          } catch (e) {
            {
             
Download .txt
gitextract_4s507kkn/

├── .babelrc
├── .dependabot/
│   └── config.yml
├── .editorconfig
├── .eslintignore
├── .eslintrc.js
├── .flowconfig
├── .github/
│   ├── FUNDING.yml
│   ├── ISSUE_TEMPLATE/
│   │   ├── bug-report.yml
│   │   ├── config.yml
│   │   └── feature_request.yml
│   └── workflows/
│       ├── ci.yml
│       └── release.yml
├── .gitignore
├── .mergify.yml
├── .npmignore
├── BACKERS.md
├── CHANGELOG.md
├── CONTRIBUTING.md
├── LICENSE
├── README.md
├── SECURITY.md
├── assets/
│   └── README.md
├── config/
│   ├── .eslintrc.js
│   ├── banner.js
│   ├── build.js
│   ├── bundle.js
│   ├── entry.js
│   ├── karma-intl-plugin.js
│   ├── karma.base.conf.js
│   ├── karma.cover.conf.js
│   ├── karma.sauce.conf.js
│   ├── karma.unit.ci.conf.js
│   ├── karma.unit.conf.js
│   ├── nightwatch.conf.js
│   ├── version.js
│   └── webpack.dev.conf.js
├── decls/
│   ├── i18n.js
│   └── module.js
├── dist/
│   ├── README.md
│   ├── vue-i18n.common.js
│   ├── vue-i18n.esm.browser.js
│   ├── vue-i18n.esm.js
│   └── vue-i18n.js
├── docs/
│   ├── 404.html
│   ├── api/
│   │   └── index.html
│   ├── assets/
│   │   ├── css/
│   │   │   └── 0.styles.c299b601.css
│   │   └── js/
│   │       ├── 10.13689381.js
│   │       ├── 11.aa13f293.js
│   │       ├── 12.2b21ead8.js
│   │       ├── 13.b3706367.js
│   │       ├── 14.1819508a.js
│   │       ├── 15.12152ec7.js
│   │       ├── 16.c251473e.js
│   │       ├── 17.311179bd.js
│   │       ├── 18.a9d0f1d4.js
│   │       ├── 19.d0288f09.js
│   │       ├── 2.aa910774.js
│   │       ├── 20.9de38e10.js
│   │       ├── 21.65715f7c.js
│   │       ├── 22.7b59f449.js
│   │       ├── 23.11ece4c3.js
│   │       ├── 24.dffd1071.js
│   │       ├── 25.97b69148.js
│   │       ├── 26.616f0814.js
│   │       ├── 27.adf21b94.js
│   │       ├── 28.6bf6d42b.js
│   │       ├── 29.e8b42909.js
│   │       ├── 3.5e63523d.js
│   │       ├── 30.24889fb9.js
│   │       ├── 31.57bd94a5.js
│   │       ├── 32.14dc9bdc.js
│   │       ├── 33.4d59e7bf.js
│   │       ├── 34.adc9b2af.js
│   │       ├── 35.4e6e5ad7.js
│   │       ├── 36.7b1eb244.js
│   │       ├── 37.6584773d.js
│   │       ├── 38.7879de31.js
│   │       ├── 39.f7496f35.js
│   │       ├── 4.9735c0af.js
│   │       ├── 40.b5b5dc72.js
│   │       ├── 41.638a9c02.js
│   │       ├── 42.222a2780.js
│   │       ├── 43.b28cd4fc.js
│   │       ├── 44.67f64685.js
│   │       ├── 45.550cbef0.js
│   │       ├── 46.5ab1c570.js
│   │       ├── 47.d7b6ca42.js
│   │       ├── 48.185bface.js
│   │       ├── 49.1570bc72.js
│   │       ├── 5.0b14e886.js
│   │       ├── 50.0e187269.js
│   │       ├── 51.c993f5c3.js
│   │       ├── 52.d66b2adb.js
│   │       ├── 53.21ae73c5.js
│   │       ├── 54.cd4c9ca8.js
│   │       ├── 55.caa71074.js
│   │       ├── 56.c8f906b3.js
│   │       ├── 57.388c89dc.js
│   │       ├── 58.ad6e14bc.js
│   │       ├── 59.3d64068b.js
│   │       ├── 6.b88753f1.js
│   │       ├── 60.12bfe8e9.js
│   │       ├── 61.446dac92.js
│   │       ├── 62.88ef088f.js
│   │       ├── 63.b6e0a846.js
│   │       ├── 64.f3210fad.js
│   │       ├── 65.afac79e3.js
│   │       ├── 66.d403fc3a.js
│   │       ├── 67.0bffd98a.js
│   │       ├── 7.eaeacaf7.js
│   │       ├── 8.344bd519.js
│   │       ├── 9.ec02aae8.js
│   │       └── app.5b04e7b0.js
│   ├── guide/
│   │   ├── component.html
│   │   ├── datetime.html
│   │   ├── directive.html
│   │   ├── fallback.html
│   │   ├── formatting.html
│   │   ├── hot-reload.html
│   │   ├── interpolation.html
│   │   ├── lazy-loading.html
│   │   ├── locale.html
│   │   ├── messages.html
│   │   ├── number.html
│   │   ├── pluralization.html
│   │   ├── sfc.html
│   │   └── tooling.html
│   ├── index.html
│   ├── installation.html
│   ├── introduction.html
│   ├── legacy/
│   │   ├── index.html
│   │   └── v5.html
│   ├── ru/
│   │   ├── api/
│   │   │   └── index.html
│   │   ├── guide/
│   │   │   ├── component.html
│   │   │   ├── datetime.html
│   │   │   ├── directive.html
│   │   │   ├── fallback.html
│   │   │   ├── formatting.html
│   │   │   ├── hot-reload.html
│   │   │   ├── interpolation.html
│   │   │   ├── lazy-loading.html
│   │   │   ├── locale.html
│   │   │   ├── messages.html
│   │   │   ├── number.html
│   │   │   ├── pluralization.html
│   │   │   ├── sfc.html
│   │   │   └── tooling.html
│   │   ├── index.html
│   │   ├── installation.html
│   │   ├── introduction.html
│   │   ├── legacy/
│   │   │   ├── index.html
│   │   │   └── v5.html
│   │   └── started.html
│   ├── started.html
│   └── zh/
│       ├── api/
│       │   └── index.html
│       ├── guide/
│       │   ├── component.html
│       │   ├── datetime.html
│       │   ├── directive.html
│       │   ├── fallback.html
│       │   ├── formatting.html
│       │   ├── hot-reload.html
│       │   ├── interpolation.html
│       │   ├── lazy-loading.html
│       │   ├── locale.html
│       │   ├── messages.html
│       │   ├── number.html
│       │   ├── pluralization.html
│       │   ├── sfc.html
│       │   └── tooling.html
│       ├── index.html
│       ├── installation.html
│       ├── introduction.html
│       ├── legacy/
│       │   ├── index.html
│       │   └── v5.html
│       └── started.html
├── examples/
│   ├── .eslintrc.js
│   ├── component/
│   │   └── index.html
│   ├── datetime/
│   │   └── index.html
│   ├── directive/
│   │   └── index.html
│   ├── es-modules/
│   │   └── index.html
│   ├── formatting/
│   │   ├── custom/
│   │   │   ├── .gitignore
│   │   │   ├── README.md
│   │   │   ├── babel.config.js
│   │   │   ├── package.json
│   │   │   ├── public/
│   │   │   │   └── index.html
│   │   │   └── src/
│   │   │       ├── App.vue
│   │   │       ├── formatter.js
│   │   │       ├── i18n.js
│   │   │       └── main.js
│   │   ├── escape-parameter-html/
│   │   │   └── index.html
│   │   ├── html/
│   │   │   └── index.html
│   │   ├── html-warning/
│   │   │   └── index.html
│   │   ├── list/
│   │   │   └── index.html
│   │   ├── named/
│   │   │   └── index.html
│   │   └── rails/
│   │       └── index.html
│   ├── hot/
│   │   ├── .gitignore
│   │   ├── README.md
│   │   ├── babel.config.js
│   │   ├── package.json
│   │   ├── public/
│   │   │   └── index.html
│   │   └── src/
│   │       ├── App.vue
│   │       ├── components/
│   │       │   └── HelloWorld.vue
│   │       ├── i18n.js
│   │       ├── locales/
│   │       │   ├── en.json
│   │       │   └── ja.json
│   │       └── main.js
│   ├── integration/
│   │   └── contentful/
│   │       ├── .contentful.sample.json
│   │       ├── .editorconfig
│   │       ├── .eslintrc.js
│   │       ├── .gitignore
│   │       ├── LICENSE
│   │       ├── README.md
│   │       ├── WHATS-NEXT.md
│   │       ├── assets/
│   │       │   └── README.md
│   │       ├── bin/
│   │       │   └── download-content-model.js
│   │       ├── components/
│   │       │   ├── README.md
│   │       │   ├── article-preview.vue
│   │       │   ├── language-header.vue
│   │       │   └── navigation.vue
│   │       ├── docs/
│   │       │   └── GETTING-STARTED.md
│   │       ├── layouts/
│   │       │   ├── README.md
│   │       │   └── default.vue
│   │       ├── locales/
│   │       │   ├── en-US.json
│   │       │   └── ja.json
│   │       ├── middleware/
│   │       │   └── README.md
│   │       ├── nuxt.config.js
│   │       ├── package.json
│   │       ├── pages/
│   │       │   ├── README.md
│   │       │   ├── blog/
│   │       │   │   ├── _slug.vue
│   │       │   │   └── index.vue
│   │       │   ├── index.vue
│   │       │   └── tags/
│   │       │       └── _tag.vue
│   │       ├── plugins/
│   │       │   ├── README.md
│   │       │   ├── contentful.js
│   │       │   └── i18n.js
│   │       ├── static/
│   │       │   └── README.md
│   │       └── store/
│   │           └── README.md
│   ├── interpolation/
│   │   ├── places/
│   │   │   └── index.html
│   │   └── slots/
│   │       └── index.html
│   ├── module/
│   │   ├── nuxt/
│   │   │   ├── .gitignore
│   │   │   ├── README.md
│   │   │   ├── assets/
│   │   │   │   └── README.md
│   │   │   ├── components/
│   │   │   │   ├── Logo.vue
│   │   │   │   └── README.md
│   │   │   ├── layouts/
│   │   │   │   ├── README.md
│   │   │   │   └── default.vue
│   │   │   ├── locales/
│   │   │   │   ├── en.json
│   │   │   │   └── ja.json
│   │   │   ├── middleware/
│   │   │   │   └── README.md
│   │   │   ├── nuxt.config.js
│   │   │   ├── package.json
│   │   │   ├── pages/
│   │   │   │   ├── README.md
│   │   │   │   └── index.vue
│   │   │   ├── plugins/
│   │   │   │   └── README.md
│   │   │   ├── static/
│   │   │   │   └── README.md
│   │   │   └── store/
│   │   │       └── README.md
│   │   ├── rollup/
│   │   │   ├── .gitignore
│   │   │   ├── README.md
│   │   │   ├── dist/
│   │   │   │   └── index.html
│   │   │   ├── package.json
│   │   │   ├── rollup.config.js
│   │   │   └── src/
│   │   │       ├── App.vue
│   │   │       └── index.js
│   │   └── webpack/
│   │       ├── .gitignore
│   │       ├── README.md
│   │       ├── babel.config.js
│   │       ├── package.json
│   │       ├── public/
│   │       │   └── index.html
│   │       ├── src/
│   │       │   ├── App.vue
│   │       │   └── main.js
│   │       └── vue.config.js
│   ├── number/
│   │   └── index.html
│   ├── number-formatting/
│   │   └── index.html
│   ├── perf/
│   │   ├── .gitignore
│   │   ├── README.md
│   │   ├── compiler/
│   │   │   ├── .gitignore
│   │   │   ├── README.md
│   │   │   ├── babel.config.js
│   │   │   ├── package.json
│   │   │   ├── public/
│   │   │   │   └── index.html
│   │   │   ├── src/
│   │   │   │   ├── App.vue
│   │   │   │   └── main.js
│   │   │   └── vue.config.js
│   │   ├── directive/
│   │   │   ├── .gitignore
│   │   │   ├── README.md
│   │   │   ├── babel.config.js
│   │   │   ├── package.json
│   │   │   ├── public/
│   │   │   │   └── index.html
│   │   │   ├── src/
│   │   │   │   ├── App.vue
│   │   │   │   └── main.js
│   │   │   └── vue.config.js
│   │   ├── generate/
│   │   │   └── .gitkeep
│   │   ├── index.js
│   │   ├── method/
│   │   │   ├── .gitignore
│   │   │   ├── README.md
│   │   │   ├── babel.config.js
│   │   │   ├── package.json
│   │   │   ├── public/
│   │   │   │   └── index.html
│   │   │   ├── src/
│   │   │   │   ├── App.vue
│   │   │   │   └── main.js
│   │   │   └── vue.config.js
│   │   ├── package.json
│   │   └── plain/
│   │       ├── .gitignore
│   │       ├── README.md
│   │       ├── babel.config.js
│   │       ├── package.json
│   │       ├── public/
│   │       │   └── index.html
│   │       ├── src/
│   │       │   ├── App.vue
│   │       │   └── main.js
│   │       └── vue.config.js
│   ├── sfc/
│   │   ├── .gitignore
│   │   ├── README.md
│   │   ├── babel.config.js
│   │   ├── package.json
│   │   ├── public/
│   │   │   └── index.html
│   │   ├── src/
│   │   │   ├── App.vue
│   │   │   └── main.js
│   │   └── vue.config.js
│   ├── ssr/
│   │   ├── hn2/
│   │   │   ├── .babelrc
│   │   │   ├── .gitignore
│   │   │   ├── LICENSE
│   │   │   ├── README.md
│   │   │   ├── build/
│   │   │   │   ├── setup-dev-server.js
│   │   │   │   ├── vue-loader.config.js
│   │   │   │   ├── webpack.base.config.js
│   │   │   │   ├── webpack.client.config.js
│   │   │   │   └── webpack.server.config.js
│   │   │   ├── manifest.json
│   │   │   ├── package.json
│   │   │   ├── server.js
│   │   │   └── src/
│   │   │       ├── App.vue
│   │   │       ├── api/
│   │   │       │   ├── create-api-client.js
│   │   │       │   ├── create-api-server.js
│   │   │       │   └── index.js
│   │   │       ├── app.js
│   │   │       ├── components/
│   │   │       │   ├── Comment.vue
│   │   │       │   ├── Item.vue
│   │   │       │   ├── ProgressBar.vue
│   │   │       │   └── Spinner.vue
│   │   │       ├── entry-client.js
│   │   │       ├── entry-server.js
│   │   │       ├── i18n/
│   │   │       │   ├── en-US.json
│   │   │       │   ├── index.js
│   │   │       │   └── ja-JP.json
│   │   │       ├── index.template.html
│   │   │       ├── router/
│   │   │       │   └── index.js
│   │   │       ├── store/
│   │   │       │   ├── actions.js
│   │   │       │   ├── getters.js
│   │   │       │   ├── index.js
│   │   │       │   └── mutations.js
│   │   │       ├── util/
│   │   │       │   ├── filters.js
│   │   │       │   └── title.js
│   │   │       ├── util.js
│   │   │       └── views/
│   │   │           ├── CreateListView.js
│   │   │           ├── ItemList.vue
│   │   │           ├── ItemView.vue
│   │   │           └── UserView.vue
│   │   └── nuxt/
│   │       ├── .editorconfig
│   │       ├── .eslintrc.js
│   │       ├── .gitignore
│   │       ├── README.md
│   │       ├── assets/
│   │       │   └── README.md
│   │       ├── components/
│   │       │   ├── Logo.vue
│   │       │   └── README.md
│   │       ├── layouts/
│   │       │   ├── README.md
│   │       │   └── default.vue
│   │       ├── locales/
│   │       │   ├── en.json
│   │       │   └── ja.json
│   │       ├── middleware/
│   │       │   └── README.md
│   │       ├── nuxt.config.js
│   │       ├── package.json
│   │       ├── pages/
│   │       │   ├── README.md
│   │       │   └── index.vue
│   │       ├── plugins/
│   │       │   ├── README.md
│   │       │   └── i18n.js
│   │       ├── static/
│   │       │   └── README.md
│   │       └── store/
│   │           └── README.md
│   ├── started/
│   │   └── index.html
│   └── storybook/
│       ├── .babelrc
│       ├── .gitignore
│       ├── .storybook/
│       │   ├── addons.js
│       │   └── config.js
│       ├── README.md
│       ├── index.html
│       ├── package.json
│       ├── src/
│       │   ├── App.vue
│       │   ├── main.js
│       │   └── stories/
│       │       ├── MyButton.vue
│       │       ├── Welcome.vue
│       │       └── index.js
│       └── webpack.config.js
├── gitbook/
│   ├── LANGS.md
│   ├── book.json
│   ├── en/
│   │   ├── SUMMARY.md
│   │   ├── api.md
│   │   ├── component.md
│   │   ├── datetime.md
│   │   ├── directive.md
│   │   ├── fallback.md
│   │   ├── formatting.md
│   │   ├── gotchas.md
│   │   ├── hot-reload.md
│   │   ├── installation.md
│   │   ├── interpolation.md
│   │   ├── lazy-loading.md
│   │   ├── messages.md
│   │   ├── migrations.md
│   │   ├── number.md
│   │   ├── pluralization.md
│   │   ├── sfc.md
│   │   └── started.md
│   └── old/
│       └── README.md
├── package.json
├── scripts/
│   ├── docs-deploy.sh
│   └── remove.sh
├── ship.config.js
├── src/
│   ├── components/
│   │   ├── interpolation.js
│   │   └── number.js
│   ├── directive.js
│   ├── extend.js
│   ├── format.js
│   ├── index.js
│   ├── install.js
│   ├── mixin.js
│   ├── path.js
│   └── util.js
├── test/
│   ├── .eslintrc.js
│   ├── e2e/
│   │   ├── runner.js
│   │   └── test/
│   │       ├── component.js
│   │       ├── datetime.js
│   │       ├── directive.js
│   │       ├── formatting_html.js
│   │       ├── formatting_list.js
│   │       ├── formatting_named.js
│   │       ├── formatting_rails.js
│   │       ├── interpolation.js
│   │       ├── number.js
│   │       ├── number_formatting.js
│   │       └── started.js
│   ├── helpers/
│   │   ├── entry.js
│   │   ├── imports.js
│   │   └── util.js
│   └── unit/
│       ├── basic.test.js
│       ├── component.test.js
│       ├── custom_blocks.test.js
│       ├── datetime.test.js
│       ├── directive.test.js
│       ├── escape_parameter_html.test.js
│       ├── fallback.test.js
│       ├── fixture/
│       │   ├── datetime.js
│       │   ├── index.js
│       │   └── number.js
│       ├── format.test.js
│       ├── format_custom.test.js
│       ├── index.html
│       ├── index.js
│       ├── interpolation.test.js
│       ├── issues.test.js
│       ├── message.test.js
│       ├── message_function.test.js
│       ├── missing.test.js
│       ├── mixin.test.js
│       ├── number.test.js
│       ├── number_component.test.js
│       ├── path.test.js
│       ├── post_translation.test.js
│       ├── silent.test.js
│       └── warn_html_in_message.test.js
├── types/
│   ├── .eslintrc.js
│   ├── index.d.ts
│   ├── test/
│   │   ├── component.ts
│   │   └── index.ts
│   └── tsconfig.json
├── vetur/
│   ├── attributes.json
│   └── tags.json
└── vuepress/
    ├── .vuepress/
    │   ├── components/
    │   │   └── sponsor-button.vue
    │   ├── config.js
    │   └── theme/
    │       ├── Layout.vue
    │       ├── components/
    │       │   └── CarbonAds.vue
    │       └── index.js
    ├── README.md
    ├── api/
    │   └── README.md
    ├── guide/
    │   ├── component.md
    │   ├── datetime.md
    │   ├── directive.md
    │   ├── fallback.md
    │   ├── formatting.md
    │   ├── hot-reload.md
    │   ├── interpolation.md
    │   ├── lazy-loading.md
    │   ├── locale.md
    │   ├── messages.md
    │   ├── number.md
    │   ├── pluralization.md
    │   ├── sfc.md
    │   └── tooling.md
    ├── installation.md
    ├── introduction.md
    ├── pt/
    │   ├── README.md
    │   ├── api/
    │   │   └── README.md
    │   ├── guide/
    │   │   ├── component.md
    │   │   ├── datetime.md
    │   │   ├── directive.md
    │   │   ├── fallback.md
    │   │   ├── formatting.md
    │   │   ├── hot-reload.md
    │   │   ├── interpolation.md
    │   │   ├── lazy-loading.md
    │   │   ├── locale.md
    │   │   ├── messages.md
    │   │   ├── number.md
    │   │   ├── pluralization.md
    │   │   ├── sfc.md
    │   │   └── tooling.md
    │   ├── installation.md
    │   ├── introduction.md
    │   └── started.md
    ├── ru/
    │   ├── README.md
    │   ├── api/
    │   │   └── README.md
    │   ├── guide/
    │   │   ├── component.md
    │   │   ├── datetime.md
    │   │   ├── directive.md
    │   │   ├── fallback.md
    │   │   ├── formatting.md
    │   │   ├── hot-reload.md
    │   │   ├── interpolation.md
    │   │   ├── lazy-loading.md
    │   │   ├── locale.md
    │   │   ├── messages.md
    │   │   ├── number.md
    │   │   ├── pluralization.md
    │   │   ├── sfc.md
    │   │   └── tooling.md
    │   ├── installation.md
    │   ├── introduction.md
    │   └── started.md
    ├── started.md
    └── zh/
        ├── README.md
        ├── api/
        │   └── README.md
        ├── guide/
        │   ├── component.md
        │   ├── datetime.md
        │   ├── directive.md
        │   ├── fallback.md
        │   ├── formatting.md
        │   ├── hot-reload.md
        │   ├── interpolation.md
        │   ├── lazy-loading.md
        │   ├── locale.md
        │   ├── messages.md
        │   ├── number.md
        │   ├── pluralization.md
        │   ├── sfc.md
        │   └── tooling.md
        ├── installation.md
        ├── introduction.md
        └── started.md
Download .txt
SYMBOL INDEX (875 symbols across 56 files)

FILE: config/bundle.js
  function build (line 9) | function build (entries) {
  function buildEntry (line 23) | function buildEntry (config) {
  function write (line 47) | function write (dest, code, zip) {
  function getSize (line 68) | function getSize (code) {
  function logError (line 72) | function logError (e) {
  function blue (line 76) | function blue (str) {

FILE: config/entry.js
  function toUpper (line 10) | function toUpper (_, c) {
  function classify (line 16) | function classify (str) {
  function genConfig (line 68) | function genConfig (opts) {

FILE: dist/vue-i18n.common.js
  function warn (line 38) | function warn (msg, err) {
  function error (line 48) | function error (msg, err) {
  function isObject (line 60) | function isObject (obj) {
  function isBoolean (line 64) | function isBoolean (val) {
  function isString (line 68) | function isString (val) {
  function isPlainObject (line 74) | function isPlainObject (obj) {
  function isNull (line 78) | function isNull (val) {
  function isFunction (line 82) | function isFunction (val) {
  function parseArgs (line 86) | function parseArgs () {
  function looseClone (line 111) | function looseClone (obj) {
  function remove (line 115) | function remove (arr, item) {
  function includes (line 121) | function includes (arr, item) {
  function hasOwn (line 126) | function hasOwn (obj, key) {
  function merge (line 130) | function merge (target) {
  function looseEqual (line 152) | function looseEqual (a, b) {
  function escapeHtml (line 189) | function escapeHtml(rawText) {
  function escapeParams (line 206) | function escapeParams(params) {
  function extend (line 219) | function extend (Vue) {
  function onlyHasDefaultPlace (line 461) | function onlyHasDefaultPlace (params) {
  function useLegacyPlaces (line 469) | function useLegacyPlaces (children, places) {
  function createParamsFromPlaces (line 490) | function createParamsFromPlaces (places) {
  function assignChildPlace (line 500) | function assignChildPlace (params, child) {
  function assignChildIndex (line 507) | function assignChildIndex (params, child, index) {
  function vnodeHasPlaceAttribute (line 512) | function vnodeHasPlaceAttribute (vnode) {
  function bind (line 595) | function bind (el, binding, vnode) {
  function update (line 601) | function update (el, binding, vnode, oldVNode) {
  function unbind (line 612) | function unbind (el, binding, vnode, oldVNode) {
  function assert (line 631) | function assert (el, vnode) {
  function localeEqual (line 646) | function localeEqual (el, vnode) {
  function t (line 651) | function t (el, binding, vnode) {
  function parseValue (line 681) | function parseValue (value) {
  function makeParams (line 699) | function makeParams (locale, args) {
  function install (line 712) | function install (_Vue) {
  function parse (line 767) | function parse (format) {
  function compile (line 809) | function compile (tokens, values) {
  function isLiteral (line 934) | function isLiteral (exp) {
  function stripQuotes (line 942) | function stripQuotes (str) {
  function getPathCharType (line 954) | function getPathCharType (ch) {
  function formatSubPath (line 991) | function formatSubPath (path) {
  function parse$1 (line 1003) | function parse$1 (path) {

FILE: dist/vue-i18n.esm.browser.js
  function warn (line 31) | function warn (msg, err) {
  function error (line 41) | function error (msg, err) {
  function isObject (line 53) | function isObject (obj) {
  function isBoolean (line 57) | function isBoolean (val) {
  function isString (line 61) | function isString (val) {
  constant OBJECT_STRING (line 66) | const OBJECT_STRING = '[object Object]';
  function isPlainObject (line 67) | function isPlainObject (obj) {
  function isNull (line 71) | function isNull (val) {
  function isFunction (line 75) | function isFunction (val) {
  function parseArgs (line 79) | function parseArgs (...args) {
  function looseClone (line 101) | function looseClone (obj) {
  function remove (line 105) | function remove (arr, item) {
  function includes (line 111) | function includes (arr, item) {
  function hasOwn (line 116) | function hasOwn (obj, key) {
  function merge (line 120) | function merge (target) {
  function looseEqual (line 140) | function looseEqual (a, b) {
  function escapeHtml (line 177) | function escapeHtml(rawText) {
  function escapeParams (line 194) | function escapeParams(params) {
  function extend (line 207) | function extend (Vue) {
  method beforeCreate (line 242) | beforeCreate () {
  method beforeMount (line 326) | beforeMount () {
  method mounted (line 352) | mounted () {
  method beforeDestroy (line 358) | beforeDestroy () {
  method render (line 403) | render (h, { data, parent, props, slots }) {
  function onlyHasDefaultPlace (line 427) | function onlyHasDefaultPlace (params) {
  function useLegacyPlaces (line 435) | function useLegacyPlaces (children, places) {
  function createParamsFromPlaces (line 456) | function createParamsFromPlaces (places) {
  function assignChildPlace (line 466) | function assignChildPlace (params, child) {
  function assignChildIndex (line 473) | function assignChildIndex (params, child, index) {
  function vnodeHasPlaceAttribute (line 478) | function vnodeHasPlaceAttribute (vnode) {
  method render (line 503) | render (h, { props, parent, data }) {
  function bind (line 553) | function bind (el, binding, vnode) {
  function update (line 559) | function update (el, binding, vnode, oldVNode) {
  function unbind (line 570) | function unbind (el, binding, vnode, oldVNode) {
  function assert (line 589) | function assert (el, vnode) {
  function localeEqual (line 604) | function localeEqual (el, vnode) {
  function t (line 609) | function t (el, binding, vnode) {
  function parseValue (line 633) | function parseValue (value) {
  function makeParams (line 651) | function makeParams (locale, args) {
  function install (line 664) | function install (_Vue) {
  class BaseFormatter (line 698) | class BaseFormatter {
    method constructor (line 701) | constructor () {
    method interpolate (line 705) | interpolate (message, values) {
  constant RE_TOKEN_LIST_VALUE (line 720) | const RE_TOKEN_LIST_VALUE = /^(?:\d)+/;
  constant RE_TOKEN_NAMED_VALUE (line 721) | const RE_TOKEN_NAMED_VALUE = /^(?:\w)+/;
  function parse (line 723) | function parse (format) {
  function compile (line 765) | function compile (tokens, values) {
  constant APPEND (line 815) | const APPEND = 0;
  constant PUSH (line 816) | const PUSH = 1;
  constant INC_SUB_PATH_DEPTH (line 817) | const INC_SUB_PATH_DEPTH = 2;
  constant PUSH_SUB_PATH (line 818) | const PUSH_SUB_PATH = 3;
  constant BEFORE_PATH (line 821) | const BEFORE_PATH = 0;
  constant IN_PATH (line 822) | const IN_PATH = 1;
  constant BEFORE_IDENT (line 823) | const BEFORE_IDENT = 2;
  constant IN_IDENT (line 824) | const IN_IDENT = 3;
  constant IN_SUB_PATH (line 825) | const IN_SUB_PATH = 4;
  constant IN_SINGLE_QUOTE (line 826) | const IN_SINGLE_QUOTE = 5;
  constant IN_DOUBLE_QUOTE (line 827) | const IN_DOUBLE_QUOTE = 6;
  constant AFTER_PATH (line 828) | const AFTER_PATH = 7;
  constant ERROR (line 829) | const ERROR = 8;
  function isLiteral (line 890) | function isLiteral (exp) {
  function stripQuotes (line 898) | function stripQuotes (str) {
  function getPathCharType (line 910) | function getPathCharType (ch) {
  function formatSubPath (line 947) | function formatSubPath (path) {
  function parse$1 (line 959) | function parse$1 (path) {
  class I18nPath (line 1059) | class I18nPath {
    method constructor (line 1062) | constructor () {
    method parsePath (line 1069) | parsePath (path) {
    method getPathValue (line 1083) | getPathValue (obj, path) {
  class VueI18n (line 1123) | class VueI18n {
    method constructor (line 1152) | constructor (options = {}) {
    method _checkLocaleMessage (line 1258) | _checkLocaleMessage (locale, level, message) {
    method _initVM (line 1307) | _initVM (data) {
    method destroyVM (line 1314) | destroyVM () {
    method subscribeDataChanging (line 1318) | subscribeDataChanging (vm) {
    method unsubscribeDataChanging (line 1322) | unsubscribeDataChanging (vm) {
    method watchI18nData (line 1326) | watchI18nData () {
    method watchLocale (line 1337) | watchLocale () {
    method onComponentInstanceCreated (line 1347) | onComponentInstanceCreated (newI18n) {
    method vm (line 1353) | get vm () { return this._vm }
    method messages (line 1355) | get messages () { return looseClone(this._getMessages()) }
    method dateTimeFormats (line 1356) | get dateTimeFormats () { return looseClone(this._getDateTimeFormats()) }
    method numberFormats (line 1357) | get numberFormats () { return looseClone(this._getNumberFormats()) }
    method availableLocales (line 1358) | get availableLocales () { return Object.keys(this.messages).sort() }
    method locale (line 1360) | get locale () { return this._vm.locale }
    method locale (line 1361) | set locale (locale) {
    method fallbackLocale (line 1365) | get fallbackLocale () { return this._vm.fallbackLocale }
    method fallbackLocale (line 1366) | set fallbackLocale (locale) {
    method formatFallbackMessages (line 1371) | get formatFallbackMessages () { return this._formatFallbackMessages }
    method formatFallbackMessages (line 1372) | set formatFallbackMessages (fallback) { this._formatFallbackMessages =...
    method missing (line 1374) | get missing () { return this._missing }
    method missing (line 1375) | set missing (handler) { this._missing = handler; }
    method formatter (line 1377) | get formatter () { return this._formatter }
    method formatter (line 1378) | set formatter (formatter) { this._formatter = formatter; }
    method silentTranslationWarn (line 1380) | get silentTranslationWarn () { return this._silentTranslationWarn }
    method silentTranslationWarn (line 1381) | set silentTranslationWarn (silent) { this._silentTranslationWarn = sil...
    method silentFallbackWarn (line 1383) | get silentFallbackWarn () { return this._silentFallbackWarn }
    method silentFallbackWarn (line 1384) | set silentFallbackWarn (silent) { this._silentFallbackWarn = silent; }
    method preserveDirectiveContent (line 1386) | get preserveDirectiveContent () { return this._preserveDirectiveContent }
    method preserveDirectiveContent (line 1387) | set preserveDirectiveContent (preserve) { this._preserveDirectiveConte...
    method warnHtmlInMessage (line 1389) | get warnHtmlInMessage () { return this._warnHtmlInMessage }
    method warnHtmlInMessage (line 1390) | set warnHtmlInMessage (level) {
    method postTranslation (line 1401) | get postTranslation () { return this._postTranslation }
    method postTranslation (line 1402) | set postTranslation (handler) { this._postTranslation = handler; }
    method _getMessages (line 1404) | _getMessages () { return this._vm.messages }
    method _getDateTimeFormats (line 1405) | _getDateTimeFormats () { return this._vm.dateTimeFormats }
    method _getNumberFormats (line 1406) | _getNumberFormats () { return this._vm.numberFormats }
    method _warnDefault (line 1408) | _warnDefault (locale, key, result, vm, values, interpolateMode) {
    method _isFallbackRoot (line 1432) | _isFallbackRoot (val) {
    method _isSilentFallbackWarn (line 1436) | _isSilentFallbackWarn (key) {
    method _isSilentFallback (line 1442) | _isSilentFallback (locale, key) {
    method _isSilentTranslationWarn (line 1446) | _isSilentTranslationWarn (key) {
    method _interpolate (line 1452) | _interpolate (
    method _link (line 1500) | _link (
    method _createMessageContext (line 1579) | _createMessageContext (values, formatter, path, interpolateMode) {
    method _render (line 1599) | _render (message, interpolateMode, values, path) {
    method _appendItemToChain (line 1618) | _appendItemToChain (chain, item, blocks) {
    method _appendLocaleToChain (line 1634) | _appendLocaleToChain (chain, locale, blocks) {
    method _appendBlockToChain (line 1645) | _appendBlockToChain (chain, block, blocks) {
    method _getLocaleChain (line 1656) | _getLocaleChain (start, fallbackLocale) {
    method _translate (line 1715) | _translate (
    method _t (line 1740) | _t (key, _locale, messages, host, ...values) {
    method t (line 1770) | t (key, ...values) {
    method _i (line 1774) | _i (key, locale, messages, host, values) {
    method i (line 1788) | i (key, locale, values) {
    method _tc (line 1799) | _tc (
    method fetchChoice (line 1819) | fetchChoice (message, choice) {
    method tc (line 1829) | tc (key, choice, ...values) {
    method _te (line 1833) | _te (key, locale, messages, ...args) {
    method te (line 1838) | te (key, locale) {
    method getLocaleMessage (line 1842) | getLocaleMessage (locale) {
    method setLocaleMessage (line 1846) | setLocaleMessage (locale, message) {
    method mergeLocaleMessage (line 1853) | mergeLocaleMessage (locale, message) {
    method getDateTimeFormat (line 1865) | getDateTimeFormat (locale) {
    method setDateTimeFormat (line 1869) | setDateTimeFormat (locale, format) {
    method mergeDateTimeFormat (line 1874) | mergeDateTimeFormat (locale, format) {
    method _clearDateTimeFormat (line 1879) | _clearDateTimeFormat (locale, format) {
    method _localizeDateTime (line 1892) | _localizeDateTime (
    method _d (line 1931) | _d (value, locale, key) {
    method d (line 1956) | d (value, ...args) {
    method getNumberFormat (line 1983) | getNumberFormat (locale) {
    method setNumberFormat (line 1987) | setNumberFormat (locale, format) {
    method mergeNumberFormat (line 1992) | mergeNumberFormat (locale, format) {
    method _clearNumberFormat (line 1997) | _clearNumberFormat (locale, format) {
    method _getNumberFormatter (line 2010) | _getNumberFormatter (
    method _n (line 2057) | _n (value, locale, key, options) {
    method n (line 2085) | n (value, ...args) {
    method _ntp (line 2121) | _ntp (value, locale, key, options) {
  method get (line 2153) | get () {

FILE: dist/vue-i18n.esm.js
  function warn (line 36) | function warn (msg, err) {
  function error (line 46) | function error (msg, err) {
  function isObject (line 58) | function isObject (obj) {
  function isBoolean (line 62) | function isBoolean (val) {
  function isString (line 66) | function isString (val) {
  function isPlainObject (line 72) | function isPlainObject (obj) {
  function isNull (line 76) | function isNull (val) {
  function isFunction (line 80) | function isFunction (val) {
  function parseArgs (line 84) | function parseArgs () {
  function looseClone (line 109) | function looseClone (obj) {
  function remove (line 113) | function remove (arr, item) {
  function includes (line 119) | function includes (arr, item) {
  function hasOwn (line 124) | function hasOwn (obj, key) {
  function merge (line 128) | function merge (target) {
  function looseEqual (line 150) | function looseEqual (a, b) {
  function escapeHtml (line 187) | function escapeHtml(rawText) {
  function escapeParams (line 204) | function escapeParams(params) {
  function extend (line 217) | function extend (Vue) {
  function onlyHasDefaultPlace (line 459) | function onlyHasDefaultPlace (params) {
  function useLegacyPlaces (line 467) | function useLegacyPlaces (children, places) {
  function createParamsFromPlaces (line 488) | function createParamsFromPlaces (places) {
  function assignChildPlace (line 498) | function assignChildPlace (params, child) {
  function assignChildIndex (line 505) | function assignChildIndex (params, child, index) {
  function vnodeHasPlaceAttribute (line 510) | function vnodeHasPlaceAttribute (vnode) {
  function bind (line 593) | function bind (el, binding, vnode) {
  function update (line 599) | function update (el, binding, vnode, oldVNode) {
  function unbind (line 610) | function unbind (el, binding, vnode, oldVNode) {
  function assert (line 629) | function assert (el, vnode) {
  function localeEqual (line 644) | function localeEqual (el, vnode) {
  function t (line 649) | function t (el, binding, vnode) {
  function parseValue (line 679) | function parseValue (value) {
  function makeParams (line 697) | function makeParams (locale, args) {
  function install (line 710) | function install (_Vue) {
  function parse (line 765) | function parse (format) {
  function compile (line 807) | function compile (tokens, values) {
  function isLiteral (line 932) | function isLiteral (exp) {
  function stripQuotes (line 940) | function stripQuotes (str) {
  function getPathCharType (line 952) | function getPathCharType (ch) {
  function formatSubPath (line 989) | function formatSubPath (path) {
  function parse$1 (line 1001) | function parse$1 (path) {

FILE: dist/vue-i18n.js
  function warn (line 42) | function warn (msg, err) {
  function error (line 52) | function error (msg, err) {
  function isObject (line 64) | function isObject (obj) {
  function isBoolean (line 68) | function isBoolean (val) {
  function isString (line 72) | function isString (val) {
  function isPlainObject (line 78) | function isPlainObject (obj) {
  function isNull (line 82) | function isNull (val) {
  function isFunction (line 86) | function isFunction (val) {
  function parseArgs (line 90) | function parseArgs () {
  function looseClone (line 115) | function looseClone (obj) {
  function remove (line 119) | function remove (arr, item) {
  function includes (line 125) | function includes (arr, item) {
  function hasOwn (line 130) | function hasOwn (obj, key) {
  function merge (line 134) | function merge (target) {
  function looseEqual (line 156) | function looseEqual (a, b) {
  function escapeHtml (line 193) | function escapeHtml(rawText) {
  function escapeParams (line 210) | function escapeParams(params) {
  function extend (line 223) | function extend (Vue) {
  function onlyHasDefaultPlace (line 465) | function onlyHasDefaultPlace (params) {
  function useLegacyPlaces (line 473) | function useLegacyPlaces (children, places) {
  function createParamsFromPlaces (line 494) | function createParamsFromPlaces (places) {
  function assignChildPlace (line 504) | function assignChildPlace (params, child) {
  function assignChildIndex (line 511) | function assignChildIndex (params, child, index) {
  function vnodeHasPlaceAttribute (line 516) | function vnodeHasPlaceAttribute (vnode) {
  function bind (line 599) | function bind (el, binding, vnode) {
  function update (line 605) | function update (el, binding, vnode, oldVNode) {
  function unbind (line 616) | function unbind (el, binding, vnode, oldVNode) {
  function assert (line 635) | function assert (el, vnode) {
  function localeEqual (line 650) | function localeEqual (el, vnode) {
  function t (line 655) | function t (el, binding, vnode) {
  function parseValue (line 685) | function parseValue (value) {
  function makeParams (line 703) | function makeParams (locale, args) {
  function install (line 716) | function install (_Vue) {
  function parse (line 771) | function parse (format) {
  function compile (line 813) | function compile (tokens, values) {
  function isLiteral (line 938) | function isLiteral (exp) {
  function stripQuotes (line 946) | function stripQuotes (str) {
  function getPathCharType (line 958) | function getPathCharType (ch) {
  function formatSubPath (line 995) | function formatSubPath (path) {
  function parse$1 (line 1007) | function parse$1 (path) {

FILE: docs/assets/js/app.5b04e7b0.js
  function e (line 1) | function e(e){for(var r,a,l=e[0],s=e[1],u=e[2],f=0,p=[];f<l.length;f++)a...
  function n (line 1) | function n(){for(var t,e=0;e<o.length;e++){for(var n=o[e],r=!0,l=1;l<n.l...
  function a (line 1) | function a(e){if(r[e])return r[e].exports;var n=r[e]={i:e,l:!1,exports:{...
  function r (line 1) | function r(t,e,n,r,i,o,a,l){var s,u="function"==typeof t?t.options:t;if(...
  function v (line 1) | function v(t,e,r,o,a,l){var s=r+t.length,u=o.length,c=d;return void 0!==...
  function i (line 3) | function i(t,e,n){return t<e?e:t>n?n:t}
  function o (line 3) | function o(t){return 100*(-1+t)}
  function e (line 3) | function e(){var n=t.shift();n&&n(e)}
  function n (line 3) | function n(n){return n=n.replace(/^-ms-/,"ms-").replace(/-([\da-z])/gi,(...
  function r (line 3) | function r(t,e,r){e=n(e),t.style[e]=r}
  function s (line 3) | function s(t,e){return("string"==typeof t?t:f(t)).indexOf(" "+e+" ")>=0}
  function u (line 3) | function u(t,e){var n=f(t),r=n+e;s(n,e)||(t.className=r.substring(1))}
  function c (line 3) | function c(t,e){var n,r=f(t);s(t,e)&&(n=r.replace(" "+e+" "," "),t.class...
  function f (line 3) | function f(t){return(" "+(t.className||"")+" ").replace(/\s+/gi," ")}
  function p (line 3) | function p(t){t&&t.parentNode&&t.parentNode.removeChild(t)}
  function i (line 3) | function i(t){var e,n;this.promise=new t((function(t,r){if(void 0!==e||v...
  function h (line 3) | function h(t,e,n){var r,i,o,a,l,s,u=0,c=!1,h=!1,g=!0;if("function"!=type...
  function v (line 3) | function v(t){var e=typeof t;return!!t&&("object"==e||"function"==e)}
  function m (line 3) | function m(t){if("number"==typeof t)return t;if(function(t){return"symbo...
  function i (line 3) | function i(t){return null==t}
  function o (line 3) | function o(t){return null!=t}
  function a (line 3) | function a(t){return!0===t}
  function l (line 3) | function l(t){return"string"==typeof t||"number"==typeof t||"symbol"==ty...
  function s (line 3) | function s(t){return null!==t&&"object"==typeof t}
  function c (line 3) | function c(t){return"[object Object]"===u.call(t)}
  function f (line 3) | function f(t){return"[object RegExp]"===u.call(t)}
  function p (line 3) | function p(t){var e=parseFloat(String(t));return e>=0&&Math.floor(e)===e...
  function d (line 3) | function d(t){return o(t)&&"function"==typeof t.then&&"function"==typeof...
  function h (line 3) | function h(t){return null==t?"":Array.isArray(t)||c(t)&&t.toString===u?J...
  function v (line 3) | function v(t){var e=parseFloat(t);return isNaN(e)?t:e}
  function m (line 3) | function m(t,e){for(var n=Object.create(null),r=t.split(","),i=0;i<r.len...
  function y (line 3) | function y(t,e){if(t.length){var n=t.indexOf(e);if(n>-1)return t.splice(...
  function _ (line 3) | function _(t,e){return b.call(t,e)}
  function x (line 3) | function x(t){var e=Object.create(null);return function(n){return e[n]||...
  function n (line 3) | function n(n){var r=arguments.length;return r?r>1?t.apply(e,arguments):t...
  function O (line 3) | function O(t,e){e=e||0;for(var n=t.length-e,r=new Array(n);n--;)r[n]=t[n...
  function A (line 3) | function A(t,e){for(var n in e)t[n]=e[n];return t}
  function j (line 3) | function j(t){for(var e={},n=0;n<t.length;n++)t[n]&&A(e,t[n]);return e}
  function T (line 3) | function T(t,e,n){}
  function P (line 3) | function P(t,e){if(t===e)return!0;var n=s(t),r=s(e);if(!n||!r)return!n&&...
  function z (line 3) | function z(t,e){for(var n=0;n<t.length;n++)if(P(t[n],e))return n;return-1}
  function U (line 3) | function U(t){var e=!1;return function(){e||(e=!0,t.apply(this,arguments...
  function F (line 3) | function F(t,e,n,r){Object.defineProperty(t,e,{value:n,enumerable:!!r,wr...
  function ot (line 3) | function ot(t){return"function"==typeof t&&/native code/.test(t.toString...
  function t (line 3) | function t(){this.set=Object.create(null)}
  function pt (line 3) | function pt(t){ft.push(t),ct.target=t}
  function dt (line 3) | function dt(){ft.pop(),ct.target=ft[ft.length-1]}
  function gt (line 3) | function gt(t){return new ht(void 0,void 0,void 0,String(t))}
  function yt (line 3) | function yt(t){var e=new ht(t.tag,t.data,t.children&&t.children.slice(),...
  function wt (line 3) | function wt(t){kt=t}
  function $t (line 3) | function $t(t,e){var n;if(s(t)&&!(t instanceof ht))return _(t,"__ob__")&...
  function St (line 3) | function St(t,e,n,r,i){var o=new ct,a=Object.getOwnPropertyDescriptor(t,...
  function Et (line 3) | function Et(t,e,n){if(Array.isArray(t)&&p(e))return t.length=Math.max(t....
  function Ot (line 3) | function Ot(t,e){if(Array.isArray(t)&&p(e))t.splice(e,1);else{var n=t.__...
  function At (line 3) | function At(t){for(var e=void 0,n=0,r=t.length;n<r;n++)(e=t[n])&&e.__ob_...
  function Tt (line 3) | function Tt(t,e){if(!e)return t;for(var n,r,i,o=lt?Reflect.ownKeys(e):Ob...
  function Lt (line 3) | function Lt(t,e,n){return n?function(){var r="function"==typeof e?e.call...
  function It (line 3) | function It(t,e){var n=e?t?t.concat(e):Array.isArray(e)?e:[e]:t;return n...
  function Pt (line 3) | function Pt(t,e,n,r){var i=Object.create(t||null);return e?A(i,e):i}
  function Ut (line 3) | function Ut(t,e,n){if("function"==typeof e&&(e=e.options),function(t,e){...
  function Mt (line 3) | function Mt(t,e,n,r){if("string"==typeof n){var i=t[e];if(_(i,n))return ...
  function Rt (line 3) | function Rt(t,e,n,r){var i=e[t],o=!_(n,t),a=n[t],l=Ft(Boolean,i.type);if...
  function Nt (line 3) | function Nt(t){var e=t&&t.toString().match(/^\s*function (\w+)/);return ...
  function Dt (line 3) | function Dt(t,e){return Nt(t)===Nt(e)}
  function Ft (line 3) | function Ft(t,e){if(!Array.isArray(e))return Dt(e,t)?0:-1;for(var n=0,r=...
  function Vt (line 3) | function Vt(t,e,n){pt();try{if(e)for(var r=e;r=r.$parent;){var i=r.$opti...
  function Bt (line 3) | function Bt(t,e,n,r,i){var o;try{(o=n?t.apply(e,n):t.call(e))&&!o._isVue...
  function Ht (line 3) | function Ht(t,e,n){if(N.errorHandler)try{return N.errorHandler.call(null...
  function Wt (line 3) | function Wt(t,e,n){if(!W&&!q||"undefined"==typeof console)throw t;consol...
  function Xt (line 3) | function Xt(){Yt=!1;var t=Kt.slice(0);Kt.length=0;for(var e=0;e<t.length...
  function ee (line 3) | function ee(t,e){var n;if(Kt.push((function(){if(t)try{t.call(e)}catch(t...
  function re (line 3) | function re(t){!function t(e,n){var r,i,o=Array.isArray(e);if(!o&&!s(e)|...
  function oe (line 3) | function oe(t,e){function n(){var t=arguments,r=n.fns;if(!Array.isArray(...
  function ae (line 3) | function ae(t,e,n,r,o,l){var s,u,c,f;for(s in t)u=t[s],c=e[s],f=ie(s),i(...
  function le (line 3) | function le(t,e,n){var r;t instanceof ht&&(t=t.data.hook||(t.data.hook={...
  function se (line 3) | function se(t,e,n,r,i){if(o(e)){if(_(e,n))return t[n]=e[n],i||delete e[n...
  function ue (line 3) | function ue(t){return l(t)?[gt(t)]:Array.isArray(t)?function t(e,n){var ...
  function ce (line 3) | function ce(t){return o(t)&&o(t.text)&&!1===t.isComment}
  function fe (line 3) | function fe(t,e){if(t){for(var n=Object.create(null),r=lt?Reflect.ownKey...
  function pe (line 3) | function pe(t,e){if(!t||!t.length)return{};for(var n={},r=0,i=t.length;r...
  function de (line 3) | function de(t){return t.isComment&&!t.asyncFactory||" "===t.text}
  function he (line 3) | function he(t,e,n){var i,o=Object.keys(e).length>0,a=t?!!t.$stable:!o,l=...
  function ve (line 3) | function ve(t,e,n){var r=function(){var t=arguments.length?n.apply(null,...
  function me (line 3) | function me(t,e){return function(){return t[e]}}
  function ge (line 3) | function ge(t,e){var n,r,i,a,l;if(Array.isArray(t)||"string"==typeof t)f...
  function ye (line 3) | function ye(t,e,n,r){var i,o=this.$scopedSlots[t];o?(n=n||{},r&&(n=A(A({...
  function be (line 3) | function be(t){return Mt(this.$options,"filters",t)||I}
  function _e (line 3) | function _e(t,e){return Array.isArray(t)?-1===t.indexOf(e):t!==e}
  function xe (line 3) | function xe(t,e,n,r,i){var o=N.keyCodes[e]||n;return i&&r&&!N.keyCodes[e...
  function ke (line 3) | function ke(t,e,n,r,i){if(n)if(s(n)){var o;Array.isArray(n)&&(n=j(n));va...
  function we (line 3) | function we(t,e){var n=this._staticTrees||(this._staticTrees=[]),r=n[t];...
  function Ce (line 3) | function Ce(t,e,n){return $e(t,"__once__"+e+(n?"_"+n:""),!0),t}
  function $e (line 3) | function $e(t,e,n){if(Array.isArray(t))for(var r=0;r<t.length;r++)t[r]&&...
  function Se (line 3) | function Se(t,e,n){t.isStatic=!0,t.key=e,t.isOnce=n}
  function Ee (line 3) | function Ee(t,e){if(e)if(c(e)){var n=t.on=t.on?A({},t.on):{};for(var r i...
  function Oe (line 3) | function Oe(t,e,n,r){e=e||{$stable:!n};for(var i=0;i<t.length;i++){var o...
  function Ae (line 3) | function Ae(t,e){for(var n=0;n<e.length;n+=2){var r=e[n];"string"==typeo...
  function je (line 3) | function je(t,e){return"string"==typeof t?e+t:t}
  function Te (line 3) | function Te(t){t._o=Ce,t._n=v,t._s=h,t._l=ge,t._t=ye,t._q=P,t._i=z,t._m=...
  function Le (line 3) | function Le(t,e,n,i,o){var l,s=this,u=o.options;_(i,"_uid")?(l=Object.cr...
  function Ie (line 3) | function Ie(t,e,n,r,i){var o=yt(t);return o.fnContext=n,o.fnOptions=r,e....
  function Pe (line 3) | function Pe(t,e){for(var n in e)t[w(n)]=e[n]}
  function Me (line 3) | function Me(t,e,n,l,u){if(!i(t)){var c=n.$options._base;if(s(t)&&(t=c.ex...
  function Re (line 3) | function Re(t,e){var n=function(n,r){t(n,r),e(n,r)};return n._merged=!0,n}
  function Ne (line 3) | function Ne(t,e,n,r,u,c){return(Array.isArray(n)||l(n))&&(u=r,r=n,n=void...
  function Ve (line 3) | function Ve(t,e){return(t.__esModule||lt&&"Module"===t[Symbol.toStringTa...
  function Be (line 3) | function Be(t){return t.isComment&&t.asyncFactory}
  function He (line 3) | function He(t){if(Array.isArray(t))for(var e=0;e<t.length;e++){var n=t[e...
  function We (line 3) | function We(t,e){De.$on(t,e)}
  function qe (line 3) | function qe(t,e){De.$off(t,e)}
  function Ge (line 3) | function Ge(t,e){var n=De;return function r(){var i=e.apply(null,argumen...
  function Ke (line 3) | function Ke(t,e,n){De=t,ae(e,n||{},We,qe,Ge,t),De=void 0}
  function Xe (line 3) | function Xe(t){var e=Ye;return Ye=t,function(){Ye=e}}
  function Je (line 3) | function Je(t){for(;t&&(t=t.$parent);)if(t._inactive)return!0;return!1}
  function Qe (line 3) | function Qe(t,e){if(e){if(t._directInactive=!1,Je(t))return}else if(t._d...
  function Ze (line 3) | function Ze(t,e){pt();var n=t.$options[e],r=e+" hook";if(n)for(var i=0,o...
  function cn (line 3) | function cn(){var t,e;for(ln=sn(),on=!0,tn.sort((function(t,e){return t....
  function hn (line 3) | function hn(t,e,n){dn.get=function(){return this[e][n]},dn.set=function(...
  function vn (line 3) | function vn(t){t._watchers=[];var e=t.$options;e.props&&function(t,e){va...
  function gn (line 3) | function gn(t,e,n){var r=!rt();"function"==typeof n?(dn.get=r?yn(e):bn(n...
  function yn (line 3) | function yn(t){return function(){var e=this._computedWatchers&&this._com...
  function bn (line 3) | function bn(t){return function(){return t.call(this,this)}}
  function _n (line 3) | function _n(t,e,n,r){return c(n)&&(r=n,n=n.handler),"string"==typeof n&&...
  function kn (line 3) | function kn(t){var e=t.options;if(t.super){var n=kn(t.super);if(n!==t.su...
  function wn (line 3) | function wn(t){this._init(t)}
  function Cn (line 3) | function Cn(t){t.cid=0;var e=1;t.extend=function(t){t=t||{};var n=this,r...
  function $n (line 3) | function $n(t){return t&&(t.Ctor.options.name||t.tag)}
  function Sn (line 3) | function Sn(t,e){return Array.isArray(t)?t.indexOf(e)>-1:"string"==typeo...
  function En (line 3) | function En(t,e){var n=t.cache,r=t.keys,i=t._vnode;for(var o in n){var a...
  function On (line 3) | function On(t,e,n,r){var i=t[e];!i||r&&i.tag===r.tag||i.componentInstanc...
  function r (line 3) | function r(){n.$off(t,r),e.apply(n,arguments)}
  function Dn (line 3) | function Dn(t){for(var e=t.data,n=t,r=t;o(r.componentInstance);)(r=r.com...
  function Fn (line 3) | function Fn(t,e){return{staticClass:Vn(t.staticClass,e.staticClass),clas...
  function Vn (line 3) | function Vn(t,e){return t?e?t+" "+e:t:e||""}
  function Bn (line 3) | function Bn(t){return Array.isArray(t)?function(t){for(var e,n="",r=0,i=...
  function Qn (line 3) | function Qn(t,e){var n=t.data.ref;if(o(n)){var r=t.context,i=t.component...
  function er (line 3) | function er(t,e){return t.key===e.key&&(t.tag===e.tag&&t.isComment===e.i...
  function nr (line 3) | function nr(t,e,n){var r,i,a={};for(r=e;r<=n;++r)o(i=t[r].key)&&(a[i]=r)...
  function ir (line 3) | function ir(t,e){(t.data.directives||e.data.directives)&&function(t,e){v...
  function ar (line 3) | function ar(t,e){var n,r,i=Object.create(null);if(!t)return i;for(n=0;n<...
  function lr (line 3) | function lr(t){return t.rawName||t.name+"."+Object.keys(t.modifiers||{})...
  function sr (line 3) | function sr(t,e,n,r,i){var o=t.def&&t.def[e];if(o)try{o(n.elm,t,n,r,i)}c...
  function cr (line 3) | function cr(t,e){var n=e.componentOptions;if(!(o(n)&&!1===n.Ctor.options...
  function fr (line 3) | function fr(t,e,n){t.tagName.indexOf("-")>-1?pr(t,e,n):zn(e)?Nn(n)?t.rem...
  function pr (line 3) | function pr(t,e,n){if(Nn(n))t.removeAttribute(e);else{if(Y&&!X&&"TEXTARE...
  function hr (line 3) | function hr(t,e){var n=e.elm,r=e.data,a=t.data;if(!(i(r.staticClass)&&i(...
  function gr (line 3) | function gr(t,e,n){var r=vr;return function i(){var o=e.apply(null,argum...
  function br (line 3) | function br(t,e,n,r){if(yr){var i=ln,o=e;e=o._wrapper=function(t){if(t.t...
  function _r (line 3) | function _r(t,e,n,r){(r||vr).removeEventListener(t,e._wrapper||e,n)}
  function xr (line 3) | function xr(t,e){if(!i(t.data.on)||!i(e.data.on)){var n=e.data.on||{},r=...
  function Cr (line 3) | function Cr(t,e){if(!i(t.data.domProps)||!i(e.data.domProps)){var n,r,a=...
  function $r (line 3) | function $r(t,e){return!t.composing&&("OPTION"===t.tagName||function(t,e...
  function Or (line 3) | function Or(t){var e=Ar(t.style);return t.staticStyle?A(t.staticStyle,e):e}
  function Ar (line 3) | function Ar(t){return Array.isArray(t)?j(t):"string"==typeof t?Er(t):t}
  function Ur (line 3) | function Ur(t,e){var n=e.data,r=t.data;if(!(i(n.staticStyle)&&i(n.style)...
  function Nr (line 3) | function Nr(t,e){if(e&&(e=e.trim()))if(t.classList)e.indexOf(" ")>-1?e.s...
  function Dr (line 3) | function Dr(t,e){if(e&&(e=e.trim()))if(t.classList)e.indexOf(" ")>-1?e.s...
  function Fr (line 3) | function Fr(t){if(t){if("object"==typeof t){var e={};return!1!==t.css&&A...
  function Yr (line 3) | function Yr(t){Kr((function(){Kr(t)}))}
  function Xr (line 3) | function Xr(t,e){var n=t._transitionClasses||(t._transitionClasses=[]);n...
  function Jr (line 3) | function Jr(t,e){t._transitionClasses&&y(t._transitionClasses,e),Dr(t,e)}
  function Qr (line 3) | function Qr(t,e,n){var r=ti(t,e),i=r.type,o=r.timeout,a=r.propCount;if(!...
  function ti (line 3) | function ti(t,e){var n,r=window.getComputedStyle(t),i=(r[Hr+"Delay"]||""...
  function ei (line 3) | function ei(t,e){for(;t.length<e.length;)t=t.concat(t);return Math.max.a...
  function ni (line 3) | function ni(t){return 1e3*Number(t.slice(0,-1).replace(",","."))}
  function ri (line 3) | function ri(t,e){var n=t.elm;o(n._leaveCb)&&(n._leaveCb.cancelled=!0,n._...
  function ii (line 3) | function ii(t,e){var n=t.elm;o(n._enterCb)&&(n._enterCb.cancelled=!0,n._...
  function oi (line 3) | function oi(t){return"number"==typeof t&&!isNaN(t)}
  function ai (line 3) | function ai(t){if(i(t))return!1;var e=t.fns;return o(e)?ai(Array.isArray...
  function li (line 3) | function li(t,e){!0!==e.data.show&&ri(e)}
  function c (line 3) | function c(t){var e=u.parentNode(t);o(e)&&u.removeChild(e,t)}
  function f (line 3) | function f(t,e,n,i,l,s,c){if(o(t.elm)&&o(s)&&(t=s[c]=yt(t)),t.isRootInse...
  function p (line 3) | function p(t,e){o(t.data.pendingInsert)&&(e.push.apply(e,t.data.pendingI...
  function d (line 3) | function d(t,e,n){o(t)&&(o(n)?u.parentNode(n)===t&&u.insertBefore(t,e,n)...
  function h (line 3) | function h(t,e,n){if(Array.isArray(e)){0;for(var r=0;r<e.length;++r)f(e[...
  function v (line 3) | function v(t){for(;t.componentInstance;)t=t.componentInstance._vnode;ret...
  function g (line 3) | function g(t,n){for(var i=0;i<r.create.length;++i)r.create[i](Zn,t);o(e=...
  function y (line 3) | function y(t){var e;if(o(e=t.fnScopeId))u.setStyleScope(t.elm,e);else fo...
  function b (line 3) | function b(t,e,n,r,i,o){for(;r<=i;++r)f(n[r],o,t,e,!1,n,r)}
  function _ (line 3) | function _(t){var e,n,i=t.data;if(o(i))for(o(e=i.hook)&&o(e=e.destroy)&&...
  function x (line 3) | function x(t,e,n){for(;e<=n;++e){var r=t[e];o(r)&&(o(r.tag)?(k(r),_(r)):...
  function k (line 3) | function k(t,e){if(o(e)||o(t.data)){var n,i=r.remove.length+1;for(o(e)?e...
  function w (line 3) | function w(t,e,n,r){for(var i=n;i<r;i++){var a=e[i];if(o(a)&&er(t,a))ret...
  function C (line 3) | function C(t,e,n,l,s,c){if(t!==e){o(e.elm)&&o(l)&&(e=l[s]=yt(e));var p=e...
  function $ (line 3) | function $(t,e,n){if(a(n)&&o(t.parent))t.parent.data.pendingInsert=e;els...
  function E (line 3) | function E(t,e,n,r){var i,l=e.tag,s=e.data,u=e.children;if(r=r||s&&s.pre...
  function ci (line 3) | function ci(t,e,n){fi(t,e,n),(Y||J)&&setTimeout((function(){fi(t,e,n)}),0)}
  function fi (line 3) | function fi(t,e,n){var r=e.value,i=t.multiple;if(!i||Array.isArray(r)){f...
  function pi (line 3) | function pi(t,e){return e.every((function(e){return!P(e,t)}))}
  function di (line 3) | function di(t){return"_value"in t?t._value:t.value}
  function hi (line 3) | function hi(t){t.target.composing=!0}
  function vi (line 3) | function vi(t){t.target.composing&&(t.target.composing=!1,mi(t.target,"i...
  function mi (line 3) | function mi(t,e){var n=document.createEvent("HTMLEvents");n.initEvent(e,...
  function gi (line 3) | function gi(t){return!t.componentInstance||t.data&&t.data.transition?t:g...
  function _i (line 3) | function _i(t){var e=t&&t.componentOptions;return e&&e.Ctor.options.abst...
  function xi (line 3) | function xi(t){var e={},n=t.$options;for(var r in n.propsData)e[r]=t[r];...
  function ki (line 3) | function ki(t,e){if(/\d-keep-alive$/.test(e.tag))return t("keep-alive",{...
  function Ei (line 3) | function Ei(t){t.elm._moveCb&&t.elm._moveCb(),t.elm._enterCb&&t.elm._ent...
  function Oi (line 3) | function Oi(t){t.data.newPos=t.elm.getBoundingClientRect()}
  function Ai (line 3) | function Ai(t){var e=t.data.pos,n=t.data.newPos,r=e.left-n.left,i=e.top-...
  function Li (line 8) | function Li(t){return Object.prototype.toString.call(t).indexOf("Error")...
  function Ii (line 8) | function Ii(t,e){return e instanceof t||e&&(e.name===t.name||e._name===t...
  function Pi (line 8) | function Pi(t,e){for(var n in e)t[n]=e[n];return t}
  function Ui (line 8) | function Ui(t,e,n,r){var i=e.props=function(t,e){switch(typeof e){case"u...
  function Vi (line 8) | function Vi(t){var e={};return(t=t.trim().replace(/^(\?|#|&)/,""))?(t.sp...
  function Bi (line 8) | function Bi(t){var e=t?Object.keys(t).map((function(e){var n=t[e];if(voi...
  function Wi (line 8) | function Wi(t,e,n,r){var i=r&&r.options.stringifyQuery,o=e.query||{};try...
  function qi (line 8) | function qi(t){if(Array.isArray(t))return t.map(qi);if(t&&"object"==type...
  function Ki (line 8) | function Ki(t){for(var e=[];t;)e.unshift(t),t=t.parent;return e}
  function Yi (line 8) | function Yi(t,e){var n=t.path,r=t.query;void 0===r&&(r={});var i=t.hash;...
  function Xi (line 8) | function Xi(t,e){return e===Gi?t===e:!!e&&(t.path&&e.path?t.path.replace...
  function Ji (line 8) | function Ji(t,e){if(void 0===t&&(t={}),void 0===e&&(e={}),!t||!e)return ...
  function Qi (line 8) | function Qi(t,e,n){var r=t.charAt(0);if("/"===r)return t;if("?"===r||"#"...
  function Zi (line 8) | function Zi(t){return t.replace(/\/\//g,"/")}
  function lo (line 8) | function lo(t,e){for(var n,r=[],i=0,o=0,a="",l=e&&e.delimiter||"/";null!...
  function so (line 8) | function so(t){return encodeURI(t).replace(/[\/?#]/g,(function(t){return...
  function uo (line 8) | function uo(t){for(var e=new Array(t.length),n=0;n<t.length;n++)"object"...
  function co (line 8) | function co(t){return t.replace(/([.+*?=^!:${}()[\]|\/\\])/g,"\\$1")}
  function fo (line 8) | function fo(t){return t.replace(/([=!:$\/()])/g,"\\$1")}
  function po (line 8) | function po(t,e){return t.keys=e,t}
  function ho (line 8) | function ho(t){return t.sensitive?"":"i"}
  function vo (line 8) | function vo(t,e,n){to(e)||(n=e||n,e=[]);for(var r=(n=n||{}).strict,i=!1!...
  function mo (line 8) | function mo(t,e,n){return to(e)||(n=e||n,e=[]),n=n||{},t instanceof RegE...
  function yo (line 8) | function yo(t,e,n){e=e||{};try{var r=go[t]||(go[t]=eo.compile(t));return...
  function bo (line 8) | function bo(t,e,n,r){var i="string"==typeof t?{path:t}:t;if(i._normalize...
  function wo (line 8) | function wo(t){if(!(t.metaKey||t.altKey||t.ctrlKey||t.shiftKey||t.defaul...
  function $o (line 8) | function $o(t,e,n,r){var i=e||[],o=n||Object.create(null),a=r||Object.cr...
  function So (line 8) | function So(t,e){return eo(t,[],e)}
  function Eo (line 8) | function Eo(t,e){var n=$o(t),r=n.pathList,i=n.pathMap,o=n.nameMap;functi...
  function Oo (line 8) | function Oo(t,e,n){var r=e.match(t);if(!r)return!1;if(!n)return!0;for(va...
  function jo (line 8) | function jo(){return Ao.now().toFixed(3)}
  function Lo (line 8) | function Lo(){return To}
  function Io (line 8) | function Io(t){return To=t}
  function zo (line 8) | function zo(){var t=window.location.protocol+"//"+window.location.host,e...
  function Uo (line 8) | function Uo(t,e,n,r){if(t.app){var i=t.options.scrollBehavior;i&&t.app.$...
  function Mo (line 8) | function Mo(){var t=Lo();t&&(Po[t]={x:window.pageXOffset,y:window.pageYO...
  function Ro (line 8) | function Ro(t){return Do(t.x)||Do(t.y)}
  function No (line 8) | function No(t){return{x:Do(t.x)?t.x:window.pageXOffset,y:Do(t.y)?t.y:win...
  function Do (line 8) | function Do(t){return"number"==typeof t}
  function Vo (line 8) | function Vo(t,e){var n,r="object"==typeof t;if(r&&"string"==typeof t.sel...
  function Wo (line 8) | function Wo(t,e){Mo();var n=window.history;try{if(e){var r=Pi({},n.state...
  function qo (line 8) | function qo(t){Wo(t,!0)}
  function Go (line 8) | function Go(t,e,n){var r=function(i){i>=t.length?n():t[i]?e(t[i],(functi...
  function Ko (line 8) | function Ko(t){return function(e,n,r){var i=!1,o=0,a=null;Yo(t,(function...
  function Yo (line 8) | function Yo(t,e){return Xo(t.map((function(t){return Object.keys(t.compo...
  function Xo (line 8) | function Xo(t){return Array.prototype.concat.apply([],t)}
  function Qo (line 8) | function Qo(t){var e=!1;return function(){for(var n=[],r=arguments.lengt...
  function e (line 8) | function e(e){t.call(this),this.name=this._name="NavigationDuplicated",t...
  function ea (line 8) | function ea(t,e,n,r){var i=Yo(t,(function(t,r,i,o){var a=function(t,e){"...
  function na (line 8) | function na(t,e){if(e)return function(){return t.apply(e,arguments)}}
  function e (line 8) | function e(e,n){var r=this;t.call(this,e,n);var i=e.options.scrollBehavi...
  function ia (line 8) | function ia(t){var e=decodeURI(window.location.pathname);return t&&0===e...
  function e (line 8) | function e(e,n,r){t.call(this,e,n),r&&function(t){var e=ia(t);if(!/^\/#/...
  function aa (line 8) | function aa(){var t=la();return"/"===t.charAt(0)||(ca("/"+t),!1)}
  function la (line 8) | function la(){var t=window.location.href,e=t.indexOf("#");if(e<0)return"...
  function sa (line 8) | function sa(t){var e=window.location.href,n=e.indexOf("#");return(n>=0?e...
  function ua (line 8) | function ua(t){Ho?Wo(sa(t)):window.location.hash=t}
  function ca (line 8) | function ca(t){Ho?qo(sa(t)):window.location.replace(sa(t))}
  function e (line 8) | function e(e,n){t.call(this,e,n),this.stack=[],this.index=-1}
  function ha (line 8) | function ha(t,e){return t.push(e),function(){var n=t.indexOf(e);n>-1&&t....
  function ma (line 8) | function ma(t){return function(t){if(Array.isArray(t)){for(var e=0,n=new...
  function ga (line 8) | function ga(t,e){var n;t.mixins||(t.mixins=[]),(n=t.mixins).push.apply(n...
  function $a (line 8) | function $a(t){return decodeURI(t).replace(xa,"").replace(ka,"")}
  function Sa (line 8) | function Sa(t){return Ca.test(t)}
  function Ea (line 8) | function Ea(t){if(Sa(t))return t;var e=t.match(xa),n=e?e[0]:"",r=$a(t);r...
  function Oa (line 8) | function Oa(t,e){var n=t.hash,r=function(t){var e=t.match(xa);if(e)retur...
  function Aa (line 8) | function Aa(t,e,n){n&&(e=function(t,e,n){var r=t.charAt(0);if("/"===r)re...
  function ja (line 8) | function ja(t,e,n,r){var i=n.pages,o=n.themeConfig,a=r&&o.locales&&o.loc...
  function Ta (line 8) | function Ta(t){var e;return(t=t.map((function(t){return Object.assign({}...
  function La (line 8) | function La(t){return Object.assign(t,{type:t.items&&t.items.length?"lin...
  function qa (line 8) | function qa(t,e){return t.ownerDocument.defaultView.getComputedStyle(t,n...
  function Ya (line 8) | function Ya(t,e,n){var r=[];e.forEach((function(t){"group"===t.type?r.pu...
  function Qa (line 8) | function Qa(t,e,n,r){return t("router-link",{props:{to:e,activeClass:"",...
  function Za (line 8) | function Za(t,e,n,r,i){var o=arguments.length>5&&void 0!==arguments[5]?a...
  function ol (line 8) | function ol(t){return(ol="function"==typeof Symbol&&"symbol"==typeof Sym...
  function al (line 8) | function al(t){return(al="function"==typeof Symbol&&"symbol"===ol(Symbol...
  function hl (line 8) | function hl(t,e){if(e&&ma(e).forEach((function(t){document.head.removeCh...

FILE: examples/formatting/custom/src/formatter.js
  class CustomFormatter (line 3) | class CustomFormatter {
    method constructor (line 4) | constructor (options = {}) {
    method interpolate (line 10) | interpolate (message, values) {

FILE: examples/hot/src/i18n.js
  function loadLocaleInfo (line 6) | function loadLocaleInfo () {

FILE: examples/integration/contentful/bin/download-content-model.js
  constant REPO_ROOT (line 11) | const REPO_ROOT = path.resolve(__dirname, '..')
  constant DATA_DIR (line 12) | const DATA_DIR = path.resolve(REPO_ROOT, 'data')

FILE: examples/integration/contentful/nuxt.config.js
  method extend (line 45) | extend (config, ctx) {
  method routes (line 82) | routes () {

FILE: examples/integration/contentful/plugins/contentful.js
  method createClient (line 8) | createClient (config = defaultConfig) {

FILE: examples/integration/contentful/plugins/i18n.js
  constant DEFAULT_LOCALE (line 4) | const DEFAULT_LOCALE = 'en-US'

FILE: examples/module/nuxt/nuxt.config.js
  method extend (line 57) | extend (config, ctx) {

FILE: examples/perf/index.js
  function parseTimings (line 3) | function parseTimings (timings) {
  function perform (line 22) | async function perform (browser, target, url, profileName) {
  function main (line 53) | async function main () {

FILE: examples/ssr/hn2/build/setup-dev-server.js
  constant MFS (line 3) | const MFS = require('memory-fs')

FILE: examples/ssr/hn2/server.js
  constant LRU (line 3) | const LRU = require('lru-cache')
  function createRenderer (line 22) | function createRenderer (bundle, options) {
  function render (line 81) | function render (req, res) {

FILE: examples/ssr/hn2/src/api/create-api-client.js
  function createAPI (line 4) | function createAPI ({ config, version }) {

FILE: examples/ssr/hn2/src/api/create-api-server.js
  function createAPI (line 4) | function createAPI ({ config, version }) {

FILE: examples/ssr/hn2/src/api/index.js
  function warmCache (line 19) | function warmCache () {
  function fetch (line 24) | function fetch (child) {
  function fetchIdsByType (line 44) | function fetchIdsByType (type) {
  function fetchItem (line 50) | function fetchItem (id) {
  function fetchItems (line 54) | function fetchItems (ids) {
  function fetchUser (line 58) | function fetchUser (id) {
  function watchList (line 62) | function watchList (type, cb) {

FILE: examples/ssr/hn2/src/app.js
  function createApp (line 20) | function createApp () {

FILE: examples/ssr/hn2/src/entry-client.js
  method beforeRouteUpdate (line 12) | beforeRouteUpdate (to, from, next) {

FILE: examples/ssr/hn2/src/i18n/index.js
  function createI18n (line 8) | function createI18n () {

FILE: examples/ssr/hn2/src/router/index.js
  function createRouter (line 11) | function createRouter () {

FILE: examples/ssr/hn2/src/store/getters.js
  method activeIds (line 4) | activeIds (state) {
  method activeItems (line 20) | activeItems (state, getters) {

FILE: examples/ssr/hn2/src/store/index.js
  function createStore (line 9) | function createStore () {

FILE: examples/ssr/hn2/src/util.js
  function timeAgo (line 1) | function timeAgo (time) {

FILE: examples/ssr/hn2/src/util/filters.js
  function host (line 1) | function host (url) {
  function timeAgo (line 8) | function timeAgo (time, $tc) {

FILE: examples/ssr/hn2/src/util/title.js
  function getTitle (line 1) | function getTitle (vm) {
  method created (line 11) | created () {
  method mounted (line 20) | mounted () {

FILE: examples/ssr/hn2/src/views/CreateListView.js
  function createListView (line 8) | function createListView (type) {

FILE: examples/storybook/.storybook/config.js
  function loadStories (line 7) | function loadStories() {

FILE: ship.config.js
  function extractSpecificChangelog (line 8) | function extractSpecificChangelog (changelog, version) {
  function commitChangelog (line 21) | async function commitChangelog (current, next) {

FILE: src/components/interpolation.js
  method render (line 24) | render (h: Function, { data, parent, props, slots }: Object) {
  function onlyHasDefaultPlace (line 48) | function onlyHasDefaultPlace (params) {
  function useLegacyPlaces (line 56) | function useLegacyPlaces (children, places) {
  function createParamsFromPlaces (line 77) | function createParamsFromPlaces (places) {
  function assignChildPlace (line 87) | function assignChildPlace (params, child) {
  function assignChildIndex (line 94) | function assignChildIndex (params, child, index) {
  function vnodeHasPlaceAttribute (line 99) | function vnodeHasPlaceAttribute (vnode) {

FILE: src/directive.js
  function bind (line 5) | function bind (el: any, binding: Object, vnode: any): void {
  function update (line 11) | function update (el: any, binding: Object, vnode: any, oldVNode: any): v...
  function unbind (line 22) | function unbind (el: any, binding: Object, vnode: any, oldVNode: any): v...
  function assert (line 41) | function assert (el: any, vnode: any): boolean {
  function localeEqual (line 56) | function localeEqual (el: any, vnode: any): boolean {
  function t (line 61) | function t (el: any, binding: Object, vnode: any): void {
  function parseValue (line 85) | function parseValue (value: any): Object {
  function makeParams (line 103) | function makeParams (locale: Locale, args: any): Array<any> {

FILE: src/extend.js
  method get (line 7) | get () { return this._i18n }

FILE: src/format.js
  method if (line 13) | if (!values) {
  constant RE_TOKEN_LIST_VALUE (line 30) | const RE_TOKEN_LIST_VALUE: RegExp = /^(?:\d)+/
  constant RE_TOKEN_NAMED_VALUE (line 31) | const RE_TOKEN_NAMED_VALUE: RegExp = /^(?:\w)+/

FILE: src/index.js
  class VueI18n (line 41) | class VueI18n {
  method if (line 277) | if (!this._sync || !this._root) { return null }
  method if (line 285) | if (!this.__VUE_I18N_BRIDGE__) { return null }
  method if (line 370) | if (process.env.NODE_ENV !== 'production' && !this._isSilentTranslationW...
  method if (line 426) | if (process.env.NODE_ENV !== 'production' && !this._isSilentTranslationW...
  method if (line 474) | if (!matches.hasOwnProperty(idx)) {
  method warn (line 486) | warn(`Circular reference found. "${link}" is already visited in the chai...
  method if (line 775) | if (!message || !isString(message)) { return null }
  method if (line 801) | if (this._warnHtmlInMessage === 'warn' || this._warnHtmlInMessage === 'e...
  method if (line 808) | if (this._warnHtmlInMessage === 'warn' || this._warnHtmlInMessage === 'e...
  method if (line 865) | if (step !== locale && process.env.NODE_ENV !== 'production' && !this._i...
  method if (line 925) | if (isString(args[0])) {
  method if (line 928) | if (args[0].locale) {
  method if (line 1001) | if (step !== locale && process.env.NODE_ENV !== 'production' && !this._i...
  method if (line 1032) | if (process.env.NODE_ENV !== 'production') {
  method if (line 1046) | if (process.env.NODE_ENV !== 'production' && !this._isSilentTranslationW...
  method if (line 1063) | if (isString(args[0])) {
  method if (line 1066) | if (args[0].locale) {
  method if (line 1096) | if (process.env.NODE_ENV !== 'production') {
  method if (line 1110) | if (process.env.NODE_ENV !== 'production' && !this._isSilentTranslationW...
  method if (line 1126) | if (!availabilities) {

FILE: src/install.js
  function install (line 10) | function install (_Vue, options = { bridge: false }) {

FILE: src/mixin.js
  function defineMixin (line 12) | function defineMixin (bridge: boolean = false) {
  method if (line 137) | if (!this._i18n) { return }

FILE: src/path.js
  constant APPEND (line 12) | const APPEND = 0
  constant PUSH (line 13) | const PUSH = 1
  constant INC_SUB_PATH_DEPTH (line 14) | const INC_SUB_PATH_DEPTH = 2
  constant PUSH_SUB_PATH (line 15) | const PUSH_SUB_PATH = 3
  constant BEFORE_PATH (line 18) | const BEFORE_PATH = 0
  constant IN_PATH (line 19) | const IN_PATH = 1
  constant BEFORE_IDENT (line 20) | const BEFORE_IDENT = 2
  constant IN_IDENT (line 21) | const IN_IDENT = 3
  constant IN_SUB_PATH (line 22) | const IN_SUB_PATH = 4
  constant IN_SINGLE_QUOTE (line 23) | const IN_SINGLE_QUOTE = 5
  constant IN_DOUBLE_QUOTE (line 24) | const IN_DOUBLE_QUOTE = 6
  constant AFTER_PATH (line 25) | const AFTER_PATH = 7
  constant ERROR (line 26) | const ERROR = 8
  function isLiteral (line 87) | function isLiteral (exp: string): boolean {
  function stripQuotes (line 95) | function stripQuotes (str: string): string | boolean {
  function getPathCharType (line 107) | function getPathCharType (ch: ?string): string {
  function formatSubPath (line 144) | function formatSubPath (path: string): boolean | string {

FILE: src/util.js
  method if (line 52) | if (typeof console !== 'undefined') {
  method if (line 62) | if (typeof console !== 'undefined') {
  constant OBJECT_STRING (line 86) | const OBJECT_STRING: string = '[object Object]'
  function isPlainObject (line 87) | function isPlainObject (obj: any): boolean {
  function isNull (line 91) | function isNull (val: mixed): boolean {
  method if (line 103) | if (isObject(args[0]) || isArray(args[0])) {
  method if (line 109) | if (typeof args[0] === 'string') {
  method if (line 126) | if (arr.delete(item)) {

FILE: test/helpers/util.js
  function getVersion (line 5) | function getVersion () {

FILE: test/unit/basic.test.js
  method render (line 675) | render (h) {
  method render (line 698) | render (h) {

FILE: test/unit/component.test.js
  method render (line 46) | render (h) {
  method render (line 53) | render (h) {
  method render (line 73) | render (h) {
  method render (line 80) | render (h) {
  method render (line 88) | render (h) {
  method render (line 177) | render (h) {
  method render (line 184) | render (h) {
  method render (line 192) | render (h) {
  method render (line 241) | render (h) {
  method render (line 248) | render (h) {
  method render (line 256) | render (h) {

FILE: test/unit/custom_blocks.test.js
  method render (line 24) | render (h) {
  method render (line 31) | render (h) {
  method render (line 53) | render (h) {
  method render (line 60) | render (h) {
  method render (line 91) | render (h) {
  method render (line 98) | render (h) {
  method render (line 122) | render (h) {
  method render (line 129) | render (h) {

FILE: test/unit/datetime.test.js
  method render (line 29) | render (h) {
  method render (line 87) | render (h) {

FILE: test/unit/directive.test.js
  function createVM (line 12) | function createVM (options) {
  method render (line 22) | render (h) {
  method render (line 47) | render (h) {
  method render (line 76) | render (h) {
  method render (line 106) | render (h) {
  method render (line 126) | render (h) {
  method render (line 147) | render (h) {
  method render (line 165) | render (h) {
  method render (line 185) | render (h) {
  method render (line 205) | render (h) {
  method render (line 228) | render (h) {
  method render (line 251) | render (h) {
  method render (line 278) | render (h) {

FILE: test/unit/format_custom.test.js
  class CustomFormatter (line 6) | class CustomFormatter {
    method interpolate (line 7) | interpolate (message, values) {
    method interpolate (line 23) | interpolate (message, values) {
  class CustomFormatter (line 22) | class CustomFormatter {
    method interpolate (line 7) | interpolate (message, values) {
    method interpolate (line 23) | interpolate (message, values) {
  method render (line 79) | render (h) {
  method render (line 91) | render (h) {

FILE: test/unit/interpolation.test.js
  method render (line 25) | render (h) {
  method render (line 33) | render (h) {
  method render (line 55) | render (h) {
  method render (line 66) | render(h) {
  method render (line 73) | render (h) {
  method render (line 85) | render(h, { data, children }) {
  method render (line 92) | render (h) {
  method render (line 105) | render (h) {
  method render (line 118) | render (h) {
  method render (line 131) | render (h) {
  method render (line 148) | render (h) {
  method render (line 163) | render (h) {
  method render (line 181) | render (h) {
  method render (line 201) | render (h) {
  method render (line 219) | render (h) {
  method render (line 235) | render (h) {
  method render (line 254) | render (h) {
  method render (line 273) | render (h) {
  method render (line 292) | render (h) {
  method render (line 313) | render (h) {
  method render (line 329) | render (h) {
  method render (line 356) | render (h) {
  method render (line 374) | render (h) {
  method render (line 391) | render (h) {
  method render (line 412) | render (h) {
  method render (line 427) | render (h) {
  method render (line 448) | render (h) {
  method render (line 466) | render (h) {
  method render (line 484) | render (h) {
  method render (line 515) | render (h) {
  method render (line 537) | render (h) {
  method render (line 564) | render (h) {

FILE: test/unit/issues.test.js
  method render (line 84) | render (h) {
  method render (line 106) | render (h) {
  method render (line 136) | render (h) {
  method render (line 141) | render (h) {
  method render (line 160) | render (h) {
  method render (line 192) | render (h) {
  method render (line 200) | render (h) {
  method render (line 232) | render (h) {
  method render (line 266) | render (h) {
  method render (line 277) | render (h) {
  method render (line 282) | render (h) {
  method data (line 346) | data () {
  method render (line 407) | render (h) {
  method render (line 445) | render (h) {
  method render (line 450) | render (h) {
  method render (line 471) | render (h) {
  function slavicPluralization (line 521) | function slavicPluralization (choice, choicesLength) {
  method interpolate (line 666) | interpolate (message, values, path) {
  method render (line 727) | render (h) {
  method render (line 732) | render (h) {
  method render (line 755) | render (h) {
  method render (line 760) | render (h) {
  method render (line 778) | render (h) {
  method render (line 806) | render (h) {

FILE: test/unit/message.test.js
  method render (line 43) | render (h) {

FILE: test/unit/number.test.js
  function convertToCharCodes (line 3) | function convertToCharCodes (str) {
  method render (line 37) | render (h) {
  method render (line 98) | render (h) {

FILE: test/unit/number_component.test.js
  method render (line 22) | render (h) {
  method render (line 38) | render (h) {
  method render (line 53) | render (h) {
  method render (line 69) | render (h) {
  method render (line 84) | render (h) {
  method render (line 97) | render (h) {
  method render (line 110) | render (h) {
  method render (line 123) | render (h) {
  method render (line 141) | render (h) {
  method render (line 154) | render (h) {
  method render (line 169) | render (h) {
  method render (line 182) | render (h) {
  method render (line 198) | render (h) {
  method render (line 217) | render (h) {
  method render (line 236) | render (h) {
  method render (line 256) | render (h) {
  method render (line 274) | render (h) {
  method render (line 294) | render (h) {
  method render (line 316) | render (h) {
  method render (line 343) | render (h) {

FILE: test/unit/silent.test.js
  method render (line 100) | render (h) { return h('p') }
  method render (line 103) | render (h) { return h('sub-component') }
  method render (line 135) | render (h) { return h('p') }
  method render (line 138) | render (h) { return h('sub-component') }
  method render (line 180) | render (h) { return h('p') }
  method render (line 183) | render (h) { return h('sub-component') }
  method render (line 212) | render (h) { return h('p') }
  method render (line 215) | render (h) { return h('sub-component') }
  method render (line 246) | render (h) { return h('p') }
  method render (line 249) | render (h) { return h('sub-component') }

FILE: types/index.d.ts
  type Path (line 1) | type Path = VueI18n.Path;
  type Locale (line 2) | type Locale = VueI18n.Locale;
  type FallbackLocale (line 3) | type FallbackLocale = VueI18n.FallbackLocale;
  type Values (line 4) | type Values = VueI18n.Values;
  type Choice (line 5) | type Choice = VueI18n.Choice;
  type MessageContext (line 6) | type MessageContext = VueI18n.MessageContext;
  type MessageFunction (line 7) | type MessageFunction = VueI18n.MessageFunction;
  type LocaleMessage (line 8) | type LocaleMessage = VueI18n.LocaleMessage;
  type LocaleMessageObject (line 9) | type LocaleMessageObject = VueI18n.LocaleMessageObject;
  type LocaleMessageArray (line 10) | type LocaleMessageArray = VueI18n.LocaleMessageArray;
  type LocaleMessages (line 11) | type LocaleMessages = VueI18n.LocaleMessages;
  type TranslateResult (line 12) | type TranslateResult = VueI18n.TranslateResult;
  type DateTimeFormatOptions (line 13) | type DateTimeFormatOptions = VueI18n.DateTimeFormatOptions;
  type DateTimeFormat (line 14) | type DateTimeFormat = VueI18n.DateTimeFormat;
  type DateTimeFormats (line 15) | type DateTimeFormats = VueI18n.DateTimeFormats;
  type DateTimeFormatResult (line 16) | type DateTimeFormatResult = VueI18n.DateTimeFormatResult;
  type NumberFormatOptions (line 17) | type NumberFormatOptions = VueI18n.NumberFormatOptions;
  type NumberFormat (line 18) | type NumberFormat = VueI18n.NumberFormat;
  type NumberFormats (line 19) | type NumberFormats = VueI18n.NumberFormats;
  type NumberFormatResult (line 20) | type NumberFormatResult = VueI18n.NumberFormatResult;
  type NumberFormatToPartsResult (line 21) | type NumberFormatToPartsResult = VueI18n.NumberFormatToPartsResult;
  type WarnHtmlInMessageLevel (line 22) | type WarnHtmlInMessageLevel = VueI18n.WarnHtmlInMessageLevel;
  type Formatter (line 23) | type Formatter = VueI18n.Formatter;
  type MissingHandler (line 24) | type MissingHandler = VueI18n.MissingHandler;
  type PostTranslationHandler (line 25) | type PostTranslationHandler = VueI18n.PostTranslationHandler;
  type IntlAvailability (line 26) | type IntlAvailability = VueI18n.IntlAvailability;
  type I18nOptions (line 27) | type I18nOptions = VueI18n.I18nOptions;
  type PluignOptions (line 28) | type PluignOptions = VueI18n.PluignOptions
  type Path (line 33) | type Path = string;
  type Locale (line 34) | type Locale = string;
  type FallbackLocale (line 35) | type FallbackLocale = string | string[] | false | { [locale: string]: st...
  type Values (line 36) | type Values = any[] | { [key: string]: any };
  type Choice (line 37) | type Choice = number;
  type MessageContext (line 38) | interface MessageContext {
  type MessageFunction (line 48) | type MessageFunction = (ctx: MessageContext) => string;
  type LocaleMessage (line 49) | type LocaleMessage = string | MessageFunction | LocaleMessageObject | Lo...
  type LocaleMessageObject (line 50) | interface LocaleMessageObject { [key: string]: LocaleMessage; }
  type LocaleMessageArray (line 51) | interface LocaleMessageArray { [index: number]: LocaleMessage; }
  type LocaleMessages (line 52) | interface LocaleMessages { [key: string]: LocaleMessageObject; }
  type TranslateResult (line 53) | type TranslateResult = string | LocaleMessages;
  type LocaleMatcher (line 55) | type LocaleMatcher = 'lookup' | 'best fit';
  type FormatMatcher (line 56) | type FormatMatcher = 'basic' | 'best fit';
  type DateTimeHumanReadable (line 58) | type DateTimeHumanReadable = 'long' | 'short' | 'narrow';
  type DateTimeDigital (line 59) | type DateTimeDigital = 'numeric' | '2-digit';
  type SpecificDateTimeFormatOptions (line 61) | interface SpecificDateTimeFormatOptions extends Intl.DateTimeFormatOptio...
  type DateTimeFormatOptions (line 75) | type DateTimeFormatOptions = Intl.DateTimeFormatOptions | SpecificDateTi...
  type DateTimeFormat (line 77) | interface DateTimeFormat { [key: string]: DateTimeFormatOptions; }
  type DateTimeFormats (line 78) | interface DateTimeFormats { [locale: string]: DateTimeFormat; }
  type DateTimeFormatResult (line 79) | type DateTimeFormatResult = string;
  type CurrencyDisplay (line 81) | type CurrencyDisplay = 'symbol' | 'code' | 'name';
  type SpecificNumberFormatOptions (line 83) | interface SpecificNumberFormatOptions extends Intl.NumberFormatOptions {
  type CurrencyNumberFormatOptions (line 91) | interface CurrencyNumberFormatOptions extends Intl.NumberFormatOptions {
  type NumberFormatOptions (line 99) | type NumberFormatOptions = Intl.NumberFormatOptions | SpecificNumberForm...
  type NumberFormat (line 101) | interface NumberFormat { [key: string]: NumberFormatOptions; }
  type NumberFormats (line 102) | interface NumberFormats { [locale: string]: NumberFormat; }
  type NumberFormatResult (line 103) | type NumberFormatResult = string;
  type PluralizationRulesMap (line 104) | type PluralizationRulesMap = {
  type Modifiers (line 112) | type Modifiers = { [key: string]: (str : string) => string };
  type FormattedNumberPartType (line 114) | type FormattedNumberPartType = 'currency' | 'decimal' | 'fraction' | 'gr...
  type WarnHtmlInMessageLevel (line 116) | type WarnHtmlInMessageLevel = 'off' | 'warn' | 'error';
  type FormattedNumberPart (line 118) | interface FormattedNumberPart {
  type NumberFormatToPartsResult (line 122) | interface NumberFormatToPartsResult { [index: number]: FormattedNumberPa...
  type Formatter (line 124) | interface Formatter {
  type MissingHandler (line 128) | type MissingHandler = (locale: Locale, key: Path, vm: Vue | null, values...
  type PostTranslationHandler (line 129) | type PostTranslationHandler = (str: string, key?: string) => string;
  type ComponentInstanceCreatedListener (line 130) | type ComponentInstanceCreatedListener = (newVm: VueI18n & IVueI18n, root...
  type IntlAvailability (line 132) | interface IntlAvailability {
  type I18nOptions (line 138) | interface I18nOptions {
  type PluignOptions (line 162) | type PluignOptions = {
  type IVueI18n (line 167) | interface IVueI18n {
  class VueI18n (line 216) | class VueI18n {
  type Vue (line 274) | interface Vue {
  type ComponentOptions (line 285) | interface ComponentOptions<V extends Vue> {

FILE: types/test/index.ts
  method interpolate (line 57) | interpolate (message, values) {
  method missing (line 64) | missing (locale, key, vm) {
Condensed preview — 556 files, each showing path, character count, and a content snippet. Download the .json file or copy for the full structured content (5,851K chars).
[
  {
    "path": ".babelrc",
    "chars": 341,
    "preview": "{\n  \"presets\": [\"@vue/app\"],\n  \"plugins\": [\n    \"@babel/plugin-proposal-class-properties\",\n    \"@babel/plugin-syntax-flo"
  },
  {
    "path": ".dependabot/config.yml",
    "chars": 109,
    "preview": "version: 1\nupdate_configs:\n  - package_manager: \"javascript\"\n    directory: \"/\"\n    update_schedule: \"weekly\""
  },
  {
    "path": ".editorconfig",
    "chars": 147,
    "preview": "root = true\n\n[*]\ncharset = utf-8\nindent_style = space\nindent_size = 2\nend_of_line = lf\ninsert_final_newline = true\ntrim_"
  },
  {
    "path": ".eslintignore",
    "chars": 12,
    "preview": "config/*.js\n"
  },
  {
    "path": ".eslintrc.js",
    "chars": 542,
    "preview": "module.exports = {\n  root: true,\n  parserOptions: {\n    ecmaVersion: 2018,\n  },\n  plugins: ['flowtype', 'ie11', 'no-auto"
  },
  {
    "path": ".flowconfig",
    "chars": 209,
    "preview": "[ignore]\n.*/node_modules/.*\n.*/docs/.*\n.*/test/.*\n.*/types/.*\n.*/config/.*\n.*/examples/.*\n\n[include]\n\n[libs]\ndecls\n\n[opt"
  },
  {
    "path": ".github/FUNDING.yml",
    "chars": 356,
    "preview": "# These are supported funding model platforms\n\ngithub: kazupon\npatreon: # kazupon\nopen_collective: # Replace with a sing"
  },
  {
    "path": ".github/ISSUE_TEMPLATE/bug-report.yml",
    "chars": 3077,
    "preview": "name: \"\\U0001F41E Bug report\"\ndescription: Report an issue\nlabels: ['Status: Review Needed']\nbody:\n  - type: markdown\n  "
  },
  {
    "path": ".github/ISSUE_TEMPLATE/config.yml",
    "chars": 368,
    "preview": "blank_issues_enabled: false\ncontact_links:\n  - name: Discord Chat at Vue Land\n    url: https://chat.vuejs.org/\n    about"
  },
  {
    "path": ".github/ISSUE_TEMPLATE/feature_request.yml",
    "chars": 1669,
    "preview": "name: \"\\U0001F680 New feature proposal\"\ndescription: Propose a new feature\nlabels: ['Status: Proposal']\nbody:\n  - type: "
  },
  {
    "path": ".github/workflows/ci.yml",
    "chars": 2758,
    "preview": "name: Test\non:\n  push:\n    branches-ignore:\n      - gh-pages\n      - releases/**\n  pull_request:\n    branches-ignore:\n  "
  },
  {
    "path": ".github/workflows/release.yml",
    "chars": 766,
    "preview": "name: Release\n\non:\n  pull_request:\n    types:\n      - closed\n\njobs:\n  release:\n    name: Release\n    if: github.event.pu"
  },
  {
    "path": ".gitignore",
    "chars": 152,
    "preview": "lib\ncoverage\ndist/*.gz\ndocs/_book\ntest/e2e/report\ntest/e2e/screenshots\nnode_modules\nvuepress/.vuepress/dist\n.DS_Store\n.i"
  },
  {
    "path": ".mergify.yml",
    "chars": 204,
    "preview": "pull_request_rules:\n  - name: merge pull requests from dependabot if CI passes\n    conditions:\n    - author=dependabot[b"
  },
  {
    "path": ".npmignore",
    "chars": 68,
    "preview": ".*\n*.log\n*.swp\n*.yml\ncoverage\ndocs/_book\nconfig\ndist/*.map\nlib\ntest\n"
  },
  {
    "path": "BACKERS.md",
    "chars": 2550,
    "preview": "# Backers\n\nYou can join them in supporting vue-i18n & Intlify project development by [pledging on GitHub](https://github"
  },
  {
    "path": "CHANGELOG.md",
    "chars": 78013,
    "preview": "## v8.28.2 (2022-10-31)\n\n#### :bug: Bug Fixes\n* [#1575](https://github.com/kazupon/vue-i18n/pull/1575) fix(datetime): fi"
  },
  {
    "path": "CONTRIBUTING.md",
    "chars": 4621,
    "preview": "# vue-i18n Contributing Guide\n\n- [Issue Reporting Guidelines](#issue-reporting-guidelines)\n- [Pull Request Guidelines](#"
  },
  {
    "path": "LICENSE",
    "chars": 1083,
    "preview": "The MIT License (MIT)\n\nCopyright (c) 2016 kazuya kawaguchi\n\nPermission is hereby granted, free of charge, to any person "
  },
  {
    "path": "README.md",
    "chars": 4218,
    "preview": "<p align=\"center\"><img width=\"128px\" height=\"112px\" src=\"./assets/vue-i18n-logo.png\" alt=\"Vue I18n logo\"></p>\n<h1 align="
  },
  {
    "path": "SECURITY.md",
    "chars": 777,
    "preview": "# Security Policy\n\n## Supported Versions\n\n| Version | Supported          |\n| ------- | ------------------ |\n| 8.28.x   |"
  },
  {
    "path": "assets/README.md",
    "chars": 1547,
    "preview": "# vue-i18n-art\n\n> Vue I18n artworks\n\n<a rel=\"license\" href=\"http://creativecommons.org/licenses/by-nc-sa/4.0/\"><img alt="
  },
  {
    "path": "config/.eslintrc.js",
    "chars": 155,
    "preview": "module.exports = {\n  globals: {\n    process: true\n  },\n  extends: 'vue',\n  rules: {\n    'no-multiple-empty-lines': [2, {"
  },
  {
    "path": "config/banner.js",
    "chars": 285,
    "preview": "const pack = require('../package.json')\nconst version = process.env.VERSION || pack.version\n\nmodule.exports =\n  '/*!\\n' "
  },
  {
    "path": "config/build.js",
    "chars": 472,
    "preview": "'use strict'\nconst fs = require('fs')\nconst exist = fs.existsSync\nconst mkdir = fs.mkdirSync\nconst getAllEntries = requi"
  },
  {
    "path": "config/bundle.js",
    "chars": 1764,
    "preview": "const fs = require('fs')\nconst path = require('path')\nconst zlib = require('zlib')\nconst rollup = require('rollup')\ncons"
  },
  {
    "path": "config/entry.js",
    "chars": 2314,
    "preview": "const path = require('path')\nconst replace = require('rollup-plugin-replace')\nconst flow = require('rollup-plugin-flow-n"
  },
  {
    "path": "config/karma-intl-plugin.js",
    "chars": 323,
    "preview": "const path = require('path')\n\nconst init = function (files) {\n  files.unshift({\n    pattern: path.join(__dirname, '../no"
  },
  {
    "path": "config/karma.base.conf.js",
    "chars": 694,
    "preview": "const webpack = require('webpack')\nconst intlPlugin = require('./karma-intl-plugin')\n\nconst webpackConfig = {\n  module: "
  },
  {
    "path": "config/karma.cover.conf.js",
    "chars": 514,
    "preview": "const base = require('./karma.base.conf')\n\nmodule.exports = config => {\n  const options = Object.assign(base, {\n    brow"
  },
  {
    "path": "config/karma.sauce.conf.js",
    "chars": 2313,
    "preview": "const base = require('./karma.base.conf')\nconst pack = require('../package.json')\n\n/**\n * Having too many tests running "
  },
  {
    "path": "config/karma.unit.ci.conf.js",
    "chars": 323,
    "preview": "const base = require('./karma.base.conf')\n\nmodule.exports = config => {\n  config.set(Object.assign(base, {\n    browsers:"
  },
  {
    "path": "config/karma.unit.conf.js",
    "chars": 347,
    "preview": "const base = require('./karma.base.conf')\n\nmodule.exports = config => {\n  config.set(Object.assign(base, {\n    browsers:"
  },
  {
    "path": "config/nightwatch.conf.js",
    "chars": 1496,
    "preview": "// http://nightwatchjs.org/guide#settings-file\nmodule.exports = {\n  src_folders: ['test/e2e/test'],\n  output_folder: 'te"
  },
  {
    "path": "config/version.js",
    "chars": 390,
    "preview": "const fs = require('fs')\nconst pack = require('../package.json')\n\n// update installation.md\nconst installation = fs\n  .r"
  },
  {
    "path": "config/webpack.dev.conf.js",
    "chars": 468,
    "preview": "const path = require('path')\nconst webpack = require('webpack')\n\nmodule.exports = {\n  entry: 'mocha-loader!./test/unit/i"
  },
  {
    "path": "decls/i18n.js",
    "chars": 7101,
    "preview": "declare var Intl: any;\n\ndeclare type Path = string;\ndeclare type Locale = string;\ndeclare type MessageContext = {\n  list"
  },
  {
    "path": "decls/module.js",
    "chars": 922,
    "preview": "declare type $npm$Vue$Dictionaly<T> = { [key: string]: T }\n\ndeclare type Util = {\n  extend: (to: Object, from: ?Object) "
  },
  {
    "path": "dist/README.md",
    "chars": 1429,
    "preview": "## Explanation of Different Builds\n\n- UMD: `vue-i18n.js`\n- CommonJS: `vue-i18n.common.js`\n- ES Module for bundlers: `vue"
  },
  {
    "path": "dist/vue-i18n.common.js",
    "chars": 62360,
    "preview": "/*!\n * vue-i18n v8.24.4 \n * (c) 2021 kazuya kawaguchi\n * Released under the MIT License.\n */\n'use strict';\n\n/*  */\n\n/**\n"
  },
  {
    "path": "dist/vue-i18n.esm.browser.js",
    "chars": 56481,
    "preview": "/*  */\n\n/**\n * constants\n */\n\nconst numberFormatKeys = [\n  'compactDisplay',\n  'currency',\n  'currencyDisplay',\n  'curre"
  },
  {
    "path": "dist/vue-i18n.esm.js",
    "chars": 62343,
    "preview": "/*!\n * vue-i18n v8.24.4 \n * (c) 2021 kazuya kawaguchi\n * Released under the MIT License.\n */\n/*  */\n\n/**\n * constants\n *"
  },
  {
    "path": "dist/vue-i18n.js",
    "chars": 65311,
    "preview": "/*!\n * vue-i18n v8.24.4 \n * (c) 2021 kazuya kawaguchi\n * Released under the MIT License.\n */\n(function (global, factory)"
  },
  {
    "path": "docs/404.html",
    "chars": 5070,
    "preview": "<!DOCTYPE html>\n<html lang=\"en-US\">\n  <head>\n    <meta charset=\"utf-8\">\n    <meta name=\"viewport\" content=\"width=device-"
  },
  {
    "path": "docs/api/index.html",
    "chars": 73620,
    "preview": "<!DOCTYPE html>\n<html lang=\"en-US\">\n  <head>\n    <meta charset=\"utf-8\">\n    <meta name=\"viewport\" content=\"width=device-"
  },
  {
    "path": "docs/assets/css/0.styles.c299b601.css",
    "chars": 21853,
    "preview": ".home{padding:3.6rem 2rem 0;max-width:960px;margin:0 auto}.home .hero{text-align:center}.home .hero img{max-width:100%;m"
  },
  {
    "path": "docs/assets/js/10.13689381.js",
    "chars": 24697,
    "preview": "(window.webpackJsonp=window.webpackJsonp||[]).push([[10],{242:function(t,s,a){\"use strict\";a.r(s);var n=a(0),e=Object(n."
  },
  {
    "path": "docs/assets/js/11.aa13f293.js",
    "chars": 24047,
    "preview": "(window.webpackJsonp=window.webpackJsonp||[]).push([[11],{243:function(t,s,a){\"use strict\";a.r(s);var n=a(0),e=Object(n."
  },
  {
    "path": "docs/assets/js/12.2b21ead8.js",
    "chars": 59109,
    "preview": "(window.webpackJsonp=window.webpackJsonp||[]).push([[12],{244:function(t,a,s){\"use strict\";s.r(a);var n=s(0),e=Object(n."
  },
  {
    "path": "docs/assets/js/13.b3706367.js",
    "chars": 17001,
    "preview": "(window.webpackJsonp=window.webpackJsonp||[]).push([[13],{245:function(t,s,a){\"use strict\";a.r(s);var n=a(0),e=Object(n."
  },
  {
    "path": "docs/assets/js/14.1819508a.js",
    "chars": 10921,
    "preview": "(window.webpackJsonp=window.webpackJsonp||[]).push([[14],{246:function(t,a,s){\"use strict\";s.r(a);var n=s(0),e=Object(n."
  },
  {
    "path": "docs/assets/js/15.12152ec7.js",
    "chars": 30746,
    "preview": "(window.webpackJsonp=window.webpackJsonp||[]).push([[15],{247:function(t,s,a){\"use strict\";a.r(s);var n=a(0),e=Object(n."
  },
  {
    "path": "docs/assets/js/16.c251473e.js",
    "chars": 35504,
    "preview": "(window.webpackJsonp=window.webpackJsonp||[]).push([[16],{248:function(t,s,a){\"use strict\";a.r(s);var n=a(0),e=Object(n."
  },
  {
    "path": "docs/assets/js/17.311179bd.js",
    "chars": 33798,
    "preview": "(window.webpackJsonp=window.webpackJsonp||[]).push([[17],{249:function(t,a,s){\"use strict\";s.r(a);var n=s(0),p=Object(n."
  },
  {
    "path": "docs/assets/js/18.a9d0f1d4.js",
    "chars": 61719,
    "preview": "(window.webpackJsonp=window.webpackJsonp||[]).push([[18],{250:function(t,s,a){\"use strict\";a.r(s);var n=a(0),e=Object(n."
  },
  {
    "path": "docs/assets/js/19.d0288f09.js",
    "chars": 6828,
    "preview": "(window.webpackJsonp=window.webpackJsonp||[]).push([[19],{251:function(t,e,n){\"use strict\";n.r(e);var i=n(0),r=Object(i."
  },
  {
    "path": "docs/assets/js/2.aa910774.js",
    "chars": 501,
    "preview": "(window.webpackJsonp=window.webpackJsonp||[]).push([[2],{165:function(t,n,e){},166:function(t,n,e){\"use strict\";var a=e("
  },
  {
    "path": "docs/assets/js/20.9de38e10.js",
    "chars": 11459,
    "preview": "(window.webpackJsonp=window.webpackJsonp||[]).push([[20],{252:function(t,e,s){\"use strict\";s.r(e);var n=s(0),a=Object(n."
  },
  {
    "path": "docs/assets/js/21.65715f7c.js",
    "chars": 3110,
    "preview": "(window.webpackJsonp=window.webpackJsonp||[]).push([[21],{253:function(t,e,a){\"use strict\";a.r(e);var r=a(0),s=Object(r."
  },
  {
    "path": "docs/assets/js/22.7b59f449.js",
    "chars": 54545,
    "preview": "(window.webpackJsonp=window.webpackJsonp||[]).push([[22],{254:function(t,s,a){\"use strict\";a.r(s);var n=a(0),e=Object(n."
  },
  {
    "path": "docs/assets/js/23.11ece4c3.js",
    "chars": 2701,
    "preview": "(window.webpackJsonp=window.webpackJsonp||[]).push([[23],{255:function(t,e,r){\"use strict\";r.r(e);var n=r(0),o=Object(n."
  },
  {
    "path": "docs/assets/js/24.dffd1071.js",
    "chars": 1854,
    "preview": "(window.webpackJsonp=window.webpackJsonp||[]).push([[24],{256:function(t,e,a){\"use strict\";a.r(e);var s=a(0),i=Object(s."
  },
  {
    "path": "docs/assets/js/25.97b69148.js",
    "chars": 91563,
    "preview": "(window.webpackJsonp=window.webpackJsonp||[]).push([[25],{257:function(t,e,s){\"use strict\";s.r(e);var a=s(0),r=Object(a."
  },
  {
    "path": "docs/assets/js/26.616f0814.js",
    "chars": 24367,
    "preview": "(window.webpackJsonp=window.webpackJsonp||[]).push([[26],{258:function(t,s,a){\"use strict\";a.r(s);var n=a(0),e=Object(n."
  },
  {
    "path": "docs/assets/js/27.adf21b94.js",
    "chars": 10554,
    "preview": "(window.webpackJsonp=window.webpackJsonp||[]).push([[27],{259:function(t,s,a){\"use strict\";a.r(s);var n=a(0),e=Object(n."
  },
  {
    "path": "docs/assets/js/28.6bf6d42b.js",
    "chars": 39180,
    "preview": "(window.webpackJsonp=window.webpackJsonp||[]).push([[28],{260:function(t,s,a){\"use strict\";a.r(s);var n=a(0),e=Object(n."
  },
  {
    "path": "docs/assets/js/29.e8b42909.js",
    "chars": 19395,
    "preview": "(window.webpackJsonp=window.webpackJsonp||[]).push([[29],{261:function(t,s,a){\"use strict\";a.r(s);var n=a(0),e=Object(n."
  },
  {
    "path": "docs/assets/js/3.5e63523d.js",
    "chars": 14035,
    "preview": "(window.webpackJsonp=window.webpackJsonp||[]).push([[3],{167:function(e,t,o){\"use strict\";o.r(t),o.d(t,\"render\",(functio"
  },
  {
    "path": "docs/assets/js/30.24889fb9.js",
    "chars": 28141,
    "preview": "(window.webpackJsonp=window.webpackJsonp||[]).push([[30],{262:function(t,s,a){\"use strict\";a.r(s);var n=a(0),e=Object(n."
  },
  {
    "path": "docs/assets/js/31.57bd94a5.js",
    "chars": 24197,
    "preview": "(window.webpackJsonp=window.webpackJsonp||[]).push([[31],{263:function(t,s,a){\"use strict\";a.r(s);var n=a(0),e=Object(n."
  },
  {
    "path": "docs/assets/js/32.14dc9bdc.js",
    "chars": 58951,
    "preview": "(window.webpackJsonp=window.webpackJsonp||[]).push([[32],{264:function(t,s,a){\"use strict\";a.r(s);var n=a(0),e=Object(n."
  },
  {
    "path": "docs/assets/js/33.4d59e7bf.js",
    "chars": 16979,
    "preview": "(window.webpackJsonp=window.webpackJsonp||[]).push([[33],{265:function(t,s,n){\"use strict\";n.r(s);var a=n(0),e=Object(a."
  },
  {
    "path": "docs/assets/js/34.adc9b2af.js",
    "chars": 11106,
    "preview": "(window.webpackJsonp=window.webpackJsonp||[]).push([[34],{266:function(t,s,a){\"use strict\";a.r(s);var n=a(0),e=Object(n."
  },
  {
    "path": "docs/assets/js/35.4e6e5ad7.js",
    "chars": 32644,
    "preview": "(window.webpackJsonp=window.webpackJsonp||[]).push([[35],{267:function(t,s,a){\"use strict\";a.r(s);var n=a(0),e=Object(n."
  },
  {
    "path": "docs/assets/js/36.7b1eb244.js",
    "chars": 35415,
    "preview": "(window.webpackJsonp=window.webpackJsonp||[]).push([[36],{268:function(t,s,a){\"use strict\";a.r(s);var n=a(0),e=Object(n."
  },
  {
    "path": "docs/assets/js/37.6584773d.js",
    "chars": 34683,
    "preview": "(window.webpackJsonp=window.webpackJsonp||[]).push([[37],{269:function(t,a,s){\"use strict\";s.r(a);var n=s(0),p=Object(n."
  },
  {
    "path": "docs/assets/js/38.7879de31.js",
    "chars": 62306,
    "preview": "(window.webpackJsonp=window.webpackJsonp||[]).push([[38],{270:function(t,s,a){\"use strict\";a.r(s);var n=a(0),e=Object(n."
  },
  {
    "path": "docs/assets/js/39.f7496f35.js",
    "chars": 6198,
    "preview": "(window.webpackJsonp=window.webpackJsonp||[]).push([[39],{271:function(t,e,n){\"use strict\";n.r(e);var r=n(0),a=Object(r."
  },
  {
    "path": "docs/assets/js/4.9735c0af.js",
    "chars": 2054,
    "preview": "(window.webpackJsonp=window.webpackJsonp||[]).push([[4],{236:function(t,e,a){\"use strict\";a.r(e);var s=a(0),n=Object(s.a"
  },
  {
    "path": "docs/assets/js/40.b5b5dc72.js",
    "chars": 12698,
    "preview": "(window.webpackJsonp=window.webpackJsonp||[]).push([[40],{272:function(t,s,e){\"use strict\";e.r(s);var n=e(0),a=Object(n."
  },
  {
    "path": "docs/assets/js/41.638a9c02.js",
    "chars": 2803,
    "preview": "(window.webpackJsonp=window.webpackJsonp||[]).push([[41],{273:function(t,e,a){\"use strict\";a.r(e);var r=a(0),s=Object(r."
  },
  {
    "path": "docs/assets/js/42.222a2780.js",
    "chars": 53371,
    "preview": "(window.webpackJsonp=window.webpackJsonp||[]).push([[42],{274:function(t,s,a){\"use strict\";a.r(s);var n=a(0),e=Object(n."
  },
  {
    "path": "docs/assets/js/43.b28cd4fc.js",
    "chars": 2762,
    "preview": "(window.webpackJsonp=window.webpackJsonp||[]).push([[43],{275:function(t,e,r){\"use strict\";r.r(e);var n=r(0),o=Object(n."
  },
  {
    "path": "docs/assets/js/44.67f64685.js",
    "chars": 10952,
    "preview": "(window.webpackJsonp=window.webpackJsonp||[]).push([[44],{276:function(t,s,a){\"use strict\";a.r(s);var n=a(0),e=Object(n."
  },
  {
    "path": "docs/assets/js/45.550cbef0.js",
    "chars": 10801,
    "preview": "(window.webpackJsonp=window.webpackJsonp||[]).push([[45],{277:function(t,s,a){\"use strict\";a.r(s);var n=a(0),e=Object(n."
  },
  {
    "path": "docs/assets/js/46.5ab1c570.js",
    "chars": 1333,
    "preview": "(window.webpackJsonp=window.webpackJsonp||[]).push([[46],{278:function(t,a,e){\"use strict\";e.r(a);var s=e(0),n=Object(s."
  },
  {
    "path": "docs/assets/js/47.d7b6ca42.js",
    "chars": 61834,
    "preview": "(window.webpackJsonp=window.webpackJsonp||[]).push([[47],{279:function(t,e,s){\"use strict\";s.r(e);var a=s(0),r=Object(a."
  },
  {
    "path": "docs/assets/js/48.185bface.js",
    "chars": 17654,
    "preview": "(window.webpackJsonp=window.webpackJsonp||[]).push([[48],{280:function(t,a,s){\"use strict\";s.r(a);var n=s(0),e=Object(n."
  },
  {
    "path": "docs/assets/js/49.1570bc72.js",
    "chars": 13247,
    "preview": "(window.webpackJsonp=window.webpackJsonp||[]).push([[49],{281:function(t,s,a){\"use strict\";a.r(s);var n=a(0),r=Object(n."
  },
  {
    "path": "docs/assets/js/5.0b14e886.js",
    "chars": 89228,
    "preview": "(window.webpackJsonp=window.webpackJsonp||[]).push([[5],{237:function(t,e,s){\"use strict\";s.r(e);var a=s(0),n=Object(a.a"
  },
  {
    "path": "docs/assets/js/50.0e187269.js",
    "chars": 37573,
    "preview": "(window.webpackJsonp=window.webpackJsonp||[]).push([[50],{282:function(t,s,a){\"use strict\";a.r(s);var n=a(0),e=Object(n."
  },
  {
    "path": "docs/assets/js/51.c993f5c3.js",
    "chars": 11530,
    "preview": "(window.webpackJsonp=window.webpackJsonp||[]).push([[51],{283:function(a,t,s){\"use strict\";s.r(t);var n=s(0),e=Object(n."
  },
  {
    "path": "docs/assets/js/52.d66b2adb.js",
    "chars": 23160,
    "preview": "(window.webpackJsonp=window.webpackJsonp||[]).push([[52],{284:function(t,s,a){\"use strict\";a.r(s);var n=a(0),e=Object(n."
  },
  {
    "path": "docs/assets/js/53.21ae73c5.js",
    "chars": 6711,
    "preview": "(window.webpackJsonp=window.webpackJsonp||[]).push([[53],{285:function(t,s,n){\"use strict\";n.r(s);var a=n(0),e=Object(a."
  },
  {
    "path": "docs/assets/js/54.cd4c9ca8.js",
    "chars": 39001,
    "preview": "(window.webpackJsonp=window.webpackJsonp||[]).push([[54],{286:function(t,s,a){\"use strict\";a.r(s);var n=a(0),e=Object(n."
  },
  {
    "path": "docs/assets/js/55.caa71074.js",
    "chars": 15476,
    "preview": "(window.webpackJsonp=window.webpackJsonp||[]).push([[55],{287:function(t,s,n){\"use strict\";n.r(s);var a=n(0),e=Object(a."
  },
  {
    "path": "docs/assets/js/56.c8f906b3.js",
    "chars": 9546,
    "preview": "(window.webpackJsonp=window.webpackJsonp||[]).push([[56],{288:function(t,s,a){\"use strict\";a.r(s);var n=a(0),e=Object(n."
  },
  {
    "path": "docs/assets/js/57.388c89dc.js",
    "chars": 21852,
    "preview": "(window.webpackJsonp=window.webpackJsonp||[]).push([[57],{289:function(t,s,a){\"use strict\";a.r(s);var n=a(0),e=Object(n."
  },
  {
    "path": "docs/assets/js/58.ad6e14bc.js",
    "chars": 9637,
    "preview": "(window.webpackJsonp=window.webpackJsonp||[]).push([[58],{290:function(t,s,a){\"use strict\";a.r(s);var n=a(0),e=Object(n."
  },
  {
    "path": "docs/assets/js/59.3d64068b.js",
    "chars": 32729,
    "preview": "(window.webpackJsonp=window.webpackJsonp||[]).push([[59],{291:function(t,a,s){\"use strict\";s.r(a);var n=s(0),p=Object(n."
  },
  {
    "path": "docs/assets/js/6.b88753f1.js",
    "chars": 23985,
    "preview": "(window.webpackJsonp=window.webpackJsonp||[]).push([[6],{238:function(t,s,a){\"use strict\";a.r(s);var n=a(0),e=Object(n.a"
  },
  {
    "path": "docs/assets/js/60.12bfe8e9.js",
    "chars": 52551,
    "preview": "(window.webpackJsonp=window.webpackJsonp||[]).push([[60],{292:function(t,s,a){\"use strict\";a.r(s);var n=a(0),e=Object(n."
  },
  {
    "path": "docs/assets/js/61.446dac92.js",
    "chars": 3972,
    "preview": "(window.webpackJsonp=window.webpackJsonp||[]).push([[61],{293:function(t,e,r){\"use strict\";r.r(e);var n=r(0),a=Object(n."
  },
  {
    "path": "docs/assets/js/62.88ef088f.js",
    "chars": 7303,
    "preview": "(window.webpackJsonp=window.webpackJsonp||[]).push([[62],{294:function(t,s,a){\"use strict\";a.r(s);var e=a(0),n=Object(e."
  },
  {
    "path": "docs/assets/js/63.b6e0a846.js",
    "chars": 2303,
    "preview": "(window.webpackJsonp=window.webpackJsonp||[]).push([[63],{295:function(t,e,a){\"use strict\";a.r(e);var r=a(0),s=Object(r."
  },
  {
    "path": "docs/assets/js/64.f3210fad.js",
    "chars": 53557,
    "preview": "(window.webpackJsonp=window.webpackJsonp||[]).push([[64],{296:function(t,s,a){\"use strict\";a.r(s);var n=a(0),e=Object(n."
  },
  {
    "path": "docs/assets/js/65.afac79e3.js",
    "chars": 2665,
    "preview": "(window.webpackJsonp=window.webpackJsonp||[]).push([[65],{297:function(t,e,r){\"use strict\";r.r(e);var n=r(0),o=Object(n."
  },
  {
    "path": "docs/assets/js/66.d403fc3a.js",
    "chars": 10591,
    "preview": "(window.webpackJsonp=window.webpackJsonp||[]).push([[66],{298:function(t,s,a){\"use strict\";a.r(s);var n=a(0),e=Object(n."
  },
  {
    "path": "docs/assets/js/67.0bffd98a.js",
    "chars": 83,
    "preview": "(window.webpackJsonp=window.webpackJsonp||[]).push([[67],{233:function(n,w,o){}}]);"
  },
  {
    "path": "docs/assets/js/7.eaeacaf7.js",
    "chars": 13503,
    "preview": "(window.webpackJsonp=window.webpackJsonp||[]).push([[7],{239:function(t,s,a){\"use strict\";a.r(s);var n=a(0),e=Object(n.a"
  },
  {
    "path": "docs/assets/js/8.344bd519.js",
    "chars": 39000,
    "preview": "(window.webpackJsonp=window.webpackJsonp||[]).push([[8],{240:function(t,s,a){\"use strict\";a.r(s);var n=a(0),e=Object(n.a"
  },
  {
    "path": "docs/assets/js/9.ec02aae8.js",
    "chars": 18898,
    "preview": "(window.webpackJsonp=window.webpackJsonp||[]).push([[9],{241:function(a,t,s){\"use strict\";s.r(t);var e=s(0),n=Object(e.a"
  },
  {
    "path": "docs/assets/js/app.5b04e7b0.js",
    "chars": 203291,
    "preview": "(window.webpackJsonp=window.webpackJsonp||[]).push([[0],[]]);!function(t){function e(e){for(var r,a,l=e[0],s=e[1],u=e[2]"
  },
  {
    "path": "docs/guide/component.html",
    "chars": 38856,
    "preview": "<!DOCTYPE html>\n<html lang=\"en-US\">\n  <head>\n    <meta charset=\"utf-8\">\n    <meta name=\"viewport\" content=\"width=device-"
  },
  {
    "path": "docs/guide/datetime.html",
    "chars": 31285,
    "preview": "<!DOCTYPE html>\n<html lang=\"en-US\">\n  <head>\n    <meta charset=\"utf-8\">\n    <meta name=\"viewport\" content=\"width=device-"
  },
  {
    "path": "docs/guide/directive.html",
    "chars": 48313,
    "preview": "<!DOCTYPE html>\n<html lang=\"en-US\">\n  <head>\n    <meta charset=\"utf-8\">\n    <meta name=\"viewport\" content=\"width=device-"
  },
  {
    "path": "docs/guide/fallback.html",
    "chars": 36170,
    "preview": "<!DOCTYPE html>\n<html lang=\"en-US\">\n  <head>\n    <meta charset=\"utf-8\">\n    <meta name=\"viewport\" content=\"width=device-"
  },
  {
    "path": "docs/guide/formatting.html",
    "chars": 39915,
    "preview": "<!DOCTYPE html>\n<html lang=\"en-US\">\n  <head>\n    <meta charset=\"utf-8\">\n    <meta name=\"viewport\" content=\"width=device-"
  },
  {
    "path": "docs/guide/hot-reload.html",
    "chars": 37814,
    "preview": "<!DOCTYPE html>\n<html lang=\"en-US\">\n  <head>\n    <meta charset=\"utf-8\">\n    <meta name=\"viewport\" content=\"width=device-"
  },
  {
    "path": "docs/guide/interpolation.html",
    "chars": 59346,
    "preview": "<!DOCTYPE html>\n<html lang=\"en-US\">\n  <head>\n    <meta charset=\"utf-8\">\n    <meta name=\"viewport\" content=\"width=device-"
  },
  {
    "path": "docs/guide/lazy-loading.html",
    "chars": 33636,
    "preview": "<!DOCTYPE html>\n<html lang=\"en-US\">\n  <head>\n    <meta charset=\"utf-8\">\n    <meta name=\"viewport\" content=\"width=device-"
  },
  {
    "path": "docs/guide/locale.html",
    "chars": 29432,
    "preview": "<!DOCTYPE html>\n<html lang=\"en-US\">\n  <head>\n    <meta charset=\"utf-8\">\n    <meta name=\"viewport\" content=\"width=device-"
  },
  {
    "path": "docs/guide/messages.html",
    "chars": 42733,
    "preview": "<!DOCTYPE html>\n<html lang=\"en-US\">\n  <head>\n    <meta charset=\"utf-8\">\n    <meta name=\"viewport\" content=\"width=device-"
  },
  {
    "path": "docs/guide/number.html",
    "chars": 45848,
    "preview": "<!DOCTYPE html>\n<html lang=\"en-US\">\n  <head>\n    <meta charset=\"utf-8\">\n    <meta name=\"viewport\" content=\"width=device-"
  },
  {
    "path": "docs/guide/pluralization.html",
    "chars": 44458,
    "preview": "<!DOCTYPE html>\n<html lang=\"en-US\">\n  <head>\n    <meta charset=\"utf-8\">\n    <meta name=\"viewport\" content=\"width=device-"
  },
  {
    "path": "docs/guide/sfc.html",
    "chars": 64778,
    "preview": "<!DOCTYPE html>\n<html lang=\"en-US\">\n  <head>\n    <meta charset=\"utf-8\">\n    <meta name=\"viewport\" content=\"width=device-"
  },
  {
    "path": "docs/guide/tooling.html",
    "chars": 32196,
    "preview": "<!DOCTYPE html>\n<html lang=\"en-US\">\n  <head>\n    <meta charset=\"utf-8\">\n    <meta name=\"viewport\" content=\"width=device-"
  },
  {
    "path": "docs/index.html",
    "chars": 23717,
    "preview": "<!DOCTYPE html>\n<html lang=\"en-US\">\n  <head>\n    <meta charset=\"utf-8\">\n    <meta name=\"viewport\" content=\"width=device-"
  },
  {
    "path": "docs/installation.html",
    "chars": 36038,
    "preview": "<!DOCTYPE html>\n<html lang=\"en-US\">\n  <head>\n    <meta charset=\"utf-8\">\n    <meta name=\"viewport\" content=\"width=device-"
  },
  {
    "path": "docs/introduction.html",
    "chars": 24850,
    "preview": "<!DOCTYPE html>\n<html lang=\"en-US\">\n  <head>\n    <meta charset=\"utf-8\">\n    <meta name=\"viewport\" content=\"width=device-"
  },
  {
    "path": "docs/legacy/index.html",
    "chars": 55705,
    "preview": "<!DOCTYPE html>\n<html lang=\"en-US\">\n  <head>\n    <meta charset=\"utf-8\">\n    <meta name=\"viewport\" content=\"width=device-"
  },
  {
    "path": "docs/legacy/v5.html",
    "chars": 29535,
    "preview": "<!DOCTYPE html>\n<html lang=\"en-US\">\n  <head>\n    <meta charset=\"utf-8\">\n    <meta name=\"viewport\" content=\"width=device-"
  },
  {
    "path": "docs/ru/api/index.html",
    "chars": 76241,
    "preview": "<!DOCTYPE html>\n<html lang=\"ru-RU\">\n  <head>\n    <meta charset=\"utf-8\">\n    <meta name=\"viewport\" content=\"width=device-"
  },
  {
    "path": "docs/ru/guide/component.html",
    "chars": 39474,
    "preview": "<!DOCTYPE html>\n<html lang=\"ru-RU\">\n  <head>\n    <meta charset=\"utf-8\">\n    <meta name=\"viewport\" content=\"width=device-"
  },
  {
    "path": "docs/ru/guide/datetime.html",
    "chars": 29846,
    "preview": "<!DOCTYPE html>\n<html lang=\"ru-RU\">\n  <head>\n    <meta charset=\"utf-8\">\n    <meta name=\"viewport\" content=\"width=device-"
  },
  {
    "path": "docs/ru/guide/directive.html",
    "chars": 48838,
    "preview": "<!DOCTYPE html>\n<html lang=\"ru-RU\">\n  <head>\n    <meta charset=\"utf-8\">\n    <meta name=\"viewport\" content=\"width=device-"
  },
  {
    "path": "docs/ru/guide/fallback.html",
    "chars": 37025,
    "preview": "<!DOCTYPE html>\n<html lang=\"ru-RU\">\n  <head>\n    <meta charset=\"utf-8\">\n    <meta name=\"viewport\" content=\"width=device-"
  },
  {
    "path": "docs/ru/guide/formatting.html",
    "chars": 42286,
    "preview": "<!DOCTYPE html>\n<html lang=\"ru-RU\">\n  <head>\n    <meta charset=\"utf-8\">\n    <meta name=\"viewport\" content=\"width=device-"
  },
  {
    "path": "docs/ru/guide/hot-reload.html",
    "chars": 38301,
    "preview": "<!DOCTYPE html>\n<html lang=\"ru-RU\">\n  <head>\n    <meta charset=\"utf-8\">\n    <meta name=\"viewport\" content=\"width=device-"
  },
  {
    "path": "docs/ru/guide/interpolation.html",
    "chars": 59692,
    "preview": "<!DOCTYPE html>\n<html lang=\"ru-RU\">\n  <head>\n    <meta charset=\"utf-8\">\n    <meta name=\"viewport\" content=\"width=device-"
  },
  {
    "path": "docs/ru/guide/lazy-loading.html",
    "chars": 33895,
    "preview": "<!DOCTYPE html>\n<html lang=\"ru-RU\">\n  <head>\n    <meta charset=\"utf-8\">\n    <meta name=\"viewport\" content=\"width=device-"
  },
  {
    "path": "docs/ru/guide/locale.html",
    "chars": 29910,
    "preview": "<!DOCTYPE html>\n<html lang=\"ru-RU\">\n  <head>\n    <meta charset=\"utf-8\">\n    <meta name=\"viewport\" content=\"width=device-"
  },
  {
    "path": "docs/ru/guide/messages.html",
    "chars": 44288,
    "preview": "<!DOCTYPE html>\n<html lang=\"ru-RU\">\n  <head>\n    <meta charset=\"utf-8\">\n    <meta name=\"viewport\" content=\"width=device-"
  },
  {
    "path": "docs/ru/guide/number.html",
    "chars": 46179,
    "preview": "<!DOCTYPE html>\n<html lang=\"ru-RU\">\n  <head>\n    <meta charset=\"utf-8\">\n    <meta name=\"viewport\" content=\"width=device-"
  },
  {
    "path": "docs/ru/guide/pluralization.html",
    "chars": 45236,
    "preview": "<!DOCTYPE html>\n<html lang=\"ru-RU\">\n  <head>\n    <meta charset=\"utf-8\">\n    <meta name=\"viewport\" content=\"width=device-"
  },
  {
    "path": "docs/ru/guide/sfc.html",
    "chars": 65945,
    "preview": "<!DOCTYPE html>\n<html lang=\"ru-RU\">\n  <head>\n    <meta charset=\"utf-8\">\n    <meta name=\"viewport\" content=\"width=device-"
  },
  {
    "path": "docs/ru/guide/tooling.html",
    "chars": 31234,
    "preview": "<!DOCTYPE html>\n<html lang=\"ru-RU\">\n  <head>\n    <meta charset=\"utf-8\">\n    <meta name=\"viewport\" content=\"width=device-"
  },
  {
    "path": "docs/ru/index.html",
    "chars": 23824,
    "preview": "<!DOCTYPE html>\n<html lang=\"ru-RU\">\n  <head>\n    <meta charset=\"utf-8\">\n    <meta name=\"viewport\" content=\"width=device-"
  },
  {
    "path": "docs/ru/installation.html",
    "chars": 37012,
    "preview": "<!DOCTYPE html>\n<html lang=\"ru-RU\">\n  <head>\n    <meta charset=\"utf-8\">\n    <meta name=\"viewport\" content=\"width=device-"
  },
  {
    "path": "docs/ru/introduction.html",
    "chars": 25064,
    "preview": "<!DOCTYPE html>\n<html lang=\"ru-RU\">\n  <head>\n    <meta charset=\"utf-8\">\n    <meta name=\"viewport\" content=\"width=device-"
  },
  {
    "path": "docs/ru/legacy/index.html",
    "chars": 55403,
    "preview": "<!DOCTYPE html>\n<html lang=\"ru-RU\">\n  <head>\n    <meta charset=\"utf-8\">\n    <meta name=\"viewport\" content=\"width=device-"
  },
  {
    "path": "docs/ru/legacy/v5.html",
    "chars": 29858,
    "preview": "<!DOCTYPE html>\n<html lang=\"ru-RU\">\n  <head>\n    <meta charset=\"utf-8\">\n    <meta name=\"viewport\" content=\"width=device-"
  },
  {
    "path": "docs/ru/started.html",
    "chars": 30368,
    "preview": "<!DOCTYPE html>\n<html lang=\"ru-RU\">\n  <head>\n    <meta charset=\"utf-8\">\n    <meta name=\"viewport\" content=\"width=device-"
  },
  {
    "path": "docs/started.html",
    "chars": 29998,
    "preview": "<!DOCTYPE html>\n<html lang=\"en-US\">\n  <head>\n    <meta charset=\"utf-8\">\n    <meta name=\"viewport\" content=\"width=device-"
  },
  {
    "path": "docs/zh/api/index.html",
    "chars": 53684,
    "preview": "<!DOCTYPE html>\n<html lang=\"zh-CN\">\n  <head>\n    <meta charset=\"utf-8\">\n    <meta name=\"viewport\" content=\"width=device-"
  },
  {
    "path": "docs/zh/guide/component.html",
    "chars": 32424,
    "preview": "<!DOCTYPE html>\n<html lang=\"zh-CN\">\n  <head>\n    <meta charset=\"utf-8\">\n    <meta name=\"viewport\" content=\"width=device-"
  },
  {
    "path": "docs/zh/guide/datetime.html",
    "chars": 29335,
    "preview": "<!DOCTYPE html>\n<html lang=\"zh-CN\">\n  <head>\n    <meta charset=\"utf-8\">\n    <meta name=\"viewport\" content=\"width=device-"
  },
  {
    "path": "docs/zh/guide/directive.html",
    "chars": 45130,
    "preview": "<!DOCTYPE html>\n<html lang=\"zh-CN\">\n  <head>\n    <meta charset=\"utf-8\">\n    <meta name=\"viewport\" content=\"width=device-"
  },
  {
    "path": "docs/zh/guide/fallback.html",
    "chars": 28509,
    "preview": "<!DOCTYPE html>\n<html lang=\"zh-CN\">\n  <head>\n    <meta charset=\"utf-8\">\n    <meta name=\"viewport\" content=\"width=device-"
  },
  {
    "path": "docs/zh/guide/formatting.html",
    "chars": 36803,
    "preview": "<!DOCTYPE html>\n<html lang=\"zh-CN\">\n  <head>\n    <meta charset=\"utf-8\">\n    <meta name=\"viewport\" content=\"width=device-"
  },
  {
    "path": "docs/zh/guide/hot-reload.html",
    "chars": 25191,
    "preview": "<!DOCTYPE html>\n<html lang=\"zh-CN\">\n  <head>\n    <meta charset=\"utf-8\">\n    <meta name=\"viewport\" content=\"width=device-"
  },
  {
    "path": "docs/zh/guide/interpolation.html",
    "chars": 44907,
    "preview": "<!DOCTYPE html>\n<html lang=\"zh-CN\">\n  <head>\n    <meta charset=\"utf-8\">\n    <meta name=\"viewport\" content=\"width=device-"
  },
  {
    "path": "docs/zh/guide/lazy-loading.html",
    "chars": 30670,
    "preview": "<!DOCTYPE html>\n<html lang=\"zh-CN\">\n  <head>\n    <meta charset=\"utf-8\">\n    <meta name=\"viewport\" content=\"width=device-"
  },
  {
    "path": "docs/zh/guide/locale.html",
    "chars": 27009,
    "preview": "<!DOCTYPE html>\n<html lang=\"zh-CN\">\n  <head>\n    <meta charset=\"utf-8\">\n    <meta name=\"viewport\" content=\"width=device-"
  },
  {
    "path": "docs/zh/guide/messages.html",
    "chars": 35077,
    "preview": "<!DOCTYPE html>\n<html lang=\"zh-CN\">\n  <head>\n    <meta charset=\"utf-8\">\n    <meta name=\"viewport\" content=\"width=device-"
  },
  {
    "path": "docs/zh/guide/number.html",
    "chars": 27246,
    "preview": "<!DOCTYPE html>\n<html lang=\"zh-CN\">\n  <head>\n    <meta charset=\"utf-8\">\n    <meta name=\"viewport\" content=\"width=device-"
  },
  {
    "path": "docs/zh/guide/pluralization.html",
    "chars": 41670,
    "preview": "<!DOCTYPE html>\n<html lang=\"zh-CN\">\n  <head>\n    <meta charset=\"utf-8\">\n    <meta name=\"viewport\" content=\"width=device-"
  },
  {
    "path": "docs/zh/guide/sfc.html",
    "chars": 56627,
    "preview": "<!DOCTYPE html>\n<html lang=\"zh-CN\">\n  <head>\n    <meta charset=\"utf-8\">\n    <meta name=\"viewport\" content=\"width=device-"
  },
  {
    "path": "docs/zh/guide/tooling.html",
    "chars": 26246,
    "preview": "<!DOCTYPE html>\n<html lang=\"zh-CN\">\n  <head>\n    <meta charset=\"utf-8\">\n    <meta name=\"viewport\" content=\"width=device-"
  },
  {
    "path": "docs/zh/index.html",
    "chars": 21307,
    "preview": "<!DOCTYPE html>\n<html lang=\"zh-CN\">\n  <head>\n    <meta charset=\"utf-8\">\n    <meta name=\"viewport\" content=\"width=device-"
  },
  {
    "path": "docs/zh/installation.html",
    "chars": 27201,
    "preview": "<!DOCTYPE html>\n<html lang=\"zh-CN\">\n  <head>\n    <meta charset=\"utf-8\">\n    <meta name=\"viewport\" content=\"width=device-"
  },
  {
    "path": "docs/zh/introduction.html",
    "chars": 22625,
    "preview": "<!DOCTYPE html>\n<html lang=\"zh-CN\">\n  <head>\n    <meta charset=\"utf-8\">\n    <meta name=\"viewport\" content=\"width=device-"
  },
  {
    "path": "docs/zh/legacy/index.html",
    "chars": 53059,
    "preview": "<!DOCTYPE html>\n<html lang=\"zh-CN\">\n  <head>\n    <meta charset=\"utf-8\">\n    <meta name=\"viewport\" content=\"width=device-"
  },
  {
    "path": "docs/zh/legacy/v5.html",
    "chars": 27828,
    "preview": "<!DOCTYPE html>\n<html lang=\"zh-CN\">\n  <head>\n    <meta charset=\"utf-8\">\n    <meta name=\"viewport\" content=\"width=device-"
  },
  {
    "path": "docs/zh/started.html",
    "chars": 28117,
    "preview": "<!DOCTYPE html>\n<html lang=\"zh-CN\">\n  <head>\n    <meta charset=\"utf-8\">\n    <meta name=\"viewport\" content=\"width=device-"
  },
  {
    "path": "examples/.eslintrc.js",
    "chars": 135,
    "preview": "module.exports = {\n  root: true,\n  parserOptions: {\n    ecmaVersion: 2018,\n  },\n  extends: [\n    'plugin:vue-libs/recomm"
  },
  {
    "path": "examples/component/index.html",
    "chars": 1365,
    "preview": "<!DOCTYPE html>\n<html>\n  <head>\n    <meta charset=\"utf-8\">\n    <title>component based translation</title>\n    <script sr"
  },
  {
    "path": "examples/datetime/index.html",
    "chars": 2263,
    "preview": "<!DOCTYPE html>\n<html>\n  <head>\n    <meta charset=\"utf-8\">\n    <title>datetime localization</title>\n    <script src=\"../"
  },
  {
    "path": "examples/directive/index.html",
    "chars": 2182,
    "preview": "<!DOCTYPE html>\n<html>\n  <head>\n    <meta charset=\"utf-8\">\n    <title>custom directive example</title>\n    <script src=\""
  },
  {
    "path": "examples/es-modules/index.html",
    "chars": 708,
    "preview": "<!DOCTYPE html>\n<html>\n  <head>\n    <meta charset=\"utf-8\">\n    <title>ES modules browser example</title>\n  </head>\n  <bo"
  },
  {
    "path": "examples/formatting/custom/.gitignore",
    "chars": 214,
    "preview": ".DS_Store\nnode_modules\n/dist\n\n# local env files\n.env.local\n.env.*.local\n\n# Log files\nnpm-debug.log*\nyarn-debug.log*\nyarn"
  },
  {
    "path": "examples/formatting/custom/README.md",
    "chars": 470,
    "preview": "# vue-i18n-custom-formatter-example\n\nCustom formatter example for vue-i18n\n\n> :warning: You must use [the ECMA-402 (Intl"
  },
  {
    "path": "examples/formatting/custom/babel.config.js",
    "chars": 53,
    "preview": "module.exports = {\n  presets: [\n    '@vue/app'\n  ]\n}\n"
  },
  {
    "path": "examples/formatting/custom/package.json",
    "chars": 589,
    "preview": "{\n  \"name\": \"vue-i18n-custom-formatter-example\",\n  \"version\": \"0.1.0\",\n  \"private\": true,\n  \"scripts\": {\n    \"serve\": \"v"
  },
  {
    "path": "examples/formatting/custom/public/index.html",
    "chars": 549,
    "preview": "<!DOCTYPE html>\n<html lang=\"en\">\n  <head>\n    <meta charset=\"utf-8\">\n    <meta http-equiv=\"X-UA-Compatible\" content=\"IE="
  },
  {
    "path": "examples/formatting/custom/src/App.vue",
    "chars": 1285,
    "preview": "<template>\n  <div id=\"app\">\n    <div class=\"locale\">\n      <select v-model=\"locale\" @change=\"$i18n.locale = locale\">\n   "
  },
  {
    "path": "examples/formatting/custom/src/formatter.js",
    "chars": 2105,
    "preview": "import MessageFormat from 'messageformat'\n\nexport default class CustomFormatter {\n  constructor (options = {}) {\n    thi"
  },
  {
    "path": "examples/formatting/custom/src/i18n.js",
    "chars": 1066,
    "preview": "import Vue from 'vue'\nimport VueI18n from 'vue-i18n'\nimport Formatter from './formatter'\n\nVue.use(VueI18n)\n\nconst locale"
  },
  {
    "path": "examples/formatting/custom/src/main.js",
    "chars": 135,
    "preview": "import Vue from 'vue'\nimport App from './App.vue'\nimport i18n from './i18n'\n\nnew Vue({\n  i18n,\n  render: h => h(App)\n})."
  },
  {
    "path": "examples/formatting/escape-parameter-html/index.html",
    "chars": 844,
    "preview": "<!DOCTYPE html>\n<html>\n  <head>\n    <meta charset=\"utf-8\">\n    <title>Escape parameter HTML example</title>\n    <script "
  },
  {
    "path": "examples/formatting/html/index.html",
    "chars": 643,
    "preview": "<!DOCTYPE html>\n<html>\n  <head>\n    <meta charset=\"utf-8\">\n    <title>html formatting example</title>\n    <script src=\"."
  },
  {
    "path": "examples/formatting/html-warning/index.html",
    "chars": 723,
    "preview": "<!DOCTYPE html>\n<html>\n  <head>\n    <meta charset=\"utf-8\">\n    <title>HTML locale message warning option example</title>"
  },
  {
    "path": "examples/formatting/list/index.html",
    "chars": 643,
    "preview": "<!DOCTYPE html>\n<html>\n  <head>\n    <meta charset=\"utf-8\">\n    <title>list formatting example</title>\n    <script src=\"."
  },
  {
    "path": "examples/formatting/named/index.html",
    "chars": 652,
    "preview": "<!DOCTYPE html>\n<html>\n  <head>\n    <meta charset=\"utf-8\">\n    <title>named formatting example</title>\n    <script src=\""
  },
  {
    "path": "examples/formatting/rails/index.html",
    "chars": 661,
    "preview": "<!DOCTYPE html>\n<html>\n  <head>\n    <meta charset=\"utf-8\">\n    <title>ruby on rails formatting example</title>\n    <scri"
  },
  {
    "path": "examples/hot/.gitignore",
    "chars": 214,
    "preview": ".DS_Store\nnode_modules\n/dist\n\n# local env files\n.env.local\n.env.*.local\n\n# Log files\nnpm-debug.log*\nyarn-debug.log*\nyarn"
  },
  {
    "path": "examples/hot/README.md",
    "chars": 295,
    "preview": "# vue-i18n-hot-module-replacement\n\n## Project setup\n```\nnpm install\n```\n\n### Compiles and hot-reloads for development\n``"
  },
  {
    "path": "examples/hot/babel.config.js",
    "chars": 53,
    "preview": "module.exports = {\n  presets: [\n    '@vue/app'\n  ]\n}\n"
  },
  {
    "path": "examples/hot/package.json",
    "chars": 549,
    "preview": "{\n  \"name\": \"vue-i18n-hot-module-replacement\",\n  \"version\": \"0.1.0\",\n  \"private\": true,\n  \"scripts\": {\n    \"serve\": \"vue"
  },
  {
    "path": "examples/hot/public/index.html",
    "chars": 543,
    "preview": "<!DOCTYPE html>\n<html lang=\"en\">\n  <head>\n    <meta charset=\"utf-8\">\n    <meta http-equiv=\"X-UA-Compatible\" content=\"IE="
  }
]

// ... and 356 more files (download for full content)

About this extraction

This page contains the full source code of the kazupon/vue-i18n GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 556 files (5.2 MB), approximately 1.4M tokens, and a symbol index with 875 extracted functions, classes, methods, constants, and types. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.

Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.

Copied to clipboard!