翻译 function.php 中的字符串 (Polylang)

Translate strings in function.php (Polylang)

谁能教我如何翻译子主题 function.php 中自定义代码中的字符串?

我想让字符串 'Gift Receiver:' 和 'Contact No:' 可以在 Polylang 'Strings Translation' Tab.

中翻译

此致

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 );

您需要主题的文本域才能使其正常工作。当我使用 "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插件的字符串翻译中找到这个字符串了。使用主题的文本域,您可以使用字符串翻译选项卡的 select 字段轻松找到它们。

这是我为 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' 是您的主题域。