diff --git a/assets/javascripts/discourse/components/language-switcher.gjs b/assets/javascripts/discourse/components/language-switcher.gjs index 54e0d84d..f4aedc8d 100644 --- a/assets/javascripts/discourse/components/language-switcher.gjs +++ b/assets/javascripts/discourse/components/language-switcher.gjs @@ -28,7 +28,7 @@ export default class LanguageSwitcher extends Component { @action async changeLocale(locale) { - cookie("locale", locale); + cookie("locale", locale, { path: "/" }); this.dMenu.close(); // we need a hard refresh here for the locale to take effect window.location.reload(); diff --git a/spec/system/anon_language_switcher_spec.rb b/spec/system/anon_language_switcher_spec.rb index bbdfba3d..c2d1c0ff 100644 --- a/spec/system/anon_language_switcher_spec.rb +++ b/spec/system/anon_language_switcher_spec.rb @@ -1,39 +1,84 @@ # frozen_string_literal: true RSpec.describe "Anonymous user language switcher", type: :system do - fab!(:japanese_user) { Fabricate(:user, locale: "ja") } + SWITCHER_SELECTOR = "button[data-identifier='discourse-translator_language-switcher']" - it "shows the correct language based on the selected language and login status" do - SWITCHER_SELECTOR = "button[data-identifier='discourse-translator_language-switcher']" + let(:topic_page) { PageObjects::Pages::Topic.new } + let(:switcher) { PageObjects::Components::DMenu.new(SWITCHER_SELECTOR) } - visit("/") - expect(page).not_to have_css(SWITCHER_SELECTOR) + fab!(:japanese_user) { Fabricate(:user, locale: "ja") } + fab!(:topic) do + topic = Fabricate(:topic, title: "Life strategies from The Art of War") + Fabricate(:post, topic:) + topic + end + before do SiteSetting.translator_enabled = true SiteSetting.allow_user_locale = true SiteSetting.set_locale_from_cookie = true SiteSetting.automatic_translation_backfill_rate = 1 + end + + it "only shows the language switcher based on what is in target languages" do SiteSetting.automatic_translation_target_languages = "es|ja" SiteSetting.experimental_anon_language_switcher = true visit("/") + expect(page).to have_css(SWITCHER_SELECTOR) - expect(find(".nav-item_latest")).to have_content("Latest") - switcher = PageObjects::Components::DMenu.new(SWITCHER_SELECTOR) switcher.expand expect(switcher).to have_content("日本語") + expect(switcher).to have_content("Español") SiteSetting.automatic_translation_target_languages = "es" - SiteSetting.experimental_anon_language_switcher = true visit("/") switcher.expand expect(switcher).not_to have_content("日本語") - switcher.click_button("Español") - expect(find(".nav-item_latest")).to have_content("Recientes") + end - sign_in(japanese_user) - visit("/") - expect(find(".nav-item_latest")).to have_content("最新") + describe "with Spanish and Japanese" do + before do + SiteSetting.automatic_translation_target_languages = "es|ja" + SiteSetting.experimental_anon_language_switcher = true + SiteSetting.experimental_inline_translation = true + + topic.set_detected_locale("en") + topic.set_translation("ja", "孫子兵法からの人生戦略") + topic.set_translation("es", "Estrategias de vida de El arte de la guerra") + end + + it "shows the correct language based on the selected language and login status" do + visit("/") + expect(find(".nav-item_latest")).to have_content("Latest") + + switcher.expand + switcher.click_button("Español") + expect(find(".nav-item_latest")).to have_content("Recientes") + + sign_in(japanese_user) + visit("/") + expect(find(".nav-item_latest")).to have_content("最新") + end + + it "shows the most recently selected language" do + visit("/") + + switcher.expand + switcher.click_button("Español") + expect(find(".nav-item_latest")).to have_content("Recientes") + + topic_page.visit_topic(topic) + topic_page.has_topic_title?("Estrategias de vida de El arte de la guerra") + + switcher.expand + switcher.click_button("日本語") + topic_page.visit_topic(topic) + topic_page.has_topic_title?("孫子兵法からの人生戦略") + + visit("/") + expect(find(".nav-item_latest")).to have_content("最新") + end end end