none
多表單 多國語系 RRS feed

  • 問題

  • 各位大大您们好,我想請教一下,目前我在製作多國語系,我的方法是將我的資料寫進去acess裡面,看使用者選哪個語系,就直接對到裡面的資料,可是我想請問各位大大,由於我是多表單要一起更動,我目前想到只有,要其他表單顯示前也要去執行,轉換語言的函式,所以每一表單都要去執行依次這個方法,是否有其他方法,可以讓使用者一改變語言,我的內容就可以全部一起變,謝謝各位大大了。
    2009年3月3日 上午 04:11

解答

  • 你語系資料放在 DB 內,應該沒有自動的方法可以變更,這邊有段 VBNET 的程式碼,是在 startup.vb 中放一個公用函數,並要求每個 Form 都要有一個 SetLanguageDisplay 對應的方法來變更語系,從 CurrentThread 到 Next 間是必要的:

    Public Function LanguageSelect(Optional ByVal vLangId As Integer = 1028, Optional ByVal bUpdateDB As Boolean = TrueOptional ByVal bReloadConfig As Boolean = FalseAs Integer 
        If LangId <> vLangId OrElse bReloadConfig Then 
            If bUpdateDB Then DBWritePrivateProFileString("Language""Id", vLangId)  
            If bReloadConfig Then AppDBConfig = ReadAllConfigValue()  
            AppDBConfig("Language")("Id") = vLangId  
            LangId = vLangId  
     
            colAppMessage = ReadLanguageSectionCollection("ApplicationMessage")  
     
            With System.Threading.Thread.CurrentThread  
                .CurrentCulture = New System.Globalization.CultureInfo(LangId)  
                .CurrentUICulture = .CurrentCulture  
            End With 
     
            For Each frm As Object In Application.OpenForms  
                Try 
                    frm.SetLanguageDisplay()  
                Catch ex As Exception  
                    Debug.Print(String.Format("LanguageSelect Error: {0} has not SetLanguageDisplay ({1})", frm.Name, ex.Message))  
                End Try 
            Next 
        End If 
        Return vLangId  
    End Function 
    • 已編輯 心冷熱情熄 2009年3月3日 上午 07:00 程式碼區塊語言選錯
    • 已標示為解答 冰糖旋風 2009年3月3日 上午 09:01
    2009年3月3日 上午 06:56
  • 多國語言問題包含的問題很廣泛.(包含貨幣顯示,日期時間格式等等...)
    大多數人要解決的問題是UI部分文字的多國語言.
    如果你的問題也只是要解決此部分最快的做法並不是記錄到資料庫,而是採用.Net本身的機制.
    在.Net中ASP.Net與Winform本身都有很方便機制,兩者大致上作法都是採用Resource file處理,只是在實做上有些差異.

    你可以參考以下文章

    http://www.dotblogs.com.tw/dotjum/archive/2008/06/04/4232.aspx
    • 已標示為解答 冰糖旋風 2009年3月5日 上午 12:45
    2009年3月4日 上午 01:06

所有回覆

  • 你語系資料放在 DB 內,應該沒有自動的方法可以變更,這邊有段 VBNET 的程式碼,是在 startup.vb 中放一個公用函數,並要求每個 Form 都要有一個 SetLanguageDisplay 對應的方法來變更語系,從 CurrentThread 到 Next 間是必要的:

    Public Function LanguageSelect(Optional ByVal vLangId As Integer = 1028, Optional ByVal bUpdateDB As Boolean = TrueOptional ByVal bReloadConfig As Boolean = FalseAs Integer 
        If LangId <> vLangId OrElse bReloadConfig Then 
            If bUpdateDB Then DBWritePrivateProFileString("Language""Id", vLangId)  
            If bReloadConfig Then AppDBConfig = ReadAllConfigValue()  
            AppDBConfig("Language")("Id") = vLangId  
            LangId = vLangId  
     
            colAppMessage = ReadLanguageSectionCollection("ApplicationMessage")  
     
            With System.Threading.Thread.CurrentThread  
                .CurrentCulture = New System.Globalization.CultureInfo(LangId)  
                .CurrentUICulture = .CurrentCulture  
            End With 
     
            For Each frm As Object In Application.OpenForms  
                Try 
                    frm.SetLanguageDisplay()  
                Catch ex As Exception  
                    Debug.Print(String.Format("LanguageSelect Error: {0} has not SetLanguageDisplay ({1})", frm.Name, ex.Message))  
                End Try 
            Next 
        End If 
        Return vLangId  
    End Function 
    • 已編輯 心冷熱情熄 2009年3月3日 上午 07:00 程式碼區塊語言選錯
    • 已標示為解答 冰糖旋風 2009年3月3日 上午 09:01
    2009年3月3日 上午 06:56
  • 謝謝大大的幫忙
    2009年3月3日 上午 09:02
  • 多國語言問題包含的問題很廣泛.(包含貨幣顯示,日期時間格式等等...)
    大多數人要解決的問題是UI部分文字的多國語言.
    如果你的問題也只是要解決此部分最快的做法並不是記錄到資料庫,而是採用.Net本身的機制.
    在.Net中ASP.Net與Winform本身都有很方便機制,兩者大致上作法都是採用Resource file處理,只是在實做上有些差異.

    你可以參考以下文章

    http://www.dotblogs.com.tw/dotjum/archive/2008/06/04/4232.aspx
    • 已標示為解答 冰糖旋風 2009年3月5日 上午 12:45
    2009年3月4日 上午 01:06
  • 大大謝謝您
    2009年3月5日 上午 12:45