Einfache Mehrsprachigkeit für eigene Anwendungen - ohne nervige Übersetzungen.

    • Allgemein

    Es gibt 4 Antworten in diesem Thema. Der letzte Beitrag () ist von Quadsoft.de.vu.

      Einfache Mehrsprachigkeit für eigene Anwendungen - ohne nervige Übersetzungen.

      Hallo,

      Mehrsprachigkeit kann den Nutzerkreis ungemein erhöhen ;) Aber es macht auch sehr viel Arbeit, dass komplette Programm zu übersetzen. Hier stelle ich eine Methode vor, wie es über den Service Google Language Tools möglich ist, keine perfekten, aber annehmbare Übersetzungen zu bekommen. Gut, fangen wir an. Als erstes erstellen wir in den Resourcen eine neue Textdatei namens "language". In jede Zeile kommt jetzt jeder Text, der sich mit der Sprache ändern soll. Für jede Zeile einer. Dazu gehören zum Beispiel Programmtitel, Texte in Labels, Meldungen (Messageboxen), Text in Buttons und so weiter.

      So weit so gut - weiter geht´s mit dieser einfachen Funktion:

      VB.NET-Quellcode

      1. Function Translate(ByVal stext As String, ByVal language As String)
      2. Dim client As New Net.WebClient
      3. Dim übersetzung As String = client.DownloadString("http://translate.google.de/translate_a/t?client=t&text=" & stext & "&sl=de&tl=" & language)
      4. Return übersetzung
      5. End Function

      Sie übersetzt unseren Text in eine beliebige andere Sprache. Jetzt fügen wir ein Bedienelement zum ändern der Sprache hinzu. Ich benutze eine Treeview:

      (Adden durch folgenden Code:

      VB.NET-Quellcode

      1. Dim node As New TreeNode("Sprachen")
      2. node.Nodes.Add("Deutsch")
      3. node.Nodes.Add("Englisch")
      4. node.Nodes.Add("Französisch")
      5. node.Nodes.Add("Dänisch")
      6. node.Nodes.Add("Finnisch")
      7. node.Nodes.Add("Griechisch")
      8. node.Nodes.Add("Portugiesisch")
      9. node.Nodes.Add("Italienisch")
      10. node.Nodes.Add("Spanisch")
      11. node.Nodes.Add("Norwegisch")
      12. node.Nodes.Add("Schwedisch")
      13. node.Nodes.Add("Niederländisch")
      14. TreeView1.Nodes.Add(node)

      ). Weiter geht´s. Ein Button zum bestätigen der Sprache.

      VB.NET-Quellcode

      1. Dim lng As String
      2. ' 1. Übersetzen:
      3. Select Case TreeView1.SelectedNode.Text
      4. Case "Deutsch"
      5. lng = My.Resources.language
      6. Case "Englisch"
      7. lng = Translate(My.Resources.language, "en")
      8. Case "Französisch"
      9. lng = Translate(My.Resources.language, "fr")
      10. Case "Dänisch"
      11. lng = Translate(My.Resources.language, "da")
      12. Case "Finnisch"
      13. lng = Translate(My.Resources.language, "fi")
      14. Case "Griechisch"
      15. lng = Translate(My.Resources.language, "el")
      16. Case "Portugiesisch"
      17. lng = Translate(My.Resources.language, "pt")
      18. Case "Italienisch"
      19. lng = Translate(My.Resources.language, "it")
      20. Case "Spanisch"
      21. lng = Translate(My.Resources.language, "es")
      22. Case "Norwegisch"
      23. lng = Translate(My.Resources.language, "no")
      24. Case "Schwedisch"
      25. lng = Translate(My.Resources.language, "sv")
      26. Case "Niederländisch"
      27. lng = Translate(My.Resources.language, "nl")
      28. End Select
      29. lng = lng.Replace("\r\n", vbNewLine)
      30. If lng.Length > 1 Then
      31. lng = lng.Remove(0, 1)
      32. lng = lng.Remove(lng.Length - 1, 1)
      33. End If
      34. '2. Zuweisen:
      35. Dim anzeigen() As String = Split(lng, vbNewLine)
      36. Testform.Label1.Text = anzeigen(0)
      37. Testform.Text = anzeigen(1)
      38. Testform.Button1.Text = anzeigen(2)
      39. Testform.Show()

      oder alternativ kann man 2. auch so gestalten:

      VB.NET-Quellcode

      1. Dim str As New System.Text.StringBuilder
      2. For Each ctl1 As Control In Testform.Controls
      3. str.AppendLine(ctl1.Text)
      4. Next
      5. Dim übersetzung As String = Translate(str.ToString, k)
      6. übersetzung = übersetzung.Replace("\r\n", vbNewLine)
      7. If übersetzung.Length > 1 Then
      8. übersetzung = übersetzung.Remove(0, 1)
      9. übersetzung = übersetzung.Remove(übersetzung.Length - 1, 1)
      10. End If
      11. Dim v() As String = Split(übersetzung, vbNewLine)
      12. Dim zähler As Integer = 0
      13. For Each ctl2 As Control In Testform.Controls
      14. ctl2.Text = v(zähler) ' übersetzung
      15. zähler += 1
      16. Next


      und eben entsprechend anpassen, sodass wirklich alle Controls übersetzt werden.

      Natürlich könnte man noch weitere Sprachen ergänzen, die Kürzel sind die offiziellen Kürzel des Landes. Der untere Teil muss natürlich entsprechend angepasst werden. Hier werden nur 3 verschiedene Texte übersetzt: Der Text in einem Label ("Dies ist ein Testtext. Er steht in einem Label."), der Text in einem Button ("Beenden") und der Titel des Programms ("Das ist der Titel des Programms.").

      Hier meine Testform in zwei Sprachen als Beispiel:

      Französisch:



      Spanisch:

      Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „kevin89“ ()

      Hallo,
      Ich weiß das dieses Thema schon etwas älter ist , aber ich habe Probleme mit dem Google-Übersetzter.
      Mein Problem:
      Ich bekomme anstelle von einem ä oder ö oder ü immer nur komische zeichen z.B.: Ă usw. 8|
      Ist es Möglich diese Fehler zu beheben?

      Danke :thumbup:

      Edit:

      O.K habe es hinbekommen( funzt jetzt mit Replace)

      Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „QB2VB“ ()

      Man sieht schon den gravierendsten Nachteil dieser Methode: Die Fehleranfälligkeit seitens Google.
      "Il s'agit d'un texte de test. Elle est un Label" ist komplett falsch.
      "Es handelt sich um einen Testtext. Sie ist ein Label"
      Richtig wär:
      "C'est un texte de test. Il est dans un Label."
      Da werden die Franzosen ziemlich wütend sein.
      Und ich glaube auch, dass das Spanische genauso falsch ist.