Best Practice für die Erstellung einer mehrsprachigen Anwendung in C # / WinForms? [geschlossen]

94

Ich habe versucht, Anwendungen für mehrere Sprachen in C # geeignet zu machen, da ich an einem kleinen Projekt arbeiten muss, in dem dies der Fall ist. Ich habe grundsätzlich zwei Möglichkeiten gefunden, dies zu tun:

Setzen Sie die Localizable-Eigenschaft eines Formulars auf true, setzen Sie die Language-Eigenschaft, füllen Sie alle Beschriftungen und dergleichen aus, und schon sind Sie fertig. Der Hauptnachteil, den ich darin sehe, ist: wie man andere Dinge, die nicht Teil eines Formulars sind, für mehrere Sprachen bereit macht (z. B. Popup-Fenster, Protokolldateien oder Fenster usw.).

Erstellen Sie eine Ressourcendatei, zum Beispiel 'Lang.en-us.resx' und eine für jede Sprache, zum Beispiel 'Lang.nl-nl.resx', und füllen Sie sie mit Strings. Die IDE scheint automatisch eine Klasse für mich zu generieren, daher kann ich im Code nur Lang.SomeText verwenden. Der größte Nachteil, den ich darin sehe, ist: Für jedes Formular muss ich alle Beschriftungen und anderen Beschriftungen selbst im Code festlegen (und es scheint, dass die Datenbindung mit diesen Ressourcen nicht funktioniert).

Ich bin mir jedoch sicher, dass es auch andere Methoden gibt, um dies zu tun.

Was ist die beste Vorgehensweise? Was ist für kleine Anwendungen am einfachsten (einige Formulare, Datenbankverbindung usw.) und was lässt sich für größere Anwendungen am besten skalieren?

Mihai Limbășan
quelle
3
Mir ist aufgefallen, dass nicht konstruktive (oder andere "nicht für SO gültig" Fragen) eine der wertvollsten Fragen sind :) Diese Frage ist auch eine gute Frage (ich denke, Stimmen beweisen das). Hier ist eine gute Demonstration, wie Verwendung eines mehrsprachigen Add-
Ins
1
Es ist manchmal so schwer, alle Wissensfragmente im Internet zusammenzufügen, und ich finde diese Frage momentan von unschätzbarem Wert. Sicherlich gibt es Zeiten, in denen das Schließen weicher Fragen weniger konstruktiv ist als das Offenlassen, und ich würde denken, dass dies eine dieser Zeiten ist. :)

Antworten:

20

Ich habe immer Ressourcendateien für mehrsprachige Anwendungen verwendet.
Es gibt viele Artikel im Web, die erklären, wie man sie benutzt.

Ich habe zwei verschiedene Wege benutzt:

  • Eine Ressourcendatei pro Formular
  • Eine globale Ressourcendatei

Die Ressourcendatei / das Formular ist einfacher zu implementieren. Sie müssen nur die Werte in die Ressourcendatei eingeben. Ich finde es jedoch schwieriger, diesen Ansatz beizubehalten, da die Beschriftungen in der gesamten Anwendung verteilt sind.

Mit der globalen Ressourcendatei können Sie alle Beschriftungen (Bilder usw.) in einer Datei (pro Sprache) zentralisieren. Sie müssen jedoch die Beschriftungen beim Laden des Formulars manuell festlegen. Diese Datei kann auch für Fehlermeldungen usw. verwendet werden.

Eine Frage des Geschmacks ...

Ein letzter Punkt, ich schreibe Programme in Englisch und Französisch, ich benutze "en" und "fr" und nicht "en-US" und "fr-FR". Machen Sie die Dinge nicht komplizierter, die verschiedenen Dilelects des Englischen (Amerikanisch, Englisch, Australisch usw.) weisen nur wenige Unterschiede auf, um nur einen zu verwenden (das gleiche gilt für Französisch).

ThatBloke
quelle
2
Manchmal muss man sich um Dialekte sorgen. Zum Beispiel sind die chinesischen Schriftzeichen im traditionellen Chinesisch (Taiwan) völlig anders als im vereinfachten Chinesisch (Festlandchina).
MarkJ
1
In der MSDN-Dokumentation von @MarkJ wird erwähnt, dass traditionelles Chinesisch und vereinfachtes Chinesisch keine Dialekte (Land / Region), sondern neutrale Kulturen sind. Msdn: "Eine neutrale Kultur ist eine Kultur, die mit einer Sprache verbunden ist, aber nicht mit einem Land / einer Region. Eine bestimmte Kultur ist eine Kultur, die mit einer Sprache und einem Land / einer Region verbunden ist. Zum Beispiel ist" fr "neutral Kultur und "fr-FR" ist eine spezifische Kultur. Beachten Sie, dass "zh-CHS" (vereinfachtes Chinesisch) und "zh-CHT" (traditionelles Chinesisch) neutrale Kulturen sind. "
Breitband
Ich habe dies kürzlich mithilfe eines Links getan , 2 Schritte, die dort nicht erwähnt wurden: 1. Klicken Sie auf alle .ressource-Dateien und setzen Sie die Eigenschaft "Build Action" auf "Content". 2. Klicken Sie auf alle .ressource-Dateien und setzen Sie die Eigenschaft "In Ausgabeverzeichnis kopieren" auf "Immer kopieren".
Sourav
1
@Kiquenet Eine vollständige Antwort (mit Code) einschließlich Unterstützung für .NET finden Sie unter: stackoverflow.com/a/35813707/2901207
CularBytes
9

Ich habe kürzlich ein Programm mit deutscher und englischer Unterstützung geschrieben. Ich war überrascht herauszufinden, dass wenn ich einfach meine englischen Ressourcen LanguageResources.resx und meine deutschen Ressourcen LanguageResources.de.resx nannte, automatisch die richtige Sprache ausgewählt wurde. Der ResXFileCodeGenerator hat sich für mich um alles gekümmert.

Beachten Sie, dass die Felder in den beiden Dateien identisch waren und alle noch nicht eingegebenen deutschen Felder in der Anwendung als Englisch angezeigt werden, da die Standarddatei die unspezifischste Dateisprache ist. Bei der Suche nach einer Zeichenfolge geht es von der spezifischsten (z. B. de-DE.resx) zur am wenigsten spezifischen (z. B. .resx).

Verwenden Sie die Aufrufe ResourceManager.GetString oder ResourceManager.GetObject, um an Ihre Zeichenfolgen zu gelangen. Die Anwendung sollte Ihnen den ResourceManager kostenlos zur Verfügung stellen.

Rick Minerich
quelle
6

Zum Nutzen anderer, die möglicherweise darauf stoßen (1+ Jahre nach dem letzten Beitrag), bin ich Autor eines professionellen Lokalisierungsprodukts, das den gesamten Übersetzungsprozess extrem einfach macht. Es ist ein Visual Studio-Add-In, das alle ".resx" -Strings aus einer beliebigen Lösung extrahiert und in eine einzelne Datei lädt, die mit einer kostenlosen eigenständigen Anwendung übersetzt werden kann (Übersetzer können diese von meiner Website herunterladen). Das gleiche Add-In importiert dann die übersetzten Zeichenfolgen zurück in Ihre Lösung. Sehr einfach zu bedienen mit vielen integrierten Sicherheitsvorkehrungen, vielen Schnickschnack und Online-Hilfe (Sie werden es nicht viel brauchen). Siehe http://www.hexadigm.com

Larry
quelle
1
Dies sollte als native Funktion zu visualstudio hinzugefügt werden! Tolle Software!
Caverna
Vielen Dank (geschätzt). Ich hätte Ihnen vor dem Start des Produkts (vor ungefähr 10 Jahren) zugestimmt, aber wenn MSFT es heute implementieren würde, würde es mich aus dem Geschäft bringen :)
Larry