标签: rails-i18n

Rails:Model.human_attribute_name:字段应该在找不到翻译时引发错误?(也许是由state_machine引起的?)

我们经常在应用程序中偶然发现未翻译的模型属性.它们通常是因为某个属性被重命名或类似的东西而来.

Model.human_attribute_name :field找不到翻译时让I18n引发错误会非常有帮助.有没有办法实现这个目标?

更新:

似乎还有其他一些问题.这是我的I18n设置:

I18n.enforce_available_locales = false
config.i18n.load_path += Dir[Rails.root.join('config', 'locales', '**', '*.{rb,yml}')]
config.i18n.default_locale = 'de-CH'
config.i18n.available_locales = ['de', 'de-CH', 'en']
config.i18n.locale = 'de-CH'
config.i18n.fallbacks = {'de-CH' => 'de', 'en-GB' => 'en'}
Run Code Online (Sandbox Code Playgroud)

我无法设置,fallbacks = false因为我想要缺少de-CH优雅委托的翻译de,这通常似乎工作正常.但对于我的状态机属性human_to_state方法,它似乎不起作用.这是导致问题的视图代码:

= f.input :state_event, collection: f.object.state_transitions,
                        label_method: :human_to_name # This causes the problem!
Run Code Online (Sandbox Code Playgroud)

这在视图中打印为"状态事件",当我添加以下I18n键时,它成功转换为"状态":

de:mongoid:attributes:activity:state_event:Status

所以真的一个漏译,但确实的I18n不以任何方式抱怨.我还尝试使用自定义异常处理程序捕获异常,但似乎没有引发:

I18n.exception_handler = lambda do |exception, locale, key, options|
  binding.pry # This is never reached! …
Run Code Online (Sandbox Code Playgroud)

ruby-on-rails state-machine rails-i18n

2
推荐指数
1
解决办法
999
查看次数

Rails 将当前日期转换为另一种格式

在 Rails 中,我试图本地化日期:

2.1.1 :005 > Date.today
 => Mon, 14 Apr 2014 
2.1.1 :006 > I18n.localize(Date.today)
 => "14/04/2014" 
2.1.1 :007 > 
Run Code Online (Sandbox Code Playgroud)

第二个输出不是第一个的正确翻译!

你能帮助我吗 ?

ruby-on-rails i18n-gem rails-i18n

2
推荐指数
1
解决办法
1912
查看次数

如何使 I18n#t 方法在 rspec 测试中可用?

在我的测试中我使用了I18n#t很多。有没有办法让这个方法可用而不用前缀I18n(因为它在视图中是可能的)?

rspec ruby-on-rails internationalization rails-i18n

2
推荐指数
1
解决办法
271
查看次数

如何使用I18n.localize的语言环境结构?

在所提供的区域结构的I18n宝石可以看起来像下面:

de:
  date:
    abbr_day_names:
    - So
    - Mo
    - Di
    - Mi
    - Do
    - Fr
    - Sa
Run Code Online (Sandbox Code Playgroud)

但是尝试输出指南描述的那天不起作用,似乎它format:在本地区中寻找a 也是如此?

I18n.locale = :de
l(Date.current, format: :abbr_day_names)
Run Code Online (Sandbox Code Playgroud)

"I18n :: MissingTranslationData:翻译缺失:de.date.formats.abbr_day_names"

yaml locale ruby-on-rails rails-i18n ruby-on-rails-4

2
推荐指数
1
解决办法
1255
查看次数

Rails 4 I18n-添加新的语言环境文件后缺少翻译

目前,我有一些语言环境子目录,这些子目录已在配置中正确设置

        config/application.rb
        config.i18n.load_path += Dir["#{Rails.root.to_s}/config/locales/**/*.{rb,yml}"]
Run Code Online (Sandbox Code Playgroud)

我已经有2个语言环境文件,并且可以轻松获得翻译:

        config/locales/admin/dashboard.en.yml
        en:
          dashboard:
            title: Dashboard

        config/locales/admin/dashboard.fr.yml
        fr:
          dashboard:
            title: Tableau de bord

        irb(main):014:0> I18n.locale = :en
        => :en
        irb(main):015:0> I18n.t("dashboard.title")
        => "Dashboard"
        irb(main):016:0> I18n.locale = :fr
        => :fr
        irb(main):017:0> I18n.t("dashboard.title")
        => "Tableau de bord"
Run Code Online (Sandbox Code Playgroud)

现在,我在SAME子目录“ locales / admin”中添加了两个其他语言环境文件(与以前的文件非常相似...)。

        # =============

        config/locales/admin/sheet.en.yml
        en:
          sheet:
            title: Sheet

        config/locales/admin/sheet.fr.yml
        fr:
          sheet:
            title: Table
Run Code Online (Sandbox Code Playgroud)

我重新启动服务器...并尝试成功获得新添加的翻译

        irb(main):010:0> I18n.locale = :en
        => :en
        irb(main):011:0> I18n.t("sheet.title")
        => "translation missing: en.sheet.title"
        irb(main):012:0> I18n.locale = :fr
        => :fr
        irb(main):013:0> I18n.t("sheet.title")
        => "translation missing: …
Run Code Online (Sandbox Code Playgroud)

rails-i18n ruby-on-rails-4

2
推荐指数
1
解决办法
1190
查看次数

多个 Active Record 模型的属性转换

我有几个相关但又不同的 AR 模型,其中包含表示同一条数据的属性。当我为这些属性设置翻译时,我目前将它们设置为...

en:
  activerecord:
    attributes:
      model_a:
        assigned_date: "Assigned to worker"
      model_b:
        assigned_date: "Assigned to worker"
      [ ... ]
Run Code Online (Sandbox Code Playgroud)

有没有办法以某种通配符方式定义一次这种翻译?

我认为最有意义的方法...

en:
  activerecord:
    attributes:
      assigned_date: "Assigned to worker"
      model_a:
        [ model-specific translations here ]
Run Code Online (Sandbox Code Playgroud)

不起作用,因为 AR 显然正在寻找下层的模型名称 attributes

activerecord yaml ruby-on-rails rails-i18n

2
推荐指数
1
解决办法
524
查看次数

在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方法是否甚至利用了这些方法,还是试图从其他地方提取?

谢谢!

ruby-on-rails internationalization rails-i18n

2
推荐指数
2
解决办法
2212
查看次数

带有 i18n 翻译的 Rails select_tag

我有以下 select_tag 并希望翻译标签。我正在使用 Rails 国际化 (I18n) API

现在,这段代码可以在我需要翻译选项标签时使用。

<%=  select_tag "object", 
 "<option value=address>Address</option>
  <option value=Orden>Orden</option>".html_safe %> 
Run Code Online (Sandbox Code Playgroud)

我试过了:

<%=  select_tag "object", 
 "<option value=address><%= t('address').capitalize %></option>
  <option value=Orden>Orden</option>".html_safe %> 
Run Code Online (Sandbox Code Playgroud)

但我收到语法错误。我也试过:

<%=  select_tag "object", 
 "<option value=address> t('address').capitalize </option>
  <option value=Orden>Orden</option>".html_safe %> 
Run Code Online (Sandbox Code Playgroud)

最后一个不会翻译,只是把字符串 't('address').capitalize'

有什么建议吗?

ruby-on-rails internationalization rails-i18n ruby-on-rails-4

2
推荐指数
1
解决办法
1965
查看次数

列出给定语言的所有翻译 yml 键

所以我的应用程序中有一个翻译文件,如下所示:

en:
  activemodel:
    attributes:
      post:
        title: Title
        message: Message
        tag: Tag
      user:
        name: Name
        email: Email
Run Code Online (Sandbox Code Playgroud)

我想获得所有可用关键字符串的列表,因此对于本示例,我将获得以下内容:

'activemodel.attributes.post.title'
'activemodel.attributes.post.message'
'activemodel.attributes.post.tag'
'activemodel.attributes.user.name'
'activemodel.attributes.user.email'
Run Code Online (Sandbox Code Playgroud)

我知道我可以使用 获得所有翻译的哈希值I18n.backend.send(:translations)[:en],但我不确定如何获得每条路径。

任何帮助都会非常感谢!

hash ruby-on-rails rails-i18n

2
推荐指数
1
解决办法
893
查看次数

如何使用 Rails 5 和 I18n 将 human_attribute_name 复数化?

我想在我的应用程序中翻译和复数一个属性名称。

所以,对于我的 api_key 属性,我有翻译“Clef API”。

我将属性名称复数化Mymodel.human_attribute_name(:api_key).pluralize(2)并得到结果:"Clef APIs"

但是在法语中,“Clef API”的复数形式是“Clefs API”

所以我试图在我的 YML 中给出复数翻译,但它不起作用,我仍然得到了“One”的翻译,在末尾带有一个“s”。

fr.yml :

activerecord:
  attributes:
    mymodel:
      api_key:
        one: "Clef API"
        other: "Clefs API"  
Run Code Online (Sandbox Code Playgroud)

我可以Mymodel.human_attribute_name(:api_key).pluralize(2)回去"Clefs API"吗?

如果没有,我如何翻译和复数我的属性名称?

ruby-on-rails rails-i18n ruby-on-rails-5

2
推荐指数
1
解决办法
808
查看次数