2011-02-27 52 views
13

我正在國際化我的應用程序,並正在尋找解決方案來處理複數形式。我跑過了Mozilla's PluralForm這個項目,這個項目基本上將國際化的複數問題抽象出來。以下是它的工作方式:Objective-C的國際多元化庫?

  1. 有許多語言可以遵循的「複數規則」。每種語言都符合許多複數規則中的一種(Mozilla的文檔有15個潛在的複數規則)。例如,在規則0(如中文)的語言中,沒有複數形式,因此只有一個需要的單詞形式。在規則1的語言(如德語)中,每個詞有兩種不同的複數形式。依此類推,取決於規則如何匹配。

  2. 當你正在編寫一個國際化的字符串,你不僅傳遞你想變複數名詞要國際化的字符串,但數量:

    print("You have " + num + " " + PluralForm.get(num, downloads) + ".");

    在Objective-C,一個會做它,而不同:

    NSString *str = [NSString stringWithFormat:NSLocalizedStringFromTable(@"%d Items"), myNumber];

    當然,這上面的Objective-C示例不解決複數形式的問題。

  3. 當PluralForm.get函數獲取調用時,根據當前使用的語言,它應用複數形式,並根據應該遵循哪個特定的子規則從字符串文件中提取適當的國際化字符串。

PluralForm的優點很明顯(至少對我而言)。它從編碼器中抽象出實際的語言規則,以便它們不需要在需要處理複數形式的所有位置複製。

我想使用像編程我的iPhone應用程序時的系統。是否有項目或代碼可用,將Mozilla的PluralForm移植到Objective-C?

+0

我編輯了一個小問題,使其更一般。希望你不介意。 – 2012-01-16 16:09:58

回答

0

從查看Mozilla的implementation of PluralForm.jsm中可以很容易地在Objective-C中實現PluralForm.get自己的版本。

首先您從您的本地化中檢索複數規則號碼,並使用它來選擇適當的獲取方,實現該規則。有16 (1)表達式返回適當的複數形式的索引用於給定的數字。幸運的是,他們出現在JavaScript的子集寫入,這也是有效的C代碼...布爾和三元表達式與混合一些模運算。

複數形式由您翻譯的分號分隔列表中的本地化字符串中提供對於給定的單詞。表格的順序在list of plural rules中描述。你用分號分隔它們,並使用getter中的索引選擇匹配表單。

從技術上講,沒問題。唯一的問題是,我不知道如何正確派生你的代碼並尊重MPL license

(1)實施包含了布雷頓17日的規則,但它的形式還沒有記載,所以...

2

Smartling(翻譯管理平臺)發佈了open source library於iOS的管理複數。在處理了衆多擁有iOS複數問題的客戶,並且找不到能夠解決我們和客戶需要的解決方案之後,我們決定建立自己的解決方案。

該庫爲複數字符串提供密鑰,並根據CLDR複數規則將它們擴展爲包含複數形式。該庫爲稱爲SLPluralizedString的NSLocalizedString提供了替代函數來執行查找。

的英文源文件看起來像:

"%d Items Processed##{one}" = "1 Item Processed";  
"%d Items Processed##{other}" = "%d Items Processed"; 

而且你會使用SLPluralizedString功能來查找字符串:

SLPluralizedString(@」%d Items Processed」, numItems, @」Number of items processed」); 

一個翻譯俄文文件將有鑰匙的適當數量/語言值:

"%d Items Processed##{one}" = "%d элемент обработан"; 
"%d Items Processed##{few}" = "%d элемента обработано"; 
"%d Items Processed##{many}" = "%d элементов обработано"; 
"%d Items Processed##{other}" = "%d элемента обработано"; 

實際的代碼不會需要根據語言進行更改。一個函數可以在所有語言中工作並返回適當的翻譯字符串。

隨時分享評論,改進等

+0

這看起來與Apple的stringsdict文件類似。請參閱[國際化和本地化指南](https://developer.apple.com/library/ios/documentation/MacOSX/Conceptual/BPInternational/LocalizingYourApp/LocalizingYourApp.html)中的'處理名詞複數和計量單位'部分。 – user2067021 2016-02-12 01:03:40