class ApplicationController < ActionController::Base protect_from_forgery before_filter :set_locale, :initialize_pages if Rails.env.production? rescue_from Exception, :with => :render_500 rescue_from ActionController::RoutingError, :with => :render_404 end protected ## ## LOCALIZATION ## # # ensure that the locale is encoded as the url prefix and I18n.locale is set. # def set_locale if params[:locale].nil? || !AVAILABLE_LANGUAGES.include?(params[:locale]) locale = HttpAcceptLanguage::compatible_language_from(request.headers['HTTP_ACCEPT_LANGUAGE'], AVAILABLE_LANGUAGES) || DEFAULT_LOCALE locale = locale.to_s.sub('-', '_').sub(/_\w\w/, '') if request.path == '/' url = '/' + locale else url = url_for(params.merge(:locale => locale)) end redirect_to url else I18n.locale = params[:locale] self.default_url_options[:locale] = params[:locale] end end #def default_url_options # {:locale => locale } #end ## ## RENDERING ## def render_500 render :template => 'errors/error', :status => 500 end def render_404 render :template => 'errors/not_found', :status => 404 end # # renders the content of a static page # def render_page(page) begin render :template => page.template_path rescue ActionView::MissingTemplate => exc begin render :template => page.template_path(DEFAULT_LOCALE) rescue raise exc end end end # # same as render page, but returns the string # def page_body(page) begin render_to_string :template => page.template_path rescue ActionView::MissingTemplate => exc begin render_to_string :template => page.template_path(DEFAULT_LOCALE) rescue raise exc end end end helper_method :page_body ## ## INITIALIZATION ## # # run every time in development mode, run once in production mode # def initialize_pages run_once(:initialize_pages, :unless => Rails.env.development?) do StaticPage.load(PAGE_DIRECTORY) Menu.load(PAGE_DIRECTORY + '/menu.txt') end end def run_once(name, options={}) key_name = "run_once_#{name}" if !Thread.current[key_name] || options[:unless] yield end Thread.current[key_name] = true end end