How-to 利用資源檔來做多國語言的介面

在以往VB6的時候我們會立用資源檔來做多國語言的介面,那麼到了.net的環境,我們應該怎麼去做呢?是的,還是那道光,利用資源檔就可以達到我們的需求,不過用法有不同的方式,你也可以參考在MSDN forums上面的這篇文章"VB.Net多國語言介面問題"
好,下面說明一下我的做法,其實主要是參考.net Manazine電子報的做法,有興趣的話可以到該網站找n020800701這篇文章;先看看介面的部分,我在form上面放了一個combobox以及兩個label來展示效果,選擇簡體時會像下圖這樣

繁體中文會像下面這樣

接下來是一些注意的地方以及程式碼
首先要加入資源檔,在"方案總管"的地方,點滑鼠右鍵,之後選擇"加入"→"新增項目",之後加入資源檔;而資源檔的命名方式是"自訂名稱.語系簡稱.resx",這邊我是做了三個,
  • Resource.en-US.resx
  • Resource.zh-TW.resx
  • Resource.zh-CN.resx
,而在資源檔上面連續點兩下,就會進入到編輯畫面,這邊我簡單的加了兩個項目

在名稱的地方就是我們等一下在程式中會用到的"key"了,所以可不能亂打一通,不然可是很難處理,而值的地方就是會顯示UI上面的文字了;好,編輯完三個檔之後,我們來看看程式碼吧
Imports System.Globalization
Imports System.Reflection

Public Class Form1

Dim RM As Resources.ResourceManager
Dim CI As CultureInfo

Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
RM = New Resources.ResourceManager("ResourceTest.Resource", Assembly.GetExecutingAssembly)
End Sub

Private Sub ComboBox1_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ComboBox1.SelectedIndexChanged
Select Case ComboBox1.SelectedIndex
Case Is = 0
CI = New CultureInfo("en-US")
Case Is = 1
CI = New CultureInfo("zh-CN")
Case Is = 2
CI = New CultureInfo("zh-TW")
Case Else
Exit Sub
End Select
Threading.Thread.CurrentThread.CurrentUICulture = CI
Label1.Text = RM.GetString("button")
Label2.Text = RM.GetString("text")
End Sub
End Class
有個部分要再提一下,有沒有發現我開了個資料夾來放資源檔,奇怪,載入的部分怎麼沒看到我加上資料夾的路徑..?? 這個就跟"建置動作"有關了,依照預設,資源檔是會被建置成"內崁資源"的,所以就不用特別的加上路徑了

如果你需要目前為止的VS2008專案檔,可以到http://cid-5cfb0801906944fc.skydrive.live.com/self.aspx/Sample/ResourceTest.rar?lc=1028下載

留言

Unknown寫道…
請問一下,如果這個程式想要使用於智慧型裝置,要如何的修改呢??

這個網誌中的熱門文章

開啟cshtml檔案時,出現『並未將物件參考設定為物件執行個體』的錯誤訊息

無法設定中斷點 尚未載入符號檔

DataGridView欄位計算總合