coregui/src/main/resources/org/rhq/enterprise/gui/coregui/client/Messages.properties
This page provides an overview of how i18n is done in the coregui GWT webapp.
Our English messages are currently all stored in a single Java message bundle at:
coregui/src/main/resources/org/rhq/enterprise/gui/coregui/client/Messages.properties
The message bundle properties file should adhere to the following format:
Each message key should consist of two camel-case words separated by an underscore, where the first word describes the view or component and the second word describes the specific message, e.g. resourceConfigHistory_modifiedHeader, button_cancel.
The equals sign between the message key and the message should have a single space on either side of it to improve readability, e.g. button_cancel = Cancel
The message bundle gets compiled into Java by the gwt:i18n goal, and then, along with all the other coregui source files, into JavaScript by the gwt:compile goal.
In the generated Messages class, each message has a corresponding method for returning the version of that message for the current client-side locale. Here's an example of using the Messages class:
// There is a convenience method on CoreGUI to grab the Messages singleton instance. private static final Messages MESSAGES = CoreGUI.getMessages(); // Lookup a message named "about_jbossByRedHat" with no parameters. // i.e.: about_jbossByRedHat = JBoss by Red Hat String jbossByRedHat = MESSAGES.about_jbossByRedHat(); // Lookup a message named "about_title" with a single parameter. // i.e.: about_title = About {0} String title = MESSAGES.about_title(productName);
The org.rhq.enterprise.gui.coregui.client.components.AboutModalWindow class is an example of a coregui class that has been internationalized.
For more info on how i18n is done in GWT, see the GWT i18n dev guide.
The following magic incantations in coregui/pom.xml ensure that this message bundle (along with any other additional bundles for other languages) is compiled by the gwt plugin's gwt:i18n goal into a Java class named org.rhq.enterprise.gui.coregui.client.Messages, which implements the com.google.gwt.i18n.client.Messages interface.
<plugin> <artifactId>maven-resources-plugin</artifactId> <executions> <execution> <id>copy-resources</id> <phase>process-resources</phase> <goals> <goal>copy-resources</goal> </goals> <configuration> <outputDirectory>${project.build.directory}/generated-sources/gwt</outputDirectory> <resources> <resource> <directory>src/main/resources</directory> <filtering>true</filtering> </resource> </resources> </configuration> </execution> </executions> </plugin> <plugin> <groupId>org.codehaus.mojo</groupId> <artifactId>gwt-maven-plugin</artifactId> <version>1.2</version> <configuration> ... <i18nMessagesBundle>org.rhq.enterprise.gui.coregui.client.Messages</i18nMessagesBundle> ... </configuration> <executions> <execution> <id>gwt-goals</id> <goals> ... <goal>i18n</goal> </goals> </execution> ... </executions> </plugin>
The generated source file gets written to:
coregui/target/generated-sources/gwt/org/rhq/enterprise/gui/coregui/client/Messages.java
This source file then gets compiled, along with all the other coregui classes, by the gwt:compile goal.