I’m using GWT internationalization Messages. The documentation for Plural Forms says this should work:
@DefaultMessage("{0} {1,number} hours {2}")
@PluralText({"one", "an hour"})
String hours(String prefix, @PluralCount int count, String suffix);
Well, it doesn’t. Whatever value of count it still delivers DefaultMessage (e.g. “1 hours ago”). Same if I use a .properties file:
hours[one]=an hour
hours[few]=some hours
hours={0} {1,number} hours {2}
Is there a bug in the docs or in GWT (I’m using GWT 2.0.3) or in me? If any of the two former, anyone knows of a workaround?
EDIT: More clues to this mystery. I can get plural handling to work if I don’t rely on default locale handling. That is, I need:
-
In my module’s gwt.xml file:
<extend-property name="locale" values="en"/> -
In my Messages extentsion:
@DefaultLocale("en")public interface MyMessages extends Messages { ... -
Explicitly load the “en” locale by appending to the URL
&locale=en
See http://groups.google.com/group/google-web-toolkit/browse_thread/thread/80ae300213cc6adb where I have cross posted this question.
EDIT 2: The reason I entered this GWT plurals land is that I’m creating a “GWT HUman Readable Relative Timestamps” module. Open sourced at GitHub: http://github.com/PEZ/GWT-Relative-Time Please check it out. It’ll very soon have correct singular forms and support for some languages. =)
Getting used to answering my own questions =) Here’s cross post of my “answer” on the GWT Google group:
There seems to be a bug with the default locale handling. Here’s how I have reached that conclusion:
I wanted to add some locales to my module. Figured I could get a boiler plate for the properties file if I used the
@Generateannotation. I noticed that it created both an_en.propertiesfile and a_default.properties. What’s more; the _enfile completely lacked the plural form info! The _defaultfile had them though.I then moved the
_defaultsfile to the same directory as myTimeMessages.javafile and renamed itTimeMessages_default.properties.With this in place I can remove
<extend-property name="locale" values="en"/>from my module’s .gwt.xml file and, more important, the&locale=enfrom the URL when running my app. I still need the@DefaultLocale("en")annotation though, even though the documentation clearly states that this is not necessary.In conclusion, if you run into this problem, try:
@GenerateYourMessages_default.propertiesside by side withYourMessages.java@DefaultLocale("en")annotation.About that
@Generate. This is what worked for me. Just before my extension of the Message interface:The GWT log said it created my properties file, but I couldn’t find it. I fixed that by adding the compiler flag
-extra extrasand then found the properties files generated in theextrasdirectory. Including this info here since I spent more than an hour figuring it out.