這個問題有更強大的解決方案。看看在Tr8n庫從TranslationExchange.com
https://github.com/tr8n/tr8n_objc_clientsdk
庫使用TranslationExchange的TML(翻譯標記語言),這使得國際化進程中非常容易。首先,您甚至不需要再次處理字符串XML文件,真的...... - Tr8n SDK將爲您即時創建和管理您的String文件 - 您將永遠不會再看到它們。
你的具體的例子,簡直是:
Tr8nLocalizedStringWithTokens(@"{count || object}", @{@"count": objectList.count})
Tr8n庫會自動選擇合適的複數形式爲您在任何語言。哈?是的,這是神奇的。上述令牌例子的完整形式其實是:
{count:number || one: object, other: objects}
這意味着,「計數」令牌是映射到使用關鍵字「一」和「其他」英文複數數字類型的....但Tr8n很聰明,不會讓你輸入所有這些。將參數序列映射到適當的規則值也足夠聰明。當然,它知道「count」通過命名約定與數字規則相關聯。因此,簡單地變爲:
{count || object}
順便說一句,因爲你已經提到俄羅斯,俄語翻譯爲上述只會是:
"{count || object}" = "{count || объект, объекта, объектов}"
這個例子太簡單了,讓我們來看看一個更有趣的一個:
Tr8nLocalizedStringWithTokens(
@"{user} uploaded {count || photo} to {user | his, her} photo album.",
@{@"user": user, @"count": 5}
)
首先,運氣好的話翻譯使用標準iOS國際化庫(或任何其他庫的這個問題)這句話......這是一個笑話 - 但實際上,有沒有辦法使用任何東西,但Tr8n。
上述TML的翻譯成俄文,簡直是:
@"{user || загрузил, загрузила} {count || фотографию, фотографии, фотографий} в свой фотоальбом."
在這裏,我們處理性別統治我們處理數字的規則一樣。但是,不是「一個」,「少數」,「其他」,我們有「男性」,「女性」,「未知」 - 每種語言可能有不同的性別和數字規則。 Tr8n會處理它,所以你不必這樣做。
好吧,讓我們把它帶到下一個級別。你已經決定你必須有照片的數量要大膽。小菜一碟。
Tr8nLocalizedAttributedStringWithTokens(
@"{user} uploaded [bold: {count || photo}] to {user | his, her} photo album.",
@{
@"user": user,
@"count": 5,
@"bold": @{@"font":@{@"name": @"system", @"size": @12, @"type": @"bold"}}
}
)
[bold:...]是一個裝飾標記。你有沒有注意到我們將宏切換到了AttributedString版本?這個宏實際上會使用iOS的原生裝飾機制產生一個NSAttributedString。你能猜出俄文的翻譯是什麼嗎?
@"{user || загрузил, загрузила} [bold: {count || фотографию, фотографии, фотографий}] в свой фотоальбом."
順便說一句,你可以在其他地方預先定義自己的所有裝飾記號,這樣你就不必保持每次都定義它們。
讓我們做只是多了一個最後的例子......再說了,你有以下形式的新聞源故事:
Tr8nLocalizedAttributedStringWithTokens(
@"{actor} sent {target} [bold: {count || gift}].",
@{
@"actor": user1,
@"target": user2,
@"count": 5
}
)
它不會在英文看起來有趣。但它以俄語或任何其他語言支持語言案例。 {target}的名稱,如果它恰好是俄文,實際上需要使用俄語Dative Language Case。
http://en.wikipedia.org/wiki/Dative_case
如果你不會說俄語,你也許並不需要了解它。但你的俄語翻譯應該。讓我們來看看俄羅斯翻譯,那麼:
@"{actor || подарил, подарила} {target::dat} [bold: {count || подарок, подарка, подарков}].",
Tr8n是足夠聰明,利用其強大的語言規則引擎,並與格語言的情況下適用於通過使用{target}令牌傳遞的俄文名字......
那對於一個簡單的數字問題來說有點長。感謝您閱讀這一點。希望能幫助到你。
聲明:我是Tr8n框架和TML語言的創建者。如果您有任何問題,請平郵我,我很樂意幫助您解決所有翻譯問題。
這不是俄羅斯特有的問題 - 有針對你需要的不僅僅是一個複數更多其他語言。 – 2009-10-27 17:34:04
請參閱http://www.gnu.org/software/hello/manual/gettext/Plural-forms.html以獲得關於該問題的更詳細解釋(以及相當長的具有不規則性的語言列表)。 – 2009-10-27 17:38:54
謝謝帕維爾,我已經編輯了相應的問題 – zvolkov 2009-10-27 18:46:23