ResourceBundle de Java/Struts y reemplazar expresiones
-
09-06-2019 - |
Pregunta
Si tengo un archivo de propiedades del paquete de recursos:
A.propiedades:
thekey={0} This is a test
Y luego tengo código java que carga el paquete de recursos:
ResourceBundle labels = ResourceBundle.getBundle("A", currentLocale);
labels.getString("thekey");
¿Cómo puedo reemplazar el texto {0} con algún valor?
labels.getString("thekey", "Yes!!!");
De modo que el resultado sea:
Yes!!! This is a test.
No hay métodos que formen parte del paquete de recursos para hacer esto.Además, estoy en Struts, ¿hay alguna forma de utilizar MessageProperties para realizar el reemplazo?
Solución
La clase que estás buscando es java.text.MessageFormat;específicamente, llamando
MessageFormat.format("{0} This {1} a test", new Object[] {"Yes!!!", "is"});
o
MessageFormat.format("{0} This {1} a test", "Yes!!!", "is");
regresará
"Yes!!! This is a test"
[Desafortunadamente, no puedo ayudar con la conexión de Struts, aunque este parece relevante.]
Otros consejos
ahí está la clase org.apache.struts.util.MessageResources con varios métodos getMessage, algunos de ellos toman argumentos para insertarlos en el mensaje real.
P.ej.:
messageResources.getMessage("thekey", "Yes!!!");