gpt4 book ai didi

php - gettext() 中的多个复数形式

转载 作者:IT王子 更新时间:2023-10-29 00:05:07 25 4
gpt4 key购买 nike

请参阅 _n(); 的示例功能(http://codex.wordpress.org/Function_Reference/_n):

sprintf( _n('%d comment.', '%d comments.', $number, 'text-domain'), $number );

英语:

1 Comment
2 Comments

在波兰语等语言中,有不同的模式和多种复数形式:

1 Komentarz
2 Komentarze
3 Komentarze
4 Komentarze
5 Komentarzy
6 Komentarzy
...
21 Komentarzy
22 Komentarze
23 Komentarze
24 Komentarze
25 Komentarzy
...
31 Komentarzy
32 Komentarze
...
91 Komentarzy
92 Komentarze
...
111 Komentarzy
112 Komentarzy (!)
...
121 Komentarzy
122 Komentarze

如果他们的语言支持多种复数形式,我正在寻找一些方法让翻译人员能够设置自己的模式。您能想出任何创造性的 PHP 方法来做到这一点吗?

我能想到的一些解决方案(但翻译者仍然无法设置任何模式):

if($number == 1){
$message = __(‘1 Komentarz’ , ‘text-domain’);
}else if($number == 2){
$message = __(‘2 Komentarze’ , ‘text-domain’);
}else if($number == 3){
$message = __(‘3 Komentarze’ , ‘text-domain’);
}

编辑:我在波兰语的 PO 文件中找到了这个:"Plural-Forms: nplurals=3; plural=n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"但我还是不知道如何准备_n();功能来支持这一点。

最佳答案

首先,您的语言环境文件需要有复数的定义。正如您在问题中添加的那样,在波兰语中您可能会看到

"Plural-Forms: nplurals=3; plural=n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"

或 (domain_name)-pl.po 文件中的类似定义。

然后,您需要在.po 文件中准备“%d Comment”/“%d Comments”的翻译。例如,

msgid "%d Comment"
msgid_plural "%d Comments"
msgstr[0] "%d Komentarz"
msgstr[1] "%d Komentarze"
msgstr[2] "%d Komentarzy"

请将.po 文件编译成.mo 文件并放置到合适的文件夹中。 (例如语言/(域名)-pl.mo

在您的 Wordpress(我假设是插件/主题)代码中,您可以这样调用它,

for ($i=1;$i<15;$i++) {
printf(_n("%d Comment", "%d Comments", $i, "(domain_name)"), $i);echo "<br />";
}
printf(_n("%d Comment", "%d Comments", 112, "(domain_name)"), 112);echo "<br />";

然后当然在 wp-config.php 中将 WordPress 的语言环境设置为波兰语,

define ('WPLANG', 'pl');

您应该会看到具有正确复数形式的结果。

关于php - gettext() 中的多个复数形式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12121515/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com