Verzeichnisstruktur phpBB-3.2.0
- Veröffentlicht
- 06.01.2017
So funktioniert es
|
Auf das letzte Element klicken. Dies geht jeweils ein Schritt zurück |
Auf das Icon klicken, dies öffnet das Verzeichnis. Nochmal klicken schließt das Verzeichnis. |
|
(Beispiel Datei-Icons)
|
Auf das Icon klicken um den Quellcode anzuzeigen |
language_file_loader.php
001 <?php
002 /**
003 *
004 * This file is part of the phpBB Forum Software package.
005 *
006 * @copyright (c) phpBB Limited <https://www.phpbb.com>
007 * @license GNU General Public License, version 2 (GPL-2.0)
008 *
009 * For full copyright and license information, please see
010 * the docs/CREDITS.txt file.
011 *
012 */
013
014 namespace phpbb\language;
015
016 use \phpbb\language\exception\language_file_not_found;
017
018 /**
019 * Language file loader
020 */
021 class language_file_loader
022 {
023 /**
024 * @var string Path to phpBB's root
025 */
026 protected $phpbb_root_path;
027
028 /**
029 * @var string Extension of PHP files
030 */
031 protected $php_ext;
032
033 /**
034 * @var \phpbb\extension\manager Extension manager
035 */
036 protected $extension_manager;
037
038 /**
039 * Constructor
040 *
041 * @param string $phpbb_root_path Path to phpBB's root
042 * @param string $php_ext Extension of PHP files
043 */
044 public function __construct($phpbb_root_path, $php_ext)
045 {
046 $this->phpbb_root_path = $phpbb_root_path;
047 $this->php_ext = $php_ext;
048
049 $this->extension_manager = null;
050 }
051
052 /**
053 * Extension manager setter
054 *
055 * @param \phpbb\extension\manager $extension_manager Extension manager
056 */
057 public function set_extension_manager(\phpbb\extension\manager $extension_manager)
058 {
059 $this->extension_manager = $extension_manager;
060 }
061
062 /**
063 * Loads language array for the given component
064 *
065 * @param string $component Name of the language component
066 * @param string|array $locale ISO code of the language to load, or array of ISO codes if you want to
067 * specify additional language fallback steps
068 * @param array $lang Array reference containing language strings
069 */
070 public function load($component, $locale, &$lang)
071 {
072 $locale = (array) $locale;
073
074 // Determine path to language directory
075 $path = $this->phpbb_root_path . 'language/';
076
077 $this->load_file($path, $component, $locale, $lang);
078 }
079
080 /**
081 * Loads language array for the given extension component
082 *
083 * @param string $extension Name of the extension
084 * @param string $component Name of the language component
085 * @param string|array $locale ISO code of the language to load, or array of ISO codes if you want to
086 * specify additional language fallback steps
087 * @param array $lang Array reference containing language strings
088 */
089 public function load_extension($extension, $component, $locale, &$lang)
090 {
091 // Check if extension manager was loaded
092 if ($this->extension_manager === null)
093 {
094 // If not, let's return
095 return;
096 }
097
098 $locale = (array) $locale;
099
100 // Determine path to language directory
101 $path = $this->extension_manager->get_extension_path($extension, true) . 'language/';
102
103 $this->load_file($path, $component, $locale, $lang);
104 }
105
106 /**
107 * Prepares language file loading
108 *
109 * @param string $path Path to search for file in
110 * @param string $component Name of the language component
111 * @param array $locale Array containing language fallback options
112 * @param array $lang Array reference of language strings
113 */
114 protected function load_file($path, $component, $locale, &$lang)
115 {
116 // This is BC stuff and not the best idea as it makes language fallback
117 // implementation quite hard like below.
118 if (strpos($this->phpbb_root_path . $component, $path) === 0)
119 {
120 // Filter out the path
121 $path_diff = str_replace($path, '', dirname($this->phpbb_root_path . $component));
122 $language_file = basename($component, '.' . $this->php_ext);
123 $component = '';
124
125 // This step is needed to resolve language/en/subdir style $component
126 // $path already points to the language base directory so we need to eliminate
127 // the first directory from the path (that should be the language directory)
128 $path_diff_parts = explode('/', $path_diff);
129
130 if (sizeof($path_diff_parts) > 1)
131 {
132 array_shift($path_diff_parts);
133 $component = implode('/', $path_diff_parts) . '/';
134 }
135
136 $component .= $language_file;
137 }
138
139 // Determine filename
140 $filename = $component . '.' . $this->php_ext;
141
142 // Determine path to file
143 $file_path = $this->get_language_file_path($path, $filename, $locale);
144
145 // Load language array
146 $this->load_language_file($file_path, $lang);
147 }
148
149 /**
150 * This function implements language fallback logic
151 *
152 * @param string $path Path to language directory
153 * @param string $filename Filename to load language strings from
154 *
155 * @return string Relative path to language file
156 *
157 * @throws language_file_not_found When the path to the file cannot be resolved
158 */
159 protected function get_language_file_path($path, $filename, $locales)
160 {
161 $language_file_path = $filename;
162
163 // Language fallback logic
164 foreach ($locales as $locale)
165 {
166 $language_file_path = $path . $locale . '/' . $filename;
167
168 // If we are in install, try to use the updated version, when available
169 if (defined('IN_INSTALL'))
170 {
171 $install_language_path = str_replace('language/', 'install/update/new/language/', $language_file_path);
172 if (file_exists($install_language_path))
173 {
174 return $install_language_path;
175 }
176 }
177
178 if (file_exists($language_file_path))
179 {
180 return $language_file_path;
181 }
182 }
183
184 // The language file is not exist
185 throw new language_file_not_found('Language file ' . $language_file_path . ' couldn\'t be opened.');
186 }
187
188 /**
189 * Loads language file
190 *
191 * @param string $path Path to language file to load
192 * @param array $lang Reference of the array of language strings
193 */
194 protected function load_language_file($path, &$lang)
195 {
196 // Do not suppress error if in DEBUG mode
197 if (defined('DEBUG'))
198 {
199 include $path;
200 }
201 else
202 {
203 @include $path;
204 }
205 }
206 }
207