mirror of
https://github.com/moodle/moodle.git
synced 2025-08-05 08:56:36 +02:00
Merge branch 'MDL-69788-310' of https://github.com/paulholden/moodle into MOODLE_310_STABLE
This commit is contained in:
commit
7e0bcbfb19
5 changed files with 85 additions and 2 deletions
34
admin/tests/behat/language_settings.feature
Normal file
34
admin/tests/behat/language_settings.feature
Normal file
|
@ -0,0 +1,34 @@
|
||||||
|
@core @core_admin
|
||||||
|
Feature: Configure language settings for the site
|
||||||
|
In order to configure language settings for the site
|
||||||
|
As an admin
|
||||||
|
I want to set language settings relevant to my site users
|
||||||
|
|
||||||
|
Scenario: Set languages on language menu
|
||||||
|
Given I log in as "admin"
|
||||||
|
And I navigate to "Language > Language settings" in site administration
|
||||||
|
When I set the field "Languages on language menu" to "en"
|
||||||
|
And I press "Save changes"
|
||||||
|
Then I should not see "Invalid language code"
|
||||||
|
|
||||||
|
Scenario: Reset languages on language menu
|
||||||
|
Given I log in as "admin"
|
||||||
|
And I navigate to "Language > Language settings" in site administration
|
||||||
|
When I set the field "Languages on language menu" to ""
|
||||||
|
And I press "Save changes"
|
||||||
|
Then I should not see "Invalid language code"
|
||||||
|
|
||||||
|
Scenario Outline: Set languages on language menu with invalid language
|
||||||
|
Given I log in as "admin"
|
||||||
|
And I navigate to "Language > Language settings" in site administration
|
||||||
|
When I set the field "Languages on language menu" to "<fieldvalue>"
|
||||||
|
And I press "Save changes"
|
||||||
|
Then I should see "Invalid language code: <invalidlang>"
|
||||||
|
Examples:
|
||||||
|
| fieldvalue | invalidlang |
|
||||||
|
| xx | xx |
|
||||||
|
| xx\|Bad | xx |
|
||||||
|
| en,qq | qq |
|
||||||
|
| en,qq\|Bad | qq |
|
||||||
|
| en$$ | en$$ |
|
||||||
|
| en$$\|Bad | en$$ |
|
|
@ -341,6 +341,7 @@ $string['invalidgroupid'] = 'Incorrect group ID specified';
|
||||||
$string['invalidipformat'] = 'Invalid IP address format';
|
$string['invalidipformat'] = 'Invalid IP address format';
|
||||||
$string['invaliditemid'] = 'Incorrect item ID';
|
$string['invaliditemid'] = 'Incorrect item ID';
|
||||||
$string['invalidkey'] = 'Incorrect key';
|
$string['invalidkey'] = 'Incorrect key';
|
||||||
|
$string['invalidlanguagecode'] = 'Invalid language code: {$a}';
|
||||||
$string['invalidlegacy'] = 'Incorrect legacy role definition for type: {$a}';
|
$string['invalidlegacy'] = 'Incorrect legacy role definition for type: {$a}';
|
||||||
$string['invalidmd5'] = 'The check variable was wrong - try again';
|
$string['invalidmd5'] = 'The check variable was wrong - try again';
|
||||||
$string['invalidmode'] = 'Invalid mode ({$a})';
|
$string['invalidmode'] = 'Invalid mode ({$a})';
|
||||||
|
|
|
@ -4933,6 +4933,36 @@ class admin_setting_langlist extends admin_setting_configtext {
|
||||||
parent::__construct('langlist', get_string('langlist', 'admin'), get_string('configlanglist', 'admin'), '', PARAM_NOTAGS);
|
parent::__construct('langlist', get_string('langlist', 'admin'), get_string('configlanglist', 'admin'), '', PARAM_NOTAGS);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Validate that each language identifier exists on the site
|
||||||
|
*
|
||||||
|
* @param string $data
|
||||||
|
* @return bool|string True if validation successful, otherwise error string
|
||||||
|
*/
|
||||||
|
public function validate($data) {
|
||||||
|
$parentcheck = parent::validate($data);
|
||||||
|
if ($parentcheck !== true) {
|
||||||
|
return $parentcheck;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($data === '') {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Normalize language identifiers.
|
||||||
|
$langcodes = array_map('trim', explode(',', $data));
|
||||||
|
foreach ($langcodes as $langcode) {
|
||||||
|
// If the langcode contains optional alias, split it out.
|
||||||
|
[$langcode, ] = preg_split('/\s*\|\s*/', $langcode, 2);
|
||||||
|
|
||||||
|
if (!get_string_manager()->translation_exists($langcode)) {
|
||||||
|
return get_string('invalidlanguagecode', 'error', $langcode);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Save the new setting
|
* Save the new setting
|
||||||
*
|
*
|
||||||
|
|
|
@ -533,7 +533,13 @@ class core_string_manager_standard implements core_string_manager {
|
||||||
$languages[$langcode] = !empty($this->transaliases[$langcode]) ? $this->transaliases[$langcode] : $langname;
|
$languages[$langcode] = !empty($this->transaliases[$langcode]) ? $this->transaliases[$langcode] : $langname;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// If there are no valid enabled translations, then return all languages.
|
||||||
|
if (!empty($languages)) {
|
||||||
return $languages;
|
return $languages;
|
||||||
|
} else {
|
||||||
|
return $cachedlist;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Get all languages available in system.
|
// Get all languages available in system.
|
||||||
|
@ -584,7 +590,12 @@ class core_string_manager_standard implements core_string_manager {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// If there are no valid enabled translations, then return all languages.
|
||||||
|
if (!empty($languages)) {
|
||||||
return $languages;
|
return $languages;
|
||||||
|
} else {
|
||||||
|
return $cachedlist;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -140,6 +140,13 @@ class core_string_manager_standard_testcase extends advanced_testcase {
|
||||||
|
|
||||||
$this->assertEquals(['en' => 'En'], $stringman->get_list_of_translations());
|
$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', '');
|
set_config('langlist', '');
|
||||||
get_string_manager(true);
|
get_string_manager(true);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue