vue2+element-ui 实现国际化

这篇具有很好参考价值的文章主要介绍了vue2+element-ui 实现国际化。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1. 安装vue-i8n依赖

npm i vue-i18n

2. 创建语言包文件

在src目录下创建一个lang文件夹,同时创建zh.js(中文),en.js(英文),ja.js(日文),fr.js(法文)四个语言包js文件,并创建一个index.js文件,用来整合语言包
对于一个项目来说,一个语言包需要包含所有页面以及组件;在语言包以页面为单位,创建一个对象;对公共的title或者按钮名称可以单独提取出来。此处只展示中文和英文文件,其它语言包同中英文文件格式。
zh.js

export default {
  ModelObj: {
    title: '模板列表',
    rAddBtn: '新增模板',
    searchSelect: {
      optionLabel1: '所有状态',
      optionLabel2: '启动',
      optionLabel3: '禁止'
    },
    filterInputplac: '请输入模板标题',
    searchBtn: '搜索',
    resetBtn: '重置',
    table: {
      colu1: '模板标题',
      colu2: '发布者',
      colu3: '创建时间',
      colu4: '状态',
      colu5: '操作',
      operationbtn1: '管理字段',
      operationbtn2: '修改',
      operationbtn3: '删除'
    }
  }
}

eh.js

export default {
  ModelObj: {
    title: 'Registration template list',
    rAddBtn: 'New registration template',
    searchSelect: {
      optionLabel1: 'All states',
      optionLabel2: 'start',
      optionLabel3: 'forbidden'
    },
    filterInputplac: 'Please enter the template title',
    searchBtn: 'search',
    resetBtn: 'reset',
    table: {
      colu1: 'Template title',
      colu2: 'publisher',
      colu3: 'Creation time',
      colu4: 'state',
      colu5: 'operation',
      operationbtn1: 'Management field',
      operationbtn2: 'modify',
      operationbtn3: 'delete'
    }
  }
}

基础的语言包创建完之后在index.js文件中对这些语言包进行整合。
Index.js
(1)引入自己新创建的语言包
(2)此处暂不说明国际化持久化以及element-ui组件国际化的兼容性
(3)创建一个messages对象,放入语言包
(需要注意,messages名称不可更改,更改后失效,原因未查明,可能与vue-i18n中的html格式化有关)
(4)创建一个vue-i18n实例,messages对象放入实例中;最后导出

import Vue from 'vue'
import VueI18n from 'vue-i18n'
// 从语言包文件中导入语言包对象
import zh from './zh'
import en from './en'
Vue.use(VueI18n)
const messages = {
  zh: {
    ...zh,
    ...zhLocale
  },
  en: {
    ...en,
    ...enLocale
  }
}
const i18n = new VueI18n({
  messages,
  locale: userstore.state.langs,
  fallbackLocale: 'zh', // 若某个语言环境变量,则使用fallbackLocale环境下对应的变量
  silentFallbackWarn: true, // 抑制警告
  globalInjection: true // 全局注入
})
export default i18n

3. main.js 引入

引入语言包后挂载到vue实例上

import i18n from './lang/index'
new Vue({
  el: '#app',
  router,
  i18n, // 挂载
  components: { App },
  template: '<App/>',
  store: userstore
})

4. 切换语言组件

为了方便使用,可以将切换语言的组件写成全局组件,进行全部页面的语言切换。

<template>
  <div class="switch-lang-wrap">
    <!--新增切换语言按钮-->
    <div class="change-lans">
      <el-radio-group v-model="radio" @change="changeLang">
        <el-radio :label="'zn'">中文</el-radio>
        <el-radio :label="'en'">英文</el-radio>
      </el-radio-group>
    </div>
  </div>
</template>

<script>
export default {
  name: 'switchLang',
  data () {
    return {
      radio: this.$store.state.langs
    }
  },
  methods: {
    changeLang (val) {
      this.$nextTick(() => {
        this.$store.commit('setLangInfo', val)
        localStorage.setItem('lang', val)
        this.$i18n.locale = val
      })
    }
  }
}
</script>

<style scoped>
  .change-lans {
    position: fixed;
    top: 60px;
    left: 50%;
    margin: auto;
    z-index: 1000;
  }
</style>

5. 模板渲染使用

国际化字段更换还可以表示复数,以及传递动态参数,具体用法参考官网:https://kazupon.github.io/vue-i18n/introduction.html

 <p class="title">{{$t('ModelObj.title')}}</p>

6. 国际化语言切换持久化

对于目前定义的变量而言,页面刷新后就会回归到初始状态;若是需要保留持久化,则可存储到vuex。

changeLang (val) {
      this.$nextTick(() => {
        this.$store.commit('setLangInfo', val)
        localStorage.setItem('lang', val)
        this.$i18n.locale = val
      })
    }	

7. element-ui组件国际化

对于vue项目来说,element组件使用较为普遍,其中涉及一些组件的语言切换,具体国际化方法可参考官网文档:https://element.eleme.cn/#/zh-CN/component/i18n
Element-ui组件国际化时需要注意,其版本与vue-i18n的版本兼容问题较多,针对vue2来说,vue-i18n版本需要较低一些;vue3中可自己去查看官网
此处element-ui国际化的用法以及创建的语言包融合如下:

import Vue from 'vue'
import VueI18n from 'vue-i18n'
import userstore from '../vuex/userstore'
// 从语言包文件中导入语言包对象
import zh from './zh'
import en from './en'
// element-ui 组件国际化
import ElementLocale from 'element-ui/lib/locale'
import enLocale from 'element-ui/lib/locale/lang/en'
import zhLocale from 'element-ui/lib/locale/lang/zh-CN'

ElementLocale.i18n((key, value) => i18n.t(key, value))
Vue.use(VueI18n)
const messages = {
  zh: {
    ...zh,
    ...zhLocale
  },
  en: {
    ...en,
    ...enLocale
  },
  ja: {
    ...ja,
    ...jaLocale
  },
  fr: {
    ...fr,
    ...frLocale
  }
}
const i18n = new VueI18n({
  messages,
  locale: userstore.state.langs,
  fallbackLocale: 'zh', // 若某个语言环境变量,则使用fallbackLocale环境下对应的变量
  silentFallbackWarn: true, // 抑制警告
  globalInjection: true // 全局注入
})
export default i18n

ps:菜鸟一枚,仅以此记录自己动手实施的过程,若有问题,还请指正文章来源地址https://www.toymoban.com/news/detail-432079.html

到了这里,关于vue2+element-ui 实现国际化的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • vue-i18n国际化多语言与多套UI组件库使用(Element Plus、Ant Design Vue、Naive UI)

    demo源码:Vue3 UI Lang 因调研需要,需在同一个项目中集成好几种UI组件库的多语言实现,查看各种组件库的表现情况,以便选定组件库。 注意:这只在调研过程中会如此,实际开发项目中极少存在一个项目中集成多个UI组件库的情况。 本demo实际试验阿拉伯语、法语、葡萄牙语

    2024年02月08日
    浏览(36)
  • vue 前端 + 若依(ruoyi)后端 实现国际化

    记录一下,前端使用vue,后端使用若依(ruoyi,基于spring-boot)实现页面,后端返回提示信息国际化 vue:2.6.12 vue-i18n:^8.27.2 安装vue-i18n,注:最新的交于该版本有差异,所以指定使用版本:8.27.2 添加国际化js文件:language.en_US.js 添加国际化js文件:language.zh_CN.js 添加i18n.js ma

    2024年02月12日
    浏览(38)
  • 菜鸟Vue教程 - 实现带国际化的注册登陆页面

    初接触vue的时候觉得vue好难,因为项目中要用到,就硬着头皮上,慢慢的发现也不难,无外乎画个布局,然后通过样式调整界面。在通过属性和方法跟js交互。js就和我们写的java代码差不多了,复杂一点的就是引用这种那种库,然后就能做出来一个界面了。如果你的项目就是

    2024年02月12日
    浏览(43)
  • vue-i18n 实现国际化,支持切换不同语言

    需求:后台管理系统,可以实现语言切换 实现过程:用的i18n来实现的语言切换,网上能看到好多模板,根据自己的需求,修改一下即可使用,大概都是差不多的,因为涉及到后端,所以要跟后端协商一致决定去写,我的设计思路是跟着后端设计更改的,如下: 1.语言是后端接

    2024年02月12日
    浏览(31)
  • Vue2 +Element-ui实现前端页面

    以一个简单的前端页面为例。主要是利用vue和element-ui实现。 里面涉及的主要包括:新建vue项目、一行多个输入框、页面实现等。   ①首先安装nodejs,这部分在此就不讲啦。 ②然后安装vue-cli: 查看是否安装成功: 安装成功之后就输出vue的版本 ③在cmd窗口新建一个vue2脚手架

    2024年02月16日
    浏览(33)
  • vue2+element-ui实现侧边导航栏

    编写 client/src/components/LeftMenu.vue ,创建侧边导航栏: 编辑 client/src/views/Index.vue ,引入侧边导航栏:

    2024年02月02日
    浏览(33)
  • vue2&Element-ui实现表格单元格合并

    由于项目需要实现单元格合并目前只是单页没有做分页处理先上效果图 看下数据结构 Element table提供的api arraySpanMethod columnIndex=0表示从第一列开始 rowIndex表示需要操作的行数 同济医院加上合计有12行从0开始=11 判断条件是rowIndex余12===0 我们打印一下 或者改成 表示从0开始到1

    2024年02月12日
    浏览(30)
  • SpringBoot+Vue前后端分离项目国际化支持

    i18n.js文件 language.en_US.js文件 language.zh_CN.js文件 messages_en_US.properties文件 messages_zh_CN.properties文件

    2024年02月04日
    浏览(37)
  • Vue 国际化之 vue-i18n 的使用

    目录 一、安装 二、使用 1、准备语言包 2、准备翻译的语言环境 3、实现语言翻译 三、整合 ElementUI 语言包 1、扩展中文 2、扩展英文  3、使用扩展语言翻译 四、问题记录 五、扩展 vue3 中使用 vue-i18n 如果在一个模块系统中使用它,你必须通过  Vue.use()  明确地安装  vue-i18n

    2024年03月14日
    浏览(35)
  • Vue - i18n 国际化的使用

    参考网址: 使用: https://huaweicloud.csdn.net/638f133edacf622b8df8eb26.html?spm=1001.2101.3001.6650.1utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromBaidu%7Eactivity-1-125181861-blog-123845480.235%5Ev38%5Epc_relevant_anti_t3_basedepth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromBaidu%7Ea

    2024年02月11日
    浏览(44)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包