# -*- 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?