PHP gettext中的变量

16

可能是重复问题:
gettext如何处理动态内容?

我正在使用PHP的gettext。我想要翻译一句话,其中包含一个变量,这个可行吗?

例如,在英语中:

Are you sure you want to block Alice?

(其中“Alice”是用户的名称)

但在德语中,主语不会出现在句子的末尾。

Sind Sie sicher, dass Sie Alice blockieren?

在messages.po文件中,我有:

msgid "BLOCK"
msgstr "Are you sure you want to block"

但我没有看到传递一个或多个变量的方法。这是否可行?


2
常用的占位符,如%ssprintf等,可以用于此类情况。此外,在gettext源字符串中不应使用缩写。对于未翻译的消息,请使用简单的英语。实际上,消息很少更改,如果发生更改,gettext目录可以很容易地进行适应。 - mario
1个回答

37

Poedit 能识别变量。

msgid "Are you sure you want to block %s?"
msgstr "Sind Sie sicher, dass Sie %s blockieren?"

并且在 PHP 中

sprintf(_('Are you sure you want to block %s?'),'Alice');

太简单了!谢谢。已经编辑以显示sprintf。printf只显示长度。 - Terence Eden
2
Sprintf?为什么?Printf只是打印字符串,而sprintf则返回它。也许你可以写成echo sprintf - Luca Rainone
2
@chumkiu - sprintf() 可能是由于与 gettext 和本地化无关的原因而在此处使用。 (应用程序本身可能需要存储/操作生成的字符串,而不是直接将其输出到 stdout。) - rinogo
可以用 <?= __('key') ?> 这样的方式做吗? - Thomas Rbt

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接