avo 2.44.0 → 2.45.0

Sign up to get free protection for your applications and to get access to all the features.

Potentially problematic release.


This version of avo might be problematic. Click here for more details.

Files changed (31) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile.lock +1 -1
  3. data/app/components/avo/index/resource_table_component.html.erb +2 -2
  4. data/app/components/avo/index/resource_table_component.rb +16 -0
  5. data/app/components/avo/paginator_component.html.erb +29 -40
  6. data/app/components/avo/paginator_component.rb +18 -0
  7. data/app/components/avo/views/resource_edit_component.html.erb +6 -4
  8. data/app/controllers/avo/application_controller.rb +0 -1
  9. data/app/controllers/avo/associations_controller.rb +1 -1
  10. data/app/controllers/avo/base_controller.rb +8 -9
  11. data/app/javascript/js/controllers/action_controller.js +2 -2
  12. data/app/views/avo/partials/_flash_alerts.turbo_stream.erb +1 -1
  13. data/config/i18n-tasks.yml +1 -1
  14. data/config/initializers/pagy.rb +2 -0
  15. data/lib/avo/base_action.rb +7 -5
  16. data/lib/avo/base_resource.rb +1 -0
  17. data/lib/avo/concerns/pagination.rb +53 -0
  18. data/lib/avo/version.rb +1 -1
  19. data/lib/generators/avo/templates/locales/avo.ar.yml +5 -5
  20. data/lib/generators/avo/templates/locales/avo.en.yml +2 -0
  21. data/lib/generators/avo/templates/locales/avo.es.yml +126 -0
  22. data/lib/generators/avo/templates/locales/avo.fr.yml +2 -0
  23. data/lib/generators/avo/templates/locales/avo.nb.yml +2 -0
  24. data/lib/generators/avo/templates/locales/avo.nn.yml +2 -0
  25. data/lib/generators/avo/templates/locales/avo.pt-BR.yml +2 -0
  26. data/lib/generators/avo/templates/locales/avo.pt.yml +2 -0
  27. data/lib/generators/avo/templates/locales/avo.ro.yml +2 -0
  28. data/lib/generators/avo/templates/locales/avo.tr.yml +2 -0
  29. data/public/avo-assets/avo.base.js +1 -1
  30. data/public/avo-assets/avo.base.js.map +2 -2
  31. metadata +4 -2
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 6b2cdd36d7332c119809608975ea38e68d2bfe09987e9203b9f39149292885a7
4
- data.tar.gz: 9e00cbe1f725979bf1c61164ae0912e20eff340ff727b4eb27c7212ed1500897
3
+ metadata.gz: 3eeaf7c4479bd7cd5c0e45ca017ab8527a0d0ddf5fe625bc0bee728d5be654eb
4
+ data.tar.gz: 6f8538be2082861d11a2c150cd670733978d8631885aa7693c0d6b9770a97535
5
5
  SHA512:
6
- metadata.gz: 6fd7ac16fac942d14da9c82317a0f8c322cdd0b1af785319c4cc273badd5e528a73c0f87e8b12bf8673fe35e8c6cfe61ac3f578b044797e64cb1c7c3158de677
7
- data.tar.gz: 87a8e856ca13470d32119b71685300dc1759f6455fc86742284e1e41f573500bb016bf0105e6e3fce48f0362a50d06f0905660d681a7345987afd5827a4ed7ff
6
+ metadata.gz: 48a019b6179859de05f19839922ae41f391f08112f436c0946a526c5b36bc027855f5220c118c0588c66fecaea0d5ba59978d98803b1311884261f472f267efc
7
+ data.tar.gz: a5e00b21b9c62e5825718aec9bff93d8759b67f318edd93ba488a3f2caa2d7af3d7143f25917b6d475557b5d52648dc8f23bdb09d95194bc8278531be653e722
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- avo (2.44.0)
4
+ avo (2.45.0)
5
5
  actionview (>= 6.0)
6
6
  active_link_to
7
7
  activerecord (>= 6.0)
@@ -11,7 +11,7 @@
11
11
  <div class="absolute z-30 w-full ml-10 pt-px hidden" data-item-select-all-target="selectAllOverlay">
12
12
  <div class="bg-white flex items-center h-9 mt-0.5">
13
13
  <div class="mt-1.5" data-item-select-all-target="unselectedMessage">
14
- <%= t "avo.x_records_selected_from_a_total_of_x_html", selected: pagy.in, count: pagy.count %>
14
+ <%= selected_page_label %>
15
15
  <%= a_link request.url,
16
16
  size: :xs,
17
17
  color: :primary,
@@ -22,7 +22,7 @@
22
22
  <% end %>
23
23
  </div>
24
24
  <div class="mt-1.5" data-item-select-all-target="selectedMessage" class="hidden">
25
- <%= t "avo.x_records_selected_from_all_pages_html", count: pagy.count %>
25
+ <%= selected_all_label %>
26
26
  <%= a_link request.url,
27
27
  size: :xs,
28
28
  color: :primary,
@@ -22,4 +22,20 @@ class Avo::Index::ResourceTableComponent < ViewComponent::Base
22
22
  purpose: :select_all
23
23
  )
24
24
  end
25
+
26
+ def selected_page_label
27
+ if @resource.pagination_type.countless?
28
+ t "avo.x_records_selected_from_page_html", selected: pagy.in
29
+ else
30
+ t "avo.x_records_selected_from_a_total_of_x_html", selected: pagy.in, count: pagy.count
31
+ end
32
+ end
33
+
34
+ def selected_all_label
35
+ if @resource.pagination_type.countless?
36
+ t "avo.records_selected_from_all_pages_html"
37
+ else
38
+ t "avo.x_records_selected_from_all_pages_html", count: pagy.count
39
+ end
40
+ end
25
41
  end
@@ -1,47 +1,36 @@
1
- <%
2
- per_page_options = [*Avo.configuration.per_page_steps, Avo.configuration.per_page.to_i, index_params[:per_page].to_i]
3
-
4
- if parent_model.present?
5
- per_page_options.prepend Avo.configuration.via_per_page
6
- end
7
-
8
- per_page_options = per_page_options.sort.uniq
9
- %>
10
- <% unless @pagy.pages <= 1 && discreet_pagination %>
11
- <div class="flex flex-col sm:flex-row items-center justify-between aborder-t aborder-slate-200 rounded-xl space-y-2 sm:space-y-0">
12
- <div class="flex-2 sm:flex sm:items-center sm:justify-between">
13
- <div>
14
- <div class="text-sm leading-5 text-slate-600 flex items-center">
15
- <div data-controller="per-page">
16
- <div class="flex items-center">
17
- <%= select_tag 'per_page',
18
- options_for_select(per_page_options, index_params[:per_page]),
19
- class: 'appearance-none inline-flex bg-white-100 disabled:bg-white-400 disabled:cursor-not-allowed focus:bg-white text-slate-700 disabled:text-slate-600 rounded-md py-1 px-2 leading-tight border border-slate-300 outline-none focus:border-slate-400 outline w-16 mr-1 text-sm',
20
- data: {
21
- 'turbo-frame': turbo_frame,
22
- 'per-page-target': 'selector',
23
- action: 'change->per-page#reload'
24
- }
25
- %> <%= t('avo.per_page').downcase %>
26
- </div>
27
- <% per_page_options.each do |option| %>
28
- <%= link_to "Change to #{option} items per page", change_items_per_page_url(option), class: 'hidden', 'data-per-page-option': option, 'data-turbo-frame': turbo_frame %>
29
- <% end %>
1
+ <div class="flex flex-col sm:flex-row items-center justify-between aborder-t aborder-slate-200 rounded-xl space-y-2 sm:space-y-0">
2
+ <div class="flex-2 sm:flex sm:items-center sm:justify-between">
3
+ <div>
4
+ <div class="text-sm leading-5 text-slate-600 flex items-center">
5
+ <div data-controller="per-page">
6
+ <div class="flex items-center">
7
+ <%= select_tag 'per_page',
8
+ options_for_select(per_page_options, index_params[:per_page]),
9
+ class: 'appearance-none inline-flex bg-white-100 disabled:bg-white-400 disabled:cursor-not-allowed focus:bg-white text-slate-700 disabled:text-slate-600 rounded-md py-1 px-2 leading-tight border border-slate-300 outline-none focus:border-slate-400 outline w-16 mr-1 text-sm',
10
+ data: {
11
+ 'turbo-frame': turbo_frame,
12
+ 'per-page-target': 'selector',
13
+ action: 'change->per-page#reload'
14
+ }
15
+ %> <%= t('avo.per_page').downcase %>
30
16
  </div>
17
+ <% per_page_options.each do |option| %>
18
+ <%= link_to "Change to #{option} items per page", change_items_per_page_url(option), class: 'hidden', 'data-per-page-option': option, 'data-turbo-frame': turbo_frame %>
19
+ <% end %>
31
20
  </div>
32
21
  </div>
33
22
  </div>
34
- <div class="flex">
35
- <div class="flex-2 sm:flex sm:items-center sm:justify-between space-y-2 sm:space-y-0 text-center sm:text-left">
36
- <% if @pagy.count > 0 %>
37
- <div class="text-sm text-slate-600 mr-4"><%== helpers.pagy_info @pagy %></div>
38
- <% end %>
23
+ </div>
24
+ <div class="flex">
25
+ <div class="flex-2 sm:flex sm:items-center sm:justify-between space-y-2 sm:space-y-0 text-center sm:text-left">
26
+ <% if @resource.pagination_type.default? %>
27
+ <div class="text-sm text-slate-600 mr-4"><%== helpers.pagy_info @pagy %></div>
28
+ <% end %>
39
29
 
40
- <% if @pagy.pages > 1 %>
41
- <%# @todo: add first & last page. make the first and last buttons rounded %>
42
- <%== helpers.pagy_nav @pagy %>
43
- <% end %>
44
- </div>
30
+ <% if pagy.pages > 1 %>
31
+ <%# @todo: add first & last page. make the first and last buttons rounded %>
32
+ <%== helpers.pagy_nav @pagy %>
33
+ <% end %>
45
34
  </div>
46
35
  </div>
47
- <% end %>
36
+ </div>
@@ -24,4 +24,22 @@ class Avo::PaginatorComponent < ViewComponent::Base
24
24
  helpers.resources_path(resource: resource, per_page: option, keep_query_params: true, page: 1)
25
25
  end
26
26
  end
27
+
28
+ def render?
29
+ return false if discreet_pagination && pagy.pages <= 1
30
+
31
+ @pagy.items > 0
32
+ end
33
+
34
+ def per_page_options
35
+ @per_page_options ||= begin
36
+ options = [*Avo.configuration.per_page_steps, Avo.configuration.per_page.to_i, index_params[:per_page].to_i]
37
+
38
+ if parent_model.present?
39
+ options.prepend Avo.configuration.via_per_page
40
+ end
41
+
42
+ options.sort.uniq
43
+ end
44
+ end
27
45
  end
@@ -81,10 +81,12 @@
81
81
  <% if Avo.configuration.buttons_on_form_footers %>
82
82
  <% c.with_footer_tools do %>
83
83
  <div class="mt-4">
84
- <%= a_link back_path,
85
- style: :text,
86
- icon: 'arrow-left' do %>
87
- <%= t('avo.cancel').capitalize %>
84
+ <% if back_path.present? %>
85
+ <%= a_link back_path,
86
+ style: :text,
87
+ icon: 'arrow-left' do %>
88
+ <%= t('avo.cancel').capitalize %>
89
+ <% end %>
88
90
  <% end %>
89
91
  <% if can_see_the_save_button? %>
90
92
  <%= a_button color: :primary,
@@ -6,7 +6,6 @@ module Avo
6
6
  Avo::ApplicationController.include Pundit
7
7
  end
8
8
 
9
- include Pagy::Backend
10
9
  include Avo::ApplicationHelper
11
10
  include Avo::UrlHelpers
12
11
  include Avo::Concerns::Breadcrumbs
@@ -81,7 +81,7 @@ module Avo
81
81
  association_name = BaseResource.valid_association_name(@model, params[:related_name])
82
82
 
83
83
  if reflection_class == "HasManyReflection"
84
- @model.send(association_name).destroy @attachment_model
84
+ @model.send(association_name).delete @attachment_model
85
85
  else
86
86
  @model.send("#{association_name}=", nil)
87
87
  end
@@ -65,14 +65,7 @@ module Avo
65
65
  ).apply_query request, @query, filter_value
66
66
  end
67
67
 
68
- extra_pagy_params = {}
69
-
70
- # Reset open filters when a user navigates to a new page
71
- extra_pagy_params[:keep_filters_panel_open] = if params[:keep_filters_panel_open] == "1"
72
- "0"
73
- end
74
-
75
- @pagy, @models = pagy(@query, items: @index_params[:per_page], link_extra: "data-turbo-frame=\"#{params[:turbo_frame]}\"", size: [1, 2, 2, 1], params: extra_pagy_params)
68
+ apply_pagination
76
69
 
77
70
  # Create resources for each model
78
71
  @resources = @models.map do |model|
@@ -504,8 +497,10 @@ module Avo
504
497
  end
505
498
 
506
499
  def destroy_fail_action
500
+ flash[:error] = destroy_fail_message
501
+
507
502
  respond_to do |format|
508
- format.html { redirect_back fallback_location: params[:referrer] || resources_path(resource: @resource, turbo_frame: params[:turbo_frame], view_type: params[:view_type]), error: destroy_fail_message }
503
+ format.turbo_stream { render partial: "avo/partials/flash_alerts" }
509
504
  end
510
505
  end
511
506
 
@@ -541,5 +536,9 @@ module Avo
541
536
  def set_pagy_locale
542
537
  @pagy_locale = locale.to_s || Avo.configuration.locale || "en"
543
538
  end
539
+
540
+ def apply_pagination
541
+ @pagy, @models = @resource.apply_pagination(index_params: @index_params, query: @query)
542
+ end
544
543
  end
545
544
  end
@@ -2,7 +2,7 @@ import { Controller } from '@hotwired/stimulus'
2
2
  import { castBoolean } from '../helpers/cast_boolean'
3
3
 
4
4
  export default class extends Controller {
5
- static targets = ['controllerDiv', 'resourceIds', 'form', 'selectedAllQuery']
5
+ static targets = ['controllerDiv', 'resourceIds', 'submit', 'selectedAllQuery']
6
6
 
7
7
  connect() {
8
8
  this.resourceIdsTarget.value = this.resourceIds
@@ -13,7 +13,7 @@ export default class extends Controller {
13
13
  }
14
14
 
15
15
  if (this.noConfirmation) {
16
- this.formTarget.submit()
16
+ this.submitTarget.click()
17
17
  } else {
18
18
  this.controllerDivTarget.classList.remove('hidden')
19
19
  }
@@ -1,3 +1,3 @@
1
1
  <%= turbo_stream.append "alerts" do %>
2
- <%= render Avo::FlashAlertsComponent.new flashes: flash %>
2
+ <%= render Avo::FlashAlertsComponent.new flashes: flash.discard %>
3
3
  <% end %>
@@ -3,7 +3,7 @@
3
3
  # The "main" locale.
4
4
  base_locale: en
5
5
  ## All available locales are inferred from the data by default. Alternatively, specify them explicitly:
6
- locales: [en, fr, nb, nn, pt-BR, pt, ro, tr]
6
+ locales: [ar, en, es, fr, nb, nn, pt-BR, pt, ro, tr]
7
7
  ## Reporting locale, default: en. Available: en, ru.
8
8
  # internal_locale: en
9
9
 
@@ -1,4 +1,5 @@
1
1
  require "pagy/extras/trim"
2
+ require "pagy/extras/countless"
2
3
 
3
4
  # For locales without native pagy i18n support
4
5
  def pagy_locale_path(file_name)
@@ -7,6 +8,7 @@ end
7
8
 
8
9
  extra_locales = [
9
10
  {locale: "en"},
11
+ {locale: "es"},
10
12
  {locale: "fr"},
11
13
  {locale: "nb"},
12
14
  {locale: "pt-BR"},
@@ -32,19 +32,21 @@ module Avo
32
32
  def form_data_attributes
33
33
  # We can't respond with a file download from Turbo se we disable it on the form
34
34
  if may_download_file
35
- {turbo: turbo || false, remote: false, action_target: :form}
35
+ {turbo: turbo || false, remote: false}
36
36
  else
37
- {turbo: turbo, turbo_frame: :_top, action_target: :form}.compact
37
+ {turbo: turbo, turbo_frame: :_top}.compact
38
38
  end
39
39
  end
40
40
 
41
41
  # We can't respond with a file download from Turbo se we disable close the modal manually after a while (it's a hack, we know)
42
42
  def submit_button_data_attributes
43
+ attributes = { action_target: "submit" }
44
+
43
45
  if may_download_file
44
- {action: "click->modal#delayedClose"}
45
- else
46
- {}
46
+ attributes[:action] = "click->modal#delayedClose"
47
47
  end
48
+
49
+ attributes
48
50
  end
49
51
  end
50
52
 
@@ -8,6 +8,7 @@ module Avo
8
8
  include Avo::Concerns::HasEditableControls
9
9
  include Avo::Concerns::HasStimulusControllers
10
10
  include Avo::Concerns::ModelClassConstantized
11
+ include Avo::Concerns::Pagination
11
12
 
12
13
  delegate :view_context, to: ::Avo::App
13
14
  delegate :current_user, to: ::Avo::App
@@ -0,0 +1,53 @@
1
+ module Avo
2
+ module Concerns
3
+ module Pagination
4
+ extend ActiveSupport::Concern
5
+
6
+ included do
7
+ include Pagy::Backend
8
+
9
+ class_attribute :pagination, default: {}
10
+
11
+ PAGINATION_METHOD = {
12
+ default: :pagy,
13
+ countless: :pagy_countless,
14
+ } unless defined? PAGINATION_METHOD
15
+
16
+ PAGINATION_DEFAULTS = {
17
+ type: :default,
18
+ size: [1, 2, 2, 1],
19
+ } unless defined? PAGINATION_DEFAULTS
20
+ end
21
+
22
+ def pagination_type
23
+ @pagination_type ||= ActiveSupport::StringInquirer.new(pagination_hash[:type].to_s)
24
+ end
25
+
26
+ def apply_pagination(index_params:, query:)
27
+ extra_pagy_params = {}
28
+
29
+ # Reset open filters when a user navigates to a new page
30
+ extra_pagy_params[:keep_filters_panel_open] = if params[:keep_filters_panel_open] == "1"
31
+ "0"
32
+ end
33
+
34
+ send PAGINATION_METHOD[pagination_type.to_sym],
35
+ query,
36
+ items: index_params[:per_page],
37
+ link_extra: "data-turbo-frame=\"#{params[:turbo_frame]}\"",
38
+ params: extra_pagy_params,
39
+ size: pagination_hash[:size]
40
+ end
41
+
42
+ private
43
+
44
+ def pagination_hash
45
+ @pagination ||= PAGINATION_DEFAULTS.merge Avo::ExecutionContext.new(
46
+ target: pagination,
47
+ resource: self,
48
+ view: @view
49
+ ).handle
50
+ end
51
+ end
52
+ end
53
+ end
data/lib/avo/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Avo
2
- VERSION = "2.44.0" unless const_defined?(:VERSION)
2
+ VERSION = "2.45.0" unless const_defined?(:VERSION)
3
3
  end
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  ar:
3
3
  avo:
4
- action_ran_successfully: 'تم تنفيذ الأمر بنجاح!'
4
+ action_ran_successfully: تم تنفيذ الأمر بنجاح!
5
5
  actions: أوامر
6
6
  and_x_other_resources: و %{count} موارد أخرى
7
7
  are_you_sure: هل أنت متأكد؟
@@ -10,8 +10,8 @@ ar:
10
10
  attach: ربط
11
11
  attach_and_attach_another: ربط وربط آخر
12
12
  attach_item: ربط %{item}
13
- attachment_class_attached: '%{attachment_class} تم ربط'
14
- attachment_class_detached: '%{attachment_class} تم فصل'
13
+ attachment_class_attached: "%{attachment_class} تم ربط"
14
+ attachment_class_detached: "%{attachment_class} تم فصل"
15
15
  attachment_destroyed: تم حذف المرفق
16
16
  cancel: إلغاء
17
17
  choose_a_country: اختر دولة
@@ -80,6 +80,7 @@ ar:
80
80
  to_top: حرك السجل للأعلى بشكل كامل
81
81
  per_page: لكل صفحة
82
82
  prev_page: الصفحة السابقة
83
+ records_selected_from_all_pages_html: جميع السجلات مختارة من جميع الصفحات
83
84
  remove_selection: إزالة التحديد
84
85
  reset_filters: إعادة تعيين الفلاتر
85
86
  resource_created: تم إنشاء السجل
@@ -121,6 +122,5 @@ ar:
121
122
  zero: لا توجد عناصر إضافية
122
123
  x_records_selected_from_a_total_of_x_html: <span class="font-bold text-gray-700">%{selected}</span> السجلات المحددة في هذه الصفحة من إجمالي<span class="font-bold text-gray-700">%{count}</span>
123
124
  x_records_selected_from_all_pages_html: <span class="font-bold text-gray-700">%{count}</span> السجلات المحددة من كل الصفحات
125
+ x_records_selected_from_page_html: <span class="font-bold text-gray-700">%{selected}</span> السجلات المختارة في هذه الصفحة
124
126
  you_missed_something_check_form: ربما نسيت شيئًا، يرجى التحقق من البيانات.
125
-
126
-
@@ -80,6 +80,7 @@ en:
80
80
  to_top: Move record to top
81
81
  per_page: Per page
82
82
  prev_page: Previous page
83
+ records_selected_from_all_pages_html: All records selected from all pages
83
84
  remove_selection: Remove selection
84
85
  reset_filters: Reset filters
85
86
  resource_created: Record created
@@ -121,4 +122,5 @@ en:
121
122
  zero: no more items
122
123
  x_records_selected_from_a_total_of_x_html: <span class="font-bold text-gray-700">%{selected}</span> records selected on this page from a total of <span class="font-bold text-gray-700">%{count}</span>
123
124
  x_records_selected_from_all_pages_html: <span class="font-bold text-gray-700">%{count}</span> records selected from all pages
125
+ x_records_selected_from_page_html: <span class="font-bold text-gray-700">%{selected}</span> records selected on this page
124
126
  you_missed_something_check_form: You might have missed something. Please check the form.
@@ -0,0 +1,126 @@
1
+ ---
2
+ es:
3
+ avo:
4
+ action_ran_successfully: "¡Acción ejecutada con éxito!"
5
+ actions: Acciones
6
+ and_x_other_resources: y %{count} otros recursos
7
+ are_you_sure: "¿Estás seguro?"
8
+ are_you_sure_detach_item: "¿Estás seguro de que quieres separar este/a %{item}?"
9
+ are_you_sure_you_want_to_run_this_option: "¿Estás seguro de que quieres ejectuar esta acción?"
10
+ attach: Adjuntar
11
+ attach_and_attach_another: Adjuntar y adjuntar otro
12
+ attach_item: Adjuntar %{item}
13
+ attachment_class_attached: "%{attachment_class} adjuntado/a."
14
+ attachment_class_detached: "%{attachment_class} adjuntado/a."
15
+ attachment_destroyed: Adjunto eliminado
16
+ cancel: Cancelar
17
+ choose_a_country: Elige un país
18
+ choose_an_option: Elige una opción
19
+ choose_item: Elige %{item}
20
+ clear_value: Borrar el valor
21
+ click_to_reveal_filters: Pulsa para mostrar los filtros
22
+ confirm: Confirmar
23
+ create_new_item: Crear nuevo/a %{item}
24
+ dashboard: Panel
25
+ dashboards: Paneles
26
+ delete: eliminar
27
+ delete_file: Eliminar fichero
28
+ delete_item: Eliminar %{item}
29
+ detach_item: separar %{item}
30
+ details: detalles
31
+ download: Descargar
32
+ download_file: Descargar fichero
33
+ download_item: Descargar %{item}
34
+ edit: editar
35
+ edit_item: editar %{item}
36
+ empty_dashboard_message: Añadir tarjetas a este panel
37
+ failed: Fallo
38
+ failed_to_find_attachment: No se ha encontrado el archivo adjunto
39
+ failed_to_load: No se ha podido cargar
40
+ field_translations:
41
+ file:
42
+ one: fichero
43
+ other: ficheros
44
+ zero: ficheros
45
+ people:
46
+ one: persona
47
+ other: personas
48
+ zero: personas
49
+ filter_by: Filtrar por
50
+ filters: Filtros
51
+ go_back: Volver
52
+ grid_view: Vista en cuardrícula
53
+ hide_content: Ocultar contenido
54
+ home: Inicio
55
+ key_value_field:
56
+ add_row: Añadir fila
57
+ delete_row: Eliminar fila
58
+ key: Clave
59
+ value: Valor
60
+ list_is_empty: La lista está vacía
61
+ loading: Cargando
62
+ more: Más
63
+ new: nuevo/a
64
+ next_page: Página siguiente
65
+ no_cards_present: No hay tarjetas
66
+ no_item_found: No se ha encontrado ningún elemento
67
+ no_options_available: No hay opciones disponibles
68
+ no_related_item_found: No se ha encontrado ningún elemento relacionado
69
+ not_authorized: No estás autorizado/a a realizar esta acción.
70
+ number_of_items:
71
+ one: un/a %{item}
72
+ other: "%{count} %{item}"
73
+ zero: ningún/a %{item}
74
+ oops_nothing_found: Oops! No se ha encontrado nada...
75
+ order:
76
+ higher: Mover arriba
77
+ lower: Mover abajo
78
+ reorder_record: Reordenar registro
79
+ to_bottom: Mover abajo del todo
80
+ to_top: Mover arriba del todo
81
+ per_page: Por página
82
+ prev_page: Página anterior
83
+ records_selected_from_all_pages_html: Todos los registros seleccionados de todas las páginas.
84
+ remove_selection: Quitar la selección
85
+ reset_filters: Reiniciar filtros
86
+ resource_created: Recurso creado
87
+ resource_destroyed: Recurso eliminado
88
+ resource_translations:
89
+ team_members:
90
+ one: miembro del equipo
91
+ other: miembros del equipo
92
+ zero: miembros del equipo
93
+ user:
94
+ one: usuario/a
95
+ other: usuarios/as
96
+ zero: usuarios/as
97
+ resource_updated: Recurso actualizado
98
+ resources: Recursos
99
+ run: Ejecutar
100
+ save: Guardar
101
+ search:
102
+ cancel_button: Cancelar
103
+ placeholder: Buscar
104
+ select_all: Seleccionar todo
105
+ select_all_matching: Seleccionar todas las coincidencias
106
+ select_item: Selecionar elemento
107
+ show_content: Mostrar contenido
108
+ sign_out: Salir
109
+ switch_to_view: Cambiar a la vista %{view_type}
110
+ table_view: Vista en tabla
111
+ tools: Herramientas
112
+ type_to_search: Escribe para buscar.
113
+ unauthorized: No autorizado
114
+ undo: deshacer
115
+ view: Vista
116
+ view_item: ver %{item}
117
+ was_successfully_created: se ha creado con éxito
118
+ was_successfully_updated: se ha actualizado con éxito
119
+ x_items_more:
120
+ one: un elemento más
121
+ other: "%{count} elementos más"
122
+ zero: ningún elemento más
123
+ x_records_selected_from_a_total_of_x_html: <span class="font-bold text-gray-700">%{selected}</span> registros seleccionados en esta página de un total de <span class="font-bold text-gray-700">%{count}</span>
124
+ x_records_selected_from_all_pages_html: <span class="font-bold text-gray-700">%{count}</span> registros seleccionados en todas las páginas
125
+ x_records_selected_from_page_html: <span class="font-bold text-gray-700">%{selected}</span> registros seleccionados en esta página
126
+ you_missed_something_check_form: Es posible que hayas pasado algo por alto. Comprueba el formulario.
@@ -80,6 +80,7 @@ fr:
80
80
  to_top: Déplacer tout en haut
81
81
  per_page: Par page
82
82
  prev_page: Page précédente
83
+ records_selected_from_all_pages_html: tous les éléments sélectionnés de toutes les pages
83
84
  remove_selection: Supprimer la sélection
84
85
  reset_filters: Réinitialiser les filtres
85
86
  resource_created: Ressource créee
@@ -117,4 +118,5 @@ fr:
117
118
  zero: aucun élément supplémentaire
118
119
  x_records_selected_from_a_total_of_x_html: <span class="font-bold text-gray-700">%{selected}</span> enregistrements sélectionnés sur cette page sur un total de <span class="font-bold text-gray-700">%{count}</span>
119
120
  x_records_selected_from_all_pages_html: <span class="font-bold text-gray-700">%{count}</span> enregistrements sélectionnés dans toutes les pages
121
+ x_records_selected_from_page_html: <span class="font-bold text-gray-700">%{selected}</span> éléments sélectionnés de cette page
120
122
  you_missed_something_check_form: Vous avez peut-être oublié quelque chose. Veuillez vérifier le formulaire
@@ -80,6 +80,7 @@ nb:
80
80
  to_top: Flytt elementet til toppen
81
81
  per_page: Per side
82
82
  prev_page: Forrige side
83
+ records_selected_from_all_pages_html: Alle poster valgt fra alle sider
83
84
  remove_selection: Fjern valg
84
85
  reset_filters: Nullstill filter
85
86
  resource_created: Ressurs generert
@@ -117,4 +118,5 @@ nb:
117
118
  zero: ingen flere elementer
118
119
  x_records_selected_from_a_total_of_x_html: <span class="font-bold text-gray-700">%{selected}</span> poster valgt på denne siden fra totalt <span class="font-bold text-gray-700">%{count}</span>
119
120
  x_records_selected_from_all_pages_html: <span class="font-bold text-gray-700">%{count}</span> poster valgt fra alle sider
121
+ x_records_selected_from_page_html: <span class="font-bold text-gray-700">%{selected}</span> poster valgt på denne siden
120
122
  you_missed_something_check_form: Her mangler du noe. Vennligst sjekk skjemaet.
@@ -80,6 +80,7 @@ nn:
80
80
  to_top: Flytt elementet til toppen
81
81
  per_page: Per side
82
82
  prev_page: Førre side
83
+ records_selected_from_all_pages_html: Alle poster valgt fra alle sider
83
84
  remove_selection: Fjern val
84
85
  reset_filters: Nullstill filter
85
86
  resource_created: Ressurs generert
@@ -117,4 +118,5 @@ nn:
117
118
  zero: ingen fleire element
118
119
  x_records_selected_from_a_total_of_x_html: <span class="font-bold text-gray-700">%{selected}</span> valde postar på denne sida av totalt <span class="font-bold text-gray-700">%{count}</span>
119
120
  x_records_selected_from_all_pages_html: <span class="font-bold text-gray-700">%{count}</span> valde postar frå alle sider
121
+ x_records_selected_from_page_html: <span class="font-bold text-gray-700">%{selected}</span> poster valgt på denne siden
120
122
  you_missed_something_check_form: Her manglar du noko. Ver venleg og sjekk skjemaet.
@@ -80,6 +80,7 @@ pt-BR:
80
80
  to_top: Mover registro para cima
81
81
  per_page: Por página
82
82
  prev_page: Página anterior
83
+ records_selected_from_all_pages_html: Todos os registros de todas as páginas selecionados
83
84
  remove_selection: Remover seleção
84
85
  reset_filters: Limpar filtros
85
86
  resource_created: Recurso criado
@@ -117,4 +118,5 @@ pt-BR:
117
118
  zero: mais nenhum item
118
119
  x_records_selected_from_a_total_of_x_html: <span class="font-bold text-gray-700">%{selected}</span> registros selecionados nesta página de um total de <span class="font-bold text-gray-700">%{count}</span>
119
120
  x_records_selected_from_all_pages_html: <span class="font-bold text-gray-700">%{count}</span> registros selecionados de todas as páginas
121
+ x_records_selected_from_page_html: <span class="font-bold text-gray-700">%{selected}</span> registros selecionados nesta página
120
122
  you_missed_something_check_form: Você pode ter esquecido algo. Por favor, cheque o formulário.
@@ -80,6 +80,7 @@ pt:
80
80
  to_top: Mover recurso para o topo
81
81
  per_page: Por página
82
82
  prev_page: Página anterior
83
+ records_selected_from_all_pages_html: Todos os itens de todas as páginas selecionados
83
84
  remove_selection: Remover seleção
84
85
  reset_filters: Limpar filtros
85
86
  resource_created: Recurso criado
@@ -117,4 +118,5 @@ pt:
117
118
  zero: mais nenhum item
118
119
  x_records_selected_from_a_total_of_x_html: <span class="font-bold text-gray-700">%{selected}</span> itens selecionados nesta página de um total de <span class="font-bold text-gray-700">%{count}</span>
119
120
  x_records_selected_from_all_pages_html: <span class="font-bold text-gray-700">%{count}</span> itens selecionados de todas as páginas
121
+ x_records_selected_from_page_html: <span class="font-bold text-gray-700">%{selected}</span> itens selecionados nesta página
120
122
  you_missed_something_check_form: Pode ter-se esquecido algo. Por favor, verifique o formulário.
@@ -80,6 +80,7 @@ ro:
80
80
  to_top: Mutați înregistrarea sus de tot
81
81
  per_page: Pe pagină
82
82
  prev_page: Pagina anterioara
83
+ records_selected_from_all_pages_html: Toate selectate din toate paginile
83
84
  remove_selection: Șterge selecția
84
85
  reset_filters: Resetați filtrele
85
86
  resource_created: Resursă creata
@@ -117,4 +118,5 @@ ro:
117
118
  zero: zero articole
118
119
  x_records_selected_from_a_total_of_x_html: <span class="font-bold text-gray-700">%{selected}</span> selectate dintr-un total de <span class="font-bold text-gray-700">%{count}</span>
119
120
  x_records_selected_from_all_pages_html: <span class="font-bold text-gray-700">%{count}</span> selectate din toate paginile
121
+ x_records_selected_from_page_html: <span class="font-bold text-gray-700">%{selected}</span> selectate
120
122
  you_missed_something_check_form: S-ar putea să fi omis ceva. Vă rugăm să verificați formularul.