Spring Resource bundle с примером ResourceBundleMessageSource

Spring Resource bundle с примером ResourceBundleMessageSource

В Spring вы можете использоватьResourceBundleMessageSource для разрешения текстовых сообщений из файла свойств на основе выбранных локалей. Смотрите следующий пример:

1. Структура каталогов

Просмотрите структуру каталогов этого примера.

directory structure of this example

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);

    }
}

Выход

output

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.

Скачать исходный код