Поддержка нескольких языков

Поддержка нескольких языков реализована при помощи сервиса MessagesRegistry, позволяющего по ключу найти локализованное сообщение. Локаль же определяется по http request.

Доступ к локализованному сообщению можно получить несколькими спосабами

  • Получить доступ к сервису реестра сообщений и далее по ключу получить сообщение
  • При помощи аннотации InjectMessages. Аннотацию прописывают перед полем класса с типом Messages И фреймворк сам при первом обращении к свойству установит его значение Экземпляром объекта Messages с категорией соответствующей объекту.
  • При помощи аннотации InjectInplaceMessage. Аннотацию прописывают перед полем класса со строковым типом и фреймворк сам при обращении к значению поля будет возвращать локализованное сообшение, если значение поля имеет формат message:message-key, а иначе значение поля.

Все локализованные сообщения определяются в конфигурации org.weda.message.MessagesRegistry

Описание точки конфигурации org.weda.message.MessagesRegistry

Задача конфигураци - хранение локализованных сообщений

Структура:

            
            <category ...>
                <element ...>
                    <message ...>
                        <locale ...>message</locale>
                    </message>
                </element>
                <class-element ...>
                    <message ...>
                        <locale ...>message</locale>
                    </message>
                </element>
            </category>
            
        

Элементы конфигурации:

Название элементаОписание
category Определяет категорию сообщений

Атрибуты элемента

Атрибут Описание Может быть пустым?
name Название категории. WEDA Framework определены следующие категории:
  • converters в данной категории храняться сообщения конверторов
  • actions сообщения для действий
  • constraints сообщения для ограничений
  • ObjectSources сообщения источников объектов
  • components сообщения визуальных компонентов
Нет



Название элементаОписание
element Описывает элемент категории

Атрибуты элемента

Атрибут Описание Может быть пустым?
name Название элемента Нет



Название элементаОписание
class-element Описывает элемент категории

Атрибуты элемента

Атрибут Описание Может быть пустым?
class Определяет название элемента по классу Нет



Название элементаОписание
message Описывает сообщения для заданного ключа

Атрибуты элемента

Атрибут Описание Может быть пустым?
key Ключ сообщения Нет
defaultMessage Сообщение по умолчанию. Будет возвращено в качестве сообщения в том случае если нет сообщения для заданного языка и страны Да



Название элементаОписание
locale Описывает сообщения для заданной страны и языка. Сообщение записывается в теле элемента

Атрибуты элемента

Атрибут Описание Может быть пустым?
language двух буквенное обозначение языка Нет
country двух буквенное обозначение страны Да

Пример конфигурации:

            
        <category name="converters">
            <element name="org.weda.converter.impl.NumberConverter">
                <message 
                    key="InvalidNumberType" 
                    defaultMessage="Invalid number type (%s)"
                    >
                    <locale language="ru">
                        Конвертер не умеет преобразовать к числу 
                        следующего типа (%s)
                    </locale>
                </message>
                <message 
                    key="InvalidType" 
                    defaultMessage="Invalid toType (%s) or value class (%s)"
                    >
                    <locale language="ru">
                        Неверный тип к которому нужно привести значение (%s)
                        или значение не является строкой (%s)
                    </locale>
                </message>
                <message 
                    key="ConversionError" 
                    defaultMessage="Can't convert value (%s) to number of type (%s)"
                    >
                    <locale language="ru">
                        Ошибка преобразования (%s) к числу следующего типа (%s)
                    </locale>
                </message>
            </element>
            <element name="org.weda.converter.impl.DateConverter">
                <message 
                    key="UnknownDateType" 
                    defaultMessage="Unknown date type (%s)"
                    >
                    <locale language="ru">
                        Конвертер не умеет преобразовать к дате 
                        следующего типа (%s)                        
                    </locale>
                </message>
                <message 
                    key="ConversionError" 
                    defaultMessage="Can't convert value (%s) to type (%s) using pattern (%s)"
                    >
                    <locale language="ru">
                        Ошибка преобразования (%s) к дате следующего типа (%s) 
                        используя шаблон (%s)
                    </locale>
                </message>
                <message 
                    key="UnknownToType" 
                    defaultMessage="Invalid toType (%s) or value class (%s)"
                    >
                    <locale language="ru">
                        Неверный тип к которому нужно привести значение (%s)
                        или значение не является строкой (%s)                        
                    </locale>
                </message>
            </element>
            <element name="org.weda.converter.impl.InputStreamToByteConverter">
                <message 
                    key="ConversionError" 
                    defaultMessage="Can't convert InputStream to byte array"
                    >
                    <locale language="ru">
                        Ошибка преобразования потока данных к массиву байт
                    </locale>
                </message>
            </element>
        </category>
    </contribution>    
            
        

Доступ к сервису

Имя сервиса в среде HiveMind - org.weda.message.MessagesRegistry