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

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

1. 引言

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

2. 添加国际化支持

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

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

2.1 创建资源文件

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

51886b9bde927e6be52db4b328e93da4.png
创建资源文件

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

1e8f8cd5cce3d28ea18b236f681cc2c5.png
添加资源

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

f9adbcd02e56e031a4a0ec552d9ce086.png
添加中文资源

2.2 使用资源

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

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

2.3 设置区域

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

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

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

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

3. 测试

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

af90bc0e1571da84e8d02314631fb337.png
测试

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

fcef81640642c722b289404fee92a027.png
英文测试

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

最后

至此,我们已经了解了如何为.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 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值