我想翻譯以下格式的字符串:如何使用gettext處理未定義長度的列表?
刪除文件toto,tata和titi。
第一個想法是使用Delete files %s
,但後來我想到了複數形式。
如果某種語言最後沒有放置'and',但是例如最後一個項目和前一個項目有兩個不同的單詞會怎麼樣?
因此,這裏有兩個問題:
- 你知道像這樣的語言嗎?
- 你知道更好的方法來處理這種情況嗎?
我想翻譯以下格式的字符串:如何使用gettext處理未定義長度的列表?
刪除文件toto,tata和titi。
第一個想法是使用Delete files %s
,但後來我想到了複數形式。
如果某種語言最後沒有放置'and',但是例如最後一個項目和前一個項目有兩個不同的單詞會怎麼樣?
因此,這裏有兩個問題:
這更復雜。
事實上,你似乎只需要在單數和複數形式之間進行選擇(儘管語言可能有多個複數形式)。因此基本上Do you want to delete this file: %s?
或Do you want to delete these files: %s?
。我不能說所有的語言,但這在波蘭語中可以。
但是,如果你想放的數量(這是相當不錯的主意),你最終會與多個複數形式: Do you want to delete this file: %s
(Czy chcesz usunąć ten plik: {0}?
翻譯時)或Do you want to translate these %n files: %s
翻譯爲Czy chcesz usunąć te %n pliki: %s?
或Czy chcesz usunąć tych %n plików: %s?
。
至於列表,CLDR charts可能是一個很好的信息來源,關於如何處理它們 - 尋找listPattern。下面我從波蘭圖表呈現片段:
{0}和{1}是佔位符,您提供的名單看起來像:toto; tata i titi
。我仍然不完全確定它應該是什麼樣子(在波蘭我更傾向於toto, tata i titi
),但理論上你可以使用這些信息來創建一個列表。
在另一個答案中,我聲稱在一般情況下(不管語言如何)創建這樣的列表實際上是不可能的,人們傾向於使用列表視圖控件進行選擇或將數據作爲垂直列表來避免問題。你的榜樣將需要被修改爲:
These file(s) would be deleted:
toto
tata
titi
Are you sure?
這可能是有問題的(它可能不適合在屏幕上),但是這就是人們經常做,以避免與外語列出的問題。
感謝您的完整答案。 CLDR對我的問題的第一點是一個很好的答案。 列表視圖被用來代替列表的事實對我的第二點來說是一個很好的答案。 – needle
您可能想要提取CLDR數據(XML),而不是僅使用圖表。如果您使用C或Java語言,ICU可以訪問此CLDR數據,並且很快將擁有使用此數據的列表格式化程序。 –
甚至可以有幾種複數形式:http://code.google.com/webtoolkit/doc/latest/DevGuideI18nPluralForms.html – nos
謝謝,我知道可以有幾個複數形式,這讓我覺得有可能成爲不同的列表格式。無論如何感謝您的鏈接,我現在知道gwt本地支持列表。但他們不會談論可能與英語不同的語言。 – needle