⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 language.php

📁 Joomla15 - 最新开源CMS
💻 PHP
📖 第 1 页 / 共 2 页
字号:
<?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 ? "&bull;".$this->_strings[$key]."&bull;" : $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 + -