我想知道是否有人知道该用户正在访问的国家?到目前为止,我一直在使用'geocoder' - 结果太慢了。发送和检索的请求会增加服务器响应时间(600-800ms之间)的大量时间。或许我想念某种配置?
如果有人有更好的方法,请告诉我!
谢谢!
application.rb中
def extract_locale_from_accept_language_header
if cookies[:windhager_locale] && I18n.available_locales.include?(cookies[:windhager_locale].to_sym)
l = cookies[:windhager_locale].to_sym
else
begin
country_code = country_code = request.location.country_code
if country_code
country_code = country_code.downcase.to_sym
case country_code
when :en
l = :int_en
when :us
l = :int_en
when :ca
# CHECK BROWSER LANGUAGE
l = check_browser_language_ca
when :nz
l = :int_en
when :au
l = :int_en
when :de
l = :de
when :fr
l = :fr
when :ch
# CHECK BROWSER LANGUAGE
l = check_browser_language_ch
when :at
l = :at
when :li
l = :ch_de
when :rd
l = :at
else
l = check_browser_language
end
else
l = check_browser_language
end
rescue
l = I18n.default_locale
ensure
cookies.permanent[:windhager_locale] = l
end
end
return l
end
答案 0 :(得分:0)
假设您现在正在进行远程API调用,您可以从MaxMind下载IP数据库并执行本地查找而不是API调用。这种方法对我的用例非常有用。 Checkout the documentation from the geocoder github page了解更多详情,但这是一个示例:
Geocoder.configure(ip_lookup: :maxmind_local, maxmind_local: {file: File.join('folder', 'GeoLiteCity.dat')})