7.3. Получение локализованных сообщений

В данном разделе рассмотрены способы получения локализованных сообщений в различных компонентах приложения.

  • В XML-дескрипторах экранов атрибуты компонентов, отображающие статичный текст (например caption), могут обращаться к локализованным сообщениям по правилам метода MessageTools.loadString(). Например:

    • caption="msg://roleName" - получить сообщение, заданное ключом roleName в пакете сообщений текущего экрана. Пакет сообщений экрана задается в атрибуте messagesPack корневого элемента window.

    • caption="msg://com.company.sample.entity/Role.name" - получить сообщение, заданное ключом Role.name в пакете сообщений com.company.sample.entity.

  • В контроллерах экранов локализованные сообщения можно получать следующими способами:

    • Из пакета сообщений текущего экрана:

      • Методом getMessage(), унаследованным от базового класса AbstractFrame. Например:

        String msg = getMessage("warningMessage");
      • Методом formatMessage(), унаследованным от базового класса AbstractFrame. В этом случае сообщение используется для форматирования переданных параметров по правилам метода String.format(). Например:

        messages.properties:

        warningMessage = Invalid email address: '%s'

        Java-контроллер:

        String msg = formatMessage("warningMessage", email);
    • Из произвольного пакета сообщений путем инжекции интерфейса инфраструктуры Messages. Например:

      @Inject
      private Messages messages;
      
      @Override
      public void init(Map<String, Object> params) {
          String msg = messages.getMessage(getClass(), "warningMessage");
          ...
      }
  • В компонентах, управляемых контейнером Spring (управляемых бинах, сервисах, JMX-бинах, контроллерах Spring MVC модуля portal) локализованные сообщения можно получать путем инжекции интерфейса инфраструктуры Messages:

    @Inject
    protected Messages messages;
    ...
    String msg = messages.getMessage(getClass(), "warningMessage");

    Локализованные сообщения для шаблонов Thymeleaf в модуле portal также доступны по ключу:

    template
    <h1 th:text="#{messageKey}"></h1>
    portal main message pack
    messageKey = Localized message
  • В любом коде приложения, где невозможна инжекция, интерфейс Messages может быть получен с помощью статического метода get() класса AppBeans:

    protected Messages messages = AppBeans.get(Messages.class);
    ...
    String msg = messages.getMessage(getClass(), "warningMessage");