blacklight 7.7.0 → 7.8.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (57) hide show
  1. checksums.yaml +4 -4
  2. data/.docker/app/Dockerfile +26 -0
  3. data/.docker/app/entrypoint.sh +6 -0
  4. data/.env +5 -0
  5. data/.rubocop_todo.yml +13 -13
  6. data/.travis.yml +15 -23
  7. data/Gemfile +4 -1
  8. data/README.md +4 -0
  9. data/VERSION +1 -1
  10. data/app/assets/stylesheets/blacklight/_pagination.scss +4 -0
  11. data/app/components/blacklight/constraint_layout_component.html.erb +21 -0
  12. data/app/components/blacklight/constraint_layout_component.rb +16 -0
  13. data/app/components/blacklight/facet_field_component.html.erb +25 -0
  14. data/app/components/blacklight/facet_field_component.rb +11 -0
  15. data/app/components/blacklight/facet_field_list_component.html.erb +18 -0
  16. data/app/components/blacklight/facet_field_list_component.rb +22 -0
  17. data/app/components/blacklight/facet_field_no_layout_component.rb +13 -0
  18. data/app/components/blacklight/facet_item_component.rb +120 -0
  19. data/app/helpers/blacklight/catalog_helper_behavior.rb +2 -2
  20. data/app/helpers/blacklight/facets_helper_behavior.rb +84 -48
  21. data/app/helpers/blacklight/render_constraints_helper_behavior.rb +64 -33
  22. data/app/javascript/blacklight/modal.js +1 -1
  23. data/app/models/concerns/blacklight/document/extensions.rb +3 -0
  24. data/app/models/concerns/blacklight/document/semantic_fields.rb +0 -4
  25. data/app/presenters/blacklight/facet_field_presenter.rb +57 -0
  26. data/app/presenters/blacklight/facet_item_presenter.rb +81 -0
  27. data/app/views/catalog/_citation.html.erb +1 -1
  28. data/app/views/catalog/_constraints.html.erb +1 -1
  29. data/app/views/catalog/_constraints_element.html.erb +5 -24
  30. data/app/views/catalog/_email_form.html.erb +1 -1
  31. data/app/views/catalog/_facet_layout.html.erb +8 -17
  32. data/app/views/catalog/_facet_limit.html.erb +3 -12
  33. data/app/views/catalog/_facet_pagination.html.erb +2 -2
  34. data/app/views/catalog/_facet_pivot.html.erb +4 -4
  35. data/app/views/catalog/_sms_form.html.erb +1 -1
  36. data/blacklight.gemspec +1 -0
  37. data/config/locales/blacklight.ar.yml +29 -25
  38. data/docker-compose.yml +35 -0
  39. data/lib/blacklight/engine.rb +2 -6
  40. data/lib/blacklight/search_state.rb +32 -0
  41. data/lib/blacklight/solr/response/facets.rb +2 -0
  42. data/lib/generators/blacklight/assets_generator.rb +10 -0
  43. data/spec/{views/catalog/_constraints_element.html.erb_spec.rb → components/blacklight/constraint_layout_component_spec.rb} +21 -11
  44. data/spec/components/blacklight/facet_field_list_component_spec.rb +108 -0
  45. data/spec/components/blacklight/facet_item_component_spec.rb +50 -0
  46. data/spec/features/facets_spec.rb +1 -1
  47. data/spec/helpers/blacklight/facets_helper_behavior_spec.rb +24 -12
  48. data/spec/helpers/blacklight/render_constraints_helper_behavior_spec.rb +4 -23
  49. data/spec/lib/blacklight/search_state_spec.rb +38 -0
  50. data/spec/models/blacklight/solr/response/facets_spec.rb +30 -1
  51. data/spec/presenters/blacklight/facet_field_presenter_spec.rb +109 -0
  52. data/spec/presenters/blacklight/facet_item_presenter_spec.rb +92 -0
  53. data/spec/spec_helper.rb +2 -0
  54. data/spec/support/presenter_test_helpers.rb +11 -0
  55. data/spec/views/catalog/_facet_group.html.erb_spec.rb +1 -0
  56. data/tasks/blacklight.rake +30 -23
  57. metadata +43 -5
@@ -4,10 +4,6 @@ module Blacklight::Document
4
4
  extend ActiveSupport::Concern
5
5
 
6
6
  module ClassMethods
7
- # Returns array of hashes of registered extensions. Each hash
8
- # has a :module_obj key and a :condition_proc key. Usually this
9
- # method is only used internally in #apply_extensions, but if you
10
-
11
7
  # Class-level method for accessing/setting semantic mappings
12
8
  # for solr stored fields. Can be set by local app, key is
13
9
  # a symbol for a semantic, value is a solr _stored_ field.
@@ -0,0 +1,57 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Blacklight
4
+ class FacetFieldPresenter
5
+ attr_reader :facet_field, :display_facet, :view_context, :search_state
6
+
7
+ delegate :key, to: :facet_field
8
+ delegate :field_name, to: :display_facet
9
+
10
+ def initialize(facet_field, display_facet, view_context, search_state = view_context.search_state)
11
+ @facet_field = facet_field
12
+ @display_facet = display_facet
13
+ @view_context = view_context
14
+ @search_state = search_state
15
+ end
16
+
17
+ def collapsed?
18
+ Deprecation.silence(Blacklight::FacetsHelperBehavior) do
19
+ view_context.should_collapse_facet?(facet_field)
20
+ end
21
+ end
22
+
23
+ def active?
24
+ Deprecation.silence(Blacklight::FacetsHelperBehavior) do
25
+ view_context.facet_field_in_params?(key)
26
+ end
27
+ end
28
+
29
+ def in_modal?
30
+ search_state.params[:action] == "facet"
31
+ end
32
+
33
+ def modal_path
34
+ return unless paginator
35
+
36
+ view_context.search_facet_path(id: key) unless paginator&.last_page?
37
+ end
38
+
39
+ def label
40
+ view_context.facet_field_label(key)
41
+ end
42
+
43
+ # @private
44
+ # @deprecated
45
+ def html_id
46
+ Deprecation.silence(Blacklight::FacetsHelperBehavior) do
47
+ view_context.facet_field_id(facet_field)
48
+ end
49
+ end
50
+
51
+ def paginator
52
+ return unless display_facet
53
+
54
+ @paginator ||= view_context.facet_paginator(facet_field, display_facet)
55
+ end
56
+ end
57
+ end
@@ -0,0 +1,81 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Blacklight
4
+ class FacetItemPresenter
5
+ attr_reader :facet_item, :facet_config, :view_context, :search_state, :facet_field
6
+
7
+ delegate :hits, to: :facet_item
8
+
9
+ def initialize(facet_item, facet_config, view_context, facet_field, search_state = view_context.search_state)
10
+ @facet_item = facet_item
11
+ @facet_config = facet_config
12
+ @view_context = view_context
13
+ @facet_field = facet_field
14
+ @search_state = search_state
15
+ end
16
+
17
+ ##
18
+ # Check if the query parameters have the given facet field with the
19
+ # given value.
20
+ def selected?
21
+ search_state.has_facet? facet_config, value: facet_value
22
+ end
23
+
24
+ ##
25
+ # Get the displayable version of a facet's value
26
+ #
27
+ # @return [String]
28
+ def label
29
+ return @view_context.facet_display_value(@facet_field, @facet_item) unless @view_context.method(:facet_display_value).owner == Blacklight::FacetsHelperBehavior
30
+
31
+ value = if facet_item.respond_to? :label
32
+ facet_item.label
33
+ else
34
+ facet_value
35
+ end
36
+
37
+ if facet_config.helper_method
38
+ view_context.public_send(facet_config.helper_method, value)
39
+ elsif facet_config.query && facet_config.query[value]
40
+ facet_config.query[value][:label]
41
+ elsif facet_config.date
42
+ localization_options = facet_config.date == true ? {} : facet_config.date
43
+ I18n.l(Time.zone.parse(value), localization_options)
44
+ else
45
+ value
46
+ end
47
+ end
48
+
49
+ def href(path_options = {})
50
+ if selected?
51
+ remove_href
52
+ else
53
+ add_href(path_options)
54
+ end
55
+ end
56
+
57
+ # @private
58
+ def remove_href(path = search_state)
59
+ view_context.search_action_path(path.remove_facet_params(facet_config.key, facet_item))
60
+ end
61
+
62
+ # @private
63
+ def add_href(path_options = {})
64
+ if facet_config.url_method
65
+ view_context.public_send(facet_config.url_method, facet_config.key, facet_item)
66
+ else
67
+ view_context.search_action_path(search_state.add_facet_params_and_redirect(facet_config.key, facet_item).merge(path_options))
68
+ end
69
+ end
70
+
71
+ private
72
+
73
+ def facet_value
74
+ if facet_item.respond_to? :value
75
+ facet_item.value
76
+ else
77
+ facet_item
78
+ end
79
+ end
80
+ end
81
+ end
@@ -5,7 +5,7 @@
5
5
  </button>
6
6
  </div>
7
7
  <div class="modal-body">
8
- <% @documents.each do |document| %>
8
+ <% @documents&.each do |document| %>
9
9
  <h1 class="modal-title"><%= document_heading(document) %></h1>
10
10
 
11
11
  <% if document.respond_to?(:export_as_mla_citation_txt) %>
@@ -4,6 +4,6 @@
4
4
 
5
5
  <%= render 'start_over' %>
6
6
  <span class="constraints-label sr-only"><%= t('blacklight.search.filters.title') %></span>
7
- <%= render_constraints(params) %>
7
+ <%= render_constraints(controller.params != params ? params : search_state) %>
8
8
  </div>
9
9
  <% end %>
@@ -7,27 +7,8 @@
7
7
  options ||= {}
8
8
  %>
9
9
 
10
- <span class="btn-group applied-filter constraint <%= options[:classes].join(" ") if options[:classes] %>">
11
- <span class="constraint-value btn btn-outline-secondary btn-disabled">
12
- <% unless label.blank? %>
13
- <span class="filter-name"><%= label %></span>
14
- <% end %>
15
- <% unless value.blank? %>
16
- <%= content_tag :span, value, class: 'filter-value', title: strip_tags(value) %>
17
- <% end %>
18
- </span>
19
- <% unless options[:remove].blank? %>
20
- <% accessible_remove_label = content_tag :span, class: 'sr-only' do
21
- if label.blank?
22
- t('blacklight.search.filters.remove.value', value: value)
23
- else
24
- t('blacklight.search.filters.remove.label_value', label: label, value: value)
25
- end
26
- end
27
- %>
28
-
29
- <%= link_to(content_tag(:span, '✖', class: 'remove-icon') + accessible_remove_label,
30
- options[:remove], class: 'btn btn-outline-secondary remove'
31
- ) %>
32
- <%- end -%>
33
- </span>
10
+ <%= render(Blacklight::ConstraintLayoutComponent.new(
11
+ classes: options[:classes],
12
+ label: label,
13
+ value: value,
14
+ remove_path: options[:remove])) %>
@@ -24,7 +24,7 @@
24
24
  </div>
25
25
  </div>
26
26
 
27
- <% @documents.each do |doc| %>
27
+ <% @documents&.each do |doc| %>
28
28
  <%=hidden_field_tag "id[]", doc.id %>
29
29
  <% end %>
30
30
  <%- if params[:sort] -%>
@@ -1,17 +1,8 @@
1
- <div class="card facet-limit blacklight-<%= facet_field.key.parameterize %> <%= 'facet-limit-active' if facet_field_in_params?(facet_field.key) %>">
2
- <h3 class="card-header p-0 facet-field-heading" id="<%= facet_field_id(facet_field) %>-header">
3
- <button
4
- class="btn btn-block p-2 text-left collapse-toggle <%= "collapsed" if should_collapse_facet?(facet_field) %>"
5
- data-toggle="collapse"
6
- data-target="#<%= facet_field_id(facet_field) %>"
7
- aria-expanded="<%= should_collapse_facet?(facet_field) ? 'false' : 'true' %>"
8
- >
9
- <%= facet_field_label(facet_field.key) %>
10
- </button>
11
- </h3>
12
- <div id="<%= facet_field_id(facet_field) %>" aria-labelledby="<%= facet_field_id(facet_field) %>-header" class="panel-collapse facet-content collapse <%= "show" unless should_collapse_facet?(facet_field) %>">
13
- <div class="card-body">
14
- <%= yield %>
15
- </div>
16
- </div>
17
- </div>
1
+ <%= render(Blacklight::FacetFieldComponent.new(facet_field: facet_field_presenter(facet_field, nil))) do |component| %>
2
+ <% component.with(:label) do %>
3
+ <%= facet_field_label(facet_field.key) %>
4
+ <% end %>
5
+ <% component.with(:body) do %>
6
+ <%= yield %>
7
+ <% end %>
8
+ <% end %>
@@ -1,12 +1,3 @@
1
- <ul class="facet-values list-unstyled">
2
- <% paginator = facet_paginator(facet_field, display_facet) %>
3
- <%= render_facet_limit_list paginator, facet_field.key %>
4
-
5
- <% unless paginator.last_page? || params[:action] == "facet" %>
6
- <li class="more_facets">
7
- <%= link_to t("more_#{field_name}_html", scope: 'blacklight.search.facets', default: :more_html, field_name: facet_field_label(facet_field.key)),
8
- search_facet_path(id: facet_field.key),
9
- data: { blacklight_modal: 'trigger' } %>
10
- </li>
11
- <% end %>
12
- </ul>
1
+ <%= render(Blacklight::FacetFieldListComponent.new(
2
+ facet_field: facet_field_presenter(facet_field, display_facet),
3
+ layout: false)) %>
@@ -1,10 +1,10 @@
1
1
  <div class="prev_next_links btn-group">
2
2
  <%= link_to_previous_page @pagination, raw(t('views.pagination.previous')), params: search_state.to_h, param_name: blacklight_config.facet_paginator_class.request_keys[:page], class: 'btn btn-link', data: { blacklight_modal: "preserve" } do %>
3
- <%= content_tag :span, raw(t('views.pagination.previous')), class: 'disabled btn btn-disabled' %>
3
+ <%= content_tag :span, raw(t('views.pagination.previous')), class: 'disabled btn' %>
4
4
  <% end %>
5
5
 
6
6
  <%= link_to_next_page @pagination, raw(t('views.pagination.next')), params: search_state.to_h, param_name: blacklight_config.facet_paginator_class.request_keys[:page], class: 'btn btn-link', data: { blacklight_modal: "preserve" } do %>
7
- <%= content_tag :span, raw(t('views.pagination.next')), class: 'disabled btn btn-disabled' %>
7
+ <%= content_tag :span, raw(t('views.pagination.next')), class: 'disabled btn' %>
8
8
  <% end %>
9
9
  </div>
10
10
 
@@ -2,10 +2,10 @@
2
2
  <% display_facet.items.each do |item| -%>
3
3
  <li>
4
4
  <span class="facet-values">
5
- <% if facet_in_params?(field_name, item) %>
6
- <%= render_selected_facet_value(field_name, item) %>
7
- <% else %>
8
- <%= render_facet_value(field_name, item) %>
5
+ <% if facet_in_params?(field_name, item) %>
6
+ <%= render_selected_facet_value(field_name, item) %>
7
+ <% else %>
8
+ <%= render_facet_value(field_name, item) %>
9
9
  <% end -%>
10
10
  </span>
11
11
 
@@ -22,7 +22,7 @@
22
22
  </div>
23
23
 
24
24
  </div>
25
- <% @documents.each do |doc| %>
25
+ <% @documents&.each do |doc| %>
26
26
  <%=hidden_field_tag "id[]", doc.id %>
27
27
  <% end %>
28
28
  </div>
@@ -30,6 +30,7 @@ Gem::Specification.new do |s|
30
30
  s.add_dependency "jbuilder", '~> 2.7'
31
31
  s.add_dependency "kaminari", ">= 0.15" # the pagination (page 1,2,3, etc..) of our search results
32
32
  s.add_dependency "deprecation"
33
+ s.add_dependency "view_component"
33
34
 
34
35
  s.add_development_dependency "rsolr", ">= 1.0.6", "< 3" # Library for interacting with rSolr.
35
36
  s.add_development_dependency "rspec-rails", "~> 4.0.0.beta2"
@@ -3,8 +3,8 @@ ar:
3
3
  pagination:
4
4
  first: 'الأولى &laquo;'
5
5
  last: 'الأخيرة &raquo;'
6
- previous: '&laquo; السابقة'
7
- next: 'التالية &raquo;'
6
+ previous: '&laquo; السابق'
7
+ next: 'التالي &raquo;'
8
8
  truncate: '…'
9
9
  aria:
10
10
  container_label: 'روابط الصفحات'
@@ -52,7 +52,8 @@ ar:
52
52
  few: 'أضيفت الصفحات المفضلة بنجاح.'
53
53
  many: 'أضيفت الصفحات المفضلة بنجاح.'
54
54
  other: 'أضيفت الصفحات المفضلة بنجاح.'
55
- failure: 'معذرة! حدثت مشكلة في حفظ الصفحات المفضلة.'
55
+
56
+ failure: 'معذرة! حدثت مشكلة في حفظ الصفحات المفضلة.'
56
57
  remove:
57
58
  button: 'إزالة الصفحة المفضلة'
58
59
  success: 'أزيلت الصفحة المفضلة بنجاح.'
@@ -61,7 +62,7 @@ ar:
61
62
  clear:
62
63
  action_title: 'مسح الصفحات المفضلة'
63
64
  action_confirm: 'هل ترغب في مسح الصفحات المفضلة؟'
64
- success: 'ُمسِحَت صفحاتك المفضلة.'
65
+ success: 'تم مسح صفحاتك المفضلة.'
65
66
  failure: 'معذرة! حدثت مشكلة في مسح صفحاتك المفضلة.'
66
67
  need_login: 'يُرجى تسجيل الدخول لتنظيم صفحاتك المفضلة وعرضها.'
67
68
  list_title: 'صفحاتك المفضلة'
@@ -69,14 +70,14 @@ ar:
69
70
 
70
71
  search_history:
71
72
  clear:
72
- action_title: 'مسح سجل البحث السابق'
73
+ action_title: 'امسح سجل البحث السابق'
73
74
  action_confirm: 'هل ترغب في مسح سجل البحث السابق؟'
74
- success: 'ُمسِحَ سجل بحثك السابق.'
75
+ success: 'تم مسح سجل بحثك السابق.'
75
76
  failure: 'حدثت مشكلة في مسح سجل بحثك السابق.'
76
77
  title: 'سجل البحث'
77
78
  page_title: 'سجل البحث - %{application_name}'
78
- no_history: 'ليس لديك سجل بحث'
79
- recent: 'استعلامات البحث الأخيرة'
79
+ no_history: 'لا يوجد لديك سجل بحث'
80
+ recent: 'سجل ابحاثك السابقة'
80
81
  forget: 'تراجع'
81
82
  save: 'حفظ'
82
83
 
@@ -84,7 +85,7 @@ ar:
84
85
  title: 'أدوات'
85
86
  citation: 'استشهاد مرجعي'
86
87
  email: 'بريد إلكتروني'
87
- sms: 'إرسال كرسالة نصية قصيرة'
88
+ sms: 'إرسله كرسالة نصية قصيرة'
88
89
  clear: 'مسح'
89
90
 
90
91
  citation:
@@ -94,12 +95,12 @@ ar:
94
95
 
95
96
  email:
96
97
  form:
97
- title: 'إرسال بالبريد الإلكتروني'
98
+ title: 'إرسله عبرالبريد الإلكتروني'
98
99
  to: 'بريد إلكتروني:'
99
100
  message: 'الرسالة:'
100
101
  submit: 'إرسال'
101
102
  text:
102
- default_title: 'لا ينطبق'
103
+ default_title: 'لا يوجد'
103
104
  title: 'العنوان: %{value}'
104
105
  author: 'المؤلف: %{value}'
105
106
  format: 'الصيغة: %{value}'
@@ -111,30 +112,31 @@ ar:
111
112
  few: 'سجلات المادة'
112
113
  many: 'سجلات المادة'
113
114
  other: 'سجلات المادة'
115
+
114
116
  url: 'الرابط: %{url}'
115
117
  message: 'الرسالة: %{message}'
116
118
 
117
- success: 'تم إرسال البريد الإلكتروني'
119
+ success: "تم إرسال البريد الإلكتروني"
120
+
118
121
  errors:
119
122
  to:
120
123
  invalid: 'يجب إدخال عنوان بريد إلكتروني صحيح'
121
124
  blank: 'يجب إدخال مُستلم من أجل إرسال هذه الرسالة'
122
-
123
125
  sms:
124
126
  form:
125
- title: 'إرسال كرسالة نصية قصيرة'
127
+ title: 'إرسله كرسالة نصية قصيرة'
126
128
  to: 'رقم الهاتف:'
127
129
  carrier: 'شركة الاتصالات'
128
130
  carrier_prompt: 'يرجى تحديد شركة الاتصالات'
129
131
  submit: 'إرسال'
130
132
  text:
131
133
  title: '%{value}'
132
- author: ' حسب %{value}'
134
+ author: ' بواسطة %{value}'
133
135
  url: 'الرابط: %{url}'
134
- success: 'تم الإرسال كرسالة نصية قصيرة'
136
+ success: "تم الإرسال كرسالة نصية قصيرة"
135
137
  errors:
136
138
  to:
137
- invalid: 'يجب إدخال رقم هاتف صحيح من 10 أعداد'
139
+ invalid: 'يجب إدخال رقم هاتف صحيح من 10 أرقام'
138
140
  blank: "يجب إدخال رقم هاتف المستلم لإرسال هذه الرسالة"
139
141
  carrier:
140
142
  blank: 'يجب تحديد شركة الاتصالات'
@@ -148,11 +150,11 @@ ar:
148
150
  title: '%{constraints} - %{application_name} نتائج البحث'
149
151
  constraint: '%{label}: %{value}'
150
152
  many_constraint_values: 'تم تحديد %{values}'
151
- header: 'البحث'
153
+ header: 'ابحث'
152
154
  search_constraints_header: 'قيود البحث'
153
155
  search_results: 'نتائج البحث'
154
156
  errors:
155
- request_error: "معذرة، لا أفهم ما تبحث عنه."
157
+ request_error: "معذرة، لم أفهم ما تبحث عنه."
156
158
  invalid_solr_id: "معذرة! لقد طلبت سجلًا غير موجود."
157
159
  per_page:
158
160
  label: '%{count}<span class="sr-only"> لكل صفحة</span>'
@@ -160,18 +162,18 @@ ar:
160
162
  button_label_html: '%{count}<span class="d-none d-sm-inline"> لكل صفحة</span>'
161
163
  title: 'عدد النتائج المعروضة في الصفحة'
162
164
  submit: 'تحديث'
163
- aria_label: 'الملاحة النتائج'
165
+ aria_label: 'تصفح النتائج'
164
166
  sort:
165
167
  label: 'ترتيب حسب %{field}' # TODO: Remove during major release
166
168
  label_html: 'ترتيب <span class="d-none d-sm-inline"> حسب %{field}</span>'
167
169
  submit: 'نتائج الترتيب'
168
170
  form:
169
171
  search_field:
170
- label: 'بحث في'
172
+ label: 'ابحث في'
171
173
  title: 'خيارات البحث المستهدفة'
172
174
  post_label: 'عن'
173
175
  search:
174
- label: 'بحث عن'
176
+ label: 'ابحث عن'
175
177
  placeholder: 'بحث...'
176
178
  submit: 'بحث'
177
179
  pagination:
@@ -186,6 +188,7 @@ ar:
186
188
  few: '<strong>%{start_num}</strong> - <strong>%{end_num}</strong> من <strong>%{total_num}</strong>'
187
189
  many: '<strong>%{start_num}</strong> - <strong>%{end_num}</strong> من <strong>%{total_num}</strong>'
188
190
  other: '<strong>%{start_num}</strong> - <strong>%{end_num}</strong> من <strong>%{total_num}</strong>'
191
+
189
192
  entry_pagination_info:
190
193
  zero: '<strong>%{current}</strong> من <strong>%{total}</strong>'
191
194
  one: '<strong>%{current}</strong> من <strong>%{total}</strong>'
@@ -193,10 +196,11 @@ ar:
193
196
  few: '<strong>%{current}</strong> من <strong>%{total}</strong>'
194
197
  many: '<strong>%{current}</strong> من <strong>%{total}</strong>'
195
198
  other: '<strong>%{current}</strong> من <strong>%{total}</strong>'
199
+
196
200
  documents:
197
201
  aria:
198
202
  search_results: 'نتائج البحث'
199
- limit_search: 'تحديد نطاق البحث'
203
+ limit_search: '...ابحث عن العناصر حسب'
200
204
  counter: '%{counter}. '
201
205
  facets:
202
206
  title: 'تحديد نطاق البحث'
@@ -233,9 +237,9 @@ ar:
233
237
  zero_results:
234
238
  title: "لا توجد نتائج للبحث"
235
239
  modify_search: "حاول تعديل معايير البحث"
236
- use_fewer_keywords: "استخدم كلمات مفتاحية أقل في البداية، ثم أعد تنقيح البحث باستخدام الروابط على اليسار."
240
+ use_fewer_keywords: "استخدم كلمات أساسية أقل أولاً، ثم أعد تحديد البحث باستخدام الروابط على اليسار."
237
241
  search_fields: "لقد بحثت باستخدام %{search_fields}"
238
- search_everything: "أعد البحث عن كل شيء"
242
+ search_everything: "حاول البحث عن كل شيء"
239
243
  view_title: "عرض النتائج ك: "
240
244
  view:
241
245
  list: "قائمة"