.=< { Star Gans Tq } >=.

  • Home

  • Killme
  • Download
  • Current Path : /home/m/e/h/meharicl/www/phpBB3/phpbb/language/
    Upload File
    @Command ~ $  
    Current File : /home/m/e/h/meharicl/www/phpBB3/phpbb/language/language_file_loader.php

    <?php
    /**
     *
     * This file is part of the phpBB Forum Software package.
     *
     * @copyright (c) phpBB Limited <https://www.phpbb.com>
     * @license GNU General Public License, version 2 (GPL-2.0)
     *
     * For full copyright and license information, please see
     * the docs/CREDITS.txt file.
     *
     */
    
    namespace phpbb\language;
    
    use phpbb\language\exception\language_file_not_found;
    
    /**
     * Language file loader
     */
    class language_file_loader
    {
    	/**
    	 * @var string	Path to phpBB's root
    	 */
    	protected $phpbb_root_path;
    
    	/**
    	 * @var string	Extension of PHP files
    	 */
    	protected $php_ext;
    
    	/**
    	 * @var \phpbb\extension\manager	Extension manager
    	 */
    	protected $extension_manager;
    
    	/**
    	 * Constructor
    	 *
    	 * @param string	$phpbb_root_path	Path to phpBB's root
    	 * @param string	$php_ext			Extension of PHP files
    	 */
    	public function __construct($phpbb_root_path, $php_ext)
    	{
    		$this->phpbb_root_path	= $phpbb_root_path;
    		$this->php_ext			= $php_ext;
    
    		$this->extension_manager = null;
    	}
    
    	/**
    	 * Extension manager setter
    	 *
    	 * @param \phpbb\extension\manager	$extension_manager	Extension manager
    	 */
    	public function set_extension_manager(\phpbb\extension\manager $extension_manager)
    	{
    		$this->extension_manager = $extension_manager;
    	}
    
    	/**
    	 * Loads language array for the given component
    	 *
    	 * @param string		$component	Name of the language component
    	 * @param string|array	$locale		ISO code of the language to load, or array of ISO codes if you want to
    	 * 									specify additional language fallback steps
    	 * @param array			$lang		Array reference containing language strings
    	 */
    	public function load($component, $locale, &$lang)
    	{
    		$locale = (array) $locale;
    
    		// Determine path to language directory
    		$path = $this->phpbb_root_path . 'language/';
    
    		$this->load_file($path, $component, $locale, $lang);
    	}
    
    	/**
    	 * Loads language array for the given extension component
    	 *
    	 * @param string		$extension	Name of the extension
    	 * @param string		$component	Name of the language component
    	 * @param string|array	$locale		ISO code of the language to load, or array of ISO codes if you want to
    	 * 									specify additional language fallback steps
    	 * @param array			$lang		Array reference containing language strings
    	 */
    	public function load_extension($extension, $component, $locale, &$lang)
    	{
    		// Check if extension manager was loaded
    		if ($this->extension_manager === null)
    		{
    			// If not, let's return
    			return;
    		}
    
    		$locale = (array) $locale;
    
    		// Determine path to language directory
    		$path = $this->extension_manager->get_extension_path($extension, true) . 'language/';
    
    		$this->load_file($path, $component, $locale, $lang);
    	}
    
    	/**
    	 * Prepares language file loading
    	 *
    	 * @param string	$path		Path to search for file in
    	 * @param string	$component	Name of the language component
    	 * @param array		$locale		Array containing language fallback options
    	 * @param array		$lang		Array reference of language strings
    	 */
    	protected function load_file($path, $component, $locale, &$lang)
    	{
    		// This is BC stuff and not the best idea as it makes language fallback
    		// implementation quite hard like below.
    		if (strpos($this->phpbb_root_path . $component, $path) === 0)
    		{
    			// Filter out the path
    			$path_diff = str_replace($path, '', dirname($this->phpbb_root_path . $component));
    			$language_file = basename($component, '.' . $this->php_ext);
    			$component = '';
    
    			// This step is needed to resolve language/en/subdir style $component
    			// $path already points to the language base directory so we need to eliminate
    			// the first directory from the path (that should be the language directory)
    			$path_diff_parts = explode('/', $path_diff);
    
    			if (count($path_diff_parts) > 1)
    			{
    				array_shift($path_diff_parts);
    				$component = implode('/', $path_diff_parts) . '/';
    			}
    
    			$component .= $language_file;
    		}
    
    		// Determine filename
    		$filename = $component . '.' . $this->php_ext;
    
    		// Determine path to file
    		$file_path = $this->get_language_file_path($path, $filename, $locale);
    
    		// Load language array
    		$this->load_language_file($file_path, $lang);
    	}
    
    	/**
    	 * This function implements language fallback logic
    	 *
    	 * @param string	$path		Path to language directory
    	 * @param string	$filename	Filename to load language strings from
    	 * @param array		$locales	Array containing language fallback options
    	 *
    	 * @return string	Relative path to language file
    	 *
    	 * @throws language_file_not_found	When the path to the file cannot be resolved
    	 */
    	protected function get_language_file_path($path, $filename, $locales)
    	{
    		$language_file_path = $filename;
    
    		// Language fallback logic
    		foreach ($locales as $locale)
    		{
    			$language_file_path = $path . $locale . '/' . $filename;
    
    			// If we are in install, try to use the updated version, when available
    			if (defined('IN_INSTALL'))
    			{
    				$install_language_path = str_replace('language/', 'install/update/new/language/', $language_file_path);
    				if (file_exists($install_language_path))
    				{
    					return $install_language_path;
    				}
    			}
    
    			if (file_exists($language_file_path))
    			{
    				return $language_file_path;
    			}
    		}
    
    		// The language file is not exist
    		throw new language_file_not_found('Language file ' . $language_file_path . ' couldn\'t be opened.');
    	}
    
    	/**
    	 * Loads language file
    	 *
    	 * @param string	$path	Path to language file to load
    	 * @param array		$lang	Reference of the array of language strings
    	 */
    	protected function load_language_file($path, &$lang)
    	{
    		// Do not suppress error if in DEBUG mode
    		if (defined('DEBUG'))
    		{
    			include $path;
    		}
    		else
    		{
    			@include $path;
    		}
    	}
    }