Gettext другой перевод

У меня проблема с gettext в PHP. Подумайте о ситуации, когда слово или выражение на исходном языке может иметь разные значения.

Например: слово A слово имеет два значения; один B и один C, В части сайта мы должны использовать B, А в другой части мы должны использовать C,

Когда мы пишем _('A') Как мы можем получить B или же C? Должен быть надежный способ справиться с этим.

0

Решение

Gettext поддерживает так называемые контексты сообщения. PHP не имеет собственного метода для этого, но это может быть легко осуществлено.

Предполагая, что мы хотим использовать термин «сумма» в разных контекстах — в одном контексте это означает «количество элементов», в другом контексте — «сумма счета».

Работает в несколько этапов:

Во-первых: вместо использования 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 файлы и перезапустите ваш веб-сервер, ваше веб-приложение выведет правильные строки в правильном месте.

3

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]