diff --git a/extra/sample_plugin/init.rb b/extra/sample_plugin/init.rb index 48a5d935c..7389aaa6f 100644 --- a/extra/sample_plugin/init.rb +++ b/extra/sample_plugin/init.rb @@ -21,5 +21,5 @@ Redmine::Plugin.register :sample_plugin do end # A new item is added to the project menu - menu :project_menu, :label_plugin_example, :controller => 'example', :action => 'say_hello' + menu :project_menu, :sample_plugin, { :controller => 'example', :action => 'say_hello' }, :caption => 'Sample' end diff --git a/lib/redmine/menu_manager.rb b/lib/redmine/menu_manager.rb index 3b29912a1..c645b5ce8 100644 --- a/lib/redmine/menu_manager.rb +++ b/lib/redmine/menu_manager.rb @@ -122,7 +122,7 @@ module Redmine class MenuItem include GLoc - attr_reader :name, :url, :param, :condition, :caption, :html_options + attr_reader :name, :url, :param, :condition, :html_options def initialize(name, url, options) raise "Invalid option :if for menu item '#{name}'" if options[:if] && !options[:if].respond_to?(:call) @@ -131,9 +131,14 @@ module Redmine @url = url @condition = options[:if] @param = options[:param] || :id - @caption = options[:caption] || (l_has_string?("label_#{name}".to_sym) ? "label_#{name}".to_sym : name.to_s.humanize) + @caption_key = options[:caption] @html_options = options[:html] || {} end + + def caption + # check if localized string exists on first render (after GLoc strings are loaded) + @caption ||= (@caption_key || (l_has_string?("label_#{@name}".to_sym) ? "label_#{@name}".to_sym : @name.to_s.humanize)) + end end end end diff --git a/lib/redmine/plugin.rb b/lib/redmine/plugin.rb index e6047974e..36632c13e 100644 --- a/lib/redmine/plugin.rb +++ b/lib/redmine/plugin.rb @@ -66,11 +66,12 @@ module Redmine #:nodoc: # Adds an item to the given +menu+. # The +id+ parameter (equals to the project id) is automatically added to the url. - # menu :project_menu, :label_plugin_example, :controller => 'example', :action => 'say_hello' + # menu :project_menu, :plugin_example, { :controller => 'example', :action => 'say_hello' }, :caption => 'Sample' # - # Currently, only the project menu can be extended. Thus, the +name+ parameter must be +:project_menu+ - def menu(name, label, url) - Redmine::MenuManager.map(name) {|menu| menu.push label, url} + # +name+ parameter can be: :top_menu, :account_menu, :application_menu or :project_menu + # + def menu(name, item, url, options={}) + Redmine::MenuManager.map(name) {|menu| menu.push item, url, options} end # Defines a permission called +name+ for the given +actions+.