如何对JSON输出进行语法翻译?

时间:2016-02-23 作者:annkswe

例如,我有这个输出解码的JSON$数据的例子,我想让内容在wordpress中可以翻译。

<?php echo $data[\'hair\'][\'type\'] )?>
因此,在英语中,这将输出“棕色头发”,但我希望它们可以用于翻译。

我知道有一些语法可以放入字符串__(\'string\') 但我似乎无法让它与Json输出一起工作。

1 个回复
SO网友:Doug Wollison

从技术上讲,这是非常不鼓励的,因为这是一种不友好和不可预测的性质,你可以这样做:

<?php _e( $data[\'hair\'][\'type\'] ); ?>

但是,您需要在中列出所有可能的值(“棕色头发”、“金色头发”等)。POT文件(翻译模板),以便翻译人员知道要翻译什么。您需要控制创建JSON数据的内容,或者熟悉JSON数据的输出内容,否则就走不远了。

这个__() 类似的函数取一个字符串,在提供的翻译文件中查找(通常传递一个“textdomain”名称,以便它知道要使用哪个名称),然后返回找到的匹配翻译字符串,否则返回原始字符串。

当人们说这些函数“使内容可翻译”时,他们的意思是,它将文本标识为可翻译的文本,供人类或机器人通过代码查找和组装。POT文件,然后将其提供给翻译人员,以使用其语言制作完整的版本。

Addendum (hit submit too soon):

这就是为什么不向这些函数传递变量;搜索代码的人或机器人不会知道需要翻译的实际文本是什么。

您可以选择自己在POT文件中写入这些条目,如下所示:

msgid "Brown hair"
msgstr ""

msgid "Blond hair"
msgstr ""
或者在代码中定义如下值:

$hair_types = array(
    \'Brown hair\' => __( \'Brown hair\' ),
    \'Blond hair\' => __( \'Blond hair\' ),
);
然后参照如下:

<?php echo $hair_types[ $data[\'hair\'][\'type\'] ]; ?>

希望您得到的JSON不会添加曲线球,如“棕红色金黄色头发”和其他您不知道的值。

基本上,如果您无法控制生成文本的内容,您将无法(也不希望)对其进行本地化。