java - 如何在资源包中使用JSF标签/如何重写资源包中的URL?

标签 java jsf seam resourcebundle

环境: JSF 2.1.7 接缝 2.3.0 JBOSS 5.1.2

我的应用程序有一个需要本地化的字符串

"I agree to WorldSite's Privacy Policy and Cookie Notice"

斜体字隐私政策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&#160;
privacyPolicy=Privacy Policy
and=&#160;and&#160;
cookieNotice=Cookie Notice

但这需要一些语言的解决方法(在“iAgreeTo”和“and”键中)

iAgreeTo=J'accepte la&#160;
privacyPolicy=Politique de la vie privée
and=&#160;de WorldSite et les&#160;
cookieNotice=Note D'information sur les Cookies

理想情况下,我希望能够在 key 中移动链接。像这样:

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,然后从我的资源包中调用它?

最佳答案

你似乎把所有的事情都弄错了,我很抱歉不得不说我发现这个问题分析得很差,太长而且读起来很困惑。

您应该尝试做的是使用 JSF 标记内的资源包,而不是相反。在需要参数化消息的地方,您可以使用如下结构:

messages.properties

nameHeader=My name is {0}

index.xhtml

<h:outputFormat value="#{msgs.nameHeader}">
    <f:param value="#{bean.name}"/>
</h:outputFormat>

如果您遇到这种方法不起作用的情况,则必须在支持 bean 中构建字符串。

关于java - 如何在资源包中使用JSF标签/如何重写资源包中的URL?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12426059/

相关文章:

java - 整个应用程序的字符串哈希码是否相同?

java - Struts 2 约定插件不起作用!如何让它运行?

Facelets 文件的 Eclipse 插件

java - 分析/调试 JBoss AS/Seam 应用程序

sql-server - hibernate 锁表

hibernate - 对于 TestNG,当使用 Hibernate 查询包含复杂模型的数据源时,预填充数据源的正确方法是什么?

java - 如何编辑文件中的特定属性?

java - 如何从 RPG 调用 Spring Web 服务?

java - 将 Nashorn 与其他 Web 应用程序框架一起使用

javascript - 关于 JSF2 和 JavaScript 的警告 - JSF1064 : Unable to find or serve resource