WordPress.org

Make WordPress Core

Ticket #48934: 48934.diff

File 48934.diff, 4.8 KB (added by SergeyBiryukov, 5 months ago)
  • src/wp-includes/functions.php

     
    286286                }
    287287
    288288                $date = $datetime->format( $new_format );
    289                 $date = wp_maybe_decline_date( $date );
     289                $date = wp_maybe_decline_date( $date, $format );
    290290        }
    291291
    292292        /**
     
    312312 * formats (like 'j F Y'), the month name will be replaced with a correct form.
    313313 *
    314314 * @since 4.4.0
     315 * @since 5.4.0 The `$format` parameter was added.
    315316 *
    316317 * @global WP_Locale $wp_locale WordPress date and time locale object.
    317318 *
    318  * @param string $date Formatted date string.
     319 * @param string $date   Formatted date string.
     320 * @param string $format Date format to check.
    319321 * @return string The date, declined if locale specifies it.
    320322 */
    321 function wp_maybe_decline_date( $date ) {
     323function wp_maybe_decline_date( $date, $format ) {
    322324        global $wp_locale;
    323325
    324326        // i18n functions are not available in SHORTINIT mode
     
    339341                 * Match a format like 'j F Y' or 'j. F' (day of the month, followed by month name)
    340342                 * and decline the month.
    341343                 */
    342                 if ( preg_match( '#\b\d{1,2}\.? [^\d ]+\b#u', $date ) ) {
     344                if ( preg_match( '#[dj]\.? F#', $format ) ) {
    343345                        foreach ( $months as $key => $month ) {
    344346                                $months[ $key ] = '# ' . preg_quote( $month, '#' ) . '\b#u';
    345347                        }
     
    355357                 * Match a format like 'F jS' or 'F j' (month name, followed by day with an optional ordinal suffix)
    356358                 * and change it to declined 'j F'.
    357359                 */
    358                 if ( preg_match( '#\b[^\d ]+ \d{1,2}(st|nd|rd|th)?\b#u', trim( $date ) ) ) {
     360                if ( preg_match( '#F [dj]#', $format ) ) {
    359361                        foreach ( $months as $key => $month ) {
    360362                                $months[ $key ] = '#\b' . preg_quote( $month, '#' ) . ' (\d{1,2})(st|nd|rd|th)?\b#u';
    361363                        }
  • tests/phpunit/tests/functions/maybeDeclineDate.php

     
    4141         * @ticket 48606
    4242         * @dataProvider data_wp_maybe_decline_date
    4343         */
    44         public function test_wp_maybe_decline_date( $test_locale, $input, $output ) {
     44        public function test_wp_maybe_decline_date( $test_locale, $format, $input, $output ) {
    4545                global $locale, $wp_locale;
    4646
    4747                add_filter( 'gettext_with_context', array( $this, 'filter__enable_months_names_declension' ), 10, 3 );
     
    5252                $wp_locale->month          = $month_names['month'];
    5353                $wp_locale->month_genitive = $month_names['month_genitive'];
    5454
    55                 $declined_date = wp_maybe_decline_date( $input );
     55                $declined_date = wp_maybe_decline_date( $input, $format );
    5656
    5757                remove_filter( 'gettext_with_context', array( $this, 'filter__enable_months_names_declension' ), 10 );
    5858
     
    6969
    7070        public function data_wp_maybe_decline_date() {
    7171                return array(
    72                         array( 'ru_RU', '21 Июнь', '21 июня' ),
    73                         array( 'ru_RU', '1 Январь 2016', '1 января 2016' ),
    74                         array( 'ru_RU', 'Январь 1st 2016', '1 января 2016' ),
    75                         array( 'ru_RU', 'Январь 1 2016', '1 января 2016' ),
    76                         array( 'ru_RU', 'Январь 1 16', '1 января 16' ),
    77                         array( 'ru_RU', 'Суббота, 19 Январь 2019 10:50', 'Суббота, 19 января 2019 10:50' ),
    78                         array( 'pl_PL', '1 Styczeń', '1 stycznia' ),
    79                         array( 'hr', '1. Siječanj', '1. siječnja' ),
    80                         array( 'ca', '1 de abril', "1 d'abril" ),
    81                         array( 'cs_CZ', '1. Červen', '1. června' ),
    82                         array( 'cs_CZ', '1. Červenec', '1. července' ),
    83                         array( 'it_IT', 'Lundeì 11 Novembre 2019', 'Lundeì 11 Novembre 2019' ),
    84                         array( 'el', 'Σάββατο, 19 Ιανουάριος 2019 10:50', 'Σάββατο, 19 Ιανουαρίου 2019 10:50' ),
     72                        array( 'ru_RU', 'j F', '21 Июнь', '21 июня' ),
     73                        array( 'ru_RU', 'j F Y', '1 Январь 2016', '1 января 2016' ),
     74                        array( 'ru_RU', 'F jS Y', 'Январь 1st 2016', '1 января 2016' ),
     75                        array( 'ru_RU', 'F j Y', 'Январь 1 2016', '1 января 2016' ),
     76                        array( 'ru_RU', 'F j y', 'Январь 1 16', '1 января 16' ),
     77                        array( 'ru_RU', 'l, d F Y H:i', 'Суббота, 19 Январь 2019 10:50', 'Суббота, 19 января 2019 10:50' ),
     78                        array( 'ru_RU', 'F y', 'Май 19', 'Май 19' ),
     79                        array( 'pl_PL', 'j F', '1 Styczeń', '1 stycznia' ),
     80                        array( 'hr', 'j. F', '1. Siječanj', '1. siječnja' ),
     81                        array( 'ca', 'j F', '1 de abril', "1 d'abril" ),
     82                        array( 'cs_CZ', 'j. F', '1. Červen', '1. června' ),
     83                        array( 'cs_CZ', 'j. F', '1. Červenec', '1. července' ),
     84                        array( 'it_IT', 'l j F Y', 'Lundeì 11 Novembre 2019', 'Lundeì 11 Novembre 2019' ),
     85                        array( 'el', 'l, d F Y H:i', 'Σάββατο, 19 Ιανουάριος 2019 10:50', 'Σάββατο, 19 Ιανουαρίου 2019 10:50' ),
    8586                );
    8687        }
    8788