ruby-i18n / i18n

Internationalization (i18n) library for Ruby
MIT License
976 stars 408 forks source link

Defining translations for nested forms in namespaced resources #693

Open cestbalez opened 3 months ago

cestbalez commented 3 months ago

What I tried to do

I have the below setup

class BudgetLine < ApplicationRecord
  has_many :budget_line_items
  accepts_nested_attributes_for :budget_line_items
end

class BudgetLine::Accommodation < BudgetLine
end

class BudgetLineItem < ApplicationRecord
  belongs_to :budget_line
end

Now I'm trying to specify labels for the nested form of BudgetLineItem inside a BudgetLine::Accommodation form.

What I expected to happen

According to the i18n documentation, you can normally do something like this:

en:
  activerecord:
    attributes:
      user/role:
        admin: "Admin"
        contributor: "Contributor"

What actually happened

This works if the model in question is not namespaced, as with User above. However, when you want to specify a namespaced model it has the same syntax with '/', so it becomes:

en:
  activerecord:
    attributes:
      budget_line/accommodation/budget_line_items:
        unit: Room

which does not work.

I've tried different variations of this, e.g.

en:
  activerecord:
    attributes:
      budget_line:
        accommodation/budget_line_items:
          unit: Room

which also does not work, because this way of specifying namespaces in locales seems to be deprecated..?

As far as I understand, if the label is to be translated correctly in my case, the following should return the correct translation: BudgetLine::Accommodation.human_attribute_name("budget_line_items.unit"), but so far I've been unsuccessful in my attempts to target this.

I'm not sure if this is a limitation with the library, of if there's something I'm missing here..?

Versions of i18n, rails, and anything else you think is necessary


i18n (1.14.4)
rails (7.1.3.2)
´´´
omarsancas commented 1 month ago

+1