Spec-Zone .ru
спецификации, руководства, описания, API
След: Интернационализация
Урок: Форматирование
Раздел: сообщения
Контакт с Составными сообщениями
Домашняя страница > Интернационализация > Форматирование

Контакт с Составными сообщениями

Составное сообщение может содержать несколько видов переменных: даты, времена, строки, числа, валюты, и проценты. Чтобы отформатировать составное сообщение независимым от локали способом, Вы создаете образец, что Вы применяетесь к a MessageFormat объект, и хранилище этот образец в a ResourceBundle.

Ступая через пример программы, этот раздел демонстрирует, как интернационализировать составное сообщение. Пример программы использует MessageFormat class. Полный исходный код для этой программы находится в вызванном файле MessageFormatDemo.java. Немецкие свойства локали находятся в вызванном файле MessageBundle_de_DE.properties.

1. Идентифицируйте Переменные в сообщении

Предположите, что Вы хотите интернационализировать следующее сообщение:

Следующая строка текста: В 1:15 13 апреля 1998, мы обнаружили 7 космических кораблей на планете Марс. Переменные данные (1:15, апрель 13,1998, 7, и Марс) были подчеркнуты.

Заметьте, что мы подчеркнули переменные данные и идентифицировали, какие объекты представят эти данные.

2. Изолируйте сообщение Образец в ResourceBundle

Храните сообщение в a ResourceBundle именованный MessageBundle, следующим образом:

ResourceBundle messages =
   ResourceBundle.getBundle("MessageBundle", currentLocale);

Это ResourceBundle поддерживается файлом свойств для каждого Locale. Начиная с ResourceBundle вызывается MessageBundle, файл свойств для американского английского языка называют MessageBundle_en_US.properties. Содержание этого файла следующие:

template = At {2,time,short} on {2,date,long}, \
    we detected {1,number,integer} spaceships on \
    the planet {0}.
planet = Mars

Первая строка файла свойств содержит образец сообщения. Если Вы сравните этот образец с текстом сообщения, показанным в шаге 1, то Вы будете видеть, что параметр, включенный в фигурные скобки, заменяет каждую переменную в тексте сообщения. Каждый параметр запускается с цифры, названной числом параметра, которое соответствует индексирование элемента в Object массив, который содержит значения аргументов. Отметьте, что в образце числа параметра не находятся ни в каком определенном порядке. Можно поместить параметры куда угодно в образец. Единственное требование - то, что у числа параметра есть соответствующий элемент в массиве значений аргументов.

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

Параметры за template в MessageBundle_en_US.properties
Параметр Описание
{2,time,short} Часть времени a Date объект. short стиль определяет DateFormat.SHORT форматирование стиля.
{2,date,long} Часть даты a Date объект. То же самое Date объект используется и для даты и для переменных времени. В Object массив параметров индексирование элемента, содержащего Date объект 2. (Это описывается в следующем шаге.)
{1,number,integer} A Number объект, далее квалифицированный с integer стиль числа.
{0} String в ResourceBundle это соответствует planet ключ.

Для полного описания синтаксиса параметра см. документацию API для MessageFormat class.

3. Установите сообщение Параметры

Следующие строки кода присваивают значения каждому параметру в образце. Индексирование элементов в messageArguments выстройте соответствуют числа параметра в образце. Например, Integer элемент в индексирует 1, соответствует {1,number,integer} параметр в образце. Поскольку это должно быть преобразовано, String объект в элементе 0 будет выбран от ResourceBundle с getString метод. Вот код, который определяет массив параметров сообщения:

Object[] messageArguments = {
    messages.getString("planet"),
    new Integer(7),
    new Date()
};

4. Создайте Средство форматирования

Затем, создайте a MessageFormat объект. Вы устанавливаете Locale потому что сообщение содержит Date и Number объекты, которые должны быть отформатированы чувствительным к локали способом.

MessageFormat formatter = new MessageFormat("");
formatter.setLocale(currentLocale);

5. Отформатируйте сообщение Используя Образец и Параметры

Этот шаг показывает, как образец, параметры сообщения, и средство форматирования все сотрудничают. Во-первых, выберите образец String от ResourceBundle с getString метод. Ключ к образцу template. Передайте образец String к средству форматирования с applyPattern метод. Затем отформатируйте сообщение, используя массив параметров сообщения, вызывая format метод. String возвращенный format метод готов быть выведенным на экран. Все это выполняется только с двумя строками кода:

formatter.applyPattern(messages.getString("template"));
String output = formatter.format(messageArguments);

6. Выполните Демонстрационную Программу

Демонстрационная программа печатает преобразованные сообщения для английских и немецких локалей и должным образом форматирует переменные времени и дата. Отметьте, что английские и немецкие глаголы ("обнаруженный" и "entdeckt") находятся в различных расположениях относительно переменных:

currentLocale = en_US
At 10:16 AM on July 31, 2009, we detected 7
spaceships on the planet Mars.
currentLocale = de_DE
Um 10:16 am 31. Juli 2009 haben wir 7 Raumschiffe
auf dem Planeten Mars entdeckt.

Проблемы с примерами? Попытайтесь Компилировать и Выполнить Примеры: FAQ.
Жалобы? Поздравление? Предложения? Дайте нам свою обратную связь.

Предыдущая страница: сообщения
Следующая страница: Обработка Множественных чисел