decidim-forms 0.26.0 → 0.27.0.rc1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (80) hide show
  1. checksums.yaml +4 -4
  2. data/app/commands/decidim/forms/admin/update_questionnaire.rb +13 -8
  3. data/app/commands/decidim/forms/answer_questionnaire.rb +3 -3
  4. data/app/controllers/decidim/forms/admin/concerns/has_questionnaire.rb +2 -2
  5. data/app/forms/decidim/forms/admin/display_condition_form.rb +3 -3
  6. data/app/forms/decidim/forms/answer_form.rb +4 -0
  7. data/app/models/decidim/forms/answer.rb +2 -2
  8. data/app/models/decidim/forms/display_condition.rb +1 -1
  9. data/app/models/decidim/forms/questionnaire.rb +7 -0
  10. data/app/presenters/decidim/forms/admin/questionnaire_answer_presenter.rb +10 -2
  11. data/app/presenters/decidim/forms/admin/questionnaire_participant_presenter.rb +5 -3
  12. data/app/presenters/decidim/forms/admin_log/questionnaire_presenter.rb +35 -0
  13. data/app/queries/decidim/forms/questionnaire_participant.rb +1 -1
  14. data/app/queries/decidim/forms/questionnaire_participants.rb +1 -1
  15. data/app/queries/decidim/forms/questionnaire_user_answers.rb +1 -1
  16. data/app/views/decidim/forms/questionnaires/_answer.html.erb +3 -1
  17. data/app/views/decidim/forms/questionnaires/show.html.erb +11 -9
  18. data/config/locales/am-ET.yml +1 -0
  19. data/config/locales/ar.yml +7 -0
  20. data/config/locales/bg.yml +1 -0
  21. data/config/locales/ca.yml +6 -3
  22. data/config/locales/cs.yml +6 -3
  23. data/config/locales/da.yml +1 -0
  24. data/config/locales/de.yml +12 -4
  25. data/config/locales/el.yml +1 -4
  26. data/config/locales/en.yml +5 -3
  27. data/config/locales/eo.yml +1 -0
  28. data/config/locales/es-MX.yml +6 -3
  29. data/config/locales/es-PY.yml +6 -3
  30. data/config/locales/es.yml +6 -3
  31. data/config/locales/et.yml +1 -0
  32. data/config/locales/eu.yml +1 -4
  33. data/config/locales/fi-plain.yml +6 -3
  34. data/config/locales/fi.yml +6 -3
  35. data/config/locales/fr-CA.yml +3 -3
  36. data/config/locales/fr.yml +3 -3
  37. data/config/locales/ga-IE.yml +1 -0
  38. data/config/locales/gl.yml +5 -0
  39. data/config/locales/hr.yml +1 -0
  40. data/config/locales/hu.yml +4 -0
  41. data/config/locales/id-ID.yml +1 -0
  42. data/config/locales/is-IS.yml +2 -1
  43. data/config/locales/it.yml +1 -4
  44. data/config/locales/ja.yml +6 -3
  45. data/config/locales/ko.yml +1 -0
  46. data/config/locales/lb.yml +1 -4
  47. data/config/locales/lt.yml +1 -0
  48. data/config/locales/lv.yml +1 -4
  49. data/config/locales/mt.yml +1 -0
  50. data/config/locales/nl.yml +1 -4
  51. data/config/locales/no.yml +1 -4
  52. data/config/locales/om-ET.yml +1 -0
  53. data/config/locales/pl.yml +1 -4
  54. data/config/locales/pt-BR.yml +2 -5
  55. data/config/locales/pt.yml +1 -4
  56. data/config/locales/ro-RO.yml +1 -4
  57. data/config/locales/ru.yml +1 -0
  58. data/config/locales/si-LK.yml +1 -0
  59. data/config/locales/sk.yml +1 -0
  60. data/config/locales/sl.yml +1 -0
  61. data/config/locales/so-SO.yml +1 -0
  62. data/config/locales/sr-CS.yml +1 -0
  63. data/config/locales/sv.yml +1 -4
  64. data/config/locales/sw-KE.yml +1 -0
  65. data/config/locales/ti-ER.yml +1 -0
  66. data/config/locales/tr-TR.yml +1 -4
  67. data/config/locales/uk.yml +1 -0
  68. data/config/locales/val-ES.yml +1 -0
  69. data/config/locales/vi.yml +1 -0
  70. data/config/locales/zh-CN.yml +1 -4
  71. data/config/locales/zh-TW.yml +1 -0
  72. data/lib/decidim/exporters/form_pdf.rb +2 -2
  73. data/lib/decidim/forms/{data_portability_user_answers_serializer.rb → download_your_data_user_answers_serializer.rb} +2 -2
  74. data/lib/decidim/forms/test/factories.rb +22 -13
  75. data/lib/decidim/forms/test/shared_examples/has_questionnaire.rb +3 -0
  76. data/lib/decidim/forms/test/shared_examples/manage_questionnaires/update_questions.rb +2 -2
  77. data/lib/decidim/forms/user_answers_serializer.rb +2 -2
  78. data/lib/decidim/forms/version.rb +1 -1
  79. data/lib/decidim/forms.rb +1 -1
  80. metadata +14 -13
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: '001966829dd7bb233641ea5fb6134eacfadb93b6e902854ea48ee21287a378af'
4
- data.tar.gz: 10229cd3561629c46253977f603129863ac1d6cc87bd0737be5368ec22c6d9f2
3
+ metadata.gz: b63c51b898c731a6ac659b9160f4b5bf5d2404cea0aec58cb5fdffff1a29a9b0
4
+ data.tar.gz: e4a6cf68a62b0188511ba30c3fceda43c30a93bca8ab4a917edf608b8c531e1a
5
5
  SHA512:
6
- metadata.gz: d5f1c63e9080a6599abbf681a66b58f937929d3d65401ce0d342c65ba8241b060f0fea8d1af1120296cabc3c287756adfd9310387de91028472ed2eff5893db5
7
- data.tar.gz: b01e17fefc02e5d569eca30ac167c8d9d3eecd4edeaca8ed6b259b3aca7c6e73062bc7879da4b038e7c80a65d7237895a82c21d4c4b934041659444769915aa1
6
+ metadata.gz: 305a8eb86bf0c9d3afa0b861174ff41c79519b4f5aadd84975cccfdc9c2fd2fa2c12d1a14159a9b0da674d81233900802d271b38d078956ebd8bdd119287cbb4
7
+ data.tar.gz: ed601e91289f962ac5f647b205dafd86c61429e63b3401d210ccd0c345308bfcfc4f7ab5da761056b7335e66d0b2fe95c62ef4189a0dbf5e38b79d8e446ebab2
@@ -5,14 +5,15 @@ module Decidim
5
5
  module Admin
6
6
  # This command is executed when the user changes a Questionnaire from the admin
7
7
  # panel.
8
- class UpdateQuestionnaire < Rectify::Command
8
+ class UpdateQuestionnaire < Decidim::Command
9
9
  # Initializes a UpdateQuestionnaire Command.
10
10
  #
11
11
  # form - The form from which to get the data.
12
12
  # questionnaire - The current instance of the questionnaire to be updated.
13
- def initialize(form, questionnaire)
13
+ def initialize(form, questionnaire, user)
14
14
  @form = form
15
15
  @questionnaire = questionnaire
16
+ @user = user
16
17
  end
17
18
 
18
19
  # Updates the questionnaire if valid.
@@ -21,13 +22,17 @@ module Decidim
21
22
  def call
22
23
  return broadcast(:invalid) if @form.invalid?
23
24
 
24
- Decidim::Forms::Questionnaire.transaction do
25
- if @questionnaire.questions_editable?
26
- update_questionnaire_questions
27
- delete_answers unless @questionnaire.published?
28
- end
25
+ Decidim.traceability.perform_action!("update",
26
+ @questionnaire,
27
+ @user) do
28
+ Decidim::Forms::Questionnaire.transaction do
29
+ if @questionnaire.questions_editable?
30
+ update_questionnaire_questions
31
+ delete_answers unless @questionnaire.published?
32
+ end
29
33
 
30
- update_questionnaire
34
+ update_questionnaire
35
+ end
31
36
  end
32
37
 
33
38
  broadcast(:ok)
@@ -3,7 +3,7 @@
3
3
  module Decidim
4
4
  module Forms
5
5
  # This command is executed when the user answers a Questionnaire.
6
- class AnswerQuestionnaire < Rectify::Command
6
+ class AnswerQuestionnaire < Decidim::Command
7
7
  include ::Decidim::MultipleAttachmentsMethods
8
8
 
9
9
  # Initializes a AnswerQuestionnaire Command.
@@ -43,7 +43,7 @@ module Decidim
43
43
  # of this problem.
44
44
  def reset_form_attachments
45
45
  @form.responses.each do |answer|
46
- answer.errors.add(:add_documents, :needs_to_be_reattached) if answer.has_attachments?
46
+ answer.errors.add(:add_documents, :needs_to_be_reattached) if answer.has_attachments? || answer.has_error_in_attachments?
47
47
  end
48
48
  end
49
49
 
@@ -51,7 +51,7 @@ module Decidim
51
51
  @main_form = @form
52
52
  @errors = nil
53
53
 
54
- Answer.transaction do
54
+ Answer.transaction(requires_new: true) do
55
55
  form.responses_by_step.flatten.select(&:display_conditions_fulfilled?).each do |form_answer|
56
56
  answer = Answer.new(
57
57
  user: @current_user,
@@ -22,7 +22,7 @@ module Decidim
22
22
 
23
23
  if defined? Decidim::Templates::Admin
24
24
  include Decidim::Templates::Admin::Concerns::Templatable
25
- helper Decidim::Templates::Admin::TemplatesHelper
25
+ helper Decidim::DatalistSelectHelper
26
26
 
27
27
  def templatable_type
28
28
  "Decidim::Forms::Questionnaire"
@@ -47,7 +47,7 @@ module Decidim
47
47
  params["published_at"] = Time.current if params.has_key? "save_and_publish"
48
48
  @form = form(Admin::QuestionnaireForm).from_params(params)
49
49
 
50
- Admin::UpdateQuestionnaire.call(@form, questionnaire) do
50
+ Admin::UpdateQuestionnaire.call(@form, questionnaire, current_user) do
51
51
  on(:ok) do
52
52
  # i18n-tasks-use t("decidim.forms.admin.questionnaires.update.success")
53
53
  flash[:notice] = I18n.t("update.success", scope: i18n_flashes_scope)
@@ -55,21 +55,21 @@ module Decidim
55
55
  #
56
56
  # Returns a Decidim::Forms::Question
57
57
  def question
58
- @question ||= Question.find_by(id: @decidim_question_id)
58
+ @question ||= Question.find_by(id: decidim_question_id)
59
59
  end
60
60
 
61
61
  # Finds the Condition Question from the given decidim_condition_question_id
62
62
  #
63
63
  # Returns a Decidim::Forms::Question
64
64
  def condition_question
65
- @condition_question ||= Question.find_by(id: @decidim_condition_question_id)
65
+ @condition_question ||= Question.find_by(id: decidim_condition_question_id)
66
66
  end
67
67
 
68
68
  # Finds the Answer Option from the given decidim_answer_option_id
69
69
  #
70
70
  # Returns a Decidim::Forms::AnswerOption
71
71
  def answer_option
72
- @answer_option ||= AnswerOption.find_by(id: @decidim_answer_option_id)
72
+ @answer_option ||= AnswerOption.find_by(id: decidim_answer_option_id)
73
73
  end
74
74
 
75
75
  private
@@ -69,6 +69,10 @@ module Decidim
69
69
  question.has_attachments? && errors[:add_documents].empty? && add_documents.present?
70
70
  end
71
71
 
72
+ def has_error_in_attachments?
73
+ errors[:add_documents].present?
74
+ end
75
+
72
76
  private
73
77
 
74
78
  def mandatory_body?
@@ -4,7 +4,7 @@ module Decidim
4
4
  module Forms
5
5
  # The data store for an Answer in the Decidim::Forms
6
6
  class Answer < Forms::ApplicationRecord
7
- include Decidim::DataPortability
7
+ include Decidim::DownloadYourData
8
8
  include Decidim::NewsletterParticipant
9
9
  include Decidim::HasAttachments
10
10
 
@@ -29,7 +29,7 @@ module Decidim
29
29
  end
30
30
 
31
31
  def self.export_serializer
32
- Decidim::Forms::DataPortabilityUserAnswersSerializer
32
+ Decidim::Forms::DownloadYourDataUserAnswersSerializer
33
33
  end
34
34
 
35
35
  def self.newsletter_participant_ids(component)
@@ -33,7 +33,7 @@ module Decidim
33
33
  when "not_equal"
34
34
  answer_form.choices.pluck(:answer_option_id).exclude?(answer_option.id)
35
35
  when "match"
36
- condition_value.values.reject(&:blank?).any? { |value| answer_form_matches?(answer_form, value) }
36
+ condition_value.values.compact_blank.any? { |value| answer_form_matches?(answer_form, value) }
37
37
  end
38
38
  end
39
39
 
@@ -7,6 +7,7 @@ module Decidim
7
7
  include Decidim::Templates::Templatable if defined? Decidim::Templates::Templatable
8
8
  include Decidim::Publicable
9
9
  include Decidim::TranslatableResource
10
+ include Decidim::Traceable
10
11
 
11
12
  translatable_fields :title, :description, :tos
12
13
  belongs_to :questionnaire_for, polymorphic: true
@@ -16,6 +17,8 @@ module Decidim
16
17
 
17
18
  after_initialize :set_default_salt
18
19
 
20
+ attr_accessor :questionnaire_template_id
21
+
19
22
  # Public: returns whether the questionnaire questions can be modified or not.
20
23
  def questions_editable?
21
24
  has_component = questionnaire_for.respond_to? :component
@@ -32,6 +35,10 @@ module Decidim
32
35
  created_at.to_i == updated_at.to_i && questions.empty?
33
36
  end
34
37
 
38
+ def self.log_presenter_class_for(_log)
39
+ Decidim::Forms::AdminLog::QuestionnairePresenter
40
+ end
41
+
35
42
  private
36
43
 
37
44
  # salt is used to generate secure hash in anonymous answers
@@ -6,10 +6,18 @@ module Decidim
6
6
  #
7
7
  # Presenter for questionnaire answer
8
8
  #
9
- class QuestionnaireAnswerPresenter < Rectify::Presenter
9
+ class QuestionnaireAnswerPresenter < SimpleDelegator
10
+ delegate :content_tag, :safe_join, to: :view_context
11
+
10
12
  include Decidim::TranslatableAttributes
11
13
 
12
- attribute :answer, Decidim::Forms::Answer
14
+ def answer
15
+ __getobj__.fetch(:answer)
16
+ end
17
+
18
+ def view_context
19
+ __getobj__.fetch(:view_context, ActionController::Base.new.view_context)
20
+ end
13
21
 
14
22
  def question
15
23
  translated_attribute(answer.question.body)
@@ -6,8 +6,10 @@ module Decidim
6
6
  #
7
7
  # Presenter for questionnaire response
8
8
  #
9
- class QuestionnaireParticipantPresenter < Rectify::Presenter
10
- attribute :participant, Decidim::Forms::Answer
9
+ class QuestionnaireParticipantPresenter < SimpleDelegator
10
+ def participant
11
+ __getobj__.fetch(:participant)
12
+ end
11
13
 
12
14
  def session_token
13
15
  participant.session_token || "-"
@@ -28,7 +30,7 @@ module Decidim
28
30
  end
29
31
 
30
32
  def status
31
- t(registered? ? "registered" : "unregistered", scope: "decidim.forms.user_answers_serializer")
33
+ I18n.t(registered? ? "registered" : "unregistered", scope: "decidim.forms.user_answers_serializer")
32
34
  end
33
35
 
34
36
  def answers
@@ -0,0 +1,35 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Decidim
4
+ module Forms
5
+ module AdminLog
6
+ # This class holds the logic to present a `Decidim::Forms::Questionnaire`
7
+ # for the `AdminLog` log.
8
+ #
9
+ # Usage should be automatic and you shouldn't need to call this class
10
+ # directly, but here's an example:
11
+ #
12
+ # action_log = Decidim::ActionLog.last
13
+ # view_helpers # => this comes from the views
14
+ # QuestionnairePresenter.new(action_log, view_helpers).present
15
+ class QuestionnairePresenter < Decidim::Log::BasePresenter
16
+ private
17
+
18
+ def action_string
19
+ case action
20
+ when "update"
21
+ "decidim.forms.admin_log.questionnaire.#{action}"
22
+ else
23
+ super
24
+ end
25
+ end
26
+
27
+ def i18n_params
28
+ super.merge(
29
+ meeting_name: resource_presenter.try(:present)
30
+ )
31
+ end
32
+ end
33
+ end
34
+ end
35
+ end
@@ -3,7 +3,7 @@
3
3
  module Decidim
4
4
  module Forms
5
5
  # A class used to collect user answers for a questionnaire
6
- class QuestionnaireParticipant < Rectify::Query
6
+ class QuestionnaireParticipant < Decidim::Query
7
7
  # Syntactic sugar to initialize the class and return the queried objects.
8
8
  #
9
9
  # questionnaire - a Questionnaire object
@@ -3,7 +3,7 @@
3
3
  module Decidim
4
4
  module Forms
5
5
  # A class used to collect user answers for a questionnaire
6
- class QuestionnaireParticipants < Rectify::Query
6
+ class QuestionnaireParticipants < Decidim::Query
7
7
  # Syntactic sugar to initialize the class and return the queried objects.
8
8
  #
9
9
  # questionnaire - a Questionnaire object
@@ -3,7 +3,7 @@
3
3
  module Decidim
4
4
  module Forms
5
5
  # A class used to collect user answers for a questionnaire
6
- class QuestionnaireUserAnswers < Rectify::Query
6
+ class QuestionnaireUserAnswers < Decidim::Query
7
7
  # Syntactic sugar to initialize the class and return the queried objects.
8
8
  #
9
9
  # questionnaire - a Questionnaire object
@@ -30,7 +30,9 @@
30
30
 
31
31
  <%= answer_form.hidden_field :question_id %>
32
32
 
33
- <small class="form-error max-choices-alert"><%= t(".max_choices_alert") %></small>
33
+ <% if answer.question.max_choices %>
34
+ <small class="form-error max-choices-alert"><%= t(".max_choices_alert") %></small>
35
+ <% end %>
34
36
 
35
37
  <% answer.errors.full_messages.each do |msg| %>
36
38
  <small class="form-error is-visible"><%= msg %></small>
@@ -8,7 +8,7 @@
8
8
  <%= render partial: "decidim/shared/component_announcement" %>
9
9
 
10
10
  <div class="row columns">
11
- <h3 class="section-heading"><%= translated_attribute questionnaire.title %></h3>
11
+ <h2 class="section-heading"><%= translated_attribute questionnaire.title %></h2>
12
12
  <div class="row">
13
13
  <div class="columns large-<%= columns %> medium-centered lead">
14
14
  <%= decidim_sanitize_editor translated_attribute questionnaire.description %>
@@ -33,7 +33,7 @@
33
33
  <% if visitor_already_answered? %>
34
34
  <div class="section">
35
35
  <div class="callout success">
36
- <h5><%= t(".questionnaire_answered.title") %></h5>
36
+ <h3 class="heading5"><%= t(".questionnaire_answered.title") %></h3>
37
37
  <p><%= t(".questionnaire_answered.body") %></p>
38
38
  </div>
39
39
  </div>
@@ -42,7 +42,7 @@
42
42
  <noscript>
43
43
  <div class="section">
44
44
  <div class="callout warning">
45
- <h5><%= t(".questionnaire_js_disabled.title") %></h5>
45
+ <h3 class="heading5"><%= t(".questionnaire_js_disabled.title") %></h3>
46
46
  <p><%= t(".questionnaire_js_disabled.body") %></p>
47
47
  </div>
48
48
  </div>
@@ -50,7 +50,7 @@
50
50
  <% unless current_participatory_space.can_participate?(current_user) %>
51
51
  <div class="section">
52
52
  <div class="callout alert">
53
- <h5><%= t(".questionnaire_for_private_users.title") %></h5>
53
+ <h3 class="heading5"><%= t(".questionnaire_for_private_users.title") %></h3>
54
54
  <p><%= t(".questionnaire_for_private_users.body") %></p>
55
55
  </div>
56
56
  </div>
@@ -64,10 +64,10 @@
64
64
  <% @form.responses_by_step.each_with_index do |step_answers, step_index| %>
65
65
  <div id="step-<%= step_index %>" class="<%= step_index.zero? ? "questionnaire-step" : "questionnaire-step hide" %>" data-toggler=".hide">
66
66
  <% if @form.total_steps > 1 %>
67
- <h4 class="section-heading">
67
+ <h3 class="section-heading">
68
68
  <%= t(".current_step", step: step_index + 1) %>
69
69
  <span class="answer-questionnaire__steps"><%= t(".of_total_steps", total_steps: @form.total_steps) %></span>
70
- </h4>
70
+ </h3>
71
71
  <% end %>
72
72
 
73
73
  <% step_answers.each do |answer| %>
@@ -128,7 +128,7 @@
128
128
  <% end %>
129
129
  <% else %>
130
130
  <div class="answer-questionnaire">
131
- <h5 class="section-heading"><%= t(".answer_questionnaire.title") %></h5>
131
+ <h3 class="section-heading"><%= t(".answer_questionnaire.title") %></h3>
132
132
  <p>
133
133
  <%= t(".answer_questionnaire.anonymous_user_message", sign_in_link: decidim.new_user_session_path, sign_up_link: decidim.new_user_registration_path).html_safe %>
134
134
  </p>
@@ -141,7 +141,7 @@
141
141
  <% else %>
142
142
  <div class="section">
143
143
  <div class="callout warning">
144
- <h4><%= t(".questionnaire_closed.title") %></h4>
144
+ <h3 class="heading4"><%= t(".questionnaire_closed.title") %></h3>
145
145
  <p><%= t(".questionnaire_closed.body") %></p>
146
146
  </div>
147
147
  </div>
@@ -151,4 +151,6 @@
151
151
  </div>
152
152
  </div>
153
153
 
154
- <%= javascript_pack_tag "decidim_forms" %>
154
+ <% content_for :js_content do %>
155
+ <%= javascript_pack_tag "decidim_forms" %>
156
+ <% end %>
@@ -1 +1,2 @@
1
+ ---
1
2
  am:
@@ -1,8 +1,10 @@
1
+ ---
1
2
  ar:
2
3
  activemodel:
3
4
  attributes:
4
5
  answer:
5
6
  body: إجابة
7
+ choices: الخيارات
6
8
  question:
7
9
  max_choices: أقصى عدد من الخيارات
8
10
  question_type: نوع
@@ -30,6 +32,9 @@ ar:
30
32
  free_text: نص حر
31
33
  remove: إزالة
32
34
  statement: بيان
35
+ display_condition:
36
+ condition_question: سؤال
37
+ remove: حذف
33
38
  edit:
34
39
  save: حفظ
35
40
  form:
@@ -47,6 +52,8 @@ ar:
47
52
  remove: إزالة
48
53
  statement: بيان
49
54
  up: فوق
55
+ title_and_description:
56
+ description: الوصف
50
57
  update:
51
58
  invalid: كانت هناك مشكلة في حفظ النموذج.
52
59
  errors:
@@ -1,3 +1,4 @@
1
+ ---
1
2
  bg:
2
3
  activemodel:
3
4
  attributes:
@@ -1,3 +1,4 @@
1
+ ---
1
2
  ca:
2
3
  activemodel:
3
4
  attributes:
@@ -121,6 +122,9 @@ ca:
121
122
  update:
122
123
  invalid: S'ha produït un error en desar el formulari.
123
124
  success: Formulari desat correctament.
125
+ admin_log:
126
+ questionnaire:
127
+ update: "%{user_name} ha actualitzat el qüestionari %{resource_name}"
124
128
  errors:
125
129
  answer:
126
130
  body: El camp no pot estar en blanc
@@ -128,10 +132,9 @@ ca:
128
132
  extension_allowlist: 'Formats d''arxiu acceptats:'
129
133
  images:
130
134
  dimensions: "%{width} x %{height} px"
131
- dimensions_info: 'Aquesta imatge medirà:'
132
135
  processors:
133
- resize_and_pad: Redimensionat i ajustat a
134
- resize_to_fit: Redimensionada per ajustar-la
136
+ resize_and_pad: Aquesta imatge serà redimensionada i ajustada a %{dimensions}.
137
+ resize_to_fit: Aquesta imatge serà redimensionada per ajustar-se a %{dimensions}.
135
138
  question_types:
136
139
  files: Arxius
137
140
  long_answer: Resposta llarga
@@ -1,3 +1,4 @@
1
+ ---
1
2
  cs:
2
3
  activemodel:
3
4
  attributes:
@@ -121,6 +122,9 @@ cs:
121
122
  update:
122
123
  invalid: Při ukládání dotazníku došlo k chybám.
123
124
  success: Formulář byl úspěšně uložen.
125
+ admin_log:
126
+ questionnaire:
127
+ update: "%{user_name} aktualizoval dotazník %{resource_name}"
124
128
  errors:
125
129
  answer:
126
130
  body: Tělo nemůže být prázdné
@@ -128,10 +132,9 @@ cs:
128
132
  extension_allowlist: 'Akceptované formáty:'
129
133
  images:
130
134
  dimensions: "%{width} x %{height} px"
131
- dimensions_info: 'Tento obrázek bude:'
132
135
  processors:
133
- resize_and_pad: Zmenšeno a odsazeno k
134
- resize_to_fit: Upravena velikost na vyplnění
136
+ resize_and_pad: Tento obrázek bude změněn a vyplněn na %{dimensions}.
137
+ resize_to_fit: Tento obrázek bude změněn a vyplněn na %{dimensions}.
135
138
  question_types:
136
139
  files: Soubory
137
140
  long_answer: Dlouhá odpověď
@@ -1 +1,2 @@
1
+ ---
1
2
  da:
@@ -1,3 +1,4 @@
1
+ ---
1
2
  de:
2
3
  activemodel:
3
4
  attributes:
@@ -79,6 +80,7 @@ de:
79
80
  form:
80
81
  add_question: Frage hinzufügen
81
82
  add_separator: Trennzeichen hinzufügen
83
+ add_title_and_description: Füge Titel und Beschreibung hinzu
82
84
  already_answered_warning: Der Fragebogen wird bereits von einigen Benutzern beantwortet, sodass Sie die Fragen nicht ändern können.
83
85
  collapse: Alle Fragen einklappen
84
86
  expand: Alle Fragen ausklappen
@@ -108,6 +110,15 @@ de:
108
110
  remove: Löschen
109
111
  separator: Trennzeichen
110
112
  up: Hoch
113
+ title_and_description:
114
+ collapse: Einklappen
115
+ description: Beschreibung
116
+ down: Runter
117
+ expand: Ausklappen
118
+ remove: Entfernen
119
+ title: Titel
120
+ title_and_description: Titel und Beschreibung
121
+ up: Hinauf
111
122
  update:
112
123
  invalid: Beim Speichern des Fragebogens sind Fehler aufgetreten.
113
124
  success: Formular erfolgreich gespeichert.
@@ -118,10 +129,6 @@ de:
118
129
  extension_allowlist: 'Gültige Formate:'
119
130
  images:
120
131
  dimensions: "%{width} x %{height} px"
121
- dimensions_info: 'Das Bild wird:'
122
- processors:
123
- resize_and_pad: in der Größe angepasst und gepolstert zu
124
- resize_to_fit: in der Größe verändert, damit es passt
125
132
  question_types:
126
133
  files: Dateien
127
134
  long_answer: Lange Antwort
@@ -131,6 +138,7 @@ de:
131
138
  short_answer: Kurze Antwort
132
139
  single_option: Einzelne Option
133
140
  sorting: Sortierung
141
+ title_and_description: Titel und Beschreibung
134
142
  questionnaires:
135
143
  answer:
136
144
  invalid: Bei der Beantwortung des Fragebogens sind Fehler aufgetreten.
@@ -1,3 +1,4 @@
1
+ ---
1
2
  el:
2
3
  activemodel:
3
4
  attributes:
@@ -69,10 +70,6 @@ el:
69
70
  extension_allowlist: 'Αποδεκτές μορφές:'
70
71
  images:
71
72
  dimensions: "Π %{width} x Υ %{height} px"
72
- dimensions_info: 'Για αυτήν την εικόνα θα:'
73
- processors:
74
- resize_and_pad: Αλλάξει το μέγεθος και θα συμπληρωθεί σε
75
- resize_to_fit: Αλλάξει το μέγεθος για προσαρμογή
76
73
  question_types:
77
74
  long_answer: Μεγάλη απάντηση
78
75
  matrix_multiple: Πίνακας (πολλαπλή επιλογή)
@@ -122,6 +122,9 @@ en:
122
122
  update:
123
123
  invalid: There was a problem saving the form.
124
124
  success: Form successfully saved.
125
+ admin_log:
126
+ questionnaire:
127
+ update: "%{user_name} updated the %{resource_name} questionnaire"
125
128
  errors:
126
129
  answer:
127
130
  body: Body can't be blank
@@ -129,10 +132,9 @@ en:
129
132
  extension_allowlist: 'Accepted formats:'
130
133
  images:
131
134
  dimensions: "%{width} x %{height} px"
132
- dimensions_info: 'This image will be:'
133
135
  processors:
134
- resize_and_pad: Resized and padded to
135
- resize_to_fit: Resized to fit
136
+ resize_and_pad: This image will be resized and padded to %{dimensions}.
137
+ resize_to_fit: This image will be resized to fit %{dimensions}.
136
138
  question_types:
137
139
  files: Files
138
140
  long_answer: Long answer
@@ -1 +1,2 @@
1
+ ---
1
2
  eo:
@@ -1,3 +1,4 @@
1
+ ---
1
2
  es-MX:
2
3
  activemodel:
3
4
  attributes:
@@ -121,6 +122,9 @@ es-MX:
121
122
  update:
122
123
  invalid: Ha habido errores al guardar el cuestionario.
123
124
  success: Formulario guardado correctamente.
125
+ admin_log:
126
+ questionnaire:
127
+ update: "%{user_name} actualizó el cuestionario %{resource_name}"
124
128
  errors:
125
129
  answer:
126
130
  body: El campo no puede estar en blanco
@@ -128,10 +132,9 @@ es-MX:
128
132
  extension_allowlist: 'Formatos de archivo aceptados:'
129
133
  images:
130
134
  dimensions: "%{width} x %{height} px"
131
- dimensions_info: 'Esta imagen medirá:'
132
135
  processors:
133
- resize_and_pad: Redimensionado y ajustado a
134
- resize_to_fit: Redimensionada para ajustarla
136
+ resize_and_pad: Esta imagen será redimensionada y ajustada a %{dimensions}.
137
+ resize_to_fit: Esta imagen será redimensionada para ajustarse a %{dimensions}.
135
138
  question_types:
136
139
  files: Archivos
137
140
  long_answer: Respuesta larga
@@ -1,3 +1,4 @@
1
+ ---
1
2
  es-PY:
2
3
  activemodel:
3
4
  attributes:
@@ -121,6 +122,9 @@ es-PY:
121
122
  update:
122
123
  invalid: Ha habido errores al guardar el cuestionario.
123
124
  success: Formulario guardado correctamente.
125
+ admin_log:
126
+ questionnaire:
127
+ update: "%{user_name} actualizó el cuestionario %{resource_name}"
124
128
  errors:
125
129
  answer:
126
130
  body: El campo no puede estar en blanco
@@ -128,10 +132,9 @@ es-PY:
128
132
  extension_allowlist: 'Formatos de archivo aceptados:'
129
133
  images:
130
134
  dimensions: "%{width} x %{height} px"
131
- dimensions_info: 'Esta imagen medirá:'
132
135
  processors:
133
- resize_and_pad: Redimensionado y ajustado a
134
- resize_to_fit: Redimensionada para ajustarla
136
+ resize_and_pad: Esta imagen será redimensionada y ajustada a %{dimensions}.
137
+ resize_to_fit: Esta imagen será redimensionada para ajustarse a %{dimensions}.
135
138
  question_types:
136
139
  files: Archivos
137
140
  long_answer: Respuesta larga