Jak vyřešit změnu jazyka v administraci

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
akadlec
Člen | 1326
+
0
-

No mám administraci obsahu a aby se dala spravovat multijazyčnost chci tam přidat jednoduchý přepínač jazyků. Takže vyberu čeština a můžu editovat články/kategorie v českém jazyce, pak přepnu na angličtinu a budu mít zase jen EN články a kategorie.

A teď jak na to? Napadlo mě udělat si velice jednoduchou komponentu co zobrazí ten výběr jazyků. Jednotlivé jazyky budou linky na handle té komponenty. No ale jak teď dále? Uložit si aktuálně zvolený jazyk do session? Jak s tím pak pracovat dále? Udělat si službu co by se předala tam kde by se s tímto mělo pracovat? protože né všechny části administrace budou vícejazyčné apod.

Jak to vidí zkušenější? ;)

Pavel Kravčík
Člen | 1205
+
0
-

A nemůžeš to kompletně odstínit? Něco jako dát mezi DB a Modely nějakou komponentu, která by osluhovala co se zobrazí. Když to napíšu hodně hloupě, ke všem dotazům do konkrétní tabulky dávat:

->where('lang', $lang)
akadlec
Člen | 1326
+
0
-

No tak ano, samo že se budou selecty na data upravovat podle jazyka. Mě jde ale o ten proces před výběrem dat. Jak nejlépe řešit uchování informace o jazyce a jak nejlépe řešit samotné nastavování. Zda to co jsem nastínil jak bych to asi momentálně řešil je ok nebo to ještě promyslet.

Samotné zobrazení dat bych viděl jako:

  1. Přihlásím se do adminu a třeba pomocí onStartUp eventu přednastavím jazyk na výchozí co mám definovaný, třeba češtinu.
  2. Přejdu na presenter s výpisem článku a teď by měl presenter šáhnout někam kde je uložena ta informace o aktuálním jazyce, takže třeba do session uživatele/identity a nebo do té služby která šáhne do session uživatele/identity
  3. Presenter si vyžádá od modelu data tak aby vyhovovala podmínce
  4. Zobrazí se data a společně s nima se uživateli rozbrazí možnost změny toho jazyka, protože třeba aktuálně chci editovat články v angličtině.
  5. Takže kliknu na vlaječku/link/select angličtiny a komponenta by provedla zpracování požadavku přes handle a provedla by uložení user/identita/služba
  6. Po uložení by se provedl redirect this a na stránce by se objevil obsah v přepnutém jazyce

Jinak přes parametr url to moc řešit nechci protože tam už jednu informaci o jazyku mám, ale ta mě určuje jak na mě bude systém mluvit.

vvoody
Člen | 910
+
+1
-

akadlec napsal(a):

Jinak přes parametr url to moc řešit nechci protože tam už jednu informaci o jazyku mám, ale ta mě určuje jak na mě bude systém mluvit.

Zlá výhovorka :) kludne daj do url dva jazyky, keby si to mal v session tak by si mal problém s prácou s viacerými jazykmi jedného článku vo viacerých oknách.

akadlec
Člen | 1326
+
0
-

To je dobrá poznámka ;) no aji sem nad tím chvíli přemýšlel ale nepodařilo se mi najít kloudný krátký název parametru tak sem to zahodil to přiznávám ;)

Jiří Nápravník
Člen | 710
+
+1
-

Pouzivam k tomuhle Kdyby\Translation. Mam select, ten nastavi jazyk, konkretne v sessionresolveru. A pak mam ve fasadach Translation object a u tech dotazu na databaze si vytahuji aktualni locale a pridavam k dotazum.

Editoval Jiří Nápravník (22. 5. 2015 21:08)

akadlec
Člen | 1326
+
0
-

No zřejmě si přehlédl fakt že nechci měnit jazyk strány ten potřebuju ponechat měnící se podle preferencí uživatele a to se pomocí kdyby/translation řeší.
Já potřebuju vyřešit jen změnu dat ve výpise na základě aktuálně zvoleného jazyka.

Aplikace na tebe bude mluvit anglicky ale budeš editovat češtinu – tj. dva aktivní jazyky, jeden určí jak na tebe aplikace mluví a druhý s jakým obsahem pracuješ.

Zax
Člen | 370
+
0
-

Já bych prostě použil komponentu s persistentním parametrem a normálně si to z tý komponenty tahal kde bych potřeboval přes nějaký getter. Proč si takto primitivní záležitost zbytečně komplikovat nějakými handly, redirecty, sešnama, eventy…?

Oli
Člen | 1215
+
0
-

Proč to neuděláš naopak? To jak na mě bude systém mluvit si chci nastavit při prvním prihlaseni a nikdy víc to nemenit. Jaký článek (jazyk) chci editovat budu měnit často.

Jazyk clanku bych dal do url a jazyk, kterým se mnou mluví systém bych si uložil do db sloupce usera. Pak bych to tahal pres identitu.

Jiří Nápravník
Člen | 710
+
0
-

Jo sorry, to jsem prehledl, ja jak cetl administrace tak jsem myslel, ze mas administraci v jednom jazyku (ja mam administraci texty v jednom jazyku, a jen obsah ve vice, ktery prave takto prepinam). Nicmene i tak bych to resil v podstate obodbne jako s tim session resolverem – proste jazyk editace do sessionu a podle nej uz to tahat ve fasadach… S tim ze nebudes upravovat vice jazyku napric v nekolika oknech – to je pravda, ale je to vubec uzivany use case?

Tomáš Votruba
Moderator | 1114
+
0
-

@akadlec Jazyk uložit do session a přidat si Filter (předpokládám, že používáš Doctrine).

akadlec
Člen | 1326
+
0
-

No právě ta session byl první nápad ale jak už tu padlo dělá to problém pokud máš dvě okna s editaci různých jazyků. Otázkou je jak je to častý jev, faktem je že sem to občas takto dělal protože jsem potřeboval upravit nějaké odstavce napříč jazyky a nechtěl sem si to ukládat do poznámkového bloku apod. ale tam sem měl zase všechny jazyky k dispozici najednou.

A ano, data jsou v doctrine, ale tady už problém nemám, přes query object si to odfiltruju.

Ale ještě mě tak napadá, když si otevřu nové okno s editací článku v EN, pak ve stávajícím, okně přepnu jazyk na CZ a opět otevřu okno tak to nebude dělat problémy protože v editaci záznamu už je mi ten jazyk ukradený ;)

akadlec
Člen | 1326
+
0
-

Tak sem to nakonec hodil do session uživatele. Trochu sem poladil UserStorage aby tam mohla být doctrine entita s jazykem a zatím to funguje jak potřebuji. Na změnu jazyka sem si pak udělal komponentu s handle. Jen ji předám seznam jazyků a jaký je defaultní a už to frčí ;)