use*_*003 2 ruby-on-rails internationalization rails-i18n
在我的语言环境控制台中,我可以通过I18n gem获得以下语言环境
> I18n.available_locales
=> [:en, :de, :es, :ja, :"pt-BR", :"zh-CN", :"zh-HK", :"zh-TW"]
Run Code Online (Sandbox Code Playgroud)
我尝试使用localize特定日期格式的英语-
> I18n.with_locale("en") { I18n.l(Time.zone.now, format: "%B, %Y") }
=> "April, 2016"
Run Code Online (Sandbox Code Playgroud)
哪个很棒。然后我用西班牙语和日语尝试相同的方法-
> 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"
Run Code Online (Sandbox Code Playgroud)
看来月份名称正在被翻译为"s"。
Rails I18n gem 绝对为上述语言环境定义了月份名称。该#localize方法是否甚至利用了这些方法,还是试图从其他地方提取?
谢谢!
我遇到了同样的问题,我使用了I18n本地化我的 Rails 应用程序spanish。在进行时间翻译时,它对于英语工作正常,如下所示:
I18n.l(raw_date.to_time, format: :long) = "Tuesday, July 11, 2017" \nRun Code Online (Sandbox Code Playgroud)\n\n对于西班牙语我得到
\n\n I18n.l(raw_date.to_time, format: :long) = "a, t 11, 2017" \nRun Code Online (Sandbox Code Playgroud)\n\n我用, , ,更新了我的es.yml文档dateday_namemonth_nameabbr_day_namesabbr_month_names如下所示:
es:\n date:\n day_names:\n - domingo\n - lunes\n - martes\n - mi\xc3\xa9rcoles\n - jueves\n - viernes\n - s\xc3\xa1bado\n month_names:\n -\n - enero\n - febrero\n - marzo\n - abril\n - mayo\n - junio\n - julio\n - agosto\n - septiembre\n - octubre\n - noviembre\n - diciembre\n time:\n formats:\n long: \'%A, %B %d, %Y\'\n short: \'%b %d, %Y\'\nRun Code Online (Sandbox Code Playgroud)\n\n之后对于spanish我得到了想要的结果。
I18n.l(raw_date.to_time, format: :long) = "viernes, julio 21, 2017"\nRun Code Online (Sandbox Code Playgroud)\n\n在浏览文档时,我发现默认情况下I18n将包含 \n date、day_name、 、month_name、英语abbr_day_names,abbr_month_names而对于西班牙语和其他感兴趣的语言,我们需要在yaml我们维护的相应文档中添加这些字段。这是获取相应语言的这些字段的链接。
小智 5
我收到的输出与您提到的相同。下面是调试行为的步骤。
检查是否Rails的国际化是通过检查Gemfile.lock的我的Rails应用程序的一部分(其实,这是不)。我的Gemfile.lock的一部分I18n gem是来自activesupport gem的依赖项
在I18n的加载路径中检查了“ es”语言环境的所有翻译文件I18n.load_path。没有。
I18n.with_locale(:en){I18n.localize(Time.zone.now,格式:“%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]是"s"
希望这可以帮助。
| 归档时间: |
|
| 查看次数: |
2212 次 |
| 最近记录: |