On Thu, Jul 28, 2016 at 12:27 PM, Scott Dickerson <[email protected]> wrote:
> > > 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. > > 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" <[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 > -- Greg Sheremeta, MBA Red Hat, Inc. Sr. Software Engineer [email protected]
_______________________________________________ Devel mailing list [email protected] http://lists.ovirt.org/mailman/listinfo/devel
