jQuery.i18n.properties 简介html
请参考此网站:
https://www.ibm.com/developerworks/cn/web/1305_hezj_jqueryi18n/jquery
问题与改进web
资源文件命名问题浏览器
在上面的示例中,咱们的程序只自动识别中文和英文两种翻译,而不能进一步区分简体中文与繁体中文。为了使上面的示例可以根据浏览器语言设置自动区分简体中文和繁体中文,咱们将简体中文对应的资源文件 strings_zh.properties 重命名为 strings_zh_CN.properties,并添加如清单 9 所示的繁体中文资源文件 strings_zh_TW.properties。测试
清单 9. strings_zh_TW.properties 1 string_username= 用戶名 2 string_password= 密碼 3 string_login= 登入 4 string_hello= 您好 {0},歡迎使用 jQuery.i18n.properties,您的密鑰是:{1}。 5 string_usernotexist= 用戶不存在 6 string_wrongpassword= 密碼錯誤
运行程序,分别将浏览器语言设置为“中文(简体中文)”和“中文(繁體中文)”进行测试,发现程序并不能如咱们预期显示简体中文和繁体中文,而是都以英文显示。分析后发现,形成这种现象的缘由,是 jQuery.i18n.properties 插件默认的资源文件命名方式与浏览器上报的语言区域编码不一致,从而致使插件加载资源文件失败。以简体中文为例,jQuery.i18n.properties 默认的资源文件命名方式为“zh_CN”的形式,而浏览器上报的语言区域编码为 zh-CN”的形式,此时 jQuery.i18n.properties 插件加载资源文件的步骤以下:网站
加载默认资源文件即 strings.properties,成功。
加载名称为 strings_zh.properties 的资源文件,失败。
加载名称为 stirngs_zh-CN.properties 的资源文件,失败。编码
因为第 2 步和第 3 步都失败,因此 jQuery.i18n.properties 使用默认资源文件 strings.properties 中的翻译,也就是英文翻译。同理,繁体中文也不能正常显示。解决该问题有 3 种方法:插件
1.采用 strings_zh-CN.properties 的方式命名资源文件。这是最简单的方法,但这种命名方式和 Java 标准的资源文件命名方式不一致;翻译
2.使用默认的资源文件命名方式,并在调用 jQuery.i18n.properties() 方法以前使用 var lang = jQuery.i18n.browserLang()的方式显式获取浏览器的语言,而后将 lang 中的“-”替换为”_”,并在使用 jQuery.i18n.properties() 方法时将 lang 做为参数。code
3.更改 jQuery.i18n.properties 的源码。
这里咱们采用最简单的第一种方式,将简体中文对应的资源文件 string_zh_CN.properties 重命名为 stirngs_zh-CN.properties,并将繁体中文对应的资源文件 strings_zh_TW.properties 重命名为 strings_zh-TW.properties。如今,程序就能够根据浏览器语言设置自动区分简体中文和繁体中文了。
对于这个问题,我有另外一种方法:
就是把中英和繁体的资源文件的名字命名以下:
英文:message_en_US.properties
中文简体:message_zh_CN.properties
中文繁体:message_zh_TW.properties
JS中的处理为:先获取当前所选择的语言,而后再肯定须要获取哪一种语言资源文件。
代码以下:
function getErrorMsg(code){ var errorCode="error."+code; var language = $("#language").html(); if ('en'==language) { language = "en_US"; } else if ('zh_CN'==language) { language = "zh_CN"; } else { language = "zh_TW"; } var message = ''; jQuery.i18n.properties({ name:'message', path:'/resources/', mode:'map', language: language, callback: function() { message = $.i18n.prop(errorCode); } }); return message; }
每次jQuery.i18n.properties链接的时候会把name拼接上"_"再拼接上language,而后去查询path下时候有对应的properties文件,好比language为中文繁体,则查询message_zh_TW.prperties。