• Модуль: main
  • Путь к файлу: ~/bitrix/modules/main/lib/httpcontext.php
  • Класс: BitrixMainHttpContext
  • Вызов: HttpContext::initializeCulture
public function initializeCulture($definedSite = null, $definedLanguage = null): void
{
	$request = $this->getRequest();

	$language = null;
	$culture = null;
	$site = null;

	if ($definedSite === null && $request->isAdminSection())
	{
		$lang = $request->get('lang');
		if ($lang == '')
		{
			$lang = ConfigOption::get('main', 'admin_lid', 'ru');
		}

		if ($lang != '')
		{
			$language = LocalizationLanguageTable::getList([
				'filter' => ['=LID' => $lang, '=ACTIVE' => 'Y'],
				'cache' => ['ttl' => static::CACHE_TTL],
			])->fetchObject();
		}

		if (!$language)
		{
			// no language found - get default
			$language = LocalizationLanguageTable::getList([
				'filter' => ['=ACTIVE' => 'Y'],
				'order' => ['DEF' => 'DESC'],
				'cache' => ['ttl' => static::CACHE_TTL],
			])->fetchObject();
		}

		if ($language)
		{
			$culture = LocalizationCultureTable::getByPrimary($language->getCultureId(), ['cache' => ['ttl' => static::CACHE_TTL]])->fetchObject();
		}
	}
	else
	{
		if ($definedSite !== null)
		{
			$site = SiteTable::getByPrimary($definedSite, ['cache' => ['ttl' => static::CACHE_TTL]])->fetch();
			if (!$site)
			{
				throw new SystemException('Incorrect site: ' . $definedSite . '.');
			}
		}
		else
		{
			// get the site by domain or path
			$site = SiteTable::getByDomain($request->getHttpHost(), $request->getRequestedPageDirectory());
		}

		if ($site)
		{
			$languageId = $definedLanguage ?? $site['LANGUAGE_ID'];
			$language = LocalizationLanguageTable::getByPrimary($languageId, ['cache' => ['ttl' => static::CACHE_TTL]])->fetchObject();

			$culture = LocalizationCultureTable::getByPrimary($site['CULTURE_ID'], ['cache' => ['ttl' => static::CACHE_TTL]])->fetchObject();
		}
	}

	if ($culture === null || $language === null)
	{
		throw new SystemException("Culture not found, or there are no active sites or languages.");
	}

	$this->setLanguage($language);
	$this->setCulture($culture);

	if ($site)
	{
		$this->setSite(SiteTable::wakeUpObject($site));
	}
}