wicket a un système d'internationalisation flexible qui prend en charge les messages d'interface utilisateur des paramètres dans de nombreux façons. Il y a des exemples par exemple dans stringresourCemodel Javadocs, tels que ceci:
String value = ... // contains the dynamic value to use add(new Label("message", getString("msg").replaceAll("\\{0\\}", value)));
6 Réponses :
Il y a un moyen, ce qui implique toujours de créer un modèle, ne nécessite pas de haricot avec un getter.
donné ce message dans un fichier de propriétés: p>
Merci! BTW, connaissez-vous de n'importe quel nom pour cette $ {} code> notation, et est-ce documenté quelque part? Serait-il possible de remplacer plus d'un espace réservé (quelque chose comme
$ {0} code> et
$ {1} code>?) Dans un message en utilisant cette approche?
$ {} est simplement sténographique pour des appels de méthode contre l'objet modèle lui-même. Je ne connais pas le nom. $ {} Je crois juste faire du modèle.Tostring (), mais pour des choses telles que la convention-configuration des noms de clé de ressources pour les titres de page, vous pouvez faire quelque chose comme "Ajouter (nouvelle étiquette (" Titre ", nouvelle StringResourCemodel (" $ { Class.Simplename} .title ", ceci, courantePagemodel)"
Créer un modèle pour votre étiquette est vraiment Properties key:
temperature=The current temperature is ${0}.
Page.java code:
// Simpler version of method where wicket:id and resourceKey are the same
add( staticResourceLabel( "temperature", new Temperature(5, CELSIUS) ) );
Page.html:
<span wicket:id='temperature'>The current temperature is 5 degrees Celsius.</span>
En face de quelque chose comme décrit dans la question, j'utiliserais maintenant:
.properties: p> java: p> Pourquoi j'aime bien: p> Clause de non-responsabilité: C'est "trop évident", mais c'est plus simple que les autres solutions (et définitivement plus agréable que mon
$ {} code> astuce a >). edit fort>: Eh bien, si vous avez besoin de prendre en charge de nombreuses langues em> où les valeurs remplacées peuvent être dans une commande différente,
string.format () code> n'est pas bon. Au lieu de cela, Utilisation de MessageFormat est une approche similaire qui le soutient correctement. LI>
ul>
remplailleLL () code> piratage). J'ai demandé à l'origine une méthode de "guichet-y", alors que ce peu contourne Wicket, puis encore une fois, qui se soucie? : -) p> p>
Un avantage supplémentaire: vous pouvez utiliser exactement la même approche pour les messages de retour d'information (méthodes telles que INFO (), erreur () dans le composant et la session), la cohérence de prêt à votre code. Par exemple: info (string.format (getstring ("événements.created"), événements.Size ())); code>
Vous pouvez avoir une commande différente avec% s solution: msg =% 2 $ S% 1 $ S
Jetez un coup d'œil à l'exemple 4 dans la javadoc StringResourCemodel - Vous pouvez transmettre un modèle NULL et des paramètres explicites:
add(new Label("message", new StringResourceModel( "msg", this, null, value))); msg=Value is {0}
Stringresourcemodel n'a pas de constructeur avec plus de 3 arguments dans la version actuelle 8.5. *. Le moyen le plus simple maintenant: MessageFormat.Format (New StringResourCemodel (My_Key) .Getstring (), Arg1, Arg2, Arg3);
Je pense que la méthode la plus cohérente .properties: p> .java: p> Notes: p> Si vous souhaitez utiliser des modèles, il vous suffit de créer un modèle simple qui remplace et transmettez-le comme Je ne sais pas pourquoi Wicket ne prend pas en charge MessageFormat code>
: abstract class MyModel extends AbstractReadOnlyModel{
@Override
public String toString()
{
if(getObject()==null)return "";
return getObject().toString();
}
}
stringresourcemodel code>. li>.
ul>
Tostring code> fonction du modèle comme celui-ci: p >
MessageFormat code> argument. p>
modèle code > dans le message de retour. Mais s'il était soutenu, il n'y avait aucune raison d'utiliser ces solutions et que vous pourriez utiliser
stringresourCemodel code> partout. p> p>
Oui, en effet, il s'agit fondamentalement d'une version améliorée de string.format () code> que j'ai suggéré , avec la différence clé que
MessageFormat code> prend en charge vraiment de nombreuses langues, car l'ordre des paramètres remplacés est explicitement spécifié.
Si vous avez un modèle dans votre composant qui contient un objet avec des valeurs que vous souhaitez accéder à partir de vos espaces réservés en tant que substitutions, vous pouvez écrire: Imaginons plus d'informations que vous pouvez trouver ici: https://ci.apache.org/projects/wicket/wicket/apidocs/8.x/org/apache/wicket/model/stringresourcemodel.htm#stringresourcodel-java .lang.string-org.apache.wicket.model.imodel- p> p> getmodel ( ) code> Le type de retour de code est
imodel
utilisateur code> contient des champs tels que
prénom code> et
lastname code> . Dans ce cas, vous pouvez facilement accéder à
prénom code> et
lastname code> dans votre chaîne de propriétés: p>