gettext的,如何处理同音?(gettext, how to handle homonyms?)

2019-09-01 07:47发布

同时使用gettext

单值

echo gettext( "Hello, world!\n" );

复数

printf(ngettext("%d comment", "%d comments", $n), $n);

英文谐音?

echo gettext("Letter");// as in mail, for Russian outputs "письмо"
echo gettext("Letter");// as in character, for Russian outputs "буква" 

同样的,英文单词“人物”,它可以是一个人或一个字母的字符! gettext的是应该如何确定正确的翻译同音?

Answer 1:

你所寻找的是对环境gettext解决了像你的例子歧义。 您可以找到有关信息的文档 。 还是需要的方法pgettext没有PHP实现,所以你可能会使用在规定的辅助方法, 用户评论的PHP文档。

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;
  }

}

在你的情况下,将

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


Answer 2:

虽然试图使用GNU工具了xgettext从源代码中,我遇到了一些麻烦与上述pgettext()的想法提取字符串。

起初,它看起来像它去上班。 使用--keyword说法我可以运行了xgettext实用工具从测试脚本,这些内容和消息字符串:

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

并获得与预期输出.POT文件:

...
msgctxt "mail"
msgid "Letter"
msgstr ""

msgctxt "character"
msgid "Letter"
msgstr ""
...

但是,PHP的gettext *()函数不允许我通过上下文字符串 - 所以我不能得到翻译文本。

能够使用GNU工具使事情变得更容易为我,所以我的解决方案是使用这样的:

function _c( $txt ) { return gettext( $txt ); }

echo "<P>", _c( "mail:Letter" ), "\n";
echo "<P>", _c( "character:Letter" ), "\n";

现在,我在运行了xgettext实用

xgettext ... --keyword="_c:1" ...

对我的测试脚本。 这将生成简单MSGID的一个.POT文件,可以通过PHP的gettext(功能访问):

...
msgid "mail:Letter"
...
msgid "character:Letter"
...

接下来,我将.POT模板复制到不同的文件夹LC_MESSAGE作为.po文件并编辑翻译的文本:

...
msgid "mail:Letter"
msgstr "Russian outputs for Mail: \"письмо\""

msgid "character:Letter"
msgstr "Russian outputs for Letter of the Alphabet: \"буква\""
...

我的测试脚本的工作原理:

...
Russian outputs for Mail: "письмо"

Russian outputs for Letter of the Alphabet: "буква" 
...

了xgettext为文档是在这里: http://www.gnu.org/software/gettext/manual/html_node/xgettext-Invocation.html

(我仍然有poEdit后“复数”文本问题,不过这是另一个话题。)



Answer 3:

对于使用poEdit的像我一样的那些你需要以下。 首先创建功能。 我使用一个名为_x就像一个WordPress的使用:

if (!function_exists('_x')) {

function _x($string, $context)
{
  $contextString = "{$context}\004{$string}";
  $translation = _($contextString);
  if ($translation == $contextString)  
     return $string;
  return $translation;
}
}

然后在poEdit的需要输入源关键字标签在以下方面:

_x:1,2c
_

所以,当你需要使用环境的翻译使用_x功能。 例如:

<?php
echo    _x('Letter', 'alphabet');
echo    _x('Letter', 'email');
echo    _('Regular translation');

我把所有的这些链接的信息:

  • Gettext的与上下文中工作(pgettext)
  • http://www.cssigniter.com/ignite/wordpress-poedit-translation-secrets/


文章来源: gettext, how to handle homonyms?
标签: php gettext