Internationalisation
Internationalisation is done at 3 different levels, Java, HTML/JSP and JavScript. All of these rely on the standard ResourceBundle to store the various languages.
Resource bundles
The resource bundles are located under the step-core project, under src/main/resources/. They split out into various files:
- HtmlBundle, generally used by the JSP pages, fragments.
- ErrorBundle, generally the location for most of the error messages
- InteractiveBundle, generally sources the Javascript messages
- SetupBundle, generally used by config.jsp & firstTime.jsp
Java
The classes of interest are:
- ClientSessionProvider: gives access to the current Locale and contains the logic around calculating the Locale, based on cookie/param/header
- TranslatedException: captures a key and its arguments. These are later processed by the FrontController
There are very few other instances where the Java code needs to localise messages. One example, is the Loader (which initialises all the indexes). This just accesses the ResourceBundle directly by name.
HTML
The following code fragments explain how this is used
TODO
Javascript
In the JavaScript layer, the internationalised messages are exposed under the __s variable.
In other words, __s.my_property
accesses the my_property key from the InteractiveBundle. This is processed by the com.tyndalehouse.step.rest.controllers.InternationalJsonController
whose role is to produce a file containing the language keys used by the client code.