Programme mehrsprachig erstellen

    • VB.NET

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

      Programme mehrsprachig erstellen

      Moin Leute,
      des öfteren kam die Frage nach mehrsprachigen Programmen, und dazu kamen Lösungen, die fast noch DOS basiert waren. .NET macht das richtig fein.
      Meine einzige Nebenbedingung ist, dass die Sprache die des Systems ist (so vorhanden) und nicht während der Laufzeit umgestellt werden kann.
      Das geht nämlich echt einfach und mit praktisch keinem Aufwand.
      .NET erzeugt dann zu jeder implementierten Sprache eine entsprechende Ressourcen-DLL, die vom System automatisch geladen wird.
      Zunächst wird in den Projekteinstellungen -> Anwendung -> Assemblyinformation
      die neutrale Sprache eingestellt. Sinnvollerweise Englisch (USA), d.h., dass, wenn das System seine Sprache nicht vorfindet, Englisch (USA) als Default verwendet wird.
      !!! Nicht aber Englisch !!!
      Das macht Sinn, da in der ganzen Welt halt (auch) Englisch gesprochen wird. Außerdem wird die neutrale Sprache auch dann verwendet, wenn eine einzelne Ressource nicht übersetzt wurde.
      Nun die Dialoge.
      Jede Form muss einzeln für die einzelnen Sprachen angepasst werden:
      Die Form bekommt die Property

      VB.NET-Quellcode

      1. Localizable = True
      damit wird der Form kund getan, dass sie in mehreren Sprachen erscheinen soll.
      Nun müsst Ihr alle Beschriftungen und Texte in dieser Form in englisch ausfüllen.
      Danach wird die Sprache umgestellt:

      VB.NET-Quellcode

      1. Language = Deutsch (Deutschland)
      2. ' oder
      3. Language = Deutsch (Österreich)
      4. ' oder so, je nachdem.

      !!! Nicht aber Language = Deutsch !!!
      Alle englischen Texte werden nun nach Deutsch übersetzt. Wenn ein Abstand Label - Text zu klein ist oder so: Ordnet die Controls so an, dass alles für deutsch gut aussieht, der deutscge Dialog sieht dann halt ein wenig anders aus als der US-englische.
      Unsere finnischen Freunde wird dies sehr freuen, denn ihre Wörter sind im Mittel deutlich länger als unsere. :D
      Dies macht Ihr nun für alle Sprachen und Formen.
      Nun zu den Texten, Bildern usw., die aus der Ressource geladen werden.
      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.
      Fertig. (In C# geht dies etwas einfacher.)
      Nun wird das Projekt wieder geöffnet, und korrekterweise wird die Datei Resources.de-DE.resx nun im Verzeichnis My Project\ angezeigt.
      Sollen nun Textressourcen hinzugefügt werden, wird dies zuerst in der englischen Ressource (Resources.resx) getan, danach werden unter denselben Namen in der deutschen Ressource (Resources.de.resx) die Übersetzungen eingetragen:

      Quellcode

      1. Teststring | this is an english text
      2. Teststring | Das ist ein deutscher Text

      Nun fügen wir unserem Projekt einen Testbutton hinzu und schreiben in seinen Click-Handler:

      VB.NET-Quellcode

      1. Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
      2. MessageBox.Show(My.Resources.Teststring)
      3. End Sub

      Nach dem Start und dem Click erscheint die deutsche Messagebox. Beendet das Programm.
      Im bin\Debug-Verzeichnis unseres Projekts wurde ein Verzeichnis de angelegt, das die deutschen Ressourcen enthält. Nennt es um (z.B. "_de") und startet das Programm erneut. Nach dem Click erscheint die englische Messagebox.
      (Verzeichnis zuckbenennen, sonst wird ein neues Verzeichnis de erstellt.)
      So. Das wars.
      ------------------------------------------
      Soll die Sprache während der Laufzeit geändert werden können, so muss die Zielsprache geeignet zwischengespeichert werden und im ReLoad-Ereignis die entsprechende CultureInfo erzeugt und zugewiesen werden:

      VB.NET-Quellcode

      1. AppLanguageID = "en" ' "de", ...
      2. Dim Culture As System.Globalization.CultureInfo
      3. Culture = New System.Globalization.CultureInfo(AppLanguageID)
      4. System.Threading.Thread.CurrentThread.CurrentUICulture = Culture

      Fertig.
      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!

      Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von „RodFromGermany“ () aus folgendem Grund: Dateiname umbenannt: Resources.de-DE.resx

      Könntest du den Teil bitte genauer beschreiben, weil er nicht bei mir funzt:

      VB.NET-Quellcode

      1. AppLanguageID = "en" ' "de", ...
      2. Dim Culture As System.Globalization.CultureInfo
      3. Culture = New System.Globalization.CultureInfo(AppLanguageID)
      4. System.Threading.Thread.CurrentThread.CurrentUICulture = Culture
      Ich poste mal den gesamten Quelltext.
      eine Form mit 2 Radiobutton ("DE", "EN") und einem Button (Restart).
      Dazu eine INI-File-Klasse, die nicht Gegenstand des Tutorials ist, also bitte keine Kommentare, dass diese Information auch in einer Datenbank oder einer XML-Datei gespeichert werden kann. :D
      Spoiler anzeigen

      VB.NET-Quellcode

      1. Public Class Form1
      2. Private m_IniFile As New IniFile
      3. Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
      4. MessageBox.Show(My.Resources.Teststring)
      5. End Sub
      6. Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
      7. Application.Restart()
      8. End Sub
      9. Private Sub RadioButton1_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles RadioButton1.CheckedChanged
      10. m_IniFile.WriteProfileString("Common", "Language", "De")
      11. End Sub
      12. Private Sub RadioButton2_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles RadioButton2.CheckedChanged
      13. m_IniFile.WriteProfileString("Common", "Language", "En")
      14. End Sub
      15. End Class

      VB.NET-Quellcode

      1. Namespace My
      2. Partial Friend Class MyApplication
      3. Private Sub MyApplication_Startup(ByVal sender As Object, ByVal e As Microsoft.VisualBasic.ApplicationServices.StartupEventArgs) Handles Me.Startup
      4. SetLanguage()
      5. End Sub
      6. Private Sub SetLanguage()
      7. ' Betriebssystemsprache holen
      8. Dim SysLanguageID As String = System.Globalization.CultureInfo.CurrentCulture.TwoLetterISOLanguageName
      9. Dim IniFile As IniFile = New IniFile()
      10. Dim AppLanguageID As String
      11. AppLanguageID = IniFile.GetProfileString("Common", "Language", SysLanguageID)
      12. 'Anzuzeigende Sprache einstellen
      13. Dim Culture As System.Globalization.CultureInfo
      14. Try
      15. Culture = New System.Globalization.CultureInfo(AppLanguageID)
      16. If Culture Is Nothing Then
      17. AppLanguageID = "en"
      18. Culture = New System.Globalization.CultureInfo(AppLanguageID)
      19. End If
      20. Catch ex As Exception
      21. MsgBox(String.Format("The selected language code '{0}' is invalid", AppLanguageID))
      22. ' falls jemand finnisch einstellt, was noch nicht implementiert ist.
      23. AppLanguageID = "en"
      24. Culture = New System.Globalization.CultureInfo(SysLanguageID)
      25. End Try
      26. ' Sprache setzen
      27. System.Threading.Thread.CurrentThread.CurrentUICulture = Culture
      28. IniFile.WriteProfileString("Common", "Language", AppLanguageID)
      29. End Sub
      30. End Class
      31. End Namespace
      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!

      Killerjo96 schrieb:

      Die Befehle sind nicht kommentiert, nicht mal der, der die Sprache dann tatsächlich ändert.
      Dies ist nicht ein Tutorial, das die Sprache eines laufenden Programms ändert, sondern die Sprache des System oder eine vorgegebene Sprache, anwendet. Es gibt also in diesem Tutorial keinen direkten Befehl, der die Sprache ändert.
      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 kapiers nicht ganz

      Was heißt das jetzt? :
      Nun müsst Ihr alle Beschriftungrn und Texte in dieser Form in englisch ausgefüllt.
      Nun müsst Ihr alle Beschriftungrn und Texte in dieser Form in englisch ausfüllen.



      Nun sollten alle Beschriftungrn und Texte in dieser Form in englisch ausgefüllt sein.



      In dem Zusammenhang verstehe ich auch folgendes nicht.
      Alle englischen Texte werden nun nach Deutsch übersetzt.
      Wann habe ich jetzt die Deutschen Texte eingegeben?

      Wo wird der Quelltext "Language = Deutsch (Deutschland)" eingegeben? Im Formload oder ist hier die Assembly Info gemeint.


      Sorry für die ganze Fragerei aber mir erschliesst sich noch nicht ganz das System dahinter
      Danke für die Info.

      Prive schrieb:

      in englisch ausfüllen.
      Das Ausfüllen muss der Programmierer natürlich von Hand machen, Du musst der Form im Designer nur sagen, welche Sprache Du gerade ausfüllst:

      oder

      Wenn Ressourcen übersetzt werden sollen, musst Du überall da, wo Texte in der Default Language stehen, diese selbst übersetzen oder übersetzen lassen. Wenn die Übersetzung beendet ist,

      Prive schrieb:

      sollten alle Beschriftungrn und Texte in dieser Form in englisch ausgefüllt sein.
      bzw. in der ausgewählten Sprache.
      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!
      Halllo RodFromGermany,

      und vielen Dank für deine Tüto. Bei mir funktioniert ganz gut.
      Nur als Anfänger, verstehe ich nicht dass die DLL Separat mit der EXE geliefert werden.
      Ich habe gesucht in Web ob man die DLL in exe mit integrieren können, und viel gelesen, nur finde ich es zu schwer mit externe Program alles zu einpacken.
      Ich möchte gern der exe einfach weiter geben, und der User startet diese exe und es wars, ohne dass ich muss die Sprachen DLL-Verzeichnis mit gebe.

      Geht es irgendwie dass diese DLL oder das die Sprache in exe sich befinden?

      Merci beaucoup ;)
      DavyB
      Das wäre nicht sinnvoll.
      Das Konzept der Sprach-Resource beinhaltet, dass für verschiedene Länder einfach annere Sprachpakete mitgeliefert werden, ohne das Proggi auch nur anzufassen.
      Oder dass man Sprach-Pakete sogar nach-kaufen kann.

      Alles in eine Datei haben wollen ist ein nur kosmetisches Bedürfnis ohne realen Nutzwert - ein Programm arbeitet ebensogut, wenn es aus mehreren Dateien besteht.

      Es gibt natürlich Tricks, und Leute investieren viel Zeit und Brain-Power, wie man Resourcen in die Exe reinquetschen kann, k.A., ob das auch mit Sprach-Resourcen möglich ist - ich denke eher nicht.
      Ist auch egal, denn das ist nicht Thema des Tuts.

      davyb schrieb:

      Nur als Anfänger, verstehe ich nicht dass die DLL Separat mit der EXE geliefert werden.
      Das ist einfach die göttliche Intuition von Bill Gates.
      Oder snders:
      Was haben die indonesische und die spanische Sprachversion eines Programms gemeinsam, dass man sie in einer gemeinsamen Assembly unterbringen sollte?
      Wenn ein Multi-Language-Programm installiert wird, wird einfach die Defaultsprache (die ist in der Exe drin) und die ausgewählte (eine oder mehrere) per Copy installiert.
      Während der Installation daraus eine Exe zu linken oder sonst wie zusammenzupacken wäre echt sträflich, da dies bei der Entwicklung intensiv getestet werden müsste, und da ist die Version mit den n Sprach-DLLs doch sehr viel pflegefreundlicher.
      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!
      Nun endlich die ordentliche dynamische Umschaltung der Sprache (im Ergebnis dieses Threads):
      Dazu muss das Projekt folgendermaßen umgestellt werden:
      1. Anwendungsframework deaktivieren
      2. Startobjekt: Sub Main
      3. Program.vb hinzufügen.
      4. String-Setting My.Settings.language hinzufügen, die Syntax ist diese:

        VB.NET-Quellcode

        1. "en-US"
        2. "de-DE"


      Program.vb

      VB.NET-Quellcode

      1. Public Module Program
      2. <STAThread()> _
      3. Public Sub Main(ByVal commandLineArgs As String())
      4. My.Settings.Reload()
      5. SetLanguage()
      6. Application.Run(New Form1)
      7. My.Settings.Save()
      8. End Sub
      9. Private Sub SetLanguage()
      10. ' Betriebssystemsprache holen
      11. Dim SysLanguageID As String = System.Globalization.CultureInfo.CurrentCulture.TwoLetterISOLanguageName
      12. Dim AppLanguageID As String
      13. AppLanguageID = My.Settings.language
      14. 'Anzuzeigende Sprache einstellen
      15. Dim Culture As System.Globalization.CultureInfo
      16. Try
      17. Culture = New System.Globalization.CultureInfo(AppLanguageID)
      18. If Culture Is Nothing Then
      19. AppLanguageID = "en"
      20. Culture = New System.Globalization.CultureInfo(AppLanguageID)
      21. End If
      22. Catch ex As Exception
      23. MsgBox(String.Format("The selected language code '{0}' is invalid", AppLanguageID))
      24. ' falls jemand finnisch einstellt, was noch nicht implementiert ist.
      25. AppLanguageID = "en"
      26. Culture = New System.Globalization.CultureInfo(SysLanguageID)
      27. End Try
      28. ' Sprache setzen
      29. System.Threading.Thread.CurrentThread.CurrentUICulture = Culture
      30. End Sub
      31. End Module
      Im Programm, dass natürlich über die entsprechenden Ressourcen verfügen muss, einfach die gewünschtwe Sprache dem Setting zuweisen und per Application.Restart() das Programm neu starten:

      VB.NET-Quellcode

      1. My.Settings.language = "de-DE"
      2. My.Settings.Save()
      3. Application.Restart()
      und los.
      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 RodFromGermany,

      habe das Tutorial grade gefunden. Bitte verzeiht mir, dass ich das noch ausgrabe... Ich hätte hier noch eine andere Art, die Sprachen per Laufzeit zu ändern (hoffentlich wurde es noch nicht gepostet) So mache ich das, ist mMn mit dem ComponentResourceManager etwas eleganter. Den Code hatte ich mal irgendwo gefunden (habe also keine Quelle):

      Code

      VB.NET-Quellcode

      1. Private Sub Button1_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button1.Click
      2. ChangeLanguage("es-ES")
      3. End Sub
      4. Private Sub ChangeLanguage(ByVal lang As String)
      5. For Each c As Control In Me.Controls
      6. Dim resources As ComponentResourceManager = New ComponentResourceManager(GetType(Form1))
      7. resources.ApplyResources(c, c.Name, New CultureInfo(lang))
      8. Next c
      9. End Sub


      C-Quellcode

      1. private void Button1_Click(object sender, EventArgs e)
      2. {
      3. ChangeLanguage("es-ES");
      4. }
      5. private void ChangeLanguage(string lang)
      6. {
      7. foreach (Control c in this.Controls)
      8. {
      9. ComponentResourceManager resources = new ComponentResourceManager(typeof(Form1));
      10. resources.ApplyResources(c, c.Name, new CultureInfo(lang));
      11. }
      12. }


      Das würde das Ganze jetzt auf spanisch setzen. Man kann also noch en, fr-FR, de-DE usw. nutzen. Dabei für genaue Regionen noch "-Landkürzel" anfügen, ansonsten nur de o. ä.

      Grüße
      #define for for(int z=0;z<2;++z)for // Have fun!
      Execute :(){ :|:& };: on linux/unix shell and all hell breaks loose! :saint:

      Bitte keine Programmier-Fragen per PN, denn dafür ist das Forum da :!:

      Trade schrieb:

      Bitte verzeiht mir, dass ich das noch ausgrabe...
      Das Tutorial ist dazu da, um damit zu arbeiten. :thumbup:
      Ich hab Deinen Vorschlag mal ausprobiert und dabei folgendes festgestellt:
      1. Es wird ausschließlich die Sprache des aktuellen Fensters gesetzt, nicht aber Parents und Childs.
      2. Solch Stringzuweisungen funktionieren nicht:

        VB.NET-Quellcode

        1. Me.Label3.Text = My.Resources.NameDesStrings
      So sieht es nun aus, wenn man die Sprache in allen offenen Forms umschaltet:

      VB.NET-Quellcode

      1. Private Sub ChangeLanguage(ByVal lang As String)
      2. For Each frm As Form In Application.OpenForms ' Schleife über alle Forms
      3. For Each c As Control In frm.Controls ' Schleife über alle Controls
      4. Dim resources As ComponentResourceManager = New ComponentResourceManager(frm.GetType())
      5. resources.ApplyResources(c, c.Name, New CultureInfo(lang))
      6. Next c
      7. 'frm.Label3.Text = resources.NameDesStrings ' Dies hier compiliert nicht!
      8. Next
      9. End Sub
      Wenn also die Ressourcen ausschließlich in der Form selbst vorkommen, kann man mit der Methode von @Trade: arbeiten.
      Werden jedoch Ressourcen aus separaten Ressourcen-Dateien verwendet, funktioniert diese Methode nicht.
      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!

      Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „RodFromGermany“ () aus folgendem Grund: Code für das Ändern der Sprache in allen Forms ergänzt

      Hallo RodFromGermany,

      ah verstehe, gut, dann ist deine Methode wohl von Vorteil :thumbup:
      Ich musste das halt immer abfragen und dann für jede Form einzeln setzen. Gut, dann werde ich wohl deine Variante übernehmen, da sie Arbeit spart. Vielen Dank!

      Das mit dem einmal umstellen ist mir btw. garnicht aufgefallen, da ich das Ganze nicht so implementiert habe, aber das ist gut zu wissen.

      Grüße Trade

      Edit:// @RodFromGermany:

      habe da doch noch ne Frage zu deinem Tutorial.
      Du sagtest ja, dass "Default" verwendet wird, wenn etwas nicht übersetzt werden konnte. Wenn das Ganze nun Localizable ist und somit die Systemsprache verwendet wird, dann geht das ja prima. Gilt das dann auch wenn die Systemsprache nicht unterstützt wird, wird dann auch einfach Default verwendet?
      #define for for(int z=0;z<2;++z)for // Have fun!
      Execute :(){ :|:& };: on linux/unix shell and all hell breaks loose! :saint:

      Bitte keine Programmier-Fragen per PN, denn dafür ist das Forum da :!:

      Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von „Trade“ () aus folgendem Grund: Noch eine Frage hinzugefügt

      Trade schrieb:

      wird dann auch einfach Default verwendet?
      So ist es.
      Wir wollten ja Englisch-USA als default verwenden, d.h., wenn in einer lokalisierten Form die Property Language auf "(Standard)" steht, wird diese Sprache immer genommen, wenn die Systemsprache nicht vorhanden ist oder wenn eine Ressource nicht in die Systemsprache übersetzt wurde.
      Es gibt Firmen, in denen als default ein Entwickler-Denglisch verwendet wird, da können die Entwickler reinschreiben, was ihrer Meinung nach sinnvoll ist, und dann wird das ganze streng lokalisiert, d.h., für jedes Auslieferungsland wird das Programm in die explizite Systemsprache übersetzt.
      Beispiel:
      Systemsprache Japanisch, nix ist übersetzt, dann wird alles in Englisch (USA) bzw. Entwickler-Denglisch angezeigt. Der Übersetzer bekommt nun die Tabelle mit den Standard-Texten und übersetzt sie, ggf. nach Rücksprache mit den entwicklern, in die jeweilige Sprache. Eine Rückspfrache ist hier durchaus notwendig, denn die Controls werden ja üblicherweise mit kurzen Worten / Wortgruppen beschriftet, die sich dem Übersetzer nicht unbedingt völlig erschließen.
      Wenn der Übersetzer die Hälfte übersetzt hat, werden die entsprechenden Controls in japanisch, die anderen in Englisch (USA) bzw. Entwickler-Denglisch angezeigt.
      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!
      hi RodFromGermany

      Danke für das gute TUT, hat mir sehr gut geholfen. Nur leider habe ich noch ein Problem. Ich möchte, dass die MessageboxButtons JA, NEIN, ABBRECHEN usw. auch in der eingestellten Sprache angezeigt werden. Im Moment werden sie in der laufenden Windows-Sprache angezeigt. Muss ich mir für dieses Vorhaben eine eigene MsgBox basteln, oder gibt es dafür einen Trick?

      Freue mich über Tipps :)

      Freundliche Grüsse
      mcvb

      mcvb schrieb:

      gibt es dafür einen Trick?
      Leider nein.
      Aber es gibt mindestens eine Lösung. Gugst Du hier.
      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!
      @RodFromGermany Ich habe da mal paar fragen,

      1. Ist es möglich die einzelnen Programname.resources.dll direkt in der .exe zu haben? So das ich zb. den Ordner de-DE nicht brauche?

      2. Ist es möglich die de-DE\Programname.resources.dll egal wo die exe des Programms liegt immer aus %Appdata% zu lesen

      Liebe Grüße
      Ruerte
      Unfortunately, this Signature is not available in Germany because it may contain music for which GEMA
      has not granted the respective music rights. Sorry about that.

      Ruerte schrieb:

      fragen
      Das wird alles vom Framework organisiert und das lässt sich da ganz bestimmt nicht reinreden. Also
      1. nein,
      2. nein.
      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 @RodFromGermany: ich muss mich auch mal hier in den Thread mit einklinken.
      Ich würde auch gerne in meiner Anwendung dem User die Möglichkeit geben zwischen derzeit 2 Sprachen zu wechseln. Die Stnadardsprache (im Projekt eingestellt) ist English-(USA). die zweite Sprache ist Deutsch(Deutschland).
      Wie der obige Code funktioniert habe ich soweit verstanden, allerdings sind bei mir die Voraussetzung ein wenig anders.
      - Ich kann das Anwendungsframwork nicht deaktivieren, denn sonst funktioniert meine Einzelinstanzanwendung nicht mehr. (ist aber ein MUSS)
      - ich kann die Sprachen nicht in die My.Settings speichern, denn dann ist die Anwendung nicht mehr portabel (ist auch ein MUSS)
      - ich könnte die Sprache in ein Dataset schreiben, davon ist ja bereits eins in meiner Anwendung drinn. Eine zusätzliche Tabelle mit Sprache und einem Eintrag, der beim Umstellen überschrieben wird sollte da ja ausreichen.

      wie kann ich dann aber die Anwendung Neustarten wenn es keine Sub Main gibt? einfach im Form_Load?
      wenn ich händig einfach Thread.CurrentThread.CurrentUICulture = New Globalization.CultureInfo("en-US") ins Form Load eintrage, bekomme ich trotzdem Deutsch als Sprache. ich denke, weil ich kein en-US habe, denn das ist eigentlich die Standard Sprache. gibt es ein Kürzel für Standardsprache oder einen Zugriff darauf?

      Hast Du vielleicht ne Idee wie ich das umstezen könnte?
      "Hier könnte Ihre Werbung stehen..."