Индексатор использования фраз
Считает, в скольких файлах проекта встречается каждая фраза словаря. Запускается с экрана Индексация.
Как устроен прогон
- На первом шаге — один общий проход по дереву PHP-файлов, с исключением служебных каталогов. Строится карта «фраза — сколько файлов».
- Блокировка сессии освобождается сразу, чтобы не подвешивать другие вкладки админки.
- Промежуточное состояние хранится во временном файле, а не в сессии.
- Дальше каждый шаг записывает счётчики пачкой и двигает курсор.
- По завершении временный файл удаляется.
Клиентский таймаут на странице больше серверного намеренно: первый шаг обходит всё дерево проекта, и рвать его на середине нельзя.
Что именно ищется
Два набора образцов.
Вызовы модуля — Lang::get и LANG_VAR с кодом фразы в кавычках, с полным
именем пространства имён и без него.
Штатные вызовы Битрикса — GetMessage, Loc::getMessage и прямое
обращение к массиву сообщений.
Код длиннее 250 символов не учитывается. Файл с вхождением считается один раз, сколько бы раз фраза в нём ни встретилась.
Образцы ожидают одинарные кавычки вокруг кода; для двойных у вызовов модуля есть отдельная ветка.
Точка расширения
Если у вас своя обёртка над словарём, добавьте её образец в список образцов
первого набора — метод CodeScanner::getPassAPatterns().
Без этого все фразы, выведенные через обёртку, будут числиться неиспользуемыми и попадать в кандидаты на удаление. См. Своя обёртка для переводов.
Исключения путей
Список исключённых каталогов лежит в сканере; обычно достаточно дописать туда свой путь.
Исключаются загрузки, кеш, каталоги зависимостей и сам модуль. Последнее существенно: внутри модуля кодов фраз много, и без исключения счётчики были бы завышены у всех служебных фраз.
Чего индексатор не может
Он читает текст файлов, а не выполняет их. Поэтому код фразы, собранный в программе из кусков, он не видит в принципе, и такие фразы всегда числятся неиспользуемыми.
Это не недоработка, а граница метода. Выполнять код проекта, чтобы узнать, какие фразы он позовёт, нельзя ни при каких обстоятельствах.