Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Automatically build resource class based of XML in Java

In Android applications, resources are specified in xml documents, which automatically are built into the R class, readily accessible within the source code as strongly typed.

Is there any way I could use a similar approach for a regular Java desktop application?

What I'd like to accomplish, is both the removal of strings from the code (as a separation of "layers", more or less) and to make it easy to add support for localization, by simply telling the program to choose the xml file corresponding to the desired language.

I've googled around a bit, but the things I'm looking for seem to be drowning in results about parsing or outputting xml, rather than tools utilizing xml to generate code.

like image 276
Tomas Aschan Avatar asked Jan 05 '12 03:01

Tomas Aschan


1 Answers

Eclipse's message bundle implementation (used by plugins for example) integrates with the Externalize Strings feature and generates both a static class and a resource properties file for your strings:

http://www.eclipse.org/eclipse/platform-core/documents/3.1/message_bundles.html

For this integration to work Eclipse needs to see org.eclipse.osgi.util.NLS on the class path. From memory, the dependencies of the libraries it was available in were a little tricky for the project I used this approach in, so I just got the source and have it as a stand-alone class in my core module (see the comments for more on that).

It provides the type safety you're looking for and the IDE features save a lot of time. I've found no downsides to the approach so far.

Edit: this is actually what ghostbust555 mentioned in the comments, but not clear in that article that this isn't limited to Eclipse plugins and you refer to your resources via static members of a messages class.

I haven't seen any mention of others using this approach with their own applications, but to me it makes complete sense given the IDE integration and type safety.

like image 156
Danny Thomas Avatar answered Nov 17 '22 17:11

Danny Thomas