Autor Zpráva
kozusnikjan
Profil *
Ahoj,
na překlady v Symfony2 používám doctrine2 rozšíření Translateable. Už se v tom piplám dost dlouho a dostal jsem se snad nejdál - už to vloží do databáze bez chyby, u vloženého překladu to uloží id referenčího textu... problém ale je, že i když vložím originální text, aniž bych chtěl vložit překlad, tak mi to překlad vloží samo od sebe a navíc jako locale nastaví en_US. Druhá věc je, že když změním jazyk, tak mi to pořád vypisuje v tom původním. Co tam mám špatně? Už jsem to psal několikrát podle návodu... ale pořád nic. Níže příkládám Text.php, TextTranslation.php, TextController.php, config.yml

http://pastebin.com/p2j3TXpv TextController.php
http://pastebin.com/ajetbxRU Text.php
http://pastebin.com/GGbtSAui TextTranslation.php
http://pastebin.com/ZqAAiYbJ config.yml
aDAm
Profil
Přepínáš ten translatable listener na jazyk který máš aktuálně aktivní? nebo tam máš default?
kozusnikjan
Profil *
Jediné nastavení jazyka mám v config.yml
kozusnikjan
Profil *
Co s tím teda prosím vás?
aDAm
Profil
Nevím jak to funguje v symfony2, ale já abych přepnul jazyk tak musím ten jazyk dostat do listeneru: https://github.com/l3pp4rd/DoctrineExtensions/blob/master/lib/Gedmo/Translatable/TranslatableListener.php
kozusnikjan
Profil *
Aha. Zkusím :) a jak vyřešit to vkládání? Duplicitní vložení nepřeloženého textu jak do tabulky texts, tak to tabulky texts_translates?
aDAm
Profil
Tak to bohužel netuším, s tím sem se nesetkal. Pokud nezměním jazyk a mám jej stejny jako default, tak to uloží do hlavní tabulky, pokud změním jazyk na jiný než hlavní tak to ukládá do překladové. Možna se zkusit kouknout do toho listeneru co provádí, v okamžiku kdy detekuje stejné jazyky by měl uložení do db přeskočit.
kozusnikjan
Profil *
dobře. Zkusím. Děkuji
kozusnikjan
Profil *
No, i když jsem jazyk změnil, pořád to ukládá v en_US
aDAm
Profil
a tohle si zkoušel?
$article = $em->find('Entity\Article', 1 /*article id*/);
$article->setTitle('my title in de');
$article->setContent('my content in de');
$article->setTranslatableLocale('de_de'); // change locale
$em->persist($article);
$em->flush();
kozusnikjan
Profil *
Ano, takhle to jde. Já ale řeším problém (viz na začátku), že když vložím článek, tak mi to automaticky vloží článek do tabulky texts a zároveň překlad s locale "en_US" do tabulky texts_translates.
aDAm
Profil
v tom případě koukni co ti dělajá ten listener. Je to založené na tom že když vkládáš text s locale co je stejné jako nastavení translatable tak ti to ukládá normálně, ale pokud to detekuje jiné locale tak to uloží ještě do překladové tabulky.
kozusnik.jan
Profil *
Zkusil jsem nastavit locale a i v listeneru defaultní jazyk na cz takto:
 $request = new Request;
        $request->setLocale('cz');
        $translatableListener = new TranslatableListener();
        $translatableListener->setDefaultLocale('cz');
        $translatableListener->setTranslationFallback(true); // default is false

Pořád nic
aDAm
Profil
Jak funguje symfony nemám tucha nicméně v nette takto listener nemůžeš inicializovat, jelikož jej potřebuješ zavěsit na konkrétní eventy prepersist, postpersist atd. tj. akce které se prováději při práci s entitou.
kozusnik.jan
Profil *
V návodu je to takhle právě... https://github.com/l3pp4rd/DoctrineExtensions/blob/master/doc/translatable.md#default-locale
aDAm
Profil
kozusnik.jan:
ano ale tam už je instancovaný, tudíž pracuješ již s registrovaným objektem. Ale ty si tady vytvoříš novou instanci, tudíž není zaregistrována na konkrétní akce práce s entitou.
kozusnik.jan
Profil *
Aha. Tak jsem to vyřešil tak, že defaultní jazyk jsem nastavil v TranslatableListeneru, funguje i změna výpisu podle jazyka, ale pouze, pokud jazyk nastavím v TranslatableListener ručně přímo v té třídě. Nevíte někdo, jak to udělat, aby se to měnilo automaticky podle _locale?
aDAm
Profil
Jak jsem psal, musíš to dělat tam kde registruješ ten listener, a nebo si jej vytáhnout a pak změnit. V nette se k tomu dostanu přes služby a pak to nastavím.
kozusnik.jan
Profil *
Děkuju.
Vyřešil jsem to takto:

$locale = $this->getRequest()->getSession()->get('_locale');
 $this->get('gedmo.listener.translatable')->setTranslatableLocale($locale);
a použil LocaleListener.
Ale ještě to budu chtít upravit tak, aby se tohle dělalo automaticky. Nemyslím tím dávat to do __construct, ale ať to dělá symfony automaticky.

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: