mirror of
https://github.com/moodle/moodle.git
synced 2025-08-08 10:26:40 +02:00
MDL-43497 Language: Allow course language to be overridden
This commit is contained in:
parent
76e4de31cc
commit
c484af5aa6
7 changed files with 70 additions and 63 deletions
|
@ -4856,6 +4856,7 @@ function set_login_session_preferences() {
|
|||
$SESSION->justloggedin = true;
|
||||
|
||||
unset($SESSION->lang);
|
||||
unset($SESSION->forcelang);
|
||||
unset($SESSION->load_navigation_admin);
|
||||
}
|
||||
|
||||
|
@ -6623,7 +6624,14 @@ function clean_filename($string) {
|
|||
function current_language() {
|
||||
global $CFG, $USER, $SESSION, $COURSE;
|
||||
|
||||
if (!empty($COURSE->id) and $COURSE->id != SITEID and !empty($COURSE->lang)) {
|
||||
if (!empty($SESSION->forcelang)) {
|
||||
// Allows overriding course-forced language (useful for admins to check
|
||||
// issues in courses whose language they don't understand).
|
||||
// Also used by some code to temporarily get language-related information in a
|
||||
// specific language (see force_current_language()).
|
||||
$return = $SESSION->forcelang;
|
||||
|
||||
} else if (!empty($COURSE->id) and $COURSE->id != SITEID and !empty($COURSE->lang)) {
|
||||
// Course language can override all other settings for this page.
|
||||
$return = $COURSE->lang;
|
||||
|
||||
|
@ -6655,14 +6663,10 @@ function current_language() {
|
|||
* @return string
|
||||
*/
|
||||
function get_parent_language($lang=null) {
|
||||
global $COURSE, $SESSION;
|
||||
|
||||
// Let's hack around the current language.
|
||||
if (!empty($lang)) {
|
||||
$oldcourselang = empty($COURSE->lang) ? '' : $COURSE->lang;
|
||||
$oldsessionlang = empty($SESSION->lang) ? '' : $SESSION->lang;
|
||||
$COURSE->lang = '';
|
||||
$SESSION->lang = $lang;
|
||||
$oldforcelang = force_current_language($lang);
|
||||
}
|
||||
|
||||
$parentlang = get_string('parentlanguage', 'langconfig');
|
||||
|
@ -6672,13 +6676,34 @@ function get_parent_language($lang=null) {
|
|||
|
||||
// Let's hack around the current language.
|
||||
if (!empty($lang)) {
|
||||
$COURSE->lang = $oldcourselang;
|
||||
$SESSION->lang = $oldsessionlang;
|
||||
force_current_language($oldforcelang);
|
||||
}
|
||||
|
||||
return $parentlang;
|
||||
}
|
||||
|
||||
/**
|
||||
* Force the current language to get strings and dates localised in the given language.
|
||||
*
|
||||
* After calling this function, all strings will be provided in the given language
|
||||
* until this function is called again, or equivalent code is run.
|
||||
*
|
||||
* @param string $language
|
||||
* @return string previous $SESSION->forcelang value
|
||||
*/
|
||||
function force_current_language($language) {
|
||||
global $SESSION;
|
||||
$sessionforcelang = isset($SESSION->forcelang) ? $SESSION->forcelang : '';
|
||||
if ($language !== $sessionforcelang) {
|
||||
// Seting forcelang to null or an empty string disables it's effect.
|
||||
if (empty($language) || get_string_manager()->translation_exists($language, false)) {
|
||||
$SESSION->forcelang = $language;
|
||||
moodle_setlocale();
|
||||
}
|
||||
}
|
||||
return $sessionforcelang;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns current string_manager instance.
|
||||
*
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue