此包的最新版本(0.4.1)没有可用的许可证信息。

用于处理gettext PO文件的工具。

0.4.1 2013-12-03 11:27 UTC

This package is not auto-updated.

Last update: 2024-09-14 13:02:24 UTC


README

PHP中处理gettext PO文件的一系列工具集合。

POString

以所有可能的属性表示PO文件中的一个条目。

目录

按类别、领域和上下文对POString对象进行分组和分类。合并重复出现的字符串的属性。可以使用POWriter将目录输出到磁盘。

POWriter

将一个POString实例写入gettext PO格式的流中。

脚本

update

将POT文件的目录结构合并到PO文件中。

使用/工作流程

gettext工作流程需要/期望您已安装平台上的gettext工具(https://gnu.ac.cn/software/gettext/),包括msginitmsgmergemsgfmt命令行工具。对于完整的手册,请参阅https://gnu.ac.cn/software/gettext/manual/gettext.html

在OS X上,通过Homebrew(http://mxcl.github.com/homebrew/)安装这些工具是最简单的方法。

$ brew install gettext

大多数Linux软件包管理器应该会使这变得同样简单。

Kunststube\POTools是为以下情况设计的:gettext的xgettext工具不起作用或不充分,例如对于xgettext不支持语法的模板。在这些情况下,可以快速编写自定义解析器/提取器,同时使用Kunststube\POTools来处理gettext文件格式的细节。对于工作流程的其余部分,可以使用常规的gettext工具。

完整的工作流程看起来可能如下所示

  1. 通过将它们包裹在gettext函数中来准备源代码中的字符串。
  2. 使用适当的解析器从源代码中提取字符串,为每个创建POString对象。
  3. POString对象添加到目录中。
  4. 目录写入区域目录作为源/主区域POT文件。
    • 4b. 第一次只:使用msginit实用程序创建本地化PO文件。
  5. 翻译PO文件。
  6. 使用update脚本来保持PO文件与更新的POT文件同步。
  7. 使用msgfmt实用程序进行质量检查并将PO文件编译为MO文件。
  8. 重洗,重复。

创建主目录POT文件

// Extraction of strings from source is not part of Kunststube\POTools,
// bring your own extractor specific to your needs.
$extractedStrings = my_string_extractor('template.php');

$catalog = new Kunststube\POTools\Catalog('My Project 1.0', 'en_US');

foreach ($extractedStrings as $extractedString) {
    $POString = new Kunststube\POTools\POString($extractedString);

    // set as many additional attributes as you can extract
    $POString->setDomain('errors');
    ...

    $catalog->add($POString);
}
    
$catalog->writeToDirectory('locale/en_US');

此过程创建的目录结构应该看起来像这样

locale/
    en_US/
        ...
        LC_MESSAGES/
            messages.pot
            ...
        LC_MONETARY/
            messages.pot
            ...

创建和更新PO文件

最初,使用msginit实用程序为所有目标区域创建PO文件。当您随后更改和更新源文件时,重复提取过程以重新创建主POT文件,然后使用update脚本来将更新传播到每个区域。假设目录结构如下

locale/
    en_US/
        LC_MESSAGES/
            messages.pot
        LC_MONETARY/
            messages.pot
    de_DE/
        LC_MESSAGES/
            messages.po
        LC_MONETARY/
            messages.po
    fr_FR/
        LC_MESSAGES/
            messages.po
        LC_MONETARY/
            messages.po

像这样运行update脚本

update path/to/locale en_US

第一个参数(path/to/locale)是整个locale目录的路径,第二个参数(en_US)是包含主POT文件的区域目录的名称。update脚本将迭代主区域目录中的所有POT文件,并将更改合并到其他区域目录中同名PO文件中。

需要msgmerge实用程序在shell $PATH中。