Стандарты перевода в WordPress продолжают развиваться, и формат XTD (Extended Translation Data) становится все более популярным для более гибкой локализации. В этой статье разберём, как создать и настроить автообновляемый файл перевода по стандарту XTD для темы или плагина WordPress, а также как автоматизировать его обновление и интеграцию в сайт.
Что такое формат XTD и зачем он нужен в WordPress?
Формат XTD расширяет привычные PO/MO-файлы, добавляя дополнительные метаданные и контекст для переводчиков. Это помогает сделать переводы более точными и качественными, особенно когда в проекте много похожих строк или сложных фраз. В отличие от классических PO-файлов, XTD поддерживает более детальную структуру, например, комментарии, контекст и связи между строками.
Использование XTD особенно актуально для проектов с большим количеством языков и сложными текстовыми элементами, например, многоязычные сайты с динамическим контентом.
WordPress пока не поддерживает XTD «из коробки», но с помощью специальных библиотек и плагинов можно интегрировать этот формат в рабочий процесс локализации.
Подготовка проекта к работе с XTD: инструменты и плагины
Для работы с XTD-файлами понадобятся следующие инструменты:
- Poedit Pro — одна из немногих программ, поддерживающих XTD, позволяет редактировать и экспортировать файлы в этом формате.
- WPML или Loco Translate
- Custom скрипты на PHP для автоматической генерации и обновления XTD-файлов из исходных текстов темы или плагина.
Также рекомендуем ознакомиться с PHP-библиотекой GlotPress XTD — она позволяет работать с XTD на уровне кода.
Как создать XTD-файл перевода вручную
Для начала создадим простой XTD-файл для темы. Предположим, у нас есть тема с текстом:
<?php
echo esc_html__('Hello, world!', 'wplangs');
?>
В Poedit Pro создаём новый проект, указываем исходные языковые строки и экспортируем в XTD. В отличие от PO, XTD-файл будет содержать расширенный контекст.
Пример базовой структуры XTD-файла:
<xtd version="1.0">
<file>
<header>
<project-name>wplangs-theme</project-name>
<language>ru</language>
</header>
<translation-unit id="1">
<source>Hello, world!</source>
<target>Привет, мир!</target>
<context>greeting</context>
<note>Основной приветственный текст</note>
</translation-unit>
</file>
</xtd>
Такой файл можно загружать на сайт для локализации, но для автоматизации лучше использовать скрипты.
Автоматизация создания и обновления XTD-файлов в WordPress
Чтобы не обновлять переводы вручную, создадим PHP-функцию, которая будет сканировать исходники темы или плагина, извлекать строки для перевода и формировать XTD-файл.
Пример функции wplangs_generate_xtd():
function wplangs_generate_xtd($source_dir, $output_file) {
$strings = [];
$iterator = new RecursiveIteratorIterator(new RecursiveDirectoryIterator($source_dir));
foreach ($iterator as $file) {
if ($file->getExtension() === 'php') {
$content = file_get_contents($file->getPathname());
preg_match_all('/__\(\'(.+?)\',\s*\'(.+?)\'/s', $content, $matches);
foreach ($matches[1] as $key => $string) {
$domain = $matches[2][$key];
$strings[$string] = [
'context' => 'default',
'note' => 'Автоматический сбор',
];
}
}
}
$xml = new SimpleXMLElement('<xtd version="1.0"><file></file></xtd>');
$xmlFile = $xml->file;
$header = $xmlFile->addChild('header');
$header->addChild('project-name', 'wplangs-project');
$header->addChild('language', 'ru');
$id = 1;
foreach ($strings as $string => $data) {
$tu = $xmlFile->addChild('translation-unit');
$tu->addAttribute('id', $id++);
$tu->addChild('source', htmlspecialchars($string));
$tu->addChild('target', '');
$tu->addChild('context', $data['context']);
$tu->addChild('note', $data['note']);
}
$xml->asXML($output_file);
}
Эта функция сканирует все PHP-файлы в указанной директории, извлекает строки для перевода, использующие функцию __(), и генерирует XTD-файл с базовым контекстом и пустыми переводами.
Интеграция XTD-переводов в WordPress
Чтобы WordPress мог использовать XTD-файлы, нужно преобразовывать их в PO/MO формат, который WordPress распознаёт. Для этого можно использовать связку скриптов или плагины, которые конвертируют XTD в PO при обновлении.
Например, можно настроить задачу cron, которая будет запускать конвертацию с помощью утилит Poedit Pro или кастомного PHP-скрипта, основанного на библиотеке GlotPress XTD.
Также можно дополнить функцию загрузки текстового домена, чтобы она сначала пыталась загрузить XTD, а при невозможности — fallback на PO.
Использование плагина Clearfy Pro для оптимизации перевода
Плагин Clearfy Pro помогает управлять загрузкой языковых файлов и оптимизировать работу с переводами. Он позволяет отключать ненужные языковые файлы и кешировать переводы, что ускоряет загрузку сайта.
Совместно с XTD-автоматизацией Clearfy Pro обеспечит более плавный и быстрый процесс локализации.
Резюме и рекомендации
Работа с форматом XTD в WordPress — это шаг к более профессиональной и точной локализации, особенно для сложных проектов. Автоматизация генерации и обновления XTD-файлов помогает не тратить время на ручные операции и поддерживать актуальность переводов.
Рекомендуется внедрять XTD как часть общего процесса локализации, используя инструменты, которые поддерживают конвертацию в привычные для WordPress форматы PO/MO. Для оптимизации работы с переводами стоит обратить внимание на плагины, например, Clearfy Pro.
Если вы хотите глубже погрузиться в тему XTD для WordPress, советуем изучить документацию GlotPress и возможности Poedit Pro.