Jon*_*nik 11 java wicket properties internationalization
Wicket拥有灵活的国际化系统,支持以多种方式对UI消息进行参数化.例如在StringResourceModel javadocs中有例如:
WeatherStation ws = new WeatherStation();
add(new Label("weatherMessage", new StringResourceModel(
"weather.${currentStatus}", this, new Model<String>(ws)));
Run Code Online (Sandbox Code Playgroud)
但我想要一些非常简单的东西,并且找不到一个很好的例子.
在.properties文件中考虑这种UI消息:
msg=Value is {0}
Run Code Online (Sandbox Code Playgroud)
具体来说,我不想为此目的创建一个模型对象(使用要替换的值的getter;如上例中的WeatherStation).如果我已经拥有局部变量中的值,那就太过分了,否则就不需要这样的对象了.
这是用正确的值替换{0}的一种愚蠢的"蛮力"方式:
String value = ... // contains the dynamic value to use
add(new Label("message", getString("msg").replaceAll("\\{0\\}", value)));
Run Code Online (Sandbox Code Playgroud)
是否有一个干净的,更多的Wicket-y方式来做到这一点(这不是比上面的长得多)?
sve*_*ier 12
看看StringResourceModel javadoc中的示例4 - 您可以传递空模型和显式参数:
add(new Label("message",
new StringResourceModel(
"msg", this, null, value)));
msg=Value is {0}
Run Code Online (Sandbox Code Playgroud)
小智 5
有一种方法,虽然仍然涉及创建模型,但不需要带有getter的bean.
在属性文件中给出此消息:
msg=${} persons
Run Code Online (Sandbox Code Playgroud)
以下是如何使用值替换占位符,无论是局部变量,字段还是文字:
add(new Label("label", new StringResourceModel("msg", new Model<Serializable>(5))));
Run Code Online (Sandbox Code Playgroud)
我认为最稳定的WICKETY方式可以通过改进来完成Jonik的回答有MessageFormat:
。特性:
msg=Saving record {0} with value {1}
Run Code Online (Sandbox Code Playgroud)
.java:
add(new Label("label", MessageFormat.format(getString("msg"),obj1,obj2)));
//or
info(MessageFormat.format(getString("msg"),obj1,obj2));
Run Code Online (Sandbox Code Playgroud)
为什么我喜欢它:
StringResourceModel.笔记:
如果你想使用模型,你只需要创建一个简单的模型来覆盖模型的toString功能,如下所示:
abstract class MyModel extends AbstractReadOnlyModel{
@Override
public String toString()
{
if(getObject()==null)return "";
return getObject().toString();
}
}
Run Code Online (Sandbox Code Playgroud)
并将其作为MessageFormat参数传递。
我不知道为什么 Wicket 不支持Model反馈消息。但是如果它得到支持,就没有理由使用这些解决方案,你可以StringResourceModel在任何地方使用。
| 归档时间: |
|
| 查看次数: |
14624 次 |
| 最近记录: |