6
votes

I tried every combination I can think of but I cannot get my app to see the localized content provided by my engine. Now the engine does just fine.

I see the same problem with Rails_admin. Where it's i18n files are in a separate gem. The main app cannot seem to see the files. I'm sure there must be an error in how I'm specifying the I18n.load_path, but it's got me beat.

from Ryan Bates rails cast:

I18n.load_path += Dir[Rails.root.join('config', 'locale', '*.{rb,yml}')]

And one of my hack attempts:

I18n.load_path += Dir[Rails.root.join('**','locales', '**', '*.{rb,yml}')]

And any reference from inside the app results in a translation not found.

Any clues.

1
where are the locale files generated from your engine. - a14m
they are in config/locales. I've copied them to lib/locales and root/locales to no avail. - bobbdelsol
please add them to the question so others can help - a14m
this appears to be a problem with the local development environment. When the app is deployed, it works. Not sure why - bobbdelsol
@bobbdelsol could you solve it for development? I have the same problem and it still works only for production environment. - Maxim Khan-Magomedov

1 Answers

18
votes

I was facing same issue , If your developing rails engine then add following lines to lib/engine_name/engine.rb

module MyEngine
  class MyEngine < Rails::Engine
    config.before_initialize do                                                      
      config.i18n.load_path += Dir["#{config.root}/config/locales/**/*.yml"]
    end
  end
end

Another way

module MyEngine
  class MyEngine < Rails::Engine
    initializer 'MyEngine', before: :load_config_initializers do
      Rails.application.config.i18n.load_path += Dir["#{config.root}/config/locales/**/*.yml"]        
    end
  end
end