it-swarm.com.de

Beste Möglichkeit zur Implementierung von Mehrsprachigkeit / Globalisierung in großen .NET-Projekten

Ich arbeite bald an einem großen C # -Projekt und möchte von Anfang an mehrsprachige Unterstützung einbauen. Ich habe ein wenig herumgespielt und kann es mithilfe einer separaten Ressourcendatei für jede Sprache zum Laufen bringen. Dann benutze einen Ressourcenmanager, um die Zeichenfolgen zu laden.

Gibt es noch andere gute Ansätze, die ich prüfen könnte?

68
tjjjohnson

Ich habe Projekte gesehen, die mit einer Reihe von unterschiedlichen Ansätzen umgesetzt wurden. Jeder Ansatz hat seine Vor- und Nachteile.

  • Man hat es in der config datei gemacht (nicht mein lieblings)
  • Eine hat es mit einer Datenbank gemacht - das hat ziemlich gut funktioniert, aber es war eine Qual, zu wissen, was zu pflegen ist.
  • Eine benutzte Ressourcendatei, wie Sie es vorschlagen, und ich muss sagen, es war mein Lieblingsansatz.
  • Die einfachste Methode war die Verwendung einer Include-Datei voller Zeichenfolgen - hässlich.

Ich würde sagen, die von Ihnen gewählte Ressourcenmethode ist sehr sinnvoll. Es wäre interessant, auch die Antworten anderer zu sehen, da ich mich oft frage, ob es eine bessere Möglichkeit gibt, solche Dinge zu tun. Ich habe zahlreiche Ressourcen gesehen, die alle auf die using resources-Methode verweisen, einschließlich eine hier auf SO .

20
BenAlabaster

Ich glaube nicht, dass es einen "besten Weg" gibt. Es hängt wirklich von den Technologien und der Art der Anwendung ab, die Sie erstellen.

Webapps können die Informationen in der Datenbank speichern, wie andere Poster vorgeschlagen haben. Ich empfehle jedoch, separate Ressourcendateien zu verwenden. Das sind Ressourcendateien, die von Ihrer Quelle getrennt sind . Durch das Trennen von Ressourcendateien wird die Konkurrenz für dieselben Dateien verringert, und wenn Ihr Projekt wächst, wird die Lokalisierung möglicherweise unabhängig von der Geschäftslogik durchgeführt. (Programmierer und Übersetzer).

Microsoft WinForm- und WPF-Gurus empfehlen, separate Ressourcenassemblys zu verwenden, die für jedes Gebietsschema angepasst sind.

Die Fähigkeit von WPF, die Größe von UI-Elementen an den Inhalt anzupassen, verringert die erforderliche Layoutarbeit, z. B .: (japanische Wörter sind viel kürzer als Englisch).

Wenn Sie WPF in Betracht ziehen: Ich empfehle, diesen msdn-Artikel zu lesen Um ehrlich zu sein, fand ich die WPF-Lokalisierungstools: msbuild, locbaml (und möglicherweise eine Excel-Tabelle) mühsam zu verwenden, aber es funktioniert.

Ein wenig verwandtes Problem: Ein häufiges Problem ist die Integration von Altsystemen, die Fehlermeldungen (normalerweise in Englisch) und keine Fehlercodes senden. Dies erzwingt entweder Änderungen an Legacy-Systemen oder das Zuordnen von Backend-Zeichenfolgen zu meinen eigenen Fehlercodes und dann zu lokalisierten Zeichenfolgen. Fehlercodes sind Lokalisierungen Freund

5
MW_dev

+1 Datenbank

Formulare in Ihrer App können sich sogar im Handumdrehen neu übersetzen, wenn Korrekturen an der Datenbank vorgenommen werden.

Wir haben ein System verwendet, bei dem alle Steuerelemente in einer XML-Datei (eine pro Formular) Sprachressourcen-IDs zugeordnet wurden, sich jedoch alle IDs in der Datenbank befanden.

Anstatt dass jedes Steuerelement die ID enthält (Implementierung einer Schnittstelle oder Verwendung der Tag-Eigenschaft in VB6), haben wir im Grunde genommen die Tatsache verwendet, dass der Steuerelementbaum in .NET durch Reflektion leicht erkennbar war. Ein Prozess, bei dem das Formular geladen wird, erstellt die XML-Datei, wenn sie fehlt. Die XML-Datei ordnet die Steuerelemente ihren Ressourcen-IDs zu, sodass diese lediglich ausgefüllt und der Datenbank zugeordnet werden müssen. Dies bedeutete, dass die kompilierte Binärdatei nicht geändert werden musste, wenn etwas nicht markiert war oder wenn es in eine andere ID aufgeteilt werden musste (einige englische Wörter, die sowohl als Substantive als auch als Verben verwendet werden könnten, müssten möglicherweise in zwei verschiedene Wörter übersetzt werden) im Wörterbuch gespeichert und nicht wiederverwendet werden, dies können Sie jedoch möglicherweise bei der erstmaligen Zuweisung von IDs nicht feststellen. Tatsache ist jedoch, dass der gesamte Übersetzungsprozess völlig unabhängig von Ihrer Binärdatei wird (jedes Formular muss von einem Basisformular erben, das weiß, wie es sich selbst und alle seine Steuerelemente zu übersetzen hat).

Die App ist nur dann involviert, wenn eine Phase mit Einfügepunkten verwendet wird.

Die Datenbank-Übersetzungssoftware war Ihr grundlegender CRUD-Wartungsbildschirm mit verschiedenen Workflow-Optionen, um das Durchsuchen der fehlenden Übersetzungen usw. zu erleichtern.

4
Cade Roux

Sie können kommerzielle Tools wie Sisulizer verwenden. Es wird eine Satellitenassembly für jede Sprache erstellt. Das Einzige, was Sie beachten sollten, ist, keine Klassennamen zu verschleiern (wenn Sie einen Verschleierer verwenden).

2
Davorin

Ich habe gesucht und folgendes gefunden:

Wenn Sie WPF oder Silverlight verwenden, könnte Ihr Ansatz aus vielen Gründen WPF LocalizationExtension lauten.

IT´s Open Source Es ist KOSTENLOS (und wird kostenlos bleiben) und befindet sich in einem wirklich stabilen Zustand

In einer Windows-Anwendung könnten Sie Folgendes tun:

public partial class App : Application  
{  
     public App()  
     {             
     }  

     protected override void OnStartup(StartupEventArgs e)  
     {  
         Thread.CurrentThread.CurrentCulture = new System.Globalization.CultureInfo("de-DE"); ;  
         Thread.CurrentThread.CurrentUICulture = new System.Globalization.CultureInfo("de-DE"); ;  

          FrameworkElement.LanguageProperty.OverrideMetadata(  
              typeof(FrameworkElement),  
              new FrameworkPropertyMetadata(  
                  XmlLanguage.GetLanguage(CultureInfo.CurrentCulture.IetfLanguageTag)));  
          base.OnStartup(e);  
    }  
} 

Und ich denke auf einer Wep-Seite könnte der Ansatz der gleiche sein.

Viel Glück!

2
JxXx

Ich würde mit den mehreren Ressourcendateien gehen. Es sollte nicht so schwer zu konfigurieren sein. Tatsächlich habe ich kürzlich eine ähnliche Frage zum Festlegen globaler sprachbasierter Ressourcendateien in Verbindung mit Ressourcendateien in Formularsprache beantwortet.

Lokalisierung in Visual Studio 2008

Ich würde das als den besten Ansatz zumindest für die WinForm-Entwicklung ansehen.

2
KMessenger

Wir verwenden einen benutzerdefinierten Anbieter für die Unterstützung mehrerer Sprachen und speichern alle Texte in einer Datenbanktabelle. Es funktioniert gut, außer dass es manchmal zu Caching-Problemen kommt, wenn Texte in der Datenbank aktualisiert werden, ohne die Webanwendung zu aktualisieren.

0
Cossintan

Die meisten Open Source-Projekte verwenden zu diesem Zweck GetText . Ich weiß nicht, wie und ob es jemals in einem .Net-Projekt verwendet wurde.

0
Vasil

Standardressourcendateien sind einfacher. Wenn Sie jedoch sprachabhängige Daten wie Nachschlagetabellen haben, müssen Sie zwei Ressourcensätze verwalten.

Ich habe es nicht getan, aber in meinem nächsten Projekt würde ich einen Datenbankressourcenanbieter implementieren. Ich habe herausgefunden, wie es mit MSDN gemacht wird:

http://msdn.Microsoft.com/en-us/library/aa905797.aspx

Ich habe auch diese Implementierung gefunden:

DBResource Provider

0
Ben Dempsey