Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Apache flex 正在尝试向Flex mobile应用程序添加区域设置:resourceManager为空_Apache Flex_Flex4_Flex4.6_Flex Mobile_Flex4.7 - Fatal编程技术网

Apache flex 正在尝试向Flex mobile应用程序添加区域设置:resourceManager为空

Apache flex 正在尝试向Flex mobile应用程序添加区域设置:resourceManager为空,apache-flex,flex4,flex4.6,flex-mobile,flex4.7,Apache Flex,Flex4,Flex4.6,Flex Mobile,Flex4.7,在FlashBuilder4.7(使用AIR3.5)中,我试图将本地语言环境en_-US和de_-de添加到Flex移动应用程序中,该应用程序最初只是ru_-ru 也就是说,最初我在项目属性->Flex编译器中只有-locale ru_ru,在源代码中只有硬编码的俄语文本(一切正常) 但在研究了之后,我将Flex编译器(标志)更改为:-locale ru_ru en_US de_de: 并已将src\locale\{locale}添加到源路径: 最后,我创建了子曲面和文件 src\local

在FlashBuilder4.7(使用AIR3.5)中,我试图将本地语言环境en_-US和de_-de添加到Flex移动应用程序中,该应用程序最初只是ru_-ru

也就是说,最初我在项目属性->Flex编译器中只有
-locale ru_ru
,在源代码中只有硬编码的俄语文本(一切正常)

但在研究了之后,我将Flex编译器(标志)更改为:
-locale ru_ru en_US de_de

并已将
src\locale\{locale}
添加到源路径:

最后,我创建了子曲面和文件

src\locale\ru_RU\resources.properties
src\locale\en_US\resources.properties
src\locale\de_DE\resources.properties
此处显示en_US\resources.properties内容:

menu.play=Play via
menu.weekly=Weekly rating
menu.daily=Daily misere
menu.settings=Settings
AIR 3.5 SDK目录本身已包含3个子目录:

C:\Program Files\Adobe\Adobe Flash Builder 4.7 (64 Bit)\sdks\4.6.0 (AIR 3.5)\

frameworks\projects\framework\bundles\ru_RU
frameworks\projects\framework\bundles\en_US
frameworks\projects\framework\bundles\de_DE
所以我没有使用
copylocale
实用程序(对吗?)

在我的源代码中,我更改了第一个视图:

<fx:Metadata>
    [ResourceBundle("resources")]
</fx:Metadata> 
......

[Bindable]
private var _ac:ArrayCollection = new ArrayCollection([
    { icon: OK_ICON, view: OK, label: resourceManager.getString('resources','menu.play'), msg: 'Odnoklassniki.ru' },
    { icon: MR_ICON, view: MR, label: resourceManager.getString('resources','menu.play'), msg: 'Mail.ru' },
    { icon: VK_ICON, view: VK, label: resourceManager.getString('resources','menu.play'), msg: 'Vk.com' },
    { icon: FB_ICON, view: FB, label: resourceManager.getString('resources','menu.play'), msg: 'Facebook.com' },
    { icon: GG_ICON, view: GG, label: resourceManager.getString('resources','menu.play'), msg: 'Google+' }
]);

[ResourceBundle(“资源”)]
......
[可装订]
私有变量_ac:ArrayCollection=新的ArrayCollection([
{icon:OK_icon,view:OK,label:resourceManager.getString('resources','menu.play'),msg:'Odnoklassniki.ru'},
{icon:MR_icon,view:MR,label:resourceManager.getString('resources','menu.play'),msg:'Mail.ru'},
{icon:VK_icon,view:VK,label:resourceManager.getString('resources','menu.play'),msg:'VK.com'},
{icon:FB_icon,view:FB,label:resourceManager.getString('resources','menu.play'),msg:'Facebook.com'},
{icon:GG_icon,view:GG,label:resourceManager.getString('resources','menu.play'),msg:'Google+'}
]);
然而,新代码在运行时爆炸出来,表示
resourceManager
为空

我错过了什么


我应该以某种方式初始化
资源管理器吗?

这只是一个猜测,但似乎有道理:

初始化
ArrayCollection
时,您试图使用
ResourceManager
。这种类型的变量初始化是在创建类时发生的,很可能Flex没有足够的时间来完成它在视图中所做的所有事情(比如初始化它的
resourceManager
属性)


如果在视图分派“creationComplete”事件后填充
ArrayCollection
,则应确保
resourceManager
不再为空。也许您可以尝试在“creationComplete”之前调度的其他一些Flex生命周期事件,如“initialize”,以便更快地完成这项工作……

您的编译器参数中缺少了区域设置代码之间的逗号

如果您想像我一样将您的局部变量放在src文件夹下,您可以添加以下编译器参数

-locale=en_US,fr_FR,zh_CN,pt_BR -allow-source-path-overlap=true -source-path=locale/{locale}

就这样,谢谢你!将其移动到
初始化
阶段,现在可以工作了。更改区域设置时,我是否必须手动更新
\u ac
?我添加了一个带有
click=“resourceManager.localeChain=['de_de']”的按钮
,但是
\u ac
和使用它的列表本身不会更新。“通常情况下”,您不应该这样做。。。我已经很久没有这样做了,所以这可能不正确。我将“normal”放在引号中,因为简单的用例是这样的:
通过这样的绑定,我相信resourceManager会在语言更改时发送一个事件来触发另一个调用以获取字符串。但是,在您的情况下,
ArrayCollection
的元素只是对象(而不是
EventDispatcher
),因此数据提供程序中的元素没有侦听绑定事件,也不知道lang已更改。您可以重构列表,以便数据提供程序包含字符串的资源束ID,而不是字符串本身。然后在项目渲染器中,使用上面我的注释中的绑定表达式,使用适当的字符串填充渲染器中的标签。我不确定这是否会影响性能(可能会影响列表的滚动性能)。我不确定这是否是您的问题,但我发现如果不将编译器参数定义为
-locale=en_US,编译器将无法识别多个参数。