Lokalisierung von Applikationen



  • Hallo,

    ich schreibe eine Windows-Applikation mit C# und möchte ALLE Strings lokalisierbar machen, d.h. alle Strings müssen auf verschiedene Sprachen einstellbar sein.

    Nun weiß ich, dass ich im Forms-Designer die Forms in verschiedenen Sprachen erstellen kann. Daraus werden einzelne Resource-DLLs kompiliert und automatisch die korrekte Sprache gewählt. allerdings habe ich mit dieser Methode 2 Probleme:

    1. Ich kann nur im Designer die Texte pro Sprache ändern. Das halte ich für unpraktisch, da ich gerne ohne neu kompilieren zu müssen neue Sprachen hinzufügen muss
    2. Viel schlimmer ist, dass ich so nur die Strings einstellen kann, die direkt auf der GUI auftauchen. Was mache ich mit z.B. mit Fehlermeldungen?!?!?! Die kommen aus dem Programm heraus und sind nicht von vornherein auf der GUI.

    Mir gefällt der Mechanismus mit den Resourcen eigentlich sehr gut, da ich so einfach eine Instanz von Syste,.Globalization.ResourceManager anlegen kann und ihm nur den "Basisnahmen" der Resources geben muss. Die aktuelle Sprache holt er sich selber.

    Hat jemand Erfahrungen damit und kann mir Tipps geben??



  • also, ich habe jetzt folgendes Tutorial gefunden: http://www.codeproject.com/dotnet/Localization.asp

    Das klappt auch ganz gut, leider muss man auf der Konsole arbeiten. Wenn jemand dafür noch eine elegantere Lösung hat, wäre ich dankbar. Oder man schreibt sich ein kleines Programm, was dann einfach die Prozesse aufruft. Ginge auch....



  • also was du brauchst ist ne Resource-Assembly Datei (neues Element ins Project einfügen)

    Die Resource-Datei ist sowas wie ne Tabelle. Name und Value eingeben

    Dann brauchst du nen ResourcenManager. Dem musst du dem Pfad der Datei angeben(Namespace.Dateiname)
    Jetzt kannst du da über die Namen in der Datei auf den Wert zugreifen. somit einfach einen String irgendwohin laden.
    Zum Schluss musst du noch die Culture setzen. Es müssen bestimmte Zeichen für bestimmte Sprachen benutzt werden. (siehe msdn)

    Die Datei muss eine ganz bestimmtes Chema haben
    Sprache.de.resx (deutsch)
    sprache.en.resx (englisch)
    sprache.en.us.resx (USA-Englisch) usw.

    Was du mit konsole meinst versteh ich nicht. Also ich kann alle Werte, die ich brauche einfach in die Tabelle eintippen



  • Hier gibt es einen Webcast dazu, vielleicht hilft er Dir ja.



  • Hi, danke euch beiden. Ich denke, das Prinzip habe ich verstanden und es auch schon in einer kleinen Testapplikation getestet. Aber folgende Fragen habe ich doch noch:

    1. Wenn ich in den Forms mit Localizable = true arbeite, muss ich ja doch für alle neuen Sprachen neu kompilieren. Wenn ich damit NICHT arbeite, muss ich ja von Hand alle Texte neu setzen, wenn ich die Sprache einstelle, da ich dann ja mit einer eigenen Resource arbeiten würde und nicht mehr die Resource der Form genutzt würde.

    2. Wie handelt man das am einfachsten? Ich habe in der Testapplikation eine Sigleton-Klasse geschrieben, die bei Änderung der Sprache die CurrentUICulture setzt, den ResourceManager neu erzeugt und ein Event wirft. Zudem hat sie Schnittstellen zum Zugriff auf die Resources, z.B. GetString(...). Ebenso habe ich ihr Konstanten verpasst, die die Identifier der Resourcen darstellen. Also, z.B. public const string TEXT1 = "text1", wenn in der Resource ein Eintrag text1 existiert.


Anmelden zum Antworten