Translating Rails Timezones

前端 未结 9 664
滥情空心
滥情空心 2021-02-05 11:09

We internationalized our site months ago, but forgot one part: The drop down where a user picks their timezone.

How do you translate the following line:



        
9条回答
  •  滥情空心
    2021-02-05 11:51

    I've come across the same problem. However, when I was trying to implement Peter's solution, a simpler solution occurred to me. The time_zone_select helper takes a :model option, which defaults to ActiveSupport::TimeZone. According to the API documentation, all this model has to do is return an array of timezone objects in the all method. We can then override the to_s method to return the translation (defaulting to the original if the translation isn't found). Here is the class:

    # lib/i18n_time_zone.rb
    class I18nTimeZone < ActiveSupport::TimeZone
      def self.all
        super.map { |z| create(z.name, z.utc_offset) }
      end
    
      def to_s
        translated_name = I18n.t(name, :scope => :timezones, :default => name)
        "(GMT#{formatted_offset}) #{translated_name}"
      end
    end
    

    And in the view:

    <%= time_zone_select :user, :time_zone, nil, :model => I18nTimeZone %>
    

    With the translations specified in the translation file as before:

    # es.yml
    es:
      timezones:
        "International Date Line West":    "Línea de fecha internacional del oeste"
        "Pacific Time (US & Canada)":      "Tiempo pacífico (& de los E.E.U.U.; Canadá)"
        # and so on
    

提交回复
热议问题