2

我拥有的是如下属性文件。

欢迎.properties

admin = Admin
welcomeAdmin = Welcome Admin
editAdmin = Edit Admin

正如我重复了管理员词一样,我想使用如下所示的内容。

admin = Admin
welcomeAdmin = Welcome #{admin}
editAdmin = Edit #{admin}

所以如果我在一个地方改变,即在admin = Admin,所有地方都会反映出来。

任何想法/建议如何完成这项工作将不胜感激。

4

1 回答 1

0

根据今天,经典ResourceBundle类不支持命名参数及其替换,而是支持{0}包的键值对中类型的简单占位符,可以通过 using 替换MessageFormat#format

在这种情况下,如果您替换Welcome #{admin}为,Welcome {0}您将能够通过使用以下方法之一来实现您寻求的功能:

  1. JSF的<h:outputFormat>

    <h:outputFormat value="#{msg.welcomeAdmin}">
        <f:param value="#{msg.admin}" />
    </h:outputFormat>
    
  2. JSTL的<fmt:message>

    <fmt:message key="msg.welcomeAdmin">
        <fmt:param value="#{msg.admin}">
    </fmt:message>
    

您也可以创建自己的 EL 函数、标签处理程序或 UI 组件,或者MessageFormat在 bean 中使用类方法等。当然,您也可以扩展ResourceBundle类以支持命名参数并返回带有命名参数的消息解析。

推荐阅读

  1. Java 中的资源包是否支持运行时字符串替换?;
  2. 如何使用带有 JSF 组件的非值属性的参数化消息格式
  3. 将参数传递给从资源包到 h:outputFormat 以外的组件的消息
于 2013-03-24T16:34:21.297 回答