diff --git a/app/controllers/locales_controller.rb b/app/controllers/locales_controller.rb new file mode 100644 index 0000000000..bb18748a5d --- /dev/null +++ b/app/controllers/locales_controller.rb @@ -0,0 +1,8 @@ +# frozen_string_literal: true + +class LocalesController < BaseController + def show + UserLocaleSetter.new(spree_current_user, params[:id], cookies).set_locale + redirect_back fallback_location: main_app.root_url + end +end diff --git a/app/views/shared/menu/_language_selector.html.haml b/app/views/shared/menu/_language_selector.html.haml index b69205f61e..e93be64540 100644 --- a/app/views/shared/menu/_language_selector.html.haml +++ b/app/views/shared/menu/_language_selector.html.haml @@ -5,4 +5,4 @@ %ul.dropdown - OpenFoodNetwork::I18nConfig.selectable_locales.each do |l| %li - %a{href: "?locale=#{l.to_s}" }= t('language_name', locale: l) + = link_to t('language_name', locale: l), main_app.locale_path(l.to_s) diff --git a/config/routes.rb b/config/routes.rb index f51948f6aa..3385d97a02 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -20,6 +20,7 @@ Openfoodnetwork::Application.routes.draw do get "/register", to: "registration#index", as: :registration get "/register/auth", to: "registration#authenticate", as: :registration_auth post "/user/registered_email", to: "spree/users#registered_email" + resources :locales, only: [:show] # Redirects to global website get "/connect", to: redirect("https://openfoodnetwork.org/#{ENV['DEFAULT_COUNTRY_CODE'].andand.downcase}/connect/") diff --git a/spec/features/consumer/multilingual_spec.rb b/spec/features/consumer/multilingual_spec.rb index a8e16df100..fcd7b16e7e 100644 --- a/spec/features/consumer/multilingual_spec.rb +++ b/spec/features/consumer/multilingual_spec.rb @@ -127,11 +127,11 @@ feature 'Multilingual', js: true do find('.language-switcher').click within '.language-switcher .dropdown' do - expect(page).to have_link I18n.t('language_name', locale: :en), href: '?locale=en' + expect(page).to have_link I18n.t('language_name', locale: :en), href: '/locales/en' expect(page).to have_link I18n.t('language_name', locale: :es, default: 'Language Name'), - href: '?locale=es' + href: '/locales/es' - find('li a[href="?locale=es"]').click + find('li a[href="/locales/es"]').click end expect_menu_and_cookie_in_es