grosser-fast_gettext 0.2.8 → 0.2.10
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.markdown +5 -1
- data/VERSION.yml +1 -1
- data/lib/fast_gettext/storage.rb +26 -2
- data/spec/fast_gettext/storage_spec.rb +25 -0
- metadata +2 -2
data/README.markdown
CHANGED
@@ -8,6 +8,10 @@ Setup
|
|
8
8
|
=====
|
9
9
|
sudo gem install grosser-fast_gettext -s http://gems.github.com/
|
10
10
|
|
11
|
+
Or from source:
|
12
|
+
git clone git://github.com/grosser/fast_gettext.git
|
13
|
+
cd fast_gettext && rake install
|
14
|
+
|
11
15
|
Tell Gettext where your mo-files lie:
|
12
16
|
#e.g. for locale/de/LC_MESSAGES/my_app.mo
|
13
17
|
FastGettext.add_text_domain('my_app',:path=>'locale')
|
@@ -70,7 +74,7 @@ then e.g. controllers, so set them inside your application_controller.
|
|
70
74
|
def set_locale
|
71
75
|
FastGettext.available_locales = ['de','en',...]
|
72
76
|
FastGettext.text_domain = 'frontend'
|
73
|
-
sessions[:locale] = I18n.locale = FastGettext.set_locale(params[:locale] || sessions[:locale] || 'en')
|
77
|
+
sessions[:locale] = I18n.locale = FastGettext.set_locale(params[:locale] || sessions[:locale] || request.env['HTTP_ACCEPT_LANGUAGE'] || 'en')
|
74
78
|
end
|
75
79
|
|
76
80
|
#application_helper.rb
|
data/VERSION.yml
CHANGED
data/lib/fast_gettext/storage.rb
CHANGED
@@ -37,8 +37,8 @@ module FastGettext
|
|
37
37
|
end
|
38
38
|
|
39
39
|
def locale=(new_locale)
|
40
|
-
new_locale = new_locale
|
41
|
-
if
|
40
|
+
new_locale = best_locale_in(new_locale)
|
41
|
+
if new_locale
|
42
42
|
write_thread_store(:locale,new_locale)
|
43
43
|
update_current_translations
|
44
44
|
end
|
@@ -52,6 +52,30 @@ module FastGettext
|
|
52
52
|
locale
|
53
53
|
end
|
54
54
|
|
55
|
+
#Opera: de-DE,de;q=0.9,en;q=0.8
|
56
|
+
#Firefox de-de,de;q=0.8,en-us;q=0.5,en;q=0.3
|
57
|
+
#IE6/7 de
|
58
|
+
#nil if nothing matches
|
59
|
+
def best_locale_in(locales)
|
60
|
+
locales = locales.to_s.gsub(/\s/,'')
|
61
|
+
|
62
|
+
#split the locale and seperate it into different languages
|
63
|
+
#[['de-de','de','0.5'], ['en','0.8'], ...]
|
64
|
+
parts = locales.split(',')
|
65
|
+
locales = [[]]
|
66
|
+
parts.each do |part|
|
67
|
+
locales.last << part.split(/;q=/)#add another language or language and weight
|
68
|
+
locales += [] if part.length == 2 #if it could be split we are now in a new locale
|
69
|
+
end
|
70
|
+
|
71
|
+
locales.sort!(&:last) #sort them by weight which is the last entry
|
72
|
+
locales.flatten.each do |candidate|
|
73
|
+
candidate = candidate.sub(/^([a-zA-Z]{2})[-_]([a-zA-Z]{2})$/){$1.downcase+'_'+$2.upcase}#de-de -> de_DE
|
74
|
+
return candidate if not available_locales or available_locales.include?(candidate)
|
75
|
+
end
|
76
|
+
return nil#nothing found im sorry :P
|
77
|
+
end
|
78
|
+
|
55
79
|
#turn off translation if none was defined to disable all resulting errors
|
56
80
|
def silence_errors
|
57
81
|
if not self.current_translations or self.current_translations == NoTextDomainConfigured
|
@@ -39,6 +39,10 @@ describe Storage do
|
|
39
39
|
self.available_locales = nil
|
40
40
|
locale.should == 'en'
|
41
41
|
end
|
42
|
+
it "does not change the locale if locales was called with nil" do
|
43
|
+
self.locale = nil
|
44
|
+
locale.should == 'en'
|
45
|
+
end
|
42
46
|
it "is the first available_locale if one was set" do
|
43
47
|
self.available_locales = ['de']
|
44
48
|
locale.should == 'de'
|
@@ -53,6 +57,27 @@ describe Storage do
|
|
53
57
|
self.available_locales = ['de']
|
54
58
|
self.set_locale('en').should == 'de'
|
55
59
|
end
|
60
|
+
{
|
61
|
+
'Opera' => "de-DE,de;q=0.9,en;q=0.8",
|
62
|
+
'Firefox' => "de-de,de;q=0.8,en-us;q=0.5,en;q=0.3",
|
63
|
+
}.each do |browser,accept_language|
|
64
|
+
it "sets the locale from #{browser} headers" do
|
65
|
+
FastGettext.available_locales = ['de_DE','de','xx']
|
66
|
+
FastGettext.locale = 'xx'
|
67
|
+
FastGettext.locale = accept_language
|
68
|
+
FastGettext.locale.should == 'de_DE'
|
69
|
+
end
|
70
|
+
end
|
71
|
+
it "sets a unimportant locale if it is the only available" do
|
72
|
+
FastGettext.available_locales = ['en','xx']
|
73
|
+
FastGettext.locale = "de-de,de;q=0.8,en-us;q=0.5,en;q=0.3"
|
74
|
+
FastGettext.locale.should == 'en'
|
75
|
+
end
|
76
|
+
it "sets locale from comma seperated" do
|
77
|
+
FastGettext.available_locales = ['de_DE','en','xx']
|
78
|
+
FastGettext.locale = "de,de-de,en"
|
79
|
+
FastGettext.locale.should == 'de_DE'
|
80
|
+
end
|
56
81
|
end
|
57
82
|
|
58
83
|
describe :silence_errors do
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: grosser-fast_gettext
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.2.
|
4
|
+
version: 0.2.10
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Michael Grosser
|
@@ -9,7 +9,7 @@ autorequire:
|
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
11
|
|
12
|
-
date: 2009-02-
|
12
|
+
date: 2009-02-26 00:00:00 -08:00
|
13
13
|
default_executable:
|
14
14
|
dependencies: []
|
15
15
|
|