Стажировка на реальных проектах:
наполнение портфолио, помощь с работой и заказами, пробные собеседования. Жми для подробностей→
130 of 182 menu
Внимание! Репетиторство по Python! Осталось последнее место! Стоимость: 20$ за занятие 1.5 часа. Жми для подробностей!

Таблица 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,
    которая кэширует данные, обнаруженные при сканировании кода