【前端开发】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 配置未禁用路由生成(默认启用)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/1150869.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

基于UDS 19服务的故障码解析完整指南

深入掌握UDS 19服务&#xff1a;从原理到实战的故障码解析全攻略在一次新能源车厂的售后技术支持会议中&#xff0c;工程师反馈&#xff1a;“客户报修‘动力中断’&#xff0c;但现场检测仪连上后却查不到任何当前故障码。”团队一度陷入僵局。直到有人提出&#xff1a;“试试…

搞定模型预热加速推理启动

&#x1f493; 博客主页&#xff1a;借口的CSDN主页 ⏩ 文章专栏&#xff1a;《热点资讯》 模型预热新范式&#xff1a;动态策略如何重塑AI推理启动效率目录模型预热新范式&#xff1a;动态策略如何重塑AI推理启动效率 引言&#xff1a;延迟的隐形代价 一、问题深度&#xff1a…

基于Java+SpringBoot+SSM宠物成长监管系统(源码+LW+调试文档+讲解等)/宠物健康监管系统/宠物饲养管理系统/宠物养护监督系统/宠物成长追踪系统/宠物成长管理平台

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

箭头函数与arguments:快速理解差异

箭头函数没有 arguments &#xff1f;别被坑了&#xff0c;这才是现代 JS 的正确打开方式 你有没有在写箭头函数时&#xff0c;顺手敲下 console.log(arguments) &#xff0c;结果浏览器直接甩你一个 ReferenceError: arguments is not defined &#xff1f; 别慌&…

USB转串口在DCS系统维护中的关键作用说明

USB转串口&#xff1a;工业现场的“救命线”——DCS系统维护中的隐形支柱在石化厂的深夜抢修中&#xff0c;当主控室屏幕一片漆黑、网络通信中断时&#xff0c;工程师掏出的不是网线&#xff0c;而是一根不起眼的USB转RS-485小盒子&#xff1b;在新建电厂首次上电调试前&#x…

[特殊字符]_容器化部署的性能优化实战[20260112173359]

作为一名经历过多次容器化部署的工程师&#xff0c;我深知容器化环境下的性能优化有其独特之处。容器化虽然提供了良好的隔离性和可移植性&#xff0c;但也带来了新的性能挑战。今天我要分享的是在容器化环境下进行Web应用性能优化的实战经验。 &#x1f4a1; 容器化环境的性能…

基于光感反馈的自适应LED灯PWM调光设计

从“看得见”到“会思考”&#xff1a;用光感反馈打造会呼吸的LED灯你有没有过这样的经历&#xff1f;傍晚坐在书桌前&#xff0c;天色渐暗&#xff0c;台灯却还维持着白天的亮度&#xff0c;刺得眼睛发酸&#xff1b;或者清晨阳光洒进房间&#xff0c;床头灯还在傻乎乎地亮着&…

手把手教你分析minidump是什么文件老是蓝屏的问题

从蓝屏崩溃到精准诊断&#xff1a;深入理解 minidump 文件的本质与实战分析 你有没有遇到过这种情况&#xff1f;电脑突然黑屏&#xff0c;紧接着跳出一片刺眼的蓝色界面&#xff0c;系统自动重启。等进入桌面后一切看似正常&#xff0c;但心里总有个疙瘩—— “这到底是啥问…

基于Java+SpringBoot+SSM大连市IT行业招聘平台(源码+LW+调试文档+讲解等)/大连IT招聘网站/大连市IT招聘/大连IT行业求职平台/大连IT人才招聘/大连IT岗位招聘平台

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

ModbusPoll下载后如何配置RTU模式?一文说清

ModbusPoll 下载后如何配置 RTU 模式&#xff1f;手把手教你从零连通设备 你有没有遇到过这样的场景&#xff1a;刚把 ModbusPoll 下载安装好&#xff0c;兴冲冲打开软件&#xff0c;准备读取一台温控仪或电表的数据&#xff0c;结果点了“连接”按钮却一直显示 “Response t…

LVGL新手教程:从零实现一个简单按钮界面

从零开始用 LVGL 搭出一个能点的按钮&#xff1a;新手实战指南 你有没有过这样的经历&#xff1f;手头一块 STM32 或 ESP32 开发板&#xff0c;接了个小屏幕&#xff0c;想做个带“点击”功能的界面——比如按一下启动某个功能。但一查资料发现&#xff0c;GUI 太重跑不动&…

UDS协议诊断服务通信流程全面讲解

UDS协议诊断通信流程深度解析&#xff1a;从会话控制到安全解锁的实战指南在一辆现代智能汽车中&#xff0c;遍布着数十甚至上百个电子控制单元&#xff08;ECU&#xff09;。这些“大脑”如何被统一管理&#xff1f;当车辆出现故障时&#xff0c;维修设备是如何精准读取内部信…

AUTOSAR架构图层级结构:基于Vector工具链建模示例

深入AUTOSAR架构图&#xff1a;从Vector建模实践看四层协同设计汽车电子系统正经历一场静默的革命。ECU数量从十年前的几十个跃升至如今的上百个&#xff0c;软件代码量甚至超过现代客机。面对这种复杂性爆炸&#xff0c;传统“一个功能一套固件”的开发模式早已不堪重负。正是…

Packet Tracer汉化界面语言切换失败解决方法

Packet Tracer 汉化失败&#xff1f;别再瞎换补丁了&#xff0c;一文搞懂底层机制与终极解决方案你是不是也遇到过这种情况&#xff1a;辛辛苦苦在网上搜“Packet Tracer 8.2.1 汉化包”&#xff0c;下载、解压、替换文件、修改配置……结果一打开软件&#xff0c;菜单还是英文…

基于Java+SpringBoot+SSM学生学习成果展示平台(源码+LW+调试文档+讲解等)/学生学习成果汇报平台/学生成果展示平台/学生学习展示平台/学生作品成果展示平台/学生学习成果分享平台

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

USB Serial Port驱动下载与设备管理器状态分析全面讲解

从驱动下载到设备识别&#xff1a;彻底搞懂USB转串口的那些坑你有没有遇到过这样的场景&#xff1f;刚拿到一块崭新的ESP32开发板&#xff0c;兴冲冲插上电脑准备烧录程序&#xff0c;结果打开设备管理器——“未知设备”&#xff0c;连个COM口影子都没有。或者更糟&#xff1a…

构建白名单机制防御未知USB设备(设备描述):工控实战项目

工控安全实战&#xff1a;如何用USB设备描述符构建一道“铁门”&#xff0c;挡住未知威胁&#xff1f;你有没有想过&#xff0c;一个看似普通的U盘插入工控主机的瞬间&#xff0c;可能正触发一场精心策划的攻击&#xff1f;在电力调度室、轨道交通信号系统或石化厂控制终端里&a…

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

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

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

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

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

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