Important: je ne souhaite acheter aucune extension GeoIP. J'ai un site Web Magento 2.1.9 avec une configuration multi-sites et multi-magasins. J'ai configuré un site Web pour KSA, les Émirats arabes unis, la Chine, l'Égypte, etc. et sous chaque site Web, il y a au moins 2 vues de magasin, par exemple, pour KSA, j'ai des vues de magasin en arabe et en anglais.
Je veux montrer à l'utilisateur le site Web en fonction de son pays selon l'adresse IP. par exemple, pour les utilisateurs accédant à partir de KSA, l'ar_sa (magasin arabe - arabie saoudite doit être par défaut) de même pour les utilisateurs des EAU (ar_uae ou en_uae).
J'ai fait le codage suivant jusqu'à présent et j'ai réussi à obtenir le pays de l'adresse IP.
Voici mon etc/frontend/events.xmldossier:
<config xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' xsi:noNamespaceSchemaLocation='urn:magento:framework/Event/etc/events.xsd'>
    <event name='controller_action_predispatch'>
        <observer name='Asoft_GeoIP_Redirect' instance='Asoft\GeoIP\Observer\Redirect' />
    </event>
</config>
Et voici mon Observer/Redirect.php:
namespace Asoft\GeoIP\Observer;
class Redirect implements \Magento\Framework\Event\ObserverInterface
{
    protected $_objectManager;
    protected $_storeManager;
    protected $_curl;
    public function __construct(
        \Magento\Framework\ObjectManagerInterface $objectManager,
        \Magento\Store\Model\StoreManagerInterface $storeManager,
        \Magento\Framework\HTTP\Client\Curl $curl
    ) {
        $this->_objectManager = $objectManager;
        $this->_storeManager = $storeManager;
        $this->_curl = $curl;
    }
    public function execute(\Magento\Framework\Event\Observer $observer)
    {
        //echo 'You are browsing from : '.$this->getCountryName();
        switch ($this->getCountryName()){
            case 'UAE':
                $store_id = '11';
                break;
            default :
                $store_id = '7';
        }$this->_storeManager->setCurrentStore($store_id);
    }
    public function getCountryName()
    {
        $visitorIp = $this->getVisitorIp();
        $url = "freegeoip.net/json/".$visitorIp;
        $this->_curl->get($url);
        $response = json_decode($this->_curl->getBody(), true);
        //echo '<pre>';
        //print_r($response);
        $countryCode = $response['country_code'];
        $countryName = $response['country_name'];
        $stateName = $response['region_name'];
        return $countryCode;
    }
    function getVisitorIp()
    {
        $remoteAddress = $this->_objectManager->create('Magento\Framework\HTTP\PhpEnvironment\RemoteAddress');
        return $remoteAddress->getRemoteAddress();
    }
}
Mais cela ne change que le nom du magasin et pas d'autres choses - comme la langue / devise ou la mise en page.