- 浏览: 204523 次
- 性别:
- 来自: 上海
文章分类
最新评论
-
sprite:
java -Xdebug -Xrunjdwp:transpor ...
izpack 调试 -
aosnowit:
这里有一套非常不错的 SparkSkin 主题皮肤,更新很频 ...
Flex Skin (Spark) -
sprite:
在windows 7下,需要用admin权限去运行cmd窗口, ...
izpack 调试 -
luhantu:
其实对于非常简单的背景色设置已经够用了……
Flex4 背景设置 -
clschen:
还有一个非主流的方式,直接设置opaqueBackground ...
Flex4 背景设置
项目中用到flex国际化,虽然以前也用过,也是直接嵌入到程序中,现在有要求要放到外面模块中去,虽然网上教程多多,但是遇到还是遇到很多问题,籍此写下此文,加深印象之用。如果有哪位仁兄只好也用到此,希望能有所帮助,废话至此,正文开始。
先说说编译到主程序中去的方法吧。
1.创建资源文件夹
譬如可以在src文件夹下创建Locale文件夹,然后在此文件夹再次创建每个地区的资源文件夹,譬如de_DE,zh_CN.
然后分别创建后缀名为.properties的资源文件,分别放到各个地区的文件夹中。资源文件是可以包括任何事情,从字符串,数字,格式化和图片到样式。每个地区可以生成一个单独的文件。参考:CreateLocaleFiles.png
2.创建资源文件
创建了名为resources.properties的资源文件,内容为:
## resources.properties file for locale de_DE ## # contact-form labels and assets contact.title=Contact Form contact.flagImg=assets/us.gif contact.submit=Submit # contact-form fields contact.field.name=Name contact.field.streetAddress=Street Address contact.field.city=City contact.field.state=State contact.field.zipCode=ZIP Code contact.field.country=Country
3.创建mxml文件
<?xml version="1.0" encoding="utf-8"?> <s:VGroup xmlns:fx="http://ns.adobe.com/mxml/2009" xmlns:s="library://ns.adobe.com/flex/spark" xmlns:mx="library://ns.adobe.com/flex/mx" width="100%" height="100%"> <fx:Metadata> [ResourceBundle("resources")] </fx:Metadata> <fx:Script> <![CDATA[ private var locales:Array = [{label:"English (United States)", locale:"en_US"}, {label:"中文 (中国)", locale:"zh_CN"}, {label:"German (Denmark)", locale:"de_DE"}, {label:"French (France)", locale:"fr_FR"}, {label:"Japanese (Japan)", locale:"ja_JP"}]; private function comboChangeHandler():void { resourceManager.localeChain = [localeComboBox.selectedItem.locale]; } ]]> </fx:Script> <s:Panel title="{resourceManager.getString('resources','contact.title')}" color="black" borderAlpha="0.15" width="350"> <s:layout> <s:VerticalLayout horizontalAlign="center" paddingLeft="10" paddingRight="10" paddingTop="10" paddingBottom="10" /> </s:layout> <mx:Form width="100%" color="0x323232"> <mx:FormItem label="{resourceManager.getString('resources','contact.field.name')}"> <s:TextInput /> </mx:FormItem> <mx:FormItem label="{resourceManager.getString('resources','contact.field.streetAddress')}"> <s:TextInput /> </mx:FormItem> <mx:FormItem label="{resourceManager.getString('resources','contact.field.city')}"> <s:TextInput /> </mx:FormItem> <mx:FormItem label="{resourceManager.getString('resources','contact.field.state')}"> <s:TextInput /> </mx:FormItem> <mx:FormItem label="{resourceManager.getString('resources','contact.field.zipCode')}"> <s:TextInput /> </mx:FormItem> <mx:FormItem label="{resourceManager.getString('resources','contact.field.country')}"> <s:TextInput /> </mx:FormItem> <mx:FormItem> <s:Button label="{resourceManager.getString('resources','contact.submit')}" /> </mx:FormItem> </mx:Form> </s:Panel> <mx:Spacer height="15" /> <s:HGroup width="350" verticalAlign="middle"> <mx:Spacer width="100%" /> <mx:Image source="{resourceManager.getString('resources','contact.flagImg')}"/> <mx:ComboBox id="localeComboBox" dataProvider="{locales}" change="comboChangeHandler()"/> </s:HGroup> </s:VGroup>
4.配置Flex 编译参数
选中项目名称右键-Properties-Flex Complier-Addtional compiler arguments中添加
-locale=en_US,zh_CN -allow-source-path-overlap=true -source-path=Locale/{locale}
这样就可以了,你可以通过切换发现可以实现国际化了,哈哈,不过只有两种地区的简单demo。
再谈谈用module分别加载不同地区资源
到底怎样加载这些资源文件决定于你的程序许多支持多少地区本地化。
a.如果你仅仅只是支持一到两个地区的本地化,那么一般来说就是直接编译到程序中。
b.如果要支持很多种本地化,一般选择在运行时加载所需的本地化资源。资源模块和编译入主程序相比,资源模块是一种比较好的本地化方式,因为它指定的资源模块可以在运行时加载。这样可以减小主程序的文件大小,但是如你所见你必须为每个资源模块加载一个单独的swf文件。这样的话会增加网络请求并且合成的主程序的大小比直接编译入主程序的方式更大。尽管如此,如果你有很多本地化的需求,分别单独的加载它们从长远来看会节省资源。
1.2 和上面一样
3.建立mxml文件
<?xml version="1.0" encoding="utf-8"?> <s:VGroup xmlns:fx="http://ns.adobe.com/mxml/2009" xmlns:s="library://ns.adobe.com/flex/spark" xmlns:mx="library://ns.adobe.com/flex/mx" width="100%" height="100%" creationComplete="initApp()"> <fx:Script> <![CDATA[ import mx.controls.Alert; import mx.events.ResourceEvent; import mx.resources.ResourceBundle; [Bindable] private var locales:Array = [ "zh_CN","de_DE" ]; private function initApp():void { /* Set the index to -1 so that the prompt appears when the application first loads. */ localeComboBox.selectedIndex = -1; } private function registrationComplete():void { Alert.show(resourceManager.getString('resources', 'thanks')); } private function comboChangeHandler():void { var newLocale:String = String(localeComboBox.selectedItem); /* Ensure that you are not loading the same resource module more than once. */ if (resourceManager.getLocales().indexOf(newLocale) != -1) { completeHandler(null); } else { // Build the file name of the resource module. var resourceModuleURL:String = newLocale + "_ResourceModule.swf"; var eventDispatcher:IEventDispatcher = resourceManager.loadResourceModule(resourceModuleURL); eventDispatcher.addEventListener(ResourceEvent.COMPLETE, completeHandler); } } private function completeHandler(event:ResourceEvent):void { resourceManager.localeChain = [ localeComboBox.selectedItem ]; /* This style is not bound to the resource bundle, so it must be reset when the new locale is selected. */ var test:String = resourceManager.getString('resources','contact.field.city'); b1.setStyle("downSkin", resourceManager.getClass("RegistrationForm", "flag")); } ]]></fx:Script> <s:Image source="{resourceManager.getClass('resources', 'flag')}"/> <mx:ComboBox id="localeComboBox" prompt="Select One..." dataProvider="{locales}" change="comboChangeHandler()"/> <mx:Form width="100%" color="0x323232"> <mx:FormItem label="{resourceManager.getString('resources','contact.field.name')}"> <s:TextInput /> </mx:FormItem> <mx:FormItem label="{resourceManager.getString('resources','contact.field.streetAddress')}"> <s:TextInput /> </mx:FormItem> <mx:FormItem label="{resourceManager.getString('resources','contact.field.city')}"> <s:TextInput /> </mx:FormItem> <mx:FormItem label="{resourceManager.getString('resources','contact.field.state')}"> <s:TextInput /> </mx:FormItem> <mx:FormItem label="{resourceManager.getString('resources','contact.field.zipCode')}"> <s:TextInput /> </mx:FormItem> <!--<mx:FormItem label="@Resource(key='contact.field.zipCode', bundle='resources')"> <s:TextInput /> </mx:FormItem>--> <mx:FormItem> <s:Button label="{resourceManager.getString('resources','contact.submit')}" /> </mx:FormItem> </mx:Form> <s:Button id="b1" label="{resourceManager.getString('resources','submit_button')}" click="registrationComplete()"/> </s:VGroup>
4.确定需要哪些资源束
在你编译资源模块之前,你必须知道那些资源束应该放到它里面。换句话说,你必须要知道那些资源是你的主程序-包括它的框架-真正需要的。这不仅仅包括你所创建程序需要的的资源,而且也包括程序框架需要的资源。
在你的flex bulider中找到mxmlc.exe 文件,例如我的在:C:\Program Files\Adobe\Adobe Flash Builder 4.6\sdks\4.6.0\bin,执行
mxmlc -locale= -resource-bundle-list=myresources.txt F:\demo\Demo\src\view\resource\ResourceMoudleDemo.mxml
当你使用resource-bundle-list选项时,你还必须设置locale的值为空。
myresource.txt 就是待会要把你所有要国际化的页面和框架所需的所有文件名输出到这个文件中,地址就在mxmlc.exe文件的同一目录
F:\demo\Demo\src\view\resource\ResourceMoudleDemo.mxml 就是你要国际化的页面的绝对路径
执行完后到myresource.txt中查看,内容为:
bundles = collections components containers controls core effects layout resources skins styles textLayout
其中的resources就是自定义的资源文件,其他就是框架所用的文件了
5.把所有的文件都编译到一个swf中
mxmlc -locale=de_DE -source-path=F:\demo\Demo\src\Locale\{locale} -include-resource-bundles=resources,collections,components,containers,controls,core,effects,layout,skins,styles, textLayout -output de_DE_ResourceModule.swf
这个时候就会在mxmlc.exe中相同的目录中生成de_DE_ResourceModule.swf。
然后你再改变下-locale=zh_CN,生成zh_CN_ResourceModule.swf。
然后把这两个swf放到主程序相同目录下,测试加载即可。
发表评论
-
Flex 取得浏览器hostname
2015-01-03 19:02 937Flash可以被嵌入其他的服务器网页中,如果要flash取得 ... -
Flex4 背景设置
2014-12-02 14:34 1168Flex的spark组件可以用skin来设置组件的背景,但是 ... -
Flex Chart 中用dataFunction对数据进行处理
2014-11-24 16:27 1575在flex中用chart对数据展示时,有时候数据中有空值,但 ... -
Flex DataGrid 动态改变headerRender 属性&itemRender 改变单元格颜色
2014-11-24 15:34 1242很多时候会用到动态改变datagrid的headerRend ... -
Flex SDK 中没有 en_GB 语言包
2014-06-12 17:24 873在Flex国际化中,如果支持en_GB,发现SDK 中根本没 ... -
Flex 在chrome中debug连接不上
2014-05-29 10:47 1330在Chrome 中debug总是连接不上的解决方案 1. ... -
Flex 特效机制
2013-08-15 20:59 889Flex的动画效果由一个工厂类(Factory)和一 ... -
Flex 绑定机制 (ChangeWatcher & BindingUtils )
2013-08-13 12:24 2815Flex的绑定机制也是一个亮点,对于数据和显示分离提供很好 ... -
Flex 深复制 浅复制
2013-08-09 15:26 1539对于基本类型,无所谓深浅复制。 深浅复制只要是对于引用类型 ... -
Flex States 应用
2013-08-09 11:23 1448这几天做项目重构,发现一个蹊跷的问题,A类基础B类,本来不 ... -
Loader 与SWFLoader 区别
2013-07-31 14:14 1450在Flex中可以通过Loader ... -
Flex ApplicationDomain
2013-07-31 11:09 1008如果要说这个已经是一个非常长的篇幅,网上七零八落的介绍也非 ... -
Flex 截图
2013-07-26 13:44 3006Flex提供了两种方法截图,一个是BitmapData的dr ... -
继承父类并继承父类的控件
2013-07-25 15:40 2032在Flex当中,如果父类已经拥有了子元素,然后你再继承这个 ... -
Flex 带时间的DateField的
2013-07-19 17:32 4452需要做一个带时间的DateField控件。不做啰嗦,直接上 ... -
View Stack + TabBar 校验
2013-07-19 17:17 1259程序中用到view Stack + tabBar导航的导航的 ... -
Flex chart 改变图表元素的颜色
2013-06-08 16:08 4414Flex 有许许多多的chart组件,他们的父类都是Cha ... -
FlexUnit4
2013-09-25 13:30 984前些日子试用了FlexUnit4,发现真的非常的不错,非常 ... -
在flash中捕获所有的报错 (Catch All Exception in Flash)
2013-03-07 10:31 1903在Flash Player 10.1及以上版本中,adobe ... -
Flex3与Flex4 类结构图
2012-12-24 16:59 0Flex3 和 Flex4中的显示对象都是继承自UICompo ...
相关推荐
`<keep-as3-metadata>`可以保留AS3元数据,例如用于处理资源国际化的`Localize-behavior`。 博客链接中提到的`flex-config.xml`修改,可能涉及上述某一项或多项配置,具体修改需查看博主提供的具体内容。通常,...
基于springboot大学生就业信息管理系统源码数据库文档.zip
基于java的驾校收支管理可视化平台的开题报告
时间序列 原木 间隔5秒钟 20241120
毕业设计&课设_基于 Vue 的电影在线预订与管理系统:后台 Java(SSM)代码,为毕业设计项目.zip
基于springboot课件通中小学教学课件共享平台源码数据库文档.zip
基于java的网上购物商城的开题报告
Delphi人脸检测与识别Demo1fdef-main.zip
基于java的咖啡在线销售系统的开题报告
基于java的自助医疗服务系统的开题报告.docx
内容概要:本文档全面介绍了Visual Basic(VB)编程语言的基础知识和高级应用。首先概述了VB的基本特性和开发环境,随后详细讲述了VB的数据类型、变量、运算符、控制结构、数组、过程与函数、变量作用域等内容。接着介绍了窗体设计、控件使用、菜单与工具栏的设计,文件操作、数据库访问等关键知识点。最后讨论了VB的学习方法、发展历史及其在桌面应用、Web应用、数据库应用、游戏开发和自动化脚本编写等领域的广泛应用前景。 适合人群:初学者和中级程序员,尤其是希望快速掌握Windows桌面应用开发的人群。 使用场景及目标:①掌握VB的基础语法和开发环境;②学会使用VB创建复杂的用户界面和功能完整的应用程序;③理解数据库操作、文件管理和网络编程等高级主题。 其他说明:Visual Basic是一种简单易学且功能强大的编程语言,尤其适合用于开发Windows桌面应用。文中不仅覆盖了基础知识,还包括了大量的实用案例和技术细节,帮助读者快速提升编程技能。
基于java的疫情期间高校防控系统开题报告.docx
基于springboot+vue社区老年人帮扶系统源码数据库文档.zip
基于java的超市商品管理系统的开题报告.docx
基于SpringBoot房屋买卖平台源码数据库文档.zip
xdu限通院23微处理器系统与应用大作业(两只老虎),适应于汇编语言keil软件,
<项目介绍> - 新闻类网站系统,基于SSM(Spring、Spring MVC、MyBatis)+MySQL开发,高分成品毕业设计,附带往届论文 - 不懂运行,下载完可以私聊问,可远程教学 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载学习,也适合小白学习进阶,当然也可作为毕设项目、课程设计、作业、项目初期立项演示等。 3、如果基础还行,也可在此代码基础上进行修改,以实现其他功能,也可用于毕设、课设、作业等。 下载后请首先打开README.md文件(如有),仅供学习参考, 切勿用于商业用途。 --------
基于java的学生网上请假系统的开题报告.docx
社会经济繁荣发展的今天,电子商务得到了飞速发展,网上交易越来越彰显出其独特的优越性,在人们的日常生活中,出现了各种类型的交易网站。其中一个就是车辆易主交易网站,它是一个服务于用户买卖二手车辆的交易网站,为用户提供了平等互利、方便快捷的网上交易平台,通过这一类型的网站,用户可自由出售和购买车辆。 本课题主要根据车辆本身的特性,充分发挥互联网的特点与优势,构建一个以二手车辆为商品、基于互联网平台的车辆易主业务交易管理系统,并根据车辆易主业务交易管理系统的应用需求,进行需求分析,进而对网站系统作规划设计。采用IDEA为运行平台,以SSH为框架,运用HTML语言、JSP技术、MySql数据库、JSP与后台数据库链接等关键技术建设二手车网上交易系统,构建车辆易主交易系统的会员注册与登录,网站首页展示、用户发布商品车辆,用户求购商品车辆,分页浏览、购物系统、用户后台管理、管理员用户后台管理等功能,并使这些功能得以实现并更好为用户服务。网站整体构建完成且测试成功后,用户可以进入网站进行注册、登录,登录后,用户可以在网站上发布自己的闲置车辆或者寻找想要购买的车辆,还可以收藏车辆,管理发布和收藏的车辆,
SQLite3的向量扩展库,windows dll,版本0.1.5