我在我的应用程序中加入了类似gettext的本地化系统,但我的翻译功能如下所示:
t($category, $string, [$plural_string, $number, $vprintf_arguments])
我的PoEdit关键字:
t:2
t:2,3
$string
,它显然可以正常工作$string
和$plural_string
- 但不是:( 它只看到$string
,所以我没有解析复数形式......我该如何解决?我不想将我的函数切换到不同的参数格式,因为我喜欢这个:(
此功能也像sprintf替代品一样:
无论如何,PoEdit不应该干扰非引用的论点,对吧?我的意思是它只会将$ plural_string解析为字符串,如果它看起来像'abc abc'
答案 0 :(得分:6)
gettext一次只处理一个字符串。 你可能会追求的是ngettext。 (查找语法)
在那里,你会为一个单词添加一个文本,为复数添加另一个文本,还有数字。
关于这一点的聪明之处在于,许多语言的复数结构与英语完全不同。 例如,俄语使用三种不同的形式。 一个是计数以明显的“一”结束的地方: 1,21,31,41等 第二种形式是计数,以明显的2,3或4结尾。 第三种形式是其余的......
而且,使用ngettext,可以做到这一点。 是的,在poedit中,必须正确定义目标语言的复数结构,但是,它只是有效。
答案 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 / gettext域中想要的内容,我认为如果你添加一些具体的代码示例以及结果应该是什么,你的问题将会受益。