2012-09-24 17 views
6

मेरे कोड:setlocale और strftime अनुवाद नहीं महीने

setlocale(LC_TIME, 'ca_ES'); 
echo strftime("%#d %B", strtotime($ticket->date_created)); 

आउटपुट कुछ की तरह:

28 August 
मेरी उम्मीद के बजाय

:

28 Agost 

मैं उम्मीद "Agost" क्योंकि वह यह है कि कैटलन भाषा (setlocale() के माध्यम से सेट)।

क्या यह setlocale और strftime काम करना चाहिए?

FYI करें: मेरे स्थानीय विकास मशीन, विंडोज 7 है स्थान के लिए सेट: एन-पीएच

उत्तर

16

स्थानीय नाम विंडोज़ पर अलग हैं। ऐसा लगता है कि यह अंग्रेजी के लिए डिफ़ॉल्ट है। Ubuntu 14.04 पर http://docs.moodle.org/dev/Table_of_locales

+0

धन्यवाद! 'Catalan_Spain' काम किया! – Obay

+0

@Obay अन्य प्रणालियों के साथ संगतता के लिए 'ca_ES'' रखना न भूलें – Sherbrow

+0

yup मैंने सभी तीन – Obay

2

strftime दिनांक प्रारूपों की स्थानीयकृत संस्करणों देता है। यदि आपको अप्रत्याशित परिणाम मिलते हैं, तो शायद आप जिस स्थानीय संस्करण की अपेक्षा कर रहे हैं वह आपके सिस्टम पर नहीं है।

मुझे विंडोज़ के साथ कोई अनुभव नहीं है, लेकिन मेरे डेबियन लिनक्स सर्वर पर, मुझे स्थानीयकृत तारों को स्थापित करना था।

3

:

पूरी लंबाई नाम डालकर देखें (आप कई कोशिश कर सकते हैं और यह पहली पाया ले जाएगा):

setlocale(LC_TIME, 'ca_ES', 'Catalan_Spain', 'Catalan'); 

आप इस मेज पर लग सकते हैं, सहायक हो सकता है जो setlocale(LC_TIME, 'de_DE.UTF8'); ने मुझे जर्मन महीने प्रारूप/नाम प्राप्त करने के लिए चाल की है :)

0

उन सभी के लिए, जो अभी भी मेरे लिए हैं, जो अभी भी सर्वर प्रतिबंधों के कारण strftime फ़ंक्शन नहीं कर सकते ... सही नहीं है लेकिन यह काम करता है।

$months[1] = "gennaio"; 
$months[2] = "febbraio"; 
$months[3] = "marzo"; 
$months[4] = "aprile"; 
$months[5] = "maggio"; 
$months[6] = "giugno"; 
$months[7] = "luglio"; 
$months[8] = "agosto"; 
$months[9] = "settembre"; 
$months[10] = "ottobre"; 
$months[11] = "novembre"; 
$months[12] = "dicembre"; 

// giorni 
$weekdays[0] = "domenica"; 
$weekdays[1] = "lunedì"; 
$weekdays[2] = "martedì"; 
$weekdays[3] = "mercoledì"; 
$weekdays[4] = "giovedì"; 
$weekdays[5] = "venerdì"; 
$weekdays[6] = "sabato"; 

function strftimeIta($format, $timestamp){ 

    global $weekdays, $months; 

    preg_match_all('/%([a-zA-Z])/', $format, $results); 

    $originals = $results[0]; 
    $factors = $results[1]; 


    foreach($factors as $key=>$factor){ 
     switch($factor){ 
      case 'a': 
       /*** Abbreviated textual representation of the day ***/ 
       $n = date('w', $timestamp); // number of the weekday (0 for sunday, 6 for saturday); 
       $replace = ucfirst($weekdays[$n]); 
       $replace = substr($replace, 0, 3); 
       break; 
      case 'A': 
       /*** Full textual representation of the day ***/ 
       $n = date('w', $timestamp); // number of the weekday (0 for sunday, 6 for saturday); 
       $replace = ucfirst($weekdays[$n]); 
       break; 
      case 'h': 
      case 'b': 
       /*** Abbreviated month name ***/ 
       $n = date('n', $timestamp); // Numeric representation of a month, without leading zeros 
       $replace = ucfirst($months[$n]); 
       $replace = substr($replace, 0, 3); 
       break; 
      case 'B': 
       /*** Full month name ***/ 
       $n = date('n', $timestamp); // Numeric representation of a month, without leading zeros 
       $replace = ucfirst($months[$n]); 
       break; 
      default: 
       /*** Use standard strftime function ***/ 
       $replace = strftime("%".$factor, $timestamp); 
       break; 
     } 
     $search = $originals[$key]; 
     $format = str_replace($search, $replace, $format); 
    } 
    return $format; 
} 
0

डेबियन 9 setlocale(LC_TIME, 'fr_FR.UTF8'); पर मुझे अच्छी तरह से फ्रेंच स्वरूपित दिन/माह प्रदर्शन पाने के लिए काम किया है। स्थानों निम्न क्रम के साथ स्थापित करना सुनिश्चित करें:

apt-get स्थानों

dpkg-reconfigure स्थानों

0

मुझे पता है कि यह एक पुराने सवाल यह है कि स्थापित है, लेकिन मैं मुझे लगता है वैसे भी योगदान दें।

यदि आप उस सर्वर में एसएसएच कर सकते हैं जिस पर आप काम कर रहे हैं, तो लिखें: locale -a और फिर आप अपने उपलब्ध लोकेशंस देख सकते हैं। यदि आप भाषा सूचीबद्ध नहीं हैं, तो इसे स्थापित करने की आवश्यकता है।

मेरे लिए, मैंने देखा कि मैं जिसकी तलाश कर रहा था: nb_NO.utf8 सूची में, इसलिए मैंने इसे लिखा है कि यह कैसे लिखा गया था: setlocale(LC_ALL, 'nb_NO.utf8') और यह मेरे लिए काम करता था।

संबंधित मुद्दे