From: Tom Hughes Date: Thu, 4 Jun 2020 16:25:13 +0000 (+0100) Subject: Improve selection of name to display in data browser X-Git-Tag: live~2698 X-Git-Url: https://git.openstreetmap.org./rails.git/commitdiff_plain/768a792a6175215855518c378b49a41e7b10b503?ds=sidebyside;hp=bf22c69286f97f72625c79d64e7c1a5cb6e95710 Improve selection of name to display in data browser 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 --- diff --git a/app/helpers/browse_helper.rb b/app/helpers/browse_helper.rb index 63f48a876..14b1f7cc2 100644 --- a/app/helpers/browse_helper.rb +++ b/app/helpers/browse_helper.rb @@ -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 diff --git a/test/helpers/browse_helper_test.rb b/test/helpers/browse_helper_test.rb index 4f05d5f7a..7141cda60 100644 --- a/test/helpers/browse_helper_test.rb +++ b/test/helpers/browse_helper_test.rb @@ -151,4 +151,10 @@ class BrowseHelperTest < ActionView::TestCase create(:node_tag, :node => node, :k => key, :v => value) end end + + private + + def current_user + nil + end end