需求小能手——简繁切换

前言

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

思路

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

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里的内容也要跟着变化,字体包就不需要考虑了。

相关推荐
AiMan1 小时前
千问生成的内容能否下载吗?
前端
北城笑笑1 小时前
Vue 109 ,从零搭建 Vue3 + Electron 工程:生态、安全桥接与打包选型( Vue + Electron )
前端·javascript·vue.js·安全·electron·vue
JarvanMo2 小时前
Flutter 3.50 & Dart 3.14发布,一起看看有哪些变化!
前端
莪_幻尘2 小时前
4 个 3D 游戏,总体积 3.82MB:拆解 Claude 的 one-shot 工程链路
前端·ai编程·three.js
Highcharts.js2 小时前
Highcharts智能数据分析平台Orbit 多语言配置技术文档
java·前端·javascript·highcharts·orbit·智能数据分析·设置文档
ABAP-張旺3 小时前
SAP ABAP 实战:SAP GUI上做 HTML 看板报表
前端·html·sap·abap
时间的情敌3 小时前
Cesium 建筑单体化、3DTiles 分类、楼层显隐、分户高亮(BIM + 倾斜孪生高频)
前端·3d·cesium
IT_陈寒3 小时前
JavaScript项目实战经验分享:从内存泄漏到性能优化的血泪史
前端·人工智能·后端
计算机毕设定制辅导-无忧学长4 小时前
《基于Spring Boot的迷游哈游戏综合服务平台的开发》
java·vue.js·spring boot·mysql·迷游哈游戏综合服务平台
恋猫de小郭5 小时前
Flutter 3.50 & Dart 3.14 发布,快来看看有什么更新吧
android·前端·flutter