WPF 本地化入门






4.94/5 (64投票s)
解释如何轻松地本地化 WPF 应用程序。
引言
我一直在寻找一种本地化 WPF 应用程序的方法,在 CodeProject 上找到了一些解决方案,以及其他地方的一些。 我花了很多时间阅读所有这些内容,但最终的结果是困惑 - 我无法确定该走哪条路。 从 C++ 背景来看,资源文件似乎是合乎逻辑的选择,所以我开始只关注资源文件的本地化。 我花了一些时间才弄清楚,我意识到它实际上非常简单。 问题是,像往常一样,是文档。
所以我决定写一篇初学者文章,让本地化变得简单,因此得名“简易指南”。 目标是逐步解释如何本地化 WPF 应用程序。
步骤 1
创建一个 WPF 项目。 我称之为“WPFLocalizationForDummies
”。 请注意,Properties 文件夹有一个名为 Resources.resx 的空资源数据文件。 将访问修饰符更改为 Public
,否则我们将无法在 XAML 中使用它。

如下所示添加一个字符串资源。 我们将使用此字符串作为主窗口标题。

编译并运行项目。 它应该可以顺利运行。
第二步
创建一个本地化的资源文件。 在 Visual Studio 解决方案窗口中选择 Resources.resx 文件,然后按 Ctrl+C 键。 现在按 Ctrl+V 键。 将创建 Resources.resx 文件的副本。

重命名 "Copy of Resources.resx" 文件。 新名称应为 Resources.XX.resx,其中 "XX" 是区域性名称。 区域性是特定语言和国家/地区名称的组合,可以在 国家语言支持 (NLS) API 参考页面上找到。
如果您计划支持英语,我建议您使用英语本地化资源文件,尽管默认的 Resources.resx 文件也可能包含英语字符串。 稍后切换到英语和切换回来会容易得多。 因此,我们的第一个本地化资源文件应命名为 Resources.en.resx。

步骤 3
让我们创建一个更多的本地化资源文件作为示例,例如俄语。 重复步骤 2,唯一的区别是新文件应命名为 Resources.ru-RU.resx。

将字符串 "Title
" 的值更改为一些俄语文本。

步骤 4
编译应用程序。 编译器和链接器将为每个区域性创建一个单独的附属程序集。 附属程序集将放置在保存主程序集的目录下的子目录中。 子目录将按区域性命名,允许 .NET 运行时找到适合应用程序运行的区域性的资源。 主(默认)资源文件将嵌入到主程序集中。
在我的例子中,由于我有 2 个资源文件,因此创建了 2 个子文件夹,每个子文件夹都包含资源附属 DLL - 英语和俄语。

步骤 5
在应用程序中设置区域性。 可以像以下代码示例中所示显式地完成。
// Set the current user interface culture to the specific culture Russian
System.Threading.Thread.CurrentThread.CurrentUICulture =
new System.Globalization.CultureInfo("ru-RU");
步骤 6
现在我们有了资源 DLL,让我们在应用程序中使用它们。 本地化的资源可以在 XAML 和 C# 代码中使用。
- 在 XAML 文件中
将命名空间声明添加到每个您想要使用本地化资源的 XAML 文件中(就像 C# 中的
using
语句一样)。xmlns:p="clr-namespace:WPFLocalizationForDummies.Properties"
在 MainWindow.xaml 中,替换...
Title="Main" Height="350" Width="525">
...为
Title="{x:Static p:Resources.Title}" Height="350" Width="525">
- 在 C# 代码中,可以如下所示检索资源 DLL 中的
string
Title = WPFLocalizationForDummies.Properties.Resources.Title;
结论
如您所见,通过遵循上面解释的几个步骤,可以非常轻松地实现 WPF 应用程序中的本地化。
系统要求
- Windows 7
- Visual Studio 2010
- .NET 4.0
历史
- 初始版本 - 2011/12/12