Commit e5663daad2f0576027d69b63f4e577ac3e77d31a

Authored by Neil Blakey-Milner
1 parent 0ea21be4

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.

Allow for plugins to be ordered, so that language plugins can set
themselves up early on, so that later plugins can translate text to the
language.


git-svn-id: https://kt-dms.svn.sourceforge.net/svnroot/kt-dms/trunk@5142 c91229c3-7414-0410-bfa2-8a42b809f60b
lib/i18n/i18n.inc.php
@@ -36,6 +36,11 @@ class KTi18n { @@ -36,6 +36,11 @@ class KTi18n {
36 $this->aLangDirectories = $aLangDirectories; 36 $this->aLangDirectories = $aLangDirectories;
37 } 37 }
38 38
  39 + function addLanguage($sLang, $sLocation) {
  40 + $this->aLangDirectories[$sLang] = $sLocation;
  41 + $this->sFilename = null;
  42 + }
  43 +
39 function _generateLanguage() { 44 function _generateLanguage() {
40 if (!empty($this->sLang)) { 45 if (!empty($this->sLang)) {
41 return; 46 return;
@@ -44,8 +49,10 @@ class KTi18n { @@ -44,8 +49,10 @@ class KTi18n {
44 if ($this->sLang === false) { 49 if ($this->sLang === false) {
45 return; 50 return;
46 } 51 }
  52 +
47 global $default; 53 global $default;
48 $this->sLang = $default->defaultLanguage; 54 $this->sLang = $default->defaultLanguage;
  55 + return;
49 } 56 }
50 57
51 function _generateFilePath() { 58 function _generateFilePath() {
@@ -62,6 +69,11 @@ class KTi18n { @@ -62,6 +69,11 @@ class KTi18n {
62 $sLocation = $this->sPath; 69 $sLocation = $this->sPath;
63 } 70 }
64 71
  72 + if ($sLocation === "default") {
  73 + $this->sFilename = false;
  74 + return;
  75 + }
  76 +
65 $aTry = array( 77 $aTry = array(
66 sprintf("%s/%s/%s", $sLocation, $this->sLang, $this->sDomain), 78 sprintf("%s/%s/%s", $sLocation, $this->sLang, $this->sDomain),
67 sprintf("%s/%s", $sLocation, $this->sDomain), 79 sprintf("%s/%s", $sLocation, $this->sDomain),
@@ -110,6 +122,7 @@ class KTi18n { @@ -110,6 +122,7 @@ class KTi18n {
110 if (empty($this->sFilename)) { 122 if (empty($this->sFilename)) {
111 return $sContents; 123 return $sContents;
112 } 124 }
  125 +
113 return KTUtil::arrayGet($this->aStrings, $sContents, $sContents); 126 return KTUtil::arrayGet($this->aStrings, $sContents, $sContents);
114 return dcgettext($this->sDomain, $sContents, LC_MESSAGES); 127 return dcgettext($this->sDomain, $sContents, LC_MESSAGES);
115 } 128 }
lib/i18n/i18nregistry.inc.php
@@ -32,10 +32,11 @@ class KTi18nRegistry { @@ -32,10 +32,11 @@ class KTi18nRegistry {
32 var $_ai18nDetails = array(); 32 var $_ai18nDetails = array();
33 var $_ai18nLangs = array(); 33 var $_ai18nLangs = array();
34 var $_ai18ns = array(); 34 var $_ai18ns = array();
  35 + var $_aLanguages = array();
35 36
36 function &getSingleton() { 37 function &getSingleton() {
37 if (!KTUtil::arrayGet($GLOBALS, 'oKTi18nRegistry')) { 38 if (!KTUtil::arrayGet($GLOBALS, 'oKTi18nRegistry')) {
38 - $GLOBALS['oKTi18nRegistry'] = new KTi18nRegistry; 39 + $GLOBALS['oKTi18nRegistry'] =& new KTi18nRegistry;
39 } 40 }
40 return $GLOBALS['oKTi18nRegistry']; 41 return $GLOBALS['oKTi18nRegistry'];
41 } 42 }
@@ -53,9 +54,21 @@ class KTi18nRegistry { @@ -53,9 +54,21 @@ class KTi18nRegistry {
53 } else { 54 } else {
54 $aLang = $sLang; 55 $aLang = $sLang;
55 } 56 }
  57 + $oi18n =& KTUtil::arrayGet($this->_ai18ns, $sDomain);
  58 +
56 foreach ($aLang as $sLang) { 59 foreach ($aLang as $sLang) {
57 $this->_ai18nLangs[$sDomain][$sLang] = $sDirectory; 60 $this->_ai18nLangs[$sDomain][$sLang] = $sDirectory;
  61 + if (!empty($oi18n)) {
  62 + $oi18n->addLanguage($sLang, $sDirectory);
  63 + }
58 } 64 }
  65 + if (!empty($oi18n)) {
  66 + $this->_ai18ns[$sDomain] =& $oi18n;
  67 + }
  68 + }
  69 +
  70 + function registerLanguage($sLanguage, $sLanguageName) {
  71 + $this->_aLanguages[$sLanguage] = $sLanguageName;
59 } 72 }
60 73
61 function &geti18n($sDomain) { 74 function &geti18n($sDomain) {
@@ -72,5 +85,13 @@ class KTi18nRegistry { @@ -72,5 +85,13 @@ class KTi18nRegistry {
72 $this->_ai18ns[$sDomain] =& $oi18n; 85 $this->_ai18ns[$sDomain] =& $oi18n;
73 return $oi18n; 86 return $oi18n;
74 } 87 }
  88 +
  89 + function &geti18nLanguages($sDomain) {
  90 + return $this->_ai18nLangs[$sDomain];
  91 + }
  92 +
  93 + function &getLanguages() {
  94 + return $this->_aLanguages;
  95 + }
75 } 96 }
76 97
lib/plugins/plugin.inc.php
@@ -31,6 +31,7 @@ class KTPlugin { @@ -31,6 +31,7 @@ class KTPlugin {
31 var $sFilename = null; 31 var $sFilename = null;
32 var $bAlwaysInclude = false; 32 var $bAlwaysInclude = false;
33 var $iVersion = 0; 33 var $iVersion = 0;
  34 + var $iOrder = 0;
34 35
35 var $autoRegister = false; 36 var $autoRegister = false;
36 37
@@ -44,6 +45,7 @@ class KTPlugin { @@ -44,6 +45,7 @@ class KTPlugin {
44 var $_aDashlets = array(); 45 var $_aDashlets = array();
45 var $_ai18n = array(); 46 var $_ai18n = array();
46 var $_ai18nLang = array(); 47 var $_ai18nLang = array();
  48 + var $_aLanguage = array();
47 49
48 function KTPlugin($sFilename = null) { 50 function KTPlugin($sFilename = null) {
49 $this->sFilename = $sFilename; 51 $this->sFilename = $sFilename;
@@ -114,8 +116,14 @@ class KTPlugin { @@ -114,8 +116,14 @@ class KTPlugin {
114 } 116 }
115 117
116 function registeri18nLang($sDomain, $sLang, $sPath) { 118 function registeri18nLang($sDomain, $sLang, $sPath) {
117 - $sPath = $this->_fixFilename($sPath);  
118 - $this->_ai18nLang[$sDomain] = array($sDomain, $sLang, $sPath); 119 + if ($sPath !== "default") {
  120 + $sPath = $this->_fixFilename($sPath);
  121 + }
  122 + $this->_ai18nLang["$sDomain/$sLang"] = array($sDomain, $sLang, $sPath);
  123 + }
  124 +
  125 + function registerLanguage($sLanguage, $sLanguageName) {
  126 + $this->_aLanguage[$sLanguage] = array($sLanguage, $sLanguageName);
119 } 127 }
120 128
121 function _fixFilename($sFilename) { 129 function _fixFilename($sFilename) {
@@ -222,6 +230,10 @@ class KTPlugin { @@ -222,6 +230,10 @@ class KTPlugin {
222 foreach ($this->_ai18nLang as $k => $v) { 230 foreach ($this->_ai18nLang as $k => $v) {
223 call_user_func_array(array(&$oi18nRegistry, 'registeri18nLang'), $v); 231 call_user_func_array(array(&$oi18nRegistry, 'registeri18nLang'), $v);
224 } 232 }
  233 +
  234 + foreach ($this->_aLanguage as $k => $v) {
  235 + call_user_func_array(array(&$oi18nRegistry, 'registerLanguage'), $v);
  236 + }
225 } 237 }
226 238
227 function setup() { 239 function setup() {
login.php
@@ -57,6 +57,15 @@ class LoginPageDispatcher extends KTDispatcher { @@ -57,6 +57,15 @@ class LoginPageDispatcher extends KTDispatcher {
57 57
58 $errorMessage = KTUtil::arrayGet($_REQUEST, 'errorMessage'); 58 $errorMessage = KTUtil::arrayGet($_REQUEST, 'errorMessage');
59 $redirect = KTUtil::arrayGet($_REQUEST, 'redirect'); 59 $redirect = KTUtil::arrayGet($_REQUEST, 'redirect');
  60 +
  61 + $oReg =& KTi18nregistry::getSingleton();
  62 + $aRegisteredLangs = $oReg->geti18nLanguages('knowledgeTree');
  63 + $aLanguageNames = $oReg->getLanguages('knowledgeTree');
  64 + $aRegisteredLanguageNames = array();
  65 + foreach (array_keys($aRegisteredLangs) as $sLang) {
  66 + $aRegisteredLanguageNames[$sLang] = $aLanguageNames[$sLang];
  67 + }
  68 + $sLanguageSelect = $default->defaultLanguage;
60 69
61 $oTemplating =& KTTemplating::getSingleton(); 70 $oTemplating =& KTTemplating::getSingleton();
62 $oTemplate = $oTemplating->loadTemplate("ktcore/login"); 71 $oTemplate = $oTemplating->loadTemplate("ktcore/login");
@@ -66,6 +75,8 @@ class LoginPageDispatcher extends KTDispatcher { @@ -66,6 +75,8 @@ class LoginPageDispatcher extends KTDispatcher {
66 'errorMessage' => $errorMessage, 75 'errorMessage' => $errorMessage,
67 'redirect' => $redirect, 76 'redirect' => $redirect,
68 'systemVersion' => $default->systemVersion, 77 'systemVersion' => $default->systemVersion,
  78 + 'languages' => $aRegisteredLanguageNames,
  79 + 'selected_language' => $sLanguageSelect,
69 ); 80 );
70 return $oTemplate->render($aTemplateData); 81 return $oTemplate->render($aTemplateData);
71 } 82 }
@@ -132,6 +143,11 @@ class LoginPageDispatcher extends KTDispatcher { @@ -132,6 +143,11 @@ class LoginPageDispatcher extends KTDispatcher {
132 143
133 // DEPRECATED initialise page-level authorisation array 144 // DEPRECATED initialise page-level authorisation array
134 $_SESSION["pageAccess"] = NULL; 145 $_SESSION["pageAccess"] = NULL;
  146 + $language = KTUtil::arrayGet($_REQUEST, 'language');
  147 + if (empty($language)) {
  148 + $language = $default->defaultLanguage;
  149 + }
  150 + setcookie("kt_language", $language, 2147483647, '/');
135 151
136 // check for a location to forward to 152 // check for a location to forward to
137 if ($redirect !== null) { 153 if ($redirect !== null) {