0.01
No commit activity in last 3 years
No release in over 3 years
locale_flash lets you create flash messages easily with I18n fallbacks
2005
2006
2007
2008
2009
2010
2011
2012
2013
2014
2015
2016
2017
2018
2019
2020
2021
2022
2023
2024
 Dependencies

Development

~> 0.7
~> 11.3
~> 3.5
 Project Readme

locale_flash

Installation

Add locale_flash to your Gemfile:

gem 'locale_flash'

Install the gem:

bundle install

And off you go!

Use

In your controllers

Instead of manually assigning a value to flash[:notice] or flash[:alert], just call the locale_flash method like so:

class UsersController < ActionController::Base
  def create
    @user = User.new(params[:user])
    if @user.save
      locale_flash(:notice)
      # redirect or render...
    else
      locale_flash(:alert)
      # redirect or render...
    end
  end
end

Notice and Alert are such common keys to assign to a flash message that 2 convenience methods are also included: locale_notice and locale_alert. This means that the previous example can be written like so:

class UsersController < ActionController::Base
  def create
    @user = User.new(params[:user])
    if @user.save
      locale_notice
      # redirect or render...
    else
      locale_alert
      # redirect or render...
    end
  end
end

In your views

Simply call locale_flash from your views like so:

<div id="flash">
  <%= locale_flash %>
</div>

This will produce HTML output like this:

<div id="flash">
  <div class="notice">My message here</div>
</div>

If you'd like to modify the output, pass a proc returning a string to LocaleFlash::Config.template=:

# config/initializers/locale_flash.rb
LocaleFlash::Config.template = -> (type, str) do
  "<p class=#{type}>#{str}</p>"
end

Note: if you are adding locale_flash to an existing application with manual assignments to flash[:notice], this will be rendered without I18n lookups.

I18n fallback order

Your actual message text should be stored in your locale files (ie: in config/locales/*.yml).

locale_file will first look for the most specific message that matches the controller and action from which the flash was created from, and if that's missing, will fallback to more generic messages.

Given that I call locale_notice from the create action in a UsersController, the order of fallbacks will be as follows:

controllers.users.create.flash.notice # this is the most specific message
controllers.users.flash.notice        # fallback to the notice message for this controller
controllers.flash.create.notice       # fallback to the notice message for all create actions
controllers.flash.notice              # fallback to the generic notice message

Given a nested Admin::UsersController, the order of fallbacks will be as follows:

controllers.admin.users.create.flash.notice
controllers.admin.create.flash.show.notice
controllers.admin.create.flash.notice
controllers.admin.flash.notice
controllers.flash.create.notice
controllers.flash.notice

TODO

  • Add the option of predefining common messages (like resource_created for example)