Spring Resource bundle с примером ResourceBundleMessageSource
В Spring вы можете использоватьResourceBundleMessageSource
для разрешения текстовых сообщений из файла свойств на основе выбранных локалей. Смотрите следующий пример:
1. Структура каталогов
Просмотрите структуру каталогов этого примера.
2. Файл свойств
Создайте два файла свойств, один для английских символов (messages_en_US.properties
), другой для китайских символов (messages_zh_CN.properties
). Поместите его в путь к классу проекта (см. Рисунок выше).
Файл: messages_en_US.properties
customer.name=Yong Mook Kim, age : {0}, URL : {1}
Файл: messages_zh_CN.properties
customer.name=\ufeff\u6768\u6728\u91d1, age : {0}, URL : {1}
«杨木金» - это символы Юникода на китайском языке.
Note
Для правильного отображения китайских иероглифов необходимо использовать «http://www.example.com/java/java-convert-chinese-character-to-unicode-with-native2ascii/. [native2ascii] »для преобразования китайских иероглифов в символы Юникода.
3. Файл конфигурации бина
Включите файл свойств в файл конфигурации бина. И «messages_en_US.properties», и «messages_zh_CN.properties» считаются одним файлом в Spring, вам просто нужно указать имя файла один раз, и Spring автоматически найдет правильный языковой стандарт.
locale\customer\messages
P.S Assume both files are located at “resources\locale\customer\u201d folder.
4. Запустить его
package com.example.common; import java.util.Locale; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; public class App { public static void main(String[] args) { ApplicationContext context = new ClassPathXmlApplicationContext("locale.xml"); String name = context.getMessage("customer.name", new Object[] { 28,"http://www.example.com" }, Locale.US); System.out.println("Customer name (English) : " + name); String namechinese = context.getMessage("customer.name", new Object[] {28, "http://www.example.com" }, Locale.SIMPLIFIED_CHINESE); System.out.println("Customer name (Chinese) : " + namechinese); } }
Выход
Note
Убедитесь, что вашEclipse is able to display Chinese output.
объяснение
1. Вcontext.getMessage()
второй аргумент - это параметры сообщения, вы должны передать его как массив объектов. Вы можете просто передать ноль, если нет доступных значений параметров.
context.getMessage("customer.name",null, Locale.US);
2. Locale.US будет получать сообщения от «messages_en_US.properties», а Locale.SIMPLIFIED_CHINESE будет получать сообщения от «messages_zh_CN.properties».
More …
Прочтите эту статью, чтобы узнать, как получить доступ кMessageSource inside a bean.
Скачать исходный код
Скачать -Spring-MessageSource-Example.zip