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