gettext 1.7.0-mswin32 → 1.8.0-mswin32

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.
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'