2011-12-26 4 views
2

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

 $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); 

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

Благодаря

+0

Локальнозависимых обоснованные ответы ниже, являются лучшим способом пойти для PHP логики, но вы может рассмотреть извлечение из базы данных с помощью функции ['TO_CHAR'] (http://infolab.stanford.edu/~ullman/fcdb/oracle/or-time.html#date%20format), например 'SELECT TO_CHAR (datefield, 'YYYY-MM-DD')', чтобы избежать каких-либо проблем strtotime. – cmbuckley

ответ

2

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

$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); 

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

+0

этот метод не очень чист (или немного), чем способ, предложенный оператором. Но может быть полезно знать, что на самом деле этот метод имеет то преимущество, что он не зависит от установки локальных сетей на серверной системе. – malko

+0

Я предпочитаю этот вариант. Если мне нужен другой язык или отличный перевод, чем стандартный, то единственное, что мне нужно изменить, это ключ и значения в массиве. Это больше подходит для повторного использования, и это то, что я имею в виду, когда думаю «менее уродливый»; o) – Kokers

+0

Я не хотел менять свою локальную настройку, поэтому я предпочитаю это решение, спасибо :) –

4

использование этого

<?php 

setlocale(LC_TIME, 'fr_FR'); 

echo strftime("%d %b %Y", strtotime($date)); //use your dates timestamp 
?> 
+0

Единственное, что нужно учитывать решение - двусмысленность годовой части выпуска Oracle; Использование 'TO_CHAR', как указано выше, удалит это. – cmbuckley

+0

с использованием формата «DD-Mon-YYYY» в запросе оракула разрешит двусмысленность – Dau

2

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

вот основной Exemple:

// 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); 
1

OO Стиль:

<?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 
?> 
2

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

SELECT TO_CHAR(sysdate, 'DD-MONTH-YYYY', 'NLS_DATE_LANGUAGE=French') FROM DUAL; 
+0

, что довольно круто –

Смежные вопросы