php - 将.po文件导出到.csv

原文 标签 php regex csv po

我正在寻找一种简单的方法,从.po本地化文件创建一个excel或csv文件。
我在google上找不到,所以我想自己用php来写。
po文件具有这样的结构
msgid“乳头”
msgstr“标题”
所以我想我需要我的php脚本来解析.po文件,查找“每次出现关键字msgstr后逗号之间的第一位文本”。
我想这是regex的工作,所以我试过了,但没有返回任何内容:

$po_file = '/path/to/messages.po';

if(!is_file($po_file)){
    die("you got the filepath wrong dude.");
}

$str = file_get_contents($po_file);
// find all occurences of msgstr "SOMETHING"
preg_match('@^msgstr "([^/]+)"@i', $str, $matches);
$msgstr = $matches[1];

var_dump($msgstr);

最佳答案

有一个漂亮的梨图书馆。File_Gettext
如果您查看源代码File/Gettext/PO.php就会看到您需要的regex模式:

$matched = preg_match_all('/msgid\s+((?:".*(?<!\\\\)"\s*)+)\s+' .
                          'msgstr\s+((?:".*(?<!\\\\)"\s*)+)/',
                          $contents, $matches);

for ($i = 0; $i < $matched; $i++) {
    $msgid = substr(rtrim($matches[1][$i]), 1, -1);
    $msgstr = substr(rtrim($matches[2][$i]), 1, -1);

    $this->strings[parent::prepare($msgid)] = parent::prepare($msgstr);
}

或者使用pear库:
include 'File/Gettext/PO.php';

$po = new File_Gettext_PO();
$po->load($poFile);
$poArray = $po->toArray();

foreach ($poArray['strings'] as $msgid => $msgstr) {
    // write your csv as you like...
}

相关文章:

javascript - 如何在午夜从表中删除MySQL数据?

python - 搜索正则表达式,以返回带空格的字符串

python - 熊猫基于列合并csv

php - PDO插入查询未将数据插入数据库?

php - 从数据库数组中检索特定值

php - 用PHP扩展单例

javascript - 从javascript中的字符串中过滤版本号?

javascript - javascript正则表达式搜索模式A(xyz)

php - 阅读Excel数据并以以下格式插入

python - 从每日CSV文件更新MYSQL-跳过已导入