Sanitize translations instead of using _html

Using the `_html` suffix in an i18n key is the same as using `html_safe`
on it, which means that translation could potentially be used for XSS
attacks.
This commit is contained in:
Javi Martín
2019-10-06 00:03:50 +02:00
parent b66859945e
commit 6b1864fbcd
62 changed files with 185 additions and 172 deletions

View File

@@ -64,7 +64,7 @@ module GlobalizeHelper
end end
def selected_languages_description(resource) def selected_languages_description(resource)
t("shared.translations.languages_in_use_html", count: active_languages_count(resource)) sanitize(t("shared.translations.languages_in_use", count: active_languages_count(resource)))
end end
def select_language_error(resource) def select_language_error(resource)

View File

@@ -1,16 +1,16 @@
<% if params[:filter].present? && params[:advanced_filters].present? %> <% if params[:filter].present? && params[:advanced_filters].present? %>
<p class="inline-block"><%= t("#{i18n_namespace}.filters.two_filters_html", <p class="inline-block"><%= sanitize(t("#{i18n_namespace}.filters.two_filters",
filter: t("#{i18n_namespace}.filters.#{params[:filter]}"), filter: t("#{i18n_namespace}.filters.#{params[:filter]}"),
advanced_filters: budget_investments_advanced_filters(params[:advanced_filters])) %></p> advanced_filters: budget_investments_advanced_filters(params[:advanced_filters]))) %></p>
<% elsif params[:filter].present? %> <% elsif params[:filter].present? %>
<p class="inline-block"><%= t("#{i18n_namespace}.filters.one_filter_html", <p class="inline-block"><%= sanitize(t("#{i18n_namespace}.filters.one_filter",
filter: t("#{i18n_namespace}.filters.#{params[:filter]}")) %></p> filter: t("#{i18n_namespace}.filters.#{params[:filter]}"))) %></p>
<% elsif params[:advanced_filters].present? %> <% elsif params[:advanced_filters].present? %>
<p class="inline-block"><%= t("#{i18n_namespace}.filters.one_filter_html", <p class="inline-block"><%= sanitize(t("#{i18n_namespace}.filters.one_filter",
filter: budget_investments_advanced_filters(params[:advanced_filters])) %></p> filter: budget_investments_advanced_filters(params[:advanced_filters]))) %></p>
<% end %> <% end %>

View File

@@ -36,9 +36,9 @@
<div class="markdown-editor clear"> <div class="markdown-editor clear">
<div class="small-12 medium-8 column fullscreen-container"> <div class="small-12 medium-8 column fullscreen-container">
<div class="markdown-editor-header truncate"> <div class="markdown-editor-header truncate">
<%= t("admin.legislation.draft_versions.form.title_html", <%= sanitize(t("admin.legislation.draft_versions.form.title",
draft_version_title: @draft_version.title, draft_version_title: @draft_version.title,
process_title: @process.title) %> process_title: @process.title)) %>
</div> </div>
<div class="markdown-editor-buttons"> <div class="markdown-editor-buttons">

View File

@@ -1,9 +1,9 @@
<%= back_link_to %> <%= back_link_to %>
<h2><%= t("admin.newsletters.new.title") %></h2> <h2><%= t("admin.newsletters.new.title") %></h2>
<p> <p>
<%= t("admin.newsletters.new.header_footer_help_text_html", <%= sanitize(t("admin.newsletters.new.header_footer_help_text",
link: link_to(t("admin.newsletters.new.image_link"), link: link_to(t("admin.newsletters.new.image_link"),
admin_site_customization_images_path)) %> admin_site_customization_images_path))) %>
</p> </p>
<%= render "form" %> <%= render "form" %>

View File

@@ -67,7 +67,7 @@
<% if hidden > 0 %> <% if hidden > 0 %>
<div class="callout warning"> <div class="callout warning">
<%= t("admin.organizations.index.hidden_count_html", count: hidden) %> <%= sanitize(t("admin.organizations.index.hidden_count", count: hidden)) %>
</div> </div>
<% end %> <% end %>

View File

@@ -32,7 +32,7 @@
<div class="small-12 medium-6 column"> <div class="small-12 medium-6 column">
<%= f.text_field :slug, size: 80, maxlength: 80, <%= f.text_field :slug, size: 80, maxlength: 80,
hint: t("admin.site_customization.pages.new.slug_help_html") %> hint: sanitize(t("admin.site_customization.pages.new.slug_help")) %>
</div> </div>
</div> </div>

View File

@@ -6,8 +6,7 @@
<div class="small-12 medium-8 column small-centered text-center"> <div class="small-12 medium-8 column small-centered text-center">
<h2> <h2>
<%= t("budgets.ballots.show.voted_html", <%= sanitize(t("budgets.ballots.show.voted", count: @ballot.investments.count)) %>
count: @ballot.investments.count) %>
</h2> </h2>
<p class="confirmed"> <p class="confirmed">
<%= t("budgets.ballots.show.voted_info") %> <%= t("budgets.ballots.show.voted_info") %>

View File

@@ -36,8 +36,8 @@
</h2> </h2>
<div class="small-12 medium-9"> <div class="small-12 medium-9">
<div class="callout warning margin-top"> <div class="callout warning margin-top">
<%= t("budgets.investments.header.different_heading_assigned_html", <%= sanitize(t("budgets.investments.header.different_heading_assigned",
heading_link: heading_link(@assigned_heading, @budget)) %> heading_link: heading_link(@assigned_heading, @budget))) %>
<br> <br>
<small> <small>
<%= sanitize(t("budgets.investments.header.change_ballot", <%= sanitize(t("budgets.investments.header.change_ballot",

View File

@@ -19,7 +19,7 @@
<%= render_image(investment.image, :large, true) if investment.image.present? %> <%= render_image(investment.image, :large, true) if investment.image.present? %>
<p id="investment_code"> <p id="investment_code">
<%= t("budgets.investments.show.code_html", code: investment.id) %> <%= sanitize(t("budgets.investments.show.code", code: investment.id)) %>
</p> </p>
<%= auto_link_already_sanitized_html investment.description %> <%= auto_link_already_sanitized_html investment.description %>
@@ -32,13 +32,13 @@
<% if investment.location.present? %> <% if investment.location.present? %>
<p> <p>
<%= t("budgets.investments.show.location_html", location: investment.location) %> <%= sanitize(t("budgets.investments.show.location", location: investment.location)) %>
</p> </p>
<% end %> <% end %>
<% if investment.organization_name.present? %> <% if investment.organization_name.present? %>
<p> <p>
<%= t("budgets.investments.show.organization_name_html", name: investment.organization_name) %> <%= sanitize(t("budgets.investments.show.organization_name", name: investment.organization_name)) %>
</p> </p>
<% end %> <% end %>

View File

@@ -75,7 +75,7 @@
<% if investment.unfeasible? && investment.valuation_finished? %> <% if investment.unfeasible? && investment.valuation_finished? %>
<div class="callout warning"> <div class="callout warning">
<%= t("budgets.investments.show.project_unfeasible_html") %> <%= sanitize(t("budgets.investments.show.project_unfeasible")) %>
</div> </div>
<% elsif investment.winner? && @budget.finished? %> <% elsif investment.winner? && @budget.finished? %>
<div class="callout success"> <div class="callout success">
@@ -83,11 +83,11 @@
</div> </div>
<% elsif investment.selected? %> <% elsif investment.selected? %>
<div class="callout success"> <div class="callout success">
<%= t("budgets.investments.show.project_selected_html") %> <%= sanitize(t("budgets.investments.show.project_selected")) %>
</div> </div>
<% elsif @budget.balloting_or_later? %> <% elsif @budget.balloting_or_later? %>
<div class="callout warning"> <div class="callout warning">
<%= t("budgets.investments.show.project_not_selected_html") %> <%= sanitize(t("budgets.investments.show.project_not_selected")) %>
</div> </div>
<% else %> <% else %>
<br> <br>

View File

@@ -40,16 +40,16 @@
<% if @ballot.investments.by_heading(@heading.id).count > 0 %> <% if @ballot.investments.by_heading(@heading.id).count > 0 %>
<p> <p>
<em> <em>
<%= t("budgets.investments.index.sidebar.voted_html", <%= sanitize(t("budgets.investments.index.sidebar.voted",
count: @ballot.investments.by_heading(@heading.id).count, count: @ballot.investments.by_heading(@heading.id).count,
amount_spent: @ballot.formatted_amount_spent(@heading)) %> amount_spent: @ballot.formatted_amount_spent(@heading))) %>
</em> </em>
</p> </p>
<% elsif @assigned_heading.present? %> <% elsif @assigned_heading.present? %>
<p> <p>
<%= t("budgets.investments.index.sidebar.different_heading_assigned_html", <%= sanitize(t("budgets.investments.index.sidebar.different_heading_assigned",
heading_link: heading_link(@assigned_heading, @budget) heading_link: heading_link(@assigned_heading, @budget)
) %> )) %>
<br> <br>
<small> <small>
<%= sanitize(t("budgets.investments.index.sidebar.change_ballot", <%= sanitize(t("budgets.investments.index.sidebar.change_ballot",

View File

@@ -28,9 +28,9 @@
<h2><%= t("shared.search_results") %></h2> <h2><%= t("shared.search_results") %></h2>
<p> <p>
<%= page_entries_info @investments %> <%= page_entries_info @investments %>
<%= t("budgets.investments.index.search_results_html", <%= sanitize(t("budgets.investments.index.search_results",
count: @investments.size, count: @investments.size,
search_term: params[:search]) %> search_term: params[:search])) %>
</p> </p>
</div> </div>
</div> </div>

View File

@@ -34,7 +34,7 @@
<thead> <thead>
<tr> <tr>
<th scope="col" rowspan="2"><%= t("stats.budgets.heading") %></th> <th scope="col" rowspan="2"><%= t("stats.budgets.heading") %></th>
<th scope="col" rowspan="2"><%= t("stats.budgets.investments_sent_html") %></th> <th scope="col" rowspan="2"><%= sanitize(t("stats.budgets.investments_sent")) %></th>
<% stats.all_phases.each do |phase| %> <% stats.all_phases.each do |phase| %>
<th scope="col" colspan="3"> <th scope="col" colspan="3">

View File

@@ -8,7 +8,7 @@
<%= image_tag "quote_before_white.png", style: "max-width: 40px; vertical-align: top;" %> <%= image_tag "quote_before_white.png", style: "max-width: 40px; vertical-align: top;" %>
<h1 style="color: #fff; font-size: 60px; line-height: 90px; display: inline;"><%= @proposal.title %></h1> <h1 style="color: #fff; font-size: 60px; line-height: 90px; display: inline;"><%= @proposal.title %></h1>
<%= image_tag "quote_after_white.png", style: "max-width: 40px; vertical-align: top;" %> <%= image_tag "quote_after_white.png", style: "max-width: 40px; vertical-align: top;" %>
<h2 style="color: #fff; font-size: 40px; line-height: 60px"><%= t("dashboard.mailer.forward.subtitle_html") %></h2> <h2 style="color: #fff; font-size: 40px; line-height: 60px"><%= sanitize(t("dashboard.mailer.forward.subtitle")) %></h2>
</td> </td>
</tr> </tr>
</tbody> </tbody>

View File

@@ -5,7 +5,7 @@
<%= image_tag "quote_before_white.png" %> <%= image_tag "quote_before_white.png" %>
<h1 class="inline"><%= proposal.title %></h1> <h1 class="inline"><%= proposal.title %></h1>
<%= image_tag "quote_after_white.png" %> <%= image_tag "quote_after_white.png" %>
<h2><%= t("dashboard.mailer.forward.subtitle_html") %></h2> <h2><%= sanitize(t("dashboard.mailer.forward.subtitle")) %></h2>
</div> </div>
<div class="margin-bottom"> <div class="margin-bottom">

View File

@@ -10,7 +10,7 @@
<%= t("dashboard.poster.index.poster_subtitle") %> <%= t("dashboard.poster.index.poster_subtitle") %>
</h1> </h1>
<p class="intro"> <p class="intro">
<%= t("dashboard.poster.index.intro_text_html", org: Setting["org_name"]) %> <%= sanitize(t("dashboard.poster.index.intro_text", org: Setting["org_name"])) %>
</p> </p>
<p class="text-center"> <p class="text-center">
@@ -29,7 +29,7 @@
<h3><%= proposal.title %></h3> <h3><%= proposal.title %></h3>
<%= image_tag "quote_after_blue.png" %> <%= image_tag "quote_after_blue.png" %>
<p class="poster-footer"> <p class="poster-footer">
<%= t("dashboard.poster.index.footer_html", link: proposal_url(proposal)) %> <%= sanitize(t("dashboard.poster.index.footer", link: proposal_url(proposal))) %>
</p> </p>
</div> </div>
</div> </div>

View File

@@ -16,7 +16,7 @@
</strong> </strong>
</h1> </h1>
<p class="intro"> <p class="intro">
<%= t("dashboard.poster.index.intro_text_html", org: Setting["org_name"]) %> <%= sanitize(t("dashboard.poster.index.intro_text", org: Setting["org_name"])) %>
</p> </p>
<p class="text-center proposal-code"> <p class="text-center proposal-code">
<strong><%= t("dashboard.poster.index.proposal_code", code: proposal.code) %></strong> <strong><%= t("dashboard.poster.index.proposal_code", code: proposal.code) %></strong>
@@ -34,7 +34,7 @@
<h3><strong><%= proposal.title %></strong></h3> <h3><strong><%= proposal.title %></strong></h3>
<%= wicked_pdf_image_tag "quote_after_blue.png" %> <%= wicked_pdf_image_tag "quote_after_blue.png" %>
<p class="poster-footer"> <p class="poster-footer">
<%= t("dashboard.poster.index.footer_html", link: proposal_url(proposal)) %> <%= sanitize(t("dashboard.poster.index.footer", link: proposal_url(proposal))) %>
</p> </p>
</div> </div>
</div> </div>

View File

@@ -18,7 +18,9 @@
<p> <p>
<%= page_entries_info @debates %> <%= page_entries_info @debates %>
<% if !@advanced_search_terms %> <% if !@advanced_search_terms %>
<%= t("debates.index.search_results_html", count: @debates.size, search_term: @search_terms) %> <%= sanitize(
t("debates.index.search_results", count: @debates.size, search_term: @search_terms)
) %>
<% end %> <% end %>
</p> </p>
<% elsif @tag_filter %> <% elsif @tag_filter %>

View File

@@ -1,7 +1,7 @@
<% provide :title do %><%= t("devise_views.confirmations.show.title") %><% end %> <% provide :title do %><%= t("devise_views.confirmations.show.title") %><% end %>
<h1 class="text-center"><%= t("devise_views.confirmations.show.title") %></h1> <h1 class="text-center"><%= t("devise_views.confirmations.show.title") %></h1>
<p><%= t("devise_views.confirmations.show.instructions_html", email: resource.email) %></p> <p><%= sanitize(t("devise_views.confirmations.show.instructions", email: resource.email)) %></p>
<%= form_for(resource, <%= form_for(resource,
as: resource_name, as: resource_name,

View File

@@ -18,6 +18,6 @@
} %> } %>
<div id="max-documents-notice" class="max-documents-notice callout primary text-center <%= "hide" unless max_documents_allowed?(documentable) %>"> <div id="max-documents-notice" class="max-documents-notice callout primary text-center <%= "hide" unless max_documents_allowed?(documentable) %>">
<%= t "documents.max_documents_allowed_reached_html" %> <%= sanitize(t("documents.max_documents_allowed_reached")) %>
</div> </div>
</div> </div>

View File

@@ -9,9 +9,9 @@
</p> </p>
<p style="font-family: 'Open Sans','Helvetica Neue',arial,sans-serif;font-size: 14px;font-weight: normal;line-height: 24px;"> <p style="font-family: 'Open Sans','Helvetica Neue',arial,sans-serif;font-size: 14px;font-weight: normal;line-height: 24px;">
<%= t("mailers.budget_investment_unfeasible.new_html", <%= sanitize(t("mailers.budget_investment_unfeasible.new",
url: link_to(t("mailers.budget_investment_unfeasible.new_href"), url: link_to(t("mailers.budget_investment_unfeasible.new_href"),
new_budget_investment_url(@investment.budget), style: "color: #2895F1; text-decoration: underline;")) %> new_budget_investment_url(@investment.budget), style: "color: #2895F1; text-decoration: underline;"))) %>
</p> </p>
<p style="font-family: 'Open Sans','Helvetica Neue',arial,sans-serif;font-size: 14px;font-weight: normal;line-height: 24px;"> <p style="font-family: 'Open Sans','Helvetica Neue',arial,sans-serif;font-size: 14px;font-weight: normal;line-height: 24px;">

View File

@@ -9,7 +9,8 @@
</p> </p>
<p style="font-family: 'Open Sans','Helvetica Neue',arial,sans-serif;font-size: 14px;font-weight: normal;line-height: 24px;"> <p style="font-family: 'Open Sans','Helvetica Neue',arial,sans-serif;font-size: 14px;font-weight: normal;line-height: 24px;">
<%= t("mailers.comment.new_comment_by_html", commenter: @comment.author.name) %> <%= link_to @commentable.title, commentable_url(@commentable), style: "color: #2895F1; text-decoration:none;" %> <%= sanitize(t("mailers.comment.new_comment_by", commenter: @comment.author.name)) %>
<%= link_to @commentable.title, commentable_url(@commentable), style: "color: #2895F1; text-decoration:none;" %>
</p> </p>
<p style="border-left: 2px solid #DEE0E3;font-family: 'Open Sans','Helvetica Neue',arial,sans-serif;font-size: 14px;font-style: italic;font-weight: normal;line-height: 24px;margin-left: 20px;padding: 10px;"> <p style="border-left: 2px solid #DEE0E3;font-family: 'Open Sans','Helvetica Neue',arial,sans-serif;font-size: 14px;font-style: italic;font-weight: normal;line-height: 24px;margin-left: 20px;padding: 10px;">

View File

@@ -1,8 +1,8 @@
<td style="padding-bottom: 20px; padding-left: 10px;"> <td style="padding-bottom: 20px; padding-left: 10px;">
<p style="font-family: 'Open Sans','Helvetica Neue',arial,sans-serif; font-size: 20px;"> <p style="font-family: 'Open Sans','Helvetica Neue',arial,sans-serif; font-size: 20px;">
<%= t("mailers.direct_message_for_sender.title_html", <%= sanitize(t("mailers.direct_message_for_sender.title",
receiver: @direct_message.receiver.name) %> receiver: @direct_message.receiver.name)) %>
</p> </p>
<h2 style="font-family: 'Open Sans','Helvetica Neue',arial,sans-serif; font-size: 18px;"> <h2 style="font-family: 'Open Sans','Helvetica Neue',arial,sans-serif; font-size: 18px;">

View File

@@ -4,16 +4,16 @@
</h1> </h1>
<p style="font-family: 'Open Sans','Helvetica Neue',arial,sans-serif;font-size: 14px;font-weight: normal;line-height: 24px;"> <p style="font-family: 'Open Sans','Helvetica Neue',arial,sans-serif;font-size: 14px;font-weight: normal;line-height: 24px;">
<%= t("mailers.email_verification.instructions_html", <%= sanitize(t("mailers.email_verification.instructions",
verification_link: link_to( verification_link: link_to(
t("mailers.email_verification.click_here_to_verify"), t("mailers.email_verification.click_here_to_verify"),
email_url(email_verification_token: @token))) %> email_url(email_verification_token: @token)))) %>
</p> </p>
<p style="font-family: 'Open Sans','Helvetica Neue',arial,sans-serif;font-size: 14px;font-weight: normal;line-height: 24px;"> <p style="font-family: 'Open Sans','Helvetica Neue',arial,sans-serif;font-size: 14px;font-weight: normal;line-height: 24px;">
<%= t("mailers.email_verification.instructions_2_html", <%= sanitize(t("mailers.email_verification.instructions_2",
document_type: humanize_document_type(@document_type), document_type: humanize_document_type(@document_type),
document_number: @document_number) %> document_number: @document_number)) %>
</p> </p>
<p style="font-family: 'Open Sans','Helvetica Neue',arial,sans-serif;font-size: 14px;font-weight: normal;line-height: 24px;"> <p style="font-family: 'Open Sans','Helvetica Neue',arial,sans-serif;font-size: 14px;font-weight: normal;line-height: 24px;">
<%= t("mailers.email_verification.thanks") %> <%= t("mailers.email_verification.thanks") %>

View File

@@ -9,7 +9,11 @@
</p> </p>
<p style="font-family: 'Open Sans','Helvetica Neue',arial,sans-serif;font-size: 14px;font-weight: normal;line-height: 24px;"> <p style="font-family: 'Open Sans','Helvetica Neue',arial,sans-serif;font-size: 14px;font-weight: normal;line-height: 24px;">
<%= t("mailers.evaluation_comment.new_comment_by_html", commenter: @email.comment.author.name, investment: valuation_comments_link(@email.commentable)) %> <%= sanitize(t(
"mailers.evaluation_comment.new_comment_by",
commenter: @email.comment.author.name,
investment: valuation_comments_link(@email.commentable)
)) %>
</p> </p>
<%= t("mailers.evaluation_comment.commenter_info", commenter: @email.comment.author.name, time: l(@email.comment.created_at)) %> <%= t("mailers.evaluation_comment.commenter_info", commenter: @email.comment.author.name, time: l(@email.comment.created_at)) %>

View File

@@ -9,7 +9,8 @@
</p> </p>
<p style="font-family: 'Open Sans','Helvetica Neue',arial,sans-serif;font-size: 14px;font-weight: normal;line-height: 24px;"> <p style="font-family: 'Open Sans','Helvetica Neue',arial,sans-serif;font-size: 14px;font-weight: normal;line-height: 24px;">
<%= t("mailers.reply.new_reply_by_html", commenter: @email.reply.author.name) %> <%= link_to @email.commentable.title, comment_url(@email.reply.id), style: "color: #2895F1; text-decoration:none;" %> <%= sanitize(t("mailers.reply.new_reply_by", commenter: @email.reply.author.name)) %>
<%= link_to @email.commentable.title, comment_url(@email.reply.id), style: "color: #2895F1; text-decoration:none;" %>
</p> </p>
<div style="border-left: 2px solid #DEE0E3;font-family: 'Open Sans','Helvetica Neue',arial,sans-serif;font-size: 14px;font-style: italic;font-weight: normal;line-height: 24px;margin-left: 20px;padding: 10px;"> <div style="border-left: 2px solid #DEE0E3;font-family: 'Open Sans','Helvetica Neue',arial,sans-serif;font-size: 14px;font-style: italic;font-weight: normal;line-height: 24px;margin-left: 20px;padding: 10px;">

View File

@@ -10,7 +10,9 @@
<% if @search_terms %> <% if @search_terms %>
<h3> <h3>
<%= page_entries_info @proposals %> <%= page_entries_info @proposals %>
<%= t("proposals.index.search_results_html", count: @proposals.size, search_term: @search_terms) %> <%= sanitize(
t("proposals.index.search_results", count: @proposals.size, search_term: @search_terms)
) %>
</h3> </h3>
<% end %> <% end %>

View File

@@ -4,6 +4,6 @@
<h2><%= t("management.user_invites.create.title") %></h2> <h2><%= t("management.user_invites.create.title") %></h2>
<div class="callout success"> <div class="callout success">
<%= t("management.user_invites.create.success_html", count: @emails.count) %> <%= sanitize(t("management.user_invites.create.success", count: @emails.count)) %>
</div> </div>
</div> </div>

View File

@@ -1,7 +1,7 @@
<% if @user.email.blank? %> <% if @user.email.blank? %>
<p><%= t("management.users.autogenerated_password_html", password: @user.password) %></p> <p><%= sanitize(t("management.users.autogenerated_password", password: @user.password)) %></p>
<% else %> <% else %>
<p><%= t("management.users.create_user_success_html", email: @user.email) %></p> <p><%= sanitize(t("management.users.create_user_success", email: @user.email)) %></p>
<% end %> <% end %>
<%= render "management/user_permissions", <%= render "management/user_permissions",

View File

@@ -1,7 +1,7 @@
<h2><%= t("devise_views.organizations.registrations.success.title") %></h2> <h2><%= t("devise_views.organizations.registrations.success.title") %></h2>
<p><%= t("devise_views.organizations.registrations.success.thank_you_html") %></p> <p><%= sanitize(t("devise_views.organizations.registrations.success.thank_you")) %></p>
<p><%= t("devise_views.organizations.registrations.success.instructions_1_html") %></p> <p><%= sanitize(t("devise_views.organizations.registrations.success.instructions_1")) %></p>
<p><%= t("devise_views.organizations.registrations.success.instructions_2_html") %></p> <p><%= sanitize(t("devise_views.organizations.registrations.success.instructions_2")) %></p>
<p><%= t("devise_views.organizations.registrations.success.instructions_3") %></p> <p><%= t("devise_views.organizations.registrations.success.instructions_3") %></p>
<p> <p>
<%= link_to t("devise_views.organizations.registrations.success.back_to_index"), <%= link_to t("devise_views.organizations.registrations.success.back_to_index"),

View File

@@ -7,8 +7,8 @@
</div> </div>
<% elsif current_user.unverified? %> <% elsif current_user.unverified? %>
<div class="callout warning"> <div class="callout warning">
<%= t("polls.show.cant_answer_verify_html", <%= sanitize(t("polls.show.cant_answer_verify",
verify_link: link_to(t("polls.show.verify_link"), verification_path)) %> verify_link: link_to(t("polls.show.verify_link"), verification_path))) %>
</div> </div>
<% elsif @poll.expired? %> <% elsif @poll.expired? %>
<div class="callout alert"> <div class="callout alert">

View File

@@ -4,7 +4,7 @@
<h2><%= t("proposals.created.title") %></h2> <h2><%= t("proposals.created.title") %></h2>
<p><%= t("proposals.created.motivation") %></p> <p><%= t("proposals.created.motivation") %></p>
<p><%= t("proposals.created.motivation_2_html") %></p> <p><%= sanitize(t("proposals.created.motivation_2")) %></p>
<% if can?(:dashboard, @proposal) %> <% if can?(:dashboard, @proposal) %>
<%= link_to t("proposals.created.dashboard"), <%= link_to t("proposals.created.dashboard"),

View File

@@ -24,7 +24,9 @@
<p> <p>
<%= page_entries_info @proposals %> <%= page_entries_info @proposals %>
<% if !@advanced_search_terms %> <% if !@advanced_search_terms %>
<%= t("proposals.index.search_results_html", count: @proposals.size, search_term: @search_terms) %> <%= sanitize(
t("proposals.index.search_results", count: @proposals.size, search_term: @search_terms)
) %>
<% end %> <% end %>
<p> <p>
<% elsif @tag_filter %> <% elsif @tag_filter %>

View File

@@ -1,7 +1,7 @@
<div class="row globalize-languages column padding-top <%= highlight_translation_html_class %>" <div class="row globalize-languages column padding-top <%= highlight_translation_html_class %>"
data-zero-languages-description="<%= t("shared.translations.languages_in_use_html", count: 0) %>" data-zero-languages-description="<%= sanitize(t("shared.translations.languages_in_use", count: 0)) %>"
data-one-languages-description="<%= t("shared.translations.languages_in_use_html", count: 1) %>" data-one-languages-description="<%= sanitize(t("shared.translations.languages_in_use", count: 1)) %>"
data-other-languages-description="<%= t("shared.translations.languages_in_use_html", count: 2) %>"> data-other-languages-description="<%= sanitize(t("shared.translations.languages_in_use", count: 2)) %>">
<div class="small-6 large-3 column"> <div class="small-6 large-3 column">
<span class="small"> <span class="small">
<strong class="js-languages-description"><%= selected_languages_description(resource) %></strong> <strong class="js-languages-description"><%= selected_languages_description(resource) %></strong>

View File

@@ -10,7 +10,7 @@
<% if local_assigns[:message].present? %> <% if local_assigns[:message].present? %>
<%= message %> <%= message %>
<% else %> <% else %>
<%= t("form.not_saved_html", resource: t("form.#{resource.class.to_s.underscore}")) %> <%= sanitize(t("form.not_saved", resource: t("form.#{resource.class.to_s.underscore}"))) %>
<% end %> <% end %>
</strong> </strong>
</div> </div>

View File

@@ -1,6 +1,6 @@
<h2><%= t("devise_views.users.registrations.success.title") %></h2> <h2><%= t("devise_views.users.registrations.success.title") %></h2>
<p><%= t("devise_views.users.registrations.success.thank_you_html") %></p> <p><%= sanitize(t("devise_views.users.registrations.success.thank_you")) %></p>
<p><%= t("devise_views.users.registrations.success.instructions_1_html") %></p> <p><%= sanitize(t("devise_views.users.registrations.success.instructions_1")) %></p>
<p><%= t("devise_views.users.registrations.success.instructions_2") %></p> <p><%= t("devise_views.users.registrations.success.instructions_2") %></p>
<p> <p>
<%= link_to t("devise_views.users.registrations.success.back_to_index"), <%= link_to t("devise_views.users.registrations.success.back_to_index"),

View File

@@ -13,7 +13,9 @@
<%= investment.unfeasibility_explanation.presence || "-" %> <%= investment.unfeasibility_explanation.presence || "-" %>
</p> </p>
<p> <p>
<strong><%= t("valuation.budget_investments.edit.price_html", currency: budget.currency_symbol) %>:</strong> <strong>
<%= sanitize(t("valuation.budget_investments.edit.price", currency: budget.currency_symbol)) %>:
</strong>
<%= investment.price.presence || "-" %> <%= investment.price.presence || "-" %>
</p> </p>
<p> <p>

View File

@@ -41,7 +41,7 @@
<div class="row"> <div class="row">
<div class="small-12 medium-6 column"> <div class="small-12 medium-6 column">
<%= f.number_field :price, <%= f.number_field :price,
label: t("valuation.budget_investments.edit.price_html", currency: budget.currency_symbol), label: t("valuation.budget_investments.edit.price", currency: budget.currency_symbol),
max: 1000000000000000 %> max: 1000000000000000 %>
</div> </div>

View File

@@ -7,7 +7,7 @@
<h1><%= t("verification.letter.edit.title") %></h1> <h1><%= t("verification.letter.edit.title") %></h1>
<div data-alert class="callout success"> <div data-alert class="callout success">
<%= t("verification.letter.create.flash.success_html") %> <%= sanitize(t("verification.letter.create.flash.success")) %>
</div> </div>
<%= link_to t("verification.letter.edit.see_all"), proposals_path, class: "button warning" %> <%= link_to t("verification.letter.edit.see_all"), proposals_path, class: "button warning" %>

View File

@@ -54,7 +54,7 @@
<div class="dropdown-pane" id="info-document-number" data-dropdown <div class="dropdown-pane" id="info-document-number" data-dropdown
data-hover="true" data-hover-pane="true"> data-hover="true" data-hover-pane="true">
<%= t("verification.residence.new.document_number_help_text_html") %> <%= sanitize(t("verification.residence.new.document_number_help_text")) %>
</div> </div>
<%= f.text_field :document_number, label: false %> <%= f.text_field :document_number, label: false %>

View File

@@ -27,7 +27,7 @@
<div class="small-12 medium-6"> <div class="small-12 medium-6">
<%= f.label :phone, t("verification.sms.new.phone"), class: "inline-block" %> <%= f.label :phone, t("verification.sms.new.phone"), class: "inline-block" %>
<span class="inline-block"><%= t("verification.sms.new.phone_format_html") %></span> <span class="inline-block"><%= sanitize(t("verification.sms.new.phone_format")) %></span>
<p class="help-text" id="phone-text-help"><%= t("verification.sms.new.phone_note") %></p> <p class="help-text" id="phone-text-help"><%= t("verification.sms.new.phone_note") %></p>
<%= f.text_field :phone, label: false, <%= f.text_field :phone, label: false,
placeholder: t("verification.sms.new.phone_placeholder"), placeholder: t("verification.sms.new.phone_placeholder"),

View File

@@ -198,8 +198,8 @@ en:
min_total_supports: Minimum supports min_total_supports: Minimum supports
max_total_supports: Maximum supports max_total_supports: Maximum supports
winners: Winners winners: Winners
one_filter_html: "Current applied filters: <b><em>%{filter}</em></b>" one_filter: "Current applied filters: <b><em>%{filter}</em></b>"
two_filters_html: "Current applied filters: <b><em>%{filter}, %{advanced_filters}</em></b>" two_filters: "Current applied filters: <b><em>%{filter}, %{advanced_filters}</em></b>"
buttons: buttons:
filter: Filter filter: Filter
download_current_selection: "Download current selection" download_current_selection: "Download current selection"
@@ -555,7 +555,7 @@ en:
form: form:
error: Error error: Error
form: form:
title_html: 'Editing <span class="strong">%{draft_version_title}</span> from the process <span class="strong">%{process_title}</span>' title: 'Editing <span class="strong">%{draft_version_title}</span> from the process <span class="strong">%{process_title}</span>'
launch_text_editor: Launch text editor launch_text_editor: Launch text editor
close_text_editor: Close text editor close_text_editor: Close text editor
use_markdown: Use Markdown to format the text use_markdown: Use Markdown to format the text
@@ -767,7 +767,7 @@ en:
empty_newsletters: There are no newsletters to show empty_newsletters: There are no newsletters to show
new: new:
title: New newsletter title: New newsletter
header_footer_help_text_html: "The heading and footer are the same for all emails, you can modify them on <code>app/views/layouts/mailer_header</code> and <code>app/views/layouts/mailer_footer</code>.<br>You can replace header image on %{link}." header_footer_help_text: "The heading and footer are the same for all emails, you can modify them on <code>app/views/layouts/mailer_header</code> and <code>app/views/layouts/mailer_footer</code>.<br>You can replace header image on %{link}."
image_link: "custom images" image_link: "custom images"
edit: edit:
title: Edit newsletter title: Edit newsletter
@@ -1187,7 +1187,7 @@ en:
pending: Pending pending: Pending
rejected: Rejected rejected: Rejected
verified: Verified verified: Verified
hidden_count_html: hidden_count:
one: There is also <strong>one organisation</strong> with no users or with a hidden user. one: There is also <strong>one organisation</strong> with no users or with a hidden user.
other: There are <strong>%{count} organisations</strong> with no users or with a hidden user. other: There are <strong>%{count} organisations</strong> with no users or with a hidden user.
name: Name name: Name
@@ -1542,7 +1542,7 @@ en:
see_page: See page see_page: See page
new: new:
title: Create new custom page title: Create new custom page
slug_help_html: "Text to identify this page on URL, for example <code>https://consulproject.org/page-slug</code>" slug_help: "Text to identify this page on URL, for example <code>https://consulproject.org/page-slug</code>"
page: page:
created_at: Created at created_at: Created at
status: Status status: Status

View File

@@ -7,7 +7,7 @@ en:
remaining: "You still have <span>%{amount}</span> to invest." remaining: "You still have <span>%{amount}</span> to invest."
no_balloted_group_yet: "You have not voted on this group yet, go vote!" no_balloted_group_yet: "You have not voted on this group yet, go vote!"
remove: Remove vote remove: Remove vote
voted_html: voted:
one: "You have voted <span>one</span> investment." one: "You have voted <span>one</span> investment."
other: "You have voted <span>%{count}</span> investments." other: "You have voted <span>%{count}</span> investments."
voted_info: "Your ballot is confirmed!" voted_info: "Your ballot is confirmed!"
@@ -79,17 +79,17 @@ en:
button: Search button: Search
placeholder: Search investment projects... placeholder: Search investment projects...
title: Search title: Search
search_results_html: search_results:
one: " containing the term <strong>'%{search_term}'</strong>" one: " containing the term <strong>'%{search_term}'</strong>"
other: " containing the term <strong>'%{search_term}'</strong>" other: " containing the term <strong>'%{search_term}'</strong>"
sidebar: sidebar:
my_ballot: My ballot my_ballot: My ballot
voted_html: voted:
one: "<strong>You voted one proposal with a cost of %{amount_spent}</strong>" one: "<strong>You voted one proposal with a cost of %{amount_spent}</strong>"
other: "<strong>You voted %{count} proposals with a cost of %{amount_spent}</strong>" other: "<strong>You voted %{count} proposals with a cost of %{amount_spent}</strong>"
voted_info: You can %{link} at any time until the close of this phase. No need to spend all the money available. voted_info: You can %{link} at any time until the close of this phase. No need to spend all the money available.
voted_info_link: change your vote voted_info_link: change your vote
different_heading_assigned_html: "You have active votes in another heading: %{heading_link}" different_heading_assigned: "You have active votes in another heading: %{heading_link}"
change_ballot: "If your change your mind you can remove your votes in %{check_ballot} and start again." change_ballot: "If your change your mind you can remove your votes in %{check_ballot} and start again."
check_ballot_link: "check and confirm my ballot" check_ballot_link: "check and confirm my ballot"
zero: You have not voted any investment project in this group. zero: You have not voted any investment project in this group.
@@ -109,9 +109,9 @@ en:
author_deleted: User deleted author_deleted: User deleted
price_explanation: Price explanation price_explanation: Price explanation
unfeasibility_explanation: Unfeasibility explanation unfeasibility_explanation: Unfeasibility explanation
code_html: "Investment project code: <strong>%{code}</strong>" code: "Investment project code: <strong>%{code}</strong>"
location_html: "Location: <strong>%{location}</strong>" location: "Location: <strong>%{location}</strong>"
organization_name_html: "Proposed on behalf of: <strong>%{name}</strong>" organization_name: "Proposed on behalf of: <strong>%{name}</strong>"
share: Share share: Share
title: Investment project title: Investment project
supports: Supports supports: Supports
@@ -120,10 +120,10 @@ en:
comments_tab: Comments comments_tab: Comments
milestones_tab: Milestones milestones_tab: Milestones
author: Author author: Author
project_unfeasible_html: "This investment project <strong>has been marked as not feasible</strong> and will not go to balloting phase." project_unfeasible: "This investment project <strong>has been marked as not feasible</strong> and will not go to balloting phase."
project_selected_html: "This investment project <strong>has been selected</strong> for balloting phase." project_selected: "This investment project <strong>has been selected</strong> for balloting phase."
project_winner: "Winning investment project" project_winner: "Winning investment project"
project_not_selected_html: "This investment project <strong>has not been selected</strong> for balloting phase." project_not_selected: "This investment project <strong>has not been selected</strong> for balloting phase."
see_price_explanation: See price explanation see_price_explanation: See price explanation
wrong_price_format: Only integer numbers wrong_price_format: Only integer numbers
investment: investment:
@@ -141,7 +141,7 @@ en:
give_support: Support give_support: Support
header: header:
check_ballot: Check and confirm my ballot check_ballot: Check and confirm my ballot
different_heading_assigned_html: "You have active votes in another heading: %{heading_link}" different_heading_assigned: "You have active votes in another heading: %{heading_link}"
change_ballot: "If your change your mind you can remove your votes in %{check_ballot} and start again." change_ballot: "If your change your mind you can remove your votes in %{check_ballot} and start again."
check_ballot_link: "check and confirm my ballot" check_ballot_link: "check and confirm my ballot"
price: "This heading has a budget of" price: "This heading has a budget of"

View File

@@ -6,7 +6,7 @@ en:
submit: Re-send instructions submit: Re-send instructions
title: Re-send confirmation instructions title: Re-send confirmation instructions
show: show:
instructions_html: Confirming the account with email %{email} instructions: Confirming the account with email %{email}
new_password_confirmation_label: Repeat access password new_password_confirmation_label: Repeat access password
new_password_label: New access password new_password_label: New access password
please_set_password: Please choose your new pasword (it will allow you to login with the email above) please_set_password: Please choose your new pasword (it will allow you to login with the email above)
@@ -50,10 +50,10 @@ en:
title: Register as an organisation or collective title: Register as an organisation or collective
success: success:
back_to_index: I understand; go back to main page back_to_index: I understand; go back to main page
instructions_1_html: "<strong>We will contact you soon</strong> to verify that you do in fact represent this collective." instructions_1: "<strong>We will contact you soon</strong> to verify that you do in fact represent this collective."
instructions_2_html: While your <strong>email is reviewed</strong>, we have sent you a <strong>link to confirm your account</strong>. instructions_2: While your <strong>email is reviewed</strong>, we have sent you a <strong>link to confirm your account</strong>.
instructions_3: Once confirmed, you may begin to participate as an unverified collective. instructions_3: Once confirmed, you may begin to participate as an unverified collective.
thank_you_html: Thank you for registering your collective on the website. It is now <strong>pending verification</strong>. thank_you: Thank you for registering your collective on the website. It is now <strong>pending verification</strong>.
title: Registration of organisation / collective title: Registration of organisation / collective
passwords: passwords:
edit: edit:
@@ -123,7 +123,7 @@ en:
username_note: Name that appears next to your posts username_note: Name that appears next to your posts
success: success:
back_to_index: I understand; go back to main page back_to_index: I understand; go back to main page
instructions_1_html: Please <b>check your email</b> - we have sent you a <b>link to confirm your account</b>. instructions_1: Please <b>check your email</b> - we have sent you a <b>link to confirm your account</b>.
instructions_2: Once confirmed, you may begin participation. instructions_2: Once confirmed, you may begin participation.
thank_you_html: Thank you for registering for the website. You must now <b>confirm your email address</b>. thank_you: Thank you for registering for the website. You must now <b>confirm your email address</b>.
title: Confirm your email address title: Confirm your email address

View File

@@ -1,7 +1,7 @@
en: en:
documents: documents:
title: Documents title: Documents
max_documents_allowed_reached_html: You have reached the maximum number of documents allowed! <strong>You have to delete one before you can upload another.</strong> max_documents_allowed_reached: You have reached the maximum number of documents allowed! <strong>You have to delete one before you can upload another.</strong>
additional: Additional documentation additional: Additional documentation
form: form:
title: Documents title: Documents

View File

@@ -116,7 +116,7 @@ en:
button: Search button: Search
placeholder: Search debates... placeholder: Search debates...
title: Search title: Search
search_results_html: search_results:
one: " containing the term <strong>'%{search_term}'</strong>" one: " containing the term <strong>'%{search_term}'</strong>"
other: " containing the term <strong>'%{search_term}'</strong>" other: " containing the term <strong>'%{search_term}'</strong>"
select_order: Order by select_order: Order by
@@ -169,7 +169,7 @@ en:
direct_message: private message direct_message: private message
error: error error: error
errors: errors errors: errors
not_saved_html: "prevented this %{resource} from being saved. <br>Please check the marked fields to know how to correct them:" not_saved: "prevented this %{resource} from being saved. <br>Please check the marked fields to know how to correct them:"
policy: Privacy Policy policy: Privacy Policy
proposal: Proposal proposal: Proposal
proposal_notification: "Notification" proposal_notification: "Notification"
@@ -302,7 +302,7 @@ en:
created: created:
title: Congratulations! You have taken the first step. title: Congratulations! You have taken the first step.
motivation: "It is important to prepare the launch campaign for your proposal to be successful. The first few days are decisive." motivation: "It is important to prepare the launch campaign for your proposal to be successful. The first few days are decisive."
motivation_2_html: "<strong>If you want recommendations to prepare the publishing leave your proposal as a draft and we will guide you.</strong>" motivation_2: "<strong>If you want recommendations to prepare the publishing leave your proposal as a draft and we will guide you.</strong>"
publish: No, I want to publish the proposal publish: No, I want to publish the proposal
dashboard: Yes, I want help and I'll publish later dashboard: Yes, I want help and I'll publish later
preview_title: This is how your proposal will look when you publish it preview_title: This is how your proposal will look when you publish it
@@ -376,7 +376,7 @@ en:
button: Search button: Search
placeholder: Search proposals... placeholder: Search proposals...
title: Search title: Search
search_results_html: search_results:
one: " containing the term <strong>'%{search_term}'</strong>" one: " containing the term <strong>'%{search_term}'</strong>"
other: " containing the term <strong>'%{search_term}'</strong>" other: " containing the term <strong>'%{search_term}'</strong>"
select_order: Order by select_order: Order by
@@ -570,12 +570,12 @@ en:
title: Poster preview title: Poster preview
poster_title: "Do not keep looking," poster_title: "Do not keep looking,"
poster_subtitle: "back me up! ;)" poster_subtitle: "back me up! ;)"
intro_text_html: intro_text:
"<strong>I am participating in %{org}</strong> with my own citizen proposal and only if you also add you can I achieve the "<strong>I am participating in %{org}</strong> with my own citizen proposal and only if you also add you can I achieve the
necessary support to make the city we all want." necessary support to make the city we all want."
proposal_code: "Code of the proposal: %{code}" proposal_code: "Code of the proposal: %{code}"
support: Support my proposal support: Support my proposal
footer_html: "<strong>Visit %{link} and support this proposal.</strong> We need to be many. Decide your too. Thank you!" footer: "<strong>Visit %{link} and support this proposal.</strong> We need to be many. Decide your too. Thank you!"
new: new:
title: Poster of your proposal title: Poster of your proposal
options: options:
@@ -593,7 +593,7 @@ en:
sent: The email has been sent sent: The email has been sent
mailer: mailer:
forward: forward:
subtitle_html: "If you support me, <br>we will achieve it." subtitle: "If you support me, <br>we will achieve it."
support_button: Support this proposal support_button: Support this proposal
share_in: Share in share_in: Share in
hi: "Hello!" hi: "Hello!"
@@ -644,7 +644,7 @@ en:
back: Back to voting back: Back to voting
cant_answer_not_logged_in: "You must %{signin} or %{signup} to participate." cant_answer_not_logged_in: "You must %{signin} or %{signup} to participate."
comments_tab: Comments comments_tab: Comments
cant_answer_verify_html: "You must %{verify_link} in order to answer." cant_answer_verify: "You must %{verify_link} in order to answer."
verify_link: "verify your account" verify_link: "verify your account"
cant_answer_expired: "This poll has finished." cant_answer_expired: "This poll has finished."
cant_answer_wrong_geozone: "This question is not available on your geozone." cant_answer_wrong_geozone: "This question is not available on your geozone."
@@ -805,7 +805,7 @@ en:
select_language_prompt: Choose language select_language_prompt: Choose language
remove_language: Remove language remove_language: Remove language
add_language: Add language add_language: Add language
languages_in_use_html: languages_in_use:
zero: "<span class='js-languages-count'>0</span> languages in use" zero: "<span class='js-languages-count'>0</span> languages in use"
one: "<span class='js-languages-count'>1</span> language in use" one: "<span class='js-languages-count'>1</span> language in use"
other: "<span class='js-languages-count'>%{count}</span> languages in use" other: "<span class='js-languages-count'>%{count}</span> languages in use"

View File

@@ -4,21 +4,21 @@ en:
no_reply: "This message was sent from an email address that does not accept replies." no_reply: "This message was sent from an email address that does not accept replies."
comment: comment:
hi: Hi hi: Hi
new_comment_by_html: There is a new comment from <strong>%{commenter}</strong> new_comment_by: There is a new comment from <strong>%{commenter}</strong>
subject: Someone has commented on your %{commentable} subject: Someone has commented on your %{commentable}
title: New comment title: New comment
config: config:
manage_email_subscriptions: To stop receiving these emails change your settings in manage_email_subscriptions: To stop receiving these emails change your settings in
email_verification: email_verification:
click_here_to_verify: this link click_here_to_verify: this link
instructions_2_html: This email will verify your account with <b>%{document_type} %{document_number}</b>. If these don't belong to you, please don't click on the previous link and ignore this email. instructions_2: This email will verify your account with <b>%{document_type} %{document_number}</b>. If these don't belong to you, please don't click on the previous link and ignore this email.
instructions_html: To complete the verification of your user account you must click %{verification_link}. instructions: To complete the verification of your user account you must click %{verification_link}.
subject: Confirm your email subject: Confirm your email
thanks: Thank you very much. thanks: Thank you very much.
title: Confirm your account using the following link title: Confirm your account using the following link
reply: reply:
hi: Hi hi: Hi
new_reply_by_html: There is a new response from <strong>%{commenter}</strong> to your comment on new_reply_by: There is a new response from <strong>%{commenter}</strong> to your comment on
subject: Someone has responded to your comment subject: Someone has responded to your comment
title: New response to your comment title: New response to your comment
proposal_notification_digest: proposal_notification_digest:
@@ -35,7 +35,7 @@ en:
unsubscribe_account: My account unsubscribe_account: My account
direct_message_for_sender: direct_message_for_sender:
subject: "You have sent a new private message" subject: "You have sent a new private message"
title_html: "You have sent a new private message to <strong>%{receiver}</strong> with the content:" title: "You have sent a new private message to <strong>%{receiver}</strong> with the content:"
user_invite: user_invite:
ignore: "If you have not requested this invitation don't worry, you can ignore this email." ignore: "If you have not requested this invitation don't worry, you can ignore this email."
text: "Thank you for applying to join %{org}! In seconds you can start to participate, just fill the form below:" text: "Thank you for applying to join %{org}! In seconds you can start to participate, just fill the form below:"
@@ -54,7 +54,7 @@ en:
share: "Share your project" share: "Share your project"
budget_investment_unfeasible: budget_investment_unfeasible:
hi: "Dear user," hi: "Dear user,"
new_html: "For all these, we invite you to elaborate a <strong>new investment</strong> that adjusts to the conditions of this process. You can do it following this link: %{url}." new: "For all these, we invite you to elaborate a <strong>new investment</strong> that adjusts to the conditions of this process. You can do it following this link: %{url}."
new_href: "new investment project" new_href: "new investment project"
sincerely: "Sincerely" sincerely: "Sincerely"
sorry: "Sorry for the inconvenience and we again thank you for your invaluable participation." sorry: "Sorry for the inconvenience and we again thank you for your invaluable participation."
@@ -75,7 +75,7 @@ en:
subject: "New evaluation comment" subject: "New evaluation comment"
title: New evaluation comment for %{investment} title: New evaluation comment for %{investment}
hi: Hi hi: Hi
new_comment_by_html: There is a new evaluation comment from <strong>%{commenter}</strong> to the budget investment %{investment} new_comment_by: There is a new evaluation comment from <strong>%{commenter}</strong> to the budget investment %{investment}
commenter_info: "%{commenter}, %{time}:" commenter_info: "%{commenter}, %{time}:"
new_actions_notification_rake_created: new_actions_notification_rake_created:
subject: "More news about your citizen proposal" subject: "More news about your citizen proposal"

View File

@@ -112,8 +112,8 @@ en:
create_user: Create a new account create_user: Create a new account
create_user_info: We will create an account with the following data create_user_info: We will create an account with the following data
create_user_submit: Create user create_user_submit: Create user
create_user_success_html: We have sent an email to the email address <b>%{email}</b> in order to verify that it belongs to this user. It contains a link they have to click. Then they will have to set their access password before being able to log in to the website create_user_success: We have sent an email to the email address <b>%{email}</b> in order to verify that it belongs to this user. It contains a link they have to click. Then they will have to set their access password before being able to log in to the website
autogenerated_password_html: "Autogenerated password is <b>%{password}</b>, you can change it in the 'My account' section of the web" autogenerated_password: "Autogenerated password is <b>%{password}</b>, you can change it in the 'My account' section of the web"
email_optional_label: Email (optional) email_optional_label: Email (optional)
erased_notice: User account deleted. erased_notice: User account deleted.
erased_by_manager: "Deleted by manager: %{manager}" erased_by_manager: "Deleted by manager: %{manager}"
@@ -128,5 +128,5 @@ en:
submit: Send invitations submit: Send invitations
title: Send invitations title: Send invitations
create: create:
success_html: <strong>%{count} invitations</strong> have been sent. success: <strong>%{count} invitations</strong> have been sent.
title: Send invitations title: Send invitations

View File

@@ -27,7 +27,7 @@ en:
by_heading: "Participants by phase and heading" by_heading: "Participants by phase and heading"
total: "Total" total: "Total"
heading: "Heading" heading: "Heading"
investments_sent_html: "Investment proposals sent" investments_sent: "Investment proposals sent"
participants_support_phase: "Participants support phase" participants_support_phase: "Participants support phase"
participants_vote_phase: "Participants voting phase" participants_vote_phase: "Participants voting phase"
participants_every_phase: "Total participants" participants_every_phase: "Total participants"

View File

@@ -56,7 +56,7 @@ en:
preview: Investment preview preview: Investment preview
edit: edit:
dossier: Dossier dossier: Dossier
price_html: "Price (%{currency})" price: "Price (%{currency})"
price_first_year: "Cost during the first year (%{currency}) <small>(optional, data not public)</small>" price_first_year: "Cost during the first year (%{currency}) <small>(optional, data not public)</small>"
feasibility: Feasibility feasibility: Feasibility
valuation_finished_alert: "Are you sure you want to mark this report as completed? If you do it, it can no longer be modified." valuation_finished_alert: "Are you sure you want to mark this report as completed? If you do it, it can no longer be modified."

View File

@@ -19,7 +19,7 @@ en:
unconfirmed_code: You have not yet entered the confirmation code unconfirmed_code: You have not yet entered the confirmation code
create: create:
flash: flash:
success_html: Thank you for requesting your <b>maximum security code (only required for the final votes)</b>. In a few days we will send it to the address featuring in the data we have on file. Please remember that, if you prefer, you can collect your code from any of the Citizen Support Offices. success: Thank you for requesting your <b>maximum security code (only required for the final votes)</b>. In a few days we will send it to the address featuring in the data we have on file. Please remember that, if you prefer, you can collect your code from any of the Citizen Support Offices.
edit: edit:
see_all: See proposals see_all: See proposals
title: Letter requested title: Letter requested
@@ -49,7 +49,7 @@ en:
accept_terms_text_title: I accept the terms and conditions of access of the Census accept_terms_text_title: I accept the terms and conditions of access of the Census
document_number: Document number document_number: Document number
document_number_help_title: Help document_number_help_title: Help
document_number_help_text_html: "<strong>DNI</strong>: 12345678A<br> <strong>Passport</strong>: AAA000001<br> <strong>Residence card</strong>: X1234567P" document_number_help_text: "<strong>DNI</strong>: 12345678A<br> <strong>Passport</strong>: AAA000001<br> <strong>Residence card</strong>: X1234567P"
document_type: document_type:
passport: Passport passport: Passport
residence_card: Residence card residence_card: Residence card
@@ -73,7 +73,7 @@ en:
title: Security code confirmation title: Security code confirmation
new: new:
phone: Enter your mobile phone number to receive the code phone: Enter your mobile phone number to receive the code
phone_format_html: "<strong><em>(Example: 612345678 or +34612345678)</em></strong>" phone_format: "<strong><em>(Example: 612345678 or +34612345678)</em></strong>"
phone_note: We only use your phone to send you a code, never to contact you. phone_note: We only use your phone to send you a code, never to contact you.
phone_placeholder: "Example: 612345678 or +34612345678" phone_placeholder: "Example: 612345678 or +34612345678"
submit_button: Send submit_button: Send

View File

@@ -198,8 +198,8 @@ es:
min_total_supports: Apoyos mínimos min_total_supports: Apoyos mínimos
max_total_supports: Apoyos máximos max_total_supports: Apoyos máximos
winners: Ganadores winners: Ganadores
one_filter_html: "Filtros en uso: <b><em>%{filter}</em></b>" one_filter: "Filtros en uso: <b><em>%{filter}</em></b>"
two_filters_html: "Filtros en uso: <b><em>%{filter}, %{advanced_filters}</em></b>" two_filters: "Filtros en uso: <b><em>%{filter}, %{advanced_filters}</em></b>"
buttons: buttons:
filter: Filtrar filter: Filtrar
download_current_selection: "Descargar selección actual" download_current_selection: "Descargar selección actual"
@@ -554,7 +554,7 @@ es:
form: form:
error: Error error: Error
form: form:
title_html: 'Editando <span class="strong">%{draft_version_title}</span> del proceso <span class="strong">%{process_title}</span>' title: 'Editando <span class="strong">%{draft_version_title}</span> del proceso <span class="strong">%{process_title}</span>'
launch_text_editor: Lanzar editor de texto launch_text_editor: Lanzar editor de texto
close_text_editor: Cerrar editor de texto close_text_editor: Cerrar editor de texto
use_markdown: Usa Markdown para formatear el texto use_markdown: Usa Markdown para formatear el texto
@@ -766,7 +766,7 @@ es:
empty_newsletters: No hay newsletters para mostrar empty_newsletters: No hay newsletters para mostrar
new: new:
title: Nueva newsletter title: Nueva newsletter
header_footer_help_text_html: "El encabezado y pie son los mismos en todos los emails, puedes modificarlos en <code>app/views/layouts/mailer_header</code> y <code>app/views/layouts/mailer_footer</code>.<br>Puedes reemplazar la imagen del encabezado en %{link}." header_footer_help_text: "El encabezado y pie son los mismos en todos los emails, puedes modificarlos en <code>app/views/layouts/mailer_header</code> y <code>app/views/layouts/mailer_footer</code>.<br>Puedes reemplazar la imagen del encabezado en %{link}."
image_link: "personalizar imágenes" image_link: "personalizar imágenes"
edit: edit:
title: Editar newsletter title: Editar newsletter
@@ -1186,7 +1186,7 @@ es:
pending: Pendientes pending: Pendientes
rejected: Rechazadas rejected: Rechazadas
verified: Verificadas verified: Verificadas
hidden_count_html: hidden_count:
one: Hay además <strong>una organización</strong> sin usuario o con el usuario bloqueado. one: Hay además <strong>una organización</strong> sin usuario o con el usuario bloqueado.
other: Hay <strong>%{count} organizaciones</strong> sin usuario o con el usuario bloqueado. other: Hay <strong>%{count} organizaciones</strong> sin usuario o con el usuario bloqueado.
name: Nombre name: Nombre
@@ -1541,7 +1541,7 @@ es:
see_page: Ver página see_page: Ver página
new: new:
title: Página nueva title: Página nueva
slug_help_html: "Texto que identifica esta página en la URL, por ejemplo <code>https://consulproject.org/slug-de-pagina</code>" slug_help: "Texto que identifica esta página en la URL, por ejemplo <code>https://consulproject.org/slug-de-pagina</code>"
page: page:
created_at: Creada created_at: Creada
status: Estado status: Estado

View File

@@ -7,7 +7,7 @@ es:
remaining: "Te quedan <span>%{amount}</span> para invertir" remaining: "Te quedan <span>%{amount}</span> para invertir"
no_balloted_group_yet: "Todavía no has votado proyectos de este grupo, ¡vota!" no_balloted_group_yet: "Todavía no has votado proyectos de este grupo, ¡vota!"
remove: Quitar voto remove: Quitar voto
voted_html: voted:
one: "Has votado <span>un</span> proyecto." one: "Has votado <span>un</span> proyecto."
other: "Has votado <span>%{count}</span> proyectos." other: "Has votado <span>%{count}</span> proyectos."
voted_info: "¡Tus votos están confirmados!" voted_info: "¡Tus votos están confirmados!"
@@ -18,9 +18,9 @@ es:
not_verified: Los proyectos de gasto sólo pueden ser apoyados por usuarios verificados, %{verify_account}. not_verified: Los proyectos de gasto sólo pueden ser apoyados por usuarios verificados, %{verify_account}.
organization: Las organizaciones no pueden votar. organization: Las organizaciones no pueden votar.
not_selected: No se pueden votar proyectos inviables. not_selected: No se pueden votar proyectos inviables.
not_enough_money_html: "Ya has asignado el presupuesto disponible.<br><small>Recuerda que puedes %{change_ballot} en cualquier momento</small>" not_enough_money: "Ya has asignado el presupuesto disponible.<br><small>Recuerda que puedes %{change_ballot} en cualquier momento</small>"
no_ballots_allowed: El periodo de votación está cerrado. no_ballots_allowed: El periodo de votación está cerrado.
different_heading_assigned_html: "Ya has votado proyectos de otra partida: %{heading_link}" different_heading_assigned: "Ya has votado proyectos de otra partida: %{heading_link}"
change_ballot: cambiar tus votos change_ballot: cambiar tus votos
casted_offline: Ya has participado presencialmente casted_offline: Ya has participado presencialmente
groups: groups:
@@ -79,17 +79,17 @@ es:
button: Buscar button: Buscar
placeholder: Buscar proyectos de gasto... placeholder: Buscar proyectos de gasto...
title: Buscar title: Buscar
search_results_html: search_results:
one: " que contiene <strong>'%{search_term}'</strong>" one: " que contiene <strong>'%{search_term}'</strong>"
other: " que contienen <strong>'%{search_term}'</strong>" other: " que contienen <strong>'%{search_term}'</strong>"
sidebar: sidebar:
my_ballot: Mis votos my_ballot: Mis votos
voted_html: voted:
one: "<strong>Has votado un proyecto por un valor de %{amount_spent}</strong>" one: "<strong>Has votado un proyecto por un valor de %{amount_spent}</strong>"
other: "<strong>Has votado %{count} proyectos por un valor de %{amount_spent}</strong>" other: "<strong>Has votado %{count} proyectos por un valor de %{amount_spent}</strong>"
voted_info: Puedes %{link} en cualquier momento hasta el cierre de esta fase. No hace falta que gastes todo el dinero disponible. voted_info: Puedes %{link} en cualquier momento hasta el cierre de esta fase. No hace falta que gastes todo el dinero disponible.
voted_info_link: cambiar tus votos voted_info_link: cambiar tus votos
different_heading_assigned_html: "Ya apoyaste proyectos de otra sección del presupuesto: %{heading_link}" different_heading_assigned: "Ya apoyaste proyectos de otra sección del presupuesto: %{heading_link}"
change_ballot: "Si cambias de opinión puedes borrar tus votos en %{check_ballot} y volver a empezar." change_ballot: "Si cambias de opinión puedes borrar tus votos en %{check_ballot} y volver a empezar."
check_ballot_link: "revisar y confirmar mis votos" check_ballot_link: "revisar y confirmar mis votos"
zero: Todavía no has votado ningún proyecto de gasto en este ámbito del presupuesto. zero: Todavía no has votado ningún proyecto de gasto en este ámbito del presupuesto.
@@ -109,9 +109,9 @@ es:
author_deleted: Usuario eliminado author_deleted: Usuario eliminado
price_explanation: Informe de coste price_explanation: Informe de coste
unfeasibility_explanation: Informe de inviabilidad unfeasibility_explanation: Informe de inviabilidad
code_html: "Código proyecto de gasto: <strong>%{code}</strong>" code: "Código proyecto de gasto: <strong>%{code}</strong>"
location_html: "Ubicación: <strong>%{location}</strong>" location: "Ubicación: <strong>%{location}</strong>"
organization_name_html: "Propuesto en nombre de: <strong>%{name}</strong>" organization_name: "Propuesto en nombre de: <strong>%{name}</strong>"
share: Compartir share: Compartir
title: Proyecto de gasto title: Proyecto de gasto
supports: Apoyos supports: Apoyos
@@ -120,10 +120,10 @@ es:
comments_tab: Comentarios comments_tab: Comentarios
milestones_tab: Seguimiento milestones_tab: Seguimiento
author: Autor author: Autor
project_unfeasible_html: "Este proyecto de gasto <strong>ha sido marcado como inviable</strong> y no pasará a la fase de votación." project_unfeasible: "Este proyecto de gasto <strong>ha sido marcado como inviable</strong> y no pasará a la fase de votación."
project_selected_html: "Este proyecto de gasto <strong>ha sido seleccionado</strong> para la fase de votación." project_selected: "Este proyecto de gasto <strong>ha sido seleccionado</strong> para la fase de votación."
project_winner: "Proyecto de gasto ganador" project_winner: "Proyecto de gasto ganador"
project_not_selected_html: "Este proyecto de gasto <strong>no ha sido seleccionado</strong> para la fase de votación." project_not_selected: "Este proyecto de gasto <strong>no ha sido seleccionado</strong> para la fase de votación."
see_price_explanation: Ver informe de coste see_price_explanation: Ver informe de coste
wrong_price_format: Solo puede incluir caracteres numéricos wrong_price_format: Solo puede incluir caracteres numéricos
investment: investment:
@@ -141,7 +141,7 @@ es:
give_support: Apoyar give_support: Apoyar
header: header:
check_ballot: Revisar y confirmar mis votos check_ballot: Revisar y confirmar mis votos
different_heading_assigned_html: "Ya apoyaste proyectos de otra sección del presupuesto: %{heading_link}" different_heading_assigned: "Ya apoyaste proyectos de otra sección del presupuesto: %{heading_link}"
change_ballot: "Si cambias de opinión puedes borrar tus votos en %{check_ballot} y volver a empezar." change_ballot: "Si cambias de opinión puedes borrar tus votos en %{check_ballot} y volver a empezar."
check_ballot_link: "revisar y confirmar mis votos" check_ballot_link: "revisar y confirmar mis votos"
price: "Esta partida tiene un presupuesto de" price: "Esta partida tiene un presupuesto de"

View File

@@ -6,7 +6,7 @@ es:
submit: Reenviar instrucciones submit: Reenviar instrucciones
title: Reenviar instrucciones de confirmación title: Reenviar instrucciones de confirmación
show: show:
instructions_html: Vamos a proceder a confirmar la cuenta con el email <b>%{email}</b> instructions: Vamos a proceder a confirmar la cuenta con el email <b>%{email}</b>
new_password_confirmation_label: Repite la clave de nuevo new_password_confirmation_label: Repite la clave de nuevo
new_password_label: Nueva clave de acceso new_password_label: Nueva clave de acceso
please_set_password: Por favor introduce una nueva clave de acceso para su cuenta (te permitirá hacer login con el email de más arriba) please_set_password: Por favor introduce una nueva clave de acceso para su cuenta (te permitirá hacer login con el email de más arriba)
@@ -50,10 +50,10 @@ es:
title: Registrarse como organización / colectivo title: Registrarse como organización / colectivo
success: success:
back_to_index: Entendido, volver a la página principal back_to_index: Entendido, volver a la página principal
instructions_1_html: "En breve <b>nos pondremos en contacto contigo</b> para verificar que realmente representas a este colectivo." instructions_1: "En breve <b>nos pondremos en contacto contigo</b> para verificar que realmente representas a este colectivo."
instructions_2_html: Mientras <b>revisa tu correo electrónico</b>, te hemos enviado un <b>enlace para confirmar tu cuenta</b>. instructions_2: Mientras <b>revisa tu correo electrónico</b>, te hemos enviado un <b>enlace para confirmar tu cuenta</b>.
instructions_3: Una vez confirmado, podrás empezar a participar como colectivo no verificado. instructions_3: Una vez confirmado, podrás empezar a participar como colectivo no verificado.
thank_you_html: Gracias por registrar tu colectivo en la web. Ahora está <b>pendiente de verificación</b>. thank_you: Gracias por registrar tu colectivo en la web. Ahora está <b>pendiente de verificación</b>.
title: Registro de organización / colectivo title: Registro de organización / colectivo
passwords: passwords:
edit: edit:
@@ -123,7 +123,7 @@ es:
username_note: Nombre público que aparecerá en tus publicaciones username_note: Nombre público que aparecerá en tus publicaciones
success: success:
back_to_index: Entendido, volver a la página principal back_to_index: Entendido, volver a la página principal
instructions_1_html: Por favor <b>revisa tu correo electrónico</b> - te hemos enviado un <b>enlace para confirmar tu cuenta</b>. instructions_1: Por favor <b>revisa tu correo electrónico</b> - te hemos enviado un <b>enlace para confirmar tu cuenta</b>.
instructions_2: Una vez confirmado, podrás empezar a participar. instructions_2: Una vez confirmado, podrás empezar a participar.
thank_you_html: Gracias por registrarte en la web. Ahora debes <b>confirmar tu correo</b>. thank_you: Gracias por registrarte en la web. Ahora debes <b>confirmar tu correo</b>.
title: Revisa tu correo title: Revisa tu correo

View File

@@ -1,7 +1,7 @@
es: es:
documents: documents:
title: Documentos title: Documentos
max_documents_allowed_reached_html: '¡Has alcanzado el número máximo de documentos permitidos! <strong>Tienes que eliminar uno antes de poder subir otro.</strong>' max_documents_allowed_reached: '¡Has alcanzado el número máximo de documentos permitidos! <strong>Tienes que eliminar uno antes de poder subir otro.</strong>'
additional: Documentación adicional additional: Documentación adicional
form: form:
title: Documentos title: Documentos

View File

@@ -116,7 +116,7 @@ es:
button: Buscar button: Buscar
placeholder: Buscar debates... placeholder: Buscar debates...
title: Buscar title: Buscar
search_results_html: search_results:
one: " que contiene <strong>'%{search_term}'</strong>" one: " que contiene <strong>'%{search_term}'</strong>"
other: " que contienen <strong>'%{search_term}'</strong>" other: " que contienen <strong>'%{search_term}'</strong>"
select_order: Ordenar por select_order: Ordenar por
@@ -169,7 +169,7 @@ es:
direct_message: el mensaje privado direct_message: el mensaje privado
error: error error: error
errors: errores errors: errores
not_saved_html: "impidieron guardar %{resource}. <br>Por favor revisa los campos marcados para saber cómo corregirlos:" not_saved: "impidieron guardar %{resource}. <br>Por favor revisa los campos marcados para saber cómo corregirlos:"
policy: Política de privacidad policy: Política de privacidad
proposal: la propuesta proposal: la propuesta
proposal_notification: "la notificación" proposal_notification: "la notificación"
@@ -302,7 +302,7 @@ es:
created: created:
title: '¡Enhorabuena! Has dado el primer paso.' title: '¡Enhorabuena! Has dado el primer paso.'
motivation: "Es importante preparar la campaña de lanzamiento de tu propuesta para que tenga éxito. Los primeros días son decisivos." motivation: "Es importante preparar la campaña de lanzamiento de tu propuesta para que tenga éxito. Los primeros días son decisivos."
motivation_2_html: "<strong>Si quieres recomendaciones para preparar la publicación deja tu propuesta como borrador y te guiaremos.</strong>" motivation_2: "<strong>Si quieres recomendaciones para preparar la publicación deja tu propuesta como borrador y te guiaremos.</strong>"
publish: No, quiero publicar la propuesta ya publish: No, quiero publicar la propuesta ya
dashboard: Si, quiero ayuda y publicaré mas tarde dashboard: Si, quiero ayuda y publicaré mas tarde
preview_title: Así es como quedará tu propuesta cuando la publiques preview_title: Así es como quedará tu propuesta cuando la publiques
@@ -376,7 +376,7 @@ es:
button: Buscar button: Buscar
placeholder: Buscar propuestas... placeholder: Buscar propuestas...
title: Buscar title: Buscar
search_results_html: search_results:
one: " que contiene <strong>'%{search_term}'</strong>" one: " que contiene <strong>'%{search_term}'</strong>"
other: " que contienen <strong>'%{search_term}'</strong>" other: " que contienen <strong>'%{search_term}'</strong>"
select_order: Ordenar por select_order: Ordenar por
@@ -570,10 +570,10 @@ es:
title: Previsualización del poster title: Previsualización del poster
poster_title: "No te quedes mirando," poster_title: "No te quedes mirando,"
poster_subtitle: "¡apóyame! ;)" poster_subtitle: "¡apóyame! ;)"
intro_text_html: "<strong>Estoy participando en %{org}</strong> con mi propia propuesta ciudadana y sólo si tú también te sumas podré lograr el apoyo necesario para hacer la ciudad que todos queremos." intro_text: "<strong>Estoy participando en %{org}</strong> con mi propia propuesta ciudadana y sólo si tú también te sumas podré lograr el apoyo necesario para hacer la ciudad que todos queremos."
proposal_code: "Código de la propuesta: %{code}" proposal_code: "Código de la propuesta: %{code}"
support: Apoya mi propuesta support: Apoya mi propuesta
footer_html: "<strong>Entra en %{link} y apoya esta propuesta.</strong> Necesitamos ser muchos. Decide tu también. ¡Gracias!" footer: "<strong>Entra en %{link} y apoya esta propuesta.</strong> Necesitamos ser muchos. Decide tu también. ¡Gracias!"
new: new:
title: Póster de tu propuesta title: Póster de tu propuesta
options: options:
@@ -591,7 +591,7 @@ es:
sent: El e-mail ha sido enviado sent: El e-mail ha sido enviado
mailer: mailer:
forward: forward:
subtitle_html: "Si me apoyas, <br>lo conseguiremos." subtitle: "Si me apoyas, <br>lo conseguiremos."
support_button: Apoyar esta propuesta support_button: Apoyar esta propuesta
share_in: Compartir en share_in: Compartir en
hi: "¡Hola!" hi: "¡Hola!"
@@ -642,7 +642,7 @@ es:
back: Volver a votaciones back: Volver a votaciones
cant_answer_not_logged_in: "Necesitas %{signin} o %{signup} para participar." cant_answer_not_logged_in: "Necesitas %{signin} o %{signup} para participar."
comments_tab: Comentarios comments_tab: Comentarios
cant_answer_verify_html: "Por favor %{verify_link} para poder responder." cant_answer_verify: "Por favor %{verify_link} para poder responder."
verify_link: "verifica tu cuenta" verify_link: "verifica tu cuenta"
cant_answer_expired: "Esta votación ha terminado." cant_answer_expired: "Esta votación ha terminado."
cant_answer_wrong_geozone: "Esta votación no está disponible en tu zona." cant_answer_wrong_geozone: "Esta votación no está disponible en tu zona."
@@ -802,7 +802,7 @@ es:
select_language_prompt: Seleccionar idioma select_language_prompt: Seleccionar idioma
remove_language: Eliminar idioma remove_language: Eliminar idioma
add_language: Añadir idioma add_language: Añadir idioma
languages_in_use_html: languages_in_use:
zero: "<span class='js-languages-count'>0</span> idiomas en uso" zero: "<span class='js-languages-count'>0</span> idiomas en uso"
one: "<span class='js-languages-count'>1</span> idioma en uso" one: "<span class='js-languages-count'>1</span> idioma en uso"
other: "<span class='js-languages-count'>%{count}</span> idiomas en uso" other: "<span class='js-languages-count'>%{count}</span> idiomas en uso"

View File

@@ -4,21 +4,21 @@ es:
no_reply: "Este mensaje se ha enviado desde una dirección de correo electrónico que no admite respuestas." no_reply: "Este mensaje se ha enviado desde una dirección de correo electrónico que no admite respuestas."
comment: comment:
hi: Hola hi: Hola
new_comment_by_html: Hay un nuevo comentario de <strong>%{commenter}</strong> en new_comment_by: Hay un nuevo comentario de <strong>%{commenter}</strong> en
subject: Alguien ha comentado en tu %{commentable} subject: Alguien ha comentado en tu %{commentable}
title: Nuevo comentario title: Nuevo comentario
config: config:
manage_email_subscriptions: Puedes dejar de recibir estos emails cambiando tu configuración en manage_email_subscriptions: Puedes dejar de recibir estos emails cambiando tu configuración en
email_verification: email_verification:
click_here_to_verify: en este enlace click_here_to_verify: en este enlace
instructions_2_html: Este email es para verificar tu cuenta con <b>%{document_type} %{document_number}</b>. Si esos no son tus datos, por favor no pulses el enlace anterior e ignora este email. instructions_2: Este email es para verificar tu cuenta con <b>%{document_type} %{document_number}</b>. Si esos no son tus datos, por favor no pulses el enlace anterior e ignora este email.
instructions_html: Para terminar de verificar tu cuenta de usuario pulsa %{verification_link}. instructions: Para terminar de verificar tu cuenta de usuario pulsa %{verification_link}.
subject: Verifica tu email subject: Verifica tu email
thanks: Muchas gracias. thanks: Muchas gracias.
title: Verifica tu cuenta con el siguiente enlace title: Verifica tu cuenta con el siguiente enlace
reply: reply:
hi: Hola hi: Hola
new_reply_by_html: Hay una nueva respuesta de <strong>%{commenter}</strong> a tu comentario en new_reply_by: Hay una nueva respuesta de <strong>%{commenter}</strong> a tu comentario en
subject: Alguien ha respondido a tu comentario subject: Alguien ha respondido a tu comentario
title: Nueva respuesta a tu comentario title: Nueva respuesta a tu comentario
proposal_notification_digest: proposal_notification_digest:
@@ -35,7 +35,7 @@ es:
unsubscribe_account: Mi cuenta unsubscribe_account: Mi cuenta
direct_message_for_sender: direct_message_for_sender:
subject: "Has enviado un nuevo mensaje privado" subject: "Has enviado un nuevo mensaje privado"
title_html: "Has enviado un nuevo mensaje privado a <strong>%{receiver}</strong> con el siguiente contenido:" title: "Has enviado un nuevo mensaje privado a <strong>%{receiver}</strong> con el siguiente contenido:"
user_invite: user_invite:
ignore: "Si no has solicitado esta invitación no te preocupes, puedes ignorar este correo." ignore: "Si no has solicitado esta invitación no te preocupes, puedes ignorar este correo."
text: "¡Gracias por solicitar unirte a %{org}! En unos segundos podrás empezar a participar, sólo tienes que rellenar el siguiente formulario:" text: "¡Gracias por solicitar unirte a %{org}! En unos segundos podrás empezar a participar, sólo tienes que rellenar el siguiente formulario:"
@@ -54,7 +54,7 @@ es:
share: "Comparte tu proyecto" share: "Comparte tu proyecto"
budget_investment_unfeasible: budget_investment_unfeasible:
hi: "Estimado/a usuario/a" hi: "Estimado/a usuario/a"
new_html: "Por todo ello, te invitamos a que elabores un <strong>nuevo proyecto de gasto</strong> que se ajuste a las condiciones de este proceso. Esto lo puedes hacer en este enlace: %{url}." new: "Por todo ello, te invitamos a que elabores un <strong>nuevo proyecto de gasto</strong> que se ajuste a las condiciones de este proceso. Esto lo puedes hacer en este enlace: %{url}."
new_href: "nuevo proyecto de gasto" new_href: "nuevo proyecto de gasto"
sincerely: "Atentamente" sincerely: "Atentamente"
sorry: "Sentimos las molestias ocasionadas y volvemos a darte las gracias por tu inestimable participación." sorry: "Sentimos las molestias ocasionadas y volvemos a darte las gracias por tu inestimable participación."
@@ -75,7 +75,7 @@ es:
subject: "Nuevo comentario de evaluación" subject: "Nuevo comentario de evaluación"
title: Nuevo comentario de evaluación para %{investment} title: Nuevo comentario de evaluación para %{investment}
hi: Hola hi: Hola
new_comment_by_html: Hay un nuevo comentario de evaluación de <strong>%{commenter}</strong> en el presupuesto participativo %{investment} new_comment_by: Hay un nuevo comentario de evaluación de <strong>%{commenter}</strong> en el presupuesto participativo %{investment}
commenter_info: "%{commenter}, %{time}" commenter_info: "%{commenter}, %{time}"
new_actions_notification_rake_created: new_actions_notification_rake_created:
subject: "Más novedades de tu propuesta ciudadana" subject: "Más novedades de tu propuesta ciudadana"

View File

@@ -112,8 +112,8 @@ es:
create_user: Crear nueva cuenta de usuario create_user: Crear nueva cuenta de usuario
create_user_info: Procedemos a crear un usuario con la siguiente información create_user_info: Procedemos a crear un usuario con la siguiente información
create_user_submit: Crear usuario create_user_submit: Crear usuario
create_user_success_html: Hemos enviado un correo electrónico a <b>%{email}</b> para verificar que es suya. El correo enviado contiene un link que el usuario deberá pulsar. Entonces podrá seleccionar una clave de acceso, y entrar en la web de participación. create_user_success: Hemos enviado un correo electrónico a <b>%{email}</b> para verificar que es suya. El correo enviado contiene un link que el usuario deberá pulsar. Entonces podrá seleccionar una clave de acceso, y entrar en la web de participación.
autogenerated_password_html: "Se ha asignado la contraseña <b>%{password}</b> a este usuario. Puede modificarla desde el apartado 'Mi cuenta' de la web." autogenerated_password: "Se ha asignado la contraseña <b>%{password}</b> a este usuario. Puede modificarla desde el apartado 'Mi cuenta' de la web."
email_optional_label: Email (recomendado pero opcional) email_optional_label: Email (recomendado pero opcional)
erased_notice: Cuenta de usuario borrada. erased_notice: Cuenta de usuario borrada.
erased_by_manager: "Borrada por el manager: %{manager}" erased_by_manager: "Borrada por el manager: %{manager}"
@@ -128,5 +128,5 @@ es:
submit: Enviar invitaciones submit: Enviar invitaciones
title: Enviar invitaciones title: Enviar invitaciones
create: create:
success_html: Se han enviado <strong>%{count} invitaciones</strong>. success: Se han enviado <strong>%{count} invitaciones</strong>.
title: Enviar invitaciones title: Enviar invitaciones

View File

@@ -26,7 +26,7 @@ es:
by_heading: "Participantes por distritos y fase" by_heading: "Participantes por distritos y fase"
total: "Total" total: "Total"
heading: "Distrito" heading: "Distrito"
investments_sent_html: "Propuestas<br>enviadas" investments_sent: "Propuestas<br>enviadas"
participants_support_phase: "Participantes fase apoyos" participants_support_phase: "Participantes fase apoyos"
participants_vote_phase: "Participantes fase votación" participants_vote_phase: "Participantes fase votación"
participants_every_phase: "Total de participantes" participants_every_phase: "Total de participantes"

View File

@@ -56,7 +56,7 @@ es:
preview: Vista previa de presupuesto preview: Vista previa de presupuesto
edit: edit:
dossier: Informe dossier: Informe
price_html: "Coste (%{currency}) <small>(dato público)</small>" price: "Coste (%{currency}) <small>(dato público)</small>"
price_first_year: "Coste en el primer año (%{currency}) <small>(opcional, dato no público)</small>" price_first_year: "Coste en el primer año (%{currency}) <small>(opcional, dato no público)</small>"
feasibility: Viabilidad feasibility: Viabilidad
valuation_finished_alert: "¿Estás seguro/a de querer marcar este informe como completado? Una vez hecho, no se puede deshacer la acción." valuation_finished_alert: "¿Estás seguro/a de querer marcar este informe como completado? Una vez hecho, no se puede deshacer la acción."

View File

@@ -19,7 +19,7 @@ es:
unconfirmed_code: Todavía no has introducido el código de confirmación unconfirmed_code: Todavía no has introducido el código de confirmación
create: create:
flash: flash:
success_html: Antes de las votaciones recibirás una carta con las instrucciones para verificar tu cuenta.<br> Recuerda que puedes ahorrar el envío verificándote presencialmente en cualquiera de las Oficinas de Atención al Ciudadano. success: Antes de las votaciones recibirás una carta con las instrucciones para verificar tu cuenta.<br> Recuerda que puedes ahorrar el envío verificándote presencialmente en cualquiera de las Oficinas de Atención al Ciudadano.
edit: edit:
see_all: Ver propuestas see_all: Ver propuestas
title: Carta solicitada title: Carta solicitada
@@ -49,7 +49,7 @@ es:
accept_terms_text_title: Acepto los términos de acceso al Padrón accept_terms_text_title: Acepto los términos de acceso al Padrón
document_number: Número de documento document_number: Número de documento
document_number_help_title: Ayuda document_number_help_title: Ayuda
document_number_help_text_html: "<strong>DNI</strong>: 12345678A<br> <strong>Pasaporte</strong>: AAA000001<br> <strong>Tarjeta de residencia</strong>: X1234567P" document_number_help_text: "<strong>DNI</strong>: 12345678A<br> <strong>Pasaporte</strong>: AAA000001<br> <strong>Tarjeta de residencia</strong>: X1234567P"
document_type: document_type:
passport: Pasaporte passport: Pasaporte
residence_card: Tarjeta de residencia residence_card: Tarjeta de residencia
@@ -73,7 +73,7 @@ es:
title: SMS de confirmación title: SMS de confirmación
new: new:
phone: Introduce tu teléfono móvil para recibir el código phone: Introduce tu teléfono móvil para recibir el código
phone_format_html: "<strong><em>(Ejemplo: 612345678 ó +34612345678)</em></strong>" phone_format: "<strong><em>(Ejemplo: 612345678 ó +34612345678)</em></strong>"
phone_note: Sólo usaremos tu teléfono para enviarte un código, nunca te contactaremos. phone_note: Sólo usaremos tu teléfono para enviarte un código, nunca te contactaremos.
phone_placeholder: "Ejemplo: 612345678 ó +34612345678" phone_placeholder: "Ejemplo: 612345678 ó +34612345678"
submit_button: Enviar submit_button: Enviar

View File

@@ -56,7 +56,7 @@ shared_examples "followable" do |followable_class_name, followable_path, followa
scenario "Should display new follower notice after user clicks on follow button", :js do scenario "Should display new follower notice after user clicks on follow button", :js do
user = create(:user) user = create(:user)
login_as(user) login_as(user)
create_notice_message = t("shared.followable.#{followable_class_name}.create.notice_html") create_notice_message = t("shared.followable.#{followable_class_name}.create.notice")
visit send(followable_path, arguments) visit send(followable_path, arguments)
within "##{dom_id(followable)}" do within "##{dom_id(followable)}" do
@@ -91,7 +91,7 @@ shared_examples "followable" do |followable_class_name, followable_path, followa
scenario "Should display destroy follower notice after user clicks on unfollow button", :js do scenario "Should display destroy follower notice after user clicks on unfollow button", :js do
user = create(:user, followables: [followable]) user = create(:user, followables: [followable])
login_as(user) login_as(user)
destroy_notice_message = t("shared.followable.#{followable_class_name}.destroy.notice_html") destroy_notice_message = t("shared.followable.#{followable_class_name}.destroy.notice")
visit send(followable_path, arguments) visit send(followable_path, arguments)
within "##{dom_id(followable)}" do within "##{dom_id(followable)}" do