decidim-core 0.27.4 → 0.27.6

Sign up to get free protection for your applications and to get access to all the features.
Files changed (168) hide show
  1. checksums.yaml +4 -4
  2. data/app/cells/decidim/activity_cell.rb +2 -2
  3. data/app/cells/decidim/card_cell.rb +2 -2
  4. data/app/cells/decidim/card_m/top.erb +1 -1
  5. data/app/cells/decidim/card_m_cell.rb +1 -1
  6. data/app/cells/decidim/scopes_picker/scope_picker_values.erb +1 -1
  7. data/app/cells/decidim/tags_cell.rb +3 -1
  8. data/app/cells/decidim/upload_modal/modal.erb +4 -1
  9. data/app/cells/decidim/upload_modal_cell.rb +8 -4
  10. data/app/cells/decidim/user_profile_cell.rb +1 -1
  11. data/app/cells/decidim/version_cell.rb +1 -1
  12. data/app/cells/decidim/versions_list_cell.rb +1 -1
  13. data/app/commands/decidim/create_omniauth_registration.rb +2 -4
  14. data/app/commands/decidim/endorse_resource.rb +2 -0
  15. data/app/commands/decidim/messaging/reply_to_conversation.rb +3 -0
  16. data/app/commands/decidim/messaging/start_conversation.rb +3 -0
  17. data/app/commands/decidim/search.rb +1 -1
  18. data/app/commands/decidim/unendorse_resource.rb +1 -1
  19. data/app/controllers/concerns/decidim/devise_authentication_methods.rb +36 -0
  20. data/app/controllers/concerns/decidim/force_authentication.rb +6 -2
  21. data/app/controllers/concerns/decidim/paginable.rb +1 -1
  22. data/app/controllers/decidim/devise/omniauth_registrations_controller.rb +1 -22
  23. data/app/controllers/decidim/devise/registrations_controller.rb +1 -1
  24. data/app/controllers/decidim/devise/sessions_controller.rb +1 -24
  25. data/app/controllers/decidim/links_controller.rb +1 -1
  26. data/app/controllers/decidim/searches_controller.rb +1 -1
  27. data/app/controllers/decidim/user_timeline_controller.rb +1 -1
  28. data/app/controllers/decidim/widgets_controller.rb +6 -0
  29. data/app/events/decidim/welcome_notification_event.rb +6 -9
  30. data/app/forms/decidim/account_form.rb +1 -1
  31. data/app/forms/decidim/notifications_settings_form.rb +0 -8
  32. data/app/forms/decidim/registration_form.rb +1 -1
  33. data/app/helpers/decidim/cells_paginate_helper.rb +1 -1
  34. data/app/helpers/decidim/check_boxes_tree_helper.rb +4 -4
  35. data/app/helpers/decidim/decidim_form_helper.rb +1 -0
  36. data/app/helpers/decidim/newsletters_helper.rb +83 -16
  37. data/app/helpers/decidim/omniauth_helper.rb +2 -0
  38. data/app/helpers/decidim/resource_helper.rb +3 -1
  39. data/app/helpers/decidim/sanitize_helper.rb +9 -0
  40. data/app/helpers/decidim/short_link_helper.rb +1 -1
  41. data/app/helpers/decidim/user_profile_helper.rb +7 -2
  42. data/app/jobs/decidim/download_your_data_export_job.rb +2 -1
  43. data/app/jobs/decidim/open_data_job.rb +2 -0
  44. data/app/mailers/decidim/messaging/conversation_mailer.rb +3 -72
  45. data/app/models/decidim/push_notification_message.rb +39 -0
  46. data/app/models/decidim/user.rb +9 -1
  47. data/app/packs/images/decidim/icons.svg +1 -1
  48. data/app/packs/images/decidim/vendor/social-share-button/x.svg +6 -0
  49. data/app/packs/src/decidim/autocomplete.js +11 -2
  50. data/app/packs/src/decidim/data_picker.js +1 -0
  51. data/app/packs/src/decidim/direct_uploads/upload_field.js +6 -4
  52. data/app/packs/src/decidim/direct_uploads/upload_modal.js +10 -8
  53. data/app/packs/src/decidim/direct_uploads/uploader.js +4 -1
  54. data/app/packs/src/decidim/geocoding/attach_input.js +4 -1
  55. data/app/packs/src/decidim/geocoding/provider/here.js +17 -21
  56. data/app/packs/src/decidim/geocoding/provider/photon.js +1 -1
  57. data/app/packs/src/decidim/input_hashtags.js +1 -1
  58. data/app/packs/src/decidim/input_mentions.js +1 -1
  59. data/app/packs/src/decidim/input_multiple_mentions.js +1 -1
  60. data/app/packs/src/decidim/utilities/text.js +17 -0
  61. data/app/packs/src/decidim/vizzs/index.js +1 -1
  62. data/app/packs/stylesheets/decidim/_variables.scss +1 -1
  63. data/app/packs/stylesheets/decidim/plugins/leaflet.scss +118 -114
  64. data/app/packs/stylesheets/decidim/vendor/_social_share_button.scss +4 -0
  65. data/app/presenters/decidim/admin_log/oauth_application_resource_presenter.rb +1 -1
  66. data/app/presenters/decidim/notification_to_mailer_presenter.rb +9 -0
  67. data/app/services/decidim/events_manager.rb +6 -0
  68. data/app/services/decidim/push_notification_message_sender.rb +36 -0
  69. data/app/services/decidim/send_push_notification.rb +22 -8
  70. data/app/views/decidim/devise/registrations/new.html.erb +2 -2
  71. data/app/views/decidim/notifications_digest_mailer/_email_content.html.erb +7 -0
  72. data/app/views/decidim/notifications_settings/show.html.erb +1 -1
  73. data/app/views/decidim/scopes/_scopes_picker_input.html.erb +1 -1
  74. data/app/views/decidim/searches/_filters.html.erb +3 -1
  75. data/app/views/decidim/shared/_address_details.html.erb +2 -2
  76. data/app/views/decidim/shared/_share_modal.html.erb +1 -1
  77. data/app/views/decidim/shared/participatory_space_filters/_filters.html.erb +1 -1
  78. data/app/views/layouts/decidim/_js_configuration.html.erb +1 -0
  79. data/app/views/layouts/decidim/_social_media_links.html.erb +2 -2
  80. data/config/locales/ar.yml +12 -16
  81. data/config/locales/bg.yml +77 -15
  82. data/config/locales/ca.yml +34 -30
  83. data/config/locales/cs.yml +18 -14
  84. data/config/locales/de.yml +62 -58
  85. data/config/locales/el.yml +11 -16
  86. data/config/locales/en.yml +5 -1
  87. data/config/locales/eo.yml +2 -3
  88. data/config/locales/es-MX.yml +15 -11
  89. data/config/locales/es-PY.yml +15 -11
  90. data/config/locales/es.yml +30 -26
  91. data/config/locales/eu.yml +500 -342
  92. data/config/locales/fi-plain.yml +7 -3
  93. data/config/locales/fi.yml +21 -17
  94. data/config/locales/fr-CA.yml +17 -13
  95. data/config/locales/fr.yml +12 -8
  96. data/config/locales/ga-IE.yml +5 -5
  97. data/config/locales/gl.yml +5 -19
  98. data/config/locales/he-IL.yml +1 -0
  99. data/config/locales/hu.yml +63 -23
  100. data/config/locales/id-ID.yml +4 -19
  101. data/config/locales/is-IS.yml +4 -2
  102. data/config/locales/it.yml +15 -17
  103. data/config/locales/ja.yml +26 -22
  104. data/config/locales/lb.yml +15 -17
  105. data/config/locales/lt.yml +55 -10
  106. data/config/locales/lv.yml +4 -16
  107. data/config/locales/nl.yml +12 -12
  108. data/config/locales/no.yml +8 -10
  109. data/config/locales/pl.yml +151 -1
  110. data/config/locales/pt-BR.yml +267 -22
  111. data/config/locales/pt.yml +8 -10
  112. data/config/locales/ro-RO.yml +4 -10
  113. data/config/locales/ru.yml +13 -17
  114. data/config/locales/sk.yml +7 -17
  115. data/config/locales/sl.yml +0 -5
  116. data/config/locales/sq-AL.yml +1 -0
  117. data/config/locales/sv.yml +55 -17
  118. data/config/locales/th-TH.yml +1 -0
  119. data/config/locales/tr-TR.yml +18 -15
  120. data/config/locales/uk.yml +17 -14
  121. data/config/locales/zh-CN.yml +6 -10
  122. data/config/locales/zh-TW.yml +0 -9
  123. data/db/migrate/20231027142329_change_default_value_for_decidim_endorsements.rb +11 -0
  124. data/db/seeds.rb +1 -0
  125. data/decidim-core.gemspec +78 -0
  126. data/lib/decidim/acts_as_tree.rb +14 -1
  127. data/lib/decidim/asset_router/storage.rb +4 -0
  128. data/lib/decidim/attribute_encryptor.rb +6 -4
  129. data/lib/decidim/core/engine.rb +7 -3
  130. data/lib/decidim/core/test/factories.rb +309 -95
  131. data/lib/decidim/core/test/shared_examples/amendable/amendment_created_event_examples.rb +6 -26
  132. data/lib/decidim/core/test/shared_examples/amendable/amendment_promoted_event_examples.rb +8 -26
  133. data/lib/decidim/core/test/shared_examples/comments_examples.rb +56 -0
  134. data/lib/decidim/core/test/shared_examples/embed_resource_examples.rb +187 -11
  135. data/lib/decidim/core/test/shared_examples/errors.rb +2 -0
  136. data/lib/decidim/core/test/shared_examples/has_attachment_collections.rb +8 -6
  137. data/lib/decidim/core/test/shared_examples/has_attachments.rb +4 -4
  138. data/lib/decidim/core/test/shared_examples/has_category.rb +27 -0
  139. data/lib/decidim/core/test/shared_examples/has_reference.rb +1 -1
  140. data/lib/decidim/core/test/shared_examples/has_space_in_mcell_examples.rb +1 -2
  141. data/lib/decidim/core/test/shared_examples/resource_endorsed_event_examples.rb +6 -3
  142. data/lib/decidim/core/test/shared_examples/resource_locator_presenter_examples.rb +134 -0
  143. data/lib/decidim/core/test/shared_examples/searchable_results_examples.rb +1 -1
  144. data/lib/decidim/core/test/shared_examples/simple_event.rb +50 -2
  145. data/lib/decidim/core/test.rb +1 -0
  146. data/lib/decidim/core/version.rb +1 -1
  147. data/lib/decidim/core.rb +2 -1
  148. data/lib/decidim/endorsable.rb +1 -1
  149. data/lib/decidim/engine_router.rb +17 -4
  150. data/lib/decidim/events/base_event.rb +5 -2
  151. data/lib/decidim/events/simple_event.rb +3 -17
  152. data/lib/decidim/exporters.rb +10 -1
  153. data/lib/decidim/form_builder.rb +1 -0
  154. data/lib/decidim/has_category.rb +3 -3
  155. data/lib/decidim/has_conversations.rb +91 -0
  156. data/lib/decidim/participable.rb +17 -0
  157. data/lib/decidim/view_model.rb +1 -0
  158. data/lib/decidim/webpacker/webpack/.modernizrrc +9 -0
  159. data/lib/premailer/adapter/decidim.rb +5 -4
  160. data/lib/tasks/decidim_reminders_tasks.rake +1 -0
  161. data/lib/tasks/upgrade/decidim_deduplicate_endorsements.rake +53 -0
  162. data/lib/tasks/upgrade/decidim_fix_categorization.rake +15 -0
  163. data/lib/tasks/upgrade/decidim_fix_short_url_resolver.rake +22 -0
  164. metadata +37 -32
  165. data/app/helpers/decidim/layout_helper.rb.orig +0 -225
  166. data/app/packs/stylesheets/decidim/modules/_dropdown_menu.scss +0 -9
  167. data/app/views/decidim/devise/registrations/new.html.erb.orig +0 -231
  168. /data/{config/environment.rb → app/packs/images/decidim/.keep} +0 -0
@@ -0,0 +1,36 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Decidim
4
+ # A wrapper for preparing push notifications messages from conversations
5
+ # It respects the same contract as the Decidim::Messaging::ConversationMailer
6
+ class PushNotificationMessageSender
7
+ include HasConversations
8
+
9
+ def deliver
10
+ SendPushNotification.new.perform(@notification, title)
11
+ end
12
+
13
+ private
14
+
15
+ # rubocop:disable Metrics/ParameterLists
16
+ # rubocop:disable Lint/UnusedMethodArgument
17
+ #
18
+ # There are some parameters thar are not used in the method, but they are needed to
19
+ # keep the same contract as the Decidim::Messaging::ConversationMailer
20
+ def send_notification(from:, to:, conversation:, action:, message: nil, third_party: nil)
21
+ @action = action
22
+ @sender = to
23
+ @third_party = third_party
24
+
25
+ @notification = PushNotificationMessage.new(recipient: to, conversation: conversation, message: message)
26
+
27
+ self
28
+ end
29
+ # rubocop:enable Lint/UnusedMethodArgument
30
+ # rubocop:enable Metrics/ParameterLists
31
+
32
+ def title
33
+ get_subject(action: @action, sender: @sender, third_party: @third_party)
34
+ end
35
+ end
36
+ end
@@ -14,14 +14,19 @@ module Decidim
14
14
  # Send the push notification. Returns `nil` if the user didn't allowed push notifications
15
15
  # or if the subscription to push notifications doesn't exist
16
16
  #
17
- # Returns the result of the dispatch or nil if user or subscription are empty
18
- def perform(notification)
17
+ # @param notification [Decidim::Notification, Decidim::PushNotificationMessage] the notification to be sent
18
+ # @param title [String] the title of the notification. Optional.
19
+ #
20
+ # @return [Array<Net::HTTPCreated>, nil] the result of the dispatch or nil if user or subscription are empty
21
+ def perform(notification, title = nil)
19
22
  return unless Rails.application.secrets.dig(:vapid, :enabled)
23
+ raise ArgumentError, "Need to provide a title if the notification is a PushNotificationMessage" if notification.is_a?(Decidim::PushNotificationMessage) && title.nil?
24
+
25
+ user = notification.user
20
26
 
21
- I18n.with_locale(notification.user.locale || notification.user.organization.default_locale) do
22
- notification.user.notifications_subscriptions.values.map do |subscription|
23
- message_params = notification_params(Decidim::PushNotificationPresenter.new(notification))
24
- payload = build_payload(message_params, subscription)
27
+ I18n.with_locale(user.locale || user.organization.default_locale) do
28
+ user.notifications_subscriptions.values.map do |subscription|
29
+ payload = build_payload(message_params(notification, title), subscription)
25
30
  # Capture webpush exceptions in order to avoid this call to be repeated by the background job runner
26
31
  # Webpush::Error class is the parent class of all defined errors
27
32
  begin
@@ -36,9 +41,18 @@ module Decidim
36
41
 
37
42
  private
38
43
 
39
- def notification_params(notification)
44
+ def message_params(notification, title = nil)
45
+ case notification
46
+ when Decidim::PushNotificationMessage
47
+ notification_params(notification, title)
48
+ else # when Decidim::Notification
49
+ notification_params(Decidim::PushNotificationPresenter.new(notification))
50
+ end
51
+ end
52
+
53
+ def notification_params(notification, title = nil)
40
54
  {
41
- title: notification.title,
55
+ title: title.presence || notification.title,
42
56
  body: notification.body,
43
57
  icon: notification.icon,
44
58
  data: { url: notification.url }
@@ -60,7 +60,7 @@
60
60
 
61
61
  <div class="card" id="card__tos">
62
62
  <div class="card__content">
63
- <h3><%= t(".tos_title") %></h3>
63
+ <h2><%= t(".tos_title") %></h2>
64
64
 
65
65
  <p class="tos-text">
66
66
  <%= strip_tags(translated_attribute(terms_and_conditions_page.content)) %>
@@ -74,7 +74,7 @@
74
74
 
75
75
  <div class="card" id="card__newsletter">
76
76
  <div class="card__content">
77
- <h3><%= t(".newsletter_title") %></h3>
77
+ <h2><%= t(".newsletter_title") %></h2>
78
78
  <div class="field">
79
79
  <%= f.check_box :newsletter, label: t(".newsletter"), checked: @form.newsletter %>
80
80
  </div>
@@ -8,4 +8,11 @@
8
8
  <%= link_to decidim_sanitize(notification.resource_title, strip_tags: true), notification.resource_url %>
9
9
  </p>
10
10
  <% end %>
11
+ <% if notification.show_extended_information? %>
12
+ <blockquote>
13
+ <p>
14
+ <%= notification.safe_resource_text %>
15
+ </p>
16
+ </blockquote>
17
+ <% end %>
11
18
  </div>
@@ -39,7 +39,7 @@
39
39
  </label>
40
40
  </div>
41
41
 
42
- <% if @notifications_settings.user_is_moderator?(current_user) %>
42
+ <% if current_user.moderator? %>
43
43
  <p><strong><%= t(".administrators") %></strong></p>
44
44
  <div class="switch tiny switch-with-label email_on_moderations">
45
45
  <label>
@@ -4,7 +4,7 @@
4
4
 
5
5
  <%- @scope_picker_values = capture do %>
6
6
  <div class="picker-values"><%- scopes.each do |scope, params| %>
7
- <div><a href="<%= params[:url] %>" data-picker-value="<%= scope.id %>"><%= params[:text] %></a></div>
7
+ <div><a class="<%= values_options[:class] %>" href="<%= params[:url] %>" data-picker-value="<%= scope.id %>"><%= "× " if values_options[:delete_button] %><%= params[:text] %></a></div>
8
8
  <% end %></div>
9
9
  <% end %>
10
10
 
@@ -12,8 +12,10 @@
12
12
  <%= render partial: "resources_filter_block", locals: { sections: @sections, types: Decidim::Searchable.searchable_resources_of_type_comment } %>
13
13
  <div class="card card--secondary">
14
14
  <%= filter_form_for filter do |form| %>
15
- <%= scopes_picker_filter form, :decidim_scope_id_eq %>
15
+ <%= scopes_picker_filter form, :decidim_scope_id_in %>
16
16
  <%= form.hidden_field :term %>
17
+ <%= form.hidden_field :with_space_state %>
18
+ <%= form.hidden_field :with_resource_type %>
17
19
  <% end %>
18
20
  </div>
19
21
  <div class="row collapse order-by">
@@ -1,7 +1,7 @@
1
1
  <% if geolocalizable.respond_to? :location %>
2
- <strong><%= translated_attribute geolocalizable.location %></strong><br>
2
+ <strong><%= decidim_sanitize(translated_attribute(geolocalizable.location)) %></strong><br>
3
3
  <% end %>
4
4
  <span><%= geolocalizable.address %></span><br>
5
5
  <% if geolocalizable.respond_to? :location_hints %>
6
- <span><%= translated_attribute geolocalizable.location_hints %></span>
6
+ <span><%= decidim_sanitize(translated_attribute(geolocalizable.location_hints)) %></span>
7
7
  <% end %>
@@ -19,7 +19,7 @@
19
19
  url: decidim_meta_url,
20
20
  image: decidim_meta_image_url,
21
21
  desc: h(decidim_meta_description),
22
- via: decidim_meta_twitter_handler) %>
22
+ via: decidim_meta_twitter_handler).sub(%(data-site="x"), %(data-site="twitter")).html_safe %>
23
23
  <a href="#" class="button" data-open="urlShare">
24
24
  <%= icon "link-intact", role: "img", "aria-hidden": true %>
25
25
  <%= t(".share_link") %>
@@ -1,6 +1,6 @@
1
1
  <%= filter_form_for filter do |form| %>
2
2
  <div class="columns mediumlarge-6 large-5">
3
- <%= scopes_picker_filter form, :with_scope, checkboxes_on_top: checkboxes_on_top %>
3
+ <%= scopes_picker_filter form, :with_any_scope, checkboxes_on_top: checkboxes_on_top %>
4
4
  </div>
5
5
  <div class="columns mediumlarge-6 large-5">
6
6
  <%= form.areas_select :with_area,
@@ -1,5 +1,6 @@
1
1
  <%
2
2
  js_configs = {
3
+ api_path: decidim_api.root_path(locale: nil),
3
4
  icons_path: Decidim.cors_enabled ? "" : asset_pack_path("media/images/icons.svg"),
4
5
  messages: {
5
6
  "selfxssWarning": {
@@ -3,8 +3,8 @@
3
3
  <% if current_organization.twitter_handler.present? %>
4
4
  <li>
5
5
  <a class="footer-social__icon" target="_blank" rel="noopener" href="https://twitter.com/<%= current_organization.twitter_handler %>">
6
- <span class="show-for-sr"><%= t("layouts.decidim.social_media_links.twitter", organization: translated_attribute(current_organization.name)) %></span>
7
- <%= icon "twitter", role: "img", aria_label: "Twitter" %>
6
+ <span class="show-for-sr"><%= t("layouts.decidim.social_media_links.x", organization: translated_attribute(current_organization.name)) %></span>
7
+ <%= icon "twitter-x", role: "img", aria_label: "X" %>
8
8
  </a>
9
9
  </li>
10
10
  <% end %>
@@ -91,9 +91,7 @@ ar:
91
91
  'true': 'نعم'
92
92
  carrierwave:
93
93
  errors:
94
- file_resolution_too_large: دقة الملف أكبر من المسموح به
95
94
  file_size_too_large: حجم الملف أكبر من المسموح به
96
- not_inside_organization: لم يتم إرفاق الملف بأي منظمة
97
95
  date:
98
96
  formats:
99
97
  decidim_short: "%d/%m/%Y"
@@ -437,7 +435,7 @@ ar:
437
435
  request_confirmation_instructions: طلب تعليمات التأكيد
438
436
  title: تأكيد البريد الإلكتروني
439
437
  show:
440
- close_modal: إغلاق مشروط
438
+ close_modal: اغلاق النموذج
441
439
  block_user_mailer:
442
440
  notify:
443
441
  body_1: تم حظر الحساب الخاص بك.
@@ -555,8 +553,7 @@ ar:
555
553
  already_have_an_account?: هل لديك حساب؟
556
554
  newsletter: تلقي رسالة إخبارية من حين لآخر مع المعلومات ذات الصلة
557
555
  newsletter_title: الاتصال إذن
558
- nickname_help: الاسم المستعار الخاص بك في %{organization}. يمكن أن يحتوي فقط على أحرف وأرقام، و '-' و '_'.
559
- sign_in: تسجيل الدخول
556
+ nickname_help: الاسم المستعار الخاص بك في %{organization}. يمكن أن يحتوي فقط على أحرف وأرقام '-' و '_'.
560
557
  sign_up: انشئ حسابًا
561
558
  sign_up_as:
562
559
  legend: الاشتراك باسم
@@ -577,7 +574,7 @@ ar:
577
574
  newsletter_modal:
578
575
  buttons:
579
576
  check: تحقق واستمر
580
- close_modal: إغلاق مشروط
577
+ close_modal: اغلاق النموذج
581
578
  uncheck: إبقاءه غير مختار
582
579
  notice: |-
583
580
  <p>مهلا ، هل أنت متأكد أنك لا تريد تلقي رسالة إخبارية؟<br>
@@ -613,6 +610,7 @@ ar:
613
610
  ready: جاهز
614
611
  show:
615
612
  download_data: قم بتنزيل البيانات
613
+ download_data_description: سيتم إرسال ملف يحتوي على جميع المعلومات المرتبطة بحسابك إلى <strong>%{user_email}</strong>. سوف يحتوي هذا البريد الإلكتروني على ملف .zip وكلمة مرور لفتحه.<br/><br/>لفك الملف ، ستحتاج إلى <a href="https://www.7-zip.org/">7-Zip</a> (للويندوز) أو <a href="https://www.keka.io/">Keka</a> (لماكوس). إذا كنت تستخدم لينوكس، في معظم الأحيان سيتم تثبيته بشكل افتراضي. إذا لم يكن الأمر كذلك، يمكنك استخدام <a href="https://gitlab.gnome.org/GNOME/file-roller">ملف Roller</a> أو <a href="https://peazip.github.io">PeaZip</a>).
616
614
  request_data: طلب البيانات
617
615
  editor_images:
618
616
  create:
@@ -620,7 +618,7 @@ ar:
620
618
  success: تم تحميل الصورة بنجاح
621
619
  drag_and_drop_help: يمكن إضافة صور عن طريق سحبها وإسقاطها أو لصقها.
622
620
  endorsable:
623
- endorsements: موافقات
621
+ endorsements: الدعم والتأييد
624
622
  endorsements_count: عد أصوات التأييدات
625
623
  endorsements:
626
624
  identities:
@@ -783,6 +781,7 @@ ar:
783
781
  notification_title: تم إضفاء الطابع الرسمي على المشارك %{name} (%{nickname}).
784
782
  export_mailer:
785
783
  download_your_data_export:
784
+ click_button: 'انقر فوق الرابط التالي لتحميل بياناتك.<br/>الملف سيكون متاحا حتى %{date}.<br/>ستحتاج إلى <a href="https://www.7-zip.org/">7-Zip</a> (للويندوز)، <a href="https://www.keka.io/en/">Keka</a> (لماكوس) أو <a href="https://peazip.github.io">PeaZip</a> (للينوكس) لفتحه. كلمة المرور: %{password}'
786
785
  download: تحميل
787
786
  export:
788
787
  ready: يرجى الاطلاع على نسخة مضغوطة من التصدير.
@@ -835,6 +834,7 @@ ar:
835
834
  file_help:
836
835
  file:
837
836
  explanation: 'إرشادات الملف:'
837
+ message_1: يجب أن تكون صورة أو وثيقة.
838
838
  message_2: بالنسبة للصور، يُفضل استخدام صور بالوضع العرضي، تقوم الخدمة باقتصاص الصورة.
839
839
  icon:
840
840
  explanation: 'إرشادات للأيقونة:'
@@ -995,7 +995,7 @@ ar:
995
995
  body_1: أنت على وشك زيارة رابط خارجي ونرجو منك أن تتحلى بالحذر فيما يتعلق بالمحتوى الموجود في الموقع الخارجي.
996
996
  body_2: الرجاء التحقق من الرابط الذي توشك على زيارته والتأكد من التعرف عليه كموقع آمن قبل المتابعة.
997
997
  cancel: إلغاء
998
- close_modal: إغلاق مشروط
998
+ close_modal: اغلاق النموذج
999
999
  proceed: المواصلة
1000
1000
  title: فتح رابط خارجي
1001
1001
  log:
@@ -1086,7 +1086,7 @@ ar:
1086
1086
  ok: حسناً
1087
1087
  index:
1088
1088
  ago: منذ
1089
- close: إغلاق مشروط
1089
+ close: اغلاق النموذج
1090
1090
  from: من
1091
1091
  groups: فِرَقي
1092
1092
  last_message: آخر رسالة
@@ -1243,7 +1243,6 @@ ar:
1243
1243
  proposals: اقتراحات
1244
1244
  proposals_explanation: تقديم مقترحات ، ودعم المقترحات الحالية وتعزيز التغييرات التي تريد رؤيتها.
1245
1245
  footer_sub_hero:
1246
- footer_sub_hero_body: دعونا نبني مجتمعًا أكثر انفتاحًا وشفافية وتعاونًا.<br /> انضموا وشاركوا وقرّروا.
1247
1246
  footer_sub_hero_headline: مرحبًا بكم على المنصة التشاركية لـ %{organization}.
1248
1247
  register: تسجيل
1249
1248
  hero:
@@ -1270,11 +1269,12 @@ ar:
1270
1269
  error: كانت هناك مشكلة في قبول الشروط والأحكام.
1271
1270
  success: عظيم! لقد قبلت الشروط والأحكام.
1272
1271
  form:
1272
+ agreement: أوافق على هذه الشروط
1273
1273
  legend: توافق على شروط وأحكام الاستخدام
1274
1274
  refuse:
1275
1275
  modal_body: إذا قمت بالرفض، لن تتمكن من استخدام المنصة، يمكنك <a href="%{download_your_data_path}">تنزيل بياناتك</a> و/أو <a href="%{delete_path}">حذف حسابك</a>.
1276
1276
  modal_btn_exit: سأراجعها لاحقًا
1277
- modal_close: إغلاق مشروط
1277
+ modal_close: اغلاق النموذج
1278
1278
  modal_title: هل ترفض حقًا الأحكام والشروط المحدثة؟
1279
1279
  required_review:
1280
1280
  alert: لقد قمنا بتحديث شروط الخدمة الخاصة بنا ، يرجى مراجعتها.
@@ -1372,7 +1372,7 @@ ar:
1372
1372
  future: مستقبل
1373
1373
  past: الماضي
1374
1374
  filters_small_view:
1375
- close_modal: إغلاق مشروط
1375
+ close_modal: اغلاق النموذج
1376
1376
  filter: منقي
1377
1377
  filter_by: مصنف بواسطة
1378
1378
  unfold: كشف
@@ -1672,8 +1672,6 @@ ar:
1672
1672
  updated: تم تحديث حسابك بنجاح.
1673
1673
  sessions:
1674
1674
  already_signed_out: تم الخروج بنجاح
1675
- new:
1676
- sign_in: تسجيل الدخول
1677
1675
  signed_in: تم تسجيل الدخول بنجاح
1678
1676
  signed_out: تم الخروج بنجاح
1679
1677
  shared:
@@ -1682,7 +1680,6 @@ ar:
1682
1680
  didn_t_receive_confirmation_instructions: لم تتلق تعليمات التأكيد؟
1683
1681
  didn_t_receive_unlock_instructions: لم تتلق تعليمات فتح؟
1684
1682
  forgot_your_password: نسيت رقمك السري؟
1685
- sign_in: تسجيل الدخول
1686
1683
  sign_in_with_provider: تسجيل الدخول مع %{provider}
1687
1684
  sign_up: انشئ حسابًا
1688
1685
  minimum_password_length:
@@ -1822,7 +1819,6 @@ ar:
1822
1819
  facebook: "%{organization} على الفيسبوك"
1823
1820
  github: "%{organization} في GitHub"
1824
1821
  instagram: "%{organization} في إنستاجرام"
1825
- twitter: "%{organization} في تويتر"
1826
1822
  youtube: "%{organization} على اليوتيوب"
1827
1823
  timeout_modal:
1828
1824
  body: لقد كنت غير نشط لمدة %{minutes} دقائق. إذا استمريت في كونك غير نشط، سيتم تسجيل خروجك تلقائيًا من أجل الأمان الخاص بك.