Java Struts 1.3:如何在web应用程序中设置默认语言环境?
我的struts应用程序中有两三个i18n文件。通过在会话中设置Java Struts 1.3:如何在web应用程序中设置默认语言环境?,java,locale,struts-1,Java,Locale,Struts 1,我的struts应用程序中有两三个i18n文件。通过在会话中设置Global.LOCALE\u键变量,我可以在这些选项之间切换 有没有办法为应用程序设置默认的语言环境(我想可能在struts-config.xml文件中)?会话是否是设置区域设置的唯一位置 当然,我可以拦截对第一页的调用并在会话中设置变量,但这更麻烦。在web.xml中,您可以定义一个上下文参数: <context-param> <param-name>LOCALE</param-name&g
Global.LOCALE\u键
变量,我可以在这些选项之间切换
有没有办法为应用程序设置默认的语言环境(我想可能在struts-config.xml文件中)?会话是否是设置区域设置的唯一位置
当然,我可以拦截对第一页的调用并在会话中设置变量,但这更麻烦。在web.xml中,您可以定义一个上下文参数:
<context-param>
<param-name>LOCALE</param-name>
<param-value>en-GB</param-value>
</context-param>
场所
欧洲标准
然后在您的Web应用程序中提前:
java.util.Enumeration<String> setout = servletContext.getInitParameterNames();
while (setout.hasMoreElements()) {
String paramName = setout.nextElement();
configProperties.put(paramName, servletContext.getInitParameter(paramName));
}
java.util.Enumeration setout=servletContext.getInitParameterNames();
while(setout.hasMoreElements()){
字符串paramName=setout.nextElement();
put(paramName,servletContext.getInitParameter(paramName));
}
尽管您必须更改该属性行以将其粘贴到会话中。您可能需要创建一个ActionComponentServlet版本,它可以像这样进行预初始化
可能有更好的方法可以做到这一点,这只是我继承的代码。在web.xml中,您可以定义一个上下文参数:
<context-param>
<param-name>LOCALE</param-name>
<param-value>en-GB</param-value>
</context-param>
场所
欧洲标准
然后在您的Web应用程序中提前:
java.util.Enumeration<String> setout = servletContext.getInitParameterNames();
while (setout.hasMoreElements()) {
String paramName = setout.nextElement();
configProperties.put(paramName, servletContext.getInitParameter(paramName));
}
java.util.Enumeration setout=servletContext.getInitParameterNames();
while(setout.hasMoreElements()){
字符串paramName=setout.nextElement();
put(paramName,servletContext.getInitParameter(paramName));
}
尽管您必须更改该属性行以将其粘贴到会话中。您可能需要创建一个ActionComponentServlet版本,它可以像这样进行预初始化
可能还有更好的方法,这只是我继承的代码。Hm,我最终通过编写Java代码而不是使用struts-config.xml解决了这个问题 我创建了一个上下文侦听器来设置Struts类中静态字段的值 见这个问题:
嗯,我最终通过编写Java代码而不是使用struts-config.xml解决了这个问题 我创建了一个上下文侦听器来设置Struts类中静态字段的值 见这个问题:
如果您只需要选择一个资源文件作为默认文件,只需省略文件名中的语言代码:
Texts_en_GB.properties
Texts_pt_BR.properties
Texts.propertiers ( <-- this one will be selected when no resources for requested language could be found)
默认语言环境与不带后缀的属性中的语言不同:text.properties
假设我们的文本。属性文件将包含英文文本。另外还有一个德语翻译:text\u de.properties
。我们的默认系统语言环境是法语,因为我们在法语服务器上运行(并且没有明确设置)
如果服务器启动后的第一个请求请求对页面进行德语翻译,则如果请求的语言代码没有明确的属性文件,则同一页面的所有后续请求都将以德语提供
如果第一个请求请求一个英文页面,那么如果请求的语言代码(这是我们想要的)没有明确的属性文件,那么同一页面的每个后续请求都将以英文提供
此问题的解决方案是为每个消息资源声明设置mode属性:
<message-resources key="Texts" parameter="com.mycompany.Texts" null="false">
<set-property key="mode" value="JSTL" />
</message-resources>
如果您只需要选择一个资源文件作为默认文件,只需在文件名中省略语言代码即可:
Texts_en_GB.properties
Texts_pt_BR.properties
Texts.propertiers ( <-- this one will be selected when no resources for requested language could be found)
默认语言环境与不带后缀的属性中的语言不同:text.properties
假设我们的文本。属性文件将包含英文文本。另外还有一个德语翻译:text\u de.properties
。我们的默认系统语言环境是法语,因为我们在法语服务器上运行(并且没有明确设置)
如果服务器启动后的第一个请求请求对页面进行德语翻译,则如果请求的语言代码没有明确的属性文件,则同一页面的所有后续请求都将以德语提供
如果第一个请求请求一个英文页面,那么如果请求的语言代码(这是我们想要的)没有明确的属性文件,那么同一页面的每个后续请求都将以英文提供
此问题的解决方案是为每个消息资源声明设置mode属性:
<message-resources key="Texts" parameter="com.mycompany.Texts" null="false">
<set-property key="mode" value="JSTL" />
</message-resources>
如果要在创建会话时设置会话,可以使用HttpSessionListener。为每个新会话设置默认区域设置的方式如下:
package com.mycompany.web.session;
import javax.servlet.http.HttpSessionEvent;
import javax.servlet.http.HttpSessionListener;
import org.apache.struts.Globals;
public class LocaleController implements HttpSessionListener {
private static Locale defaultLocale = locale.ENGLISH;
@Override
public void sessionCreated(HttpSessionEvent event) {
event.getSession().setAttribute(Globals.LOCALE_KEY, defaultLocale);
}
@Override
public void sessionDestroyed(HttpSessionEvent event) {
}
}
然后将此元素添加到web.xml文件:
<listener>
<listener-class>com.mycompany.web.session.LocaleController</listener-class>
</listener>
com.mycompany.web.session.LocaleController
或者,您可以通过方法ServletContext.addListener“以编程方式”添加会话。如果您想在创建会话时设置会话,可以使用HttpSessionListener。为每个新会话设置默认区域设置的方式如下:
package com.mycompany.web.session;
import javax.servlet.http.HttpSessionEvent;
import javax.servlet.http.HttpSessionListener;
import org.apache.struts.Globals;
public class LocaleController implements HttpSessionListener {
private static Locale defaultLocale = locale.ENGLISH;
@Override
public void sessionCreated(HttpSessionEvent event) {
event.getSession().setAttribute(Globals.LOCALE_KEY, defaultLocale);
}
@Override
public void sessionDestroyed(HttpSessionEvent event) {
}
}
然后将此元素添加到web.xml文件:
<listener>
<listener-class>com.mycompany.web.session.LocaleController</listener-class>
</listener>
com.mycompany.web.session.LocaleController
或者,您可以通过方法ServletContext.addListener“以编程方式”添加它。addListener我知道您的问题已经很久了,但只是为了以防万一其他人也遇到同样的问题:)我知道您的问题已经很久了,但只是为了以防万一其他人也遇到同样的问题:)