About

<#TEMPLATE_INCLUDE_NINEPAGE_ABOUTME#>
  • Nov

    15

    这是因为代码中包含了类似 [ResourceBundle("xxxx")] 元标签,而这个标签往往用于指定组件的默认属性。

    举个例子:在 Apache Flex SDK 中,有一个 Spark 版本的 Alert 组件,在编译器设置中 -locale 值如果分别设置为 en_US 和 zh_CN 进行编译,那么它们所编译后的 SWF 文件使用的确认按扭上的文字显示,默认的值分别为 "OK" 和 "确认" 两个字符串。

    所以如果开发者使用的是源文件格式,不要随意的去掉这个[ResourceBundle("xxxx")] 元标签,更不要像网上其它教程所说的去掉 -locale 的指定属性值进行编译,或使用指定一个其它不相关的任意的 *.properties 文件到编译路径中,虽然这些方法能让编译器通过编译,但有可能产生副作用。

    继续以 Apache Spark 版本的 Alert 组件为例:如果开发者将这个 Spark 版本的 Alert 组件源码复制到默认的 Adobe 版本的 Spark 开发环境中去使用,那么它就相当于是一个第三方类库,在 Alert .as 文件中导入相应的类,修改好相应的包名,以及在样式文件中指定好对应的 AlertSkin.mxml 后编译,它就一定会有如下提示: 

    无法为区域设置“en_US”解析资源束“alert”

    如果编译器中设定的  -locale 值为 zh_CN ,那么它会同样换成这个值进行提示。解决这种第三方类库报这样错误的根本解决方法是找到对应的 *_rb.swc 文件,然后将这个 *_rb.swc文件添加到 Flex 项目属性的构建路径的库路径中。在这个例子中就是从 Apache Flex SDK 安装目录中找到 en_US 或 zh_CN 版本的 experimental_rb.swc 文件,它们都被存放在 “apache flex sdk 目录\frameworks\locale“下面。

    同样在使用其它第三方类库时也是相同的解决方法,找到对应的 *_rb.swc 文件。之于它们为什么会被取名为 _rb 后缀,我想大概是因为元标签 ResourceBundle 的名称中两个单词的首字母,所以每个第三方的开发公司就成了一种约定俗成的后缀取名方式。