From e5663daad2f0576027d69b63f4e577ac3e77d31a Mon Sep 17 00:00:00 2001 From: Neil Blakey-Milner Date: Mon, 27 Mar 2006 10:50:22 +0000 Subject: [PATCH] Allow for language to be chosen on login, setting a cookie that will be used from then on. Language names are registered by a plugin. --- lib/i18n/i18n.inc.php | 13 +++++++++++++ lib/i18n/i18nregistry.inc.php | 23 ++++++++++++++++++++++- lib/plugins/plugin.inc.php | 16 ++++++++++++++-- login.php | 16 ++++++++++++++++ 4 files changed, 65 insertions(+), 3 deletions(-) diff --git a/lib/i18n/i18n.inc.php b/lib/i18n/i18n.inc.php index f836753..2f68c86 100644 --- a/lib/i18n/i18n.inc.php +++ b/lib/i18n/i18n.inc.php @@ -36,6 +36,11 @@ class KTi18n { $this->aLangDirectories = $aLangDirectories; } + function addLanguage($sLang, $sLocation) { + $this->aLangDirectories[$sLang] = $sLocation; + $this->sFilename = null; + } + function _generateLanguage() { if (!empty($this->sLang)) { return; @@ -44,8 +49,10 @@ class KTi18n { if ($this->sLang === false) { return; } + global $default; $this->sLang = $default->defaultLanguage; + return; } function _generateFilePath() { @@ -62,6 +69,11 @@ class KTi18n { $sLocation = $this->sPath; } + if ($sLocation === "default") { + $this->sFilename = false; + return; + } + $aTry = array( sprintf("%s/%s/%s", $sLocation, $this->sLang, $this->sDomain), sprintf("%s/%s", $sLocation, $this->sDomain), @@ -110,6 +122,7 @@ class KTi18n { if (empty($this->sFilename)) { return $sContents; } + return KTUtil::arrayGet($this->aStrings, $sContents, $sContents); return dcgettext($this->sDomain, $sContents, LC_MESSAGES); } diff --git a/lib/i18n/i18nregistry.inc.php b/lib/i18n/i18nregistry.inc.php index 0d6a50c..35aebae 100644 --- a/lib/i18n/i18nregistry.inc.php +++ b/lib/i18n/i18nregistry.inc.php @@ -32,10 +32,11 @@ class KTi18nRegistry { var $_ai18nDetails = array(); var $_ai18nLangs = array(); var $_ai18ns = array(); + var $_aLanguages = array(); function &getSingleton() { if (!KTUtil::arrayGet($GLOBALS, 'oKTi18nRegistry')) { - $GLOBALS['oKTi18nRegistry'] = new KTi18nRegistry; + $GLOBALS['oKTi18nRegistry'] =& new KTi18nRegistry; } return $GLOBALS['oKTi18nRegistry']; } @@ -53,9 +54,21 @@ class KTi18nRegistry { } else { $aLang = $sLang; } + $oi18n =& KTUtil::arrayGet($this->_ai18ns, $sDomain); + foreach ($aLang as $sLang) { $this->_ai18nLangs[$sDomain][$sLang] = $sDirectory; + if (!empty($oi18n)) { + $oi18n->addLanguage($sLang, $sDirectory); + } } + if (!empty($oi18n)) { + $this->_ai18ns[$sDomain] =& $oi18n; + } + } + + function registerLanguage($sLanguage, $sLanguageName) { + $this->_aLanguages[$sLanguage] = $sLanguageName; } function &geti18n($sDomain) { @@ -72,5 +85,13 @@ class KTi18nRegistry { $this->_ai18ns[$sDomain] =& $oi18n; return $oi18n; } + + function &geti18nLanguages($sDomain) { + return $this->_ai18nLangs[$sDomain]; + } + + function &getLanguages() { + return $this->_aLanguages; + } } diff --git a/lib/plugins/plugin.inc.php b/lib/plugins/plugin.inc.php index 3797b57..fe4bac8 100644 --- a/lib/plugins/plugin.inc.php +++ b/lib/plugins/plugin.inc.php @@ -31,6 +31,7 @@ class KTPlugin { var $sFilename = null; var $bAlwaysInclude = false; var $iVersion = 0; + var $iOrder = 0; var $autoRegister = false; @@ -44,6 +45,7 @@ class KTPlugin { var $_aDashlets = array(); var $_ai18n = array(); var $_ai18nLang = array(); + var $_aLanguage = array(); function KTPlugin($sFilename = null) { $this->sFilename = $sFilename; @@ -114,8 +116,14 @@ class KTPlugin { } function registeri18nLang($sDomain, $sLang, $sPath) { - $sPath = $this->_fixFilename($sPath); - $this->_ai18nLang[$sDomain] = array($sDomain, $sLang, $sPath); + if ($sPath !== "default") { + $sPath = $this->_fixFilename($sPath); + } + $this->_ai18nLang["$sDomain/$sLang"] = array($sDomain, $sLang, $sPath); + } + + function registerLanguage($sLanguage, $sLanguageName) { + $this->_aLanguage[$sLanguage] = array($sLanguage, $sLanguageName); } function _fixFilename($sFilename) { @@ -222,6 +230,10 @@ class KTPlugin { foreach ($this->_ai18nLang as $k => $v) { call_user_func_array(array(&$oi18nRegistry, 'registeri18nLang'), $v); } + + foreach ($this->_aLanguage as $k => $v) { + call_user_func_array(array(&$oi18nRegistry, 'registerLanguage'), $v); + } } function setup() { diff --git a/login.php b/login.php index cff1a73..74c3dc0 100644 --- a/login.php +++ b/login.php @@ -57,6 +57,15 @@ class LoginPageDispatcher extends KTDispatcher { $errorMessage = KTUtil::arrayGet($_REQUEST, 'errorMessage'); $redirect = KTUtil::arrayGet($_REQUEST, 'redirect'); + + $oReg =& KTi18nregistry::getSingleton(); + $aRegisteredLangs = $oReg->geti18nLanguages('knowledgeTree'); + $aLanguageNames = $oReg->getLanguages('knowledgeTree'); + $aRegisteredLanguageNames = array(); + foreach (array_keys($aRegisteredLangs) as $sLang) { + $aRegisteredLanguageNames[$sLang] = $aLanguageNames[$sLang]; + } + $sLanguageSelect = $default->defaultLanguage; $oTemplating =& KTTemplating::getSingleton(); $oTemplate = $oTemplating->loadTemplate("ktcore/login"); @@ -66,6 +75,8 @@ class LoginPageDispatcher extends KTDispatcher { 'errorMessage' => $errorMessage, 'redirect' => $redirect, 'systemVersion' => $default->systemVersion, + 'languages' => $aRegisteredLanguageNames, + 'selected_language' => $sLanguageSelect, ); return $oTemplate->render($aTemplateData); } @@ -132,6 +143,11 @@ class LoginPageDispatcher extends KTDispatcher { // DEPRECATED initialise page-level authorisation array $_SESSION["pageAccess"] = NULL; + $language = KTUtil::arrayGet($_REQUEST, 'language'); + if (empty($language)) { + $language = $default->defaultLanguage; + } + setcookie("kt_language", $language, 2147483647, '/'); // check for a location to forward to if ($redirect !== null) { -- libgit2 0.21.4