Flex分享: ResouceManager應用於本地化與國際化開發

 

今年開發了多個涉及國際化應用與本地化應用的體驗網。
也總結了ResourceManager的應用方法,總結歸納出來,分享給大家。

 

需求:網站多語解決方案

  • 國際化應用:多語版本(英日韓……)en_US ja_JP ko_KR
  • 本地化應用:簡繁體(大陸,臺灣,香港)zh_CN zh_HK zh_TW

多語解決方案應用準備:

1.製作語言包 

多語應用方案,Flex系統自帶支持英文(en_US)及日文(ja_JP),如果你需要其他語種的國際化或本地化支持,在Flex Builder的安裝目錄下,選定你所使用的SDK,在其bin目錄下找到copyLocale命令。

以win+R,鍵入cmd進入DOS命令窗口,在你的copyLocale文件目錄徑下,鍵入 copyLocale en_US zh_CN即可生成簡體中文支持語言包
示例路徑:D:/Program Files/Adobe/Flex Builder 3/sdks/3.0.0/bin>copyLocale en_US zh_CN 
2. 添加BuildPath & Flex Compiler

3.配置文件:
3.1 位置 與src目錄同級

3.2  locale資源文件及其路徑

3.3 資源文件寫法

(由key-value構成)可以包括以下4類:
1.1 字符數據類 swf , jpg , png etc
1.2 Embed() 嵌入式類型
1.3 Embed特例,如xml文件
1.4 嵌入整個類
4.如何使用

4.1 在mxml文件中,添加元數據標籤:
<mx:Metadata>
[ResourceBundle('資源文件名')]
</mx:Metadata>

4.2 示意用法:
     ResourceManager.getString / getClass / getInteger / getObject
5.供參考代碼
<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="vertical" creationComplete="init()">
<mx:Style>
Application{
fontSize:12pt;
}
ToolTip{
fontSize:12pt;
}
</mx:Style>

<mx:Metadata>
[ResourceBundle('mylocale')] 
</mx:Metadata>

<mx:Script>
<![CDATA[
private var lang:Array = ['zh_CN','en_US','ja_JP','ko_KR','zh_HK'];
private function init():void{
selectLang('zh_CN');
}
private function selectLang(type:String):void{
resourceManager.localeChain = [type];
imgLang.source = resourceManager.getObject('mylocale','flag');
}
]]>
</mx:Script>

<mx:Panel id="myPanel" title="{resourceManager.getString('mylocale','userlogin')}">
<mx:Form>
<mx:FormItem id="localNameItem" label="{resourceManager.getString('mylocale','loginname')}">
<mx:TextInput id="tiNam" />
</mx:FormItem>
<mx:FormItem>
<mx:Button id="btnLogin" label="{resourceManager.getString('mylocale','login')}" />
</mx:FormItem>
</mx:Form>
<mx:HBox>
<mx:Image id="imgLang" width="64" height="64" />
<mx:Label text="{resourceManager.getString('mylocale','langselection')}" />
<mx:Image source="assets/lang/zh.png" toolTip="{resourceManager.getString('mylocale','langchineseSimplifiled')}" 
 click="selectLang('zh_CN')" />
<mx:Image source="assets/lang/zh.png" toolTip="{resourceManager.getString('mylocale','langchineseTraditional')}" 
 click="selectLang('zh_HK')" />
<mx:Image source="assets/lang/en.png" toolTip="{resourceManager.getString('mylocale','langenglish')}"
 click="selectLang('en_US')" />
<mx:Image source="assets/lang/ja.png" toolTip="{resourceManager.getString('mylocale','langjapanese')}"
 click="selectLang('ja_JP')" />
<mx:Image source="assets/lang/kr.png" toolTip="{resourceManager.getString('mylocale','langkorea')}"
 click="selectLang('ko_KR')" />
</mx:HBox>
</mx:Panel>

</mx:Application>
效果示意:

6.其他情況測試類寫法
上文案例以圖片點擊來轉換語言,我還有一種更簡潔的方法,方便大家測試多語。 
提供方案:直接寫button,label即語言包名,如en_US,zh_CN,ja_JP,ko_KR,etc
Test_Demo:
private function onClick(event:MouseEvent):void{
    currentLocal =  event.currentTarget.label;
    resourceManager.localeChain = [currentLocal];
}

在測試頁面加以下的代碼:
ResourceManager.getInstance().addEventListener('change',onChange_locale);
因爲ResourceManager本身是單例,直接偵聽語言的變化,就可實現動態語言轉換。
總結:

ResourceManager嵌入方式
RsourceManager實施步驟
  • 添加多語標識至Compier,BuildPath中
  • 創建locale文件夾,撰寫bundle資源文件
  • 在mxml中動態獲取properties文件中所寫的屬性
哈哈,分享完畢,希望對大家在開發過程中遇到的問題能有所幫助。下一篇,我會分享FLEX學習路線圖:)

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章