使用i18n翻译哈希键

时间:2017-08-17 13:47:23

标签: ruby-on-rails date hash internationalization

我有一个键/值的散列,其中我的键是月/年格式的日期,

{"Apr 2016"=>6.0, "May 2016"=>6.0, "Jun 2016"=>6.0, "Jul 2016"=>6.0, "Aug 2016"=>7.5, "Sep 2016"=>7.5, "Oct 2016"=>7.5, "Nov 2016"=>7.5, "Dec 2016"=>7.5, "Jan 2017"=>8.666666666666666, "Feb 2017"=>8.666666666666666, "Mar 2017"=>8.666666666666666, "Apr 2017"=>6.4, "May 2017"=>6.833333333333333, "Jun 2017"=>6.0, "Jul 2017"=>6.375}

我用chartkick / chartjs

在图表中显示它

我希望翻译法语月份格式的密钥, 当我创建我的哈希时,我尝试翻译它,但没有任何工作日期显示仍然是英文

2 个答案:

答案 0 :(得分:0)

首先,确保Gemfile中的gem "i18n"

  1. 验证I18n.locale中的rails console。它应该是:fr
  2. 验证文件config/locales/fr.yml是否存在?
  3. 验证fr.yml:
  4. 文件中是否存在以下代码段
    date:
      formats:
        default: "%d/%m/%Y"
        default_with_day_name: "%a %d/%m/%Y"
        short: "%e %b"
        long: "%e %B %Y"
        long_with_abbr_month: "%e %b %Y"
        long_with_day_name: "%a %e %B %Y"
        long_with_full_day_name: "%A %e %B %Y"
        long_ordinal: "%e %B %Y"
        month_name: "%B"
        only_day: "%e"
        day_name: "%a"
        only_day_and_month: "%d/%m"
        only_month_and_year: "%b %Y"
    
      day_names: [dimanche, lundi, mardi, mercredi, jeudi, vendredi, samedi]
      abbr_day_names: [dim, lun, mar, mer, jeu, ven, sam]
      month_names: [~, janvier, février, mars, avril, mai, juin, juillet, août, septembre, octobre, novembre, décembre]
      abbr_month_names: [~, jan., fév., mar., avr., mai, juin, juil., août, sept., oct., nov., déc.]
      order:
        - :day
        - :month
        - :year
    

    如果一切正常,你可以这样做:

    I18n.l('2017-07-30'.to_date, :format => :only_month_and_year) # => "juil. 2017"
    

答案 1 :(得分:0)

最简单的解决方案是使用rails-i18n,设置语言环境并使用#localize方法和format指令。

gem rails-i18n添加到Gemfile并bundle后需要执行的操作:

[1] pry(main)> I18n.locale = :fr
=> :fr
[2] pry(main)> I18n.l(Date.parse("Apr 2016"), format: '%B %Y')
=> "avril 2016"
[3] pry(main)> I18n.l(Date.parse("Apr 2016"), format: '%b %Y')
=> "avr. 2016"
[4] pry(main)> I18n.l(Date.parse("1st of Apr 2016"), format: '%A %b %Y')
=> "vendredi avr. 2016"

如果你不解析字符串并直接将它们作为日期,那就更容易了。

有关如何使用格式的详细信息,您可以查看strftime文档。