Programmsprache wechseln

  • VB.NET

Es gibt 3 Antworten in diesem Thema. Der letzte Beitrag () ist von silverbob76GE.

    Programmsprache wechseln

    Ausgelagert aus Programme mehrsprachig erstellen. ~Thunderbolt

    Hallo

    sorry das ich diesen thread wieder aufleben lasse. Hab leider nach vielem Suchen nichts adäquates gefunden und lande immer wieder hier. Ich hab in vb mehrere Forms geschrieben, alles relativ simpel gehalten.

    Nun möchte ich dem Anwender bei Programmstart die Möglichkeit geben, die Sprache auszuwählen.
    Hab als defaulsprache "Englisch-USA" ausgewählt, wie oben von Rod beschrieben. Hab die Form1 auf Localizable = true gesetzt. Die Texte für Defaultsprache (Emglish-US) sind alle drin. Auch die Übersetzung ins deutsche habe ich vorgenommen. Soweit so gut.
    WIe kann ich nun die Abfrage bei Programmstart einpflegen? Wäre auch denkbar, das der User die Sprache auswählt und das Programm neugestartet wird. Bekomme es aber nicht hin. Kann ich den Code von übernehmen? Brauche ich die ini?

    Aktuell ändere ich die Sprache über my.application. Das ganze direkt nach "Public Class Form 1".

    VB.NET-Quellcode

    1. My.Application.ChangeUICulture("en-US")
    2. InitializeComponent()
    3. Application.Restart()


    Aber dazu muss ich immer in den Code, und der User soll das japer Auswahl machen können. Wäre dankbar für jeden Tip.

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

    Hi,
    ich hab es bei mir (pasGen) so gemacht:

    in den Settings habe ich einen Eintrag erstellt für die Sprache, dort steht quasi en-US oder de-DE drin.
    in der ApplicationEvents.vb starte ich die Funktion von @RodFromGermany oben.
    Die Sprache ändere ich über eine Settingsfrom. Wird dort eine andere Sprache ausgewählt, wird quasi nur der Setting wert geändert und die Anwendung neu gestartet:
    ApplicationEvents.vb

    VB.NET-Quellcode

    1. Private pasGenFunctions As New pasGenHelper.pasGenFunc
    2. Private Sub MyApplication_Startup(sender As Object, e As ApplicationServices.StartupEventArgs) Handles Me.Startup
    3. If My.Settings.upgradeSettings Then
    4. My.Settings.Upgrade()
    5. My.Settings.upgradeSettings = False
    6. End If
    7. pasGenFunctions.SetLanguage()
    8. End Sub

    Die Funktion SetLanguage:

    VB.NET-Quellcode

    1. ​Public Sub SetLanguage()
    2. m_appLang = My.Settings.appLanguage
    3. Dim Culture As System.Globalization.CultureInfo
    4. Try
    5. Culture = New System.Globalization.CultureInfo(m_appLang)
    6. If Culture Is Nothing Then
    7. m_appLang = "en-US"
    8. Culture = New System.Globalization.CultureInfo(m_appLang)
    9. End If
    10. Catch ex As Exception
    11. MessageBox.Show(My.Resources.msgLangID, My.Resources.msgTitle, MessageBoxButtons.OK, MessageBoxIcon.Error)
    12. m_appLang = "en-US"
    13. Culture = New System.Globalization.CultureInfo(m_appLang)
    14. End Try
    15. System.Threading.Thread.CurrentThread.CurrentUICulture = Culture
    16. End Sub

    in der Settingsform:

    VB.NET-Quellcode

    1. ​Case sender Is btnEnglish : My.Settings.appLanguage = "en-US" : frmMain.Dispose() : Application.Restart()
    2. Case sender Is btnGerman : My.Settings.appLanguage = "de-DE" : frmMain.Dispose() : Application.Restart()

    eine Ini für die Übersetzungen brauch ich nicht, Texte die über Code geändertw erden (wie zum Beispiel MessageBox) habe ich in 2 Ressourcen Dateien, Englisch und Deutsch.
    Die Beschriftungen in den Forms änderst Du ja, indem Du die Language der Form umstellst.
    "Hier könnte Ihre Werbung stehen..."
    @silverbob76GE Du musst nur das richtige Setting anlegen und befüllen, My.Settings.language:

    RodFromGermany schrieb:

    VB.NET-Quellcode

    1. Private Sub SetLanguage()
    2. ' Betriebssystemsprache holen
    3. Dim SysLanguageID As String = System.Globalization.CultureInfo.CurrentCulture.TwoLetterISOLanguageName
    4. Dim AppLanguageID As String
    5. AppLanguageID = My.Settings.language ' diese Zeile
    6. 'Anzuzeigende Sprache einstellen
    7. Dim Culture As System.Globalization.CultureInfo
    8. Try
    9. Culture = New System.Globalization.CultureInfo(AppLanguageID)
    10. If Culture Is Nothing Then
    11. AppLanguageID = "en"
    12. Culture = New System.Globalization.CultureInfo(AppLanguageID)
    13. End If
    14. Catch ex As Exception
    15. MsgBox(String.Format("The selected language code '{0}' is invalid", AppLanguageID))
    16. ' falls jemand finnisch einstellt, was noch nicht implementiert ist.
    17. AppLanguageID = "en"
    18. Culture = New System.Globalization.CultureInfo(SysLanguageID)
    19. End Try
    20. ' Sprache setzen
    21. System.Threading.Thread.CurrentThread.CurrentUICulture = Culture
    22. End Sub
    Erst wenn die nicht vorhanden ist, wird englisch genommen.
    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!
    H,

    danke schon mal für eure Antworten. Hab eine Klasse INI zum Projekt hinzugefügt. Brauche ich die nun doch nicht mehr?
    Hab den Code nun angepasst. Vertehe aber immer noch nicht, was ich in my.settings.language eintragen soll:

    Aktuell habe ich da:

    language "de-DE" stehen. Wenn ich einen zweiten String "language" hinzufügen will, geht das nicht. ist ja auch klar. Oder kommt das in die gleiche Zeile, nur durch ein Komma getrennt. Blick hier echt nicht durch.

    Jemand Rat? Sry, bin kein Profi, sind bestimmt blöde Fragen, aber verstehe die Anleitung halt nicht zu 100%.

    mfg, silver

    EDIT:

    Hi noch mal

    habs jetzt auf doof einfach ausprobiert, und siehe da, es funzt.
    In my.settings einen String einfügen: language.

    Im Wert des Strings hab ich eingetragen: "de-DE", "en-US".

    Es klappt wunderbar. Vielen vielen Dank, war schon am verzweifeln. Wahnsinn.

    Danke für die Hilfe

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Marcus Gräfe“ ()