在哪里翻译消息字符串 - 在视图中还是在模型中?

时间:2009-06-05 09:37:39

标签: language-agnostic internationalization gettext xgettext

我们有一个多语言(PHP)应用程序,并使用gettext for i18n。后端/模型中有一些类为printf()返回消息或消息格式。

我们使用xgettext来提取我们想要翻译的字符串。

我们在前端/视图中应用gettext函数T_() - 这似乎是它所属的位置。到目前为止,我们通过T_()调用保持后端干净,这样我们也可以对消息进行单元测试。

所以在前端我们有类似

的东西
echo T_($mymodel->getMessage());

printf(T_($mymodel->getMessageFormat()), $mymodel->getValue());

这使得无法应用xgettext来提取字符串,除非我们在MyModel类中调用了一些虚拟T _(“我的消息%s to translate”)调用。

因此,这导致了更普遍的问题:

您是否在后端课程中应用翻译?你在哪里应用翻译?你如何跟踪你必须翻译的字符串?

(我知道Question: poedit workaround for dynamic gettext。)

2 个答案:

答案 0 :(得分:1)

我的后端类通常输出带有参数的英文字符串。实施例

["Good job %s you have %i points", "Paul", 10]

然后翻译的关键是英文字符串(因为我不太喜欢消息代码)。

答案 1 :(得分:0)

翻译对我来说完全是一个View问题,除了明确定义的商业原因,比如必须存储显示的消息,如图所示。后者可以例如如果您希望将已发送的发票存储到客户端,则会发生这种情况。