- Модуль: main
- Путь к файлу: ~/bitrix/modules/main/lib/localization/loc.php
- Класс: BitrixMainLocalizationLoc
- Вызов: Loc::loadLazy
static function loadLazy($code, $language)
{
if($code == '')
{
return;
}
//control of duplicates
if(!isset(self::$triedFiles[$language]))
{
self::$triedFiles[$language] = [];
}
$trace = MainDiagHelper::getBackTrace(4, DEBUG_BACKTRACE_IGNORE_ARGS);
$currentFile = null;
for($i = 3; $i >= 1; $i--)
{
if (isset($trace[$i]) && stripos($trace[$i]["function"], "GetMessage") === 0)
{
$currentFile = Path::normalize($trace[$i]["file"]);
//we suppose there is a language file even if it wasn't registered via loadMessages()
self::$lazyLoadFiles[$currentFile] = $currentFile;
break;
}
}
if($currentFile !== null && isset(self::$lazyLoadFiles[$currentFile]))
{
//in most cases we know the file containing the "code" - load it directly
if(!isset(self::$triedFiles[$language][$currentFile]))
{
self::loadLanguageFile($currentFile, $language, false);
self::$triedFiles[$language][$currentFile] = true;
}
unset(self::$lazyLoadFiles[$currentFile]);
}
if(!isset(self::$messages[$language][$code]))
{
//we still don't know which file contains the "code" - go through the files in the reverse order
$unset = array();
if(($file = end(self::$lazyLoadFiles)) !== false)
{
do
{
if(!isset(self::$triedFiles[$language][$file]))
{
self::loadLanguageFile($file, $language, false);
self::$triedFiles[$language][$file] = true;
}
$unset[] = $file;
if(isset(self::$messages[$language][$code]))
{
if(defined("BX_MESS_LOG") && $currentFile !== null)
{
file_put_contents(BX_MESS_LOG, 'CTranslateUtils::CopyMessage("'.$code.'", "'.$file.'", "'.$currentFile.'");'."n", FILE_APPEND);
}
break;
}
}
while(($file = prev(self::$lazyLoadFiles)) !== false);
}
foreach($unset as $file)
{
unset(self::$lazyLoadFiles[$file]);
}
}
if(!isset(self::$messages[$language][$code]) && defined("BX_MESS_LOG"))
{
file_put_contents(BX_MESS_LOG, $code.": not found for ".$currentFile."n", FILE_APPEND);
}
}