【问题标题】:How can Locale.setDefault(new Locale ("en", "US")) be changed at runtime?如何在运行时更改 Locale.setDefault(new Locale ("en", "US"))?
【发布时间】:2011-11-27 02:02:56
【问题描述】:

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

语言环境是否被缓存在服务器上?

【问题讨论】:

    标签: spring jakarta-ee internationalization locale


    【解决方案1】:

    Locale.setDefault 是一个全球性的东西。如果您有两个用户需要使用不同的语言环境,那就行不通了。

    您可能应该将语言环境放在HttpServletRequest.getSession() 中。

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

    【讨论】:

    • 谢谢,我会尝试继承 Velocity ResourceTool.java 并根据客户的请求返回语言环境。希望这会奏效。干杯,
    【解决方案2】:

    Locale.setDefault(...) 对调用的时间和次数没有任何限制。安全管理器可以阻止更改,但我认为这不是您的情况,因为您没有提及任何异常(但以防万一,请验证您是否没有在 try-catch 块中隐藏 SecurityException) .

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

    【讨论】:

    • 实际上是 Apache Velocity ResourceTool 类,它使用 Default Locale 集,然后使用它来呈现 Velocity 模板。上面的 Udo Held 指出 setDefaultLocale() 会影响整个应用程序。我可能需要继承 ResourceTool.java 并根据会话请求返回语言环境。
    【解决方案3】:
    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 ;
    }
    

    【讨论】:

    • 如果你可以添加一些单词而不是只发布源代码会更好。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-31
    • 2021-03-06
    • 2020-06-21
    • 1970-01-01
    • 1970-01-01
    • 2013-12-05
    相关资源
    最近更新 更多