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

Greg Sheremeta gshereme at redhat.com
Thu Jul 28 16:35:31 UTC 2016


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


>
>
>> 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
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.ovirt.org/pipermail/devel/attachments/20160728/4d6afd8c/attachment.html>


More information about the Devel mailing list