Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

I18n without Rails?

just having troubles to make I18n to work without Rails environment:


irb> require 'i18n'
=> true
irb> I18n.load_path=Dir['/usr/lib/ruby/gems/1.9.1/gems/rails-i18n-0.6.6/rails/locale/en.yml']
=> ["/usr/lib/ruby/gems/1.9.1/gems/rails-i18n-0.6.6/rails/locale/en.yml"]
irb> I18n.load_path+=Dir['/usr/lib/ruby/gems/1.9.1/gems/rails-i18n-0.6.6/rails/locale/sk.yml']
=> ["/usr/lib/ruby/gems/1.9.1/gems/rails-i18n-0.6.6/rails/locale/en.yml", "/usr/lib/ruby/gems/1.9.1/gems/rails-i18n-0.6.6/rails/locale/sk.yml"]
irb> I18n.locale=:sk
=> :sk
irb> I18n.default_locale=:sk
=> :sk
irb> I18n.l Time.now
I18n::MissingTranslationData: translation missing:
sk.time.formats.default
  from /usr/lib/ruby/gems/1.9.1/gems/i18n-0.6.1/lib/i18n.rb:289:in
`handle_exception'
  from /usr/lib/ruby/gems/1.9.1/gems/i18n-0.6.1/lib/i18n.rb:159:in
`translate'
  from
/usr/lib/ruby/gems/1.9.1/gems/i18n-0.6.1/lib/i18n/backend/base.rb:55:in
`localize'
  from /usr/lib/ruby/gems/1.9.1/gems/i18n-0.6.1/lib/i18n.rb:236:in
`localize'
  from (irb):11
  from /usr/bin/irb:12:in `<main>'
irb>

What am I doing wrong ? The sk.yml DOES contain sk.time.formats.default element !!

In addition what's the I18n's default load_path(s) so I won't be bothered to supply full paths to every translation YAML/Ruby file ?

Thanks.

like image 724
David Unric Avatar asked Oct 16 '12 14:10

David Unric


People also ask

What is i18n Ruby on rails?

The Ruby I18n (shorthand for internationalization) gem which is shipped with Ruby on Rails (starting from Rails 2.2) provides an easy-to-use and extensible framework for translating your application to a single custom language other than English or for providing multi-language support in your application.

How does rails i18n handle translation?

Following the convention over configuration philosophy, Rails I18n provides reasonable default translation strings. When different translation strings are needed, they can be overridden. Rails adds all .rb and .yml files from the config/locales directory to the translations load path, automatically.

What is the i18n framework?

The Ruby I18n framework provides you with all necessary means for internationalization/localization of your Rails application. You may, also use various gems available to add additional functionality or features. See the rails-i18n gem for more information.

What is i18n (Internationalization) API?

The i18n (internationalization) API is the standard way to support localization in Rails. The official guide has all the information you need, but it's also very long. This post is based on the notes I took when I was first learning how to set up i18n, and my goal here is to provide a more approachable walkthrough.


1 Answers

You already set the search path for the language definitions with I18n.load_path.

It seems, this is enough when using rails. Without rails, you must also load the language definitions with I18n.backend.load_translations.

In summary, you need two steps:

I18n.load_path = Dir['*.yml']
I18n.backend.load_translations

The dictionaries are defined with language key, e.g. like:

en:
  hello: "Hello world"

If you prefer to define your en.yml without language key, you may load them via

I18n.backend.store_translations(:en , YAML.load(File.read('en.yml')))

(You may also use a here-document or direct a ruby-hash).

like image 58
knut Avatar answered Oct 01 '22 04:10

knut