当前位置: 首页 > news >正文

jquery.i18n.properties前端国际化方案

如果新项目要做系统国际化, 时下热门的任何一种技术选型都有成熟的方案,比如:

  1. vue + vue-i18n
  2. angular + angular-translate
  3. react + react-intl

但是老项目的国际化几乎是jquery + jquery.i18n.properties这种方案. 那么我们就来看看这种方案是如何实现的.

一. 引入必要的 js 文件

在项目中添加如下目录结构:

Exb3se.png

<script src="js/jquery.min.js"></script>
<script src="js/jquery.i18n.properties-1.0.9.js"></script>

二. 资源文件准备

i18n/resource/common.properties

name='姓名'
placeholder='请输入电话号码'
login='登录'

i18n/resource/common_en.properties

name='name'
placeholder= 'Please enter phone number'
login='login'

三. 标签赋值

一般情况下,我们标签里面的内容如果要做国际化,需要使用 $('#id').text($.i18n.prop('proName')); 来给标签赋值,现在问题来了,我们开发一个界面,有很多地方都需要去做国际化,我们总不能这样每一个页面每一个标签通过这种方式去赋值吧,这样工作量不是一点大,于是乎博主想,有没有一种比较好的通用的解决方案去给这些需要做国际化的标签统一赋值呢。html的data属性似乎是一个不错的选择!它具有可读性强、可维护性强、兼容jquery的data()方法等优点。比如我们修改国际化组件的方法如下

<script>
    $(function(){
        jQuery.i18n.properties({
            name : 'common', //资源文件名称
            path : '/i18n/resource/', //资源文件路径
            mode : 'map', //用Map的方式使用资源文件中的值
                callback : function() {
                     console.log("i18n赋值中...");
                        try {
                            //初始化页面元素
                            $('[data-i18n-placeholder]').each(function () {
                                $(this).attr('placeholder', $.i18n.prop($(this).data('i18n-placeholder')));
                            });
                            $('[data-i18n-text]').each(function () {
                                //如果text里面还有html需要过滤掉
                                var html = $(this).html();
                                var reg = /<(.*)>/;
                                if (reg.test(html)) {
                                    var htmlValue = reg.exec(html)[0];
                                    $(this).html(htmlValue + $.i18n.prop($(this).data('i18n-text')));
                                }
                                else {
                                    $(this).text($.i18n.prop($(this).data('i18n-text')));
                                }
                            });
                            $('[data-i18n-value]').each(function () {
                                $(this).val($.i18n.prop($(this).data('i18n-value')));
                            });
                        }
                        catch(ex){ }
                        console.log("i18n写入完毕");
                }
            });
        });
    </script>

通过data属性获取标签,然后对每个标签通过对应的data-i18n-属性进行国际化赋值即可,这里暂时定义了三种类型data-i18n-placeholderdata-i18n-textdata-i18n-value的属性,如果有其他需求,可以增加其他类型。
然后看下我们html页面的使用

<p data-i18n-text='name'></p>
<input type="text" data-i18n-placeholder="placeholder">
<input type="button" data-i18n-value="login"></input>

这样不用写一句标签的赋值代码,即可对标签进行国际化

四. 最终效果

  • 中文环境下:

Ex7vh6.png

  • 英文环境下:

Ex7jtx.png

转载于:https://www.cnblogs.com/liuyishi/p/10896105.html

相关文章:

  • cursor-spacing 软键盘和input的距离
  • spring cloud服务注册与发现无法发现的可能原因
  • Python中的列表(3)
  • 【Java基础】图片压缩
  • Nginx反向代理,负载均衡,redis session共享,keepalived高可用
  • Python进阶之路 3.5.4 循环中的else语句
  • 【更新】Stimulsoft Reports v2019.3.1发布,新增对OData v4的支持功能
  • 7天瓜分36万美妆,勇敢“晒丫”才是年轻人的生活方式
  • 宜信开源微服务任务调度平台(SIA-TASK)
  • Centos7.6安装jdk1.8
  • 原生革命--跨平台开发技术解析
  • 常用注解
  • 前端目录
  • 自助式BI分析,有什么优点
  • 使用Ajax和FormData对象实现单图片上传,多图片上传,以及和对象的综合上传
  • codis proxy处理流程
  • Cumulo 的 ClojureScript 模块已经成型
  • go append函数以及写入
  • HTTP 简介
  • mysql innodb 索引使用指南
  • ng6--错误信息小结(持续更新)
  • Node项目之评分系统(二)- 数据库设计
  • Python 使用 Tornado 框架实现 WebHook 自动部署 Git 项目
  • 简单数学运算程序(不定期更新)
  • 精益 React 学习指南 (Lean React)- 1.5 React 与 DOM
  • 开放才能进步!Angular和Wijmo一起走过的日子
  • 前端技术周刊 2018-12-10:前端自动化测试
  • 前言-如何学习区块链
  • 腾讯大梁:DevOps最后一棒,有效构建海量运营的持续反馈能力
  • 移动端 h5开发相关内容总结(三)
  • mysql 慢查询分析工具:pt-query-digest 在mac 上的安装使用 ...
  • Unity3D - 异步加载游戏场景与异步加载游戏资源进度条 ...
  • ​ 全球云科技基础设施:亚马逊云科技的海外服务器网络如何演进
  • # Python csv、xlsx、json、二进制(MP3) 文件读写基本使用
  • $(selector).each()和$.each()的区别
  • (Java数据结构)ArrayList
  • (安卓)跳转应用市场APP详情页的方式
  • (附源码)springboot建达集团公司平台 毕业设计 141538
  • (附源码)计算机毕业设计SSM智能化管理的仓库管理
  • (黑客游戏)HackTheGame1.21 过关攻略
  • (五)IO流之ByteArrayInput/OutputStream
  • (转) Android中ViewStub组件使用
  • (转)jdk与jre的区别
  • (转)shell调试方法
  • (转)创业的注意事项
  • (转载)跟我一起学习VIM - The Life Changing Editor
  • ... 是什么 ?... 有什么用处?
  • .NET 8.0 中有哪些新的变化?
  • .net开发时的诡异问题,button的onclick事件无效
  • .net下的富文本编辑器FCKeditor的配置方法
  • .net中我喜欢的两种验证码
  • .vue文件怎么使用_我在项目中是这样配置Vue的
  • @transaction 提交事务_【读源码】剖析TCCTransaction事务提交实现细节
  • [20171106]配置客户端连接注意.txt
  • [20180224]expdp query 写法问题.txt