Question

In Rails i18n, how to get all values for a certain key using the following:

translations = I18n.backend.send(:translations)

get all the keys

I need to be able to get a certain section for example only return everything under "home"

en:
  home:
    test: test
Was it helpful?

Solution

The return value of I18n.backend.send(:translations) is just a hash, so you can access a subset just by passing in the appropriate keys.

e.g. if you have:

en:
  foo:
    bar:
      some_term: "a translation"
      some_other_term: "another translation"   

Then you can get the the subset of the hash under bar with:

I18n.backend.send(:translations)[:en][:foo][:bar]
#=> { :some_term=>"a translation", :some_other_term => "another translation"}

OTHER TIPS

The default I18n backend is I18n::Backend::Simple, which does not expose the translations to you. (I18.backend.translations is a protected method.)

This isn't generally a good idea, but if you really need this info and can't parse the file, you can extend the backend class.

class I18n::Backend::Simple
  def translations_store
    translations
  end
end

You can then call I18n.backend.translations_store to get the parsed translations. You probably shouldn't rely on this as a long term strategy, but it gets you the information you need right now.

Setting I18n.locale then doing I18n.t works fine, e.g.:

def self.all_t(string)
  I18n.locale = :en
  en = I18n.t("pages.home.#{string}")
  I18n.locale = :fr
  fr = I18n.("pages.home.#{string}")
  [en, fr]
end
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top