本文以 Snipping_OCR[1] 項目為例,介紹如何使用資源文件為.NET桌面應用添加國際化支持。
1. 引言
當前,不少企業都有開拓海外市場的意向,因此,為應用程序添加國際化支持是很有必要的。本文將介紹如何通過簡單的方法為.NET桌面應用添加國際化支持。
2. 添加國際化支持
在 .NET 的桌面應用中,我們可以通過資源文件 (.resx) 來實現國際化。最佳的做法是為每種語言創建一個資源文件,然後在代碼中根據當前的區域設置來選擇使用哪個資源文件。特別註意的是,不要對字符串或用戶界面資源進行硬編碼。關於.NET 本地化更多的相關信息,可以參考 本地化和全球化[2]。
以下是通過資源文件 (.resx) 來實現國際化的步驟:
2.1 創建資源文件
首先需要在項目中創建一個資源文件,例如 Resources.resx
,這將作為默認(英文)的資源文件。
![](https://news.xinpengboligang.com/upload/keji/d9357c38d96cf8330fae9ef08ea3929d.jpeg)
然後,你可以在這個文件中添加原來在界面中使用的字符串,比如:菜單,按鈕,標簽,對話框等等。
![](https://news.xinpengboligang.com/upload/keji/5895e6d16a378dfb0b0c18b204d95471.jpeg)
接下來,創建另一個資源文件,例如 Resources.zh-CN.resx
,這個文件將包含中文的資源。在這個文件中,你可以添加相同的名稱,但是值是中文的:
![](https://news.xinpengboligang.com/upload/keji/e56a89ba0c16d8c8aa773965cc4d6536.jpeg)
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 應用來說,主要的測試點是托盤得到右鍵菜單的國際化,以及熱鍵註冊失敗的提示信息的國際化。
![](https://news.xinpengboligang.com/upload/keji/860b66ecef45460238ce65dcd11f2884.jpeg)
英文測試,這裡我直接祭出了 Windows 沙盒,因為我電腦沙盒中的區域設置默認是英文的:
![](https://news.xinpengboligang.com/upload/keji/a0fe1761c5f9916a6b496bc02ef1c2b6.jpeg)
通過上面的截圖可以發現,本地直接運行顯示的中文。在沙盒中,托盤菜單的顯示界面已經變為英文的了。
最後
至此,我們已經了解了如何為.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