2011-09-12 75 views
4

想象一下用於翻譯的字符串:gettext如何處理a/an或d'/ de?

「您的路徑被%s阻止」。

如果變量是「anaconda」會怎麼樣?現在應該是「你的路徑被%s阻止」。

gettext如何應對這種情況,或者客戶端程序員應該如何應對這種情況,或者其他系統如何應對這種情況?

想象一下這個字符串:

「%s的頁面」。

我們想通過「Brian」或「Jim」或「Lucinda」。一切都很好。

但在法語翻譯這是:

「Page de%s」。

對Jean-Paul或Claudette來說,這很好,但可憐的Anais呢?她需要「Page de Anais」,而不是「Page de Anais」。

gettext應付這個嗎?標準做法是什麼?

+0

你有沒有試過這些情況? –

+2

「%s的頁面」。也不會總是以英文工作。如果名字以困難的方式結束,那麼通常只需添加一個撇號。例如Joneses' – dsas

+0

我認爲gettext不能解決這個問題是公平的。 – tripleee

回答

3

正如您所料,gettext不會幫助您構建語法正確的字符串。即使在英語中沒有問題,以編程方式構建顯示文本也是一種很大的本地化禁忌,因爲語言特定的問題可能會出現。如果它是可管理的,你應該爲每個案例分別設置單獨的字符串,例如「你的路徑被恐龍阻擋」,「你的路徑被兔子阻擋」,「你的路徑被anaconda阻擋」等等。但翻譯系統通過使用翻譯記憶庫來幫助自動化過程,甚至在更復雜的情況下自動翻譯(如果需要,翻譯人員只需要校對和修改)。

你的「Page d'Anais」/「Page de Claudette」就是一個很好的例子。在這種情況下唯一的解決方案是將格式字符串存儲在可本地化的字符串表中(並且聽起來好像您已經這樣做了),以便本地化人員可以提出可行的解決方案。 (例如「Page de:Anais」儘管在每種情況下都不是很漂亮,所以他們會將「%s的頁面」本地化爲「頁面:%s」)。但是本地化人員需要了解這個格式字符串將在哪裏以及它的構建方式,因此您需要明確這一點。

其中一個最廣泛錯誤的字符串是「%n%n」(用於打印頁面,如頁面「1」中的4),其中沒有上下文經常翻譯完全錯誤。例如。在法語中,直譯是「1到4」,在這種情況下沒有意義,它應該是「1比4」。