Перевод даты PHP () для многоязычного сайта - PullRequest
15 голосов
/ 12 февраля 2011

Я пытаюсь создать условный перевод внутренней функции PHP date ().Можно ли каким-то образом переопределить внутренние переменные - например, - date ('M'), date ('y') и т. Д., Чтобы в оставшуюся часть функции PHP на основе этого теста были добавлены разные строки:1002 *

Ниже приведен рабочий пример кода, который я использую для модуля дат.Поскольку $date определяется многими переменными, содержащимися в этом определении, важно сначала условно переопределить переменные внутри date() в PHP, чтобы избежать необходимости переопределять переменную 100 или более раз в каждом ключе.

if($start <= $end):
    if($start == $end):
        //Month Day, Year
        $date =  date('F', $start).' '.date('j',$start).', '.date('Y', $start);
    else:
        if($start_year == $end_year):
            if($start_month == $end_month):

                //Month Day - Day, Year
                $date = date('F', $start).' '.date('j',$start).' - '.date('j', $end).', '.date('Y', $start);
            else:
                //Month Day - Month Day, Year
                $date =  date('F', $start).' '.date('j',$start).' - '.date('F', $end).' '.date('j', $end).', '.date('Y', $start);
            endif;
        else:
            //Month Day, Year - Month Day, Year
            $date =  date('F', $start).' '.date('j',$start).', '.date('Y', $start).' - '.date('F', $end).' '.date('j', $end).', '.date('Y', $end);
        endif;
    endif;
endif;

Ответы [ 4 ]

28 голосов
/ 12 февраля 2011

Всякий раз, когда вам нужно манипулировать метками даты / времени на основе локали, вы должны использовать strftime :

switch ($lang) {
    case 'en':
        setlocale(LC_TIME, 'en_CA.UTF-8');
        echo strftime("%B %e, %G");
        break;
    case 'fr':
        setlocale(LC_TIME, 'fr_CA.UTF-8');
        echo strftime("%e %B %G");
        break;
}

Результаты:

February 11, 2011  // en
11 février 2011    // fr

Конечно, вам нужно установить локали в вашей системе. В Ubuntu за пример:

bash-4.1$ sudo locale-gen fr_CA.UTF-8
8 голосов
/ 12 февраля 2011
    $date =  date('F', $start).' '.date('j',$start).', '.date('Y', $start);

Это довольно болезненный путь.Строка формата в date() не должна быть одним символом.Эта строка может быть уменьшена до

$date = date('F j Y');

И, учитывая, что вы можете получить простую

switch($whats_my_locale) {
    case 'FR':
       $format = 'date format characters for a french date';
       break
    case 'EN' :
       $format = 'format chars for english date'
       break
    case etc....
    default:
       $format = 'default date format string here';
}

$local_date_string = date($format, $start);

и все, что вам нужно.

0 голосов
/ 16 января 2019

Может быть сделано довольно просто с помощью define или переключателя.

DEFINE (PHP 7)

<?php
// With Define
$untranslated_date = $date('D');
translate_date($untranslated_date);
							
function translate_date($untranslated_date)
{
  define('translated_days', array(
	'Mon' => 'Ma',
	'Tue' => 'Di',
	'Wed' => 'Wo',
	'Thu' => 'Do',
	'Fri' => 'Vr',
	'Sat' => 'Za',
	'Sun' => 'Zo')
	);
	
	echo translated_days[$untranslated_date];
}

SWITCH (или оператор if)

// With a switch (or if)
$untranslated_date = $date('D');
translate_date($untranslated_date);

function translate_date($untranslated_date)
{
switch ($untranslated_date)
{
	case "Mon":
	$translated_date = "Ma";
	break;
		
    case "Tue":
	$translated_date = "Di";
	break;
		
	case "Wed":
	$translated_date = "Wo";
	break;
		
	case "Thu":
	$translated_date = "Do";
	break;
		
	case "Fri":
	$translated_date = "Vr";
	break;
		
	case "Sat":
	$translated_date = "Za";
	break;
		
	case "Sun":
	$translated_date = "Zo";
	break;
}
	
echo $translated_date;
}
0 голосов
/ 12 февраля 2011

Я уверен, что у вас есть, но вы рассматривали только использование числовых значений?

Кроме того, если вы их используете, помните, что в США есть месяцы / сутки, в отличие от Великобритании и других.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...