当前位置: 欣欣网 > 码农

为.NET桌面应用添加国际化支持

2024-01-30码农

本文以 Snipping_OCR [1] 项目为例,介绍如何使用资源文件为.NET桌面应用添加国际化支持。

1. 引言

当前,不少企业都有开拓海外市场的意向,因此,为应用程序添加国际化支持是很有必要的。本文将介绍如何通过简单的方法为.NET桌面应用添加国际化支持。

2. 添加国际化支持

在 .NET 的桌面应用中,我们可以通过资源文件 (.resx) 来实现国际化。最佳的做法是为每种语言创建一个资源文件,然后在代码中根据当前的区域设置来选择使用哪个资源文件。特别注意的是,不要对字符串或用户界面资源进行硬编码。关于.NET 本地化更多的相关信息,可以参考 本地化和全球化 [2]

以下是通过资源文件 (.resx) 来实现国际化的步骤:

2.1 创建资源文件

首先需要在项目中创建一个资源文件,例如 Resources.resx ,这将作为默认(英文)的资源文件。

创建资源文件

然后,你可以在这个文件中添加原来在界面中使用的字符串,比如:菜单,按钮,标签,对话框等等。

添加资源

接下来,创建另一个资源文件,例如 Resources.zh-CN.resx ,这个文件将包含中文的资源。在这个文件中,你可以添加相同的名称,但是值是中文的:

添加中文资源

2.2 使用资源

创建好两个资源后,我们可以通过 Resources 类来访问这些资源。比如,我们可以通过 Resources.ScreenOCR 来访问 ScreenOCR 这个资源。在代码中,我们可以这样使用资源:

notifyIcon.ShowBalloonTip(2, Resources.ScreenOCR, Resources.HotkeyRegistrationFailed, ToolTipIcon.Info);

2.3 设置区域

.NET 会自动使用操作系统的区域设置,但是你也可以在代码中手动设置。你可以使用 System.Globalization.CultureInfo 类来获取或设置当前线程的区域设置。例如:

Thread.CurrentThread.CurrentCulture = newCultureInfo("zh-CN");Thread.CurrentThread.CurrentUICulture = newCultureInfo("zh-CN");

当然,简单使用的话,我们可以通过检查操作系统的区域设置,如果是中文则使用中文,否则使用英文。这里我们需要使用 System.Globalization.CultureInfo 类来获取当前的区域设置。

CultureInfo currentCulture = CultureInfo.CurrentCulture;if (currentCulture.TwoLetterISOLanguageName == "zh"){Thread.CurrentThread.CurrentUICulture = newCultureInfo("zh-CN");Thread.CurrentThread.CurrentCulture = newCultureInfo("zh-CN");}else{Thread.CurrentThread.CurrentUICulture = CultureInfo.InvariantCulture;Thread.CurrentThread.CurrentCulture = CultureInfo.InvariantCulture;}

3. 测试

修改完成后,我们可以在不同的区域设置下测试应用程序,以确保国际化功能正常工作。对于 Snipping_OCR 应用来说,主要的测试点是托盘得到右键菜单的国际化,以及热键注册失败的提示信息的国际化。

测试

英文测试,这里我直接祭出了 Windows 沙盒,因为我电脑沙盒中的区域设置默认是英文的:

英文测试

通过上面的截图可以发现,本地直接运行显示的中文。在沙盒中,托盘菜单的显示界面已经变为英文的了。

最后

至此,我们已经了解了如何为.NET桌面应用简单的添加国际化支持了。当然,国际化对软件设计都提出了新的要求,不仅仅是语言的问题,还有时区、货币、数字格式等等。另外,也存在一些文化差异的问题,例如,不同国家的人对于软件的使用习惯也是不同的。因此,如果你的应用程序真的要开拓海外市场,那么你可能需要考虑这些问题。

References

[1] Snipping_OCR: https://github.com/sangyuxiaowu/Snipping_OCR??wt.mc_id=DT-MVP-5005195
[2] 本地化和全球化: https://docs.microsoft.com/zh-cn/dotnet/standard/globalization-localization/?wt.mc_id=DT-MVP-5005195