随笔 - 115  文章 - 481  trackbacks - 0
<2007年12月>
2526272829301
2345678
9101112131415
16171819202122
23242526272829
303112345

常用链接

留言簿(19)

随笔档案(115)

文章档案(4)

新闻档案(1)

成员连接

搜索

  •  

最新评论

阅读排行榜

评论排行榜

  你不需要加任何额外的初始化标签,也不用担心所全部的多国语言文件放在一个大大的properties文件中所造成的管理不便,你所需要做的就是使用一个$lang.get标签,或者使用I18n.get方法,多国语言问题就会被优雅地解决掉。

EasyJWeb中的多国语言功能摘要:
1、 在页面中使用$lang.get(“属性名称”)来显示多国语言信息。
2、 在程序中使用I18n.get(“属性名称”)来获得多国语言信息。
3、 多国语言属性信息按模块存放,文件名为“模块名.properties”,存放在WEB-INF\applicationResources目录。
4、 application.properties代表全局的属性名,当在模块中找不到具体的定义时,会自动到全局模块中查找。
5、 可以使用$lang.get(“属性名”,”模块名”)或I18n.get(“属性名”,“模块名”)调用其它模块的多国语言属性信息,
6、使用$lang.getPrameterMessage(“属性名”,”参数1”…“参数n”)来得到带参数的多国语言属性信息。如:当message为“hello {0},your brother {1} is waiting for you。” 时,使用$lange.get ("message","WilliamRaym","Daxia"),在合成模板的时候将会变成下面的内容输出:
Hello WilliamRaym,your brother Daxia is waiting for you。
7、也可以直接使用$lang.get(“属性名”,”第一个参数’,”第二个参数.”,”第n个参数”)。
8、使用I18n 的changeLocale(String language)方法来直接把客户端首选语言切换为其它语言。
9、直接在模板的默认目录下开语言目录,使得应用中就具有多国语言模板支持。

这样的设计,你觉得还能凑合吗?如果还有更多的要求,欢迎提出来。

下载完整的示例:ftp://ftp1.easyjf.com/easyjweb/demo/i18n.war
EasyJWeb官方演示:http://easyjweb.demo.easyjf.com/i18n/user.ejf

下面具体讲解如何使用,就拿EasyJWeb的HelloWorld来说吧,看看他的原始模板:
HelloWorld中只有index.html一个页面,内容主要如下:

<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title>EasyJWeb的Hello World</title>
</head>
<body>
<div><h4>EasyJWeb版本的HelloWorld程序</h4></div>
<div>
来自EasyJWeb的问候:<font color="#0000FF">${msg}</font><br />
现在时间:<font color="#0000FF">${date}</font>
</div>
</body>
</html>

   分别使用“title”、“topic”、“greeting”及“time”来代表上面四个需要支持多国语言的提示信息,这样要在页面中显示“title”属性,则使用$lang.get("title")即可。添加了多国语言标签后的index.html页面内容如下:

<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title>$lang.get("title")</title>
</head>
<body>
<div>
<h4>$lang.get("topic")</h4>
</div>
<div>
$lang.get("greeting"):<font color="#0000FF">${msg}</font><br />
$lang.get("time"):<font color="#0000FF">${date}</font>
</div>
</body>
</html>

接下来,是在WEB-INF目录下建一个applicationResources目录,然后在该目录建立hello.properties及hello_zh_CN.properties来分别存放英文及中文信息,内容分别如下:
hello.properties
greeting = the greeting from EasyJWeb
time = current time
title = The Hello World of EasyJWeb
topic = The Hello World of EasyJWeb

hello_zh_CN.properties
greeting = \u6765\u81EAEasyJWeb\u7684\u95EE\u5019
time = \u73B0\u5728\u65F6\u95F4
title = EasyJWeb\u7684Hello World
topic = EasyJWeb\u7248\u672C\u7684HelloWorld\u7A0B\u5E8F

其它的代码都不用任何修改,分别修改浏览器的首先语言属性为英文及中文,然后打开hello.ejf,你会到如下图所示结果:

(首选语言为中文时的浏览效果)
 
(首选语言为英文时的浏览效果)

  从程序的运行效果我们可以看出,以前页面上固定的四个中文信息现在支持国际化了,如果还要增加对韩语及日语的支持,那么只需要在WEB-INF\applicationResources目录下添加hello_ko_KR.properties及hello_ja.properties两个文件,并在其中分别输入“title”等属性的值即可。
当然,通过图xx我们发现这个程序还没有完全“国际化”,由于从HelloAction中给msg的值已经被写死,因此这个程序不管遇到谁,在问候的时候仍然有一串中文字符:“您好,这是EasyJWeb的第一个程序!”。

  在EasyJWeb中,要在程序中使用多国语言信息非常简单,直接调用I18n工具类中的get("属性名")方法即可。下面修改HelloAction中的代码,把其中的:
form.addResult("msg", "您好,这是EasyJWeb的第一个程序!");修改为:
form.addResult("msg", I18n.get("message"));// I18n.get("message")表示从多国语言文件中加载名为message的属性

  然后我们在hello.properties中加入message属性的内容,如下:
message = hello, this is the first program of EasyJWeb!

  在hello_zh_CN.properties中加入message属性的内容,如下:
message=\u60A8\u597D\uFF0C\u8FD9\u662FEasyJWeb\u7684\u7B2C\u4E00\u4E2A\u7A0B\u5E8F\uFF01

  运行修改后的程序,在英文环境下浏览可以得到如图xxx所示的结果:
 

增加多国模板支持

  为了满足英语国家所喜欢的页面排版方式,我们可以在WEB-INF\views\hello目录下,添加一个子目录en,然后在en这个目录提供一个index.html文件,文件内容如下:

<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title>$lang.get("title")</title>
</head>
<body>
<div>
<h3><font color="#0000FF">Hi,My Dear Friend,I'm sure you know what I say.</font></h3>
<h4>$lang.get("topic")</h4>
</div>
<div>
$lang.get("greeting"):<font color="#0000FF">${msg}</font><br />
$lang.get("time"):<font color="#0000FF">${date}</font>
</div>
</body>
</html>

 

  则当客户端首选语言为英语的用户,在访问hello.ejf?cmd=index的时候,就会使用hello\en\index.html这个文件来作为视图模板输出,如下图所示:
 

  而其它客户端首选语言为非英语的用户在访问同样的url时,则会使用hello\index.html这个文件来做为视图模板输出,如下图所示。
 

  整个过程非常简单,不需要修改任何一句Java代码或配置文件,需要做就是让页面设计人员设计及制作页面。

posted on 2007-12-28 15:26 简易java框架 阅读(1648) 评论(4)  编辑  收藏

FeedBack:
# re: 这样的多国语言设计能凑合吗? 2007-12-28 18:26 HiMaigc!
作为一个页面设计人员他需要了解这句话吗? -- $lang.get("greeting")
在没有框架的时候,页面设计人员能进行设计吗?  回复  更多评论
  
# re: 这样的多国语言设计能凑合吗? 2007-12-28 19:23 sunday
你重复干着velocity和struts2 干的东西  回复  更多评论
  
# re: 这样的多国语言设计能凑合吗? 2007-12-28 19:35 sitinspring
关注一下.
  回复  更多评论
  
# re: 这样的多国语言设计能凑合吗? 2007-12-29 20:26 jj
标题真虚伪!!!  回复  更多评论
  

只有注册用户登录后才能发表评论。


网站导航: