decidim-core 0.26.2 → 0.26.3

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 (70) hide show
  1. checksums.yaml +4 -4
  2. data/app/cells/decidim/content_blocks/cta/show.erb +1 -1
  3. data/app/cells/decidim/content_blocks/hero/show.erb +1 -1
  4. data/app/cells/decidim/content_blocks/highlighted_content_banner/show.erb +1 -1
  5. data/app/cells/decidim/content_blocks/stats_cell.rb +1 -0
  6. data/app/controllers/concerns/decidim/resource_versions_concern.rb +4 -0
  7. data/app/controllers/decidim/devise/registrations_controller.rb +1 -1
  8. data/app/events/decidim/resource_endorsed_event.rb +2 -1
  9. data/app/forms/decidim/account_form.rb +5 -4
  10. data/app/forms/decidim/registration_form.rb +8 -2
  11. data/app/helpers/decidim/filters_helper.rb +5 -1
  12. data/app/models/decidim/action_log.rb +9 -9
  13. data/app/models/decidim/user_base_entity.rb +1 -0
  14. data/app/packs/src/decidim/map/factory.js +3 -1
  15. data/app/packs/src/decidim/map/legacy.js +2 -2
  16. data/app/packs/src/decidim/map.js +2 -2
  17. data/app/packs/stylesheets/decidim/modules/_cards.scss +2 -0
  18. data/app/packs/stylesheets/decidim/modules/_comments.scss +2 -0
  19. data/app/packs/stylesheets/decidim/modules/_forms.scss +5 -0
  20. data/app/permissions/decidim/permissions.rb +4 -2
  21. data/app/presenters/decidim/user_presenter.rb +4 -1
  22. data/app/views/decidim/data_portability/show.html.erb +1 -1
  23. data/app/views/decidim/notifications_settings/show.html.erb +49 -51
  24. data/app/views/decidim/user_interests/show.html.erb +11 -13
  25. data/config/locales/ar.yml +0 -2
  26. data/config/locales/bg.yml +1 -1
  27. data/config/locales/ca.yml +4 -4
  28. data/config/locales/cs.yml +10 -10
  29. data/config/locales/de.yml +64 -3
  30. data/config/locales/es-MX.yml +3 -3
  31. data/config/locales/es-PY.yml +3 -3
  32. data/config/locales/es.yml +5 -5
  33. data/config/locales/eu.yml +4 -4
  34. data/config/locales/fr-CA.yml +2 -2
  35. data/config/locales/fr.yml +10 -10
  36. data/config/locales/ga-IE.yml +1 -1
  37. data/config/locales/gl.yml +0 -2
  38. data/config/locales/hu.yml +173 -1
  39. data/config/locales/id-ID.yml +0 -2
  40. data/config/locales/is-IS.yml +2 -1
  41. data/config/locales/it.yml +3 -3
  42. data/config/locales/ja.yml +2 -2
  43. data/config/locales/lb.yml +2 -2
  44. data/config/locales/lt.yml +1802 -0
  45. data/config/locales/nl.yml +3 -3
  46. data/config/locales/no.yml +1 -1
  47. data/config/locales/oc-FR.yml +1 -0
  48. data/config/locales/pl.yml +51 -2
  49. data/config/locales/pt-BR.yml +3 -3
  50. data/config/locales/pt.yml +2 -2
  51. data/config/locales/ro-RO.yml +1 -1
  52. data/config/locales/ru.yml +2 -3
  53. data/config/locales/sk.yml +1 -4
  54. data/config/locales/sv.yml +2 -1
  55. data/config/locales/tr-TR.yml +2 -2
  56. data/config/locales/uk.yml +1 -2
  57. data/config/locales/zh-CN.yml +2 -2
  58. data/lib/decidim/content_parsers/hashtag_parser.rb +1 -1
  59. data/lib/decidim/core/engine.rb +1 -1
  60. data/lib/decidim/core/test/shared_examples/resource_endorsed_event_examples.rb +60 -0
  61. data/lib/decidim/core/test/shared_examples/versions_controller_examples.rb +40 -0
  62. data/lib/decidim/core/test/shared_examples/with_endorsable_permissions_examples.rb +1 -1
  63. data/lib/decidim/core/test.rb +2 -0
  64. data/lib/decidim/core/version.rb +1 -1
  65. data/lib/decidim/events/simple_event.rb +8 -1
  66. data/lib/decidim/has_resource_permission.rb +0 -2
  67. data/lib/decidim/map/provider/dynamic_map/here.rb +46 -1
  68. data/lib/decidim/nicknamizable.rb +1 -1
  69. data/lib/decidim/translatable_attributes.rb +8 -1
  70. metadata +9 -6
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 18193603bd469c0ea5937875b577f4cc5439727b2ad1759e60ea725d029e18f1
4
- data.tar.gz: 91c95bec2cdc7af5ad17a5d5ccd165817516fbaf0ed46051c198d3b8b5b1321b
3
+ metadata.gz: 3cbd72f4c386bc8730dfa1d3958a691c5ed719b3cf43b15f778d2011ae5a7f0d
4
+ data.tar.gz: 32e72e8185fc2f28f0298ef2a9a0350cd8b436e1a39bda136fe82c9da5644433
5
5
  SHA512:
6
- metadata.gz: 71b39ec5cae4751ab21048ef686cd6b3704e8d5469d9ba608fcf163944ebf83fc100d1a47c59d4eae4b4c01af4d5074918113a8cf533151e954eb97defa14bf9
7
- data.tar.gz: 72011b7df988f022988d64892177f9f4b28338019152d0a2ce46f489696256acdcd095d0da83346e41d70cdeb72c72ef7e21c0e701b50a1d4b35a6de8c51840d
6
+ metadata.gz: 3d7a4d41fa9aeb76c68e21e5a486b8a3149d117a956c4d0ec17020db1abad1c8a8ce1316ba014a158bbb2fe254ebc0db4b4923a756d0f97997c06bb128c3e440
7
+ data.tar.gz: e282e746492e32a9e85edb4b72ede7804be3b5b7fd9567e49eac2ba6b9430f6d46da2596f044b87fa520fb4cde0e92259c40695837c87d6fb0943f2c244fa8e2
@@ -1,5 +1,5 @@
1
1
  <section class="section">
2
- <div class="expanded hero" style="background-image:url(<%= background_image %>);">
2
+ <div class="expanded hero" style="background-image:url('<%= background_image %>');">
3
3
  <div class="hero__container">
4
4
  <div class="row">
5
5
  <div class="columns small-centered medium-6 text-center">
@@ -1,4 +1,4 @@
1
- <section class="extended hero home-section" style="background-image:url(<%= background_image %>);">
1
+ <section class="extended hero home-section" style="background-image:url('<%= background_image %>');">
2
2
  <div class="hero__container">
3
3
  <div class="row">
4
4
  <div class="columns small-centered large-10">
@@ -1,5 +1,5 @@
1
1
  <section class="extended highligted-content-banner home-section"
2
- style="background-image:url(<%= current_organization.attached_uploader(:highlighted_content_banner_image).path %>);">
2
+ style="background-image:url('<%= current_organization.attached_uploader(:highlighted_content_banner_image).path %>');">
3
3
  <div class="highligted-content-banner__container">
4
4
  <div class="row">
5
5
  <div class="columns large-10">
@@ -16,6 +16,7 @@ module Decidim
16
16
  def cache_hash
17
17
  hash = []
18
18
  hash.push(I18n.locale)
19
+ hash.push(current_organization.cache_key)
19
20
  hash.join(Decidim.cache_key_separator)
20
21
  end
21
22
  end
@@ -10,6 +10,10 @@ module Decidim
10
10
  helper Decidim::TraceabilityHelper
11
11
  helper_method :current_version, :versioned_resource
12
12
 
13
+ def show
14
+ raise ActionController::RoutingError, "Not found" unless current_version
15
+ end
16
+
13
17
  private
14
18
 
15
19
  # Overwrite this method in your controller to define how to find the
@@ -37,7 +37,7 @@ module Decidim
37
37
  end
38
38
 
39
39
  on(:invalid) do
40
- flash.now[:alert] = @form.errors[:base].join(", ") if @form.errors[:base].any?
40
+ flash.now[:alert] = @form.errors.full_messages.join(", ") if @form.errors.full_messages.any?
41
41
  render :new
42
42
  end
43
43
  end
@@ -15,7 +15,8 @@ module Decidim
15
15
  end
16
16
 
17
17
  def resource_text
18
- resource.body
18
+ return resource.body if resource.respond_to? :body
19
+ return resource.description if resource.respond_to? :description
19
20
  end
20
21
 
21
22
  def resource_type
@@ -50,7 +50,7 @@ module Decidim
50
50
  end
51
51
 
52
52
  def unique_email
53
- return true if Decidim::User.where(
53
+ return true if Decidim::UserBaseEntity.where(
54
54
  organization: context.current_organization,
55
55
  email: email
56
56
  ).where.not(id: context.current_user.id).empty?
@@ -60,9 +60,10 @@ module Decidim
60
60
  end
61
61
 
62
62
  def unique_nickname
63
- return true if Decidim::User.where(
64
- organization: context.current_organization,
65
- nickname: nickname
63
+ return true if Decidim::UserBaseEntity.where(
64
+ "decidim_organization_id = ? AND LOWER(nickname) = ? ",
65
+ context.current_organization.id,
66
+ nickname.downcase
66
67
  ).where.not(id: context.current_user.id).empty?
67
68
 
68
69
  errors.add :nickname, :taken
@@ -35,11 +35,17 @@ module Decidim
35
35
  private
36
36
 
37
37
  def email_unique_in_organization
38
- errors.add :email, :taken if User.no_active_invitation.find_by(email: email, organization: current_organization).present?
38
+ errors.add :email, :taken if valid_users.find_by(email: email, organization: current_organization).present?
39
39
  end
40
40
 
41
41
  def nickname_unique_in_organization
42
- errors.add :nickname, :taken if User.no_active_invitation.find_by(nickname: nickname, organization: current_organization).present?
42
+ return false unless nickname
43
+
44
+ errors.add :nickname, :taken if valid_users.find_by("LOWER(nickname)= ? AND decidim_organization_id = ?", nickname.downcase, current_organization.id).present?
45
+ end
46
+
47
+ def valid_users
48
+ UserBaseEntity.where(invitation_token: nil)
43
49
  end
44
50
 
45
51
  def no_pending_invitations_exist
@@ -24,7 +24,11 @@ module Decidim
24
24
  remote: true,
25
25
  html: { id: nil }.merge(html_options)
26
26
  ) do |form|
27
- yield form
27
+ # Cannot use `concat()` here because it's not available in cells
28
+ inner = []
29
+ inner << hidden_field_tag("per_page", params[:per_page], id: nil) if params[:per_page]
30
+ inner << capture { yield form }
31
+ inner.join.html_safe
28
32
  end
29
33
  end
30
34
  end
@@ -130,16 +130,16 @@ module Decidim
130
130
  end
131
131
 
132
132
  # Whether this activity or log is visible for a given user (can also be nil)
133
- #
134
- # Returns a True/False.
135
133
  def visible_for?(user)
136
- return false if resource_lazy.blank?
137
- return false if participatory_space_lazy.blank?
138
- return false if resource_lazy.respond_to?(:deleted?) && resource_lazy.deleted?
139
- return false if resource_lazy.respond_to?(:hidden?) && resource_lazy.hidden?
140
- return false if resource_lazy.respond_to?(:can_participate?) && !resource_lazy.can_participate?(user)
141
-
142
- true
134
+ resource_lazy.present? &&
135
+ participatory_space_lazy.present? &&
136
+ !resource_lazy.try(:deleted?) &&
137
+ !resource_lazy.try(:hidden?) &&
138
+ (!resource_lazy.respond_to?(:can_participate?) || resource_lazy.try(:can_participate?, user))
139
+ rescue NameError => e
140
+ Rails.logger.warn "Failed resource for #{self.class.name}(id=#{id}): #{e.message}"
141
+
142
+ false
143
143
  end
144
144
  end
145
145
  end
@@ -30,6 +30,7 @@ module Decidim
30
30
 
31
31
  scope :blocked, -> { where(blocked: true) }
32
32
  scope :not_blocked, -> { where(blocked: false) }
33
+ scope :available, -> { where(deleted_at: nil, blocked: false, managed: false) }
33
34
 
34
35
  # Public: Returns a collection with all the public entities this user is following.
35
36
  #
@@ -33,7 +33,7 @@ import MapDragMarkerController from "src/decidim/map/controller/drag_marker"
33
33
  * @param {Object} config The map configuration object.
34
34
  * @returns {MapController} The controller for the map.
35
35
  */
36
- export default function createMapController(mapId, config) {
36
+ const createMapController = function(mapId, config) {
37
37
  if (config.type === "static") {
38
38
  return new MapStaticController(mapId, config);
39
39
  } else if (config.type === "drag-marker") {
@@ -42,3 +42,5 @@ export default function createMapController(mapId, config) {
42
42
 
43
43
  return new MapMarkersController(mapId, config);
44
44
  }
45
+
46
+ window.Decidim.createMapController = createMapController;
@@ -1,7 +1,7 @@
1
1
  /* eslint-disable require-jsdoc */
2
2
 
3
3
  import * as L from "leaflet";
4
- import createMapController from "src/decidim/map/factory"
4
+ import "src/decidim/map/factory"
5
5
 
6
6
  /**
7
7
  * @deprecated
@@ -60,7 +60,7 @@ const loadMap = (mapId, markersData) => {
60
60
  legacyMapSupport($map);
61
61
 
62
62
  const mapData = $map.data("decidim-map");
63
- const ctrl = createMapController(mapId, mapData);
63
+ const ctrl = window.Decidim.createMapController(mapId, mapData);
64
64
  const map = ctrl.load();
65
65
 
66
66
  L.tileLayer.here(mapData.tileLayer).addTo(map);
@@ -1,4 +1,4 @@
1
- import createMapController from "src/decidim/map/factory"
1
+ import "src/decidim/map/factory"
2
2
 
3
3
  $(() => {
4
4
  // Load the map controller factory method in the document.ready handler to
@@ -20,7 +20,7 @@ $(() => {
20
20
  }
21
21
 
22
22
  const mapConfig = $map.data("decidim-map");
23
- const ctrl = createMapController(mapId, mapConfig);
23
+ const ctrl = window.Decidim.createMapController(mapId, mapConfig);
24
24
  const map = ctrl.load();
25
25
 
26
26
  $map.data("map", map);
@@ -30,6 +30,8 @@ $datetime-bg: var(--primary);
30
30
  border-radius: $card-border-radius;
31
31
  // Keep visible for accessibility (active/focused card as a link)
32
32
  overflow: visible;
33
+ overflow-wrap: break-word;
34
+ hyphens: auto;
33
35
 
34
36
  @include modifiers(
35
37
  border-top-color,
@@ -80,6 +80,8 @@ $comment-form-bg: $light-gray;
80
80
 
81
81
  .comment__content{
82
82
  padding: 0 $comment-padding;
83
+ overflow-wrap: break-word;
84
+ hyphens: auto;
83
85
 
84
86
  > :last-child{
85
87
  margin-bottom: 0;
@@ -77,6 +77,11 @@ label > [type="radio"]{
77
77
  margin-right: 1rem;
78
78
  flex-shrink: 0;
79
79
  }
80
+
81
+ &,
82
+ &.tiny{
83
+ height: auto;
84
+ }
80
85
  }
81
86
 
82
87
  .switch{
@@ -116,9 +116,11 @@ module Decidim
116
116
  end
117
117
 
118
118
  def apply_endorsement_permissions
119
- return disallow! if !current_settings.endorsements_enabled || current_settings.endorsements_blocked
119
+ is_allowed = current_settings.endorsements_enabled &&
120
+ !current_settings.endorsements_blocked &&
121
+ authorized?(:endorse, resource: context.fetch(:resource, nil))
120
122
 
121
- allow!
123
+ toggle_allow(is_allowed)
122
124
  end
123
125
 
124
126
  def notification_action?
@@ -13,6 +13,8 @@ module Decidim
13
13
  # nickname presented in a twitter-like style
14
14
  #
15
15
  def nickname
16
+ return "" if __getobj__.blocked?
17
+
16
18
  "@#{__getobj__.nickname}"
17
19
  end
18
20
 
@@ -33,13 +35,14 @@ module Decidim
33
35
  end
34
36
 
35
37
  def avatar_url(variant = nil)
38
+ return default_avatar_url if __getobj__.blocked?
36
39
  return avatar.default_url unless avatar.attached?
37
40
 
38
41
  avatar.path(variant: variant)
39
42
  end
40
43
 
41
44
  def default_avatar_url
42
- attached_uploader.default_url
45
+ attached_uploader(:avatar).default_url
43
46
  end
44
47
 
45
48
  def profile_path
@@ -1,7 +1,7 @@
1
1
  <% add_decidim_page_title(t("my_data", scope: "layouts.decidim.user_profile")) %>
2
2
  <% content_for(:subtitle) { t("my_data", scope: "layouts.decidim.user_profile") } %>
3
3
 
4
- <div class="row data-portability">
4
+ <div class="data-portability">
5
5
  <strong><%= t(".download_data") %></strong>
6
6
  <p><%= t(".download_data_description", user_email: current_user.email).html_safe %></p>
7
7
  <%= button_to t(".request_data"), export_data_portability_path, class: "button", data: { disable: true } %>
@@ -1,62 +1,60 @@
1
1
  <% add_decidim_page_title(t("notifications_settings", scope: "layouts.decidim.user_profile")) %>
2
2
  <% content_for(:subtitle) { t("notifications_settings", scope: "layouts.decidim.user_profile") } %>
3
3
 
4
- <div class="row">
5
- <%= form_for(@notifications_settings, url: notifications_settings_path, method: :put, class: "user-form") do |f| %>
6
- <p><strong><%= t(".receive_notifications_about") %></strong></p>
7
- <div class="switch tiny switch-with-label notifications_from_own_activity">
8
- <%= f.label :notifications_from_own_activity do %>
9
- <%= f.check_box :notifications_from_own_activity, label: false, class: "switch-input" %>
10
- <span class="switch-paddle"></span>
11
- <span class="switch-label"><%= t(".own_activity") %></span>
12
- <% end %>
13
- </div>
14
- <div class="switch tiny switch-with-label notifications_from_followed">
15
- <%= f.label :notifications_from_followed do %>
16
- <%= f.check_box :notifications_from_followed, label: false, class: "switch-input" %>
17
- <span class="switch-paddle"></span>
18
- <span class="switch-label"><%= t(".everything_followed") %></span>
19
- <% end %>
20
- </div>
4
+ <%= form_for(@notifications_settings, url: notifications_settings_path, method: :put, class: "user-form") do |f| %>
5
+ <p><strong><%= t(".receive_notifications_about") %></strong></p>
6
+ <div class="switch tiny switch-with-label notifications_from_own_activity">
7
+ <%= f.label :notifications_from_own_activity do %>
8
+ <%= f.check_box :notifications_from_own_activity, label: false, class: "switch-input" %>
9
+ <span class="switch-paddle"></span>
10
+ <span class="switch-label"><%= t(".own_activity") %></span>
11
+ <% end %>
12
+ </div>
13
+ <div class="switch tiny switch-with-label notifications_from_followed">
14
+ <%= f.label :notifications_from_followed do %>
15
+ <%= f.check_box :notifications_from_followed, label: false, class: "switch-input" %>
16
+ <span class="switch-paddle"></span>
17
+ <span class="switch-label"><%= t(".everything_followed") %></span>
18
+ <% end %>
19
+ </div>
21
20
 
22
- <p><strong><%= t(".send_notifications_by_email") %></strong></p>
23
- <div class="switch tiny switch-with-label email_on_notification">
24
- <%= f.label :email_on_notification do %>
25
- <%= f.check_box :email_on_notification, label: false, class: "switch-input" %>
26
- <span class="switch-paddle"></span>
27
- <span class="switch-label"><%= t(".email_on_notification") %></span>
28
- <% end %>
29
- </div>
21
+ <p><strong><%= t(".send_notifications_by_email") %></strong></p>
22
+ <div class="switch tiny switch-with-label email_on_notification">
23
+ <%= f.label :email_on_notification do %>
24
+ <%= f.check_box :email_on_notification, label: false, class: "switch-input" %>
25
+ <span class="switch-paddle"></span>
26
+ <span class="switch-label"><%= t(".email_on_notification") %></span>
27
+ <% end %>
28
+ </div>
30
29
 
31
- <p><strong><%= t(".newsletters") %></strong></p>
32
- <div class="switch tiny switch-with-label newsletter_notifications">
33
- <label>
34
- <%= f.check_box :newsletter_notifications, label: false, class: "switch-input" %>
35
- <span class="switch-paddle"></span>
36
- <span class="switch-label"><%= t(".newsletter_notifications") %></span>
37
- </label>
38
- </div>
30
+ <p><strong><%= t(".newsletters") %></strong></p>
31
+ <div class="switch tiny switch-with-label newsletter_notifications">
32
+ <label>
33
+ <%= f.check_box :newsletter_notifications, label: false, class: "switch-input" %>
34
+ <span class="switch-paddle"></span>
35
+ <span class="switch-label"><%= t(".newsletter_notifications") %></span>
36
+ </label>
37
+ </div>
38
+
39
+ <p><strong><%= t(".direct_messages") %></strong></p>
40
+ <div class="switch tiny switch-with-label allow_public_contact">
41
+ <label>
42
+ <%= f.check_box :allow_public_contact, label: false, class: "switch-input" %>
43
+ <span class="switch-paddle"></span>
44
+ <span class="switch-label"><%= t(".allow_public_contact") %></span>
45
+ </label>
46
+ </div>
39
47
 
40
- <p><strong><%= t(".direct_messages") %></strong></p>
41
- <div class="switch tiny switch-with-label allow_public_contact">
48
+ <% if @notifications_settings.user_is_moderator?(current_user) %>
49
+ <p><strong><%= t(".administrators") %></strong></p>
50
+ <div class="switch tiny switch-with-label email_on_moderations">
42
51
  <label>
43
- <%= f.check_box :allow_public_contact, label: false, class: "switch-input" %>
52
+ <%= f.check_box :email_on_moderations, label: false, class: "switch-input" %>
44
53
  <span class="switch-paddle"></span>
45
- <span class="switch-label"><%= t(".allow_public_contact") %></span>
54
+ <span class="switch-label"><%= t(".email_on_moderations") %></span>
46
55
  </label>
47
56
  </div>
48
-
49
- <% if @notifications_settings.user_is_moderator?(current_user) %>
50
- <p><strong><%= t(".administrators") %></strong></p>
51
- <div class="switch tiny switch-with-label email_on_moderations">
52
- <label>
53
- <%= f.check_box :email_on_moderations, label: false, class: "switch-input" %>
54
- <span class="switch-paddle"></span>
55
- <span class="switch-label"><%= t(".email_on_moderations") %></span>
56
- </label>
57
- </div>
58
- <% end %>
59
-
60
- <%= f.submit t(".update_notifications_settings") %>
61
57
  <% end %>
62
- </div>
58
+
59
+ <%= f.submit t(".update_notifications_settings") %>
60
+ <% end %>
@@ -1,17 +1,15 @@
1
1
  <% add_decidim_page_title(t("my_interests", scope: "layouts.decidim.user_profile")) %>
2
2
  <% content_for(:subtitle) { t("my_interests", scope: "layouts.decidim.user_profile") } %>
3
3
 
4
- <div class="row">
5
- <p><%= t(".select_your_interests") %></p>
6
- <%= form_for(@user_interests, url: user_interests_path, method: :put, class: "user-form") do |f| %>
7
- <p><strong><%= t(".my_interests") %></strong></p>
8
- <% if @user_interests.scopes.any? %>
9
- <div class="clearfix m-bottom">
10
- <%= render partial: "scopes", locals: { scopes: @user_interests.scopes, f: f } %>
11
- </div>
12
- <%= f.submit t(".update_my_interests") %>
13
- <% else %>
14
- <p><%= t(".no_scopes") %></p>
15
- <% end %>
4
+ <p><%= t(".select_your_interests") %></p>
5
+ <%= form_for(@user_interests, url: user_interests_path, method: :put, class: "user-form") do |f| %>
6
+ <p><strong><%= t(".my_interests") %></strong></p>
7
+ <% if @user_interests.scopes.any? %>
8
+ <div class="clearfix m-bottom">
9
+ <%= render partial: "scopes", locals: { scopes: @user_interests.scopes, f: f } %>
10
+ </div>
11
+ <%= f.submit t(".update_my_interests") %>
12
+ <% else %>
13
+ <p><%= t(".no_scopes") %></p>
16
14
  <% end %>
17
- </div>
15
+ <% end %>
@@ -804,12 +804,10 @@ ar:
804
804
  title: المحادثات
805
805
  reply:
806
806
  send: إرسال
807
- title: رد
808
807
  show:
809
808
  title: المحادثة مع %{usernames}
810
809
  start:
811
810
  send: إرسال
812
- title: بدء محادثة
813
811
  metrics:
814
812
  followers:
815
813
  description: عدد المشاركين الذين يتبعون مساحة المشاركة هذه
@@ -851,7 +851,7 @@ bg:
851
851
  title: Разговор с %{usernames}
852
852
  start:
853
853
  send: Изпрати
854
- title: Започнете разговор
854
+ title: Започни разговор
855
855
  metrics:
856
856
  followers:
857
857
  description: Брой участници, които следват това пространство
@@ -1009,7 +1009,7 @@ ca:
1009
1009
  reply:
1010
1010
  placeholder: La teva resposta...
1011
1011
  send: Enviar
1012
- title: Respon
1012
+ title: Respondre
1013
1013
  show:
1014
1014
  back: Tornar a totes les converses
1015
1015
  chat_with: Conversa amb
@@ -1018,7 +1018,7 @@ ca:
1018
1018
  title: Conversa amb %{usernames}
1019
1019
  start:
1020
1020
  send: Enviar
1021
- title: Comença una conversa
1021
+ title: Iniciar una conversa
1022
1022
  update:
1023
1023
  error: El missatge no ha estat enviat degut a un error
1024
1024
  metrics:
@@ -1545,7 +1545,7 @@ ca:
1545
1545
  registrations:
1546
1546
  destroyed: El teu compte s'ha cancel·lat correctament. Esperem tornar-te a veure aviat.
1547
1547
  edit:
1548
- are_you_sure: Estàs segura?
1548
+ are_you_sure: Estàs segur?
1549
1549
  cancel_my_account: Cancel·lar el meu compte
1550
1550
  currently_waiting_confirmation_for_email: 'Estem esperant la confirmació per a: %{email}'
1551
1551
  leave_blank_if_you_don_t_want_to_change_it: Deixa-ho en blanc si no vols canviar-lo
@@ -1681,7 +1681,7 @@ ca:
1681
1681
  see_more: Veure més
1682
1682
  locale:
1683
1683
  name: Català
1684
- name_with_error: Anglès (error!)
1684
+ name_with_error: Català (error!)
1685
1685
  password_validator:
1686
1686
  blacklisted: a la llista negra
1687
1687
  domain_included_in_password: és massa semblant a aquest nom de domini
@@ -523,7 +523,7 @@ cs:
523
523
  newsletter: Chci dostávat příležitostný zpravodaj s relevantními informacemi
524
524
  newsletter_title: Povolení kontaktu
525
525
  nickname_help: Váš alias v %{organization}. Může obsahovat pouze písmena, číslice, '-' a '_'.
526
- password_help: "%{minimun_characters} minimum znaků, nesmí být příliš běžné (např. 123456) a musí být jiné než vaše přezdívka a váš e-mail."
526
+ password_help: "%{minimun_characters} je minimum znaků, nesmí být příliš běžné (např. 123456) a musí být jiné než vaše přezdívka a váš e-mail."
527
527
  sign_in: Přihlásit se
528
528
  sign_up: Zaregistrovat se
529
529
  sign_up_as:
@@ -750,7 +750,7 @@ cs:
750
750
  click_button: 'Klikněte na následující odkaz pro stažení vašich dat.<br/>Soubor bude k dispozici do %{date}.<br/>Budete potřebovat <a href="https://www.7-zip.org/">7-Zip</a> (pro Windows), <a href="https://www.keka.io/en/">Keka</a> (pro MacOS) nebo <a href="https://peazip.github.io">PeaZip</a> (pro Linux) pro jeho otevření. Heslo: %{password}'
751
751
  download: Stažení
752
752
  export:
753
- ready: V příloze naleznete exportovanou exportovanou verzi.
753
+ ready: V příloze naleznete zazipovanou verzi vašeho exportu.
754
754
  subject: Váš export "%{name}" je připraven
755
755
  filters:
756
756
  linked_classes:
@@ -969,7 +969,7 @@ cs:
969
969
  scope_type_presenter:
970
970
  not_found: 'Typ oboru nebyl nalezen v databázi (ID: %{id})'
971
971
  managed_users:
972
- expired_session: Aktuální platnost sesouhlasení již vypršela.
972
+ expired_session: Aktuální relace správy účastníka vypršela.
973
973
  map:
974
974
  dynamic:
975
975
  screen_reader_explanation: Následující prvek je mapa, která prezentuje položky na této stránce jako mapové body. Prvek lze použít s čtečkou obrazovky, ale může být těžko srozumitelný.
@@ -1048,7 +1048,7 @@ cs:
1048
1048
  reply:
1049
1049
  placeholder: Vaše odpověď...
1050
1050
  send: Poslat
1051
- title: Odpověď
1051
+ title: Odpovědět
1052
1052
  show:
1053
1053
  back: Zpět ke všem konverzacím
1054
1054
  chat_with: Konverzace s
@@ -1057,7 +1057,7 @@ cs:
1057
1057
  title: Konverzace s číslem %{usernames}
1058
1058
  start:
1059
1059
  send: Poslat
1060
- title: Spusťte konverzaci
1060
+ title: Zahájit konverzaci
1061
1061
  update:
1062
1062
  error: Zpráva nebyla odeslána z důvodu chyby
1063
1063
  metrics:
@@ -1110,7 +1110,7 @@ cs:
1110
1110
  unathorized: Je nám líto, tento odkaz již není k dispozici
1111
1111
  update:
1112
1112
  error: Došlo k chybě
1113
- success: Nastavení Newsletteru bylo úspěšně aktualizováno
1113
+ success: Nastavení Zpravodaje bylo úspěšně aktualizováno
1114
1114
  newsletters_opt_in_mailer:
1115
1115
  notify:
1116
1116
  body_1: Zpracování osobních údajů a jejich ochrana jsou pro nás všechny stále důležitější. S novým obecným nařízením o ochraně osobních údajů (GDPR) ze dne 25. května 2018 mají jednotlivci lepší kontrolu nad svými osobními údaji. Z tohoto důvodu potřebujeme vaše "OK" pro pokračování v zasílání relevantních informací o aktivitách %{organization_name}.
@@ -1236,7 +1236,7 @@ cs:
1236
1236
  info: Odznaky jsou získávány prováděním konkrétní činnosti v platformě.
1237
1237
  title: Odznaky
1238
1238
  user:
1239
- confirmation_instructions_sent: Byly odeslány pokyny pro potvrzení e-mailu
1239
+ confirmation_instructions_sent: Pokyny pro potvrzení e-mailu byly odeslány
1240
1240
  create_user_group: Vytvořit skupinu
1241
1241
  edit_profile: Editovat profil
1242
1242
  edit_user_group: Upravit profil skupiny
@@ -1246,7 +1246,7 @@ cs:
1246
1246
  leave_user_group: Opustit skupinu
1247
1247
  manage_user_group_admins: Správa administrátorů
1248
1248
  manage_user_group_users: Správa členů
1249
- resend_email_confirmation_instructions: Opakujte e-mailové pokyny k potvrzení
1249
+ resend_email_confirmation_instructions: Znovu odeslat pokyny pro potvrzení e-mailu
1250
1250
  reported_mailer:
1251
1251
  hide:
1252
1252
  hello: Zdravím %{name},
@@ -1276,7 +1276,7 @@ cs:
1276
1276
  scopes:
1277
1277
  global: Globální oblast působnosti
1278
1278
  picker:
1279
- cancel: zrušení
1279
+ cancel: Zrušit
1280
1280
  change: Změnit vybraný rozsah
1281
1281
  choose: Vybrat
1282
1282
  currently_selected: Aktuálně vybraný rozsah
@@ -1729,7 +1729,7 @@ cs:
1729
1729
  see_more: Vidět víc
1730
1730
  locale:
1731
1731
  name: Čeština
1732
- name_with_error: Čeština
1732
+ name_with_error: Čeština (chyba!)
1733
1733
  password_validator:
1734
1734
  blacklisted: je na černé listině
1735
1735
  domain_included_in_password: je příliš podobné tomuto názvu domény