diff --git a/metager/app/MetaGer.php b/metager/app/MetaGer.php index b15cf6af0018143bb2c2f95f3f84719b0dce1d4f..45cac0ae5bf148145042950eb14ef1a6159a142a 100644 --- a/metager/app/MetaGer.php +++ b/metager/app/MetaGer.php @@ -521,7 +521,7 @@ class MetaGer $this->removeAdsFromListIfAdfree($sumas); $current_regional_locale = LaravelLocalization::getCurrentLocaleRegional(); - $current_locale = explode("_", $current_regional_locale)[0]; + $current_language = Localization::getLanguage(); foreach ($sumas as $sumaName => $suma) { # Check if this engine is disabled and can't be used $disabled = empty($suma->disabled) ? false : $suma->disabled; @@ -539,7 +539,7 @@ class MetaGer } // Skip if engine does not support current locale or region (locale i.e. en is enough to get enabled) if ( - !isset($suma->lang->languages[$current_locale]) && + !\property_exists($suma->lang->languages, $current_language) && !\property_exists($suma->lang->regions, $current_regional_locale) ) { continue; diff --git a/metager/app/Models/Searchengine.php b/metager/app/Models/Searchengine.php index 0c1d97a7ff7bfdd915e9c321c7501689c2aa8048..1cad357aee10a59aca62db3301e68d882a5feab0 100644 --- a/metager/app/Models/Searchengine.php +++ b/metager/app/Models/Searchengine.php @@ -2,8 +2,10 @@ namespace App\Models; +use App\Localization; use App\MetaGer; use Illuminate\Support\Facades\Redis; +use LaravelLocalization; abstract class Searchengine { @@ -228,16 +230,33 @@ abstract class Searchengine } $getString .= "?"; - $parameter = []; - foreach ($this->engine->{"get-parameter"} as $key => $value) { - $parameter[] = $this->urlEncode($key) . "=" . $this->urlEncode($value); + + $parameters = (array) clone $this->engine->{"get-parameter"}; + + # Apply current locale + if (!empty($this->engine->lang->parameter)) { + $current_locale = LaravelLocalization::getCurrentLocaleRegional(); + if (\property_exists($this->engine->lang->regions, $current_locale)) { + $parameters[$this->engine->lang->parameter] = $this->engine->lang->regions->{$current_locale}; + } elseif (\property_exists($this->engine->lang->languages, Localization::getLanguage())) { + $parameters[$this->engine->lang->parameter] = $this->engine->lang->languages->{Localization::getLanguage()}; + } } - $getString .= implode("&", $parameter); # Append the Query String - $getString .= "&" . $this->engine->{"query-parameter"} . "=" . $this->urlEncode($query); + $parameters[$this->engine->{"query-parameter"}] = $query; + + # Dynamic Parameters + $parameters = \array_merge($parameters, $this->getDynamicParams()); + + if (isset($this->inputEncoding)) { + $inputEncoding = $this->inputEncoding; + \array_walk($parameters, function (&$value, $key) use ($inputEncoding) { + $value = \mb_convert_encoding($value, $inputEncoding); + }); + } - $getString .= $this->getDynamicParamsString(); + $getString .= \http_build_query($parameters, "", "&", \PHP_QUERY_RFC3986); return $getString; } @@ -252,18 +271,6 @@ abstract class Searchengine } } - private function getDynamicParamsString() - { - $paramString = ""; - - $params = $this->getDynamicParams(); - foreach ($params as $key => $value) { - $paramString .= sprintf("&%s=%s", urlencode($key), urlencode($value)); - } - - return $paramString; - } - protected function getDynamicParams() { return [];