加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

flex多语言切换方式-i18n

发布时间:2020-12-15 03:49:10 所属栏目:百科 来源:网络整理
导读:Flex使用ResourceManager,可以实现Flex多语言解决方案,新建不同的语言版本文件,通过设定采用哪种语言,即可实现相关字段显示对应的语言版本。 (注:可参考Tour de Flex中的输入resource可以找到例子 Localization供参考) 实现步骤如下: 参考资料:http
Flex使用ResourceManager,可以实现Flex多语言解决方案,新建不同的语言版本文件,通过设定采用哪种语言,即可实现相关字段显示对应的语言版本。
(注:可参考Tour de Flex中的输入resource可以找到例子 Localization供参考)
实现步骤如下:
参考资料:http://www.cnblogs.com/WideWeide/archive/2010/03/16/1687668.html

1、设置编译参数



右击项目,选择属性,在Flex 编译器中输入:(这里提供中文和英文两种版本)
-locale en_US -locale zh_CN -source-path=locale/{locale}


2、新建语言资源文件



在src目录下,新建locale文件夹,在locale文件夹;
在locale文件夹下,新建en_US文件夹,在文件夹内新建rtis.properties文件:
admin=user_Id
password=password
在locale文件夹下,新建zh_CN文件夹,在文件夹内新建rtis.properties文件:
admin=登录名称
password=登录密码


3、编码实现以I18NTest.mxml为例,采用两种方式



(注:两种方法都要添加引用的资源,rits与新建的rtis.properties文件名相对应
<fx:Metadata>
[ResourceBundle("rtis")]
</fx:Metadata>)


I18NTest.mxml:



<?xml version="1.0" encoding="utf-8"?>
<s:WindowedApplication xmlns:fx="http://ns.adobe.com/mxml/2009"?
? xmlns:s="library://ns.adobe.com/flex/spark"?
? xmlns:mx="library://ns.adobe.com/flex/mx">

<fx:Declarations>
<!-- 将非可视元素(例如服务、值对象)放在此处 -->
</fx:Declarations>

<!--添加资源文件-->
<fx:Metadata>
[ResourceBundle("rtis")]
</fx:Metadata>
<fx:Script>
<![CDATA[
import base.ResourceUtil;
import mx.resources.ResourceManager;

[Bindable]
public var nameString:String;

[Bindable]
public var ?passwordString:String;

[Bindable]
private var locales:Array = [?
{label: "English",code:"en_US"},?
{label: "Chinese",code:"zh_CN"} ];?

//方法一,直接使用resourceManager
private function changeHandler(event:Event):void
{
//修改采用的语言版本
resourceManager.localeChain = [ localeComboBox.selectedItem.code ];
nameString=ResourceManager.getInstance().getString("rtis","admin");
passwordString=ResourceManager.getInstance().getString("rtis","password");


}

//方法二,采用resourceUitl自定义的ResourceManager封装
private function changeHandler2(event:Event):void
{
//修改采用的语言版本
ResourceUtil.getInstance().changeLanguage(localeComboBox2.selectedItem.code);
nameString=ResourceUtil.getInstance().getString("admin");
passwordString=ResourceUtil.getInstance().getString("password");
}

]]>
</fx:Script>

<s:VGroup width="100%"
?height="100%">
<s:HGroup gap="30">
<s:Label text="方法一"/>
<mx:ComboBox id="localeComboBox" dataProvider="{locales}"?
change="changeHandler(event)"/>
</s:HGroup>
<s:HGroup gap="30">
<s:Label text="方法二"/>
<mx:ComboBox id="localeComboBox2" dataProvider="{locales}"?
change="changeHandler2(event)"/>
</s:HGroup>

<s:Label id="label1" text="{nameString}"/>
<s:Label id="label2" text="{passwordString}"/>

</s:VGroup>

</s:WindowedApplication>


附上base.ResourceUtil自定义的ResourceManager封装ResourceUtil.as代码:

该类采用了单例的模式 参考资料:http://hackerzhou.me/2011/04/develop-flex-exprience-chapter-two-localization.html package base { import flash.events.Event; import flash.events.EventDispatcher; public class ResourceUtil extends EventDispatcher { import mx.resources.IResourceManager; import mx.resources.ResourceManager; import mx.controls.Alert; private static const BUNDLE_NAME:String ="rtis"; [Bindable] public static var resourceManager:IResourceManager = null; private static var instance:ResourceUtil = null; private static var currentLanguage:String = "zh_CN"; public static function getInstance():ResourceUtil { if(instance == null) { instance = new ResourceUtil(); resourceManager = ResourceManager.getInstance(); resourceManager.initializeLocaleChain([currentLanguage]); } return instance; } public function changeLanguage(languageName:String):void { resourceManager.localeChain.localeChain = [languageName]; currentLanguage = languageName; dispatchChange(); } [Bindable("change")] public function getImage(resName:String):Class { var result:Class = resourceManager.getClass(BUNDLE_NAME,resName,currentLanguage); return result; } [Bindable("change")] public function getString(resName:String,para:Array = null):String { var result:String = resourceManager.getString(BUNDLE_NAME,para,currentLanguage); return result; } private function dispatchChange():void { dispatchEvent(new Event("change")); } } }

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读