jpo*_*poz 14 ruby-on-rails internationalization
我们几个月前将我们的网站国际化,但忘记了一个部分:用户选择时区的下拉菜单.
你如何翻译以下行:
= f.time_zone_select :timezone, ActiveSupport::TimeZone.all
Run Code Online (Sandbox Code Playgroud)
Dav*_*rth 14
我遇到了同样的问题.但是,当我试图实现Peter的解决方案时,我发现了一个更简单的解决方案.该time_zone_select助手需要一个:model选项,该选项默认为ActiveSupport::TimeZone.根据API文档,所有这个模型必须做的是返回all方法中的时区对象数组.然后我们可以覆盖该to_s方法以返回翻译(如果未找到翻译,则默认为原始翻译).这是班级:
# 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
Run Code Online (Sandbox Code Playgroud)
在视图中:
<%= time_zone_select :user, :time_zone, nil, :model => I18nTimeZone %>
Run Code Online (Sandbox Code Playgroud)
使用以前在翻译文件中指定的翻译:
# 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
Run Code Online (Sandbox Code Playgroud)
小智 5
我在这篇文章中提出了一些想法并构建了一个宝石来处理时区翻译.我现在只有en和es翻译,但很容易将它添加到你的应用程序并添加更多的语言环境.只需将其添加到您的Gemfile:
宝石i18n-timezones
你可以在这里获取来源:
https://github.com/onomojo/i18n-timezones
| 归档时间: |
|
| 查看次数: |
4923 次 |
| 最近记录: |