Używam "knp Doctrine Translatable" do tłumaczenia jednostek. Jak na razie działa świetnie. Teraz dochodzę do punktu, w którym chciałbym mieć ogólne rozwiązanie, które działa dla dowolnej ilości języków. Tak więc myślę o użyciu osadzonego formularza (Kolekcje), który będzie obsługiwać Translatables dla Entity. Teraz wszystko działa tak, jak powinno, z tym wyjątkiem, że w celu dodania nowego tłumaczenia nie można ustawić ID tłumaczenia. Czy ktoś próbował to osiągnąć? Zastanawiałem się, czy jest łatwiejszy sposób, aby uniknąć komplikacji.Tłumaczenia i18n z tłumaczeniem knp Rozszerzenie Doctrine
Jak dotąd, tak dobrze, tutaj idź do moich typów, abyś mógł lepiej zrozumieć architekturę.
// Main type that has a linkTranslationType with the translations
class linkType extends AbstractType {
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->add('name', 'text', array(
'label' => 'Name'
))
->add('translations', 'collection', array(
'type' => new linkTranslationType(),
'label' => false,
'allow_add' => true,
'allow_delete' => true
));
}
public function setDefaultOptions(OptionsResolverInterface $resolver)
{
$resolver->setDefaults(array(
'data_class' => 'MyBundle\Entity\Link'
));
}
}
To LinkTranslationType, który jest wyświetlany jako "rzędzie" za język: en_EN Anchor http // URL/pl
class linkTranslationType extends AbstractType {
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->add('locale', 'text',array(
'label' => 'Anchor'
))
->add('linkText', 'text',array(
'label' => 'Anchor'
))
->add('linkUrl', 'text', array(
'label' => 'Url'
))
;
}
public function setDefaultOptions(OptionsResolverInterface $resolver)
{
$resolver->setDefaults(array(
'data_class' => 'MyBundle\Entity\LinkTranslation'
));
}
}
tak, na przykład, starając się dodać nowy wpis: en_EN Kotwica http // url/pl
dostaję:
id translatable_id linkText linkUrl locale
7 NULL Anchor http//url/en en_EN
Próbowałem odkryć, jak działa usługa tłumaczenia, ale wciąż nie miałem czasu na sprawdzenie całego źródła. Wreszcie, próbowałem ustawić również TranslatableId, bez większego szczęścia.(Aktualizacja: w komentarzach)
Dotychczas mogłem:
- # 1 Włóż nowy związek, ale nie tłumaczenia (są one zapisywane null jako traslatable_id)
- # 2 Zapisz istniejące tłumaczenia łącza prace doskonałymi
Niektóre inne notatki, aby dodać trochę kontekstu:
1 próbowałem:
$link = new Link();
if ($form->isValid()) {
$link->mergeNewTranslations(); // but this also does assigm the Id to the translations
}
2 Aby zapisać istniejące tłumaczenie Właśnie przeszedł istniejący podmiot Link do konstruktora formularza
3 Wiem, że mogłem pętlę i przypisać tłumaczyć elementy jednostki nadrzędnej
Ale to jest hack, którego nie chcę zrobić, jeśli mam lepszą opcję:
// persist($link); and flush()
foreach ($link->getTranslations() as $linkTranslation) {
$linkTranslation->setTranslatable($link);
$em->persist($linkTranslation);
}
$em->flush();
Tak oczywiście nie jest to rodzaj odpowiedzi szukam :)
Po przyjrzeniu się bliżej źródłu: doktryna-bahaviors/src/Model/Translatable/TranslationMethods Teraz wiem, że dodanie "tłumaczalnego" (Type: entity) do typu linkTranslationType mogę ustawić id_dokumentu. Ale jest trochę uciążliwe przy zbieraniu formularzy i tak dalej. Muszę znaleźć łatwiejszą konfigurację. Jeśli więc ktoś osiągnął to w inny sposób, daj mi znać. –
Cześć! Mam podobny problem i nie wiem, jak do niego podejść. Próbowałem Twojego rozwiązania, ale pojawia się ten błąd: ani właściwość "tłumaczenia", ani jedna z metod "getTranslations()", "translations()", "isTranslations()", "hasTranslations()", "__get()" istnieje i ma publiczny dostęp w klasie "SocialCar \ CoreBundle \ Entity \ Accessory". – petekaner
Witam, próbowałem tego rozwiązania dla Symfony 3. i postępowałem zgodnie z instrukcjami z tego ref. adres URL http://a2lix.fr/bundles/translation-form/3.x.html. Błąd jest następujący: ani właściwość "tłumaczenia" ani jedna z metod "getTranslations()", "translations()", "isTranslations()", "hasTranslations()", "__get()" istnieją i mają publiczny dostęp w klasie "CLASS_PATH" .. Proszę dać mi znać, jeśli masz rozwiązanie. Stworzyłem dwie strony treści: Strony treści i Przetwarzanie stron treści. –