PDF rausgenommen
This commit is contained in:
206
msd2/phpBB3/phpbb/language/language_file_loader.php
Normal file
206
msd2/phpBB3/phpbb/language/language_file_loader.php
Normal file
@ -0,0 +1,206 @@
|
||||
<?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
|
||||
*
|
||||
* @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;
|
||||
}
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user