我正在國際化我的應用程序,並正在尋找解決方案來處理複數形式。我跑過了Mozilla's PluralForm這個項目,這個項目基本上將國際化的複數問題抽象出來。以下是它的工作方式:Objective-C的國際多元化庫?
有許多語言可以遵循的「複數規則」。每種語言都符合許多複數規則中的一種(Mozilla的文檔有15個潛在的複數規則)。例如,在規則0(如中文)的語言中,沒有複數形式,因此只有一個需要的單詞形式。在規則1的語言(如德語)中,每個詞有兩種不同的複數形式。依此類推,取決於規則如何匹配。
當你正在編寫一個國際化的字符串,你不僅傳遞你想變複數名詞要國際化的字符串,但數量:
print("You have " + num + " " + PluralForm.get(num, downloads) + ".");
在Objective-C,一個會做它,而不同:
NSString *str = [NSString stringWithFormat:NSLocalizedStringFromTable(@"%d Items"), myNumber];
當然,這上面的Objective-C示例不解決複數形式的問題。
當PluralForm.get函數獲取調用時,根據當前使用的語言,它應用複數形式,並根據應該遵循哪個特定的子規則從字符串文件中提取適當的國際化字符串。
PluralForm的優點很明顯(至少對我而言)。它從編碼器中抽象出實際的語言規則,以便它們不需要在需要處理複數形式的所有位置複製。
我想使用像編程我的iPhone應用程序時的系統。是否有項目或代碼可用,將Mozilla的PluralForm移植到Objective-C?
我編輯了一個小問題,使其更一般。希望你不介意。 – 2012-01-16 16:09:58