工程部署
LocalizationSEO Ready

多語言 (i18n)

在全球化的時代,支援多語言是必備功能。Nuxt 官方提供了 @nuxtjs/i18n 模組,讓國際化 (Internationalization) 變得簡單且強大。

安裝與設定

首先安裝 @nuxtjs/i18n 模組。

Terminal
pnpm add @nuxtjs/i18n

nuxt.config.ts 中進行配置:

nuxt.config.ts
export default defineNuxtConfig({
  modules: ['@nuxtjs/i18n'],
  
  i18n: {
    locales: [
      { code: 'en', iso: 'en-US', name: 'English', file: 'en.json' },
      { code: 'zh', iso: 'zh-TW', name: '繁體中文', file: 'zh.json' }
    ],
    defaultLocale: 'zh',
    strategy: 'prefix_except_default', // 預設語言不加前綴,其他語言加 /en
    lazy: true, // 懶加載翻譯檔
    langDir: 'locales', // 翻譯檔目錄
    detectBrowserLanguage: {
      useCookie: true,
      cookieKey: 'i18n_redirected',
      redirectOn: 'root'
    }
  }
})

基本用法

在 Vue 元件中,使用 $t 函數來顯示翻譯內容。

locales/zh.json
JSON
{
  "welcome": "歡迎來到 Nuxt",
  "about": "關於我們"
}
app.vue
Vue
<template>
  <h1>{{ $t('welcome') }}</h1>
  
  <!-- 切換語言按鈕 -->
  <NuxtLink :to="switchLocalePath('en')">
    English
  </NuxtLink>
</template>

<script setup>
const { locale, setLocale } = useI18n()
</script>

路由策略

@nuxtjs/i18n 會自動為您產生多語言路由。

URLLocale說明
/zh (Default)預設語言首頁
/aboutzh預設語言內頁
/enen英文版首頁
/en/abouten英文版內頁

SEO 支援

模組會自動為每個頁面注入正確的 hreflang 標籤,這對於多語言網站的 SEO 至關重要。

Generated Head Tags

            <link rel="alternate" href="https://example.com/" hreflang="zh-TW" />
            <link rel="alternate" href="https://example.com/en" hreflang="en-US" />
            <link rel="canonical" href="https://example.com/" />