Pregunta

Recientemente he heredado un internacionalizado y llenas de texto Struts 1.1 de la aplicación web.Muchos de los archivos JSP aspecto:

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

y los archivos de propiedades de aspecto:

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

con la adecuada traducciones en N otros idiomas (messages_fr.propiedades, etc).

Problemas:

  1. SECO violación - Tengo N referencias a mi Puntales de acción de direcciones Url en lugar de 1, lo que hace que la refactorización de acción de las direcciones Url propenso a errores.
  2. Mezclado preocupaciones - Mi aplicación de marcado de ahora en más que mis archivos JSP, haciendo difícil para un especialista de la web para ajustar el margen de beneficio (el uso de CSS, etc).
  3. Después de la traducción de marcado - En cualquier momento para recibir a los recién texto traducido, debo decidir qué envolvente, con la <a>...</a> el marcado.Fácil de inglés, pero menos para idiomas desconocidos.

He considerado la adición de marcadores de posición en el archivo de mensajes, como:

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

pero entonces las palabras "dirección" y de "información de contacto" de alguna manera necesitan ser localizados, envuelto con marcado, y se pasa a mi mensaje de etiqueta - y yo no puedo ver una manera fácil de hacerlo.

¿Qué puedo hacer para mejorar esto?

¿Fue útil?

Solución

Evitar la creación de vínculos de largo plazo los bloques de texto.Prefieren más cortos de texto que puede actuar como una lógica completa y enlace independiente.

En general, va a conducir a un menor número de problemas.A veces usted tiene que comprometer su diseño de interfaz de usuario para dar cabida a la localización;a veces es necesario poner en peligro su proceso de localización para dar cabida a la interfaz de usuario.

En cualquier momento que un desarrollador manualmente manipula post-cadenas de traducción es una fuente potencialmente costosos errores.Cortar/pegar o cadena de edición puede resultar en carácter de corrupción, fuera de lugar cadenas, etc.Una traducción defecto necesita de la participación de terceros para solucionar lo que implica costos y toma tiempo.

Pensando en ello, algo como esto podría ser menos feo:

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

...pero yo no soy diseñador de interfaz de usuario.

Otros consejos

Un enfoque que viene a la mente es que se puede almacenar en la traducción de la sustitución de los parámetros de decir"dirección" y de "información de contacto" separado en un archivo de propiedades, uno por localidad.A continuación, tendrá su clase de Acción (o, probablemente, algunos de ayudante de clase) buscar los valores de la correcta un resourcebundle para la configuración regional actual y pasar al mensaje de la etiqueta.

Tal vez:

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

El mensaje de mensaje de la etiqueta de la API permite a los sólo 5 paramétrico de argumentos

Ah!Me culpo a mi completa ignorancia de los Puntales de la API.

A la cita manual:

Algunas de las características de este taglib también están disponibles en el JavaServer Pages Standard Tag Library (JSTL).El Puntales del equipo fomenta el uso de la las etiquetas estándar sobre los Puntales específicos etiquetas cuando sea posible.

Usted probablemente podría hacer esto con el 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>

La desventaja es que esto no es válido XML y tirar de los valores de las variables que involucra a más de direccionamiento indirecto, búsquedas y nivel de detalle.Esta no es una buena solución.

No sé Puntales, pero si es algo como JavaServer Faces (el mismo arquitecto), entonces es probable que exista apoyo para la configuración de un control de reemplazo.Me gustaría sustituir el sistema de control con una más flexible o añadir una nueva.

En cualquier momento voy a recibir a los recién traducido el texto, me deben decidir qué surround con el <a>...</a> el marcado.

No hay manera que usted debería estar haciendo esto y veo esto como una falla en el proceso de traducción (yo soy un ex-ingeniero de localización y ex-desarrollador de herramientas de localización).El {0} los caracteres deben ser incluidos en los archivos que se envían a los traductores.La localización de las directrices debe explicar la cadena del contexto y el significado de ninguna de las variables.

Usted puede validar mediante programación la propiedad paquetes de retorno.Cadena específica de la expresión regular que podría hacer el truco.No es fuera de los reinos de la posibilidad de que la "dirección" y de "información de contacto" cambiaría el orden durante la traducción.

La solución más simple es el rediseño de los mensajes para el render:

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

Acepto que esto podría no ser una solución en todos los casos y puede tener su diseñador de interfaz de usuario de escupir los dientes.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top