layui框架国际化的实现

项目场景:

要对一个前端使用layui的项目进行国际化,但是layui好像没有实现国际化,所以需要自己手动实现。


软件版本:

layui版本:layui-v2.5.6

jquery版本:3.5.1.min

解决方案:

  • 需要国际化的内容主要有
  1. 日期输入框
  2. 分页栏
  3. 弹出框(页面)的标题、按钮等
  4. 弹出框(页面)的内容
  5. 页面其它内容
  6. js方法中的值
  • 解决思路:
  1. 日期输入框:利用layui时间日期控件的lang属性
  2. 分页栏:重写laypage.js
  3. 弹出框(页面)的标题、按钮等:在js中控制值
  4. 弹出框(页面)的内容:在js中控制值
  5. 页面其它内容:在dom元素中自定义属性,并将对应的国际化code放入,页面加载完对dom属性进行遍历,替换自定义属性为对应的国际化值
  6. js方法中的值:在js中控制值

具体实现:

  1. 编写国际化配置文件
  2. 引入 jquery.i18n.properties.js(点此下载) ,用于解析国际化配置文件
  3. 编写language.js,用于根据code获取国际化值及替换dom元素中的code为国际化值
  4. 重写laypage.js(点此下载),将分页栏国际化
  • properties配置文件:

\resources\static\languages\systemInfo_en_US.properties:

userNo=User No
userName=User name
userType=User type

\resources\static\languages\systemInfo_zh_CN.properties:

userNo=用户编号
userName=用户名称
userType=用户类型
  • language.js:

以下代码替换页面标签中的data-i18n、placeholder-i18n、href-i18n属性。data-i18n对应的国际化值会放入标签的innerTEXT中;placeholder-i18n的国际化值会放入placeholder属性;href-i18的国际化值会放入href属性;要替换其它属性请自行添加。

language()方法,用于根据给定的code返回国际化值。

代码还包括对easyui中linkbutton、window、panel等的处理示例,实际没有用。

使用时将initPage()方法放入要国际化页面的onload()方法中即可。

function initPage(){if($.cookie("langType")){loadProperties($.cookie("langType"));}else{loadProperties("zh_CN");	}} 
function loadProperties(language){jQuery.i18n.properties({name:'systemInfo_'+language,path:"/languages/",mode:'map',callback: function() {$("[data-i18n]").each(function () {if($(this).hasClass("easyui-linkbutton")){//初始化按鈕$($(this).children().children()[0]).html($.i18n.prop($(this).attr('data-i18n')))}else if($(this).hasClass("easyui-window")){//初始化彈窗title$($(this).prev().children()[0]).html($.i18n.prop($(this).attr('data-i18n')))}else if($(this).hasClass("easyui-panel")){//初始化彈窗title$($(this).prev().children()[0]).html($.i18n.prop($(this).attr('data-i18n')))}else{//初始化普通標籤$(this).prepend($.i18n.prop($(this).attr('data-i18n')))}});$("[placeholder-i18n]").each(function () {$(this).attr("placeholder",$.i18n.prop($(this).attr('placeholder-i18n')));});$("[href-i18n]").each(function () {$(this).attr("href",$.i18n.prop($(this).attr('href-i18n')));});}  });  
}function language(key){return $.i18n.prop(key);
}
  • html示例:
<div class="layui-form-item"><label class="layui-form-label" data-i18n="userNo"></label><div class="layui-input-block"><input class="layui-input" placeholder-i18n="userNo" type="text"/></div>
</div>
  • js示例:

其中,btn: [language('btn.confirm'), language("btn.cancel")] 用于替换layui确认框中的按钮

function delRowOpen(){let selected = layTable.checkStatus('qryGrid');if(selected.data.length!==1) {layer.msg(language('msg.selectOneToDelete'));return;}selected = selected.data[0];if(!selected.id){layer.msg(language('msg.selectedKeyIsNull'));return;}layer.confirm(language("sys.confirmDel"), {icon: 0, title:language("sys.info"),btn: [language('btn.confirm'), language("btn.cancel")]}, function(index) {let param = {'id' : selected.id,'random' : Math.random()};$.ajax({url : ctx + "/kv/del",type : "POST",data : param,success : function(res){if(res.success){queryList();}layer.msg(res.msg);}});layer.close(index);});
}
  • 注意事项:

如果在js中编辑页面标签,要使用language()方法拼接,不能使用data-i18n、placeholder-i18n、href-i18n等属性,因为页面加载后onload()方法中已经执行过initPage()方法,此后再动态添加的页面dom元素不会再进行属性替换。

function aa(d){let value = d['machineAttr'];if(!value||value.length===0){return "-";}return "<a href='javascript:void(0);' onclick='openParamDetail(\"showEquParam\",\""+d['groupCode']+"\","+JSON.stringify(value)+")'>"+language('show')+"</a>";
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/222804.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ES日志分析在Win系统上的安装和使用

Es日志分析三件套ElasticSearch、Kibana、logstash。 ElasticSearch 下载 官方下载地址 选择自己想要的版本下载即可。这个地方有可能下载会比较慢。可以结合迅雷做下载。 分词器下载 官方分词器下载 如果GIthub加载不出来。可以看看我的这个文章GitHub上不去怎么办&…

【C++练级之路】【Lv.4】类和对象(下)(初始化列表,友元,static成员,编译器的优化)

目录 一、再谈构造函数1.1 构造函数体赋值1.2 初始化列表1.3 explicit关键字 二、static成员2.1 概念2.2 特性 三、友元3.1 引入3.2 友元函数3.2.1 概念3.2.2 特性 3.3 友元类3.3.1 概念3.3.2 特性 四、内部类4.1 概念4.2 特性 五、匿名对象六、编译器的优化6.1 传参优化6.1.1 …

SpringBoot使用自带的日志框架(开箱即用,同时输出到文件与控制台)

在SpringBoot内部中&#xff0c;默认就集成了LogBack的日志依赖&#xff0c;所以我们其实在实际开发中不需要直接添加该依赖。 你会发现spring-boot-starter其中包含了 spring-boot-starter-logging&#xff0c;Spring Boot为我们提供了很多默认的日志配置&#xff0c;所以&…

Angular 2 学习笔记

Angular 2 应用主要由以下 几个部分组成&#xff1a; 1、模块 (Modules)&#xff1a; 2、组件 (Components)&#xff1a; 3、模板 (Templates)​​​​​​​&#xff1a; 4、元数据 (Metadata)&#xff1a; 5、数据绑定 (Data Binding) 6、指令 (Directives) 7、服务 (Servic…

【libcurl库】OpenSSL 库、多线程、断点续传(二)

一、libcurl函数库常用字段解读 1、curl_global_init()&#xff1a;初始化libcurl2、curl_easy_init()&#xff1a;得到easy interface型指针&#xff0c;拿到句柄3、curl_easy_setopt(CURL *handle, CURLoption option, parameter)&#xff1a;设置传输选项 第二个参数CURLop…

超聚变服务器(原华为服务器)网站模拟器

一、超聚变服务器&#xff08;原华为服务器&#xff09;网站模拟器&#xff1a; 原来了解服务器可以从他的网站上进行了解&#xff0c;模拟器做的很好了。 https://support.xfusion.com/server-simulators/ 有很多的模拟器&#xff0c;今天主要看下BMC的设置 有很多的在线工具…

XUbuntu22.04之HDMI显示器设置竖屏(一百九十八)

简介&#xff1a; CSDN博客专家&#xff0c;专注Android/Linux系统&#xff0c;分享多mic语音方案、音视频、编解码等技术&#xff0c;与大家一起成长&#xff01; 优质专栏&#xff1a;Audio工程师进阶系列【原创干货持续更新中……】&#x1f680; 优质专栏&#xff1a;多媒…

Unity3D 如何读取策划给定的Excel表格详解

前言 Unity3D是一款非常流行的游戏开发引擎&#xff0c;它可以帮助开发者快速构建游戏并进行测试和发布。在游戏开发过程中&#xff0c;策划经常会提供一些Excel表格&#xff0c;这些表格包含了游戏中的各种数据&#xff0c;如角色属性、技能效果等等。那么&#xff0c;如何在…

谷歌宣布向云计算客户开放 Gemini Pro,开发者可用其构建应用

12 月 14 日消息&#xff0c;美国时间周三&#xff0c;谷歌宣布了一系列升级的人工智能&#xff08;AI&#xff09;功能&#xff0c;旨在为其云计算客户提供更好的服务。这家科技巨头正试图赶上竞争对手&#xff0c;比如微软和 OpenAI&#xff0c;它们都在积极利用人工智能的热…

Axure自定义元件

目录 1.processOne的使用 ​编辑2.自定义元件的使用、 2.1如何自定义一个元件 2.2使用自定义元件 导语&#xff1a; Axure是绘制原型图的软件&#xff0c;但是我们很多时候不知道&#xff0c;画哪一个板块&#xff0c;所以流程图的绘制也是非常重要的 1.processOne的使用…

【图论】普利姆算法,最小生成树

一次加入一个节点到我们的最下生成树中。加入哪个&#xff1f;跟着下面的步骤走一遍你就会了。 1. 把第一个节点A添加进来 2. 看两条边<A,B>,<A,E>,一个长度是3&#xff0c;一个长度是4&#xff0c;把长度短的边的另一个节点添加进来&#xff0c;也就是B 3. 再看A,…

oracle aq java jms使用(数据类型为XMLTYPE)

记录一次冷门技术oracle aq的使用 版本 oracle 11g 创建用户 -- 创建用户 create user testaq identified by 123456; grant connect, resource to testaq;-- 创建aq所需要的权限 grant execute on dbms_aq to testaq; grant execute on dbms_aqadm to testaq; begindbms_a…

超详细 | 哈里斯鹰优化算法原理、实现及其改进与利用(Matlab/Python)

测试函数为F9 在MATLAB中执行程序结果如下&#xff1a; 在Python中执行程序结果如下&#xff1a; 哈里斯鹰优化算法(Harris Hawks Optimization , HHO)是 Heidari等[1]于2019年提出的一种新型元启发式算法&#xff0c;设计灵感来源于哈里斯鹰在捕食猎物过程中的合作行为以及突…

flume系列之:监控flume agent channel的填充百分比

flume系列之:监控flume agent channel的填充百分比 一、监控效果二、获取flume agent三、飞书告警四、获取每个flume agent channel的填充百分比一、监控效果 二、获取flume agent def getKafkaFlumeAgent():# 腾讯云10.130.112.60zk = KazooClient(hosts

Java中Math.ceil()​和 ​Math.floor()​

​​Math.ceil()​和 ​Math.floor()​是Java中用于取整的数学方法。 区别如下&#xff1a; ​​Math.ceil()​: 向上取整。 该方法返回一个大于或等于参数的最小整数值。如果参数是正数&#xff0c;则返回大于或等于该数的最小整数。如果参数是负数&#xff0c;则返回不小于该…

Web3.0和WebAssembly

1.Web3.0!WebAssembly WebAssembly&#xff08;Wasm&#xff09;并不等同于Web 3.0&#xff0c;它们是两个不同的概念。 WebAssembly是一种低级的编程语言&#xff0c;旨在提供高性能、可移植、安全的二进制指令集&#xff0c;用于在web上执行的应用程序。它是为了改善web应用…

Redis过期淘汰策略

一. Redis过期淘汰策略 当Redis已用内存超过maxmemory限定时&#xff0c;触发主动清理策略。 主动清理策略在Redis 4.0之前一共实现了 6 种内存淘汰策略&#xff0c;在 4.0 之后&#xff0c;又增加了 2 种 策略&#xff0c;总共8种&#xff1a; 针对设置了过期时间的key做处理…

Day60力扣打卡

打卡记录 1682分了记录下&#xff0c;希望下回能突破1700捏。作为一个菜鸟&#xff0c;知道自己很菜&#xff0c;一步步走到现在还是很开心的&#xff0c;从以前的周赛稳定1题到稳定2题&#xff0c;到现在的时有时无的3题。每次刷题都期盼有所长进&#xff0c;虽然更多的时候收…

【C语言】字符串函数及其模拟实现

这是最好的时代&#xff0c;这是最坏的时代&#xff0c;我们一无所有&#xff0c;我们巍然矗立 本文由睡觉待开机原创&#xff0c;未经允许不得转载。 本内容在csdn网站首发 欢迎各位点赞—评论—收藏 如果存在不足之处请评论留言&#xff0c;共同进步&#xff01; 系列文章目录…