rack-i18n_locale_switcher 0.2.3 → 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/CHANGELOG CHANGED
@@ -1,3 +1,6 @@
1
+ = 0.3.0
2
+ Removed support for storing the locale in the session
3
+
1
4
  = 0.2.0 / 2011-11-24
2
5
  Better test coverage
3
6
 
data/README.md CHANGED
@@ -1,3 +1,49 @@
1
1
  # Rack::I18nLocaleSwitcher
2
2
 
3
- This Rack middleware determines the I18n language from various sources.
3
+ [![alt text][2]][1]
4
+
5
+ [1]: http://travis-ci.org/#!/christoph-buente/rack-i18n_locale_switcher
6
+ [2]: https://secure.travis-ci.org/christoph-buente/rack-i18n_locale_switcher.png
7
+
8
+ This Rack middleware determines the I18n language from various sources.
9
+
10
+
11
+
12
+ A language or locale, can be encode within an HTTP requests in various ways. Let's have a look at the following request url:
13
+
14
+ http://es.example.it/tr/?locale=de
15
+
16
+ To extract the correct language from such a request, you probably don't want to hardcode it into you application. This middleware extracts the desired locale from this request in the following order:
17
+
18
+ * request parameter (de, german)
19
+ * url path (tr, turkish)
20
+ * subdomain (es, spanish)
21
+ * top level domain (it, italian)
22
+ * HTTP Accept-language header (not visible in the url, but could be something completely different)
23
+
24
+ Sound's good, gimme the code!
25
+
26
+ ## Rails
27
+
28
+ # file application.rb
29
+
30
+ require 'rack/i18n_locale_switcher'
31
+ config.middleware.use(Rack::I18nLocaleSwitcher)
32
+
33
+ ## Sinatra
34
+
35
+ require 'rack/i18n_locale_switcher'
36
+ use Rack::I18nLocaleSwitcher, :i18n_locale_switcher
37
+
38
+
39
+ Q: Ok, but where does the locale go?
40
+
41
+ A: The middleware uses the ruby internationalization gem [i18n](http://rubygems.org/gems/i18n), which stores the locale in a variable. You can use this variable in your app as
42
+
43
+ I18n.locale
44
+
45
+ Q: How can I define, which locales are available?
46
+
47
+ A: You can set the available locales before using instantiation the middleware.
48
+
49
+ I18n.available_locales = [:de, :en, :es, :it, :tr ]
data/Rakefile CHANGED
@@ -2,9 +2,9 @@
2
2
  require 'rake'
3
3
  require 'echoe'
4
4
 
5
- Echoe.new('rack-i18n_locale_switcher', '0.2.3') do |p|
5
+ Echoe.new('rack-i18n_locale_switcher', '0.3.0') do |p|
6
6
 
7
- p.description = "Detects the current locale from url, domain, parameter, session or accept header."
7
+ p.description = "Detects the current locale from url, domain, parameter or accept header."
8
8
  p.url = "http://github.com/christoph-buente/rack-i18n_locale_switcher"
9
9
  p.author = ["Christoph Bünte", "Andreas Korth"]
10
10
  p.email = ["info@christophbuente.de", "andreas.korth@gmail.com"]
@@ -9,11 +9,8 @@ module Rack
9
9
 
10
10
  def call(env)
11
11
  request = Rack::Request.new(env)
12
-
13
- session = request.session
14
12
  locale = extract_locale(request)
15
- I18n.locale = session["locale"] = (is_present?(locale) ? locale : I18n.default_locale)
16
-
13
+ I18n.locale = (is_present?(locale) ? locale : I18n.default_locale)
17
14
  @app.call cleanup_env(env)
18
15
  end
19
16
 
@@ -44,11 +41,6 @@ module Rack
44
41
  locale if is_available?(locale)
45
42
  end
46
43
 
47
- def extract_locale_from_session(request)
48
- locale = request.session['locale']
49
- locale if is_available?(locale)
50
- end
51
-
52
44
  def extract_locale_from_accept_language(request)
53
45
  if lang = request.env["HTTP_ACCEPT_LANGUAGE"]
54
46
  lang = lang.split(",").map { |l|
@@ -68,7 +60,6 @@ module Rack
68
60
  extract_locale_from_path(request) ||
69
61
  extract_locale_from_subdomain(request) ||
70
62
  extract_locale_from_tld(request) ||
71
- extract_locale_from_session(request) ||
72
63
  extract_locale_from_accept_language(request))
73
64
  symbolize_locale(locale)
74
65
  end
@@ -2,12 +2,12 @@
2
2
 
3
3
  Gem::Specification.new do |s|
4
4
  s.name = "rack-i18n_locale_switcher"
5
- s.version = "0.2.3"
5
+ s.version = "0.3.0"
6
6
 
7
7
  s.required_rubygems_version = Gem::Requirement.new(">= 1.2") if s.respond_to? :required_rubygems_version=
8
8
  s.authors = ["Christoph B\u{fc}nte, Andreas Korth"]
9
- s.date = "2011-11-24"
10
- s.description = "Detects the current locale from url, domain, parameter, session or accept header."
9
+ s.date = "2011-11-25"
10
+ s.description = "Detects the current locale from url, domain, parameter or accept header."
11
11
  s.email = ["info@christophbuente.de", "andreas.korth@gmail.com"]
12
12
  s.extra_rdoc_files = ["CHANGELOG", "LICENSE", "README.md", "lib/rack/i18n_locale_switcher.rb"]
13
13
  s.files = ["CHANGELOG", "LICENSE", "Manifest", "README.md", "Rakefile", "lib/rack/i18n_locale_switcher.rb", "rack-i18n_locale_switcher.gemspec", "spec/i18n_locale_switcher_spec.rb", "spec/spec_helper.rb"]
@@ -16,7 +16,7 @@ Gem::Specification.new do |s|
16
16
  s.require_paths = ["lib"]
17
17
  s.rubyforge_project = "rack-i18n_locale_switcher"
18
18
  s.rubygems_version = "1.8.11"
19
- s.summary = "Detects the current locale from url, domain, parameter, session or accept header."
19
+ s.summary = "Detects the current locale from url, domain, parameter or accept header."
20
20
 
21
21
  if s.respond_to? :specification_version then
22
22
  s.specification_version = 3
@@ -33,7 +33,6 @@ describe "Rack::I18nLocaleSwitcher" do
33
33
  get '/', :locale => 'xx'
34
34
  I18n.locale.should eql(I18n.default_locale)
35
35
  end
36
-
37
36
  end
38
37
 
39
38
  context 'from path prefix ' do
@@ -53,12 +52,10 @@ describe "Rack::I18nLocaleSwitcher" do
53
52
 
54
53
  context 'from top level domain' do
55
54
 
56
-
57
55
  it "should set the I18n locale" do
58
56
  get 'http://example.de/'
59
57
  I18n.locale.should eql(:de)
60
58
  end
61
-
62
59
  end
63
60
 
64
61
  context 'from accept-language header' do
@@ -67,19 +64,5 @@ describe "Rack::I18nLocaleSwitcher" do
67
64
  get '/' , {}, {'HTTP_ACCEPT_LANGUAGE' => "de, de-de,en;q=0.5"}
68
65
  I18n.locale.should eql(:de)
69
66
  end
70
-
71
67
  end
72
-
73
- context 'from session' do
74
- it "should set the locale to whatever locale is set in the session" do
75
-
76
- get '/', {}, {'rack.session' => {'locale' => 'de'}}
77
- I18n.locale.should eql(:de)
78
- end
79
-
80
- end
81
-
82
- context 'from default' do
83
- end
84
-
85
68
  end
metadata CHANGED
@@ -1,97 +1,94 @@
1
- --- !ruby/object:Gem::Specification
1
+ --- !ruby/object:Gem::Specification
2
2
  name: rack-i18n_locale_switcher
3
- version: !ruby/object:Gem::Version
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.3.0
4
5
  prerelease:
5
- version: 0.2.3
6
6
  platform: ruby
7
- authors:
8
- - "Christoph B\xC3\xBCnte, Andreas Korth"
7
+ authors:
8
+ - Christoph Bünte, Andreas Korth
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
-
13
- date: 2011-11-24 00:00:00 Z
14
- dependencies:
15
- - !ruby/object:Gem::Dependency
12
+ date: 2011-11-25 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
16
15
  name: rack
17
- prerelease: false
18
- requirement: &id001 !ruby/object:Gem::Requirement
16
+ requirement: &2154406440 !ruby/object:Gem::Requirement
19
17
  none: false
20
- requirements:
21
- - - ">="
22
- - !ruby/object:Gem::Version
23
- version: "0"
18
+ requirements:
19
+ - - ! '>='
20
+ - !ruby/object:Gem::Version
21
+ version: '0'
24
22
  type: :runtime
25
- version_requirements: *id001
26
- - !ruby/object:Gem::Dependency
27
- name: i18n
28
23
  prerelease: false
29
- requirement: &id002 !ruby/object:Gem::Requirement
24
+ version_requirements: *2154406440
25
+ - !ruby/object:Gem::Dependency
26
+ name: i18n
27
+ requirement: &2154405980 !ruby/object:Gem::Requirement
30
28
  none: false
31
- requirements:
32
- - - ">="
33
- - !ruby/object:Gem::Version
34
- version: "0"
29
+ requirements:
30
+ - - ! '>='
31
+ - !ruby/object:Gem::Version
32
+ version: '0'
35
33
  type: :runtime
36
- version_requirements: *id002
37
- - !ruby/object:Gem::Dependency
38
- name: domainatrix
39
34
  prerelease: false
40
- requirement: &id003 !ruby/object:Gem::Requirement
35
+ version_requirements: *2154405980
36
+ - !ruby/object:Gem::Dependency
37
+ name: domainatrix
38
+ requirement: &2154405520 !ruby/object:Gem::Requirement
41
39
  none: false
42
- requirements:
43
- - - ">="
44
- - !ruby/object:Gem::Version
45
- version: "0"
40
+ requirements:
41
+ - - ! '>='
42
+ - !ruby/object:Gem::Version
43
+ version: '0'
46
44
  type: :runtime
47
- version_requirements: *id003
48
- - !ruby/object:Gem::Dependency
49
- name: echoe
50
45
  prerelease: false
51
- requirement: &id004 !ruby/object:Gem::Requirement
46
+ version_requirements: *2154405520
47
+ - !ruby/object:Gem::Dependency
48
+ name: echoe
49
+ requirement: &2154405060 !ruby/object:Gem::Requirement
52
50
  none: false
53
- requirements:
54
- - - ">="
55
- - !ruby/object:Gem::Version
56
- version: "0"
51
+ requirements:
52
+ - - ! '>='
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
57
55
  type: :development
58
- version_requirements: *id004
59
- - !ruby/object:Gem::Dependency
60
- name: rspec
61
56
  prerelease: false
62
- requirement: &id005 !ruby/object:Gem::Requirement
57
+ version_requirements: *2154405060
58
+ - !ruby/object:Gem::Dependency
59
+ name: rspec
60
+ requirement: &2154404600 !ruby/object:Gem::Requirement
63
61
  none: false
64
- requirements:
65
- - - ">="
66
- - !ruby/object:Gem::Version
67
- version: "0"
62
+ requirements:
63
+ - - ! '>='
64
+ - !ruby/object:Gem::Version
65
+ version: '0'
68
66
  type: :development
69
- version_requirements: *id005
70
- - !ruby/object:Gem::Dependency
71
- name: rack-test
72
67
  prerelease: false
73
- requirement: &id006 !ruby/object:Gem::Requirement
68
+ version_requirements: *2154404600
69
+ - !ruby/object:Gem::Dependency
70
+ name: rack-test
71
+ requirement: &2154404140 !ruby/object:Gem::Requirement
74
72
  none: false
75
- requirements:
76
- - - ">="
77
- - !ruby/object:Gem::Version
78
- version: "0"
73
+ requirements:
74
+ - - ! '>='
75
+ - !ruby/object:Gem::Version
76
+ version: '0'
79
77
  type: :development
80
- version_requirements: *id006
81
- description: Detects the current locale from url, domain, parameter, session or accept header.
82
- email:
78
+ prerelease: false
79
+ version_requirements: *2154404140
80
+ description: Detects the current locale from url, domain, parameter or accept header.
81
+ email:
83
82
  - info@christophbuente.de
84
83
  - andreas.korth@gmail.com
85
84
  executables: []
86
-
87
85
  extensions: []
88
-
89
- extra_rdoc_files:
86
+ extra_rdoc_files:
90
87
  - CHANGELOG
91
88
  - LICENSE
92
89
  - README.md
93
90
  - lib/rack/i18n_locale_switcher.rb
94
- files:
91
+ files:
95
92
  - CHANGELOG
96
93
  - LICENSE
97
94
  - Manifest
@@ -103,35 +100,32 @@ files:
103
100
  - spec/spec_helper.rb
104
101
  homepage: http://github.com/christoph-buente/rack-i18n_locale_switcher
105
102
  licenses: []
106
-
107
103
  post_install_message:
108
- rdoc_options:
104
+ rdoc_options:
109
105
  - --line-numbers
110
106
  - --inline-source
111
107
  - --title
112
108
  - Rack-i18n_locale_switcher
113
109
  - --main
114
110
  - README.md
115
- require_paths:
111
+ require_paths:
116
112
  - lib
117
- required_ruby_version: !ruby/object:Gem::Requirement
113
+ required_ruby_version: !ruby/object:Gem::Requirement
118
114
  none: false
119
- requirements:
120
- - - ">="
121
- - !ruby/object:Gem::Version
122
- version: "0"
123
- required_rubygems_version: !ruby/object:Gem::Requirement
115
+ requirements:
116
+ - - ! '>='
117
+ - !ruby/object:Gem::Version
118
+ version: '0'
119
+ required_rubygems_version: !ruby/object:Gem::Requirement
124
120
  none: false
125
- requirements:
126
- - - ">="
127
- - !ruby/object:Gem::Version
128
- version: "1.2"
121
+ requirements:
122
+ - - ! '>='
123
+ - !ruby/object:Gem::Version
124
+ version: '1.2'
129
125
  requirements: []
130
-
131
126
  rubyforge_project: rack-i18n_locale_switcher
132
127
  rubygems_version: 1.8.11
133
128
  signing_key:
134
129
  specification_version: 3
135
- summary: Detects the current locale from url, domain, parameter, session or accept header.
130
+ summary: Detects the current locale from url, domain, parameter or accept header.
136
131
  test_files: []
137
-