vfsoraki
Gettext with html replacement
I’m searching for a way to have html in my translations. I’m using Gettext in Phoenix, and I’m translating ids , like the following example:
<%= gettext("score.current", score: @score) %>
Where score.current is translated in different languages, like in English: Your score is %{score} points.
Now I want the translated text to look like You score is <b>%{score}</b> points. What is a nice way of doing it. My own thoughts:
-
Explode translation into fragments:
<%= gettext("score.current") %><b><%= @score %></b><%= gettext("points") %> -
Inject score as html into translation:
<%= gettext("score.current", score: make_bold(@score)) %>
Please don’t tell me that I can remove points from end of sentence, this is just an example.
Thanks in advance!
PS. This thread is seeking the same thing as me, but he is using the sentence itself as message id. I don’t event know what is best practice. Should I switch to full sentence as translation id?
Marked As Solved
egze
I suggest you try to keep html out of translations.
How about something like this:
<%= gettext("score.current", score_html: "<b>#{score}</b>") %>
The GetText key would be: You score is %{score_html} points.
Maybe you’ll need to combine it with HTML.raw.
Also Liked
NobbZ
Have you tried using Phoenix.HTML.raw/1?
hauleth
BTW Gettext approach is that the text to be matched is the in English that should be shown, so in this case it should be:
<%= raw gettext("Your score is <b>%{score}</b> points", score: @score) %>
egze
score is like <b>10</b>
- You are more flexible to change markup as you wish.
- Translators are not going to be confused by HTML.








