本文内容
- 全球化最佳做法
- 本地化最佳做法
- ASP.NET 应用程序的全球化最佳做法
本节描述在开发全球通用的应用程序时应遵循的最佳做法。
1、全球化最佳做法
-
在内部使应用程序代码成为 Unicode。
-
使用 System.Globalization 命名空间提供的区域性识别类来操作和格式化数据。
- 对于排序,使用 SortKey 类和 CompareInfo 类。
- 对于字符串比较,使用 CompareInfo 类。
- 对于日期和时间格式化,使用 DateTimeFormatInfo 类。
- 对于数字格式化,使用 NumberFormatInfo 类。
- 对于公历和非公历,使用 Calendar 类或特定的日历实现之一。
-
在适当的情况下,使用 System.Globalization.CultureInfo 类提供的区域性属性设置。 使用 CultureInfo.CurrentCulture 属性来执行格式化任务,如日期和时间或数字的格式化。 使用 CultureInfo.CurrentUICulture 属性来检索资源。 请注意,
CurrentCulture
和CurrentUICulture
属性可以通过线程进行设置。 -
通过使用 System.Text 命名空间中的编码类,使应用程序能够与各种编码相互进行数据读写。 不要采用 ASCII 数据。 假定在用户可以输入文本的任何位置都将提供国际字符。 例如,应用程序应接受服务器名、目录、文件名、用户名和 URL 中的国际字符。
-
使用 UTF8Encoding 类时,出于安全原因,应使用此类提供的错误检测功能。 为了打开错误检测功能,请使用具有一个
throwOnInvalidBytes
参数的构造函数来创建该类的一个实例,并将该参数的值设置为true
。 -
尽可能将字符串按整个字符串处理,而不是按一系列个别字符处理。 这在排序或搜索子字符串时尤为重要。 这可以防止与分析组合字符有关的问题。 还可以通过 System.Globalization.StringInfo 类使用文本单元而不是单个字符。
-
使用 System.Drawing 命名空间提供的类来显示文本。
-
为保持操作系统间的一致性,不要允许用户设置重写 CultureInfo。 使用接受
CultureInfo
参数的useUserOverride
构造函数并将此参数设置为false
。 -
在国际操作系统版本上使用国际数据来测试应用程序功能。
-
如果安全决策基于字符串比较或大小写更改操作的结果,请使用不区分区域性的字符串操作。 这种做法可确保结果不会受
CultureInfo.CurrentCulture
值的影响。
2、本地化最佳做法
-
将所有可本地化的资源移动到单独的纯资源 DLL 中。 可本地化的资源包括用户界面元素,如字符串、错误消息、对话框、菜单以及嵌入的对象资源。
-
不要对字符串或用户界面资源进行硬编码。
-
不要将不可本地化的资源放在纯资源 DLL 中。 这会让翻译器感到困惑。
-
不要使用在运行时从串联词组生成的复合字符串。 复合字符串难以本地化,因为它们往往采用英语语法顺序,而此顺序并不适用于所有语言。
-
避免不明确的结构,如“Empty Folder”,因为根据字符串组成部分的语法规则,这些字符串可能产生不同的翻译。 例如,“empty”既可以是一个动词,也可以是一个形容词,因此在诸如意大利语或法语等语言中就可能导致不同的翻译。
-
避免在应用程序中使用包含文本的图像和图标。 本地化这些图像和图标的成本是很大的。
-
允许在用户界面中为字符串长度的扩展保留足够的空间。 在某些语言中,词组所需的空间可能比在其他语言中多 50-75%。
-
使用 System.Resources.ResourceManager 类来根据区域性检索资源。
-
使用 Visual Studio 创建 Windows 窗体对话框,以便可以使用 Windows 窗体资源编辑器 (Winres.exe) 对它们进行本地化。 不要对 Windows 窗体对话框进行手动编码。
-
安排进行专业本地化工作(翻译)。
3、ASP.NET 应用程序的全球化最佳做法
提示
以下最佳做法适用于 ASP.NET Framework 应用。
-
在应用程序中显式设置 CurrentUICulture 和 CurrentCulture 属性。 不要依赖于默认设置。
-
请注意,ASP.NET 应用程序是托管应用程序,因此可以使用与其他托管应用程序相同的类,以根据区域性检索、显示和操作信息。
-
注意在 ASP.NET 中可以指定以下三种编码类型:
requestEncoding
指定了从客户端浏览器接收的编码。responseEncoding
指定了要发送到客户端浏览器的编码。 在大多数情形下,此编码应该与为requestEncoding
指定的编码相同。- fileEncoding 指定了用于 .aspx、.asmx 和 .asax 文件分析的默认编码。
-
指定 ASP.NET 应用程序内以下三个位置中
requestEncoding
、responseEncoding
、fileEncoding
、culture
和uiCulture
属性的值:- 在 Web.config 文件的全球化部分中。 此文件是 ASP.NET 应用程序的外部文件。 有关详细信息,请参阅 <globalization> 元素。
- 在页面指令中。 请注意,当应用程序在页面中时,文件已经被读取。 因此,指定 fileEncoding 和 requestEncoding 为时已晚。 在页面指令中只能指定
uiCulture
、culture
和responseEncoding
。 - 在应用程序代码中以编程方式指定。 该设置可能随请求的不同而不同。 同页面指令一样,如果在访问应用程序的代码时指定
fileEncoding
和requestEncoding
就会为时已晚。 在应用程序代码中只能指定uiCulture
、culture
和responseEncoding
。
-
请注意,uiCulture 值可以设置为浏览器接受的语言。