如何在运行时更改Locale.setDefault(新的Locale(“en”,“US”))?

时间:2011-11-27 02:02:57

标签: spring java-ee internationalization locale

我一直在寻找关于如何通过Locale重置/更改Java(Spring)Web应用程序的Locale.setDefault(new Locale ("en", "US"))的答案。有人可以帮助我,因为看到我在我的网络应用程序中设置Locale后,我无法通过简单地调用Locale.setDefault(new Locale ("newLang", "newCountry"))来改变它,这是令人沮丧的。

是否在服务器上缓存了区域设置?

3 个答案:

答案 0 :(得分:3)

Locale.setDefault是全球性的。如果您有两个用户需要使用无法解决的不同语言环境。

您应该将语言环境放在HttpServletRequest.getSession()

在我们完成全局setDefault之后,它甚至切换了应用程序服务器的语言和日志记录。

答案 1 :(得分:1)

Locale.setDefault(...)对于何时或可以调用多少次没有限制。安全经理可以防止这种变化,但我认为这不是你的情况,因为你没有提到任何例外(但以防万一,验证你是否隐藏{{ 1}}在try-catch块中。)

您可能会观察到此类行为的其他原因是,您的应用程序可能只获取一次默认语言环境,对其进行缓存并永久使用?

答案 2 :(得分:-2)

public String arabic_lng() {
    // Add event code here...
        FacesContext ha_faces= FacesContext.getCurrentInstance();
        Locale ar = new Locale("ar","SA");
       Locale.setDefault(new Locale ("ar","SA"));
        System.out.println(ar.getDisplayName(ar));
        ha_faces.getViewRoot().setLocale(ar);



    return null ;
}

public String eng_lng() {
    // Add event code here...

    FacesContext ha_faces= FacesContext.getCurrentInstance();
    Locale en = new Locale("en", "US");
    System.out.println(en.getDisplayName(en));
    ha_faces.getViewRoot().setLocale(en);
    Locale.setDefault(new Locale ("en", "US"));

    return null ;
}