2012-03-29 13 views
9

Gibt es ein Tool, das eine java .properties-Datei zu einer Klasse kompiliert, die ich in der Java EE (tomcat) -Anwendung verwenden kann? Ähnlich wie bei Android, wo das Eclipse-Plugin eine statische R.strings Klasse erzeugt.Java: Statische Zeichenkettenlokalisierung

fand ich diesen Artikel:

http://www.techhui.com/profiles/blogs/localization-in-gwt-using

Aber es ist auf GWT abhängig. Jede Hilfe wird geschätzt.

+0

Können Sie ein wenig erklären. Meinst du eine Klasse, die Konstanten (wie enum) oder nur einen Eigentümer enthält? – questzen

+0

Dieser Beitrag scheint ziemlich ähnlich zu dem, was Sie fragen: http://stackoverflow.com/questions/1578026/java-properties-files-as-strongly-typed-classes –

Antwort

4

Ich habe noch nie von einem solchen Werkzeug gehört. GWT hat eine großartige, auf verzögerter Bindung basierende Technik, aber es ist nicht das, wonach Sie suchen. Ich denke jedoch, dass es möglich ist, einen grundlegenden Code-Generator für solche Aufgaben zu implementieren.

Aber die Antwort auf Ihre Frage ist: Soweit ich weiß gibt es keine.

+0

+1 für die Code-Generierung mit einem kleinen Java-Anwendung, dass Sie können automatisch von einer Ant-Task aus aufrufen, die Sie als automatisch aufgerufenen Builder in Eclipse hinzufügen können. – jabal

0

Was ist mit ResourceBundle?

// refers to "src/config.properties" 
ResourceBundle config = ResourceBundle.getBundle("config"); 
String property1 = config.getString("property1"); 
+1

Wie bei der anderen aktuellen Antwort auf diese Frage beantwortet dies diese Frage nicht. Was du beschrieben hast ist, wie es normalerweise gemacht wird. Aber in Android erhalten Sie eine generierte Klasse mit allen Ressourcen in der Kompilierzeit (R.id). Wenn Eigenschaft1 nicht definiert ist, erhalten Sie hier eine Laufzeitabweichung. Wenn es in Android nicht definiert ist, erhalten Sie einen Kompilierzeitfehler. – jontro

0

denke ich, eine mit ANTLR in einem benutzerdefinierten eine Maven-Plugin (oder Ant-Task) eine sehr einfache Grammatik Objekten Dateien schreiben könnte, die nur die Java-Source-Schritt vor der Kompilierung erzeugt.

0

Wie speichern Sie Ihre Eigenschaften in einer JSON-Datei. Das JSON-Objekt, das in der Datei gespeichert ist, sollte einer Java-Klasse zugeordnet werden. Verwenden Sie zum Deserialisieren den Jackson-Mapper. Mit Jackson können Sie erzwingen, dass alle Felder beim Deserialisieren nicht null sein müssen. Sie können auch GSON verwenden und einen benutzerdefinierten Deserializer schreiben, der die Prüfungen so streng durchführt, wie Sie möchten. Beispiel - Sie können nicht null zusammen mit nicht leer für Strings erzwingen.

0

Compiler Assisted Localization (CAL10N) ist nicht genau das, was Sie gefragt haben, kann aber hilfreich sein.

Obwohl es keine Java-Klassen aus .properties generiert, ist die Verwendung von Enums als Nachrichtenschlüssel immer noch besser als Strings, da Sie Hilfe vom Compiler erhalten.

Deklarieren Sie eine Enumeration, binden Sie sie an .properties mit Annotation und verwenden Sie Enum-Werte in Nachrichtensuchen. Ich habe es aber noch nicht ausprobiert. Siehe manual.

1

Um Anwendungen zu internationalisieren, habe ich eine Message Compiler implementiert, die die Ressourcen Bundle-Dateien und konstante Definitionen als Java-Enums oder statische endgültige Zeichenfolgen für die Schlüssel aus einer einzigen Quelldatei erstellt. Daher können die Konstanten im Java-Quellcode verwendet werden, was eine viel sicherere Methode als die Verwendung einfacher Zeichenfolgen ist. In diesem Fall erhalten Sie auch einen Fehler bei der Kompilierung, wenn Sie eine Schlüsselkonstante verwenden, die nicht existiert. Der Nachrichtencompiler kann nicht nur für Java verwendet werden. Es schafft auch Ressource-Dateien und Konstanten für Objective-C oder Swift und kann für andere Programmierumgebungen erweitert werden.