Stony 对通过 php 执行此操作有很好的响应,如果那是您的后端,我强烈建议您这样做。但是,您也可以通过多种方式在客户端上使用 javascript 执行此操作。
首先是使用javascript通过浏览器获取用户的坐标。但是,要做到这一点,您的用户必须允许您查看他们的位置。你可以很简单地做到这一点:
let userLocationData = {};
if ("geolocation" in navigator) {
navigator.geolocation.getCurrentPosition(function(position){
userLocationData.lat = position.coords.latitude;
userLocationData.long = position.coords.longitude;
})
}
当然,这只是纬度/经度。然后,您需要使用一些 api 从中获取更好的数据。我使用地理名称。再说一次,这取决于您是在客户端还是服务器上执行此操作,但我将举一个 Meteor 的 HTTP 服务的示例,尽管您可以使用 ajax 或 express 或任何其他方式来执行此操作。
let locationResults = HTTP.call('GET',`http://api.geonames.org/findNearbyPostalCodesJSON?formatted=true&lat=${userLocationData.lat}&lng=${userLocationData.long}&username=YOURUSERNAMEHERE`;
这将返回一个对象数组。所以你可以这样做:
userLocationData.country = locationResults[0].countryCode;
您可以访问此网址以查看该数据的外观。 http://api.geonames.org/findNearbyPostalCodesJSON?formatted=true&lat=40.987148&lng=-90.0803689&username=thatgibbyguy
现在,您有了他们的位置和国家/地区。但是你能从中分辨出语言吗?我会说不。您可能应该只检查他们的语言:
userLocationData.language = navigator.language;
这将使用用户自己的语言设置,您可以立即使用。从那里你很容易改变路线:
window.location.replace(`http://yoursite.com/${userLocationData.language}`/);