translator pro více databází

ondraLE
Člen | 25
+
0
-

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
+
+2
-

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)
	....