2016-07-14 2 views
0

Я использую Rails i18n, и я заметил, что в течение нескольких месяцев нилъ должен быть введен (как указано в документации здесь: https://github.com/rails/rails/blob/master/activesupport/lib/active_support/locale/en.yml#L15_), как это:В чем причина записи nil в реляционных локациях месяца и дневных массивов?

month_names: [~, January, February, March, April, May, June, July, August, September, October, November, December] 

, как нет такой вещи, как 0-й месяц.

Почему это важно, почему январь не вернулся только для первого элемента? Как это работает?

ответ

1

Это потому, что натуральные числа месяца являются 1-вместо того, чтобы быть 0 -О как типичный массив. Чтобы обеспечить это и избежать необходимости запоминать вычисления индекса, когда это необходимо, массив имен месяцев определяется только с дополнительным элементом в позиции zero.

Взгляните на date_helper code для примера того, как он используется:

# Looks up month names by number (1-based): 
    # 
    # month_name(1) # => "January" 
    # 
    # If the <tt>:use_month_numbers</tt> option is passed: 
    # 
    # month_name(1) # => 1 
    # 
    # If the <tt>:use_two_month_numbers</tt> option is passed: 
    # 
    # month_name(1) # => '01' 
    # 
    # If the <tt>:add_month_numbers</tt> option is passed: 
    # 
    # month_name(1) # => "1 - January" 
    # 
    # If the <tt>:month_format_string</tt> option is passed: 
    # 
    # month_name(1) # => "January (01)" 
    # 
    # depending on the format string. 
    def month_name(number) 
     if @options[:use_month_numbers] 
     number 
     elsif @options[:use_two_digit_numbers] 
     '%02d' % number 
     elsif @options[:add_month_numbers] 
     "#{number} - #{month_names[number]}" 
     elsif format_string = @options[:month_format_string] 
     format_string % {number: number, name: month_names[number]} 
     else 
     month_names[number] 
     end 
    end 
1

Они, вероятно, просто хотят, чтобы индекс массива соответствовал правильному месяцу, чтобы они запирали заглушку спереди.

например.

months[12] = December