📄 language.php
字号:
<?php
/**
* @version $Id: language.php 8682 2007-08-31 18:36:45Z jinx $
* @package Joomla.Framework
* @subpackage I18N
* @copyright Copyright (C) 2005 - 2007 Open Source Matters. All rights reserved.
* @license GNU/GPL, see LICENSE.php
* Joomla! is free software. This version may have been modified pursuant
* to the GNU General Public License, and as distributed it includes or
* is derivative of works licensed under the GNU General Public License or
* other free or open source software licenses.
* See COPYRIGHT.php for copyright notices and details.
*/
// Check to ensure this file is within the rest of the frameworkdefined('JPATH_BASE') or die();
/**
* Languages/translation handler class
*
* @package Joomla.Framework
* @subpackage I18N
* @since 1.5
*/
class JLanguage extends JObject
{
/**
* Debug language, If true, highlights if string isn't found
*
* @var boolean
* @access protected * @since 1.5
*/
var $_debug = false; /** * The default language * * The default language is used when a language file in the requested language does not exist. * * @var string * @access protected * @since 1.5 */ var $_default = 'en-GB';
/**
* An array of orphaned text
*
* @var array
* @access protected * @since 1.5
*/
var $_orphans = array();
/**
* Array holding the language metadata
*
* @var array
* @access protected * @since 1.5
*/
var $_metadata = null;
/**
* The language to load
*
* @var string
* @access protected * @since 1.5
*/
var $_lang = null; /** * List of language files that have been loaded * * @var array of arrays * @access public * @since 1.5 */ var $_paths = array();
/**
* Transaltions
*
* @var array
* @access protected * @since 1.5
*/
var $_strings = null; /** * An array of used text, used during debugging * * @var array * @access protected * @since 1.5 */ var $_used = array();
/**
* Constructor activating the default information of the language
*
* @access protected
*/
function __construct($lang = null)
{
$this->_strings = array ();
if ( $lang == null ) {
$lang = $this->_default;
} $this->setLanguage($lang);
$this->load();
}
/**
* Returns a reference to a language object
*
* This method must be invoked as:
* <pre> $browser = &JLanguage::getInstance([$lang);</pre>
*
* @access public
* @param string $lang The language to use.
* @return JLanguage The Language object. * @since 1.5
*/
function & getInstance($lang)
{
$instance = new JLanguage($lang);
$reference = & $instance;
return $reference;
}
/**
* Translator function, mimics the php gettext (alias _) function
*
* @access public
* @param string $string The string to translate
* @param boolean $jsSafe Make the result javascript safe
* @return string The translation of the string * @since 1.5
*/
function _($string, $jsSafe = false)
{
//$key = str_replace( ' ', '_', strtoupper( trim( $string ) ) );echo '<br>'.$key;
$key = strtoupper($string);
$key = substr($key, 0, 1) == '_' ? substr($key, 1) : $key;
if (isset ($this->_strings[$key]))
{
$string = $this->_debug ? "•".$this->_strings[$key]."•" : $this->_strings[$key]; // Store debug information if ( $this->_debug )
{ $caller = $this->_getCallerInfo(); if ( ! array_key_exists($key, $this->_used ) ) { $this->_used[$key] = array(); } $this->_used[$key][] = $caller; }
}
else
{
if (defined($string))
{
$string = $this->_debug ? '!!'.constant($string).'!!' : constant($string); // Store debug information if ( $this->_debug )
{ $caller = $this->_getCallerInfo(); if ( ! array_key_exists($key, $this->_used ) ) { $this->_used[$key] = array(); } $this->_used[$key][] = $caller; }
}
else
{
if ($this->_debug)
{ $string = '??'.$string.'??'; $caller = $this->_getCallerInfo(); if ( ! array_key_exists($key, $this->_orphans ) ) { $this->_orphans[$key] = array(); }
$this->_orphans[$key][] = $caller;
}
}
}
if ($jsSafe) {
$string = addslashes($string);
}
return $string;
}
/** * Check if a language exists * * This is a simple, quick check for the directory that should contain language files for the given user. * * @access public * @param string $lang Language to check * @param string $basePath Optional path to check * @return boolean True if the language exists * @since 1.5 */ function exists($lang, $basePath = JPATH_BASE) { static $paths = array(); // Return false if no language was specified if ( ! $lang ) { return false; } $path = $basePath.DS.'language'.DS.$lang; // Return previous check results if it exists if ( isset($paths[$path]) ) { return $paths[$path]; } // Check if the language exists jimport('joomla.filesystem.folder'); $paths[$path] = JFolder::exists($path); return $paths[$path]; }
/**
* Loads a single language file and appends the results to the existing strings
*
* @access public
* @param string $extension The extension for which a language file should be loaded
* @param string $basePath The basepath to use
* @return boolean True, if the file has successfully loaded. * @since 1.5
*/
function load( $extension = 'joomla', $basePath = JPATH_BASE )
{
$path = JLanguage::getLanguagePath( $basePath, $this->_lang);
$filename = ( $extension == 'joomla' ) ? $this->_lang : $this->_lang . '.' . $extension ;
$filename = $path.DS.$filename.'.ini';
$result = false;
if (isset( $this->_paths[$extension][$filename] ))
{ // Strings for this file have already been loaded
$result = true;
}
else
{
// Load the language file
$result = $this->_load( $filename, $extension );
// Check if there was a problem with loading the file if ( $result === false )
{ // No strings, which probably means that the language file does not exist $path = JLanguage::getLanguagePath( $basePath, $this->_default); $filename = ( $extension == 'joomla' ) ? $this->_default : $this->_default . '.' . $extension ; $filename = $path.DS.$filename.'.ini'; $result = $this->_load( $filename, $extension ); }
}
return $result;
}
/**
* Loads a language file * * This method will not note the successful loading of a file - use load() instead
*
* @access private
* @param string The name of the file * @param string The name of the extension
* @return boolean True if new strings have been added to the language * @see JLanguage::load() * @since 1.5
*/
function _load( $filename, $extension = 'unknown' )
{ $result = false;
if ($content = @file_get_contents( $filename ))
{
$registry = new JRegistry();
$registry->loadINI($content);
$newStrings = $registry->toArray( ); if ( is_array( $newStrings) ) { $this->_strings = array_merge( $this->_strings, $newStrings); $result = true; }
}
// Record the result of loading the extension's file. if ( ! isset($this->_paths[$extension])) { $this->_paths[$extension] = array(); } $this->_paths[$extension][$filename] = $result;
return $result;
}
/**
* Get a matadata language property
*
* @access public
* @param string $property The name of the property
* @param mixed $default The default value
* @return mixed The value of the property * @since 1.5
*/
function get($property, $default = null)
{
if (isset ($this->_metadata[$property])) {
return $this->_metadata[$property];
}
return $default;
} /** * Determine who called JLanguage or JText * * @access private * @return array Caller information * @since 1.5 */ function _getCallerInfo() { // Try to determine the source if none was provided if ( ! function_exists('debug_backtrace') ) { return null; } $backtrace = debug_backtrace(); $info = array(); // Search through the backtrace to our caller $continue = true; while ( $continue && next($backtrace) )
{ $step = current($backtrace); $class = @ $step['class']; // We're looking for something outside of language.php if ( $class != 'JLanguage' && $class != 'JText') { $info['function'] = @ $step['function']; $info['class'] = $class; $info['step'] = prev($backtrace); // Determine the file and name of the file $info['file'] = @ $step['file']; $info['line'] = @ $step['line']; $continue = false; } } return $info; }
/**
* Getter for Name
*
* @access public
* @return string Official name element of the language * @since 1.5
*/
function getName() {
return $this->_metadata['name'];
} /** * Get a list of language files that have been loaded * * @access public * @param string $extension An option extension name * @return array * @since 1.5 */ function getPaths($extension = null) { if ( isset($extension) ) { if ( isset($this->_paths[$extension]) ) return $this->_paths[$extension];
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -