2013-06-04 65 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

如果你讓他們翻譯,而不是所有的翻譯都會重複他們。這意味着所有這些空格,冒號等都將被重複用於每種語言。做什麼的? 我只是翻譯字符串的含義部分(第二個變體)。