如何解决字符串应该在Wordpress中有可翻译的内容?

时间:2018-01-31 18:15:14

标签: php wordpress lint

我试图解决这里的linting问题是代码。

function get_the_breadcrumb() {
if ( ! is_front_page() ) {
    // Start the breadcrumb with a link to your homepage.
    echo '<div class="o__breadcrumb">';
    echo '<a href="';
    echo esc_html( get_option( 'home' ) );
    echo '"> Home';
    echo '</a> <span> ';
    echo esc_html( Load::atom( 'icons/breadcrumb_arrow' ) );
    echo '</span>';

    // Check if the current page is a category, an archive or a single page. If so show the category or archive name.
    if ( is_category() || is_single() ) {
        the_category( 'title_li=' );
    } elseif ( is_archive() || is_single() ) {
        if ( is_day() ) {
            /* translators: %s: text term */
            printf( esc_html( __( '%s', 'text_domain' ) ), esc_html( get_the_date() ) );
        } elseif ( is_month() ) {
            /* translators: %s: text term */
            printf( esc_html( __( '%s', 'text_domain' ) ), get_the_date( _x( 'F Y', 'monthly archives date format', 'text_domain' ) ) );
        } elseif ( is_year() ) {
            /* translators: %s: text term */
            printf( esc_html( __( '%s', 'text_domain' ) ), get_the_date( _x( 'Y', 'yearly archives date format', 'text_domain' ) ) );
        } else {
            esc_attr_e( 'Blog Archives', 'text_domain' );
        }
    }
    // If the current page is a single post, show its title with the separator.
    if ( is_single() ) {
        echo '<span>';
        echo esc_html( Load::atom( 'icons/breadcrumb_arrow' ) );
        echo '</span>';
        the_title();
    }
    // If the current page is a static page, show its title.
    if ( is_page() ) {
        echo the_title();
    }
    // if you have a static page assigned to be you posts list page. It will find the title of the static page and display it. i.e Home >> Blog.
    if ( is_home() ) {
        global $post;
        $page_for_posts_id = get_option( 'page_for_posts' );
        if ( $page_for_posts_id ) {
            $post = get_page( $page_for_posts_id );
            setup_postdata( $post );
            the_title();
            rewind_posts();
        }
    }
    echo '</div>';
}
}

Linting回复

FOUND 3 ERRORS AFFECTING 3 LINES
----------------------------------------------------------------------
 193 | ERROR | Strings should have translatable content
 196 | ERROR | Strings should have translatable content
 199 | ERROR | Strings should have translatable content

第193行

printf( esc_html( __( '%s', 'text_domain' ) ), esc_html( get_the_date() ) );

第196行

printf( esc_html( __( '%s', 'text_domain' ) ), get_the_date( _x( 'F Y', 'monthly archives date format', 'text_domain' ) ) );

第199行

printf( esc_html( __( '%s', 'text_domain' ) ), get_the_date( _x( 'Y', 'yearly archives date format', 'text_domain' ) ) );

1 个答案:

答案 0 :(得分:0)

这是因为你有%s作为翻译函数调用__(...)内的文本,这是不可翻译的。

相反,您应该在翻译调用中使用printf()调用 ,这样翻译人员实际上可以看到您尝试翻译的内容。

但是,你不应该试图以这种方式翻译日期。它不起作用,因为日期总是在变化,__()翻译的工作方式是将传入的确切字符串与翻译相匹配。根据{{​​3}},您应该使用date_i18n

为什么你试图将你传递的日期格式化字符串翻译为get_the_date,这些是php使用的代码值,它们不会根据你的位置而改变。翻译这些只会导致你的问题。

您还可以在第193行拨打esc_html两次。

所以,相反,您应该像这样编写代码行:

第193行

esc_html( date_i18n( get_the_date() ) );

第196行

esc_html( date_i18n( get_the_date('F Y') ) );

第199行

esc_html( date_i18n( get_the_date( 'Y' ) ) );

注意,我认为esc_html调用实际上并不是必需的,因为内部只是返回日期的WordPress函数......没有html应该在那里< / p>