2011-05-31 11 views
26

मैं Symfony2 beta3 में एक वर्ग के रूप उपयोग कर रहा हूँ इस प्रकार है:अनुवाद Symfony2 वर्ग रूपों में चयन के विकल्प

namespace Partners\FrontendBundle\Form; 

use Symfony\Component\Form\AbstractType; 
use Symfony\Component\Form\FormBuilder; 

class ConfigForm extends AbstractType 
{ 
    public function buildForm(FormBuilder $builder, array $options) 
    { 
     $builder->add('no_containers', 'choice', array('choices' => array(1 => 'yes', 0 => 'no'))); 
     ... 

मैं 'हां' और 'नहीं' विकल्प अनुवाद करना चाहते हैं, लेकिन मैं नहीं जानता कि यहां अनुवादक का उपयोग कैसे करें।

उत्तर

80

आप हमेशा की तरह अनुवाद संसाधनों का उपयोग कर सकते हैं। यह मेरे लिए काम करता है:

$builder->add('sex', 'choice', array( 
     'choices' => array(
      1 => 'profile.show.sex.male', 
      2 => 'profile.show.sex.female', 
     ), 
     'required' => false, 
     'label'  => 'profile.show.sex.label', 
     'translation_domain' => 'AcmeUserBundle' 
    )); 

और फिर अपने अनुवाद को अपने बंडल के संसाधन-> अनुवाद निर्देशिका में जोड़ें। @CptSadface से

अद्यतन:

'choice_label' => 'typeName', 
'choice_translation_domain' => 'messages', 

डोमेन निर्दिष्ट के बिना, विकल्प अनुवाद नहीं कर रहे हैं:

में सिम्फोनी 2.7, CHOICE_LABEL तर्क का उपयोग, तो आप इस तरह अनुवाद डोमेन निर्दिष्ट कर सकते हैं।

+0

यह वास्तविक जवाब है। +1 –

+0

मैंने बहुवचन के साथ एक अनुवाद संदेश सहेजा है। क्या फॉर्म फॉर्म कोड (जैसे @bingen में से एक) में परिभाषित करना संभव है जो उपयोग करने के लिए गिनती है? जैसे "[...] सरणी (1 => 'profile.show.sex.male {count = 3}', 2 => 'profile.show.sex.male') [...]"।क्योंकि मुझे समस्या है, कि सिर्फ संदेश नाम प्रदान करने से सिर्फ एक डिफ़ॉल्ट ("{0} लिंक | {1} लिंक |] 1, + इंफ [लिंक") – Stefan

+0

मैं भूल गया: बिना किसी आवश्यकता के पूरे संदेश दिखाता है स्पष्ट रूप से एक कंटेनर या अनुवादक सेवा इंजेक्षन। – Stefan

4

मैंने उत्तर खोजने के लिए थोड़ी देर की खोज की, लेकिन अंत में मुझे पता चला कि सिम्फनी फॉर्म सामग्री का अनुवाद कैसे करता है। आपके मामले में सबसे आसान तरीका आपके एप्लिकेशन में वाईएएमएल या एक्सएलआईएफएफ अनुवाद फ़ाइल जोड़कर "हां" और "नहीं" के लिए एक अनुवाद जोड़ना प्रतीत होता है (जैसे ऐप/संसाधन/अनुवाद/संदेश.de.yml) या आपका बंडल । यह यहां वर्णित है: http://symfony.com/doc/current/book/translation.html

समस्या - मेरी राय में - यह है कि आप कस्टम अनुवाद कुंजी का उपयोग करने में सक्षम नहीं हैं। FOSUserBundle के लोग "फॉर्म थीम्स" (http://symfony.com/doc/2.0/cookbook/form/form_customization.html) के साथ इस (या समान) समस्या को हल करते हैं।

https://github.com/FriendsOfSymfony/FOSUserBundle/blob/master/Resources/views/Registration/register_content.html.twig#L1/https://github.com/FriendsOfSymfony/FOSUserBundle/blob/50ab4d8fdfd324c1e722cb982e685abdc111be0b/Resources/views/form.html.twig#L4

एक प्रपत्र थीम आप में रूपों में से काफी सब कुछ को संशोधित करने में सक्षम हो जोड़कर: यहाँ कोड के दो महत्वपूर्ण लाइनों अनुवाद कुंजी के रूप में प्रपत्र तत्व आईडी के उपयोग को प्राप्त करने के हैं टेम्पलेट्स - ऐसा करने का यह सही तरीका प्रतीत होता है।

(क्षमा करें, मैं बी/सी मैं दो से अधिक लिंक पोस्ट करने के लिए पर्याप्त प्रतिष्ठा नहीं है लिंक के दो विभाजित करने के लिए किया था। दु: खी।)

+0

मैं सभी डिफ़ॉल्ट रूप विषयों के URL जोड़ने के लिए भूल गया - एक अच्छा संदर्भ: https://github.com/symfony/symfony/blob/master/src/Symfony/Bridge/Twig/Resources/views/ फॉर्म/form_div_layout.html.twig – rkallensee

+1

लिंक में से एक टूटा हुआ है। – Mick

+3

मैंने टूटा लिंक तय किया। – rkallensee

3

सिम्फोनी 2.7 में, CHOICE_LABEL तर्क का उपयोग, तो आप इस तरह अनुवाद डोमेन निर्दिष्ट कर सकते हैं:

'choice_label' => 'typeName', 
'choice_translation_domain' => 'messages', 

डोमेन निर्दिष्ट के बिना, विकल्प अनुवादित नहीं कर रहे हैं।

+0

धन्यवाद CptSadface और @jxmallett! – bingen

0

सीपीटीएसएडफेस का जवाब मुझे मेरी इकाई विकल्पों का अनुवाद करने में मदद करता था।

$builder 
    ->add(
     'authorizationRoles', 
     null, 
     [ 
      'label' => 'app.user.fields.authorization_roles', 
      'multiple' => true, 
      'choice_label' => 'name', // entity field storing your translation key 
      'choice_translation_domain' => 'messages', 
     ] 
    );