博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
新手学写多语言(国际化)
阅读量:6957 次
发布时间:2019-06-27

本文共 3448 字,大约阅读时间需要 11 分钟。

前言

这个系列主要是记录一下最近研究的多语言配置,主要供新手学习使用,大牛可以不用看了

目录

  • 没有切换语言功能

JQuery实现

懒得看的同学可以直接

基本思路

  • 布局时就给需要多语言的标签加个属性
  • 通过同步的ajax引入语言包
  • 判断用户语言类型
  • 循环遍历DOM,修改innerHTML

布局准备

simple Translation

复制代码

引入语言包

function loadDict() {    $.ajax({        type: "get",        url: "./language.json",        dataType: "json",        async: false, //同步加载文件        success: function(response) {            window.langData = response //挂载到全局对象下        }    });}复制代码

简单的语言包模板

[{        "ID": "title",        "Chinese": "simple Translation",        "English": "simple Translation"    },    {        "ID": "content",        "Chinese": "这是一个简单的页面翻译工具,或者叫国际化工具。主要功能就是为网站提供多语言支持",        "English": "This is exmple page for simple Translation which a simple tools to translate your web Page"    },    {        "ID": "li1",        "Chinese": "使用简单",        "English": "easy to use and learn"    }]复制代码

判断用户语言类型

//传入langCode,实现用户可以自己切换语言function getUserLanguage(langCode) {    var lang = navigator.language || navigator.userLanguage;    var result = langCode ? langCode : lang.toLocaleLowerCase().substr(0, 2);    //这里可以根据你的语言包自己自定义    var obj = {        "zh": "Chinese",        "en": "English",        "de": "Germany",        "ru": "Russia",        "fr": "France",        "ko": "Korea",        "pt": "Portague",        "ja": "Japanese",        "es": "Spanish",        "it": "Italy"    }    return !obj[result] ? "Chinese" : obj[result]}复制代码

循环遍历DOM

function translate(langCode) {    var lang = getUserLanguage(langCode),        dict = window.langData,        len = window.langData.length    $('[data-lang]').each(function() {        var id = $(this).attr('data-lang-id'),            tag = this.tagName.toLowerCase()        for (var i = 0; i < len; i++) {            console.log(dict[i][lang])            if (dict[i]['ID'] == id) {                if (dict[i][lang] == null) { break }                if (tag == 'input') { $(this).val(dict[i][lang]); break; }                $(this).html(dict[i][lang])            }        }    });}复制代码

这里应该都能看懂,唯一容易出问题的地方就是同步加载语言那里,我使用了JQuery 1.8.3,是支持同步的,如果不支持,你可以把改成原生ajax或者干脆改成一个js文件

Vue的简单实现

由于目前需要的功能还没有切换语言,所以写了一个一次性改变语言的功能

基本思路

  • 准备语言包JS
  • 在main.js里引入,判断语言,同时挂载到Vue对象下
  • 在各个组件中直接调取

准备语言包

还是不喜欢用json格式,因为ajax请求总是异步的,不好控制 我用了这个模板

const lang={  //中文简体  zhj:{    tabBar:{
//底栏 a:"获得粉丝", b:"获得点赞", c:"购买VIP", d:"更多" } } } export default lang复制代码

引入并加载

引入很简单import lang from './assets/js/lang' 然后,我把它挂载到了根Vue对象中

new Vue({  el: '#app',  router,  components: { App },  render:h => h(App),  created() {    // 载入多语言    this._intiLang()  },  data(){    return{      lang:{}    }  },  methods: {    getUserLang(){ //获取用户语言      var lang = navigator.language||navigator.userLanguage;      var result=lang.toLocaleLowerCase().substr(0,2);      if(result=='zh'){          if(lang.toLocaleLowerCase()=='zh-cn'){
//中文简体 result="zhj" }else{ result="zhf" //中文繁体 } } return result }, _intiLang(){ let langName=this.getUserLang() let data = lang[langName] ? lang.en : lang[langName] this.lang=data }, changeLang(type){ //提取多语言的内容 return !this.lang[type]?'lang':this.lang[type] } },})复制代码

子组件中调用

复制代码

这样就实现了一个简单的多语言,在子组件中只要通过this.$root.changeLang()这个函数来取值就行了。当然这个方法还有很多不足,适用面也很窄。下一步准备去研究i18n,如果抽得出时间,我打算自己写一个vue插件

转载于:https://juejin.im/post/5c626a946fb9a04a027ad4e4

你可能感兴趣的文章
Android截图命令screencap与视频录制命令screenrecord
查看>>
docker-ce-17.09 镜像获取,创建,删除,保存
查看>>
linux中tomcat内存溢出
查看>>
js alert()后进行跳转的方法
查看>>
(十二)模态框插件
查看>>
紫书 例题 10-13 UVa 830(递推)
查看>>
构建之法阅读笔记05
查看>>
HDU 5776 sum
查看>>
HDU 2191 悼念512汶川大地震遇难同胞——珍惜现在,感恩生活
查看>>
Maven学习总结(七)——eclipse中使用Maven创建Web项目
查看>>
简单排序和输出
查看>>
IntelliJ IDEA的使用
查看>>
Django博客教程之四:Markdown和代码高亮
查看>>
改变对话框大小和动态添加控件
查看>>
Oracle Flashback Transaction Query with Oracle Flashback Version Query
查看>>
2017-3-18号巽寮湾游记
查看>>
7.3模拟赛
查看>>
西安段素的取件最大只问题模板
查看>>
C++中属于整个类的的常量
查看>>
ajax请求发送和页面跳转的冲突
查看>>