我正在使用po文件来使用gettext函数翻译我的应用程序。 我有很多字符串使用格式字符,如空格,冒号,问号等....
这里的最佳做法是什么?
E.g:
_('operating database: '). DB_NAME. _(' on ').DB_HOST;
_('Your name:');
或
_('operating database').': '. DB_NAME.' '._('on').' '.DB_HOST;
_('Your name').':';
我应该让他们进行翻译还是让他们硬编码更好?有什么优点和缺点?
答案 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)
如果您将它们保留在翻译中,则所有翻译都会复制它们。这意味着每种语言都会复制所有这些空格,冒号等。做什么的? 我只想翻译字符串的含义部分(第二个变体)。