Me imagino que esto tendría que hacerse manualmente de la misma manera que cualquier otro I18n traducciones se hacen en los carriles. Esto significaría configurar los archivos locales con las traducciones. Algo así como:
# 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
Se podría sobrescribir el método time_zone_options_for_select
(que es utilizado por time_zone_select
) por el siguiente:
def time_zone_options_for_select(selected = nil, priority_zones = nil, model = ::ActiveSupport::TimeZone)
zone_options = ""
zones = model.all
convert_zones = lambda do |list|
list.map do |z|
localized_name = I18n.t(z.name, :scope => :timezones, :default => z.name)
[ "(GMT#{z.formatted_offset}) #{localized_name}", z.name ]
end
end
if priority_zones
if priority_zones.is_a?(Regexp)
priority_zones = model.all.find_all {|z| z =~ priority_zones}
end
zone_options += options_for_select(convert_zones[priority_zones], selected)
zone_options += "<option value=\"\" disabled=\"disabled\">-------------</option>\n"
zones = zones.reject { |z| priority_zones.include?(z) }
end
zone_options += options_for_select(convert_zones[zones], selected)
zone_options
end
Los cambios son los siguientes:
convert_zones = lambda do |list|
list.map do |z|
localized_name = I18n.t(z.name, :scope => :timezones, :default => z.name)
[ "(GMT#{z.formatted_offset}) #{localized_name}", z.name ]
end
end
Lo que estamos haciendo es, obteniendo el nombre localizado del nombre de TimeZone con I18n.t que está buscando en config/locales/LANG.yml
formateado como se muestra arriba. Si no podemos encontrar la traducción, simplemente recurrimos al uso del nombre TimeZone.
Ahora que hemos hecho esta configuración, debemos ser capaces de usar:
f.time_zone_select :timezone, ActiveSupport::TimeZone.all
o la más corta
f.time_zone_select :timezone # defaults to ActiveSupport::TimeZone.all
¿Qué estás tratando de traducir exactamente? Los nombres de las zonas horarias? – theIV
Sí, los nombres de las ciudades son diferentes en diferentes idiomas. – jpoz
Es una gran pregunta: ¿son ActiveSupport :: TimeZones solo en inglés? –