翻译PHP字符串-是否包括格式化字符


translating php strings - include formatting characters or not?

我使用po文件使用gettext函数翻译我的应用程序。我有很多字符串使用格式化字符,如空格,冒号,问号等....

这里的最佳实践是什么?

例如:

_('operating database: '). DB_NAME. _(' on ').DB_HOST;
_('Your name:');

_('operating database').': '. DB_NAME.' '._('on').' '.DB_HOST;
_('Your name').':';

我应该保持翻译还是让它们硬编码更好?优点和缺点是什么?

你的两个例子都不好。

最佳实践是每个独立的文本显示单元使用一个字符串。例如,如果您要显示一个消息框,那么它的所有内容都应该是一个可翻译的字符串,即使它有多个句子。一个标签:一个字符串;A message: one string.

永远不要像上面的例子那样,除非你绝对无法避免,否则不要将显示的一段文本分割成代码中连接的多个字符串。相反,使用字符串格式化:

sprintf(_('operating database: %s on %s'), $DB_NAME, $DB_HOST);

原因是a)一些翻译可能需要将参数按不同的顺序排列,b)它为翻译提供了一些上下文来处理。例如,单独的"on"在不同的句子中,甚至在代码中的不同用法中,都可能被翻译成完全不同的意思,因此让翻译人员只翻译那个词将不可避免地导致糟糕的、难以理解的、破碎的翻译。

GNU gettext手册也有一章关于这个

如果你保持翻译,那么所有的翻译都会复制它们。这意味着所有这些空格,冒号等将为每种语言复制。对什么?我支持只翻译字符串的意义部分(第二种变体)。