nuxtjs 国际化i18n

2023-11-06

1. 设置国际化匹配文字:

locales/zh.json: (locales/en.json 英文同理)

{
  "topbar": {
    "home": "首页",
    "pin": "沸点",
    "topic": "话题",
    "book": "小册",
    "search": "搜索"
  },
  "menu": {
    "home": "我的主页",
    "label": "标签管理",
    "logout": "登出",
    "login": "登录"
  }
}

2. 设置vue-i18n国际化插件:(用户通过改变locale,使$t(‘topbar.name’)输出不同语言)

plugins/i18n.js:

import Vue from "vue"
import VueI18n from "vue-i18n"
Vue.use(VueI18n)
export default ({ app }) => {
  app.i18n = new VueI18n({
    locale: app.$cookies.get('lang') || 'zh',  //通过cookie设置国际化(用户选择一次终身不切换)
    fallbackLocale: 'zh',   //默认国际化
    messages: {
      en: require('~/locales/en.json'),
      zh: require('~/locales/zh.json')
    }
  })
}

3. 国际化保存至vuex:

store/locale.js:

export default {
  state: () => ({
    locales: ['zh', 'en'],
    locale: 'zh'    
  }),
  mutations: {
    SET_LANG(state, locale) {  //用于更改当前国际化
      if (state.locales.includes(locale)) {
        state.locale = locale
      }
    }
  }
}

4. 配置路由中间件:

middleware/i18n.js:

export default ({ isHMR, app, store, error }) => {
  if ( isHMR ) return  //是否是通过模块热替换 webpack hot module replacement (仅在客户端以 dev 模式)
  const locale = app.$cookies.get('lang') || app.i18n.fallbackLocale
  if (!store.state.locale.locales.includes(locale)) {
    return error({ message: 'This page could not be found.', statusCode: 404 })
  }
  store.commit('locale/SET_LANG', locale)
  app.i18n.locale = locale
}

5. 配置到路由中间件内:

nuxt.config.js:

export default {
  ...
  router: {  //路由配置
    middleware: ['i18n']  //路由中间件
  },
  plugins: [
    '~/plugins/i18n.js',  //添加至插件
  ],
}

6.vue使用国际化i18n:

//页面使用:  (若:item.name = 'home', 则:'<div>首页</div>')
<div>{{ $t('topbar.'+item.name) }}</div>

// 切换语言
computed: {
  ...mapState('locale', [ 'locale' ]),
},
methods: {
  ...mapMutations({ 'SET_LANG': 'locale/SET_LANG' }),
  switchLocale() {
    let locale = this.locale === 'zh' ? 'en' : 'zh'
    this.$i18n.locale = locale
    this.SET_LANG(locale)   //or this.$store.commit('locale/SET_LANG', locale)
    this.$cookies.set('lang', locale)
  }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

nuxtjs 国际化i18n 的相关文章

随机推荐

  • MIB、SIB

    1 1 概述 系统信息分成MasterInformationBlock MIB 和多个SystemInformationBlocks SIBs MIB包括有限个最重要 最常用的传输参数 其需要从该小区中获得其它的信息 同时其在 BCH上进行
  • 还在为ElementUI的原生校验方式苦恼吗,快用享受element-ui-verify插件的快乐吧(待续)

    element ui verify 本文章意在介绍element ui verify插件使用 以及对比elementUI原生校验方式 突显该插件用少量代码也能实现原生的校验效果甚至更好 1 先观察一个示例
  • Maven Helper插件 IDEA配置使用(详细配置)

    转自 https blog csdn net qq 33541575 article details 80211122 配置Maven Helper插件 因为在准备讲Maven用Maven Helper插件的时候 在网上学习 发现资料很少
  • 一个常用的 C++ 学习、了解平台特性和数据类型的小工具(源代码)

    这是一段C 代码 运行后会输出不同数据类型在当前平台下所占字节数 最大值和最小值等信息 具体解释如下 首先 包含两个头文件 iostream 输入输出流的标准头文件 用于标准输入输出 包含定义在 std 命名空间的 cout 和 endl
  • SpringCloud Alibaba之Ribbon 修改和自定义负载均衡策略

    Ribbon 简介 Spring Cloud Ribbon是一个基于HTTP和TCP的客户端负载均衡工具 它基于Netflix Ribbon实现 通过Spring Cloud的封装 可以让我们轻松地将面向服务的REST模版请求自动转换成客户
  • 文件服务器 选择,文件服务器选择

    文件服务器选择 内容精选 换一换 从本地上传日志文件 是指从浏览器所在机器选择日志文件并上传 目前只支持选择 log的日志文件 如果日志文件中包含其他格式文件 则导入时会提示格式错误 如图2所示 单击Upload 则只会上传 log的日志文
  • request.getParameterNames();

    详情查询 J2EE 1 3 1 API
  • 第2章 信息系统集成及服务管理

    本章考试分值 1 2 分 主要考点 1 ITSS 信息技术服务标准 2 信息系统设计 一 信息系统集成及服务管理体系 1 信息系统集成及服务管理体系 了解 信息系统集成及服务是一个范围相当广泛的概念 所有以满足企业和机构的业务发 展所带来的
  • Android平台安全(一)

    刚好五一了 已经过去两三天了 今天接触到了关于Android安全的一些东西 记录下来 Android安全我大致分三个部分来说明 今天我就先说第一个部分 在典型的场景中 安全主要用于解决一下4类需求 保密 鉴别 认证 完整性 不可以否认性 安
  • IncrediBuild 联合编译

    01 基本信息 官网 https www incredibuild com Make 和其他构建工具示例 要使用IncrediBuild 必须有License 可以免费申请试用版本的license 可以到 https www incredi
  • 【H5】两种加密解密方法:

    H5 两种加密解码方法 encodeURI 加密 decodeURI 解密 加密成base64编码格式 btoa 加密 atob 解密 实现代码如下
  • 【C语言】计数排序

    一 算法描述 得到最小值和最大值 即得到临时数组的长度 数等于临时数组的下标 下标对应的值就加一 把临时数组的信息对应到原数组中 计数排序有很大的约束 最小值和最大值不能相差很大 排序的数适用于非负数 否则得另加代码将负数偏移为正数 最后还
  • MySQL——存储过程详解及实例分析

    目录 一 储存过程简介 1 什么是存储过程 2 存储过程优缺点 3 存储过程入门程序 4 在idea中如何调用储存过程 二 存储过程编程 1 存储过程的变量 2 存储过程中的参数 3 选择结构if 4 分支结构case 5 3个循环结构 6
  • 中文分词jieba学习笔记

    中文分词jieba学习笔记 一 分词模式 二 自定义词典 2 1 命令 2 2 使用方式 三 关键词抽取 基于TF IDF算法 3 1 用jieba analyse extract tags 3 2 用jieba analyse textr
  • idea配置tomcat启动服务器时控制台乱码

    项目场景 在idea中配置tomcat启动时候控制台乱码问题 问题描述 idea中以tomcat启动控制台出现乱码问题 原因分析 由于tomcat8以后默认编码格式是utf 8 tomcat7之前的都是iso8859 1 与idea中的编码
  • 反激式开关电源双环PID(电压环+电流环)控制之MATLAB仿真

    前面一篇文章我讲解了反激式开关电源输出电压的pid控制的matlab仿真 反激式开关电源输出电压PID控制的MATLAB仿真 我只对输出电压做了控制 不管负载多大 只要在设计功率之内 都能把电压维持在12V 但在实际电路设计中 我们还需要考
  • Box2D C++ 教程 第五节:物体(Bodies)

    Box2D C 教程 第五节 物体 Bodies 作者 firedragonpzy 14 十一月 2012 暂无评论 声明 本教程翻译自 Box2D C tutorials Bodies 仅供学习参考 物体 Bodies 物体是物理场景中的
  • 【踩坑】jmeter提取token,响应body中全部是token无法用正则提取

    情况是这样的 这是jmeter的响应结果 响应所有文本都是token 尝试了多次用正则提取 均无法提取全部body 经过查询资料 使用BeanShell 后置处理程序 import org json JSONObject import or
  • 【数据分析】【Pandas】(一)如何制作频率分布直方图

    文章目录 概述 1 直方图 2 密度图 概述 计算一组数据的分布有助于我们更好的了解数据构成 我们可以通过直方图或密度图 将离散的数据通过连续的方式展现出来 数据分布 频数分布 在各组按顺序排列的基础上 列出每个组的总体单位数 形成一个数列
  • nuxtjs 国际化i18n

    1 设置国际化匹配文字 locales zh json locales en json 英文同理 topbar home 首页 pin 沸点 topic 话题 book 小册 search 搜索 menu home 我的主页 label 标