是否有可能使用整个句子作为i18n中游戏框架的关键?

时间:2013-12-19 21:24:32

标签: playframework internationalization playframework-2.0

我有一个文件conf / messages.en 我想用整个句子作为关键,比如

Hello my name is Vlad=Hello my name is Vlad

所以在布局中我可以这样做

<p>@Messages("Hello my name is Vlad")</p>

但问题是

`=' expected but `m' found

我曾尝试使用引号,但它不起作用。

我想要这个,因为如果你没有某些密钥的翻译,那么代替

my.name

是实际的句子

谢谢

2 个答案:

答案 0 :(得分:2)

我们为项目使用自定义i18n后端,因此我最终扩展了默认MessagesPlugin。在我们的例子中,插件抓取消息密钥,进行一些解析,并在我们的系统上查找i18n值。如果密钥没有匹配,那么它只是将其传递给Play的默认插件(以防万一)。

在biesior的回答基础上,您可以根据自己的需要获得自己的观点:

<p>@Messages("Hello my name is Vlad")</p>

你的messages文件的密钥没有空格(或点,下划线,等等)

HellomynameisVlad=Hello my name is Vlad

然后让你的自定义消息插件从密钥中删除空格(我想象的所有非字母数字),然后将其传递给默认插件以查找文本。如果找到它然后使用它。如果找不到,则返回原始密钥。

在伪代码中(如果你认为你想要走这条路线,我可以扩展):

public String get(String originalKey)
{
  // originalKey -> "Hello my name is Vlad"

  String lookupKey = removeSpaces(originalKey);
  // lookupKey -> "HellomynameisVlad"

  if (keyExists(lookupKey))
    return getMessage(lookupKey);
  else
    return originalKey;
}

答案 1 :(得分:1)

我看到了你的观点,无论如何它是不可能的,键必须是键而不是自由文本(在翻译不完整时可能是默认值),最终你可以使用点分隔键,如:

Hello.my.name.is.Vlad = Hello my name is Vlad