Missing_translation v správach

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
x5
Člen | 28
+
0
-

Ahojte, v nette som začátečník tak potrebujem poradiť.Ak si niekto na mojom webe klikne na správy a ide písať novú správu a ak zadá ID užívatela akému ide správu písať také ktoré ešte na webe nieje zaregistrované napíše missing_translation miesto textu Užívatel s týmto ID neexistuje. Budem rád ak niekto poradí vysvetlí ako to opraviť.Ďakujem pekne.

//edit malo by to byt v MessagesPressenter?
Tam mam na ID tento kod:

$form->addText('id', '360')
                ->setValue($this->getParameter('id'))
                ->addRule(Form::FILLED, '362')
                ->addRule(Form::INTEGER, '361')
                ->getControlPrototype()
                ->addClass('large');
$t['360'] = 'ID užívateľa';
$t['361'] = 'ID musí byť číslo.';
$t['362'] = 'Nevyplnili ste ID užívateľa.';

A nejako tam zakomponovat?

$t['369'] = 'Užívateľ s ID';
$t['370'] = 'neexistuje.';

Editoval x5 (8. 12. 2015 23:02)

David Matějka
Moderator | 6445
+
0
-

Nette zadny retezec missing_translation neobsahuje. pouzivas nejake extension na preklady nebo..?
Jak zobrazujes to Uzivatel s tymto ID neexistuje.?

x5
Člen | 28
+
0
-

Už som editoval topic, snád to pomože.

David Matějka
Moderator | 6445
+
0
-

Nepomuze, neni tam videt, odkud tu zpravu „Užívatel s týmto ID neexistuje“… ale s nejvetsi pravdepodobnosti to bude proste chyba v tvem kodu.

A opravdu mas pro preklady cisla? vzdy je to totalne neprehledny

x5
Člen | 28
+
0
-

Ano mam cisla, a kebyze to tam pridam nejako:

$translator->translate('cislo')

Len neviem proste ako cely kod a kam ho pridat. Resp. co by vam pomohlo aby som poslal?

David Matějka
Moderator | 6445
+
0
-

No predpokladam, ze mas nejakou vlastni implementaci translatoru a pokud neexistuje preklad, tak vratis missing_translation. Tak si akorat zjisti jaka hodnota a odkud se tam dostala. Pokud neumis debugovat (treba xdebugem), tak bude nejlepsi namisto vraceni toho textu vyvolat vyjimku, treba jen throw new \Exception a tracy ti ukaze odkud to bylo zavolano a s jakou hodnotou. dal uz si snad poradis sam..

x5
Člen | 28
+
0
-

Preklad práveže mám z toho sú tie čísla.Len som sa snažil ako sa len dalo do toho kódu to nejako zakomponovať no stále mi to tam ukazuje to missing_translation. Kam to mám konkrétnejšie do akej časti zapísať?Lebo neviem čo konkrétne mi to missing_translation vyhadzuje.

David Matějka
Moderator | 6445
+
0
-

a co pouzivas za translator? si v projektu vyhledej retezec missing_translation a uvidis, odkud to je

x5
Člen | 28
+
0
-

Može to byť toto ono že to tam je takto zapísané?

return $form;
    }

    public function messageFormSubmitted(Form $form) {

        $values = $form->getValues();

        if ($this->getUser()->getId() == $values->id) {
            $this->flashMessage('368', 'error');
        } elseif ($this->authRepository->getUser($values->id) === FALSE) {
            $this->flashMessage('369 ' . $values->id . ' 370', 'error');
        } else {
$t['369'] = 'Užívateľ s ID';
$t['370'] = 'neexistuje.';

Neni chyba len v tom kóde vyššie a preto mi tam ten text neukazuje ale ukazuje missing?

x5
Člen | 28
+
0
-

Toto mi zistuje či užívatel s ID existuje alebo ne:

} elseif ($this->authRepository->getUser($values->id) === FALSE) {
            $this->flashMessage('369 ' . $values->id . ' 370', 'error');

Pod túto funkciu, resp. kam mám zapísať aby mi hodilo miesto missing nejaký preklad?nejaký kód?

David Matějka
Moderator | 6445
+
0
-

doposud si mi nerekl, co pouzivas za translator.

A jinak ano, je to tim '369 ' . $values->id . ' 370'

x5
Člen | 28
+
0
-

Translator/xtranslator.php + tam zlozka languages kde mam jazyk cz(cesky) sk(slovensky) .
Tak kam aky kod dopisat aby miesto missing ukazovalo nejaky text z translatoru?

David Matějka
Moderator | 6445
+
0
-

takze mas vlastni translator..
A jeste, jak prekladas ty flash messages? mas prekrytou metodu flashMessage, nebo az v sablone pri vypisovani pomoci {_$flash->message} tedy makrem _?

no kdyz zavolas flashMessage s tema parametrama, tak ti do translate prijde pouze retezec '369 123 370' (kde 123 je to id), takze je jasne, ze to nebude fungovat.

Mas dve moznosti, bud si tu zpravu prelozis rovnou v presenteru

->flashMessage($this->translator->translate(369) . $values->id . $this->translator->translate(370));

ale i tato zprava bude prohnana translatorem, takze budes muset asi vyhodit to missing_translation a vratit vstupni retezec, pokud neexistuje preklad (takhle se to vetsinou resi)

druhou moznosti je predat misto retezce nejakou jinou strukturu, treba objekt nebo pole, se kterym si translator poradi.

Bezne byva v prekladovych tabulkach napriklad

$t['369'] = 'Uzivatel s id {id} nenalezen';

kde {id} je nejaky placeholder, ktery se nahradi parametrem predanym napriklad v presenteru.

Takze v tomto pripade by si treba zavolal z presenteru

$this->flashMessage(['message' => '369', 'parameters' => ['id' => $id]]);

a v translatoru si s tim poradis..


A nebo lepe, pouzij nejaky existujici reseni, treba kdyby/translation a nevymyslej kolo.

ale v kazdem pripade se zbav tech cisel a nahrad to retezci

x5
Člen | 28
+
0
-

David Matějka napsal(a):

takze mas vlastni translator..
A jeste, jak prekladas ty flash messages? mas prekrytou metodu flashMessage, nebo az v sablone pri vypisovani pomoci {_$flash->message} tedy makrem _?

no kdyz zavolas flashMessage s tema parametrama, tak ti do translate prijde pouze retezec '369 123 370' (kde 123 je to id), takze je jasne, ze to nebude fungovat.

Mas dve moznosti, bud si tu zpravu prelozis rovnou v presenteru

->flashMessage($this->translator->translate(369) . $values->id . $this->translator->translate(370));

ale i tato zprava bude prohnana translatorem, takze budes muset asi vyhodit to missing_translation a vratit vstupni retezec, pokud neexistuje preklad (takhle se to vetsinou resi)

druhou moznosti je predat misto retezce nejakou jinou strukturu, treba objekt nebo pole, se kterym si translator poradi.

Bezne byva v prekladovych tabulkach napriklad

$t['369'] = 'Uzivatel s id {id} nenalezen';

kde {id} je nejaky placeholder, ktery se nahradi parametrem predanym napriklad v presenteru.

Takze v tomto pripade by si treba zavolal z presenteru

$this->flashMessage(['message' => '369', 'parameters' => ['id' => $id]]);

a v translatoru si s tim poradis..


A nebo lepe, pouzij nejaky existujici reseni, treba kdyby/translation a nevymyslej kolo.

ale v kazdem pripade se zbav tech cisel a nahrad to retezci

Takto som to skusal

->flashMessage($this->translator->translate(369) . $values->id . $this->translator->translate(370));

Lenže proste ono to bude ukazovať stále to isté tu posielam velkú časť kódu z messagespresenter:

$form = new Form;
       $form->setTranslator($this->translator);

       $form->getElementPrototype()->addClass('default');

       $form->addText('id', '360')
               ->setValue($this->getParameter('id'))
               ->addRule(Form::FILLED, '362')
               ->addRule(Form::INTEGER, '361')
               ->getControlPrototype()
               ->addClass('large');

       $form->addText('title', '363')
               ->addRule(Form::FILLED, '364')
               ->getControlPrototype()
               ->addClass('large');

       $form->addTextArea('message', '365')
               ->addRule(Form::FILLED, '366')
               ->getControlPrototype()
               ->addClass('large');

       $form->addSubmit('ok', '367');

       $form->onSuccess[] = $this->messageFormSubmitted;

       return $form;
   }

   public function messageFormSubmitted(Form $form) {

       $values = $form->getValues();

       if ($this->getUser()->getId() == $values->id) {
           $this->flashMessage('368', 'error');
       } elseif ($this->authRepository->getUser($values->id) === FALSE) {
           $this->flashMessage('369 ' . $values->id . ' 370', 'error');
       } else {

Toto je všetko ohladom toho.Buďto tam ten kód píšem zle alebo mi ho nechce ukázať skús ho tam pridať ty resp. čo to urobí potom.

x5
Člen | 28
+
0
-

Skúsil som obidve možnosti no buďto robím niekde chybu alebo neviem.Jediná zmena ktorá je že missing_translation mi píše na modro predtým na červeno, inak bez zmeny. :(

Ak z tohoto kodu:

$this->flashMessage('369 ' . $values->id . ' 370', 'error');

neham len:

$this->flashMessage('369 ' 'error');

Tak mi uz ukaze text ze uzivatel id a viac nic. Takze nejako upravit tento kod aby to ukazovalo?

Editoval x5 (9. 12. 2015 1:19)

akadlec
Člen | 1326
+
+1
-

Tu chybu pořád nevidíš? Podle toho co píšeš máš překlady založenz na nějakých číslech:

$t['360'] = 'ID užívateľa';
$t['361'] = 'ID musí byť číslo.';
$t['362'] = 'Nevyplnili ste ID užívateľa.';

a v té tvé flash zprávě máš řetězec:

369 999 370

tudíž pro ten klíš ti to nic nenajde.

Z tvého posledního postu soudím, že překlad děláš asi až někde na úrovni šablony, proto ti neprojde ani řešení:

$this->flashMessage($this->translator->translate(369) . $values->id . $this->translator->translate(370));

protože to ti tam pošle přeložený řetězec tak jak chceš ale ty se jej pokusíš přeložit podruhé a pak máš to missing translation.

Takže buď si tam udělej nějaké vypínátko na překládání v renderovaní flash zprávy, nebo přepracuj koncepci translatoru a zkus použít něco vyzkoušeného a funkčního.

Jinak ještě si můžeš do toho tvého translatoru přidat kontrolu zda ten překládáný řetězec je číslo nebo text, když bude číslo tak jej přeložít a když text tak jej pošleš dál nepřeložený. To by mohl být takový malý fallback.