if Code.ensure_loaded?(Plug) do defmodule Cldr.Plug.SetSession do @moduledoc false @deprecated "Please use Cldr.Plug.PutSession" defdelegate init(options), to: Cldr.Plug.PutSession defdelegate call(conn, options), to: Cldr.Plug.PutSession end defmodule Cldr.Plug.PutSession do @moduledoc """ Puts the CLDR locale name in the session. The session key is fixed to be `cldr_locale` in order that downstream functions like those in `liveview` don't have to be passed options. ## Examples # Define a router module that # sets the locale for the current process # and then also sets it in the session defmodule MyAppWeb.Router do use MyAppWeb, :router pipeline :browser do plug :accepts, ["html"] plug :fetch_session plug Cldr.Plug.SetLocale, apps: [:cldr, :gettext], from: [:path, :query], gettext: MyApp.Gettext, cldr: MyApp.Cldr plug Cldr.Plug.PutSession plug :fetch_flash plug :protect_from_forgery plug :put_secure_browser_headers end end """ import Plug.Conn alias Cldr.Plug.SetLocale @doc false def init(_options) do [] end @doc false def call(conn, _options) do case SetLocale.get_cldr_locale(conn) do %Cldr.LanguageTag{cldr_locale_name: cldr_locale} -> conn |> fetch_session() |> put_session(SetLocale.session_key(), cldr_locale) _other -> conn end end end end