В современном мире сайты часто поддерживают несколько языков, и формы обратной связи должны корректно работать для каждого языка. В этой статье разберём, как создать многоязычную форму с помощью Contact Form 7, чтобы пользователи видели форму на своём языке и данные правильно обрабатывались.
Почему важна многоязычность форм Contact Form 7
Если ваш сайт доступен на нескольких языках, нужно, чтобы формы были переведены и адаптированы под каждый из них. Простое дублирование форм с разными языковыми версиями может привести к путанице в обработке данных и усложнит поддержку. Поэтому лучше использовать инструменты и подходы, которые позволяют централизованно управлять формами и их переводами.
Contact Form 7 сам по себе не имеет встроенной поддержки многоязычности, но отлично интегрируется с популярными плагинами для перевода, например, Polylang или WPML.
Интеграция Contact Form 7 с Polylang и WPML
Использование Polylang
Polylang — бесплатный и популярный плагин для многоязычности. Для создания многоязычных форм нужно:
- Создать отдельные формы Contact Form 7 для каждого языка.
- В редакторе страниц выводить нужную форму в зависимости от текущего языка.
- Использовать шорткоды форм в страницах, переведённых через Polylang.
Важно сохранить одинаковую структуру форм, чтобы обработка данных была однородной.
Использование WPML
WPML — платный плагин с расширенными возможностями. Он позволяет переводить формы Contact Form 7 через интерфейс локализации:
- Сначала создайте форму на основном языке.
- В разделе String Translation найдите строки формы и переведите их.
- WPML автоматически заменит текст формы в зависимости от языка сайта.
Также можно создать отдельные формы для каждого языка и связать их через WPML.
Динамическая загрузка формы в зависимости от языка
Если вы хотите выводить одну и ту же страницу с разными формами в зависимости от языка, используйте следующий подход:
function contactform7ru_get_form_by_language() {
$lang = pll_current_language(); // Функция Polylang
switch ($lang) {
case 'en':
return do_shortcode('[contact-form-7 id="123" title="Contact Form English"]');
case 'de':
return do_shortcode('[contact-form-7 id="124" title="Contact Form German"]');
default:
return do_shortcode('[contact-form-7 id="125" title="Contact Form Russian"]');
}
}
// Используйте в шаблоне
echo contactform7ru_get_form_by_language();
Для WPML можно использовать аналогичный код, заменив функцию pll_current_language() на apply_filters( 'wpml_current_language', NULL ).
Перевод сообщений и ошибок Contact Form 7
Contact Form 7 использует языковые файлы .mo/.po, но сообщения об ошибках и подтверждения можно дополнительно настроить в админке. Для многоязычных сайтов:
- Убедитесь, что установлен и активен нужный языковой пакет Contact Form 7.
- Для кастомных сообщений используйте плагины перевода строк, например Loco Translate.
- Если нужно задать разные сообщения в зависимости от языка, можно использовать фильтр
wpcf7_validateс проверкой текущего языка.
Пример кастомной функции валидации с учётом языка
add_filter('wpcf7_validate_text*', 'contactform7ru_custom_validation', 20, 2);
function contactform7ru_custom_validation($result, $tag) {
$name = $tag->name;
$lang = function_exists('pll_current_language') ? pll_current_language() : 'ru';
if ($name == 'your-name') {
$value = isset($_POST[$name]) ? trim($_POST[$name]) : '';
if ($lang == 'en' && strlen($value) < 3) {
$result->invalidate($tag, 'Please enter at least 3 characters');
} elseif ($lang == 'ru' && strlen($value) < 5) {
$result->invalidate($tag, 'Пожалуйста, введите не менее 5 символов');
}
}
return $result;
}
Такая функция позволит показывать разные сообщения для валидации в зависимости от языка сайта.
Советы по оптимизации и поддержке многоязычных форм
- Используйте одинаковую структуру форм на всех языках, это облегчает обновление и поддержку.
- Храните переводы в отдельных плагинах или файлах, чтобы не потерять их при обновлениях.
- Проверьте работу форм на всех языках, убедитесь, что почтовые уведомления приходят корректно и данные не смешиваются.
- Для сложных интеграций с CRM или другими сервисами учитывайте язык при отправке данных.
Если вы хотите расширить функциональность Contact Form 7 и упростить управление формами, обратите внимание на плагины из WPShop, которые могут помочь с локализацией и кастомизацией.