2013-12-09 8 views
3

.po 현지화 파일에서 Excel 또는 CSV 파일을 만드는 간단한 방법을 찾고 있습니다..po 파일을 .csv로 내 보냅니다.

Google을 통해 찾을 수 없으므로 직접 PHP로 작성하려고합니다. PO 파일은 구조를

MSGID "역가" msgstr "역가"

그래서 나는 각 후에 쉼표와 텍스트의 첫 번째 비트 "를 찾는와 .po 파일을 구문 분석하는 내 PHP 스크립트를 필요로 생각을 가지고 키워드 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

당신이 주석 행을 잡을해야합니까를 ? –

+0

아니, 아니에요! – pixeline

답변

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); 
} 

을하거나 배 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... 
} 
+0

그러나이 문자열로 패턴이 실패한다는 점에 유의하십시오 :'msgstr "abc \\\"def "' –

+0

@CasimiretHippolyte [PEAR bug tracker] (https : //pear.php .net/bugs/report.php? package = File_Gettext & action = Report + Bug) – bitWorking

+0

죄송합니다, 실수를했습니다 :''abstdef "abcdef \\"' –