Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [Symfony][Symfony2] Jak tłumaczyć opisy pól w formularzach?
rcetra
post
Post #1





Grupa: Zarejestrowani
Postów: 18
Pomógł: 0
Dołączył: 16.12.2011

Ostrzeżenie: (0%)
-----


Witam,

mam kolejny problem logistyczny. Zadanie wydaje się proste, formularze mają mieć tłumaczenia opisów pól.
Wszystko wydaje się proste, w szablonie *.twig czegoś w rodzaju:
  1. <h1>{{ 'text.show.title'|trans({}, 'BDKTranslatorBundle') }}</h1>

i po sprawie. Z formualrzami już nie ma tak prosto, bo formualrz domyślnie może wyglądać tak:
  1. <form method="post" {{ form_enctype(filter_form) }}>
  2. {{ form_label(filter_form) }}
  3. {{ form_errors(filter_form) }}
  4. {{ form_widget(filter_form) }}
  5. <p>
  6. <button type="submit">Filter</button>
  7. </p>
  8. </form>

...więc trzeba by zdefiniować odpowiednie teksty w samym pliku formularza *Type.php. Tylko, że tam nie mam dostępu do metody $this->get('translate').
Możecie mi podpowiedzieć, jakiś sposób tłumaczenie? Może to kwestia dodefiniowania czegoś w formularzu?

Mnie przychodzi albo tłumaczenie po stronie pliku twig każdego pola oddzielnie albo podmiana form_label(filter_form) podobnie jak podają na stronie http://symfony.com/doc/current/cookbook/fo...to-field-labels

Chyba, że mogę uzyskać dostęp do obiektu translatora jakoś z poziomu pliku *Type.php

Ciągle się uczę, proszę więc o wyrozumiałość. To pewnie jest oczywiste jak już się to wie.

--
Znalazłem coś takiego: http://sf.khepin.com/2012/01/form-label-tr...n-in-symfony-2/
Warto przetestować...
--
Niestety powyższa metoda kiepsko sobie radzi z polami entity kiedy mają być pokazane jako chceckboxy. Są wtedy tłumaczone wartości a nie sam opis pola.
--
Ostatecznie rzecz rozwiązałem średnio fajnie, ale działa i działa tak jak chcę. Może komuś się przyda.
W kontrolerze po utworzeniu obiektu fotmularza przekazuję obiekt z translatorem:
  1. ...
  2. $tft = new TextFilterType();
  3. $tft->setTr($this->get('translator'));
  4. $filter_form = $this->createForm($tft, $defaultData);
  5. ...

Same tłumaczenia umieściłem w Resources\translations\messages.pl.yml dzięki czemu nie muszę niczego więcej podawać translatorowi.
W samej klasie TextFilterType jest po prostu metoda:
  1. ...
  2. public function setTr($tr)
  3. {
  4. $this->tr = $tr;
  5. }
  6. ...

oczywiście gdzieś wcześniej deklaruję private $tr;
w samym formularzu używam już tylko
  1. ...
  2. public function buildForm(FormBuilder $builder, array $options)
  3. {
  4. $builder
  5. ->add('lang', 'entity', array(
  6. 'class' => 'BDKTranslatorBundle:TranslatorLang',
  7. 'property' => 'lng_name',
  8. 'multiple' => true,
  9. 'expanded' => true,
  10. 'label' => $this->tr->trans('text.filter.lang'),
  11. 'required' => false
  12. ))
  13. ...

Osobiście uważam, że to duże niedopatrzenie, że muszę dookoła trochę rzecz robić. W końcu opisy pól zwyke też się tłumaczy a zalecenie jest, żeby korzystać właśnie z katalogu Form do trzymania tam formatek.
Jeśli ktoś ma lepsze rozwiązanie, to poproszę bardzo, nawet na priv jakoś.

Ten post edytował rcetra 25.01.2012, 12:57:10
Go to the top of the page
+Quote Post

Posty w temacie


Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 24.08.2025 - 11:32