Pergunta

É possível, com os pacotes de recursos e o MessageFormat ter o seguinte resultado?

  • Quando eu ligo getBundle("message.07", "test") para obter "Group test"
  • Quando eu ligo getBundle("message.07", null) para obter "No group selected"

Cada exemplo que encontrei na Internet está com planetas, com arquivos no disco e assim por diante.

Eu só preciso verificar se um parâmetro é null (ou não existe) no arquivo de propriedades do pacote de recursos. Espero encontrar um formato especial para o parâmetro nulo algo como {0,choice,null#No group selected|notnull#Group {0}}.

O método que eu uso para obter os pacotes é:

public String getBundle(String key, Object... params) {
  try {
    String message = resourceBundle.getString(key);
    if (params.length == 0) {
      return message;
    } else {
      return MessageFormat.format(message, params);
    }
  } catch (Exception e) {
    return "???";
  }
}

Eu também chamo esse método para outros pacotes, como

  • getBundle("message.08", 1, 2) => "Page 1 of 2" (sempre parâmetros, não há necessidade de verificar null)
  • getBundle("message.09") => "Open file" (Sem parâmetros, não há necessidade de verificar null)

O que devo escrever no meu arquivo .Properties para message.07 Para ter o resultado descrito?
O que tenho agora é:

message.07=Group {0} 
message.08=Page {0} of {1}    # message with parameters where I always send them
message.09=Open file          # message without parameters
Foi útil?

Solução

Sua .properties Arquivo,

message.07=Group {0} 
message.08=Page {0} of {1}
message.09=Open file
message.null = No group selected

E então você precisa alterar seu código para fazer uma verificação explícita params por null. E se null Então você pode fazer algo como resourceBundle.getString(NULL_MSG). Onde NULL_MSG será isso,

private static final String NULL_MSG = "message.null";

Então, agora seu método original se tornaria algo assim.

public String getBundle(String key, Object... params) {
  String message = null;
  try {
    if (params == null) {
      message = resourceBundle.getString(NULL_MSG);
    } else {
      message = MessageFormat.format(resourceBundle.getString(key), params);
    }
  } catch (Exception e) {
    e.printStackTrace();
  }
  return message;
}

Chamando meu método como abaixo,

getBundle("message.07", "test") // returning 'Group test'
getBundle("message.07", null) // returning 'No group selected'
getBundle("message.08", 1, 2) // returning 'Page 1 of 2'
getBundle("message.08", null) // returning 'No group selected'
getBundle("message.09", new Object[0]) // returning 'Open file'
getBundle("message.09", null) // returning 'No group selected'

Agora me diga onde está o problema?

Outras dicas

Eu recomendo não tentar alterar a funcionalidade do pacote (mesmo se você tiver um método getBundle que a encapsulou).

Simplesmente faça em seu código:

getBundle(param == null? "message.07.null": "message.07", param)

Ou faça outro método:

getBundleOrNull("message.07", param, "message.07.null")

Isso faz

public String getBundleOrNull(String key, value, nullKey) {
   return getBundle(value == null? nullKey: key: value);
}
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top