NetteTranslator (GettextTranslator & Nette Translation Panel)
- sKopheK
- Člen | 207
ic napsal(a):
sKopheK napsal(a):
A ještě jeden dotaz: Jak nejlépe udělám překlad částí url? Samozřejmě zachovám parametr lang, ale pak bych podle něj chtěl mít „uzivatel“ namisto „user“ apod.
Kdysi dávno se tohle dělalo v bootstrapu → https://github.com/…ootstrap.php#L57 dneska možná v
.noen
confugu kdoví.
On to je docela začarovaný kruh – napřed router zjistí parametr lang, pak podle něj může natáhnout správný překlad z .mo Gettextovych souborů a až pak určovat, co se má volat za presenter. Díky za tip, zkusím si s tím nějak pohrát.
- Ivorius
- Nette Blogger | 119
Po aktualizaci na nejnovější verzi z githubu, se mi začalo do logů ukládat
PHP Notice: Undefined index: front in ..libs/schmutzka/gettexttranslator/GettextTranslator/Gettext.php:156
Přičemž front normálně používám a i překlady to zobrazuje. Nevít co by to mohlo být?
- Petrik.a.dost
- Člen | 72
PHP 5.3.24 nette 2.1
Dobrý den,
při instalaci jsem postupoval podle návodu, který je popsán v addonu gettextTranslatoru a laděnka vyhazuje vyjímku:
Nette\DI\ServiceCreationException
No service of type App\GettextTranslator\Gettext found. Make sure the type hint in App\BasePresenter::injectTranslator() is written correctly and service of this type is registered.
v indexu při spouštění aplikace: $container->application->run(); nevíte někdo v čem je problém?
Předem děkuji Petr
- Petrik.a.dost
- Člen | 72
tak vyřešeno teď laděnka ale naopak píše:
GettextTranslator\DI\InvalidConfigException
At least one language file must be defined
kde a jak se má soubor s jazykem definovat, nevíte někdo prosím??
- Petrik.a.dost
- Člen | 72
prosím poradte někdo už hledám řešení už několik hodin…#
.......
common:
gettextTranslator:
lang: cs
files:
front: %appDir%/lang
layout: horizontal
height: 450
extensions:
gettextTranslator: GettextTranslator\DI\Extension
- services
- Model\UserManager
- App\RouterFactory
router: @App\RouterFactory::createRouter
mailService: MailService(@gettextTranslator.translator)
jestli jsem to spravne pochopil tak toto „front: %appDir%/lang“ je cesta k souboru, kde se má generovat soubor s jazyky ale nevím co je %appDir% výchozí složka, jesli je to složka config a když bych chtěl generovat jazyk jinam třeba ve složce app tak nastavit %appDir%/../lang a nebo jesli appDir znamená že už jsem v app takže stačí pouze front: %appDir%/lang… a jak registrovat jazyky, protože podle toho co jsem našel by se soubory .mo a .po měly vygenerovat, ale proč to tedy háže vyjímku:
GettextTranslator\DI\InvalidConfigException
At least one language file must be defined
nevím kde by mohla být chyba poradite někdo prosím?? jsem nováček a gettext-translátor jsem ještě nepoužíval takže nevím jak na to a nikde jsem nenašel nejakou dokumentaci ani na gitu a všechny návody odkazují na https://addons2.nette.org/…xttranslator a podle toho jsem postupoval a stejne to háže vyjímku…
poradíte něko ? díky moc Petr
- sKopheK
- Člen | 207
Tomu říkám odpovědnost a profesionalita Schmutzka. Je takový problém nechat repo v současné verzi funkční? Mohl si dát alepsoň nějaké přesměrování a/nebo to smazat/upravit taky v dokumentaci. Aspoň díky, že jsi doporučil jiný schopný projekt.
Teď ale k věci – neřešil jste někdo skloňování podle rodu? Jde to vůbec nějak v gettextu? Např. public – veřejný, veřejná, veřejné… ?
Editoval sKopheK (8. 11. 2013 19:28)
- voda
- Člen | 561
Teď ale k věci – neřešil jste někdo skloňování podle rodu? Jde to vůbec nějak v gettextu? Např. public – veřejný, veřejná, veřejné… ?
K tomu lze v gettextu použít volání s kontextem:
{_p'comment', 'public'} // přeloží se jako veřejný
{_p'event', 'public'} // přeloží se jako veřejná
Kontext je pak součástí katalogu překladů, ale nevypisuje se. Je například podporován v TemplateTranslatoru.
- Tomáš Votruba
- Moderator | 1114
„GettextTranslator nefunguje…“
Taky to znáte? Založil jsem topic pro funkční
translator, který používám nyní.
Budete-li mít s Kdyby\Translation
nějaký problém, pište tam.
Budu-li vědět, poradím.
- Filip Procházka
- Moderator | 4668
@t0x1c: pokud ti Kdyby/Translation nefunguje, tak jsi si pravděpodobně nainstaloval špatnou verzi. @Schmutzkův příspěvek jsem si dovolil poupravit a doplnit do něj přesné instrukce.
- hejdav
- Člen | 50
Stihl jsme si udělat fork, změnil jsem úložiště z PO/MO na libovolně implementovatelné (třeba databázi). Pojmenoval jsem to LiveTranslator.
Editoval hejdav (15. 11. 2013 18:50)
- jspetrak
- Člen | 15
Vypadá to, že se GettextTranslator dočká dalšího života, viz https://github.com/…t-translator.
- Beliarr
- Člen | 2
Ahoj,
Mal som dnes ten isty problem, filemanager sa ti neinjectuje, v construktore
v Gettext.php som len pridal $this->fileManager = new FileManager(); a uz mi
to fici
dufam ze pomohlo aj ked neskoro :)
Sense napsal(a):
Edit: Tak už jsem to vyřešil stažením verze 2.0.6 z adresy (https://addons2.nette.org/…tor/versions). Teď to funguje skvěle bez jakýkoliv úprav.
Potřeboval bych maličko popostrčit. Používám Nette 2.0.12, PHP verze 5.4.11 a GettextTranslator 2.0.12 (dnes stažený z GITu). Moje soubory vypadají takto:
1. config.neon
common: gettextTranslator: lang: cs files: application: %appDir%/i18n
2. bootstrap.php
<?php $configurator->onCompile[] = function ($configurator, $compiler) { $compiler->addExtension('gettextTranslator', new GettextTranslator\DI\Extension); }; ?>
3. SecuredPresenter
<?php abstract class SecuredPresenter extends BasePresenter { public $lang; public $translator; public function injectTranslator(GettextTranslator\Gettext $translator) { $this->translator = $translator; } protected function startup() { parent::startup(); $user = $this->getUser(); if (!$user->isLoggedIn()) { $this->redirect('Sign:in'); } if (!$user->identity->lang) $user->identity->lang = $this->translator->getLang(); $this->lang = $user->identity->lang; $this->translator->setLang($this->lang); } } ?>
4. formulář:
<?php protected function createComponentUserProfileForm() { $form = new Form; $form->setTranslator($this->translator); ... ?>
Po načtení presenteru na mě nejdříve vyskočila první chybová hláška, stejná, jako zde řešil uživatel zool. Nicméně u mě to bylo naopak, místo:
<?php Nette\Diagnostics\Debugger::getBar()->addPanel(...) ?>
jsem použil:
<?php Nette\Diagnostics\Debugger::$bar->addPanel(...) ?>
a problém zmizel.
Teď se mi v debug baru objevuje vlaječka a načtou se mi všechny texty ve formuláři. Když ale udělám jakoukoliv úpravu a kliknu na Save, tak se mi objeví Unexpected error a vyskočí pop-up okno s chybou:
Fatal error: Call to a member function generateMetadata() on a non-object in C:\Dev\www1\libs\GettextTranslator\Gettext.php on line 314
což je řádek:
<?php $metadata = $this->fileManager->generateMetadata($file, $this->metadata); ?>
Nevíte, kde by mohla být chyba? Děkuji za pomoc.
- dada-amater
- Bronze Partner | 52
Zkousel nekdo rozjet Gettext Extractor od Ondry? Mam na mysli predevsim makra v sablonach, i ta parova {_}Text{/_}. Me to v tech sablonach nefunguje.
- Filip Procházka
- Moderator | 4668
@dada-amater Pokud vím, tak Kdyby/Translation umí načítat gettext slovníky a zvládá i párová makra :)
- kralik
- Člen | 230
Ahoj lidi,
mooc prosím o radu.
Zvolil jsem pro více jazyžný web komponentu LiveTranslator
Když to zkouším na lokálu tak přepínání jazyků bez problémů funguje.
Pokud ale web spustím na produkčním serveru tak přepínání jazyků nefunguje. Nedojde k žádné chybě a k přepnutí na jiný jazyk také ne.
Prostředí(lokál a produkční) je prakticky totožné, jak web server tak databáze, i když ta s tím nesouvisí.
Nevím zda je problém v nějaké konfiguraci na webserveru či v oprávněních s souboru s překladem nebo někde úplně jinde.
Nemáte s tím někdo zkušenosti?
Psal jsem na foru přímo LiveTranslatoru,
ale nikdo se doposud neozval.
Předem moc díky