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 +3 -0
- data/README.md +47 -1
- data/Rakefile +2 -2
- data/lib/rack/i18n_locale_switcher.rb +1 -10
- data/rack-i18n_locale_switcher.gemspec +4 -4
- data/spec/i18n_locale_switcher_spec.rb +0 -17
- metadata +72 -78
data/CHANGELOG
CHANGED
data/README.md
CHANGED
@@ -1,3 +1,49 @@
|
|
1
1
|
# Rack::I18nLocaleSwitcher
|
2
2
|
|
3
|
-
|
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.
|
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
|
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 =
|
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.
|
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-
|
10
|
-
s.description = "Detects the current locale from url, domain, parameter
|
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
|
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
|
-
-
|
7
|
+
authors:
|
8
|
+
- Christoph Bünte, Andreas Korth
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
|
13
|
-
|
14
|
-
|
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
|
-
|
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:
|
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
|
-
|
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:
|
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
|
-
|
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:
|
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
|
-
|
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:
|
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
|
-
|
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:
|
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
|
-
|
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:
|
73
|
+
requirements:
|
74
|
+
- - ! '>='
|
75
|
+
- !ruby/object:Gem::Version
|
76
|
+
version: '0'
|
79
77
|
type: :development
|
80
|
-
|
81
|
-
|
82
|
-
|
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:
|
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:
|
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
|
130
|
+
summary: Detects the current locale from url, domain, parameter or accept header.
|
136
131
|
test_files: []
|
137
|
-
|