2014-07-16 144 views
2

我已將我的Web應用翻譯成英語和克羅地亞語。英語被設置爲我的config/application.rb中默認的語言環境和所有啓用的回退:缺省語言環境,如果在Rails中缺少語言環境

config.i18n.load_path += Dir[Rails.root.join('my', 'locales', '*.{rb,yml}').to_s] 
config.i18n.default_locale = :en 
config.assets.precompile += %w(*.png *.jpg *.jpeg *.gif) 
I18n.enforce_available_locales = true 
config.i18n.fallbacks = true 
config.i18n.fallbacks = [:en] 
config.i18n.fallbacks = {'es' => 'en', 'fr' => 'en', 'de' => 'en'} 

我的config/routes.rb中的定義是這樣的:

scope "(:locale)", :locale => /en|hr/ do 
    root :to => 'static_pages#home' 
    match 'signin', to: 'sessions#new', via: 'get' 
    match 'signout', to: 'sessions#destroy', via: 'delete' 
    match '/signup', to: 'users#new', via: 'get' 
    match '/about', to: 'static_pages#about', via: 'get' 
    resources :sessions, only: [:new, :create, :destroy] 
    resources :relationships, only: [:create, :destroy] 

    resources :users do 
    member do 
     get :following, :followers 
    end 
    end 

end 

一切都運行完美當用戶使用應用程序並在語言之間切換,但如果用戶轉到url並鍵入例如「es」而不是「en」或「hr」,則出現錯誤說明的路由錯誤頁面:No route matches [GET ]「/ es/signin」

我該如何使它回退到英語語言環境,如果locales文件夾中的整個.yml文件丟失?

+0

也許是因爲你指定了locale參數(':locale =>/en | hr /')的確切值? – peresleguine

+0

我必須定義那些值(因爲我只有那兩個)。如果我刪除它們,整個應用程序無法正常工作。 –

+0

如果你使用除'en'或'hr'之外的任何內容作爲路徑前綴,它將導致路由錯誤。如果將「es」添加到正則表達式,輸出將會是什麼? ':locale =>/en | hr | es /'? – peresleguine

回答

1

es或任何其他語言環境添加到您的config/routes.rb中的正則表達式::locale => /en|hr|es/。除這些值之外的任何值都會導致路由錯誤。

+0

如果用戶只打入'es',這是一個好的解決方案。但是如果他鍵入其他任何內容,錯誤頁面將再次顯示。我想找到避免這種情況的方法。 –

+0

如果用戶手動鍵入'/ asdasdasdasd/signin',則可以看到開發中的路由錯誤和生產中的404錯誤。我建議列出預期的地區並忘記意外的行爲。 – peresleguine

+0

當然希望如此......謝謝! :) –