【Vue3】vue-i18nでレガシーモードでは使えませんとエラーがでるときの解決策

おはようございます!そうすけです!

運営者:そうすけ


30代のブロガーとエンジニア。
工場勤務→情シス→ソフトウェアエンジニア
主にフロントエンド開発を行っています。

趣味はガジェットと植物

目次

問題

下記のような記述で、localeをvue-i18n→useI18nから呼び出し、リアクティブになっているlocaleを変更すると、言語設定をあらかじめ設定していた場合、切り替わる様になっている。

グローバルに出力した$t関数を使用していれば、ページ全体でリアクティブに変更される仕様にしていた。

import { createI18n } from 'vue-i18n'
import messages from '@/i18n'

const mi18n = createI18n({
  locale: 'ja',
  globalInjection: true,
  messages
})
export default boot(({ app }) => {
  // Set i18n instance on app
  app.use(mi18n)
})
const $t = mi18n.global.t
export { $t }
    import { useI18n } from 'vue-i18n'
    
    // set lung locale
    const { locale } = useI18n()
    locale.value = 'en-US'

だがVue3+Quaserのプロジェクトで多言語対応の際に、エラーが出て多言語対応ができなかった

Uncaught (in promise) SyntaxError: Not available in legacy mode

対策

デフォルトの設定ではCompositionAPIには対応してない。

なので、設定でlegacy: falseを設定してあげると、変更対応される。

import { createI18n } from 'vue-i18n'

import { boot } from 'quasar/wrappers'

import messages from '@/i18n'

const mi18n = createI18n({
  locale: 'ja',
  globalInjection: true,
  legacy: false, // Composition APIを有効にする
  messages
})
export default boot(({ app }) => {
  // Set i18n instance on app
  app.use(mi18n)
})
const $t = mi18n.global.t
export { $t }
そうすけ

Vue3のCompositionAPIの記法がスタンダードになってきているので、個人的にはここデフォルトの設定で対応しておいてほしいなぁと思いました。

参考記事

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

コメント

コメントする

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)

目次