Support

Account

Home Forums General Issues Translate date WPML Reply To: Translate date WPML

  • Hi,
    Thanks for your answer. I must admit, this is way above my skill levels. I found the date_i18 in wp-includes/function.php but can’t figure out where to add the snippet or what to modify. Can you please look at my function and tell me what to do?

    
    function date_i18n( $dateformatstring, $unixtimestamp = false, $gmt = false ) {
    	global $wp_locale;
    	$i = $unixtimestamp;
    
    	if ( false === $i ) {
    		if ( ! $gmt )
    			$i = current_time( 'timestamp' );
    		else
    			$i = time();
    		// we should not let date() interfere with our
    		// specially computed timestamp
    		$gmt = true;
    	}
    
    	// store original value for language with untypical grammars
    	// see http://core.trac.wordpress.org/ticket/9396
    	$req_format = $dateformatstring;
    
    	$datefunc = $gmt? 'gmdate' : 'date';
    
    	if ( ( !empty( $wp_locale->month ) ) && ( !empty( $wp_locale->weekday ) ) ) {
    		$datemonth = $wp_locale->get_month( $datefunc( 'm', $i ) );
    		$datemonth_abbrev = $wp_locale->get_month_abbrev( $datemonth );
    		$dateweekday = $wp_locale->get_weekday( $datefunc( 'w', $i ) );
    		$dateweekday_abbrev = $wp_locale->get_weekday_abbrev( $dateweekday );
    		$datemeridiem = $wp_locale->get_meridiem( $datefunc( 'a', $i ) );
    		$datemeridiem_capital = $wp_locale->get_meridiem( $datefunc( 'A', $i ) );
    		$dateformatstring = ' '.$dateformatstring;
    		$dateformatstring = preg_replace( "/([^\\\])D/", "\\1" . backslashit( $dateweekday_abbrev ), $dateformatstring );
    		$dateformatstring = preg_replace( "/([^\\\])F/", "\\1" . backslashit( $datemonth ), $dateformatstring );
    		$dateformatstring = preg_replace( "/([^\\\])l/", "\\1" . backslashit( $dateweekday ), $dateformatstring );
    		$dateformatstring = preg_replace( "/([^\\\])M/", "\\1" . backslashit( $datemonth_abbrev ), $dateformatstring );
    		$dateformatstring = preg_replace( "/([^\\\])a/", "\\1" . backslashit( $datemeridiem ), $dateformatstring );
    		$dateformatstring = preg_replace( "/([^\\\])A/", "\\1" . backslashit( $datemeridiem_capital ), $dateformatstring );
    
    		$dateformatstring = substr( $dateformatstring, 1, strlen( $dateformatstring ) -1 );
    	}
    	$timezone_formats = array( 'P', 'I', 'O', 'T', 'Z', 'e' );
    	$timezone_formats_re = implode( '|', $timezone_formats );
    	if ( preg_match( "/$timezone_formats_re/", $dateformatstring ) ) {
    		$timezone_string = get_option( 'timezone_string' );
    		if ( $timezone_string ) {
    			$timezone_object = timezone_open( $timezone_string );
    			$date_object = date_create( null, $timezone_object );
    			foreach( $timezone_formats as $timezone_format ) {
    				if ( false !== strpos( $dateformatstring, $timezone_format ) ) {
    					$formatted = date_format( $date_object, $timezone_format );
    					$dateformatstring = ' '.$dateformatstring;
    					$dateformatstring = preg_replace( "/([^\\\])$timezone_format/", "\\1" . backslashit( $formatted ), $dateformatstring );
    					$dateformatstring = substr( $dateformatstring, 1, strlen( $dateformatstring ) -1 );
    				}
    			}
    		}
    	}
    	$j = @$datefunc( $dateformatstring, $i );
    	// allow plugins to redo this entirely for languages with untypical grammars
    	$j = apply_filters('date_i18n', $j, $req_format, $i, $gmt);
    	return $j;
    }

    Thanks for your help!