00001 <?php
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00089 class language {
00090 var $lang='default';
00091 var $langSplit='default';
00092
00093
00094 var $charSet = 'iso-8859-1';
00095
00096
00097 var $charSetArray = array();
00098
00099
00100 var $typo3_help_url= 'http:
00101
00102 var $helpUrlArray = array(
00103 'dk' => 'http:
00104 );
00105
00106
00107 var $moduleLabels = Array();
00108
00109
00110 var $langSplitIndex=0;
00111 var $LL_files_cache=array();
00112 var $LL_labels_cache=array();
00113
00114
00115 var $origCharSet='';
00116 var $csConvObj;
00117
00118
00119
00120
00121
00122
00123
00124
00137 function init($lang,$altPath='') {
00138
00139
00140 $this->csConvObj = t3lib_div::makeInstance('t3lib_cs');
00141 $this->charSetArray = $this->csConvObj->charSetArray;
00142
00143
00144 $this->langSplit=TYPO3_languages;
00145
00146
00147 $ls = explode('|',$this->langSplit);
00148 while(list($i,$v)=each($ls)) {
00149 if ($v==$lang) {
00150 $this->langSplitIndex=$i;
00151 $this->lang = $lang;
00152 if ($this->helpUrlArray[$this->lang]) $this->typo3_help_url=$this->helpUrlArray[$this->lang];
00153 if ($this->charSetArray[$this->lang]) $this->charSet=$this->charSetArray[$this->lang];
00154 }
00155 }
00156
00157
00158 if ($GLOBALS['TYPO3_CONF_VARS']['BE']['forceCharset'] && $GLOBALS['TYPO3_CONF_VARS']['BE']['forceCharset']!=$this->charSet) {
00159
00160 $this->origCharSet = $this->charSet;
00161 $this->charSet = $GLOBALS['TYPO3_CONF_VARS']['BE']['forceCharset'];
00162
00163 if ($this->charSet!='utf-8' && !$this->csConvObj->initCharset($this->charSet)) {
00164 t3lib_BEfunc::typo3PrintError ('The forced character set "'.$this->charSet.'" was not found in t3lib/csconvtbl/','Forced charset not found');
00165 exit;
00166 }
00167 if ($this->origCharSet!='utf-8' && !$this->csConvObj->initCharset($this->origCharSet)) {
00168 t3lib_BEfunc::typo3PrintError ('The original character set "'.$this->origCharSet.'" was not found in t3lib/csconvtbl/','Forced charset not found');
00169 exit;
00170 }
00171 }
00172 }
00173
00182 function addModuleLabels($arr,$prefix) {
00183 if (is_array($arr)) {
00184 reset($arr);
00185 while(list($k,$larr)=each($arr)) {
00186 if (!isset($this->moduleLabels[$k])) {
00187 $this->moduleLabels[$k]=array();
00188 }
00189 if (is_array($larr)) {
00190 reset($larr);
00191 while(list($l,$v)=each($larr)) {
00192 $this->moduleLabels[$k][$prefix.$l]=$v;
00193 }
00194 }
00195 }
00196 }
00197 }
00198
00208 function hscAndCharConv($lStr,$hsc) {
00209 $lStr = $hsc ? htmlspecialchars($lStr) : $lStr;
00210 if ($this->origCharSet) {
00211 $lStr = $this->csConvObj->conv($lStr,$this->origCharSet,$this->charSet,1);
00212 }
00213 return $lStr;
00214 }
00215
00223 function makeEntities($str) {
00224
00225 if ($this->charSet!='utf-8') $str = $this->csConvObj->utf8_encode($str,$this->charSet);
00226
00227
00228 $str = $this->csConvObj->utf8_to_entities($str);
00229 return $str;
00230 }
00231
00240 function JScharCode($str) {
00241
00242
00243 if ($this->charSet!='utf-8') $str = $this->csConvObj->utf8_encode($str,$this->charSet);
00244
00245
00246 $nArr = $this->csConvObj->utf8_to_numberarray($str);
00247
00248 return 'String.fromCharCode('.implode(',',$nArr).')';
00249 }
00250
00259 function getLL($index,$hsc=0) {
00260
00261 if (strcmp($GLOBALS['LOCAL_LANG'][$this->lang][$index],'')) {
00262 return $this->hscAndCharConv($GLOBALS['LOCAL_LANG'][$this->lang][$index], $hsc);
00263 } else {
00264 return $this->hscAndCharConv($GLOBALS['LOCAL_LANG']['default'][$index], $hsc);
00265 }
00266 }
00267
00276 function getLLL($index,$LOCAL_LANG,$hsc=0) {
00277
00278 if (strcmp($LOCAL_LANG[$this->lang][$index],'')) {
00279 return $this->hscAndCharConv($LOCAL_LANG[$this->lang][$index], $hsc);
00280 } else {
00281 return $this->hscAndCharConv($LOCAL_LANG['default'][$index], $hsc);
00282 }
00283 }
00284
00296 function sL($input,$hsc=0) {
00297 if (strcmp(substr($input,0,4),'LLL:')) {
00298 $t = explode('|',$input);
00299 $out = $t[$this->langSplitIndex] ? $t[$this->langSplitIndex] : $t[0];
00300 return $this->hscAndCharConv($out, $hsc);
00301 } else {
00302 if (!isset($this->LL_labels_cache[$this->lang][$input])) {
00303 $restStr = trim(substr($input,4));
00304 $extPrfx='';
00305 if (!strcmp(substr($restStr,0,4),'EXT:')) {
00306 $restStr = trim(substr($restStr,4));
00307 $extPrfx='EXT:';
00308 }
00309 $parts = explode(':',$restStr);
00310 $parts[0]=$extPrfx.$parts[0];
00311 if (!isset($this->LL_files_cache[$parts[0]])) {
00312 $this->LL_files_cache[$parts[0]] = $this->readLLfile($parts[0]);
00313
00314
00315 $lFileRef = $this->localizedFileRef($parts[0]);
00316 if ($lFileRef && is_string($this->LL_files_cache[$parts[0]][$this->lang]) && $this->LL_files_cache[$parts[0]][$this->lang]=='EXT') {
00317 $tempLL = $this->readLLfile($lFileRef);
00318 $this->LL_files_cache[$parts[0]][$this->lang] = $tempLL[$this->lang];
00319 }
00320
00321
00322 if (isset($GLOBALS['TYPO3_CONF_VARS']['BE']['XLLfile'][$parts[0]])) {
00323 $ORarray = $this->readLLfile($GLOBALS['TYPO3_CONF_VARS']['BE']['XLLfile'][$parts[0]]);
00324 $this->LL_files_cache[$parts[0]] = t3lib_div::array_merge_recursive_overrule($this->LL_files_cache[$parts[0]],$ORarray);
00325 }
00326 }
00327 $this->LL_labels_cache[$this->lang][$input] = $this->getLLL($parts[1],$this->LL_files_cache[$parts[0]]);
00328 }
00329 return $hsc ? t3lib_div::deHSCentities(htmlspecialchars($this->LL_labels_cache[$this->lang][$input])) : $this->LL_labels_cache[$this->lang][$input];
00330 }
00331 }
00332
00340 function loadSingleTableDescription($table) {
00341 global $TCA_DESCR;
00342
00343 if (is_array($TCA_DESCR[$table])
00344 && !isset($TCA_DESCR[$table]['columns'])
00345 && is_array($TCA_DESCR[$table]['refs'])) {
00346
00347
00348 $TCA_DESCR[$table]['columns']=array();
00349
00350
00351 foreach ($TCA_DESCR[$table]['refs'] as $llfile) {
00352 $LOCAL_LANG = $this->includeLLFile($llfile,0,1);
00353
00354
00355 if (is_array($LOCAL_LANG['default'])) {
00356 foreach($LOCAL_LANG['default'] as $lkey => $lVal) {
00357
00358
00359
00360
00361
00362 $kParts = explode('.',$lkey);
00363
00364
00365 if ($kParts[0]=='_') $kParts[0]='';
00366 if (substr($kParts[0],0,1)=='_') { $kParts[0] = substr($kParts[0],1); }
00367
00368
00369 switch((string)$kParts[2]) {
00370 case '+':
00371 $TCA_DESCR[$table]['columns'][$kParts[0]][$kParts[1]].= chr(10).$lVal;
00372 break;
00373 default:
00374 $TCA_DESCR[$table]['columns'][$kParts[0]][$kParts[1]] = $lVal;
00375 break;
00376 }
00377 }
00378 }
00379 }
00380 }
00381 }
00382
00392 function includeLLFile($fileRef,$setGlobal=1,$mergeLocalOntoDefault=0) {
00393
00394 if ($setGlobal) {
00395 global $LOCAL_LANG;
00396 }
00397
00398
00399 $llang = $this->readLLfile($fileRef);
00400
00401 if (count($llang)) {
00402
00403 $LOCAL_LANG = t3lib_div::array_merge_recursive_overrule($LOCAL_LANG,$llang);
00404
00405
00406 $lFileRef = $this->localizedFileRef($fileRef);
00407 if ($lFileRef && (string)$LOCAL_LANG[$this->lang]=='EXT') {
00408 $llang = $this->readLLfile($lFileRef);
00409 $LOCAL_LANG = t3lib_div::array_merge_recursive_overrule($LOCAL_LANG,$llang);
00410 }
00411
00412
00413 if (isset($GLOBALS['TYPO3_CONF_VARS']['BE']['XLLfile'][$fileRef])) {
00414 $ORarray = $this->readLLfile($GLOBALS['TYPO3_CONF_VARS']['BE']['XLLfile'][$fileRef]);
00415 $LOCAL_LANG = t3lib_div::array_merge_recursive_overrule($LOCAL_LANG,$ORarray);
00416 }
00417
00418
00419 if ($mergeLocalOntoDefault && strcmp($this->lang,'default') && is_array($LOCAL_LANG[$this->lang]) && is_array($LOCAL_LANG['default'])) {
00420 $LOCAL_LANG['default'] = array_merge($LOCAL_LANG['default'],$LOCAL_LANG[$this->lang]);
00421 unset($LOCAL_LANG[$this->lang]);
00422 }
00423 }
00424
00425
00426 if (!$setGlobal) {
00427 return $LOCAL_LANG;
00428 }
00429 }
00430
00437 function readLLfile($fileRef) {
00438 return t3lib_div::readLLfile($fileRef,$this->lang);
00439 }
00440
00447 function localizedFileRef($fileRef) {
00448 if ($this->lang!='default' && substr($fileRef,-4)=='.php') {
00449 return substr($fileRef,0,-4).'.'.$this->lang.'.php';
00450 }
00451 }
00452 }
00453
00454
00455 if (defined('TYPO3_MODE') && $TYPO3_CONF_VARS[TYPO3_MODE]['XCLASS']['ext/lang/lang.php']) {
00456 include_once($TYPO3_CONF_VARS[TYPO3_MODE]['XCLASS']['ext/lang/lang.php']);
00457 }
00458 ?>