在 Rails I18n 中本地化日期时间
Localizing datetimes in Rails I18n
在我的语言环境 rails 控制台中,我可以通过 I18n gem
看到我可以使用以下语言环境
> I18n.available_locales
=> [:en, :de, :es, :ja, :"pt-BR", :"zh-CN", :"zh-HK", :"zh-TW"]
我尝试使用 localize
和特定的英文日期格式 -
> I18n.with_locale("en") { I18n.l(Time.zone.now, format: "%B, %Y") }
=> "April, 2016"
效果很好。然后我用西班牙语和日语尝试同样的事情 -
> I18n.with_locale("es") { I18n.l(Time.zone.now, format: "%B, %Y") }
=> "s, 2016"
> I18n.with_locale("ja") { I18n.l(Time.zone.now, format: "%B, %Y") }
=> "s, 2016"
月份名称似乎被翻译为 "s"
。
rails I18n gem definitely defines month names 用于上述语言环境。 #localize
方法甚至利用了这些方法,还是试图从其他地方提取?
谢谢!
我收到了与 you 相同的一组输出 mentioned.The 以下是我调试行为所遵循的步骤。
检查是否 rails-i18n is part of my rails application by checking the Gemfile.lock (Actually, it is not). The I18n gem that is part of my Gemfile.lock is a dependency from activesupport gem
已检查“es”语言环境 I18n.load_path
的任何翻译文件的 I18n 加载路径。有 none.
了解 I18n.translate 方法如何处理日期和时间格式。格式字符串中的格式指令 [%a, %A, %b, %B, %p, %P] 仅用于本地化(日、月、子午线 (AM/PM) 指示符 - 更短和更长格式),因为只有那些包含语言文本。
I18n.with_locale(:en) { I18n.localize(Time.zone.now, format: "%B, %Y") }
内部调用
I18n.translate(:"date.month_names", :locale => :en)[Time.zone.now.mon]
那个returns"April"
同样,
I18n.with_locale(:es) { I18n.localize(Time.zone.now, format: "%B, %Y") }
内部调用
I18n.translate(:"date.month_names", :locale => :es)[Time.zone.now.mon]
但是没有可用的翻译,
I18n.translate(:"date.month_names", :locale => :es)
=> "translation missing: es.date.month_names"
Time.zone.now.mon = 4
。所以,它 returns "translation missing: es.date.month_names"[4]
即 "s"
希望对您有所帮助。
我遇到了同样的问题,我使用 I18n
将我的 rails 应用程序本地化为 spanish
。在进行时间翻译时,英语工作正常,如下所示:
I18n.l(raw_date.to_time, format: :long) = "Tuesday, July 11, 2017"
对于西班牙语,我得到
I18n.l(raw_date.to_time, format: :long) = "a, t 11, 2017"
我用 date
、day_name
、month_name
、abbr_day_names
、abbr_month_names
更新了我的 es.yml
文档,如下所示:
es:
date:
day_names:
- domingo
- lunes
- martes
- miércoles
- jueves
- viernes
- sábado
month_names:
-
- enero
- febrero
- marzo
- abril
- mayo
- junio
- julio
- agosto
- septiembre
- octubre
- noviembre
- diciembre
time:
formats:
long: '%A, %B %d, %Y'
short: '%b %d, %Y'
在那之后 spanish
我得到了想要的结果。
I18n.l(raw_date.to_time, format: :long) = "viernes, julio 21, 2017"
在浏览文档时我发现默认情况下 I18n
将包括
date
、day_name
、month_name
、abbr_day_names
、abbr_month_names
用于英语,而对于西班牙语和其他感兴趣的语言,我们需要在相应的字段中添加这些字段yaml
个我们正在维护的文档。 This 是 link 以获取各个语言的这些字段。
在我的语言环境 rails 控制台中,我可以通过 I18n gem
看到我可以使用以下语言环境> I18n.available_locales
=> [:en, :de, :es, :ja, :"pt-BR", :"zh-CN", :"zh-HK", :"zh-TW"]
我尝试使用 localize
和特定的英文日期格式 -
> I18n.with_locale("en") { I18n.l(Time.zone.now, format: "%B, %Y") }
=> "April, 2016"
效果很好。然后我用西班牙语和日语尝试同样的事情 -
> I18n.with_locale("es") { I18n.l(Time.zone.now, format: "%B, %Y") }
=> "s, 2016"
> I18n.with_locale("ja") { I18n.l(Time.zone.now, format: "%B, %Y") }
=> "s, 2016"
月份名称似乎被翻译为 "s"
。
rails I18n gem definitely defines month names 用于上述语言环境。 #localize
方法甚至利用了这些方法,还是试图从其他地方提取?
谢谢!
我收到了与 you 相同的一组输出 mentioned.The 以下是我调试行为所遵循的步骤。
检查是否 rails-i18n is part of my rails application by checking the Gemfile.lock (Actually, it is not). The I18n gem that is part of my Gemfile.lock is a dependency from activesupport gem
已检查“es”语言环境
I18n.load_path
的任何翻译文件的 I18n 加载路径。有 none.了解 I18n.translate 方法如何处理日期和时间格式。格式字符串中的格式指令 [%a, %A, %b, %B, %p, %P] 仅用于本地化(日、月、子午线 (AM/PM) 指示符 - 更短和更长格式),因为只有那些包含语言文本。
I18n.with_locale(:en) { I18n.localize(Time.zone.now, format: "%B, %Y") }
内部调用
I18n.translate(:"date.month_names", :locale => :en)[Time.zone.now.mon]
那个returns"April"
同样,
I18n.with_locale(:es) { I18n.localize(Time.zone.now, format: "%B, %Y") }
内部调用
I18n.translate(:"date.month_names", :locale => :es)[Time.zone.now.mon]
但是没有可用的翻译,
I18n.translate(:"date.month_names", :locale => :es)
=> "translation missing: es.date.month_names"
Time.zone.now.mon = 4
。所以,它 returns "translation missing: es.date.month_names"[4]
即 "s"
希望对您有所帮助。
我遇到了同样的问题,我使用 I18n
将我的 rails 应用程序本地化为 spanish
。在进行时间翻译时,英语工作正常,如下所示:
I18n.l(raw_date.to_time, format: :long) = "Tuesday, July 11, 2017"
对于西班牙语,我得到
I18n.l(raw_date.to_time, format: :long) = "a, t 11, 2017"
我用 date
、day_name
、month_name
、abbr_day_names
、abbr_month_names
更新了我的 es.yml
文档,如下所示:
es:
date:
day_names:
- domingo
- lunes
- martes
- miércoles
- jueves
- viernes
- sábado
month_names:
-
- enero
- febrero
- marzo
- abril
- mayo
- junio
- julio
- agosto
- septiembre
- octubre
- noviembre
- diciembre
time:
formats:
long: '%A, %B %d, %Y'
short: '%b %d, %Y'
在那之后 spanish
我得到了想要的结果。
I18n.l(raw_date.to_time, format: :long) = "viernes, julio 21, 2017"
在浏览文档时我发现默认情况下 I18n
将包括
date
、day_name
、month_name
、abbr_day_names
、abbr_month_names
用于英语,而对于西班牙语和其他感兴趣的语言,我们需要在相应的字段中添加这些字段yaml
个我们正在维护的文档。 This 是 link 以获取各个语言的这些字段。