Wicket支持包含HTML元素(如链接等)的复杂可翻译消息,如https://cwiki.apache.org/confluence/display/WICKET/Everything+about+Wicket+internationalization中所述,使用wicket:message。例如: -Apache Wicket:带有嵌入式HTML的消息的动态密钥
<wicket:message key="messageKey">
<a wicket:id="link"><wicket:message key="linkLabel"></wicket:message></a>
</wicket:message>
和属性:
messageKey=Click on ${link}
,并在Java中
add(new BookmarkablePage<Void>("link", SomePage.class);
这个伟大的工程,但是该消息密钥在HTML硬编码。
在我的情况下,我想让消息密钥在Java中动态确定。对于常规消息(带有字符串参数),我可以用Label
和StringResourceModel
这样做,将密钥作为参数。但是,对于包含Wicket组件作为参数的消息,我该如何做同样的事情呢?我猜这个标记看起来像这样:
<span wicket:id="messageId">
<a wicket:id="link"><wicket:message key="linkLabel"></wicket:message></a>
<span>
但是Java会是什么? Label
不能照看孩子。 :(
=== UPDATE ===
有一个检票类org.apache.wicket.markup.resolver.WicketMessageResolver.MessageContainer
看起来有趣。因为它是私有静态,我不能直接使用它,但如果我复制的代码粘贴到一个公共类及修改相关组件层次夫妇的事情,我越来越接近解决办法,而这是相当哈克是否有一个清晰的解决方案
对不起我的例子可能会造成混乱。我想要做的是有一个可翻译的资源,参数是Wicket组件(可加入书签的链接,ajax链接等),并有一个动态的消息密钥。 wicket:message标签的功能非常好,因为我可以在其中嵌入各种Wicket组件,但是必须在HTML中输入消息密钥,所以我不能动态选择它。 – 2014-12-04 23:23:57
您可以构建自己的使用Localizer类获取i18n值的组件。获取本地化器:application.getResourceSettings()。getLocalizer()。然后根据您的需要使用它的getString()方法。我很难理解你的问题。请提供一个示例输出并标记哪部分是i18n,哪部分是另一部分。 – 2014-12-05 07:17:11
我已经添加了我目前使用的答案。让我知道你是否能想出更好的解决方案!谢谢。 – 2014-12-09 07:19:28