在我的locale 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
方法是否会使用这些方法,还是试图从其他地方提取?
谢谢!
答案 0 :(得分:4)
我收到了与you提到的相同的输出集。以下是我调试行为的步骤。
通过检查Gemfile.lock(实际上,它不是)来检查rails-i18n是否属于我的rails应用程序。属于我的Gemfile.lock的I18n gem是来自activesupport gem的依赖
检查I18n加载路径是否为" es"区域设置I18n.load_path
。没有。
I18n.with_locale(:en){I18n.localize(Time.zone.now,format:"%B,%Y")}
内部调用
I18n.translate(:" date.month_names",:locale =>:en)[Time.zone.now.mon]
返回"April"
类似地,
I18n.with_locale(:es){I18n.localize(Time.zone.now,格式:"%B,%Y")}
内部调用
I18n.translate(:" date.month_names",:locale =>:es)[Time.zone.now.mon]
但是没有可用的翻译,
I18n.translate(:" date.month_names",:locale =>:es)
=> "翻译缺失:es.date.month_names"
Time.zone.now.mon = 4
。因此,它会返回"translation missing: es.date.month_names"[4]
<{1}}
希望这有帮助。
答案 1 :(得分:1)
我遇到了同样的问题,我使用I18n
来定位spanish
的rails应用程序。在做时间翻译时,英语的工作正常如下:
I18n.l(raw_date.to_time, format: :long) = "Tuesday, July 11, 2017"
对于西班牙语我正在
I18n.l(raw_date.to_time, format: :long) = "a, t 11, 2017"
我使用es.yml
,date
,day_name
,month_name
,abbr_day_names
更新了我的abbr_month_names
文档,如下所示:
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是获取各种语言的这些字段的链接。