vue国际化-vue-i18n的配置

2023-11-05

1、前提基础

2、安装依赖

npm i -S element-ui vue-i18n js-cookie
复制代码
  • 安装js-cookie是为了将当前选择的语言保存并在下一次打开时默认选择。

3、代码分析

  • 准备本地的翻译信息,在src下新建lang文件夹,新建文件zh.js,en.js。
zh.js
export default {
  common: {
    confirm: '确定',
    cancel: '取消',
    home: '首页'
  },
  login: {
    login: '登录',
    logout: '退出'
  },
  header: {
    message: '这是公共的头部组件'
  },
  footer: {
    message: '这是公共的底部组件'
  }
}

en.js
export default {
  common: {
    confirm: 'confirm',
    cancel: 'cancel',
    home: 'home'
  },
  header: {
    message: 'this is a common header component'
  },
  footer: {
    message: 'this is a common footer component'
  },
  login: {
    login: 'login',
    logout: 'logout'
  }
}
复制代码
  • 创建VueI18n实例,使用创建的翻译信息,在lang文件下新建index.js文件
import VueI18n from 'vue-i18n'
import enLocale from './en'
import zhLocale from './zh'
const messages = {
  en: {
    ...enLocale
  },
  zh: {
    ...zhLocale
  }
}
const i18n = new VueI18n({
  locale: 'zh',
  messages
})
export default i18n
复制代码
  • 在 main.js 中引入 vue-i18n,并挂在在vue实例中。
import Vue from 'vue'
import i18n from './lang'
Vue.use(i18n)

new Vue({
  el: '#app',
  router,
  store,
  i18n, // 便于可以直接在组件中通过this.$i18n使用,也可以按需引用
  render: h => h(App)
})
复制代码
  1. 开始使用,新建.vue文件。在页面中通过$t()方法使用。
<template>
  <div class="common_header">
    <el-row>
      <el-col :span="12">
        {{$t('header.message')}}
      </el-col>
      <el-col :span="12">
        <el-button type="primary" @click="login">{{$t('login.login')}}</el-button>
      </el-col>
    </el-row>
  </div>
</template>
复制代码

由于我们VueI18n中定义的是中文,这是页面显示的'这是公共的头部组件',login: '登录',修该VueI18n实例属性locale的值为en,刷新页面,页面显示 'this is a common header component','login',说明多语言配置成功。

4、代码优化

问题一

  • 到这里还存在一些问题,现在我们都是手动的修改VueI18n实例属性locale的值为en/zh来实现语言的切换。
  1. 在页面中加入切换语言的控件:
<el-select v-model="language" placeholder="请选择语言" @change="changeLanguage">
  <el-option
    v-for="item in languageOptions"
    :key="item.value"
    :label="item.label"
    :value="item.value">
  </el-option>
</el-select>
复制代码
  1. 加入一个选择语言的下拉框,修改locale的值为选择的语言。
changeLanguage (language) {
  this.$i18n.locale = language
}
复制代码

切换语言时,页面将自动完成语言类型的切换。

问题二

  • 刷新页面之后初始化,将还原为默认值。
  1. 将language信息保存在cookie(之前已经安装了js-cookie)。初始化从cookie中获取。
const i18n = new VueI18n({
  locale: Cookies.get('language') || 'zh', 
  messages
})

切换语言时候保存到Cookies

Cookies.set('language', language)
复制代码

这是再去刷新页面,将会采用最后我们保存在cookie中的语言。

问题三

  • 切换语言的控件没有变。
  1. 为了方便使用,切换时可以在vuex中保存language信息
changeLanguage (v) {
  this.$store.dispatch('switchLanguage', v)
  this.$i18n.locale = v
}

在state中:
language: Cookies.get('language') || 'zh'
复制代码
  1. 根据当前的语言类型动态的计算。
languageOptions () {
  let languageOptions
  if (this.$store.state.language === 'zh') {
    languageOptions = [
      {
        value: 'zh',
        label: '中文'
      },
      {
        value: 'en',
        label: '英文'
      }
    ]
  } else {
    languageOptions = [
      {
        value: 'zh',
        label: 'Chinese'
      },
      {
        value: 'en',
        label: 'English'
      }
    ]
  }
  return languageOptions
}
复制代码

效果如下:

问题四

  • 到这里已经差不多完成了,其实还有个问题。就是如果使用了element-ui,element组件无法实现多语言的页面。这里还涉及到手动处理 vue-i18n@6.x 兼容性问题,官网已经做了详细介绍。
  1. 引用element的语言包
import elementEnLocale from 'element-ui/lib/locale/lang/en'
import elementZhLocale from 'element-ui/lib/locale/lang/zh-CN'
复制代码
  1. 添加到翻译信息
const messages = {
  en: {
    ...enLocale,
    ...elementEnLocale
  },
  zh: {
    ...zhLocale,
    ...elementZhLocale
  }
}
复制代码
  1. 兼容vue-i18n@6.x,修改main.js
Vue.use(i18n)
修改为
Vue.use(ElementUI, {
  i18n: (key, value) => i18n.t(key, value)
})
复制代码
  1. 页面效果如下:

5、总结

  1. 到这里关于vue-i18n的使用以及介绍完了。
  2. 几个关键点在于实现locale的自动切换、如何使语言信息($t()方法)、element-ui组件的多语言实现、兼容性等。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

vue国际化-vue-i18n的配置 的相关文章

  • 由于 apollo-client 未定义,无法解构 GraphQL 查询?

    我正在寻找调试与错误消息相关的问题 未捕获的类型错误 无法解构 0 apollo client WEBPACK IMPORTED MODULE 4 useQuery 因为它未定义 Context 我正在为我的 React js 项目设置后端
  • 在 contenteditable div 中选择范围

    我有一个contenteditablediv 和其中的一些段落 这是我的代码 div style border solid 1px black width 300px height 300px div Hello world div div
  • JavaScript 中的埃拉托斯特尼筛法对大量数据无限运行

    我一直在尝试写埃拉托斯特尼筛法 http en wikipedia org wiki Sieve of EratosthenesJavaScript 中的算法 基本上我只是按照以下步骤操作 创建从 2 到 n 1 的连续整数列表 令第一个素
  • Javascript Promise“then”始终运行,即使 Promise 未能执行

    我希望当调用第二个 then 时不执行第三个 then 但是 即使 Promise 被拒绝 调用第二个 then 并且代码返回 rejected 然后返回 undefined 它仍然调用第三个 then 如何不运行第三个 then 这样 未
  • Three.js:缩放几何图形后错误的 BoundingBox

    在我的场景中 我有一个简单的立方体 var test new THREE Mesh new THREE CubeGeometry 10 10 10 new THREE MeshBasicMaterial scene add test 该立方
  • 如何在react-bootstrap中禁用表单提交的

    在下面的代码片段中 我有许多文本类型的输入表单 如果用户点击 我似乎会得到相同的合成事件 就像他们按下提交按钮一样 我想忽略作为表单提交 只允许一个人按下 提交 按钮 我删除了一些表单组以减少示例 在所有情况下 按钮或 ENTER 键 e
  • Chrome 中的性能问题

    我目前正在从事一个相对较大的项目 使用 AngularJs 构建 应用程序的一部分是一个表单 您可以向其中添加任意数量的页面 不幸的是 添加了很多不必要的垃圾 即表示表单模型的对象可能会变得非常大 在某些时候 Chrome 基本上无法处理它
  • Angular - CSS - 自定义类型=文件输入,如何使用按钮而不是标签?

    我制作了一个类型为 file 的自定义输入字段 因为我不喜欢默认的输入字段 为了实现这一目标 我做了
  • 将 GMT 时间转换为当地时间

    我以这种格式从我的服务器获取 GMT 时间 Fri 18 Oct 2013 11 38 23 GMT 我的要求是使用Javascript将此时间转换为本地时间 例如 如果用户来自印度 首先我需要采用时区 5 30并将其添加到我的服务器时间并
  • 在 HTML5 画布中,如何用我选择的背景遮盖图像?

    我试图用画布来实现这一点 globalCompositeOperation 但没有运气 所以我在这里问 这里有类似的问题 但我没有在其中找到我的案例 我的画布区域中有图层 从下到上的绘制顺序 画布底座填充纯白色 fff 用fillRect
  • DataTables row.add 到特定索引

    我正在替换这样的行项目 var targetRow entity row dataTable targetRow closest table dataTable DataTable dataTable row targetRow remov
  • 有没有办法在 onclick 触发时禁用 iPad/iPhone 上的闪烁/闪烁?

    所以我有一个有 onclick 事件的区域 在常规浏览器上单击时 它不会显示任何视觉变化 但在 iPad iPhone 上单击时 它会闪烁 闪烁 有什么办法可以阻止它在 iPad iPhone 上执行此操作吗 这是一个与我正在做的类似的示例
  • Javascript 假值(null、未定义、false、空字符串:“”或 '' 和 0)和比较(==)运算符 [重复]

    这个问题在这里已经有答案了 当我使用任何一个值时 null undefined false 0 in a if陈述 它总是被评估为谬误 false 另外 这些值的否定 null undefined false 0 in a if语句总是被评
  • 在移动设备上滚动

    这个问题更多的是一个建议研究 我确实希望它对其他人有帮助 并且它不会关闭 因为我不太确定在哪里寻求有关此事的建议 在过去的 6 个月里 我一直在进行移动开发 我有机会处理各种设备上的各种情况和错误 最麻烦的是滚动问题 当涉及到在网站的多个区
  • Three.js 各种大小的粒子

    我是 Three js 的新手 正在尝试找出添加 1000 个粒子的最佳方法 每个粒子都有不同的大小和颜色 每个粒子的纹理是通过绘制画布创建的 通过使用粒子系统 所有粒子都具有相同的颜色和大小 为每个粒子创建一个粒子系统是非常低效的 有没有
  • Javascript - 水波纹效果

    我需要 JS 上的脚本 它将以 水波纹 样式更改 images html 抱歉 6MB GIF 文件 http fcuunited ru temp listening2 gif http fcunited ru temp listening
  • 在 CKEditor 中设置字体大小和字体系列

    我正在使用 ckeditor 我想问一下这个插件如何设置font family和font size 我尝试过使用 CKEDITOR config font defaultLabel Arial CKEDITOR config fontSiz
  • JavaScript 相对路径

    在第一个 html 文件中 我使用了一个变量类别链接 var categoryLinks Career prospects http localhost Landa DirectManagers 511 HelenaChechik Dim0
  • 如何确定所有角度2分量都已渲染?

    当所有 Angular2 组件完成渲染时 是否会触发一个角度事件 For jQuery 我们可以用 function 然而 对于 Angular2 当domready事件被触发 html 只包含角度组件标签 每个组件完成渲染后 domrea
  • 如何在react-highcharts中使用图表工具提示格式化程序?

    如何使用图表工具提示格式化程序 我正在使用高图表的反应包装器 我有这样的配置 const CHART CONFIG tooltip formatter tooltip gt var s b this x b each this points

随机推荐

  • GPIO口的pull up和pull down,no pull的意义以及怎么配置。

    一般来说 需要区分这个GPIO口用于输入还是输出 如果是output 那个一般选择no pull 这样 引脚才能根据你的output数据 进行正确输出 如果是input 那么需要看具体应用的默认输入值是0还是1 如果默认是输入0 则最好配置
  • 机器学习知识总结 —— 21. 什么是主成分分析

    文章目录 什么是PCA Principal Component Analysis 协方差矩阵 什么是协方差 协方差矩阵 特征值与特征向量 PCA降维 什么是PCA Principal Component Analysis 在机器学习中 PC
  • VSC/SMC(十五)——基于模糊逼近的积分滑模控制

    目录 前言 1 一阶系统积分滑模 1 1 一阶系统 1 2 控制器设计 1 2 1 选取积分滑模面 1 2 2 选取指数趋近律 1 2 3 Lypunov闭环系统稳定性证明 1 3 仿真分析 1 4 仿真结果 2 基于模糊切换增益调节的滑模
  • Win10下给Hyper-V配置网络——Bridging 和 Nat 模式

    Win10下给Hyper V配置网络 Bridging 和 Nat 模式 Hyper V 网络配置 桥接 好处 有 IP 可以被外部访问 Nat 没有 ip 外部不能访问 但可以访问外部 隐蔽性好 Hyper V 网络配置 yper V网络
  • ES7.7中highlight的结果丢失部分文本的bug

    本bug在windows版本 ES 7 7 0 和 7 15 2 中都可以再现 ik分词器已安装 并导入了扩展停止词 extra stopword dic Step1 先建立一个索引 在此之前 请确保已经安装分词器插件ik PUT test
  • python中sorted简单的使用

    sorted sorted iterable key 函数 reverse False 功能 排序 参数 iterable 容器类型数据 range对象 迭代器 key 指定 自定义函数或 内置函数 reverse 代表升序或者降序 默认是
  • 性能测试详解(理论篇)

    目录 一 性能测试的分类 1 负载测试 2 强度测试 3 容量测试 二 性能测试的指标 1 并发用户数 2 响应时间 3 吞吐量 4 资源利用率 三 性能测试的目的 四 性能测试的范围 五 性能测试流程 1 需求分析 2 测试设计 3 测试
  • 极智Paper

    欢迎关注我的公众号 极智视界 获取我的更多笔记分享 大家好 我是极智视界 本文解读一下 YOLOS 通过目标检测重新思考Vision Transformer Transformer 是否能够从纯序列到序列的角度 在仅有的关于二维空间结构知识
  • adb 命令积累

    一 adb 查看手机端APP的包名 1 adb devices 手机端连接电脑 adb调试打开 2 adb shell am monitor 输入此命令后打开要查看的APP应用 之后显示的就是APP的包名3 adb uninstall 卸载
  • java将图片转成透明背景

    import javax imageio ImageIO import java awt image BufferedImage import java io author zhaojinhui date 2021 6 10 11 14 a
  • SpringBoot项目优化和Jvm调优(楼主亲测,真实有效)

    项目调优 作为一名工程师 项目调优这事 是必须得熟练掌握的事情 在SpringBoot项目中 调优主要通过配置文件和配置JVM的参数的方式进行 在这边有一篇比较好的文章 推荐给大家 SpringBoot项目配置Tomcat和JVM参数 一
  • 点云常见格式转换(pcd,txt,ply,obj,stl)

    pcb转txt include
  • vue3报错 Unexpected mutation of “xxx“ prop.(eslintvue/no-mutating-props)

    vue3报错 Unexpected mutation of xxx prop eslintvue no mutating props eslint校验报这个错 其实是Vue的单向数据流的概念 因为识别到子组件中修改了props值 我这里踩到
  • 阿里云无影云电脑介绍_云办公_使用_价格和优势说明

    什么是阿里云无影云电脑 无影云电脑 原云桌面 是一种快速构建 高效管理桌面办公环境 无影云电脑可用于远程办公 多分支机构 安全OA 短期使用 专业制图等使用场景 阿里云百科分享无影云桌面的详细介绍 租用价格 云电脑的优势 使用场景 网络架构
  • 命令执行_代码执行漏洞

    远程代码注入漏洞 原理 攻击者可利用代码注入漏洞执行任意代码 来操作服务器 危害 执行任意代码 来操作服务器 操作数据库 插入恶意数据 可能获取 系统权限 攻击修改系统配置 修改网络配置 可能对 服务器及网络造成影响 可以进一步对网络渗透
  • linux scp服务器之间文件复制

    scp是secure copy的简写 用于在Linux下进行远程拷贝文件的命令 和它类似的命令有cp 不过cp只是在本机进行拷贝不能跨服务器 而且scp传输是加密的 命令格式 scp 参数 源路径 目的路径 如果目的地址存在相同的文件 将会
  • kali设置中文输入法

    修改国内源 下载输入法包 sudo apt get install ibus ibus pinyin 进入设置 sudo im config 选择ibus 其他选择默认选项 重启
  • 无人车之父Sebastian Thrun:技术小白,也能从零开始造一辆无人车!

    在最近召开的世界教育创新峰会上 Google无人车之父 优达学城创始人 Sebastian Thrun 说道 无人驾驶技术已经开始风靡世界 每一个人都有机会参与到这场技术革命中来 成为改变世界的催化剂 他还表示 即使你是技术小白 也能从零开
  • 【见刊通知】ISEEIE 2022 & COMSE 2022已见刊,请自行查看见刊链接 ~

    见刊通知 CoMSE 2022 喜讯 2022年材料科学与工程国际会议论文集已于8月10日见刊 相关链接已发送至各位作者邮箱 请注意查看 ISEEIE 2022 喜讯 2022年电气 电子与信息工程国际会议论文集已于8月18日见刊 相关链接
  • vue国际化-vue-i18n的配置

    1 前提基础 对vue js vuex等有基本的了解 element国际化配置 2 安装依赖 npm i S element ui vue i18n js cookie 复制代码 安装js cookie是为了将当前选择的语言保存并在下一次打