Вот мой код:
setlocale( LC_ALL,'ar' ); echo strftime( '%e %b, %Y', strtotime( '2011-10-25' ));
Вывод:
25 Sep, 2011
Почему он не показывает арабскую дату? Я использую strftime неправильно?
AFAIK setlocale
самом деле не будет выполнять какой-либо перевод языка для вас, а скорее влияет на такие вещи, как форматирование и функциональность компаратора. Если вы хотите локализовать, вы можете попробовать использовать IntlDateFormatter, который может дать вам то, что вам нужно.
Обновлено: вы также можете попробовать Zend_Date, как предложено в этом вопросе, если PHP 5.3 не является для вас вариантом.
Здесь вы можете распечатать арабскую дату PHP:
Создайте файл с именем arabicdate.php
и поместите в него эту функцию:
function ArabicDate() { $months = array("Jan" => "يناير", "Feb" => "فبراير", "Mar" => "مارس", "Apr" => "أبريل", "May" => "مايو", "Jun" => "يونيو", "Jul" => "يوليو", "Aug" => "أغسطس", "Sep" => "سبتمبر", "Oct" => "أكتوبر", "Nov" => "نوفمبر", "Dec" => "ديسمبر"); $your_date = date('ym-d'); // The Current Date $en_month = date("M", strtotime($your_date)); foreach ($months as $en => $ar) { if ($en == $en_month) { $ar_month = $ar; } } $find = array ("Sat", "Sun", "Mon", "Tue", "Wed" , "Thu", "Fri"); $replace = array ("السبت", "الأحد", "الإثنين", "الثلاثاء", "الأربعاء", "الخميس", "الجمعة"); $ar_day_format = date('D'); // The Current Day $ar_day = str_replace($find, $replace, $ar_day_format); header('Content-Type: text/html; charset=utf-8'); $standard = array("0","1","2","3","4","5","6","7","8","9"); $eastern_arabic_symbols = array("٠","١","٢","٣","٤","٥","٦","٧","٨","٩"); $current_date = $ar_day.' '.date('d').' / '.$ar_month.' / '.date('Y'); $arabic_date = str_replace($standard , $eastern_arabic_symbols , $current_date); return $arabic_date; }
Теперь включите этот файл на свою страницу:
include 'arabicdate.php';
Затем вы можете напечатать арабскую дату PHP:
echo ArabicDate();
Прямой форматированный пример:
Надеюсь, это поможет.
Вдохновленный ответом Amr SubZero выше:
Если кому-то еще нужно это, эти две функции отображают дату и время публикации на арабском языке для веб-сайта wordpress:
ДАТА:
functions.php
function single_post_arabic_date($postdate_d,$postdate_d2,$postdate_m,$postdate_y) { $months = array("Jan" => "يناير", "Feb" => "فبراير", "Mar" => "مارس", "Apr" => "أبريل", "May" => "مايو", "Jun" => "يونيو", "Jul" => "يوليو", "Aug" => "أغسطس", "Sep" => "سبتمبر", "Oct" => "أكتوبر", "Nov" => "نوفمبر", "Dec" => "ديسمبر"); $en_month = $postdate_m; foreach ($months as $en => $ar) { if ($en == $en_month) { $ar_month = $ar; } } $find = array ("Sat", "Sun", "Mon", "Tue", "Wed" , "Thu", "Fri"); $replace = array ("السبت", "الأحد", "الإثنين", "الثلاثاء", "الأربعاء", "الخميس", "الجمعة"); $ar_day_format = $postdate_d2; $ar_day = str_replace($find, $replace, $ar_day_format); header('Content-Type: text/html; charset=utf-8'); $standard = array("0","1","2","3","4","5","6","7","8","9"); $eastern_arabic_symbols = array("٠","١","٢","٣","٤","٥","٦","٧","٨","٩"); $post_date = $ar_day.' '.$postdate_d.' '.$ar_month.' '.$postdate_y; $arabic_date = str_replace($standard , $eastern_arabic_symbols , $post_date); return $arabic_date; }
Внутри цикла:
<date> <?php $postdate_d = get_the_date('d'); $postdate_d2 = get_the_date('D'); $postdate_m = get_the_date('M'); $postdate_y = get_the_date('Y'); echo single_post_arabic_date($postdate_d,$postdate_d2, $postdate_m, $postdate_y); ?> </date>
ВРЕМЯ:
functions.php
function single_post_arabic_time($posttime_h, $posttime_i, $posttime_a) { $ampm = array("AM", "PM"); $ampmreplace = array("ق.ظ", "ب.ظ"); $ar_ampm = str_replace($ampm, $ampmreplace, $posttime_a); header('Content-Type: text/html; charset=utf-8'); $standardletters = array("0", "1", "2", "3", "4", "5", "6", "7", "8", "9"); $eastern_arabic_letters = array("٠", "١", "٢", "٣", "٤", "٥", "٦", "٧", "٨", "٩"); $post_time = $posttime_h . ':' . $posttime_i." ".$ar_ampm; $arabic_time = str_replace($standardletters, $eastern_arabic_letters, $post_time); return $arabic_time; }
Внутри цикла:
<span>الساعة </span> <time> <?php $posttime_h = get_the_date('h'); $posttime_i = get_the_date('i'); $posttime_s = get_the_date('d'); $posttime_a = get_the_date('A'); echo single_post_arabic_time($posttime_h,$posttime_i,$posttime_a); ?> </time>
Как насчет этого:
function arabicDate($time) { $months = ["Jan" => "يناير", "Feb" => "فبراير", "Mar" => "مارس", "Apr" => "أبريل", "May" => "مايو", "Jun" => "يونيو", "Jul" => "يوليو", "Aug" => "أغسطس", "Sep" => "سبتمبر", "Oct" => "أكتوبر", "Nov" => "نوفمبر", "Dec" => "ديسمبر"]; $days = ["Sat" => "السبت", "Sun" => "الأحد", "Mon" => "الإثنين", "Tue" => "الثلاثاء", "Wed" => "الأربعاء", "Thu" => "الخميس", "Fri" => "الجمعة"]; $am_pm = ['AM' => 'صباحاً', 'PM' => 'مساءً']; $day = $days[date('D', $time)]; $month = $months[date('M', $time)]; $am_pm = $am_pm[date('A', $time)]; $date = $day . ' ' . date('d', $time) . ' - ' . $month . ' - ' . date('Y', $time) . ' ' . date('h:i', $time) . ' ' . $am_pm; $numbers_ar = ["٠", "١", "٢", "٣", "٤", "٥", "٦", "٧", "٨", "٩"]; $numbers_en = ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9']; return str_replace($numbers_en, $numbers_ar, $date); }
Примечание: параметр ($ time) должен быть отметкой времени Unix.
Вы запустили
locale -a
и проверили, что ваша система имеет локаль под названием «ar»? Это может быть названо чем-то более конкретным, например, «ar_AR.utf8» … Если вам нужно поддерживать арабский язык, написанный по-разному в нескольких системах, вы можете передать массив в setlocale (). Будет использовано первое имя локали в этом массиве, поддерживаемое системой.
Я использую эту функцию javascript, если я могу помочь:
<script type='text/javascript'> navig = navigator.appName; versn = parseInt(navigator.appVersion); if ( (navig == "Netscape" && versn >= 3) || (navig == "Microsoft Internet Explorer" && versn >= 4)) info = "true"; else info = "false"; function Ar_Date() { if (info == "true") { var info3 = new Date(); var info4=info3.getDay(); var info5=info3.getMonth(); var info6=info3.getDate(); var info7=info3.getFullYear(); var info8 = new Array('لأحد','الإثنين','الثلاثاء','الأربعاء','الخميس','الجمعة','السبت'); var info9 = info8[info4]; var info10 = new Array('جانفي','فيفري','مارس','أفريل','ماي','جوان','جويلية','أوت','سبتمبر','أكتوبر','نوفمبر','ديسمبر'); var info11 = info10[info5]; var info12=info9+'، '+info6+' '+info11+' '+info7; var info12=info9+'، '+info6+' '+info11; document.write(info12); } } </script>
function single_post_arabic_date($postdate_d,$postdate_d2,$postdate_m,$postdate_y) { $months = array("01" => "يناير", "02" => "فبراير", "03" => "مارس", "04" => "أبريل", "05" => "مايو", "06" => "يونيو", "07" => "يوليو", "08" => "أغسطس", "09" => "سبتمبر", "10" => "أكتوبر", "11" => "نوفمبر", "12" => "ديسمبر"); $ar_month =months[$postdate_m]; $find = array ("Sat", "Sun", "Mon", "Tue", "Wed" , "Thu", "Fri"); $replace = array ("السبت", "الأحد", "الإثنين", "الثلاثاء", "الأربعاء", "الخميس", "الجمعة"); $ar_day_format = $postdate_d2; $ar_day = str_replace($find, $replace, $ar_day_format); header('Content-Type: text/html; charset=utf-8'); $standard = array("0","1","2","3","4","5","6","7","8","9"); $eastern_arabic_symbols = array("٠","١","٢","٣","٤","٥","٦","٧","٨","٩"); $post_date = $ar_day.' '.$postdate_d.' '.$ar_month.' '.$postdate_y; $arabic_date = str_replace($standard , $eastern_arabic_symbols , $post_date); return $arabic_date; }
это просто улучшить функцию
<?php $postdate_d = get_the_date('d'); $postdate_d2 = get_the_date('D'); $postdate_m = get_the_date('m'); $postdate_y = get_the_date('Y'); echo single_post_arabic_date($postdate_d,$postdate_d2, $postdate_m, $postdate_y); ?>
Это работает для вас:
Setlocale (LC_ALL, 'ар'); echo strftime ('% A% d% B% Y');
Надеюсь, поможет