2013-04-17 100 views
0

我有目前支持英語,現在我的任務就是把它翻譯成不同的語言Flex應用程序,需要針對款式不同參數的支持,例如,一些按鈕需要更寬一些字體尺寸需要改變。剝皮不同語言

起初我tryed在運行時添加一個CSS文件,這是忽略了(我猜是因爲連接到該組件的皮膚文件)

我的問題是什麼是支持MULTY語言的recomended方式/風格的Flex應用程序(CSS或皮膚),以及它如何完成皮膚?

謝謝!

+0

http://www.w3.org/International/questions/qa-css-lang – cimmanon

+0

@cimmanon我嚴重懷疑Flex是否支持CSS方言。 – RIAstar

+2

我想你應該可以像's | Button.en_US {skinClass:ClassReference(「skins.en_US.ButtonSkin」)}'那樣使用選定的語言環境作爲任何需要此Button的Button的styleName(' ')。 – RIAstar

回答

0

一個辦法

支持MULTY語言/風格的Flex應用程序

手動是 - 有每種語言一個Flex應用程序的項目,每個包含適當的樣式和資源文件。您可以將通用代碼移動到每個應用程序都依賴於的庫項目中,但這不會通過> 3種語言進行擴展。

更好,但更復雜的,是隻有一個應用程序,加載在運行時的語言資源包,以及特定語言的CSS文件。

首先你的應用程序需要「知道」它顯示的語言。也許你認證用戶,從服務器學習他們的語言環境,然後你爲該語言環境加載ResourceBundle。

其次加載設置特定CSS,以適應負載的語言。我建議你將你的樣式表分成「main」(編譯成Application,所有樣式不改變)和「locale」(只包含基於語言改變的樣式)。

儘可能早在應用程序啓動過程中,加載你的語言的.css文件(例如,從服務器URL),像

var cssLoader:URLLoader = new URLLoader(); 
var req:URLRequest = new URLRequest("path_to_server_side_css_file"); 
cssLoader.addEventListener(Event.COMPLETE, cssLoadCompleteHandler); 
cssLoader.addEventListener(IOErrorEvent.IO_ERROR, someErrorHandler); 
cssLoader.load(req); 
在cssLoadCompleteHandler

()的奇蹟發生。 你想要去除任何可能影響你解析的東西,比如註釋,空行,或者命名空間。然後遍歷文件中提取每個款式,選擇等,基本上你是串黑客在這裏,這是從來沒有最好玩的寫代碼:/這是代碼的非平凡塊,你會希望有最乾淨,最有紀律CSS文件,你可以讓它工作。它不像嘗試解析HTML的複雜性,除非希望你可以控制CSS輸入的質量。 (你會想一些這方面的測試,相信我)

反正...一旦你擁有了各自的風格例如.foo {}或#bar {}等,然後分別撥打

FlexGlobals.topLevelApplication.styleManager.setStyleDeclaration(...) ; 

。最後調用

FlexGlobals.topLevelApplication.styleManager.styleDeclarationsChanged(); 

現在你可以使用的樣式(通過styleManager.getStyleDeclaration(""))在你的皮膚類來獲得你所需要的風格,無論是從風格中的烘烤或動態加載的樣式。

希望有所幫助。它可以完成,但實現起來並不是微不足道的。祝你好運。