Announcement

Collapse
No announcement yet.

Dynamische Lokalisierung

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Dynamische Lokalisierung

    Hallo Leute,

    ich würde gerne meine Anwendung dynamisch Lokalisieren.
    Ich habe auch alles so weit eingestellt (hab eine Texte.en.resx für englische Texte und Texte.resx für deutsche Texte) und alles wird generiert (auch meine DLL die im debug-Ordner unter EN/Test.resource.dll gespeichert wird.) und meine Masken sind deutsch und englisch.

    Bei Programmstart wird aus einer Ini der Pfad gelesen wo die sich DLL befindet (diese wird an einen anderen Ort liegen weswegen der Ort in der Ini steht.), das funktioniert auch so weit gut.

    Jetzt lese ich mit
    Code:
     DIM  AsVar as Assembly  = System.Reflection.Assembly.LoadFrom(PFAD)
    meine englische DLL in das Assembly ein und mit
    Code:
    Dim temp As Global.System.Resources.ResourceManager = New Global.System.Resources.ResourceManager("MEINPROGRAM.Texte", AsVar)
    baue ich den Resourcen Manager zusammen, so das er mein geladenes Assembly nutzt.

    Die .resx Dateien mit den Texten werden vom Designer automatisch generiert z.B.

    Code:
     <Global.System.ComponentModel.EditorBrowsableAttribute(Global.System.ComponentModel.EditorBrowsableState.Advanced)>  _
            Friend Shared ReadOnly Property ResourceManager() As Global.System.Resources.ResourceManager
                Get
                    If Object.ReferenceEquals(resourceMan, Nothing) Then
                        Dim temp As Global.System.Resources.ResourceManager = New Global.System.Resources.ResourceManager("MEINPROGRAM.Texte", GetType(Texte).Assembly)
                        resourceMan = temp
                    End If
                    Return resourceMan
                End Get
            End Property
    
            '''<summary>
            '''  Sucht eine lokalisierte Zeichenfolge, die Bitte wählen Sie erst ein Produkt&quot; ähnelt.
            '''</summary>
            Friend Shared ReadOnly Property Fehler_Produkt() As String
                Get
                    Return ResourceManager.GetString("Fehler_Produkt", resourceCulture)
                End Get
            End Property
    hab ich jetzt die Möglichkeit meinen Code anstelle des Codes im Property des ResourcenManagers zu nutzen ohne das er immer gelöscht wird beim neugenerieren oder gibt es doch eine andere Möglichkeit während der Laufzeit die Sprachdatei einzulesen ohne für alle Texte von Hand das Auslesen zu benutzen und statt dessen, dass schon automatisch generierte Codestück (Fehler_Produkt als beispiel) zu nutzen?


    Auch muss ich leider immer

    Code:
    Dim temp As Global.System.Resources.ResourceManager = New Global.System.Resources.ResourceManager("MEINPROGRAM.Texte.EN", AsVar)
    machen, also .EN für englische Texte anhängen, um meine englischen Texte einzulesen bzw. das .EN weglassen für meine deutschen Texte. Gibt es da auch eine potentielle Lösung oder muss ich dieses .EN dranhängen weil in der DLL die generiert wurde keine deutschen Texte besitzt?

    Vielen Dank im Vorraus

    Wayko

  • #2
    Originally posted by Wayko View Post
    Bei Programmstart wird aus einer Ini der Pfad gelesen wo die sich DLL befindet (diese wird an einen anderen Ort liegen weswegen der Ort in der Ini steht.), das funktioniert auch so weit gut.
    Vielleicht ist dies nicht die optimale Vorgehensweise. Evtl. lässt sich das mit der "Neutral Language" in den Assembly Einstellungen setzen.
    Schau mal mit dem Process Monitor wo dein Programm welche dll sucht. Unter Umständen kann man da was drehen.

    Gruss

    Comment


    • #3
      Warum versuchst du eigentlich die selbst zu laden? Das eingebaute Verfahren das die Resourcen Dll im passenden Sprachunterordner sucht wenn die CurrentUICulture passend gesetzt wurde funktioniert doch ordentlich.

      Comment


      • #4
        Originally posted by Ralf Jansen View Post
        Warum versuchst du eigentlich die selbst zu laden? Das eingebaute Verfahren das die Resourcen Dll im passenden Sprachunterordner sucht wenn die CurrentUICulture passend gesetzt wurde funktioniert doch ordentlich.
        Wir würden gerne die Dateien an einen anderen Ort ablegen, weil es für die Wartung unseres Programmes besser ist.

        Ist das was ich möchte prinzipiel möglich oder eher nicht?

        Comment


        • #5
          Na klar ist es möglich. Aber selber machen heißt dann üblicherweise wirklich selber machen Ich glaube kaum das man die Wartung vereinfacht wenn man den Standard weg verläßt. Man schafft vermutlich mehr neue Probleme als man alte löst.

          Wenn du nur die Satellite Assemblies woanders liegen haben willst könntest du diesen Ordner als weiteren Probing Ordner in der App.Config konfigurieren. Das müßte auch bei den Sprachassembleis funktionieren. Hab ich allerdings noch nicht probiert. Dann sollte wieder umschalten von CurrentUICulture weiterhin reichen.

          Comment

          Working...
          X