diff options
author | Tusooa Zhu <tusooa@kazv.moe> | 2022-02-21 17:54:18 -0500 |
---|---|---|
committer | Tusooa Zhu <tusooa@kazv.moe> | 2022-02-21 18:02:19 -0500 |
commit | 0fd3695b9c884cbc05f07c45249eb0e291cf6d1d (patch) | |
tree | 96e3d54250ca53587745448416c1b808a2791ffd /lib | |
parent | d91e9cee04f2e4cb809037e4fcfebc295994b563 (diff) | |
download | pleroma-0fd3695b9c884cbc05f07c45249eb0e291cf6d1d.tar.gz pleroma-0fd3695b9c884cbc05f07c45249eb0e291cf6d1d.zip |
Prefer userLanguage cookie over Accept-Language header in detecting locale
https://git.pleroma.social/pleroma/pleroma-meta/-/issues/60
Diffstat (limited to 'lib')
-rw-r--r-- | lib/pleroma/web/plugs/set_locale_plug.ex | 29 |
1 files changed, 28 insertions, 1 deletions
diff --git a/lib/pleroma/web/plugs/set_locale_plug.ex b/lib/pleroma/web/plugs/set_locale_plug.ex index d77191cff..446baf24b 100644 --- a/lib/pleroma/web/plugs/set_locale_plug.ex +++ b/lib/pleroma/web/plugs/set_locale_plug.ex @@ -6,6 +6,8 @@ defmodule Pleroma.Web.Plugs.SetLocalePlug do import Plug.Conn, only: [get_req_header: 2, assign: 3] + def frontend_language_cookie_name(), do: "userLanguage" + def init(_), do: nil def call(conn, _) do @@ -16,10 +18,35 @@ defmodule Pleroma.Web.Plugs.SetLocalePlug do defp get_locale_from_header(conn) do conn - |> extract_accept_language() + |> extract_preferred_language() + |> normalize_language_codes() |> Enum.find(&supported_locale?/1) end + defp normalize_language_codes(codes) do + codes + |> Enum.map(fn code -> String.replace(code, "-", "_") end) + end + + defp extract_preferred_language(conn) do + extract_frontend_language(conn) ++ extract_accept_language(conn) + end + + defp extract_frontend_language(conn) do + %{req_cookies: cookies} = + conn + |> Plug.Conn.fetch_cookies() + + case cookies[frontend_language_cookie_name()] do + nil -> + [] + + fe_lang -> + [fe_lang] + |> ensure_language_fallbacks() + end + end + defp extract_accept_language(conn) do case get_req_header(conn, "accept-language") do [value | _] -> |