commit: 8517bc18aa0bb9d80b7601ac63573838e3252b21
parent a5d7e98de0ed7989d80e4698155676488afbb423
Author: Haelwenn <contact+git.pleroma.social@hacktivis.me>
Date: Mon, 18 Apr 2022 03:31:44 +0000
Merge branch 'from/upstream-develop/tusooa/fix-en-fallback' into 'develop'
Fix incorrect fallback when English is set to first language
See merge request pleroma/pleroma!3656
Diffstat:
2 files changed, 28 insertions(+), 2 deletions(-)
diff --git 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
@@ -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" ==