[ovirt-devel] Strange issues with com.google.gwt.i18n.client.Messages.AlternateMessage [bz#1358837]

Ramesh Nachimuthu rnachimu at redhat.com
Fri Jul 29 01:12:13 EDT 2016





----- Original Message -----
> From: "Greg Sheremeta" <gshereme at redhat.com>
> To: "Scott Dickerson" <sdickers at redhat.com>
> Cc: "devel" <devel at ovirt.org>
> Sent: Thursday, July 28, 2016 10:05:31 PM
> Subject: Re: [ovirt-devel] Strange issues with com.google.gwt.i18n.client.Messages.AlternateMessage [bz#1358837]
> 
> 
> 
> On Thu, Jul 28, 2016 at 12:27 PM, Scott Dickerson < sdickers at redhat.com >
> wrote:
> 
> 
> 
> 
> 
> On Thu, Jul 28, 2016 at 11:19 AM, Vojtech Szocs < vszocs at redhat.com > 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.
> 
> 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.
> 
> +1
> 
> Greg


Thank you Greg, Scott and Vojtech. I will post a patch with option 2.

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" < awels at redhat.com >
> > To: "Ramesh Nachimuthu" < rnachimu at redhat.com >
> > Cc: "devel" < devel at ovirt.org >, "Vojtech Szocs" < vszocs at redhat.com >,
> > "Scott Dickerson" < sdickers at redhat.com >
> > 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
> Devel at ovirt.org
> http://lists.ovirt.org/mailman/listinfo/devel
> 
> 
> 
> --
> Greg Sheremeta, MBA
> Red Hat, Inc.
> Sr. Software Engineer
> gshereme at redhat.com
> 
> _______________________________________________
> Devel mailing list
> Devel at ovirt.org
> http://lists.ovirt.org/mailman/listinfo/devel


More information about the Devel mailing list