Как перевести конструктор главной
Способ 1 для относительно небольших текстов.
Перевод элементов конструктора главной необходимо задавать вручную. Для этого нужно добавить такой код в плагин https://support.wpshop.ru/docs/general/profunctions/
function bono_translate_items( $text ) {
$items = [];
switch ( substr( get_locale(), 0, 2 ) ) {
case 'ru':
$items = [
'Hi there!' => 'Приветики!',
// add more translations here
];
break;
// add more locales here
default:
break;
}
if ( array_key_exists( $text, $items ) ) {
return $items[ $text ];
}
return $text;
}
add_filter( 'bono_homepage_constructor:categories_section_header_text', 'bono_translate_items' );
add_filter( 'bono_homepage_constructor:html_section_header_text', 'bono_translate_items' );
add_filter( 'bono_homepage_constructor:posts_section_header_text', 'bono_translate_items' );
add_filter( 'bono_homepage_constructor:products_section_header_text', 'bono_translate_items' );
add_filter( 'bono_category_slide_item_title', 'bono_translate_items' );
add_filter( 'bono_category_slide_item_description', 'bono_translate_items' );
add_filter( 'bono_category_slide_item_button_text', 'bono_translate_items' );
add_filter( 'bono_homepage_constructor:slide_title', 'bono_translate_items' );
add_filter( 'bono_homepage_constructor:slide_button_text', 'bono_translate_items' );
add_filter( 'bono_homepage_constructor:slide_excerpt', 'bono_translate_items' );
Т.е. мы, например, по умолчанию задаем заголовки, текст кнопки и т.д. в конструкторе на английском. А затем для нужного языка добавляем переводы, которые будут с помощью данной функции подтягиваться в зависимости от текущей локали.
Способ 2
Для перевода контента в блоках конструктора главной можно добавить такой код в файл functions.php дочерней темы
add_shortcode( 'i18n', function ( $atts, $content ) {
shortcode_atts( [
'lang' => get_locale(),
], $atts );
if ( substr( 0, 2, $atts['lang'] ) === substr( get_locale(), 0, 2 ) ) {
return $content;
}
return '';
} );
Таким образом появиться возможность использовать шорткод для оборачивание текста, который будет выводиться только при нужном языке, примерно так это может выглядеть
[i18n lang="ru"]текст[/i18n]
[i18n lang="en"]text[/i18n]
Для того, чтобы задать разные ссылки для разных языковых версий, нужно добавить такой код *
add_filter( 'bono_homepage_constructor:slide_link', function ( $url ) {
global $shortcode_tags;
$orig_shortcode_tags = $shortcode_tags;
$shortcode_tags = array_filter( $shortcode_tags, function ( $shortcode ) {
return $shortcode === 'i18n';
}, ARRAY_FILTER_USE_KEY );
$result = do_shortcode( $url );
$shortcode_tags = $orig_shortcode_tags;
return $result;
} );
и таким образом появиться возможность задавать разные урлы для разных языковых версий, примерно так
[i18n lang="ru"]http://example-ru.com[/i18n][i18n lang="en"]http://example-ru.com[/i18n]
(* хук bono_homepage_constructor:slide_link
доступен с версии 1.9.9)
Чтобы разделить избранное и сравнения в разных языковых версиях, нужно добавить параметр path. Для этого надо добавить такой дополнительный код
add_filter( 'bono_scripts_settings_array', function ( $args ) {
$locale = substr( get_locale(), 0, 2 );
if ( $locale != 'en' ) {
$args['cookie_path'] = "/$locale";
}
return $args;
} );
В этом коде предполагается, что основной язык английский, но можно задать и другой.
Языки задаются в коротком варианте, например, en, ru, ua, us.