Tengo 100 años de edad (spanish) "i am-6ren">
gpt4 book ai didi

php - 带数字的字符串的gettext

转载 作者:行者123 更新时间:2023-12-04 05:40:43 24 4
gpt4 key购买 nike

我想使用 gettext 来翻译一个句子并保持原样,就像在这些例子中一样:

"i am 100 years old" -> Tengo 100 años de edad (spanish)
"i am 10 years old" -> Tengo 10 años de edad (spanish)

"i slept 24 hours a day" -> Ich schlief 24 Stunden am Tag (german)
"i slept 4 hours a day" -> Ich schlief 4 Stunden am Tag (german)

我猜字符串应该是这样的: 'i slept #24# hours a day'但我不确定...

无论字符串中的具体数字是多少(可能是某种格式),有什么方法可以翻译字符串?

最佳答案

您谈论的问题很容易通过以下方式解决:

$translation = gettext("I am %d years old");
$phrase = sprintf($translation, $n);

但实际上还有另一个问题。在某些语言中,数字后面的名词(在您的示例中为“年”)根据使用的数字而不同。它不仅仅是单/复数形式:例如,在俄语中
"I am 10 years old" = "Мне 10 лет"
"I am 21 years old" = "Мне 21 год"

对于这些类型的翻译,您应该使用更高级的 ngettext () 函数,如下所示:
setlocale(LC_ALL, 'cs_CZ');
printf(ngettext("%d window", "%d windows", 1), 1); // 1 okno
printf(ngettext("%d window", "%d windows", 2), 2); // 2 okna
printf(ngettext("%d window", "%d windows", 5), 5); // 5 oken

是的,数字本身被使用了两次:第一次在 ngettext 中得到正确的名词形式。 , 然后在 printf 中填充占位符.

关于php - 带数字的字符串的gettext,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11272675/

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