當前位置: 妍妍網 > 碼農

為.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