GitHub Sale: sign up for any paid plan this week and pay nothing until January 1, 2009!  [ hide ]

public
Description: Dead simple Rails localization.
Homepage: http://errtheblog.com/posts/55-ya-talkin-gibberish
Clone URL: git://github.com/defunkt/gibberish.git
README file and some API tweaks
defunkt (author)
Thu Feb 15 04:23:14 -0800 2007
commit  0a6f8e53c2584050c8fc8f8befb4189b16e49241
tree    888e94a8a5a108f127a305146ac56eb0bae48b41
parent  45e95b9d8616df8c8487e00d29e0abad67ef0167
0
...
2
3
4
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
5
6
...
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
0
@@ -2,5 +2,103 @@
0
 
0
 Yet another localization library. Maybe with the most agreeable API.
0
 
0
+= Usage
0
+
0
+It's simple. Your default language, by default, is English (:en).
0
+
0
+ >> "Hey there!"[:hey]
0
+ => "Hey there!"
0
+
0
+Gibberish looks in RAILS_ROOT/lang/*.yml for translation files. Say you have RAILS_ROOT/lang/es.yml,
0
+right? Gibberish will detect that you know about the :es language and will serve up translations
0
+defined in that file if requested to do so.
0
+
0
+Here's a real simple example file (it's just "key: translation"):
0
+
0
+ $ cat lang/es.yml
0
+ hey: ¡Hey allí!
0
+
0
+And, as follows, a real simple example session:
0
+
0
+ >> "Hey there!"[:hey]
0
+ => "Hey there!"
0
+ >> Gibberish.current_language
0
+ => :en
0
+ >> Gibberish.current_language = :es
0
+ => :es
0
+ >> "Hey there!"[:hey]
0
+ => "¡Hey allí!"
0
+ >> Gibberish.current_language = nil
0
+ => nil
0
+ >> "Hey there!"[:hey]
0
+ => "Hey there!"
0
+
0
+It even works with simple interpolation:
0
+
0
+ >> "Hey, {name}!"[:hey_name, 'Chris']
0
+ => "Hey, Chris!"
0
+ >> "{name} is from {place}"[:hey_place, 'Chris', 'the Dreamworld']
0
+ => "Chris is from the Dreamworld"
0
+
0
+Notice we don't use hashes (#) like normal Ruby interpolation. Also, the names of the variables
0
+in the brackets don't really mean much. Interpolation is done in order -- the first argument replaces
0
+the first variable in brackets, the second the second, etc.
0
+
0
+This of course works with your translations:
0
+
0
+ $ cat lang/es.yml
0
+ hey: ¡Hey allí!
0
+ hey_name: ¡Hola {name}!
0
+
0
+ >> "Hey, {name}!"[:hey_name, 'Chris']
0
+ => "Hey, Chris!"
0
+ >> Gibberish.current_language = :es
0
+ => :es
0
+ >> "Hey, {name}!"[:hey_name, 'Cristóbal']
0
+ => ¡Hola Cristóbal!
0
+
0
+Neat. What other methods do we get?
0
+
0
+The classic around_filter use case:
0
+
0
+ >> Gibberish.default_language?
0
+ => true
0
+ >> Gibberish.use_language(:es) do
0
+ ?> puts "hey"[:hey]
0
+ >> end
0
+ ¡Hey allí!
0
+
0
+So, in your ApplicationController (or somewhere):
0
+
0
+ class ApplicationController < ActionController::Base
0
+ around_filter :use_language
0
+
0
+ private
0
+ def use_language
0
+ Gibberish.use_language(session[:language]) { yield }
0
+ end
0
+ end
0
+
0
+Rad.
0
+
0
+Finally, some checking methods, if you need them:
0
+
0
+ >> Gibberish.default_language?
0
+ => true
0
+ >> Gibberish.current_language = :es
0
+ => :es
0
+ >> Gibberish.default_language?
0
+ => false
0
+
0
+Languages are loaded by default at Rails startup. In dev mode, language YAML files are reloaded when
0
+modified. No need to reboot the server.
0
+
0
+ >> Gibberish.load_languages!
0
+ => [:es, :fr, :de, :kl]
0
+ >> Gibberish.languages
0
+ => [:es, :fr, :de, :kl]
0
+
0
+More as it's needed.
0
+
0
 >> Chris Wanstrath
0
 => chris[at]ozmm[dot]org
...
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
 
 
 
 
16
 
17
18
19
...
22
23
24
25
 
26
27
28
...
51
52
53
 
54
55
56
...
1
2
 
 
 
 
 
 
3
4
5
6
7
8
 
9
10
11
12
13
14
15
16
17
...
20
21
22
 
23
24
25
26
...
49
50
51
52
53
54
55
0
@@ -1,19 +1,17 @@
0
 module Gibberish
0
   module Localize
0
- @@config = {}
0
- mattr_accessor :config
0
-
0
- @@languages = {}
0
- mattr_accessor :languages
0
-
0
     @@default_language = :en
0
     mattr_reader :default_language
0
 
0
     @@reserved_keys = [ :limit ]
0
     mattr_reader :reserved_keys
0
 
0
- @@current_language = nil
0
+ @@languages = {}
0
+ def languages
0
+ @@languages.keys
0
+ end
0
 
0
+ @@current_language = nil
0
     def current_language
0
       @@current_language || default_language
0
     end
0
@@ -22,7 +20,7 @@ module Gibberish
0
       load_languages! if defined? RAILS_ENV && RAILS_ENV == 'development'
0
 
0
       language = language.to_sym if language.respond_to? :to_sym
0
- @@current_language = languages[language] ? language : nil
0
+ @@current_language = @@languages[language] ? language : nil
0
     end
0
 
0
     def use_language(language)
0
@@ -51,6 +49,7 @@ module Gibberish
0
         key = File.basename(file, '.*').to_sym
0
         @@languages[key] = YAML.load_file(file).symbolize_keys
0
       end
0
+ languages
0
     end
0
 
0
   private
...
18
19
20
21
 
22
23
24
...
58
59
60
61
 
62
63
64
65
66
 
 
 
 
 
 
 
 
 
 
 
 
 
 
67
68
69
...
18
19
20
 
21
22
23
24
...
58
59
60
 
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
0
@@ -18,7 +18,7 @@ context "After loading languages, Gibberish" do
0
   end
0
 
0
   specify "should know what languages it has translations for" do
0
- Gibberish.languages.keys.should.include :es
0
+ Gibberish.languages.should.include :es
0
   end
0
 
0
   specify "should know if it is using the default language" do
0
@@ -58,12 +58,26 @@ context "After loading languages, Gibberish" do
0
 
0
     Gibberish.use_language :es do
0
       string[:welcome_friend].should.not.equal string
0
- Gibberish.should.not.be.default_language
0
+ Gibberish.should.not.be.default_language
0
     end
0
 
0
     Gibberish.should.be.default_language
0
     string[:welcome_friend].should.equal string
0
   end
0
+
0
+ specify "should return an array of the languages it loaded" do
0
+ languages = Gibberish.load_languages!
0
+ languages.should.be.an.instance_of Array
0
+ languages.should.include :es
0
+ languages.should.include :fr
0
+ end
0
+
0
+ specify "should know what languages it has loaded" do
0
+ languages = Gibberish.languages
0
+ languages.should.be.an.instance_of Array
0
+ languages.should.include :es
0
+ languages.should.include :fr
0
+ end
0
 end
0
 
0
 context "When no language is set" do

Comments

    No one has commented yet.