# -*- encoding: utf-8 -*- # Replaces Rails select_month helper and translated_month_names private method to provide # "standalone month names" feature. # # It is now possible to use both abbreviated and full month names in two variants (if current locale provides them). # All date helpers support :use_standalone_month_names key now, select_month helper sets # it to true by default. # Standalone month names are also used when :discard_day key is provided. if defined?(ActionView::Helpers::DateTimeSelector) && ActionView::Helpers::DateTimeSelector.private_instance_methods.include?("translated_month_names") module ActionView module Helpers module DateHelper # Returns a select tag with options for each of the months January through December with the current month # selected. The month names are presented as keys (what's shown to the user) and the month numbers (1-12) are # used as values (what's submitted to the server). It's also possible to use month numbers for the presentation # instead of names -- set the :use_month_numbers key in +options+ to true for this to happen. If you # want both numbers and names, set the :add_month_numbers key in +options+ to true. If you would prefer # to show month names as abbreviations, set the :use_short_month key in +options+ to true. If you want # to use your own month names, set the :use_month_names key in +options+ to an array of 12 month names. # You can also choose if you want to use i18n standalone month names or default month names -- you can # force standalone month names usage by using :use_standalone_month_names key. # Override the field name using the :field_name option, 'month' by default. # # # ==== Examples # # Generates a select field for months that defaults to the current month that # # will use keys like "January", "March". # select_month(Date.today) # # # Generates a select field for months that defaults to the current month that # # is named "start" rather than "month" # select_month(Date.today, :field_name => 'start') # # # Generates a select field for months that defaults to the current month that # # will use keys like "1", "3". # select_month(Date.today, :use_month_numbers => true) # # # Generates a select field for months that defaults to the current month that # # will use keys like "1 - January", "3 - March". # select_month(Date.today, :add_month_numbers => true) # # # Generates a select field for months that defaults to the current month that # # will use keys like "Jan", "Mar". # select_month(Date.today, :use_short_month => true) # # # Generates a select field for months that defaults to the current month that # # will use keys like "Januar", "Marts." # select_month(Date.today, :use_month_names => %w(Januar Februar Marts ...)) # def select_month(date, options = {}, html_options = {}) DateTimeSelector.new(date, options.merge(:use_standalone_month_names => true), html_options).select_month end end class DateTimeSelector #:nodoc: private # Returns translated month names # => [nil, "January", "February", "March", # "April", "May", "June", "July", # "August", "September", "October", # "November", "December"] # # If :use_short_month option is set # => [nil, "Jan", "Feb", "Mar", "Apr", "May", "Jun", # "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"] # # Also looks up if :discard_day or :use_standalone_month_names option is set # and uses i18n standalone month names if so. # def translated_month_names begin if @options[:use_short_month] if (@options[:discard_day] || @options[:use_standalone_month_names]) && I18n.translate(:'date.standalone_abbr_month_names') key = :'date.standalone_abbr_month_names' else key = :'date.abbr_month_names' end else if (@options[:discard_day] || @options[:use_standalone_month_names]) && I18n.translate(:'date.standalone_month_names') key = :'date.standalone_month_names' else key = :'date.month_names' end end I18n.translate(key, :locale => @options[:locale]) end end end end end end # if defined?