Roteamento i18n para o mecanismo montado - Ignorando a localidade

Eu tenho um aplicativo (my_test_app) com o suporte i18n trabalhando construído. Atualmente, existem dois arquivos de idioma disponíveis, FR e EN, e se eu alternar entre eles, tudo funciona como eu espero vê-lo para funções que não são de mecanismo, como o índice de usuário / show / edit / delete (ISED) opções.

Dentro do my_test_app eu tenho um Rails Engine montado (my_engine) que possui um controller & model set (engine_job). Assim, um URL viável deve ser

http://0.0.0.0:3000/fr/my_engine/engine_job

Não importa qual idioma eu escolher, no entanto, ele sempre aparece em EN. Examinando os parâmetros mostra:

--- !ruby/hash:ActiveSupport::HashWithIndifferentAccess
locale: fr
action: index
controller: my_engine/engine_job

E ainda a tradução escolhida é EN.

my_test_app route.rb:

MyTestApp::Application.routes.draw do

  scope "(:locale)", locale: /#{I18n.available_locales.join("|")}/ do
    mount MyEngine::Engine, at: "/my_engine"
  end # scope locale

  match '*path', to: redirect("/#{I18n.default_locale}/%{path}"), constraints: lambda { |req| !req.path.starts_with? "/#{I18n.default_locale}/" and !req.path == "/#{I18n.default_locale}/"}
  match '', to: redirect("/#{I18n.default_locale}/")
end

my_engine route.rb:

MyEngine::Engine.routes.draw do
  resources :my_jobs
end

rotas de ancinho:

my_engine        (/:locale)/my_engine           MyEngine::Engine {:locale=>/en|fr/}
                             /*path(.:format)                    :controller#:action
                             /                                   :controller#:action
                users GET    (/:locale)/users(.:format)          users#index {:locale=>/en|fr/}
                      POST   (/:locale)/users(.:format)          users#create {:locale=>/en|fr/}
             new_user GET    (/:locale)/users/new(.:format)      users#new {:locale=>/en|fr/}
            edit_user GET    (/:locale)/users/:id/edit(.:format) users#edit {:locale=>/en|fr/}
                 user GET    (/:locale)/users/:id(.:format)      users#show {:locale=>/en|fr/}
                      PUT    (/:locale)/users/:id(.:format)      users#update {:locale=>/en|fr/}
                      DELETE (/:locale)/users/:id(.:format)      users#destroy {:locale=>/en|fr/}
             sessions POST   (/:locale)/sessions(.:format)       sessions#create {:locale=>/en|fr/}
          new_session GET    (/:locale)/sessions/new(.:format)   sessions#new {:locale=>/en|fr/}
              session DELETE (/:locale)/sessions/:id(.:format)   sessions#destroy {:locale=>/en|fr/}
               signup        (/:locale)/signup(.:format)         users#new {:locale=>/en|fr/}
               signin        (/:locale)/signin(.:format)         sessions#new {:locale=>/en|fr/}
              signout DELETE (/:locale)/signout(.:format)        sessions#destroy {:locale=>/en|fr/}
                 help        (/:locale)/help(.:format)           static_pages#help {:locale=>/en|fr/}
                about        (/:locale)/about(.:format)          static_pages#about {:locale=>/en|fr/}
                 root        /(:locale)(.:format)                static_pages#home {:locale=>/en|fr/}

Routes for MyEngine::Engine {:locale=>/en|fr/}:
    engine_jobs GET    /engine_jobs(.:format)          my_engine/engine_jobs#index
                POST   /engine_jobs(.:format)          my_engine/engine_jobs#create
 new_engine_job GET    /engine_jobs/new(.:format)      my_engine/engine_jobs#new
edit_engine_job GET    /engine_jobs/:id/edit(.:format) my_engine/engine_jobs#edit
     engine_job GET    /engine_jobs/:id(.:format)      my_engine/engine_jobs#show
                PUT    /engine_jobs/:id(.:format)      my_engine/engine_jobs#update
                DELETE /engine_jobs/:id(.:format)      my_engine/engine_jobs#destroy

Além disso, quaisquer links clicados no mecanismo definem o idioma para EN. Algumas pesquisas na web não mostram nenhuma luz real sobre o que pode estar acontecendo aqui, já que todos os exemplos do i18n que eu encontrei não envolvem mecanismos montados.

EDIT: show code para definir a localidade padrão my_test_app / app / controllers / application_controller.rb:

class ApplicationController < ActionController::Base
  protect_from_forgery
  helper MyEngine::Engine.helpers

  ActiveRecord::Base.verify_active_connections!

  before_filter :set_locale

  private
    def set_locale
      I18n.locale = params[:locale] || I18n.default_locale
      Rails.application.routes.default_url_options[:locale]= I18n.locale
      logger.debug "My_Test_App:  default_url_options is passed options: #{Rails.application.routes.default_url_options.inspect}\n"
      # current_user.locale
      # request.subdomain
      # request.env["HTTP_ACCEPT_LANGUAGE"]
      # request.remote_ip
    end # set_locale

end # class ApplicationController

/EDITAR

EDIT2 (Mapa de rota após alterações sugeridas por Pierre 09 de agosto às 15:59):

Um aplicativo de rotahttp://0.0.0.0:3000/en/users com"locale"=>"en". Uma rota de mecanismo criada pelo Assistente é semelhantehttp://0.0.0.0:3000/my_engine?locale=en/engine_jobs e yeildsNo route matches [GET] "/my_engine".

my_engine_plugin        /my_engine                     MyEnginePlugin::Engine
                users GET    (/:locale)/users(.:format)          users#index {:locale=>/en|fr/}
                      POST   (/:locale)/users(.:format)          users#create {:locale=>/en|fr/}
             new_user GET    (/:locale)/users/new(.:format)      users#new {:locale=>/en|fr/}
            edit_user GET    (/:locale)/users/:id/edit(.:format) users#edit {:locale=>/en|fr/}
                 user GET    (/:locale)/users/:id(.:format)      users#show {:locale=>/en|fr/}
                      PUT    (/:locale)/users/:id(.:format)      users#update {:locale=>/en|fr/}
                      DELETE (/:locale)/users/:id(.:format)      users#destroy {:locale=>/en|fr/}
             sessions POST   (/:locale)/sessions(.:format)       sessions#create {:locale=>/en|fr/}
          new_session GET    (/:locale)/sessions/new(.:format)   sessions#new {:locale=>/en|fr/}
              session DELETE (/:locale)/sessions/:id(.:format)   sessions#destroy {:locale=>/en|fr/}
               signup        (/:locale)/signup(.:format)         users#new {:locale=>/en|fr/}
               signin        (/:locale)/signin(.:format)         sessions#new {:locale=>/en|fr/}
              signout DELETE (/:locale)/signout(.:format)        sessions#destroy {:locale=>/en|fr/}
                 help        (/:locale)/help(.:format)           static_pages#help {:locale=>/en|fr/}
                about        (/:locale)/about(.:format)          static_pages#about {:locale=>/en|fr/}
                 root        /(:locale)(.:format)                static_pages#home {:locale=>/en|fr/}

Routes for MyEnginePlugin::Engine:
    engine_jobs GET    (/:locale)/engine_jobs(.:format)          my_engine_plugin/engine_jobs#index {:locale=>/en|fr/}
                     POST   (/:locale)/engine_jobs(.:format)          my_engine_plugin/engine_jobs#create {:locale=>/en|fr/}
 new_engine_job GET    (/:locale)/engine_jobs/new(.:format)      my_engine_plugin/engine_jobs#new {:locale=>/en|fr/}
edit_engine_job GET    (/:locale)/engine_jobs/:id/edit(.:format) my_engine_plugin/engine_jobs#edit {:locale=>/en|fr/}
     engine_job GET    (/:locale)/engine_jobs/:id(.:format)      my_engine_plugin/engine_jobs#show {:locale=>/en|fr/}
                     PUT    (/:locale)/engine_jobs/:id(.:format)      my_engine_plugin/engine_jobs#update {:locale=>/en|fr/}
                     DELETE (/:locale)/engine_jobs/:id(.:format)      my_engine_plugin/engine_jobs#destroy {:locale=>/en|fr/}

/ EDIT2 (Mapa de rota após alterações sugeridas por Pierre 09 de agosto às 15:59)

Então, a questão é quais alterações eu preciso fazer nas minhas rotas ou mecanismo para que isso funcione como esperado?

Agradecemos antecipadamente pelo seu tempo e sugestões!

questionAnswers(1)

yourAnswerToTheQuestion