Odkud dostanu aktuální jazk aplikace
- tivvit
- Člen | 36
Používám tenhle překladač https://forum.nette.org/…lation-panel
detectLanguage()
se vytáhne z hlaviček já jsem řešil když už
si jazyk zvolil, nebo mu ho pomocí tohodle aplikace zvolila. Napadlo mi jestli
neresim úplnou kravinu jestli to nebude normálně v
$_GET['lang']
. Pravděpodobně jsem ten dotaz špatně zfimuloval
ten jazyk už mám v URL.
- Tomáš Votruba
- Moderator | 1114
@tivvit: Když jsem si to téma přečetl podruhé, hned mi došlo, že jsem si to zarámoval úplně blbě :D.
Druhý pokus: detekci je vhodné dělat v BasePresenteru, viz návod na Nette Translator, aneb to co píše enumag v konkrétním kódu
- tivvit
- Člen | 36
Díky za odpovědi. Potřeboval jsem hlavně toto
$this->getParameter('lang');
respektive tohle:
$template->language = $this->lang;
je prasárna to volat v basePresenteru v create Template, když to potřebuju na každé stánce (kde jinde by to případně mělo být)?
public function createTemplate($class = NULL)
{
$template = parent::createTemplate($class);
if (!isset($this->lang)) {
$this->lang = $this->httpRequest->detectLanguage($this->langs);
$this->redirect('this', array('lang' => $this->lang));
}
// pokud není nastaven, použijeme defaultní z configu
if (!isset($this->lang)) {
$this->lang = $this->context->parameters["lang"];
$this->redirect('this', array('lang' => $this->lang));
}
$this->translator->setLang($this->lang); // nastavíme jazyk
$template->setTranslator($this->translator);
$template->language = $this->lang;
return $template;
}
Nakonec jsem rozchodil i ten httpRequest.
- tivvit
- Člen | 36
pokud udělám v basePresenteru
public function startup() {
parent::startup();
if (!isset($this->lang)) {
$this->lang = $this->httpRequest->detectLanguage($this->langs);
$this->redirect('this', array('lang' => $this->lang));
}
// pokud není nastaven, použijeme defaultní z configu
if (!isset($this->lang)) {
$this->lang = $this->context->parameters["lang"];
$this->redirect('this', array('lang' => $this->lang));
}
}
dostanu tuhle chybu
Access level to RegisterPresenter::startup() must be public (as in class BasePresenter)
IMHO je problém že basePresenter už žádný parent nemá, ale bez nej to
taky hází chybu, takže to bude spíš klávesnice-židle
pokud udělám
public function beforeRender() {
$template->language = $this->lang;
}
což by mi taky dávalo větší smysl než v createTemplate
dostanu
Undefined variable: language
ještě jeden dotaz
public function injectTranslator(NetteTranslator\Gettext $translator)
kdy se tohle volá? Nikde jsem k tomu nenašel žádnou teorii
- enumag
- Člen | 2118
@tabetha, @tivvit: Důvod pro to protected je, že už základní Presenter v Nette metodu startup má protected. Volat ji zvenčí nedává smysl takže není důvod mít ji public (byť to jazyk umožňuje).
@tivvit: Omlouvám se, trochu mne dráždí když někdo neumí číst chyby… Jinak mnoho věcí najdeš v API dokumentaci, obecně když něco nefunguje, první věc co dělám je studium API, případně i zdrojového kódu.Uvědomíš si tím věci které by ti sebelepší dokumentace stejně neřekla. Jo jinak zde je dokumentace k tomu inject (chápu žes ji nenašel – taky bych ji nenašel kdybych nevěděl co hledám).