Таблица locales_location
Таблица locales_location является ключевым компонентом системы локализации Drupal. Она функционирует как карта, которая связывает исходные строки (хранящиеся в locales_source) с конкретными местами в коде, где эти строки используются. Эта информация критически важна для процесса сканирования и обновления строк перевода.
Поля
| Поле | Тип данных | Описание |
|---|---|---|
lid |
int |
Уникальный идентификатор локации. Первичный ключ, автоинкремент. |
sid |
int |
Внешний ключ, связывающий запись с исходной строкой. Ссылается на lid в таблице locales_source.
|
type |
varchar(50) |
Тип локации. Определяет контекст, в котором была найдена строка. Основные значения: javascript (для строк в JS-файлах) и php (для строк в PHP-коде, модулях, темах). |
name |
varchar(255) |
Имя объекта, в котором найдена строка. Для модулей и тем это их системное имя (например, system, user, views). Для других типов файлов может быть другим идентификатором. |
version |
varchar(20) |
Версия модуля, темы или ядра Drupal, к которой относится данная локация. Помогает отслеживать изменения строк между обновлениями. |
line |
int |
Номер строки в исходном файле, где была обнаружена переводимая строка. Значение 0 означает, что номер строки неизвестен или не применим.
|
Как это работает
При выполнении команды drush locale:check или через административный интерфейс (Отчёты > Перевод строк > Обновить) Drupal сканирует файлы исходного кода (модули, темы, ядро) в поиске функций, предназначенных для перевода: t(), \Drupal::translation()->translate() и других.
Для каждой найденной строки создается или обновляется запись в таблице locales_source, куда помещается сам текст. Параллельно в таблицу locales_location записывается информация о том, ⁅i⁆где⁅/i⁆ эта строка была найдена: в каком файле (name, type), на какой строке (line) и для какой версии (version).
Одна и та же исходная строка (sid) может иметь несколько записей в locales_location, если она используется в нескольких местах кода. Это нормально и ожидаемо.
Данные из этой таблицы используются интерфейсом перевода для предоставления контекста переводчику, а также системой для очистки устаревших строк. При последующем сканировании, если строка больше не находится в коде, её запись в locales_location удаляется. Если у строки не остается ни одной локации, она считается устаревшей и может быть удалена из locales_source.
Пример SQL-запроса
Получить все места расположения для конкретной строки перевода можно следующим запросом:
SELECT ll.type, ll.name, ll.version, ll.line
FROM locales_location ll
INNER JOIN locales_source ls ON ll.sid = ls.lid
WHERE ls.source = 'Log in';
Смотрите также
-
таблицу
locales_source,
которая хранит исходные строки для перевода -
таблицу
locales_target,
которая хранит готовые переводы строк -
таблицу
languages,
которая содержит список доступных языков на сайте -
таблицу
cache_discovery,
которая кэширует данные, обнаруженные при сканировании кода