ResourceBundle de Java/Struts e substituir expressões
-
09-06-2019 - |
Pergunta
Se eu tiver um arquivo de propriedades do pacote de recursos:
A. propriedades:
thekey={0} This is a test
E então eu tenho o código Java que carrega o pacote de recursos:
ResourceBundle labels = ResourceBundle.getBundle("A", currentLocale);
labels.getString("thekey");
Como posso substituir o texto {0} por algum valor
labels.getString("thekey", "Yes!!!");
De modo que a saída saia como:
Yes!!! This is a test.
Não há métodos que façam parte do Resource Bundle para fazer isso.Além disso, estou no Struts, existe alguma maneira de usar MessageProperties para fazer a substituição.
Solução
A classe que você está procurando é java.text.MessageFormat;especificamente, ligando
MessageFormat.format("{0} This {1} a test", new Object[] {"Yes!!!", "is"});
ou
MessageFormat.format("{0} This {1} a test", "Yes!!!", "is");
retornará
"Yes!!! This is a test"
[Infelizmente, não posso ajudar com a conexão do Struts, embora esse parece relevante.]
Outras dicas
Existe a aula org.apache.struts.util.MessageResources com vários métodos getMessage, alguns deles usam argumentos para inserir na mensagem real.
Por exemplo.:
messageResources.getMessage("thekey", "Yes!!!");