]> git.openstreetmap.org Git - rails.git/blobdiff - app/helpers/browse_helper.rb
Merge remote-tracking branch 'upstream/pull/2642'
[rails.git] / app / helpers / browse_helper.rb
index 63f48a876ee14653f8d2205674b34d639c073f5a..14b1f7cc22d1b04e92acdc52dd790bb6797602c0 100644 (file)
@@ -11,9 +11,21 @@ module BrowseHelper
     # don't look at object tags if redacted, so as to avoid giving
     # away redacted version tag information.
     unless object.redacted?
-      locale = I18n.locale.to_s
+      available_locales = Locale::List.new(name_locales(object))
 
-      locale = locale.sub(/-[^-]+/, "") while locale =~ /-[^-]+/ && !object.tags.include?("name:#{I18n.locale}")
+      Rails.logger.info "available_locales = #{available_locales.map(&:to_s)}"
+
+      preferred_locales = if current_user
+                            current_user.preferred_languages
+                          else
+                            Locale.new(I18n.locale).candidates
+                          end
+
+      Rails.logger.info "preferred_locales = #{preferred_locales.expand.map(&:to_s)}"
+
+      locale = available_locales.preferred(preferred_locales)
+
+      Rails.logger.info "locale = #{locale}"
 
       if object.tags.include? "name:#{locale}"
         name = t "printable_name.with_name_html", :name => content_tag(:bdi, object.tags["name:#{locale}"].to_s), :id => content_tag(:bdi, name)
@@ -71,4 +83,8 @@ module BrowseHelper
   def icon_tags(object)
     object.tags.find_all { |k, _v| ICON_TAGS.include? k }.sort
   end
+
+  def name_locales(object)
+    object.tags.keys.map { |k| Regexp.last_match(1) if k =~ /^name:(.*)$/ }.flatten
+  end
 end