diff options
author | Tusooa Zhu <tusooa@kazv.moe> | 2022-04-17 22:39:52 -0400 |
---|---|---|
committer | Tusooa Zhu <tusooa@kazv.moe> | 2022-04-17 22:39:52 -0400 |
commit | be08d9305b1dba9d146a1a1482e6728efb113285 (patch) | |
tree | c1263b8451d1900b9889ca995c3a4d0430288b6a | |
parent | a5d7e98de0ed7989d80e4698155676488afbb423 (diff) | |
download | pleroma-be08d9305b1dba9d146a1a1482e6728efb113285.tar.gz |
Fix incorrect fallback when English is set to first language
-rw-r--r-- | lib/pleroma/web/gettext.ex | 19 | ||||
-rw-r--r-- | test/pleroma/web/gettext_test.exs | 11 |
2 files changed, 28 insertions, 2 deletions
diff --git a/lib/pleroma/web/gettext.ex b/lib/pleroma/web/gettext.ex index d5ec13b66..5ef49d841 100644 --- a/lib/pleroma/web/gettext.ex +++ b/lib/pleroma/web/gettext.ex @@ -161,10 +161,25 @@ defmodule Pleroma.Web.Gettext do end end + # We do not yet have a proper English translation. The "English" + # version is currently but the fallback msgid. However, this + # will not work if the user puts English as the first language, + # and at the same time specifies other languages, as gettext will + # think the English translation is missing, and call + # handle_missing_translation functions. This may result in + # text in other languages being shown even if English is preferred + # by the user. + # + # To prevent this, we do not allow fallbacking when the current + # locale missing a translation is English. + defp should_fallback?(locale) do + locale != "en" + end + def handle_missing_translation(locale, domain, msgctxt, msgid, bindings) do next = next_locale(locale, get_locales()) - if is_nil(next) do + if is_nil(next) or not should_fallback?(locale) do super(locale, domain, msgctxt, msgid, bindings) else {:ok, @@ -185,7 +200,7 @@ defmodule Pleroma.Web.Gettext do ) do next = next_locale(locale, get_locales()) - if is_nil(next) do + if is_nil(next) or not should_fallback?(locale) do super(locale, domain, msgctxt, msgid, msgid_plural, n, bindings) else {:ok, diff --git a/test/pleroma/web/gettext_test.exs b/test/pleroma/web/gettext_test.exs index 9ede4827e..e186f1ab3 100644 --- a/test/pleroma/web/gettext_test.exs +++ b/test/pleroma/web/gettext_test.exs @@ -38,6 +38,17 @@ defmodule Pleroma.Web.GettextTest do end end + test "putting en locale at the front should not make gettext fallback unexpectedly" do + Pleroma.Web.Gettext.with_locales ["en", "en_test"] do + assert "Your account is awaiting approval" == + Pleroma.Web.Gettext.dpgettext( + "static_pages", + "approval pending email subject", + "Your account is awaiting approval" + ) + end + end + test "duplicated locale in list should not result in infinite loops" do Pleroma.Web.Gettext.with_locales ["x_unsupported", "x_unsupported", "en_test"] do assert "xxYour account is awaiting approvalxx" == |