2010-02-09 61 views
4

我正在使用PHP的gettext函數進行本地化。我使用Poedit來進行實際翻譯,並且通過「從源代碼更新」功能,可以非常容易地提取需要翻譯的所有字符串 - 除了在heredoc語法中。從PHP heredoc語法中提取gettext翻譯?

Poedit正在使用xgettext程序從PHP源文件生成.po文件。它精美的作品時,PHP代碼如下所示:

echo "<h1>". _("test") ."</h1>"; 

但是下面沒有得到提取(請注意,僞T-對象需要使用):

echo <<<EOD 
<h1>{$->_('test')} 
EOD; 

在PHP代碼,你可以通過以下方式解決該問題:

<?php 
$t = _('test'); 
echo <<<EOD 
<h1>$t</h1> 
EOD 
?> 

但我真的寧願在節目了xgettext可從定界符塊中提取字符串。

在PHP文檔註釋workaround for that has been suggested。解決方法是處理告訴xgettext程序將PHP源文件視爲Python代碼。但是在Poedit中使用這種方法給了我很多來自xgettext解析器的語法錯誤。

有誰知道了xgettext獲得從中提取PHP定界符語法翻譯一個解決方法嗎?

一個有點相關的票已經打開的gettext項目的門票系統上:http://savannah.gnu.org/bugs/?27740這表明了定界符支持可以改善?

+0

我創建了一個售票專爲此:http://savannah.gnu.org/bugs/index.php?35944我希望沒有更多的純粹主義者來給解決方法。這只是煩人的,這不被支持。 – Ciantic 2012-03-22 11:51:30

回答

3

我是您在帖子中提及的gettext門票的記者。 當我提交了票,我腦海中完全不同的,更多的東西沿着這些線路:

<?php 
    $msg = _(<<<TXT 
    He said: "Hello world!". 
    TXT 
); 
?> 

的Gettext無法提取這樣的定界符/ nowdoc字符串文本,但翻譯大塊時,這可能是真正有用的的文字。

就我而言,我使用gettext的CLI PHP腳本翻譯包含XML標記的文本塊。該標記是原文的一部分,需要翻譯。必須手動轉義標記中的每個引號或撇號,這些信息在POedit或其他編輯器中很難閱讀。

在你的情況,看來你想在(定界符/ nowdoc)串插代碼中提取。您可以輕鬆地通過準備文本解決這一問題之前,你實際使用插值:

<?php 
$t = _('test'); 
echo <<<EOD 
<h1>$t</h1> 
EOD 
?> 

我不認爲這應該被認爲是一個錯誤,因爲不完全等同於您發佈使用定界符將是代碼:

<?php 
echo "<h1>{$t->_('test')}</h1>"; 
?> 

其中gettext無法提取「測試」消息。

+0

感謝您的回答! Ups - 顯然我沒有足夠透徹地閱讀gettext ticket。因爲我想要的是 - 種 - 相反:從Poedit中提取的字符串中刪除標記。 我正朝着你所建議的方向前進;在插值之前準備外部文本。但我仍然認爲這是一種解決方法,從heredoc語法(IMHO)中提取文本將非常有用。 – 2010-02-15 11:47:29

+0

「你可以很容易的解決方法」呃,如果有人使用heredoc(像我一樣)的內容是巨大的!這是一個缺陷功能。它應該是固定的。 – Ciantic 2012-03-22 11:42:15