diff --git a/app/helpers/browse_helper.rb b/app/helpers/browse_helper.rb
index 10ff38d92de..3b4f7df9af8 100644
--- a/app/helpers/browse_helper.rb
+++ b/app/helpers/browse_helper.rb
@@ -1,6 +1,8 @@
# frozen_string_literal: true
module BrowseHelper
+ include BrowseTagsHelper
+
def element_icon(type, object)
selected_icon_data = { :filename => "#{type}.svg", :priority => 1 }
@@ -72,6 +74,18 @@ def link_follow(object)
"nofollow" if object.tags.empty?
end
+ def browse_tag_value_cell(tag)
+ content_tag :td,
+ format_value(tag[0], tag[1]),
+ :class => "py-1 border-secondary-subtle border-start",
+ :dir => "auto",
+ :lang => tag_language(tag[0])
+ end
+
+ def tag_language(key)
+ key[/\Aname:([a-z]{2,3}(?:-[A-Za-z0-9]+)*)\z/, 1]
+ end
+
private
def feature_name(tags)
diff --git a/app/views/browse/_tag.html.erb b/app/views/browse/_tag.html.erb
index 145d7e2fe73..6be071c5630 100644
--- a/app/views/browse/_tag.html.erb
+++ b/app/views/browse/_tag.html.erb
@@ -1,4 +1,7 @@
- | <%= format_key(tag[0]) %> |
- <%= format_value(tag[0], tag[1]) %> |
+
+ <%= format_key(tag[0]) %>
+ |
+
+ <%= browse_tag_value_cell(tag) %>
diff --git a/test/controllers/api/changesets/uploads_controller_test.rb b/test/controllers/api/changesets/uploads_controller_test.rb
index efa3ec224d1..256e5db95ef 100644
--- a/test/controllers/api/changesets/uploads_controller_test.rb
+++ b/test/controllers/api/changesets/uploads_controller_test.rb
@@ -216,9 +216,14 @@ def test_upload_race_condition
threads = Array.new(concurrency_level) do
Thread.new do
- post path, :params => diff, :headers => auth_header
+ ActiveRecord::Base.connection_pool.with_connection do
+ open_session do |sess|
+ sess.post path, :params => diff, :headers => auth_header
+ end
+ end
end
end
+
threads.each(&:join)
changeset.reload
diff --git a/test/helpers/browse_helper_test.rb b/test/helpers/browse_helper_test.rb
index a04cad21f1a..331358e3aba 100644
--- a/test/helpers/browse_helper_test.rb
+++ b/test/helpers/browse_helper_test.rb
@@ -109,6 +109,22 @@ def test_element_icon
end
end
+ def test_lang_attribute_for_localized_name_tags
+ tag = ["name:pt", "NĂ³ teste"]
+
+ html = browse_tag_value_cell(tag)
+
+ assert_match(/lang="pt"/, html)
+ end
+
+ def test_non_language_name_tags_do_not_get_lang_attribute
+ tag = ["name:etymology", "Origin"]
+
+ html = browse_tag_value_cell(tag)
+
+ assert_no_match(/lang="/, html)
+ end
+
private
def add_old_tags_selection(old_node)