Sprachdateien einfach nutzen

    • VB.NET

    Es gibt 2 Antworten in diesem Thema. Der letzte Beitrag () ist von Dodo.

      Sprachdateien einfach nutzen

      Hier ein kleiner Tipp von mir wie man ganz einfach verschiedene Sprachen in seinem Programm einbinden kann:

      Als erstes eine Sub um die Standart-Sprachdatei zu erstellen, welche man dann übersetzen (lassen) kann:

      VB.NET-Quellcode

      1. Private Sub OriginalSprachdateiErstellen(ByVal oContainer As Control)
      2. If Not IsNothing(oContainer) Then
      3. For Each oControl As Control In oContainer.Controls
      4. If oControl.Controls.Count > 0 Then
      5. If oControl.Text <> "" Then My.Computer.FileSystem.WriteAllText(Application.StartupPath & "\deutsch.txt", oControl.Text & vbCrLf, True)
      6. OriginalSprachdateiErstellen(oControl)
      7. Else
      8. If oControl.Text <> "" Then My.Computer.FileSystem.WriteAllText(Application.StartupPath & "\deutsch.txt", oControl.Text & vbCrLf, True)
      9. End If
      10. Next
      11. End If
      12. End Sub


      VB.NET-Quellcode

      1. OriginalSprachdateiErstellen(Me)


      Dabei werden alle Controls durchlaufen und die Texte der Controls in der deutsch.txt gespeichert.

      Jetzt kann man sich diese Datei vornehmen und Zeile für Zeile übersetzen und zB. als english.txt abspeichern.

      Um diese dann aufzurufen, gibt es folgende Sub:

      VB.NET-Quellcode

      1. Private Liste As New List(Of Control) 'global deklarieren
      2. Private Sub SprachdateiLaden(ByVal Datei As String, ByVal oContainer As Control)
      3. If Not IsNothing(oContainer) Then
      4. For Each oControl As Control In oContainer.Controls
      5. If oControl.Controls.Count > 0 Then
      6. If oControl.Text <> "" Then Liste.Add(oControl)
      7. ListBox1.Items.Add(oControl.Name & " : " & oControl.Text)
      8. SprachdateiLaden(Datei, oControl)
      9. Else
      10. If oControl.Text <> "" Then Liste.Add(oControl)
      11. ListBox1.Items.Add(oControl.Name & " : " & oControl.Text)
      12. End If
      13. Next
      14. End If
      15. Dim arr As String() = Split(My.Computer.FileSystem.ReadAllText(Datei), vbCrLf)
      16. For i As Integer = 0 To Liste.Count - 1
      17. Liste(i).Text = arr(i)
      18. Next
      19. Liste.Clear()
      20. End Sub


      VB.NET-Quellcode

      1. SprachdateiLaden(Application.StartupPath & "\english.txt", Me)


      Somit werden wieder alle Controls durchlaufen und mit der entsprechenden Zeile der Textdatei versehen.


      Soweit ich weiß, dürfte die Reihenfolge, wie die Controls durchlaufen werden, sich nicht ändern, solange das Programm nicht umgestaltet wird.

      Ja, viel Erfolg beim nutzen ;)
      Für ein Mindestmaß an Rechtschreibung, Interpunktion und Majuskeln!
      Gute Idee mit den durchlaufen der Controls, um die bisherigen Text zu bekommen. Bin ich noch garnicht draufgekommen.
      Jedoch gibts da ein paar Probleme:
      Bei Toolstrips wird einfach der Text genommen, der unter Text angegeben ist. Ist ja auch logisch. Aber die einzelnen ToolStripMenus werden nicht durchgenommen. Genauso die Comboboxen. Dort wird nur der aktuell angezeigte Text gespeichert. Auch habe ich einen Button, der einen mehrzeiligen Text enthält. Dieser wird denke ich mal dann nur einzeilig wieder aufgerufen und somit passen die nachfolgenden Controls nichtmehr...
      Listboxen und Listviews werden garnicht durchgenommen.

      Diese Möglichkeit ist vielleicht bei kleinen Programmen mit wenigen Buttons und Labels ganz gut, aber sobald es etwas tiefer und umfangreicher wird, ist diese Methode zu ungenau...
      wintoolz.de
      • wintoolz.KeyLocker - Programm zum sicheren Verwalten von Passwörten
      • wintoolz.CodeGallery - Datenbank für Codebeispiele veschiedener Programmiersprachen
      • wintoolz.Haushaltsbuch - Dient zum Auflisten der Aktivitäten ihrer Bankkonten

      Benutze auch du Ecosia
      So "einfach" ist das leider nicht. Hierbei werden nur Controls auf der Form genommen, keine Controls in Panels, GoruBoxen usw.

      Ich hatte auch mal so eine Idee, habe sie aber dann wieder verworfen weils einfach zu unperfomant wurde.

      Ich habe eine Funktion geschrieben die zunächst Rekursiv alle Controls durchläuft und auch dabei drauf achtet welche Controls es sind, somit wurden auch Tool- oder MenuStrips mit den Untermenüpunkten durchlaufen.
      Leider war das mit dem DropDown Items das größte Problem, wesswegen ichs letztendlich doch nicht vollendet habe.