0

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

这里的最佳做法是什么?

例如:

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

或者

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

我应该将它们保留在翻译中还是让它们硬编码更好?优缺点都有什么?

4

2 回答 2

1

你的两个例子都不好。

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

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

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

原因是 a) 某些翻译可能需要以不同的顺序放置参数,并且 b) 它为翻译者提供了一些可以使用的上下文。例如,单独的“on”在不同的句子中甚至在你的代码中的不同用途中的翻译可能完全不同,因此让翻译者只翻译那个词将不可避免地导致糟糕的、难以理解的、破碎的翻译。

GNU gettext 手册也有这方面的一章

于 2013-06-05T06:33:33.663 回答
0

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

于 2013-06-04T11:21:15.000 回答