Soru Symfony2 sınıf formlarındaki seçme seçeneklerini çevirin


Symfony2 Beta3'te aşağıdaki gibi bir sınıf formu kullanıyorum:

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')));
        ...

'Evet' ve 'hayır' seçeneklerini tercüme etmek istiyorum ancak çevirmenleri nasıl kullanacağımı bilmiyorum.


27
2018-05-31 13:03


Menşei




Cevaplar:


Çeviri kaynaklarını her zamanki gibi kullanabilirsiniz. Bu benim için çalıştı:

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

Sonra çevirilerinizi Paketinizin Kaynakları-> çeviriler dizinine ekleyin.

@ CptSadface'den güncelleme:

İçinde Symfony 2.7choice_label argümanını kullanarak çeviri alanını şu şekilde belirtebilirsiniz:

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

Alanı belirtmeden, seçenekler çevrilmez.


82
2018-01-04 02:00



Bu gerçek bir cevap. +1 - Carrie Kendall
Çoğulculuk ile bir çeviri mesajı kaydettim. Kullanılacak bir form türü kodu (@bingen gibi) tanımlamak mümkün mü? Örneğin. "[...] dizi (1 => 'profile.show.sex.male {count = 3}', 2 => 'profile.show.sex.male') [...]". Sorunum olduğu için, yalnızca ileti adını sağlamanızın yalnızca bir varsayılan ileti yerine tüm iletiyi göstermesi ("{0} Bağlantılar | {1} Bağlantı |] 1, + Inf [Bağlantılar") - Stefan
Unutmuşum: Bir konteynır ya da çevirmen hizmetini açıkça enjekte etmenize gerek kalmadan. - Stefan
Bu biraz meta, ama seçim öğelerinden biri "dişi" olmamalı mı? Bilgisayar bilimi ile ilgili bir web sitesinde olduğumuzu biliyorum, ama yine de… - zopieux
@webyseo Orijinal cevabımda söylediğim gibi, Kaynaklar -> çeviriler klasöründe (geç cevap için özür dilerim, biraz bağlantım kesildi) - bingen


Bir cevap bulmak için bir süre aradım ama sonunda Symfony'nin form içeriğini nasıl çevirdiğini öğrendim. Davanızdaki en kolay yol, uygulamanıza bir YAML veya XLIFF çeviri dosyası ekleyerek "evet" ve "hayır" için bir çeviri eklemektir (ör. App / Resources / translations / messages.de.yml) veya paketiniz . Bu burada açıklanmıştır: http://symfony.com/doc/current/book/translation.html

Sorun - benim görüşüme göre - özel çeviri anahtarlarını kullanamayacaksınız. FOSUserBundle'dan gelen çocuklar, bu "ya da benzer" bir sorunu "Form Temaları" ile çözer (http://symfony.com/doc/2.0/cookbook/form/form_customization.html). Çeviri anahtarı olarak form öğesi kimliğinin kullanımını sağlamak için iki önemli kod satırı vardır:

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

Form Teması ekleyerek şablonlardaki formların hemen hemen herşeyi değiştirebilirsin - bu, bunu yapmanın doğru yolu gibi görünüyor.

(Maalesef, iki bağlantıyı ayırmak zorunda kaldım b / c İkiden fazla bağlantı göndermek için yeterli saygınlığım yok. Üzgünüm.)


4
2017-08-18 18:14



Tüm varsayılan form temalarının URL'sini eklemeyi unuttum - iyi bir referans: github.com/symfony/symfony/blob/master/src/Symfony/Bridge/Twig/... - rkallensee
Linklerden biri bozuk. - Mick
Kırık bağlantıyı tamir ettim. - rkallensee


Symfony 2.7, kullanarak CHOICE_LABEL argüman, çeviri alanını şu şekilde belirtebilirsiniz:

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

Alanı belirtmeden, seçenekler çevrilmez.


3
2017-07-31 09:33



Teşekkürler CptSadface ve @jxmallett! - bingen


CptSadface'in cevabı, varlık seçimlerimi tercüme etmeme yardımcı oldu.

$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',
        ]
    );

0
2017-09-08 11:46