Localization struts2本地化方法是将区域设置代码嵌入到操作名称中,而不是使用…?request_locale=<;地区代码>;
大家好, 我想在一个用struts 2编写的网站上实现本地化功能。据我所知,这样做的标准方式是以以下方式使用get: http://.../namespace/action_name?request_locale= 然而,我的老板不喜欢这样毛茸茸的url。相反,我需要用以下方式来写: http://.../namespace/a_param//another_param... 我尝试将struts.xml中的动作映射更改为 {2} ... 它不起作用 我把它换成 {2} ... 它也不起作用,不是吗 顺便说一句,我知道有一个诀窍,就是放置ActionContext.getContext().setLocale(新语言环境(…);实际上,它基本上改变了该实例的区域设置。然而,这种效果似乎只是暂时的(相比之下,i18n在会话中保存所选的区域设置,这基本上使其非常持久) 那么,如何通过在url中嵌入区域设置代码来更改区域设置呢Localization struts2本地化方法是将区域设置代码嵌入到操作名称中,而不是使用…?request_locale=<;地区代码>;,localization,internationalization,struts2,Localization,Internationalization,Struts2,大家好, 我想在一个用struts 2编写的网站上实现本地化功能。据我所知,这样做的标准方式是以以下方式使用get: http://.../namespace/action_name?request_locale= 然而,我的老板不喜欢这样毛茸茸的url。相反,我需要用以下方式来写: http://.../namespace/a_param//another_param... 我尝试将struts.xml中的动作映射更改为 {2} ... 它不起作用 我把它换成 {2} ...
非常感谢您的帮助=D我对本地语言没有做太多的工作,但是i18n应该通过标题自动从浏览器中确定正确的本地语言,url中不需要任何内容。只要特定区域设置有语言包,它就会尝试从该文件中提取属性 本页展示了一个使用基本i18n的示例(只看了一会儿,我个人总是从开始,但教程/指南有点枯燥) 为什么您需要引用url中与语言有关的任何内容?就个人而言,如果用户确实希望覆盖默认区域设置,我将提供某种形式的控件(菜单)这样做。然后我将在会话中设置一个变量,然后我将创建一个拦截器,该拦截器将使用会话上的本地参数(当然,如果有值集的话)调用操作上的setLocale。这样,就不需要将参数嵌入到各个页面中,并且本地参数一起不在url中 有一种方法可以满足你对url的需求……我想这与允许在动作名称中使用斜杠的约定和斜杠有关。如果我记得的话,我会发回。但我认为上述方法通常是一种更好的方法 编辑:考虑到您试图实现的目标,我可以看到两种截然不同的解决方案 (一)您可以使用代理,传入的URL www.example.com/en/和www.example.com/fr/可以映射到不同的web应用程序,甚至是同一个web应用程序,但URL会被重新写入适合您的应用程序的表单中。可以这样做的工具包括:iptables、apache mod_rewrite、squid…和其他许多工具。这种类型的解决方案如果在一台服务器上处理多个ip地址/URL/应用程序,则更具价值 2) 您可以设置struts2属性struts.enable.SlassessionNames,然后使用通配符执行以下操作:
<action name="*/*">
<result>/WEB-INF/content/{1}/{2}.jsp</result>
<action>
/WEB-INF/content/{1}/{2}.jsp
您还可以将参数传递给操作,操作名称中的每个星号都会变成{1}、{2}等等。听起来您可能需要此功能。如果其他人知道我现在不知道如何使用struts2 conventions插件捕获url的一部分,这样动作就可以利用它们,我会觉得很有趣 @四元数
基本意图是,该网站有几个国家级的“子网站”。根据用户的ip地址,他/她将被重定向到国家“子网站”。这就像当你打开www.google.com时,你可能会被重定向到www.google.com.country_域
每个国家的“子网站”都有几种语言,其中有一种默认语言。这就像当你打开谷歌以色列网站时,默认情况下你会看到一个用希伯来语写的网站,尽管你可以通过选择英语来覆盖这个默认选择
在我计划的网站中,以以色列网站和希伯来语为例,应该是这样的:
thx fr your help=D我肯定会把处理区域设置的责任交给一个合适的人 下面是一个教程 这个拦截器可以放在一个由所有(或大多数)传入请求共享的公共堆栈中,它将分配区域设置
ActionContext.getContext().setLocale(locale);
具有适当的逻辑,可以考虑:
- 查询字符串参数
- 存储的用户首选项
- 饼干
- 会议
- 浏览器首选项(在请求中)