Make WordPress Core

Ticket #13651: 13651.5.diff

File 13651.5.diff, 4.9 KB (added by SergeyBiryukov, 7 years ago)
  • src/wp-includes/comment-template.php

     
    893893                        $output = sprintf( _n( '%s Comment', '%s Comments', $number ), number_format_i18n( $number ) );
    894894                } else {
    895895                        // % Comments
     896                        /* translators: If comment number in your language requires declension,
     897                         * translate this to 'on'. Do not translate into your own language.
     898                         */
     899                        if ( 'on' === _x( 'off', 'Comment number declension: on or off' ) ) {
     900                                $text = preg_replace( '#<span class="screen-reader-text">.+?</span>#', '', $more );
     901                                $text = preg_replace( '/&.+?;/', '', $text ); // Kill entities
     902                                $text = trim( strip_tags( $text ), '% ' );
     903
     904                                // Replace '% Comments' with a proper plural form
     905                                if ( $text && ! preg_match( '/[0-9]+/', $text ) && false !== strpos( $more, '%' ) ) {
     906                                        /* translators: %s: number of comments */
     907                                        $new_text = _n( '%s Comment', '%s Comments', $number );
     908                                        $new_text = trim( sprintf( $new_text, '' ) );
     909
     910                                        $more = str_replace( $text, $new_text, $more );
     911                                        if ( false === strpos( $more, '%' ) ) {
     912                                                $more = '% ' . $more;
     913                                        }
     914                                }
     915                        }
     916
    896917                        $output = str_replace( '%', number_format_i18n( $number ), $more );
    897918                }
    898919        } elseif ( $number == 0 ) {
  • tests/phpunit/tests/comment/template.php

     
    3030                $this->assertEquals( 12, get_comments_number() );
    3131        }
    3232
    33 }
    34  No newline at end of file
     33        /**
     34         * @ticket 13651
     35         */
     36        function test_get_comments_number_text_declension_with_default_args() {
     37                $post_id = $this->factory->post->create();
     38                $permalink = get_permalink( $post_id );
     39                $this->go_to( $permalink );
     40
     41                $this->assertEquals( __( 'No Comments' ), get_comments_number_text() );
     42
     43                $this->factory->comment->create_post_comments( $post_id, 1 );
     44                $this->go_to( $permalink );
     45
     46                $this->assertEquals( __( '1 Comment' ), get_comments_number_text() );
     47
     48                $this->factory->comment->create_post_comments( $post_id, 1 );
     49                $this->go_to( $permalink );
     50
     51                $this->assertEquals( sprintf( _n( '%s Comment', '%s Comments', 2 ), '2' ), get_comments_number_text() );
     52
     53        }
     54
     55        /**
     56         * @ticket 13651
     57         * @dataProvider data_get_comments_number_text_declension
     58         */
     59        function test_get_comments_number_text_declension_with_custom_args( $number, $input, $output ) {
     60                $post_id = $this->factory->post->create();
     61                $permalink = get_permalink( $post_id );
     62
     63                $this->factory->comment->create_post_comments( $post_id, $number );
     64                $this->go_to( $permalink );
     65
     66                add_filter( 'gettext_with_context', array( $this, '_enable_comment_number_declension' ), 10, 4 );
     67
     68                $this->assertEquals( $output, get_comments_number_text( false, false, $input ) );
     69
     70                remove_filter( 'gettext_with_context', array( $this, '_enable_comment_number_declension' ), 10, 4 );
     71        }
     72
     73        function _enable_comment_number_declension( $translation, $text, $context, $domain ) {
     74                if ( 'Comment number declension: on or off' === $context ) {
     75                        $translation = 'on';
     76                }
     77
     78                return $translation;
     79        }
     80
     81        function data_get_comments_number_text_declension() {
     82                return array(
     83                        array(
     84                                2,
     85                                'Comments (%)',
     86                                sprintf( _n( '%s Comment', '%s Comments', 2 ), '2' ),
     87                        ),
     88                        array(
     89                                2,
     90                                '2 Comments',
     91                                '2 Comments',
     92                        ),
     93                        array(
     94                                2,
     95                                '2 Comments<span class="screen-reader-text"> on Hello world!</span>',
     96                                '2 Comments<span class="screen-reader-text"> on Hello world!</span>',
     97                        ),
     98                        array(
     99                                2,
     100                                '2 Comments<span class="screen-reader-text"> on Hello % world!</span>',
     101                                '2 Comments<span class="screen-reader-text"> on Hello 2 world!</span>' // See #WP37103
     102                        ),
     103                        array(
     104                                2,
     105                                __( '% Comments', 'twentyten' ),
     106                                sprintf( _n( '%s Comment', '%s Comments', 2 ), '2' ),
     107                        ),
     108                        array(
     109                                2,
     110                                _x( '%', 'comments number', 'twentyeleven' ),
     111                                '2',
     112                        ),
     113                        array(
     114                                2,
     115                                __( '<b>%</b> Replies', 'twentyeleven' ),
     116                                sprintf( _n( '%s Comment', '%s Comments', 2 ), '<b>2</b>' ),
     117                        ),
     118                        array(
     119                                2,
     120                                __( '% <span class="reply">comments &rarr;</span>', 'twentyeleven' ),
     121                                sprintf( '2 <span class="reply">%s &rarr;</span>', trim( sprintf( _n( '%s Comment', '%s Comments', 2 ), '' ) ) ),
     122                        ),
     123                        array(
     124                                2,
     125                                __( '% Replies', 'twentytwelve' ),
     126                                sprintf( _n( '%s Comment', '%s Comments', 2 ), '2' ),
     127                        ),
     128                        array(
     129                                2,
     130                                __( 'View all % comments', 'twentythirteen' ),
     131                                sprintf( _n( '%s Comment', '%s Comments', 2 ), '2' ),
     132                        ),
     133                        array(
     134                                2,
     135                                __( '% Comments', 'twentyfourteen' ),
     136                                sprintf( _n( '%s Comment', '%s Comments', 2 ), '2' ),
     137                        ),
     138                        array(
     139                                2,
     140                                __( '% Comments', 'twentyfifteen' ),
     141                                sprintf( _n( '%s Comment', '%s Comments', 2 ), '2' ),
     142                        ),
     143                );
     144        }
     145
     146}