Module | ActionController::Filters::ClassMethods
In: | lib/gloc-rails.rb

### Methods

autodetect_language_filter

### Public Instance methods

autodetect_language_filter(*args)

This filter attempts to auto-detect the clients desired language. It first checks the params, then a cookie and then the HTTP_ACCEPT_LANGUAGE request header. If a language is found to match or be similar to a currently valid language, then it sets the current_language of the controller.

      class ExampleController < ApplicationController
        set_language :en
        autodetect_language_filter :except => 'monkey', :on_no_lang => :lang_not_autodetected_callback
        autodetect_language_filter :only => 'monkey', :check_cookie => 'monkey_lang', :check_accept_header => false
        ...
        def lang_not_autodetected_callback
          redirect_to somewhere
        end
      end

The `args` for this filter are exactly the same the arguments of `before_filter` with the following exceptions:

- `:check_params` — If false, then params will not be checked for a language. If a String, then this will value will be used as the name of the param.
- `:check_cookie` — If false, then the cookie will not be checked for a language. If a String, then this will value will be used as the name of the cookie.
- `:check_accept_header` — If false, then HTTP_ACCEPT_LANGUAGE will not be checked for a language.
- `:on_set_lang` — You can specify the name of a callback function to be called when the language is successfully detected and set. The param must be a Symbol or a String which is the name of the function. The callback function must accept one argument (the language) and must be instance level.
- `:on_no_lang` — You can specify the name of a callback function to be called when the language couldn’t be detected automatically. The param must be a Symbol or a String which is the name of the function. The callback function must be instance level.

You override the default names of the param or cookie by calling `GLoc.set_config :default_param_name => ‘new_param_name‘` and `GLoc.set_config :default_cookie_name => ‘new_cookie_name‘`.

[Source]

        # File lib/gloc-rails.rb, line 43
    43:       def autodetect_language_filter(*args)
    44:         options= args.last.is_a?(Hash) ? args.last : {}
    45:         x= 'Proc.new { |c| l= nil;'
    46:         # :check_params
    47:         unless (v= options.delete(:check_params)) == false
    48:           name= v ? ":#{v}" : 'GLoc.get_config(:default_param_name)'
    49:           x << "l ||= GLoc.similar_language(c.params[#{name}]);"
    50:         end
    51:         # :check_cookie
    52:         unless (v= options.delete(:check_cookie)) == false
    53:           name= v ? ":#{v}" : 'GLoc.get_config(:default_cookie_name)'
    54:           x << "l ||= GLoc.similar_language(c.send(:cookies)[#{name}]);"
    55:         end
    56:         # :check_accept_header
    57:         unless options.delete(:check_accept_header) == false
    58:           x << %<
    59:               unless l
    60:                 a= c.request.env['HTTP_ACCEPT_LANGUAGE'].split(/,|;/) rescue nil
    61:                 a.each {|x| l ||= GLoc.similar_language(x)} if a
    62:               end; >
    63:         end
    64:         # Set language
    65:         x << 'ret= true;'
    66:         x << 'if l; c.set_language(l); c.headers[\'Content-Language\']= l.to_s; '
    67:         if options.has_key?(:on_set_lang)
    68:           x << "ret= c.#{options.delete(:on_set_lang)}(l);"
    69:         end
    70:         if options.has_key?(:on_no_lang)
    71:           x << "else; ret= c.#{options.delete(:on_no_lang)};"
    72:         end
    73:         x << 'end; ret }'
    74:
    75:         # Create filter
    76:         block= eval x
    77:         before_filter(*args, &block)
    78:       end

[Validate]