我想使用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'
但我不确定......
有没有办法翻译字符串而不管其中的具体数字(某种格式可能)?
谢谢,
Bentzy
答案 0 :(得分:3)
你谈到的问题更容易解决:
$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
中的占位符。
答案 1 :(得分:0)
如果您始终了解格式,sscanf
可以为您提供帮助。
sscanf('i am %d years old', $years);
$newString = sprintf('Tengo %d años de edad', $years);
答案 2 :(得分:0)
您可以在翻译后使用替换号码。
str_replace('#NUM#', $num, gettext('i slept #NUM# hours a day'));