Flex在3和4中都有Localization的支持,包括使用Resource Modules。不过我并不打算使用该方法。
原因有二
1·Resource Modules过大:
使用Resource Modules是一种很好的设计模式,其意图是希望在运行状态中将资源从外部加载进来,以达到
减少垃圾文件及动态更换语言的目的。不过在最新Flex4版本中,这个想法还是没有很好的体现出来。
我编写了一个1K大小的lang.properties但是导出的Resource Modules确有18K(见原帖)。
这样完全没有达到使用Resource Modules的目的,至少对于多语言这方面是没有什么意义。
2·使用ResourceManager无法替换文字中的转义符:
文字中出现转义符的在很多程序设计中都有需要,由其在游戏中经常会需要显示如下的信息
"Congratulate you have found #ITEM_NAME#" ; "Hello #USER_NAME# ,nice to meet you"
无论使用@Resource 还是运行期间使用resourceManager.getString(**,**),
ResourceManager都无法胜任该工作。
因此,我自己设计了一套多语言结构,拿出来和大家探讨一下。如果有什么想法欢迎留言
Main:
MXML语言:
<?xml version="1.0" encoding="utf-8"?>
<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009"
xmlns:s="library://ns.adobe.com/flex/spark"
xmlns:mx="library://ns.adobe.com/flex/halo"
minWidth="1024"
minHeight="768"
width="348"
height="314"
initialize="onInit()">
<fx:Script>
<![CDATA[
import fl.video.INCManager;
import mx.rpc.events.XMLLoadEvent;
import mx.rpc.soap.LoadEvent;
import copyengine.common.lang.LanguageHandle;
import mx.managers.PopUpManager;
private var xmlLoader1:URLLoader;
private var xmlLoader2:URLLoader;
private var loaderCounter:int;
private function onInit():void
{
loaderCounter=0;
xmlLoader1=new URLLoader();
xmlLoader1.dataFormat=URLLoaderDataFormat.BINARY;
xmlLoader1.load(new URLRequest("../res/xml/lang_en.xml"));
xmlLoader1.addEventListener(Event.COMPLETE, onLoadComplate);
xmlLoader2=new URLLoader();
xmlLoader2.dataFormat=URLLoaderDataFormat.BINARY;
xmlLoader2.load(new URLRequest("../res/xml/lang_cn.xml"));
xmlLoader2.addEventListener(Event.COMPLETE, onLoadComplate);
}
private function onLoadComplate(e:Event):void
{
LanguageHandle.instance.addLanguage(new XML(e.target.data));
loaderCounter++;
if (loaderCounter == 2)
{
LanguageHandle.instance.init("EN");
PopUpManager.createPopUp(this, Panel1);
}
}
]]>
</fx:Script>
</s:Application>
Main 函数主要目的是初始化LanguageHandle,由于仅是做个Demo演示 所以没有写的那么复杂,代码看起来比较2....
LanguageHandle:
ActionScript 3语言:
package copyengine.common.lang
{
import flash.events.Event;
import flash.events.EventDispatcher;
import flash.utils.Dictionary;
public class LanguageHandle extends EventDispatcher
{
private static var _instance:LanguageHandle;
public static function get instance():LanguageHandle
{
if (_instance == null)
{
_instance=new LanguageHandle();
}
return _instance;
}
private var allLanguageRes:Dictionary;
private var currentLanguage:String;
public function LanguageHandle()
{
allLanguageRes=new Dictionary();
}
public function init(_language:String):void
{
currentLanguage=_language;
}
public function addLanguage(_langXml:XML):void
{
currentLanguage=_langXml.@val;
var currentRes:Vector.<LanguageFile>=new Vector.<LanguageFile>();
allLanguageRes[currentLanguage]=currentRes;
for each (var node:XML in _langXml.text)
{
var languageFile:LanguageFile=new LanguageFile;
languageFile.textID=node.@id;
languageFile.textValue=node.@val;
currentRes.push(languageFile);
}
}
[Bindable(event="CopyEngine_LanguageChange")]
public function getText(_textID:String):String
{
var currentRes:Vector.<LanguageFile>=allLanguageRes[currentLanguage];
for each (var langugeFile:LanguageFile in currentRes)
{
if (langugeFile.textID == _textID)
{
return langugeFile.textValue;
}
}
return null;
}
public function changeLanguage(_language:String):void
{
currentLanguage=_language;
dispatchEvent(new Event("CopyEngine_LanguageChange"));
}
}
}
主要注意
[Bindable(event="CopyEngine_LanguageChange")]
public function getText(_textID:String):String]{}
这个是对getText函数进行绑定,当有Event-->CopyEngine_LanguageChange产生时,该函数即Call,
在最下方,当更换语言时就会dispatch出该Event
测试类:
MXML语言:
<?xml version="1.0" encoding="utf-8"?>
<s:Panel xmlns:fx="http://ns.adobe.com/mxml/2009"
xmlns:s="library://ns.adobe.com/flex/spark"
xmlns:mx="library://ns.adobe.com/flex/halo"
width="275"
height="181">
<fx:Script>
<![CDATA[
import copyengine.common.lang.LanguageHandle;
]]>
</fx:Script>
<s:Button x="148"
y="79"
label="{LanguageHandle.instance.getText('BUTTON_CANCEL')}"
width="60"
height="20"/>
<s:Button x="51"
y="79"
label="{LanguageHandle.instance.getText('BUTTON_OK')}"
width="59"
height="22"/>
<s:TextArea x="33"
y="0"
height="73"
width="198"
text="{LanguageHandle.instance.getText('PANEL1_INFO')}"/>
<s:Button x="6"
y="121"
label="CN"
click="LanguageHandle.instance.changeLanguage('CN')"/>
<s:Button x="195"
y="121"
label="EN"
click="LanguageHandle.instance.changeLanguage('EN')"/>
<s:layout>
<s:BasicLayout/>
</s:layout>
</s:Panel>
由于仅仅是简单的Demo,所以就没有封装Rplace函数,不过原理都是一样。
最终演示
分享到:
相关推荐
在开发面向全球用户的Flex应用时,多语言支持显得尤为重要,这使得应用能够适应不同国家和地区的用户需求。本方案将详细探讨如何在Flex项目中实现完美的多语言支持,以满足i18n(国际化)的需求。 首先,我们需要...
12. **国际化和本地化**:掌握Flex4中实现多语言支持的方法,包括资源bundle的使用和配置。 13. **移动设备开发**:Flex4支持移动平台开发,学习如何创建针对手机和平板的应用,利用StageWebView和StageVideo等特性...
Flex4引入了全新的Spark组件模型,与之前的MX组件模型相比,Spark组件更加轻量级,提供了更好的性能和更多的自定义可能性。Spark组件库包括了丰富的UI元素,如按钮、列表、面板等,它们在设计上更注重可定制性和可...
3. **MXML 2009**:MXML作为一种基于XML的声明式语言,在Flex 4中进行了重大更新,以适应新的组件库和Catalyst的使用。MXML 2009引入了新的命名空间,使得开发者可以区分Spark和Halo组件,同时提供更好的行为解耦。...
Flex 4,全称为Adobe Flex 4,是Adobe公司推出的一种用于构建富互联网应用程序(RIA)的开源框架,主要基于ActionScript和MXML语言。它提供了丰富的用户界面组件和强大的数据处理能力,使得开发者能够创建出具有高度...
Flex4,全称为Adobe Flex 4,是Adobe公司推出的一款用于构建富互联网应用程序(RIA)的框架,基于ActionScript 3.0编程语言和Flash Player或Adobe AIR运行时环境。这个压缩包文件包含了多个章节的实战代码,涵盖了...
在Flex4的开发中,MXML和ActionScript是核心开发语言。MXML用于布局和声明用户界面组件,而ActionScript则是用于编写应用程序的逻辑代码。二者结合,开发者可以创建具有动态交互性和高度可定制的用户界面。 学习...
《Effortless Flex 4 Development》覆盖了Flex 4的核心概念和技术,包括MXML(标记语言)和ActionScript 3.0编程。书中详细介绍了如何使用Flex 4构建复杂的应用程序,涵盖了从基础到高级的主题,如组件开发、数据...
- **新状态MXML语言支持**:Flex4增加了对新状态MXML的支持,使得状态管理和动画控制变得更加容易。 - **FXG支持**:FXG是一种图形交换格式,Flex4支持FXG格式的导入和导出,这为设计人员提供了更多的灵活性。 - **...
Flex是Adobe公司开发的一款用于创建富互联网应用(RIA)的框架,主要基于ActionScript和MXML语言。在Flex 4.5.1版本中,引入了一系列改进和新特性,为开发者提供了更强大的功能和更好的用户体验设计。这个"flex4.5.1...
Flex4,全称为Adobe Flex 4,是Adobe公司推出的一款用于构建富互联网应用程序(Rich Internet Applications,RIAs)的框架,主要基于ActionScript和MXML。这个框架在2010年发布,提供了更为强大的图形渲染能力,以及...
总的来说,Flex4中文API帮助文档是Flex开发者不可或缺的工具,它覆盖了Flex4的所有核心功能,包括组件、MXML、ActionScript、布局、动画、服务集成等多个方面,对于学习和掌握Flex4开发技术至关重要。无论你是初学者...
“What’s New in Flex 4”这份PDF文档很可能详细列举了上述所有改进,并可能包含更多关于Flex4的新功能、API变更以及最佳实践的信息。通过阅读这份文档,开发者不仅可以了解到Flex4的核心变化,还能掌握如何利用...
描述中的"Flex4权威指南 清晰中文版",暗示这是一个全面且深入的教程资源,可能包含了Flex 4的基本概念、组件使用、数据绑定、事件处理、动画制作、服务调用等多个方面的内容。这样的指南对于初学者理解Flex 4的框架...
4. **MXML**:MXML是Flex的标记语言,用于声明式地构建用户界面。掌握MXML的元素、属性和样式,以及如何在MXML中嵌入ActionScript代码。 5. **组件库**:Flex提供了一整套预定义的UI组件,如容器、按钮、文本框等。...
### FLEX4_flex4教程知识点详解 #### 富互联网应用(RIA)概念与背景 - **RIA定义**: RIA代表“富互联网应用”(Rich Internet Applications),是一种提供类似于桌面应用体验的网络应用形式。 - **RIA背景**: - **C/...
在Flex 4中,ActionScript的性能得到了提升,类库也得到了扩展,支持更多的数据类型和编程模式,如元编程和强类型。这使得ActionScript成为了一种更强大的面向对象的编程语言,能够处理更复杂的业务逻辑。 Flex 4还...
《Flex4权威指南》是一本深入探讨Adobe Flex 4开发技术的专业书籍,其源代码提供了丰富..."flex4tfs.zip"压缩包中的"Volumes"可能是包含多个章节或部分的源码,每个部分对应书中一个主题或案例,供读者实际操作和学习。
- **Spark组件**:Flex4引入的新一代组件集,提供了更高的性能和更多的自定义选项,与以前的 Halo组件相比,Spark组件更注重设计和分离的UI组件模型。 2. **Flash Builder 4**: - **集成开发环境**:提供代码...
- **本地化**:增强了多语言支持,方便创建国际化应用。 #### 二、Flash Builder 的下载与安装 **2.1 Flash Builder 简介** 随着 Flex 4 的发布,开发环境由之前的 Flex Builder 更名为 **Flash Builder**。这一...