环境:JSF 2.1.7 SEAM 2.3.0 JBOSS 5.1.2
我的应用程序有一个需要本地化的字符串
“我同意 WorldSite 的隐私政策和Cookie 声明”
斜体隐私政策和Cookie 通知是指向其他页面的超链接。
最初我们的 facelet 是这样设置的:
<h:outputText value="#{messages['iAgreeTo']}" />
<h:outputLink target="_blank" value="#{bean.privacyPolicy}">#{messages['privacyPolicy']}</h:outputLink>
<h:outputText value="#{messages['and']}"/>
<h:outputLink target="_blank" value="/jsf/Notice.xhtml">
<h:outputText value="#{messages['cookieNotice']}"/>
<f:param name="content" value="Cookie-Notice"/>
<f:param name="application" value="#{bean.application}"/>
</h:outputLink>
注意:我们有 URL 重写,它采用 /jsf/Notice.xhtml 并重写为
rewrite pattern: /#{application}/Notice/#{content}
result:http://contextRoot/contextPath/myApp/Notice/Cookie-Notice
这允许对各个键进行零碎翻译
iAgreeTo=I agree to WorldSite's 
privacyPolicy=Privacy Policy
and= and 
cookieNotice=Cookie Notice
但这需要某些语言的解决方法(在“iAgreeTo”和“and”键中)
iAgreeTo=J'accepte la 
privacyPolicy=Politique de la vie privée
and= de WorldSite et les 
cookieNotice=Note D'information sur les Cookies
理想情况下,我希望能够使链接在键内可移动。像这样的东西:
iAgreePhrase=I agree to WorldSite's #{messages['privacyPolicyLink']} and the #{messages['cookieNoticeLink']}
privacyPolicy=Privacy Policy
cookieNotice=Cookie Notice
//The following non-translatable keys held in a separate file
privacyPolicyLink=<h:outputLink target="_blank" value="#{bean.privacyPolicy}">#{messages['privacyPolicy']}</h:outputLink>
cookieNoticeLink=<h:outputLink target="_blank" id="cookieNoticeLink" value="/jsf/Notice.xhtml">\
#{messages['cookieNotice']}\
<f:param name="content" value="Cookie-Notice"/>\
<f:param name="application" value="#{bean.application}"/>\
</h:outputLink>
但是 facelet 将 JSF 标记 (h:outputLink) 作为字符串返回,而不是将它们扩展为它们的 HTML 标记。我可以使用<a>
标签,但是我将重写逻辑放在难以维护的属性文件中
iAgreePhrase=I agree to WorldSite's #{messages['privacyPolicyLink']} and the #{messages['cookieNoticeLink']}
privacyPolicy=Privacy Policy
cookieNotice=Cookie Notice
//The following non-translatable keys held in a separate file
privacyPolicyLink=<a target="_blank" href="#{bean.privacyPolicy}">#{messages['privacyPolicy']}</a>
cookieNoticeLink=<a target="_blank" href="#{contextPath}/#{bean.application}/Notice/Terms-and-Conditions">\
#{messages['cookieNotice']}</a>
有没有一种方法可以实现我想要的效果而不必将重写逻辑放在资源包中?我的一些想法是强制应用程序容器处理 facelet 两次/重新排序,因此它首先插入资源包,然后扩展 JSF 标记。
或者,我可以在 bean 中构造重写的 URL,然后从我的资源包中调用它?