我有目前支持英語,現在我的任務就是把它翻譯成不同的語言Flex應用程序,需要針對款式不同參數的支持,例如,一些按鈕需要更寬一些字體尺寸需要改變。剝皮不同語言
起初我tryed在運行時添加一個CSS文件,這是忽略了(我猜是因爲連接到該組件的皮膚文件)
我的問題是什麼是支持MULTY語言的recomended方式/風格的Flex應用程序(CSS或皮膚),以及它如何完成皮膚?
謝謝!
我有目前支持英語,現在我的任務就是把它翻譯成不同的語言Flex應用程序,需要針對款式不同參數的支持,例如,一些按鈕需要更寬一些字體尺寸需要改變。剝皮不同語言
起初我tryed在運行時添加一個CSS文件,這是忽略了(我猜是因爲連接到該組件的皮膚文件)
我的問題是什麼是支持MULTY語言的recomended方式/風格的Flex應用程序(CSS或皮膚),以及它如何完成皮膚?
謝謝!
一個辦法
支持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("")
)在你的皮膚類來獲得你所需要的風格,無論是從風格中的烘烤或動態加載的樣式。
希望有所幫助。它可以完成,但實現起來並不是微不足道的。祝你好運。
http://www.w3.org/International/questions/qa-css-lang – cimmanon
@cimmanon我嚴重懷疑Flex是否支持CSS方言。 – RIAstar
我想你應該可以像's | Button.en_US {skinClass:ClassReference(「skins.en_US.ButtonSkin」)}'那樣使用選定的語言環境作爲任何需要此Button的Button的styleName('
')。 – RIAstar