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

@@ -198,8 +198,8 @@ es:
min_total_supports: Apoyos mínimos
max_total_supports: Apoyos máximos
winners: Ganadores
one_filter_html: "Filtros en uso: <b><em>%{filter}</em></b>"
two_filters_html: "Filtros en uso: <b><em>%{filter}, %{advanced_filters}</em></b>"
one_filter: "Filtros en uso: <b><em>%{filter}</em></b>"
two_filters: "Filtros en uso: <b><em>%{filter}, %{advanced_filters}</em></b>"
buttons:
filter: Filtrar
download_current_selection: "Descargar selección actual"
@@ -554,7 +554,7 @@ es:
form:
error: Error
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
close_text_editor: Cerrar editor de texto
use_markdown: Usa Markdown para formatear el texto
@@ -766,7 +766,7 @@ es:
empty_newsletters: No hay newsletters para mostrar
new:
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"
edit:
title: Editar newsletter
@@ -1186,7 +1186,7 @@ es:
pending: Pendientes
rejected: Rechazadas
verified: Verificadas
hidden_count_html:
hidden_count:
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.
name: Nombre
@@ -1541,7 +1541,7 @@ es:
see_page: Ver página
new:
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:
created_at: Creada
status: Estado

View File

@@ -7,7 +7,7 @@ es:
remaining: "Te quedan <span>%{amount}</span> para invertir"
no_balloted_group_yet: "Todavía no has votado proyectos de este grupo, ¡vota!"
remove: Quitar voto
voted_html:
voted:
one: "Has votado <span>un</span> proyecto."
other: "Has votado <span>%{count}</span> proyectos."
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}.
organization: Las organizaciones no pueden votar.
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.
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
casted_offline: Ya has participado presencialmente
groups:
@@ -79,17 +79,17 @@ es:
button: Buscar
placeholder: Buscar proyectos de gasto...
title: Buscar
search_results_html:
search_results:
one: " que contiene <strong>'%{search_term}'</strong>"
other: " que contienen <strong>'%{search_term}'</strong>"
sidebar:
my_ballot: Mis votos
voted_html:
voted:
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>"
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
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."
check_ballot_link: "revisar y confirmar mis votos"
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
price_explanation: Informe de coste
unfeasibility_explanation: Informe de inviabilidad
code_html: "Código proyecto de gasto: <strong>%{code}</strong>"
location_html: "Ubicación: <strong>%{location}</strong>"
organization_name_html: "Propuesto en nombre de: <strong>%{name}</strong>"
code: "Código proyecto de gasto: <strong>%{code}</strong>"
location: "Ubicación: <strong>%{location}</strong>"
organization_name: "Propuesto en nombre de: <strong>%{name}</strong>"
share: Compartir
title: Proyecto de gasto
supports: Apoyos
@@ -120,10 +120,10 @@ es:
comments_tab: Comentarios
milestones_tab: Seguimiento
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_selected_html: "Este proyecto de gasto <strong>ha sido seleccionado</strong> para 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: "Este proyecto de gasto <strong>ha sido seleccionado</strong> para la fase de votación."
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
wrong_price_format: Solo puede incluir caracteres numéricos
investment:
@@ -141,7 +141,7 @@ es:
give_support: Apoyar
header:
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."
check_ballot_link: "revisar y confirmar mis votos"
price: "Esta partida tiene un presupuesto de"

View File

@@ -6,7 +6,7 @@ es:
submit: Reenviar instrucciones
title: Reenviar instrucciones de confirmación
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_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)
@@ -50,10 +50,10 @@ es:
title: Registrarse como organización / colectivo
success:
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_2_html: Mientras <b>revisa tu correo electrónico</b>, te hemos enviado un <b>enlace para confirmar tu cuenta</b>.
instructions_1: "En breve <b>nos pondremos en contacto contigo</b> para verificar que realmente representas a este colectivo."
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.
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
passwords:
edit:
@@ -123,7 +123,7 @@ es:
username_note: Nombre público que aparecerá en tus publicaciones
success:
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.
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

View File

@@ -1,7 +1,7 @@
es:
documents:
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
form:
title: Documentos

View File

@@ -116,7 +116,7 @@ es:
button: Buscar
placeholder: Buscar debates...
title: Buscar
search_results_html:
search_results:
one: " que contiene <strong>'%{search_term}'</strong>"
other: " que contienen <strong>'%{search_term}'</strong>"
select_order: Ordenar por
@@ -169,7 +169,7 @@ es:
direct_message: el mensaje privado
error: error
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
proposal: la propuesta
proposal_notification: "la notificación"
@@ -302,7 +302,7 @@ es:
created:
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_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
dashboard: Si, quiero ayuda y publicaré mas tarde
preview_title: Así es como quedará tu propuesta cuando la publiques
@@ -376,7 +376,7 @@ es:
button: Buscar
placeholder: Buscar propuestas...
title: Buscar
search_results_html:
search_results:
one: " que contiene <strong>'%{search_term}'</strong>"
other: " que contienen <strong>'%{search_term}'</strong>"
select_order: Ordenar por
@@ -570,10 +570,10 @@ es:
title: Previsualización del poster
poster_title: "No te quedes mirando,"
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}"
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:
title: Póster de tu propuesta
options:
@@ -591,7 +591,7 @@ es:
sent: El e-mail ha sido enviado
mailer:
forward:
subtitle_html: "Si me apoyas, <br>lo conseguiremos."
subtitle: "Si me apoyas, <br>lo conseguiremos."
support_button: Apoyar esta propuesta
share_in: Compartir en
hi: "¡Hola!"
@@ -642,7 +642,7 @@ es:
back: Volver a votaciones
cant_answer_not_logged_in: "Necesitas %{signin} o %{signup} para participar."
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"
cant_answer_expired: "Esta votación ha terminado."
cant_answer_wrong_geozone: "Esta votación no está disponible en tu zona."
@@ -802,7 +802,7 @@ es:
select_language_prompt: Seleccionar idioma
remove_language: Eliminar idioma
add_language: Añadir idioma
languages_in_use_html:
languages_in_use:
zero: "<span class='js-languages-count'>0</span> idiomas en uso"
one: "<span class='js-languages-count'>1</span> idioma 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."
comment:
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}
title: Nuevo comentario
config:
manage_email_subscriptions: Puedes dejar de recibir estos emails cambiando tu configuración en
email_verification:
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_html: Para terminar de verificar tu cuenta de usuario pulsa %{verification_link}.
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: Para terminar de verificar tu cuenta de usuario pulsa %{verification_link}.
subject: Verifica tu email
thanks: Muchas gracias.
title: Verifica tu cuenta con el siguiente enlace
reply:
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
title: Nueva respuesta a tu comentario
proposal_notification_digest:
@@ -35,7 +35,7 @@ es:
unsubscribe_account: Mi cuenta
direct_message_for_sender:
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:
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:"
@@ -54,7 +54,7 @@ es:
share: "Comparte tu proyecto"
budget_investment_unfeasible:
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"
sincerely: "Atentamente"
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"
title: Nuevo comentario de evaluación para %{investment}
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}"
new_actions_notification_rake_created:
subject: "Más novedades de tu propuesta ciudadana"

View File

@@ -112,8 +112,8 @@ es:
create_user: Crear nueva cuenta de usuario
create_user_info: Procedemos a crear un usuario con la siguiente información
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.
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."
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: "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)
erased_notice: Cuenta de usuario borrada.
erased_by_manager: "Borrada por el manager: %{manager}"
@@ -128,5 +128,5 @@ es:
submit: Enviar invitaciones
title: Enviar invitaciones
create:
success_html: Se han enviado <strong>%{count} invitaciones</strong>.
success: Se han enviado <strong>%{count} invitaciones</strong>.
title: Enviar invitaciones

View File

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

View File

@@ -56,7 +56,7 @@ es:
preview: Vista previa de presupuesto
edit:
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>"
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."

View File

@@ -19,7 +19,7 @@ es:
unconfirmed_code: Todavía no has introducido el código de confirmación
create:
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:
see_all: Ver propuestas
title: Carta solicitada
@@ -49,7 +49,7 @@ es:
accept_terms_text_title: Acepto los términos de acceso al Padrón
document_number: Número de documento
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:
passport: Pasaporte
residence_card: Tarjeta de residencia
@@ -73,7 +73,7 @@ es:
title: SMS de confirmación
new:
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_placeholder: "Ejemplo: 612345678 ó +34612345678"
submit_button: Enviar