Culture festlegen

  • VB.NET

Es gibt 21 Antworten in diesem Thema. Der letzte Beitrag () ist von Kagurame.

    Culture festlegen

    Hallo,

    ich habe in meinem Projekt eine deutsche und eine Englische Sprachdatei.
    Nun möchte ich, dass alle ausgaben Anhand der Sprachdatei generiert werden, abhängig der Sprache im System.

    Also eine LanguagePack.resx-Date und eine LanguagePack.de.resx-Datei.

    Ich lege die Sprache folgender maßen fest:

    VB.NET-Quellcode

    1. My.Application.ChangeCulture(System.Globalization.CultureInfo.CurrentCulture.ToString)
    2. My.Application.ChangeUICulture(System.Globalization.CultureInfo.CurrentUICulture.ToString)
    3. Dim test As String = My.Resources.LanguagePack.alredyExistingGroup


    Es funktioniert nicht, ich habe schon im Netz gesucht, meistens stoße ich darauf, dass es so ginge.

    Kann vielleicht einer helfen, warum es nicht funktioniert?

    lg. Kagu



    Edit by Dodo:
    -> Thread verschoben (Grundlagen => Hauptforum)

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

    Es ist richtig geschrieben, das Ding ist wenns in der Language-File drin is auch in der Intellisence drinne, sogar renaming klappt. Und es tritt kein Fehler auf, er nimmt einfach Englisch -.- Und mein OS is DE

    Edit: Weiter getestet

    Ich habe nochmal genauer Nach geguckt.

    (Testprojekt)
    Ich habe zwei Resource-Dateien erstellt (eine namens Sprache.resx und eine Sprache.de.resx)
    Inhalt der Sprache.resx:


    Sprache Englisch

    Inhalt Sprache.de.resx:


    Sprache Deutsch

    Und folgenden Testcode:

    Spoiler anzeigen

    VB.NET-Quellcode

    1. Console.WriteLine("Ausgabe vom System: {0}", Globalization.CultureInfo.CurrentUICulture.ToString)
    2. Dim uiCul As String = Console.ReadLine
    3. If Not uiCul = "de-DE" Then
    4. uiCul = "en-US"
    5. End If
    6. Console.WriteLine("Setzen durch Eingabe")
    7. Console.WriteLine(uiCul)
    8. My.Application.ChangeUICulture(uiCul)
    9. Console.WriteLine(My.Resources.Sprache.Sprache)
    10. Console.WriteLine("Setzen durch Code")
    11. My.Application.ChangeUICulture("en-US")
    12. uiCul = Globalization.CultureInfo.CurrentUICulture.ToString
    13. Console.WriteLine(uiCul)
    14. Console.WriteLine(My.Resources.Sprache.Sprache)
    15. Console.WriteLine("Ausgabe vom System: {0}", Globalization.CultureInfo.CurrentUICulture.ToString)
    16. Console.ReadLine()


    Wenn ich Anfangs irgendetwas eingebe, wird die Englische File benutzt, wenn ich de-DE eingebe, wird die deutsche verwendet.

    Dies habe ich so getestet, da im eigentlichen Programm folgender Code steht:

    VB.NET-Quellcode

    1. Dim uiCulture As String = Globalization.CultureInfo.CurrentUICulture.ToString
    2. If Not uiCulture = "de-DE" Then
    3. uiCulture = "en-US"
    4. End If
    5. My.Application.ChangeUICulture(uiCulture)


    Dabei soll, wenn eine andere UICulture als "de-DE" vom System verwendet wird Englisch verwendet werden ("en-US")

    Habe einen testwert zugewiesen und bekomme IMMER ein Englisches Ergbeniss.
    Er stellt auf Deutsch um, aber verwendet es nicht...

    Habe beide Dateien auch mal neu erstellt, geguckt das überall die richtigen Namen sind, neu übersetzt etc. etc.

    Was könnte hier das Problem sein?

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

    Funktioniert ebenfalls nicht.

    Jedoch haben wir herausgefunden, dass My.Application evtl. nicht Funktioniert, da es ein Service ist und damit keine Application dahinter steckt.

    folgende Versuche haben wir gemacht:

    VB.NET-Quellcode

    1. My.Application.ChangeUICulture(uiCulture)

    VB.NET-Quellcode

    1. My.Resources.Culture = System.Globalization.CultureInfo.GetCultureInfo(uiCulture)


    VB.NET-Quellcode

    1. Dim Culture As System.Globalization.CultureInfo = New System.Globalization.CultureInfo(uiCulture)
    2. System.Threading.Thread.CurrentThread.CurrentUICulture = Culture


    Funktioniert beides ebenfalls nicht. Weiß da einer weiter?

    (In uiCulture stand testweise "de-DE" und auch zum testen mal nur "de" drinne.)
    Es handelt sich bei mir um einen WCF-Service, der keine App drunter hat. Es stürzt nicht ab, es setzt die Culture, aber es liefert immer nur die Englischen Ergebnisse.
    Meine resx-Files sind in Ordnung, habe sie in einem Testprojekt getestet, wo es komischer weiße geht...

    Ist da was spezielles über WCF bekannt? O.o
    Sieh Dir mal meinen Beitrag genau an.
    Lass das System die Sprache auswählen.
    Default: Englisch-USA und dann Deutsch-DE untersetzen.
    Vielleicht erstellst Du Dir ein kleines Testprojekt dazu.
    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!

    Kagurame schrieb:

    habe sie in einem Testprojekt getestet, wo es komischer weiße geht...

    Ich habe ein testprojekt, in dem es genau so gemacht wird, wie im Service. Ich lasse das System die Sprache auswählen, mit der einzigsten Überprüfung, ob es was anderes als DE ist, um dann Englisch zu wählen. Das System ist deutsch und er setzt keinen Default, was darauf hinaus läuft in dem Fall, dass es die vom System gewählte Sprache ist.

    Dein Beispiel ist eines von vieles, bei denen der Fall auftritt.
    Der Sinn des Verfahrens besteht darin, dass die Defaultsprache englisch ist.
    Üblicherweise wird in der Welt englisch gesprochen, und wenn die aktuelle Sprache nicht vorhanden ist, nimmt das System halt die Default-Sprache, nämlich englisch.
    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!

    Kagurame schrieb:

    (eine namens Sprache.resx und eine Sprache.de.resx


    Vielleicht hast du es überlesen...

    Ich habe eine englische und eine Deutsche Sprachfile, in einem Testprojekt funktioniert es, in meinem eigentlichen nicht. Ich habe in beiden Projekten die selbe Einstellung, die selben Files, den selben Code. Der einzige Unterschied ist, dass es sich bei dem nicht funktionierenden um einen WCF-Service handelt.
    Wozu sollte ein Service Ressourcen benötigen?
    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!
    Der Service benötigt Resourcen, weil die Rückgaben, die er erzeugt, auch in der entsprechenden Frage zurück gegeben werden sollen.

    Dabei verfolge ich eigentlich den Ansatz, dass Rückgaben in Client-Sprache gegeben werden (was sich dann am besten auf dem Client übersetzen lässt), mein Ausbilder ist der Ansicht, dass die Sprache des Service hier relevant ist.

    Aber seis drum, ist ja egal, warum der Service Resources benötigt, ich "darf" keinen anderen Ansatz verfolgen als diesen mit Resourcen.

    Code ist in fast jedem meiner Posts gegeben, aber hier nochmal der Teil, welcher im Testprojekt steht, und dort auch funktioniert. Die genau gleichen Ansätze funktionieren im Service nicht.

    Spoiler anzeigen

    VB.NET-Quellcode

    1. Module Module1
    2. Sub Main()
    3. Console.WriteLine("Ausgabe vom System: {0}", Globalization.CultureInfo.CurrentUICulture.ToString)
    4. Dim uiCul As String = Console.ReadLine
    5. If Not uiCul = "de-DE" Then
    6. uiCul = "en-US"
    7. End If
    8. Console.WriteLine("Setzen durch Eingabe")
    9. Console.WriteLine(uiCul)
    10. My.Application.ChangeUICulture(uiCul)
    11. Console.WriteLine(My.Resources.Sprache.Sprache)
    12. Console.WriteLine("Setzen durch Code")
    13. My.Application.ChangeUICulture("en-US")
    14. uiCul = Globalization.CultureInfo.CurrentUICulture.ToString
    15. Console.WriteLine(uiCul)
    16. Console.WriteLine(My.Resources.Sprache.Sprache)
    17. Console.WriteLine("Ausgabe vom System: {0}", Globalization.CultureInfo.CurrentUICulture.ToString)
    18. Console.WriteLine("################################")
    19. Dim uiCulture As String = Globalization.CultureInfo.CurrentUICulture.Name
    20. If Not uiCulture = "de-DE" Then
    21. uiCulture = "en-US"
    22. End If
    23. uiCulture = "de-de"
    24. Dim Culture As System.Globalization.CultureInfo = New System.Globalization.CultureInfo(uiCulture)
    25. System.Threading.Thread.CurrentThread.CurrentUICulture = Culture
    26. 'My.Resources.ResourceManager.GetString()'
    27. Console.WriteLine(My.Resources.Sprache.Sprache)
    28. Console.WriteLine(My.Resources.LanguagePack.insufficientPermissions)
    29. Dim manager As New System.Resources.ResourceManager("CultureInfo.LanguagePack", System.Reflection.Assembly.GetExecutingAssembly)
    30. Dim txt As String = manager.GetString("insufficientPermissions", Culture)
    31. Console.WriteLine(txt)
    32. Console.ReadLine()
    33. End Sub
    34. End Module
    Fehlermeldung: Nein
    Fehlerzeile: Aufgrund fehlender Fehlermeldung nicht vorhanden
    Fehlverhalten: Er verwendet in allen Fällen die Englische Sprachdatei zum generieren von Antwort-Texten, im Testprojekt wechselt er an den entsprechenden Stellen auf die Deutsche Sprachdatei.
    Ich auch, aber er ist da, ok, ich arbeite da dann über

    VB.NET-Quellcode

    1. System.Threading.Thread.CurrentThread.CurrentUICulture


    Dass sollte ja (rein theoretisch) dann Funktionieren...

    Inhalt LanguagePack.resx:


    insufficientPermissions: Insufficient permissions
    in der Deutschen:


    insufficientPermissions: TestValue
    Bilder
    • Ausgabe Culture.png

      4,55 kB, 265×177, 1.675 mal angesehen

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „Kagurame“ ()

    Möglicherweise hast Du Dir die "einfachen" Wege verbaut, weil Du mit Gewalt eine aufwändigere Philosophie implementieren willst.
    Solch Sachen musst Du in Deinem Projekt zu Beginn einbauen und dann alles andere danach ausrichten.
    Hat es Zweck, dass Du mit einem leeren Projekt neu angängst und dann den Rest rüberziehst?
    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!