• Модуль: translate
  • Путь к файлу: ~/bitrix/modules/translate/lib/io/directory.php
  • Класс: BitrixTranslateIODirectory
  • Вызов: Directory::copyLangOnly
public function copyLangOnly(
	MainIODirectory $target,
	string $languageId,
	bool $convertEncoding = false,
	string $sourceEncoding = '',
	string $targetEncoding = ''
): bool
{
	if (mb_strpos($target->getPhysicalPath(), $this->getPhysicalPath()) === 0)
	{
		$this->addError(new MainError('Destination is inside in the source folder.'));

		return false;
	}
	if (!$this->isExists())
	{
		$this->addError(new MainError('Source is not exists.'));

		return false;
	}

	$children = $this->getChildren();

	$retFlag = true;

	/** @var MainIODirectory $dir */
	foreach ($children as $dir)
	{
		$dirName = $dir->getName();
		if (
			!$dir instanceof MainIODirectory ||
			!$dir->isDirectory() ||
			in_array($dirName, TranslateIGNORE_FS_NAMES, true)
		)
		{
			continue;
		}

		if ($dirName === 'lang' || $dirName === 'payment')
		{
			$source = new self($dir->getPhysicalPath(). '/'. $languageId);
			if ($source->isExists())
			{
				if (!$target->isExists())
				{
					$target->create();
				}
				$targetDir = $target->createSubdirectory($dirName)->createSubdirectory($languageId);

				$res = $source->copy(
					$targetDir,
					true,
					true,
					$convertEncoding,
					$sourceEncoding,
					$targetEncoding
				);
				if (!$res)
				{
					$retFlag = false;
					$this->addErrors($source->getErrors());
				}
			}
		}
		else
		{
			$source = new self($dir->getPhysicalPath());
			$res = $source->copyLangOnly(
				(new MainIODirectory($target->getPhysicalPath(). '/'. $dirName)),
				$languageId,
				$convertEncoding,
				$sourceEncoding,
				$targetEncoding
			);
			if (!$res)
			{
				$retFlag = false;
				$this->addErrors($source->getErrors());
			}
		}
	}

	return $retFlag;
}