2012-02-13 12 views
7

स्विचिंग कोई मुझे बता सकता है कि Symfony2 में लोकेल दिनांक प्रारूप को कैसे स्विच करें?दिनांक लोकेल

कोई बात नहीं क्या मैं config (framework.session.default_locale) में निर्धारित करते हैं, यह हमेशा अंग्रेजी में सप्ताह के दिनों रिटर्न (मैं जर्मन भाषा में काम करने के दिन की आवश्यकता होगी):

$start->format("D d.m.Y"); 

जब मैं उत्पादन डिफ़ॉल्ट स्थान यह हमेशा returnes "डी" Btw, कोई बात नहीं क्या मैं config.yml में सेटअप

echo \Locale::getDefault() 

अतिरिक्त जानकारी:

मैं एक तरह से यह है कि में तारीख को स्वरूपित करने में सक्षम होना चाहते मेरे स्थानीय सिस्टम और लाइव सर्वर पर सही ढंग से आउटपुट (सही जर्मन सप्ताह के साथ अर्थ) हो जाता है। इसे स्ट्रैटाइम के साथ आजमाएं जो सिस्टम के स्थापित लोकेशंस का उपयोग करता है और इसके साथ वास्तविक परेशानी होती है, क्योंकि स्थानीय पैकेजों में लाइव और देव मशीनों पर अलग-अलग नामकरण योजनाएं होती हैं। एक और अतः यह यहाँ के बारे में सवाल ही नहीं है: PHP: why is my date formated on the server differently?

+0

देखें उनका कहना है कि वहाँ कोई के लिए http://stackoverflow.com/a/23424315/1001110 –

उत्तर

3

मैं अपने प्रोजेक्ट में दिनांक फ़ॉर्मेट करने के लिए इस तरह के कोड का इस्तेमाल किया (आप को चालू करने की आवश्यकता होगी PHP के लिए intl एक्सटेंशन):

<?php 
    class DefaultController extends Controller { 
     public function indexAction() { 
      $date = new \DateTime("now"); 
      $formatter = new \IntlDateFormatter(\Locale::getDefault(), \IntlDateFormatter::NONE, \IntlDateFormatter::NONE); 
      $formatter->setPattern("EEEE Y-M-d"); 
      return array('locale' => \Locale::getDefault(), "intl" => $formatter->format($date)); 
    } 

और यह मेरे लिए ठीक काम करता है। कैसे स्वरूपण गपशप आप http://userguide.icu-project.org/formatparse/datetime

पर पा सकते हैं बनाने के लिए लेकिन मैं टहनी के लिए एक सहायक है, तो आप बना सकते हैं अपने खुद के

8

Symfony2 इसके मूल में किसी भी तारीख फ़ॉर्मेटर प्रदान नहीं करता है।

यह सब सत्र और अनुरोध को स्नीफ करके \Locale::getDefault() मान को कॉन्फ़िगर करना है।

आपको प्रति स्थानीय स्वरूपण को संभालने के लिए कुछ अतिरिक्त सेवाएं प्रदान करनी होंगी, जैसे SonataIntlBundle

यह बंडल एक विस्तार में कुछ ट्विग फ़िल्टर जोड़ता है, और कुछ सहायक प्रदान करता है जिसे कहीं भी इस्तेमाल किया जा सकता है।

एक बार सक्रिय, आप उदाहरण के लिए अपने टेम्पलेट में उन्हें इस्तेमाल कर सकते हैं:

{{ my_date|format_datetime }} 

अधिक यहाँ जानकारी: https://github.com/sonata-project/SonataIntlBundle/blob/master/Resources/doc/reference/datetime.rst

+2

धन्यवाद इसके लिए सिम्फनी-आउट-द-बॉक्स कार्यक्षमता। लेकिन इंटेल का उपयोग करके इसे चलाने के लिए कुछ रास्ता होना चाहिए। मैंने सोनाटाइन्टलबंडल के कोड को देखा, लेकिन मुझे यह नहीं मिला। मैं मंगल पर महसूस कर रहा हूं- क्या मैं वास्तव में एकमात्र व्यक्ति हूं जिसके पास यह समस्या है ?? – stoefln

+0

सोनाटा से कई चीजें आपको सोच सकती हैं कि आप मंगल पर हैं :) लेकिन सिम्फनी से संबंधित कोड के कई हिस्सों की तरह है :) बेशक, आप सीधे इंटेल * कक्षाओं का उपयोग कर सकते हैं, और उन्हें $ सत्र-> getLocale का उपयोग करके कॉन्फ़िगर कर सकते हैं() जो कुछ भी। – Florian

+0

अब मुझे मिल गया है, मेरे लिए अनुपलब्ध मूल्यवान जानकारी का कुछ टुकड़ा था: उपयोगकर्ता लोकेल लॉगिन पर सेट हो जाता है, इसलिए कॉन्फ़िगरेशन को बदलने से उपयोगकर्ता का लॉग आउट होने तक कोई प्रभाव नहीं पड़ता है। धन्यवाद! – stoefln

1

एक और अधिक सरल तरीका अनुवाद फाइलों में प्रारूपों स्टोर करने के लिए है नहीं मिला था, इस तरह:

में फ़ाइल "संदेशों .yml एन।":।

date.format: m/d/Y 
time.format: g:i A 

"संदेश में fr .yml "फ़ाइल:

date.format: d/m/Y 
time.format: H:i 

फिर, एक टहनी फ़ाइल में, आप यह कर सकते हैं:

{{ my_date|date('date.format'|trans) }} 

तो दिनांक स्वचालित रूप से, सही प्रारूप में होगा वर्तमान स्थान का उपयोग कर।

+0

यह आईएमओ का सबसे आसान तरीका है। और यह आपको लंबे, लघु आदि जैसे प्रारूपों को परिभाषित करने की संभावना देता है और बिना किसी अतिरिक्त बंडलों के उनका उपयोग करता है। –

+0

यहां एकमात्र समस्या यह है कि दिनों और महीनों के नामों का अनुवाद नहीं किया जाता है। –

2

बस अपने config.yml

services: 
    twig.extension.intl: 
     class: Twig_Extensions_Extension_Intl 
     tags: 
      - { name: twig.extension } 

में टहनी एक्सटेंशन जोड़ें अपने टेम्पलेट में टहनी Syntaxe: {{myDate | localizeddate ('sizeDate', 'sizeHour', 'locale'}} myDate: डेटटाइम ऑब्जेक्ट आकार दिनांक होना चाहिए: कोई भी/छोटा/मध्यम/लंबा/पूर्ण आकार हो सकता है: कोई भी/छोटा/मध्यम/लंबा/पूर्ण स्थान: डिफ़ॉल्ट रूप से वैकल्पिक सत्र भाषा उपयोग हो जाएगा, लेकिन आप कोई त्रुटि मिलती है "पूर्ण स्थानीयकरण क्षमताओं के लिए 'intl' एक्सटेंशन स्थापित करें"

यदि आप एक अलग स्थान मूल्य

{{ myDate | localizeddate('full', 'none') }} ({{ myDate | localizeddate('none', 'short') }}) 
<!-- 
locale "fr" : vendredi 21 décembre 2012 (13:37) 
locale "en : Friday, December 21, 2012 (13:37 PM) 
--> 

मजबूर कर सकते हैं

php5-intl पैकेज इंस्टॉल करें उदाहरण के लिए डेबियन सर्वर सह mmand हो जाएगा: apt-get स्थापित PHP5-intl

न अपना संचय साफ़ करने भूलना;)

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