Моя проблемаЯ перевожу свой веб-сайт с помощью Polylang, но мне сложно переводить пользовательские строки. Строки не будут отображаться в меню «Перевод строк» на панели инструментов WP.
Важный: Я не знаю много о PHP, так что функция pll_register_string это очень сбивает с толку для меня.
Цитируется из документа Polylang:
https://polylang.wordpress.com/documentation/documentation-for-developers/functions-reference/
pll_register_string
Позволяет плагинам добавлять свои собственные строки в «перевод строк»
панель. Функция должна вызываться на стороне администратора (functions.php
файл в порядке для тем). Можно зарегистрировать пустые строки (для
пример, когда они приходят из вариантов), но они не появятся в списке
Таблица.Использование:
pll_register_string ($ name, $ string, $ group, $ multiline); Name $ name ’=>
(обязательное) имя для удобства сортировки (например: «myplugin»)
String $ string ’=> (требуется) строка для перевода‘ $ group ’=> (необязательно)
группа, в которой зарегистрирована строка, по умолчанию имеет значение «polylang»
Multi $ multiline ’=> (необязательно), если установлено значение true, текстовое поле перевода
будет многострочным, по умолчанию falsepll__
переводит строку, ранее зарегистрированную в pll_register_string
Использование:ФАПЧ __ ($ строка); Требуется уникальный параметр:
String $ string ’=> строка для перевода возвращает переведенную строку.
pll_e
Выводит переведенную строку, ранее зарегистрированную в
Использование pll_register_string:pll_e ($ строка); Требуется уникальный параметр:
String $ string ’=> строка для перевода
С наилучшими пожеланиями
Сначала вы должны зарегистрировать все эти строки для перевода.
Например, вы выводите «Hello world» в файле шаблона, например:
<?php pll_e('Hello world'); ?>
Чтобы показать строку в «Перевод строки» добавьте в свой functions.php
:
add_action('init', function() {
pll_register_string('mytheme-hello', 'Hello world');
});
Добавьте все пользовательские строки, которые вы хотите перевести в эту функцию.
Как полиланг документы говорит, что сначала нужно проверить функции Polylang на наличие — чтобы сайт не сломался при обновлении плагина Polylang — потому что он сначала удаляет старые файлы.
Поэтому я предлагаю этот подход:
в functions.php
для темы в файле вашего плагина вы можете создать оболочки для необходимых функций Polylang с запасными вариантами, если polylang был удален или обновлен, поэтому WP не завершится с ошибкой неопределенной функции.
/**
* Outputs localized string if polylang exists or output's not translated one as a fallback
*
* @param $string
*
* @return void
*/
function pl_e( $string = '' ) {
if ( function_exists( 'pll_e' ) ) {
pll_e( $string );
} else {
echo $string;
}
}
/**
* Returns translated string if polylang exists or output's not translated one as a fallback
*
* @param $string
*
* @return string
*/
function pl__( $string = '' ) {
if ( function_exists( 'pll__' ) ) {
return pll__( $string );
}
return $string;
}
// these function prefixes can be either you are comfortable with.
ПРИМЕЧАНИЕ мы создали функции с одним l
в pl__
а также pl_e
и оригинальные функции Polylang pll__
а также pll_e
,
Они будут использоваться в вашей теме для вывода или возврата переведенных строк.
И как упоминалось ранее, мы должны зарегистрировать эти строки, чтобы Polylang знал, что они должны быть переведены.
Если вы работаете с темой, вероятно, хорошо инициализировать их в after_setup_theme
крючок вот так:
function your_prefix_after_setup_theme() {
// register our translatable strings - again first check if function exists.
if ( function_exists( 'pll_register_string' ) ) {
pll_register_string( 'ToggleNavigation', 'Toggle navigation', 'YourThemeName', false );
pll_register_string( 'ToggleSearch', 'Toggle Search', 'YourThemeName', false );
pll_register_string('404Message', 'It looks like nothing was found. Try getting back to the <a href="%s">home page</a>.', 'YourThemeName', true);
}
}
add_action( 'after_setup_theme', 'your_prefix_after_setup_theme' );