使用vue-i18n切换中英文-网页语言切换案例-vue文件中或路由(Router)文件中使用

339 篇文章 80 订阅
订阅专栏

vue-i18n地址

安装

npm install vue-i18n

使用

在 main.js 中引入 vue-i18n (前提是要先引入 vue)

import VueI18n from 'vue-i18n'

Vue.use(VueI18n)

准备本地的翻译信息

const messages = {
    zh: {
      message: {
        hello: '好好学习,天天向上!'
      }
    },
    en: {
      message: {
        hello: 'good good study, day day up!'//study hard and make progress every day!
      }
    }
}

创建带有选项的 VueI18n 实例

const i18n = new VueI18n({
    locale: 'en', // 语言标识
    messages
})

把 i18n 挂载到 vue 根实例上

const app = new Vue({
    router,
    i18n,
    ...App
}).$mount('#app')

HTML 模板中使用

<div id="app">
    <h1 style="font-size: 16px; text-align: center;">{{ $t("message.hello") }}</h1>
</div>

运行效果

刚才选定的语言标识是 “en” 英语,现在改成 “zh” 中文,并查看效果

这样就可以轻松实现国际化了,实际开发中,页面内容肯定是很多的,我们可以把对应语言的信息保存为不同的 json对象

方法一(♥):

i18n.js

// 配置
import Vue from 'vue'
import VueI18n from 'vue-i18n';
Vue.use(VueI18n) // 通过插件的形式挂载//中 cn 英 us
export const i18n = new VueI18n({
    locale: localStorage.getItem('language') || 'cn',
    //this.$i18n.locale // 通过切换locale的值来实现语言切换
    messages: {
        'cn': require('./zh.json'), // 中文语言包
        'us': require('./en.json'), // 英文语言包
    }
});
// console.log(i18n, 'i18n')
// 重新封装方法
export function $t(args) {
    return i18n.tc.call(i18n, args);
}
//zh.json
{
    "home":{
        "neirong":"内容",
        "dyh":"单引号"
    }
}

//en.json
{
    "home":{
        "neirong":"content",
        "dyh":"Jackie"
    }
}

main.js

// 引入语言转换
// import VueI18n from 'vue-i18n';
// Vue.use(VueI18n);
import { i18n } from './common/languages/i18n.js'

new Vue({
  i18n,
  render: h => h(App)
}).$mount("#app");

使用

<template>
  <div class="wrap">
    <button @click="btn('cn')">中文/cn</button>
    <button @click="btn('us')">英文/us</button>
    <p class="pm">{{$t("home.dyh")}}-{{$t("home.neirong")}}</p>
  </div>
</template>

<script>
export default {
  mounted(){
    console.log(this.$t)
  },
  methods: {
    btn(t) {
      console.log("获取",t);
      localStorage.setItem("language", t);
      // 刷新当前页面
      location.reload();
      this.$router.go(0);
    },
  },
};
</script>

<style lang="less" scoped>
.pm{
  font-size: 26px;
}
</style>

拓展-路由文件-store-confirm-i18n

集成的vue-router,在router文件夹里的index.js中是用不了this.$t('xxxxx')这样的翻译和this.$confirm()这样的组件的

1.路由中使用store的方法:
router.app.$store

2.路由中使用elment-ui组件的方法:
 Vue.prototype.$confirm()

3.路由中使用i18n国际化翻译的方法
//import i18n from "../i18n";
import { i18n,$t } from '@/common/languages/i18n.js'
i18n.t('CommonBtn.Confirm')
或
$t('CommonBtn.Confirm')

有时候在data中使用

语言不能及时刷新,可以使用监听重新赋值实现,或者写在计算属性中返回使用

<template>
  <div>
    <div class="solutions">{{ solutions }}</div>
  </div>
</template>
 
<script>
export default {
  watch: {
    '$store.state.lang'(language) {
      this.init()
    }
  },
  data() {
    return {
      solutions : this.$t('solutions')
    }
  },
  created() {
    this.init()
  },
  methods: {
    init(){
      this.solutions = this.$t('solutions')
    }
  },
}
</script>

方法二: 

const i18n = new VueI18n({
    locale: 'en',  // 语言标识
    messages: {
        'zh': require('./common/lang/zh'),
        'en': require('./common/lang/en')
    }
})
//zh.js
// 注意:一定是 exports,不是 export,否则会报错,报错信息是下列的中的内容不是 string
module.exports = {
    message: {
        title: '运动品牌'
    },
    placeholder: {
        enter: '请输入您喜欢的品牌'
    },
    brands: {
        nb: '新百伦',
        ln: '李宁'
    }
}
//en.js
module.exports = {
    message: {
        title: 'Sport Brands'
    },
    placeholder: {
        enter: 'Please type in your favorite brand'
    },
    brands: {
        nb: 'New Banlance',
        ln: 'LI Ning'
    }
}

在HTML 模板中使用,要特别注意在 js 中的国际化写法

// HTML
<div id="app">
    <div style="margin: 20px;">
      <h1>{{$t("message.title")}}</h1>
      <input style="width: 300px;" class="form-control" :placeholder="$t('placeholder.enter')">
      <ul>
        <li v-for="brand in brands">{{brand}}</li>
      </ul>
    </div>
</div>

// JS
data () {
    return {
      brands: [this.$t('brands.nike'), this.$t('brands.adi'), this.$t('brands.nb'), this.$t('brands.ln')]
    }
 },

在上面的操作中,我们都是通过手动修改 locale 的属性值来切换语言,实际上,更希望浏览器自动识别,这里可以借助于 cookie

新建一个 cookie.js 文件,用于读取cookie

function getCookie(name,defaultValue) {
  var arr, reg = new RegExp("(^| )" + name + "=([^;]*)(;|$)");
  if (arr = document.cookie.match(reg))
    return unescape(arr[2]);
  else
    return defaultValue;
}

export {
  getCookie
}

在 main.js 中引入这个js,并通过 PLAY_LANG 属性来获取浏览器的语言

const i18n = new VueI18n({
    locale: getCookie('PLAY_LANG','zh'),    // 语言标识
    messages: {
        'zh': require('./common/lang/zh'),
        'en': require('./common/lang/en')
    }
})

注意

两个极易出错的地方

将 $t() 写成了 $()

json 中在同一个对象里有同名属性

vue-i18n 提供了一个全局配置参数叫 “locale”,通过改变 locale 的值可以实现不同语种的切换


案例

借用了 Element UI 的弹窗样式,上面的步骤不再赘述,直接上核心代码

// template
<h2>{{$t('test')}}</h2>
<button type="button" class="btn btn-success" @click="changeLocale">中文/EN</button>  




// js方法
changeLocale () {
    this.$confirm(this.$t('layer.toggle'), this.$t('layer.tips'), {
        confirmButtonText: this.$t('button.ok'),
        cancelButtonText: this.$t('button.cancel'),
        type: 'warning'
        }).then(() => {
           let locale = this.$i18n.locale
           locale === 'zh' ? this.$i18n.locale = 'en' : this.$i18n.locale = 'zh'
        }).catch(() => {
              this.$message({
                  type: 'info',
                  })      
        })
},

在配合 Element-UI 一起使用时,会有2个问题:

(1)、页面刷新后,通过按钮切换的语言还原成了最初的语言,无法保存

(2)、框架内部自带的提示文字无法更改,比如像时间选择框内部中的提示文字

关于第一个问题,可以在初始化VueI18n实例时,通过 localStorage 来为 locale 对象赋值

const i18n = new VueI18n({
  locale: localStorage.getItem('locale') || 'zh',
  messages 
})

在切换语言的时候可以缓存不同的语言选项,并且可以长期保存,不会因为刷新网页而改变locale 的属性值

<div class="lang">
	<el-dropdown>
	  <i class="iconfont icon-language4"></i>
	  <el-dropdown-menu slot="dropdown">
		<el-dropdown-item @click.native="toggleLang('zh')" :disabled="$i18n.locale == 'zh'">中文</el-dropdown-item>
		<el-dropdown-item @click.native="toggleLang('en')" :disabled="$i18n.locale == 'en'">English</el-dropdown-item>
	  </el-dropdown-menu>
	</el-dropdown>
</div>
toggleLang(lang) {
      if(lang == 'zh'){
        localStorage.setItem('locale', 'zh')
        this.$i18n.locale = localStorage.getItem('locale')
        this.$message({
          message: '切换为中文!',
          type: 'success'
        })
      } else if (lang == 'en') {
        localStorage.setItem('locale', 'en')
        this.$i18n.locale = localStorage.getItem('locale')
        this.$message({
          message: 'Switch to English!',
          type: 'success'
      })
}

关于第二个问题,更改Element 组件内部语言,这里还涉及到 手动处理 vue-i18n@6.x 兼容性问题。官网已经做了详细介绍,这里依葫芦画瓢跟着实现一下

//i18n.js

import Vue from 'vue'
import VueI18n from 'vue-i18n'
import locale from 'element-ui/lib/locale';
import zh from './langs/zh'
import en from './langs/en'
import enLocale from 'element-ui/lib/locale/lang/en'
import zhLocale from 'element-ui/lib/locale/lang/zh-CN'


Vue.use(VueI18n)

const messages = {
  en: Object.assign(en, enLocale),
  zh: Object.assign(zh, zhLocale)
}

console.log(messages.zh)

const i18n = new VueI18n({
  locale: localStorage.getItem('locale') || 'zh',
  messages 
})


locale.i18n((key, value) => i18n.t(key, value)) //为了实现element插件的多语言切换

export default i18n

按照如上把国际化文件都整合到一起,避免main.js 中大段引入相关代码。main.js 中与 i18n 相关的就只剩两行代码

import i18n from './i18n/i18n'           // 1行

window.app = new Vue({
  el: '#app',
  router,
  store,
  i18n,                                 // 2行
  components: { App },
  template: '<App/>'
})

效 果

vue3 +ts+vue-i18n中英文切换
qq_42859450的博客
09-29 1290
中英文切换
vue项目使用 vue-i18n 切换中英文
xcxcsdn的博客
10-26 740
引自使用 vue-i18n 切换中英文 - rogerwu - 博客园 vue-i18n 仓库地址:https://github.com/kazupon/vue-i18n 兼容性: 支持 Vue.js 2.x 以上版本 安装方法:(此处只演示 npm) npm install vue-i18n 使用方法: 1、在 main.js 引入 vue-i18n (前提是要先引入 vue) import VueI18n from 'vue-i18n' Vue.use(VueI18
Vue-i18n
YPingg
04-19 191
第一步 安装i18n npm install vue-i18n 第二步 入口文件min.js引入 import i18n from ‘./i18n/i18n’ 路径自己修改 new Vue({ i18n, } 第三步 建立i18n语言文件资源 写入自己的语言包 在i18n.js里面引入语言包 最后一步 页面展示 ...
vue 管理后台 引入I18n 配置 中英文功能切换(完整版)结合vue-router
蓝胖子的博客
03-02 3918
99
中英文切换路由
weixin_40566274的博客
10-31 460
router文件下的index.js importVueI18nfrom'vue-i18n' Vue.use(VueI18n) consti18n=newVueI18n({ locale:window.localStorage.getItem('xxx-lang')||'',//语言标识 messages:{ 'zh-...
简单记一下Vue router 路由使用 vue-i18n 进行标题国际化
Samle的博客
09-15 1677
简单记一下Vue router 路由使用 vue-i18n 进行标题国际化
vue 使用vue-i18n做全局中英文切换的方法
10-17
这个过程包括安装插件、配置 Vue-i18n、创建语言文件、定义切换语言的方法以及在模板使用翻译。这使得你的应用能够适应不同的语言环境,为用户提供更好的体验。记住,根据实际需求,你可能还需要处理更复杂的情况...
vue-i18n实现中英文切换的方法
10-15
在本文,我们将深入探讨如何使用vue-i18n实现中英文切换,以满足国际化的需求。 首先,你需要在项目安装vue-i18n。你可以通过npm命令行工具来安装: ```bash npm install vue-i18n ``` 接下来,我们需要...
手把手教程 vue-i18n element实现国际化语言切换
qq_43555948的博客
11-04 1679
vue-i18n 国际化语言切换 在项目开发时,会有各国国家语言切换的需求,这里我使用i18n实现项目国际化。 i18n安装 在项目更目录下运行(我个人使用的是cnpm): npm install vue-i18n 创建语言包 根据自己实际情况在src下创建语言包目录 整理语言包json如下(此处举例文包): 整理完文包,就把整个json发给翻译小姐姐,这样我们就有了英文语言包。 main.js引入 //引入国际化语言包 import VueI18n from 'vue-i18n' Vue.
vue-element-admin 集成框架设置语言
最新发布
11-10
引入`vue-i18n`库并设置默认的语言文: ```javascript import Vue from 'vue' import VueI18n from 'vue-i18n' import zhCn from 'element-ui/lib/locale/lang/zh-CN' Vue.use(VueI18n) const messages ...
vue-i18n中英文或者多语言切换的网站在vue项目的合理布局结构
热门推荐
Army-海军的博客
04-07 1万+
使用很简单,官网地址:http://kazupon.github.io/vue-i18n/zh/ npm install vue-i18n --save 新建一个文件夹。及其文件。如下图 index.js文件 import Vue from 'vue'; import VueI18n from 'vue-i18n'; // import { isInLanguage } from ...
vue项目引入vue-i18n实现中英文切换
蛋蛋老公的博客
03-24 1985
1、安装 vue-i18n官网:https://kazupon.github.io/vue-i18n/zh/ html页面引入 <script src="https://unpkg.com/vue/dist/vue.js"></script> <script src="https://unpkg.com/vue-i18n/dist/vue-i18n.js"></script> npm包管理 npm install vue-i18n 2、使用方法 a、建立一
vue-i18n 网站中英文切换插件的基本使用
weixin_43399733的博客
09-18 755
vue-i18n的基本使用 首先肯定是下载啦! npm install vue-i18n --save 然后在src下边新建一个i8n文件夹 // import zhLocale from 'element-ui/lib/locale/lang/zh-CN' // 引入element语言包 const cn = { header: { headerTop: { 'tex...
vue3.x使用i18ni18n Ally自动化翻译
小橙的博客
08-17 2765
以下为vue3.x 使用i18ni18n Ally自动化翻译的步骤, vue2.x配置i18n步骤>> vue 版本> 3.0.0 vue/cli 版本 4.5.13 vue-i18n 版本 > 9.1.7 1.安装 i18n npm install vue-i18n@next 2.在vscode安装i18n Ally插件 3.配置vscode setting.json { "i18n-ally.localesPaths": ["src/locales"], // 翻
vue2使用i18n实现中英文语言切换
weixin_46077873的博客
11-09 2572
vue2项目使用i18n实现中英文语言切换
vue-routervue-i18nrouter实现国际化
zhuswy的博客
06-07 1万+
今天遇到个需求,需要在router实现国际化,试了半天发现 routeri18n 是同级的,在router调用this.$t()会报错,那么我们可以换种思路: 在我的翻译文件写好需要翻译的key,替换路由的title,在用到title的地方使用i18n进行国际化,如下 1) 在zh.js 和 en.js分别写好key: 2) 在router的title位置进入该k...
vue-i18n 国际化
Wei.R的博客
07-28 613
官方文档:http://kazupon.github.io/vue-i18n/zh/ 安装 通过npm安装vue-i18n npm install vue-i18n --save 引入 在main.js引入并配置 import VueI18n from "vue-i18n"; Vue.use(VueI18n); const i18n = new VueI18n({ locale: navigator.languages[1], fallbackLocale: "en", //设置回退语言,即无
在吗?手把手教vue-cli4+elementUI搭建通用后台管理系统---(二)vue-i18n中英文切换
qq_36818931的博客
12-30 991
文章目录前言一、vue-i18n是什么?二、使用步骤1.安装vue-i18n2.引用到vue3.添加本地翻译信息总结 前言 在前面的文章head头部 ,有一个中英文切换的按钮,那么这篇文章将实现一个简单的中英文切换。在vue使用vue-i18n插件来实现这个功能。 提示:以下是本篇文章正文内容,下面案例可供参考 一、vue-i18n是什么? 示例:pandas 是基于NumPy 的一种工具,该工具是为了解决数据分析任务而创建的。 二、使用步骤 1.安装vue-i18n npm安装命令 n..
Vue-i18n国际化多语言配置
Cxiaomu的博客
11-04 2274
Vue- i18n 国际化多语言配置
nuxt + vue-i18改变了路由
06-02
nuxt + vue-i18n 通过在路由路径添加语言前缀来实现语言切换的,例如: ``` // 文版路由 /zh/home // 英文版路由 /en/home ``` 这样做的好处是可以让搜索引擎更好地识别不同语言的页面,从而提高网站的 SEO...
写文章

热门文章

  • 纯HTML个人简历模板代码 157682
  • 使用Js将图片转换为base64格式-在线示例 25621
  • 移动硬盘插到电脑后显示在设备和打印机解决办法 24971
  • 微信小程序不支持使用本地图片设置背景图片解决方法 24076
  • linux系统切换root用户的多种方式 23546

分类专栏

  • 编码小技巧 付费 67篇
  • ERROR 付费 32篇
  • 文档 付费 20篇
  • 程序猿面试题 付费 64篇
  • HTML 179篇
  • Vue 339篇
  • JavaScript 376篇
  • nodeJS 38篇
  • React 23篇
  • 小程序 57篇
  • HarmonyOS 1篇
  • 实验案例 42篇
  • TypeScript 8篇
  • Docker 7篇
  • Linux 6篇
  • 网络 26篇
  • 数据库 1篇
  • 数据可视化 23篇
  • 软件使用 79篇
  • 教程笔记 59篇
  • 区块链 14篇
  • 心得 4篇

最新评论

  • Vue项目中实现拖拽排序效果-原生支持和拖拽库-draggable-demo

    随笔写: 文章构思巧妙,结构紧凑,既有深度又有广度,读后让人受益匪浅,确实是一篇值得一读的佳作。

  • vue-virtual-scroller-展示大量数据列表-虚拟列表展示优化

    小呆瓜suisui: 不能自适应高度吗?

  • web中监听页面的显示和隐藏状态-visibilitychange

    美酒没故事°: 方式二: [code=javascript] document.addEventListener('visibilitychange', function() { if (document.hidden) { // 页面被隐藏 console.log('页面被隐藏'); // 在这里执行相应的操作,例如暂停动画、减少定时器频率等 } else { // 页面可见 console.log('页面可见'); // 在这里执行相应的操作,例如恢复动画、增加定时器频率等 } }); [/code]

  • web中监听页面的显示和隐藏状态-visibilitychange

    美酒没故事°: 方式一: [code=javascript] document.addEventListener('visibilitychange', function() { if (document.visibilityState === 'hidden') { console.log('用户离开当前页面'); // 用户离开页面时的处理逻辑 } else if (document.visibilityState === 'visible') { console.log('用户回到当前页面'); // 用户返回页面时的处理逻辑 } }); [/code]

  • Edge浏览器账户退出后依然可以免密登陆-浏览器删不掉登录过的帐号怎么办?

    JackieDYH: 这个操作就是让之前登录过的退出登录的

大家在看

  • 【PR2024】视频编辑软件Adobe Premiere Pro(简称PR)下载安装附(win/mac安装包)
  • JAVA面试题全套新版合集!
  • 解密抖音详情API接口:获取与运用
  • 10款超好用的文档加密软件|2024企业文档加密软件分享
  • 10款超好用的文档加密软件|2024企业常用文档加密软件排行榜(宝藏篇) 197

最新文章

  • vue中keep-alive组件使用和一些基础配置
  • Vue中自定义弹窗组件,当同时弹出多个是z-index会出现问题-demo
  • 使用WebSocket和服务器建立双向通信-封装-demo
2024
10月 4篇
09月 10篇
08月 10篇
07月 10篇
06月 10篇
05月 11篇
04月 12篇
03月 14篇
02月 6篇
01月 23篇
2023年98篇
2022年88篇
2021年249篇
2020年503篇
2019年105篇

目录

目录

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

JackieDYH

谢谢您嘞!我会继续加油地

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或 充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值

深圳坪山网站建设公司网站优化怎么提升页面网站排名优化安全易速达宜丰网站优化渠道厦门思明网站首页优化永州百度网站优化价格宁波如何优化网站公主岭网站优化费用多少网络营销网站优化待遇网站怎么优化定胜云速捷相信荆州工厂网站优化价格外贸网站优化推广教程环保网站优化电话苏州网站关键词优化方案北京科技网站优化海南百度网站优化推广优化大型网站手法新乡网站优化推荐沛县营销型网站优化青铜峡网站关键词优化网站的结构优化网站改版优化的作用网站优化平台哪个好收录呼和浩特网站优化就到胜优网站优化鉴别项城网站推广优化方案从江网站优化推广昆明网站收录优化济宁网站优化公司排行榜推广优化网站排名seo江门专业网站优化排名香港通过《维护国家安全条例》两大学生合买彩票中奖一人不认账让美丽中国“从细节出发”19岁小伙救下5人后溺亡 多方发声卫健委通报少年有偿捐血浆16次猝死汪小菲曝离婚始末何赛飞追着代拍打雅江山火三名扑火人员牺牲系谣言男子被猫抓伤后确诊“猫抓病”周杰伦一审败诉网易中国拥有亿元资产的家庭达13.3万户315晚会后胖东来又人满为患了高校汽车撞人致3死16伤 司机系学生张家界的山上“长”满了韩国人?张立群任西安交通大学校长手机成瘾是影响睡眠质量重要因素网友洛杉矶偶遇贾玲“重生之我在北大当嫡校长”单亲妈妈陷入热恋 14岁儿子报警倪萍分享减重40斤方法杨倩无缘巴黎奥运考生莫言也上北大硕士复试名单了许家印被限制高消费奥巴马现身唐宁街 黑色着装引猜测专访95后高颜值猪保姆男孩8年未见母亲被告知被遗忘七年后宇文玥被薅头发捞上岸郑州一火锅店爆改成麻辣烫店西双版纳热带植物园回应蜉蝣大爆发沉迷短剧的人就像掉进了杀猪盘当地回应沈阳致3死车祸车主疑毒驾开除党籍5年后 原水城县长再被查凯特王妃现身!外出购物视频曝光初中生遭15人围殴自卫刺伤3人判无罪事业单位女子向同事水杯投不明物质男子被流浪猫绊倒 投喂者赔24万外国人感慨凌晨的中国很安全路边卖淀粉肠阿姨主动出示声明书胖东来员工每周单休无小长假王树国卸任西安交大校长 师生送别小米汽车超级工厂正式揭幕黑马情侣提车了妈妈回应孩子在校撞护栏坠楼校方回应护栏损坏小学生课间坠楼房客欠租失踪 房东直发愁专家建议不必谈骨泥色变老人退休金被冒领16年 金额超20万西藏招商引资投资者子女可当地高考特朗普无法缴纳4.54亿美元罚金浙江一高校内汽车冲撞行人 多人受伤

深圳坪山网站建设公司 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化