Adobe Flex 4:本地化框架文件的运行时加载

时间:2011-06-08 13:33:50

标签: flex localization flex3 flex4 runtime

根据Adobe asdocs,Flex框架文件应该能够在运行时加载。这些本地化的框架文件,存在于(在Windows上)C:\ Program Files(x86)\ Adob​​e \ Adob​​e Flash Builder 4.5 \ sdks \ 4.5.0 \ frameworks \ locale,负责警报上的按钮文本等项目对话框和许多其他控件。我的期望是,一旦加载了这些框架文件,我会在我的Flex应用程序中看到这些资源。

我按如下方式设置了我的项目:

MyProject
   -src
   -Flex4.5
   -Referenced Libraries
   -bin-debug
   -bin-release
   -libs
   -locale (I've copied all of the directories(da_DK,en_US,es_ES,etc) of framework files for the locales I want to support inside of this dir)

现在asdocs声明为了做到这一点,你必须将编译器设置设置为读取

-locale=en_US,da_DK,de_DE,es_ES,fi_FI,fr_FR,it_IT,ja_JP,ko_KR,nb_NO,nl_NL,pt_BR,ru_RU,sv_SE,zh_CN,zh_TW -allow-source-path-overlap=true -source-path=locale/{locale}

我已经完成了。

My Build Path Libraries for Flex 4.5 - C:Program Files (x86)\Adobe\Adobe Flash Builder 4.5\sdks\4.5.0 are set to be Runtime Shared library (of note, the {locale} subfolder says "Merged into code")

但是当我在浏览器中更改语言时,我没有看到任何框架资源。

此外,当我构建项目时,我没有看到bin-release中任何面向语言环境的资源文件的迹象。由于我们只部署bin-release文件夹的内容(而不是整个项目),这应该如何工作?

我也在bin-release中看到.swz文件(我知道这些文件不是本地化的框架资源)。

有没有人有运行时框架本地化的经验?我究竟做错了什么?我的期望是,一旦我构建我的项目(框架资源外部化)应用程序将能够加载这些资源,但这没有发生,我不想编译我的应用程序的所有的不同版本我支持的语言环境。

提前致谢

1 个答案:

答案 0 :(得分:0)

我使用以下适用于我的ANT任务:

<mxmlc file="${build.dir.src}/${mxml.file}" keep-generated-actionscript="false" output="${build.dir.stage}/${project.app.name}.swf" 
        actionscript-file-encoding="UTF-8" incremental="false" context-root="${project.app.name}" optimize="${app.optimize}"
        debug="${app.debug}" configname="air" locale="en_US,ja_JP,fr_FR">

<jvmarg value="-Xmx1024m" />
<jvmarg value="-Xms512m" />

<compiler.theme append="true" file="${FLEX_HOME}/frameworks/projects/spark/MXFTEText.css" />

<source-path path-element="${FLEX_HOME}/frameworks" />
<source-path path-element="${build.dir.locale.src}/{locale}" />

<library-path dir="${FLEX_HOME}/frameworks/libs" append="true">
    <include name="*.swc" />
</library-path>
<library-path dir="${FLEX_HOME}/frameworks/libs/air" append="true">
    <include name="*.swc" />
</library-path>
<library-path dir="${FLEX_HOME}/frameworks/locale" append="true">
    <include name="{locale}" />
</library-path>
<library-path dir="${build.dir.lib}" append="true">
    <include name="*.swc" />
</library-path>

将以下标记添加到使用资源的类中,并按以下方式读取字符串:

[ResourceBundle('application')]

// set up the locale chain
ResourceManager.getInstance().localeChain = [ 'en_US', 'ja_JP', 'fr_FR' ];

// load resources
ResourceManager.getInstance().getString('application', 'some.string.code');

观察:一个人不需要将框架文件复制到一个项目文件夹中。在编译时,它们将被编译。

让我知道它是否有效,否则我们可以调试更多!