包 | mx.resources |
接口 | public interface IResourceBundle |
实现器 | ResourceBundle |
本地化涉及三个主要概念:语言环境、资源和资源束。
语言环境指定将应用程序本地化到的语言和国家/地区。例如,语言环境 "en_US"
指定美国英语。(有关详细信息,请参阅 mx.resources.Locale 类。)
资源是与语言环境相关的具名值。例如,应用程序可能具有名为 "OPEN"
的资源,在英语语言环境中该资源的值为 "Open"
,在法语语言环境中该资源的值为 "Ouvrir"
。
资源束是一个具名资源组,其值已针对特定语言环境本地化。资源束由其 bundleName
和 locale
的组合来标识,并且具有包含该资源束资源的名称/值对的 content
对象。
IResourceBundle 接口表示特定的资源束。大多数应用程序只需要使用 IResourceManager。实现此接口的单个 ResourceManager 对象可管理多个资源束(可能对应于多个语言环境),并提供对这些资源束所包含资源的访问。例如,通过调用 resourceManager.getString(bundleName, resourceName)
,可将特定的资源作为 String 来进行检索。通过更改 ResourceManager 的 localeChain
属性,可以更改要搜索其资源值的资源束。
一般无需自行创建资源束;资源束通常是从 *.properties 文件编译的。名为 MyResources.properties 的属性文件可生成 bundleName
为 "MyResources"
的资源束。通常会为每个属性文件生成多个版本,适用于应用程序支持的每个语言环境。
Flex 属性文件与 Java 属性文件相似,不同的是 Flex 属性文件还支持 MXML 的Embed()
和 ClassReference()
指令。这些指令在属性文件中的工作方式和在 CSS 文件中是相同的,都会生成类引用。而且,Flex 属性文件的编码始终假定为 UTF-8。
Flex 框架的资源已针对美国英语("en_US"
语言环境)和日语("ja_JP"
语言环境)进行本地化。框架资源按与框架包相对应的多个束进行组织;如“formatters”束由 mx.formatters 包中的类使用。(还有一个针对多个包使用的资源的“SharedResources”束。)
可以在 Flex SDK 的 frameworks/projects/framework/bundles/{locale}/src 目录中找到框架资源的属性文件(如 formatters.properties)。应用程序通常会根据 Flex 框架链接为预编译的库 framework.swc(位于 frameworks/libs 目录中)。该库中没有资源。相反,框架资源已编译到单独的资源束库中,如 framework_rb.swc。这些库位于 frameworks/locales/{locale} 目录中,应用程序也必须在一个或多个这些库中进行链接。
可以将应用程序自己的资源自由组织到方便使用的束中。如果针对 "en_US"
和 "ja_JP"
之外的语言环境对应用程序进行本地化,应同时本地化这些语言环境所对应的框架属性文件,并且为其编译其他资源束库。
应用程序启动时,ResourceManager 会自动使用编译到应用程序中的资源束进行填充。如果创建代码模块,则默认情况下会将模块的类所需的资源编译到模块中。模块加载到应用程序中时,应用程序尚不具有的任何束都将添加到 ResourceManager。
可以编译其中只有资源的“资源模块”,然后使用 ResourceManager 的 loadResourceModule()
方法加载这些模块。使用资源模块,可以在运行时加载所需资源而不是将资源编译到应用程序中,从而可以支持多个语言环境。
虽然 ResourceManager 通常是用编译到应用程序中的资源束或从模块中加载的资源束填充的,但也可以通过编程方式创建资源束并使用 addResourceBundle()
方法将其添加到 ResourceManager。
另请参见
属性 | 定义方 | ||
---|---|---|---|
bundleName : String [只读 (read-only)] 标识此资源束的名称,如“MyResources”。 | IResourceBundle | ||
content : Object [只读 (read-only)] 包含该资源束中资源的键/值对的对象。 | IResourceBundle | ||
locale : String [只读 (read-only)] 该束的资源已本地化的语言环境。 | IResourceBundle |
bundleName | 属性 |
bundleName:String
[只读 (read-only)]
标识此资源束的名称,如 "MyResources"
。
该只读属性在构造资源束时设置。
从编译的属性文件自动创建的资源束的束名称根据这些文件的名称而创建。例如,名为 MyResources.properties 的属性文件会生成 bundleName
为 "MyResources"
的资源束。
ResourceManager 可以管理具有相同 bundleName
的多个束(只要这些束的 locale
属性的值不同)。
public function get bundleName():String
content | 属性 |
content:Object
[只读 (read-only)] 包含该资源束中资源的键/值对的对象。
通常,应该通过使用 IResourceManager 方法(如 getString()
)来访问资源,而不应直接在资源束中访问资源。但是,如果以编程方式创建自己的资源束,则可以在初始化时指定资源,如下所示:
var rb:IResourceBundle = new ResourceBundle("fr_FR", "MyResources"); rb.content["LANGUAGE"] = "Francais"; rb.content["GREETING"] = "Bonjour";
通过编译属性文件生成资源束时,资源束的资源值类型为 String 或 Class。例如,如果属性文件包含
LANGUAGE=English MINIMUM_AGE=18 ENABLED=true LOGO=Embed("logo.png")
则 LANGUAGE
资源的值为 String "English"
,MINIMUM_AGE
资源的值为 String "18"
,ENABLED
资源的值为 String "true"
,LOGO
资源的值是表示嵌入 PNG 文件的 Class。
可以使用 IResourceManager 方法(如 getInt()
和 getBoolean()
)将资源字符串(如 "18"
和 "true"
)转换成代码所需的类型。
public function get content():Object
locale | 属性 |
locale:String
[只读 (read-only)]
该束的资源已本地化的语言环境。这是一个 String,如用 "en_US"
表示美国英语。
该只读属性在构造资源束时设置。
从编译的属性文件自动创建的资源束的语言环境根据 mxmlc 或 compc 编译器的 -compiler.locale
选项创建。例如,假设使用选项 -compiler.locale=en_US,ja_JP
编译应用程序,并且已经指定 -compiler.source-path=resources/{locale}
以便在 resources/en_US/MyResources.properties 和 resources/ja_JP/MyResources.properties 中查找应用程序的资源。则应用程序将创建两个资源束,资源束的 bundleName
为 "MyResources"
,一个 locale
为 "en_US"
,另一个 locale
为 "ja_JP"
。
public function get locale():String