7.3. 获取本地化消息

本节介绍在应用程序的不同部分中获取本地化消息的方法。

  • 在界面 XML 描述中,用于显示静态文本的组件属性(例如 caption)可以使用MessageTools.loadString()方法的规则来处理本地化消息。例如:

    • caption ="msg://roleName" - 获取当前界面的消息包中 roleName 键定义的消息。界面消息包由 XML 描述中根 window 元素的 messagesPack 属性定义。

    • caption ="msg://com.company.sample.entity/Role.name" - 获取由 com.company.sample.entity 消息包中的 Role.name 键定义的消息。

  • 界面控制器中,可以通过以下方式检索本地化字符串:

    • 从当前界面消息包:

      • 使用继承自 AbstractFrame 基类的 getMessage() 方法。例如:

    String msg = getMessage("warningMessage");
    • 使用继承自 AbstractFrame 基类的 formatMessage() 方法。此时,按照 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 容器管理的组件(托管 beanservicesJMX-beansportal 模块的 Spring MVC 控制器),本地化消息可以使用注入的Messages 基础接口进行检索:

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

    portal 模块中 Thymeleaf 模板的本地化消息也可以通过 portal 模块的主消息包中的消息键获得:

    模板
    <h1 th:text="#{messageKey}"></h1>
    portal 主消息包
    messageKey = Localized message
  • 在无法进行注入的应用程序代码中,可以使用 AppBeans 类的静态 get() 方法获取 Messages 接口:

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