diff --git a/framework/core/CApplication.php b/framework/core/CApplication.php index 6dfd00dcf..77ac80b96 100644 --- a/framework/core/CApplication.php +++ b/framework/core/CApplication.php @@ -300,49 +300,33 @@ abstract class CApplication extends CComponent /** * Returns the localized version of a specified file. - * The searching is based on the specified language code. For a language code such as 'zh_cn', - * this method will check the existence of the following files in order: - *
  • path/to/zh_cn/fileName - *
  • path/to/zh/fileName - * The first existing file will be returned. If no localized file exists, the original file will be returned - * (even if it does not exist.) - * Note, the language codes used here should be in lower-case and the dashes - * be replaced with underscores (e.g. 'en_us' instead of 'en-US'). + * + * The searching is based on the specified language code. In particular, + * a file with the same name will be looked for under the subdirectory + * named as the locale ID. For example, given the file "path/to/view.php" + * and locale ID "zh_cn", the localized file will be looked for as + * "path/to/zh_cn/view.php". If the file is not found, the original file + * will be returned. + * + * For consistency, it is recommended that the locale ID is given + * in lower case and in the format of LanguageID_RegionID (e.g. "en_us"). + * * @param string the original file - * @param string the language that the original file is in. If null, the application {@link language} is used. + * @param string the language that the original file is in. If null, the application {@link sourceLanguage source language} is used. * @param string the desired language that the file should be localized to. If null, the {@link getLanguage application language} will be used. - * @return string the matching localized file. The original file is returned if no localized version is found. + * @return string the matching localized file. The original file is returned if no localized version is found + * or if source language is the same as the desired language. */ public function findLocalizedFile($srcFile,$srcLanguage=null,$language=null) { - static $files=array(); - if($srcLanguage===null) $srcLanguage=$this->sourceLanguage; if($language===null) $language=$this->getLanguage(); if($language===$srcLanguage) return $srcFile; - - if(isset($files[$srcFile][$language])) - return $files[$srcFile][$language]; - - $basePath=dirname($srcFile).DIRECTORY_SEPARATOR; - $fileName=basename($srcFile); - $langs=explode('_',$language); - - $paths=array(); - $pos=-1; - while(($pos=strpos($language,'_',$pos+1))!==false) - $paths[]=$basePath.substr($language,0,$pos).DIRECTORY_SEPARATOR.$fileName; - $paths[]=$basePath.$language; - - for($i=count($paths)-1;$i>=0;--$i) - { - if(is_file($paths[$i])) - return $files[$srcFile][$language]=$paths[$i]; - } - return $files[$srcFile][$language]=$srcFile; + $desiredFile=dirname($srcFile).DIRECTORY_SEPARATOR.$language.basename($srcFile); + return is_file($desiredFile) ? $desiredFile : $srcFile; } /**