`
wangcheng
  • 浏览: 1464887 次
  • 性别: Icon_minigender_1
  • 来自: 青岛人在北京
社区版块
存档分类
最新评论

Flex2 国际化(internationalization)

阅读更多

现在做的这个Flex项目需要进行国际化,这里总结一下

和java一样,Flex2也可以使用.properties文件实现国际化,使用flex的mx.resources.ResourceBundle类来读取properties文件。同样也可以在Flex Builder2中安装Properties Editor插件来写properties文件。

1.创建一个Flex项目
2.在这个项目中创建 locale 文件夹
3.在 locale 文件夹中添加2个properties文件,如下

en_US.properties

  1. label1=Hello World!   
  2. label2=Welcome!  

zh_CN.properties

  1. label1=\u5927\u5bb6\u597d\uff01   
  2. label2=\u6b22\u8fce\uff01  

4.将 locale 文件夹添加为flex项目的source path (两个方法)
a)右击项目 -> properties -> Flex Compiler -> 在additional compiler arguments中添加 -sp locale
b)右击项目 -> properties -> Flex Build Path -> Source path -> add Folder -> 选中locale文件夹即可

现在开始写代码了

  1. package util {   
  2.        
  3.     import flash.events.EventDispatcher;   
  4.     import flash.events.IEventDispatcher;   
  5.     import flash.events.Event;   
  6.     import mx.resources.ResourceBundle;   
  7.        
  8.     public class Localizator extends EventDispatcher {   
  9.            
  10.         //采用单例模式   
  11.         private static var _instance : Localizator;   
  12.            
  13.         private var _language : String;   
  14.            
  15.         //这里的resource名应与.properties文件名相同   
  16.         [ResourceBundle("en_US")]   
  17.         private var lang_en_US:ResourceBundle;   
  18.            
  19.         [ResourceBundle("zh_CN")]   
  20.         private var lang_zh_CN:ResourceBundle;   
  21.            
  22.         [Bindable]   
  23.         private var currRes:ResourceBundle;   
  24.            
  25.         public function Localizator(language : String = "en_US") {   
  26.             selectLanguage(language);   
  27.         }   
  28.            
  29.         public static function getInstance(language : String = "en_US"):Localizator {   
  30.             if (_instance == null) {   
  31.                 _instance = new Localizator(language);   
  32.             }   
  33.             return _instance;   
  34.         }   
  35.            
  36.         private function selectLanguage(language : String):void {   
  37.             this._language = language;   
  38.                
  39.             if (_language == "en_US") {   
  40.                 this.currRes = lang_en_US;   
  41.             } else if (_language == "zh_CN") {   
  42.                 this.currRes = lang_zh_CN;   
  43.             } else {   
  44.                 this.currRes = lang_en_US;   
  45.             }   
  46.         }   
  47.            
  48.         [Bindable(event="languageChange")]   
  49.         public function getText(key:String):String {   
  50.             return this.currRes.getString(key);   
  51.         }   
  52.            
  53.         public function get language():String {   
  54.             return this._language;   
  55.         }   
  56.            
  57.         public function set language(language : String):void {   
  58.             if (this._language != language) {   
  59.                 selectLanguage(language);   
  60.                 dispatchEvent(new Event("languageChange"));   
  61.             }   
  62.         }   
  63.     }   
  64. }  

主程序代码

  1. <?xml version="1.0" encoding="utf-8"?>  
  2. <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute">  
  3.   
  4.     <mx:Script>  
  5.         [CDATA[  
  6.             import util.Localizator;  
  7.               
  8.             [Bindable]  
  9.             private var localizator : Localizator = Localizator.getInstance();  
  10.               
  11.             private function changeLanguage(language:String):void {  
  12.                 localizator.language = language;  
  13.             }  
  14.               
  15.         ]]  
  16.     </mx:Script>  
  17.   
  18.     <mx:Label id="label1" x="10" y="10" text="{localizator.getText('label1')}" width="152" height="20" fontSize="12" fontWeight="bold"/>  
  19.     <mx:Label id="label2" x="10" y="38" text="{localizator.getText('label2')}" width="144" height="22" fontSize="12" fontWeight="bold"/>  
  20.        
  21.     <mx:Button x="10" y="68" label="Chinese" click="changeLanguage('zh_CN')"/>  
  22.     <mx:Button x="88" y="68" label="English" click="changeLanguage('en_US')"/>  
  23.        
  24.        
  25. </mx:Application>  

OK,编译运行就可以看到结果了。

另外有些问题需要说明
1.properties文件须使用UTF-8编码

2.(Flex supports static inclusion of localized resources, but not dynamic retrieval of resources at run time.) Flex2是将properties文件编译到swf文件中的,目前还不支持动态读取外部properties文件

3.如果保存或编译代码时,遇到Unable to resolve a class for ResourceBundle: en_US_properties问题,大可放心,这是Flex Builder2的bug,只需要在main menu(顶部菜单)中选 Project -> Clean... 就可以了。或者将上面的Localizator.as随便空一行再保存编译一下,这个error也会消失,呵呵。

参考
Flex 2 Developer's Guide -> Localizing Flex Applications

http://flexme.wordpress.com/2007/07/11/internationalization-in-flex/
http://www.deitte.com/archives/2006/10/using_resource.htm
http://www.zhuoqun.net/article.asp?id=267

  • flextest.rar (151.9 KB)
  • 描述: source code 和 swf
  • 下载次数: 303
分享到:
评论
1 楼 wangcheng 2007-08-30  
补充资料

Flex 3:Feature Introductions: Runtime Localization
http://labs.adobe.com/wiki/index.php/Flex_3:Feature_Introductions:_Runtime_Localization

Internationalizing Flex 2 Apps Pt 2
http://jeff.mxdj.com/internationalizing_flex_2_apps_pt_2.htm

相关推荐

    Flex国际化方法

    随着互联网的全球化发展,软件产品的用户群体不再局限于某一特定地区或国家,因此对于开发者来说,实现软件的国际化(Internationalization,简称i18n)变得越来越重要。Flex作为一款曾经广泛应用于Web前端开发的...

    Flex_API的架构图

    10. **Accessibility and Internationalization**: Flex API考虑了无障碍访问和国际化需求,提供了相应的API,使应用程序能适应不同的语言和辅助技术。 11. **Flex Builder/IDE Support**: Adobe Flex Builder(现...

    Flex实现的计算器

    为了满足不同用户的需求,Flex应用应考虑可访问性(accessibility)和国际化(internationalization)。例如,可以为视障用户设置键盘导航,为多语言环境提供字符串资源文件。 10. **版本控制和代码管理** 开发...

    Flex 测试项目,图片压缩、上传、图片裁剪,Module测试,国际化

    “国际化”(Internationalization,简称i18n)表示该项目支持多种语言,适应全球用户的需求。这通常涉及到资源文件的管理,如使用XML或.properties文件存储不同语言的文本,以及程序中动态加载和切换这些资源的能力。...

    完美的Flex多语言支持解决方案

    2. **配置项目**:在Flex项目中,需要设置国际化的支持。这可以通过修改`.actionScriptProperties`和`.flexProperties`文件来完成。在`.actionScriptProperties`中,启用`locale`属性,并指定默认语言。在`....

    ArcGIS_FlexView指南(中文)

    - **使用Flex的国际化特性:** Sample Flex Viewer支持多种语言环境,可以通过Flex内置的国际化支持来实现。 - **本地化设置:** 可以为不同地区设置不同的语言资源文件,实现本地化。 **5.4 日志和错误处理** ...

    Spring Webscripts Reference Documentation

    3. **Internationalization (i18n)**:内置的国际化支持使Web服务能够提供多语言内容。 4. **Caching**:缓存机制可以提高性能,减少不必要的计算和服务器负载。 5. **Security**:Spring Security可以集成到Web...

    Angular团队的组件开发套件CDK和MaterialDesign组件

    5. **国际化(Internationalization)**:支持多种语言,适应全球化的应用需求。 6. **无障碍功能(Accessibility)**:所有组件均遵循无障碍设计原则,确保所有用户都能无障碍地使用。 **结合使用CDK和Material ...

    一些前端面试题.pdf

    组件化则是在模块化基础上进一步细化,将用户界面分解成一系列可复用的组件。这有助于提高代码的可维护性和可扩展性。 ### 浏览器兼容性问题 处理浏览器兼容性问题通常涉及使用polyfills来填充旧版本浏览器的功能...

    angular-material:我做过的角度航向的源代码-Material source code

    9. **Internationalization (i18n)**:Angular Material 支持多语言,包括标签和提示文本的国际化处理。 10. **Integration with Angular Forms**:Angular Material 无缝集成了 Angular 的表单系统,可以使用 `...

Global site tag (gtag.js) - Google Analytics