On 07/29/2016 08:28 PM, Vojtech Szocs wrote:
----- Original Message -----
> From: "Scott Dickerson" <sdickers(a)redhat.com>
> To: "Vojtech Szocs" <vszocs(a)redhat.com>
> Cc: "Alexander Wels" <awels(a)redhat.com>, "Ramesh
Nachimuthu" <rnachimu(a)redhat.com>, "devel" <devel(a)ovirt.org>
> 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 <vszocs(a)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.
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((a)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" <awels(a)redhat.com>
>>> To: "Ramesh Nachimuthu" <rnachimu(a)redhat.com>
>>> Cc: "devel" <devel(a)ovirt.org>, "Vojtech Szocs"
<vszocs(a)redhat.com>,
>> "Scott Dickerson" <sdickers(a)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((a)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
>