Polylang: как перевести пользовательские строки?
Моя проблема: я перевожу свой веб-сайт с помощью 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" => (обязательное) имя для удобства сортировки (например, "myplugin") "$string" => (обязательное) строка для перевода "$group" => (необязательно) группа, в которой находится строка зарегистрировано, по умолчанию 'polylang' '$multiline' => (необязательно), если установлено значение true, текстовое поле перевода будет многострочным, по умолчанию false
pll__
переводит строку, ранее зарегистрированную в pll_register_string. Использование:
ФАПЧ __($ строка); Требуется уникальный параметр:
'$string' => строка для перевода возвращает переведенную строку.
pll_e
Выводит переведенную строку, ранее зарегистрированную в pll_register_string. Использование:
pll_e ($ строка); Требуется уникальный параметр:
'$string' => строка для перевода
С наилучшими пожеланиями
2 ответа
Сначала вы должны зарегистрировать все эти строки для перевода.
Например, вы выводите "Hello world" в файле шаблона, например:
<?php pll_e('Hello world'); ?>
Чтобы показать строку в "Перевод строки" добавьте в свой functions.php
:
add_action('init', function() {
pll_register_string('mytheme-hello', 'Hello world');
});
Добавьте все пользовательские строки, которые вы хотите перевести в эту функцию.
Как говорят в Polylang docs, хорошо сначала проверить функции 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' );
Привет, есть ли способ перевести по имени?
add_action('init', function() {
pll_register_string('footer-Newsletter-form', 'Subscribe to Newsletter');
});
$translated_string = pll_translate_string('footer-Newsletter-form', $lang);
Спасибо тебе за это! Я добавляю эту настройку, а затем я нашел еще один трюк где-то еще, чтобы добавить переводимый текст в файл functions.php:
__(pll__('string to translate'), 'text-domain')