decidim-core 0.30.5 → 0.30.6

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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: f8792833d7ba900781bcd99e714b0fc117c8bf63b1d92894a12a4d8d9eebfcab
4
- data.tar.gz: 21ae4185554af11eb516c1e7e0b6af616497331ab28234bd1c5199636fe40402
3
+ metadata.gz: 1d2d2e573802976d0b68a5ec56528a5ba499416c443101bba31fee2d2f1af9e6
4
+ data.tar.gz: f172339288312c74d88a376805b12eed9aea1ea97c7e049978c3d94a4ab99f38
5
5
  SHA512:
6
- metadata.gz: 8d56c970e80a667e474858352900d599b48dc392d99c239e3ea732af530f457cbe0a72276b9da630e5aff999eff6585dbe8ce7a8da66346df7ee491901366d59
7
- data.tar.gz: aba95c516675ae9eff886fb93c4c29c94fede6adb809c26aa2fb2bf17fde468c7e1a7f9a8875708f13061595410f0dfaff83938ff7ff011682b8011f1e99d776
6
+ metadata.gz: eb126980873b650eaa4c89d208bbd0d266df4da01196f60621211e896501e615329f1e35e34251c66f8e7f67b71d4df6cfaefe38eb4343f69d7d65437b62f51e
7
+ data.tar.gz: 3204e02c1097ee49b967bfd558fd51b32f3faa6d3ee9352590e6c98c0020c86590c383756b0b5694c97fe3e4b6689fcbecb422e15b2bae929656533a5908af9b
@@ -68,15 +68,23 @@ module Decidim
68
68
  def clean_body
69
69
  return unless body
70
70
 
71
- Array(body).map { |paragraph| tag.p(clean(paragraph)) }.join
71
+ Array(body).map { |paragraph| clean(paragraph) }.join
72
72
  end
73
73
 
74
74
  def clean_announcement
75
+ return if announcement.is_a?(Hash) && announcement.values.all?(&:blank?)
76
+
75
77
  clean(announcement)
76
78
  end
77
79
 
78
80
  def clean(value)
79
- decidim_sanitize_admin(translated_attribute(value))
81
+ return if value.blank? || value.nil?
82
+
83
+ if value.include?("rich-text-display")
84
+ decidim_sanitize_admin(translated_attribute(value))
85
+ else
86
+ tag.p(decidim_sanitize_admin(translated_attribute(value)))
87
+ end
80
88
  end
81
89
  end
82
90
  end
@@ -1,3 +1,3 @@
1
1
  <div class="row column">
2
- <%= form.upload :file, button_class: "button button__sm button__transparent-secondary" %>
2
+ <%= form.upload :file, attachments: form.object.file.present? ? [form.object.file] : [], button_class: "button button__sm button__transparent-secondary" %>
3
3
  </div>
@@ -4,11 +4,11 @@
4
4
  <%= icon "arrow-down-s-line" %>
5
5
  <%= icon "arrow-up-s-line" %>
6
6
  </button>
7
- <ul id="dropdown-menu-participatory-space" class="participatory-space__nav">
7
+ <ul id="dropdown-menu-participatory-space" class="participatory-space__nav" aria-hidden="true">
8
8
  <% model.each do |item| %>
9
9
  <li role="menuitem">
10
10
  <%= link_to item[:url], class: "participatory-space__nav-item" do %>
11
- <%= item[:name] %>
11
+ <%= decidim_escape_translated(item[:name]) %>
12
12
  <%= icon "arrow-right-line" %>
13
13
  <% end %>
14
14
  </li>
@@ -22,9 +22,11 @@
22
22
  <div class="upload-modal__files" data-active-uploads="<%= modal_id %>">
23
23
  <% attachments.each do |attachment| %>
24
24
  <% next if [Array, Hash].any? { |klass| attachment.is_a? klass } %>
25
+ <% is_persisted_attachment = attachment.is_a?(Decidim::Attachment) && attachment.persisted? %>
26
+ <% attachment_blob = blob(attachment) %>
25
27
 
26
- <div class="attachment-details" data-attachment-id="<%= attachment.id %>" data-title="<%= title_for(attachment) %>" data-filename="<%= file_name_for(attachment) %>" data-state="uploaded">
27
- <% if file_attachment_path(attachment) && blob(attachment).image? %>
28
+ <div class="attachment-details"<% if is_persisted_attachment %> data-attachment-id="<%= attachment.id %>"<% end %> data-title="<%= title_for(attachment) %>" data-filename="<%= file_name_for(attachment) %>" data-state="uploaded" data-hidden-field="<%= attachment_blob&.signed_id %>">
29
+ <% if file_attachment_path(attachment) && attachment_blob&.image? %>
28
30
  <div><%= image_tag(file_attachment_path(attachment), alt: "") %></div>
29
31
  <% elsif uploader_default_image_path(attribute).present? %>
30
32
  <div><%= image_tag uploader_default_image_path(attribute) %></div>
@@ -32,14 +34,16 @@
32
34
 
33
35
  <% if has_title? %>
34
36
  <span><%= title_for(attachment) %></span>
35
- <%= form.hidden_field attribute, multiple: true, value: attachment.id, id: attachment.id %>
36
37
  <% else %>
37
- <% if blob(attachment).image? %>
38
+ <% if attachment_blob&.image? %>
38
39
  <span><%= title_for(attachment) %></span>
39
40
  <% else %>
40
41
  <%= link_to title_for(attachment), file_attachment_path(attachment), class: "w-full break-all mb-2" %>
41
42
  <% end %>
42
43
  <% end %>
44
+ <% if attachment_blob.present? %>
45
+ <%= form.hidden_field attribute, value: attachment_blob.signed_id, id: "hidden_#{attribute}_#{attachment_blob.id}" %>
46
+ <% end %>
43
47
  </div>
44
48
  <% end %>
45
49
  </div>
@@ -71,13 +71,16 @@ module Decidim
71
71
  end
72
72
 
73
73
  # By default FoundationRailsHelper adds form errors next to input, but since input is in the modal
74
- # and modal is hidden by default, we need to add an additional validation field to the form.
74
+ # and modal is hidden by default, we add a hidden checkbox field to handle HTML5 validation.
75
75
  # This should only be necessary when file is required by the form.
76
+ # Note: Validation errors are now displayed in the main form area, not inside the modal.
76
77
  def input_validation_field
77
78
  object_name = form.object.present? ? "#{form.object.model_name.param_key}[#{add_attribute}_validation]" : "#{add_attribute}_validation"
78
- input = check_box_tag object_name, 1, attachments.present?, class: "reset-defaults", hidden: true, label: false, required: required?
79
- message = form.send(:abide_error_element, add_attribute) + form.send(:error_and_help_text, add_attribute)
80
- input + message
79
+ check_box_tag object_name, 1, attachments.present?, class: "reset-defaults", hidden: true, label: false, required: required?, id: validation_field_id
80
+ end
81
+
82
+ def validation_field_id
83
+ "#{attribute}_validation"
81
84
  end
82
85
 
83
86
  def explanation
@@ -9,8 +9,6 @@ module Decidim
9
9
  skip_before_action :verify_organization
10
10
 
11
11
  before_action :check_organization!,
12
- :check_authenticated!,
13
- :check_user_belongs_to_organization,
14
12
  :validate_direct_upload
15
13
  end
16
14
 
@@ -42,16 +40,6 @@ module Decidim
42
40
  head :unauthorized if current_organization.blank? && current_admin.blank?
43
41
  end
44
42
 
45
- def check_authenticated!
46
- head :unauthorized if current_user.blank? && current_admin.blank?
47
- end
48
-
49
- def check_user_belongs_to_organization
50
- return if current_admin.present?
51
-
52
- head :unauthorized unless current_organization == current_user.organization
53
- end
54
-
55
43
  def allowed_extensions
56
44
  if user_has_elevated_role?
57
45
  current_organization.settings.upload_allowed_file_extensions_admin
@@ -71,6 +59,8 @@ module Decidim
71
59
  private
72
60
 
73
61
  def user_has_elevated_role?
62
+ return false if current_user.blank? || current_organization.blank? || current_user.organization != current_organization
63
+
74
64
  [
75
65
  current_user&.admin?,
76
66
  defined?(Decidim::Assemblies::AssembliesWithUserRole) && Decidim::Assemblies::AssembliesWithUserRole.for(current_user).any?,
@@ -9,6 +9,8 @@ module Decidim
9
9
 
10
10
  before_action :check_sign_in_enabled, only: :create
11
11
 
12
+ rescue_from ActionController::InvalidAuthenticityToken, with: :redirect_to_referer_or_path
13
+
12
14
  def create
13
15
  super do |user|
14
16
  if user.admin?
@@ -44,6 +46,11 @@ module Decidim
44
46
 
45
47
  private
46
48
 
49
+ def redirect_to_referer_or_path
50
+ set_flash_message(:alert, "csrf_token", scope: "devise.failure")
51
+ redirect_back(fallback_location: root_path) && return
52
+ end
53
+
47
54
  def check_sign_in_enabled
48
55
  redirect_to new_user_session_path unless current_organization.sign_in_enabled?
49
56
  end
@@ -117,9 +117,9 @@ module Decidim
117
117
  end
118
118
 
119
119
  def message(value)
120
- return content_tag(:div, value, class: "flash__message") unless value.is_a?(Hash)
120
+ return content_tag(:p, value, class: "flash__message") unless value.is_a?(Hash)
121
121
 
122
- content_tag(:div, class: "flash__message") do
122
+ content_tag(:p, class: "flash__message") do
123
123
  concat value[:title]
124
124
  concat content_tag(:span, value[:body], class: "flash__message-body")
125
125
  end
@@ -11,7 +11,7 @@ module Decidim
11
11
  manifest.name == name.to_sym
12
12
  end
13
13
 
14
- collection = export_manifest.collection.call(participatory_space)
14
+ collection = export_manifest.collection.call(participatory_space, user)
15
15
  serializer = export_manifest.serializer
16
16
 
17
17
  export_data = Decidim::Exporters.find_exporter(format).new(collection, serializer).export
@@ -9,7 +9,7 @@ module Decidim
9
9
  include Traceable
10
10
 
11
11
  before_save :set_content_type_and_size, if: :attached?
12
- before_validation :set_link_content_type_and_size, if: :link?
12
+ before_validation :set_link_content_type_and_size, if: :editable_link?
13
13
 
14
14
  translatable_fields :title, :description
15
15
  belongs_to :attachment_collection, class_name: "Decidim::AttachmentCollection", optional: true
@@ -69,6 +69,20 @@ module Decidim
69
69
  link.present?
70
70
  end
71
71
 
72
+ # Whether this attachment is a link that can be edited or not.
73
+ #
74
+ # Returns Boolean.
75
+ def editable_link?
76
+ !destroyed? && !frozen? && link?
77
+ end
78
+
79
+ # Whether this attachment has a file or not.
80
+ #
81
+ # Returns Boolean.
82
+ def file?
83
+ file.attached?
84
+ end
85
+
72
86
  # Which kind of file this is.
73
87
  #
74
88
  # Returns String.
@@ -123,5 +137,12 @@ module Decidim
123
137
  def self.log_presenter_class_for(_log)
124
138
  Decidim::AdminLog::AttachmentPresenter
125
139
  end
140
+
141
+ def can_participate?(user)
142
+ return true unless attached_to
143
+ return true unless attached_to.respond_to?(:can_participate?)
144
+
145
+ attached_to.can_participate?(user)
146
+ end
126
147
  end
127
148
  end
@@ -1,5 +1,5 @@
1
1
  .flash {
2
- @apply flex justify-start gap-4 border-l-4 border-secondary my-4 p-4 bg-secondary/5;
2
+ @apply flex justify-start gap-4 border-l-4 border-secondary my-4 p-4 bg-secondary/5 break-all;
3
3
 
4
4
  &__icon {
5
5
  svg {
@@ -99,7 +99,7 @@
99
99
  @apply divide-y divide-white [&>li]:py-3.5 first:[&>li]:pt-0 last:[&>li]:pb-0;
100
100
 
101
101
  &-container {
102
- @apply ml-0 md:ml-6 bg-primary p-3 md:p-6 rounded w-full md:w-auto self-start;
102
+ @apply mb-8 ml-0 md:ml-6 bg-primary p-3 md:p-6 rounded w-full md:w-auto self-start;
103
103
 
104
104
  [id*="dropdown-menu"] {
105
105
  @apply mx-0;
@@ -117,7 +117,7 @@ module Decidim
117
117
 
118
118
  def data_for_participatory_space(export_manifest)
119
119
  collection = participatory_spaces.filter { |space| space.manifest.name == export_manifest.manifest.name }.flat_map do |participatory_space|
120
- export_manifest.collection.call(participatory_space)
120
+ export_manifest.collection.call(participatory_space, nil)
121
121
  end
122
122
 
123
123
  serializer = export_manifest.open_data_serializer.nil? ? export_manifest.serializer : export_manifest.open_data_serializer
@@ -31,7 +31,7 @@
31
31
  </div>
32
32
  <% end %>
33
33
 
34
- <p class="h3 mt-2"><%= t("decidim.block_user_mailer.notify.hello") %>&nbsp;<%= current_user.name %></p>
34
+ <p class="h3 mt-2"><%= t("layouts.decidim.header.mobile_account_greeting", user_name: current_user.name) %></p>
35
35
 
36
36
  <ul>
37
37
  <%= render partial: "layouts/decidim/header/main_links_dropdown" %>
@@ -1120,6 +1120,9 @@ ca-IT:
1120
1120
  explanation: 'Instruccions per a la imatge:'
1121
1121
  message_1: Preferiblement una imatge apaïsada que no tingui cap text.
1122
1122
  message_2: El servei retalla la imatge.
1123
+ import_file:
1124
+ explanation: 'Instruccions per al fitxer d''importació:'
1125
+ message_1: Ha de ser un document JSON descarregat mitjançant la funció d'exportació.
1123
1126
  file_validation:
1124
1127
  allowed_file_extensions: 'Tipus de fitxers admesos: %{extensions}'
1125
1128
  max_file_dimension: 'Mides máximes de l''arxiu: %{resolution} pixels'
@@ -1971,6 +1974,7 @@ ca-IT:
1971
1974
  send_paranoid_instructions: Si la teva adreça de correu electrònic existeix a la nostra base de dades, rebràs un correu electrònic amb instruccions per confirmar la teva adreça en pocs minuts.
1972
1975
  failure:
1973
1976
  already_authenticated: Ja has iniciat la sessió.
1977
+ csrf_token: No es pot verificar la teva sol·licitud. Si us plau, torna a provar-ho.
1974
1978
  inactive: El teu compte encara no està activat.
1975
1979
  invalid: El %{authentication_keys} o la contrasenya no són vàlids.
1976
1980
  invited: Tens una invitació pendent, accepta-la per acabar de crear el teu compte.
@@ -2296,6 +2300,7 @@ ca-IT:
2296
2300
  confirm_close_ephemeral_session: Si navegues fora d'aquesta pàgina, la teva sessió es tancarà. Segur que vols sortir d'aquesta pàgina?
2297
2301
  log_in: Entra
2298
2302
  main_menu: Menú principal
2303
+ mobile_account_greeting: Hola %{user_name},
2299
2304
  user_menu: Menú d'usuari
2300
2305
  impersonation_warning:
2301
2306
  close_session: Tanca la sessió
@@ -1120,6 +1120,9 @@ ca:
1120
1120
  explanation: 'Instruccions per a la imatge:'
1121
1121
  message_1: Preferiblement una imatge apaïsada que no tingui cap text.
1122
1122
  message_2: El servei retalla la imatge.
1123
+ import_file:
1124
+ explanation: 'Instruccions per al fitxer d''importació:'
1125
+ message_1: Ha de ser un document JSON descarregat mitjançant la funció d'exportació.
1123
1126
  file_validation:
1124
1127
  allowed_file_extensions: 'Tipus de fitxers admesos: %{extensions}'
1125
1128
  max_file_dimension: 'Mides máximes de l''arxiu: %{resolution} pixels'
@@ -1971,6 +1974,7 @@ ca:
1971
1974
  send_paranoid_instructions: Si la teva adreça de correu electrònic existeix a la nostra base de dades, rebràs un correu electrònic amb instruccions per confirmar la teva adreça en pocs minuts.
1972
1975
  failure:
1973
1976
  already_authenticated: Ja has iniciat la sessió.
1977
+ csrf_token: No es pot verificar la teva sol·licitud. Si us plau, torna a provar-ho.
1974
1978
  inactive: El teu compte encara no està activat.
1975
1979
  invalid: El %{authentication_keys} o la contrasenya no són vàlids.
1976
1980
  invited: Tens una invitació pendent, accepta-la per acabar de crear el teu compte.
@@ -2296,6 +2300,7 @@ ca:
2296
2300
  confirm_close_ephemeral_session: Si navegues fora d'aquesta pàgina, la teva sessió es tancarà. Segur que vols sortir d'aquesta pàgina?
2297
2301
  log_in: Entra
2298
2302
  main_menu: Menú principal
2303
+ mobile_account_greeting: Hola %{user_name},
2299
2304
  user_menu: Menú d'usuari
2300
2305
  impersonation_warning:
2301
2306
  close_session: Tanca la sessió
@@ -206,6 +206,7 @@ cs:
206
206
  date: Vyberte datum pro %{label}
207
207
  time: Vyberte čas pro %{label}
208
208
  picker:
209
+ date_button: Otevřít výběr kalendáře pro %{label}
209
210
  time_button: Otevřít výběr času pro %{label}
210
211
  decidim:
211
212
  accessibility:
@@ -231,6 +232,7 @@ cs:
231
232
  success: Účet byl úspěšně smazán.
232
233
  download_your_data_export:
233
234
  export_expired: Export vypršel. Zkuste vytvořit nový export.
235
+ export_not_found: Export, ke kterému jste přistupovali, neexistuje, nebo nemáte přístup ke stažení
234
236
  file_no_exists: Soubor neexistuje
235
237
  notice: Probíhá stahování vašich dat. Po dokončení obdržíte e-mail.
236
238
  email_change:
@@ -800,6 +802,7 @@ cs:
800
802
  created_at: Datum, kdy byla konverzace vytvořena
801
803
  id: Jedinečný identifikátor pro tuto konverzaci
802
804
  messages: Zprávy této konverzace
805
+ updated_at: Datum, kdy byla tato konverzace naposledy aktualizována
803
806
  notifications:
804
807
  created_at: Datum a čas, kdy bylo oznámení vytvořeno
805
808
  event_class: Třída události, která spustila oznámení
@@ -830,6 +833,7 @@ cs:
830
833
  phone: Telefonní číslo této skupiny uživatelů
831
834
  verified_at: Datum a čas, kdy byla tato skupina uživatelů ověřena
832
835
  users:
836
+ about: Popis profilu tohoto účastníka
833
837
  accepted_tos_version: Datum, kdy uživatel přijal podmínky poskytování služeb této platformy
834
838
  admin: Zda je tento uživatel administrátorem
835
839
  confirmation_sent_at: Datum a čas, kdy bylo potvrzení odesláno
@@ -847,12 +851,16 @@ cs:
847
851
  invitation_sent_at: Datum a čas, kdy byla pozvánka odeslána
848
852
  invitations_count: Počet pozvánek zaslaných tomuto uživateli
849
853
  invited_by: Uživatel, který pozval tohoto uživatele
854
+ last_sign_in_at: Datum a čas předchozího přihlášení
855
+ last_sign_in_ip: IP adresa předchozího přihlášení
850
856
  locale: Lokalizace (jazyk), kterou tento uživatel vybral
851
857
  managed: Zda je tento uživatel spravován jiným uživatelem
852
858
  name: Jméno tohoto uživatele
859
+ newsletter_notifications_at: Datum a čas, kdy se tento účastník přihlásil k odběru zpravodaje
853
860
  nickname: Přezdívka tohoto uživatele
854
861
  notification_settings: Nastavení oznámení, které tento uživatel vybral
855
862
  notifications_sending_frequency: Četnost oznámení, která tento uživatel obdrží
863
+ officialized_as: Název funkce (radní, starosta atd.)
856
864
  officialized_at: Datum a čas, kdy byl tento uživatel oficializován
857
865
  organization: Organizace, do které tento uživatel patří,
858
866
  password_updated_at: Datum poslední změny hesla
@@ -901,6 +909,7 @@ cs:
901
909
  files:
902
910
  file_cannot_be_processed: Soubor nelze zpracovat
903
911
  file_resolution_too_large: Rozlišení souboru je příliš velké
912
+ not_inside_organization: Soubor není připojen k žádné organizaci.
904
913
  internal_server_error:
905
914
  copied: Text zkopírován!
906
915
  copy_error_message_clarification: Kopírovat chybovou zprávu do schránky
@@ -1140,6 +1149,7 @@ cs:
1140
1149
  file:
1141
1150
  explanation: 'Pokyny pro soubor:'
1142
1151
  message_1: Jedná se o obrázek nebo dokument.
1152
+ message_2: Pokud je to obrázek, ideální je obrázek na šířku, který nemá žádný text. Platforma ořízne obrázek.
1143
1153
  icon:
1144
1154
  explanation: 'Pokyny pro ikonu:'
1145
1155
  message_1: Musí to být čtvercový obrázek.
@@ -1148,6 +1158,9 @@ cs:
1148
1158
  explanation: 'Pokyny pro obrázek:'
1149
1159
  message_1: Nejlépe obrázek na šířku bez textu.
1150
1160
  message_2: Software tento obrázek ořízne.
1161
+ import_file:
1162
+ explanation: 'Pokyny pro import souboru:'
1163
+ message_1: Má to být JSON dokument stažený prostřednictvím exportní funce.
1151
1164
  file_validation:
1152
1165
  allowed_file_extensions: 'Povolené přípony souborů: %{extensions}'
1153
1166
  max_file_dimension: 'Maximální rozměry souboru: %{resolution} pixelů'
@@ -1989,6 +2002,7 @@ cs:
1989
2002
  send_paranoid_instructions: Pokud vaše e-mailová adresa existuje v naší databázi, během několika obdržíte e-mail s instrukcemi, jak potvrdit vaši e-mailovou adresu.
1990
2003
  failure:
1991
2004
  already_authenticated: Jste již přihlášen.
2005
+ csrf_token: Váš požadavek se nepodařilo ověřit. Opakujte akci.
1992
2006
  inactive: Váš účet zatím nebyl aktivován.
1993
2007
  invalid: Neplatný %{authentication_keys} nebo heslo.
1994
2008
  invited: Máte pozvání, přijměte jej k dokončení tvorby účtu.
@@ -2040,6 +2054,8 @@ cs:
2040
2054
  subject: Byli jste pozváni ke spravování organizace %{organization}
2041
2055
  invite_collaborator:
2042
2056
  subject: Byli jste pozváni ke spolupráci na organizaci %{organization}
2057
+ invite_private_user:
2058
+ subject: Byli jste pozváni do soukromého participačního procesu na %{organization}
2043
2059
  organization_admin_invitation_instructions:
2044
2060
  subject: Byli jste pozváni ke spravování organizace %{organization}
2045
2061
  password_change:
@@ -2325,6 +2341,8 @@ cs:
2325
2341
  expire_time_html: Platnost vaší relace vyprší za <b><span class="minutes">%{minutes}</span></b>.
2326
2342
  language_chooser:
2327
2343
  choose_language: Vyberte jazyk
2344
+ navigation:
2345
+ aria_label: 'Navigation menu: %{title}'
2328
2346
  notifications_dashboard:
2329
2347
  mark_all_as_read: Označit vše jako přečtené
2330
2348
  mark_as_read: Označit jako přečtené
@@ -1308,6 +1308,7 @@ el:
1308
1308
  made_with_open_source: Ο ιστότοπος δημιουργήθηκε με <a target="_blank" href="https://github.com/decidim/decidim">δωρεάν λογισμικό</a>.
1309
1309
  header:
1310
1310
  log_in: Σύνδεση
1311
+ mobile_account_greeting: Γεια σου, %{user_name}
1311
1312
  impersonation_warning:
1312
1313
  close_session: Κλείσιμο συνεδρίας
1313
1314
  description_html: Διαχειρίζεστε τον συμμετέχοντα <b>%{user_name}</b>.
@@ -1127,6 +1127,9 @@ en:
1127
1127
  explanation: 'Guidance for image:'
1128
1128
  message_1: Preferably a landscape image that does not have any text.
1129
1129
  message_2: The service crops the image.
1130
+ import_file:
1131
+ explanation: 'Guidance for import file:'
1132
+ message_1: Has to be a JSON document downloaded through the export feature.
1130
1133
  file_validation:
1131
1134
  allowed_file_extensions: 'Allowed file extensions: %{extensions}'
1132
1135
  max_file_dimension: 'Maximum file dimensions: %{resolution} pixels'
@@ -1978,6 +1981,7 @@ en:
1978
1981
  send_paranoid_instructions: If your email address exists in our database, you will receive an email with instructions for how to confirm your email address in a few minutes.
1979
1982
  failure:
1980
1983
  already_authenticated: You are already signed in.
1984
+ csrf_token: Unable to verify your request. Please retry.
1981
1985
  inactive: Your account is not activated yet.
1982
1986
  invalid: Invalid %{authentication_keys} or password.
1983
1987
  invited: You have a pending invitation, accept it to finish creating your account.
@@ -2304,6 +2308,7 @@ en:
2304
2308
  confirm_close_ephemeral_session: If you navigate out of this page, your session will be closed. Are you sure?
2305
2309
  log_in: Log in
2306
2310
  main_menu: Main menu
2311
+ mobile_account_greeting: Hello, %{user_name}
2307
2312
  user_menu: User menu
2308
2313
  impersonation_warning:
2309
2314
  close_session: Close session
@@ -1123,6 +1123,9 @@ es-MX:
1123
1123
  explanation: 'Instrucciones para la imagen:'
1124
1124
  message_1: Preferiblemente una imagen apaisada que no tenga ningún texto.
1125
1125
  message_2: El servicio recorta la imagen.
1126
+ import_file:
1127
+ explanation: 'Guía para el archivo de importación:'
1128
+ message_1: Tiene que ser un documento JSON descargado a través de la función de exportación.
1126
1129
  file_validation:
1127
1130
  allowed_file_extensions: 'Formatos de archivo permitidos: %{extensions}'
1128
1131
  max_file_dimension: 'Medidas máximas de archivo: %{resolution} píxeles'
@@ -1974,6 +1977,7 @@ es-MX:
1974
1977
  send_paranoid_instructions: Si tu dirección de correo electrónico existe en nuestra base de datos, recibirás un correo electrónico con instrucciones sobre cómo confirmar tu dirección de correo electrónico en unos minutos.
1975
1978
  failure:
1976
1979
  already_authenticated: Ya has iniciado sesión.
1980
+ csrf_token: No se puede verificar tu solicitud. Por favor, vuelve a intentarlo.
1977
1981
  inactive: Tu cuenta aún no está activada.
1978
1982
  invalid: '%{authentication_keys} o contraseña inválida.'
1979
1983
  invited: Tienes una invitación pendiente, acéptala para terminar de crear tu cuenta.
@@ -2296,6 +2300,7 @@ es-MX:
2296
2300
  confirm_close_ephemeral_session: Si navegas fuera de esta página, tu sesión se cerrara. ¿Seguro que quieres salir de esta página?
2297
2301
  log_in: Entra
2298
2302
  main_menu: Menú principal
2303
+ mobile_account_greeting: Hola %{user_name},
2299
2304
  user_menu: Menú de usuario
2300
2305
  impersonation_warning:
2301
2306
  close_session: Cerrar la sesión
@@ -1123,6 +1123,9 @@ es-PY:
1123
1123
  explanation: 'Instrucciones para la imagen:'
1124
1124
  message_1: Preferiblemente una imagen apaisada que no tenga ningún texto.
1125
1125
  message_2: El servicio recorta la imagen.
1126
+ import_file:
1127
+ explanation: 'Guía para el archivo de importación:'
1128
+ message_1: Tiene que ser un documento JSON descargado a través de la función de exportación.
1126
1129
  file_validation:
1127
1130
  allowed_file_extensions: 'Formatos de archivo permitidos: %{extensions}'
1128
1131
  max_file_dimension: 'Medidas máximas de archivo: %{resolution} píxeles'
@@ -1974,6 +1977,7 @@ es-PY:
1974
1977
  send_paranoid_instructions: Si su dirección de correo electrónico existe en nuestra base de datos, recibirá un correo electrónico con instrucciones sobre cómo confirmar su dirección de correo electrónico en unos minutos.
1975
1978
  failure:
1976
1979
  already_authenticated: Ya has iniciado sesión.
1980
+ csrf_token: No se puede verificar tu solicitud. Por favor, vuelve a intentarlo.
1977
1981
  inactive: Tu cuenta aún no está activada.
1978
1982
  invalid: '%{authentication_keys} inválido o contraseña.'
1979
1983
  invited: Tienes una invitación pendiente, acéptala para terminar de crear tu cuenta.
@@ -2296,6 +2300,7 @@ es-PY:
2296
2300
  confirm_close_ephemeral_session: Si navegas fuera de esta página, tu sesión se cerrara. ¿Seguro que quieres salir de esta página?
2297
2301
  log_in: Entra
2298
2302
  main_menu: Menú principal
2303
+ mobile_account_greeting: Hola %{user_name},
2299
2304
  user_menu: Menú de usuario
2300
2305
  impersonation_warning:
2301
2306
  close_session: Cerrar la sesión
@@ -1120,6 +1120,9 @@ es:
1120
1120
  explanation: 'Instrucciones para la imagen:'
1121
1121
  message_1: Preferiblemente una imagen apaisada que no tenga ningún texto.
1122
1122
  message_2: El servicio recorta la imagen.
1123
+ import_file:
1124
+ explanation: 'Guía para el archivo de importación:'
1125
+ message_1: Tiene que ser un documento JSON descargado a través de la función de exportación.
1123
1126
  file_validation:
1124
1127
  allowed_file_extensions: 'Formatos de archivo permitidos: %{extensions}'
1125
1128
  max_file_dimension: 'Medidas máximas de archivo: %{resolution} píxeles'
@@ -1971,6 +1974,7 @@ es:
1971
1974
  send_paranoid_instructions: Si tu dirección de correo electrónico existe en nuestra base de datos, recibirás un correo electrónico con instrucciones sobre cómo confirmar tu dirección de correo electrónico en unos minutos.
1972
1975
  failure:
1973
1976
  already_authenticated: Ya has iniciado sesión.
1977
+ csrf_token: No se puede verificar tu solicitud. Por favor, vuelve a intentarlo.
1974
1978
  inactive: Tu cuenta aún no está activada.
1975
1979
  invalid: '%{authentication_keys} o contraseña no son válidos.'
1976
1980
  invited: Tienes una invitación pendiente, acéptala para acabar de crear tu cuenta.
@@ -2296,6 +2300,7 @@ es:
2296
2300
  confirm_close_ephemeral_session: Si navegas fuera de esta página, tu sesión se cerrara. ¿Seguro que quieres salir de esta página?
2297
2301
  log_in: Entra
2298
2302
  main_menu: Menú principal
2303
+ mobile_account_greeting: Hola %{user_name},
2299
2304
  user_menu: Menú de usuario
2300
2305
  impersonation_warning:
2301
2306
  close_session: Cerrar sesión
@@ -940,15 +940,15 @@ eu:
940
940
  attachments:
941
941
  attachment_created:
942
942
  email_intro: 'Dokumentu berri bat gehitu zaio %{resource_title}-ri. Orrialde honetan ikusi dezakezu:'
943
- email_outro: Jakinarazpen hau jaso duzu %{resource_title} jarraitzen duzulako. Aurreko esteka jarraituz jakinarazpenak jasotzeari utzi ahal diozu.
943
+ email_outro: Jakinarazpen hau jaso duzu %{resource_title} jarraitzen ari zarelako. Aurreko estekan sartu jakinarazpenak jasotzeari uzteko.
944
944
  email_subject: '%{resource_title} eguneratu da'
945
945
  notification_title: '<a href="%{resource_path}"> dokumentu berri bat</a> gehitu zaio honi: <a href="%{attached_to_url}">%{resource_title}</a>'
946
946
  components:
947
947
  component_published:
948
- email_intro: '%{resource_title} osagaia %{participatory_space_title} da aktibo dagoenean. Orrialde hau ikusi dezakezu:'
948
+ email_intro: '%{resource_title} osagaia aktibatu da %{participatory_space_title} espazioan. Orrialde honetan ikus dezakezu:'
949
949
  email_outro: Jakinarazpena jaso duzu %{participatory_space_title} jarraituz gero. Aurreko esteka jarraituz jakinarazpenak jasotzeari uztea erabaki dezakezu.
950
950
  email_subject: '%{participatory_space_title} eguneratze bat'
951
- notification_title: '%{resource_title} osagaia aktibo dago honetarako: <a href="%{resource_path}">%{participatory_space_title}</a>'
951
+ notification_title: '%{resource_title} osagaia aktibo dago iadanik <a href="%{resource_path}">%{participatory_space_title}</a> espaziorako'
952
952
  email_event:
953
953
  email_greeting: Kaixo, %{user_name},
954
954
  email_intro: '"%{resource_title}"eguneratu da. Orri honetan ikus dezakezu:'
@@ -1043,7 +1043,7 @@ eu:
1043
1043
  users:
1044
1044
  profile_updated:
1045
1045
  email_intro: </a> de %{name} (%{nickname}) profilaren <a href="%{resource_url}"> orria, jarraitzen ari zarena, eguneratu egin da.
1046
- email_outro: Jakinarazpena jaso duzu %{nickname} jarraitzen duzulako. Aurreko esteka jarraituz jakinarazpenak jasotzeari uztea erabaki dezakezu.
1046
+ email_outro: Jakinarazpen hau jaso duzu %{nickname} jarraitzen ari zarelako. Aurreko estekan sartu jakinarazpenak jasotzeari uzteko.
1047
1047
  email_subject: "%{nickname} k bere profila eguneratu du"
1048
1048
  notification_title: </a> de %{name} (%{nickname}) profilaren <a href="%{resource_path}"> orria, jarraitzen ari zarena, eguneratu egin da.
1049
1049
  user_officialized:
@@ -1120,6 +1120,9 @@ eu:
1120
1120
  explanation: 'Jarraibideak irudirako:'
1121
1121
  message_1: Testurik ez duen irudi etzan bat, ahal dela.
1122
1122
  message_2: Zerbitzuak irudia moztu egiten du.
1123
+ import_file:
1124
+ explanation: 'Inportazio-fitxategirako jarraibideak:'
1125
+ message_1: JSON dokumentu bat izan behar du, esportazioaren bidez deskargatua.
1123
1126
  file_validation:
1124
1127
  allowed_file_extensions: 'Onartutako artxiboen formatua: %{extensions}'
1125
1128
  max_file_dimension: 'Fitxategiaren gehieneko neurriak: %{resolution} pixel'
@@ -1971,6 +1974,7 @@ eu:
1971
1974
  send_paranoid_instructions: Zure helbide elektronikoa gure datu-basean badago, mezu elektroniko bat jasoko duzu zure helbide elektronikoa minutu gutxi barru baieztatzeko jarraibideekin.
1972
1975
  failure:
1973
1976
  already_authenticated: Saioa hasi duzu.
1977
+ csrf_token: Ezin izan da zure eskaera egiaztatu. Mesedez, berriro saiatu.
1974
1978
  inactive: Zure kontua ez dago oraindik aktibatuta.
1975
1979
  invalid: '%{authentication_keys} edo pasahitza baliogabea.'
1976
1980
  invited: Gonbidapen bat dago zain, onartu zure kontua sortzerakoan.
@@ -1013,6 +1013,9 @@ fr-CA:
1013
1013
  explanation: 'Orientation pour l''image:'
1014
1014
  message_1: De préférence une image au format paysage ne contenant pas de texte.
1015
1015
  message_2: Le service récolte l'image.
1016
+ import_file:
1017
+ explanation: 'Instructions pour le fichier d''importation :'
1018
+ message_1: Doit être un document JSON téléchargé via la fonction d'exportation.
1016
1019
  file_validation:
1017
1020
  allowed_file_extensions: 'Extensions de fichier autorisées : %{extensions}'
1018
1021
  max_file_dimension: 'Dimensions de fichier maximales : %{resolution} pixels'
@@ -1831,6 +1834,7 @@ fr-CA:
1831
1834
  send_paranoid_instructions: Si votre adresse e-mail existe dans notre base de données, vous recevrez un e-mail avec les instructions pour confirmer votre adresse e-mail dans quelques minutes.
1832
1835
  failure:
1833
1836
  already_authenticated: Vous êtes déjà connecté.
1837
+ csrf_token: Impossible de vérifier votre demande. Veuillez réessayer.
1834
1838
  inactive: Votre compte n'est pas encore activé.
1835
1839
  invalid: '%{authentication_keys} ou mot de passe invalide.'
1836
1840
  invited: Vous avez une invitation en attente, acceptez-la pour terminer la création de votre compte.
@@ -1013,6 +1013,9 @@ fr:
1013
1013
  explanation: 'Orientation pour l''image:'
1014
1014
  message_1: De préférence une image au format paysage ne contenant pas de texte.
1015
1015
  message_2: Le service recadre l'image.
1016
+ import_file:
1017
+ explanation: 'Instructions pour le fichier d''importation :'
1018
+ message_1: Doit être un document JSON téléchargé via la fonction d'exportation.
1016
1019
  file_validation:
1017
1020
  allowed_file_extensions: 'Extensions de fichier autorisées : %{extensions}'
1018
1021
  max_file_dimension: 'Dimensions de fichier maximales : %{resolution} pixels'
@@ -1831,6 +1834,7 @@ fr:
1831
1834
  send_paranoid_instructions: Si votre adresse e-mail existe dans notre base de données, vous recevrez un e-mail avec les instructions pour confirmer votre adresse e-mail dans quelques minutes.
1832
1835
  failure:
1833
1836
  already_authenticated: Vous êtes déjà connecté.
1837
+ csrf_token: Impossible de vérifier votre demande. Veuillez réessayer.
1834
1838
  inactive: Votre compte n'est pas encore activé.
1835
1839
  invalid: '%{authentication_keys} ou mot de passe invalide.'
1836
1840
  invited: Vous avez une invitation en attente, acceptez-la pour terminer la création de votre compte.
@@ -2156,6 +2160,7 @@ fr:
2156
2160
  confirm_close_ephemeral_session: Si vous quittez cette page, votre session sera fermée. Êtes-vous sûr(e)?
2157
2161
  log_in: Se connecter
2158
2162
  main_menu: Menu principal
2163
+ mobile_account_greeting: Bonjour %{user_name},
2159
2164
  user_menu: Menu utilisateur
2160
2165
  impersonation_warning:
2161
2166
  close_session: Fermer la session