View Source Cldr.Plug.PutSession (Cldr Plug v1.2.0)

Puts the CLDR locale 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.



  • :as is an options that determines the format in which the locale is saved in the session. That valid settings for this options are:
    • :string in which the current locale is converted to a string before storing in the session. It will then be parsed back into a %Cldr.LanguageTag{} upon reading it from the session. This option has the benefit that it will minimise space used in the session at the expense of the CPU time required to serialized and parse. The average size of commonly used locales is under 10 bytes and often less than 5.

    • :language_tag in which the current locale is stored in the session in its native %Cldr.LanguageTag{} format. This has the benefit of minimizing CPU time serialising and parsing the locale at the expense of a larger payment size in the session. The average size of a language tag struct, when serialized, is around 500 bytes.

The default is as: :string.



# 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.PutLocale,
        apps: [:cldr, :gettext],
        from: [:path, :query],
        gettext: MyApp.Gettext,
        cldr: MyApp.Cldr
    plug Cldr.Plug.PutSession, as: :string
    plug :fetch_flash
    plug :protect_from_forgery
    plug :put_secure_browser_headers