news 2026/4/15 11:13:39

【前端开发】Nuxt.js 国际化插件 i18n 使用指南

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
【前端开发】Nuxt.js 国际化插件 i18n 使用指南

@nuxtjs/i18n

  • 官方文档:Nuxt I18n
  • @nuxtjs/i18n 是 Nuxt 官方基于 vue-i18n (Vue.js 的通用国际化插件)封装的国际化(i18n)模块,用于为 Nuxt 应用提供多语言支持。它简化了多语言路由、语言切换、翻译管理等功能的实现。

核心功能

  • 多语言路由:自动为不同语言生成路由(如/en/about/zh/about)。
  • 语言切换:内置语言切换组件或 API,支持动态切换语言。
  • 翻译管理:支持 JSON 文件或异步加载翻译内容,兼容 Vue I18n。
  • SEO 优化:自动处理语言标签(hreflang)和元信息,提升多语言 SEO。

安装插件

npm install --save @nuxtjs/i18n

版本兼容性

  • Nuxt 2:需安装 vue-i18n 并手动集成,或使用 @nuxtjs/i18n 的旧版本(如 v7)
  • Nuxt 3:官方推荐使用 @nuxtjs/i18n,直接通过 npm /npx nuxi@latest module add i18n 安装,无需额外配置 vue-i18n

使用示例

  • 模板中翻译
    <p>{{ $t('welcome') }}</p>
  • 切换语言
    this.$i18n.setLocale('zh')

结合Store状态实现国际化

  1. 安装依赖:@nuxtjs/i18n 和 Pinia(或Vuex)作为状态管理工具

npm install @nuxtjs/i18n pinia

  1. 配置Nuxt模块:在nuxt.config.ts中配置@nuxtjs/i18n模块
exportdefaultdefineNuxtConfig({modules:['@nuxtjs/i18n','@pinia/nuxt'],i18n:{locales:[{code:'en',iso:'en-US',file:'en.json'},{code:'zh',iso:'zh-CN',file:'zh.json'}],lazy:true,langDir:'locales/',defaultLocale:'en'}})
  • code:语言代码(短格式),例如 ‘en’ 代表英语
  • iso:ISO 标准语言代码,包含地区(如美式英语)
  • file:对应的翻译文件路径
  • lazy:启用懒加载模式,仅当访问对应语言时加载翻译文件
  • defaultLocale:设置默认语言环境
  • langDir:指定语言文件存放的目录路径
    —— 常规操作是在 根目录 创建 locales /
    —— 但在实际项目中 Nuxt3 + i18n9.3.0 报错,成功操作是在 根目录 创建 i8n / locales /
  1. 配置语言文件
// en.json{"welcome":"Welcome","button":{"submit":"Submit"}}
// zh.json{"welcome":"欢迎","button":{"submit":"提交"}}
  1. 创建Pinia Store:在stores/app.ts中创建状态管理
exportconstuseAppStore=defineStore('app',()=>{constlanguage=ref('zh')constsetLanguage=(lang:string)=>{language.value=langif(process.client){localStorage.setItem('language',lang)}}// 初始化constinit=()=>{if(process.client){// 恢复语言设置constsavedLanguage=localStorage.getItem('language')if(savedLanguage){setLanguage(savedLanguage)}}}})
  1. app.vue入口文件初始化配置数据
<script setup lang="ts">import{useAppStore}from'~/stores/app'import{useI18n}from'vue-i18n'constappStore=useAppStore()const{locale}=useI18n()// 初始化appStoreappStore.init()// 同步appStore的语言到i18nlocale.value=appStore.language</script>
  1. 组件应用
<template><!--多语言按钮--><el-dropdown @command="handleLanguageChange"><template #dropdown><el-dropdown-menu><el-dropdown-item:command="lang.code"v-for="lang in locales":key="lang.code">{{lang.name}}</el-dropdown-item></el-dropdown-menu></template></el-dropdown><div>{{$t('welcome')}}</div><div>{{$t('button.submit')}}</div></template><script setup lang="ts">import{useUserStore}from'~/stores/user'import{useAppStore}from'~/stores/app'import{ref,computed}from'vue'import{useI18n}from'vue-i18n'// StoreconstuserStore=useUserStore()constappStore=useAppStore()// i18nconst{locales,setLocale,locale,t}=useI18n()constswitchLocalePath=useSwitchLocalePath()// routerconstroute=useRoute()constrouter=useRouter()consthandleLanguageChange=(lang:string)=>{appStore.setLanguage(lang)// 更新appStore中的语言状态goTargetPath(lang)}constgoTargetPath=(lang:string)=>{// 使用 switchLocalePath 获取目标语言的路由,然后进行跳转consttargetPath=switchLocalePath(lang)router.push(targetPath)}onMounted(()=>{locale.value=appStore.language})</script>
  • switchLocalePath 组合式函数
  • 用于获取当前页面在指定语言下的路由路径,常用于实现语言切换功能
  • ‌需通过 useSwitchLocalePath() 引入函数,并传入目标语言代码(如’en’或’zh’)以生成对应路径
  • 注意事项
  • 避免直接修改 locale 状态‌:应使用 switchLocalePath 或setLocale 方法切换语言,而非直接赋值locale
  • 语言切换后路由不更新,原因是:未使用 switchLocalePath 方法更新路由。
  • 确保 nuxt.config.js 中 i18n 配置未禁用路由生成(默认启用)
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/12 8:33:11

74HC74 D触发器电路图工作原理全面讲解

74HC74 D触发器&#xff1a;不只是锁存数据&#xff0c;更是数字系统的“记忆细胞”你有没有遇到过这种情况——明明按键只按了一次&#xff0c;单片机却响应了好几次&#xff1f;或者传感器信号一进来&#xff0c;后级逻辑就开始“抽风”&#xff0c;输出乱跳&#xff1f;这些…

作者头像 李华
网站建设 2026/4/15 7:16:30

rs485和rs232区别总结:手把手带你辨析接口

RS-485 和 RS-232 到底怎么选&#xff1f;一个工业通信老兵的实战解析最近带团队调试一条产线通信系统&#xff0c;又碰上了那个“老朋友”问题&#xff1a;两个设备之间通着好好的&#xff0c;为什么一挂上第三个从机就全网瘫痪&#xff1f;查了半天&#xff0c;最后发现是工程…

作者头像 李华
网站建设 2026/4/15 7:16:33

基于Java+SpringBoot+SSM学生评奖评优管理系统(源码+LW+调试文档+讲解等)/学生评优系统/学生评奖系统/评奖评优管理/学生管理系统/评优管理系统/学生奖励管理/学生评奖评优

博主介绍 &#x1f497;博主介绍&#xff1a;✌全栈领域优质创作者&#xff0c;专注于Java、小程序、Python技术领域和计算机毕业项目实战✌&#x1f497; &#x1f447;&#x1f3fb; 精彩专栏 推荐订阅&#x1f447;&#x1f3fb; 2025-2026年最新1000个热门Java毕业设计选题…

作者头像 李华
网站建设 2026/4/14 18:19:38

核心要点解析:UART串口通信的电平标准与协议

深入浅出UART&#xff1a;从电平标准到实战通信的完整指南你有没有遇到过这种情况&#xff1f;MCU和GPS模块明明接好了线&#xff0c;代码也烧录成功&#xff0c;可串口调试助手却只显示一堆乱码。或者更糟——刚通上电&#xff0c;芯片就发烫&#xff0c;甚至再也起不来。别急…

作者头像 李华
网站建设 2026/4/15 1:10:04

haxm is not installed怎么解决:深度剖析安装失败原因

HAXM 安装失败&#xff1f;一文彻底解决“haxm is not installed”难题 你有没有在启动 Android 模拟器时&#xff0c;突然弹出一个红色警告&#xff1a;“ HAXM is not installed ”&#xff0c;然后模拟器慢得像老式收音机开机&#xff1f;别急&#xff0c;这几乎是每个 A…

作者头像 李华
网站建设 2026/4/15 7:16:31

Packet Tracer运行环境配置全面讲解

手把手教你搞定 Cisco Packet Tracer 运行环境&#xff1a;从下载到稳定运行的完整实战指南 你有没有遇到过这样的情况&#xff1f;兴致勃勃地打开网络课作业&#xff0c;准备用 Cisco Packet Tracer 做个路由实验&#xff0c;结果双击图标——黑屏、闪退、弹窗报错&#xf…

作者头像 李华