2010-07-20 8 views
2

Почему весна «ReloadableResourceBundleMessageSource» не в состоянии найти правильное сообщение, связанное с кодом, когда Locale.getDefault() возвращает ан, но в состоянии найти правильное сообщение когда он возвращается en_usReloadableResourceBundleMessageSource не удалось найти сообщение, когда локаль по умолчанию является «ан»

По умолчанию локаль: en_US

key: CODE_1, Locale: Locale.US   = Hit 
key: CODE_1, Locale: Locale.CANADA  = Hit 
key: CODE_1, Locale: fr_CA    = Hit 
key: CODE_1, Locale: null (use default) = Hit 

По умолчанию Locale: EN

key: CODE_1, Locale: Locale.US    = Hit 
key: CODE_1, Locale: Locale.CANADA   = CODE_1 
key: CODE_1, Locale: fr_CA     = CODE_1 
key: CODE_1, Locale: null (use default)  = CODE_1 

У меня есть только один пакет, который имеет CODE_1 в пути к классам, который message_en_US.properties

+0

В каком слове/локали обозначен «Хит»? – mdma

+0

обновил сообщение с помощью ресурсного пакета, в котором определяется Хит –

ответ

5

Сообщение определено только для локали en_US, так как определено в файле message_en_US.properties. Причина, по которой вы меняете поведение при переключении с локали en_US (Locale.US) на en, состоит в том, что ReloadableResourceBundleMessageSource по умолчанию делает fallback системной локали, если сообщение не найдено в запрошенной языковой системе.

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

Если язык по умолчанию равен en, работает только запрос en_US, так как он находится в правильном файле свойств. Для всех остальных сообщение не найдено в соответствующем файле свойств, и оно также не найдено в резервном локали en.

2

Это потому, что он не может найти меньше стран, специфические для языка свойства/файлы messages_en.properties и messages.properties.

Если вы хотите иметь пакет по умолчанию для всех en языков, независимо от страны, то вы должны иметь messages_en.properties. Если вы хотите иметь комплект по умолчанию для всех языков, вы должны иметь messages.properties.

messages_en_US.properties фактически только полезно, когда у вас есть несколько диалектов английского языка как en_UK и en_US, но тогда вы действительно должны также поставить еще один для другого английского «диалект». Один из них должен быть назван messages_en.properties, который затем может использоваться в качестве «стандартного» английского пакета для посетителей, которые не указывают страну.

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