mx.resources
接口public interface IResourceManager extends IEventDispatcher
实现器 ResourceManagerImpl

IResourceManager 接口的 API 提供 Flex 应用程序的本地化支持。

本地化涉及三个主要概念:语言环境、资源和资源束。

语言环境指定将应用程序本地化到的语言和国家/地区。例如,语言环境 "en_US" 指定美国英语。(有关详细信息,请参阅 mx.resources.Locale 类。)

资源是与语言环境相关的具名值。例如,应用程序可能具有名为 "OPEN" 的资源,在英语语言环境中该资源的值为 "Open",在法语语言环境中该资源的值为 "Ouvrir"

资源束是一个具名资源组,其值已针对特定语言环境本地化。资源束由其 bundleNamelocale 的组合来标识,并且具有包含该束资源的名称/值对的 content 对象。有关从属性文件创建资源束的典型方式的信息,请参阅 mx.resources.IResourceBundle 文档。

实现 IResourceManager 接口的单个 ResourceManager 对象可管理多个资源束(可能对应于多个语言环境),并提供对这些资源束所包含资源的访问。。例如,通过调用 resourceManager.getString(bundleName, resourceName),可将特定的资源作为 String 来进行检索。

所有扩展 UIComponent、Formatter 或 Validator 的类都具有 resourceManager 属性,通过该属性提供对实现此接口的对象的引用。其他类可以调用 ResourceManager.getInstance() 来获取该对象。

资源检索方法(如 getString())在 localeChain 属性指定的语言环境中搜索资源。通过更改该属性,可以使应用程序瞬间使用另一种资源,如使用日语资源而不是英语资源。

应用程序启动时,ResourceManager 会自动使用编译到应用程序中的资源束进行填充。如果创建代码模块,则默认情况下会将模块的类所需的资源编译到模块中。模块加载到应用程序中时,应用程序尚不具有的任何束都将添加到 ResourceManager。

可以编译其中仅具有资源的“资源模块”,然后使用 IResourceManager 的loadResourceModule() 方法加载这些模块。使用资源模块,可以在运行时加载所需资源而不是将资源编译到应用程序中,从而可以支持多个语言环境。

虽然 ResourceManager 通常是用编译到应用程序中的资源束或从模块中加载的资源束填充的,但也可以通过编程方式创建资源束并使用 addResourceBundle() 方法将其添加到 ResourceManager。

另请参见

mx.resources.ResourceManager
mx.resources.IResourceBundle
mx.resources.ResourceBundle


公共属性
 属性定义方
  localeChain : Array
(抽样开始)语言环境字符串(如 [ "en_US" ]) Array,指定要搜索资源的一个或多个语言环境。
IResourceManager
公共方法
 方法定义方
 Inherited
addEventListener(type:String, listener:Function, useCapture:Boolean = false, priority:int = 0, useWeakReference:Boolean = false):void
使用 EventDispatcher 对象注册事件侦听器对象,以使侦听器能够接收事件通知。
IEventDispatcher
  
将指定的 ResourceBundle 添加到 ResourceManager,以便可通过 ResourceManager 方法(如 getString())访问其资源。
IResourceManager
 Inherited
将事件调度到事件流中。
IEventDispatcher
  
搜索 localeChain 中的语言环境以查找指定的资源,并返回所找到的第一个资源束。
IResourceManager
  
getBoolean(bundleName:String, resourceName:String, locale:String = null):Boolean
获取指定资源的值作为 Boolean。
IResourceManager
  
返回一个字符串数组,指定所有位于 ResourceManager 中并且属于指定语言环境的 ResourceBundle 对象的束名称。
IResourceManager
  
getClass(bundleName:String, resourceName:String, locale:String = null):Class
获取指定资源的值作为 Class。
IResourceManager
  
getInt(bundleName:String, resourceName:String, locale:String = null):int
获取指定资源的值作为 int。
IResourceManager
  
返回一个字符串数组,指定 ResourceBundle 对象位于 ResourceManager 中的所有语言环境。
IResourceManager
  
getNumber(bundleName:String, resourceName:String, locale:String = null):Number
获取指定资源的值作为 Number。
IResourceManager
  
getObject(bundleName:String, resourceName:String, locale:String = null):*
获取指定资源的值作为 Object。
IResourceManager
  
返回 String 的一个 Array,它指定在 ResourceManager 中存在 ResourceBundle 对象的所有语言环境,使用由 Capabilities.language 或 Capabilities.languages 报告的用户首选项进行排序。
IResourceManager
  
返回之前使用 addResourceBundle() 添加到 ResourceManager 的具有指定语言环境和束名称的 ResourceBundle。
IResourceManager
  
getString(bundleName:String, resourceName:String, parameters:Array = null, locale:String = null):String
使用指定的值替换占位符之后,获取指定资源的值作为 String。
IResourceManager
  
getStringArray(bundleName:String, resourceName:String, locale:String = null):Array
获取指定资源的值作为 String 数组。
IResourceManager
  
getUint(bundleName:String, resourceName:String, locale:String = null):uint
获取指定资源的值作为 uint。
IResourceManager
 Inherited
检查 EventDispatcher 对象是否为特定事件类型注册了任何侦听器。
IEventDispatcher
  
仅由实现 IFlexModuleFactory 的类使用。
IResourceManager
  
installCompiledResourceBundles(applicationDomain:ApplicationDomain, locales:Array, bundleNames:Array):void
仅由实现 IFlexModuleFactory 的类使用。
IResourceManager
  
loadResourceModule(url:String, update:Boolean = true, applicationDomain:ApplicationDomain = null, securityDomain:SecurityDomain = null):IEventDispatcher
开始加载包含资源束的资源模块。
IResourceManager
 Inherited
removeEventListener(type:String, listener:Function, useCapture:Boolean = false):void
从 EventDispatcher 对象中删除侦听器。
IEventDispatcher
  
从 ResourceManager 删除指定的 ResourceBundle,以便不再能通过 ResourceManager 方法(如 getString())访问其资源。
IResourceManager
  
从 ResourceManager 删除指定的语言环境所对应的全部 ResourceBundle,以便不再能通过 ResourceManager 方法(如 getString())访问其资源。
IResourceManager
  
此方法尚未实现。
IResourceManager
  
从 ResourceManager 调度 change 事件。
IResourceManager
 Inherited
检查是否用此 EventDispatcher 对象或其任何始祖为指定事件类型注册了事件侦听器。
IEventDispatcher
属性详细信息
localeChain属性
localeChain:Array  [读写]

语言环境字符串(如 [ "en_US" ])数组,指定要搜索资源的一个或多个语言环境。

通过调用 ResourceManager 方法 getObject()getString()getStringArray()getNumber()getInt()getUint()getBoolean()getClass() 来获取资源值时,指定的是束名称和资源名称,而不是语言环境。ResourceManager 从 localeChain 中的第一个语言环境开始查找,查找该语言环境中具有指定束名称的 ResourceBundle。如果存在这样的 ResourceBundle 并且其中存在指定的资源,则会返回该资源的值。否则,ResourceManager 将继续查找 localeChain 中的其他语言环境。

通过此方案,可以使用不必包含完整一套本地化资源的语言环境。例如,如果要将应用程序本地化以便用于印第安英语而不是美国英语,只需要提供拼写或用法与美国英语不同的印第安英语的 en_IN 语言环境资源,然后将 localeChain 属性设置为 [ "en_IN", "en_US" ] 即可。

很多框架类都假定它们始终可从某些语言环境获取所需资源;如果无法获取,这些框架类将引发错误。因此,必须确保 localeChain 始终包含完整的一套资源。除非已完成所有框架资源和自己的应用程序资源的全部本地化,否则可以将 "en_US" 语言环境保留在 localeChain 的末尾来确保此要求得到满足。

设置此属性将导致 ResourceManager 调度 "change" 事件。



实现
    public function get localeChain():Array
    public function set localeChain(value:Array):void
方法详细信息
addResourceBundle()方法
public function addResourceBundle(resourceBundle:IResourceBundle):void

将指定的 ResourceBundle 添加到 ResourceManager,以便可通过 ResourceManager 方法(如 getString())访问其资源。

参数

resourceBundle:IResourceBundle — 要添加的资源束。

findResourceBundleWithResource()方法 
public function findResourceBundleWithResource(bundleName:String, resourceName:String):IResourceBundle

搜索 localeChain 中的语言环境以查找指定的资源,并返回所找到的第一个资源束。如果未找到该资源,则此方法将返回 null

参数

bundleName:String — 束名称,如 "MyResources"
 
resourceName:String — 资源束中资源的名称。

返回
IResourceBundlelocaleChain 中包含指定资源的第一个 ResourceBundle,或者返回 null
getBoolean()方法 
public function getBoolean(bundleName:String, resourceName:String, locale:String = null):Boolean

获取指定资源的值作为 Boolean。

此方法首先调用 getString()并将结果转换为小写字符。然后,如果结果为 "true",则返回 true;否则返回 false

如果未找到指定的资源,则此方法将返回 false

参数

bundleName:String — 资源束的名称。
 
resourceName:String — 资源束中资源的名称。
 
locale:String (default = null) — 要用于查找的特定语言环境,或者使用 null 来搜索 localeChain 中的所有语言环境。该参数是可选的,默认值为 null;应该很少需要指定该参数。

返回
Boolean — 作为 Boolean 的资源值,或者 false(如果未找到该值)。
getBundleNamesForLocale()方法 
public function getBundleNamesForLocale(locale:String):Array

返回一个字符串数组,指定所有位于 ResourceManager 中并且属于指定语言环境的 ResourceBundle 对象的束名称。

未指定该数组中的束名称顺序。

参数

locale:String — 语言环境字符串,如 "en_US"

返回
Array — 束名称数组。

另请参见

getClass()方法 
public function getClass(bundleName:String, resourceName:String, locale:String = null):Class

获取指定资源的值作为 Class。

此方法调用 getObject() 并使用 as 运算符将其强制为 Class 类型。如果资源值不是类引用,则结果将为 null。如果已在属性文件中编写如下行:

IMAGE=Embed("image.jpg")
      BUTTON_SKIN=ClassReference("skins.ButtonSkin_en_US")

并且想要获得 Embed()ClassReference() 指令生成的类,则该方法很有用。

如果未找到指定的资源,则此方法将返回 null

参数

bundleName:String — 资源束的名称。
 
resourceName:String — 资源束中资源的名称。
 
locale:String (default = null) — 要用于查找的特定语言环境,或者使用 null 来搜索 localeChain 中的所有语言环境。该参数是可选的,默认值为 null;应该很少需要指定该参数。

返回
Class — 作为 Class 的资源值,或者 null(如果未找到该值)。
getInt()方法 
public function getInt(bundleName:String, resourceName:String, locale:String = null):int

获取指定资源的值作为 int。

此方法调用 getObject()并将结果转换为 int。如果已在属性文件中编写如下行:

MINIMUM=5

并且想要获取值 5 而不是 "5",则该方法很有用。

如果未找到指定的资源,则此方法将返回 0。

参数

bundleName:String — 资源束的名称。
 
resourceName:String — 资源束中资源的名称。
 
locale:String (default = null) — 要用于查找的特定语言环境,或者使用 null 来搜索 localeChain 中的所有语言环境。该参数是可选的,默认值为 null;应该很少需要指定该参数。

返回
int — 作为 int 的资源值,或者 0(如果未找到该值)。
getLocales()方法 
public function getLocales():Array

返回一个字符串数组,指定 ResourceBundle 对象位于 ResourceManager 中的所有语言环境。

未指定该数组中的语言环境顺序。

返回
Array — 语言环境字符串数组。
getNumber()方法 
public function getNumber(bundleName:String, resourceName:String, locale:String = null):Number

获取指定资源的值作为 Number。

此方法调用 getObject()并将结果转换为数字。如果已在属性文件中编写如下行:

LONGITUDE=170.3

并且想要获取值 170.3 而不是 "170.3",则该方法很有用。

如果未找到指定的资源,则此方法将返回 NaN

参数

bundleName:String — 资源束的名称。
 
resourceName:String — 资源束中资源的名称。
 
locale:String (default = null) — 要用于查找的特定语言环境,或者使用 null 来搜索 localeChain 中的所有语言环境。该参数是可选的,默认值为 null;应该很少需要指定该参数。

返回
Number — 作为 Number 的资源值,或者 NaN(如果未找到该值)。
getObject()方法 
public function getObject(bundleName:String, resourceName:String, locale:String = null):*

获取指定资源的值作为 Object。

返回与 ResourceBundle 的 content 对象中存储的值完全相同的值,不经过任何转换。如果资源是从属性文件中编译的,则 content 对象中的资源值始终为字符串,除非使用 Embed()ClassReference() 指令(在这种情况下资源值为类)。可使用 getString()getStringArray()getNumber()getInt()getUint()getBoolean()getClass() 方法将该值转换为更多特定类型。

如果未找到指定的资源,则此方法将返回 undefined

参数

bundleName:String — 资源束的名称。
 
resourceName:String — 资源束中资源的名称。
 
locale:String (default = null) — 要用于查找的特定语言环境,或者使用 null 来搜索 localeChain 中的所有语言环境。该参数是可选的,默认值为 null;应该很少需要指定该参数。

返回
* — 与在 content 对象中存储的值完全相同的资源值,或者 undefined(如果未找到资源)。
getPreferredLocaleChain()方法 
public function getPreferredLocaleChain():Array

返回 String 的一个 Array,它指定在 ResourceManager 中存在 ResourceBundle 对象的所有语言环境,使用由 Capabilities.languageCapabilities.languages 报告的用户首选项进行排序。

返回
Array — 语言环境字符串数组。
getResourceBundle()方法 
public function getResourceBundle(locale:String, bundleName:String):IResourceBundle

返回之前使用 addResourceBundle() 添加到 ResourceManager 的具有指定 localebundleName 的 ResourceBundle。如果不存在这样的 ResourceBundle,则此方法返回 null

参数

locale:String — 语言环境字符串,如 "en_US"
 
bundleName:String — 束名称,如 "MyResources"

返回
IResourceBundle — 具有指定 localebundleName 的 ResourceBundle,如果不存在则返回 null

另请参见

getString()方法 
public function getString(bundleName:String, resourceName:String, parameters:Array = null, locale:String = null):String

使用指定的值替换占位符之后,获取指定资源的值作为 String。

此方法调用 getObject()并将结果转换为字符串。

如果将 parameters 数组传递给此方法,则数组中包含的参数会转换成字符串,然后在返回前在字符串中按顺序替代占位符 "{0}""{1}" 等。

如果未找到指定的资源,则此方法将返回 null

参数

bundleName:String — 资源束的名称。
 
resourceName:String — 资源束中资源的名称。
 
parameters:Array (default = null) — 替换占位符的参数的数组。在替换每个参数之前都会使用 toString() 方法将其转换为字符串。
 
locale:String (default = null) — 要用于查找的特定语言环境,或者使用 null 来搜索 localeChain 中的所有语言环境。该参数是可选的,默认值为 null;应该很少需要指定该参数。

返回
String — 作为 String 的资源值,或者 null(如果未找到该值)。
getStringArray()方法 
public function getStringArray(bundleName:String, resourceName:String, locale:String = null):Array

获取指定资源的值作为 String 数组。

此方法假定资源值是包含用逗号分隔的项目列表的字符串。它将调用 getString() 方法,按逗号位置将字符串拆分成多项,并去掉每项前后的空格。如果已在属性文件中编写如下行:

COUNTRIES=India, China, Japan

并且想要获取值 [ "India", "China", "Japan" ] 而不是值 "India, China, Japan",则该方法很有用。

如果未找到指定的资源,则此方法将返回 null

参数

bundleName:String — 资源束的名称。
 
resourceName:String — 资源束中资源的名称。
 
locale:String (default = null) — 要用于查找的特定语言环境,或者使用 null 来搜索 localeChain 中的所有语言环境。该参数是可选的,默认值为 null;应该很少需要指定该参数。

返回
Array — 作为 String 数组的资源值,或者 null(如果未找到该值)。
getUint()方法 
public function getUint(bundleName:String, resourceName:String, locale:String = null):uint

获取指定资源的值作为 uint。

此方法调用 getObject() 方法并将结果转换为 uint。如果已在属性文件中编写如下行:

MINIMUM=5

并且想要获取值 5 而不是 "5",则该方法很有用。

如果未找到指定的资源,则此方法将返回 0。

参数

bundleName:String — 资源束的名称。
 
resourceName:String — 资源束中资源的名称。
 
locale:String (default = null) — 要用于查找的特定语言环境,或者使用 null 来搜索 localeChain 中的所有语言环境。该参数是可选的,默认值为 null;应该很少需要指定该参数。

返回
uint — 作为 uint 的资源值,或者 0(如果未找到该值)。
initializeLocaleChain()方法 
public function initializeLocaleChain(compiledLocales:Array):void

仅由实现 IFlexModuleFactory 的类使用。

参数

compiledLocales:Array

installCompiledResourceBundles()方法 
public function installCompiledResourceBundles(applicationDomain:ApplicationDomain, locales:Array, bundleNames:Array):void

仅由实现 IFlexModuleFactory 的类使用。

参数

applicationDomain:ApplicationDomain
 
locales:Array
 
bundleNames:Array

loadResourceModule()方法 
public function loadResourceModule(url:String, update:Boolean = true, applicationDomain:ApplicationDomain = null, securityDomain:SecurityDomain = null):IEventDispatcher

开始加载包含资源束的资源模块。

每次调用此方法都会返回一个新的 event-dispatching 对象,可使用该对象了解加载的进度以及加载是成功完成还是产生了错误。该对象调度 ResourceEvent.PROGRESSResourceEvent.COMPLETEResourceEvent.ERROR 事件。

加载模块之后,资源束将添加到 ResourceManager,但 localeChain 保持不变。如果 update 参数为 true,将调用 update() 方法。

参数

url:String — 用来加载资源模块的 URL。
 
update:Boolean (default = true) — 完成模块加载时是否调用 update() 方法。
 
applicationDomain:ApplicationDomain (default = null) — 传递给加载资源模块的 IModuleInfo 类的 load() 方法的 ApplicationDomain。该参数可选,默认值为 null
 
securityDomain:SecurityDomain (default = null) — 传递给加载资源模块的 IModuleInfo 类的 load() 方法的 SecurityDomain。该参数可选,默认值为 null

返回
IEventDispatcher — 与该特定加载操作相关联的对象,用于调度 ResourceEvent.PROGRESSResourceEvent.COMPLETEResourceEvent.ERROR

另请参见

removeResourceBundle()方法 
public function removeResourceBundle(locale:String, bundleName:String):void

从 ResourceManager 删除指定的 ResourceBundle,以便不再能通过 ResourceManager 方法(如 getString())访问其资源。

参数

locale:String — 语言环境字符串,如 "en_US"
 
bundleName:String — 束名称,如 "MyResources"

另请参见

removeResourceBundlesForLocale()方法 
public function removeResourceBundlesForLocale(locale:String):void

从 ResourceManager 删除指定的语言环境所对应的全部 ResourceBundle,以便不再能通过 ResourceManager 方法(如 getString())访问其资源。

参数

locale:String — 语言环境字符串,如 "en_US"

另请参见

unloadResourceModule()方法 
public function unloadResourceModule(url:String, update:Boolean = true):void

此方法尚未实现。

参数

url:String
 
update:Boolean (default = true)

update()方法 
public function update():void

从 ResourceManager 调度 change 事件。

如果涉及 ResourceManager 方法 getObject()getString()getStringArray()getNumber()getInt()getUint()getBoolean()getClass(),则会导致重新计算绑定的表达式。

该操作还会引起执行 UIComponent、Formatter 或 Validator 的 resourcesChanged() 方法。很多组件通过实现此方法来根据最新资源更新其状态。