在php(或者通常是gettext)中,当gettext看到变量为动态内容时,它会做什么?
我有2个案例.
1)让我说我有=$user1?> poked John =$user2?>
.也许在某种语言中,单词的顺序是不同的.gettext如何处理?(不,我不是在构建facebook,这只是一个例子)
2)假设我将一些类别存储在数据库中.它们很少,但它们存储在数据库中.如果我这样做 会怎么样?我希望翻译人员也翻译这些类别名称,但它是否必须在数据库中完成?
谢谢
您最好的选择是使用spritf()函数.然后,您将使用printf表示法来处理字符串中的动态内容.这是我刚才在这里找到的一个功能,可以轻松地为您处理:
function translate() { $args = func_get_args(); $num = func_num_args(); $args[0] = gettext($args[0]); if($num <= 1) return $args[0]; return call_user_func_array('sprintf', $args); }
现在举例1,您可能希望将字符串更改为:
%s poked %s
您将输入到translate()函数中,如下所示:
您将使用poEdit解析所有translate()函数.然后将字符串"%s poked%s"翻译成您想要的任何语言,而不修改%s字符串占位符.那些将分别由user(1)和user2的translate()函数输出替换.您可以在PHP手册中阅读有关sprintf()的更多信息,以获得更多高级用法.
问题#2.您需要创建一个poEdit可以解析的静态文件,其中包含类别名称.例如"misctranslations.php":
然后poEdit解析misctranslations.php.然后,您可以使用输出类别名称转换
案例1可以更容易处理:`<?php echo sprintf(_('%s poked%s'),$ user1,$ user2); ?>`.你不需要一个额外的功能,poedit仍然可以像其他任何一样解析字符串.