本主题介绍在为全球市场编写 Windows Presentation Foundation (WPF) 应用程序时应注意的问题。 .NET 全球化编程元素在 System.Globalization 命名空间中定义。
XAML 全球化
可扩展应用程序标记语言(XAML)基于 XML,并利用 XML 规范中定义的全球化支持。 以下部分介绍应注意的一些 XAML 功能。
字符引用
字符引用以十进制或十六进制形式提供它所表示的特定 Unicode 字符的 UTF16 代码单元。 以下示例显示了科普特大写字母HORI或“Ϩ”的十进制字符引用:
Ϩ
下面的示例演示十六进制字符引用。 请注意,它在十六进制数前面有一个 x 。
Ϩ
编码
XAML 支持的编码为 ASCII、Unicode UTF-16 和 UTF-8。 编码语句位于 XAML 文档的开头。 如果不存在编码属性且没有字节顺序,则分析器默认为 UTF-8。 UTF-8 和 UTF-16 是首选编码。 不支持 UTF-7。 以下示例演示如何在 XAML 文件中指定 UTF-8 编码。
?xml encoding="UTF-8"?
语言属性
XAML 使用 xml:lang 来表示元素的语言属性。 若要利用 CultureInfo 类,语言属性值必须是 CultureInfo 预定义的文化名称之一。 xml:lang 在元素树中可继承(由 XML 规则,不一定是因为依赖属性继承)并且其默认值为空字符串(如果未显式分配)。
语言属性对于指定区域语言非常有用。 例如,法语在法国、魁北克、比利时和瑞士有不同的拼写、词汇和发音。 此外,中文、日语和朝鲜语在 Unicode 中共享码位,但象形形状不同,它们使用完全不同的字体。
以下可扩展应用程序标记语言(XAML)示例使用 fr-CA
语言属性指定加拿大法语。
<TextBlock xml:lang="fr-CA">Découvrir la France</TextBlock>
Unicode
XAML 支持所有 Unicode 功能,包括代理项。 只要字符集可以映射到 Unicode,就受支持。 例如,GB18030引入了映射到中文、日语和朝鲜语(CFK)扩展 A 和 B 和代理项对的某些字符,因此完全支持它。 WPF 应用程序可以处理字符串,而不需要了解它们是否具有代理对或组合字符。
使用 XAML 设计国际用户界面
本部分介绍编写应用程序时应考虑的用户界面(UI)功能。
国际文本
WPF 包括对所有 Microsoft .NET Framework 支持的书写系统的内置处理。
目前支持以下脚本:
阿拉伯语
孟加拉语
Devanagari
西里尔文
希腊语
古吉拉特语
锡克教文
希伯来语
表意文字脚本
卡纳拉语
老挝语
拉丁语
马拉雅拉姆语
蒙古语
奥迪亚语
叙利亚语
泰米尔语
泰卢固语
它拿字母
泰语*
藏语
在此版本中,支持显示和编辑泰文文本;不支持断词功能。
当前不支持以下脚本:
高棉语
韩国老朝鲜文
缅甸
僧伽罗语
所有写入系统引擎都支持 OpenType 字体。 OpenType 字体可以包括 OpenType 布局表,使字体创建者能够设计更好的国际和高端版式字体。 OpenType 字体布局表包含有关字形替换、字形定位、对齐和基线定位的信息,使文本处理应用程序能够改进文本布局。
OpenType 字体允许使用 Unicode 编码处理大型字形集。 这种编码不仅支持广泛的国际应用,还支持字体字形的变体。
WPF 文本呈现由 Microsoft 的 ClearType 子像素技术提供支持,该技术支持分辨率独立。 这显著提高了易读性,并提供了为所有脚本支持高质量杂志样式文档的能力。
国际布局
WPF 提供了一种非常便捷的方法,用于支持水平布局、双向布局和垂直布局。 在演示文稿框架中, FlowDirection 该属性可用于定义布局。 流方向模式为:
LeftToRight - 拉丁语、东亚等的水平布局。
RightToLeft - 阿拉伯语、希伯来语等双向。
开发可本地化的应用程序
编写应用程序以供全局使用时,应记住应用程序必须可本地化。 以下主题指出了要考虑的事项。
多语言用户界面
多语言用户界面(MUI)是Microsoft支持将 UI 从一种语言切换到另一种语言。 WPF 应用程序使用程序集模型来支持 MUI。 一个应用程序包含语言中立程序集以及语言相关的卫星资源程序集。 入口点是主程序集内的托管 .EXE。 WPF 资源加载程序利用框架的资源管理器来支持资源查找和回退。 多种语言的附属程序集与同一主程序集协同工作。 加载的资源程序集取决于 CurrentUICulture 当前线程。
可本地化用户界面
WPF 应用程序使用 XAML 定义其 UI。 XAML 允许开发人员使用一组属性和逻辑指定对象的层次结构。 XAML 的主要用途是开发 WPF 应用程序,但可用于指定任何公共语言运行时 (CLR) 对象的层次结构。 大多数开发人员使用 XAML 来指定其应用程序的 UI,并使用 C# 等编程语言来响应用户交互。
从资源的角度来看,UI 是一个资源元素,因此其最终分发格式必须可本地化以支持国际语言。 由于 XAML 无法处理事件,因此许多 XAML 应用程序包含代码块来处理这些事件。 有关详细信息,请参阅 WPF 中的 XAML。 当 XAML 文件被标记为 XAML 的 BAML 形式时,代码将被剥离并编译为不同的二进制文件。 XAML 文件、图像和其他类型的托管资源对象的 BAML 形式被嵌入在附属资源程序集,该程序集可以被本地化为其他语言。如果不需要本地化,则嵌入在主程序集。
注释
WPF 应用程序支持所有 FrameworkCLR 资源,包括字符串表、图像等。
生成可本地化的应用程序
本地化意味着将 UI 适应不同的区域性。 若要使 WPF 应用程序可本地化,开发人员需要将所有可本地化的资源构建到资源程序集中。 资源程序集本地化为不同的语言,代码隐藏使用资源管理 API 来加载。 WPF 应用程序所需的文件之一是项目文件(.proj)。 应用程序中使用的所有资源都应包含在项目文件中。 .csproj 文件中的以下示例演示如何执行此作。
<Resource Include="data\picture1.jpg"/>
<EmbeddedResource Include="data\stringtable.en-US.restext"/>
若要在应用程序中使用资源,请实例化 ResourceManager 并加载要使用的资源。 以下示例演示如何执行此操作。
void OnClick(object sender, RoutedEventArgs e)
{
ResourceManager rm = new ResourceManager ("MySampleApp.data.stringtable",
Assembly.GetExecutingAssembly());
Text1.Text = rm.GetString("Message");
}
将 ClickOnce 与本地化应用程序配合使用
ClickOnce 是 Visual Studio 2005 附带的新 Windows 窗体部署技术。 它支持 Web 应用程序的安装和升级。 使用 ClickOnce 部署的应用程序进行本地化时,只能在特定的本地化文化环境中查看。 例如,如果已部署的应用程序本地化为日语,则只能在日语Microsoft Windows 上而不是英语 Windows 上查看。 这带来了问题,因为日本用户运行英语版本的 Windows 是一种常见方案。
此问题的解决方案是设置中性语言回退属性。 应用程序开发人员可以选择从主程序集中删除资源,并指定这些资源可以在对应于特定文化的卫星程序集(satellite assembly)中找到。 若要控制此过程,请使用 NeutralResourcesLanguageAttribute。 NeutralResourcesLanguageAttribute 类的构造函数有两个签名,其中一个签名带有 UltimateResourceFallbackLocation 参数,用来指定应在何处提取回退资源:主程序集或者卫星程序集。 下面的示例演示如何使用 特性。 对于最终的回退位置,代码会导致 ResourceManager 在当前正在执行的程序集的目录的“de”子目录中查找资源。
[assembly: NeutralResourcesLanguageAttribute(
"de" , UltimateResourceFallbackLocation.Satellite)]