天天看點

【nuxt2/nuxt3】@nuxtjs/i18n國際化前言使用@nuxtjs/i18n插件步驟nuxt2使用插件步驟nuxt3使用插件步驟4.一些通用的錯誤提示

文章目錄

  • 前言
  • 使用@nuxtjs/i18n插件步驟
  • nuxt2使用插件步驟
    • 1.安裝依賴
    • 2.配置項
    • 3.使用方法
  • nuxt3使用插件步驟
    • 1.安裝依賴
    • 2.配置項
    • 3.在頁面中的使用方法
  • 4.一些通用的錯誤提示

前言

在網上閱讀的大部分nuxt國際化案例都還在使用

vue-i18n

插件做教程,實際上

nuxt

本身就已經基于

vue-i18n

封裝了

@nuxtjs/i18n

插件。而且它比

vue-i18n

封裝了更多好用的功能,具體的使用方法我們可以檢視官方文檔

但是

nuxtjs/i18n

官方好像沒有做中文翻譯,是以我在這裡出了一篇中文教程。

第一這個插件比vue-i18n用起來更友善,第二沒有太多的中文教程,第三把nuxt2和nuxt3的使用教程都做了進去。

  • 與vue-i18n內建
  • 自動生成路由和自定義路徑
  • 搜尋引擎優化
  • 延遲加載翻譯消息
  • 基于自動檢測語言的重定向
  • 不同語言的域名不同
  • 使用Vuex存儲目前地區和消息

本文相關文獻:

https://i18n.nuxtjs.org/setup

https://github.com/nuxt-modules/i18n/tree/main

使用@nuxtjs/i18n插件步驟

nuxt2使用插件步驟

注意以下内容的教程版本是nuxt2!!!!!

nuxt3在下一節

1.安裝依賴

yarn add @nuxtjs/i18n # yarn

npm i @nuxtjs/i18n # npm
           

2.配置項

github上給的案例非常簡單,但是不便于維護,是以我們簡單的封裝下,拆分出語言配置部分友善我們後期增加、删除、編輯單詞等維護操作

首先我們在

assets

中建立

lang

檔案夾,以中文和英文舉例,建立

en_us.js

zh_cn.js

檔案

【nuxt2/nuxt3】@nuxtjs/i18n國際化前言使用@nuxtjs/i18n插件步驟nuxt2使用插件步驟nuxt3使用插件步驟4.一些通用的錯誤提示

檔案中的内容是我們定義好的關鍵詞,所有需要切換語言的關鍵詞都放入這兩個js檔案管理

注意:兩個檔案内的key一定要對應起來,否則,就會使用預設語言的key,如果預設語言的key也沒有就顯示成$t内的字元名稱
//en
export default {
  welcome: 'hello',
  messages:'world!'
}
//zh
export default {
  welcome: '你好',
  messages:'世界!'
}
           

然後我們在

plugins

目錄下建立一個

i18n的js檔案

【nuxt2/nuxt3】@nuxtjs/i18n國際化前言使用@nuxtjs/i18n插件步驟nuxt2使用插件步驟nuxt3使用插件步驟4.一些通用的錯誤提示

``

引入定義好的語言關鍵詞檔案

import en_us from '../assets/lang/en_us.js'
import zh_cn from '../assets/lang/zh_cn.js'


const i18n = {
  locales: ['en', 'zh'],//有多少地區的語言就添加多少種
  defaultLocale: 'en',//預設的地區語言
  vueI18n: {
    fallbackLocale: 'en',//回退政策,指定的locale中沒有找到對應資源的情況下使用的locale
    messages: { //要渲染的資訊,有多少語言就添加多少種
      en: en_us,
      zh: zh_cn
    }
  }

}

export default i18n
           

最後我們要把配置項引入并放到

nuxt.config.js

// nuxt.config.js
import i18n from './plugins/i18n'
{
  modules: [
    [
      '@nuxtjs/i18n',
      i18n
    ]
  ]
}
           

3.使用方法

  • 在頁面展示使用:

    $t("welcome")

  • 切換語種使用:

    <nuxt-link :to="switchLocalePath('en')">en</nuxt-link>

  • 特殊的路由導航方式:

    <NuxtLink :to="localePath('/test')">跳轉</NuxtLink>

  • 獲得執行個體方法:

    this.$i18n

注意:由于切換語言後url會改變,但是NuxtLink導航标簽跳轉時無法自動識别使用者切換的語言,是以nuxt/i18n提供了localePath方法幫助我們導航時識别目前使用者選擇的語言。

完整示例:

<template>
  <div>
    {{ $t("welcome") }}
    {{ $t("messages") }}
    <hr>
    切換語言:
    <nuxt-link :to="switchLocalePath('en')">en</nuxt-link>
    <br>
    <nuxt-link :to="switchLocalePath('zh')">zh</nuxt-link>
    路由跳轉(前提是配置好test路由):
     <NuxtLink :to="localePath('/test')">跳轉</NuxtLink>
    <br>
    <button @click="getI18n">擷取到i18n執行個體</button>
  </div>
</template>

<script>
export default {
  name: "IndexPage",
  components: {},
  data() {
    return {};
  },
  methods: {
    getI18n() {
      console.log(this.$i18n);
    }
  },
  mounted() {},
  asyncData() {},
};
</script>
           

nuxt3使用插件步驟

注意本文的教程版本是nuxt3!!!!!

1.安裝依賴

yarn add @nuxtjs/i18n # yarn

npm i @nuxtjs/i18n # npm
           

2.配置項

github上給的案例非常簡單,但是不便于維護,是以我們簡單的封裝下,拆分出語言配置部分友善我們後期增加、删除、編輯單詞等維護操作

首先我們在

assets

中建立

lang

檔案夾,以中文和英文舉例,建立

en_us.js

zh_cn.js

檔案

【nuxt2/nuxt3】@nuxtjs/i18n國際化前言使用@nuxtjs/i18n插件步驟nuxt2使用插件步驟nuxt3使用插件步驟4.一些通用的錯誤提示

檔案中的内容是我們定義好的關鍵詞,所有需要切換語言的關鍵詞都放入這兩個js檔案管理

注意:兩個檔案内的key一定要對應起來,否則,就會使用預設語言的key,如果預設語言的key也沒有就顯示成$t内的字元名稱
//en
export default {
  welcome: 'hello',
  messages:'world!'
}
//zh
export default {
  welcome: '你好',
  messages:'世界!'
}
           

然後我們在

plugins

目錄下建立一個

i18n的ts檔案

【nuxt2/nuxt3】@nuxtjs/i18n國際化前言使用@nuxtjs/i18n插件步驟nuxt2使用插件步驟nuxt3使用插件步驟4.一些通用的錯誤提示

引入定義好的語言關鍵詞檔案

import en_us from '../assets/lang/en_us.ts'
import zh_cn from '../assets/lang/zh_cn.ts'


const i18n = {
  locales: ['en', 'zh'],//有多少地區的語言就添加多少種
  defaultLocale: 'en',//預設的地區語言
  vueI18n: {
    fallbackLocale: 'en',//回退政策,指定的locale中沒有找到對應資源的情況下使用的locale
    messages: { //要渲染的資訊,有多少語言就添加多少種
      en: en_us,
      zh: zh_cn
    }
  }

}

export default i18n
           

最後我們要把配置項引入并放到

nuxt.config.ts

// nuxt.config.ts
import i18n from './plugins/i18n'
export default defineNuxtConfig({ 
  modules: [
    ['@nuxtjs/i18n',i18n]
  ],
})
           

3.在頁面中的使用方法

nuxt2

不同,

nuxt3

版本封裝了一個

hook

useSwitchLocalePath

友善我們再

setup

文法糖中使用

nuxt-link

标簽切換語言

  • 在頁面展示使用:

    $t("welcome")

  • 切換語種使用:

    <NuxtLink :to="switchLocalePath('en')">en</NuxtLink>

    +

    useSwitchLocalePath()

  • 特殊的路由導航方式:

    <NuxtLink :to="localePath('/test')">跳轉</NuxtLink>

  • 獲得執行個體方法:

    useI18n()

完整示例:

<template>
  <div class="app">
    <div class="title">
      {{ $t("welcome") }}
      {{ $t("messages") }}
    </div>

    <div>
    切換語言:
      <NuxtLink :to="switchLocalePath('en')">en</NuxtLink>
      <NuxtLink :to="switchLocalePath('zh')">zh</NuxtLink>
    路由跳轉(前提是配置好test路由):
     <NuxtLink :to="localePath('/test')">跳轉</NuxtLink>
      <button @click="getI18n">擷取到i18n執行個體</button>
    </div>
  </div>
</template>

<script lang="ts" setup>
import { useI18n } from "#imports"

const switchLocalePath = useSwitchLocalePath()
const localePath = useLocalePath();
const i18n = useI18n();

const getI18n = () => {
  console.log(i18n);
};
</script>
           

4.一些通用的錯誤提示

!!!注意:一定要仔細的确認中英文内的關鍵詞key相同

否則會觸發

fallbackLocale: 'en'

回退政策,指定的locale中沒有找到對應資源的情況下使用的locale

如果還沒找到就隻傳回

$t

内的字元

如果我們定義的關鍵詞檔案,key不同時浏覽器會發警告

舉例:當我們把

zh_cn.js

中的

messages

改成了

message

【nuxt2/nuxt3】@nuxtjs/i18n國際化前言使用@nuxtjs/i18n插件步驟nuxt2使用插件步驟nuxt3使用插件步驟4.一些通用的錯誤提示
【nuxt2/nuxt3】@nuxtjs/i18n國際化前言使用@nuxtjs/i18n插件步驟nuxt2使用插件步驟nuxt3使用插件步驟4.一些通用的錯誤提示

浏覽器就出現了警告

點選切換後因為’messages’和’message’不同,是以内容沒有切換過來使用了回退政策

fallbackLocale: 'en'

,預設使用’messages’英語’world’

中文模式中hello因為key相同已經切換成‘你好’。

是以一定要把所有語言的

key

都統一才行!!!

【nuxt2/nuxt3】@nuxtjs/i18n國際化前言使用@nuxtjs/i18n插件步驟nuxt2使用插件步驟nuxt3使用插件步驟4.一些通用的錯誤提示
【nuxt2/nuxt3】@nuxtjs/i18n國際化前言使用@nuxtjs/i18n插件步驟nuxt2使用插件步驟nuxt3使用插件步驟4.一些通用的錯誤提示

繼續閱讀