struts架构中的国际化问题

pirateRocy 2003-08-26 10:41:27
我的操作系统 中文win2k advance server,浏览器 中文IE6.0,
我配置了中英文二个版本的资源文件如下:
ApplicationResources.properties 默认的是英文
ApplicationResources_en.properties 英文版
ApplicationResources_zh.properties 中文版


jsp文件如下:

<%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %>
<html>
<head><title>Wiley Struts Application</title></head>
<body>
<bean:message key="app.symbol"/>
</body>
</html>

在我的中文的IE上浏览该JSP页面时,返回的确实是中文版的内容,(这一点从 查看--源文件 中就能看到。) 但是由于浏览器选择了西欧(ISO)的编码,所以显示的是乱码,必须要手动地选择 查看--编码--简体中文(GB2312)才可以正确显示中文。
在别人的英文linux操作系统 的konquror浏览器上,返回的也确实是英文版的内容,显示一切正常。
现在我的问题如下:

1)为什么我的中文的IE上浏览该JSP页面时,必须要手动地选择编码方式后才可以正确显示?如何解决这个问题?

2)好象返回的语言版本是基于client的OS或浏览器的,但是比如client的OS和浏览器虽然是中文版的,但是就是想看英文内容的网页,这个问题又如何解决?
...全文
21 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
icecloud 2003-09-08
  • 打赏
  • 举报
回复
全部都用utf-8
squallzeng 2003-09-08
  • 打赏
  • 举报
回复
你的第二个问题是如何解决的啊?说来听听!!!!
squallzeng 2003-09-08
  • 打赏
  • 举报
回复
这是有关于你的问题的一点点资料,不知道对你有用不?*-*
strtus框架支持国际化和本地化。用户在他们的计算机中定义自己所在的区域,当web应用程序需要输出一条消息时,它将引用一个资源文件,在这个文件中所有的消息都使用了适当的语言。一个应用程序可能提供了很多资源文件,每个文件提供了用不同语言编写的消息。如果没有找到所选语言的资源文件,就将使用默认的资源文件。
struts框架对国际化的支持是使用<bean:message>标记,以及使用java.util数据包中定义的Locale和ResourceBundle类来实现Java2平台对这些任务的支持。Java.text.MessageFormat类定义的技术可以支持消息的格式。利用此功能,开发人员不需了解这些类的细节就可进行国际化和设置消息的格式。
用strtus实现国际化和本地化:
第一步要定义资源文件的名称,这个文件会包含用默认语言编写的在程序中会出现的所有消息。这些消息以“关键字-值”的形式存储,如下:
error.validation.location = The entered location is invalid
这个文件需要存储在类的路径下,而且它的路径要作为初始化参数传送给ActionServlet作为参数进行传递时,路径的格式要符合完整Java类的标准命名规范。比如,如果资源文件存储在WEB-INF\classes目录中,文件名是ApplicationResources.properties,那么需要传递的参数值是ApplicationResources。如果文件在WEB-INF\classes\com\test中,那么参数值就应该是com.test. ApplicationResources.
为了实现国际化,所有的资源文件必须都存储在基本资源文件所在的目录中。基本资源文件包含的是用默认地区语言-本地语言编写的消息。如果基本资源文件的名称是ApplicationResources.properties,那么用其他特定语言编写的资源文件的名称就应该是ApplicationResources_xx.properties(xx为ISO编码,如英语是en)。因此这些文件应包含相同的关键字,但关键字的值是用特定语言编写的。
ActionServlet的区域初始化参数必须与一个true值一起传送,这样ActionServlet就会在用户会话中的Action.LOCALE_KEY关键字下存储一个特定用户计算机的区域对象。现在可以运行一个国际化的web站点,它可以根据用户计算机上的设置的区域自动以相应的语言显示。
我们还可以使用特定的字符串来替换部分消息,就象用java.text.MessageFormat的方法一样:
error.invalid.number = The number {0} is valid
我们可以把字符串{0}替换成任何我们需要的数字。<bean:message>标签属性如下:
属性 描述
Key 资源文件中定义消息关键字
Locale 用户会话中存储的区域对象的属性名称。若没有设置,默认值是Action.LOCALE_KEY
Bundle 在应用程序上下文中,存储资源对象的属性的名称。如果没有设置这个属性,默认值是Action.MESSAGE_KEY
arg0 第一个替换参数值
arg1 第二个替换参数值
arg2 第三个替换参数值
arg3 第四个替换参数值
例如:资源文件中定义了一个消息:
info.myKey = The numbers entered are {0},{1},{2},{3}
我们可使用下面的消息标记:
<bean:message key=”info.myKey” arg0=”5” arg1=”6” arg2=”7” arg3=”8”/>
这个信息标记输出到JSP页会显示为:The numbers entered are 5,6,7,8
Jass 2003-08-27
  • 打赏
  • 举报
回复
可以在程序里写response.setContentType(contentType);
contentType从配置文件中读取
pirateRocy 2003-08-26
  • 打赏
  • 举报
回复
怎么用,请稍微详细地说说。
ticlej 2003-08-26
  • 打赏
  • 举报
回复
使用struts的filter character功能
ticlej 2003-08-26
  • 打赏
  • 举报
回复
使用struts的filter Character功能.
pirateRocy 2003-08-26
  • 打赏
  • 举报
回复
to squallzeng(小呆呆)
你的方案对解决这个问题是可以的,但是我担心的是:

象你这样在JSP页面中写死用GB2312,如果人家要看的是日文版的呢?又怎么办?

还有,我提的第二个问题怎么解决?
squallzeng 2003-08-26
  • 打赏
  • 举报
回复
<%@ page
language="java"
contentType="text/html; charset=GB2312"
pageEncoding="GB2312"
%>
在你的JSP页面加这个看一看
liuyan7903 2003-08-26
  • 打赏
  • 举报
回复
学习,关注!
pirateRocy 2003-08-26
  • 打赏
  • 举报
回复
提的第二个问题,我已经解决了!

针对第一个问题,如果在JSP页面中写死用GB2312,如果人家要看的是日文版的呢?又怎么办?

wkliangsdqd 2003-08-26
  • 打赏
  • 举报
回复
这个我也说不出来怎么解决!!
我用过的只是 squallzeng(小呆呆) ( ) 的方法!!
企它的还不知道!
whyxx 2003-08-26
  • 打赏
  • 举报
回复
http://www.ccw.com.cn/htm/app/aprog/01_7_18_2.asp
对你也许有用
chensoushi 2003-08-26
  • 打赏
  • 举报
回复
写Locale

67,512

社区成员

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

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