nuxt.js安装国际化插件i18n

2025-04-05
1941 分钟
...

国际化i18n配置

  1. 安装依赖
npm install @nuxtjs/i18n
  1. 配置i18n
modules: [
    '@nuxtjs/i18n'
  ],
  i18n: {
    langDir: '../locales/',
    defaultLocale: 'zh',
    detectBrowserLanguage: {
      useCookie: true,
      cookieKey: 'i18n_redirected',
      alwaysRedirect: true,
      
    },
    
    strategy: 'no_prefix',
    locales: [
      {
        code: 'zh',
        file: 'zh.ts',
        name: '简体中文'
      },
      {
        code: 'en',
        file: 'en.ts',
        name: 'English'
      }
    ]
  }
  1. 使用i18n
    LanguageSwitcher.vue
<template>
  <div class="language-switcher">
    <select v-model="locale" @change="switchLanguage">
      <option 
        v-for="lang in availableLocales" 
        :key="lang.code" 
        :value="lang.code"
      >
        {{ lang.name }}
      </option>
    </select>
  </div>
</template>

<script setup lang="ts">
const { locale, locales } = useI18n()
const switchLocalePath = useSwitchLocalePath()
const router = useRouter()

const availableLocales = computed(() => {
  return (locales.value).map(l => {
    return {
      code: l.code,
      name: l.name
    }
  })
})

const switchLanguage = () => {
  const path = switchLocalePath(locale.value)
  if (path) {
    router.push(path).then(() => {
      window.location.reload() // 强制刷新页面
    })
  }
}
</script>

<style scoped lang="less">
.language-switcher {
  select {
    padding: @spacing-sm @spacing-md;
    border: 1px solid @border-color;
    border-radius: @border-radius-md;
    background-color: transparent;
    color: @light-text-color;
    cursor: pointer;

    &:hover {
      border-color: @secondary-color;
    }

    option {
      padding: 10px;
      background-color: @primary-color;
      color: @light-text-color;
    }
  }
}
</style>
  1. 创建语言文件
    /locales/en.ts
export default {
  welcome: 'Welcome',
  nav: {
    home: 'Home',
    about: 'About'
  },
  content: {
    title: 'My Project',
    body: 'This is a project built with Nuxt3',
    footer: '© 2024 All rights reserved'
  },
  sidebar: {
    left: 'Left Sidebar',
    right: 'Right Sidebar'
  }
}

/locales/zh.ts

export default {
  welcome: '欢迎',
  nav: {
    home: '首页',
    about: '关于'
  },
  content: {
    title: '我的项目',
    body: '这是一个使用 Nuxt3 构建的项目',
    footer: '© 2024 版权所有'
  },
  sidebar: {
    left: '左侧栏目',
    right: '右侧栏目'
  }
}

在需要国际化的地方通过{{ $t(‘sidebar.right’) }}的形式来使用

运行项目后,可以引入切换按钮进行语言切换

 

 

ps:切换语言后需要刷新页面才会正确显示

如果您觉得这篇文章有帮助,请点个赞吧~

分享文章

相关文章

更多文章 →
nuxt2025-10-24
Nuxt 中 process.client 与 import.meta.client 的区别
一、来源与定义 | 对比项 | process.client | import.meta.client | | | | | | 来源 | Nuxt 内置的运行时变量(兼容 Node 风格) | Vite 原生 ESM 构建标志 | | 定义位置 | Nuxt 在构建阶段自动注入到全局 | Vite 在编译阶段静态替换 | | 作用机制 | 运行时判断变量 | 构建时编译宏(静态替换) | | 语法类型 | CommonJS 风格 | E...
学习
nuxt2025-10-22
Nuxt SSR 与 Next.js SSR
🧭 引言 在现代前端生态中, Nuxt(Vue) 与 Next.js(React) 是最成熟的两大全栈框架。 它们都具备 SSR(Server Side Rendering) 能力,但实现原理与运行机制差异巨大。 如果你在使用 Nuxt 构建 SSR 项目,却发现“路由跳转后不再 SSR”, 而在 Next.js 中同样操作却会重新发起服务端渲染——这不是 bug,而是 理念差异 。 本文将详细对比这两种框架的 SSR 行为,帮助你彻...
学习面试
nuxt2025-09-24
nuxt4制作企业官网
SASS 1、引入SASS 2、配置文件目录 可以注入 SCSS 变量或 mixin 到每个 样式块。 推荐使用 而不是 ,因为 会重复加载。 注意路径 是相对于项目根目录。 3、创建2个文件 问题: 如果用 ,变量仍然可以访问,但 mixin 和函数也要全局注入。 不要在 里再 自己的 ,会出现循环依赖。 不能在global.scss写预设变量,会报错 也可以直接写变量,而不通过单独文件: 4、使用 打包SSG 静态文件 1、配置文件...
学习
nuxt2025-04-08
Nuxt3 使用 ElementUI Plus报错问题
&nbsp;解决方式:官方组件需要被包裹一层,如以下示例:
学习
nuxt2025-04-05
Nuxt3实现事件总线EventBus
事件总线 这里我是用得是 这个库, 是一个微型的 EventEmitter 库 安装 在plugins文件夹下建立mitt.ts文件 使用: A页面 B页面
学习
nuxt2025-04-05
useState全局状态管理与localStorage本地存储持久化
一、 Nuxt3中的全局状态管理 1\. 介绍 这是Nuxt3为我们准备的全局状态管理,且 支持响应式 ,可以无需使用pinia等,直接在项目中使用。 官网文档 : 、 注意事项 : · 由于会把State存储为JSON,所以请不要存储不能被JSON化的数据,比如类、函数、Symbol等 · 为了让我们的状态管理能在任何地方使用(不止在setup中),最好统一使用函数的写法,见下 2\. 基本使用 · 创建文件 在根目录下的 /comp...
学习

评论

请登录后发表评论

去登录
加载评论中...

目录