Laden...

Programm mehsprachig gestalten

Erstellt von IamTheBug vor 18 Jahren Letzter Beitrag vor 18 Jahren 3.827 Views
I
IamTheBug Themenstarter:in
401 Beiträge seit 2006
vor 18 Jahren
Programm mehsprachig gestalten

hallo,

ich habe mal eine frage zu folgendem was ich gerne umsetzen möchte.
Also ich wollte ein kleines bis mittleres Programm schreiben 😉 was mir dann auch die möglichkeit geben soll zwischen Sprachen zu wechseln. Also GUI und entsprechende Meldungen sollen je nach Einstellung in der entsprechenden Sprache dargestellt werden.

Wie setzt man sowas am besten um? Mir fehlt da so die Erfahrung.
Ich hatte mir gedacht das ich für jede Sprache eine eigene dll erstelle. Das Programm soll dann aus der dll den entsprechenden string auslesen.
Wie macht man das aber am besten? Packe ich in die dll dann am besten nur eine Methode mit einer riesigen switch Anweisung und die Methode gibt mir dann ahängig vom eingegeben Parameter den entsprechenden String zurück? oder geht das ganze auch eleganter?

Ich habe das mal bei einem C++ Projekt gesehen, wo das irgendwie mit String Tables gelöst wurde.
Wie macht man das generell in C#? Was wäre ein guter und sauberer Ansatz?

Mfg

IamTheBug

149 Beiträge seit 2005
vor 18 Jahren

Warum machst du das nicht mit einer einfachen Text-Datei oder mit XML?

Du müsstest dann im Programm nur die Datei mit der richtigen Sprache auslesen, und den Steuerelementen die richtigen Texte zweisen.

Der Aufbau einer einfachen Text-Datei könnte z.B. so aussehen:

000=Mein erster String
001=Und noch einer...
...
...
...

Du könntest dann dir ein string[] aufbauen und das füllen, indem du die Zahlen vor dem Gleichheitszeichen als index verwendest.

Alternativ wäre auch eine Collection zu verwenden.

Schon als Kindern war uns klar: Jeder von uns wird ein Star, oder Millionär - das ist doch auch nicht schwer. Dem Alkohol nicht abgeneigt, war es für uns auch nicht leicht. Durch seine Hände Arbeit, wird man auch nicht gleich ein Scheich.
49.485 Beiträge seit 2005
vor 18 Jahren

Hallo IamTheBug,

in .NET gibt es extra Klassen für die Globalisierung/Lokalisierung. Wenn du es sauber haben willst, solltest du diese verwenden. Es geht ja bei diesen Themen normalerweise auch um mehr, als um die Sprache, z.B. um Zahlen- und Datumsformate u.v.a.m. => SDK-Doku

Ansonsten such mal im Forum nach den genannten Begriffen oder nach Multilanguage.

herbivore

140 Beiträge seit 2004
vor 18 Jahren
I
IamTheBug Themenstarter:in
401 Beiträge seit 2006
vor 18 Jahren

vielen dank erstmal für die Antworten, werde mich mal durch die vorschläge wühlen.
Das mit der Textdatei dachte ich mir auch schon aber alles in einer *.dll zu haben finde ich sieht "cooler" aus 😉

edit: habe gerade eben mal diese Seite http://www.codeproject.com/csharp/multilanguageapplications.asp überflogen

genau so mit den assembly ressource dateien wollte ich es auch machen. leider wusste ich nicht wie. Ich denke mal die Anleitung da wird mir weiterhelfen. Nochmals danke, ich werd berichten ob es geklappt hat 😉

Mfg

IamTheBug

100 Beiträge seit 2005
vor 18 Jahren

Das ganze ist eh ziemlich einfach...

Im Form Designer Localizable Eigenschaft in der Form auf True stellen.

Und dann kannst du mit Language eine neue Sprache einstellen.

Dadurch wird im Hintergrund automatisch ein neues Resource File erstellt, in dem dann die neuen Texte und Control-Positionen(!!) für diese Sprache gespeichert werden!

Der Rest ist auf codeproject eh ganz gut beschrieben.

lg,
kakaomilch.

MSDN Link

C
156 Beiträge seit 2004
vor 18 Jahren

Hallo,

ich kann mich herbivore nur anschließen. Ich würde die .NET Klassen für die Globalisierung/Lokalisierung verwenden. Nur ein paar Beispiele:
Datumsformate, die Amis haben im tausender eine Trennpunkt, die Iraner lesen von links nach rechts usw. (wobei ich mir bei dem von links nach rechts nicht sicher bin ob die Klassen das Problem auch abfangen… 🙂)

Gruß
chaossurfer

I
IamTheBug Themenstarter:in
401 Beiträge seit 2006
vor 18 Jahren

und diese ganzen resourcen dateien werden dann in das ausfürhbare projekt mit reincompiliert? gibt es da auch die möglichkeit der auslagerung?

ich werde das heute abend mal in angriff nehmen und versuchen umzusetzen

Mfg

IamTheBug

100 Beiträge seit 2005
vor 18 Jahren

Oja wenn du das mit Localizable machst (also mit Localization der Windows Form) kann man auch angeben RightToLeft = True.. also dass die Sprache von links nach rechts geschrieben wird.

100 Beiträge seit 2005
vor 18 Jahren

@IamTheBug:

Also Prinzipiell wird für jede Sprache eine eigene Resource Datei erstellt...
Sogenannte Satelite-Assemblies..

z.B: MeinProgramm.DE-AT.dll für die Österreichische version...

0
767 Beiträge seit 2005
vor 18 Jahren

Original von chaossurfer
die Iraner lesen von links nach rechts usw.

ich dachte das tun auch wir auch... zumindest ich 😁

scnr...

aber um beim thema zu bleiben, manchmal verlangt auch der satzbau eine andere reihenfolge von zahlen, das lässt sich dann auch lösen, indem dann ein string eben in (zB griechisch) so aussieht: "{2} ... {1} ... {0}"

loop:
btst #6,$bfe001
bne.s loop
rts

170 Beiträge seit 2005
vor 18 Jahren

Ich halte von Localizable nicht all zu viel. Zum einen wegen dem bereits genannten
Argument, dass es viel zu viele Resourcen werden und zum anderen wird so auch
die Möglichkeit versperrt, dass die User selbst Übersetzungen erstellen.

Ich mache es per XML-File. Das Einstellen der Zahlen / Datumsformatierung
geht ja trotzdem.

Edit: Das XML-File stellt dabei eine Text-zu-Text Übersetzung zur Verfügung,
was das Übersetzen einfacher macht und zudem auch die Entwicklung er-
leichtert, da die komplette Anwendung einfach in Englisch geschrieben wird.

100 Beiträge seit 2005
vor 18 Jahren

Original von inTrance
... wird so auch die Möglichkeit versperrt, dass die User selbst Übersetzungen erstellen.

Das stimmt nicht ganz... mit WinRes.exe (vom SDK) kann man sogar graphisch die resourcen editieren (also die positionen der controls und die texte)

MSDN Link

lg,
kakaomilch.

I
IamTheBug Themenstarter:in
401 Beiträge seit 2006
vor 18 Jahren

ich bin zwar noch nicht ganz durch mit dem thema aber ich muss sagen diese localize sache find ich auch nicht so doll, da er mir zu viele sachen in die xml datei setzt die ich da nicht haben will

ich werde mir manuell die resourcen datein erstellen und da nur das eintragen was ich auch brauche so wie es auf der beipielseite gezeigt wird.

die dateinamen der entstandenen dlls sind etwas unschön
wie kann ich die ändern?
irgendwo bei den compiler oder projekteinstellungen?

Mfg

IamTheBug

I
IamTheBug Themenstarter:in
401 Beiträge seit 2006
vor 18 Jahren

so ich bins nochmal. klappt alles super.
nun nochmal eine frage. wie kann ich die dateinamen ändern bzw bestimmen? er erstellt mir ja immer eine progamname.resource.dll. würde da schon gerne einen schöneren namen haben.
ausserdem haut er jede sprache in einen eigenen unerordner wie z.b. "de" und "ne"
wie mache ich das das er alles in ein unterverzeichniss "sprachen" legt?

ansonten geht alles gut, habe das Prinzip verstanden und ist im grunde sehr einfach.
danke dafür nochmals

Mfg

IamTheBug

1.271 Beiträge seit 2005
vor 18 Jahren

Dauert zwar noch, aber am 16. MÄRZ gibt es einen Webcast Lokalisierte Applikationen mit Windows Forms. Das wird dann wohl nur ein paar Tage dauern und man kann ihn runterladen.

A wise man can learn more from a foolish question than a fool can learn from a wise answer!
Bruce Lee

Populanten von Domizilen mit fragiler, transparenter Außenstruktur sollten sich von der Translation von gegen Deformierung resistenter Materie distanzieren!
Wer im Glashaus sitzt, sollte nicht mit Steinen werfen.

I
IamTheBug Themenstarter:in
401 Beiträge seit 2006
vor 18 Jahren

so ich bins nochmal...
wie ich den Dateinamen anpassen kann habe ich raus. Leider werden die dlls noch in "hässliche" unterordner gepackt aber das ist erstmal egal...

Andere Frage aber: Wie kann ich die dann erstellten dlls mit einer Descreption und Produktname usw versehen? Versionsinformation lies sich leicht ändern dies konnte ich in der XML Resourcen Datei eintragen. Da stand schon so etwas wie "version 1.0" das wurde halt einfach geändert. Ich habe auch versucht dort Description 12345 hinzu zufügen doch leider ohne Erfolg. Wo muss ich das machen? bin ich da im resheader abschnitt der xml datei überhaupt richtig? Habe im netz keine Infos gefunden

Mfg

IamTheBug