get_the_date() возвращает год и день на английском языке, когда язык – арабский.

Вопрос или проблема

Я поменял язык WordPress на арабский. Теперь get_the_date() возвращает يناير 30, 2020 (половина на арабском, половина на английском), но мне нужно, чтобы дата была полностью на арабском, например: يناير ٣٠, ٢٠٢٠

Как я могу это сделать?

WordPress имеет date_i18n для получения даты в локализованном формате на основе временной метки.

Попробуйте:

echo date_i18n("d F Y (H:i)",$date) ;

Если кому-то еще это нужно, эти две функции отображают дату и время поста на арабском для сайта на 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;
}
<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>

Ответ или решение

Вопрос о том, как сделать формат даты полностью на арабском языке в WordPress, затрагивает специфику работы с локализацией в этой платформе. На данный момент, функция get_the_date() возвращает дату в комбинированном формате — часть на арабском, часть на английском. Если необходимо, чтобы дата отображалась полностью на арабском, включая арабские цифры, можно воспользоваться подходом, описанным ниже.

Решение:

  1. Функция для локализации даты:

    Разработка пользовательской функции в functions.php, которая преобразует месяц, день недели и числа в дату на арабском языке.

  2. Код функции:

    Использование функции преобразования, чтобы все составные элементы даты были на арабском, включая замену стандартных арабских цифр.

    function single_post_arabic_date($postdate_d, $postdate_d2, $postdate_m, $postdate_y) {
       // Перевод названий месяцев
       $months = [
           "Jan" => "يناير", "Feb" => "فبراير", "Mar" => "مارس", "Apr" => "أبريل",
           "May" => "مايو", "Jun" => "يونيو", "Jul" => "يوليو", "Aug" => "أغسطس",
           "Sep" => "سبتمبر", "Oct" => "أكتوبر", "Nov" => "نوفمبر", "Dec" => "ديسمبر"
       ];
    
       $en_month = $postdate_m;
       $ar_month = $months[$en_month] ?? $en_month; // Используем оператор ?? для безопасности
    
       // Перевод дней недели
       $find = ["Sat", "Sun", "Mon", "Tue", "Wed", "Thu", "Fri"];
       $replace = ["السبت", "الأحد", "الإثنين", "الثلاثاء", "الأربعاء", "الخميس", "الجمعة"];
       $ar_day = str_replace($find, $replace, $postdate_d2);
    
       // Преобразование цифр
       $standard = ["0","1","2","3","4","5","6","7","8","9"];
       $eastern_arabic_symbols = ["٠","١","٢","٣","٤","٥","٦","٧","٨","٩"];
    
       $post_date = "$ar_day $postdate_d $ar_month $postdate_y";
       $arabic_date = str_replace($standard, $eastern_arabic_symbols, $post_date);
    
       return $arabic_date;
    }
  3. Вызов функции:

    Используйте PHP-код в шаблонах WordPress для отображения даты. Это обеспечит отображение полностью на арабском языке:

    <?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);
    ?>
  4. Локализация времени:

    Подобным образом, для отображения времени с использованием арабских цифр и обозначений времени суток, добавьте вторую функцию:

    function single_post_arabic_time($posttime_h, $posttime_i, $posttime_a) {
       // Перевод обозначений времени суток
       $ampm = ["AM" => "ق.ظ", "PM" => "ب.ظ"];
       $ar_ampm = $ampm[$posttime_a] ?? $posttime_a;
    
       // Преобразование цифр
       $standardletters = ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9"];
       $eastern_arabic_letters = ["٠", "١", "٢", "٣", "٤", "٥", "٦", "٧", "٨", "٩"];
       $post_time = "$posttime_h:$posttime_i $ar_ampm";
       $arabic_time = str_replace($standardletters, $eastern_arabic_letters, $post_time);
    
       return $arabic_time;
    }

    Вызов функции для отображения времени:

    <?php
     $posttime_h = get_the_date('h');
     $posttime_i = get_the_date('i');
     $posttime_a = get_the_date('A');
    
     echo single_post_arabic_time($posttime_h, $posttime_i, $posttime_a);
    ?>

Вывод:

Полноценное отображение даты и времени на арабском языке требует создания пользовательских функций, которые преобразуют все структурные элементы даты в желаемый формат. Эти функции покажут дату и время в читаемом формате, удовлетворяя требованиям локализации и стилистики арабского языка.

Оцените материал
Добавить комментарий

Капча загружается...