Small: Setting locale
You can do it in an "one-liner". Although one-liners are frequently associated with less readability, I honestly believe this is not the case. Something like this would work:

I18n.locale = params[:locale] || 
              request.preferred_language_from(AVAILABLE_LANGUAGES) ||
              I18n.default_locale


I see a few advantages in this solution:


Your code will be a bit cleaner, since you can collapse 9 lines of code filled with if/else conditions into 3 (or 1, if you don't break the line);
You won't need to allocate preferred_language in case params[:locale] is nil;
And the biggest advantage of them all: clarity. The precedence of the options is much more explicit.