Ruby on Rails 从HTTP请求获取语言环境
示例
有时,根据请求IP设置应用程序区域设置会很有用。您可以使用轻松实现此目标Geocoder。在做的许多事情Geocoder中,它也可以分辨出location的request。
首先,添加Geocoder到您的Gemfile
#宝石文件 gem 'geocoder'
Geocoder向标准对象 添加location和safe_location方法,Rack::Request因此您可以通过IP地址轻松查找任何HTTP请求的位置。您可以在中的before_action中使用此方法ApplicationController:
class ApplicationController < ActionController::Base
before_action :set_locale_from_request
def set_locale_from_request
country_code = request.location.data["country_code"] #=> "US"
country_sym = country_code.underscore.to_sym #=> :us
#如果请求语言环境可用,则使用它,否则使用I18n默认语言环境
if I18n.available_locales.include? country_sym
I18n.locale = country_sym
end
end要注意的是这不会在工作development和test环境,为喜欢的东西0.0.0.0和localhost有效有效的InternetIP地址。
局限性和替代方案
Geocoder是非常强大和灵活的,但是需要进行配置以与地理编码服务一起使用(请参阅更多详细信息);其中许多限制使用。还需要牢记的是,对每个请求调用外部服务都可能影响性能。
为了解决这些问题,还值得考虑:
1.离线解决方案
使用类似GeoIP(参见此处)的gem可以针对本地数据文件进行查找。在准确性方面可能需要权衡,因为这些数据文件需要保持最新。
2.使用CloudFlare
通过CloudFlare服务的页面可以选择进行透明的地理编码,并且可以将国家/地区代码添加到页眉(HTTP_CF_IPCOUNTRY)中。可以在这里找到更多细节。
热门推荐
10 香港老妈结婚祝福语简短
11 毕业立体贺卡祝福语简短
12 简短新年年会祝福语
13 评论小品祝福语大全简短
14 恭喜师兄结婚祝福语简短
15 员工集体辞职祝福语简短
16 高中新生祝福语 简短
17 装修祝福语男生搞笑简短
18 生日开业蛋糕祝福语简短