# Pleroma: A lightweight social networking server # Copyright © 2017-2023 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Web.GettextTest do use ExUnit.Case require Pleroma.Web.Gettext test "put_locales/1: set the first in the list to Gettext's locale" do Pleroma.Web.Gettext.put_locales(["zh_Hans", "en_test"]) assert "zh_Hans" == Gettext.get_locale(Pleroma.Web.Gettext) end test "with_locales/2: reset locale on exit" do old_first_locale = Gettext.get_locale(Pleroma.Web.Gettext) old_locales = Pleroma.Web.Gettext.get_locales() Pleroma.Web.Gettext.with_locales ["zh_Hans", "en_test"] do assert "zh_Hans" == Gettext.get_locale(Pleroma.Web.Gettext) assert ["zh_Hans", "en_test"] == Pleroma.Web.Gettext.get_locales() end assert old_first_locale == Gettext.get_locale(Pleroma.Web.Gettext) assert old_locales == Pleroma.Web.Gettext.get_locales() end describe "handle_missing_translation/5" do test "fallback to next locale if some translation is not available" do Pleroma.Web.Gettext.with_locales ["x_unsupported", "en_test"] do assert "xxYour account is awaiting approvalxx" == Pleroma.Web.Gettext.dpgettext( "static_pages", "approval pending email subject", "Your account is awaiting approval" ) 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" == Pleroma.Web.Gettext.dpgettext( "static_pages", "approval pending email subject", "Your account is awaiting approval" ) end end test "direct interpolation" do Pleroma.Web.Gettext.with_locales ["en_test"] do assert "xxYour digest from some instancexx" == Pleroma.Web.Gettext.dpgettext( "static_pages", "digest email subject", "Your digest from %{instance_name}", instance_name: "some instance" ) end end test "fallback with interpolation" do Pleroma.Web.Gettext.with_locales ["x_unsupported", "en_test"] do assert "xxYour digest from some instancexx" == Pleroma.Web.Gettext.dpgettext( "static_pages", "digest email subject", "Your digest from %{instance_name}", instance_name: "some instance" ) end end test "fallback to msgid" do Pleroma.Web.Gettext.with_locales ["x_unsupported"] do assert "Your digest from some instance" == Pleroma.Web.Gettext.dpgettext( "static_pages", "digest email subject", "Your digest from %{instance_name}", instance_name: "some instance" ) end end end describe "handle_missing_plural_translation/7" do test "direct interpolation" do Pleroma.Web.Gettext.with_locales ["en_test"] do assert "xx1 New Followerxx" == Pleroma.Web.Gettext.dpngettext( "static_pages", "new followers count header", "%{count} New Follower", "%{count} New Followers", 1, count: 1 ) assert "xx5 New Followersxx" == Pleroma.Web.Gettext.dpngettext( "static_pages", "new followers count header", "%{count} New Follower", "%{count} New Followers", 5, count: 5 ) end end test "fallback with interpolation" do Pleroma.Web.Gettext.with_locales ["x_unsupported", "en_test"] do assert "xx1 New Followerxx" == Pleroma.Web.Gettext.dpngettext( "static_pages", "new followers count header", "%{count} New Follower", "%{count} New Followers", 1, count: 1 ) assert "xx5 New Followersxx" == Pleroma.Web.Gettext.dpngettext( "static_pages", "new followers count header", "%{count} New Follower", "%{count} New Followers", 5, count: 5 ) end end test "fallback to msgid" do Pleroma.Web.Gettext.with_locales ["x_unsupported"] do assert "1 New Follower" == Pleroma.Web.Gettext.dpngettext( "static_pages", "new followers count header", "%{count} New Follower", "%{count} New Followers", 1, count: 1 ) assert "5 New Followers" == Pleroma.Web.Gettext.dpngettext( "static_pages", "new followers count header", "%{count} New Follower", "%{count} New Followers", 5, count: 5 ) end end end end