我的属性文件如下。
welcome.properties
admin = Admin
welcomeAdmin = Welcome Admin
editAdmin = Edit Admin
因为我有重复Admin这个词,我想用下面的东西。
admin = Admin
welcomeAdmin = Welcome #{admin}
editAdmin = Edit #{admin}
这样,如果我在一个地方改变,即在admin = Admin
,它会反射所有的地方。
如果你有什么想法或建议,我将不胜感激
今天,经典的ResourceBundle
类不支持命名参数及其替换,而是支持在包的键值对中使用{0}
类型的简单占位符,这些占位符将被MessageFormat#format
替换。
在这种情况下,如果您将Welcome #{admin}
替换为Welcome {0}
,您将能够通过使用以下命令之一实现您所寻求的功能:
-
JSF的
<h:outputFormat>
:<h:outputFormat value="#{msg.welcomeAdmin}"> <f:param value="#{msg.admin}" /> </h:outputFormat>
-
JSTL's
<fmt:message>
:<fmt:message key="msg.welcomeAdmin"> <fmt:param value="#{msg.admin}"> </fmt:message>
您也可以创建自己的EL函数、标记处理程序或UI组件,或者在bean中使用MessageFormat
类方法,等等。当然,您也可以扩展ResourceBundle
类以支持命名参数,并返回已解析的命名参数的消息。
推荐阅读:
- Java中的资源包支持运行时字符串替换吗?
- 如何使用JSF组件的非value属性参数化MessageFormat;
- 将参数从资源包传递给组件,而不是h:outputFormat。