WPML хранит данные о языках, переводах и строках в собственных таблицах базы данных. Узнайте, как они связаны с таблицами и контентом WordPress.
Модель базы данных WPML
На следующей схеме показана модель таблиц, которые использует WPML:

Таблица языков и переводов
Таблица, в которой хранится информация о языках и переводах, называется icl_translations.
- Каждый элемент контента сайта, настроенный как переводимый (запись, страница, метка, рубрика, произвольный тип записи и произвольные таксономии), имеет запись в этой таблице. Примечание: комментарии не переводятся, но они имеют запись в icl_translations, поскольку им назначена информация о языке.
- В записи указывается язык элемента и группа перевода (тип элемента), к которой он принадлежит.
- Записи одного и того же кластера перевода имеют одинаковое значение в столбцах element_type и trid.
- Запись без исходного языка (NULL) в том же кластере является исходной записью.
Она содержит следующие столбцы:
- translation_id — порядковый номер
- element_type — тип элемента. Это значение объясняется и извлекается в хуке wpml_element_type.
- element_id — ID элемента (post_id для типов записей, term_taxonomy_id для терминов таксономии)
- trid — ID группы перевода
- language_code — код языка элемента
- source_language_code — если переведено, язык оригинального элемента
Например, если у нас есть английская запись с ID=3, которая переведена на испанский, и испанский перевод имеет ID=7, таблица icl_translations будет выглядеть так:
| translation_id | element_type | element_id | trid | language_code | source_language_code |
|---|---|---|---|---|---|
| 1 | post_post | 3 | 2 | en | NULL |
| 2 | post_post | 7 | 2 | es | en |
| * Поскольку две записи имеют одинаковое значение trid, они являются переводами друг друга. Само по себе значение неважно. | |||||

WPML также может оптимизировать таблицы переводов на сайте, таблицы которого увеличились в размере.
Таблица флагов стран
В комплект WPML входит большая коллекция флагов стран. Имейте в виду, что связывание языков со странами может быть проблематичным. На многих языках говорят (иногда по-разному) в разных странах. Тем не менее, флаги стран по-прежнему являются полезным визуальным ориентиром и помогают посетителям легко находить свой язык.
Флаги стран WPML хранятся в каталоге res/flags, а таблица icl_flags указывает, какой флаг возвращать для каждой страны. Столбцы таблицы icl_flags:
- id — порядковый номер
- lang_code — код языка
- flag — имя файла флага
- from_template — «0»: взять флаг из папки res/flags WPML, «1»: взять флаг из каталога темы
Если Вы хотите использовать другой флаг, перейдите в WPML → Настройки → Языки → Управление языками сайта и их скрытие, нажмите Изменить в строке языка и откройте список его флагов. Последний пункт, Загрузить пользовательский SVG, позволяет использовать Ваш собственный файл.

На этом же экране Вы можете добавить пользовательский язык.
Таблица перевода строк
Большинство сайтов WordPress содержат некоторые строки, которые не принадлежат ни к одному элементу (записи, странице, метке, рубрике), но их все равно нужно переводить — например, краткое описание блога.
WPML включает механизм под названием Перевод строк для обработки этих строк.
Строки хранятся в таблице icl_strings со следующими столбцами:
- id — порядковый номер
- language — язык
- context — контекст строки (указывает, к чему принадлежит строка)
- name — имя строки
- value — значение строки (ее содержимое)
- string_package_id — ID пакета, к которому принадлежит строка
- type — тип редактора, который следует использовать при редактировании строки через редактор переводов (LINE, AREA или VISUAL)
- title — заголовок строки для отображения в редакторе переводов
- status — статус перевода, указывающий, полностью ли переведена строка на все языки
- gettext_context — контекст, заданный в функции gettext, например _x
- domain_name_context_md5 — уникальный ключ для повышения производительности поиска
Переводы строки хранятся в таблице icl_string_translations:
- id — порядковый номер
- string_id — ID (порядковый номер) переводимой строки
- language — язык перевода
- status — статус перевода (завершен / не завершен)
- value — сам перевод
- translator_id — ID переводчика
- translation_service — сервис перевода, используемый для перевода строки. Может быть пустым, локальным или удаленным сервисом
- batch_id — ID пакета, когда строка переводится сервисом перевода
- translation_date — дата перевода

Все таблицы WPML
Вот полный список всех таблиц, которые использует WPML:
wp_icl_background_taskwp_icl_content_statuswp_icl_core_statuswp_icl_flagswp_icl_languageswp_icl_languages_translationswp_icl_locale_mapwp_icl_message_statuswp_icl_mo_files_domainswp_icl_nodewp_icl_reminderswp_icl_stringswp_icl_string_batcheswp_icl_string_packageswp_icl_string_positionswp_icl_string_statuswp_icl_string_translationswp_icl_translatewp_icl_translate_jobwp_icl_translationswp_icl_translation_batcheswp_icl_translation_downloadswp_icl_translation_status