- 浏览: 323438 次
- 性别:
- 来自: 温州
文章分类
最新评论
-
helloworldlove:
Axis_UNZIP_PATH\Axis-version\we ...
3步把您的java程序转换为webservice -
hcqenjoy:
这个工具能再提供下吗 已经没办法下载了 谢谢
汉化 Flex Builder 3 帮助文档 -
NASa_CJ:
String source = HttpClientExamp ...
利用HttpClient获取网页内容 -
zlsj80:
下载地址无效了,楼主修正一下吧
汉化 Flex Builder 3 帮助文档 -
fykyx521:
下载地址都不能用了,是不过时了
汉化 Flex Builder 3 帮助文档
创建过Java多语言本地化应用的朋友应该都很熟悉Java的本地化资源访问的功能,现在好了,Flex2诸多激动人心更新中的一个就是本地化特性(localization feature),这倒是Adobe加强推广Flex2的一个强助力了(这一特性可以本地化Flex组件,这样估计以后会有中文版的Flex2了...),使用Flex2的本地化特性我们可以很容易创建多语言本地化的Flex应用,为我们的Flex应用打入国际市场添威助力,不过不像Java的本地化资源动态获取的方式,目前Flex2的本地化特性只支持静态的本地化资源嵌入,还不支持运行时动态获取本地化资源。
要本地化Flex2应用,我们需要将本地化资源文件编译为SWC库文件,然后在Flex应用中使用ActionScript或者MXML访问资源集(resource bundles )中的本地化值。
Flex2的本地化特性面向以以下人员:
Web应用开发人员
Web应用翻译人员
Flex框架开发人员
Flex框架翻译人员(中文版?!嘿嘿...)
本地化应用流程:
要本地化Flex代码,我们需要改变我们MXML和ActionScript代码,创建本地化属性文件和类,运行compc工具创建SWC库文件,最后使用mxmlc工具将我们的应用编译成SWF文件。
使用ResourceBundle API
要本地化Flex代码第一步是使用 mx.resource.ResourceBundle API替换期待本地化的硬编码内容。我们可以在ActionScript和MXML代码中使用ResourceBundle API。
ResourceBundle是ActionScript 3.0语言规范的一部分,其包含如下与本地化资源交互的方法:
static getBundle(name:String):ResourceBundle,这里name指的是属性文件名或ResourceBundle子类名。
getString(key:String):String, 这里key指的是属性文件或ResourceBundle子类中明值对名称
getObject(clsName:String):Object
使用本地化字符串
在下面的例子的ActionScript代码中,ResourceBundle API被用来设置某一按钮的label值,ResourceBundle.getBundle()方法获取某一资源集,然后使用 ResourceBundle.getString() 方法资源集中某一键值。
var myBundle:ResourceBundle = ResourceBundle.getBundle(getSystemManager(),
’MyBundle’);
myButton1.label = myBundle.getString(’myButton1_label’);
...
在MXML中,我们指定资源集名称和键名给@Resource指令来获取特点资源集中的特定值。如果,我们只标明键名,默认资源集名称为当前类名称。资源集名称为包含特定键的属性文件或ResourceBundle子类名称。@Resource有以下两种形式以下例子使用@Resource指令设置Button控件的label属性:
key=’myButton1_label’)"
click="ti1.text=’myButton1.label=’+myButton1.label;"/>
在本地化字符串中使用绑定(Using binding with localized strings)
我们可以使用绑定表达式将@Resource指令的键参数绑定到相应属性文件的键值中,以下MXML代码使用绑定表达式作为@Resource指令的键参数: <mx:Label id=”lab” text="@Resource('lab.text', {product.name})"/>
以下示例是相应属性文件中键值对,{0}将会被product.name替代:
我们也可以使用多个参数,例如在@Resource指令有多个参数时的:{0}和{1}。
如果需要的话,我们必须确保product.name是本地化的。
掉换本地化字符串顺序
我们可以基于区域使用某一本地化字符串或其他,例如,默认的英语属性文件可能包含如下键:
而另外一个English属性文件可能包含如下值:
某一MXML文件可能包含如下@Resource指令:
@Resource('MYTEXT', "My name is Bill.", "I am a developer.");
以上两个字符串在第二个区域中被掉换了。
以下是与以上@Resource指令等价的ActionScript代码:
r = ResourceBundle.getBundle(sm, "MyComponent1");
StringUtil.substitute(r.MYTEXT, "My name is Anant", "I am in the Flex team");
使用本地化对象和嵌入资源
在应用中,如果要使用ActionScript类或嵌入资源,如图像,我们可以调用ResourceBundle.getObject()方法,当我们获取一个ResourceBundle子类后,可以使用该ResourceBundle子类的getObject()方法从资源集中获取特定的类:
var obj:Object = bundle.getObject("FormattingClass");
因为这里并没有到类的直接引用,我们必须使用ActionScript增加任意的可视子对象,例如:
var obj:DisplayObject = DisplayObject(bundle.getObject("FormattingClass"));
myLocaleParent.add(obj);
以上示例中,LocaleClasses是某一我们创建的用来存放嵌入类的ResourceBundle子类, 该类引用了被ResourceBundle的getContent()方法返回的对象的类(这句有些拗口:This class references the classes that are needed in the ResourceBundle in an Object returned from its getContent() method. )。以下LocaleClasses示例:
public function LocaleClasses() {
super();
}
override protected static function getContent():Object {
var contentObj:Object = new Object();
contentObj.push("FormattingClass", FormattingClass);
contentObj.push("Class2", Class2);
// More classes can by added here.
return contentObj;
}
}
处理的过程类似嵌入资源,一共有三个步骤,首先我们必须使用基于类版本的嵌入,这就意味着我们必须为每个需要嵌入的资源创建一个类,例如,如果我们有一个JPG图片需要本地化,我们可以将以下RedJpg类添加到本地化目录中:
import mx.core.SkinSprite;
[Embed(source=’red_jpg.jpg’)]
public class RedJpg extends SkinSprite {
}
}
第二步,将RedJpg类添加到某一扩展ResourceBundle的类中,这样是为了让编译器就有个需要处理的资源集了 。通常我们将所有需要的类放置在同一个资源集类中。
以下是一个包含RedJpg类的ResourceBundle子类:
import mx.resource.ResourceBundle;
public class MyClassesBundle extends ResourceBundle {
public function MyClassesBundle()
{
super();
}
override protected static function getContent():Object {
var contentObj:Object = new Object();
content.push("RedJpg", RedJpg);
// add more class references here
return contentArr;
}
}
}
在我们创建包含资源集的SWC文件后,我们的第三步在ActionScript中使用ResourceBundle.getObject()方法获取该对象并且将其添加到我们应用需要的任意地方。以下是使用RedJpg对象的示例:
<mx:Image id="testJPG"/>
<mx:Script>
import mx.resource.ResourceBundle;
import mx.core.SkinSprite;
public function initialize () {
// We get the bundle here that is the name of the class in step 2.
ResourceBundle bundle = ResourceBundle.getBundle(sm,
"MyClassesBundle");
// here we specify the name of the class from step 1
SkinSprite sprite = SkinSprite(ResourceBundle.getObject("RedJpg"));
// and now we set up the Image
testJPG.source = sprite;
}
<mx:Script>
使用本地化属性文件和ResourceBundle子类
属性文件和目录结构
我们将存放需要本地化的字符串属性的属性文件放置在某一用户创建的本地目录中。
为了避免MXML @Resource指令的bundle参数,我们可以将属性文件名命名为与类的一样的名称。当然,标明资源集名称是个很好的练习。如果我们没有标明bundle参数,那么属性文件名必须与类名称一致,例如,/myApp/MyAlert.as的属性文件将为:/ fr_FR/myApp/MyAlert.properties,fr_FR为区域(locale )标识,类似的,我们可以在多个区域目录中包含多个属性文件,区域(locale )通过compc的locale选项设置,Locale不能在运行时使用Locale类修改。
locale目录必须为compc 的ActionScript类路径的一部分,但是不能为mxmlc编译主SWF文件时的ActiongScript类路径的一部分。
本地化属性文件与Java属性文件的格式一致,都是简单文本格式的名值对,例如:
Link1_label = Link1
CheckBox1_label = CheckBox1
RadioButton1_label = RadioButton1
RadioButton2_label = RadioButton2
RadioButton3_label = RadioButton3
PopUpButton1_label = PopUpButton1
属性文件中所有的文本必须为Latin-1 或者(和)Unicode-encoded (\udddd 符号)编码。
我们可以使用Java的native2ascii工具转换其他的格式,对于要处理大量的属性文件的情况,我们可以使用Ant的native2ascii任务批量转换属性文件为ASCII格式。
本地化文件和类搜索顺序
我们将本地化属性文件和ResourceBundle子类添加到相应的locale名称的目录下,更多本地化ActiongScript类信息,请查看“Using localized objects and embedded assets” 。
compc工具使用特定的locale法则搜索文件:精确locale名称、不带变种和国家的locale名称、最后是en_EN。
以下表格说明如果我们在使用compc命令编译本地化SWC文件时设置locale为fr_FR时的属性文件搜索顺序:
本地化文件 描述
/en_EN/AppCommon.properties 该文件被使用,因为没有其他版本或者更高优先级的文件。
/fr/Grape.as 未使用该文件,因为在fr_FR目录下有一个同名文件,该文件的优先级比更高
/fr/Apple.as 未使用该文件,因为在fr_FR目录下有一个同名文件,该文件的优先级比更高
/fr_FR/Grape.as 该文件被使用,因为其优先级最高
/fr_FR/Orange.as 该文件被使用,因为其优先级最高
我们可以与本地化我们自己代码一样的方法本地化Flex框架资源文件集,Flex框架的en_EN区域属性文件在Flex Builder安装目录的Flex Framework 2/ frameworks/locale/en_EN 目录下。包括Adobe用来创建缺省Flex框架SWC文件的属性文件:framework_rb.swc和包含给Flex框架使用的如用于日期、验证和格式化的字符串和符号的名值对的SharedResources.properties属性文件。
创建SWC文件
我们必须使用compc工具将本地化属性文件和ActionScript类打包进SWC文件中,我们可以使用以下compc参数创建SWC文件:
compc选项 描述
actionscript-classpath 该选项标明用户创建的本地化目录,我们必须使用{locale}符号,如果我们的文件在 / myfiles/locale_dir/en_EN 和/myfiles/ locale_dir/ja_JP两个位置,那么actionscript-classpath值为:/myfiles/ locale_dir/{locale}.
include-resource-bundles 标明需要包含进SWC文件的资源集文件,可以是属性文件名(名称不应包含前缀或基本文件路径)和ResourceBundle 子类名称。
output 要创建的SWC文件名称,必须指定。
locale locale选项标明要打包进SWC文件的locale,如果有多个locale,必须以不同的locale选项运行compc工具多次。
以下例子使用compc命令创建fr_FR资源集SWC文件:
compc -locale fr_FR -actionscript-classpath locale/{locale} -include-resource-bundles HelloWorld -output locale/fr_FR/HelloWorld.swc
更多compc工具信息,请查看: “Using the Command Line Compilers。”
创建应用SWF文件
我们使用mxmlc工具创建应用SWF文件。使用mxmlc命令的include-library选项标明我们要使用的本地化SWC文件位置,所有的SWC文件内容将在SWF文件创建的时候静态链接进SWF文件中。我们必须为每个区域创建相应的SWF文件。
注意:不需要在mxmlc中指定locale选项
以下使用mxmlc命令创建一个en_EN资源集的本地化SWF文件:
mxmlc -include-libraries locale/en_US/HelloWorld.swc locale/en_EN/framework_rb.swc -- HelloWorld.mxml
当我们使用mxmlc的include-libraries选项时,我们必须标明framework_rb.swc的位置,该文件是给framework.swc使用的,更多mxmlc工具信息,请看出 “Using the Command Line Compilers。”
创建一个简单的本地化应用
以下步骤组合了之前我们讨论的创建本地化应用的各章节。
1. 创建文件:locale/en_US/HelloWorld.properties,包含如下内容:
2. 创建文件:locale/en_FR/HelloWorld.properties,包含如下内容:
hello=Salut le Monde
3. 创建文件:HelloWorld.mxml,包含如下代码:
width="400" height="400">
<mx:Label text="@Resource(key=’hello’, bundle=’HelloWorld’)" />
</mx:Application>
4. 使用compc命令编译en_US区域资源:
5. 使用compc命令编译fr_FR区域资源:
6. 运行mxmlc命令使用en_US资源集编译SWF:
使用mxmlc的include-libraries,必须标明framework_rb.swc的位置以给framework.swc使用,运行以上命令后,将HelloWorld.swf重命名为HelloWorld_en_US.swf或其他类似的名称。
7. 运行mxmlc命令使用fr_FR资源集编译:
mxmlc -include-libraries locale/fr_FR/HelloWorld.swc ${Flex FrameWork安装位置}/locale/en_EN/framework_rb.swc -- HelloWorld.mxml
运行以上命令好,将HelloWorld.swf重新命名为HelloWorld_fr_FR.swf。
8. 运行以上两个swf文件将会看到 "Hello World"和"Salut le Monde".
发表评论
-
使用 Macromedia Flex 开发 Web 服务客户端
2006-03-31 22:24 790引言 开放式标准被企业用作降低高整合及维护费用的主要手段。现实 ... -
自定义flex组件
2006-04-15 13:52 836我们在ActionScript里定义如下一个自定义MyButt ... -
构建富 Internet 应用程序
2006-07-18 18:09 994... -
RIA framework - Cairngorm 2 淺析
2006-07-31 12:46 953隨者 Itereation::Two被併入 Adobe 成為 ... -
使用OPENAMF讓JAVA跟FLASH做溝通(Flash Remoting範例)
2006-12-27 14:18 1054這個範例使用 OpenAmf 1.0 openamf-1.0R ... -
OpenAMF 配置文件 详解
2006-12-30 22:56 957OpenAMF openamf-config.xml 配 ... -
关于flash.net.Socket的例子
2006-12-30 23:05 1422前两天看到http://www.ifbin ... -
OpenAMF - 自訂類別轉換對照
2006-12-30 23:08 725要看這篇文章,先要對Remoting有些概念 Remoting ... -
ActionScript 3 Cookbook 简体中文版 (已公布)
2007-01-17 00:05 1070ActionScript 3 Cookbook 中文版 P ... -
ActionScript 3 中的可变长数组
2007-08-24 14:33 877有时候我们可能不能确定数组的长度,在Actio ... -
Flex程序的全屏幕显示
2007-08-24 21:23 2712看到官方的一片讲解如何在Flash Player 9下全屏幕 ... -
ActionScript 3 中的嵌入方法
2007-08-24 21:56 758ActionScript 3也有嵌入式方法,应该说是嵌入函数, ... -
ActionScript 3 的多态性
2007-08-24 23:38 1249测试一下AS3的多态性,准备四个类:MyShape,MyCir ... -
ActionScript 3 中的对象序列化
2007-08-26 23:18 2108我们都知道对象序列化的目的是为了对象能够在网络上传输, ... -
让Flex程序全屏幕运行
2007-08-30 16:03 1566例子代码如下: <?xml version=&qu ... -
ActionScript 3 中的强制类型转换
2007-09-02 13:26 3095作者:Dreamer 日期:2007-07-2 ... -
AIR应用开发中文指南(BETA2)
2007-09-02 15:40 1409AIR应用开发中文指南(BETA2) 如转载,请注明: 译者 ... -
ActionScript3 制作倒影
2007-09-02 19:21 1058倒影类: package com.flashdev.bi ... -
Flex上传组件
2007-09-02 19:36 1779FileUpload.mxml <?xml ver ... -
ActionScript3 调用 JavaScript
2007-09-02 20:34 961这里我们用最简单的代码来演示如何在AS3代码中调用宿主HTML ...
相关推荐
今天我们要说的是官方文档中用了整章介绍的AdvancedDataGrid,AdvancedDataGrid是DataGrid的高级版本,Flex 3 SDK并不包含它,其和Charting Enhancements一起构成了Flex Data Visualization package,TNND,也就是说...
Flex做的旅游系统 想学习flex的同学看看啊
完美的Flex多语言支持解决方案
flex flex flex flex flex
《Flex企业应用开发实战》共分为4大部分,涵盖企业级应用开发的... 本书对Flex的基础知识着墨不多,所有内容都围绕Flex+Java这一企业级应用开发技术展开,侧重于对Flex技术原理、企业级应用的架构思想和实现方法的讲解
集成 Flex, Spring, Hibernate 构建应用程序.pdf集成 Flex, Spring, Hibernate 构建应用程序.pdf集成 Flex, Spring, Hibernate 构建应用程序.pdf集成 Flex, Spring, Hibernate 构建应用程序.pdf
五分钟用Flex构建WebService应用,我以前看过的Flex连接.net的WebService比较好的保存下来的网页 2分下完别说我骗你~
资源名称:Flex构建Android和iOS应用程序视频教程资源目录:【】00Introduction【】01GettingStartedwithFlexandAndroid【】03UnderstandingtheArchitectureofaFlexMobileApp【】04UtilizingMobileComponents【】05...
D:\GXSKY\Flex\SDK\Flex+Css完全手册D:\GXSKY\Flex\SDK\Flex+Css完全手册D:\GXSKY\Flex\SDK\Flex+Css完全手册D:\GXSKY\Flex\SDK\Flex+Css完全手册D:\GXSKY\Flex\SDK\Flex+Css完全手册D:\GXSKY\Flex\SDK\Flex+Css完全...
一.flex2的全屏代码 在仅仅使用Flex Builder2(我下载的是FLXB_2.0_Win_WWE.exe)的时候,写全屏代码竟然找不到flash.display.StageDisplayState,于是下载了Flex 2.0.1升级包(官方地址:...
构建Flex应用的10大误区
Flex.3.教程:紧跟.RIA.的步伐 包含教程中的所有的源代码
构建 ADOBE® AIR® 应用程序 目录 第 1 章: Adobe AIR 简介 第 2 章: Adobe AIR 安装 安装 Adobe AIR 删除 Adobe AIR 安装和运行 AIR 范例应用程序 Adobe AIR 更新 第 3 章: 使用 AIR API 特定于 AIR 的 ...
本书对Flex的基础知识着墨不多,所有内容都围绕Flex+Java这一企业级应用开发技术展开,侧重于对Flex技术原理、企业级应用的架构思想和实现方法的讲解,所以书中的内容不会随着Flex版本的升级而过时。
flex 入门介绍 flex 如何结合 j2ee 开发应用程序以及 flex 的国际化等
NULL 博文链接:https://zh-dream-success.iteye.com/blog/1685429
第 2 章: 使用 Flash Builder 构建以数据为中心的应用程序 创建 Flex 项目以访问数据服务 连接数据服务 安装 Zend Framework 使用单个服务实例 构建客户端应用程序 为数据服务操作配置数据类型 测试服务操作 ...
动画演示flex布局,包括flex父容器属性以及flex布局子元素属性 flex父容器属性有: 一. flex-direction 主轴方向 row:从左到右 row-reverse:从右到左 column:从上到下 column-reverse:从下到上 二. flex-wrap 子元素...