Después de bajar y usar radiant 0.9 con globalize, me di cuenta que además quería que los usuarios sean dirigidos por default al sitio del lenguaje correspondiente, checkeando el IP para saber desde adonde estaban navegando. Y obvio, necesitaba GeoIP.
Instale GeoIP y después me quedaba hacer algunas modificaciones al plugin globalize para lograr mi acometido.
Primero edite config/environment.rb y agregue la linea para cargar GeoIP con la aplicación
config.gem 'geoip'
Luego, modifique el archivo vendor/extensions/globalize2/lib/globalize2/application_controller_extensions.rb
module Globalize2
module ApplicationControllerExtensions
def self.included(base)
base.send(:include, InstanceMethods)
base.class_eval do
before_filter :set_locale
end
end
module InstanceMethods
def set_locale
@locale = params[:locale] || session[:locale] || cookies[:locale] ||
Globalize2Extension.ip_lookup(request.remote_ip)
session[:locale] = @locale
cookies[:locale] = @locale
I18n.locale = @locale
end
def reset_locale
unless I18n.locale == Globalize2Extension.default_language
locale = Globalize2Extension.default_language
session[:locale] = locale
I18n.locale = locale
flash.now[:notice] = "The locale has been changed to default."
end
end
end
end
end
Como pueden ver en el código, también checkeo si el usuario selecciono algún lenguaje alguna vez en la cookie, y cuando el usuario selecciona (u obtiene un lenguaje por su geo localización), seteo la cookie, así la próxima vez que vuelva al sitio, va a ver el sitio con el último lenguaje seleccionado.
Finalmente, modifique el archivo vendor/extensions/globalize2/globalize2_extension.rb y agregue el siguiente método, donde obtengo el código del país del usuario, y después seteo el locale correspondiente a mi sitio en base a su IP, o el lenguaje por defecto.
def ip_lookup(ip)
g = GeoIP.new( File.join(File.dirname(__FILE__), '..', '..', 'gems', 'geoip-0.8.6', 'GeoIP.dat'))
r = g.country(ip)
country_code = r[3]
case country_code
when 'DE'
'de'
when 'GB'
'uk'
when 'AU'
'au'
when 'FR'
'fr'
when ' US'
'us'
else
'us'
end
end
Y finalmente, tenemos que decirle a Radiant que cargue la librería GeoIP, así que en el mismo archivo agregamos
extension_config do |config|
config.gem 'geoip', :source => 'http://github.com'
end
So that’s all, now you have GeoIP working with globalize and Radiant 0.9