diff --git a/inc/inc.ClassSettings.php b/inc/inc.ClassSettings.php index 708208619..577576a2f 100644 --- a/inc/inc.ClassSettings.php +++ b/inc/inc.ClassSettings.php @@ -103,6 +103,8 @@ class Settings { /* {{{ */ var $_contentOffsetDir = "1048576"; // Maximum number of sub-directories per parent directory var $_maxDirID = 32700; + // default available languages (list of languages shown in language selector) + var $_availablelanguages = array(); // default language (name of a subfolder in folder "languages") var $_language = "en_GB"; // users are notified about document-changes that took place within the last $_updateNotifyTime seconds @@ -376,6 +378,8 @@ class Settings { /* {{{ */ $this->_footNote = strval($tab["footNote"]); $this->_printDisclaimer = Settings::boolVal($tab["printDisclaimer"]); $this->_language = strval($tab["language"]); + if(trim(strval($tab["availablelanguages"]))) + $this->_availablelanguages = explode(',',strval($tab["availablelanguages"])); $this->_theme = strval($tab["theme"]); if(isset($tab["previewWidthList"])) $this->_previewWidthList = intval($tab["previewWidthList"]); @@ -678,6 +682,7 @@ class Settings { /* {{{ */ $this->setXMLAttributValue($node, "footNote", $this->_footNote); $this->setXMLAttributValue($node, "printDisclaimer", $this->_printDisclaimer); $this->setXMLAttributValue($node, "language", $this->_language); + $this->setXMLAttributValue($node, "availablelanguages", implode(',', $this->_availablelanguages)); $this->setXMLAttributValue($node, "theme", $this->_theme); $this->setXMLAttributValue($node, "previewWidthList", $this->_previewWidthList); $this->setXMLAttributValue($node, "previewWidthDetail", $this->_previewWidthDetail); diff --git a/inc/inc.Language.php b/inc/inc.Language.php index 4b7fe9fce..80412c8e3 100644 --- a/inc/inc.Language.php +++ b/inc/inc.Language.php @@ -20,7 +20,10 @@ $LANG = array(); $MISSING_LANG = array(); -foreach(getLanguages() as $_lang) { +$__languages = getLanguages(); +if(!in_array($settings->_language, $__languages)) + $__languages[] = $settings->_language; +foreach($__languages as $_lang) { if(file_exists($settings->_rootDir . "languages/" . $_lang . "/lang.inc")) { include $settings->_rootDir . "languages/" . $_lang . "/lang.inc"; $LANG[$_lang] = $text; @@ -28,15 +31,14 @@ foreach(getLanguages() as $_lang) { } unset($text); -function getLanguages() -{ - GLOBAL $settings; - +function getAvailableLanguages() { /* {{{ */ + global $settings; + $languages = array(); - + $path = $settings->_rootDir . "languages/"; $handle = opendir($path); - + while ($entry = readdir($handle) ) { if ($entry == ".." || $entry == ".") @@ -48,7 +50,17 @@ function getLanguages() asort($languages); return $languages; -} +} /* }}} */ + +function getLanguages() { /* {{{ */ + global $settings; + + if($settings->_availablelanguages) { + return $settings->_availablelanguages; + } + + return getAvailableLanguages(); +} /* }}} */ /** * Get translation @@ -98,11 +110,11 @@ function getMLText($key, $replace = array(), $defaulttext = "", $lang="") { /* { */ if (count($replace) == 0) return $tmpText; - + $keys = array_keys($replace); foreach ($keys as $key) $tmpText = str_replace("[".$key."]", $replace[$key], $tmpText); - + return $tmpText; } /* }}} */ diff --git a/op/op.Settings.php b/op/op.Settings.php index 08847f20b..5f8302b6a 100644 --- a/op/op.Settings.php +++ b/op/op.Settings.php @@ -57,6 +57,7 @@ if ($action == "saveSettings") $settings->_footNote = $_POST["footNote"]; $settings->_printDisclaimer = getBoolValue("printDisclaimer"); $settings->_language = $_POST["language"]; + $settings->_availablelanguages = $_POST["availablelanguages"]; $settings->_theme = $_POST["theme"]; $settings->_previewWidthList = $_POST["previewWidthList"]; $settings->_previewWidthDetail = $_POST["previewWidthDetail"]; diff --git a/views/bootstrap/class.Settings.php b/views/bootstrap/class.Settings.php index 17690e07e..20eb6566b 100644 --- a/views/bootstrap/class.Settings.php +++ b/views/bootstrap/class.Settings.php @@ -111,12 +111,29 @@ if(!is_writeable($settings->_configFilePath)) {