Ninja Forms это крутой модуль-конструктор для создания пользовательских форм в WP. Это впечатление не покидает вас даже когда вы переходите к изучению API этого плагина. Сегодня я покажу приемы, как сделать ваши (ниндзя) формы мультиязычными.
О том, как устроена мультиязычность в WP, здесь я рассказывать не буду.
Один из способов:
Можно создать несколько форм для каждого из языков сайта и показывать их на соответствующих языковых страницах. Такой вариант не требует навыков программирования — нужно лишь аккуратно расставить шок-коды для вставки форм. Результаты ответов на разных языках будут храниться в соответствующих формах, и это может быть даже удобным :).
Но я расскажу о другом варианте, который мне кажется более верным.
Нашей задачей является применение ко всем строковым константам функции-обертки __(‘your string here’). Ninja form позволяет зацепиться и отфильтровать любые элементы создаваемых форм и полей.
Перевод меток и плейсхолдеров полей.
1 2 3 4 5 6 7 8 9 10 |
/** * Перевод имен полей в ninja-form */ function translate_ninja_forms_localize_fields($field) { $field['settings']['placeholder'] = __($field['settings']['placeholder'], 'mytheme-ninjaforms'); $field['settings']['label'] = __($field['settings']['label'], 'mytheme-ninjaforms'); return $field; } add_filter('ninja_forms_localize_fields', 'translate_ninja_forms_localize_fields'); |
Здесь я хочу отметить два момента:
- Укажите пространство имен переводов (в примере — mytheme-ninjaforms), чтобы выделить переводы связанные с вашей темой и ninja forms в отдельную группу или файл;
- свойств у полей гораздо больше, изучайте что ещё можно перевести с помощью этого фильтра.
Перевод/исправление сообщений об ошибках и других строковых констант формы
Вообще-то эта часть не вызывает проблем, т.к. перевод уже сделан за нас (на многие-многие языки). Но если вам вдруг понадобиться что то поправить, то используйте следующих хук:
1 2 3 4 5 6 7 8 9 10 |
/** * Правка переводов сообщений в Ninja Forms */ function my_custom_ninja_forms_i18n_front_end( $strings ) { // Например, меняем подсказку о заполнении обязательных полей $strings['fieldsMarkedRequired'] = 'Поля со звездой заполнять обязательно!'; return $strings; } add_filter( 'ninja_forms_i18n_front_end', 'my_custom_ninja_forms_i18n_front_end' ); |
Этот пример я взял из офф руководства (там правда текст был для польского языка).
В хук передаются переведенные значения для текущей локали. Для мультиязычного варианта более верно:
1 |
$strings['fieldsMarkedRequired'] = __('Here is your variant', 'mytheme-ninjaforms'); |
Зацепка к сообщениям, настройкам всей формы
Данный фильтр позволяет изменить настройки формы, получить доступ ко всем сообщениям об ошибках. Частично этот фильтр пересекается с предыдущим.
1 2 3 4 5 6 7 8 9 |
/** * Зацепка к настройкам формы с целью исправления переводов */ function my_ninja_forms_display_form_settings( $settings, $form_id ) { // тут ваши действия по переводу return $settings; } add_filter('ninja_forms_display_form_settings', 'my_ninja_forms_display_form_settings', 10, 2 ); |
Ещё хуки…
Это далеко не полный перечень зацепок, которые можно задействовать при переводе. Покопаться можно в /includes/Display/Render.php файле плагина, чтобы найти что то более специфичное.