讨论一下SSH(2):国际化问题 继续等niu人加分:) 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 很高兴能和楼主探讨,在做Struts时也遇到国际化问题,在action里面可以取得国际化资源:MessageResources resources = this.getResources(request, "message");jsp里面可以像楼主所说的那样:1.先设置localerequest.getSession().setAttribute(Globals.LOCALE_KEY,locale);2.根据bundle和key取得资源<bean:message bundle="user" key="user.name"/> 建议楼主通过用户选择来做国际化,单纯的通过struts去获取客户端的区域来做会有问题.一些公用的格式转换可以通过参数条件来做.比如说所有的校验都需要传递个local参数.而在校验里通过local来判定使用哪种校验方式.关于数据库存储的数据如日期\货币等都可以是标准格式,在显示时根据区域不同转成相应的格式.这么做法的效率肯定没有直接指定来的快.但能避免很多问题.时区是个大问题.如果真要做到这个,那估计得通过IP去查用户在哪国了.呵呵,或者不考虑这个原因,用户选择什么语言就给他显示什么时间. 单纯的通过struts去获取客户端的区域来做会有问题.这个怎么讲?时区是个大问题.如果真要做到这个,那估计得通过IP去查用户在哪国了.呵呵,或者不考虑这个原因,用户选择什么语言就给他显示什么时间.这确实是个大问题比如google,即使是选择了用英文界面,它仍然知道你是中国的,估计是通过IP确定 对头如果在Struts Action里,可以直接使用Struts的工具类Locale locale = this.getLocale(request);MessageResources messageResource = this.getResources(request, "UserResources"); String userName = messageResource.getMessage(locale, "user.name");如果不是Action,可以参考Struts Action中getLocale和getResources的实现Locale locale = RequestUtils.getUserLocale(request, null);MessageResources messageResource = (MessageResources) request.getAttribute(Globals.MESSAGES_KEY);String userName = messageResource.getMessage(locale, "user.name");其中RequestUtils.getUserLocale的实现如下先从session里看有没有自定义过local(Locale) session.getAttribute(Globals.LOCALE_KEY);如果没有,取环境的local(IE或系统的语言设置)request.getLocale();[/code] 顶一个,Struts好久都没用了,国际化用得更少,过来学习... 过来学习。。现在也在用struts还有spring、hibernate做项目。。感觉struts框架比较成熟。。 语言不一样,显示也不一样比如"中国"是2个字,"China"是5个字母,页面很难搞定样式什么的,而且有的字是嵌在图片里的我们一般是对一种语言做一套页面出来,选择哪种语言,需要用户自己去选择,而不是自动国际化 这是个好东西,不过我看到的很多都是cn/en/jp/等目录下,分别放置。这样让故意让人家看看我有几个版本,好像很牛的。呵呵 关于流InputStream 转码问题 struts2和spring2.5集成问题 struts2传参数的问题 java jdk 运行一个tcp的聊天程序 出现的问题 IP2GeoLocation有什么开源的产品吗?求大神指教。。 java问题 求助:急,计时器!!! Web Service 状态管理问题??急需回答!! EJB的效率问题 如何改变web service中wsdl的编码方式? Struts如何获取JSP页面中定义的Java变量呢? 配置Struts2出错,老鸟知道怎么回事儿么
MessageResources resources = this.getResources(request, "message");
jsp里面可以像楼主所说的那样:
1.先设置locale
request.getSession().setAttribute(Globals.LOCALE_KEY,locale);
2.根据bundle和key取得资源
<bean:message bundle="user" key="user.name"/>
一些公用的格式转换可以通过参数条件来做.
比如说所有的校验都需要传递个local参数.而在校验里通过local来判定使用哪种校验方式.关于数据库存储的数据如日期\货币等都可以是标准格式,在显示时根据区域不同转成相应的格式.
这么做法的效率肯定没有直接指定来的快.但能避免很多问题.时区是个大问题.如果真要做到这个,那估计得通过IP去查用户在哪国了.呵呵,或者不考虑这个原因,用户选择什么语言就给他显示什么时间.
单纯的通过struts去获取客户端的区域来做会有问题.
这个怎么讲?时区是个大问题.如果真要做到这个,那估计得通过IP去查用户在哪国了.呵呵,或者不考虑这个原因,用户选择什么语言就给他显示什么时间.
这确实是个大问题
比如google,即使是选择了用英文界面,它仍然知道你是中国的,估计是通过IP确定
对头
如果在Struts Action里,可以直接使用Struts的工具类Locale locale = this.getLocale(request);
MessageResources messageResource = this.getResources(request, "UserResources");
String userName = messageResource.getMessage(locale, "user.name");如果不是Action,可以参考Struts Action中getLocale和getResources的实现Locale locale = RequestUtils.getUserLocale(request, null);
MessageResources messageResource = (MessageResources) request.getAttribute(Globals.MESSAGES_KEY);
String userName = messageResource.getMessage(locale, "user.name");其中RequestUtils.getUserLocale的实现如下先从session里看有没有自定义过local
(Locale) session.getAttribute(Globals.LOCALE_KEY);
如果没有,取环境的local(IE或系统的语言设置)
request.getLocale();[/code]
比如"中国"是2个字,"China"是5个字母,页面很难搞定样式什么的,而且有的字是嵌在图片里的
我们一般是对一种语言做一套页面出来,选择哪种语言,需要用户自己去选择,而不是自动国际化
不过我看到的很多都是
cn/
en/
jp/
等目录下,分别放置。
这样让故意让人家看看我有几个版本,好像很牛的。呵呵