需求小能手——简繁切换

前言

最近一个项目有简繁字体切换的功能,经过与大佬的探讨,最终大佬完成了这个需求,本节我就借花献佛,汇总一下该功能的实现方案。

思路

项目要求页面上展示的字体类型是一致的,包括接口返回数据、消息提示类等。最开始这功能是全权交由前端处理,后端返回的数据前端也要一块处理。简单搜索讨论下,确定了几个思路,接下来就是一个个去尝试。

Vue I18n

公司技术栈是vue2,简繁切换就是语种切换,所以一开始就想到了Vue I18n国际化插件,中英切换一般就是通过该插件实现的。在此之前我们先简单了解下Vue I18n实现语音环境的方法,以中英为例:

  1. 安装Vue I18n,注意我们要根据vue版本去下载,项目中用的vue2,下载了V8.x版本,如果是vue3,就下载V9.x版本。
  2. 设置本地化语言环境信息------messages,ts类型为LocaleMessages,key值是语言Locale,value值是信息对象。

声明一个中英的hello信息:

js 复制代码
const messages = {
en: {
message: {
hello: 'hello'
}
},
zh: {
message: {
hello: '你好'
}
}
}

3.new一个实例,设置语言与语音环境信息两个配置项,并添加到Vue实例中。

js 复制代码
const i18n = new VueI18n({
  locale: 'zh', //语言
  messages,
})
new Vue({ i18n }).$mount('#app')

修改locale配置项的值,页面就会渲染对应语音的值。这就是Vue I18n配置语音环境的过程,套用到我们的简繁切换中,就是在第二步设置messages时将英文改为繁体。直接使用Vue I18n需要我们设置大量的messages,在此基础上我们可以定义一个简繁切换的方法,这个方法网上有很多,大致思路如下:

  • String原型上新增一个tran方法,循环字符串将每个字符进行替换,zhS为简体、zhT为繁体。
  • 在页面渲染的时候调用方法去循环页面元素,获取元素里面text,然后调用tran方法,完成繁体切换。 使用Vue I18n有一大弊端,每个页面在加载时都需要去调用该方法,每次请求接口也要去调用,性能会大大的折扣。

字体包

第二种方案是通过css,引入字体包,将font-family设置为繁体,这样不仅方便快捷,性能也比Vue I18n好多了。注意我们一定要找免费商用的字体包,繁体比较出名的字体包就是苹方。下载好之后,用@font-face引入使用:

js 复制代码
@font-face {
font-family: 'PingFang SC';
src: url(字体包路径);
}

我们再定义一个class类,将font-family设置为PingFang SC,当我们需要繁体时,就往body添加该类名,反之去掉即可。

js 复制代码
  changeLocale(flag) {
    if(flag) {
      document.body.setAttribute('class', 'zhT')
    } else {
      document.body.removeAttribute('class')
    }
  }

这样简繁切换就能搞好了,不过css终归是样式操作,该方法弊端就是dom里面的内容还是简体,不会跟着变动,请求接口传参也都是简体。

总结

以上就是简繁切换实现两种方式,实际项目中我们可以结合两种使用,接口处理类用tran方法;页面用字体包。如果页面要求dom里的内容也要跟着变化,字体包就不需要考虑了。

相关推荐
蟾宫曲2 小时前
在 Vue3 项目中实现计时器组件的使用(Vite+Vue3+Node+npm+Element-plus,附测试代码)
前端·npm·vue3·vite·element-plus·计时器
秋雨凉人心2 小时前
简单发布一个npm包
前端·javascript·webpack·npm·node.js
liuxin334455662 小时前
学籍管理系统:实现教育管理现代化
java·开发语言·前端·数据库·安全
qq13267029402 小时前
运行Zr.Admin项目(前端)
前端·vue2·zradmin前端·zradmin vue·运行zradmin·vue2版本zradmin
LCG元3 小时前
Vue.js组件开发-使用vue-pdf显示PDF
vue.js
魏时烟4 小时前
css文字折行以及双端对齐实现方式
前端·css
哥谭居民00014 小时前
将一个组件的propName属性与父组件中的variable变量进行双向绑定的vue3(组件传值)
javascript·vue.js·typescript·npm·node.js·css3
烟波人长安吖~5 小时前
【目标跟踪+人流计数+人流热图(Web界面)】基于YOLOV11+Vue+SpringBoot+Flask+MySQL
vue.js·pytorch·spring boot·深度学习·yolo·目标跟踪
2401_882726485 小时前
低代码配置式组态软件-BY组态
前端·物联网·低代码·前端框架·编辑器·web
web130933203985 小时前
ctfshow-web入门-文件包含(web82-web86)条件竞争实现session会话文件包含
前端·github