当程序需要将此提示信息呈现给用户的时候,遍可以通过如下方式取出国际化内容:...<map key = st.updating" value = "The system is updating, "/>...中文版,l:...<map key = st.updating" value = "系统正在升级,请稍后..."/>
tip(open(语言环境是中文? "l": "l").get(st.updating"));
4. 适用于Java EE的另一个国际方案
与前面介绍的通用国际化方案不同,本国际化方案在沿用键值对的前提下,更改文件保存方式为以JSON格式存放的Js文件。其格式如下:
i18n.zh_CN.js:
var i18n = {st.updating": "系统正在升级,请稍后..."}
_US.js:
var i18n = {st.updating": "The system is updating, "}
由此可见,此种键值对表达方式更为简洁明了,而且访问方式更为简单,如:
tip(i18n[st.updating"])。
相比而言,这种存储方式更加适合于Java EE的html客户端,因为它是JSON格式的,所以可以很容易的以原生js的方式被浏览器解析,省去了文档读取和解析的过程。这种方案也正是个人所推荐的。但需要注意的是,此方案对于其他类型的应用可能并不合适。
5. 国际化的动态性
很多时候,国际化可能会涉及内容的动态性。如“用户名:abc注册失败,已存在”的提示信息需要在后台程序动态填充重复的用户名。这个时候采取上述的国际化方式就已经不合适了。对于这种动态性,可以通过如下两种方式解决:
1. 通过占位符动态填充
2. 国际化js文件提供动态输出功能
以下将分别对两种方案的原理做出简单介绍。
方案1:通过占位符动态填充:
这种方案将动态内容用特殊的字符串临时代替,当确定动态部分的最终取值时,再使用最终取值进行替换。其中使用的特殊的临时字符串称之为“占位符”。例如:
{st.DuplicateUserName": "用户名:{name}注册失败,已经存在"}中"{name}"便是占位符,当程序运行到最后,确定重复的用户名为"abc"时,通过执行字符串的替换操作,将"{name}"替换为"abc",也就变成了最终的提示信息:“用户名:abc注册失败,已经存在”。
方案2:国际化js文件提供动态输出功能
这种方案通常通过提供一个通用的国际化内容设置、获取插件来完成。在获取国际化内容时,通过函数方法的调用,根据传入参数动态输出内容。个人闲暇之余已完成一个雏形,现无偿贡献给大家参考:
插件中i18n.$.get方法正是这种动态输出功能的重点。根据传入参数需要输出什么样的字符串完全可以手动控制,而且非常灵活。相比方案1而言具有更强大的动态支持性。这也正是个人所推荐的。
插件使用方法:
1. 国际化键值对映射文件单独建立一个js文件,并通过i18n.$.pack加入。这种以包为单位存储的方式是为了便于模块化管理
2. 页面加入国际化支持文件:i18n.js, i18n.模块.js
3. 获取国际化文本信息时,通过i18n.$.get方法获得,也可以通过i18n["包名"][键名]获得。但第一种方式支持动态性。
6. 总结
国际化支持是程序设计中不可获取的部分,如何更加方便、合理的加入国际化的支持是设计架构环节不可逃避的必然内容。本文在对国际化做出了简单介绍的同时,并对可能的实现原理给出了相应的阐述,希望能给各位带来些许帮助,减轻些痛苦。
本文发布于:2024-01-29 03:55:06,感谢您对本站的认可!
本文链接:https://www.4u4v.net/it/170647170912515.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
留言与评论(共有 0 条评论) |