同时使用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的是应该如何确定正确的翻译同音?
你所寻找的是对环境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');
虽然试图使用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后“复数”文本问题,不过这是另一个话题。)
对于使用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/