Like a good little girl, I have located all my app's GUI strings in a message resource bundle for I18N purposes. This includes the strings that appear in drop-down select fields that I use as options menus. There are several of these menus in my pages and their contents are, for all intents and purposes, NOT dynamic.
So now I have to convert all the message resources in those menus to their i18n string equivalents at run time (essentially rewriting the menus' texts). But where should I do it, and when?
In the JSP? The Form Bean? The Action? Or, *gasp* the EJB?
------------------------------------------------------------ JSPs: The purist might do it here. Maybe something like this:
<html:select property="selectedMenuItemId" > <html:optionsCollection property="menuItems" value="id" label="<fmt:message key="value" />" /> </html:select>
(Actually I don't think that's going to work as I've written it...) But the menu would be rewritten every hit of the page. Viva Hotspot.
------------------------------------------------------------ FORM BEAN: In the 'menuItems' setter/getter:
public setMenuItems(List menuItems) {
// convert vanilla menu to i18n-specific
Iterator i = menuItems.iterator(); while (i.hasNext()) { MenuItem m1 = (MenuItem)i.next(); MenuItem m2 = new MenuItem(); m2.setId( m1.getId() ); m2.setValue( resources.getString( m1.getValue() ) ); this.menu.add(m2); } }
public List getMenuItems() { return this.menu; }
The menu is localized the first time the form bean is used.
------------------------------------------------------------
ACTION CLASS:
Same kind of Java as the form bean. The Action would suck the pre-i18n menus from the DTOs as they are retrieved and convert them on-the-fly before depositing them in the form bean just prior to forwarding to the pages. But this seems like the wrong place. I really want my Actions to merely manage DTO hand-off between my EJBs and my form beans.
------------------------------------------------------------
EJBs:
Well, the pre-i18n menus are stored in the DB anyway. My EJBs could hit the DB at start-up, convert the menus to i18n-specific and cache them for the lifetime of the app. The DTOs would always have ready-rolled strings then. But again, this feels wrong; surely GUI strings are a presentation tier issue?
Any thoughts? -- bOOyah
--------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]