2017-09-15 9 views
-2

スレッドを使用してWindowsフォームにあるすべてのテキストを翻訳し、システムを多言語化しようとしています。vb.netスレッドと呼び出し関数を宣言する方法

サブクラスと関数を持つ「言語」という名前の別のクラスがあります。サブは言語ソースファイルを読み込み、関数は文字列を受け取って返します。

Dim ThreadTraductor As New Thread(AddressOf ...) 'don't know how to do it 

    Dim cultureInfo As New System.Globalization.CultureInfo(ConfigurationManager.AppSettings('en').ToString) 

    ThreadTraductor.CurrentCulture = cultureInfo 
    ThreadTraductor.CurrentUICulture = cultureInfo 


は基本的に私は、実行時に開かれていますすべてのWindowsフォームを変換するバックグラウンド・プロセスを持つことが、このスレッドを作成しています:私は私のスレッドを宣言どこ

は、その後、私は私の最初のWindowsフォームを持っています、問題は私が宣言時に任意のパラメータを含めることを望んでいないので、私はそれを正しく宣言する方法を知らないですが、私は変換するパラメータを持つ異なるフォームから呼び出されるスレッドをしたい、またスレッドを使用したいLanguageクラス内での私の翻訳メソッドは可能です?どうやって? 私は以前はスレッドを使用していません。

+0

新しいスレッドがWindowsフォーム上のデータにアクセスしてそれらを更新するようにする場合は、喜んではいきません。 UIスレッドのみからUIにアクセスして更新することができます。なぜあなたはスレッディングがここで便利だと思いますか?他にも翻訳がありました。 – Enigmativity

+0

あなたがすべきことは** **スレッドなしでどのように動作するかを示してから、スレッドを使用する際のアドバイスをお願いします。これは、あまりにもこのあいまいさに答えるのは難しいです。 – Enigmativity

答えて

0

パブリック・クラスLenguaje「クラスは、言語のソースファイルを読み込み、文字列

Public dicIdioma As New Dictionary(Of String, String) 

Public Sub LeerArchivo(ByVal Culture As String) 

    Dim vectorAux() As String 
    dicIdioma.Clear() 

    Try 
     Dim LectorArchivo As New StreamReader("C:\Users\Joaqo\Desktop\Dorian VB\DorianBdBv1.0\UI\bin\Debug\" + Culture + ".txt") 

     Dim line As String 

     While Not LectorArchivo.Peek = -1 
      line = LectorArchivo.ReadLine() 
      vectorAux = line.Split(":") 
      dicIdioma.Add(vectorAux(0), vectorAux(1)) 
     End While 

    Catch ex As System.IO.FileNotFoundException 
     MessageBox.Show("No se encuentra el archivo de idioma.") 
    Catch ex As Exception 
     MessageBox.Show(ex.Message) 
    End Try 

End Sub 

Public Function Traducir(ByRef frase As String) As String 

    Dim StringAux As String 

    For Each Item As String In dicIdioma.Keys 

     If Item = Char.ToLower(frase(0)) & frase.Substring(1) Then 
      StringAux = Char.ToUpper(dicIdioma.Item(Item)(0)) & dicIdioma.Item(Item).Substring(1) 
      frase = StringAux.Replace("_", " ") 

     ElseIf Item.Replace("_", " ") = Char.ToLower(frase(0)) & frase.Substring(1) Then 
      StringAux = Char.ToUpper(dicIdioma.Item(Item)(0)) & dicIdioma.Item(Item).Substring(1) 
      frase = StringAux.Replace("_", " ") 

     End If 
    Next 

    Return frase 

End Function 

エンドクラス


を変換するために使用その後、私はそれらを翻訳するために、私のWindowsフォーム内のすべてのテキストオブジェクトを反復:

For Each Item As Label In Me.Controls.OfType(Of Label)() 
     Item.Text = Traductor.Traducir(Item.Text) 
    Next 

    For Each Item As Button In Me.Controls.OfType(Of Button)() 
     Item.Text = Traductor.Traducir(Item.Text) 
    Next 

それはうまくいきますが、私はTraductor、Lenguaje's insta私の最初のインターフェースで、アプリ全体から宣言されたnceは、何とか間違っていませんか?

私はCultureとCultureUIを使用するべきだと言われましたが、私はそれに精通していません。どう思いますか?申し訳ありませんが、私が何かを見逃している場合は、ここに私の最初の質問です。

関連する問題