[ 
https://issues.apache.org/jira/browse/CLK-591?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Bob Schellink resolved CLK-591.
-------------------------------

       Resolution: Fixed
    Fix Version/s: 2.2.0

fixed in trunk

> I18N for Menu control
> ---------------------
>
>                 Key: CLK-591
>                 URL: https://issues.apache.org/jira/browse/CLK-591
>             Project: Click
>          Issue Type: Sub-task
>          Components: extras
>    Affects Versions: 2.1.0 RC1
>            Reporter: WarnerJan Veldhuis
>            Priority: Minor
>             Fix For: 2.2.0
>
>
> Menu is not I18N-able. I have created a patch that fixes that. Here's an 
> example of how to set a messagekey in menu.xml, that corresponds to an item 
> in the messageresources.
> The message attribute tells the menu which key should be used to get the text 
> from the message resources. (The $path variable can be used as well, since I 
> adjusted the writeMenu VM macro to use: #evaluate($submenu) instead of 
> $submenu itself. Velocity now supports #evaluate to evaluate a string that 
> contains VM directives )
> <menu>
>     <menu label="Home" path="/home.htm">
>         <menu message="menu_logoff" path="$path?actionLink=logoff" roles="SU, 
> DU, VU, WU"/>
>     </menu>
> </menu>
> The setParent method is overridden because the parent is needed to access the 
> page's message resources. It will also recursively descend into the children 
> as well. Once you add the menu to the page using 
> Page.addControl(Menu.getRootMenu(new MyAccessController())); the page is set 
> as parent for all menuitems.
> Attribute message takes precedence over attribute label. If both are set, 
> message is the attribute used. 
> So there you go. I18N for Menu :)
> Index: Menu.java
> ===================================================================
> --- Menu.java (revision 831895)
> +++ Menu.java (working copy)
> @@ -244,6 +244,9 @@
>      /** The menu display label. */
>      protected String label;
>  
> +    /** The message key to be used from the click-controls.properties or 
> click-page.properties */
> +    protected String messageKey;
> +    
>      /**
>       * The list of valid page paths. If any of these page paths match the
>       * current request then the Menu item will be selected.
> @@ -335,7 +338,9 @@
>          setAccessController(accessController);
>  
>          setLabel(menuElement.getAttribute("label"));
> -
> +        
> +        setMessageKey(menuElement.getAttribute("message"));
> +        
>          setImageSrc(menuElement.getAttribute("imageSrc"));
>  
>          setPath(menuElement.getAttribute("path"));
> @@ -846,12 +851,20 @@
>  
>                  buffer.elementEnd();
>  
> -                if (getLabel() != null) {
> +                if ( StringUtils.isNotBlank(getMessageKey())) {
> +                    buffer.append(getMessage(getMessageKey()));
> +                }
> +                else if (getLabel() != null) {
>                      buffer.append(getLabel());
>                  }
>  
>              } else {
> -                buffer.append(getLabel());
> +                if (StringUtils.isNotBlank(getMessageKey())) {
> +                    buffer.append(getMessage(getMessageKey()));
> +                }
> +                else {
> +                    buffer.append(getLabel());
> +                }
>              }
>  
>              buffer.elementEnd("a");
> @@ -947,4 +960,23 @@
>          return menu;
>      }
>  
> +    public String getMessageKey() {
> +        return messageKey;
> +    }
> +
> +    public void setMessageKey(String messageKey) {
> +        this.messageKey = messageKey;
> +    }
> +
> +    /**
> +     * @see org.apache.click.Control#setParent(Object)
> +     * Sets the parent for this menu. This will automatically set the parent 
> for the children as well. 
> +     * @param parent The parent
> +     */
> +    public void setParent(Object parent) {
> +        super.setParent(parent);
> +        for (Object child : children) {
> +            ((Menu) child).setParent(parent);
> +        }
> +    }
>  }

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.

Reply via email to