Domanda

Recentemente ho ereditato un'applicazione web Struts 1.1 internazionalizzata e ricca di testo.Molti dei file JSP hanno il seguente aspetto:

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

e i file delle proprietà assomigliano a:

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

con le opportune traduzioni in N altre lingue (messages_fr.properties, ecc.).

I problemi:

  1. Violazione SECCA - Ho N riferimenti ai miei URL di azione Struts invece di 1, il che rende gli URL di azione di refactoring soggetti a errori.
  2. Preoccupazioni contrastanti - Il markup della mia applicazione ora non si trova solo nei miei file JSP, rendendo difficile per uno specialista web modificare il markup (usando CSS, ecc.).
  3. Markup post-traduzione - Ogni volta che ricevo un testo appena tradotto, devo decidere cosa circondare <a>...</a> markup.Facile per l'inglese ma meno per le lingue sconosciute.

Ho preso in considerazione l'aggiunta di segnaposto nel file dei messaggi, come:

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

ma poi le parole "indirizzo" e "informazioni di contatto" dovrebbero in qualche modo essere localizzate, racchiuse in markup e passate al tag del mio messaggio - e non riesco a vedere un modo semplice per farlo.

Cosa posso fare per migliorare questa situazione?

È stato utile?

Soluzione

Evita di creare collegamenti all'interno di lunghi blocchi di testo.Preferisci il testo più corto che può fungere da collegamento logicamente completo e indipendente.

In generale, porterà a meno problemi.A volte devi compromettere la progettazione dell'interfaccia utente per adattarla alla localizzazione;a volte è necessario compromettere il processo di localizzazione per adattare l'interfaccia utente.

Ogni volta che uno sviluppatore manipola manualmente le stringhe post-traduzione è fonte di bug potenzialmente costosi.Tagliare/incollare o modificare le stringhe può provocare la corruzione dei caratteri, stringhe fuori posto, ecc.Un difetto di traduzione necessita dell'intervento di soggetti esterni per essere risolto, il che comporta costi e richiede tempo.

A pensarci bene, una cosa del genere potrebbe essere meno brutta:

<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>

...ma non sono un progettista dell'interfaccia utente.

Altri suggerimenti

Un approccio che mi viene in mente è che potresti memorizzare i parametri di sostituzione tradotti, ad es."indirizzo" e "informazioni di contatto" in un file delle proprietà separato, uno per locale.Quindi chiedi alla tua classe Action (o probabilmente a qualche classe helper) di cercare i valori dal ResourceBundle corretto per la locale corrente e di passarli al tag message.

Forse:

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

L'API del tag messaggio del messaggio consente solo 5 argomenti parametrici

Ah!Do la colpa alla mia completa ignoranza dell'API Struts.

Per citare il Manuale:

Alcune delle funzionalità di questo taglib sono disponibili anche nella libreria tag standard di Javaserver Pages (JSTL).Il team Struts incoraggia l'uso dei tag standard sui tag specifici di Struts quando possibile.

Probabilmente potresti farlo con il 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>

Lo svantaggio è che questo non è un XML valido e il trasferimento dei valori alle variabili comporta più riferimenti indiretti, ricerche e verbosità.Questa non è una buona soluzione.

Non conosco Struts, ma se è qualcosa come JavaServer Faces (stesso architetto), probabilmente c'è il supporto per la configurazione di un controllo sostitutivo.Vorrei sostituire il controllo esistente con uno più flessibile o aggiungerne uno nuovo.

Ogni volta che ricevo un testo appena tradotto, devo decidere cosa circondare con <a>...</a> markup.

Non è possibile che tu lo faccia e lo considero un errore nel tuo processo di traduzione (sono un ex ingegnere di localizzazione ed ex sviluppatore di strumenti di localizzazione).IL {0} i caratteri dovrebbero essere inclusi nei file inviati ai traduttori.Le linee guida per la localizzazione dovrebbero spiegare il contesto della stringa e il significato di eventuali variabili.

È possibile convalidare a livello di codice i pacchetti di proprietà al momento della restituzione.Le espressioni regolari specifiche per stringa potrebbero fare il trucco.Non è escluso che "indirizzo" e "informazioni di contatto" si scambino l'ordine durante la traduzione.

La soluzione più semplice è riprogettare i messaggi da visualizzare:

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

Accetto che questa potrebbe non essere una soluzione in tutti i casi e potrebbe far sputare denti al tuo progettista dell'interfaccia utente.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top