translator pro více databází
- ondraLE
- Člen | 25
Zdravím,
mám projekt, kde je jedna centrální DB má tabulku translations, pak mám
více dalších „uživatelských“ DB, kde připojovací údaje jsou
v centrální db, DB connection si vytvářím po autentizaci uživatele, vše
funguje. Potíž je v tom, že jakmile se nakešují překlady při
inicializaci centrální db, založí se soubory
/temp/cache/translation/catalogue.cs… atd. a protože tabulka v translation
„hlavní“ db je prázdná, katalog vezme jen statické překlady ze
slouborů v /lang.
Následně vytvořím druhé DB spojení do některé ze sub-databází a ty
také mají tabulky translation s různými daty. Pokud v tu dobu ručně
smažu keš (soubory z cesty /temp/cache/translation), katalog se znovu
inicializuje a vše je ok, jinak bohužel nevím data z nově připojené
DB.
Otázka je nyní: jak reinicializovat katalog (keš?). Zkoušel jsem po
přihlášení smazat soubory, ale vytvoří se znovu (chybně).
Jak nastavit různé katalogy, resp. jak je pojmenovat? Jde o to, že
v centrální DB jsou uživatelské účty, které následně po autentizaci
připojí uživatele k „jeho“ databázi. Pokud se nacházá stejný klíč v
„uživatelské“ DB jako měl jiný účet, přeloží se špatně.
Ideální stav by byl určit ke každé DB konekci translator (což mám v neonu):
translation:
dirs:
- %langDir%
loaders:
nettedatabase: Contributte\Translation\Loaders\NetteDatabase(@database.default.connection)
kde default connection je spojení na „uživatelskou“ DB. Např. katalog pro DB1 by se pak jmenoval a použil „db1.catalogue.cs…“ atd,
Je nějaká cesta řešení, např. svým loaderem?
Snad jsem to popsal dostatečně. Díky za radu.
Editoval ondraLE (8. 1. 20:34)
- ondraLE
- Člen | 25
tak si nakonec odpovím sám, třeba to někomu pomůže. Vyřešeno přes jiné umístnění cache pro translátor, vlastní cacheFactory:
class TranslatorCacheFactory implements ConfigCacheFactoryInterface
{
public function __construct(
private bool $debug,
private string $cacheDir
) {
}
public function cache(string $file, callable $callable): ConfigCache
{
$path = $this->cacheDir . '/' . basename($file);
$cache = new ConfigCache($path, $this->debug); // Druhý parametr nastavuje debug mód
$callable($cache);
return $cache;
}
}
v servisech:
services:
translation.configCacheFactory:
factory: App\Factory\TranslatorCacheFactory(true, @mojedb::getTranslationCache())
a nakonec iniciace contribute/translatoru (localization.neon)
translation:
cache:
factory: App\Factory\TranslatorCacheFactory
dirs:
- %langDir%
loaders:
nettedatabase: Contributte\Translation\Loaders\NetteDatabase(@database.default.connection)
....