`
hongan
  • 浏览: 175599 次
  • 性别: Icon_minigender_1
  • 来自: 佛山
社区版块
存档分类
最新评论

javascript的消息资源国际化

阅读更多

转自:http://rainlife.iteye.com/blog/161713

不知道大家对于javascript中的消息资源是如何做国际化的,对于页面文件来说,可以使用一些国际化的开源东东,像struts的〈bean:message〉,或者使用JSTL的fmt,但在js文件中,却无法使用这类的东西,一种变通的办法,就是在jsp中定义一些javascript的常量,这些常量的值为国际化资源文件中定义的信息,然后在js代码中去使用定义好的这些常量。

另一个方法,像FCKEditor这样,直接使用javascript来实现javascript的国际化。而这样的实现方法,也并不困难。

javascrip中的一个navigator的内置对象,包含了正在使用的 Navigator 的版本信息。

属性概览

appCodeName 指定浏览器的代码名称。
appName 指定浏览器的名称。
appVersion 指定 Navigator 的版本信息。
language 标明正在使用的 Navigator 的翻译语种。
mimeTypes 客户端支持的所有 MIME 类型数组。
platform 标明了 Navigator 编译适合的机器类型。
plugins 客户端已安装的所有插件数组。
userAgent 指定了用户代理头。

这里的appName应该都比较熟悉,可以用它来判断不同的浏览器,像ie ,firefox等。

navigator还有一个language的属性,

IE代码:

navigator.userLanguage

非IE代码: 

navigator.language

它的返回值为用户所在的语言环境,与java中的Locale类似,比如说我在中文环境下,则返回"zh-CN"。

这样,就可以根据返回的language的不同,来定位到不同的message_XXX.js资源文件中。

比如说定义两个js资源文件:

message_en.js

var Lang = {
   hello : "Hello World!"
}

message_zh-CN.js

var Lang = {
   hello : "你好,世界!"
}

 

我们就可以在js代码中直接使用Lang[key](这里的key为hello)实现资源信息的国际化。

另外,像FCKEditor,在HTML页面中,也使用javascript来做国际化,像下面的代码:

<span fckLang="PlaceholderDlgName">Placeholder Name</span><br>

 

 通过为span这个标签增加一个fckLang="XXX"的属性,这里的"XXX",就是定义在资源js文件中的(像上面的"hello")。

这是如何实现的呢?

先定义一个TranslatePage(A)的方法,参数A为一个DOM对象:

function TranslatePage(A) {
            this.TranslateElements(A, 'SPAN', 'innerHTML', false);
}

 在TranslatePage方法内部,又调用了TranslateElements的方法:

/**
         * @param A   DOM对象
         * @param B   国际化的HTML标签
         * @param C   国际化标签的innerHTML或innerText
         * @param D   是否转换HTML的标签
         */
        var TranslateElements = function(A, B, C, D) {
            var e = A.getElementsByTagName(B);//实际上就是根据标签名取到这个标签的数据集合
            var E,s;
            for (var i = 0; i < e.length; i++) {
                if (E = e[i].getAttribute('fckLang')) { //如果这个标签中有'fckLang'的属性的,说明它是要实现国际化的
                    if (s = Lang[E]) {
                        if (D) s = HTMLEncode(s);//是否处理HTML标签
                        eval('e[i].' + C + ' = s');//这个实际上就是执行XXX.innerHTML='XXXX'
                    }
                }
            }
        }

 下面这个是HTMLEncode方法的实现:

var HTMLEncode = function(A) {
            if (!A) return '';
            A = A.replace(/&/g, '&');
            A = A.replace(/</g, '<');
            A = A.replace(/>/g, '>');
            return A;
}

 

实际上就是将"〈"和“〉”这样的标签转换一下。

这样的实现,不禁让我想到了Tapestry,通过在HTML标签中增加一个“jwcid”的属性,这标识这个HTML标签是一个Tapestry的组件,通过Tapestry的处理,再将结果返回重新渲染由jwcid这个属性标识的HTML标签。

评论
1 楼 xwq18 2010-05-26  
谢谢

相关推荐

    JS文件国际化

    jQuery.i18n.properties 是一款轻量级的 jQuery 国际化插件,采用 .properties 文件对 JavaScript 进行国际化。该插件根据用户指定的(或浏览器提供的)语言和国家编码来解析对应的资源文件。 什么是国际化? 国际...

    基于jQuery.i18n.properties 实现前端页面的资源国际化Demo 源码-Javascript代码类资源

    该Demo源码是博文《基于jQuery.i18n.properties 实现前端页面的资源国际化》里面的源码Demo。博文地址:http://blog.csdn.net/aixiaoyang168/article/details/49336709。 可供下载学习使用。

    第六章_struts2的国际化与输入校验

    在 Struts2 中,我们可以通过多种方式来访问国际化消息,例如在 JSP 页面中使用 &lt;s:text .../&gt; 标签,或者在 Action 类中使用 getText 方法。例如: &lt;s:text name="title"&gt;&lt;/s:text&gt; 或者: public class ...

    Dojo基础3国际化

    Dojo 是一个强大的 JavaScript 库,它提供了丰富的功能,包括对国际化的支持。在Dojo中,国际化(i18n)使得应用可以适应不同语言和文化环境,从而为全球用户提供一致的体验。以下是Dojo国际化的主要方面: 一、...

    i18next是浏览器或任何其他JavaScript环境例如nodejs的非常流行的国际化框架

    i18next是浏览器或任何其他JavaScript环境(例如node.js)的非常流行的国际化框架

    SpringMvc+JS实现基于session的国际化

    在Web应用中,Spring MVC框架结合JavaScript技术可以有效地实现基于Session的国际化,使得用户可以根据自己的语言偏好查看相应的界面内容。 1. 说明 基于Session的国际化主要是通过在用户的Session中存储所选择的...

    新发布的 jQuery国际化插件

    jQuery国际化插件可以让你在JavaScript代码中轻松地处理不同文化之间的数字、货币和日期格式。例如,你可以使用这个插件正确地显示一个国家的货币符号

    SpringMVC、jQuery国际化配置

    在视图层应用这些配置时,可以使用Spring提供的标签库,例如`&lt;spring:message&gt;`标签来引用资源文件中的本地化消息。 接下来,我们来看jQuery的国际化配置: 1. **资源文件**:对于jQuery,你需要创建类似`strings_...

    struts国际化处理实例

    国际化的核心在于资源文件,这些文件存储了不同语言环境下的文本消息。在示例中,我们看到了三个文件:`example_en.properties`(英文)、`example_zh_CN.properties`(简体中文)和`example_zh_TW.properties`...

    Uber外卖平台国际化架构演化之路.pdf

    【Uber外卖平台国际化架构演化之路】的演进过程揭示了技术如何适应业务发展的需求,以及在面临全球化挑战时如何优化架构。以下是对Uber Eats架构发展的重要知识点的详细阐述: 1. **业务概述与挑战** - Uber Eats...

    WordPress的JavaScript 本地化实现

    WordPress本身就具有强大的国际化功能,允许用户通过安装对应的语言包来改变网站的语言。 在PHP中,WordPress提供了`_e()`和`__()`函数用于字符串的本地化。然而,随着前端JavaScript的增加,这些PHP函数无法满足...

    libphonenumber:Google的通用Java,C ++和JavaScript库,用于解析,格式化和验证国际电话号码

    Google的通用Java,C ++和JavaScript库,用于解析,格式化和验证国际电话号码。 Java版本针对在智能手机上运行进行了优化,并且从4.0开始就被Android框架使用(冰淇淋三明治)。 快速链接 正在报告问题? 要发送...

    详解使用jQuery.i18n.properties实现js国际化

    当我们在做前台页面开发时,由于页面内容过多,过于繁杂,有的时候一个页面上千行的(当然这样的页面也就算一般...与 Java 里的资源文件类似,jQuery.i18n.properties 采用 .properties 文件对 JavaScript 进行国际化。

    JavaScript扩展工具包Oraclejet.zip

    完整的JavaScript开发工具包充分利用流行的开源技术基于SPA的全生命周期模板内置辅助功能支持支持国际化(28种语言和160多个区域)丰富的UI组件具有共同模型层的高级双向结合支持单页应用程序导航的强大路由系统智能...

    w3school Javascript & jQuery教程 飞龙整理 20140930

    总的来说,W3School 的教程涵盖了 JavaScript 和 jQuery 的基础,包括语言特性、DOM 操作、事件处理、样式修改和输入验证等方面,是初学者入门的宝贵资源。通过深入学习和实践,开发者可以利用这些知识构建出富有...

    基于jQuery.i18n实现web前端的国际化

    jQuery.i18n是一个专为JavaScript设计的轻量级插件,它使得在Web应用中实现国际化变得更加简单。本文将深入探讨如何使用jQuery.i18n.properties来实现这一目标。 首先,我们需要理解国际化的基本概念。国际化...

    bpmn-js-i18n:bpmn-js的国际化资源

    bpmn-js翻译该存储库收集用户界面元素,消息和工具提示的社区维护的翻译。可用翻译使用翻译遵循并用此存储库中的一种语言文件替换。贡献创建一个并提供翻译。 检出以获取可用消息的列表。执照麻省理工学院

    react-intl实现React国际化多语言的方法

    `react-intl` 是一个广泛使用的库,专为React应用设计,提供了丰富的国际化功能,包括日期、时间、数字格式化以及消息翻译。本文将深入探讨如何使用 `react-intl` 在React应用中实现多语言支持。 首先,我们需要...

    微信小程序国际化探索实现(附源码地址)

    在微信小程序开发中,为了满足全球化需求,实现小程序的国际化(i18n)是非常重要的。本篇文章将探讨如何在微信小程序中自定义一个简单易用的国际化解决方案,以适应不同语言环境,同时提供源码地址供参考学习。 ...

    jquery-i18n:基于jquery的国际化工具类,支持同时引入多个语言资源文件,更友好的支持中文环境,在中文环境下无需引入资源文件

    用于前端文本国际化,支持同时引入多个语言资源文件,更友好的支持中文环境,在中文环境下无需引入资源文件 使用方法 文件引入 该插件依赖于jquery 和 js-cookie,可修改源代码取消对后者的依赖 [removed][removed] ...

Global site tag (gtag.js) - Google Analytics