Nuxt3 雖然可以使用 useStore 方法來操作 vuex,但是既然都是基於 Vue3 了,使用 pinia 來管理比較順手一點,雖然 Pinia 有針對 Nuxt 安裝的說明文件,但是安裝上可能還是會出錯,以下作法是參考這個 Nuxt Github 的 issue:
npm install pinia @pinia/nuxt --legacy-peer-deps
export default defineNuxtConfig({
modules: [
// ...
'@pinia/nuxt',
],
})
目前 i18n 相關套件還在發展階段,要有踩雷的心理準備,引入方式有兩種,直接使用 vue-i18n 或是使用 nuxt/i18n。
可以參考 vue-i18n 官方文件 來設置,文件中也有提到,目前只支援基本的內容文字變換,如果要替換 SEO 中寫在 tag 的資訊是做不到的。
以下是安裝步驟:
npm install --save-dev vue-i18n
import { createI18n } from 'vue-i18n'
// 以下語系自行添加
import en from '../locales/en.json'
import fr from '../locales/fr.json'
import ja from '../locales/ja.json'
export default defineNuxtPlugin(({ vueApp }) => {
const i18n = createI18n({
legacy: false,
globalInjection: true,
locale: 'en',
// 以下引入各語系
messages: {
en,
fr,
ja
}
})
vueApp.use(i18n)
})
npm install --save-dev @intlify/unplugin-vue-i18n
import { defineNuxtConfig } from 'nuxt'
// 新增下面三項
import { resolve, dirname } from 'node:path'
import { fileURLToPath } from 'url'
import VueI18nVitePlugin from '@intlify/unplugin-vue-i18n/vite'
// https://v3.nuxtjs.org/api/configuration/nuxt.config
export default defineNuxtConfig({
// 加入以下設定
vite: {
plugins: [
VueI18nVitePlugin({
include: [
resolve(dirname(fileURLToPath(import.meta.url)), './locales/*.json')
]
})
]
}
})
You are running the esm-bundler build of vue-i18n. It is recommended to configure your bundler to explicitly replace feature flag globals with boolean literals to get proper tree-shaking in the final bundle.
alias: {
'vue-i18n': 'vue-i18n/dist/vue-i18n.cjs.js'
}
目前版本還在 v8.0.0-alpha.1(google 直接搜尋只會看到 v7 的文件),因為看起來發展狀態比 vue-i18n 還更不成熟,以下只提供相關連結: