面向世界应用程序开发的最佳习惯

这个部分描述了从事面向世界应用程序开发时的最佳习惯。

全局化的最佳习惯

  1. 让你的应用程序内部支持 Unicode。
  2. 使用由 System.Globalization 命名空间所提供的明确文化类来操作与格式化数据。
    • 为了排序,使用 SortKey 类与 CompareInfo 类。
    • 为了字符串比较,使用 CompareInfo 类。
    • 为了数据与时间格式化,使用 DateTimeFormatInfo 类。
    • 为了数字格式化,使用 NumberFormatInfo 类。
    • 为了 Gregorian 与非 Gregorian 日历,使用 Calendar 类或者特定的 Calendar 实现之一。
  3. 在适当的情况下使用由 System.Globalization.CultrueInfo 类所提供的文化属性设置。为格式化任务使用 CultrueInfo.CurrentCultrue 属性,比如日期与时间或者数字格式化。使用 CultrueInfo.CurrentUICultrue 属性来获取资源。注意每个线程都可以设置 CurrentCultrue 与 CurrentUICultrue 属性。
  4. 允许你的应用程序使用 System.Text 命名空间中的编码类从多种编码中读取与写入数据。不要假设 ASCII 数据。假设国际化字符将被提供给任何位置的可以输入文字的用户。例如,接受服务器名称、目录、文件名,用户名和 URL 的国际化字符。
  5. 当使用 UTF8Encoding 类时,出于安全原因,建议你使用由这个类所提供的错误检测特征。要开启错误检测特征,就要使用获取一个 throwOnInvalidBytes 参数并且把 throwOnInvalidBytes 的值设置成 true 的构造器来创建该类的实例。
  6. 只要有可能,把字符串作为整个字符串来处理,替代作为单独的字符序列。这在排序或者搜索子字符串时是特别重要的。这将防止程序与组合字符处理时产生关联。
  7. 使用由 System.Drawing 命名空间所提供的类来显示文字。
  8. 出于跨越操作系统的一致性,不要允许用户设置来覆盖 CultrueInfo。使用接受一个 useUserOverride 参数并且把它设置成 false 的 CultrueInfo 构造器。
  9. 测试你的应用程序在国际化操作系统版本中的功能,使用国际化的数据。
  10. 如果一种安全决定基于字符串的比较结果或者大小写变化操作,就明确地指定 CultrueInfo.InvariantCultrue 属性来完成与文化无关的操作。这种习惯确保了结果不会受到 CultrueInfo.CurrentCultrue 的值的影响。关于演示文化无关的字符串比较如何才可以引起不一致的结果的范例,参考[自定义大小写映射与排序规则]。

本地化的最佳习惯

  1. 移动所有本地化资源到单独的纯资源 DLL。可本地化的资源包括了用户界面元素,比如字符串、错误消息、对话框,菜单与被嵌入的对象资源。
  2. 不要硬编码字符串或者用户界面资源。
  3. 不要把不可本地化的资源放到纯资源 DLL 中。这会导致翻译器的混淆。
  4. 不要使用在运行时从被连接短语中所建立的合成字符串。合成的字符串是难以本地化的,因为它们经常不适合所有语言的 English 文法顺序。
  5. 避免不明确的构造器,比如[Empty Folder]在字符串组件的文法角色中可以被翻译成不同的意思。例如[Empty]既可以是一个动词又可以是一个形容词,并且这可以导致在不同语言(比如 Italian 或者 French)中被翻译成不同的意思。
  6. 避免在你的应用程序中使用包含文字的图片与图标。它们的本地化是昂贵的。
  7. 允许为字符串的长度留出大量的空间来扩展用户界面。在一些语言中,短语可以需要 50%-75% 或者更多的空间。
  8. 使用 System.Resources.ResourceManager 类来获取基于文化的资源。
  9. 使用 Microsoft Visual Studio 2005 来创建 Windows Forms 对话框,因此它们可以使用 Windows Forms Resource Editor(Winres.exe)而被本地化。不要手工编码 Windows Forms 对话框。
  10. 安排专业的本地化(翻译)。
  11. 关于资源的创建与本地化的完整描述,参考[应用程序中的资源]与[使用 .NET Framework SDK 指南的本地化]。

ASP.NET 应用程序全局化的最佳习惯

  1. 在你的应用程序中明确地设置 CurrentUICultrue 与 CurrentCultrue 属性。不要依赖于默认值。
  2. 注意 ASP.NET 应用程序是被管理的应用程序并且因此可以与其他被管理的应用程序一样使用相同的类来获取,显示并且处理基于文化的信息。
  3. 明白你可以在 ASP.NET 中指定下列三种编码:
    • 特性 requestEncoding 指定从客户端的浏览器中所接收到的编码。
    • 特性 responseEncoding 指定发送到客户端浏览器的编码。在多数情况下,这应该与 requestEncoding 是相同的。
    • 特性 fileEncoding 为 .aspx,.asmx 与 .asax 文件的解析而指定默认编码。
  4. 在 ASP.NET 应用程序的下列三个位置指定 requestEncoding、responseEncoding、fileEncoding,cultrue 与 uiCultrue 的值:
    • 在 Web.config 文件的全局化部分。这是 ASP.NET 应用程序的额外文件。关于更多信息,参考[<globalization> 元素]。
    • 在页面指令中。注意当应用程序在页面中时,该文件就已经被读取了。因此,指定 fileEncoding 与 requestEncoding 已经太迟了。只有 uiCultrue,Cultrue 与 responseEncoding 才可以在页面指令中被指定。
    • 应用程序代码中的编程。这种设置可以改变每个请求。与页面指令一样,当到达应用程序代码的时候指定 fileEncoding 与 requestEncoding 也太迟了。只有 uiCultrue,Cultrue 与 responseEncoding 才可以在应用程序代码中被指定。
  5. 注意 uiCultrue 可以设置成浏览器所接受的语言。关于详细内容,请参考[ASP.NET 快速开始]的资源范例。

你可能感兴趣的:(应用程序)