28 private $seekLangPath;
40 $this->
keepField([
'pathList',
'seekOffset',
'seekLangPath']);
53 public function run($pathList)
55 if ($this->isNewProcess)
57 $pathList = \preg_split(
"/[\r\n]+/", $pathList);
58 \array_walk($pathList,
'trim');
59 $pathList = \array_unique(\array_filter($pathList));
70 foreach ($pathList as $testPath)
76 $this->pathList[] = $testPath;
80 $this->
addError(
new Main\
Error(Loc::getMessage(
'TR_CLEAN_FILE_NOT_LANG', [
'#FILE#' => $testPath])));
87 $this->pathList[] = $testPath;
95 '=PATH' => \rtrim($testPath,
'/'),
96 '=%PATH' => \rtrim($testPath,
'/').
'/%'
99 'filter' => $pathFilter,
100 'order' => [
'ID' =>
'ASC'],
101 'select' => [
'PATH'],
103 while (
$pathLang = $pathLangRes->fetch())
111 $this->totalItems =
\count($this->pathList);
112 $this->processedItems = 0;
114 if ($this->totalItems == 0)
118 'PROCESSED_ITEMS' => 0,
124 $this->isNewProcess =
false;
135 private function runClearing():
array
137 $processedItemCount = 0;
138 for ($pos = ((
int)$this->seekOffset > 0 ? (
int)$this->seekOffset : 0), $total = \
count($this->pathList); $pos < $total; $pos ++)
140 $testPath = $this->pathList[$pos];
145 $this->cleanLangFile($testPath);
151 if (\mb_substr($testPath, -5) ===
'/lang')
153 $testPath .=
'/#LANG_ID#';
162 foreach ($filePaths as $langFilePath => $fullPaths)
164 if (!empty($this->seekLangPath))
166 if ($this->seekLangPath == $langFilePath)
168 $this->seekLangPath =
null;
174 $this->cleanLangFile($langFilePath);
178 $this->seekLangPath = $langFilePath;
183 $this->seekLangPath =
null;
187 $processedItemCount ++;
189 if (isset($this->pathList[$pos + 1]))
191 $this->seekOffset = $pos + 1;
195 $this->seekOffset =
null;
206 $this->processedItems += $processedItemCount;
228 private function cleanLangFile($relLangPath): void
230 $currentLang = Loc::getCurrentLang();
231 $langPath = Translate\IO\Path::replaceLangId($relLangPath, $currentLang);
232 $langFullPath = Translate\IO\Path::tidy(self::$documentRoot.
'/'. $langPath);
233 $langFullPath = Main\Localization\Translation::convertLangPath($langFullPath, $currentLang);
236 $langSettings =
null;
237 $settingsFile = Translate\Settings::instantiateByPath($langFullPath);
238 if (($settingsFile instanceof Translate\Settings) && $settingsFile->load())
240 $langSettings = $settingsFile->getOptions($langFullPath)[Translate\Settings::OPTION_LANGUAGES];
245 $ethalonFile = Translate\File::instantiateByPath($langFullPath);
247 catch (Main\ArgumentException $ex)
251 if ($ethalonFile instanceof Translate\File)
254 ->setLangId($currentLang)
257 $isEthalonExists =
false;
258 if ($ethalonFile->isExists())
260 $isEthalonExists = $ethalonFile->loadTokens() || $ethalonFile->load();
262 if (!$isEthalonExists)
267 foreach (self::$enabledLanguagesList as $langId)
269 if ($langId == $currentLang)
275 if ($langSettings && in_array($langId, $langSettings,
true))
281 $langPath = Translate\IO\Path::replaceLangId($relLangPath, $langId);
282 $langFullPath = Translate\IO\Path::tidy(self::$documentRoot.
'/'.$langPath);
283 $langFullPath = Main\Localization\Translation::convertLangPath($langFullPath, $langId);
287 $langFile = Translate\File::instantiateByPath($langFullPath);
289 catch (Main\ArgumentException $ex)
306 if (!isset($ethalonFile[
$code]))
341 return self::SETTING_ID;
static getSourceEncoding($lang)
static getList(array $parameters=array())