gettext, how to handle homonyms?

gettext, php

Solution

What you are looking for is contexts for `gettext` which solves ambiguities like your example. You can find information about in the documentation. Still the needed method `pgettext` is not implemented in PHP so you might use the helper method stated in a user comment in the php documentation.

if (!function_exists('pgettext')) {

  function pgettext($context, $msgid)
  {
     $contextString = "{$context}\004{$msgid}";
     $translation = dcgettext('messages', contextString,LC_MESSAGES);
     if ($translation == $contextString)  return $msgid;
     else  return $translation;
  }

}

In your case it would be

echo pgettext('mail', 'Letter');
echo pgettext('character', 'Letter');

Problem

Using gettext Single value ``` echo gettext( "Hello, world!\n" ); ``` Plurals ``` printf(ngettext("%d comment", "%d comments", $n), $n); ``` English homonym? ``` echo gettext("Letter");// as in mail, for Russian outputs "письмо" echo gettext("Letter");// as in character, for Russian outputs "буква" ``` Same with the english word "character", it can be the character of a person or a letter! How is gettext supposed to identify the right translation for homonyms?

Original source