diff --git a/config/test.exs b/config/test.exs index fe2b855..864222f 100644 --- a/config/test.exs +++ b/config/test.exs @@ -49,6 +49,9 @@ config :mv, :session_identifier, :unsafe config :mv, :require_token_presence_for_authentication, false +# Use English as default locale in tests so UI tests can assert on English strings. +config :mv, :default_locale, "en" + # Enable SQL Sandbox for async LiveView tests # This flag controls sync vs async behavior in CycleGenerator after_action hooks config :mv, :sql_sandbox, true diff --git a/lib/mv_web/live_user_auth.ex b/lib/mv_web/live_user_auth.ex index b78ba21..c913caa 100644 --- a/lib/mv_web/live_user_auth.ex +++ b/lib/mv_web/live_user_auth.ex @@ -42,9 +42,8 @@ defmodule MvWeb.LiveUserAuth do end def on_mount(:live_no_user, _params, session, socket) do - # Set the locale for not logged in user to set the language in the Log-In Screen - # otherwise the locale is not taken for the Log-In Screen - locale = session["locale"] || "en" + # Set the locale for not logged in user (default from config, "de" in dev/prod). + locale = session["locale"] || Application.get_env(:mv, :default_locale, "de") Gettext.put_locale(MvWeb.Gettext, locale) {:cont, assign(socket, :locale, locale)} diff --git a/lib/mv_web/locale_controller.ex b/lib/mv_web/locale_controller.ex index 99a200f..afa1737 100644 --- a/lib/mv_web/locale_controller.ex +++ b/lib/mv_web/locale_controller.ex @@ -1,10 +1,11 @@ defmodule MvWeb.LocaleController do use MvWeb, :controller - def set_locale(conn, %{"locale" => locale}) do + @supported_locales ["de", "en"] + + def set_locale(conn, %{"locale" => locale}) when locale in @supported_locales do conn |> put_session(:locale, locale) - # Store locale in a cookie that persists beyond the session |> put_resp_cookie("locale", locale, max_age: 365 * 24 * 60 * 60, same_site: "Lax", @@ -14,6 +15,8 @@ defmodule MvWeb.LocaleController do |> redirect(to: get_referer(conn) || "/") end + def set_locale(conn, _params), do: redirect(conn, to: get_referer(conn) || "/") + defp get_referer(conn) do conn.req_headers |> Enum.find(fn {k, _v} -> k == "referer" end)