Test per il parametro null nel file .properties per MessageFormat
-
21-09-2019 - |
Domanda
E 'possibile, con pacchetti di risorse e MessageFormat di avere il seguente risultato?
- quando chiamo
getBundle("message.07", "test")
ottenere"Group test"
- quando chiamo
getBundle("message.07", null)
ottenere"No group selected"
Ogni esempio che ho trovato su Internet è con i pianeti, con i file sul disco e così via.
Ho solo bisogno di controllare se un parametro è null
( o non esiste ) nel file di proprietà del fascio risorsa. Spero di trovare un formato speciale per il parametro qualcosa di nulla come {0,choice,null#No group selected|notnull#Group {0}}
.
Il metodo che uso per ottenere i fasci è:
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 "???";
}
}
Ho anche chiamare questo metodo per altri bundle, come
-
getBundle("message.08", 1, 2)
=>"Page 1 of 2"
(sempre i parametri, non è necessario verificare la presenza dinull
) -
getBundle("message.09")
=>"Open file"
(senza parametri, non c'è bisogno di verificare la presenza dinull
)
Cosa devo scrivere nel mio .properties file per message.07
per avere il risultato descritto?
Quello che ho ora è:
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
Soluzione
Il file .properties
,
message.07=Group {0}
message.08=Page {0} of {1}
message.09=Open file
message.null = No group selected
E quindi è necessario modificare il codice per porre params
controllo esplicito per null
. E se null
allora si può fare qualcosa di simile resourceBundle.getString(NULL_MSG)
. Dove NULL_MSG
sarà questo,
private static final String NULL_MSG = "message.null";
Così, ora il vostro metodo originale sarebbe diventato qualcosa di simile.
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;
}
Chiamare il mio metodo come qui di seguito,
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'
Ora mi dica dove è il problema?
Altri suggerimenti
Ti consiglio di non cercare di cambiare la funzionalità pacchetto (anche se si dispone di un metodo getBundle incapsulare esso).
È sufficiente fare nel codice:
getBundle(param == null? "message.07.null": "message.07", param)
O fare un altro metodo:
getBundleOrNull("message.07", param, "message.07.null")
che fa
public String getBundleOrNull(String key, value, nullKey) {
return getBundle(value == null? nullKey: key: value);
}