Skip to content

Instantly share code, notes, and snippets.

@henrik
Created January 13, 2010 13:42
Show Gist options
  • Star 4 You must be signed in to star a gist
  • Fork 2 You must be signed in to fork a gist
  • Save henrik/276191 to your computer and use it in GitHub Desktop.
Save henrik/276191 to your computer and use it in GitHub Desktop.
Ruby on Rails i18n: storing locale names in their yml files and retrieving them.
# config/locales/en.yml
en:
i18n:
language:
name: 'English'
# config/initializers/i18n.rb
module I18n
def self.name_for_locale(locale)
I18n.backend.translate(locale, "i18n.language.name")
rescue I18n::MissingTranslationData
locale.to_s
end
end
# E.g.:
# I18n.name_for_locale(:en) # => "English"
@milankubin
Copy link

I stumbled accross this, trying to find a cleaner way other than a switch etc.
But alas, outdated it now throws an uncaught :exception.

This is now the correct way to do it I think. (works @ Rails 4.1.8)

module I18n

  def self.name_for_locale(locale)
    self.with_locale(locale) { self.translate("i18n.language.name") }
  rescue I18n::MissingTranslationData
    locale.to_s
  end

end

@ritikesh
Copy link

+1 for the updated answer. thanks!

@mcmegavolt
Copy link

Exception I18n::MissingTranslationData not working
I'm getting "translation missing: en.i18n.language.name" instead of locale.to_s

@jitscar
Copy link

jitscar commented Jul 24, 2017

@mcmegavolt just replace your code to smth like this

self.with_locale(locale) { self.t('i18n.language.name', raise: true) }

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment