.PO到.MO-编程转换(PHP)
我计划允许用户通过PHP用户界面生成.POT文件/.PO文件,作为CMS解决方案的一部分。一旦生成这些文件(简单一点),我希望允许我的系统自动将这些文件转换为.MO文件,以响应用户(POST)请求 因此,我看到以下问题: 我知道我可以通过使用PHP的.PO到.MO-编程转换(PHP),php,windows,linux,translation,gettext,Php,Windows,Linux,Translation,Gettext,我计划允许用户通过PHP用户界面生成.POT文件/.PO文件,作为CMS解决方案的一部分。一旦生成这些文件(简单一点),我希望允许我的系统自动将这些文件转换为.MO文件,以响应用户(POST)请求 因此,我看到以下问题: 我知道我可以通过使用PHP的exec()函数运行msgfmt,但如果我没记错的话,这似乎是Linux唯一的解决方案?我如何在其他操作系统上做到这一点?如果有人愿意演示的话,一些关于如何在实践中做到这一点的示例代码也会非常有用。这与我通常做的工作大不相同 目前这只是一个概念,但
exec()
函数运行msgfmt
,但如果我没记错的话,这似乎是Linux唯一的解决方案?我如何在其他操作系统上做到这一点?如果有人愿意演示的话,一些关于如何在实践中做到这一点的示例代码也会非常有用。这与我通常做的工作大不相同
目前这只是一个概念,但我希望我的思路是正确的。如果您对这种方法有任何其他想法/建议,我很乐意听取。背景资料如下
其他背景信息-不需要:
我通过解析只包含基本HTML的简单模板文件和调用
来检索原始英文文本。这些模板在编辑/保存时进行分析,并检索语言条目。然后将生成.POT文件。用户现在必须手动编辑翻译(通过简单的界面,而不是直接编辑),以更新/准备所有.PO文件。完成后,我需要能够将它们转换为.MO文件,这是我问题的标题。PHP的exec
和msgfmt
GNU gettext实用程序都不是linux唯一的解决方案。他们在多个计算机系统上工作。与PHP一样,您可以为多个平台编译(这是很自然的),因此exec
命令可以在多个系统上使用,这同样适用于msgfmt
。从开始为您的系统获取一个版本。如果您正在寻找的是msgfmt
,也有仅PHP的重新实现:
- /
@marioThat php.mo类看起来很棒。谢谢你让我注意到这一点——我很快就会给出答案!您是否知道是否有任何PHP实现也可以扫描给定的目录来创建POT文件?我已经在谷歌上搜索过了,但到目前为止还没有找到任何东西。这只需要一个简单的正则表达式并读取文件。我确实见过这样的事情。大多数使用双下划线
的PHP应用程序都有一个gettext包装函数。IIRC你可能会在例如PhpWiki中找到一个。(用谷歌搜索另一个……出人意料的困难)回想起来,我也看到Magento使用了双下划线。我可能会看看他们做了什么。我所能想到的只是一个glob()
和preg\u match\u All()
(正如您所建议的),尽管我可以想象如果应用程序足够大,执行时间会非常糟糕。。。无论如何,再次感谢。php.mo的链接已失效,您能修复它吗?尝试了这两种方法,都无法创建有效的.mo,只有最后一个.po密钥从.mo导入
use Gettext\Translations;
chdir('....');
$translations = Translations::fromPoFile('messages.po');
$translations->toMoFile('messages.mo');