laravel-localization
laravel-localization copied to clipboard
LaravelLocalizationRedirectFilter ignores config.laravellocalization.localesMapping
Describe the bug The LaravelLocalizationRedirectFilter::class middleware ignores config.laravellocalization.localesMapping if the mapping exists.
To Reproduce Steps to reproduce the behavior:
- Add localesMapping with default value of each languages
- Add LaravelLocalizationRedirectFilter
- Goto default language url.
- You should see the url doesnt redirect to empty default langauge url.
Expected behavior The locale in url should be extracted.
More info:
- Version of Laravel : ^8.12
- Version of the Laravel-localization package : ^1.6.1
- Which middleware is used in : [LaravelLocalizationRedirectFilter::class,], 'prefix' => LaravelLocalization::setLocale()]
- Copy of the config file ( or at least setting of
supportedLocales
,useAcceptLanguageHeader
andhideDefaultLocaleInURL
).
'en' => ['name' => 'English', 'script' => 'Latn', 'native' => 'English', 'regional' => 'en_GB'],
'zh_HK' => ['name' => 'Chinese (Traditional)', 'script' => 'Hant', 'native' => '繁體中文', 'regional' => 'zh_HK'],
],
'useAcceptLanguageHeader' => false,
'hideDefaultLocaleInURL' => true,
'localesMapping' => [
'zh_HK' => 'tc'
],
Additional context
src/vendor/mcamara/laravel-localization/src/Mcamara/LaravelLocalization/Middleware/LaravelLocalizationRedirectFilter.php:31
Add the following Code:
if (count(config('laravellocalization.localesMapping'))){
foreach(config('laravellocalization.localesMapping') as $orgLocale => $shortFormLocale){
if ($orgLocale == $shortFormLocale){
$locale = $orgLocale;
break;
}
}
It should be fixed after that.
I encountered the same problem. Parameter hideDefaultLocaleInURL
does not work if a localeMapping
list is used.
Also your fix doesn't work. $orgLocale will never equal $shortFormLocale.
I modified the isHiddenDefault
function to take into account localeMapping
# src/vendor/mcamara/laravel-localization/src/Mcamara/LaravelLocalization/LaravelLocalization.php:217
public function isHiddenDefault($locale)
{
return ($this->getDefaultLocale() === $this->getInversedLocaleFromMapping($locale) && $this->hideDefaultLocaleInURL());
}
It works for me now.
I encountered the same issue. As far as I can tell this is not fixed yet. Have you considered opening a PR with your fix @lcharrie?