diff --git a/app/components/layout/locale_switcher_component.rb b/app/components/layout/locale_switcher_component.rb index 4e7408adf..79433a13e 100644 --- a/app/components/layout/locale_switcher_component.rb +++ b/app/components/layout/locale_switcher_component.rb @@ -1,5 +1,5 @@ class Layout::LocaleSwitcherComponent < ApplicationComponent - delegate :name_for_locale, :link_list, :current_path_with_query_params, to: :helpers + delegate :name_for_locale, :link_list, :current_path_with_query_params, :rtl?, to: :helpers def render? locales.size > 1 @@ -29,7 +29,8 @@ class Layout::LocaleSwitcherComponent < ApplicationComponent name_for_locale(locale), current_path_with_query_params(locale: locale), locale == I18n.locale, - lang: locale + lang: locale, + data: { turbolinks: rtl?(I18n.locale) == rtl?(locale) } ] end end diff --git a/app/helpers/application_helper.rb b/app/helpers/application_helper.rb index 0b9fb23f4..e1c35eee5 100644 --- a/app/helpers/application_helper.rb +++ b/app/helpers/application_helper.rb @@ -6,8 +6,8 @@ module ApplicationHelper url_for(request.query_parameters.merge(query_parameters).merge(only_path: true)) end - def rtl? - %i[ar fa he].include?(I18n.locale) + def rtl?(locale = I18n.locale) + %i[ar fa he].include?(locale) end def markdown(text) diff --git a/spec/components/layout/locale_switcher_component_spec.rb b/spec/components/layout/locale_switcher_component_spec.rb index 0edb9e968..1063ede2f 100644 --- a/spec/components/layout/locale_switcher_component_spec.rb +++ b/spec/components/layout/locale_switcher_component_spec.rb @@ -74,4 +74,27 @@ describe Layout::LocaleSwitcherComponent do expect(page).to have_css "[aria-current]", exact_text: "English" end end + + context "when the target language has a different text direction than the current language" do + let!(:default_locales) { I18n.available_locales } + + before do + I18n.available_locales = %i[ar en] + I18n.reload! + end + + after do + I18n.available_locales = default_locales + I18n.reload! + end + + it "disables Turbolinks for language links" do + render_inline component + + expect(page).to have_link "عربى", href: "/?locale=ar" + expect(page).to have_css "[href='/?locale=ar'][data-turbolinks=false]" + expect(page).to have_link "English", href: "/?locale=en" + expect(page).to have_css "[href='/?locale=en'][data-turbolinks=true]" + end + end end