• Модуль: translate
  • Путь к файлу: ~/bitrix/modules/translate/lib/controller/export/exportaction.php
  • Класс: BitrixTranslateControllerExportExportAction
  • Вызов: ExportAction::mergeLangFiles
public function mergeLangFiles(
	string $langFilePath,
	array $fullLangFilePaths,
	bool $collectUntranslated = false,
	array $filterByCodeList = []
): array
{
	$mergedContent = [];

	$rowLang0 = [];
	foreach ($this->languages as $langId)
	{
		$rowLang0[$langId] = '';
	}

	$filterByCode = !empty($filterByCodeList);

	foreach ($this->languages as $langId)
	{
		if (empty($fullLangFilePaths[$langId]))
		{
			continue;
		}

		$fullPath = $fullLangFilePaths[$langId];
		$file = new TranslateFile($fullPath);
		$file->setLangId($langId);

		if ($this->convertEncoding)
		{
			$file->setOperatingEncoding($this->encodingOut);
		}
		else
		{
			$file->setOperatingEncoding(MainLocalizationTranslation::getSourceEncoding($langId));
		}

		if (!$file->loadTokens())
		{
			if (!$file->load())
			{
				continue;
			}
		}

		foreach ($file as $code => $phrase)
		{
			if ($filterByCode)
			{
				if (!in_array($code, $filterByCodeList))
				{
					continue;
				}
			}
			if (!isset($mergedContent[$code]))
			{
				$mergedContent[$code] = array_merge(['file' => $langFilePath, 'key' => $code], $rowLang0);
			}
			$mergedContent[$code][$langId] = $phrase;
		}
	}

	if ($collectUntranslated)
	{
		// settings
		$hasObligatorySetting = false;
		if ($settingsFile = TranslateSettings::instantiateByPath(self::$documentRoot. '/'. $langFilePath))
		{
			if ($settingsFile->load())
			{
				$langSettings = $settingsFile->getOptions($langFilePath);
				$hasObligatorySetting = !empty($langSettings[TranslateSettings::OPTION_LANGUAGES]);
			}
		}

		foreach ($mergedContent as $code => $row)
		{
			foreach ($row as $langId => $phr)
			{
				if ($langId == 'file' || $langId == 'key')
				{
					continue;
				}
				$isObligatory = true;
				if ($hasObligatorySetting)
				{
					$isObligatory = in_array($langId, $langSettings[TranslateSettings::OPTION_LANGUAGES]);
				}
				if (empty($phr) && ($phr !== '0') && $isObligatory)
				{
					continue 2;
				}
			}
			unset($mergedContent[$code]);
		}
	}

	return $mergedContent;
}