Json和翻译

时间:2016-09-20 05:54:32

标签: json gettext

我有一个json文档,其中某些字符串必须翻译。例如(伪造的语法),我的data.json

{
  "greeting": "trans:Hello"
}

在这种情况下,字符串"Hello"被标记为可翻译,前缀为trans:(看起来不太健壮)。然后我会使用工具生成目录:

xgettext data.json

然后将字符串翻译为目标语言。然后我的应用程序将使用我原来的json和翻译映射:

translations = {
  "en" : {
    "Hello": "Hello"
  },
  "es" : {
    "Hello": "Hola"
  }
}

并生成最终的json(目标语言es):

{
  "greeting": "Hola"
}

是否有任何标准方法在json中指定可翻译字符串,以便可以通过标准工具处理它们以生成消息目录?

2 个答案:

答案 0 :(得分:1)

您可以使用适当的gettext语言预处理器来提取标记的字符串,通常使用_(string)gettext(string),并创建包含这些字符串的gettext目录(POT文件)。在为特定语言创建目录的本地化版本之后,可能使用诸如poedit之类的工具,在这种情况下,您可以将其转换为JSON表示 - 有关更多信息,以及有关标准方法的想法要在JavaScript中处理gettext样式的消息目录,请查看JED - 然后在运行时将此JSON格式的目录加载到您的应用程序中,并通过为此目的定义的实用程序访问它。

符号_(string)有两个效果。首先,它标记了提取器的字符串。其次,在运行时,它调用一个名为_的函数来查找目录中的字符串并返回本地化值。

JSON的问题是显然_(string)是无效的JSON语法。如果可能,请考虑将其从JSON文件更改为包含对象的JS文件。

答案 1 :(得分:0)

回答旧问题以供参考。可以从 json 生成一个临时的 JS 源,如 my_strings.js

_("first-string-to-translate");    
_("second-string-to-translate");
...
_("last-string-to-translate");

然后将此 my_strings.js 传递给 xgettext。