Java Struts 1.3:如何在web应用程序中设置默认语言环境?

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

我的struts应用程序中有两三个i18n文件。通过在会话中设置
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

我知道您的问题已经很久了,但只是为了以防万一其他人也遇到同样的问题:)我知道您的问题已经很久了,但只是为了以防万一其他人也遇到同样的问题:)