2013-01-14 18 views
10

Ich arbeite an einem Produkt, bei dem wir uns ein bisschen Gedanken über die Lokalisierung machen müssen. Derzeit ist dies der Workflow, wenn ich verwenden müssen (oder hinzufügen) einen lokalisierten String:Gibt es eine bessere Möglichkeit, lokalisierte Strings zu verwalten?

  1. Suche resources.resx Datei
  2. Wenn gefunden, dann kopieren Sie den Namen (die Hunderte von Artikeln hat). Andernfalls fügen Sie eine neue Zeichenfolge, und kopieren Sie den Namen
  3. Verwenden Sie dann ResourceFactory.ResourceMgr.GetString("MY_MAGIC_STRING") (wo ResourceMgr zu einem Resourcemanager nur ein statisches Feld ist)

Dieser 3-Schritt-Prozess für alle Strings sind ein echten Schmerzen. Gibt es irgendwelche Muster oder Möglichkeiten, um diesen Prozess zu erleichtern?

+1

Seien Sie vorsichtig bei der Wiederverwendung der gleichen Zeichenfolge, es gibt Sätze/Sätze/Wörter, die je nach Kontext unterschiedlich in andere Sprachen übersetzt werden müssen. Z.B. Konjugation von Verben in slawischen Sprachen, abhängig vom Subjekt des Satzes. – svick

+0

@svick natürlich. In der Regel versuchen wir, alles zusammen zu halten (vor allem mit String.Format-Zeichenketten) und lassen uns die Übersetzer sagen, wenn wir etwas ändern müssen. – Earlz

+0

Wenn das ein sauberer Code ist oder schneller ausgeführt wird? – Paparazzi

Antwort

5

Auto-generierte Dateien mit Zugriff auf jede einzelne Zeichenfolge sind viel einfacher zu verwenden - legen Sie "Custom Tool" für RESX-Datei auf PublicResXFileCodeGenerator.

-Code würde wie folgt aussehen:

using MyProject.Resources; 
... 
localizedText = Resources.SomeReasonableName; 

Side Hinweise:

  • mit mehreren RESX-Dateien zusammen mit automatisch generierten IDs zusätzlichen Vorteil intellisense Sie angemessene Anzahl von Auswahlmöglichkeiten zu geben.
  • Je nachdem, wie die Übersetzung gehandhabt wird, ist es besser, sich keine Gedanken über doppelten Text in der RESX-Datei zu machen (außer vielleicht OK/Abbrechen der Zeichenketten). Es kann einfacher sein, doppelte Duplikate bei der Übersetzung zu verarbeiten.
+0

Aber dies wird nur Schritt 3 etwas besser, so ist es nicht so eine große Verbesserung, nicht? – svick

+1

@svick, Ihr Anruf. "Slightly" wie in "Kompilierzeit vs. Laufzeitprüfungen". Auch wenn Strings in Dateien nach Feature organisiert sind, erhalten Sie intellisense, dass mit einer vernünftigen Anzahl von Möglichkeiten, wenn alle in einer Datei - nicht so sehr. Aber zumindest bekommst du Kompilierzeitfehler statt Laufzeit. –

0

Es gibt diese Java-Lösung, die Sie ein paar Ideen könnte: http://rodionmoiseev.github.com/c10n/

Die Idee ist, zum Speichern von Übersetzungen im Quellcode selbst, Anmerkungen auf Interface-Methoden verwenden. Anschließend können Sie mithilfe eines speziellen Dienstprogramms dynamisch Proxies erstellen (Klassen, die die Schnittstelle dynamisch implementieren), die beim Aufruf der Schnittstellenmethode einen lokalisierten Zeichenfolgenwert zurückgeben.

Auf diese Weise wird "MY_MAGIC_STRING" durch einen Aufruf an MyMagicString() Methode ersetzt, die Ihnen einige Rechtschreibung/Typ Sicherheit gibt und es refaktorierender freundlich macht.

+0

Das Posten einer Antwort, die nur einen Link enthält, ist nicht sehr nützlich. Könnten Sie eine kurze Erklärung hinzufügen, was die Bibliothek tut? – svick

+0

Wusste, dass das passieren würde: S Ich hoffe, es ist jetzt ein wenig klarer. – rodion

Verwandte Themen