What is @intlify/message-compiler?
@intlify/message-compiler is a powerful tool for compiling and formatting messages in internationalized applications. It is part of the Intlify project, which aims to provide comprehensive internationalization (i18n) solutions for JavaScript applications, particularly those built with Vue.js.
What are @intlify/message-compiler's main functionalities?
Message Compilation
This feature allows you to compile a message string with placeholders into a function that can be executed with a context object to produce a formatted message.
const { compile } = require('@intlify/message-compiler');
const msg = 'Hello, {name}!';
const compiled = compile(msg);
console.log(compiled({ name: 'World' })); // Output: Hello, World!
Custom Formatting
This feature supports custom formatting for numbers, dates, and other data types using the ICU MessageFormat syntax.
const { compile } = require('@intlify/message-compiler');
const msg = 'The price is {price, number, currency}.';
const compiled = compile(msg);
console.log(compiled({ price: 1234.56 })); // Output: The price is $1,234.56.
Pluralization
This feature allows you to handle pluralization in messages, making it easy to provide correct grammar for different quantities.
const { compile } = require('@intlify/message-compiler');
const msg = '{count, plural, one {# item} other {# items}}';
const compiled = compile(msg);
console.log(compiled({ count: 1 })); // Output: 1 item
console.log(compiled({ count: 5 })); // Output: 5 items
Other packages similar to @intlify/message-compiler
intl-messageformat
intl-messageformat is a package that provides similar functionality for formatting messages based on the ICU MessageFormat standard. It is widely used and supports complex message formatting, including pluralization and gender-specific messages. Compared to @intlify/message-compiler, intl-messageformat is more general-purpose and not specifically tied to the Vue.js ecosystem.
messageformat
messageformat is another package that implements the ICU MessageFormat standard. It offers a comprehensive solution for handling internationalized messages, including support for pluralization, gender, and select statements. Like intl-messageformat, it is not tied to any specific framework and can be used in various JavaScript environments.
react-intl
react-intl is a package specifically designed for internationalizing React applications. It provides components and APIs for formatting dates, numbers, and messages, as well as handling pluralization and other localization needs. While it offers similar message formatting capabilities, it is tailored for use with React, unlike @intlify/message-compiler, which is more general-purpose and Vue.js-oriented.
v10.0.0 (2024-09-10T04:41:41Z)
We are excited to announce the release of Vue I18n v10.
We had many contributors.
Thanks for your contributing ❤️
Summary
petite-vue-i18n
General Availability
petite-vue-i18n
is an alternative distribution of Vue I18n, providing only minimal features.
If you don't need the full functionality of vue-i18n and are just looking for basic translation features with a smaller footprint, this will suit your use case.
For more details, please see the docs.
JIT Compilation Enabled by Default
JIT compilation was introduced in v9.3, but it was not enabled by default.
However, it had the following issues:
- CSP restrictions: Difficult to work with service/web workers, edge-side runtimes of CDNs, etc.
- Backend integration: Hard to fetch messages from a backend (e.g., a database via API) and localize them dynamically.
Starting from v10, JIT compilation is enabled by default.
Support for Generated Locale Types
We provide an interface to extend the Locale type in TypeScript, similar to ComponentCustomProperties
in Vue.
This feature is useful when using vue-i18n as part of a framework.
For more details, see the PR for the Nuxt I18n use case.
Changes to $t
and t
Overload Signatures for Legacy API Mode
In Vue I18n v9, $t
and t
had different overload signatures in Composition API mode compared to Legacy API mode.
When migrating from Legacy API mode to Composition API mode, these differences sometimes caused confusion.
Starting from v10, Legacy API mode will use the same $t
and t
overload signatures as Composition API mode.
For details on the signature pattern, see the migration guide.
Deprecation of tc
and $tc
for Legacy API Mode
The t
and $t
functions already support pluralization, so tc
and $tc
can be replaced.
In v10, tc
and $tc
still exist to aid in migration, but they will be fully removed in v11.
If you use them, Vue I18n will display a console warning in your application.
For migration instructions, see the docs.
Dropping Deprecated Features from v9
Some features were marked as deprecated in v9 with warnings.
These deprecated features will be completely removed in v10.
For more details on the deprecated features, see the docs.
🌟 Features
- feat: move to GA from experimental for petite-vue-i18n by @kazupon in https://github.com/intlify/vue-i18n-next/pull/1862
- feat!: default enable for JIT compilation by @kazupon in https://github.com/intlify/vue-i18n-next/pull/1852
- feat: support generated locale type by @BobbieGoede in https://github.com/intlify/vue-i18n/pull/1890
- feat!: change
$t
overloaded signature for Legacy API mode by @kazupon in https://github.com/intlify/vue-i18n-next/pull/1832
❗ Braeking Changes
- breaking: drop translation component
<i18n>
v8.x compatibility by @kazupon in https://github.com/intlify/vue-i18n-next/pull/1844 - breaking: drop
te
behavior v8.x compatibility on v9 by @kazupon in https://github.com/intlify/vue-i18n-next/pull/1845 - feat!: deprecate
tc
and $tc
for Legacy API mode by @kazupon in https://github.com/intlify/vue-i18n-next/pull/1839 - breaking: drop fully
formatter
option codes on Legacy API by @kazupon in https://github.com/intlify/vue-i18n-next/pull/1826 - breaking: drop fully
preserveDirectiveContent
option codes on Legacy API by @kazupon in https://github.com/intlify/vue-i18n-next/pull/1827 - breaking: drop fully
preserve
modifier codes on v-t
directive by @kazupon in https://github.com/intlify/vue-i18n-next/pull/1828 - breaking: drop fully
getChoiceIndex
on Legacy API by @kazupon in https://github.com/intlify/vue-i18n-next/pull/1829 - breaking: drop vue-i18n-bridge by @kazupon in https://github.com/intlify/vue-i18n-next/pull/1816
- breaking: drop
allowComposition
option by @kazupon in https://github.com/intlify/vue-i18n-next/pull/1817 - breaking: drop modulo syntax by @kazupon in https://github.com/intlify/vue-i18n-next/pull/1814
⚡ Improvement Features
- perf: more bundle size optimization by @kazupon in https://github.com/intlify/vue-i18n-next/pull/1851
- fix: type errors by @kazupon in https://github.com/intlify/vue-i18n/pull/1935
- fix(devtools): change vue-devtools label by @kazupon in https://github.com/intlify/vue-i18n/pull/1885
- fix: vue-i18n type definition for vue package by @kazupon in https://github.com/intlify/vue-i18n/pull/1888
- fix: translation interface typing by @kazupon in https://github.com/intlify/vue-i18n-next/pull/1837
- fix: reduce devtools pkgs and size by @kazupon in https://github.com/intlify/vue-i18n-next/pull/1823
✏️ Documentation & Sample Updates
- Improved the global and local Scope descriptions by @pankajrlal in https://github.com/intlify/vue-i18n/pull/1925
- Update ja-JP.json by @awsssrD in https://github.com/intlify/vue-i18n/pull/1914
- Update en-US.json by @awsssrD in https://github.com/intlify/vue-i18n/pull/1913
- chore: fix module augmentation example comment by @BobbieGoede in https://github.com/intlify/vue-i18n/pull/1898
- Added a comment about pluralRules to the code in pluralization docs by @M1h4n1k in https://github.com/intlify/vue-i18n/pull/1873
- docs: fix typos by @SimonVadier in https://github.com/intlify/vue-i18n/pull/1863
- docs: add scoping for custom directive by @kazupon in https://github.com/intlify/vue-i18n/pull/1867
- Update tools.md by @felixhaeberle in https://github.com/intlify/vue-i18n/pull/1866
- Fix typos, syntax by @TheoKondak in https://github.com/intlify/vue-i18n/pull/1881
- fix: typo in migration breaking changes v10 by @khylias in https://github.com/intlify/vue-i18n-next/pull/1854
- docs: fix typo on vue i18n name by @r-moret in https://github.com/intlify/vue-i18n-next/pull/1848
- docs: add favicon by @BobbieGoede in https://github.com/intlify/vue-i18n-next/pull/1824
- docs: fix typos by @BobbieGoede in https://github.com/intlify/vue-i18n-next/pull/1825
- Update started.md to fix typo by @steveclarke in https://github.com/intlify/vue-i18n-next/pull/1822
🐛 Bug Fixes
- fix: fallback linked message params by @kazupon in https://github.com/intlify/vue-i18n/pull/1926
- fix(types):
$t
types by @mitjans in https://github.com/intlify/vue-i18n/pull/1883 - fix: cannot reduce message-compiler bundle size for runtime by @kazupon in https://github.com/intlify/vue-i18n-next/pull/1860
- fix: allow empty default message by @kazupon in https://github.com/intlify/vue-i18n-next/pull/1849
- fix: remove unnecessary types from petite-vue-i18n by @kazupon in https://github.com/intlify/vue-i18n-next/pull/1833
- fix: Not load devtools on Node.js by @kazupon in https://github.com/intlify/vue-i18n-next/pull/1843
- fix(types): allow spyOn of "useI18n()" by @pinguet62 in https://github.com/intlify/vue-i18n-next/pull/1815
New Contributors
- @pinguet62 made their first contribution in https://github.com/intlify/vue-i18n/pull/1815
- @steveclarke made their first contribution in https://github.com/intlify/vue-i18n/pull/1822
- @r-moret made their first contribution in https://github.com/intlify/vue-i18n/pull/1848
- @khylias made their first contribution in https://github.com/intlify/vue-i18n/pull/1854
- @SimonVadier made their first contribution in https://github.com/intlify/vue-i18n/pull/1863
- @felixhaeberle made their first contribution in https://github.com/intlify/vue-i18n/pull/1866
- @mitjans made their first contribution in https://github.com/intlify/vue-i18n/pull/1883
- @TheoKondak made their first contribution in https://github.com/intlify/vue-i18n/pull/1881
- @M1h4n1k made their first contribution in https://github.com/intlify/vue-i18n/pull/1873
- @awsssrD made their first contribution in https://github.com/intlify/vue-i18n/pull/1914
- @pankajrlal made their first contribution in https://github.com/intlify/vue-i18n/pull/1925
Full Changelog: https://github.com/intlify/vue-i18n/compare/v9.13.1...v10.0.0