news 2026/6/10 23:32:13

【前端开发】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/6/10 15:31:53

screen命令参数大全:一文说清常用选项用法

screen命令实战指南&#xff1a;从入门到精通&#xff0c;彻底掌握终端会话管理你有没有遇到过这样的场景&#xff1f;深夜正在远程服务器上编译内核&#xff0c;眼看着进度条走到90%&#xff0c;突然Wi-Fi断了——再连上去时&#xff0c;SSH会话已中断&#xff0c;make进程被杀…

作者头像 李华
网站建设 2026/6/10 2:02:02

清华大学《Cell Rep Phys Sci》:一石二鸟!超快电热法10秒协同回收废电池与塑料,金属回收率>94%,成本骤降85%

导语 面对堆积如山的废旧锂电池与难降解的PVC塑料&#xff0c;传统各自为政的处理方式往往能耗高、污染重、经济性差。清华大学环境学院邓兵团队在《细胞报告-物理科学》上发表了一项开创性回收策略&#xff0c;巧妙地将两大环境难题合并解决。研究提出超快电热氯化法&#xff…

作者头像 李华
网站建设 2026/6/10 20:37:36

UDS 31服务安全算法设计与应用指南

UDS 31服务安全算法设计与实战指南&#xff1a;从原理到工程落地你有没有遇到过这样的场景&#xff1f;OTA升级前的刷写流程明明已经通过了27服务的安全访问&#xff0c;结果还是被要求执行一个神秘的“自定义例程”——诊断仪发一条31 01 F801&#xff0c;再跟一条31 03 F801&…

作者头像 李华
网站建设 2026/6/10 15:57:27

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

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

作者头像 李华
网站建设 2026/6/10 21:11:22

零基础入门:正确卸载Vivado避免系统冲突

彻底卸载Vivado&#xff1a;从“删不干净”到“真正干净”的实战指南 你有没有遇到过这种情况&#xff1f; 想升级到最新版Vivado&#xff0c;结果安装程序弹出一条提示&#xff1a;“ Another version of this product is already installed. ” 可你明明已经通过控制面板…

作者头像 李华
网站建设 2026/6/10 3:39:58

L298N电机驱动模块核心要点:电流、电压与散热问题

L298N电机驱动模块实战指南&#xff1a;别再让它一跑就发烫了&#xff01;你有没有遇到过这种情况——智能小车刚启动&#xff0c;电机转得挺欢&#xff0c;两分钟后突然“罢工”&#xff1f;重启一下又能跑一会儿&#xff0c;但没多久又停了。打开外壳一摸&#xff0c;L298N模…

作者头像 李华