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
|
|