romaluca
Gettext and liveview
Hi,
I have a web app with default locale: it
I created a liveviewmodule like this:
defmodule ShuttertopWeb.UserFollowLive do
use ShuttertopWeb, :live_view
def render(assigns) do
Logger.info("------ #{inspect(Gettext.get_locale(ShuttertopWeb.Gettext))}")
~L"""
<button phx-click="follow" class="<%= if @active, do: "actived" %>">
<%= if(@active, do: gettext("seguendo"), else: gettext("segui")) %>
</button>
"""
end
def mount(_params, %{"user_id" => user_id, "current_user_id" => current_user_id, "active" => active}, socket) do
socket =
socket
|> assign(%{
active: active,
current_user_id: current_user_id,
user_id: user_id,
})
{:ok, socket, layout: false}
end
....
end
If i launch my site using an user with locale: en, the page html is render correctly in english but in few milliseconds the button text changes and become italian text.
This is the log that i put in render method:
info] ------ "en"
[info] Sent 200 in 22ms
[info] CONNECTED TO Phoenix.LiveView.Socket in 249µs
Transport: :websocket
Serializer: Phoenix.Socket.V2.JSONSerializer
Parameters: %{"_csrf_token" => "QTUALCk4NAhdFQgCWVgtLhFrD2EaJQZj-jpOAALj6dDjoahiA4W1Bjl3", "_mounts" => "0", "vsn" => "2.0.0"}
[info] ------ "it"
How can i do to maintain the locale en?
Thanks
Marked As Solved
josevalim
There is also a quick guide on the docs showing how to do that: https://hexdocs.pm/phoenix_live_view/using-gettext.html#content
Also Liked
LostKobrakai
Just like you likely do in your plug pipeline you’ll need to set the locale for your liveview process as well. Because the first static render of your liveview does happen in the same process as your plug pipeline the locale is retained for the static render. That’s not the case though for any render happening later when the liveview js connects.







