feat: set users locale

This commit is contained in:
carla 2025-08-14 16:22:36 +02:00
parent 992addf0ea
commit f0b0de0008
4 changed files with 46 additions and 6 deletions

View file

@ -12,7 +12,6 @@ module.exports = {
"../lib/mv_web.ex",
"../lib/mv_web/**/*.*ex"
],
safelist: ['h-screen', 'px-6', 'h-screen', 'place-items-center', 'px-20', 'px-24'], // Classes that are used by AshAuthentication Sign-In Page are otherwise purged
theme: {
extend: {
colors: {

View file

@ -17,7 +17,7 @@ defmodule MvWeb.AuthOverrides do
# Avoid full-width for the Sign In Form
override AshAuthentication.Phoenix.Components.SignIn do
set :root_class, "min-w-md"
set :root_class, "md:min-w-md"
end
# Replace banner logo with text

View file

@ -36,9 +36,11 @@ defmodule MvWeb.LiveUserAuth do
end
end
def on_mount(:live_no_user, _params, _session, socket) do
Gettext.put_locale(MvWeb.Gettext, "de")
{:cont, assign(socket, :locale, "de")}
def on_mount(:live_no_user, _params, session, socket) do
# Set the locale for not logged in user to set the language
locale = session["locale"] || "en"
Gettext.put_locale(MvWeb.Gettext, locale)
{:cont, assign(socket, :locale, locale)}
if socket.assigns[:current_user] do
{:halt, Phoenix.LiveView.redirect(socket, to: ~p"/")}

View file

@ -139,8 +139,47 @@ defmodule MvWeb.Router do
end
defp set_locale(conn, _opts) do
locale = get_session(conn, :locale) || "de"
locale =
get_session(conn, :locale) ||
extract_locale_from_headers(conn.req_headers)
Gettext.put_locale(MvWeb.Gettext, locale)
conn
|> put_session(:locale, locale)
|> assign(:locale, locale)
end
# Get locale from user
defp extract_locale_from_headers(headers) do
headers
|> Enum.find_value(fn
{"accept-language", value} -> value
_ -> nil
end)
|> parse_accept_language()
|> Enum.find(&supported_locale?/1)
|> fallback_locale()
end
defp parse_accept_language(nil), do: []
defp parse_accept_language(header) do
header
|> String.split(",")
|> Enum.map(&String.trim/1)
|> Enum.map(fn lang ->
lang
# we only want the first part
|> String.split(";")
|> hd()
|> String.split("-")
|> hd()
end)
end
# Our supported languages for now are german and english, english as fallback language
defp supported_locale?(locale), do: locale in ["en", "de"]
defp fallback_locale(nil), do: "en"
defp fallback_locale(locale), do: locale
end