2013-11-27 3 views
2

У меня есть некоторые проблемы с добавлением нескольких языков на мой сайт.Почему ResourceBundle.getBundle (String, Locale) игнорирует локаль?

Он отлично работает в файле .jsp с jstl, но когда я пытаюсь получить переводы с помощью Java-кода, он игнорирует параметр Locale и использует локали браузера клиента.

у меня есть:

Два свойство файл: dictionary.properties, содержащий: validate.firstname.empty=You have to enter a first name dictionary_nl.properties, содержащий: validate.firstname.empty=U heeft geen voornaam ingevuld

И это Java-код:

public List<String> validate(UserForm user, Locale locale) 
{ 
    List<String> errors = new ArrayList<>(); 
    ResourceBundle resources = ResourceBundle.getBundle("dictionary", new Locale("en")); 

    if (user.getFirstName() == null || user.getFirstName().trim().isEmpty()) 
    { 
     errors.add(resources.getString("validate.firstname.empty")); 
    } 
    return errors; 
} 

Для целей тестирования , Я вставил новый экземпляр Locale в getBundle, но он по-прежнему возвращает голландский перевод, если мой браузер установлен на голландский, и перевод на английский язык, если браузер установлен на английский.

ответ

3

На самом деле getBundle() не игнорирует локаль, это просто , как представляется, игнорировать его в вашей конфигурации.

Поскольку в вашей конфигурации нет файла dictionary_en.properties, язык Locale для языка «en» не будет иметь никакого эффекта в поиске файла ResourceBundle.

Тест с new Locale("nl") вместо этого, и вы всегда будете получать голландский перевод независимо от языка, установленного в вашем браузере.

Дополнительная информация в документации:
http://docs.oracle.com/javase/6/docs/api/java/util/ResourceBundle.html#getBundle%28java.lang.String,%20java.util.Locale,%20java.lang.ClassLoader%29

Смежные вопросы