Play 框架 2.1.2 国际化不适用于芬兰语字符



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

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

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

我添加了环境变量,这在另一篇stackoverflow文章和另一篇tackoverflow文章中都提到过。但这无济于事。

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

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

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

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

脑海中立刻浮现出两个原因:

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

    color.explanation=Näytetään
    

    而你应该拥有的是

    color.explanation=Nu00E4ytetu00E4u00E4n
    

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

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

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

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

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

最新更新