我正在寻找一种从.po本地化文件创建excel或CSV文件的简单方法。
我找不到谷歌的任何东西,所以我想用PHP自己写。 PO文件具有这样的结构
msgstr“帖子” msgstr“Titre”所以我想我需要我的PHP脚本来解析.po文件,寻找“每次出现关键字msgstr后逗号之间的第一个文本位”。
我认为这是正则表达式的工作,所以我尝试了,但它没有返回任何内容:
$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);
答案 0 :(得分:2)
有一个漂亮的梨库。 File_Gettext
如果您查看来源File/Gettext/PO.php,就会看到您需要的正则表达式模式:
$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 lib:
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...
}