`
rainlife
  • 浏览: 235439 次
  • 性别: Icon_minigender_1
  • 来自: 我也来自火星?
社区版块
存档分类
最新评论

javascript的消息资源国际化

阅读更多

不知道大家对于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标签。

 

 

 

 

 

 

 

 

 

 

 

 

评论
5 楼 longleg 2008-07-11  
我的做法是在产品初次启动的时候去过滤JS文件,然后使用Spring标签国际化。不知道这样是否欠妥?
4 楼 wucc1986 2008-07-11  
navigator.userLanguage 
这个只能获取 浏览器 设置的 Locale 需要做切换的 话 就不能这么做了吧
3 楼 xxpniu 2008-02-20  
我觉得FCK里面就做的很好 国际话的可以参考FCK的做法
不过是ANSC 还是UTF-8 都认得EN的 所以把JS的代码和数据分开编写 这样方便以后做国际化

2 楼 hax 2008-02-14  
方法有很多种,偶没什么意见。

偶只提一点,自动判断语言固然好,但是也要考虑到提供给用户自主选择的权利,比如UI上加上语言的选择。
1 楼 xiaoyu 2008-02-13  
最简单的方法是利用已经做好的资源文件.

首先拼出来要使用哪个资源文件(用上面的函数来判断).

再用Ajax加载进来, 然后用eval来加载表达式(因为资源文件刚好是key = value这种表达式).

再自己定义一个函数message(key, args)返回key的值(主要是因为要替参数).

如果做得好的话, 这个资源文件可能只需要加载一次就行了.

或者放到一个JS文件里:

<script>
@include<fileName.properties>;
</script>

当然或许这个不是最好的方法. 不过觉得还算简单(不用维护两套)

相关推荐

    js 国际化实现

    JavaScript(简称JS)国际化(i18n,国际化英文单词“internationalization”的缩写)是为网站或应用程序提供多语言支持的过程。这个过程涉及到将文本、日期、数字和其他文化特定的元素从源语言(通常是英语)转换成...

    Kiwi国际化全流程解决方案

    在当今全球化的背景下,软件产品的国际化和本地化已经成为不可或缺的环节,特别是对于JavaScript开发者来说,理解并掌握这一流程至关重要。本文将深入探讨Kiwi项目提供的国际化全流程解决方案,帮助开发者更好地应对...

    Web前端资源国际化

    首先,jQuery_i18n_properties是jQuery的一个插件,专门用于处理国际化,特别是处理.properties格式的资源文件。这种文件类型通常用于存储不同语言的文本字符串,每个键值对代表一个特定的翻译。例如,键“hello”...

    FBT是一个来自Facebook的JavaScript国际化框架强大又灵活而且简单直观

    FBT(Facebook Translation Bundle Tool)是Facebook开源的一个JavaScript国际化框架,它旨在简化Web应用的多语言支持过程。在深入理解FBT之前,我们先要了解什么是国际化和本地化。国际化是指设计和实现软件,使其...

    js文件中实现国际化

    总结来说,JavaScript中的国际化涉及到资源文件的管理和本地化函数的构建,通过检测和切换用户语言,使应用能够适应不同地区的用户需求。同时,随着前端技术的发展,现代库和框架提供了更强大、更灵活的解决方案,...

    lunar-javascript-JavaScript资源

    "lunar-javascript-JavaScript资源"是一个专注于日历库开发的项目,特别是针对太阳历和中国农历的处理。该项目充分利用了JavaScript的灵活性和高效性,为开发者提供了一套完整的API,用于日期的计算、格式化以及历法...

    ratjs-JavaScript资源

    ratjs项目是一个旨在提供JavaScript资源的开源项目,它集合了一系列的JavaScript文件和相关开发资源,以便开发者在开发过程中能够更加便捷地管理和使用。从文件列表中我们可以看到,该项目包含了开发文档、许可协议...

    Javascript/Vue/React/ReactNative的国际化解决方案

    JavaScript作为浏览器端的主要脚本语言,本身并不直接提供国际化功能,但有多个库如`Intl` API和社区维护的i18n库如`i18next`、`format.js`等可以用来实现国际化。`Intl` API是ECMAScript的一个内置对象,提供了基本...

    STRUTS2+JavaScript 的分页,而且国际化

    接下来,我们将深入探讨STRUTS2如何与JavaScript结合实现分页以及国际化。 首先,让我们关注"STRUTS2+JavaScript 的分页"。STRUTS2通过Action类和结果类型来控制页面跳转和数据处理。在分页场景下,Action类通常会...

    voerka-i18n-JavaScript资源

    在当今的软件开发领域,前端技术栈的选择极为关键,而Node....通过使用类似于voerka-i18n这样的JavaScript国际化资源库,开发者可以轻松集成国际化功能到自己的应用中,从而使得应用能够适应不同语言环境下的用户需求。

    国际化标签库

    7. **国际化框架**:很多编程语言提供了专门的国际化框架或库,如Java的ResourceBundle,JavaScript的i18next,它们简化了处理国际化标签库的过程。 8. **文化敏感性**:在翻译过程中,要避免使用可能引起文化误解...

    file input 按钮国际化

    5. **i18n工具**:国际化的标准工具,如i18next,可以方便地管理和切换应用中的多语言资源。在文件输入按钮的处理上,可以通过绑定语言变量来实现。 6. **服务器端渲染**:在服务器端根据用户请求的语言环境,动态...

    JS文件国际化

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

    web项目国际化

    对于CSS和JavaScript的国际化,可以将硬编码的文本提取到JSON文件中,然后在客户端根据用户的选择动态加载和替换文本。这可以通过使用HTML5的`lang`属性和JavaScript库(如i18next)来实现。 在.NET框架中,`...

Global site tag (gtag.js) - Google Analytics