mods_display 0.3.3 → 0.3.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (82) hide show
  1. checksums.yaml +4 -4
  2. data/.rubocop.yml +16 -0
  3. data/.rubocop_todo.yml +60 -0
  4. data/.travis.yml +2 -2
  5. data/Rakefile +10 -2
  6. data/lib/mods_display.rb +42 -42
  7. data/lib/mods_display/configuration.rb +69 -67
  8. data/lib/mods_display/configuration/access_condition.rb +17 -13
  9. data/lib/mods_display/configuration/base.rb +27 -24
  10. data/lib/mods_display/configuration/format.rb +8 -4
  11. data/lib/mods_display/configuration/genre.rb +8 -4
  12. data/lib/mods_display/configuration/imprint.rb +12 -7
  13. data/lib/mods_display/configuration/name.rb +8 -4
  14. data/lib/mods_display/configuration/note.rb +8 -4
  15. data/lib/mods_display/configuration/related_item.rb +8 -4
  16. data/lib/mods_display/configuration/subject.rb +11 -9
  17. data/lib/mods_display/configuration/title.rb +8 -4
  18. data/lib/mods_display/controller_extension.rb +24 -24
  19. data/lib/mods_display/country_codes.rb +385 -384
  20. data/lib/mods_display/fields/abstract.rb +7 -6
  21. data/lib/mods_display/fields/access_condition.rb +55 -55
  22. data/lib/mods_display/fields/audience.rb +7 -6
  23. data/lib/mods_display/fields/cartographics.rb +15 -14
  24. data/lib/mods_display/fields/collection.rb +32 -17
  25. data/lib/mods_display/fields/contact.rb +15 -13
  26. data/lib/mods_display/fields/contents.rb +7 -6
  27. data/lib/mods_display/fields/description.rb +21 -21
  28. data/lib/mods_display/fields/field.rb +164 -109
  29. data/lib/mods_display/fields/format.rb +36 -33
  30. data/lib/mods_display/fields/genre.rb +12 -11
  31. data/lib/mods_display/fields/identifier.rb +34 -34
  32. data/lib/mods_display/fields/imprint.rb +258 -214
  33. data/lib/mods_display/fields/language.rb +18 -16
  34. data/lib/mods_display/fields/location.rb +27 -26
  35. data/lib/mods_display/fields/name.rb +113 -118
  36. data/lib/mods_display/fields/note.rb +33 -34
  37. data/lib/mods_display/fields/related_item.rb +64 -66
  38. data/lib/mods_display/fields/resource_type.rb +13 -11
  39. data/lib/mods_display/fields/sub_title.rb +6 -4
  40. data/lib/mods_display/fields/subject.rb +92 -90
  41. data/lib/mods_display/fields/title.rb +54 -49
  42. data/lib/mods_display/fields/values.rb +7 -8
  43. data/lib/mods_display/html.rb +117 -96
  44. data/lib/mods_display/model_extension.rb +17 -16
  45. data/lib/mods_display/relator_codes.rb +269 -267
  46. data/lib/mods_display/version.rb +1 -1
  47. data/mods_display.gemspec +13 -12
  48. data/spec/configuration/access_condition_spec.rb +5 -5
  49. data/spec/configuration/base_spec.rb +24 -24
  50. data/spec/fields/abstract_spec.rb +24 -14
  51. data/spec/fields/access_condition_spec.rb +80 -55
  52. data/spec/fields/audience_spec.rb +15 -12
  53. data/spec/fields/cartographics_spec.rb +17 -18
  54. data/spec/fields/collection_spec.rb +65 -19
  55. data/spec/fields/contact_spec.rb +11 -9
  56. data/spec/fields/contents_spec.rb +15 -12
  57. data/spec/fields/description_spec.rb +40 -22
  58. data/spec/fields/format_spec.rb +28 -18
  59. data/spec/fields/genre_spec.rb +18 -16
  60. data/spec/fields/identifier_spec.rb +46 -34
  61. data/spec/fields/imprint_spec.rb +151 -125
  62. data/spec/fields/language_spec.rb +36 -20
  63. data/spec/fields/location_spec.rb +43 -27
  64. data/spec/fields/name_spec.rb +92 -92
  65. data/spec/fields/note_spec.rb +53 -40
  66. data/spec/fields/related_item_spec.rb +42 -40
  67. data/spec/fields/resource_type_spec.rb +20 -14
  68. data/spec/fields/sub_title_spec.rb +11 -9
  69. data/spec/fields/subject_spec.rb +61 -56
  70. data/spec/fields/title_spec.rb +53 -40
  71. data/spec/fixtures/access_condition_fixtures.rb +50 -0
  72. data/spec/fixtures/cartographics_fixtures.rb +1 -1
  73. data/spec/fixtures/imprint_fixtures.rb +49 -1
  74. data/spec/fixtures/name_fixtures.rb +195 -2
  75. data/spec/fixtures/related_item_fixtures.rb +107 -0
  76. data/spec/fixtures/subjects_fixtures.rb +15 -2
  77. data/spec/fixtures/title_fixtures.rb +101 -0
  78. data/spec/integration/configuration_spec.rb +23 -20
  79. data/spec/integration/html_spec.rb +40 -29
  80. data/spec/integration/installation_spec.rb +14 -14
  81. data/spec/spec_helper.rb +5 -8
  82. metadata +25 -3
@@ -1,84 +1,82 @@
1
- class ModsDisplay::RelatedItem < ModsDisplay::Field
2
-
3
- def fields
4
- return_fields = @values.map do |value|
5
- unless related_item_is_a_collection?(value)
1
+ module ModsDisplay
2
+ class RelatedItem < Field
3
+ def fields
4
+ return_fields = @values.map do |value|
5
+ next if related_item_is_a_collection?(value)
6
6
  case
7
- when related_item_is_a_location?(value)
8
- process_location value
9
- when related_item_is_a_reference?(value)
10
- process_reference value
11
- else
12
- process_related_item(value)
7
+ when related_item_is_a_location?(value)
8
+ process_location value
9
+ when related_item_is_a_reference?(value)
10
+ process_reference value
11
+ else
12
+ process_related_item(value)
13
13
  end
14
- end
15
- end.compact
16
- collapse_fields(return_fields)
17
- end
14
+ end.compact
15
+ collapse_fields(return_fields)
16
+ end
18
17
 
19
- private
18
+ private
20
19
 
21
- def process_location(item)
22
- ModsDisplay::Values.new(:label => related_item_label(item), :values => [item.location.text.strip])
23
- end
20
+ def process_location(item)
21
+ ModsDisplay::Values.new(label: related_item_label(item), values: [item.location.text.strip])
22
+ end
24
23
 
25
- def process_reference(item)
26
- ModsDisplay::Values.new(:label => related_item_label(item), :values => [reference_title(item)])
27
- end
24
+ def process_reference(item)
25
+ ModsDisplay::Values.new(label: related_item_label(item), values: [reference_title(item)])
26
+ end
28
27
 
29
- def process_related_item(item)
30
- if item.titleInfo.length > 0
28
+ def process_related_item(item)
29
+ return unless item.titleInfo.length > 0
31
30
  title = item.titleInfo.text.strip
32
31
  return_text = title
33
32
  location = nil
34
- location = item.location.url.text if (item.location.length > 0 and
35
- item.location.url.length > 0)
36
- return_text = "<a href='#{location}'>#{title}</a>" if location and !title.empty?
37
- unless return_text.empty?
38
- ModsDisplay::Values.new(:label => related_item_label(item), :values => [return_text])
39
- end
33
+ location = item.location.url.text if item.location.length > 0 &&
34
+ item.location.url.length > 0
35
+ return_text = "<a href='#{location}'>#{title}</a>" if location && !title.empty?
36
+
37
+ ModsDisplay::Values.new(label: related_item_label(item), values: [return_text]) unless return_text.empty?
40
38
  end
41
- end
42
39
 
43
- def reference_title(item)
44
- [item.titleInfo,
45
- item.originInfo.dateOther,
46
- item.part.detail.number,
47
- item.note].flatten.compact.map!(&:text).map!(&:strip).join(" ")
48
- end
40
+ def reference_title(item)
41
+ [item.titleInfo,
42
+ item.originInfo.dateOther,
43
+ item.part.detail.number,
44
+ item.note].flatten.compact.map!(&:text).map!(&:strip).join(' ')
45
+ end
49
46
 
50
- def related_item_is_a_collection?(item)
51
- item.respond_to?(:titleInfo) and
52
- item.respond_to?(:typeOfResource) and
53
- item.typeOfResource.attributes.length > 0 and
54
- item.typeOfResource.attributes.first.has_key?("collection") and
55
- item.typeOfResource.attributes.first["collection"].value == "yes"
56
- end
47
+ def related_item_is_a_collection?(item)
48
+ item.respond_to?(:titleInfo) &&
49
+ item.respond_to?(:typeOfResource) &&
50
+ item.typeOfResource.attributes.length > 0 &&
51
+ item.typeOfResource.attributes.first.key?('collection') &&
52
+ item.typeOfResource.attributes.first['collection'].value == 'yes'
53
+ end
57
54
 
58
- def related_item_is_a_location?(item)
59
- !related_item_is_a_collection?(item) and
60
- !related_item_is_a_reference?(item) and
61
- item.location.length > 0 and
62
- item.titleInfo.length < 1
63
- end
55
+ def related_item_is_a_location?(item)
56
+ !related_item_is_a_collection?(item) &&
57
+ !related_item_is_a_reference?(item) &&
58
+ item.location.length > 0 &&
59
+ item.titleInfo.length < 1
60
+ end
64
61
 
65
- def related_item_is_a_reference?(item)
66
- !related_item_is_a_collection?(item) and
67
- item.attributes["type"].respond_to?(:value) and
68
- item.attributes["type"].value == "isReferencedBy"
69
- end
62
+ def related_item_is_a_reference?(item)
63
+ !related_item_is_a_collection?(item) &&
64
+ item.attributes['type'].respond_to?(:value) &&
65
+ item.attributes['type'].value == 'isReferencedBy'
66
+ end
70
67
 
71
- def related_item_label(item)
72
- if displayLabel(item)
73
- return displayLabel(item)
74
- else
75
- case
76
- when related_item_is_a_location?(item)
77
- return I18n.t('mods_display.location')
78
- when related_item_is_a_reference?(item)
79
- return I18n.t('mods_display.referenced_by')
68
+ def related_item_label(item)
69
+ if displayLabel(item)
70
+ return displayLabel(item)
71
+ else
72
+ case
73
+ when related_item_is_a_location?(item)
74
+ return I18n.t('mods_display.location')
75
+ when related_item_is_a_reference?(item)
76
+ return I18n.t('mods_display.referenced_by')
77
+ end
78
+ I18n.t('mods_display.related_item')
80
79
  end
81
- I18n.t('mods_display.related_item')
82
80
  end
83
81
  end
84
- end
82
+ end
@@ -1,14 +1,16 @@
1
- class ModsDisplay::ResourceType < ModsDisplay::Field
2
-
3
- def fields
4
- return_fields = @values.map do |value|
5
- ModsDisplay::Values.new(:label => displayLabel(value) || label, :values => [value.text.strip.capitalize].flatten)
1
+ module ModsDisplay
2
+ class ResourceType < Field
3
+ def fields
4
+ return_fields = @values.map do |value|
5
+ ModsDisplay::Values.new(label: displayLabel(value) || label, values: [value.text.strip.capitalize].flatten)
6
+ end
7
+ collapse_fields(return_fields)
6
8
  end
7
- collapse_fields(return_fields)
8
- end
9
9
 
10
- private
11
- def displayLabel(element)
12
- super(element) || I18n.t('mods_display.type_of_resource')
10
+ private
11
+
12
+ def displayLabel(element)
13
+ super(element) || I18n.t('mods_display.type_of_resource')
14
+ end
13
15
  end
14
- end
16
+ end
@@ -1,5 +1,7 @@
1
- class ModsDisplay::SubTitle < ModsDisplay::Field
2
- def fields
3
- ModsDisplay::Title.new(@values[1, @values.length], @config, @klass).fields
1
+ module ModsDisplay
2
+ class SubTitle < Field
3
+ def fields
4
+ ModsDisplay::Title.new(@values[1, @values.length], @config, @klass).fields
5
+ end
4
6
  end
5
- end
7
+ end
@@ -1,39 +1,38 @@
1
- class ModsDisplay::Subject < ModsDisplay::Field
2
-
3
- def fields
4
- return_fields = []
5
- @values.each do |value|
6
- return_values = []
7
- label = displayLabel(value) || I18n.t('mods_display.subject')
8
- return_text = []
9
- selected_subjects(value).each do |child|
10
- if self.respond_to?(:"process_#{child.name}")
11
- return_text << self.send(:"process_#{child.name}", child) unless self.send(:"process_#{child.name}", child).to_s.empty?
12
- else
13
- if child.text.include?("--")
14
- return_text << child.text.split("--").map{|t| t.strip }
1
+ module ModsDisplay
2
+ class Subject < Field
3
+ def fields
4
+ return_fields = []
5
+ @values.each do |value|
6
+ return_values = []
7
+ label = displayLabel(value) || I18n.t('mods_display.subject')
8
+ return_text = []
9
+ selected_subjects(value).each do |child|
10
+ if self.respond_to?(:"process_#{child.name}")
11
+ method_send = send(:"process_#{child.name}", child)
12
+ return_text << method_send unless method_send.to_s.empty?
15
13
  else
16
- return_text << child.text unless child.text.empty?
14
+ if child.text.include?('--')
15
+ return_text << child.text.split('--').map(&:strip)
16
+ else
17
+ return_text << child.text unless child.text.empty?
18
+ end
17
19
  end
18
20
  end
21
+ return_values << return_text.flatten unless return_text.empty?
22
+ unless return_values.empty?
23
+ return_fields << ModsDisplay::Values.new(label: label, values: return_values)
24
+ end
19
25
  end
20
- unless return_text.empty?
21
- return_values << return_text.flatten
22
- end
23
- unless return_values.empty?
24
- return_fields << ModsDisplay::Values.new(:label => label, :values => return_values)
25
- end
26
+ collapse_subjects return_fields
26
27
  end
27
- collapse_subjects return_fields
28
- end
29
-
30
- # Would really like to clean this up, but it works and is tested for now.
31
- def to_html
32
- return nil if fields.empty? or @config.ignore?
33
- output = ""
34
- fields.each do |field|
35
- output << "<dt#{label_class} #{sanitized_field_title(field.label)}>#{field.label}</dt>"
36
- output << "<dd#{value_class}>"
28
+
29
+ # Would really like to clean this up, but it works and is tested for now.
30
+ def to_html
31
+ return nil if fields.empty? || @config.ignore?
32
+ output = ''
33
+ fields.each do |field|
34
+ output << "<dt#{label_class} #{sanitized_field_title(field.label)}>#{field.label}</dt>"
35
+ output << "<dd#{value_class}>"
37
36
  subs = []
38
37
  field.values.each do |subjects|
39
38
  buffer = []
@@ -44,7 +43,7 @@ class ModsDisplay::Subject < ModsDisplay::Field
44
43
  else
45
44
  buffer << val
46
45
  end
47
- if @config.link and @config.hierarchical_link
46
+ if @config.link && @config.hierarchical_link
48
47
  if val.is_a?(ModsDisplay::Name::Person)
49
48
  txt = link_to_value(val.name, buffer.join(' '))
50
49
  txt << " (#{val.roles.join(', ')})" if val.roles
@@ -66,72 +65,75 @@ class ModsDisplay::Subject < ModsDisplay::Field
66
65
  end
67
66
  subs << sub_parts.join(@config.delimiter)
68
67
  end
69
- output << subs.join("<br/>")
70
- output << "</dd>"
68
+ output << subs.join('<br/>')
69
+ output << '</dd>'
70
+ end
71
+ output
71
72
  end
72
- output
73
- end
74
73
 
75
- def process_hierarchicalGeographic(element)
76
- values_from_subjects(element)
77
- end
78
-
79
- def process_name(element)
80
- ModsDisplay::Name.new([element], @config, @klass).fields.first.values.first
81
- end
82
-
83
- private
74
+ def process_hierarchicalGeographic(element)
75
+ values_from_subjects(element)
76
+ end
77
+
78
+ def process_name(element)
79
+ name = ModsDisplay::Name.new([element], @config, @klass).fields.first
80
+
81
+ name.values.first if name
82
+ end
84
83
 
85
- def values_from_subjects(element)
86
- return_values = []
87
- selected_subjects(element).each do |child|
88
- if child.text.include?("--")
89
- return_values << child.text.split("--").map{|t| t.strip }
90
- else
91
- return_values << child.text.strip
84
+ private
85
+
86
+ def values_from_subjects(element)
87
+ return_values = []
88
+ selected_subjects(element).each do |child|
89
+ if child.text.include?('--')
90
+ return_values << child.text.split('--').map(&:strip)
91
+ else
92
+ return_values << child.text.strip
93
+ end
92
94
  end
95
+ return_values
93
96
  end
94
- return_values
95
- end
96
-
97
- def selected_subjects(element=@value)
98
- element.children.select do |child|
99
- !omit_elements.include?(child.name.to_sym)
97
+
98
+ def selected_subjects(element = @value)
99
+ element.children.select do |child|
100
+ !omit_elements.include?(child.name.to_sym)
101
+ end
100
102
  end
101
- end
102
-
103
- def omit_elements
104
- [:cartographics, :geographicCode, :text]
105
- end
106
103
 
107
- # Providing subject specific collapsing method so we can
108
- # collapse the labels w/o flattening all the subject fields.
109
- def collapse_subjects(display_fields)
110
- return_values = []
111
- current_label = nil
112
- prev_label = nil
113
- buffer = []
114
- display_fields.each_with_index do |field, index|
115
- current_label = field.label
116
- current_values = field.values
117
- if display_fields.length == 1
118
- return_values << ModsDisplay::Values.new(:label => current_label, :values => current_values)
119
- elsif index == (display_fields.length-1)
120
- # need to deal w/ when we have a last element but we have separate labels in the buffer.
121
- if current_label != prev_label
122
- return_values << ModsDisplay::Values.new(:label => prev_label, :values => [buffer.flatten(1)])
123
- return_values << ModsDisplay::Values.new(:label => current_label, :values => current_values)
124
- else
125
- buffer.concat(current_values)
126
- return_values << ModsDisplay::Values.new(:label => current_label, :values => buffer.flatten(0))
104
+ def omit_elements
105
+ [:cartographics, :geographicCode, :text]
106
+ end
107
+
108
+ # Providing subject specific collapsing method so we can
109
+ # collapse the labels w/o flattening all the subject fields.
110
+ def collapse_subjects(display_fields)
111
+ return_values = []
112
+ current_label = nil
113
+ prev_label = nil
114
+ buffer = []
115
+ display_fields.each_with_index do |field, index|
116
+ current_label = field.label
117
+ current_values = field.values
118
+ if display_fields.length == 1
119
+ return_values << ModsDisplay::Values.new(label: current_label, values: current_values)
120
+ elsif index == (display_fields.length - 1)
121
+ # need to deal w/ when we have a last element but we have separate labels in the buffer.
122
+ if current_label != prev_label
123
+ return_values << ModsDisplay::Values.new(label: prev_label, values: [buffer.flatten(1)])
124
+ return_values << ModsDisplay::Values.new(label: current_label, values: current_values)
125
+ else
126
+ buffer.concat(current_values)
127
+ return_values << ModsDisplay::Values.new(label: current_label, values: buffer.flatten(0))
128
+ end
129
+ elsif prev_label && (current_label != prev_label)
130
+ return_values << ModsDisplay::Values.new(label: prev_label, values: buffer.flatten(0))
131
+ buffer = []
127
132
  end
128
- elsif prev_label and (current_label != prev_label)
129
- return_values << ModsDisplay::Values.new(:label => prev_label, :values => buffer.flatten(0))
130
- buffer = []
133
+ buffer.concat(current_values)
134
+ prev_label = current_label
131
135
  end
132
- buffer.concat(current_values)
133
- prev_label = current_label
136
+ return_values
134
137
  end
135
- return_values
136
138
  end
137
- end
139
+ end
@@ -1,59 +1,64 @@
1
- class ModsDisplay::Title < ModsDisplay::Field
2
-
3
- def fields
4
- return_values = []
5
- if @values
6
- @values.each do |value|
7
- if displayForm(value)
8
- return_values << ModsDisplay::Values.new(:label => displayLabel(value) || title_label(value), :values => [displayForm(value)])
9
- else
10
- nonSort = nil
11
- title = nil
12
- subTitle = nil
13
- nonSort = value.nonSort.text.strip unless value.nonSort.text.strip.empty?
14
- title = value.title.text.strip unless value.title.text.strip.empty?
15
- subTitle = value.subTitle.text unless value.subTitle.text.strip.empty?
16
- preSubTitle = [nonSort, title].compact.join(" ")
17
- preSubTitle = nil if preSubTitle.strip.empty?
18
- preParts = [preSubTitle, subTitle].compact.join(" : ")
19
- preParts = nil if preParts.strip.empty?
20
- parts = value.children.select do |child|
21
- ["partName", "partNumber"].include?(child.name)
22
- end.map do |child|
23
- child.text
24
- end.compact.join(parts_delimiter(value))
25
- parts = nil if parts.strip.empty?
26
- return_values << ModsDisplay::Values.new(:label => displayLabel(value) || title_label(value), :values => [[preParts, parts].compact.join(". ")])
1
+ module ModsDisplay
2
+ class Title < Field
3
+ def fields
4
+ return_values = []
5
+ if @values
6
+ @values.each do |value|
7
+ if displayForm(value)
8
+ return_values << ModsDisplay::Values.new(
9
+ label: displayLabel(value) || title_label(value),
10
+ values: [displayForm(value)]
11
+ )
12
+ else
13
+ nonSort = nil
14
+ title = nil
15
+ subTitle = nil
16
+ nonSort = value.nonSort.text.strip unless value.nonSort.text.strip.empty?
17
+ title = value.title.text.strip unless value.title.text.strip.empty?
18
+ subTitle = value.subTitle.text unless value.subTitle.text.strip.empty?
19
+ preSubTitle = [nonSort, title].compact.join(' ')
20
+ preSubTitle = nil if preSubTitle.strip.empty?
21
+ preParts = compact_and_join_with_delimiter([preSubTitle, subTitle], ' : ')
22
+ preParts = nil if preParts.strip.empty?
23
+ parts = value.children.select do |child|
24
+ %w(partName partNumber).include?(child.name)
25
+ end.map(&:text).compact.join(parts_delimiter(value))
26
+ parts = nil if parts.strip.empty?
27
+ return_values << ModsDisplay::Values.new(
28
+ label: displayLabel(value) || title_label(value),
29
+ values: [compact_and_join_with_delimiter([preParts, parts], '. ')]
30
+ )
31
+ end
27
32
  end
28
33
  end
34
+ collapse_fields(return_values)
29
35
  end
30
- collapse_fields(return_values)
31
- end
32
36
 
33
- private
37
+ private
34
38
 
35
- def parts_delimiter(element)
36
- children = element.children.to_a
37
- # index will retun nil which is not comparable so we call 100 if the element isn't present (thus meaning it's at the end of the list)
38
- if (children.index{ |c| c.name == "partNumber" } || 100) < (children.index{|c| c.name == "partName"} || 100)
39
- return ", "
39
+ def parts_delimiter(element)
40
+ children = element.children.to_a
41
+ # index will retun nil which is not comparable so we call 100
42
+ # if the element isn't present (thus meaning it's at the end of the list)
43
+ if (children.index { |c| c.name == 'partNumber' } || 100) < (children.index { |c| c.name == 'partName' } || 100)
44
+ return ', '
45
+ end
46
+ '. '
40
47
  end
41
- ". "
42
- end
43
48
 
44
- def title_label(element)
45
- if (element.attributes["type"].respond_to?(:value) and
46
- title_labels.has_key?(element.attributes["type"].value))
47
- return title_labels[element.attributes["type"].value]
49
+ def title_label(element)
50
+ if element.attributes['type'].respond_to?(:value) &&
51
+ title_labels.key?(element.attributes['type'].value)
52
+ return title_labels[element.attributes['type'].value]
53
+ end
54
+ I18n.t('mods_display.title')
48
55
  end
49
- I18n.t('mods_display.title')
50
- end
51
56
 
52
- def title_labels
53
- {"abbreviated" => I18n.t('mods_display.abbreviated_title'),
54
- "translated" => I18n.t('mods_display.translated_title'),
55
- "alternative" => I18n.t('mods_display.alternative_title'),
56
- "uniform" => I18n.t('mods_display.uniform_title')}
57
+ def title_labels
58
+ { 'abbreviated' => I18n.t('mods_display.abbreviated_title'),
59
+ 'translated' => I18n.t('mods_display.translated_title'),
60
+ 'alternative' => I18n.t('mods_display.alternative_title'),
61
+ 'uniform' => I18n.t('mods_display.uniform_title') }
62
+ end
57
63
  end
58
-
59
- end
64
+ end