國際化 我之前 WinForm 國際化都是湊一些代碼搞起(請看文後 Reference)。 最近發現還有個官方國際化方法: 每設置一個語言後,設計器會自動生成對應的 resx 文件,如:Form1.resx (Default), Form1.zh-Hans.resx , Form1.en-US.re ...
國際化
我之前 WinForm 國際化都是湊一些代碼搞起(請看文後 Reference)。
最近發現還有個官方國際化方法:
- 首先設置 Form 的 Localizable 屬性為 true
- 選擇 Form 的 Language 為 "(Default)",然後給頁面中每個控制項設置一遍 Text
- 選擇 Form 的 Language 為 "中文(簡體)",然後給頁面的每個控制項設置一遍 中文 Text
- 對所需要支持的語言,先設置 Form 的 Language 為所要支持的語言,然後給頁面的每個控制項設置一遍 Text
每設置一個語言後,設計器會自動生成對應的 resx 文件,如:Form1.resx (Default), Form1.zh-Hans.resx , Form1.en-US.resx 等等。
問題
用了一下官方方法後,我發現了以下問題:
- 設計器生成的 resx 文件裡面會有一些奇怪的名稱,例如:由 >> 開頭的資源名、 resource.Name34、resource.Name35 等等。這些名稱對程式員不友好。
- 重構控制項名稱的時候,設計器只會去修改當前語言下的 resx 文件,其他 resx 文件中的相應控制項名稱不會改變。所以還需手工重設其他語言環境下這個控制項的Text。這比較不方便,因為我可能已經忘掉了之前這個控制項上的字元串是什麼了。(非官方的國際化也有這個問題,而且稍微大一點,設計器不會修改任何一個 resx 文件,所以都要自己改)
- 如果之前 Form 的 Localilzable 是 false,而且手動設置了一些字元串,然後設置 Form 的 Localizable 為 true,則之前手動設置的字元串會被設計器刪除。這個問題比較嚴重。唯一想到的方法是,在界面的 resx 文件中不手動添加東西,另建一個 resx 文件存放手動設置的字元串。這樣同樣不大易用。
選擇
在開始工程之前要選擇好非官方還是官方的國際化方法,在項目中切換可能會丟失掉之前的字元串資源。
目前我有舊代碼,還是使用非官方的方法吧,畢竟 resx 可控,設計器不會自己加東西進去。只是重構控制項名稱時候,手工的工作量大了。(官方重構時的工作量也大)
以後如果新建工程,官方的方法或許還行,只要把自己手工寫的資源分文件來搞。
Reference:
1. 手動的國際化:http://www.cnblogs.com/codefish/p/4778269.html
2. 官方的WinForm國際化:https://msdn.microsoft.com/en-us/library/y99d1cd3(v=vs.71).aspx
3. 代碼切換官方國際化:http://www.dotnetcurry.com/showarticle.aspx?ID=174