CLR 全面透彻解析:国际应用程序
2008-12-01 11:52:36 来源:WEB开发网一直以来都不容回避的一个问题是如果数据依赖于自定义的文化或操作系统的文化,则该数据可能无法使用。但是如果所有数据都来自操作系统,单一 Silverlight 应用程序很可能会遇到不同的数据。确保您的目标操作系统支持您要使用的 UI 文化,还要确保当所请求的文化不存在时应用程序也能以合理的方式运行,这是一种理想的状态。
文化数据已被融入到 .NET Framework 中,因此很难在数据发生变更时及时得到更新。这将导致数据可能会过期。还可能会导致本机应用程序与托管应用程序显示的数据不同。在 Silverlight 中,您可以使这二者保持一致,应用程序可以充分利用更新的操作系统信息。
使用操作系统数据还允许您充分利用更多其他信息。例如,在桌面版本的 .NET Framework 中,每个 CultureInfo 都有单一的父项文化,要查询资源,所有 ResourceManager 需要做的只是遍历一遍父链。
假如有一个应用程序,其中包含 de-DE 资源和 fr-FR 资源。现在我们假设有一个用户使用 es-ES 作为主文化,但他也懂得德语,可以阅读 de-DE 资源。ResourceManager 会退回到固定文化,即使存在用户可以理解的资源。如今的大多数操作系统都允许用户指定多种语言首选项。在 Silverlight 中,我们修改了 ResourceManager 以便在退回到固定文化之前遵循这些首选项。
Silverlight 在字符串比较方面还包含一些与安全性而非大小相关的差异。在桌面 Framework 中,大多数涉及字符串比较的操作都使用 CurrentCulture 作为默认设置。而在 Silverlight 中,涉及部分匹配的操作(包括 String.IndexOf 和 String.StartsWith)现在默认使用序数比较。Compare 和 CompareTo 默认仍使用 CurrentCulture,但是对于所需的特定行为,您应认真考虑使用的是否是正确的重载。ToUpper 和 ToLower 现在默认使用 InvariantCulture。Equality 仍使用序数比较。
请将您想询问的问题和提出的意见发送至 clrinout@microsoft.com。
Melitta Andersen 是 CLR 基类库团队的项目经理。她主要负责本专栏中详述的有关数字、集合以及某些基础结构的工作。
更多精彩
赞助商链接