WordPress.org

Make WordPress Core

Ticket #7753: i18n.patch

File i18n.patch, 3.0 KB (added by kambiz.k, 6 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/**