Hello! I stuck with
** (Plug.Conn.AlreadySentError) the response was already sent
error, when I add localization to my phoenix application.
When I go to localhost:4000, I have redirected to localhost:4000/en, through my locale plug which gets locale from URL or session or header. And before that, I have an “the response was already sent” error.
Here’s my router.ex:
defmodule ProjectWeb.Router do
use ProjectWeb, :router
import ProjectWeb.UserAuth
pipeline :browser do
plug :accepts, ["html"]
plug :fetch_session
plug :fetch_live_flash
plug :put_root_layout, {ProjectWeb.LayoutView, :root}
plug :protect_from_forgery
plug :put_secure_browser_headers
plug :fetch_current_user
plug ProjectWeb.Plugs.Locale
end
live_session :default, on_mount: ProjectWeb.InitAssigns do
scope "/", ProjectWeb do
pipe_through [:browser]
Enum.each(["/:locale", "/"], fn prefix ->
get prefix <> "/", PageController, :index
end)
end
end
end
And here’s my init_assigns.ex:
defmodule ProjectWeb.InitAssigns do
import Phoenix.LiveView
def on_mount(:default, _params, session, socket) do
Gettext.put_locale(Map.get(session, "locale"))
{:cont, socket}
end
end
Terminal output:
[info] GET /
[debug] Processing with ProjectWeb.PageController.index/2
...
[error] #PID<0.719.0> running ProjectWeb.Endpoint (connection #PID<0.718.0>, stream id 1) terminated
Server: localhost:4000 (http)
Request: GET /
** (exit) an exception was raised:
** (Plug.Conn.AlreadySentError) the response was already sent
...
[info] GET /en
[debug] Processing with ProjectWeb.PageController.index/2
Parameters: %{"locale" => "en"}
Pipelines: [:browser]
I hope I have described the problem clearly. Thanks in advance!