]> git.openstreetmap.org Git - rails.git/commitdiff
Improve selection of name to display in data browser
authorTom Hughes <tom@compton.nu>
Thu, 4 Jun 2020 16:25:13 +0000 (17:25 +0100)
committerTom Hughes <tom@compton.nu>
Thu, 4 Jun 2020 16:33:11 +0000 (17:33 +0100)
If the user is logged in then consider all their preferred
languages rather than just the UI language, and use the full
locale matching algorithm instead of just checking parents.

Fixes #2636

app/helpers/browse_helper.rb
test/helpers/browse_helper_test.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?
     # 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)
 
       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 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
 end
index 4f05d5f7acf39f341789e7c72dd591dae425c13d..7141cda6038747661a7eff929e71e54dd72a2168 100644 (file)
@@ -151,4 +151,10 @@ class BrowseHelperTest < ActionView::TestCase
       create(:node_tag, :node => node, :k => key, :v => value)
     end
   end
       create(:node_tag, :node => node, :k => key, :v => value)
     end
   end
+
+  private
+
+  def current_user
+    nil
+  end
 end
 end