From 768a792a6175215855518c378b49a41e7b10b503 Mon Sep 17 00:00:00 2001 From: Tom Hughes Date: Thu, 4 Jun 2020 17:25:13 +0100 Subject: [PATCH] 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 --- app/helpers/browse_helper.rb | 20 ++++++++++++++++++-- test/helpers/browse_helper_test.rb | 6 ++++++ 2 files changed, 24 insertions(+), 2 deletions(-) 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 -- 2.43.2