2014-10-19 126 views
0

我在PHP中有gettext問題。考慮一種情況,即源語言中的單詞或表達可以具有不同的含義。Gettext不同的翻譯

例如:單詞A單詞有兩個含義;一個是B,另一個是C。在網站的一部分中,我們應該使用B。另一部分我們應該使用C

當我們寫_('A')如何才能得到BC?應該有一個堅實的方式來處理這個問題。

+0

你可以發佈演示,並顯示你已經嘗試過的代碼嗎? – BenM 2014-10-19 09:30:42

+0

沒有什麼可寫的。因爲我已經在使用。問題是,我需要同一個詞的多個翻譯。 – 2014-10-19 09:32:33

+0

對不起,顯示你已經嘗試過的東西總是很好,並解釋它爲什麼不起作用。沒有人會爲你寫信。 – BenM 2014-10-19 09:34:52

回答

3

Gettext支持所謂的message contexts。 PHP對此沒有本地方法,但是it can easily be implemented

假設我們想在不同的上下文中使用術語「金額」 - 在一個上下文中,它表示「一組項目的數量」,在其他上下文中,它指的是「發票金額」。

它工作在以下幾個步驟:

首先:除了使用gettext()功能,你可以使用一個定製;我們稱之爲contextGettext()

echo contextGettext('amount', 'count of items'); 
echo contextGettext('amount', 'invoice amount'); 

此方法是這樣的:

function contextGettext($string, $context) 
{ 
    // http://www.php.net/manual/de/book.gettext.php#89975 
    $contextString = "{$context}\004{$string}"; 
    $translation = gettext($contextString); 
    return ($translation === $contextString) ? $string : $translation; 
} 

注意\004:這是其限定從所述消息字符串的上下文標識符,作爲每gettext的說明書中,分離器。 (沒有你需要很在意,只知道背景)

當收集翻譯的字符串與xgettext工具,就可以添加以下--keyword參數的上下文相關的字符串:

xgettext … --keyword="contextGettext:2c,1" … 

然後,您.po文件將具有以下項:

msgctxt "count of items" 
msgid "amount" 
msgstr "" 

msgctxt "invoice amount" 
msgid "amount" 
msgstr "" 

翻譯目錄,生成.mo文件並重新啓動後webserve r,你的web應用程序會在正確的位置輸出正確的字符串。