From 02d928f9a406c536d5a83ebac0532b6383f8e1fc Mon Sep 17 00:00:00 2001 From: Christian Meier <m.kristian@web.de> Date: Mon, 26 May 2014 12:55:43 +0100 Subject: [PATCH] allow to pass in language/locale parameter on per request base --- lib/geocoder/lookups/google.rb | 2 +- lib/geocoder/lookups/nominatim.rb | 2 +- lib/geocoder/lookups/yahoo.rb | 4 +++- lib/geocoder/lookups/yandex.rb | 2 +- lib/geocoder/query.rb | 4 ++++ test/unit/lookup_test.rb | 17 +++++++++++++++++ 6 files changed, 27 insertions(+), 4 deletions(-) diff --git a/lib/geocoder/lookups/google.rb b/lib/geocoder/lookups/google.rb index d87f79bf..ef1e41c7 100644 --- a/lib/geocoder/lookups/google.rb +++ b/lib/geocoder/lookups/google.rb @@ -44,7 +44,7 @@ module Geocoder::Lookup params = { (query.reverse_geocode? ? :latlng : :address) => query.sanitized_text, :sensor => "false", - :language => configuration.language + :language => (query.language || configuration.language) } unless (bounds = query.options[:bounds]).nil? params[:bounds] = bounds.map{ |point| "%f,%f" % point }.join('|') diff --git a/lib/geocoder/lookups/nominatim.rb b/lib/geocoder/lookups/nominatim.rb index 4e594862..6eeef989 100644 --- a/lib/geocoder/lookups/nominatim.rb +++ b/lib/geocoder/lookups/nominatim.rb @@ -37,7 +37,7 @@ module Geocoder::Lookup params = { :format => "json", :addressdetails => "1", - :"accept-language" => configuration.language + :"accept-language" => (query.language || configuration.language) }.merge(super) if query.reverse_geocode? lat,lon = query.coordinates diff --git a/lib/geocoder/lookups/yahoo.rb b/lib/geocoder/lookups/yahoo.rb index 2b80100c..ec19f4fe 100644 --- a/lib/geocoder/lookups/yahoo.rb +++ b/lib/geocoder/lookups/yahoo.rb @@ -62,11 +62,13 @@ module Geocoder::Lookup end def query_url_params(query) + lang = (query.language || configuration.language).to_s + lang += '_US' if lang == 'en' { :location => query.sanitized_text, :flags => "JXTSR", :gflags => "AC#{'R' if query.reverse_geocode?}", - :locale => "#{configuration.language}_US", + :locale => lang, :appid => configuration.api_key }.merge(super) end diff --git a/lib/geocoder/lookups/yandex.rb b/lib/geocoder/lookups/yandex.rb index f5559efb..6be58770 100644 --- a/lib/geocoder/lookups/yandex.rb +++ b/lib/geocoder/lookups/yandex.rb @@ -46,7 +46,7 @@ module Geocoder::Lookup { :geocode => q, :format => "json", - :plng => "#{configuration.language}", # supports ru, uk, be + :plng => "#{query.language || configuration.language}", # supports ru, uk, be :key => configuration.api_key }.merge(super) end diff --git a/lib/geocoder/query.rb b/lib/geocoder/query.rb index d201c94f..c8e8c298 100644 --- a/lib/geocoder/query.rb +++ b/lib/geocoder/query.rb @@ -98,6 +98,10 @@ module Geocoder coordinates? end + def language + options[:language] + end + private # ---------------------------------------------------------------- def params_given? diff --git a/test/unit/lookup_test.rb b/test/unit/lookup_test.rb index 83561537..ba7a14a3 100644 --- a/test/unit/lookup_test.rb +++ b/test/unit/lookup_test.rb @@ -56,6 +56,23 @@ class LookupTest < GeocoderTestCase end end + { + :google => :language, + :google_premier => :language, + :nominatim => :"accept-language", + :yahoo => :locale, + :yandex => :plng + }.each do |l,p| + define_method "test_passing_language_to_#{l}_query_overrides_configuration_value" do + set_api_key!(l) + url = Geocoder::Lookup.get(l).query_url(Geocoder::Query.new( + "test", :language => 'xxxx' + )) + assert_match(/#{p}=xxxx/, url, + "Param passed to #{l} lookup does not override configuration value") + end + end + def test_raises_exception_on_invalid_key Geocoder.configure(:always_raise => [Geocoder::InvalidApiKey]) #Geocoder::Lookup.all_services_except_test.each do |l| -- GitLab