• JS国际化网站中英文切换(理论支持所有语言)应用于h5版APP


    网页框架类APP实现国际化参考文案一

    参考:https://blog.csdn.net/CSDN_LQR/article/details/78026254

    另外付有自己实现的方法  本人用于H5版的APP使用

    一、简述

    把页面成国际化,实现中英文切换,为此,网上找了一些中英文切换的解决方案,大概为如下两种:

    1、使用谷歌整站翻译Api

    优点:只须调用接口,即可轻松完成整站翻译,翻译准确度还行。
    缺点:需要梯子。
    参考文章:js代码实现网站中英文相互翻译
    2、自己编写中英文对照表,用js控制

    优点:一对一翻译,所以准确度最高。
    缺点:需要编写大量中英文对照表,只适合于少量的固定翻译。
    参考文章:html页面如何实现中英文切换?
    由于公司的要求是把整站进行翻译,且官网中存在新闻,即存在大量不可预料的数据,同时考虑到富文本数据不好翻译。所以,总的来说,第一种方案最为合适,不过可惜,需要梯子,没办法,只能别寻出路。好在微软也有一个类似谷歌整站翻译的Api:

    The Translator Web Widget API
    其实,微软提供的Demo实现上也很简单,分如下几步:

    引入The Translator Web Widget API
    监听dom加载完毕,调用Microsoft.Translator.Widget.Translate()整站翻译。
    二、实现

    1、封装language.js

    根据上面的对微软提供的Demo的研究,我们对此进一步封装,因为中英文切换一般都是一次点击后,往后的统一每个页面都需要或不需要翻译,这就需要记录一个状态值,这里选用html5提供的storage来储存这个状态,并向外提供一个修改该状态并刷新页面的方法。故,该js(language.js)编写如下:

    $(function(){ 
    // do something 
    var script=document.createElement("script"); 
    script.type="text/javascript"; 
    script.src="http://www.microsoftTranslator.com/ajax/v3/WidgetV3.ashx?siteData=ueOIGRSKkd965FeEGM5JtQ**"; 
    document.getElementsByTagName('head')[0].appendChild(script);
    
    
    var value = sessionStorage.getItem("language");
    document.onreadystatechange = function () {
    if (document.readyState == 'complete') {
    if(value==="1"){
    Microsoft.Translator.Widget.Translate('zh-CHS', 'en', onProgress, onError, onComplete, onRestoreOriginal, 2000);
    }
    }
    }
    function onProgress(value) {
    }
    function onError(error) {
    }
    function onComplete() {
    $("#WidgetFloaterPanels").hide();
    }
    function onRestoreOriginal() { 
    }
    });
    
    function translate(){
    var value = sessionStorage.getItem("language");
    if(value==="1"){
    sessionStorage.setItem("language", "0"); 
    }else{
    sessionStorage.setItem("language", "1");
    }
    window.location.reload();//刷新当前页面.
    }
    

    2、编写测试页面

    编写一个测试页面(test.html)。要使用上面的language.js,必须进行以下三步:

    设置页面编码为utf-8
    引入jquery和language.js
    设置按钮的点击事件,去调用中英文切换函数:translate();

    <!DOCTYPE html>
    <head>
    <title>Microsoft Widget API Sample</title>
    <meta charset="UTF-8"/>
    <script type="text/javascript" src="jquery-1.11.3.js"></script>
    <script type="text/javascript" src="language.js"></script>
    </head>
    <body>
    <button id="change">中英文切换</button
    </br></br></br></br></br></br></br></br></br></br></br></br></br></br></br>
    <div style="text-align: center" >
    你好
    </div>
    </body>
    <script type="text/javascript">
    $("#change").click(function(){
    translate();
    })
    </script>
    </html>



    试试看效果吧,反正我觉得还行~

    三、其他

    上面编写的language.js中写死了中文转英文(zh-CHS转en),如果项目需要其他语言的转换,对language.js进行自定义扩展即可。

    附:

    我简单的用requere实现了下 ,支持中英韩语,默认其他均英语

    首先将一入几个自己写好的语言包:key为中文;value为相应国际化的语言,每次动态加载value  就阔以了

    eg:我称为语言包

    define(function(){
       var object = {

          "":"year",
          "":"month",
          "":"week",
          "":"day",
          "":"hour",
          "":"minute",
          "":"seconds",
    }
    return object
    }

    加载逻辑:

    define(function(){
      //<-- ####### internationalization  ########## -->
      var languageObj=null
      switch (navigator.language) {
        case "zh-CN":
        languageObj={}
        break;
        case "en-US":
        loadModule('english')
        break;
        case "ko-KR":
        loadModule('korean')
        break;
        default:
        loadModule('english')
        break;
      }
      function loadModule(jsModule,black){
        require([jsModule], function(obj){
           languageObj = obj
           typeof block =="function"&&block(obj)
        })
      }
      var internationalization = {
    
        tell:function (key) {
            return languageObj[key]||key
        }
    
      }
      window.$i18n=internationalization.tell
      return internationalization
    })

    由于部分机型的适配问题

    更改为提前加载英语语言包

    define(["english"], function(englishObj) {
        //<-- ####### internationalization  ########## -->
        var internationalization = {
            tell: function(key) {
                switch (navigator.language) {
                    case "zh-CN":
                        return key
                        break;
                    case "en-US":
                       return englishObj[key]||key
                        break;
                    case "ko-KR":
                    return englishObj[key]||key
                        break;
                    default:
                    return englishObj[key]||key
                        break;
                }
            }
        }
    
        window.$i18n = internationalization.tell
        return internationalization
    })

    启动加载后在需要国际化处理的地方通通用$i18n("中文")即可 

    简单可行。

  • 相关阅读:
    fast incremental backup failed on standby database
    How to find error message from OMS repository
    Examine 11g automatic block Corruption recovery
    C#继承Control实用自定义控件
    手把手教你写SHELL CODE
    编写C#控件的3种方式
    Android中跨越ACTIVITY的全局线程
    DevExpress 皮肤使用方法
    PHP讨论之什么是HOOK?
    C#制作WinForm控件
  • 原文地址:https://www.cnblogs.com/baitongtong/p/11606590.html
Copyright © 2020-2023  润新知