【问题标题】:Play Framework 2.1.2 internationalization doesn't work with Finnish charactersPlay Framework 2.1.2 国际化不适用于芬兰语角色
【发布时间】:2014-03-03 22:07:33
【问题描述】:

我将 messages.en 和 messages.fi 文件添加到 conf 文件夹(删除了原始消息文件)。然后我添加了 En 和 Fi 按钮以及一个路由器调用,它在我的控制器中调用以下 Action。

public static Result change(String langCode) {
    currentLanguage = langCode;
    changeLang(langCode);
    return GO_HOME;
}

我在 Scala 视图文件中使用以下结构:@Messages("color.explanation")。 我还尝试在 scala 视图文件中导入国际化,如下所示:@Messages.get("color.explanation")。

我添加了another stackoverflow articleanother stackoverflow article中提到的环境变量。但这没有帮助。

点击芬兰语特殊字符除外,翻译工作完美。我得到“N�ytet��n”而不是“Näytetään”。可能是什么原因,你知道解决这个问题的方法吗?

【问题讨论】:

    标签: java scala playframework internationalization playframework-2.1


    【解决方案1】:

    检查messages 文件的编码,即,出于某种原因,Idea 最初使用iso-8859-1 编码创建messages.xy 文件 - 这可能是因为 标准 Java API 旨在使用 ISO 8859-1 编码对于属性文件 (IntelliJ docs)。

    要在 Idea 中切换到 utf-8,首先需要 Mark as Plain text,切换编码,最后再次 Mark as properties 文件。

    当然你使用其他IDE/文本编辑器是很有可能的,无论如何文件的编码是你需要检查的第一件事,我可以向你保证Play完全支持中文的消息文件,如果它们编码正确的话。

    【讨论】:

    • 嗨,我正在使用 notepad++ 对视图文件和消息文件进行以下编码:UTF-8(给出编译错误),没有 BOM 的 UTF-8(没有错误,但仍然会出现奇怪的字符),ANSI (与没有 BOM 的 UTF-8 相同)
    • 错误的编码几乎肯定是问题所在。我们还有一个包含多种不同语言的项目,包括芬兰语,它们都运行良好。 IDEA 和许多其他编辑器一样,确实有切换编码的习惯。所以确保它是UTF-8是非常重要的。另一件事是,一旦你弄乱了编码,你可能需要一些黑客来重新获得它们。
    • 当使用记事本++检查时,我无法更改编码,昨天我在谷歌上搜索更改编码并尝试使用另一个(PsPad)编辑器。感谢您的回答 biesior 和 jody。
    • 提示:notepad++ 很酷,但是有更好的 IDE 可以与 Play 一起工作,即。 Intellij Idea,支持 Play 2.x
    【解决方案2】:

    立即想到的原因有两个:

    1. 您的消息文件设置不正确。我怀疑你有的是:

      color.explanation=Näytetään
      

      而你应该拥有的是

      color.explanation=N\u00E4ytet\u00E4\u00E4n
      

      不确定您是如何构建的,但 Maven 和 Ant 都可以自动将第一种形式转换为第二种形式。 Java对此有点奇怪,我不知道为什么,但这是你必须做的。有关此主题的更多信息,请参阅this question。

    2. 您可能没有正确设置 Content-Type 标头。我期望的是这样的:

      Content-Type:text/html; charset=utf-8
      

      您可以使用例如 Google Chrome 的开发者工具来查看返回的确切内容。如果您没有发回正确的charset,可能只是您的浏览器无法弄清楚如何显示该字符。我对 Play 框架了解不多,所以如果这是您的问题,我不知道如何解决。

    希望这将提供一些见解并至少消除一些可能性。

    【讨论】:

    • 我试图在我的控制器中通过:'response().setContentType("text/html; charset=utf-8");'来设置内容类型,但这并没有帮助
    • 这对 Play 无效。在 Play 中消息资源文件不是普通的 Java 属性,它们必须是 UTF-8 编码。
    • 哦,对了——谢谢。我记得我使用过的所有 Java 框架都有预期的标准 Java I18N 属性文件。
    猜你喜欢
    • 1970-01-01
    • 2022-11-11
    • 1970-01-01
    • 2016-04-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多