
On Sep 4, 2009, at 3:35 AM, Ceki Gulcu wrote:
As you can see, the @LocaleData annotation includes multiple @Locale annotations. This is more verbose than what we had previously but allows us to write:
@BaseName("colors") @LocaleData( defaultCharset="UTF8", value = { @Locale("en_UK"), @Locale("fr_FR"), @Locale( value="tr_TR", charset = "ISO8859_3"), @Locale( value="el_GR", charset = "ISO8859_7") } ) public enum Colors { BLUE, RED, GREEN; }
It would have been preferable to write
@BaseName("colors") @Locale("en_UK") @Locale( value="fr_FR", charset = "ISO8859_1") // compiler error @Locale( value="tr_TR", charset = "ISO8859_3") // compiler error @Locale( value="el_GR", charset = "ISO8859_7") // compiler error public enum Fruit { APPLE, ORANGE; }
This is fragile as it will break if someone uses a different charset than what is now hardcoded in the software. This information should be obtained from the file itself.
but the compiler forbids multiple instances of the same annotation.
Can you think of a more elegant approach which still allows the user to designate the charset for a given locale?
Yes. At the risk of repeating myself, build your framework using XML files and let the XML parser use the encoding specified in the file. Property files were not designed for this. If you insist on using ResourceBundles then require Java 6 and use XML prooperty files and ResourceBundle.Control as described at http://java.sun.com/javase/6/docs/api/java/util/ResourceBundle.Control.html in Example 2. Ralph