andrewschmid

andrewschmid

Gettext html in translation

Does anybody have any ideas or experience with using Gettext in a template, and having html embedded within the translated text? I’m currently translating fragments, like below, but this feels wrong and makes it more difficult to translate. Embedding raw html in the translation also seems wrong, since the translator may not even know html.

<p>
  <%= gettext "Already have an account?" %>
  <a href="/login"><%= gettext "Sign in" %></a>
  <%= gettext "to continue" %>
</p>

Marked As Solved

danschultzer

danschultzer

Pow Core Team

Yeah, that’s how you do it.

You can also do the following (this is an example from a production app with translations):

<p>
  <%= gettext("Already have an account? %{sign_in} to continue", sign_in: safe_to_string(link(gettext("Sign in"), to: Routes.session_path(@conn, :new)))) |> raw() %>
</p>

A translator will usually have difficulty when there’s inline HTML, unless it’s very simple. There can also be issues with the open and close tags unless your translation platform verifies that these interpolations are intact and in the right order. I would keep all HTML out of the translations.

Also Liked

Raf

Raf

It took me a long time (and help from a couple of “strangers” online) to figure out how to make this work now that we have the new <.link> component, but I finally got it working, so I’m leaving the working example below:

<%= Phoenix.HTML.raw(
  gettext(
    ~s(Please review our %{terms_of_service_link} and %{privacy_policy_link}...),
    terms_of_service_link: safe_link(%{url: @terms_of_service_url, label: gettext("Terms of Service")}),
    privacy_policy_link: safe_link(%{url: @privacy_policy_url, label: gettext("Privacy Policy")})
  )
) %>

Where safe_link is defined as:

defp safe_link(assigns) do
  Phoenix.HTML.Safe.to_iodata(~H"""
  <.link href={@url} class="font-bold hover:underline" target="_blank">
    <%= @label %>
  </.link>
  """)
end

\o/

sfusato

sfusato

This would work (using interpolation and the raw function):

<p>
  <%= gettext("Already have an account? %{a_start}Sign in%{a_end} to continue", a_start: "<a href='/login'>", a_end: "</a>") |> raw() %>
</p>

or without interpolation with the html tags directly in the text:

<p>
  <%= gettext("Already have an account? <a href='/login'>Sign in</a> to continue") |> raw() %>
</p>

You interpolate the html tags like you would interpolate anything else and then simply pass everything that gettext spits out to raw function. This assumes that the gettext text is safe. Keep that in mind.

Where Next?

Popular in Questions Top

Kurisu
For example for a current url like http://localhost:4000/cosmetic/products?_utf8=✓&amp;query=perfume&amp;page=2, I would like to get: ...
New
qwerescape
Is there a way to get the call stack or stack trace at any point in the code? Not from exceptions, but an expression that returns how the...
New
lessless
I believe there are people here who are dealing with CSV files import on the daily basis, and since Excel is a really popular tool there ...
New
greenz1
I have a phoenix application from which a user can download multiple(5-6) files of size 1MB. I couldn’t find anything related to sending ...
New
mgjohns61585
Could someone help me? I’m making my first elixir program, number guessing game. I can’t figure out how to convert the user’s guess from ...
New
ovidiubadita
Hey all, I discovered Elixir and I love it. I always wanted to learn a functional programming and I intended to go for Haskell, but afte...
New
JulienCorb
I am trying to implement my new.html.eex file to create new posts on my website. new.html.eex: &lt;h1&gt;Create Post&lt;/h1&gt; &lt;%= ...
New
nobody
Hi! In PHP: $_SERVER[‘SERVER_ADDR’] - in Elixir? Searched the docs for ip address and the web, no good results. Thanks!
New
chensan
I have a User schema with a :from_id field set to type :string: defmodule TweetBot.Repo.Migrations.CreateUsers do use Ecto.Migration ...
New
PeterCarter
There are pre-rolled solutions for other frameworks that do work. However, Phoenix does not seem to have these. Have people had good expe...
New

Other popular topics Top

mcarvalho
What is the difference between System.get_env and Application.get_env? For example, what are best practices to use one versus another.
New
AstonJ
Posting this to see if we can make things easier for people to get into Neovim. If you use Neovim and have a favourite distro please let ...
New
minhajuddin
I have seen a lot of code which picks the first element from a list using Enum.at(0) instead of List.first. Is there a reason why people ...
New
belgoros
I’m not a pro in using Regex and can’t figure out why the following behaviour happens, especially if we take into account the difference ...
New
freewebwithme
Using vs code and installed ElixirLS: support and debugger. And I got an error popped up on start up says Failed to run ‘elixir’ comma...
New
romenigld
I am trying to run a deploy with docker and I successfully runned with this command: docker build -t romenigld/blog-prod . but when I t...
New
joaquinalcerro
Hi there, I am working with Ecto-Postgresql and I need to call all of the records from a specific table but the table has 40,000 records...
New
hariharasudhan94
I would like to know what is the best IDE for elixir development?
New
sergio
Kind of like when jquery came out, it was super necessary. Existing drag and drop libraries have a bunch of baggage to support old browse...
New
vonH
In asking this question I am more interested about the expressiveness of the language itself and less concerned about the availability of...
New

We're in Beta

About us Mission Statement