I have a LiveView that has localized content using gettext
, upon first rendering the text appears in the correct language. I have a couple of .link
s that patch
the locale using handle_params/3
. Sadly this doesn’t work, LV does not rerender the localised text.
def handle_params(%{"locale" => locale}, _uri, socket) when locale in @locales do
Gettext.put_locale(locale)
IO.inspect(Gettext.get_locale(), label: "locale")
{:noreply,
socket
|> assign(locale: locale)}
end
The IO.inspect
shows the changed language, I even assign it to the socket.
And this is my render/1
@impl true
def render(assigns) do
~H"""
<article class="mx-auto max-w-lg">
<section class="conditions bg-white shadow-md rounded leading-relaxed px-6 text-sm mb-6 py-2">
<p class="my-1">
<%= Gettext.with_locale(@locale, fn ->
gettext("You have successfully connected to the internet!")
end) %>
</p>
<p class="mb-1">
<%= gettext("Your session started on") %> <%= format_datetime(@session.started, @hotspot) %>,<br />
<%= gettext("and will end on") %> <%= format_datetime(@session.ends, @hotspot) %>.
</p>
</section>
</article>
"""
end
The first text will be translated, the 2 others remain the same.
I tried with putting the with_locale/2
around the whole content, but then nothing changes.
I know I can change the patch
to navigate
, but as the links are in the layout the other params
get lost.
What am I missing?
ELixir 1.17.0-rc-1 / Erlang 27.0 / phoenix_live_view 0.20.14