Vue.js2からVue.js3にアップデートするとVueI18nでSyntaxError: Invalid argumentになった

Vue.jsのバージョンを2→3に上げるといくつかの壁にぶち当たります。その中の一つに多言語ライブラリのVueI18nの中の、翻訳API($tおよびt関数)が文字列のみを返すようになったことがあります。
これにより、これらの関数にオブジェクトや配列を渡すとSyntaxError: Invalid argumentエラーが発生します。

エラーの原因

VueI18nの以前のバージョンでは、$tt関数にオブジェクトや配列を渡すことが可能でした。しかし、Vue 3とVueI18nの最新バージョンでは、これらの関数は文字列のみを返すように変更されています。この変更は、VueI18nの公式マイグレーションガイドに明記されています。

暫定的な解決策

このエラーの暫定的な解決策の一つは、オブジェクトをString()でラップすることです。この方法は、オブジェクトを文字列に変換し、$tt関数に渡すことでエラーを回避できます。

let myObject = { hello: 'world' };
this.$t(String(myObject));

$tmを使う

VueI18nのv.9.0.0からは$tm関数も提供しており、これはオブジェクトや配列を返すことができます。これにより、$tt関数の代わりに$tm関数を使用してオブジェクトや配列を渡すことができます。

let message = this.$tm('messageKey');

コメントを残す

入力エリアすべてが必須項目です。メールアドレスが公開されることはありません。

内容をご確認の上、送信してください。