Kdyby\Translation a ukládání do Cache
- chemikus
- Člen | 47
Ahoj,
narazil jsem na drobný „problém“, který mi komplikuje trochu život. Již
delší dobu používám Kdyby\Translation, ale dnes jsem si stáhl přes
composer nejnovější verzi Nette a tohoto pluginu. Zprovoznil jsem ho tak,
jako vždy (a dle návodu v dokumentaci):
config.neon
extensions:
translation: Kdyby\Translation\DI\TranslationExtension
translation:
default: cs
fallback: [cs_CZ, cs]
RouterFactory.php
<?php
public static function createRouter(): RouteList {
$router = new RouteList;
$router->addRoute('[<locale=cs cs|en>/]<presenter>/<action>', "Dashboard:default");
return $router;
}
?>
BasePresenter.php
<?php
abstract class BasePresenter extends Nette\Application\UI\Presenter {
/** @persistent */
public $locale;
/** @var \Kdyby\Translation\Translator @inject */
public $translator;
...
}
?>
Můj text.cs_CZ.neon soubor vypadá následovně:
login:
signInText: "Pro přístup do administrace musíte být přihlášen."
Při prvním načtení se mi neon soubor načte a v prohlížeči se mi zobrazí přeložený text – tedy to funguje tak, jak očekávám.
Problém ale nastane, když v .neon souboru změním hodnotu singInText na cokoli jiného. Translator si vezme hodnotu, kterou si dříve uložil do cache a v prohlížeči se mi zobrazí původní (=starý =špatný) text. To stejné, když do .neon souboru přidám další řádek s novým překladem. Tento nový řádek vůbec není reflektován a v prohlížeči se mi to vůbec nepřeloží.
Proto se ptám, co dělám špatně? Dá se nějak vypnout ukládání cache, když jsem na localhostu – vyvýjím aplikaci?
V dokumentaci jsem našel, že můžu kešování vypnout příkazem v config souboru. Přidal jsem tedy následující:
cacheStorage:
create: Nette\Caching\Storages\DevNullStorage
Ale to nevyřešilo vůbec nic (dost možná jsem taky špatně pochopil tuto možnost a vyzkoušel jsem ji zbytečně).
Můžete mi prosím někdo poradit, co mám udělat, aby se mi vždy načetla aktuální verzie mého překladového .neon souboru? Docela se mi to hodí, když postupně buduji aplikaci :-)
Předem všem děkuji za pomoc.
Víťa
- Marek Bartoš
- Nette Blogger | 1263
Není patrné, zda konfiguruješ v sekci services službu cacheStorage a její klíč factory, nebo zda jde o extension pod jménem cacheStorage a její konfiguraci.
Ve výchozím nastavení nette/bootstrap je CacheExtension pod klíčem cache
a storage v CacheExtension je v podklíčí storage, takže bys měl
konfigurovat services > cache > storage > factory
https://github.com/…igurator.php#L33
https://github.com/…xtension.php#L46
Též bys měl místo DevNullStorage raději použít MemoryStorage. Často narazíš na kód, který bez cache nefunguje vůbec nebo je strašně pomalý, cache existující v rámci jednoho requestu tento problém řeší.
Editoval Mabar (9. 1. 2020 15:47)
- chemikus
- Člen | 47
Ahoj,
tak když jsem upravil ten config dle tvého postupu (tzn. následovně):
services:
cache:
storage:
create: Nette\Caching\Storages\MemoryStorage
generalManager: App\Model\General
userManager: App\Model\User
imagesManager: App\Model\Images
emailManager: App\Model\Email
- App\Forms\FormFactory
- App\Forms\LogInFormFactory
router: App\Router\RouterFactory::createRouter
Tak mi to bohužel vyhodí chybu.
Nette\DI\InvalidConfigurationException
Unexpected option 'services › cache › storage'.
Takže předpokládám, že tím to asi nebude. Když jsem to vrátil zpět na:
services:
cacheStorage:
create: Nette\Caching\Storages\MemoryStorage
tak mi aplikace už běží v pohodě, ale pořád se mi vytváří cache soubor toho *.neon souboru s překlady – tak opět jakékoli změny v souboru se neprojevují u mě na localhostu :(
- Marek Bartoš
- Nette Blogger | 1263
Pardon, je to cache.storage, v jedné úrovni :'D
Ten config co jsi napsal vytvořil novou službu, proto ti to nejede.
Editoval Mabar (10. 1. 2020 10:43)
- chemikus
- Člen | 47
Mabar napsal(a):
Pardon, je to cache.storage, v jedné úrovni :'D
Ten config co jsi napsal vytvořil novou službu, proto ti to nejede.
services:
cache.storage:
create: Nette\Caching\Storages\MemoryStorage
No, už jsem z toho dost zmatený :-) Ale ani tohle nevyřešilo problém, že si ten translator udělá vlastní cache a pak už nový *.neon soubor nenačte :(
U předchozí verze (cca před půl rokem, když jsem něco dělal), si to ale vždy bralo z toho souboru – takže asi nějaký update v plug-inu …
- Marek Bartoš
- Nette Blogger | 1263
Tahle možnost mě nenapadla. translation > cache
. Extension
má samostatně cache a ani by-default nebere tu globální.
- chemikus
- Člen | 47
Mabar napsal(a):
Tahle možnost mě nenapadla.
translation > cache
. Extension má samostatně cache a ani by-default nebere tu globální.
Díky, že jsi poslal ten kousek kódu … trklo mě, že vlastně můžu zapnout „debugger“ mode …
translation:
debugger: true
default: cs
fallback: [cs_CZ, cs]
A vše funguje tak jak má …
Díky moc!