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