Skip to content
Snippets Groups Projects

Resolve "Include Settings Area"

Merged Dominik Hebeler requested to merge 38-include-settings-area into master
16 files
+ 278
99
Compare changes
  • Side-by-side
  • Inline
Files
16
@@ -24,33 +24,17 @@ class Localization
public function handle(Request $request, Closure $next): Response
{
$locale = "en";
if ($request->filled("locale") && in_array($request->input("locale"), self::SUPPORTED_LOCALES)) {
$locale = $request->input("locale");
} else if ($request->cookie("locale", null) !== null && in_array($request->cookies("locale"), self::SUPPORTED_LOCALES)) {
} else if ($request->cookie("locale", null) !== null && in_array($request->cookie("locale"), self::SUPPORTED_LOCALES)) {
$locale = $request->cookie("locale");
} else if ($request->segment(1) !== null && in_array($request->segment(1), self::SUPPORTED_LOCALES)) {
$locale = $request->segment(1);
} else {
$preferred_language = $request->getPreferredLanguage(self::SUPPORTED_LOCALES);
if ($preferred_language != null && $preferred_language !== "en") {
$locale = $preferred_language;
} else {
try {
$cityDBReader = new Reader(storage_path("app/public/GeoLite2-City.mmd"));
$record = $cityDBReader->city($request->ip());
if (!$record->traits->isAnonymous) {
$country = $record->registeredCountry->isoCode;
$lang = $this->getLanguage($country);
if (in_array($lang, self::SUPPORTED_LOCALES)) {
$locale = $lang;
}
}
} catch (Exception $e) {
}
}
$locale = self::getDefaultLocale();
}
App::setLocale($locale);
App::setFallbackLocale("en");
URL::defaults(["locale" => $locale]);
return $next($request);
@@ -67,7 +51,34 @@ public static function getUnlocalizedUri(): string
return $url;
}
private function getLanguage(string $country): string
/**
* Guesses a locale based on the Accept-Language Header
* and/or IP Addres Location
*/
public static function getDefaultLocale(): string
{
$default_locale = "en";
$preferred_language = \Illuminate\Support\Facades\Request::getPreferredLanguage(self::SUPPORTED_LOCALES);
if ($preferred_language != null && $preferred_language !== "en") {
$default_locale = $preferred_language;
} else {
try {
$cityDBReader = new Reader(storage_path("app/public/GeoLite2-City.mmd"));
$record = $cityDBReader->city(\Illuminate\Support\Facades\Request::ip());
if (!$record->traits->isAnonymous) {
$country = $record->registeredCountry->isoCode;
$lang = self::getLanguage($country);
if (in_array($lang, self::SUPPORTED_LOCALES)) {
$default_locale = $lang;
}
}
} catch (Exception $e) {
}
}
return $default_locale;
}
private static function getLanguage(string $country): string
{
$subtags = ResourceBundle::create('likelySubtags', 'ICUDATA', false);
$country = Locale::canonicalize('und_' . $country);
Loading