Locale: default German in dev/prod, English in test; validate locale in LocaleController

This commit is contained in:
Moritz 2026-02-24 15:07:46 +01:00
parent 2cab4b0de4
commit 3a98f70ba5
Signed by: moritz
GPG key ID: 1020A035E5DD0824
3 changed files with 10 additions and 5 deletions

View file

@ -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)}

View file

@ -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)