Simple wrapper for GeoIP gem with some redundancy on GeoKit to get a two-letter country code or locale from an IP and, (optionally) request headers if a service like cloudflare is used.
Detect application user's origin and display app in that language.
Ruby 2.0.0 and greater.
# in Gemfile
gem 'geo_locale', '~> 0.9.5' # and bundle
Configure default locales
# in /config/initializers/geo_locale.rb
GeoLocale.configure do |config|
config.localhost_country = "lv" # set the country to return for localhost, this country's locale and lcid will also be used for localhost
config.default_country = "de" # set to nil or false if you want to catch fails in geolocation
config.default_locale = "en" # country->locale conversion is minimal for now, set this explicitly to ensure GeoLocale.locale returns useful value
config.default_lcid = "en-us"
config.overrides["ee"] = "en" # hash used to override standard country codes
end
GeoLocale.country_code(ip: request.remote_ip, request_headers: request.headers)
# => "en"
GeoLocale.locale(country_code: "gb", request_headers: request.headers)
#=> "en"
GeoLocale.locale(country_code: "gb", lcid: true)
#=> "en-gb"
GeoLocale.locale(ip: "97.77.25.20")
#=> "en"
GeoLocale.locale(ip: "97.77.25.20", lcid: true)
#=> "en-us"
country_code is prioritized as it does not require external calls.
GeoLocale.locale(ip: "97.77.25.20", country_code: "lv")
#=> "lv"
- Extend the country_code => locale hash in lib/geo_locale/locale.rb
- Open the hash to configuration overrides
- Automagically make initializer file for rails projects
- Fork it ( https://github.com/Epigene/geo_locale/fork )
- Create your feature branch (
git checkout -b my-new-feature
) - Commit your changes (
git commit -am 'Add some feature'
) - Push to the branch (
git push origin my-new-feature
) - Create a new Pull Request