locale_rails 0.1.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 +7 -0
- data/NEWS +7 -0
- data/README +33 -0
- data/Rakefile +72 -0
- data/doc/classes/ActionController/Base.html +442 -0
- data/doc/classes/ActionController/Caching.html +348 -0
- data/doc/classes/ActionController/Caching/Fragments.html +424 -0
- data/doc/classes/ActionView/Base.html +422 -0
- data/doc/classes/I18n.html +492 -0
- data/doc/classes/Locale.html +364 -0
- data/doc/created.rid +1 -0
- data/doc/files/ChangeLog.html +355 -0
- data/doc/files/README.html +409 -0
- data/doc/files/lib/locale_rails/action_controller_rb.html +349 -0
- data/doc/files/lib/locale_rails/action_view_rb.html +349 -0
- data/doc/files/lib/locale_rails/i18n_rb.html +342 -0
- data/doc/files/lib/locale_rails/version_rb.html +342 -0
- data/doc/files/lib/locale_rails_rb.html +349 -0
- data/doc/fr_class_index.html +7 -0
- data/doc/fr_file_index.html +8 -0
- data/doc/fr_method_index.html +11 -0
- data/doc/index.html +1 -0
- data/doc/rdoc-style.css +320 -0
- data/lib/locale_rails.rb +18 -0
- data/lib/locale_rails/action_controller.rb +141 -0
- data/lib/locale_rails/action_view.rb +43 -0
- data/lib/locale_rails/i18n.rb +56 -0
- data/lib/locale_rails/version.rb +4 -0
- data/locale_rails-0.1.0.gem +0 -0
- data/sample/README +22 -0
- data/sample/Rakefile +10 -0
- data/sample/app/controllers/application.rb +41 -0
- data/sample/app/controllers/samples_controller.rb +30 -0
- data/sample/app/helpers/application_helper.rb +3 -0
- data/sample/app/views/layouts/samples.html.erb +20 -0
- data/sample/app/views/samples/#cookie.rb# +3 -0
- data/sample/app/views/samples/_part.html.erb +68 -0
- data/sample/app/views/samples/_part_nl.html.erb +2 -0
- data/sample/app/views/samples/cached_action.html.erb +6 -0
- data/sample/app/views/samples/index.html.erb +24 -0
- data/sample/app/views/samples/index_uz_UZ.html.erb +15 -0
- data/sample/config/boot.rb +109 -0
- data/sample/config/database.yml +22 -0
- data/sample/config/environment.rb +25 -0
- data/sample/config/environments/development.rb +17 -0
- data/sample/config/environments/production.rb +24 -0
- data/sample/config/environments/test.rb +22 -0
- data/sample/config/initializers/inflections.rb +10 -0
- data/sample/config/initializers/mime_types.rb +5 -0
- data/sample/config/initializers/new_rails_defaults.rb +17 -0
- data/sample/config/routes.rb +13 -0
- data/sample/db/development.sqlite3 +0 -0
- data/sample/db/production.sqlite3 +0 -0
- data/sample/doc/README_FOR_APP +2 -0
- data/sample/log/development.log +2573 -0
- data/sample/log/production.log +80 -0
- data/sample/public/404.html +30 -0
- data/sample/public/422.html +30 -0
- data/sample/public/500.html +33 -0
- data/sample/public/dispatch.cgi +10 -0
- data/sample/public/dispatch.fcgi +24 -0
- data/sample/public/dispatch.rb +10 -0
- data/sample/public/favicon.ico +0 -0
- data/sample/public/images/rails.png +0 -0
- data/sample/public/javascripts/application.js +2 -0
- data/sample/public/javascripts/controls.js +963 -0
- data/sample/public/javascripts/dragdrop.js +972 -0
- data/sample/public/javascripts/effects.js +1120 -0
- data/sample/public/javascripts/prototype.js +4221 -0
- data/sample/public/robots.txt +5 -0
- data/sample/public/stylesheets/locale.css +81 -0
- data/sample/public/stylesheets/scaffold.css +74 -0
- data/sample/script/about +4 -0
- data/sample/script/console +3 -0
- data/sample/script/dbconsole +3 -0
- data/sample/script/destroy +3 -0
- data/sample/script/generate +3 -0
- data/sample/script/performance/benchmarker +3 -0
- data/sample/script/performance/profiler +3 -0
- data/sample/script/performance/request +3 -0
- data/sample/script/plugin +3 -0
- data/sample/script/process/inspector +3 -0
- data/sample/script/process/reaper +3 -0
- data/sample/script/process/spawner +3 -0
- data/sample/script/runner +3 -0
- data/sample/script/server +3 -0
- data/sample/test/performance/browsing_test.rb +9 -0
- data/sample/test/test_helper.rb +38 -0
- metadata +195 -0
@@ -0,0 +1,7 @@
|
|
1
|
+
|
2
|
+
<a href="classes/ActionController/Base.html">ActionController::Base<br/></a>
|
3
|
+
<a href="classes/ActionController/Caching.html">ActionController::Caching<br/></a>
|
4
|
+
<a href="classes/ActionController/Caching/Fragments.html">ActionController::Caching::Fragments<br/></a>
|
5
|
+
<a href="classes/ActionView/Base.html">ActionView::Base<br/></a>
|
6
|
+
<a href="classes/I18n.html">I18n<br/></a>
|
7
|
+
<a href="classes/Locale.html">Locale<br/></a>
|
@@ -0,0 +1,8 @@
|
|
1
|
+
|
2
|
+
<a href="files/ChangeLog.html">ChangeLog<br/></a>
|
3
|
+
<a href="files/README.html">README<br/></a>
|
4
|
+
<a href="files/lib/locale_rails_rb.html">lib/locale_rails.rb<br/></a>
|
5
|
+
<a href="files/lib/locale_rails/action_controller_rb.html">lib/locale_rails/action_controller.rb<br/></a>
|
6
|
+
<a href="files/lib/locale_rails/action_view_rb.html">lib/locale_rails/action_view.rb<br/></a>
|
7
|
+
<a href="files/lib/locale_rails/i18n_rb.html">lib/locale_rails/i18n.rb<br/></a>
|
8
|
+
<a href="files/lib/locale_rails/version_rb.html">lib/locale_rails/version.rb<br/></a>
|
@@ -0,0 +1,11 @@
|
|
1
|
+
|
2
|
+
<a href="classes/ActionView/Base.html#M000006">_pick_template_with_locale (ActionView::Base)<br/></a>
|
3
|
+
<a href="classes/ActionView/Base.html#M000005">_pick_template_with_locale_main (ActionView::Base)<br/></a>
|
4
|
+
<a href="classes/ActionController/Base.html#M000004">after_init_locale (ActionController::Base)<br/></a>
|
5
|
+
<a href="classes/ActionController/Base.html#M000003">before_init_locale (ActionController::Base)<br/></a>
|
6
|
+
<a href="classes/I18n.html#M000010">candidates (I18n)<br/></a>
|
7
|
+
<a href="classes/ActionController/Caching/Fragments.html#M000002">expire_fragment_with_locale (ActionController::Caching::Fragments)<br/></a>
|
8
|
+
<a href="classes/ActionController/Caching/Fragments.html#M000001">fragment_cache_key_with_locale (ActionController::Caching::Fragments)<br/></a>
|
9
|
+
<a href="classes/I18n.html#M000009">locale= (I18n)<br/></a>
|
10
|
+
<a href="classes/I18n.html#M000007">supported_locales (I18n)<br/></a>
|
11
|
+
<a href="classes/I18n.html#M000008">supported_locales= (I18n)<br/></a>
|
data/doc/index.html
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en"><head><meta content="text/html; charset=utf-8" http-equiv="Content-Type"/><title>Ruby-Locale for Ruby on Rails</title><link type="text/css" href="rdoc-style.css" media="screen" rel="stylesheet"/><meta content="0;url=files/README.html" http-equiv="refresh"/></head><body><div id="container"><div class="curve" id="preheader_curve_0"></div><div class="curve" id="preheader_curve_1"></div><div class="curve" id="preheader_curve_2"></div><div class="curve" id="preheader_curve_3"></div><div class="curve" id="preheader_curve_4"></div><div class="curve" id="preheader_curve_5"></div><div id="header"><span id="title"><p> </p><h1>Ruby Documentation</h1></span></div><div class="clear"></div><div id="redirect"><a href="files/README.html"><h1>Redirect</h1></a></div></div></body></html>
|
data/doc/rdoc-style.css
ADDED
@@ -0,0 +1,320 @@
|
|
1
|
+
|
2
|
+
/*;
|
3
|
+
Allison 2 template;
|
4
|
+
Copyright 2007, 2008 Cloudburst, LLC. Licensed under the AFL 3. See the included LICENSE file.;
|
5
|
+
*/;
|
6
|
+
|
7
|
+
/* default styles */
|
8
|
+
|
9
|
+
* {
|
10
|
+
margin: 0;
|
11
|
+
padding: 0;
|
12
|
+
border: none;
|
13
|
+
}
|
14
|
+
|
15
|
+
|
16
|
+
|
17
|
+
|
18
|
+
|
19
|
+
|
20
|
+
|
21
|
+
|
22
|
+
|
23
|
+
|
24
|
+
.clear {
|
25
|
+
clear: both;
|
26
|
+
}
|
27
|
+
|
28
|
+
a {
|
29
|
+
color: #304878;
|
30
|
+
font-weight: bold;
|
31
|
+
text-decoration: none;
|
32
|
+
}
|
33
|
+
|
34
|
+
a:hover {
|
35
|
+
text-decoration: underline;
|
36
|
+
}
|
37
|
+
|
38
|
+
html, body {
|
39
|
+
color: #000;
|
40
|
+
font-size: 13px;
|
41
|
+
font-family: helvetica, verdana, sans;
|
42
|
+
background-color: #fff;
|
43
|
+
text-align: center;
|
44
|
+
margin: 0;
|
45
|
+
padding: 0;
|
46
|
+
}
|
47
|
+
|
48
|
+
p, ul, ol {
|
49
|
+
line-height: 16px;
|
50
|
+
} li {
|
51
|
+
margin: 3px;
|
52
|
+
_margin-left: 40px;
|
53
|
+
} p, pre, table, ol, ul {
|
54
|
+
margin: 16px;
|
55
|
+
} #item_name {
|
56
|
+
margin-top: -8px;
|
57
|
+
}
|
58
|
+
|
59
|
+
h1 {
|
60
|
+
font-size: 22px;
|
61
|
+
margin-top: 16px;
|
62
|
+
} h2, h3 {
|
63
|
+
font-size: 18px;
|
64
|
+
margin: 6px;
|
65
|
+
margin-right: 0;
|
66
|
+
padding-top: 12px;
|
67
|
+
}
|
68
|
+
|
69
|
+
/* center everything */
|
70
|
+
|
71
|
+
#container {
|
72
|
+
margin: 20px auto 0 auto;
|
73
|
+
width: 900px;
|
74
|
+
text-align: left;
|
75
|
+
}
|
76
|
+
|
77
|
+
/* header stuff */
|
78
|
+
|
79
|
+
#header {
|
80
|
+
padding: 6px;
|
81
|
+
padding-top: 3px;
|
82
|
+
width: 888px;
|
83
|
+
height: 52px;
|
84
|
+
_height: 58px;
|
85
|
+
margin-bottom: 12px;
|
86
|
+
vertical-align: baseline;
|
87
|
+
background-color: #181848;
|
88
|
+
overflow: hidden;
|
89
|
+
} .curve {
|
90
|
+
background-color: #181848;
|
91
|
+
margin: 0;
|
92
|
+
padding: 0;
|
93
|
+
height: 1px;
|
94
|
+
overflow: hidden /* again, ie problem */;
|
95
|
+
}
|
96
|
+
|
97
|
+
|
98
|
+
|
99
|
+
|
100
|
+
|
101
|
+
#preheader_curve_5{border-left: 1px solid #fff; border-right: 1px solid #fff; width: 898px; _width: 888px; }
|
102
|
+
#preheader_curve_4{border-left: 1px solid #fff; border-right: 1px solid #fff; width: 898px; _width: 888px; }
|
103
|
+
#preheader_curve_3{border-left: 2px solid #fff; border-right: 2px solid #fff; width: 896px; _width: 888px; }
|
104
|
+
#preheader_curve_2{border-left: 3px solid #fff; border-right: 3px solid #fff; width: 894px; _width: 888px; }
|
105
|
+
#preheader_curve_1{border-left: 4px solid #fff; border-right: 4px solid #fff; width: 892px; _width: 888px; }
|
106
|
+
#preheader_curve_0{border-left: 6px solid #fff; border-right: 6px solid #fff; width: 888px; _width: 888px; }
|
107
|
+
|
108
|
+
#header h1 {
|
109
|
+
color: #fff;
|
110
|
+
font-size: 30px;
|
111
|
+
margin: 4px 0 0 0;
|
112
|
+
} #header p {
|
113
|
+
margin: 0;
|
114
|
+
padding: 0;
|
115
|
+
padding-left: 3px;
|
116
|
+
font-size: 16px;
|
117
|
+
color: #fff;
|
118
|
+
} #header a {
|
119
|
+
color: #fff;
|
120
|
+
text-decoration: none;
|
121
|
+
font-weight: bold;
|
122
|
+
}
|
123
|
+
|
124
|
+
/* basic layout and navigation bars */
|
125
|
+
|
126
|
+
#left {
|
127
|
+
background-color: #181848;
|
128
|
+
width: 220px;
|
129
|
+
float: left;
|
130
|
+
_width: 208px;
|
131
|
+
margin-bottom: 24px;
|
132
|
+
} #left a {
|
133
|
+
line-height: 14px;
|
134
|
+
}
|
135
|
+
|
136
|
+
/* navigation bar colors and text styles */
|
137
|
+
|
138
|
+
.navigation {
|
139
|
+
width: 196px;
|
140
|
+
margin: 6px;
|
141
|
+
padding: 6px;
|
142
|
+
text-align: left;
|
143
|
+
background-color: #fff;
|
144
|
+
overflow: hidden;
|
145
|
+
} .navigation h3 {
|
146
|
+
font-weight: bold;
|
147
|
+
margin-bottom: 5px;
|
148
|
+
} .navigation span, .navigation a {
|
149
|
+
margin-left: 6px;
|
150
|
+
} #includes .navigation span, #includes .navigation a {
|
151
|
+
margin-left: 0;
|
152
|
+
} .darker {
|
153
|
+
background-color: #e4ebed;
|
154
|
+
} #spacer {
|
155
|
+
background-color: #fff;
|
156
|
+
height: 18px;
|
157
|
+
display: none;
|
158
|
+
}
|
159
|
+
|
160
|
+
/* content area */
|
161
|
+
|
162
|
+
#content {
|
163
|
+
padding: 20px;
|
164
|
+
width: 640px;
|
165
|
+
float: left;
|
166
|
+
min-height: 450px;
|
167
|
+
margin: 0;
|
168
|
+
margin-bottom: -4px;
|
169
|
+
} #content img {
|
170
|
+
padding-top: 6px;
|
171
|
+
padding-bottom: 12px;
|
172
|
+
}
|
173
|
+
|
174
|
+
#content h1, h2 {
|
175
|
+
border-top: 1px solid #e4ebed;
|
176
|
+
} #content h1 {
|
177
|
+
padding-top: 18px;
|
178
|
+
} #content #item_name { /* why does this need to be fully qualified? */
|
179
|
+
padding-top: 0;
|
180
|
+
border: none;
|
181
|
+
}
|
182
|
+
|
183
|
+
/* footer */
|
184
|
+
|
185
|
+
#footer {
|
186
|
+
text-align: center;
|
187
|
+
background-color: #fff;
|
188
|
+
padding: 18px;
|
189
|
+
border-top: 1px solid #e4ebed;
|
190
|
+
color: #ccd5dc;
|
191
|
+
} #footer a {
|
192
|
+
font-weight: normal;
|
193
|
+
color: #ccd5dc;
|
194
|
+
}
|
195
|
+
|
196
|
+
/* for that dumb redirect index page I can't avoid */
|
197
|
+
|
198
|
+
#redirect {
|
199
|
+
text-align: center;
|
200
|
+
} #redirect a {
|
201
|
+
color: #181848;
|
202
|
+
}
|
203
|
+
|
204
|
+
/* tables */
|
205
|
+
|
206
|
+
table {
|
207
|
+
width: 585px;
|
208
|
+
margin-right: 0;
|
209
|
+
border-collapse: collapse;
|
210
|
+
border: 1px solid #e4ebed;
|
211
|
+
} td, th {
|
212
|
+
background-color: #fff;
|
213
|
+
text-align: left;
|
214
|
+
padding: 6px;
|
215
|
+
line-height: 14px;
|
216
|
+
font-size: 13px;
|
217
|
+
} td.normal {
|
218
|
+
font-family: Courier, Courier New, monospace;
|
219
|
+
font-size: 12px;
|
220
|
+
} td.highlight {
|
221
|
+
color: #304878;
|
222
|
+
}
|
223
|
+
|
224
|
+
/* method_block details */
|
225
|
+
|
226
|
+
div.method_block {
|
227
|
+
border-bottom: 1px solid #e4ebed;
|
228
|
+
margin-left: 20px;
|
229
|
+
margin-bottom: -17px;
|
230
|
+
margin-top: 17px;
|
231
|
+
} div.method_block h3 {
|
232
|
+
color: #181848;
|
233
|
+
margin-left: 0;
|
234
|
+
padding: 0;
|
235
|
+
} #content div.method_block h1, #content #description h1 {
|
236
|
+
margin-left: 6px;
|
237
|
+
color: #ccd5dc;
|
238
|
+
} div.method_block a.small { /* where is this used? */
|
239
|
+
font-size: 3px;
|
240
|
+
line-height: 3px;
|
241
|
+
}
|
242
|
+
|
243
|
+
/* index includes on the navigation bar */
|
244
|
+
|
245
|
+
div.index a {
|
246
|
+
font-size: 13px;
|
247
|
+
} #method {
|
248
|
+
display: none;
|
249
|
+
} #file, #class {
|
250
|
+
display: block;
|
251
|
+
} div.list_header {
|
252
|
+
float: left;
|
253
|
+
} div.list_header_link {
|
254
|
+
float: right;
|
255
|
+
padding-top: 3px;
|
256
|
+
} div.list_header_link a {
|
257
|
+
font-weight: normal;
|
258
|
+
} div.navigation h3, .list_header_link {
|
259
|
+
margin: 0;
|
260
|
+
margin-top: 6px;
|
261
|
+
margin-bottom: 6px;
|
262
|
+
padding: 0;
|
263
|
+
}
|
264
|
+
|
265
|
+
.index label {
|
266
|
+
font-size: 13px;
|
267
|
+
} .index form input {
|
268
|
+
width: 136px;
|
269
|
+
} .index form {
|
270
|
+
margin-bottom: 6px;
|
271
|
+
}
|
272
|
+
|
273
|
+
ol, ul {
|
274
|
+
margin-left: 6px;
|
275
|
+
}
|
276
|
+
|
277
|
+
p.source_link a {
|
278
|
+
text-align: right;
|
279
|
+
font-weight: normal;
|
280
|
+
} div.source {
|
281
|
+
display: none;
|
282
|
+
} pre, tt {
|
283
|
+
color: #181848;
|
284
|
+
font-weight: normal;
|
285
|
+
font-family: Courier, Courier New, monospace;
|
286
|
+
font-size: 12px;
|
287
|
+
} pre {
|
288
|
+
line-height: 14px;
|
289
|
+
margin-left: 12px;
|
290
|
+
overflow: auto;
|
291
|
+
/* next 4 lines because IE sucks */
|
292
|
+
_position: relative;
|
293
|
+
_width: 587px;
|
294
|
+
_overflow-x:scroll;
|
295
|
+
_overflow-y:visible;
|
296
|
+
} b tt, tt b {
|
297
|
+
font-weight: bold;
|
298
|
+
} div.source g {
|
299
|
+
margin-left: 0;
|
300
|
+
} p.source_link {
|
301
|
+
text-align: center;
|
302
|
+
}
|
303
|
+
|
304
|
+
/* source code highlighting */
|
305
|
+
|
306
|
+
.source pre {
|
307
|
+
color: black;
|
308
|
+
}
|
309
|
+
pre .ruby-value, pre .ruby-symbol {
|
310
|
+
color: #1104bb;
|
311
|
+
} pre .ruby-value.str, pre .ruby-node {
|
312
|
+
color: #181848;
|
313
|
+
} pre .ruby-ivar, pre .ruby-cvar {
|
314
|
+
} pre .ruby-comment {
|
315
|
+
color: #009500;
|
316
|
+
} pre .ruby-constant {
|
317
|
+
color: #cd8802;
|
318
|
+
} pre .ruby-keyword {
|
319
|
+
color: #8d04aa;
|
320
|
+
}
|
data/lib/locale_rails.rb
ADDED
@@ -0,0 +1,18 @@
|
|
1
|
+
require 'locale'
|
2
|
+
|
3
|
+
Locale.init(:driver => :cgi)
|
4
|
+
|
5
|
+
["i18n", "action_controller", "action_view", "version"].each do |lib|
|
6
|
+
require File.join(File.dirname(__FILE__), "locale_rails", lib)
|
7
|
+
end
|
8
|
+
|
9
|
+
begin
|
10
|
+
Rails::Info.property("Locale version") do
|
11
|
+
Locale::VERSION
|
12
|
+
end
|
13
|
+
Rails::Info.property("Locale for Rails version") do
|
14
|
+
Locale::LOCALE_RAILS_VERSION
|
15
|
+
end
|
16
|
+
rescue Exception
|
17
|
+
$stderr.puts "Locale's Rails::Info is not found." if $DEBUG
|
18
|
+
end
|
@@ -0,0 +1,141 @@
|
|
1
|
+
=begin
|
2
|
+
locale_rails/lib/action_controller.rb - Ruby/Locale for "Ruby on Rails"
|
3
|
+
|
4
|
+
Copyright (C) 2008 Masao Mutoh
|
5
|
+
|
6
|
+
You may redistribute it and/or modify it under the same
|
7
|
+
license terms as Ruby.
|
8
|
+
|
9
|
+
$Id: action_controller.rb 25 2008-11-30 15:44:24Z mutoh $
|
10
|
+
=end
|
11
|
+
|
12
|
+
require 'action_controller'
|
13
|
+
|
14
|
+
module ActionController #:nodoc:
|
15
|
+
class Base
|
16
|
+
|
17
|
+
prepend_before_filter :init_locale
|
18
|
+
|
19
|
+
def self.locale_filter_chain # :nodoc:
|
20
|
+
if chain = read_inheritable_attribute('locale_filter_chain')
|
21
|
+
return chain
|
22
|
+
else
|
23
|
+
write_inheritable_attribute('locale_filter_chain', FilterChain.new)
|
24
|
+
return locale_filter_chain
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
def init_locale # :nodoc:
|
29
|
+
cgi = nil
|
30
|
+
if defined? request.cgi
|
31
|
+
cgi = request.cgi
|
32
|
+
end
|
33
|
+
|
34
|
+
fchain = self.class.locale_filter_chain
|
35
|
+
run_before_filters(fchain.select(&:before?), 0, 0)
|
36
|
+
|
37
|
+
cgi.params["lang"] = [params["lang"]] if params["lang"]
|
38
|
+
Locale.set_cgi(cgi)
|
39
|
+
if cgi.params["lang"]
|
40
|
+
I18n.locale = cgi.params["lang"][0]
|
41
|
+
else
|
42
|
+
I18n.locale = nil
|
43
|
+
end
|
44
|
+
|
45
|
+
run_after_filters(fchain.select(&:after?), 0)
|
46
|
+
end
|
47
|
+
|
48
|
+
# Append a block which is called before initializing locale on each WWW request.
|
49
|
+
#
|
50
|
+
# (e.g.)
|
51
|
+
# class ApplicationController < ActionController::Base
|
52
|
+
# def before_init_i18n
|
53
|
+
# if (cookies["lang"].nil? or cookies["lang"].empty?)
|
54
|
+
# params["lang"] = "ko_KR"
|
55
|
+
# end
|
56
|
+
# end
|
57
|
+
# before_init_locale :before_init_i18n
|
58
|
+
# # ...
|
59
|
+
# end
|
60
|
+
def self.before_init_locale(*filters, &block)
|
61
|
+
locale_filter_chain.append_filter_to_chain(filters, :before, &block)
|
62
|
+
end
|
63
|
+
|
64
|
+
# Append a block which is called after initializing locale on each WWW request.
|
65
|
+
#
|
66
|
+
# (e.g.)
|
67
|
+
# class ApplicationController < ActionController::Base
|
68
|
+
# def after_init_i18n
|
69
|
+
# L10nClass.new(locale_candidates)
|
70
|
+
# end
|
71
|
+
# after_init_locale :after_init_i18n
|
72
|
+
# # ...
|
73
|
+
# end
|
74
|
+
def self.after_init_locale(*filters, &block)
|
75
|
+
locale_filter_chain.append_filter_to_chain(filters, :after, &block)
|
76
|
+
end
|
77
|
+
end
|
78
|
+
|
79
|
+
class TestRequest < AbstractRequest #:nodoc:
|
80
|
+
class LocaleMockCGI < CGI #:nodoc:
|
81
|
+
attr_accessor :stdinput, :stdoutput, :env_table
|
82
|
+
|
83
|
+
def initialize(env, input=nil)
|
84
|
+
self.env_table = env
|
85
|
+
self.stdinput = StringIO.new(input || "")
|
86
|
+
self.stdoutput = StringIO.new
|
87
|
+
|
88
|
+
super()
|
89
|
+
end
|
90
|
+
end
|
91
|
+
|
92
|
+
@cgi = nil
|
93
|
+
def cgi
|
94
|
+
unless @cgi
|
95
|
+
@cgi = LocaleMockCGI.new("REQUEST_METHOD" => "GET",
|
96
|
+
"QUERY_STRING" => "",
|
97
|
+
"REQUEST_URI" => "/",
|
98
|
+
"HTTP_HOST" => "www.example.com",
|
99
|
+
"SERVER_PORT" => "80",
|
100
|
+
"HTTPS" => "off")
|
101
|
+
end
|
102
|
+
@cgi
|
103
|
+
end
|
104
|
+
end
|
105
|
+
|
106
|
+
module Caching
|
107
|
+
module Fragments
|
108
|
+
def fragment_cache_key_with_locale(name)
|
109
|
+
ret = fragment_cache_key_without_locale(name)
|
110
|
+
if ret.is_a? String
|
111
|
+
ret.gsub(/:/, ".") << "_#{I18n.candidates}"
|
112
|
+
else
|
113
|
+
ret
|
114
|
+
end
|
115
|
+
end
|
116
|
+
alias_method_chain :fragment_cache_key, :locale
|
117
|
+
|
118
|
+
def expire_fragment_with_locale(name, options = nil)
|
119
|
+
return unless perform_caching
|
120
|
+
|
121
|
+
fc_store = (respond_to? :cache_store) ? cache_store : fragment_cache_store
|
122
|
+
key = name.is_a?(Regexp) ? name : fragment_cache_key_without_locale(name)
|
123
|
+
if key.is_a?(Regexp)
|
124
|
+
self.class.benchmark "Expired fragments matching: #{key.source}" do
|
125
|
+
fc_store.delete_matched(key, options)
|
126
|
+
end
|
127
|
+
else
|
128
|
+
key = key.gsub(/:/, ".")
|
129
|
+
self.class.benchmark "Expired fragment: #{key}, lang = #{I18n.supported_locales}" do
|
130
|
+
supported_locales.each do |lang|
|
131
|
+
fc_store.delete("#{key}_#{lang}", options)
|
132
|
+
end
|
133
|
+
end
|
134
|
+
end
|
135
|
+
end
|
136
|
+
alias_method_chain :expire_fragment, :locale
|
137
|
+
end
|
138
|
+
end
|
139
|
+
end
|
140
|
+
|
141
|
+
|