国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 網(wǎng)站 > WEB開(kāi)發(fā) > 正文

26.4.使用本地化資源模塊

2024-04-27 13:52:38
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友
26.4.1. 問(wèn)題
我的應(yīng)用程序需要支持多種區(qū)域設(shè)置。
26.4.2. 解決辦法
在運(yùn)行時(shí)根據(jù)需要使用資源模塊載入特定本地化資源。
26.4.3. 討論
根據(jù)程序需要支持的語(yǔ)言,將每個(gè)本地化資源包都編譯進(jìn)應(yīng)用程序?qū)⑹沟肧WF文件大小倍增,而絕大多數(shù)用戶(hù)其實(shí)只需要一種區(qū)域語(yǔ)言,這將浪費(fèi)大量的時(shí)間用在SWF文件的下載上。還好Flex 3添加一種功能可以編譯資源包,這被稱(chēng)作資源模塊,它可以在運(yùn)行時(shí)動(dòng)態(tài)加載到應(yīng)用程序中。你可以先檢測(cè)用戶(hù)的區(qū)域設(shè)置,然后載入相應(yīng)的資源模塊。

要想根據(jù)本地化屬性文件構(gòu)建資源模塊,首先要檢測(cè)應(yīng)用程序需要什么資源,這不僅包括你定義的資源,而且也包括Flex框架所需的資源。你可以使用mxmlc編譯器分析應(yīng)用程序,輸出所需資源列表。這可以修改Flex Builder 3的項(xiàng)目屬性對(duì)話(huà)框中的額外編譯器參數(shù)達(dá)到目的。不過(guò)命令行模式下也照樣可做到,而且更方便快捷。當(dāng)調(diào)用編譯器時(shí),沒(méi)有指定區(qū)域,一個(gè)編譯器分析結(jié)果輸出的保存文件和MXML文件名稱(chēng):
mxmlc -locale= -resource-bundle-list=resources.txt ResourceModules.mxml

當(dāng)命令完成后,resources.txt的內(nèi)容類(lèi)似這樣:
bundles = containers controls core effects localizedContent skins styles

這個(gè)輸出內(nèi)容告訴編譯器哪些資源包將被構(gòu)建到資源模塊中。如果使用資源模塊編譯應(yīng)用程序,必須使用命令行編譯。指定source path為本地化屬性文件,資源包列表和上面一樣。例如為26.4的ResourceModules.mxml 例子編譯:
mxmlc -locale=en_US -source-path=.,locale/{locale}
-include-resource-bundles=containers,controls,core,effects,localizedContent,skins,styles
-output en_US_resources.swf


編譯為法語(yǔ)模塊:
mxmlc -locale=fr_FR -source-path=.,locale/{locale}
-include-resource-bundles=containers,controls,core,effects,localizedContent,skins,styles
-output fr_FR_resources.swf


這個(gè)命令有幾項(xiàng)內(nèi)容。起先,使用-locale參數(shù)定義區(qū)域,其二,source path參數(shù)可能已經(jīng)很熟悉了,這個(gè)例子中包括當(dāng)前目錄(.) 。這個(gè)例子中l(wèi)ocalizedContent屬性文件包含一個(gè)嵌入類(lèi)引用,如果source path中沒(méi)有應(yīng)用程序根目錄,編譯器可能就找不到類(lèi)引用。注意假定你在工程源文件目錄下調(diào)用了mxmlc,接著include-resource-bundles 參數(shù)設(shè)置為之前例子生成的列表內(nèi)容,這個(gè)列表有逗號(hào)分割符和未含空格的包名組成。最后,這個(gè)例子告訴編譯器輸出文件名稱(chēng)為en_US_resources.swf。你可以命名為其他的。但最好是根據(jù)區(qū)域標(biāo)識(shí)取名稱(chēng),這樣你就可以根據(jù)文件名編程實(shí)現(xiàn)載入合適的資源模塊了。

當(dāng)你使用mxmlc編譯資源模塊后,嵌入資源如圖片的引用路徑將是相對(duì)于本地化屬性文件的位置。也就是說(shuō),如果應(yīng)用程序使用編譯的資源包資源路徑是相對(duì)于工程源文件目錄的。

程序代碼中,使用資源管理器的loadResourceModule方法載入資源模塊。給此方法傳遞一個(gè)標(biāo)識(shí)你要使用的資源模塊URL,這個(gè)方法和其他ActionScript載入方法機(jī)理類(lèi)似,比如SWFLoader或傳統(tǒng)模塊。一個(gè)需要SWF文件的請(qǐng)求發(fā)送到服務(wù)器,然后SWF被瀏覽器下載。

如果所需資源模塊來(lái)自其他域這需要cross-domain策略文件。你必須等資源模塊下載完成后才可使用,當(dāng)子模塊可以使用時(shí),ResourceEvent事件會(huì)被觸發(fā)。你可以監(jiān)聽(tīng)這些事件如ResourceEvent.COMPLETE。

loadResourceModule方法返回一個(gè)實(shí)現(xiàn)IEventDispatcher接口的對(duì)象引用。下面摘錄自ResourceModules.mxml例子代碼演示如何載入和使用資源模塊:
+展開(kāi)
-ActionScript
import mx.events.ResourceEvent;
import mx.resources.ResourceManager;
private var selectedLocale:String;
private function setAppLocale(locale:String):void
{
this.selectedLocale = locale;
if (resourceManager.getLocales().indexOf(locale) == -1)
{
var dispatcher:IEventDispatcher = resourceManager.loadResourceModule(locale + "_resources.swf");
dispatcher.addEventListener(ResourceEvent.COMPLETE, onResourceLoaded);
}
else
{
onResourceLoaded(null);
}
}
private function onResourceLoaded(e:ResourceEvent):void
{
resourceManager.localeChain = [this.selectedLocale];
views.selectedIndex = 1;
contentBackground.setStyle("borderSkin",
resourceManager.getClass('localizedContent''borderSkin'));
contentBackground.invalidateDisplayList();
contentBackground.validateNow();
}

在這個(gè)例子中,用戶(hù)可在美國(guó)英語(yǔ)和法語(yǔ)中做出選擇。當(dāng)用戶(hù)選擇一個(gè)語(yǔ)言后,setAppLocale方法被調(diào)用,載入所需資源模塊。這個(gè)方法首先通過(guò)資源管理器的getLocales方法輸出結(jié)果檢測(cè)所需資源是否已經(jīng)被載入。這樣做很有好處,如果資源沒(méi)有被載入過(guò),再調(diào)用loadResourceModule方法載入資源模塊,并且監(jiān)聽(tīng)complete事件以便可以知道資源模塊是否已經(jīng)準(zhǔn)備好。

在complete事件的響應(yīng)中,應(yīng)用程序設(shè)置localeChain屬性為最近使用的資源模塊。接著調(diào)用了contentBackgroud對(duì)象的三個(gè)方法。使用資源模塊更新樣式。

loadResourceModule方法還可接收一些可選的參數(shù)。如果程序需要載入多個(gè)資源模塊,將會(huì)載入所以模塊,但最后個(gè)update參數(shù)需設(shè)置為false。這樣就不會(huì)多次重復(fù)調(diào)用資源管理器的update而節(jié)省開(kāi)銷(xiāo)。
發(fā)表評(píng)論 共有條評(píng)論
用戶(hù)名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 石阡县| 汪清县| 德州市| 石棉县| 余干县| 尼玛县| 云南省| 鄄城县| 高安市| 沙河市| 呈贡县| 堆龙德庆县| 西充县| 施甸县| 赤壁市| 内黄县| 许昌市| 太康县| 庆云县| 溧水县| 正宁县| 托克逊县| 桐柏县| 临沭县| 略阳县| 新密市| 南充市| 腾冲县| 吕梁市| 东山县| 炉霍县| 康乐县| 洞口县| 富阳市| 安图县| 自贡市| 成都市| 宜宾市| 名山县| 清新县| 成都市|