Skip to content

5. 国际化配置

1. Nuxt 配置

如果没有特殊的国际化内容或 SEO 需求,可直接使用 no_prefix 模式。

ts
export default defineNuxtConfig({
  i18n: {
    defaultLocale: 'zh',
    detectBrowserLanguage: {
      cookieKey: 'i18n_redirected',
      redirectOn: 'root',
      useCookie: true,
    },
    locales: [
      {
        code: 'en',
        iso: 'en-US',
        name: 'English',
      },
      {
        code: 'zh',
        iso: 'zh-CN',
        name: '简体中文',
      },
      {
        code: 'tw',
        iso: 'zh-TW',
        name: '繁體中文',
      },
      {
        code: 'ja',
        iso: 'ja-JP',
        name: '日本語',
      },
    ],
    strategy: 'no_prefix',
  },
  modules: [
    '@nuxtjs/i18n',
  ],
})

如果有特殊的国际化内容或 SEO 需求,可使用 prefix_except_default 模式。

2. 使用国际化

我们的国际化使用扁平的 YAML 方式配置,优点是能显著降低心智负担,同时做到细致切分,显著降低编译后客户端的国际化文件大小。

同时,全局的国际化配置仍然有效,使用 $t() 即可翻译任何全局配置的国际化信息。

在需要配置国际化信息的 Vue 页面或组件中,使用 YAML 语法配置:

vue
<script setup lang="ts">
const { t } = useI18n({ useScope: 'local' })
</script>

<template>
  <h1>{{ t('title') }}</h1>
</template>

<i18n lang="yaml">
en:
  title: "Hello World"
zh:
  title: "你好,世界"
tw:
  title: "你好,世界"
ja:
  title: "こんにちは、世界"
</i18n>