Преобразование месяцев на другой язык - PullRequest
2 голосов
/ 26 декабря 2011

У меня есть дата, возвращенная базой данных (оракул) в таком формате, как этот 01-MAY-11: и перевести месяц с английского на френш (с мая на май), Я сделал это:

        $date=str_replace("JAN","Janvier",$date);
        $date=str_replace("FEB","Février",$date);
        $date=str_replace("MAR","Mars",$date);
        $date=str_replace("APR","Avril",$date);
        $date=str_replace("MAY","Mai",$date);
        $date=str_replace("JUN","Juin",$date);
        $date=str_replace("JUL","Juillet",$date);
        $date=str_replace("AUG","Août",$date);
        $date=str_replace("SEPT","Septembre",$date);
        $date=str_replace("OCT","Octobre",$date);
        $date=str_replace("NOV","Novembre",$date);
        $date=str_replace("DEC","Décembre",$date);

Но я нахожу это уродливым, поэтому есть более краткий способ сделать это.

Спасибо

Ответы [ 5 ]

4 голосов
/ 26 декабря 2011

используйте это

<?php

setlocale(LC_TIME, 'fr_FR');

echo strftime("%d %b %Y", strtotime($date)); //use your dates timestamp
?>
2 голосов
/ 26 декабря 2011

Хотя региональные решения являются лучшими, также возможно TO_CHAR с опцией NLS_DATE_LANGUAGE для вывода этого напрямую из Oracle:

SELECT TO_CHAR(sysdate, 'DD-MONTH-YYYY', 'NLS_DATE_LANGUAGE=French') FROM DUAL;
2 голосов
/ 26 декабря 2011

Вы должны установить свои локальные настройки, используя setlocale для получения даты, месяца и дня на желаемых языках

вот базовый пример:

// here's a current list of locales you can find on systems for french 
$locales = array('fr_FR.utf8','fr_FR.UTF8','fr_FR.utf-8','fr_FR.UTF-8','fr_FR','fr');
setlocale(LC_TIME,$locales);
//now you can call your localized date function

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

// keep track of locals setting:
$loc = setlocale(LC_TIME,0);
$tmpLoc = setlocale(LC_TIME,$locales);
//your date call here and then restore locale setting
setlocale(LC_TIME,$loc);
2 голосов
/ 26 декабря 2011

Я бы использовал массив для хранения перевода месяцев:

$mc = array("jan"=>"Janvier","feb"=>"Février", ....); //(and so on)

$new_date = explode('-',$date);
$new_date[1] = $mc[strtolower($new_date[1])];
$new_date = implode('-',$new_date);

конечно, вам нужно проверить, если его дата и убедитесь, что месяц всегда второй

1 голос
/ 26 декабря 2011

ОО Стиль:

<?php
class FrDate extends DateTime 
{
    public function month($format) 
    {
        $english = array('Jan','Febr','Mar','Apr','May','Jun','Jul','Aug','Sept','Oct','Nov','Dec');
        $french = array('Janvier','Février','Mars','Avril','Mai','Juin','Juillet','Août','Septembre','Octobre','Novembre','Décembre');

        return str_replace($english, $french, parent::format($format));
    }
}

$date = new FrDate('26 Dec 2011');

echo $date->month('M'); //Output: Décembre
?>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...