我正在编写一个使用资源包处理国际化的JSF(ICEfaces)应用程序。
该应用程序很好地应用了(默认的)荷兰语“nl”区域设置的资源包,但是在格式化浮点数时未能应用相同的区域设置,即使我明确使用<f:view locale="nl">
为页面设置了区域设置。
如何使浮点数遵循当前的区域设置?
我正在编写一个使用资源包处理国际化的JSF(ICEfaces)应用程序。
该应用程序很好地应用了(默认的)荷兰语“nl”区域设置的资源包,但是在格式化浮点数时未能应用相同的区域设置,即使我明确使用<f:view locale="nl">
为页面设置了区域设置。
如何使浮点数遵循当前的区域设置?
很可能您没有使用转换器来对数字进行格式化以符合适当的区域设置。
<f:view locale="nl">
<h:outputText value="#{numbers.someDouble}">
<f:convertNumber pattern="#,##0.00;(#,##0.00)" />
</h:outputText>
<br />
<h:outputText value="#{numbers.someDouble}">
<f:convertNumber locale="en" pattern="#,##0.00;(#,##0.00)" />
</h:outputText>
</f:view>
12.341.234,43
12,341,234.43
您可以在 faces.config.xml 中使用嵌套的 <convertNumber>
标签,并将默认区域设置为 "nl"。
这样,转换器会自动获取并使用默认区域,您无需在每个 <convertNumber>
标签中指定模式。
faces-config.xml:
<application>
<locale-config>
<default-locale>nl</default-locale>
</locale-config>
</application>
outputText
可能没有对数字的直接支持;它会被赋予一个对象(例如java.lang.Double
),并在输出时调用toString
。对于inputText
,也没有直接的支持;在输入字符串时,表达式语言按照类型强制转换规则将其强制转换回 double。对于更复杂的逻辑,需要使用转换器。这是一个强大的模型,因为您可以转换到/从任何类型,而不需要输入/输出控件支持转换。 - McDowell