翻译php字符串 - 包括格式化字符?

时间:2013-06-04 11:07:04

标签: php localization poedit

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

这里的最佳做法是什么?

E.g:

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

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

我应该让他们进行翻译还是让他们硬编码更好?有什么优点和缺点?

2 个答案:

答案 0 :(得分:1)

你的例子都不好。

最佳做法是每个自包含的显示文本单元有一个字符串。例如,如果您正在显示一个消息框,那么它的所有内容都应该是一个可翻译的字符串,即使它有多个句子。标签:一个字符串;消息:一个字符串。

从不,除非你绝对无法避免,否则将显示的文本段分成多个代码串联的字符串,如上例所示。相反,请使用string formatting

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

原因在于:a)某些翻译可能需要以不同的顺序放置参数; b)它为翻译者提供了一些可供使用的上下文。例如,单独使用“on”可以在不同的句子中进行完全不同的翻译,即使代码中的不同用法也是如此,因此让翻译人员只翻译该单词将不可避免地导致差,难以理解,已破坏翻译。

GNU gettext手册has a chapter on this

答案 1 :(得分:0)

如果您将它们保留在翻译中,则所有翻译都会复制它们。这意味着每种语言都会复制所有这些空格,冒号等。做什么的? 我只想翻译字符串的含义部分(第二个变体)。