ReloadableResourceBundleMessageSource не может найти сообщение, если языковой стандарт по умолчанию - "en" - PullRequest
2 голосов
/ 20 июля 2010

Почему источник "ReloadableResourceBundleMessageSource" не может найти правильное сообщение, связанное с кодом, когда Locale.getDefault () возвращает en , но способен найти правильное сообщение, когда возвращает en_US

Язык по умолчанию: 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

Язык по умолчанию: 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

Ответы [ 2 ]

5 голосов
/ 28 июля 2010

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

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

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

2 голосов
/ 27 июля 2010

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

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

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

...