翻译php字符串-是否包含格式化字符?

翻译php字符串-是否包含格式化字符?,php,localization,poedit,Php,Localization,Poedit,我正在使用po文件使用gettext函数翻译我的应用程序。 我有很多使用格式字符的字符串,如空格、冒号、问号等 这里的最佳实践是什么 例如: 或 我应该翻译它们还是让它们硬编码更好?利与弊是什么?如果将它们保留在翻译中,那么所有的翻译都会复制它们。这意味着每种语言的所有空格、冒号等都将被复制。为何 我主张只翻译字符串的意义部分(第二种变体)。你的例子都不好 最佳实践是每一个独立的文本显示单元有一个字符串。例如,如果您正在显示一个消息框,那么它的所有内容都应该是一个可翻译字符串,即使它有多个句子。

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

这里的最佳实践是什么

例如:


我应该翻译它们还是让它们硬编码更好?利与弊是什么?

如果将它们保留在翻译中,那么所有的翻译都会复制它们。这意味着每种语言的所有空格、冒号等都将被复制。为何
我主张只翻译字符串的意义部分(第二种变体)。

你的例子都不好

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

除非绝对无法避免,否则千万不要像上面的示例那样,将显示的文本片段拆分为多个串接在代码中的字符串。相反,请使用:

原因是a)一些翻译可能需要将参数按不同的顺序排列,b)它为译者提供了一些上下文。例如,“on”一词可以在不同的句子中进行完全不同的翻译,甚至在代码中的不同用法中也是如此,因此让翻译人员只翻译该词将不可避免地导致糟糕、难以理解、不完整的翻译


GNU gettext手册也是如此。

在某些语言上,您不能说“DB_主机上的DB_名称”,但例如“DB_主机的xx DB_名称”或其他什么。我更喜欢翻译整个字符串,即使有重复(包括DB_NAME和DB_HOST作为变量)。大写的单词是php常量,当然不能翻译。但它们在翻译中可以用在不同的位置。您不能将
CONSTANT1翻译的单词CONSTANT2
翻译成
CONSTANT1'翻译的单词CONSTANT2
。所以,要确定你是只想要翻译,还是想要翻译和国际化
_('operating database: '). DB_NAME. _(' on ').DB_HOST;
_('Your name:');
_('operating database').': '. DB_NAME.' '._('on').' '.DB_HOST;
_('Your name').':';
sprintf(_('operating database: %s on %s'), $DB_NAME, $DB_HOST);