`
rainlife
  • 浏览: 233342 次
  • 性别: 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”的缩写)是为网站或应用程序提供多语言支持的过程。这个过程涉及到将文本、日期、数字和其他文化特定的元素从源语言(通常是英语)转换成...

    Web前端资源国际化

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

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

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

    Kiwi国际化全流程解决方案

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

    js文件中实现国际化

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

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

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

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

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

    国际化标签库

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

    file input 按钮国际化

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

    web项目国际化

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

    h5国际化demo[i18n实现]

    在IT行业中,"国际化"(Internationalization,通常缩写为i18n)是指设计和开发软件或网站,使其能够适应不同地区的语言和文化习俗。H5(HTML5)是现代网页开发的标准,它提供了丰富的功能和接口,使得实现国际化变...

    Js国际化插件

    JavaScript(Js)国际化插件是用于在Web应用中实现多语言支持的一种工具。它使得开发者能够轻松地根据用户的地域设置,展示相应的语言内容。在Web全球化日益重要的今天,这种插件成为了许多网站和应用程序不可或缺的...

    Ext 中文 国际化文件

    "Ext 中文 国际化文件"指的是ExtJS库中的特定资源文件,用于显示中文界面。 在ExtJS中,国际化通常通过加载相应的语言包来实现,这些语言包包含了各个组件和错误消息的本地化字符串。例如,"ext-lang-zh_cn.js"就是...

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

    i18next是一款广泛应用于浏览器和JavaScript环境,如Node.js,的国际化框架。它为开发者提供了强大而灵活的工具,帮助他们实现多语言支持,使应用程序能够适应不同地区的用户需求。i18next的设计目标是简化国际化...

    jquery国际化demo

    总之,“jquery国际化demo”是一个很好的学习资源,通过它,开发者可以快速掌握如何在jQuery项目中实现多语言支持,提升用户体验,使应用更具全球化视野。这个小案例不仅展示了技术的运用,还强调了良好的注释习惯,...

    spring boot+JPA+easyUI 实现基于浏览器语言的国际化配置

    虽然EasyUI本身没有内置的国际化功能,但可以通过自定义JavaScript来实现。你可以为每个组件的标题和提示文本设置特定语言的值,或者使用一个全局的语言配置文件来替换默认的文本。 5. **配置与实践** - 创建`src/...

Global site tag (gtag.js) - Google Analytics