Use browser Accept-Language for login and onboarding locale (#768)

* Use Accept-Language for unauthenticated locale

* Add per-user locale overrides

* Fix test

* Use more than the top `accept-language` entry

* Localization of string
This commit is contained in:
Juan José Mata
2026-01-24 22:00:41 +01:00
committed by GitHub
parent 959029fda6
commit c7ab25b866
21 changed files with 163 additions and 17 deletions

View File

@@ -1,23 +1,55 @@
require "test_helper"
class LocalizeTest < ActionDispatch::IntegrationTest
setup do
sign_in users(:family_admin)
test "uses Accept-Language top locale on login when supported" do
get new_session_url, headers: { "Accept-Language" => "fr-CA,fr;q=0.9" }
assert_response :success
assert_select "button", text: /Se connecter/i
end
test "uses family locale by default" do
get preferences_onboarding_url
test "falls back to English when Accept-Language is unsupported" do
get new_session_url, headers: { "Accept-Language" => "ru-RU,ru;q=0.9" }
assert_response :success
assert_select "button", text: /Log in/i
end
test "uses Accept-Language for onboarding when user locale is not set" do
sign_in users(:family_admin)
get preferences_onboarding_url, headers: { "Accept-Language" => "es-ES,es;q=0.9" }
assert_response :success
assert_select "h1", text: /Configura tus preferencias/i
end
test "falls back to family locale when Accept-Language is unsupported" do
sign_in users(:family_admin)
get preferences_onboarding_url, headers: { "Accept-Language" => "ru-RU,ru;q=0.9" }
assert_response :success
assert_select "h1", text: /Configure your preferences/i
end
test "respects user locale override even when Accept-Language differs" do
user = users(:family_admin)
user.update!(locale: "fr")
sign_in user
get preferences_onboarding_url, headers: { "Accept-Language" => "es-ES,es;q=0.9" }
assert_response :success
assert_select "h1", text: /Configurez vos préférences/i
end
test "switches locale when locale param is provided" do
sign_in users(:family_admin)
get preferences_onboarding_url(locale: "fr")
assert_response :success
assert_select "h1", text: /Configurez vos préférences/i
end
test "ignores invalid locale param and uses family locale" do
sign_in users(:family_admin)
get preferences_onboarding_url(locale: "invalid_locale")
assert_response :success
assert_select "h1", text: /Configure your preferences/i