9 Stimmen

Wie kann ich die HTML-Auszeichnung aus meinen Eigenschaftsdateien herausnehmen?

Ich habe kürzlich eine internationalisierte und textlastige Struts 1.1-Webanwendung geerbt. Viele der JSP-Dateien sehen aus wie:

<p>
    <bean:message key="alert" />
</p>

und die Eigenschaftsdateien sehen wie folgt aus:

messages.properties
alert=Please update your <a href="stackoverflow.com/address.do">address</a> and <a href="stackoverflow.com/contact.do">contact information</a>.

mit den entsprechenden Übersetzungen in N anderen Sprachen (messages_fr.properties, etc.).

Probleme:

  1. DRY-Verstoß - Ich habe N Verweise auf meine Struts-Aktions-URLs anstelle von 1, die Refactoring Aktion URLs fehleranfällig macht.
  2. Gemischte Bedenken - Das Markup meiner Anwendung befindet sich jetzt in mehr als nur meinen JSP-Dateien, was es für einen Webspezialisten schwierig macht, das Markup zu optimieren (mit CSS usw.).
  3. Markup nach der Übersetzung - Jedes Mal, wenn ich einen neu übersetzten Text erhalte, muss ich entscheiden, was ich mit dem Text umgeben soll. <a>...</a> Aufschlag. Einfach für Englisch, aber weniger einfach für unbekannte Sprachen.

Ich habe überlegt, Platzhalter in die Nachrichtendatei einzufügen, z. B:

alert=Please update your {0} and {1}.

aber dann müssten die Wörter "Adresse" und "Kontaktinformationen" irgendwie lokalisiert, mit Markup umschlossen und an mein Nachrichtentag übergeben werden - und ich sehe keine einfache Möglichkeit, dies zu tun.

Was kann ich tun, um dies zu verbessern?

2voto

McDowell Punkte 105255

Vermeiden Sie die Erstellung von Links innerhalb langer Textblöcken. Bevorzugen Sie kürzeren Text der als logisch vollständiger und und unabhängigen Link fungieren kann.

Im Allgemeinen wird dies zu weniger Problemen führen. Manchmal müssen Sie Kompromisse bei der Gestaltung der Benutzeroberfläche eingehen, um die Lokalisierung zu ermöglichen; manchmal müssen Sie Kompromisse bei der Lokalisierung eingehen, um die Benutzeroberfläche zu ermöglichen.

Jede manuelle Manipulation von Zeichenketten nach der Übersetzung durch einen Entwickler ist eine Quelle für potenziell teure Fehler. Das Ausschneiden/Einfügen oder die Bearbeitung von Zeichenketten kann zu Zeichenverfälschungen, falsch platzierten Zeichenketten usw. führen. Die Behebung eines Übersetzungsfehlers erfordert die Mitwirkung Dritter, was mit Kosten und Zeitaufwand verbunden ist.

Wenn ich darüber nachdenke, könnte so etwas weniger hässlich sein:

<p>Please update your address and contact information.
<br />
<a href="http://stackoverflow.com/address.do">update address</a>
<br />
<a href="http://stackoverflow.com/contact.do">update contact information</a></p>

...aber ich bin kein UI-Designer.

1voto

John Topley Punkte 110122

Ein Ansatz, der mir in den Sinn kommt, ist, dass Sie die übersetzten Ersatzparameter, d.h. "Adresse" und "Kontaktinformationen" in einer separaten Eigenschaftsdatei speichern könnten, eine pro Gebietsschema. Dann lassen Sie Ihre Action-Klasse (oder wahrscheinlich eine Hilfsklasse) die Werte aus dem richtigen ResourceBundle für das aktuelle Gebietsschema abrufen und an das Message-Tag übergeben.

0voto

McDowell Punkte 105255

Vielleicht:

#
alert=Please update your {0}address{1} and {2}contact information{3}.

0voto

McDowell Punkte 105255

Die Nachrichten-Tag-API ermöglicht nur 5 parametrische Argumente

Ah! Ich gebe meiner völligen Unkenntnis der Struts-API die Schuld.

Um die Handbuch :

Einige der Funktionen dieser Taglib sind auch in der JavaServer Pages Standard Tag Library (JSTL) verfügbar. Das Struts-Team ermutigt die Verwendung der Standard-Tags gegenüber den Struts-spezifischen Tags, wenn möglich.

Sie könnten dies wahrscheinlich mit dem http://java.sun.com/jsp/jstl/fmt taglib.

<fmt:bundle basename="messages">
    <fmt:message key="alert">
        <fmt:param value='<a href="http://stackoverflow.com/">' />
        <fmt:param value="</a>" />
        <fmt:param value='<a href="http://stackoverflow.com/">' />
        <fmt:param value="</a>" />
    </fmt:message>
</fmt:bundle>

Der Nachteil ist, dass es sich hierbei nicht um gültiges XML handelt und dass das Verschieben der Werte in Variablen mehr Umwege, Nachschlagen und Ausführlichkeit erfordert. Dies ist keine gute Lösung.

Ich kenne Struts nicht, aber wenn es so etwas wie JavaServer Faces (derselbe Architekt) ist, dann gibt es wahrscheinlich Unterstützung für die Konfiguration eines Ersatzsteuerelements. Ich würde entweder das vorhandene Steuerelement durch ein flexibleres ersetzen oder ein neues hinzufügen.

Jedes Mal, wenn ich neu übersetzte Text erhalte, muss ich entscheiden, was ich mit dem <a>...</a> Aufschlag.

Sie sollten dies auf keinen Fall tun, und ich sehe darin einen Fehler in Ihrem Übersetzungsprozess (ich bin ein ehemaliger Lokalisierungsingenieur und ehemaliger Entwickler von Lokalisierungstools). Die {0} Zeichen sollten in den Dateien enthalten sein, die an die Übersetzer gesendet werden. In den Lokalisierungsrichtlinien sollten der Kontext der Zeichenfolge und die Bedeutung der Variablen erläutert werden.

Sie können die Eigenschaftsbündel bei der Rückkehr programmatisch validieren. String-spezifische Regex's könnten den Trick tun. Es ist nicht auszuschließen, dass "Adresse" und "Kontaktinformationen" bei der Übersetzung die Reihenfolge vertauschen.

Die einfachste Lösung besteht darin, die zu rendernden Nachrichten neu zu gestalten:

<a href="http://stackoverflow.com/address.do">Please update your address.</a>
<a href="http://stackoverflow.com/contact.do">Please update your contact information.</a>

Ich akzeptiere, dass dies nicht in allen Fällen eine Lösung ist und dass Ihr UI-Designer vielleicht die Zähne zusammenbeißt.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X