What is vue-i18n?
The vue-i18n package is a Vue.js plugin for internationalization. It integrates seamlessly with Vue.js applications to enable easy localization and translation of text content within the app. It supports a variety of features including pluralization, datetime formatting, number formatting, and allows for the organization of translation messages in different locales.
What are vue-i18n's main functionalities?
Localization
This feature allows you to localize your application's content. You can define translation messages for different locales and use the $t function to display the translated message based on the current locale.
{"template": "<p>{{ $t('message.hello') }}</p>", "i18n": {"messages": {"en": {"message": {"hello": "Hello World!"}}, "fr": {"message": {"hello": "Bonjour le monde!"}}}}}
Pluralization
Pluralization support allows you to handle singular and plural forms of words depending on the count. The $tc function is used to handle this, and it automatically selects the correct form based on the provided count.
{"template": "<p>{{ $tc('message.plural', 1) }}</p><p>{{ $tc('message.plural', 10) }}</p>", "i18n": {"messages": {"en": {"message": {"plural": "{n} apple|{n} apples"}}}}}
DateTime Formatting
DateTime formatting enables you to format dates and times according to the locale's conventions. The $d function is used to format a JavaScript Date object into a readable string.
{"template": "<p>{{ $d(new Date(), 'short') }}</p>", "i18n": {"dateTimeFormats": {"en": {"short": {"year": "numeric", "month": "short", "day": "numeric"}}}}}
Number Formatting
Number formatting allows you to format numbers in a locale-sensitive manner. The $n function is used to format numbers, such as currencies, percentages, or decimal numbers, according to the locale's formatting rules.
{"template": "<p>{{ $n(1234567.89, 'currency') }}</p>", "i18n": {"numberFormats": {"en": {"currency": {"style": "currency", "currency": "USD"}}}}}
Other packages similar to vue-i18n
react-intl
React Intl is similar to vue-i18n but is designed for React applications. It provides a set of React components and an API to format dates, numbers, and strings, including pluralization and handling translations.
i18next
i18next is a full-featured i18n library for JavaScript. It works with various frameworks, including React, Vue, and Angular. It offers features like pluralization, formatting, and supports backend loading of translation resources, making it a versatile alternative to vue-i18n.
polyglot.js
Polyglot.js is a tiny I18n helper library written in JavaScript, influenced by the Ruby library I18n. It doesn't have direct integration with Vue.js but can be used in any JavaScript application for simple translation purposes, with a straightforward API for interpolation and pluralization.
angular-translate
Angular Translate is an AngularJS module for internationalization. It provides services and directives that enable translation support similar to vue-i18n but is specifically tailored for AngularJS applications.
vue-i18n
Internationalization plugin for Vue.js
Which dist file to use?
From CDN or without a Bundler
With a Bundler
vue-i18n(.runtime).esm-bundler.js
:
- For use with bundlers like
webpack
, rollup
and parcel
- Leaves prod/dev branches with
process.env.NODE_ENV
guards (must be replaced by bundler) - Does not ship minified builds (to be done together with the rest of the code after bundling)
- Imports dependencies (e.g.
@intlify/core-base
, @intlify/message-compiler
)
- Imported dependencies are also
esm-bundler
builds and will in turn import their dependencies (e.g. @intlify/message-compiler
imports @intlify/shared
) - This means you can install/import these deps individually without ending up with different instances of these dependencies, but you must make sure they all resolve to the same version
- In-browser locale messages compilation:
vue-i18n.runtime.esm-bundler.js
(default) is runtime only, and requires all locale messages to be pre-compiled. This is the default entry for bundlers (via module
field in package.json
) because when using a bundler templates are typically pre-compiled (e.g. in *.json
files)vue-i18n.esm-bundler.js
: includes the runtime compiler. Use this if you are using a bundler but still want locale messages compilation (e.g. templates via inline JavaScript strings)
For Node.js (Server-Side)
NOTE: ES Modules will be the future of the Node.js module system. The vue-i18n.cjs(.prod).js
will be deprecated in the future. We recommend you would use vue-i18n(.runtime).node.mjs
. 9.3+
For Bundler feature flags
Build Feature Flags
The esm-bundler
builds now exposes global feature flags that can be overwritten at compile time:
__VUE_I18N_FULL_INSTALL__
(enable/disable, in addition to vue-i18n APIs, components and directives all fully support installation: true
)__VUE_I18N_LEGACY_API__
(enable/disable vue-i18n legacy style APIs support, default: true
)__INTLIFY_JIT_COMPILATION__
(enable/disable message compiler for JIT style, default: false
)__INTLIFY_DROP_MESSAGE_COMPILER__
(enable/disable whether to tree-shake message compiler when we will be bundling, this flag works when __INTLIFY_JIT_COMPILATION__
is enabled. default: false
)
NOTE: __INTLIFY_JIT_COMPILATION__
, __INTLIFY_DROP_MESSAGE_COMPILER__
flag support version, 9.3+
The build will work without configuring these flags, however it is strongly recommended to properly configure them in order to get proper tree shaking in the final bundle. To configure these flags:
Note: the replacement value must be boolean literals and cannot be strings, otherwise the bundler/minifier will not be able to properly evaluate the conditions.
:copyright: License
MIT
v9.6.0 (2023-10-26T03:36:13Z)
This changelog is generated by GitHub Releases
<!-- Release notes generated using configuration in .github/release.yml at v9.6.0 -->
What's Changed
π Features
- feat!: support resource schema type definition for
@intlfy/core-base
(@intlify/core
) by @kazupon in https://github.com/intlify/vue-i18n-next/pull/1594
π Bug Fixes
- fix(examples): remove
@vite-ignore
magic comment by @kazupon in https://github.com/intlify/vue-i18n-next/pull/1590 - fix: cannot resolve flatjson messages when use
setLocaleMessage
by @kazupon in https://github.com/intlify/vue-i18n-next/pull/1601 - fix: strictly key exsisting with
te
by @kazupon in https://github.com/intlify/vue-i18n-next/pull/1602
β‘ Improvement Features
- fix: locale detector type definition by @kazupon in https://github.com/intlify/vue-i18n-next/pull/1591
ποΈ Documentations
- docs: add example link by @kazupon in https://github.com/intlify/vue-i18n-next/pull/1608
Full Changelog: https://github.com/intlify/vue-i18n-next/compare/v9.5.0...v9.6.0