locale_detector 0.2.0 → 0.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
data/README.md CHANGED
@@ -4,7 +4,7 @@ This Rails gem makes use of the HTTP_ACCEPT_LANGUAGE http header sent by web bro
4
4
 
5
5
  When this fails (for example if there is no such http header - as is the case for Google bot), it will try to determine the locale based on the toplevel domain suffix (so it will set `'de'` for the `example.de` domain).
6
6
 
7
- When both fail, it will fall back to `I18n.default_locale`, which should be set in application’s `config/application.rb` file (and is `'en'` by default).
7
+ When both fail, it will fall back to `I18n.default_locale`, which should be set in application’s `config/application.rb` file (`'en'` by default).
8
8
 
9
9
  The HTTP_ACCEPT_LANGUAGE header parser is based on:
10
10
  https://github.com/iain/http_accept_language/blob/master/lib/http_accept_language.rb
@@ -47,5 +47,18 @@ $ bundle
47
47
  ```
48
48
 
49
49
 
50
+ ## Turning off the language autodetection
51
+
52
+ In certain cases we might want to turn off the locale/language autodetection. For example, we might want to give the user the ability to set his preferred language in his profile and respect this setting.
53
+
54
+ In order to do that, you need to set a `:language` session key in your app:
55
+
56
+ ```ruby
57
+ session[:language] = 'pl'
58
+ ```
59
+
60
+ In consequence, regardless of the user browser’s language, the `I18n.locale` will be set to `'pl'`.
61
+
62
+
50
63
 
51
64
  Copyright © 2011 Exvo.com Development BV, released under the MIT license
@@ -3,22 +3,28 @@ module LocaleDetector
3
3
  extend ActiveSupport::Concern
4
4
 
5
5
  included do
6
- prepend_before_filter :set_locale
6
+ append_before_filter :set_locale
7
7
  end
8
8
 
9
9
  protected
10
10
 
11
11
  def set_locale
12
- I18n.locale = begin
13
- request.env['HTTP_ACCEPT_LANGUAGE'].split(/\s*,\s*/).collect do |l|
14
- l += ';q=1.0' unless l =~ /;q=\d+\.\d+$/
15
- l.split(';q=')
16
- end.sort do |x,y|
17
- raise "Incorrect format" unless x.first =~ /^[a-z\-]+$/i
18
- y.last.to_f <=> x.last.to_f
19
- end.first.first.gsub(/-[a-z]+$/i, '').downcase
20
- rescue # rescue (anything) from the malformed (or missing) accept language headers
21
- country_to_language(request.host.split('.').last)
12
+ if session[:language].present?
13
+ # set locale from session
14
+ I18n.locale = session[:language]
15
+ else
16
+ # set locale from http header or request host
17
+ I18n.locale = begin
18
+ request.env['HTTP_ACCEPT_LANGUAGE'].split(/\s*,\s*/).collect do |l|
19
+ l += ';q=1.0' unless l =~ /;q=\d+\.\d+$/
20
+ l.split(';q=')
21
+ end.sort do |x,y|
22
+ raise "Incorrect format" unless x.first =~ /^[a-z\-]+$/i
23
+ y.last.to_f <=> x.last.to_f
24
+ end.first.first.gsub(/-[a-z]+$/i, '').downcase
25
+ rescue # rescue (anything) from the malformed (or missing) accept language headers
26
+ country_to_language(request.host.split('.').last)
27
+ end
22
28
  end
23
29
  end
24
30
 
@@ -1,3 +1,3 @@
1
1
  module LocaleDetector
2
- VERSION = "0.2.0"
2
+ VERSION = "0.3.0"
3
3
  end
@@ -5,21 +5,36 @@ describe LocaleDetector::Filter do
5
5
  def set_locale(opts = {})
6
6
  filter = Object.new.extend(LocaleDetector::Filter)
7
7
 
8
- request = if opts[:language].present?
8
+ request =
9
+ if opts[:language].present?
9
10
  double('request', :env => { 'HTTP_ACCEPT_LANGUAGE' => opts[:language] })
10
- else
11
+ elsif opts[:host].present?
11
12
  double('request', :env => nil, :host => opts[:host])
12
13
  end
13
14
 
15
+ session =
16
+ if opts[:session_language].present?
17
+ double('session', :[] => opts[:session_language])
18
+ else
19
+ double('session', :[] => '')
20
+ end
21
+
22
+ filter.stub(:session).and_return(session)
14
23
  filter.stub(:request).and_return(request)
15
24
  filter.send(:set_locale)
16
25
  end
17
26
 
27
+ context "session[:language] locale overwrite" do
28
+ specify { set_locale(:language => 'pt-BR', :session_language => 'pl').should eql('pl') }
29
+ end
30
+
18
31
  context "http header locale setting" do
19
32
  specify { set_locale(:language => 'pl').should eql('pl') }
20
33
 
21
34
  specify { set_locale(:language => 'pl-PL').should eql('pl') }
22
35
 
36
+ specify { set_locale(:language => 'pt-BR').should eql('pt') }
37
+
23
38
  specify { set_locale(:language => 'pl,en-us;q=0.7,en;q=0.3').should eql('pl') }
24
39
 
25
40
  specify { set_locale(:language => 'lt,en-us;q=0.8,en;q=0.6,ru;q=0.4,pl;q=0.2').should eql('lt') }
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: locale_detector
3
3
  version: !ruby/object:Gem::Version
4
- hash: 23
4
+ hash: 19
5
5
  prerelease:
6
6
  segments:
7
7
  - 0
8
- - 2
8
+ - 3
9
9
  - 0
10
- version: 0.2.0
10
+ version: 0.3.0
11
11
  platform: ruby
12
12
  authors:
13
13
  - "Pawe\xC5\x82 Go\xC5\x9Bcicki"
@@ -15,7 +15,7 @@ autorequire:
15
15
  bindir: bin
16
16
  cert_chain: []
17
17
 
18
- date: 2011-08-11 00:00:00 +02:00
18
+ date: 2011-08-17 00:00:00 +02:00
19
19
  default_executable:
20
20
  dependencies:
21
21
  - !ruby/object:Gem::Dependency