struts2 国际化学习

greatmind829 2010-03-29 09:09:48
项目用struts2 做国际化,一个是英文的,一个是中文的。
项目所需要的数据库是如何设计的,是弄两个数据库了,还是有更好的方法了。
这个项目的国际化配置文件是如何管理的,我现在 建立了一个全局资源文件,页面 和action 中都 可以访问这个配置文件,这样的话,配置的文件量很大, 不好管理。
我想在 包级建立资源文件,这样就好管理一些,可在包级建立资源文件,页面是如何取包资源文件中的KEY的。
在action中也可能访问得到吗?你们有更好的方法吗?

请各位大哥,大姐给我讲解。。
...全文
392 18 打赏 收藏 转发到动态 举报
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
coolmon 2011-11-24
  • 打赏
  • 举报
回复
<s:text name="msg">用这标签就能在页面上显示了
redlotus_lyn 2010-03-30
  • 打赏
  • 举报
回复
包级资源文件KEY取得

Action继承ActionSupport类,用getText()方法即可;
cool_scorpion 2010-03-30
  • 打赏
  • 举报
回复
不错不错 ,谢谢楼主
kimiH 2010-03-30
  • 打赏
  • 举报
回复
没用过国际化,来学习一下!
ai_bing_er 2010-03-30
  • 打赏
  • 举报
回复
struts 好难学啊!!!
快乐开发者 2010-03-30
  • 打赏
  • 举报
回复
学习了
Y569778402 2010-03-30
  • 打赏
  • 举报
回复
上面得说的够详细了 我就不多说了
重返春季 2010-03-30
  • 打赏
  • 举报
回复
一、概念

I18N作为“国际化”的简称,其来源是明文单词“internationlization”的首末字符“i”和“n”之间的字符数为18。随着全球经济的遗体化为一种主流的趋势,软件开发者应该开发出支持多国语言、国家化的web应用程序吧。也就是一个web应用程序在运行时能够根据客户端请求所来自的国家和语言的不同显示不同的用户界面。这样,当需要在应用程序中添加对一种新的语言的支持时,不需要对已有的软件返工,无需修改应用程序的程序代码。

二、Struts对国家化的支持

在Struts框架中进行应用程序的国际化,支持重点在于应用程序的文本和图像表示。最重要的工作就是准备Resurce Bundle 资源包。事实上,准备资源包的过程,就是把对应不同语言的用户所涉及的文本和图片保存在多个文本文件中,客户端根据不同的环境需要进行更换。这些文件被称为“属性文件”,所有属性文件合在一起被称为资源包(Resource Bundle)。

Struts建立于Java平台之上,很容易建立国际化和本地化的应用程序。在这里你要熟悉的关键概念是:

1) Locale – 基础的支持国际化的java类是java.util.Locale。每个Locale代表一个特别的国家和语言的选择(加上一个可选的语言变量),以及一套格式假定,例如数字和日期等等。

2) ResourceBundle – java.util.ResourceBundle类提供支持多种语言消息的基本工具。查看文档中关于ResourceBundle类以及你的JDK版本的文档包中关于国际化的更多内容。

3) PropertyResourceBundle – 一个ResourceBundle类的标准实现允许你使用与初始化properties文件同样的键/值的语法来定义资源。这对于使用为用于一个web应用程序的消息准备资源包是非常方便的,因为这写消息通常都是面向文本的。

4) MessageFormat – java.text.MessageFormat类允许你使用运行时的指定的参数替换一个消息字符串中的一部分(在这种情况下,是一个从一个资源包得到的消息)。这在你创建一个句子的场合中是有用的,但是词会以不同的语言安照不同的顺序出现。消息中的占位符,字符串{0}用第一个运行时参数替换,{1}用第二个运行时参数替换,以此类推。

5) MessageResources – Struts的类org.apache.struts.util.MessageResources使你能够将一套资源包视做一个数据库,并且允许你为一个特定的Locale(通常是与当前用户相对应)请求一个特定的消息,而不是为服务器运行在其中的缺省的Locale请求消息。

三、示例

1、我们还在前面的登录实例进行加工。

2、在默认的applicationResources.properties文件中添加相应的消息文本。

label.username=username

label.password=password

button.submit=submit

button.reset=reset

3、创建临时中文资源文件:applicationResources_temp.propertyies

label.username=用户名

label.password=密码

button.submit=确定

button.reset=重置

4、对临时资源文件进行编码转换:

在JDK中提供了native2ascii命令,它能够实现字符编码转换。在DOS下执行以下命令,将生成按GBK以编码的中文资源文件:applicationResources_zh_CN.properties

native2ascii –encoding gbk applicationResources_temp.properties

applicationResources_zh_CN.properties

生成的applicationResources_zh_CN.properties的内容如下:

label.username="u7528"u6237"u540d

label.password="u5bc6"u7801

button.submit="u786e"u5b9a

button.reset="u91cd"u7f6e

当web用户的Locale为中文时,Struts框架将自动选择来自applicationResources_zh_CN.properties文件的消息文本。



5、创建英文的资源文件:

label.username=username

label.password=password

button.submit=submit

button.reset=reset

完成以上几个步骤后,在web 应用程序的根目录"WEB-INF目录"classes目录下应该有了三个资源文件:

默认资源文件:applicationResource.properties

中文资源文件:applicationResource_zh_CN.properties

英文资源文件:applicationResource_en.properties

6、创建struts的Resource Bundle

Struts配置文件中的元素定义了一个Resource Bundle。Resource Bundle的持久化消息文本存储在资源文件中,其扩展名为“.properties”,里面存放的都是“键/值”。

在struts-config.xml中对Resource Bundle的配置代码:



表示默认的资源文件应该是applicationResources.properties,存放在应用程序的根目录"WEB-INF目录"classes目录下。如果应用程序需要支持中文用户,要在相同目录下创建一个包涵中文消息的资源文件,文件名必须为applicationResource_zh_CN.properties。
xuhesheng 2010-03-30
  • 打赏
  • 举报
回复
有这个标签的
用来取得properties文件中的内容的
既然要做国际化
没有properties文件怎么行

建议数据库做两个
登陆页做一个
然后弄个标签或者按钮
让你选择中文或者英文
然后登陆的时候选择不同的properties文件就可以了

其他的对应弄一下
greatmind829 2010-03-30
  • 打赏
  • 举报
回复
<bean:message key=""/>
这个标签有吗?
kitajima-- 2010-03-30
  • 打赏
  • 举报
回复
在Action中,上面的加入那个属性就OK了,
kitajima-- 2010-03-30
  • 打赏
  • 举报
回复
可以取到资源文件的:
在JAVA类了,加入属性;
private static final ResourceBundle RESOURCE_BUNDLE = ResourceBundle.getBundle("mapdata");
/**
*mapdata是你的资源文件名称,比如是:mapdata.properties或者init.properties
*/
方法如下:
//RESOURCE_BUNDLE为mapdata.properties对应的属性文件
public static String getString(String key)
{

String v=null;
try{
v = RESOURCE_BUNDLE.getString(key);
}catch(Exception e){
//e.printStackTrace();
}

if(v == null){
v = "";
return v;
}
try{

return (new String(v.getBytes("iso-8859-1"), "gbk")).trim();
}catch(Exception e){

e.printStackTrace();
return v;
}
}
greatmind829 2010-03-30
  • 打赏
  • 举报
回复
<bean:message key=""/>
这个标签 是struts1 的,struts2 中没有。。
sunscok 2010-03-29
  • 打赏
  • 举报
回复
局部的资源文件,分为包级别,和类级别。
包级别
命名定义:package_en_US.properties,package_zh_CN.properties
其中package是固定的。把这两个文件放在一个action包中。
limit_clear 2010-03-29
  • 打赏
  • 举报
回复
[Quote=引用楼主 greatmind829 的回复:]
页面是如何取包资源文件中的KEY……
[/Quote]
<bean:message key=""/>
bbb332 2010-03-29
  • 打赏
  • 举报
回复
I18N????????????????

67,513

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧