我在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