feat: set users locale
This commit is contained in:
parent
992addf0ea
commit
f0b0de0008
4 changed files with 46 additions and 6 deletions
|
|
@ -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: {
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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"/")}
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue