diff --git a/lib/classes/string_manager_standard.php b/lib/classes/string_manager_standard.php index 1a3f36400c8..140ba650925 100644 --- a/lib/classes/string_manager_standard.php +++ b/lib/classes/string_manager_standard.php @@ -533,7 +533,13 @@ class core_string_manager_standard implements core_string_manager { $languages[$langcode] = !empty($this->transaliases[$langcode]) ? $this->transaliases[$langcode] : $langname; } } - return $languages; + + // If there are no valid enabled translations, then return all languages. + if (!empty($languages)) { + return $languages; + } else { + return $cachedlist; + } } // Get all languages available in system. @@ -584,7 +590,12 @@ class core_string_manager_standard implements core_string_manager { } } - return $languages; + // If there are no valid enabled translations, then return all languages. + if (!empty($languages)) { + return $languages; + } else { + return $cachedlist; + } } /** diff --git a/lib/tests/string_manager_standard_test.php b/lib/tests/string_manager_standard_test.php index aa73a0e6a9d..c167707e874 100644 --- a/lib/tests/string_manager_standard_test.php +++ b/lib/tests/string_manager_standard_test.php @@ -140,6 +140,13 @@ class core_string_manager_standard_testcase extends advanced_testcase { $this->assertEquals(['en' => 'En'], $stringman->get_list_of_translations()); + // Set invalid config, ensure original list is returned. + set_config('langlist', 'xx'); + $this->assertEquals(['en' => 'English ‎(en)‎'], get_string_manager(true)->get_list_of_translations()); + + set_config('langlist', 'xx,en|En'); + $this->assertEquals(['en' => 'En'], get_string_manager(true)->get_list_of_translations()); + set_config('langlist', ''); get_string_manager(true); }