On 07/29/2016 08:28 PM, Vojtech Szocs wrote:
----- Original Message -----
From: "Scott Dickerson" <[email protected]>
To: "Vojtech Szocs" <[email protected]>
Cc: "Alexander Wels" <[email protected]>, "Ramesh Nachimuthu" <[email protected]>,
"devel" <[email protected]>
Sent: Thursday, July 28, 2016 6:27:44 PM
Subject: Re: Strange issues with
com.google.gwt.i18n.client.Messages.AlternateMessage [bz#1358837]
On Thu, Jul 28, 2016 at 11:19 AM, Vojtech Szocs <[email protected]> wrote:
Hi Ramesh,
this issue seems to be related with removal of @DefaultMessage annotations,
moving the default (English) strings into corresponding .properties files.
Apparently if both properties file definitions and annotations are
connected to the same message method, the properties version takes
precidence. I wasn't sure if this applied to alternate messages, but your
problem clearly shows that it does.
As we generally want default strings to reside in .properties files, I see
following options to explore, based on our earlier conversation:
1, try annotating UIMessages interface with:
@Generate(format = "com.google.gwt.i18n.server.PropertyCatalogFactory")
- ref:
https://github.com/gwtproject/gwt/issues/7032#issuecomment-110858030
- this is likely non-feasible, however, since @Generate requests
generation
of translation sources (.properties) from Java code
2, try removing @AlternateMessage annotation and modify .properties file:
recurrenceType=Incorrect enum
recurrenceType[UNKNOWN]=None
recurrenceType[INTERVAL]=Minute
recurrenceType[HOURLY]=Hourly
recurrenceType[DAILY]=Daily
recurrenceType[WEEKLY]=Weekly
recurrenceType[MONTHLY]=Monthly
- ref:
http://www.gwtproject.org/doc/latest/DevGuideI18nPluralForms.html
- this might not work as it might be @PluralCount-only (not for @Select)
I just tried this alternate messages in properties file technique and it
will work.
I'm actually surprised that it works for @Select annotation.
I didn't see that mentioned anywhere in GWT docs, note that ^^ ref link
covers the @PluralCount annotation only. No mention of @Select anywhere.
I agree with others - if it works, let's use that for now.
UIMessages.java:
String recurrenceType(@Messages.Select
GlusterVolumeSnapshotScheduleRecurrence recurrence);
UIMessage.properties:
recurrenceType=Incorrect enum
recurrenceType[UNKNOWN]=None
recurrenceType[INTERVAL]=Minute
recurrenceType[HOURLY]=Hourly
recurrenceType[DAILY]=Daily
recurrenceType[WEEKLY]=Weekly
recurrenceType[MONTHLY]=Monthly
The generated code looks like this:
public java.lang.String
recurrenceType(org.ovirt.engine.core.common.businessentities.gluster.GlusterVolumeSnapshotScheduleRecurrence
arg0) {
java.lang.String returnVal = null;
int arg0_ordinal = -1;
if (arg0 != null) {
arg0_ordinal = arg0.ordinal();
}
switch (arg0_ordinal) {
case 2: // DAILY
returnVal = "Daily";
break;
case 1: // HOURLY
returnVal = "Hourly";
break;
case 0: // INTERVAL
returnVal = "Minute";
break;
case 4: // MONTHLY
returnVal = "Monthly";
break;
case 5: // UNKNOWN
returnVal = "None";
break;
case 3: // WEEKLY
returnVal = "Weekly";
break;
}
if (returnVal != null) {
return returnVal;
}
return "Incorrect enum";
}
3, remove @AlternateMessage & handle enum-to-string formatting on our own
String sizeUnitString(String size, @Messages.Select
SizeConverter.SizeUnit sizeUnit);
becomes
String sizeUnitString(String size, String sizeUnitValue);
String recurrenceType(@Select GlusterVolumeSnapshotScheduleRecurrence
recurrence);
gets removed, because there is no point in having "{0}" message
getMessages().sizeUnitString(size, sizeUnit);
becomes
getMessages().sizeUnitString(size, <someUtility>(sizeUnit));
getMessages().recurrenceType(recurrence);
becomes
<someUtility>(recurrence);
Personally, I think 3, is the most correct solution. As Alex wrote below,
we're planning to switch away from GWT i18n mechanism in the long-term;
relying on @AlternateMessage etc. is therefore an obstacle to that effort.
Option 2 is the most expedient and least intrusive. As a bonus, those
alternate strings will be pushed out to the translators without having to
do additional work/changes.
We already have infra for localizing enums, so it's technically duplicate
to that effort. But I agree that it's less intrusive and only needed for
3 cases where we use @Select, so I'm OK with that.
In the long term, we should stop using GWT i18n annotations like @Select.
Thanks Vojtech. Considering the long term plan and effort involved now I
have implemented the option 3 and posted the patch
https://gerrit.ovirt.org/#/c/61749/. Please help me with review :-)
Regards,
Ramesh
Also, we already have infra for localizing enum members: LocalizedEnums
So as part of solution 3, we should add into LocalizedEnums:
String GlusterVolumeSnapshotScheduleRecurrence___INTERVAL();
String GlusterVolumeSnapshotScheduleRecurrence___HOURLY();
String GlusterVolumeSnapshotScheduleRecurrence___DAILY();
String GlusterVolumeSnapshotScheduleRecurrence___WEEKLY();
String GlusterVolumeSnapshotScheduleRecurrence___MONTHLY();
String GlusterVolumeSnapshotScheduleRecurrence___UNKNOWN();
plus add corresponding strings in LocalizedEnums.properties file.
This way, we can leverage existing EnumTranslator#translate method.
By doing so, <someUtility> mentioned above === EnumTranslator#translate
Regards,
Vojtech
----- Original Message -----
From: "Alexander Wels" <[email protected]>
To: "Ramesh Nachimuthu" <[email protected]>
Cc: "devel" <[email protected]>, "Vojtech Szocs" <[email protected]>,
"Scott Dickerson" <[email protected]>
Sent: Thursday, July 28, 2016 2:21:23 PM
Subject: Re: Strange issues with
com.google.gwt.i18n.client.Messages.AlternateMessage [bz#1358837]
On Thursday, July 28, 2016 05:49:57 AM Ramesh Nachimuthu wrote:
Hi,
We have a strange issue with the
com.google.gwt.i18n.client.Messages.AlternateMessage in
UIMessages.java. We
have defined some alternate messages using @Messages.Select with
Enums. But
its doesn't work any more.
We have following messages in the UIMessages.java.
@Messages.AlternateMessage(value = { "UNKNOWN" , "None" ,
"INTERVAL" ,
"Minute" , "HOURLY" , "Hourly" , "DAILY" , "Daily" , "WEEKLY" ,
"Weekly" ,
"MONTHLY" , "Monthly" }) String recurrenceType(@Messages.Select
GlusterVolumeSnapshotScheduleRecurrence recurrence);
@Messages.AlternateMessage(value = { "BYTES" , "{0} B" , "KiB" ,
"{0}
KiB" , "MiB" , "{0} MiB" , "GiB" , "{0} GiB" , "TiB" , "{0} TiB" })
String
sizeUnitString(String size, @Messages.Select
SizeConverter.SizeUnit sizeUnit);
But the generated UIMessages_.java doesn't use any of the enum
conditions.
public java.lang.String
recurrenceType(org.ovirt.engine.core.common.businessentities.gluster.Gluste
rVolumeSnapshotScheduleRecurrence arg0) { java.lang.String returnVal =
null;
int arg0_ordinal = -1;
if (arg0 != null) {
arg0_ordinal = arg0.ordinal();
}
if (returnVal != null) {
return returnVal;
}
return "Incorrect enum";
}
public java.lang.String sizeUnitString(java.lang.String
arg0,org.ovirt.engine.core.common.utils.SizeConverter.SizeUnit arg1) {
java.lang.String returnVal = null;
int arg1_ordinal = -1;
if (arg1 != null) {
arg1_ordinal = arg1.ordinal();
}
if (returnVal != null) {
return returnVal;
}
return arg0 + " TiB";
}
It used to work earlier. Is there any known issue in the current GWT
Version? or Am I missing something?.
Regards,
Ramesh
We have an active project to remove all the annotations from the Messages
interfaces in the project. I am guessing that is probably the cause of
your
problems. I am fairly certain there is an alternative to the annotations
now,
but I don't know of the top of my head. Scott can you give them the
details?
Alexander
Regards,
Scott
--
Scott Dickerson
Senior Software Engineer
RHEV-M Engineering - UX Team
Red Hat, Inc
_______________________________________________
Devel mailing list
[email protected]
http://lists.ovirt.org/mailman/listinfo/devel