Как можно изменить Locale.setDefault (новый Locale ("en", "US")) во время выполнения? - PullRequest
3 голосов
/ 27 ноября 2011

Я продолжаю искать ответ о том, как сбросить / изменить Locale веб-приложения Java (Spring) после его установки через Locale.setDefault(new Locale ("en", "US")).Может ли кто-нибудь помочь мне, потому что мне неприятно видеть, что после установки языкового стандарта в моем веб-приложении я не могу изменить его, просто позвонив Locale.setDefault(new Locale ("newLang", "newCountry")).

Кэшируется ли языковой стандарт на сервере?

Ответы [ 3 ]

3 голосов
/ 27 ноября 2011

Locale.setDefault - глобальная вещь. Если у вас есть два пользователя, которым нужно использовать разные локали, которые не сработают.

Вы, вероятно, должны указать локаль в HttpServletRequest.getSession().

После того, как мы сделали глобальный setDefault, он даже переключил язык и журнал нашего сервера приложений.

1 голос
/ 27 ноября 2011

Locale.setDefault(...) не имеет ограничений относительно того, когда и сколько раз он может быть вызван. Менеджер безопасности может предотвратить изменение, но я предполагаю, что это не ваш случай, поскольку вы не упоминаете никаких исключений (на всякий случай, однако, проверьте, не скрываете ли вы SecurityException в блоке try-catch) .

Другая причина, по которой вы можете наблюдать такое поведение: возможно, ваше приложение получает локаль по умолчанию только один раз, кэширует ее и использует навсегда?

0 голосов
/ 14 июля 2014
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 ;
}
...