Prefix a vlastné preklady
- black1101
- Člen | 21
Dobrý deň, prosím Vás mal by som dve otázky pričom prvá je ohľadne používania Dibi a či je možné nejakým spôsobom do config neon-u pridať prefix tabuliek aby som následne nemusel používať všade ten istý prefix.
Napríklad:
som bol zvyknutý zapísať jednoducho ako:
Čítal som tu na fóre, že to možné nie je a že si mám normálne pomenovať tabuľky, ale tá odpoveď je stará, nepohlo sa náhodou niečo od vtedy?
Pokiaľ nie, tak akým najlepším spôsobom a hlavne kde v aplikácií definovať prefix ako konštantu, ktorú by som následne v celej aplikácií poprepisoval.
Chystám sa totiž celú appku preklopiť do nette a rád by som spravil takéto veci poriadne. Vopred ďakujem veľmi pekne.
Tá druhá otázka sa týka ohľadom vlastných prekladov. Mám tabuľku
abcd_langs kde mám tri stĺpce a to:
1-konstanta 2-preklad 3-jazyk
Následne som si v hlavnom controlleri (v starej aplikácií) vybral všetko z tabulky abcd_langs → uložil do globálnej premennej language a všade kde som chcel (controlleri, modely, knižnice) zavolal túto glob. premennú a bolo hotovo.
Prosím Vás viete mi poradiť, ako najlepšie a kde spraviť takýto výber a potom môcť používať všade na webe? Zatiaľ to mám v base_repository asi takýmto štýlom:
Akurát neviem potom, ako budem používať preklady povedzme v inom repository. Presenteri dedia od môjho basepresenteru, takže tam problém nie je.
Ďakujem vopred za akúkoľvek pomoc a ochotu.
Pekný deň.
- Martk
- Člen | 661
Prefixy
Máš asi 3 volby:
- Udělat builder na sql dotazy.
- Udělat si nástavbu a analyzovat sql, provést změny a vrátit výslednou sql.
- Přes konstanty:
Překlady
Uděláš si novou třídu, která bude spravovat překlady:
zaregistruješ jako službu a injektuješ do presenterů a komponent.
Editoval Antik (25. 8. 2016 17:11)
- black1101
- Člen | 21
Antik: ďakujem za odpoveď, bol som mimo teraz tak až teraz som sa k tomu vrátil.
Čo sa týka tých konštant, to nie je asi veľmi dobré riešenie, nakoľko ja som to myslel tak, že napríklad tabulku nieco_users môžem využívať vo viacerých modeloch alebo presenteroch a preto by som rád mal niekde definovaný ten prefix, aby som nemusel všade písať nieco_ ale iba napr ::users kde :: mi nahradí môj prefix.
A k tým prekladom. Momentálne mám urobený komponent typu:
a následne ju používam takto v Base presenteri, čím môžem automaticky používať preklady vo všetkých presenteroch ktoré dedia od Base presenteri:
a takto v nejakom inom modeli
je to OK takto?
ešte sa chcem spýtať, či komponent v nette znamená napríklad v mojom prípade vyššie indexrepository, a či zaregistrovanie ako služby máš na mysli vloženie do config.neon napr:
prepáč za blbé otázky ale zoznamujem sa s nette a rád by som mal ucelené takéto základné veci.
Ďakujem vopred za odpoveď a prajem pekný deň.
ps: ešte jedna otázka: nevadí, že napríklad getLanguage volám a injectujem na viacerých miestach naraz? Napr ako som aj písal v basepresenteri a potom v indexrepository, ktorý následne využívam v niektorom presenteri a taktiež tam môžem využívať povedzme usersRepository, v ktorom tiež injectujem indexRepository aby som mohol získať language. Díki moc.
Editoval black1101 (13. 9. 2016 19:40)
- CZechBoY
- Člen | 3608
Vůbec se mi to nelíbí :-) odkud jako každá třída zjistí co je
aktuálně nastaveno za jazyk? Nemůžeš takhle dost jednoduše přijít
o konzistenci jazyka napříč aplikací? tzn. jedna třída si dá češtinu,
presenter si dá slovenštinu atd.
Pokud se ti to nechce moc řešit tak použij Kdyby\Translation
a
ten balík vyřeší vše za tebe. Potom si už jen injectuješ/předáváš
Nette\Localization\ITranslator
a voláš
$translator->translate
($message, $count = null);
Editoval CZechBoY (13. 9. 2016 20:42)
- black1101
- Člen | 21
Czechboy: dakujem za reakciu ale takto: preklady uz mam riešené v db takýmto štýlom takze neviem využívať nieco iné. Na tvoju otázku to teraz funguje tak: ze v base presenteri si predám aktuálny parameter locale z URL a na základe toho si nastavím aktuálny jazyk, pripadne to bude uložené v session.
- black1101
- Člen | 21
Hej máš pravdu, prosím ťa keď momentálne mám v basePresenteri
Akým štýlom si v baseRepository kde mám getLanguage predám tú persistant premennú locale?
Len by som si ju tu predal do tej metódy getLanguage a nemala by žiaden
parameter.
Dík za radu.
Editoval black1101 (17. 9. 2016 14:54)
- black1101
- Člen | 21
Skúšam to prerobiť tak ako píšeš, ale nerozumiem dobre celkovo k tomu pristupovaniu a nastavovaniu (ospravedlňujem sa, ale čítal som aj dokumentáciu a neviem si pomôcť.)
Teraz mám model Languages.php:
a Následne v BasePresenteri, kde vyťahujem preklady pre template a ostatné presenteri, urobím toto:
A všetko funguje super, keď mám link Administracia/cz/
tak to ťahá české, keď sk, tak slovenské.
Problém ale spočíva v tom, že keď si chcem preklady použiť v nejakom inom modeli, respektíve povedzme v IndexRepository, ktorý vyzerá takto:
tak tam sa mi stále sťahujú len defaultné SK preklady. Asi je ti to jasné, ale vieš mi to prosím ťa objasniť a vysvetliť, ako to mám nastaviť? Ďakujem vopred.
- black1101
- Člen | 21
Hej hej presne tak, takže vôbec nerozumiem, prečo mi to hodí za každým v tom indexrepository po slovensky, aj keď je aktivovaná čeština.
//edit
pokiaľ v Indexrepository v __construct…
doplním pred $lang->getLanguage();
toto: $lang->locale = ‚cz‘;
tak následne je čeština aj tam
Editoval black1101 (17. 9. 2016 18:07)
- black1101
- Člen | 21
czechboy: takže služby sa volajú vlastne ešte pred startUp takže preto mi to tam nevedel priradiť, vyriešil som to tak, že v triede s jazykom si parsnem jednoducho urlku, z ktorej si vytiahnem aktuálny jazyk a na základe toho vrátim výsledky, následne si raz zavolám načítanie jazyku v basepresenteri, keď to predám aj všetkým ostatným presenterom, ktoré dedia a pokiaľ potrebujem jazyk v niektorom ďalšom modeli, tak to tam injektknem ako som písal aj vyššie a funguje to tak ako chcem, takže zrjeme je po probléme.
K tvojej otázke prečo nepoužívam ITranslator, tak ja ho poznám ale na tomto projekte sa musia preklady poriešiť takýmto štýlom z jednoduchého dôvodu, takého, že je to v tomto okamihu lepšie riešenie.
ps: čo sa týka tých prefixov databázy, tak neviem si nejakým spôsobom podobný tomuto:
nastaviť prefix a potom ho používať tak ako som sa pýtal? Nechcem
zbytočné konštanty, to veľa nepomôže a používa sa dibi a aj bude.
Navyše aj ja osobne som zvyknutý na zápis cez dve bodky, pokiaľ používame
nejaký prefix v tabulkách:
Díki moc už teraz :)
- CZechBoY
- Člen | 3608
dibi si přidej jako extension v konfiguráku rovnou :-)
Podle návodu se substituce dělá trochu jinak
https://dibiphp.com/cs/quick-start#…