Таблица locales_source
Таблица locales_source является фундаментальной частью системы локализации Drupal. Она хранит все строки, которые были обнаружены в коде (модулях, темах, профилях) и интерфейсе администратора и которые предназначены для перевода на другие языки.
Поля
| Поле | Тип данных | Описание |
|---|---|---|
lid |
int |
Уникальный идентификатор строки (⁅i⁆Locale ID⁅/i⁆). Первичный ключ, автоинкремент. |
source |
text |
Исходная строка на английском языке (или на другом языке по умолчанию), которая подлежит переводу. Это текст, который видит разработчик и переводчик. |
context |
varchar(255) |
Контекст строки. Необязательный параметр, позволяющий различать одинаковые исходные строки, которые могут иметь разные переводы в зависимости от контекста их использования (например, слово "Order" может означать "заказ" или "приказ"). |
version |
varchar(20) |
Версия Drupal core, в которой была введена или обновлена эта строка. Например, 10.1.0. Помогает системе обновлений отслеживать изменения в строках.
|
textgroup |
varchar(255) |
Группа текста, к которой принадлежит строка. Определяет, откуда строка была извлечена. Основные группы: default (строки из кода), entities (сущности), menu (меню), views (представления).
|
type |
varchar(255) |
Тип строки. Указывает, в каком контексте была найдена строка. Например: javascript, configuration, interface.
|
location |
text |
Путь или местоположение в исходном коде, откуда была извлечена эта строка. Может быть пустым для строк, добавленных через интерфейс. |
Как это работает
При включении модуля Locale и запуске процесса извлечения строк (через административный интерфейс /admin/config/regional/translate/import или с помощью Drush-команды drush locale:check) Drupal сканирует файлы ядра, модулей и тем на наличие функций, предназначенных для перевода (таких как t(), new TranslatableMarkup()).
Все найденные строки записываются в таблицу locales_source. Каждая запись представляет собой уникальную пару source + context.
Когда на сайте требуется отобразить интерфейс на неанглийском языке, система ищет исходную строку в locales_source, а затем по её lid находит соответствующий перевод в таблице locales_target для активного языка.
Если перевод для запрошенной строки не найден, будет отображен исходный текст из поля source. Администратор может вручную добавить или исправить переводы через интерфейс по адресу /admin/config/regional/translate, что приведет к обновлению связанной таблицы locales_target.
Пример SQL-запроса
Найти все строки, содержащие определенное слово, и информацию об их контексте:
SELECT lid, source, context, location
FROM locales_source
WHERE source LIKE '%comment%'
ORDER BY source;
Получить количество непереведенных строк для каждого языка можно с помощью запроса, который соединяет таблицы источников и переводов:
SELECT lt.language, COUNT(ls.lid) AS untranslated_count
FROM locales_source ls
CROSS JOIN (SELECT DISTINCT language FROM locales_target) lt
LEFT JOIN locales_target lt2 ON ls.lid = lt2.lid AND lt.language = lt2.language
WHERE lt2.translation IS NULL
GROUP BY lt.language;
Смотрите также
-
таблицу
locales_target,
которая хранит сами переводы строк на разные языки -
таблицу
locales_location,
которая содержит подробную информацию о местоположении строк в исходном коде -
таблицу
languages,
которая хранит список доступных языков на сайте -
таблицу
cache_locales,
которая кэширует данные локализации для повышения производительности