setLocale() doesn't change the language set by browser |
Hello everybody
I'm new to CI and to any framework and it's just awesome! ![]() I'm not used to write in forums as I'm usualy allways able to find a solution already posted somewhere so it's my first time in 20 years of IT. ![]() So to my problem: I'm making a bilingual site french/german with CMS features so I use bilingual db's and the CI locale feature. The language recognition of browsers works fine but I'm unable to change the language through $this->request->setLocale($language); or setlocale(LC_ALL, $language); when I control it with getLocale() I can see that setLocale() works but there is no change in the views... in Config/App.php public $defaultLocale = 'de'; public $negotiateLocale = true; public $supportedLocales = ['de-CH','de-DE','de-AT','fr-CH','fr-FR','fr-CA','fr-BE','fr','de']; ( tryed also ['de','fr'] ) my switchlanguage-button calls Language.php Controller with: PHP Code: <?php namespace App\Controllers; I'm using session('language') to select the right columns in the db's and the locale for all the titles, bottons, validation errors and more... in BaseController.php I got: PHP Code: $session = \Config\Services::session(); Can you see where I'm wrong? I can't find a solution. CI locale strictly follows the Browsers properties and I can't change it... I'm sure it's something stupid ![]() thank you
I still don't know if setlocal() should change the selected language used by the language files or if it was just my immagination...
So I finaly did manualy insert the language variable in all the lang() functions like that: Code: <?= lang('Titles.titleStundenplan', [],$language)?> The only problem now is for the validation error language who strictly follows the user properties set in browser. I don't know how to change that manualy. any help would be apreciated...
To set the language you need to do this:
PHP Code: $language = \Config\Services::language(); That way you won't need to set the language every single time. Also, I think that this function would do the validation for you.
Thank you but it's still not working.....
Checking with $language->getLocale() I see it's changing but in the lang() function it doesn't nor for validation... PHP Code: public function setLanguage($real_language)
Hello,
I know this thread is a little bit old but have faced the same problem in CI4, i'm not an expert, solved it this way Have created a filter in App\Filters\Locale.php PHP Code: <?php namespace App\Filters; Activate the filter for every request in Config\Filters PHP Code: // Makes reading things below nicer, A controller to allow user to change language PHP Code: <?php namespace App\Controllers; Controller route Code: $routes->get('locale/(:segment)', 'Locale::set/$1'); My Config\App PHP Code: public $defaultLocale = 'fr'; This way Codeigniter set locale to defined browser language automatically and user can use the controller to set another language. View example to change language, with selected language flag auto update Code: <!-- Language dropdown --> If anyone know a better way, any advises welcome ![]() |
Welcome Guest, Not a member yet? Register Sign In |