2012-03-27 39 views
0

我的Flex应用程序中的一些地方,我使用ResourceManager.getInstance()。getString和其他地方使用mxml @Resource标记来检索从ResourceManager动态加载的资源属性。为什么flex资源标签不支持本地化?

resourceManager.loadResourceModule(resourceModuleURL);

但从ResourceManager.getInstance()。唯一的getString字符串显示基于正确的语言环境值,而@Resource标签只能从EN_US资源返回值。我想这是因为en_US是我编译的(-locale = en_US)。

所以我想知道如果我使用动态加载的资源,我必须放弃@Resource标记并使用ResourceManager.getInstance()。getString?

谢谢。

回答

1

当你编译,您需要包含逗号分隔的语言环境的列表:

-locale=en_US,es_ES

这应该允许再用于本地化@Resource。在帮助文档中

更多细节:

http://help.adobe.com/en_US/flex/using/WS2db454920e96a9e51e63e3d11c0bf69084-7f3a.html#WS2db454920e96a9e51e63e3d11c0bf6119c-7fef

摘录:

为了能够在运行时更改语言环境,而无需使用资源 模块,编译所有可用的语言环境通过将它们作为语言环境选项的一部分包含进编译时的 应用程序中。此编译器选项使用逗号分隔的区域设置列表。如果添加 第二区域,如es_ES,以下更改区域选项来 :

-locale=en_US,es_ES

编辑:

要在语言环境中分离到单独的SWF文件,请尝试创建资源模块。下面是摘录:

资源模块SWF文件,从您的应用程序SWF文件 分开,包含单一语言环境资源束。您的 应用程序可以在其启动时预加载一个或多个资源模块,即 ,然后显示其用户界面。它也可以稍后加载资源 模块,例如响应于用户选择新的区域设置。 ResourceManager与所有资源包交互相同,它管理的包最初是编译到 应用程序还是从资源模块加载。

它们非常适合用于本地化,因为您可以将每种语言分隔成不同的swf文件。

资源模块本地化比 编译时的资源更好的办法,因为你是外化可以在运行时加载的资源模块 。这会创建一个较小的应用程序SWF 文件,但随后需要为您使用的每个 资源模块加载单独的SWF文件。如果您将区域设置资源编译到应用程序中,结果可能是网络请求的数量增加,并且聚合的应用程序大小大于 。但是,如果 您有许多区域设置,则从长远来看,分别加载它们应节省 资源。

这里的解释资源模块的链接: http://help.adobe.com/en_US/flex/using/WS2db454920e96a9e51e63e3d11c0bf69084-7f3c.html

我的建议是创建资源模块需要本地化的主权财富基金的使用,然后要么将它们编译到应用程序在编译时,或动态在运行时引导每个ResourceModule,以便您可以访问它。

+0

谢谢,但它意味着将资源文件放在一个swf文件中。出于某种原因,我不能这样做,我仍然需要动态加载资源文件。任何建议? – BlueDolphin 2012-03-28 00:31:46

+0

为什么你不使用资源模块?编辑我的答案解释。 – 2012-03-28 11:40:11

相关问题