diff options
Diffstat (limited to 'app')
-rw-r--r-- | app/assets/stylesheets/leap.scss | 12 | ||||
-rw-r--r-- | app/controllers/application_controller.rb | 36 | ||||
-rw-r--r-- | app/controllers/pages_controller.rb | 2 | ||||
-rw-r--r-- | app/helpers/core_helper.rb | 12 | ||||
-rw-r--r-- | app/views/layouts/_footer.html.haml | 3 |
5 files changed, 47 insertions, 18 deletions
diff --git a/app/assets/stylesheets/leap.scss b/app/assets/stylesheets/leap.scss index 13560c0..35f0ed4 100644 --- a/app/assets/stylesheets/leap.scss +++ b/app/assets/stylesheets/leap.scss @@ -269,6 +269,18 @@ html, body { #footer { padding-top: $footer-gutter; height: $footer-height - $footer-border-width; + .locales { + text-align: center; + margin-bottom: 15px; + a { + padding: 4px; + &.active { + font-weight: bold; + background-color: #eee; + border-radius: 4px; + } + } + } .full-height { text-align: center; line-height: $footer-height - $footer-border-width; diff --git a/app/controllers/application_controller.rb b/app/controllers/application_controller.rb index ff291f2..58e6f83 100644 --- a/app/controllers/application_controller.rb +++ b/app/controllers/application_controller.rb @@ -38,41 +38,30 @@ class ApplicationController < ActionController::Base ## # - # URL paths for which we don't enforce the locale as the prefix of the path. - # - NON_LOCALE_PATHS = /^\/(assets|webfinger|.well-known|rails|key|[0-9]+)($|\/)/ - - # # Before filter to set the current locale. Possible outcomes: # # (a) do nothing for certain routes and requests. # (b) if path already starts with locale, set I18n.locale and default_url_options. # (c) otherwise, redirect so that path starts with locale. # - # If the locale happens to be the default local, no paths are prefixed with the locale. - # def set_locale - if request.method == "GET" && request.format == 'text/html' && request.path !~ NON_LOCALE_PATHS - if params[:locale] && LOCALES_STRING.include?(params[:locale]) + if request_may_have_locale?(request) + if CommonLanguages::available_code?(params[:locale]) I18n.locale = params[:locale] - update_default_url_options else I18n.locale = http_accept_language.compatible_language_from(I18n.available_locales) || I18n.default_locale - update_default_url_options if I18n.locale != I18n.default_locale redirect_to url_for(params.merge(:locale => I18n.locale)) end end - else - update_default_url_options end end - def update_default_url_options - if I18n.locale != I18n.default_locale - self.default_url_options[:locale] = I18n.locale + def default_url_options(options={}) + if request_may_have_locale?(request) + { :locale => I18n.locale } else - self.default_url_options[:locale] = nil + { :locale => nil } end end @@ -104,4 +93,17 @@ class ApplicationController < ActionController::Base response.headers["Expires"] = "0" end + private + + # + # URL paths for which we don't enforce the locale as the prefix of the path. + # + NON_LOCALE_PATHS = /^\/(assets|webfinger|.well-known|rails|key|[0-9]+)($|\/)/ + + # + # For some requests, we ignore locale determination. + # + def request_may_have_locale?(request) + request.method == "GET" && request.format == 'text/html' && request.path !~ NON_LOCALE_PATHS + end end diff --git a/app/controllers/pages_controller.rb b/app/controllers/pages_controller.rb index c477b7c..e0f39e3 100644 --- a/app/controllers/pages_controller.rb +++ b/app/controllers/pages_controller.rb @@ -12,7 +12,7 @@ class PagesController < ApplicationController private def page_name - request.path.sub(/^\/(#{MATCH_LOCALE}\/)?/, '') + request.path.sub(/^\/(#{CommonLanguages.match_available}\/)?/, '') end end diff --git a/app/helpers/core_helper.rb b/app/helpers/core_helper.rb index 46e8fa4..f34d2f2 100644 --- a/app/helpers/core_helper.rb +++ b/app/helpers/core_helper.rb @@ -17,4 +17,16 @@ module CoreHelper APP_CONFIG[:service_levels].present? && APP_CONFIG[:service_levels].detect{|k,v| v['rate'].present?} end + # + # a bunch of links to the different languages that are available. + # + def locales_links + CommonLanguages.available.collect { |lang| + link_to(lang.name, + {:action => params[:action], :controller => params[:controller], :locale => lang.code}, + {:class => (lang.code == I18n.locale ? 'locale active' : 'locale')} + ) + }.join(" ").html_safe + end + end diff --git a/app/views/layouts/_footer.html.haml b/app/views/layouts/_footer.html.haml index de53667..f502ddb 100644 --- a/app/views/layouts/_footer.html.haml +++ b/app/views/layouts/_footer.html.haml @@ -1,3 +1,6 @@ +- if CommonLanguages.available.size > 1 + .locales + = locales_links .full-height = link_to icon('home') + t(:home), home_path = link_to icon('eye-close') + t(:privacy_policy), privacy_policy_path |