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

在以往VB6的時候我們會立用資源檔來做多國語言的介面,那麼到了.net的環境,我們應該怎麼去做呢?是的,還是那道光,利用資源檔就可以達到我們的需求

在以往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下載