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

3
我打算允许用户通过PHP用户界面生成.POT文件/.PO文件作为CMS解决方案的一部分。一旦生成这些文件(容易部分),我希望我的系统能够自动将这些文件转换为.MO文件以响应用户(POST)请求。
我在SO上看到了以下问题: .po to .mo convertor in php? 我知道我可以使用PHP的exec()函数运行msgfmt,但那似乎只是Linux的解决方案,如果我没记错的话?在其他操作系统上该怎么做呢?如果有人能友好地演示如何实现这一点的示例代码,那将非常有用。这与我通常所做的工作非常不同!
目前这只是一个概念,但我希望我正在沿着正确的方向前进。如果您对这种方法有任何其他想法/建议,我会很乐意听取它们。附加背景信息如下。

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

3个回答

6
如果您正在寻找的是仅限于PHP的重新实现msgfmt,那么这里也有几个选择: 作为替代方案,还可以使用Translate/Pootle网络应用程序及其php2po脚本,但其中也必须有一些.mo转换功能...(哎呀,不好意思,它是用Python编写的。)

@mario,那个php.mo类看起来非常不错。谢谢你让我注意到它 - 我很快就会将其标记为答案!你是否知道是否有任何PHP实现可以扫描给定目录以创建POT文件?我已经在Google上搜索了一下,但迄今为止还没有找到任何东西。 - pb149
这只需要一个简单的正则表达式和阅读文件。我肯定见过类似的东西。大多数使用双下划线 __() gettext 包装函数的 PHP 应用程序都有一个。如果我没记错的话,你可能会在 PhpWiki 中找到一个。(惊人地难以谷歌到另一个..) - mario
说起来,我也看到Magento使用了双下划线。我可以去看看他们做了什么。我所能想到的就是使用glob()preg_match_all()(正如你所建议的),尽管如果应用程序足够大,执行时间可能会相当恶劣...无论如何,再次感谢。 - pb149
1
php.mo的链接已经失效了,你能修复一下吗? - halfpastfour.am
尝试了两种方法,都无法创建有效的.mo文件,只有最后一个.po键从.mo文件中导入。 - max4ever

2

PHP的exec命令和GNU gettext实用程序msgfmt并非仅限于Linux系统。它们可以在多个计算机系统上运行。与PHP一样,您可以为多个平台进行编译(自然而然地完成),因此exec命令可用于多个系统,msgfmt也是如此。请访问GNU gettext主页以获取适用于您系统的版本。


1

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接