Frage

Ich habe vor kurzem geerbt internationalisiert und text-heavy Struts 1.1 web-Anwendung.Viele der JSP-Dateien wie folgt Aussehen:

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

und die properties-Dateien wie folgt Aussehen:

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

mit den entsprechenden übersetzungen in N anderen Sprachen (messages_fr.Eigenschaften, etc).

Probleme:

  1. CHEMISCHE Verletzung - I N Verweise auf meine Struts-action-URLs anstelle von 1, das macht die Umgestaltung action URLs fehleranfällig.
  2. Mixed Anliegen - Meine Anwendung markup ist jetzt in mehr als nur meine JSP-Dateien, so dass es schwierig für eine web-Spezialist für die Anpassung des markup (mit CSS, etc).
  3. Nach der übersetzung markup - Immer, wenn ich erhalten neu-übersetzten text, ich muss entscheiden, was zu umgeben, mit der <a>...</a> markup.Einfach Englisch aber weniger für unbekannte Sprachen.

Ich hab mir überlegt das hinzufügen von Platzhaltern in der messages-Datei, wie:

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

aber dann wurde das Wort "Adresse" und "Kontakt-Informationen" irgendwie müssen lokalisiert werden, eingewickelt mit markup, und ging, um meine Botschaft zu tag - und ich sehe nicht einen einfachen Weg, es zu tun.

Was kann ich tun, um dies zu verbessern?

War es hilfreich?

Lösung

Vermeiden Sie das erstellen von links innerhalb der langen Blöcke von text.Lieber kürzere text können handeln als eine logisch vervollständigen und unabhängige link.

In der Regel, es wird führen zu weniger Problemen.Manchmal muss man Kompromisse machen müssen, Ihr UI-design, um Platz für die Lokalisierung;manchmal müssen Sie Kompromisse Ihrer Lokalisierung, um Platz für die Benutzeroberfläche.

Jedes mal, wenn ein Entwickler manuell bearbeitet nach der übersetzung von Zeichenfolgen ist eine Quelle der potenziell teure Fehler.Schneiden/einfügen oder string-Bearbeitung kann das Ergebnis im Zeichen der Korruption, verlegt Streicher, etc.Eine übersetzung Mangel muss die Teilnahme von außerhalb der Parteien zu lösen, die beinhaltet, Kosten und Zeit braucht.

Denken Sie, so etwas wie dies ist weniger hässlich:

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

...aber ich bin kein UI-designer.

Andere Tipps

Ein Ansatz, der in den Sinn kommt, ist, dass Sie konnte, speichern die übersetzten replacement d.h."Adresse" und "Kontakt-Informationen" in einem separaten properties-Datei-eine pro locale.Dann haben Sie Ihre Aktion-Klasse (oder wahrscheinlich einige helper-Klasse) nachschlagen der Werte von der richtigen ResourceBundle für das aktuelle Gebietsschema und übergeben Sie an die Botschaft tag.

Vielleicht:

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

Nachricht Nachricht-tag-API erlaubt nur 5 parametrische Argumente

Ah!Ich beschuldige meine völlige Unkenntnis der Struts API.

Zu zitieren Sie die Handbuch:

Einige der features in dieser taglib auch in der JavaServer Pages Standard Tag Library (JSTL).Die Struts-team empfiehlt die Verwendung der standard-tags über die Struts-spezifische tags, wenn möglich.

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

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

Der Nachteil ist, dass dies ist keine gültige XML-und Riss die Variablen Werte umfasst mehr Dereferenzierung, lookups und Ausführlichkeit.Dies ist nicht eine gute Lösung.

Ich weiß nicht, Streben, aber wenn es so etwas wie JavaServer Faces (gleiche Architekt), dann ist es wohl die Unterstützung für die Konfiguration eine Ersatz Steuerung.Ich würde entweder ersetzen die bestehende Steuerung mit flexibler ein oder fügen Sie eine neue ein.

Immer wenn ich erhalten neu übersetzt text, muss ich entscheiden, was zu umgeben mit der <a>...</a> markup.

Es gibt keine Weise, die Sie tun sollten, und ich sehe dies als einen Fehler in Ihrer übersetzung (ich bin ein ex-Lokalisierung-Ingenieur und ex-Entwickler von Lokalisierungs-tools).Die {0} Zeichen sollten in den Dateien enthalten, die an die übersetzer.Die Lokalisierung Richtlinien sollte erklären, dass der string den Kontext und die Bedeutung jeder Variablen.

Sie können programmgesteuert überprüfen der Eigenschaft bündelt auf die Rückkehr.String-spezifische regex ist, könnte den trick tun.Es ist nicht außerhalb des Bereichs der Möglichkeiten, dass Sie "Adresse" und "Kontakt-Informationen" vertauscht, um während der übersetzung.

Die einfachste Lösung ist die Umgestaltung der Nachrichten zu erbringen:

<a href="/address.do">Please update your address.</a>
<a href="/contact.do">Please update your contact information.</a>

Ich akzeptiere, dass dies möglicherweise nicht die Lösung in allen Fällen und kann Ihre UI designer spucken die Zähne.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top