V7

基本使用

nuxt/i18n v7 模块的基本使用。

使用 @nuxtjs/i18n 的最快方式是定义支持的 locales 列表,并通过 vueI18n 选项提供一些翻译消息给 vue-i18n

nuxt.config.ts
{
  modules: [
    '@nuxtjs/i18n'
  ],

  i18n: {
    locales: ['en', 'fr', 'es'],
    defaultLocale: 'en',
    vueI18n: {
      fallbackLocale: 'en',
      messages: {
        en: {
          welcome: 'Welcome'
        },
        fr: {
          welcome: 'Bienvenue'
        },
        es: {
          welcome: 'Bienvenido'
        }
      }
    }
  }
}

通过这个设置,@nuxtjs/i18n 为你所有的页面生成本地化的 URL,使用在 locales 选项中提供的代码作为前缀,除了 defaultLocale (了解更多信息请参阅 routing)。

vueI18n 选项被原样传递给 vue-i18n,有关可用选项,请参考 文档

在你的应用中使用 <nuxt-link> 渲染内部链接时,你需要为当前语言获取正确的 URL。为此,@nuxtjs/i18n 注册了一个全局混入,提供了一些辅助函数:

  • localePath – 返回给定页面的本地化 URL。第一个参数可以是路径或路由名称,或者更复杂路由的对象。可以将语言代码作为第二个参数传入,以生成特定语言的链接:
<nuxt-link :to="localePath('index')">{{ $t('home') }}</nuxt-link>
<nuxt-link :to="localePath('/')">{{ $t('home') }}</nuxt-link>
<nuxt-link :to="localePath('index', 'en')">Homepage in English</nuxt-link>
<nuxt-link :to="localePath('/app/profile')">Route by path to: {{ $t('Profile') }}</nuxt-link>
<nuxt-link :to="localePath('app-profile')">Route by name to: {{ $t('Profile') }}</nuxt-link>
<nuxt-link :to="localePath({ name: 'category-slug', params: { slug: category.slug } })">
  {{ category.title }}
</nuxt-link>
<!-- 还可以省略 'name' 和 'path'。 -->
<nuxt-link :to="localePath({ params: { slug: 'ball' } })">{{ category.title }}</nuxt-link>

请注意,localePath 可以使用路由的未加前缀的路径,该路径必须以 '/' 开头或路由的基本名称来生成本地化 URL。基本名称对应于 Nuxt 在解析你的 pages/ 目录时生成的名称,更多信息请参见 Nuxt 的文档

  • switchLocalePath – 返回当前页面在另一种语言下的链接:
<nuxt-link :to="switchLocalePath('en')">English</nuxt-link>
<nuxt-link :to="switchLocalePath('fr')">Français</nuxt-link>

为了方便,这些方法在应用的上下文中也可用:

/plugins/myplugin.js
export default ({ app }) => {
  // 获取主页的本地化路径
  const localePath = app.localePath('index')
  // 获取切换当前路由到法语的路径
  const switchLocalePath = app.switchLocalePath('fr')
}
  • localeRoute – 返回给定页面的 Route 对象。它的工作方式类似于 localePath,但返回由 Vue Router 解析的路由,而不仅仅是完整的路由路径。这可能是有用的,因为从 localePath 返回的完整路径可能不包含所提供输入的所有信息(例如页面未指定的路由参数)。
const { fullPath } = localeRoute({ name: 'index', params: { foo: '1' } })
  • localeLocation – 返回给定页面的 Location 对象。它的工作方式类似于 localePath,但返回由 Vue Router 解析的 Location,而不仅仅是完整的路由路径。这可能是有用的,因为从 localePath 返回的完整路径可能不包含所提供输入的所有信息(例如页面未指定的路由参数)。
<a href="#" @click="$router.push(localeLocation({ name: 'index', params: { foo: '1' } }))">
导航
</a>