我正忙于编写一个需要正确本地化的应用程序,但一直手动创建可移植对象模板的行为很乏味。
谁能告诉我为什么这段代码:
<?php
exec("xgettext -d templates/base -s -j -o default.pot templates/base/view.php", $output);
?>
什么也没做,但是当我在命令行中运行它时,它实际上会用它找到的条目填充 default.pot 文件?
我发现大多数此类问题都是由路径引起的。用户 php/apache 在您的机器上运行(通常是“nobody”或“www-data”)可能没有设置 PATH 环境变量,如果是,它可能没有包含xgettext
. 如果未设置该变量,则在执行该命令时 bash(作为该用户)将无法找到二进制文件。
确认这是问题的最佳方法是放入完整路径xgettext
,如果您不知道可以which xgettext
在 bash 中执行以获取路径并对其进行硬编码。如果可行,您可以保留该路径,或者如果代码需要可移植,则可以找到另一种解决方案,例如将路径添加到 Apache 用户的 PATH 环境变量。