Marco Ro Posted September 27, 2018 Share Posted September 27, 2018 Hi, I looked in to the forum if there was any post but I have not found, it seems strange ... anyway. Is it possible, using pw, based on the user's country redirect the users to their language page? I was looking at IP geolocation services but they all seem to pay. is not there a system that does not require subscriptions? or even better, an internal system in pw? Link to comment Share on other sites More sharing options...
bernhard Posted September 27, 2018 Share Posted September 27, 2018 what about your own topic that you started in may? 1 Link to comment Share on other sites More sharing options...
Marco Ro Posted September 27, 2018 Author Share Posted September 27, 2018 ipinfo.io works well and have nice IPA system. But over 1000 requests for day need a bit expensive plan like 500$/y. So, the economic issue could be not a problem, but would be great if there is a solution that doesn't include accounts with external platforms. But anyway, if I want use ipinfo and test it, how I can redirect the user. I can make a hook inside my ready.php ? I have to use addHookBefore('Session::redirect', function(HookEvent $event) ? Or something like this, that at moment doesn't work... <?PHP function getUserIP(){ $client = @$_SERVER['HTTP_CLIENT_IP']; $forward = @$_SERVER['HTTP_X_FORWARDED_FOR']; $remote = $_SERVER['REMOTE_ADDR']; if(filter_var($client, FILTER_VALIDATE_IP)){ $ip = $client; } elseif (filter_var($forward, FILTER_VALIDATE_IP)) { $ip = $forward; } else { $ip = $remote; } return $ip; } $user_ip = getUserIP(); $http = new WireHttp(); $url = "http://ipinfo.io/{$user_ip}/country"; $response = $http->get($url, ['country' => '']); $country = filter_var ( $response, FILTER_SANITIZE_ENCODED); // the country have a hiddend code if ($country == "IT"){ $session->redirect('/it'); } elseif ($country == "FR") { $session->redirect('/fr'); } else { $session->redirect('/'); } ?> Anyway I have to redirect always on the current page not always on the homepage. An also other problem it's that some people could choose to use the website form other languages. It's a bit tricky ? Link to comment Share on other sites More sharing options...
Soma Posted September 27, 2018 Share Posted September 27, 2018 For me it's the worst you can do, and I hate it when I get redirected to a language I don't want. Sometimes you can't even get to another language. Just don't ever do automatic redirection based on anything. 5 Link to comment Share on other sites More sharing options...
Marco Ro Posted September 27, 2018 Author Share Posted September 27, 2018 @Soma yes, I understand you, but unfortunately in this case we are obliged because some pages have terms that should be used in the current language. Example, unfortunately not all know the VAT number equivalent that here in Italy is Partita IVA. These things and others can confuse users. ? I would like in any case to leave the possibility to change the language for those who want, but the first language should be the one come form the country IP. Link to comment Share on other sites More sharing options...
Soma Posted September 27, 2018 Share Posted September 27, 2018 So if im in france ill see the french version and not understand anything and cant change it? Sorry happened to me and got really frustrated and simply left the service. 3 Link to comment Share on other sites More sharing options...
bernhard Posted September 27, 2018 Share Posted September 27, 2018 you could set a users default language on registration / creation of the user by location of the ip address. if the user is not happy with that he can change it anytime. he will then see his favourite language on every login and you will save a lot of unnecessary ip/location lookups. Link to comment Share on other sites More sharing options...
Marco Ro Posted September 27, 2018 Author Share Posted September 27, 2018 yes @bernhard, I will do this for this particular situation, because it's a subdomain that you must be logged for see the page and I will have the country code (we have decided now for the same reason you say you). But anyway In our next step we will open the e-commerce in the USA, we will make an other subdomain and we need to redirect all the USA traffic to this subdomain. so, if we do not find another solution we will use a service like ipinfo.io. @Soma I know it's not the best but in this case we have to do in this way, special for the user came form the USA that will see different products compared to European ones. They will not have access to the UE site. Link to comment Share on other sites More sharing options...
adrian Posted September 28, 2018 Share Posted September 28, 2018 19 hours ago, MarcoPLY said: I was looking at IP geolocation services but they all seem to pay. is not there a system that does not require subscriptions? or even better, an internal system in pw? I make use of three different free services (in a fallback type scenario) in the Cookie Management Banner module: https://github.com/adrianbj/CookieManagementBanner/blob/945d406d227c821a27be972f3a63ce4c4d44c613/CookieManagementBanner.module#L62-L85 ip.nf geoip.nekudo.com ip.sb You can read a little about my conversation with the ip.nf folks here: 1 1 Link to comment Share on other sites More sharing options...
theo Posted September 28, 2018 Share Posted September 28, 2018 Imo language and country are different things. In Switzerland we have four official languages. Use the Browser's HTTP Accept-Language, if you want a language preset. Geolocation may be the right thing for country specific products or terms of conditions. 3 Link to comment Share on other sites More sharing options...
Marco Ro Posted September 28, 2018 Author Share Posted September 28, 2018 wow. Thank you very much @adrian the ip service look very nice! I will study the cookie modulo and also probably will implement it on the sites. Thanks again for sharing your knowledge! Yes @theo, I have just find this post. I think will use the HTTP Accept-Language, it's a better way. For the country specific products I will use the geolocation service that suggested Adrian. I will Upload this post when I finish all the code. So, if some one will need in the future. ? 2 Link to comment Share on other sites More sharing options...
Marco Ro Posted October 1, 2018 Author Share Posted October 1, 2018 Ok, now redirect users based on their country works. So, for be honest I don't have do a lot, I use on of the free service @adrian write above and I have read this great post from @rayn (thank you). Anyway this code works quite well, but for sure it's possible write it better. <?php function getUserIP() { $client = @$_SERVER['HTTP_CLIENT_IP']; $forward = @$_SERVER['HTTP_X_FORWARDED_FOR']; $remote = $_SERVER['REMOTE_ADDR']; if(filter_var($client, FILTER_VALIDATE_IP)) { $ip = $client; } elseif(filter_var($forward, FILTER_VALIDATE_IP)) { $ip = $forward; } else { $ip = $remote; } return $ip; } $user_ip = getUserIP(); $http = new WireHttp(); $url = $http->getJSON('https://geoip.nekudo.com/api/'.$user_ip); $country = $url['country']['code']; ?> <?php foreach($languages as $language) { if(strpos($config->httpHost, "$language->yourwebsite.com") === 0) { $user->language = $language; break; } } $name = $sanitizer->pageName(substr($country, 0, 2)); $language = $languages->get($name); if($language->id && $name != $user->language->name) { $url = "http://yourwebsite.com/" . $page->localUrl($language); $session->redirect($url); } ?> If the language it's not set for the country it will load the default language. This can be used also for redirect users to any subdomain or whatever, just need change the $session->redirect($url). substr it can be useful sometime this service give me back an hidden character. I have just a notice in TracyDebug where start the foreach, if I put it after $country give me an error, look like there is an error in the previous lines but honestlyI did not understand what it is. --- * In the Ryan post there is the code for filter the language by Browser's HTTP Accept-Language. As @theo had said. Link to comment Share on other sites More sharing options...
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now