CLR 全面透彻解析:国际应用程序
2008-12-01 11:52:36 来源:WEB开发网ResourceReader 类允许您枚举资源文件中成对的名称/值。但是,最常见的工作通常是针对某一特定文化来查找特定的资源。这是通过 ResourceManager 类实现的。您可以使用 GetObject 和 GetString 方法访问单独的资源,或者也可以使用 GetResourceSet 方法将某一特定文化的所有资源加载到 Hashtable 中。
如同全球化信息一样,资源也是按文化存储的。而就像可以使用默认文化来配置全球化一样,ResourceManager 也可以在其默认文化中使用 CurrentCulture.CurrentUICulture。同样,这是当前线程的属性。CurrentCulture 和 CurrentUICulture 通常是相一致的,但它们管理的对象不同。CurrentCulture 控制数据的格式化,而 CurrentUICulture 可确定加载的资源。
Framework 包含 System.Globalization 中的类所需的大部分数据,而应用程序控制着它自己的资源。如果应用程序未本地化为某种特定的文化,这些资源在该文化中将不可用。但一般而言,您不希望在查询资源时出错。这就是首先要在主程序集中包括中性资源的原因 — 应用程序始终都可以返回一组资源。
CultureInfo 的一个未被提及的属性是 Parent 属性。文化信息按层次结构排列,其中中性文化(即未与特定区域相关联的文化)是与某一特定区域相关联的文化的父项。例如,en-US、en-CA 和 en-UK 的父项是中性文化 en。如果某种文化的资源未找到,ResourceManager 会探查父链,直到找到一种为止。这最后将以 InvariantCulture 结束(InvariantCulture 是嵌入在主程序集中的资源)。
利用文化的层次结构,您可以将公共资源从特定文化中提取出来并嵌入到中性文化中。让我们举例来说明,假如我打算将我的应用程序本地化为 en-US、en-CA 和 en-UK。除了少许差异外,这些文化所需的许多资源可能都是相同的。在这种情况下,我可以将所有公共资源存储在一个文件中用于中性文化 en,而仅将差异内容放在资源文件中用于特定文化。
更多精彩
赞助商链接