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
This commit is contained in:
Tom Hughes 2020-06-04 17:25:13 +01:00
parent bf22c69286
commit 768a792a61
2 changed files with 24 additions and 2 deletions

View 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