• Модуль: 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);
	}
}