From 665964bcbba69829a4ff1e7d7bd936f90d49b3f7 Mon Sep 17 00:00:00 2001 From: elijah Date: Sun, 22 Dec 2013 01:45:41 -0800 Subject: locale prefix support: * set locale based on request header * enforce locale path prefix when current locale is not the default * note: don't use root_path anymore, instead use home_path --- config/defaults.yml | 8 ++++++- config/initializers/i18n.rb | 10 +++++++- config/routes.rb | 57 ++++----------------------------------------- 3 files changed, 21 insertions(+), 54 deletions(-) (limited to 'config') diff --git a/config/defaults.yml b/config/defaults.yml index eb31301..98dc334 100644 --- a/config/defaults.yml +++ b/config/defaults.yml @@ -45,7 +45,9 @@ common: &common user_actions: ['destroy_account'] admin_actions: ['change_pgp_key', 'change_service_level', 'destroy_account'] billing: ~ - + default_locale: :en + available_locales: + - :en service_levels: &service_levels service_levels: 0: @@ -89,6 +91,10 @@ test: secret_token: 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx' reraise_errors: true billing: {} + default_locale: :en + available_locales: + - :en + - :de production: <<: *downloads diff --git a/config/initializers/i18n.rb b/config/initializers/i18n.rb index 574d169..c277a22 100644 --- a/config/initializers/i18n.rb +++ b/config/initializers/i18n.rb @@ -1,2 +1,10 @@ +I18n.enforce_available_locales = true +I18n.available_locales = APP_CONFIG[:available_locales] +I18n.default_locale = APP_CONFIG[:default_locale] -I18n.available_locales = ['en'] +# Used to match locales route prefixes +MATCH_LOCALE = /(#{I18n.available_locales.join('|')})/ + +# I18n.available_locales is always an array of symbols, but for comparison with +# params we need it to be an array of strings. +LOCALES_STRING = I18n.available_locales.map(&:to_s) diff --git a/config/routes.rb b/config/routes.rb index 3b29251..12bfe93 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -1,56 +1,9 @@ LeapWeb::Application.routes.draw do - root :to => "home#index" - - # The priority is based upon order of creation: - # first created -> highest priority. - - # Sample of regular route: - # match 'products/:id' => 'catalog#view' - # Keep in mind you can assign values other than :controller and :action - - # Sample of named route: - # match 'products/:id/purchase' => 'catalog#purchase', :as => :purchase - # This route can be invoked with purchase_url(:id => product.id) - - # Sample resource route (maps HTTP verbs to controller actions automatically): - # resources :products - - # Sample resource route with options: - # resources :products do - # member do - # get 'short' - # post 'toggle' - # end # - # collection do - # get 'sold' - # end - # end - - # Sample resource route with sub-resources: - # resources :products do - # resources :comments, :sales - # resource :seller - # end - - # Sample resource route with more complex sub-resources - # resources :products do - # resources :comments - # resources :sales do - # get 'recent', :on => :collection - # end - # end - - # Sample resource route within a namespace: - # namespace :admin do - # # Directs /admin/products/* to Admin::ProductsController - # # (app/controllers/admin/products_controller.rb) - # resources :products - # end - - # See how all your routes lay out with "rake routes" + # Please do not use root_path or root_url. Use home_path and home_url instead, + # so that the path will be correctly prefixed with the locale. + # + root :to => "home#index" + get '(:locale)' => 'home#index', :locale => MATCH_LOCALE, :as => 'home' - # This is a legacy wild controller route that's not recommended for RESTful applications. - # Note: This route will make all actions in every controller accessible via GET requests. - # match ':controller(/:action(/:id))(.:format)' end -- cgit v1.2.3