yml translations rails locales i18n ruby-on-rails devise

ruby on rails - translations - Rails/Devise-Personaliza el mensaje de destello(devise.en.yml) con un link_to



rails i18n models (5)

Si me entiendes, haz una pregunta correcta, la parte del código t (''idear ... debes ubicarla en nuestra vista, donde deseas mostrar este mensaje.

Por ejemplo, devise/new.erb :

<%= t(''devise.failure.unconfirmed'', :confirm_link => link_to( t(''devise.failure.confirm_link_text''), new_user_confirmation_path).html_safe ) unless user.confirmed %>

Me gustaría personalizar el siguiente msj flash provisto por el dispositivo en el archivo devise.en.yml:

devise: failure: unconfirmed: ''You have to confirm your account before continuing.''

con código ruby ​​para obtener un enlace a new_user_confirmation_path.

en otras palabras, quiero que mi mensaje flash muestre algo así como:

''You have to confirm your account before continuing. Didn''t receive confirmation instructions?''

donde ''¿No recibió las instrucciones de confirmación?'' es un enlace a new_user_confirmation_path.

Me gustaría saber si puedo hacer esto sin editar el controlador de usuario, ya que Devise no lo proporciona de forma predeterminada.

¡Gracias por tu respuesta!


En una de mis aplicaciones, estoy usando Devise y CanCan. Rescato los errores de CanCan con algo como lo siguiente en mi aplicador de aplicaciones.

rescue_from CanCan::AccessDenied do |exception| if current_user flash[:error] = exception.message redirect_to root_url else flash[:error] = t("devise.failure.unauthenticated") redirect_to new_user_session_path end end

¿Quizás podrías hacer algo similar y rescatar a Devise? Su mensaje flash podría ser algo así como:

flash[:error] = t("devise.failure.unconfirmed") + link_to "Didn''t receive confirmation instructions?", new_user_confirmation_path

Aún mejor sería poner "No recibí ..." en su propia traducción yml si es necesario.


new_user_confirmation_path es una URL estática equivalente a /users/confirmation/new

Así que puedes hacer esto en tu archivo devise.en.yml:

devise: failure: unconfirmed: "You have to confirm your account before continuing. <a href=''/users/confirmation/new''>Didn''t receive confirmation instructions?</a>"

En las acciones del controlador donde muestra su flash, asegúrese de tener .html_safe por ejemplo, flash[:error].html_safe


También puede hacerlo en su diseño específico: app/views/layouts/devise.html.slim

- flash.each do |type, message| - if [''alert'', ''error'', ''notice''].include?(type.to_s) .alert-box class=type => message - case message - when t(''devise.failure.unauthenticated'') = link_to "Forgot your password?", new_password_path(resource_name) - when t(''devise.failure.unconfirmed'') = link_to "Didn''t receive confirmation instructions?", new_confirmation_path(resource_name) - when t(''devise.failure.locked'') - if resource_class.unlock_strategy_enabled?(:email) = link_to "Didn''t receive unlock instructions?", new_unlock_path(resource_name)


Creo que la forma correcta de que Rails 3 & Rails 4 agregue enlaces requeridos y otra información para idear mensajes flash es escribir su propia Devise::FailureApp :

# lib/custom_failure.rb class CustomFailure < Devise::FailureApp def i18n_options(options) path = Rails.application.routes.url_helpers.new_user_confirmation_path link = ActionController::Base.helpers.link_to(I18n.t(''.unconfirmed_link_text'', options), path) super(options).merge(new_user_confirmation_link: link) end end

Y agrega interpolación a las traducciones:

devise: failure: unconfirmed: You have to confirm your account before continuing.%{new_user_confirmation_link} unconfirmed_link_text: Didn''t receive confirmation instructions?

no olvides agregar a config/initializers/devise.rb :

config.warden do |manager| manager.failure_app = CustomFailure end