Sollte ich java benutzen.text.MessageFormat für lokalisierte Nachrichten ohne Platzhalter?
Sind wir über die Lokalisierung der user-interface-text für eine web-Anwendung, die läuft auf Java 5, und die haben ein dilemma, wie wir die Ausgabe von Meldungen, die definiert werden in properties-Dateien - die Art verwendet, die durch java.util.Eigenschaften.
Einige Nachrichten enthalten Platzhalter, die gefüllt werden mit java.text.MessageFormat. Zum Beispiel:
search.summary = Your search for {0} found {1} items.
MessageFormat ist ärgerlich, denn ein Apostroph ist ein besonderer Charakter, obwohl Sie Häufig in englischen text. Geben Sie zwei für ein literales einfaches Anführungszeichen:
warning.item = This item''s {0} is not valid.
Jedoch, drei Viertel der Anwendung 1000 oder so Nachrichten enthalten keine Platzhalter. Dies bedeutet, dass wir ausgeben können, Sie direkt, die Vermeidung von MessageFormat, und lassen Sie die einzelnen Zitate allein:
help.url = The web page's URL
Frage: sollten wir MessageFormat für alle Nachrichten, für die einheitliche syntax, oder zu vermeiden, MessageFormat, wo wir können, so dass die meisten Nachrichten müssen nicht entkommen?
Es gibt eindeutig vor-und Nachteile oder so.
Beachten Sie, dass die API-Dokumentation für MessageFormat erkennt das problem und schlägt eine nicht-Lösung:
Die Regeln für die Verwendung von Anführungszeichen innerhalb von
message-format Muster, leider
gezeigt haben, dass Sie etwas verwirrend sein.
Insbesondere ist es nicht immer offensichtlich
zu Lokalisierungsexperten, ob einzelne Zitate
müssen verdoppelt werden oder nicht. Stellen Sie sicher,
informieren übersetzer über die Regeln,
und sagen Sie Ihnen (zum Beispiel durch Verwendung von
Kommentare im Ressource-bundle Quelle
Dateien), welche Zeichenfolgen verarbeitet werden
durch MessageFormat.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Schreiben Sie einfach Ihre eigene Implementierung von MessageFormat ohne diese lästige Funktion. Sie kann sich bei der code der SLF4J-Logger.
Haben Sie Ihre eigene version von message formatter, die verwendet werden können, wie folgt:
Leere Platzhalter verwendet werden könnte, mit der Standard-Reihenfolge und nummeriert für einige Lokalisierung Fällen, in denen die unterschiedlichen Sprachen tun Permutationen der Wörter oder Teile von Sätzen.
Am Ende haben wir beschlossen, side-step die einzelnen Anführungszeichen problem, indem Sie immer mit 'curly' zitiert:
Verwenden Sie das Zeichen ` statt ' für die Angebotserstellung. Wir verwenden es die ganze Zeit ohne Probleme.
MessageFormat verwenden nur, wenn Sie es brauchen, da Sie sonst nur aufblasen, bis Sie den code und haben keinen zusätzlichen Wert.
Meiner Meinung nach, die Konsistenz ist wichtig für diese Art der Sache. Eigenschaften von Dateien und MessageFormat haben schon sehr viel Einschränkungen. Wenn Sie finden diesen beunruhigenden könnte man "kompilieren" your properties-Dateien zu generieren, die richtig gebildeten. Aber ich würde sagen, gehen mit MessageFormat überall. Dieser Weg, Sie erhalten den code, den Sie nicht brauchen, um über, welche Zeichenfolgen formatiert sind und welche nicht. Es wird einfacher zu bewältigen sein, da kann man die hand-off-message-Verarbeitung einer Bibliothek und sich keine sorgen über die details auf hohem Niveau.
Andere alternative...Wenn das laden der properties-Datei, nur wickeln Sie den inputstream in einen FilterInpuStream verdoppelt, die jeden einzelnen zitieren.