注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

Flex 技术博客

醉里挑灯看剑,梦回吹角连营

 
 
 

日志

 
 

Flex 的国际化(Internationalization)  

2007-09-22 15:15:27|  分类: Flex 应用 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

在最近的项目中用到了Flex的国际化,参考了一些资料,写了个适合自己系统的资源类,也写个总结吧。其实做过Java国际化的朋友一看就会发现其实Flex也是差不多的,很容易理解。
假设我们这里只提供en和zh两个语言版本的。
首先在flex/locale/下添加两个文件en.properties和zh.properties,这里要确认flex/locale文件夹包括在你的工程source path中.

 

源码下载

properties文件例子
    en.properties
      flex_label1=Hello World!   
      flex_label2=Welcome!  
      flex_message= {0} alphabetically comes before {1}.

  zh.properties
      flex_label1=\欢\迎\大\家
      flex_label2=\各\位\好\啊
      flex_message={0}\赶\在{1}\之\前\到\的.

采用的是#key = value 的格式,properties文件必须用UTF-8编码格式。

资源国际化类代码如下:
// ActionScript file

package cwmlabs.utils
{
 import flash.events.Event;
 import flash.events.EventDispatcher; 
 import mx.resources.ResourceBundle;
 import mx.utils.StringUtil;   

     public class ResourceUtil extends EventDispatcher{
     private static var _instance : cwmlabs.utils.ResourceUtil;
     private var _language : String;

    [ResourceBundle("en")]   
    private var lang_en:ResourceBundle;    
          
    [ResourceBundle("zh")]    
    private var lang_zh:ResourceBundle;       

    [Bindable]
    private var localResources:ResourceBundle;
         
     public static function getInstance() : cwmlabs.utils.ResourceUtil {   
      if (_instance == null) {   
                _instance = new cwmlabs.utils.ResourceUtil();   
   }
         return _instance;   
  }

     [Bindable(event="languageChange")]   
     public function getString(key:String):String {   
             return localResources.getString(key);   
    }

    /**
      * get the substitute properties by key and other parameter
      */
     [Bindable(event="languageChange")]   
     public function getSubstitute(key : String, ... rest):String
    {
         return StringUtil.substitute(localResources.getString(key),rest);
    }
    public function ResourceUtil(){
          this.language = "en";
   }
   public function set language(language : String):void {   
            this._language = language;   
              
            if (_language == "en") {   
                this.localResources = lang_en;   
            } else if (_language == "zh") {   
                this.localResources = lang_zh;   
            } else {   
                this.localResources = lang_en;   
            }   
            dispatchEvent(new Event("languageChange"));   
  }  
    }
}

使用:
<?xml version="1.0" encoding="utf-8"?>  
<mx:Application xmlns:mx="
http://www.adobe.com/2006/mxml" layout="absolute">  
  
    <mx:Script>  
        <![CDATA[   
            import cwmlabs.utils.ResourceUtil;
              
            [Bindable]  
            private var ru : ResourceUtil = ResourceUtil.getInstance();                        
           
            private function changeLanguage(language:String):void {  
                ru.language = language;  
            }  
        ]]>
    </mx:Script>  
    <mx:Label id="label1" x="10" y="10" text="{ru.getString('flex_label1')}" />  
    <mx:Label id="label2" x="10" y="38" text="{ru.getString('flex_label2')}"/>  
    <mx:Label id="label3" x="10" y="58" text="{ru.getSubstitute('flex_message','Anant', 'Nick')}" />  

    <mx:Button x="10" y="88" label="Chinese" click="changeLanguage('zh')"/>  
    <mx:Button x="88" y="88" label="English" click="changeLanguage('en')"/>  
       
</mx:Application>

补充:
如何将properties转换成unicode编码,可以利用Eclipse的PropertiesEditor插件编辑。
Help->Software Updates->Find and Install...->Search for new features to install 点击next.
点击"New Remote Site...",输入name:Arbitrary input, URL: http://propedit.sourceforge.jp/eclipse/updates/
安装完毕重启,右键打开zh.properties,选择open with->PropertiesEditor。

参考:
Flex 2 Developer's Guide -> Localizing Flex Applications
http://wangcheng.javaeye.com/blog/118092

  评论这张
 
阅读(443)| 评论(0)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017