Как можно перевести сообщения об ошибках в полях формы Contact Form 7?

Я использую Polylang и попытался реализовать перевод ошибок в Contact Form 7 с помощью следующего кода: <br/> <pre><code class="php">add_filter('wpcf7_validate', 'custom_cf7_error_messages', 10, 2);

function custom_cf7_error_messages($result, $tags) {
    $current_lang = pll_current_language();

    if ($current_lang == 'en') {
        if (isset($result-&gt;messages['invalid_required'])) {
            $result-&gt;messages['invalid_required'] = 'This field is required';
        }
        if (isset($result-&gt;messages['invalid_email'])) {
            $result-&gt;messages['invalid_email'] = 'Please enter a valid email address';
        }
    }

    return $result;
}</code></pre> Как можно улучшить этот код для поддержки других языков?
  • 1 ноября 2024 г. 6:32
Ответы на вопрос 2
Чтобы сделать ваш код более универсальным и поддерживать множество языков, можно использовать массив для хранения сообщений об ошибках для различных языков. Также стоит учитывать возможность перевода ошибок в зависимости от конфигурации Polylang. Вот улучшенный пример вашего кода:

```php
add_filter('wpcf7_validate', 'custom_cf7_error_messages', 10, 2);

function custom_cf7_error_messages($result, $tags) {
    $current_lang = pll_current_language();

    // Массив с переводами ошибок
    $error_messages = array(
        'en' => array(
            'invalid_required' => 'This field is required',
            'invalid_email' => 'Please enter a valid email address',
        ),
        'ru' => array(
            'invalid_required' => 'Это поле обязательно для заполнения',
            'invalid_email' => 'Пожалуйста, введите действительный адрес электронной почты',
        ),
        // Добавьте другие языки по аналогии
    );

    // Проверка, существует ли язык в массиве
    if (array_key_exists($current_lang, $error_messages)) {
        foreach ($error_messages[$current_lang] as $error_code => $error_message) {
            if (isset($result->messages[$error_code])) {
                $result->messages[$error_code] = $error_message;
            }
        }
    }

    return $result;
}
```

В этом улучшенном коде:
1. Создается массив `$error_messages`, который содержит переводы для разных языков.
2. Используется перебор для установки сообщений об ошибках в зависимости от текущего языка.
3. Если вы хотите добавить больше языков, просто добавьте аналогичные блоки в массив.

Все это делает код более удобным для расширения и управления сообщениями об ошибках на разных языках.
Возможно нужен CF7 Polylang . (я его не юзал) 

Но я обычно делаю под каждый язык свою форму. Так проще в управлении

АПД , судя по видео плагин делает тоже самое, только ещё управляет выводом. :)
Похожие вопросы