WordPress.org

Make WordPress Core

Ticket #7753: i18n.patch

File i18n.patch, 3.0 KB (added by kambiz.k, 10 years ago)

Patch to enhance localization system, tested with v2.6.2

  • functions.php

     
    4646        if ( -1 == $i || false == $i )
    4747                $i = 0;
    4848
    49         if ( !empty( $wp_locale->month ) && !empty( $wp_locale->weekday ) && $translate ) {
    50                 $datemonth = $wp_locale->get_month( date( 'm', $i ) );
    51                 $datemonth_abbrev = $wp_locale->get_month_abbrev( $datemonth );
    52                 $dateweekday = $wp_locale->get_weekday( date( 'w', $i ) );
    53                 $dateweekday_abbrev = $wp_locale->get_weekday_abbrev( $dateweekday );
    54                 $datemeridiem = $wp_locale->get_meridiem( date( 'a', $i ) );
    55                 $datemeridiem_capital = $wp_locale->get_meridiem( date( 'A', $i ) );
    56                 $dateformatstring = ' ' . $dateformatstring;
    57                 $dateformatstring = preg_replace( "/([^\\\])D/", "\\1" . backslashit( $dateweekday_abbrev ), $dateformatstring );
    58                 $dateformatstring = preg_replace( "/([^\\\])F/", "\\1" . backslashit( $datemonth ), $dateformatstring );
    59                 $dateformatstring = preg_replace( "/([^\\\])l/", "\\1" . backslashit( $dateweekday ), $dateformatstring );
    60                 $dateformatstring = preg_replace( "/([^\\\])M/", "\\1" . backslashit( $datemonth_abbrev ), $dateformatstring );
    61                 $dateformatstring = preg_replace( "/([^\\\])a/", "\\1" . backslashit( $datemeridiem ), $dateformatstring );
    62                 $dateformatstring = preg_replace( "/([^\\\])A/", "\\1" . backslashit( $datemeridiem_capital ), $dateformatstring );
     49        if ( $translate ) // localizing names or calendar system
     50                $j = date_i18n( $dateformatstring, $i );
     51        else
     52                $j = @date( $dateformatstring, $i );
    6353
    64                 $dateformatstring = substr( $dateformatstring, 1, strlen( $dateformatstring ) -1 );
    65         }
    66         $j = @date( $dateformatstring, $i );
    67 
    6854        /*
    6955        if ( !$j ) // for debug purposes
    7056                echo $i." ".$mysqlstring;
     
    118104        // Sanity check for PHP 5.1.0-
    119105        if ( -1 == $i )
    120106                $i = false;
     107 
     108        // Let the user convert date from Gregorian to localized calendar system
     109        $j = apply_filters( 'pre_date_i18n', $dateformatstring, $i );
     110        if ($j !== $dateformatstring)
     111                return $j;
    121112
    122113        if ( ( !empty( $wp_locale->month ) ) && ( !empty( $wp_locale->weekday ) ) ) {
    123114                $datemonth = $wp_locale->get_month( date( 'm', $i ) );
     
    136127
    137128                $dateformatstring = substr( $dateformatstring, 1, strlen( $dateformatstring ) -1 );
    138129        }
    139         $j = @date( $dateformatstring, $i );
    140         return $j;
     130        $j = @date( $dateformatstring, $i );       
     131
     132        // Let the user translate digits from latin to localized language
     133        return apply_filters( 'date_i18n', $j);
    141134}
    142135
    143136/**
     
    154147        // let the user override the precision only
    155148        $decimals = ( is_null( $decimals ) ) ? $wp_locale->number_format['decimals'] : intval( $decimals );
    156149
    157         return number_format( $number, $decimals, $wp_locale->number_format['decimal_point'], $wp_locale->number_format['thousands_sep'] );
     150        $num = number_format( $number, $decimals, $wp_locale->number_format['decimal_point'], $wp_locale->number_format['thousands_sep'] );
     151 
     152        // let the user translate digits from latin to localized language
     153        return apply_filters( 'number_format_i18n', $num );
    158154}
    159155
    160156/**