我有一个f:selectitem及其itemLabel,我希望将标签呈现为“漂亮”!
问题:
<p:selectOneRadio id="selectRadio" value="#{somebean.somevalue}" layout="pageDirection" >
<f:selectItem itemLabel="#{msg['message.1']}" itemValue="1" />
<f:selectItem itemLabel="#{msg['message.2']}" itemValue="2" />
</p:selectOneRadio>
我的属性i18n文件:
message.1=some message by {0}
message.2=another message by {0}
我想通过#{somebean.theUser}进行{0}的内联替换 结果应该是这样的(粗体包括):
some message by <b>HUSTON</b>
在标记文件中,我应该做这样的事情(或以类似的方式)
<f:selectItem itemLabel="#{msg['message.1']{'<b>'+somebean.theUser+'</b>'}}" itemValue="1" />
换句话说,我想直接将i18n字符串param替换添加到itemLabel标记中。
我尝试使用<f:facet name="itemLabel">
,但没有尝试。
有人可以帮助我吗?
感谢您的建议,
Agharta
答案 0 :(得分:2)
JSF不会让你从标记方面那样做。没有办法使用例如<h:outputFormat />
。
相反,您需要简单地创建一个bean,它将从属性文件中读取内容并相应地格式化:
<p:selectOneRadio id="selectRadio" value="#{somebean.somevalue}" layout="pageDirection" >
<f:selectItem itemLabel="#{helperbean.someMessage}" itemValue="1" />
<f:selectItem itemLabel="#{helperbean.anotherMessage}" itemValue="2" />
</p:selectOneRadio>
这是你的bean中的JSF部分:
public String getSomeMessage() {
// Actually you need some common access helper, it is just simplified example
String messagePattern = null;
try {
ResourceBundle rb = ResourceBundle.getBundle("path/to/properties/file");
String messagePattern = rb.getString("message.1");
return MessageFormat.format(messagePattern, somebean.getTheUser());
} catch (MissingResourceException mre) {
logger.warn("Missing resource file or resource key", mre);
return "!message.1!"; // That will show you where the problem is
}
}
关于可本地化的其他几点:
请使用有意义的密钥名称。像“message.1”这样的东西没有为译者提供任何背景信息。我不知道你在做什么,但也许“some-module.select.message.radio.message.sent.by.pattern”会更好 - 翻译需要知道a)它将在哪里显示, b)本文的目的是什么(无论是一些描述,消息模式,一般文本,窗口/对话框标题,按钮标题等)。务必为他们提供这样的背景。
请务必在邮件本身中包含格式标记。这意味着,消息应该在属性文件中看起来像message.1=some message by <b>{0}</b>
。你会惊讶地发现这些标签需要被删除(或者用其他重点手段替换)。你应该特别小心,因为你似乎正在使用RTL语言做一些事情,粗体字体不适合它们。