转自: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标签。
分享到:
相关推荐
JavaScript(简称JS)国际化(i18n,国际化英文单词“internationalization”的缩写)是为网站或应用程序提供多语言支持的过程。这个过程涉及到将文本、日期、数字和其他文化特定的元素从源语言(通常是英语)转换成...
首先,jQuery_i18n_properties是jQuery的一个插件,专门用于处理国际化,特别是处理.properties格式的资源文件。这种文件类型通常用于存储不同语言的文本字符串,每个键值对代表一个特定的翻译。例如,键“hello”...
FBT(Facebook Translation Bundle Tool)是Facebook开源的一个JavaScript国际化框架,它旨在简化Web应用的多语言支持过程。在深入理解FBT之前,我们先要了解什么是国际化和本地化。国际化是指设计和实现软件,使其...
在当今全球化的背景下,软件产品的国际化和本地化已经成为不可或缺的环节,特别是对于JavaScript开发者来说,理解并掌握这一流程至关重要。本文将深入探讨Kiwi项目提供的国际化全流程解决方案,帮助开发者更好地应对...
总结来说,JavaScript中的国际化涉及到资源文件的管理和本地化函数的构建,通过检测和切换用户语言,使应用能够适应不同地区的用户需求。同时,随着前端技术的发展,现代库和框架提供了更强大、更灵活的解决方案,...
JavaScript作为浏览器端的主要脚本语言,本身并不直接提供国际化功能,但有多个库如`Intl` API和社区维护的i18n库如`i18next`、`format.js`等可以用来实现国际化。`Intl` API是ECMAScript的一个内置对象,提供了基本...
接下来,我们将深入探讨STRUTS2如何与JavaScript结合实现分页以及国际化。 首先,让我们关注"STRUTS2+JavaScript 的分页"。STRUTS2通过Action类和结果类型来控制页面跳转和数据处理。在分页场景下,Action类通常会...
7. **国际化框架**:很多编程语言提供了专门的国际化框架或库,如Java的ResourceBundle,JavaScript的i18next,它们简化了处理国际化标签库的过程。 8. **文化敏感性**:在翻译过程中,要避免使用可能引起文化误解...
5. **i18n工具**:国际化的标准工具,如i18next,可以方便地管理和切换应用中的多语言资源。在文件输入按钮的处理上,可以通过绑定语言变量来实现。 6. **服务器端渲染**:在服务器端根据用户请求的语言环境,动态...
对于CSS和JavaScript的国际化,可以将硬编码的文本提取到JSON文件中,然后在客户端根据用户的选择动态加载和替换文本。这可以通过使用HTML5的`lang`属性和JavaScript库(如i18next)来实现。 在.NET框架中,`...
在IT行业中,"国际化"(Internationalization,通常缩写为i18n)是指设计和开发软件或网站,使其能够适应不同地区的语言和文化习俗。H5(HTML5)是现代网页开发的标准,它提供了丰富的功能和接口,使得实现国际化变...
JavaScript(Js)国际化插件是用于在Web应用中实现多语言支持的一种工具。它使得开发者能够轻松地根据用户的地域设置,展示相应的语言内容。在Web全球化日益重要的今天,这种插件成为了许多网站和应用程序不可或缺的...
"Ext 中文 国际化文件"指的是ExtJS库中的特定资源文件,用于显示中文界面。 在ExtJS中,国际化通常通过加载相应的语言包来实现,这些语言包包含了各个组件和错误消息的本地化字符串。例如,"ext-lang-zh_cn.js"就是...
i18next是一款广泛应用于浏览器和JavaScript环境,如Node.js,的国际化框架。它为开发者提供了强大而灵活的工具,帮助他们实现多语言支持,使应用程序能够适应不同地区的用户需求。i18next的设计目标是简化国际化...
总之,“jquery国际化demo”是一个很好的学习资源,通过它,开发者可以快速掌握如何在jQuery项目中实现多语言支持,提升用户体验,使应用更具全球化视野。这个小案例不仅展示了技术的运用,还强调了良好的注释习惯,...
虽然EasyUI本身没有内置的国际化功能,但可以通过自定义JavaScript来实现。你可以为每个组件的标题和提示文本设置特定语言的值,或者使用一个全局的语言配置文件来替换默认的文本。 5. **配置与实践** - 创建`src/...