Programme mehrsprachig erstellen

    • VB.NET

    Es gibt 31 Antworten in diesem Thema. Der letzte Beitrag () ist von RodFromGermany.

      MichaHo schrieb:

      wenn ich händig einfach Thread.CurrentThread.CurrentUICulture = New Globalization.CultureInfo("en-US") ins Form Load eintrage,
      Da ist es zu spät - du musst die Sprache umgestellt haben, bevor Form.Sub.New() aufgerufen wird, denn Sub New ruft InitializeComponents auf, wo alle Komponenten initialisiert werden, und zwar in der grad aktuellen Sprache.

      MichaHo schrieb:

      wenn es keine Sub Main gibt
      hast Du keine Möglichkeit, vor dem Erstellen des Hauptfensters die Sprache des Threads festzulegen (andere Vorgehensweisen werden hier im Tut nicht erörtert).
      Die Einzelinstanzanwendung kannst Du ebenfalls in der Sub Main realisieren, nutze dazu einen Mutex (Beispiele dazu findest Du im Forum).
      Ob die einzustellende Sprache in den Settings oder einer anderen Datei vorgegeben werden, ist völlig egal, Du musst sie halt auslesen und einstellen.
      Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
      Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
      Ein guter .NET-Snippetkonverter (der ist verfügbar).
      Programmierfragen über PN / Konversation werden ignoriert!
      Hallo Ihr beiden @ErfinderDesRades, @RodFromGermany
      Mutex hatte ich mir schon einmal angeschaut, aber ich glaub da brauch ich nen Monat Urlaub um das zu kapieren.
      Ich habe mir aber selbst helfen können noch während meine Frage hier auf Freischaltung gewartet hat.
      Ich hab das ganze SprachUmstellungsZeuch einfach auch über die Anwendungsereignisse gelöst und die beiden jetzigen Sprachen im Dataset in einer extra Tabelle abgelegt. Klappt soweit schon mal ganz gut...
      Danke Euch beiden trotzdem für Eure Hinweise...
      "Hier könnte Ihre Werbung stehen..."

      RodFromGermany schrieb:

      Wir fügen mit Projekt -> Hinzufügen -> neues Element eine neue Ressourcendatei hinzu, der wir den Namen Resources.de-DE.resx geben.
      ==> Die korrekte Bezeichnung für andere Sprachen entnehmt einer vom System erstellten anderssprachigen Dialog-Ressource. <==
      Nun müssen wir das Projekt mal kurz beenden, um die neue Ressourcen-Datei im Explorer von Hand richtig einzusortieren.
      Wir verschieben die Datei Resources.de-DE.resx in das Unterverzeichnis My Project\. Außerdem öffnen wir die Datei MEIN_PROJEKT.vbproj im Editor, suchen den Text Resources.de-DE.resx und machen daraus My Project\Resources.de-DE.resx.


      ich benutze VB 2010 Express und jedes mal wenn ich auf: Projekt - Neues Element hinzufügen gehe und eine resx datei erstelle (Name von oben Kopiert) bekomme ich folgende Fehlermeldung ...
      Die ResX-Datei: Ungültige Daten auf Stammebene. Zeile 1, Position 1. kann nicht analysiert werden.
      Somit bin ich nicht in der Lage die Strings zu adden...?
      Viele Frauen kamen, viele sind gegangen, eine ist geblieben 12.5.12 <3 ich liebe dich Schatz :love: :love:

      Linkai schrieb:

      Express
      macht da nicht mit.
      Poste mal Dein Projekt, mal sehen, ob wir das zum laufen kriegen.
      Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
      Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
      Ein guter .NET-Snippetkonverter (der ist verfügbar).
      Programmierfragen über PN / Konversation werden ignoriert!

      Lokalisierung von Properties

      Ein Nachtrag zur Lokalisierung von Properties.
      In diesem Thread Propertys eines UserControls lokalisierbar machen (Mehrsprachig)
      wurde das Problem deutlich, dass ein UserControl in einer DLL seine Sprache nicht wechselte.
      Es zeigte sich, dass Properties, die Strings für Controls in UserControls bereitstellen, also im Designer angezeigt werden, explizit lokalisierbar sein müssen:

      VB.NET-Quellcode

      1. <System.ComponentModel.Localizable(True)> _
      2. Public Property TextAnzeige As String
      3. Get
      4. Return Label1.Text
      5. End Get
      6. Set(value As String)
      7. Label1.Text = value
      8. End Set
      9. End Property
      Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
      Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
      Ein guter .NET-Snippetkonverter (der ist verfügbar).
      Programmierfragen über PN / Konversation werden ignoriert!

      Lokalisierung von Threads

      Ich hab da einen lustigen Effekt bei meinem Multi-Language-Programm festgestellt:
      In einem Thread wird ein String bereitgestellt und dann an der GUI angezeigt.
      Wird das Programm mit der englischen Kultur gestartet, erschien dieser Text auf Deutsch:


      Wird vom Programm ein Thread gestartet, wird diesem vom Framework die Kultur des Betriebssystems zugewiesen, in diesem Fall Deutsch.
      Arbeitet ein Thread mit lokalisierten Ressourcen, muss dem Thread die selektierte Kultur zugewiesen werden, wenn die Sprache des Programms nicht die Sprache des Betriebssystems ist.
      Dies wird im Beispiel mit der Checkbox cbSetLanguage getan:


      Der Errekt tritt erst auf, wenn das Programm auf englisch umgeschaltet und neu gestartet wird.
      Danach den Buttn Start Thread betätigen ohne und mit aktivierter CheckBox.

      Viel Spaß.
      MultiLanguage.zip
      Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
      Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
      Ein guter .NET-Snippetkonverter (der ist verfügbar).
      Programmierfragen über PN / Konversation werden ignoriert!

      Zusammenfassung von Sprachen, Entfernen nicht mehr gewünschter Sprachen

      Ich habe gerade ein altes Projekt aufs Auge gedrückt bekommen, da haben mehrere Leute dran gewerkelt.
      Vorhanden waren die Sprach-DLLs in den Verzeichnissen de-DE und de, weil die Sprache bei der Lokalisierung nicht sorgfältig ausgewählt wurde.
      Natürlich funktionieren beide Spracheinstellungen einzeln, aber es ist besser, wenn im Projekt nur eine Einstellung verwendet wird.

      Ziel ist es nun, beide Sprachen unter de-DE zusammenzufassen und die Sprache de zu eliminieren.
      Das Vorgehen ist wie folgt:
      Im Projektexplorer stellen wir fest, welche xx.de.resx-Datei neben einer xx.de-DE.resx vorkommt.

      Wir öffnen beide Ressourcen in je einem Fenster nebeneinander und bewegen die nicht vorhandenen Texte von de nach de-DE.
      Kommen Items in beiden Sprachen vor, wählen wir die bessere aus.
      =>
      Danach löschen wir die Datei Form1.de.resx in der Entwicklungsumgebung und feddich.
      ====
      Kommt eine Sprache vor, die völlig gelöscht werden kann (z.B. Chinesisch - zn), wird die xx.zn.resx in der Entwicklungsumgebung einfach gelöscht.
      ============
      Wenn die xx.de.resx-Datei allein ist, können wir sie auch "mit dem Holzhammer" konvertieren.

      Dazu entladen wir das Projekt und nehmen im Explorer und dem Notepad(++) folgende Änderungen vor:
      Umbenennung der Datei Form2.de.resx in Form2.de-DE.resx.
      Umbenennung der Datei in der csproj / vbproj-Datei:

      XML-Quellcode

      1. <EmbeddedResource Include="Form2.de.resx">
      2. <DependentUpon>Form2.cs</DependentUpon>
      3. </EmbeddedResource>
      =>

      XML-Quellcode

      1. <EmbeddedResource Include="Form2.de-DE.resx">
      2. <DependentUpon>Form2.cs</DependentUpon>
      3. </EmbeddedResource>
      Feddich.
      Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
      Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
      Ein guter .NET-Snippetkonverter (der ist verfügbar).
      Programmierfragen über PN / Konversation werden ignoriert!
      Ich muss da jetzt doch mal nachfragen, wieso werden de und de-DE in de-DE vereinigt? Habt ihr auch de-AT oder de-CH usw.? Sollte nicht eher alles in de vereinigt werden? Mit de-DE ist meinem bisherigen Verständnis nach "lediglich" Deutschland abgedeckt, wohingegen de für den gesamten deutschsprachigen Raum gilt, zumindest theoretisch. Ich vermute mal, das es für das Programm irrelevant ist, welche Region ich nun eingestellt habe, und de-DE auch nahe der Grenze zu Italien noch funktionieren würde (bzw. in Südtirol)

      EaranMaleasi schrieb:

      wieso werden de und de-DE in de-DE vereinigt?
      War halt meine Vorgabe, weil alles auf de-DE stand, nur ein Dialog hatte den de-"Ausreißer".
      Wenn Du Deine Programme im deutsch-sprachigen Raum vertreibst, solltest Du sie in de vereinigen.
      Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
      Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
      Ein guter .NET-Snippetkonverter (der ist verfügbar).
      Programmierfragen über PN / Konversation werden ignoriert!

      Texte mehrsprachiger Anwendungen extern übersetzen lassen

      Dieses Problem hier Mehrsprachige Anwendung nachträglich übersetzen lassen
      hat unmittelbar mit diesem Thread zu tun, so dass ich das Prozedere hier beschreiben möchte:
      Es ist möglich und sinnvoll, den Inhalt von ResX-Dateien extern zu übersetzen.
      Dazu wird die Text-Tabelle aus dem Ressourcen-Editor kopiert und in eine Excel-Liste eingefügt:
      =>
      Der Übersetzer kann dann in einer weiteren Spalte die Texte in der neuen Sprache eintragen.
      Ich halte es für sinnvoll, jede ResX-Datei separat zu übersetzen.
      Wenn das ganze zurückkommt, erstellt Ihr eine leere ResX-Datei in der betreffenden Sprache, fügt die Namen und die Werte der neuen Sprache ein und feddich.
      Passt auf, dass nur Texte übersetzt werden.
      Eine Rethe von anderen lokalisierbaren Eigenschaften (Location und Size von Controls usw) werden ebenfalls in den ResX-Dateien abgelegt.
      Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
      Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
      Ein guter .NET-Snippetkonverter (der ist verfügbar).
      Programmierfragen über PN / Konversation werden ignoriert!