使用 jQuery.i18n.properties 实现 Web 前端的国际化

jQuery.i18n.properties 简介

请参考此网站:
https://www.ibm.com/developerworks/cn/web/1305_hezj_jqueryi18n/

问题与改进

资源文件命名问题

在上面的示例中,我们的程序只自动识别中文和英文两种翻译,而不能进一步区分简体中文与繁体中文。为了使上面的示例能够根据浏览器语言设置自动区分简体中文和繁体中文,我们将简体中文对应的资源文件 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 作为参数。

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。

原文地址:https://www.cnblogs.com/jimloveq/p/10609467.html