decidim-core 0.27.3 → 0.27.4

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

Potentially problematic release.


This version of decidim-core might be problematic. Click here for more details.

Files changed (89) hide show
  1. checksums.yaml +4 -4
  2. data/app/cells/decidim/activities_cell.rb +1 -7
  3. data/app/cells/decidim/collapsible_list/show.erb +1 -1
  4. data/app/cells/decidim/content_blocks/last_activity_cell.rb +1 -4
  5. data/app/cells/decidim/tags_cell.rb +13 -2
  6. data/app/commands/decidim/create_omniauth_registration.rb +2 -2
  7. data/app/controllers/decidim/authorization_modals_controller.rb +1 -1
  8. data/app/controllers/decidim/last_activities_controller.rb +1 -7
  9. data/app/controllers/decidim/short_links_controller.rb +1 -1
  10. data/app/forms/decidim/notifications_settings_form.rb +1 -1
  11. data/app/forms/url_validator.rb +1 -1
  12. data/app/helpers/decidim/layout_helper.rb +4 -1
  13. data/app/helpers/decidim/layout_helper.rb.orig +225 -0
  14. data/app/models/decidim/organization.rb +6 -0
  15. data/app/models/decidim/user.rb +4 -2
  16. data/app/packs/src/decidim/input_character_counter.js +1 -1
  17. data/app/packs/src/decidim/map/controller/drag_marker.js +0 -2
  18. data/app/packs/src/decidim/map/controller/markers.js +0 -1
  19. data/app/packs/src/decidim/map/controller/static.js +0 -1
  20. data/app/packs/src/decidim/map/controller.js +0 -2
  21. data/app/packs/src/decidim/map/factory.js +4 -1
  22. data/app/packs/src/decidim/map/icon.js +0 -1
  23. data/app/packs/src/decidim/map/legacy.js +0 -1
  24. data/app/packs/src/decidim/map/provider/default.js +2 -0
  25. data/app/packs/src/decidim/map/provider/here.js +2 -1
  26. data/app/packs/stylesheets/decidim/modules/_dropdown_menu.scss +9 -0
  27. data/app/queries/decidim/last_activity.rb +96 -0
  28. data/app/queries/decidim/metrics/users_metric_manage.rb +6 -6
  29. data/app/queries/decidim/public_activities.rb +5 -57
  30. data/app/services/decidim/email_notification_generator.rb +7 -1
  31. data/app/services/decidim/send_push_notification.rb +1 -1
  32. data/app/uploaders/decidim/application_uploader.rb +2 -0
  33. data/app/views/decidim/devise/registrations/new.html.erb.orig +231 -0
  34. data/config/environment.rb +0 -0
  35. data/config/locales/ar.yml +3 -3
  36. data/config/locales/bg.yml +4 -0
  37. data/config/locales/ca.yml +7 -6
  38. data/config/locales/cs.yml +23 -7
  39. data/config/locales/de.yml +74 -11
  40. data/config/locales/el.yml +147 -0
  41. data/config/locales/en.yml +1 -0
  42. data/config/locales/eo.yml +3 -0
  43. data/config/locales/es-MX.yml +2 -1
  44. data/config/locales/es-PY.yml +4 -3
  45. data/config/locales/es.yml +7 -6
  46. data/config/locales/eu.yml +5 -5
  47. data/config/locales/fi-plain.yml +22 -0
  48. data/config/locales/fi.yml +1 -0
  49. data/config/locales/fr-CA.yml +6 -5
  50. data/config/locales/fr.yml +7 -6
  51. data/config/locales/ga-IE.yml +4 -0
  52. data/config/locales/gl.yml +8 -1
  53. data/config/locales/hu.yml +23 -2
  54. data/config/locales/id-ID.yml +8 -0
  55. data/config/locales/is-IS.yml +3 -1
  56. data/config/locales/it.yml +10 -6
  57. data/config/locales/ja.yml +16 -1
  58. data/config/locales/kaa.yml +10 -0
  59. data/config/locales/lb.yml +12 -8
  60. data/config/locales/lt.yml +1 -1
  61. data/config/locales/lv.yml +4 -0
  62. data/config/locales/nl.yml +6 -6
  63. data/config/locales/no.yml +8 -4
  64. data/config/locales/pl.yml +4 -0
  65. data/config/locales/pt-BR.yml +5 -1
  66. data/config/locales/pt.yml +5 -1
  67. data/config/locales/ro-RO.yml +4 -0
  68. data/config/locales/ru.yml +2 -0
  69. data/config/locales/sk.yml +21 -7
  70. data/config/locales/sr-CS.yml +8 -0
  71. data/config/locales/sv.yml +11 -11
  72. data/config/locales/tr-TR.yml +4 -0
  73. data/config/locales/uk.yml +2 -0
  74. data/config/locales/zh-CN.yml +4 -0
  75. data/config/locales/zh-TW.yml +17 -3
  76. data/db/migrate/20181030090144_destroy_deleted_users_follows.rb +1 -1
  77. data/db/migrate/20181204110723_remove_following_users_count_from_users.rb +11 -2
  78. data/db/migrate/20181214101250_add_notification_types_to_users.rb +6 -1
  79. data/db/migrate/20190412131728_fix_user_names.rb +9 -2
  80. data/db/migrate/20200211173227_add_direct_message_types_to_users.rb +6 -1
  81. data/db/migrate/20210302150803_invalidate_all_sessions_for_deleted_users.rb +10 -3
  82. data/db/migrate/20210310120640_add_followable_counter_cache_to_users.rb +13 -3
  83. data/db/seeds.rb +4 -3
  84. data/lib/decidim/core/test/shared_examples/map_examples.rb +4 -1
  85. data/lib/decidim/core/version.rb +1 -1
  86. data/lib/decidim/core.rb +17 -0
  87. data/lib/decidim/form_builder.rb +6 -13
  88. data/lib/tasks/upgrade/decidim_user_moderation.rake +14 -0
  89. metadata +17 -11
@@ -22,7 +22,7 @@ module Decidim
22
22
  # contained in any of them as spaces.
23
23
  # :scopes - a collection of `Decidim::Scope`. It will return any activity that
24
24
  # took place in any of those scopes.
25
- class PublicActivities < Decidim::Query
25
+ class PublicActivities < LastActivity
26
26
  def initialize(organization, options = {})
27
27
  @organization = organization
28
28
  @resource_name = options[:resource_name]
@@ -33,26 +33,19 @@ module Decidim
33
33
  end
34
34
 
35
35
  def query
36
- query = ActionLog
37
- .where(visibility: visibility)
38
- .where(organization: organization)
36
+ query = base_query
39
37
 
40
38
  query = query.where(user: user) if user
41
39
  query = query.where(resource_type: resource_name) if resource_name.present?
42
40
 
43
41
  query = filter_follows(query)
44
- query = filter_hidden(query)
45
-
46
- query.order(created_at: :desc)
42
+ query = filter_moderated(query)
43
+ filter_spaces(query)
47
44
  end
48
45
 
49
46
  private
50
47
 
51
- attr_reader :organization, :resource_name, :user, :current_user, :follows, :scopes
52
-
53
- def visibility
54
- %w(public-only all)
55
- end
48
+ attr_reader :resource_name, :user, :follows, :scopes
56
49
 
57
50
  def filter_follows(query)
58
51
  conditions = []
@@ -79,51 +72,6 @@ module Decidim
79
72
  query.where(chained_conditions)
80
73
  end
81
74
 
82
- def filter_hidden(query)
83
- # Filter out the items that have been moderated.
84
- query = query.joins(
85
- <<~SQL.squish
86
- LEFT JOIN decidim_moderations
87
- ON decidim_moderations.decidim_reportable_type = decidim_action_logs.resource_type
88
- AND decidim_moderations.decidim_reportable_id = decidim_action_logs.resource_id
89
- AND decidim_moderations.hidden_at IS NOT NULL
90
- SQL
91
- ).where(decidim_moderations: { id: nil })
92
-
93
- # Filter out the private space items that should not be visible for the
94
- # current user.
95
- current_user_id = current_user&.id.to_i
96
- Decidim.participatory_space_manifests.map do |manifest|
97
- klass = manifest.model_class_name.constantize
98
- next unless klass.include?(Decidim::HasPrivateUsers)
99
-
100
- table = klass.table_name
101
- query = query.joins(
102
- Arel.sql(
103
- <<~SQL.squish
104
- LEFT JOIN #{table}
105
- ON decidim_action_logs.participatory_space_type = '#{manifest.model_class_name}'
106
- AND #{table}.id = decidim_action_logs.participatory_space_id
107
- LEFT JOIN decidim_participatory_space_private_users AS #{manifest.name}_private_users
108
- ON #{manifest.name}_private_users.privatable_to_type = '#{manifest.model_class_name}'
109
- AND #{table}.id = #{manifest.name}_private_users.privatable_to_id
110
- AND #{table}.private_space = 't'
111
- SQL
112
- ).to_s
113
- ).where(
114
- Arel.sql(
115
- <<~SQL.squish
116
- #{table}.id IS NULL OR
117
- #{table}.private_space = 'f' OR
118
- #{manifest.name}_private_users.decidim_user_id = #{current_user_id}
119
- SQL
120
- ).to_s
121
- )
122
- end
123
-
124
- query
125
- end
126
-
127
75
  def followed_users_conditions(follows)
128
76
  followed_users = follows.where(decidim_followable_type: "Decidim::UserBaseEntity")
129
77
  return [] if followed_users.empty?
@@ -63,7 +63,7 @@ module Decidim
63
63
  # Returns nothing.
64
64
  def send_email_to(recipient, user_role:)
65
65
  return unless recipient
66
- return unless recipient.notifications_sending_frequency == "real_time"
66
+ return unless should_send_email?(recipient)
67
67
  return if resource.respond_to?(:can_participate?) && !resource.can_participate?(recipient)
68
68
 
69
69
  wait_time = 0
@@ -81,6 +81,12 @@ module Decidim
81
81
  .deliver_later(wait: wait_time)
82
82
  end
83
83
 
84
+ def should_send_email?(recipient)
85
+ return extra[:force_email] if extra.has_key?(:force_email)
86
+
87
+ recipient.notifications_sending_frequency == "real_time"
88
+ end
89
+
84
90
  def component
85
91
  return resource.component if resource.is_a?(Decidim::HasComponent)
86
92
 
@@ -16,7 +16,7 @@ module Decidim
16
16
  #
17
17
  # Returns the result of the dispatch or nil if user or subscription are empty
18
18
  def perform(notification)
19
- return unless Rails.application.secrets.vapid[:enabled]
19
+ return unless Rails.application.secrets.dig(:vapid, :enabled)
20
20
 
21
21
  I18n.with_locale(notification.user.locale || notification.user.organization.default_locale) do
22
22
  notification.user.notifications_subscriptions.values.map do |subscription|
@@ -30,6 +30,8 @@ module Decidim
30
30
  else
31
31
  model.send(mounted_as)
32
32
  end
33
+ rescue ActiveStorage::InvariableError
34
+ model.send(mounted_as)
33
35
  end
34
36
 
35
37
  def attached?
@@ -0,0 +1,231 @@
1
+ <% add_decidim_page_title(t(".sign_up")) %>
2
+
3
+ <% content_for :devise_links do %>
4
+ <%= render "decidim/devise/shared/links" %>
5
+ <% end %>
6
+
7
+ <%= render layout: "layouts/decidim/shared/layout_center" do %>
8
+ <div class="flex justify-center">
9
+ <h1 class="h3 md:h1 decorator my-12"><%= t("decidim.devise.registrations.new.sign_up") %></h1>
10
+ </div>
11
+
12
+ <div class="login__info">
13
+ <p>
14
+ <%= t("decidim.devise.registrations.new.subtitle") %>
15
+ </p>
16
+ <p class="font-semibold">
17
+ <%= t("decidim.devise.registrations.new.already_have_an_account?") %>
18
+ <%= link_to t("decidim.devise.registrations.new.sign_in"), new_user_session_path %>
19
+ </p>
20
+ </div>
21
+
22
+ <div class="login__info-required">
23
+ <%= form_required_explanation %>
24
+ </div>
25
+
26
+ <div class="login__omniauth-container">
27
+ <% cache current_organization do %>
28
+ <%= render "decidim/devise/shared/omniauth_buttons" %>
29
+ <% end %>
30
+ </div>
31
+
32
+ <%= decidim_form_for(@form, namespace: "registration", as: resource_name, url: registration_path(resource_name), html: { id: "register-form" }) do |f| %>
33
+ <%= invisible_captcha %>
34
+
35
+ <div class="form__wrapper">
36
+ <%= f.text_field :name, help_text: t("decidim.devise.registrations.new.username_help"), autocomplete: "name", placeholder: "John Doe" %>
37
+
38
+ <%= f.text_field :nickname, help_text: t("decidim.devise.registrations.new.nickname_help", organization: current_organization.name), autocomplete: "nickname", placeholder: "johndoe" %>
39
+
40
+ <%= f.email_field :email, autocomplete: "email", placeholder: "hi@email.com" %>
41
+
42
+ <%= f.password_field :password, password_field_options_for(:user) %>
43
+
44
+ <%= f.password_field :password_confirmation, password_field_options_for(:user).except(:help_text) %>
45
+ </div>
46
+
47
+ <div id="card__tos" class="form__wrapper-block">
48
+ <h4 class="h4"><%= t("decidim.devise.registrations.new.tos_title") %></h4>
49
+
50
+ <div class="tos-text">
51
+ <% terms_of_service_summary_content_blocks.each do |content_block| %>
52
+ <%= cell content_block.manifest.cell, content_block %>
53
+ <% end %>
54
+ </div>
55
+
56
+ <%= f.check_box :tos_agreement, label: t("decidim.devise.registrations.new.tos_agreement", link: link_to(t("decidim.devise.registrations.new.terms"), page_path("terms-of-service"))), label_options: { class: "form__wrapper-checkbox-label" } %>
57
+ </div>
58
+
59
+ <div id="card__newsletter" class="form__wrapper-block">
60
+ <h4 class="h4"><%= t("decidim.devise.registrations.new.newsletter_title") %></h4>
61
+ <%= f.check_box :newsletter, label: t("decidim.devise.registrations.new.newsletter"), checked: @form.newsletter, label_options: { class: "form__wrapper-checkbox-label" } %>
62
+ </div>
63
+
64
+ <div class="form__wrapper-block">
65
+ <button type="submit" class="button button__lg button__secondary">
66
+ <%= t("decidim.devise.registrations.new.sign_up") %>
67
+ <%= icon "arrow-right-line", class: "fill-current" %>
68
+ </button>
69
+ </div>
70
+
71
+ <div class="login__links">
72
+ <%= render "decidim/devise/shared/redesigned_links" %>
73
+ </div>
74
+ <% end %>
75
+ <% end %>
76
+
77
+ <<<<<<< HEAD
78
+ ||||||| parent of 4e14afa36c (add password toggle via unobstructive javascript)
79
+ <div class="row">
80
+ <div class="columns large-6 medium-10 medium-centered">
81
+
82
+ <%= decidim_form_for(@form, namespace: "registration", as: resource_name, url: registration_path(resource_name), html: { class: "register-form new_user", id: "register-form" }) do |f| %>
83
+ <%= invisible_captcha %>
84
+ <div class="card">
85
+ <div class="card__content">
86
+ <%= form_required_explanation %>
87
+
88
+ <div class="user-person">
89
+ <div class="field">
90
+ <%= f.text_field :name, help_text: t(".username_help"), autocomplete: "name" %>
91
+ </div>
92
+ </div>
93
+
94
+ <div class="user-nickname">
95
+ <div class="field">
96
+ <%= f.text_field :nickname, help_text: t(".nickname_help", organization: current_organization.name), prefix: { value: "@", small: 1, large: 1 }, autocomplete: "nickname" %>
97
+ </div>
98
+ </div>
99
+
100
+ <div class="field">
101
+ <%= f.email_field :email, autocomplete: "email" %>
102
+ </div>
103
+
104
+ <div class="field">
105
+ <%= f.password_field :password, password_field_options_for(:user) %>
106
+ </div>
107
+
108
+ <div class="field">
109
+ <%= f.password_field :password_confirmation, password_field_options_for(:user).except(:help_text) %>
110
+ </div>
111
+ </div>
112
+ </div>
113
+
114
+ <div class="card" id="card__tos">
115
+ <div class="card__content">
116
+ <h3><%= t(".tos_title") %></h3>
117
+
118
+ <p class="tos-text">
119
+ <%= strip_tags(translated_attribute(terms_and_conditions_page.content)) %>
120
+ </p>
121
+
122
+ <div class="field">
123
+ <%= f.check_box :tos_agreement, label: t(".tos_agreement", link: link_to(t(".terms"), page_path("terms-and-conditions"))) %>
124
+ </div>
125
+ </div>
126
+ </div>
127
+
128
+ <div class="card" id="card__newsletter">
129
+ <div class="card__content">
130
+ <h3><%= t(".newsletter_title") %></h3>
131
+ <div class="field">
132
+ <%= f.check_box :newsletter, label: t(".newsletter"), checked: @form.newsletter %>
133
+ </div>
134
+ </div>
135
+ </div>
136
+
137
+ <div class="card">
138
+ <div class="card__content">
139
+ <div class="actions">
140
+ <%= f.submit t("devise.registrations.new.sign_up"), class: "button expanded" %>
141
+ </div>
142
+ <%= yield :devise_links %>
143
+ </div>
144
+ </div>
145
+ <% end %>
146
+ </div>
147
+ </div>
148
+ </div>
149
+ </div>
150
+ =======
151
+ <div class="row">
152
+ <div class="columns large-6 medium-10 medium-centered">
153
+
154
+ <%= decidim_form_for(@form, namespace: "registration", as: resource_name, url: registration_path(resource_name), html: { class: "register-form new_user", id: "register-form" }) do |f| %>
155
+ <%= invisible_captcha %>
156
+ <div class="card">
157
+ <div class="card__content">
158
+ <%= form_required_explanation %>
159
+
160
+ <div class="user-person">
161
+ <div class="field">
162
+ <%= f.text_field :name, help_text: t(".username_help"), autocomplete: "off" %>
163
+ </div>
164
+ </div>
165
+
166
+ <div class="user-nickname">
167
+ <div class="field">
168
+ <%= f.text_field :nickname, help_text: t(".nickname_help", organization: current_organization.name), prefix: { value: "@", small: 1, large: 1 }, autocomplete: "off" %>
169
+ </div>
170
+ </div>
171
+
172
+ <div class="field">
173
+ <%= f.email_field :email, autocomplete: "email" %>
174
+ </div>
175
+
176
+ <div class="user-password">
177
+ <div class="field">
178
+ <%= f.password_field :password, password_field_options_for(:user) %>
179
+ </div>
180
+ </div>
181
+
182
+ <div class="user-password-confirmation">
183
+ <div class="field">
184
+ <%= f.password_field :password_confirmation, password_field_options_for(:user).except(:help_text) %>
185
+ </div>
186
+ </div>
187
+ </div>
188
+ </div>
189
+
190
+ <div class="card" id="card__tos">
191
+ <div class="card__content">
192
+ <h3><%= t(".tos_title") %></h3>
193
+
194
+ <p class="tos-text">
195
+ <%= strip_tags(translated_attribute(terms_and_conditions_page.content)) %>
196
+ </p>
197
+
198
+ <div class="field">
199
+ <%= f.check_box :tos_agreement, label: t(".tos_agreement", link: link_to(t(".terms"), page_path("terms-and-conditions"))) %>
200
+ </div>
201
+ </div>
202
+ </div>
203
+
204
+ <div class="card" id="card__newsletter">
205
+ <div class="card__content">
206
+ <h3><%= t(".newsletter_title") %></h3>
207
+ <div class="field">
208
+ <%= f.check_box :newsletter, label: t(".newsletter"), checked: @form.newsletter %>
209
+ </div>
210
+ </div>
211
+ </div>
212
+
213
+ <div class="card">
214
+ <div class="card__content">
215
+ <div class="actions">
216
+ <%= f.submit t("devise.registrations.new.sign_up"), class: "button expanded" %>
217
+ </div>
218
+ <%= yield :devise_links %>
219
+ </div>
220
+ </div>
221
+ <% end %>
222
+ </div>
223
+ </div>
224
+ </div>
225
+ </div>
226
+ >>>>>>> 4e14afa36c (add password toggle via unobstructive javascript)
227
+ <%= render "decidim/devise/shared/newsletter_modal" %>
228
+
229
+ <% content_for :js_content do %>
230
+ <%= javascript_pack_tag "decidim_registrations" %>
231
+ <% end %>
File without changes
@@ -1482,7 +1482,7 @@ ar:
1482
1482
  index:
1483
1483
  add_max_users: 'يمكن إضافة مستخدمين إلى المحادثة: 9 مستخدمين كحد أقصى'
1484
1484
  add_users_placeholder: البحث…
1485
- close: غلق
1485
+ close: قريب
1486
1486
  conversations_info: المحادثات خاصة. لا يمكن لأحد آخر أن يراها. يمكن بدء محادثة مع أي مشارك أو مجموعة مسجلة على المنصة.
1487
1487
  from: من
1488
1488
  last_message: آخر رسالة
@@ -1503,7 +1503,7 @@ ar:
1503
1503
  back: عرض كافة المحادثات
1504
1504
  deleted_accounts: لا يمكن أن يكون لديك محادثة مع حسابات محذوفة.
1505
1505
  not_allowed: هذا المستخدم لم يعد يستقبل المزيد من الرسائل المباشرة.
1506
- title: محادثة مع %{usernames}
1506
+ title: المحادثة مع %{usernames}
1507
1507
  update:
1508
1508
  error: لم يتم إرسال الرسالة. حاول مرة أخرى في وقت لاحق
1509
1509
  user_interests:
@@ -1749,7 +1749,7 @@ ar:
1749
1749
  description: وصف
1750
1750
  name: اسم
1751
1751
  service: الخدمة
1752
- type: النوع
1752
+ type: نوع
1753
1753
  items:
1754
1754
  _session_id:
1755
1755
  description: يسمح للمواقع بتذكر المستخدم داخل الموقع عندما ينتقل بين صفحات الويب.
@@ -1327,6 +1327,10 @@ bg:
1327
1327
  timestamp_error_message: Извинете, това беше твърде бързо! Моля, изпратете отново.
1328
1328
  layouts:
1329
1329
  decidim:
1330
+ data_consent:
1331
+ details:
1332
+ columns:
1333
+ type: Тип
1330
1334
  edit_link:
1331
1335
  edit: Редактирай
1332
1336
  footer:
@@ -421,7 +421,7 @@ ca:
421
421
  request_confirmation_instructions: Sol·licita instruccions de confirmació
422
422
  title: Confirma el teu correu electrònic
423
423
  show:
424
- close_modal: Tanca modal
424
+ close_modal: Tancar el modal
425
425
  block_user_mailer:
426
426
  notify:
427
427
  body_1: El teu compte ha estat bloquejat.
@@ -557,7 +557,7 @@ ca:
557
557
  newsletter_modal:
558
558
  buttons:
559
559
  check: Marca i continua
560
- close_modal: Tanca modal
560
+ close_modal: Tancar el modal
561
561
  uncheck: Deixa desmarcada
562
562
  notice: |-
563
563
  <p>Hola, segur que no vols rebre un butlletí?<br>
@@ -975,7 +975,7 @@ ca:
975
975
  body_1: Estàs a punt de visitar un enllaç extern i et recomanem que siguis prudent pel que fa als continguts en pàgines externes.
976
976
  body_2: Assegura't que l'enllaç que visitaràs és d'un lloc segur abans de seguir.
977
977
  cancel: Cancel·lar
978
- close_modal: Tanca modal
978
+ close_modal: Tancar el modal
979
979
  proceed: Continuar
980
980
  title: Obrir enllaç extern
981
981
  log:
@@ -1068,7 +1068,7 @@ ca:
1068
1068
  ok: D'acord
1069
1069
  index:
1070
1070
  ago: fa
1071
- close: Tanca modal
1071
+ close: Tancar el modal
1072
1072
  from: De
1073
1073
  groups: Els meus grups
1074
1074
  last_message: Darrer missatge
@@ -1260,7 +1260,7 @@ ca:
1260
1260
  modal_btn_continue: Acceptar els termes i condicions d'ús, i continuar
1261
1261
  modal_btn_exit: Ho revisaré més tard
1262
1262
  modal_button: Rebutjar els termes i condicions d'ús
1263
- modal_close: Tanca modal
1263
+ modal_close: Tancar el modal
1264
1264
  modal_title: Confirmes que no acceptes els Termes i Condicions actualitzats?
1265
1265
  required_review:
1266
1266
  alert: Hem actualitzat els nostres Termes de Servei, si us plau revisa'ls.
@@ -1379,7 +1379,7 @@ ca:
1379
1379
  ok: D'acord
1380
1380
  title: Confirmar
1381
1381
  embed_modal:
1382
- close_window: Tanca la finestra
1382
+ close_window: Tancar finestra
1383
1383
  embed: Si us plau, enganxa aquest codi a la teva pàgina
1384
1384
  embed_link: Incrusta
1385
1385
  extended_navigation_bar:
@@ -1703,6 +1703,7 @@ ca:
1703
1703
  too_many_marks: Estàs fent servir massa signes de puntuació consecutius (p. ex. i?)
1704
1704
  too_much_caps: Estàs utilitzant massa lletres majúscules (més del 25% del text)
1705
1705
  too_short: és massa curt (menys %{count} caràcters)
1706
+ url_format: El format d'aquesta URL és incorrecte
1706
1707
  forms:
1707
1708
  correct_errors: Hi ha errors al formulari, si us plau corregeix-los per continuar.
1708
1709
  length_validator:
@@ -127,6 +127,21 @@ cs:
127
127
  few: "%{count} hodiny"
128
128
  many: "%{count} hodin"
129
129
  other: "%{count} hodin"
130
+ x_minutes:
131
+ one: 1 minuta
132
+ few: "%{count} minuty"
133
+ many: "%{count} minut"
134
+ other: "%{count} minut"
135
+ x_months:
136
+ one: 1 měsíc
137
+ few: "%{count} měsíce"
138
+ many: "%{count} měsíců"
139
+ other: "%{count} měsíců"
140
+ x_seconds:
141
+ one: 1 sekunda
142
+ few: "%{count} sekundy"
143
+ many: "%{count} sekund"
144
+ other: "%{count} sekund"
130
145
  decidim:
131
146
  accessibility:
132
147
  external_link: Externí odkaz
@@ -441,7 +456,7 @@ cs:
441
456
  request_confirmation_instructions: Požádejte o pokyny pro potvrzení
442
457
  title: Potvrdit svůj email
443
458
  show:
444
- close_modal: Zavřít okno
459
+ close_modal: Zavřít modální
445
460
  block_user_mailer:
446
461
  notify:
447
462
  body_1: Váš účet byl zablokován.
@@ -579,7 +594,7 @@ cs:
579
594
  newsletter_modal:
580
595
  buttons:
581
596
  check: Zkontrolujte a pokračujte
582
- close_modal: Zavřít okno
597
+ close_modal: Zavřít modální
583
598
  uncheck: Ponechat nezaškrtnuté
584
599
  notice: |-
585
600
  <p>Hej, jste si jisti, že nechcete dostávat zpravodaj?<br>
@@ -1003,7 +1018,7 @@ cs:
1003
1018
  body_1: Chystáte se navštívit externí odkaz a chtěli bychom, abyste byli opatrní, pokud jde o obsah na externím webu.
1004
1019
  body_2: Zkontrolujte prosím odkaz, který se chystáte navštívit, a než budete pokračovat, ujistěte se, že jste jej rozpoznali jako bezpečný web.
1005
1020
  cancel: Zrušit
1006
- close_modal: Zavřít okno
1021
+ close_modal: Zavřít modální
1007
1022
  proceed: Pokračovat
1008
1023
  title: Otevřít externí odkaz
1009
1024
  log:
@@ -1096,7 +1111,7 @@ cs:
1096
1111
  ok: OK
1097
1112
  index:
1098
1113
  ago: před
1099
- close: Zavřít okno
1114
+ close: Zavřít modální
1100
1115
  from: Od
1101
1116
  groups: Moje skupiny
1102
1117
  last_message: Poslední zpráva
@@ -1288,7 +1303,7 @@ cs:
1288
1303
  modal_btn_continue: Přijmout podmínky a pokračovat
1289
1304
  modal_btn_exit: Později to přezkoumám
1290
1305
  modal_button: Odmítnout podmínky
1291
- modal_close: Zavřít okno
1306
+ modal_close: Zavřít modální
1292
1307
  modal_title: Opravdu odmítáte aktualizované smluvní podmínky?
1293
1308
  required_review:
1294
1309
  alert: Aktualizovali jsme Smluvní podmínky, přečtěte si je.
@@ -1519,7 +1534,7 @@ cs:
1519
1534
  back: Zobrazit všechny konverzace
1520
1535
  deleted_accounts: Nemůžete mít konverzaci s odstraněnými účty.
1521
1536
  not_allowed: Tento uživatel již nepřijímá žádné přímé zprávy.
1522
- title: Konverzace s %{usernames}
1537
+ title: Konverzace s číslem %{usernames}
1523
1538
  update:
1524
1539
  error: Zpráva nebyla odeslána. Zkuste to později
1525
1540
  user_interests:
@@ -1559,7 +1574,7 @@ cs:
1559
1574
  version: Verze %{number}
1560
1575
  versions_list:
1561
1576
  show:
1562
- back_to_resource: Vrátit se zpět
1577
+ back_to_resource: Jít zpět
1563
1578
  changes_at_title: Změny v "%{title}"
1564
1579
  number_of_versions: Verze
1565
1580
  title: Verze
@@ -1738,6 +1753,7 @@ cs:
1738
1753
  too_many_marks: používá příliš mnoho po sobě jdoucích interpunkčních znamének (např.! a?)
1739
1754
  too_much_caps: používá příliš mnoho velkých písmen (více než 25% textu)
1740
1755
  too_short: je příliš krátká (pod %{count} znaků)
1756
+ url_format: Tato adresa URL je v nesprávném formátu
1741
1757
  forms:
1742
1758
  correct_errors: Na formuláři jsou chyby, opravte je a pokračujte.
1743
1759
  length_validator: