JSF/Facelets中的国际化标签

Pet*_*ton 5 java jsf facelets internationalization

Facelets是否具有更整洁或更易读的国际化用户界面文本标签的任何功能,否则您可以使用JSF执行哪些操作?

例如,使用普通的JSF,使用h:outputFormat是一种在消息中插入变量的非常详细的方法.

澄清:我知道我可以添加一个消息文件条目,如下所示:

label.widget.count = You have a total of {0} widgets.
Run Code Online (Sandbox Code Playgroud)

并显示此(如果我使用Seam):

<h:outputFormat value="#{messages['label.widget.count']}">
   <f:param value="#{widgetCount}"/>
</h:outputFormat>
Run Code Online (Sandbox Code Playgroud)

但输出一个句子很麻烦 - 只是给JSF一个坏名字的东西.

Sie*_*tse 5

由于您使用的是Seam,因此可以在消息文件中使用EL.

属性:

label.widget.count = You have a total of #{widgetCount} widgets.
Run Code Online (Sandbox Code Playgroud)

XHTML:

<h:outputFormat value="#{messages['label.widget.count']}" />
Run Code Online (Sandbox Code Playgroud)

这仍然使用outputFormat,但不那么冗长.


Daa*_*ren 3

您可以创建自己的面孔标签库以使其不那么冗长,例如:

<ph:i18n key="label.widget.count" p0="#{widgetCount}"/>
Run Code Online (Sandbox Code Playgroud)

然后在您的视图目录中创建标签库:/components/ph.taglib.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE facelet-taglib PUBLIC "-//Sun Microsystems, Inc.//DTD Facelet Taglib 1.0//EN" "https://facelets.dev.java.net/source/browse/*checkout*/facelets/src/etc/facelet-taglib_1_0.dtd">

<facelet-taglib xmlns="http://java.sun.com/JSF/Facelet">
    <namespace>http://peterhilton.com/core</namespace>

    <tag>
        <tag-name>i18n</tag-name>
        <source>i18n.xhtml</source>
    </tag>

</facelet-taglib>
Run Code Online (Sandbox Code Playgroud)

创建/components/i18n.xhtml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<ui:composition xmlns="http://www.w3.org/1999/xhtml"
    xmlns:ui="http://java.sun.com/jsf/facelets"
        xmlns:h="http://java.sun.com/jsf/html"        
    xmlns:f="http://java.sun.com/jsf/core">

    <h:outputFormat value="#{messages[key]}">
            <!-- crude but it works -->
        <f:param value="#{p0}" />
        <f:param value="#{p1}" />
        <f:param value="#{p2}" />
        <f:param value="#{p3}" />
    </h:outputFormat>

</ui:composition>
Run Code Online (Sandbox Code Playgroud)

通过一些研究,您也许可以找到一种优雅的方式来传递论点。

现在在 web.xml 中注册您的新标签库

<context-param>
<param-name>facelets.LIBRARIES</param-name>
<param-value>
        /components/ph.taglib.xml
    </param-value>
</context-param>
Run Code Online (Sandbox Code Playgroud)

只需添加xmlns:ph="http://peterhilton.com/core"您的视图即可完成!