MessageFormat substitutions. This combination should be able to solve any dynamic localization requirement that a project has. The model should be created with four parameters, which are described in detail below:
null java.text.MessageFormat object. Each parameter may be an ordinary Object, in which case it will be processed by the standard formatting rules associated with java.text.MessageFormat. Alternatively, the parameter may be an instance of IModel in which case the getObject() method will be applied prior to the parameter being passed to the java.text.MessageFormat. This allows such features dynamic parameters that are obtained using a PropertyModel object or even nested string resource models. java.text.MessageFormat style markup for replacement of parameters. Where a string resource contains both types of formatting information then the property expression will be applied first. Example 1
In its simplest form, the model can be used as follows:
public class MyPage extends WebPage<Void> { public MyPage(final PageParameters parameters) { add(new Label("username", new StringResourceModel("label.username", this, null))); } } Where the resource bundle for the page contains the entry label.username=Username Example 2
In this example, the resource key is selected based on the evaluation of a property expression:
public class MyPage extends WebPage<Void> { public MyPage(final PageParameters parameters) { WeatherStation ws = new WeatherStation(); add(new Label("weatherMessage", new StringResourceModel("weather.${currentStatus}", this, new Model<WeatherStation>(ws))); } } Which will call the WeatherStation.getCurrentStatus() method each time the string resource model is used and where the resource bundle for the page contains the entries: weather.sunny=Don't forget sunscreen! weather.raining=You might need an umbrella weather.snowing=Got your skis? weather.overcast=Best take a coat to be safe
Example 3
In this example the found resource string contains a property expression that is substituted via the model:
public class MyPage extends WebPage<Void> { public MyPage(final PageParameters parameters) { WeatherStation ws = new WeatherStation(); add(new Label("weatherMessage", new StringResourceModel("weather.message", this, new Model<WeatherStation>(ws))); } } Where the resource bundle contains the entry weather.message=Weather station reports that the temperature is ${currentTemperature} ${units} Example 4
In this example, the use of substitution parameters is employed to format a quite complex message string. This is an example of the most complex and powerful use of the string resource model:
public class MyPage extends WebPage<Void> { public MyPage(final PageParameters parameters) { WeatherStation ws = new WeatherStation(); IModel<WeatherStation> model = new Model<WeatherStation>(ws); add(new Label("weatherMessage", new StringResourceModel( "weather.detail", this, model, new Object[] { new Date(), new PropertyModel<?>(model, "currentStatus"), new PropertyModel<?>(model, "currentTemperature"), new PropertyModel<?>(model, "units") })); } } And where the resource bundle entry is: weather.detail=The report for {0,date}, shows the temperature as {2,number,###.##} {3} \ and the weather to be {1}
@see ComponentStringResourceLoader for additional information especially on the component searchorder
@author Chris Turner
| |