SyMfonAK - vyvíjame databázy pomocou frameworku Symfony
Ako pracovať s užívateľskými locale (How to Work with the User's Locale)
Symfony dokumentácia → Preklad (i18N) → Ako pracovať s užívateľskými locale (How to Work with the User's Locale)
originál návod
Locale získame z požiadavky prostredníctvom objektu Request
use Symfony\Component\HttpFoundation\Request; public function index(Request $request) { $locale = $request->getLocale(); }
Takto si vieme pripraviť vlastného počúvajúceho ("listener"), ktorého musíme spúšťať ešte pred procesom LocaleListener a pred translátorom.
public function onKernelRequest(RequestEvent $event) { $request = $event->getRequest(); // some logic to determine the $locale $request->setLocale($locale); }
Prioritu musíme nastaviť vyššiu než LocaleListener. Poradie spúšťania a priority zistíme príkazom
debug:event kernel.request
(napr. php bin/console debug:event kernel.request)
Ako nastaviť Locale užívateľovi ako "lepkavé" sa dozviete tu
V kontroléri je už neskoro nastavovať $request->setLocale(). Treba to spraviť cez vlastný počúvajúci (Listener), ako je uvedené vyššie, pomocou URL, viď nižšie, alebo volať setLocale() priamo v službe translátora.
Locale a URL
Rôzne odpovede podľa Locale na tú istú URL predstavuje mierne porušenie zásady, že z jednej URL prichádzajú rovnaké údaje. Preto je lepšou stratégiu používať v URL špeciálny _locale parameter.
# config/routes.yaml contact: path: /{_locale}/contact controller: App\Controller\ContactController::index requirements: _locale: en|fr|de
alebo
index: path: /{_locale} controller: App\Controller\PrehladController::index locale: sk requirements: _locale : sk|en
Aby sa ušetrila práca s opakovaním písaním rozsahu prípustných hodnôt pre Locale v každom budúcom URL, je vhodné požiadavky na Locale definovať ako container parameter
Prednastavenie Locale (setting a Default Locale)
Čo ak užívateľ nemá nastavené Locale? Takto možno garantovať nastavenie.
# config/packages/translation.yaml framework: default_locale: en