Перевести строки в function.php (Polylang)

Может ли кто-нибудь научить меня, как переводить строки из моего пользовательского кода в function.php дочерней темы?

Я хочу, чтобы строки «Получатель подарка:» и «Контактный номер:» были переведены на вкладке «Перевод строк» ​​Polylang.

С Уважением

function gift_receiver( $cart_item, $cart_item_key ) {
    $greceiver = isset( $cart_item['greceiver'] ) ? $cart_item['greceiver'] : '';
    printf(
    '<div><label>Gift Receiver:</label> <textarea class="%s" id="rcart_notes_%s" data-cart-id="%s">%s</textarea></div>',
    'prefix-cart-notes',
    $cart_item_key,
    $cart_item_key,
    $greceiver
    );
 }
add_action( 'woocommerce_after_cart_item_name', 'gift_receiver', 10, 2 );


function gift_sender( $cart_item, $cart_item_key ) {
    $gsender = isset( $cart_item['gsender'] ) ? $cart_item['gsender'] : '';
    printf(
    '<div><label>Contact No:</label> <textarea class="%s" id="cart_notes_%s" data-cart-id="%s">%s</textarea></div>',
    'prefix-cart-notes',
    $cart_item_key,
    $cart_item_key,
    $gsender
    );
 }
add_action( 'woocommerce_after_cart_item_name', 'gift_sender', 10, 2 );

person Jerry Tan    schedule 16.05.2020    source источник
comment
Отвечает ли это на ваш вопрос? Polylang: как перевести пользовательские строки?   -  person disinfor    schedule 17.05.2020


Ответы (2)


Вам понадобится текстовый домен вашей темы, чтобы она работала. Вставьте свой текстовый домен, когда я использую "your_textdomain".

Вам нужно поместить строки в свой плагин следующим образом:

<?php echo pll_e('Your String'); ?>

Итак, с вашим кодом что-то вроде:

... printf('<div><label>'.pll_e('Gift Receiver').':</label> <textarea ....

Затем вы можете добавить эти строки в файл functions.php в папке вашей темы:

/** TRANSLATIONS  **/

add_action('init', function() {
    pll_register_string('your_textdomain', 'Your String');
    pll_register_string('your_textdomain', 'Gift Receiver');
});

После этого вы сможете найти эти строки в переводах строк плагина polylang. Используя текстовый домен вашей темы, вы можете легко найти их, используя поле выбора на вкладке переводов строк.

person rank    schedule 16.05.2020
comment
Привет, ранг. Спасибо за добрый ответ, код работает. Но, к сожалению, тестовая позиция была испорчена. Я хотел, чтобы текст «Подарочный приемник» располагался под названием продукта. Не могли бы вы подсказать, как стилизовать текст с помощью CSS? i.stack.imgur.com/gT3ZQ.png - person Jerry Tan; 17.05.2020
comment
Пожалуйста, примите ответ, так как он решает вашу проблему и код работает. - Ваш новый вопрос: если вы хотите начать его с новой строки, просто добавьте тег html <br> после тега a или до того, как вы получите строку полиланга. CSS не нужен, так как вы просто хотите иметь разрыв строки. - person rank; 17.05.2020
comment
Я пытался добавить вот так ‹div›‹label›‹br›».pll_e('Gift Receiver:').'‹/label›, но не работает. - person Jerry Tan; 17.05.2020
comment
Можете ли вы попробовать добавить его перед <div> ? Если не работает, попробуйте как '<br>'.'<div><label>....'. . Я не вижу разметки в html, там просто строка... это что-то странное - person rank; 17.05.2020
comment
Строка, кажется, помещена не в ‹label›, а перед этим div. Вы поместили его в правильное положение, как в моем коде? Если да, возможно, вы могли бы сохранить значение до $your_text = pll_e('Gift Receiver');, а затем использовать переменную $your_text в файле printf. Вы также можете открыть другой вопрос и опубликовать ссылку здесь, в комментариях. Таким образом, я получаю уведомление и могу взглянуть на новый код и проблему. - person rank; 17.05.2020
comment
Вот новая ссылка на вопрос: stackoverflow.com/questions/61856779/ - person Jerry Tan; 17.05.2020

Это настройка, которую я делаю для перевода строк Polylang, поэтому у меня все еще могут быть стандартные функции перевода __ и _e.

if ( !is_admin() ) {
    add_filter( 'gettext', 'my_translate_string', 10, 3 );
}
function my_translate_string( $translated_text, $text, $domain ) {
    if ( $domain <> 'mytheme' || !function_exists( 'pll__' ) ) {
        return $translated_text;
    }
    return pll__( $text );
}

add_action( 'after_setup_theme', 'my_register_polylang_strings' );
function my_register_polylang_strings() {

    if ( function_exists( 'pll_register_string' ) ) {

        // template-parts/misc/breadcrumbs.php
        pll_register_string( 'my-search-results', 'Search Results', 'mytheme', false );
        pll_register_string( 'my-home', 'Home', 'mytheme', false );

        // template-parts/loop/post.php
        pll_register_string( 'my-read-more', 'Read More', 'mytheme', false );

        // in your example would be
        pll_register_string( 'my-gift-receiver', 'Gift Receiver', 'mytheme', false );
        
    }

}

Затем вы можете использовать в своих файлах темы

_e( 'Gift Receiver', 'mytheme' );
__( 'Gift Receiver', 'mytheme' );

Итак, в вашем случае это будет:

function gift_receiver( $cart_item, $cart_item_key ) {
    $greceiver = isset( $cart_item['greceiver'] ) ? $cart_item['greceiver'] : '';
    printf(
    '<div><label>'.__('Gift Receiver','mytheme').':</label> <textarea class="%s" id="rcart_notes_%s" data-cart-id="%s">%s</textarea></div>',
    'prefix-cart-notes',
    $cart_item_key,
    $cart_item_key,
    $greceiver
    );
}
add_action( 'woocommerce_after_cart_item_name', 'gift_receiver', 10, 2 );

mytheme — домен вашей темы.

person gviger    schedule 23.06.2020