无废话Flex I18N实现

Silver 撰写  

最近的项目要用flex i18n动态改变语言设置,找了一下资料,因为太多不同的实现方法,所以弄得有点稀里糊涂。这里参考了http://labs.adobe.com/wiki/index.php/Flex_3:Feature_Introductions:_Runtime_Localization
的官方原文,对自己创建i18n应用的过程归纳了一下,希望你可以不被弄得稀里糊涂。

  • 创建你的语言
    在flex的SDK里面的bin目录运行“bin\copylocale.exe en_US el_EL”,其中en_US是在SDK里面的“frameworks\locale”中已经存在的路径名称(也就是locale代码),这里我们准备生成的是希腊文,所以代码是”el_EL” 。跑这个命令的目的是为了生成这个代码的一套框架的i18n文件。
  • 创建你的语言资源文件
    在flex项目中新建一个目录“locale”然后再创建两个子目录“el_EL”和“en_US”这两个子目录名字要符合刚才在“frameworks\locale”里面的目录名字。然后在子目录中创建i18n的资源文件,例如“homepage.properties”,资源文件的格式和就是一些名值对,例如“GREETING=Hello!
    ”这样的格式,每个名值对占文件的一行,在不同locale的资源文件中,名字必须相同,值就是各个本地化语言的字符串。
  • 修改你的项目属性
    在“Flex Compiler”的项目属性设置中,修改“Additional Compiler Arguments”成为“-locale=en_US,el_EL -source-path=../locale/{locale} -allow-source-path-overlap=true”。这里第一个参数“locale”要求把项目编译的时候添加英文和希腊文的本地化语言,第二个参数告诉编译器去哪里找这些语言包,第三个参数可要可不要,
  • 修改你的项目代码,添加i18n转换

    支持i18n切换的label写法如下:

    <mx:Metadata>
    [ResourceBundle("homepage")]
    </mx:Metadata>
    .......
    <mx:Label text="{resourceManager.getString('homepage','centertext')}"/>
    

    在需要使用i18n的页面用metadata声明绑定的资源文件,然后用resourceManager来调用i18n字符串,这里的homepage就是locale资源文件夹下面的资源文件名,全称是homepage.properties,实际使用中我们可以为不同的页面生成各自独立的i18n资源文件,这样更方便查找定位。

    切换语言的样例function如下

    <mx:Script>
    		<![CDATA[
    			private function localeChangeHandler(localeName:String):void {
              	resourceManager.localeChain = [ localeName ];
    }
    		]]>
    </mx:Script>
    

    把locale代码如“en_US”,“el_EL”作为参数传进去就可以切换语言了。