2013-06-04 60 views
0

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

这里最好的实践是什么?

例如为:

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

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

我应该让他们在翻译或者是更好地让他们硬编码?优缺点都有什么?

+0

在某些语言上,您不能说“DB_HOST上的DB_NAME”,但例如“DB_HOST'xx DB_NAME”或其他。即使存在重复(包括DB_NAME和DB_HOST作为变量),我更愿意翻译整个字符串。 – enenen

+0

大写字母中的单词是php常量,它们无法翻译 – abimelex

+0

当然。但他们可以用在翻译的不同位置。您无法将'CONSTANT1 translated_word CONSTANT2'转换为'CONSTANT1'translated_word some_other_word CONSTANT2'。因此,请确定您是否只需要翻译或翻译和国际化。 :) – enenen

回答

1

你们的例子都不是很好。

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

从来没有,除非你完全无法避免它,否则将显示的一段文本分解为代码中连接的多个字符串,如上例所示。相反,使用string formatting

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

的原因是)有些翻译可能需要将这些参数在不同的顺序和b)它给译者一些方面的工作。例如,单独的“on”可以在不同的句子中翻译得非常不同,即使在你的代码中有不同的用途,所以让翻译者翻译这个单词不可避免会导致很差,很难理解,破译翻译。

GNU gettext手册has a chapter on this也是如此。

+0

谢谢,这是非常有益的。 – abimelex

0

如果你让他们翻译,而不是所有的翻译都会重复他们。这意味着所有这些空格,冒号等都将被重复用于每种语言。做什么的? 我只是翻译字符串的含义部分(第二个变体)。