【问题标题】:Making JSF website multilingual使 JSF 网站多语言化
【发布时间】:2011-06-07 21:33:33
【问题描述】:

试图使 JSF Web 应用程序多语言。为此目的,使用<f:view> 标签覆盖所有 HTML 代码:

<?xml version='1.0' encoding='UTF-8' ?>
<!DOCTYPE html>
<html xmlns= ... >

<f:view locale="#{actionsContainer.languageDetails.locale}">
  <head>
    <meta charset="utf-8" />
    <f:loadBundle basename="messages.Messages" var="key" />
  </head>
  <body>
    <h:outputText value="#{key.myText}" />
  </body>
</f:view>
</html>

在资源中,我有几个“Messages.properties”文件,其中包含某些语言的翻译:

  • Messages_en.properties
  • Messages_es.properties
  • Messages.properties // 默认

这个文件'Messages_es.properties'的示例内容是:

myText=España

让我们看一下,我的语言环境是“es”,然后西班牙语翻译文件会加载它的值并呈现到屏幕上。但是,特殊字符(例如“ñ”)无法在浏览器输出中正确显示。我得到的不是特殊的西班牙字母,而是“ó”。

我尝试使用 UTF-8 编码保存 .properties 文件,但没有 BOM。并且输出已更改为类似“”的内容。

所以问题是我如何在输出中获得这种特殊的任何语言字母?!

【问题讨论】:

    标签: jsf encoding rendering special-characters multilingual


    【解决方案1】:

    默认情况下使用 ISO-8859-1 编码读取属性文件。您需要 JDK native2ascii 工具将 UTF-8 属性文件转换为 ISO-8859-1 属性文件,然后改用它们。

    但是,在 JSF 中,您也可以使用 Control 指定自定义 ResourceBundle,其中您覆盖属性文件的读取以改用 UTF-8。另见this article

    【讨论】:

    • 我已尝试将所有这些特殊字母替换为 \uXXXX 格式,但是 -webkit 浏览器(Chrome 和 Safari)显示错误:未定义实体 'u00E7'
    • 这很奇怪,因为它们不应该由网络浏览器解析,而是由网络服务器解析。您究竟是如何加载和显示它们的?您是否检查过链接的文章如何(并且应该)完成?
    【解决方案2】:

    使用资源包时,请考虑使用 Eclipse 的 ResourceBundle Editor 插件 (http://sourceforge.net/projects/eclipse-rbe/)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-04-16
      • 2010-09-16
      • 1970-01-01
      • 1970-01-01
      • 2023-03-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多