español - spring mvc example
¿Por qué los argumentos de Spring MessageSource no se llenan correctamente en algunas configuraciones regionales? (3)
No puedo convencer a mi equipo de negocios para que agregue el doble de apos en los lugares requeridos y algunas veces también lo están olvidando. Así que simplemente ReloadableResourceBundleMessageSource#loadProperties
como: si el valor contiene, "''"
y "{0"
, luego reemplace "''"
con "''''"
y coloco las Propiedades con la misma clave.
mailconfirm.mail.body=<html><body><h3 style="margin: 0 0 1em;">Hi, {0}!</h3>/
To confirm your email address click on the confirmation link given bellow. If clicking on the link doesn''t work, copy and paste the link in a new browser tab. <br /><br />/
<a href="http://www.domain.com/confirm_email.html?action=activate&hash={1}">http://www.domain.com/confirm_email.html?action=activate&hash={1}</a><br /><br />/
Kind regards,<br />/
Your Something
</body></html>
Este mensaje anterior es el mensaje particular utilizado para el código siguiente.
String country = "AU";
Object[] args = new Object[] { account.getLogin(), confirm.getHash() };
helper.setText(appContext.getMessage("mailconfirm.mail.body", args,
new Locale(country)), true);
Depuré ambos argumentos y ambos tienen los valores correctos. Al depurar la línea appContext.getMessage
, vi que el appContext.getMessage
{1}
no está lleno con el valor correcto, sin embargo, {0}
es.
¿Alguna idea sobre que podría ir mal? Sospecho que podría ser un problema de locale.
Problema resuelto! Parece que el problema se debió a que el mensaje mailconfirm.mail.body contenía un apóstrofe en algún lugar después de {0} y entre {1}. Después de reemplazado doesn''t
con does not
se solucionó el problema. No sabía que los apóstrofes no se pueden usar allí. PD: ¿Es un error o solo mi error y los apóstrofes deberían escaparse?
mailconfirm.mail.body=<html><body><h3 style="margin: 0 0 1em;">Hi, {0}!</h3>/
To confirm your email address, click on the confirmation link given bellow. If clicking on the link doesn''t work, copy and paste the link in a new browser tab. <br /><br />/
<a href="http://www.domain.com/confirm_email.html?action=activate&hash={1}">http://www.domain.com/confirm_email.html?action=activate&hash={1}</a><br /><br />/
Kind regards,<br />/
Your Something
</body></html>
Uno doesn''t
tomó cerca de una hora para averiguarlo y presionar una solución. Jajaja .. De ahora en adelante considero que los apóstrofes son malos.
ResourceBundleMessageSource
de Spring (que creo que estás usando) usa MessageFormat
para reemplazar los marcadores de posición ( {0}
) dentro de los mensajes. MessageFormat
requiere que las comillas simples ( ''
) se escapen utilizando dos comillas simples ( ''''
) (vea: MessageFormat Javadoc ).
Sin embargo, los mensajes predeterminados que no contienen ningún argumento no serán analizados por MessageFormat
. Así que las comillas simples en los mensajes sin argumentos no necesitan ser escapadas.
ResourceBundleMessageSource
proporciona una alwaysUseMessageFormat
llamada alwaysUseMessageFormat
que puede usarse si MessageFormat
debe aplicarse a todos los mensajes. Por lo tanto, una sola cita siempre debe ser escapada por dos comillas simples.
Vea esta mscharhag.com/2013/10/… para más detalles.