InfoQ

News

Simplified i18n with new Cintoo Messages 1.0

Posted by Floyd Marinescu on Jun 29, 2006 09:44 AM

Community
Java
Topics
Internationalization
Tags
Cintoo Messages ,
i18n
Cintoo Messages is an i18n framework that was developed over the course of several large internationalization projects where existing Java solutions were not sufficient.  Messages supports locales for threads and different bundles for different Java packages.  Bundle mapping configuration is done outside of client classes resulting in simplified code. Cintoo Messages 1.0 has just been released under Apache License.

InfoQ spoke to messages creator Stephan Schmidt to find out more about the new framework:
There are several problems with the current Java way. There is no support for thread local locales (useful for web applications, easy to get the locale everywhere). Usually i18n code in Java is very noisy, with lots of i18n code, it's very difficult to read and understand business code.

Usually an application has several bundle files. But then when doing i18n the developer has to think about which bundle to use for each class. With Messages he just has to supply "this" to Messages and the framework will find the correct bundle. As the configuration of the bundle mappings is done outside of the application code, the developer can change the mapping afterwards.
The end result is replacing the following typical Java 5 internationalization code:
com.accounting.AccountService.java
public Account create(String name) {
    Account account = new Account( name );
    Locale locale = new Locale("en", "");
    ResourceBundle bundle =  ResourceBundle.getBundle("accounting", locale);
    MessageFormat formatter = new MessageFormat("");
    formatter.setLocale(locale);
    formatter.applyPattern( messages.getString("ACCOUNT_CREATED") );
    show( formatter.format( account ) );
    return account;
}

With this simpler Cintoo Messages code (after associating a bundle with the com.accounting package):
com.accounting.AccountService.java
public Account create(String name) {
    Account account = new Account( name );
    show( $(this, “ACCOUNT_CREATED”, account) );
    return account;
}

According to Stephan, "indirect competiors are IDE plugins which do i18n automatically (with all the problems) and commercial vendors who sell i18n applications which do the same as the plugins, finding "hello world" strings and replacing them with i18n code. Both solve the i18n problem in a different way than cintoo Messages which focuses on developer written i18n code. But I plan to provide automatic string replacement and i18n QA in the next versions."

No comments

Reply

Exclusive Content

Fast Bytecodes for Funny Languages

Cliff Click discusses how to optimize generated bytecode for running on the JVM. Click analyzes and reports on several JVM languages and shows several places where they could increase performance.

Scott Ambler On Agile’s Present and Future

Scott Ambler, Practice Lead for Agile Development at IBM, speaks on the current status of the Agile community and practices having a look at the perspective of the Agile’s future.

Manager's Introduction to Test-Driven Development

Dave Nicolette and Karl Scotland try to introduce non-technical managers to one of the most popular Agile development techniques: Test-Driven Development (TDD).

Structured Event Streaming with Smooks

Smooks is best known for its transformation capabilities, but in this article Tom Fennelly describes how you can also use it for structured event streaming.

How to Work With Business Leaders to Manage Architectural Change

Successful architectures evolve over time to meet changing business requirements. Luke Hohmann presents how to collaborate with key members of your business to manage architectural changes.

Colors and the UI

In this article, Dr. Tobias Komischke explains how colors used in a GUI can influence our interaction with a computer and offers advice on using the appropriate colors for the interface.

Building your next service with the Atom Publishing Protocol

In his presentation, recorded at QCon San Francisco, MuleSource architect Dan Diephouse explores ways to use the Atom Publishing Protocol (AtomPub) when building services in a RESTful way.

Column Level Security in SharePoint

Grzegorz Gogolowicz and Matthew Dressel demonstrate how to extend Windows SharePoint Services 3.0 to support column level permissions.