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 $ name ’=>
(обязательное) имя для удобства сортировки (например: «myplugin»)
String $ string ’=> (требуется) строка для перевода‘ $ group ’=> (необязательно)
группа, в которой зарегистрирована строка, по умолчанию имеет значение «polylang»
Multi $ multiline ’=> (необязательно), если установлено значение true, текстовое поле перевода
будет многострочным, по умолчанию false

pll__

переводит строку, ранее зарегистрированную в pll_register_string
Использование:

ФАПЧ __ ($ строка); Требуется уникальный параметр:

String $ string ’=> строка для перевода возвращает переведенную строку.

pll_e

Выводит переведенную строку, ранее зарегистрированную в
Использование pll_register_string:

pll_e ($ строка); Требуется уникальный параметр:

String $ string ’=> строка для перевода

С наилучшими пожеланиями

1

Решение

Сначала вы должны зарегистрировать все эти строки для перевода.

Например, вы выводите «Hello world» в файле шаблона, например:

<?php pll_e('Hello world'); ?>

Чтобы показать строку в «Перевод строки» добавьте в свой functions.php:

add_action('init', function() {
pll_register_string('mytheme-hello', 'Hello world');
});

Добавьте все пользовательские строки, которые вы хотите перевести в эту функцию.

9

Другие решения

Как полиланг документы говорит, что сначала нужно проверить функции 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' );
0

По вопросам рекламы [email protected]