Gettext不同的翻译

时间:2014-10-19 09:29:21

标签: php gettext

我在PHP中遇到了gettext问题。想想源语言中的单词或表达可能有不同含义的情况。

例如:Word A字有两个含义;一个是B,一个是C。在网站的一部分,我们应该使用B。另一方面,我们应该使用C

当我们写_('A')时如何获得BC?应该有一个可靠的方法来解决这个问题。

1 个答案:

答案 0 :(得分: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文件并重新启动网络服务器后,您的网络应用程序将在正确的位置输出正确的字符串。

相关问题