PoEdit关键字 - 复数

时间:2011-12-06 22:31:33

标签: php localization gettext poedit xgettext

我在我的应用程序中加入了类似gettext的本地化系统,但我的翻译功能如下所示:

 t($category, $string, [$plural_string, $number, $vprintf_arguments])

我的PoEdit关键字:

t:2
t:2,3
  • t:2告诉PoEdit解析$string,它显然可以正常工作
  • t:2,3应告诉PoEdit解析$string$plural_string - 但不是:(

它只看到$string,所以我没有解析复数形式......我该如何解决?我不想将我的函数切换到不同的参数格式,因为我喜欢这个:(

此功能也像sprintf替代品一样:

  • 如果第三个参数($ plural_string)是一个数组,那么该函数会将数组中的值视为vsprintf的参数
  • 如果第三个参数是一个字符串并且提供了$ number,则该函数将$ vprintf_arguments视为vsprintf的参数(如果提供),$ plural_string作为$ string的复数形式

无论如何,PoEdit不应该干扰非引用的论点,对吧?我的意思是它只会将$ plural_string解析为字符串,如果它看起来像'abc abc'

2 个答案:

答案 0 :(得分:6)

gettext一次只处理一个字符串。 你可能会追求的是ngettext。 (查找语法)

在那里,你会为一个单词添加一个文本,为复数添加另一个文本,还有数字。

关于这一点的聪明之处在于,许多语言的复数结构与英语完全不同。 例如,俄语使用三种不同的形式。 一个是计数以明显的“一”结束的地方: 1,21,31,41等 第二种形式是计数,以明显的2,3或4结尾。 第三种形式是其余的......

而且,使用ngettext,可以做到这一点。 是的,在poedit中,必须正确定义目标语言的复数结构,但是,它只是有效。

http://www.gnu.org/s/hello/manual/gettext/Plural-forms.html

答案 1 :(得分:1)

就像Tor-Bjorn Fjellner回答的那样,这实际上应该可行。

如果你告诉poedit该语言实际上有多种形式(Translating Plural Forms with Poedit)并考虑了你的关键词,那么poedit会提供翻译。

示例

多种形式: nplurals=2; plural=n != 1;

关键词:

  • t:2
  • t:2,3

PHP代码:

<?php

t("cat", "strA");

t("cat", "strB1", "strB2", 2, array());

t("cat", "strC1", "strC2", 3, array());

Poedit用户界面:

Poedit Plural Forms

我在你的问题中没有理解的是关于数组等的观点。我无法解读你在poedit / gettext域中想要的内容,我认为如果你添加一些具体的代码示例以及结果应该是什么,你的问题将会受益。