This commit was manufactured by cvs2svn to create tag
[Packages/TYPO3.CMS.git] / typo3 / sysext / lang / lang.php
index 53def8d..039477f 100755 (executable)
@@ -2,7 +2,7 @@
 /***************************************************************
 *  Copyright notice
 * 
-*  (c) 1999-2003 Kasper Skårhøj (kasper@typo3.com)
+*  (c) 1999-2004 Kasper Skaarhoj (kasper@typo3.com)
 *  All rights reserved
 * 
 *  This script is part of the TYPO3 project. TYPO3 is free software;
 /** 
  * Contains the TYPO3 Backend Language class
  *
- * @author     Kasper Skårhøj <kasper@typo3.com>
+ * $Id$
+ * Revised for TYPO3 3.6.0
+ *
+ * @author     Kasper Skaarhoj <kasper@typo3.com>
  */
 /**
  * [CLASS/FUNCTION INDEX of SCRIPT]
  *
  *
  *
- *   71: class language 
- *  146:     function init($lang,$altPath='')  
- *  170:     function addModuleLabels($arr,$prefix)    
- *  195:     function getLL($index,$hsc=0)     
- *  212:     function getLLL($index,$LOCAL_LANG,$hsc=0)        
- *  232:     function sL($input,$hsc=0)        
- *  276:     function loadSingleTableDescription($table)       
- *  327:     function includeLLFile($fileRef,$setGlobal=1,$mergeLocalOntoDefault=0)    
- *  374:     function readLLfile($fileRef)     
- *  388:     function localizedFileRef($fileRef)       
+ *   79: class language 
+ *  127:     function init($lang,$altPath='')  
+ *  172:     function addModuleLabels($arr,$prefix)    
+ *  198:     function hscAndCharConv($lStr,$hsc)       
+ *  213:     function makeEntities($str)       
+ *  230:     function JScharCode($str) 
+ *  249:     function getLL($index,$hsc=0)     
+ *  266:     function getLLL($index,$LOCAL_LANG,$hsc=0)        
+ *  286:     function sL($input,$hsc=0)        
+ *  330:     function loadSingleTableDescription($table)       
+ *  382:     function includeLLFile($fileRef,$setGlobal=1,$mergeLocalOntoDefault=0)    
+ *  427:     function readLLfile($fileRef)     
+ *  441:     function localizedFileRef($fileRef)       
  *
- * TOTAL FUNCTIONS: 9
+ * TOTAL FUNCTIONS: 12
  * (This index is automatically created/updated by the extension "extdeveval")
  *
  */
 
 /**
  * Contains the TYPO3 Backend Language class
- * 
+ *
  * For detailed information about how localization is handled,
  * please refer to the 'Inside TYPO3' document which descibes this.
- * 
+ *
  * This class is normally instantiated as the global variable $LANG in typo3/template.php
  * It's only available in the backend and under certain circumstances in the frontend
- * 
- * @author     Kasper Skårhøj <kasper@typo3.com>
+ *
+ * @author     Kasper Skaarhoj <kasper@typo3.com>
+ * @package TYPO3
+ * @subpackage core
  * @see typo3/template.php, template
  */
 class language {
@@ -75,39 +83,8 @@ class language {
                // Default charset in backend
        var $charSet = 'iso-8859-1';
        
-               // Array with alternative charsets for other languages.
-       var $charSetArray = array(
-               'dk' => '',
-               'de' => '',
-               'no' => '',
-               'it' => '',
-               'fr' => '',
-               'es' => '',
-               'nl' => '',
-               'cz' => 'windows-1250',
-               'pl' => 'iso-8859-2',
-               'si' => 'windows-1250',
-               'fi' => '',
-               'tr' => 'iso-8859-9',
-               'se' => '',
-               'pt' => '',
-               'ru' => 'windows-1251',
-               'ro' => 'iso-8859-2',
-               'ch' => 'gb2312',
-               'sk' => 'windows-1250',
-               'lt' => 'windows-1257',
-               'is' => 'utf-8',
-               'hr' => 'windows-1250',
-               'hu' => 'iso-8859-2',
-               'gl' => '',
-               'th' => 'iso-8859-11',
-               'gr' => 'iso-8859-7',
-               'hk' => 'big5',
-               'eu' => '',
-               'bg' => 'windows-1251',
-               'br' => '',
-               'et' => 'iso-8859-4'
-       );
+               // Array with alternative charsets for other languages. (Moved to t3lib_cs, Set from csConvObj!)
+       var $charSetArray = array();
        
                // This is the url to the TYPO3 manual
        var $typo3_help_url= 'http://www.typo3.com/man_uk/';
@@ -138,16 +115,21 @@ class language {
        /**
         * Initializes the backend language.
         * This is for example done in typo3/template.php with lines like these:
-        * 
+        *
         * require (PATH_typo3.'sysext/lang/lang.php');
         * $LANG = t3lib_div::makeInstance('language');
         * $LANG->init($BE_USER->uc['lang']);
-        * 
+        *
         * @param       string          The language key (two character string from backend users profile)
         * @param       string          IGNORE. Not used.
-        * @return      void            
+        * @return      void
         */
        function init($lang,$altPath='')        {       
+
+                       // Initialize the conversion object:
+               $this->csConvObj = t3lib_div::makeInstance('t3lib_cs');
+               $this->charSetArray = $this->csConvObj->charSetArray;
+
                        // Internally setting the list of TYPO3 backend languages.
                $this->langSplit=TYPO3_languages;
 
@@ -162,9 +144,6 @@ class language {
                        }
                }
 
-                       // Initialize the conversion object:
-               $this->csConvObj = t3lib_div::makeInstance('t3lib_cs');
-
                        // If a forced charset is used and different from the charset otherwise used:
                if ($GLOBALS['TYPO3_CONF_VARS']['BE']['forceCharset'] && $GLOBALS['TYPO3_CONF_VARS']['BE']['forceCharset']!=$this->charSet)     {
                                // Set the forced charset:
@@ -184,10 +163,10 @@ class language {
 
        /**
         * Adds labels and image references from the backend modules to the internal moduleLabels array
-        * 
+        *
         * @param       array           Array with references to module labels, keys: ['labels']['tablabel'], ['labels']['tabdescr'], ['tabs']['tab']
         * @param       string          Module name prefix
-        * @return      void            
+        * @return      void
         * @see t3lib_loadModules
         */
        function addModuleLabels($arr,$prefix)  {
@@ -228,8 +207,8 @@ class language {
         * Will convert the input strings special chars (all above 127) to entities. The string is expected to be encoded in the charset, $this->charSet
         * This function is used to create strings that can be used in the Click Menu (Context Sensitive Menus). The reason is that the values that are dynamically written into the <div> layer is decoded as iso-8859-1 no matter what charset is used in the document otherwise (only MSIE, Mozilla is OK). So by converting we by-pass this problem.
         *
-        * @param       string  Input string    
-        * @return      string  Output string
+        * @param       string          Input string
+        * @return      string          Output string
         */
        function makeEntities($str)     {
                        // Convert string to UTF-8:
@@ -245,9 +224,9 @@ class language {
         * Used for confirm and alert boxes where we must make sure that any string content does not break the script AND want to make sure the charset is preserved.
         * Originally I used the JS function unescape() in combination with PHP function rawurlencode() in order to pass strings in a safe way. This could still be done for iso-8859-1 charsets but now I have applied the same method here for all charsets.
         *
-        * @param       string  Input string, encoded with $this->charSet       
-        * @return      string  Output string, a JavaScript function: "String.fromCharCode(......)"
-        */     
+        * @param       string          Input string, encoded with $this->charSet
+        * @return      string          Output string, a JavaScript function: "String.fromCharCode(......)"
+        */
        function JScharCode($str)       {
        
                        // Convert string to UTF-8:
@@ -262,10 +241,10 @@ class language {
        /**
         * Returns the label with key $index form the globally loaded $LOCAL_LANG array.
         * Mostly used from modules with only one LOCAL_LANG file loaded into the global space.
-        * 
+        *
         * @param       string          Label key
         * @param       boolean         If set, the return value is htmlspecialchar'ed
-        * @return      string          
+        * @return      string
         */
        function getLL($index,$hsc=0)   {
                // Get Local Language
@@ -278,11 +257,11 @@ class language {
        
        /**
         * Works like ->getLL() but takes the $LOCAL_LANG array used as the second argument instead of using the global array.
-        * 
+        *
         * @param       string          Label key
         * @param       array           $LOCAL_LANG array to get label key from
         * @param       boolean         If set, the return value is htmlspecialchar'ed
-        * @return      string          
+        * @return      string
         */
        function getLLL($index,$LOCAL_LANG,$hsc=0)      {
                // Get Local Language
@@ -299,10 +278,10 @@ class language {
         * Today all translations are based on $LOCAL_LANG variables. 'language-splitted' labels can therefore refer to a local-lang file + index instead!
         * It's highly recommended to use the 'local_lang' method (and thereby it's highly depreciated to use 'language-splitted' label strings)
         * Refer to 'Inside TYPO3' for more details
-        * 
+        *
         * @param       string          Label key/reference
         * @param       boolean         If set, the return value is htmlspecialchar'ed
-        * @return      string          
+        * @return      string
         */
        function sL($input,$hsc=0)      {
                if (strcmp(substr($input,0,4),'LLL:'))  {       // Using obsolete 'language-splitted' labels:
@@ -344,9 +323,9 @@ class language {
        /**
         * Loading $TCA_DESCR[$table]['columns'] with content from locallang files as defined in $TCA_DESCR[$table]['refs']
         * $TCA_DESCR is a global var
-        * 
+        *
         * @param       string          Table name found as key in global array $TCA_DESCR
-        * @return      void            
+        * @return      void
         */
        function loadSingleTableDescription($table)     {
                global $TCA_DESCR;
@@ -374,7 +353,7 @@ class language {
        
                                                        // Detecting 'hidden' labels, converting to normal fieldname
                                                if ($kParts[0]=='_')    $kParts[0]='';
-                                               if (substr($kParts[0],0,1)=='_')        {$kParts[0]=substr($kParts[0],1);}
+                                               if (substr($kParts[0],0,1)=='_')        { $kParts[0] = substr($kParts[0],1); }
        
                                                        // Add label:
                                                switch((string)$kParts[2])      {
@@ -393,7 +372,8 @@ class language {
 
        /**
         * Includes locallang file (and possibly additional localized version if configured for)
-        * 
+        * Read language labels will be merged with $LOCAL_LANG (if $setGlobal=1).
+        *
         * @param       string          $fileRef is a file-reference (see t3lib_div::getFileAbsFileName)
         * @param       boolean         Setting in global variable $LOCAL_LANG (or returning the variable)
         * @param       boolean         If $mergeLocalOntoDefault is set the local part of the $LOCAL_LANG array is merged onto the default part (if the local part exists) and the local part is unset.
@@ -406,19 +386,17 @@ class language {
                }
 
                        // Get default file:
-               $file = t3lib_div::getFileAbsFileName($fileRef);
-               if (@is_file($file))    {
-                               // Include main locallang file:
-                       include($file);
+               $llang = $this->readLLfile($fileRef);
+               
+               if (count($llang))      {
 
+                       $LOCAL_LANG = t3lib_div::array_merge_recursive_overrule($LOCAL_LANG,$llang);
+                       
                                // Localized addition?
                        $lFileRef = $this->localizedFileRef($fileRef);
                        if ($lFileRef && (string)$LOCAL_LANG[$this->lang]=='EXT')       {
-                               $lfile = t3lib_div::getFileAbsFileName($lFileRef);
-                               if (@is_file($lfile))   {
-                                               // Include subfile:
-                                       include($lfile);
-                               }
+                               $llang = $this->readLLfile($lFileRef);
+                               $LOCAL_LANG = t3lib_div::array_merge_recursive_overrule($LOCAL_LANG,$llang);
                        }
                        
                                // Overriding file?
@@ -442,7 +420,7 @@ class language {
        
        /**
         * Includes a locallang file and returns the $LOCAL_LANG array found inside.
-        * 
+        *
         * @param       string          Input is a file-reference (see t3lib_div::getFileAbsFileName) which, if exists, is included. That file is expected to be a 'local_lang' file containing a $LOCAL_LANG array.
         * @return      array           Value of $LOCAL_LANG found in the included file. If that array is found it's returned. Otherwise an empty array
         */
@@ -456,7 +434,7 @@ class language {
        
        /**
         * Returns localized fileRef (.[langkey].php)
-        * 
+        *
         * @param       string          Filename/path of a 'locallang.php' file
         * @return      string          Input filename with a '.[lang-key].php' ending added if $this->lang is not 'default'
         */