Test pour le paramètre null dans le fichier .properties pour MessageFormat
-
21-09-2019 - |
Question
Est-il possible, avec des faisceaux de ressources et MessageFormat d'avoir le résultat suivant?
- quand je l'appelle
getBundle("message.07", "test")
pour obtenir"Group test"
- quand je l'appelle
getBundle("message.07", null)
pour obtenir"No group selected"
Chaque exemple, je trouve sur Internet est avec des planètes, avec des fichiers sur le disque et ainsi de suite.
Je dois seulement vérifier si un paramètre est null
( ou n'existe pas ) dans le fichier des propriétés du faisceau de ressources. J'espère trouver un format spécial pour le paramètre null quelque chose comme {0,choice,null#No group selected|notnull#Group {0}}
.
La méthode que j'utiliser pour obtenir les faisceaux est:
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 "???";
}
}
Je demande également cette méthode pour d'autres faisceaux, comme
-
getBundle("message.08", 1, 2)
=>"Page 1 of 2"
(toujours les paramètres, pas besoin de vérifiernull
) -
getBundle("message.09")
=>"Open file"
(aucun paramètre, pas besoin de vérifiernull
)
Que dois-je écrire dans mon fichier .properties pour message.07
d'avoir le résultat décrit
Ce que j'est maintenant:
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
La solution
Votre fichier .properties
,
message.07=Group {0}
message.08=Page {0} of {1}
message.09=Open file
message.null = No group selected
Et alors vous devez changer votre code pour mettre un params
de vérification explicite null
. Et si null
vous pouvez faire quelque chose comme resourceBundle.getString(NULL_MSG)
. Où NULL_MSG
sera cela,
private static final String NULL_MSG = "message.null";
Donc, maintenant votre méthode originale deviendrait quelque chose comme ça.
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;
}
Appel ma méthode comme ci-dessous,
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'
Maintenant, dites-moi où est le problème?
Autres conseils
Je recommande pas d'essayer de changer la fonctionnalité du faisceau (même si vous avez une méthode getBundle encapsulation).
Il suffit de faire dans votre code:
getBundle(param == null? "message.07.null": "message.07", param)
Ou faire une autre méthode:
getBundleOrNull("message.07", param, "message.07.null")
qui fait
public String getBundleOrNull(String key, value, nullKey) {
return getBundle(value == null? nullKey: key: value);
}