2011-05-27 68 views
2

我想支持複數形式在我的Flex程序正確地翻譯喜歡的是能夠with QtGWTgettext複數形式

是否有一個(開源)庫來處理這個Flex?

+0

查看您提供的鏈接;這聽起來像只是一個封裝的條件。我不知道有任何現有的庫可以幫助解決這個問題。但我敢打賭,你可以在一個小時或更短的時間內寫下類似內容,並將其作爲項目在riaforge.com上發佈。 – JeffryHouser 2011-05-27 14:36:32

回答

0

使用gettext格式是個好主意。你有兩種選擇:

4

你不需要任何額外的庫。使用標準的Flex ResourceManager。在文本資源定義這樣的複數形式:

minute=minute, minutes 

在這種情況下,當你以後的此類資源要求的

resourceManager.getStringArray('BundleName', 'minute') 

你得到多元價值觀的像

[ 'minute', 'minutes' ] 
數組

然後使用類似於

function getPlural(value:Number, plurals:Array):String 
{ 
    if (ResourceManager.getInstance().localeChain[0] == 'en_US') 
     if (value == 1) return plurals[0] else return plurals[1]; 
} 

爲當前語言環境選擇正確的文本。你可以在一些包中直接定義這個函數,這對所有類都是通用的。不幸的是,你不能避免這樣的功能,因爲許多語言的複數規則是不同的。例如,對於俄語來說,表達將會複雜得多,並將採取三個複數形式。
順便說一下,這種方法與gettext的工作方式非常相似。

+0

非常有趣。如果你在實際文本中需要它們,你如何轉義逗號? – 2012-10-05 07:58:56

+0

@WimDeblauwe不幸的是,這是不可能的。如果您查看getStringArray()方法源代碼,您將看到簡單的'var array:Array = String(value).split(「,」)'用法。我看到的唯一方法是以某種方式在ResourceManagerImpl中重寫此方法,但我從來沒有見過這樣的用例。 – koldoon 2012-10-09 06:09:30