Java-Einstellungen und Internationalisierung (i18n)

9

Die Java-Tutorials empfehlen die Verwendung der Preferences API über Properties-Dateien. Eigenschaftsdateien und ResourceBundles sind die empfohlene Methode zum Verarbeiten von Internalisierungsanforderungen in Anwendungen.

Ich erwäge, beide für eine Desktop-Anwendung zu verwenden, die Einstellungen lokalspezifisch anzeigt.

Kann jemand auf Probleme mit diesem Ansatz hinweisen?

Vielleicht sollte ich nur die Eigenschaftendateien Periode verwenden?

    
user697750 07.04.2011, 23:35
quelle

2 Antworten

2
  

Ich erwäge, beide für eine Desktop-Anwendung zu verwenden, die Einstellungen lokalspezifisch anzeigt.

OK, was Sie wollen, ist eine übersetzte Konfigurationsdatei in Form von:

%Vor%

Nun, es sei denn, Sie möchten MUI irgendwann unterstützen, es sollte keine große Sache sein. Wenn Sie dies jedoch tun, sodass verschiedene Benutzer auf demselben Computer verschiedene Sprachen verwenden können oder der Benutzer möglicherweise die Sprache wechseln kann, haben Sie Probleme beim Zuordnen des Schlüssels zu einer Eigenschaft. Sie müssten alle Übersetzungen scannen, während Sie den Schlüssel lesen, und Sie würden sicherlich mehrere Einträge für denselben Schlüssel erhalten. Wie löst man das? Nun, das ist eine gute Frage.

Aus meiner Erfahrung sollten Konfigurationsdateien sprachunabhängig (neutrale Kultur) sein und niemals von Hand bearbeitet werden (das bedeutet, das Übersetzen von Schlüsseln ist nicht wirklich wichtig).

Ich dachte, es könnte ein Problem mit der Zeichencodierung geben, aber das folgende Code-Snippet funktioniert ohne Probleme (Dateien sind UTF-8-codiert):

%Vor%     
Paweł Dyda 08.04.2011, 12:48
quelle
2

Das Verwenden von Ressourcenbündeln zum Lokalisieren von Anwendungen ist der Standard in Java. Die Probleme dieser Art sind:

  1. Es gibt keine Kompilierzeitprüfung der Anzahl und Art der Parameter, die von der Ressource benötigt werden.
  2. Es ist schwierig, Dateien sauber zu halten, z.B. Es gibt keinen Mechanismus, der hilft, unbenutzte Strings zu entfernen
  3. Es ist schwierig, alle Texte in alle unterstützten Sprachen zu übersetzen.

usw. ....

Der wahrscheinlich bessere Internationalisierungsmechanismus wird von Google in seinem GWT vorgeschlagen. Sie generieren eine Klasse mit Methode pro String. Wenn Sie beispielsweise den Text Hello, {0} haben, wird die Methode generiert String hello(String name);

Sie können also weder 0 noch 2 Argumente an diese Methode übergeben. Nur einer.

Das löst teilweise auch das zweite Problem. Es ist einfacher zu sehen, ob die Methode nicht im ganzen Projekt verwendet wird. Es löst das dritte Problem sowieso nicht.

    
AlexR 08.04.2011 00:54
quelle