Vue.jsのバージョンを2→3に上げるといくつかの壁にぶち当たります。その中の一つに多言語ライブラリのVueI18nの中の、翻訳API($t
およびt
関数)が文字列のみを返すようになったことがあります。
これにより、これらの関数にオブジェクトや配列を渡すとSyntaxError: Invalid argument
エラーが発生します。
エラーの原因
VueI18nの以前のバージョンでは、$t
やt
関数にオブジェクトや配列を渡すことが可能でした。しかし、Vue 3とVueI18nの最新バージョンでは、これらの関数は文字列のみを返すように変更されています。この変更は、VueI18nの公式マイグレーションガイドに明記されています。
暫定的な解決策
このエラーの暫定的な解決策の一つは、オブジェクトをString()
でラップすることです。この方法は、オブジェクトを文字列に変換し、$t
やt
関数に渡すことでエラーを回避できます。
let myObject = { hello: 'world' };
this.$t(String(myObject));
$
tmを使う
VueI18nのv.9.0.0からは$tm
関数も提供しており、これはオブジェクトや配列を返すことができます。これにより、$t
やt
関数の代わりに$tm
関数を使用してオブジェクトや配列を渡すことができます。
let message = this.$tm('messageKey');