diff --git a/app/assets/images/icons/translate-icon.svg b/app/assets/images/icons/translate-icon.svg new file mode 100644 index 000000000..2c34cd92b --- /dev/null +++ b/app/assets/images/icons/translate-icon.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/app/controllers/application_controller.rb b/app/controllers/application_controller.rb index 35b393a6b..c23773bd8 100644 --- a/app/controllers/application_controller.rb +++ b/app/controllers/application_controller.rb @@ -18,7 +18,8 @@ class ApplicationController < ActionController::Base before_action :set_active_storage_host before_action :setup_javascript_settings before_action :setup_tracking - before_action :set_locale + + around_action :switch_locale helper_method :multiple_devise_profile_connect?, :instructeur_signed_in?, :current_instructeur, :current_expert, :expert_signed_in?, :administrateur_signed_in?, :current_administrateur, :current_account @@ -308,9 +309,15 @@ class ApplicationController < ActionController::Base current_user&.email end - def set_locale - if ENV.fetch('LOCALIZATION_ENABLED', 'false') == 'true' - I18n.locale = http_accept_language.compatible_language_from(I18n.available_locales) + def switch_locale(&action) + locale = nil + if cookies[:locale] + locale = cookies[:locale] + elsif ENV.fetch('LOCALIZATION_ENABLED', 'false') == 'true' + locale = http_accept_language.compatible_language_from(I18n.available_locales) + else + locale = I18n.default_locale end + I18n.with_locale(locale, &action) end end diff --git a/app/controllers/root_controller.rb b/app/controllers/root_controller.rb index a61a15282..1a1c7e910 100644 --- a/app/controllers/root_controller.rb +++ b/app/controllers/root_controller.rb @@ -87,4 +87,9 @@ class RootController < ApplicationController format.js { render js: helpers.remove_element('#outdated-browser-banner') } end end + + def save_locale + cookies[:locale] = params[:locale] + redirect_to request.referer + end end diff --git a/app/views/layouts/_header.haml b/app/views/layouts/_header.haml index 7d3c684e7..dbf2ba1a7 100644 --- a/app/views/layouts/_header.haml +++ b/app/views/layouts/_header.haml @@ -87,3 +87,7 @@ - else = render partial: 'shared/help/help_button' + + - if ENV.fetch('LOCALIZATION_ENABLED', 'false') == 'true' + %li + = render partial: 'layouts/locale_dropdown' diff --git a/app/views/layouts/_locale_dropdown.html.haml b/app/views/layouts/_locale_dropdown.html.haml new file mode 100644 index 000000000..b9a12432f --- /dev/null +++ b/app/views/layouts/_locale_dropdown.html.haml @@ -0,0 +1,11 @@ +.dropdown.locale-dropdown + %button.button.dropdown-button.icon-only.header-menu-button{ title: "Translate", 'aria-expanded' => 'false', 'aria-controls' => 'locale_menu' } + .hidden Translate + = image_tag "icons/translate-icon.svg", alt: 'Translate', 'aria-hidden':'true' + %ul.header-menu.dropdown-content + %li + = link_to save_locale_path(locale: :en), method: :post, class: "menu-item menu-link" do + EN - English + %li + = link_to save_locale_path(locale: :fr), method: :post, class: "menu-item menu-link" do + FR - français diff --git a/config/routes.rb b/config/routes.rb index c6bb99c2a..a876587b1 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -152,6 +152,7 @@ Rails.application.routes.draw do get "patron" => "root#patron" get "suivi" => "root#suivi" post "dismiss_outdated_browser" => "root#dismiss_outdated_browser" + post "save_locale" => "root#save_locale" get "contact", to: "support#index" post "contact", to: "support#create"