我在PHP中有gettext問題。考慮一種情況,即源語言中的單詞或表達可以具有不同的含義。Gettext不同的翻譯
例如:單詞A
單詞有兩個含義;一個是B
,另一個是C
。在網站的一部分中,我們應該使用B
。另一部分我們應該使用C
。
當我們寫_('A')
如何才能得到B
或C
?應該有一個堅實的方式來處理這個問題。
我在PHP中有gettext問題。考慮一種情況,即源語言中的單詞或表達可以具有不同的含義。Gettext不同的翻譯
例如:單詞A
單詞有兩個含義;一個是B
,另一個是C
。在網站的一部分中,我們應該使用B
。另一部分我們應該使用C
。
當我們寫_('A')
如何才能得到B
或C
?應該有一個堅實的方式來處理這個問題。
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應用程序會在正確的位置輸出正確的字符串。
你可以發佈演示,並顯示你已經嘗試過的代碼嗎? – BenM 2014-10-19 09:30:42
沒有什麼可寫的。因爲我已經在使用。問題是,我需要同一個詞的多個翻譯。 – 2014-10-19 09:32:33
對不起,顯示你已經嘗試過的東西總是很好,並解釋它爲什麼不起作用。沒有人會爲你寫信。 – BenM 2014-10-19 09:34:52