'D', 'A' => 'l', 'd' => 'd', 'e' => 'j', 'E' => 'j', 'u' => 'N', 'w' => 'w', 'j' => 'z', 'q' => 'S', 'f' => 'w', 'V' => 'W', 'b' => 'M', 'h' => 'M', 'B' => 'F', 'm' => 'm', 'i' => 'n', 'J' => 't', 'y' => 'y', 'Y' => 'Y', 'G' => 'o', 'H' => 'H', 'k' => 'G', 'L' => 'G', 'I' => 'h', 'l' => 'g', 'M' => 'i', 'S' => 's', 'p' => 'A', 'P' => 'a', 'N' => 'u', 'K' => 'B', 'Z' => 'T', 'v' => 'T', 'z' => 'O', 'O' => 'O', 'Q' => 'e', 'o' => 'I', 's' => 'U', '1' => 'Z', '2' => 'c', '3' => 'r', '4' => 'U', 'F' => 'Y-m-d', 'D' => 'm/d/y', 'R' => 'H:i', 'T' => 'H:i:s', 'n' => "\n", 't' => "\t", '%' => '%', ); $out = ''; $length = strlen( $format ); for ( $i = 0; $i < $length; $i++ ) { $char = $format[ $i ]; if ( '\\' === $char && $i + 1 < $length ) { // Already a literal in both syntaxes. $out .= '\\' . $format[ ++$i ]; } elseif ( '%' === $char && $i + 1 < $length ) { $code = $format[ ++$i ]; $out .= isset( $map[ $code ] ) ? ( '%' === $code ? '\\%' : $map[ $code ] ) : ''; } else { // Any other letter is text in strftime but a code in PHP date formats. $out .= ctype_alpha( $char ) ? '\\' . $char : $char; } } return $out; } /** Save the per-language formats from the settings form; unchanged languages keep their stored value. */ function qtrad_save_language_formats( $input ) { if ( empty( $input['languages'] ) || ! is_array( $input['languages'] ) ) { return; } foreach ( array( 'date' => 'qtranslate_date_formats', 'time' => 'qtranslate_time_formats' ) as $kind => $option ) { $before = get_option( $option, array() ); $formats = is_array( $before ) ? $before : array(); foreach ( $input['languages'] as $code => $meta ) { if ( ! is_string( $code ) || ! qtrad_is_enabled( $code ) || ! is_array( $meta ) || ! isset( $meta[ $kind . '_format' ] ) || ! is_string( $meta[ $kind . '_format' ] ) ) { continue; } $value = trim( sanitize_text_field( $meta[ $kind . '_format' ] ) ); if ( '' === $value ) { unset( $formats[ $code ] ); } elseif ( ! isset( $formats[ $code ] ) || $formats[ $code ] !== $value ) { $formats[ $code ] = $value; } } if ( $formats !== $before ) { update_option( $option, $formats ); } } }