.PO到.MO - 程序转换(PHP)

时间:2011-11-17 13:32:40

标签: php windows linux translation gettext

我计划允许用户通过PHP用户界面生成.POT文件/ .PO文件,作为CMS解决方案的一部分。一旦生成了这些文件(简单的位),我想允许我的系统自动将这些文件转换为.MO文件以响应用户(POST)请求。

我在SO上看到了以下问题:

.po to .mo convertor in php?

我知道我可以使用PHP的msgfmt函数运行exec(),但这似乎只是Linux解决方案,如果我是正确的?我如何在其他操作系统上执行此操作?如果有人能够展示,那么在实践中如何完成此操作的一些示例代码也将非常有用。这与我通常做的工作完全不同!

目前这只是一个概念,但我希望我走的是正确的路线。如果您对此方法有任何其他想法/建议,我会很高兴听到它们。背景资料如下。

其他背景资料 - 不需要:

我正在通过解析简单的模板文件来检索原始英文文本,这些文件只包含基本HTML和<?php _('the gettext method'); ?>调用。编辑/保存时会解析这些模板并检索语言条目。然后将生成.POT文件。用户现在必须手动编辑翻译(通过简单的界面,而不是直接编辑)来更新/准备所有.PO文件。完成后,我需要能够将它们转换为.MO文件,这是我的问题的标题。

3 个答案:

答案 0 :(得分:5)

如果您正在寻找的话,还有msgfmt的仅PHP重新实现:

作为替代方案,还有Translate/Pootle webapp及其php2po脚本,但其中也必须有一些.mo转换函数...(哎呀,它在Python中。)

答案 1 :(得分:2)

PHP的execmsgfmt GNU gettext实用程序都不是Linux唯一的解决方案。他们在多个计算机系统上工作。与PHP一样,您可以编译多个平台(因为它自然而然地完成),因此exec命令在多个系统上可用,同样适用于msgfmt。从GNU gettext homepage开始,获取系统版本。

答案 2 :(得分:1)

尝试https://github.com/oscarotero/Gettext.git

use Gettext\Translations;
chdir('....');
        $translations = Translations::fromPoFile('messages.po');
        $translations->toMoFile('messages.mo');