diff options
Diffstat (limited to 'app/controllers/application_controller.rb')
-rw-r--r-- | app/controllers/application_controller.rb | 88 |
1 files changed, 88 insertions, 0 deletions
diff --git a/app/controllers/application_controller.rb b/app/controllers/application_controller.rb new file mode 100644 index 0000000..62a4e13 --- /dev/null +++ b/app/controllers/application_controller.rb @@ -0,0 +1,88 @@ + +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 + + ## + ## INITIALIZATION + ## + + # + # run every time in development mode, run once in production mode + # + def initialize_pages + run_once(:unless => Rails.env.development?) do + StaticPage.load(PAGE_DIRECTORY) + Menu.load(PAGE_DIRECTORY + '/menu.txt') + end + end + + def run_once(options={}) + if !@run_once || !options[:unless] + yield + end + @run_once = true + end + +end |