搜尋

首頁  >  問答  >  主體

vuejs3 I18n 和組合 API

我現在正在使用 vueJS 做一個前端介面,並且目前正在使用 vuejs 3 和 i18n。 i18n 的實作以正常方式運作得很好,但是當我想將它與組合 API 一起使用時,就會出現問題。

所以我做了什麼。我的 main.js 如下:

const i18n = createI18n({
    messages: {
        en: en,
        fr: fr
    },
    fallbackLocale: 'en',
    locale: localStorage.Language || navigator.language.split('-')[0] || 'en',
})
const app = createApp(App)


app.use(router)
app.use(i18n)

app.mount('#app')

我在文件中看到要使用組合API,我必須加入legacy:false,所以我這麼做了。然後我的 $t 就不再起作用了。我進一步查看文檔並到達了我迷失的地方。文件說要使用這個:

const app = Vue.createApp({
  setup() {
    const { t } = VueI18n.useI18n() // call `useI18n`, and spread `t` from  `useI18n` returning
    return { t } // return render context that included `t`
  }
})

我的問題是我的createApp已經像這樣使用了:

const app = createApp(App)

這是 Vuejs 的預設實作。 我嘗試修改它,在應用程式之後添加設置,之前,刪除應用程式沒有任何效果,我認為我做了越來越多的愚蠢的事情。

有人知道如何讓 i18n 與組合 API 一起運作嗎?最終目標基本上是使用組合 API 製作的元件 switchLanguage 來存取 $i18n (獲取一些資訊並管理我的語言切換)

預先感謝您提供的協助。

P粉014218124P粉014218124275 天前605

全部回覆(1)我來回復

  • P粉237647645

    P粉2376476452024-03-26 11:42:48

    您已經在應用程式上的 main.js 中實例化了 i18n。這是重要的一點。

    文件中提供的範例不一定必須在 createApp 中定義的實例上完成。它適用於任何元件,只要您在 main 上實例化了 i18n。 (js|ts)

    這適用於任何元件(無論您需要 t):

    import { useI18n } from "vue-i18n";
    
    export default defineComponent({
      setup() {
        const { t } = useI18n();
        // you can now use t('some.text.to.be.translated')
        // t('some.text.to.be.pluralized', { n: 1 }, 1);
    
        return {
          // expose `t` to