gettext 1.7.0-mswin32 → 1.8.0-mswin32

Sign up to get free protection for your applications and to get access to all the features.
Files changed (155) hide show
  1. data/ChangeLog +139 -0
  2. data/NEWS +31 -0
  3. data/README +31 -15
  4. data/Rakefile +3 -2
  5. data/bin/rgettext +1 -1
  6. data/bin/rmsgfmt +1 -1
  7. data/bin/rmsgmerge +1 -1
  8. data/data/locale/cs/LC_MESSAGES/rails.mo +0 -0
  9. data/data/locale/cs/LC_MESSAGES/rgettext.mo +0 -0
  10. data/data/locale/de/LC_MESSAGES/rails.mo +0 -0
  11. data/data/locale/de/LC_MESSAGES/rgettext.mo +0 -0
  12. data/data/locale/el/LC_MESSAGES/rails.mo +0 -0
  13. data/data/locale/el/LC_MESSAGES/rgettext.mo +0 -0
  14. data/data/locale/es/LC_MESSAGES/rails.mo +0 -0
  15. data/data/locale/es/LC_MESSAGES/rgettext.mo +0 -0
  16. data/data/locale/et/LC_MESSAGES/rails.mo +0 -0
  17. data/data/locale/fr/LC_MESSAGES/rails.mo +0 -0
  18. data/data/locale/fr/LC_MESSAGES/rgettext.mo +0 -0
  19. data/data/locale/it/LC_MESSAGES/rails.mo +0 -0
  20. data/data/locale/it/LC_MESSAGES/rgettext.mo +0 -0
  21. data/data/locale/ja/LC_MESSAGES/rails.mo +0 -0
  22. data/data/locale/ja/LC_MESSAGES/rgettext.mo +0 -0
  23. data/data/locale/ko/LC_MESSAGES/rails.mo +0 -0
  24. data/data/locale/ko/LC_MESSAGES/rgettext.mo +0 -0
  25. data/data/locale/nl/LC_MESSAGES/rails.mo +0 -0
  26. data/data/locale/nl/LC_MESSAGES/rgettext.mo +0 -0
  27. data/data/locale/pt_BR/LC_MESSAGES/rails.mo +0 -0
  28. data/data/locale/pt_BR/LC_MESSAGES/rgettext.mo +0 -0
  29. data/data/locale/ru/LC_MESSAGES/rails.mo +0 -0
  30. data/data/locale/ru/LC_MESSAGES/rgettext.mo +0 -0
  31. data/data/locale/sv/LC_MESSAGES/rgettext.mo +0 -0
  32. data/data/locale/zh/LC_MESSAGES/rails.mo +0 -0
  33. data/data/locale/zh/LC_MESSAGES/rgettext.mo +0 -0
  34. data/data/locale/zh_TW/LC_MESSAGES/rails.mo +0 -0
  35. data/data/locale/zh_TW/LC_MESSAGES/rgettext.mo +0 -0
  36. data/lib/gettext.rb +50 -23
  37. data/lib/gettext/active_record.rb +275 -0
  38. data/lib/gettext/locale.rb +9 -2
  39. data/lib/gettext/locale_cgi.rb +5 -4
  40. data/lib/gettext/locale_object.rb +5 -4
  41. data/lib/gettext/parser/{activerecord.rb → active_record.rb} +31 -14
  42. data/lib/gettext/parser/ruby.rb +48 -44
  43. data/lib/gettext/rails.rb +111 -253
  44. data/lib/gettext/rgettext.rb +34 -6
  45. data/lib/gettext/string.rb +3 -2
  46. data/lib/gettext/textdomain.rb +3 -3
  47. data/lib/gettext/version.rb +1 -1
  48. data/po/cs/rails.po +61 -61
  49. data/po/cs/rgettext.po +37 -55
  50. data/po/de/rails.po +73 -72
  51. data/po/de/rgettext.po +39 -56
  52. data/po/el/rails.po +60 -60
  53. data/po/el/rgettext.po +26 -44
  54. data/po/es/rails.po +60 -60
  55. data/po/es/rgettext.po +28 -52
  56. data/po/et/rails.po +118 -0
  57. data/po/fr/rails.po +60 -60
  58. data/po/fr/rgettext.po +26 -46
  59. data/po/it/rails.po +68 -68
  60. data/po/it/rgettext.po +35 -53
  61. data/po/ja/rails.po +62 -61
  62. data/po/ja/rgettext.po +27 -45
  63. data/po/ko/rails.po +61 -60
  64. data/po/ko/rgettext.po +34 -54
  65. data/po/nl/rails.po +59 -60
  66. data/po/nl/rgettext.po +35 -55
  67. data/po/pt_BR/rails.po +74 -73
  68. data/po/pt_BR/rgettext.po +36 -52
  69. data/po/rails.pot +61 -61
  70. data/po/rgettext.pot +25 -43
  71. data/po/ru/rails.po +61 -62
  72. data/po/ru/rgettext.po +26 -51
  73. data/po/sv/rgettext.po +27 -44
  74. data/po/zh/rails.po +62 -60
  75. data/po/zh/rgettext.po +28 -47
  76. data/po/zh_TW/rails.po +114 -0
  77. data/po/zh_TW/rgettext.po +121 -0
  78. data/samples/cgi/locale/zh_TW/LC_MESSAGES/helloerb1.mo +0 -0
  79. data/samples/cgi/locale/zh_TW/LC_MESSAGES/helloerb2.mo +0 -0
  80. data/samples/cgi/locale/zh_TW/LC_MESSAGES/hellolib.mo +0 -0
  81. data/samples/cgi/locale/zh_TW/LC_MESSAGES/main.mo +0 -0
  82. data/samples/cgi/po/zh_TW/helloerb1.po +67 -0
  83. data/samples/cgi/po/zh_TW/helloerb2.po +54 -0
  84. data/samples/cgi/po/zh_TW/hellolib.po +26 -0
  85. data/samples/cgi/po/zh_TW/main.po +79 -0
  86. data/samples/locale/zh_TW/LC_MESSAGES/hello.mo +0 -0
  87. data/samples/locale/zh_TW/LC_MESSAGES/hello2.mo +0 -0
  88. data/samples/locale/zh_TW/LC_MESSAGES/hello_noop.mo +0 -0
  89. data/samples/locale/zh_TW/LC_MESSAGES/hello_plural.mo +0 -0
  90. data/samples/locale/zh_TW/LC_MESSAGES/helloglade2.mo +0 -0
  91. data/samples/locale/zh_TW/LC_MESSAGES/hellogtk.mo +0 -0
  92. data/samples/locale/zh_TW/LC_MESSAGES/hellotk.mo +0 -0
  93. data/samples/po/hellogtk.pot +1 -1
  94. data/samples/po/zh_TW/hello.po +26 -0
  95. data/samples/po/zh_TW/hello2.po +34 -0
  96. data/samples/po/zh_TW/hello_noop.po +30 -0
  97. data/samples/po/zh_TW/hello_plural.po +28 -0
  98. data/samples/po/zh_TW/helloglade2.po +40 -0
  99. data/samples/po/zh_TW/hellogtk.po +25 -0
  100. data/samples/po/zh_TW/hellotk.po +26 -0
  101. data/samples/rails/README +8 -11
  102. data/samples/rails/app/controllers/application.rb +6 -9
  103. data/samples/rails/app/views/layouts/blog.rhtml +1 -1
  104. data/samples/rails/config/database.yml +1 -1
  105. data/samples/rails/config/environment.rb +1 -0
  106. data/samples/rails/db/schema.rb +90 -0
  107. data/samples/rails/lib/tasks/gettext.rake +1 -1
  108. data/samples/rails/locale/cs/LC_MESSAGES/blog.mo +0 -0
  109. data/samples/rails/locale/de/LC_MESSAGES/blog.mo +0 -0
  110. data/samples/rails/locale/el/LC_MESSAGES/blog.mo +0 -0
  111. data/samples/rails/locale/en/LC_MESSAGES/blog.mo +0 -0
  112. data/samples/rails/locale/es/LC_MESSAGES/blog.mo +0 -0
  113. data/samples/rails/locale/fr/LC_MESSAGES/blog.mo +0 -0
  114. data/samples/rails/locale/it/LC_MESSAGES/blog.mo +0 -0
  115. data/samples/rails/locale/ja/LC_MESSAGES/blog.mo +0 -0
  116. data/samples/rails/locale/ko/LC_MESSAGES/blog.mo +0 -0
  117. data/samples/rails/locale/nl/LC_MESSAGES/blog.mo +0 -0
  118. data/samples/rails/locale/pt_BR/LC_MESSAGES/blog.mo +0 -0
  119. data/samples/rails/locale/ru/LC_MESSAGES/blog.mo +0 -0
  120. data/samples/rails/locale/zh/LC_MESSAGES/blog.mo +0 -0
  121. data/samples/rails/locale/zh_TW/LC_MESSAGES/blog.mo +0 -0
  122. data/samples/rails/po/blog.pot +106 -110
  123. data/samples/rails/po/cs/blog.po +110 -115
  124. data/samples/rails/po/de/blog.po +107 -112
  125. data/samples/rails/po/el/blog.po +105 -109
  126. data/samples/rails/po/en/blog.po +107 -111
  127. data/samples/rails/po/es/blog.po +105 -110
  128. data/samples/rails/po/fr/blog.po +105 -109
  129. data/samples/rails/po/it/blog.po +105 -109
  130. data/samples/rails/po/ja/blog.po +105 -109
  131. data/samples/rails/po/ko/blog.po +105 -109
  132. data/samples/rails/po/nl/blog.po +105 -110
  133. data/samples/rails/po/pt_BR/blog.po +105 -109
  134. data/samples/rails/po/ru/blog.po +105 -107
  135. data/samples/rails/po/zh/blog.po +105 -109
  136. data/samples/rails/po/zh_TW/blog.po +107 -0
  137. data/samples/rails/vendor/plugins/gettext/locale/zh_TW/LC_MESSAGES/gettext_plugin.mo +0 -0
  138. data/samples/rails/vendor/plugins/gettext/po/zh_TW/gettext_plugin.po +30 -0
  139. data/test/Rakefile +44 -0
  140. data/test/fixtures/developer.rb +5 -0
  141. data/test/fixtures/developers.yml +21 -0
  142. data/test/fixtures/reply.rb +40 -0
  143. data/test/fixtures/topic.rb +23 -0
  144. data/test/fixtures/topics.yml +22 -0
  145. data/test/gettext_test.rb +2 -2
  146. data/test/gettext_test_active_record.rb +1479 -0
  147. data/test/gettext_test_rails.rb +2 -0
  148. data/test/locale/ja/LC_MESSAGES/active_record.mo +0 -0
  149. data/test/po/active_record.pot +295 -0
  150. data/test/po/ja/active_record.po +294 -0
  151. data/test/test.sh +1 -0
  152. data/test/test_rubyparser.rb +10 -2
  153. metadata +66 -6
  154. data/samples/rails/db/mysql.sql +0 -8
  155. data/samples/rails/db/postgresql.sql +0 -7
@@ -9,7 +9,7 @@
9
9
  You may redistribute it and/or modify it under the same
10
10
  license terms as Ruby.
11
11
 
12
- $Id: ruby.rb,v 1.7 2006/06/11 15:36:20 mutoh Exp $
12
+ $Id: ruby.rb,v 1.8 2006/09/11 16:30:31 mutoh Exp $
13
13
  =end
14
14
 
15
15
  require 'irb/ruby-lex.rb'
@@ -80,7 +80,6 @@ class RubyLexX < RubyLex # :nodoc: all
80
80
  def parse
81
81
  until ( (tk = token).kind_of?(RubyToken::TkEND_OF_SCRIPT) && !@continue or tk.nil? )
82
82
  s = get_readed
83
-
84
83
  if RubyToken::TkSTRING === tk
85
84
  def tk.value
86
85
  @value
@@ -115,7 +114,7 @@ class RubyLexX < RubyLex # :nodoc: all
115
114
 
116
115
  yield tk
117
116
  end
118
-
117
+
119
118
  return nil
120
119
  end
121
120
 
@@ -142,47 +141,52 @@ module GetText
142
141
  target = nil
143
142
  msgid = nil
144
143
  line_no = nil
145
-
146
- rl.parse do |tk|
147
- case tk
148
- when RubyToken::TkIDENTIFIER, RubyToken::TkCONSTANT
149
- if ID.include?(tk.name)
150
- target = :normal
151
- elsif PLURAL_ID.include?(tk.name)
152
- target = :plural
153
- else
154
- target = nil
155
- end
156
- line_no = tk.line_no.to_s
157
- when RubyToken::TkSTRING
158
- if target
159
- if msgid
160
- msgid += tk.value
161
- else
162
- msgid = tk.value
163
- end
164
- end
165
- when RubyToken::TkPLUS, RubyToken::TkNL
166
- #do nothing
167
- when RubyToken::TkCOMMA
168
- if msgid and target == :plural
169
- msgid += "\000"
170
- target = :normal
171
- end
172
- else
173
- if msgid
174
- key_existed = targets.assoc(msgid.gsub(/\n/, '\n'))
175
- if key_existed
176
- targets[targets.index(key_existed)] = key_existed <<
177
- file_name + ":" + line_no
178
- else
179
- targets << [msgid.gsub(/\n/, '\n'), file_name + ":" + line_no]
180
- end
181
- msgid = nil
182
- target = nil
183
- end
184
- end
185
- targets
144
+ tk = nil
145
+ begin
146
+ rl.parse do |tk|
147
+ case tk
148
+ when RubyToken::TkIDENTIFIER, RubyToken::TkCONSTANT
149
+ if ID.include?(tk.name)
150
+ target = :normal
151
+ elsif PLURAL_ID.include?(tk.name)
152
+ target = :plural
153
+ else
154
+ target = nil
155
+ end
156
+ line_no = tk.line_no.to_s
157
+ when RubyToken::TkSTRING
158
+ if target
159
+ if msgid
160
+ msgid += tk.value
161
+ else
162
+ msgid = tk.value
163
+ end
164
+ end
165
+ when RubyToken::TkPLUS, RubyToken::TkNL
166
+ #do nothing
167
+ when RubyToken::TkCOMMA
168
+ if msgid and target == :plural
169
+ msgid += "\000"
170
+ target = :normal
171
+ end
172
+ else
173
+ if msgid
174
+ key_existed = targets.assoc(msgid.gsub(/\n/, '\n'))
175
+ if key_existed
176
+ targets[targets.index(key_existed)] = key_existed <<
177
+ file_name + ":" + line_no
178
+ else
179
+ targets << [msgid.gsub(/\n/, '\n'), file_name + ":" + line_no]
180
+ end
181
+ msgid = nil
182
+ target = nil
183
+ end
184
+ end
185
+ targets
186
+ end
187
+ rescue
188
+ $stderr.puts "\n\nError: #{$!} in #{file_name}:#{tk.line_no}\n\t #{lines[tk.line_no - 1]}"
189
+ exit
186
190
  end
187
191
  targets
188
192
  end
data/lib/gettext/rails.rb CHANGED
@@ -6,11 +6,10 @@
6
6
  You may redistribute it and/or modify it under the same
7
7
  license terms as Ruby.
8
8
 
9
- $Id: rails.rb,v 1.43 2006/07/16 15:19:17 mutoh Exp $
9
+ $Id: rails.rb,v 1.51 2006/09/10 15:08:32 mutoh Exp $
10
10
  =end
11
11
 
12
12
  require 'gettext/cgi'
13
- require 'active_record'
14
13
  require 'active_support'
15
14
 
16
15
  module GetText
@@ -53,34 +52,20 @@ module GetText
53
52
  # * :charset - the charset. Generally UTF-8 is recommanded.
54
53
  # And the charset is set order by "the argument of bindtextdomain"
55
54
  # > HTTP_ACCEPT_CHARSET > Default charset(UTF-8).
56
- # * :with_model - false if you want to ignore ActiveRecord support.
57
- # * :with_helper - false if you want to ignore ApplicationHelper support.
58
55
  #
59
56
  # Note: Don't use locale, charset, with_model argument(not in options).
60
57
  # They are remained for backward compatibility.
61
58
  #
62
59
  def bindtextdomain(domainname, options = {}, locale = nil, charset = nil, with_model = true)
63
- opt = {:with_helper => true, :with_model => true}
60
+ opt = {}
64
61
  if options.kind_of? CGI
65
62
  # For backward compatibility
66
- opt.merge!(:cgi => options, :locale => locale, :charset => charset, :with_model => with_model)
63
+ opt.merge!(:cgi => options, :locale => locale, :charset => charset)
67
64
  else
68
65
  opt.merge!(options)
69
66
  end
70
67
  opt[:path] ||= File.join(RAILS_ROOT, "locale")
71
- Locale.set_current(nil) # IMPORTANT! current locale should be nil once(default is used).
72
- set_cgi(opt[:cgi]) if opt[:cgi]
73
- ret = _bindtextdomain(domainname, opt)
74
- bindtextdomain_to(ActiveRecord::Base, domainname) if opt[:with_model]
75
- bindtextdomain_to(ApplicationHelper, domainname) if opt[:with_helper]
76
- ret
77
- end
78
-
79
- def bindtextdomain_to(klass, domainname) #:nodoc:
80
- klass.class_eval {
81
- include GetText
82
- textdomain(domainname)
83
- }
68
+ _bindtextdomain(domainname, opt)
84
69
  end
85
70
  end
86
71
  end
@@ -91,38 +76,91 @@ module ActionController #:nodoc:
91
76
  helper GetText::Rails
92
77
  include GetText::Rails
93
78
 
94
- @@gettext_domainname = nil
79
+ @@gettext_domainnames = []
95
80
  @@gettext_content_type = nil
96
81
 
97
82
  prepend_before_filter :init_gettext
98
83
  after_filter :init_content_type
84
+
99
85
 
100
- def init_gettext_main #:nodoc:
101
- if defined? request.cgi
102
- cgi_ = request.cgi
103
- cgi_.params["lang"] = [@params["lang"]] if @params["lang"]
104
- bindtextdomain(@@gettext_domainname, {:cgi => cgi_}) #You need to pass CGI object first.
105
- else
106
- bindtextdomain(@@gettext_domainname, {:locale => @params["lang"]})
107
- end
86
+ def init_gettext_main(cgi) #:nodoc:
87
+ cgi.params["lang"] = [@params["lang"]] if @params["lang"]
88
+ set_cgi(cgi)
89
+ set_locale_all(nil)
108
90
  end
109
91
 
92
+ REGEXP_GETTEXT_CONTENT_TYPE = /javascript/ #:nodoc:
110
93
  def init_content_type #:nodoc:
111
- if @headers["Content-Type"] and /javascript/ =~ @headers["Content-Type"]
94
+ if @headers["Content-Type"] and REGEXP_GETTEXT_CONTENT_TYPE =~ @headers["Content-Type"]
112
95
  @headers["Content-Type"] = "text/javascript; charset=#{GetText.output_charset}"
113
96
  elsif ! @headers["Content-Type"]
114
97
  @headers["Content-Type"] = "#{@@gettext_content_type}; charset=#{GetText.output_charset}"
115
98
  end
116
99
  end
117
100
 
101
+ def call_methods_around_init_gettext(ary) #:nodoc:
102
+ ary.each do |block|
103
+ if block.kind_of? Symbol
104
+ send(block)
105
+ else
106
+ block.call(self)
107
+ end
108
+ end
109
+ end
118
110
 
119
111
  def init_gettext # :nodoc:
120
- init_gettext_main if @@gettext_domainname
121
- ActiveRecord::Errors.class_eval{
122
- # You need to call bindtextdomain here because ActiveRecord::Errors doesn't know
123
- # what locale is used in.
124
- bindtextdomain("rails")
125
- }
112
+ cgi = nil
113
+ if defined? request.cgi
114
+ cgi = request.cgi
115
+ end
116
+ call_methods_around_init_gettext(@@before_init_gettext)
117
+ init_gettext_main(cgi) if @@gettext_domainnames.size > 0
118
+ call_methods_around_init_gettext(@@after_init_gettext)
119
+
120
+ if ::RAILS_ENV == "development"
121
+ @@before_init_gettext = []
122
+ @@after_init_gettext = []
123
+ end
124
+ end
125
+
126
+ # Append a block which is called before initializing gettext on the each WWW request.
127
+ #
128
+ # (e.g.)
129
+ # class ApplicationController < ActionController::Base
130
+ # before_init_gettext{|controller|
131
+ # cookies = controller.cookies
132
+ # if (cookies["lang"].nil? or cookies["lang"].empty?)
133
+ # GetText.locale = "zh_CN"
134
+ # else
135
+ # GetText.locale = cookies["lang"]
136
+ # end
137
+ # }
138
+ # init_gettext "myapp"
139
+ # # ...
140
+ # end
141
+ @@before_init_gettext = []
142
+ def self.before_init_gettext(*methods, &block)
143
+ @@before_init_gettext += methods
144
+ @@before_init_gettext << block if block_given?
145
+ end
146
+
147
+ # Append a block which is called after initializing gettext on the each WWW request.
148
+ #
149
+ # The GetText.locale is set the locale which bound to the textdomains
150
+ # when gettext is initialized.
151
+ #
152
+ # (e.g.)
153
+ # class ApplicationController < ActionController::Base
154
+ # after_init_gettext {|controller|
155
+ # L10nClass.new(GetText.locale)
156
+ # }
157
+ # init_gettext "foo"
158
+ # # ...
159
+ # end
160
+ @@after_init_gettext = []
161
+ def self.after_init_gettext(*methods, &block)
162
+ @@after_init_gettext += methods
163
+ @@after_init_gettext << block if block_given?
126
164
  end
127
165
 
128
166
  # Bind a 'textdomain' to all of the controllers/views/models. Call this instead of GetText.bindtextdomain.
@@ -130,6 +168,7 @@ module ActionController #:nodoc:
130
168
  # * options: options as a Hash.
131
169
  # * :charset - the output charset. Default is "UTF-8"
132
170
  # * :content_type - the content type. Default is "text/html"
171
+ # * :locale_path - the path to locale directory. Default is {RAILS_ROOT}/locale or {plugin root directory}/locale.
133
172
  #
134
173
  # locale is searched the order by @params["lang"] > "lang" value of QUERY_STRING >
135
174
  # "lang" value of Cookie > HTTP_ACCEPT_LANGUAGE value > Default locale(en).
@@ -155,15 +194,46 @@ module ActionController #:nodoc:
155
194
  opt.merge!(:charset => options, :content_type => content_type)
156
195
  end
157
196
  GetText.output_charset = opt[:charset]
158
- @@gettext_domainname = domainname
159
197
  @@gettext_content_type = opt[:content_type]
198
+ locale_path = opt[:locale_path]
199
+ unless locale_path
200
+ begin
201
+ locale_path = File.join(caller[0].split(/app.controllers/)[0] + "locale")
202
+ rescue RuntimeError
203
+ locale_path = File.join(RAILS_ROOT, "locale")
204
+ end
205
+ end
206
+
207
+ unless @@gettext_domainnames.find{|i| i[0] == domainname}
208
+ @@gettext_domainnames << [domainname, locale_path]
209
+ end
210
+
211
+ bindtextdomain(domainname, {:path => locale_path})
212
+ if defined? ActiveRecord::Base
213
+ textdomain_to(ActiveRecord::Base, domainname)
214
+ textdomain_to(ActiveRecord::Validations, domainname)
215
+ end
216
+ textdomain_to(ActionView::Base, domainname) if defined? ActionView::Base
217
+ textdomain_to(ApplicationHelper, domainname) if defined? ApplicationHelper
218
+ textdomain_to(ActionMailer::Base, domainname) if defined? ActionMailer::Base
160
219
  end
161
220
 
162
221
  # Gets the textdomain name of this controller.
222
+ # This returns the first textdomain which is bound in app/controller/*.rb.
223
+ #
224
+ # *Notice* Deprecated since 1.8.
163
225
  def self.textdomainname
164
- @@gettext_domainname
226
+ textdomain = @@gettext_domainnames[0]
227
+ textdomain ? textdomain[0] : nil
165
228
  end
166
229
 
230
+ # Gets the textdomain name and path of this controller which is set
231
+ # with init_gettext. *(Since 1.8)*
232
+ #
233
+ # * Returns: [[textdomainname1, path1], [textdomainname2, path2], ...]
234
+ def self.textdomains
235
+ @@gettext_domainnames
236
+ end
167
237
  end
168
238
 
169
239
  class TestRequest < AbstractRequest #:nodoc:
@@ -173,223 +243,9 @@ module ActionController #:nodoc:
173
243
  @cgi
174
244
  end
175
245
  end
176
- end
177
-
178
- module ActiveRecord #:nodoc:
179
- class Migration
180
- extend GetText
181
- include GetText
182
- end
183
-
184
- module ConnectionAdapters #:nodoc:
185
- # An abstract definition of a column in a table.
186
- class Column
187
- attr_accessor :table_class
188
-
189
- def human_name
190
- table_class.human_attribute_name(@name)
191
- end
192
- end
193
- end
194
-
195
- module Validations # :nodoc:
196
- def self.append_features(base) # :nodoc:
197
- super
198
- base.extend ClassMethods
199
- base.class_eval{
200
- def gettext(str) #:nodoc:
201
- _(str)
202
- end
203
- def self.human_attribute_name(attribute_key_name) #:nodoc:
204
- s_("#{self}|#{attribute_key_name.humanize}")
205
- end
206
-
207
- def self.human_attribute_table_name_for_error(table_name) #:nodoc:
208
- _(table_name.gsub(/_/, " "))
209
- end
210
- }
211
- end
212
-
213
- module ClassMethods #:nodoc:
214
- @@custom_error_messages_d = {}
215
-
216
- # Very ugly but...
217
- def validates_length_of(*attrs) #:nodoc:
218
- if attrs.last.is_a?(Hash)
219
- msg = attrs.last[:message]
220
- if msg
221
- @@custom_error_messages_d[msg] = /#{Regexp.escape(msg).sub(/%d/, '(\d+)')}/
222
- end
223
- end
224
- validates_size_of(*attrs)
225
- end
226
-
227
- def custom_error_messages_d #:nodoc:
228
- @@custom_error_messages_d
229
- end
230
- end
231
- def custom_error_messages_d #:nodoc:
232
- self.class.custom_error_messages_d
233
- end
234
- end
235
-
236
- class Base
237
- include GetText::Rails
238
- include Validations
239
-
240
- @@gettext_untranslate = false
241
- @@gettext_untranslate_columns = []
242
-
243
- # Untranslate all of the tablename/fieldnames in this model class.
244
- def self.untranslate_all
245
- @@gettext_untranslate = true
246
- end
247
-
248
- # Returns true if "untranslate_all" is called. Otherwise false.
249
- def self.untranslate_all?
250
- @@gettext_untranslate
251
- end
252
-
253
- # Sets the untranslate columns.
254
- # (e.g.) untranslate :foo, :bar, :baz
255
- def self.untranslate(*w)
256
- @@gettext_untranslate_columns += w.collect{|v| v.to_s}
257
- end
258
-
259
- # Returns true if the column is set "untranslate".
260
- # (e.g.) untranslate? :foo
261
- def self.untranslate?(columnname)
262
- @@gettext_untranslate_columns.include?(columnname)
263
- end
264
-
265
- def self.untranslate_data #:nodoc:
266
- [@@gettext_untranslate, @@gettext_untranslate_columns]
267
- end
268
-
269
- def self.columns
270
- unless @columns
271
- @columns = connection.columns(table_name, "#{name} Columns")
272
- @columns.each {|column|
273
- column.table_class = self
274
- column.primary = column.name == primary_key
275
- }
276
- end
277
- @columns
278
- end
279
-
280
- # call-seq:
281
- # set_error_message_title(msg)
282
- #
283
- # ((*Deprecated*))
284
- # Use ActionView::Helpers::ActiveRecordHelper::L10n.set_error_message_title
285
- # instead.
286
- #
287
- # Sets a your own title of error message dialog.
288
- # * msg: [single_msg, plural_msg]. Usually you need to call this with Nn_().
289
- # * Returns: [single_msg, plural_msg]
290
- def self.set_error_message_title(msg, plural_msg = nil)
291
- ActionView::Helpers::ActiveRecordHelper::L10n.set_error_message_title(msg, plural_msg)
292
- end
293
-
294
- # call-seq:
295
- # set_error_message_explanation(msg)
296
- #
297
- # ((*Deprecated*))
298
- # Use ActionView::Helpers::ActiveRecordHelper::L10n.set_error_message_explanation
299
- # instead.
300
- #
301
- # Sets a your own explanation of the error message dialog.
302
- # * msg: [single_msg, plural_msg]. Usually you need to call this with Nn_().
303
- # * Returns: [single_msg, plural_msg]
304
- def self.set_error_message_explanation(msg, plural_msg = nil)
305
- ActionView::Helpers::ActiveRecordHelper::L10n.set_error_message_explanation(msg, plural_msg)
306
- end
307
- end
308
-
309
- # activerecord-1.14.3/lib/active_record/validations.rb
310
- class Errors #:nodoc:
311
- include GetText
312
-
313
- RE_FIELD_NAME = /%\{fn\}/ #:nodoc:
314
-
315
- # You need to define this here, because this values will be updated by application.
316
- default_error_messages.update(
317
- :inclusion => N_("%{fn} is not included in the list"),
318
- :exclusion => N_("%{fn} is reserved"),
319
- :invalid => N_("%{fn} is invalid"),
320
- :confirmation => N_("%{fn} doesn't match confirmation"),
321
- :accepted => N_("%{fn} must be accepted"),
322
- :empty => N_("%{fn} can't be empty"),
323
- :blank => N_("%{fn} can't be blank"),
324
- :too_long => N_("%{fn} is too long (max is %d characters)"),
325
- :too_short => N_("%{fn} is too short (min is %d characters)"),
326
- :wrong_length => N_("%{fn} is the wrong length (should be %d characters)"),
327
- :taken => N_("%{fn} has already been taken"),
328
- :not_a_number => N_("%{fn} is not a number")
329
- )
330
- @@default_error_messages_d = {
331
- default_error_messages[:too_long] => /#{Regexp.escape(default_error_messages[:too_long]).sub(/%d/, '(\d+)')}/,
332
- default_error_messages[:too_short] =>/#{Regexp.escape(default_error_messages[:too_short]).sub(/%d/, '(\d+)')}/,
333
- default_error_messages[:wrong_length] =>/#{Regexp.escape(default_error_messages[:wrong_length]).sub(/%d/, '(\d+)')}/,
334
- }
335
- cattr_accessor :default_error_messages_d
336
-
337
- def localize_error_messages # :nodoc:
338
- errors = {}
339
- @errors.each_key do |attr|
340
- @errors[attr].each do |msg|
341
- next if msg.nil?
342
- custom_msg = nil
343
- #Ugly but... :-<
344
- @@default_error_messages_d.merge(@base.custom_error_messages_d).each do |key, regexp|
345
- if regexp =~ msg
346
- custom_msg = @base.gettext(key)
347
- custom_msg = _(msg) if custom_msg == msg
348
- custom_msg = _(custom_msg) % $1.to_i
349
- break
350
- end
351
- end
352
- unless custom_msg
353
- custom_msg = @base.gettext(msg)
354
- custom_msg = _(msg) if custom_msg == msg
355
- end
356
- if attr == "base"
357
- full_message = custom_msg
358
- elsif RE_FIELD_NAME =~ custom_msg
359
- full_message = custom_msg % {:fn => @base.class.human_attribute_name(attr)}
360
- else
361
- full_message = @base.class.human_attribute_name(attr) + " " + custom_msg
362
- end
363
- errors[attr] = full_message
364
- end
365
- end
366
- errors
367
- end
368
-
369
- def on(attribute) #:nodoc:
370
- errors = localize_error_messages
371
- if errors[attribute.to_s].nil?
372
- nil
373
- elsif errors[attribute.to_s].length == 1
374
- errors[attribute.to_s].first
375
- else
376
- errors[attribute.to_s]
377
- end
378
- end
379
246
 
380
- def full_messages #:nodoc:
381
- full_messages = []
382
- errors = localize_error_messages
383
- errors.each do |attr, msg|
384
- next if msg.nil?
385
- full_messages << msg
386
- end
387
- full_messages
388
- end
389
- end
390
247
  end
391
248
 
392
-
393
249
  module ActionView #:nodoc:
394
250
  class Base #:nodoc:
395
251
  alias render_file_without_locale render_file #:nodoc:
@@ -502,8 +358,6 @@ module ActionView #:nodoc:
502
358
  include GetText
503
359
  alias distance_of_time_in_words_without_locale distance_of_time_in_words #:nodoc:
504
360
 
505
- bindtextdomain("rails")
506
-
507
361
  # This is FAKE constant. The messages are found by rgettext as the msgid.
508
362
  MESSAGESS = [N_('less than 5 seconds'), N_('less than 10 seconds'), N_('less than 20 seconds'),
509
363
  N_('half a minute'), N_('less than a minute')]
@@ -512,6 +366,8 @@ module ActionView #:nodoc:
512
366
  DAYS = [/^(\d+) days?$/, Nn_('1 day', '%{num} days')]
513
367
 
514
368
  def distance_of_time_in_words(from_time, to_time = 0, include_seconds = false)
369
+ textdomain("rails")
370
+
515
371
  msg = distance_of_time_in_words_without_locale(from_time, to_time, include_seconds)
516
372
  match = false
517
373
  [MINUTES, HOURS, DAYS].each do |regexp, nn|
@@ -575,3 +431,5 @@ end
575
431
  if ::RAILS_ENV == "development"
576
432
  GetText::TextDomain.check_mo = true
577
433
  end
434
+
435
+ require 'gettext/active_record'