From 5f9ce0dcf9d9ba3086a6315c111a0df3c5cf4932 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jos=C3=A9=20Benavente?= Date: Tue, 19 Mar 2024 15:13:06 -0300 Subject: [PATCH] Allow guest users to select their locale This commit makes it so that guest users can select their locale from the locale selector as if they were logged in. Moreover, guest users' locale on the site will now be automatically determined based on their browser settings in case they haven't selected one themselves. --- app/controllers/application_controller.rb | 19 ++++++++++++++----- app/views/application/_locale_selector.haml | 13 +++++++++++++ app/views/application/_nav.haml | 12 ++---------- 3 files changed, 29 insertions(+), 15 deletions(-) create mode 100644 app/views/application/_locale_selector.haml diff --git a/app/controllers/application_controller.rb b/app/controllers/application_controller.rb index ef6981ab..09089398 100644 --- a/app/controllers/application_controller.rb +++ b/app/controllers/application_controller.rb @@ -6,11 +6,20 @@ class ApplicationController < ActionController::Base before_action :build_navigation def set_locale - I18n.locale = if user_signed_in? - current_user.locale - else - I18n.default_locale - end + if user_signed_in? + I18n.locale = current_user.locale + else + I18n.locale = params[:locale] || locale_from_header || I18n.default_locale + end + end + + def default_url_options + { :locale => I18n.locale } + end + + # Detect Browser's locale and use that by default + def locale_from_header + request.env.fetch('HTTP_ACCEPT_LANGUAGE', '').scan(/[a-z]{2}/).first end def build_navigation diff --git a/app/views/application/_locale_selector.haml b/app/views/application/_locale_selector.haml new file mode 100644 index 00000000..12cb3fc0 --- /dev/null +++ b/app/views/application/_locale_selector.haml @@ -0,0 +1,13 @@ +%li.dropdown + %a.nav-link.dropdown-toggle{:href => "", :"data-toggle" => "dropdown", :"aria-haspopup" => true, :"aria-expanded" => false} + = image_tag "i18n/#{I18n.locale}.png", :class => "locale-flag" + %ul.dropdown-menu.dropdown-menu-right{:"aria-labelledby" => "dropdown02"} + - I18n.available_locales.each do |l| + - if user_signed_in? + %a.dropdown-item{:"data-turbo" => "true", :"data-turbo-method" => "put", :href => users_locale_path(:locale => l)} + = image_tag "i18n/#{l}.png", :class => "locale-flag" + = SYS::LOCALES_MAP.key(l) + - else + %a.dropdown-item{:href => "?locale=#{l}"} + = image_tag "i18n/#{l}.png", :class => "locale-flag" + = SYS::LOCALES_MAP.key(l) diff --git a/app/views/application/_nav.haml b/app/views/application/_nav.haml index add7c4d1..97b81f55 100644 --- a/app/views/application/_nav.haml +++ b/app/views/application/_nav.haml @@ -1,6 +1,6 @@ %nav.navbar.navbar-expand-md.navbar-dark.navbar-default.bg-obscure %div.container - %a.navbar-brand{:href => "/"} + %a.navbar-brand{:href => root_path} = image_tag "rva-logo-dark.png", :height => "45", :width => "45", :style => "border-radius: 50px;" %button.navbar-toggler{:type => "button", :"data-toggle" => "collapse", :"data-target" => "#main-navbar", :"aria-controls" => "main-navbar", :"aria-expanded" => "false", :"aria-label" => "Toggle navigation"} @@ -47,15 +47,7 @@ = t('nav.downloads') %li.nav-item %ul.navbar-nav - - if user_signed_in? - %li.dropdown - %a.nav-link.dropdown-toggle{:href => "", :"data-toggle" => "dropdown", :"aria-haspopup" => true, :"aria-expanded" => false} - = image_tag "i18n/#{I18n.locale}.png", :class => "locale-flag" - %ul.dropdown-menu.dropdown-menu-right{:"aria-labelledby" => "dropdown02"} - - I18n.available_locales.each do |l| - %a.dropdown-item{:"data-turbo" => "true", :"data-turbo-method" => "put", :href => users_locale_path(:locale => l)} - = image_tag "i18n/#{l}.png", :class => "locale-flag" - = SYS::LOCALES_MAP.key(l) + = render :partial => 'locale_selector' %li.dropdown %a.nav-link.dropdown-toggle{:id => "access-toggle", :"data-toggle" => "dropdown", :href => "#"}