gettext 1.1.1-mswin32 → 1.2.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.
- data/ChangeLog +128 -0
- data/NEWS +10 -0
- data/README +21 -23
- data/Rakefile +40 -21
- data/bin/rgettext +1 -1
- data/bin/rmsgfmt +1 -1
- data/bin/rmsgmerge +1 -1
- data/data/locale/cs/LC_MESSAGES/rails.mo +0 -0
- data/data/locale/cs/LC_MESSAGES/rgettext.mo +0 -0
- data/data/locale/de/LC_MESSAGES/rails.mo +0 -0
- data/data/locale/de/LC_MESSAGES/rgettext.mo +0 -0
- data/data/locale/el/LC_MESSAGES/rails.mo +0 -0
- data/data/locale/el/LC_MESSAGES/rgettext.mo +0 -0
- data/data/locale/es/LC_MESSAGES/rails.mo +0 -0
- data/data/locale/es/LC_MESSAGES/rgettext.mo +0 -0
- data/data/locale/fr/LC_MESSAGES/rails.mo +0 -0
- data/data/locale/fr/LC_MESSAGES/rgettext.mo +0 -0
- data/data/locale/it/LC_MESSAGES/rgettext.mo +0 -0
- data/data/locale/ja/LC_MESSAGES/rails.mo +0 -0
- data/data/locale/ja/LC_MESSAGES/rgettext.mo +0 -0
- data/data/locale/ko/LC_MESSAGES/rails.mo +0 -0
- data/data/locale/ko/LC_MESSAGES/rgettext.mo +0 -0
- data/data/locale/nl/LC_MESSAGES/rails.mo +0 -0
- data/data/locale/nl/LC_MESSAGES/rgettext.mo +0 -0
- data/data/locale/pt_BR/LC_MESSAGES/rails.mo +0 -0
- data/data/locale/pt_BR/LC_MESSAGES/rgettext.mo +0 -0
- data/data/locale/sv/LC_MESSAGES/rgettext.mo +0 -0
- data/ext/gettext/{gettext/Makefile → Makefile} +3 -3
- data/ext/gettext/extconf.rb +20 -0
- data/ext/gettext/locale_system-i386-mswin32.def +2 -0
- data/ext/gettext/{gettext/_locale.c → locale_system.c} +15 -19
- data/ext/gettext/locale_system.exp +0 -0
- data/ext/gettext/locale_system.lib +0 -0
- data/ext/gettext/locale_system.obj +0 -0
- data/ext/gettext/{gettext/_locale.pdb → locale_system.pdb} +0 -0
- data/ext/gettext/locale_system.so +0 -0
- data/ext/gettext/mkmf.log +10 -0
- data/ext/gettext/{gettext/vc70.pdb → vc70.pdb} +0 -0
- data/lib/gettext.rb +186 -38
- data/lib/gettext/cgi.rb +35 -69
- data/lib/gettext/container.rb +14 -5
- data/lib/gettext/erb.rb +30 -2
- data/lib/gettext/iconv.rb +19 -4
- data/lib/gettext/locale.rb +188 -39
- data/lib/gettext/locale_cgi.rb +102 -0
- data/lib/gettext/locale_object.rb +131 -0
- data/lib/gettext/locale_posix.rb +50 -0
- data/lib/gettext/locale_table_win32.rb +224 -182
- data/lib/gettext/locale_win32.rb +59 -35
- data/lib/gettext/mo.rb +2 -2
- data/lib/gettext/parser/activerecord.rb +19 -5
- data/lib/gettext/parser/erb.rb +6 -3
- data/lib/gettext/parser/glade.rb +5 -5
- data/lib/gettext/parser/ruby.rb +6 -6
- data/lib/gettext/poparser.rb +298 -297
- data/lib/gettext/rails.rb +122 -44
- data/lib/gettext/rgettext.rb +21 -8
- data/lib/gettext/rmsgfmt.rb +16 -8
- data/lib/gettext/rmsgmerge.rb +172 -50
- data/lib/gettext/string.rb +25 -3
- data/lib/gettext/textdomain.rb +89 -90
- data/lib/gettext/utils.rb +63 -3
- data/lib/gettext/version.rb +2 -2
- data/lib/locale_system.so +0 -0
- data/po/cs/rails.po +28 -28
- data/po/cs/rgettext.po +14 -14
- data/po/de/rails.po +29 -26
- data/po/de/rgettext.po +24 -17
- data/po/el/rails.po +26 -26
- data/po/el/rgettext.po +18 -15
- data/po/es/rails.po +26 -26
- data/po/es/rgettext.po +16 -16
- data/po/fr/rails.po +27 -27
- data/po/fr/rgettext.po +14 -14
- data/po/it/rgettext.po +14 -14
- data/po/ja/rails.po +24 -24
- data/po/ja/rgettext.po +14 -14
- data/po/ko/rails.po +24 -24
- data/po/ko/rgettext.po +17 -18
- data/po/nl/rails.po +27 -27
- data/po/nl/rgettext.po +18 -18
- data/po/pt_BR/rails.po +26 -26
- data/po/pt_BR/rgettext.po +14 -14
- data/po/rails.pot +26 -26
- data/po/rgettext.pot +14 -14
- data/po/sv/rgettext.po +14 -14
- data/post-setup.rb +8 -3
- data/pre-setup.rb +14 -1
- data/samples/cgi/http.rb +2 -1
- data/samples/makemo.rb +1 -1
- data/samples/rails/app/models/article.rb +15 -1
- data/samples/rails/config/database.yml +1 -1
- data/samples/rails/locale/cs/LC_MESSAGES/blog.mo +0 -0
- data/samples/rails/locale/cs/LC_MESSAGES/gettext_plugin.mo +0 -0
- data/samples/rails/locale/de/LC_MESSAGES/blog.mo +0 -0
- data/samples/rails/locale/de/LC_MESSAGES/gettext_plugin.mo +0 -0
- data/samples/rails/locale/el/LC_MESSAGES/blog.mo +0 -0
- data/samples/rails/locale/el/LC_MESSAGES/gettext_plugin.mo +0 -0
- data/samples/rails/locale/en/LC_MESSAGES/blog.mo +0 -0
- data/samples/rails/locale/es/LC_MESSAGES/blog.mo +0 -0
- data/samples/rails/locale/es/LC_MESSAGES/gettext_plugin.mo +0 -0
- data/samples/rails/locale/fr/LC_MESSAGES/blog.mo +0 -0
- data/samples/rails/locale/fr/LC_MESSAGES/gettext_plugin.mo +0 -0
- data/samples/rails/locale/ja/LC_MESSAGES/blog.mo +0 -0
- data/samples/rails/locale/ja/LC_MESSAGES/gettext_plugin.mo +0 -0
- data/samples/rails/locale/ko/LC_MESSAGES/blog.mo +0 -0
- data/samples/rails/locale/ko/LC_MESSAGES/gettext_plugin.mo +0 -0
- data/samples/rails/locale/nl/LC_MESSAGES/blog.mo +0 -0
- data/samples/rails/locale/nl/LC_MESSAGES/gettext_plugin.mo +0 -0
- data/samples/rails/locale/pt_BR/LC_MESSAGES/blog.mo +0 -0
- data/samples/rails/locale/pt_BR/LC_MESSAGES/gettext_plugin.mo +0 -0
- data/samples/rails/po/blog.pot +1 -1
- data/samples/rails/po/cs/blog.po +1 -2
- data/samples/rails/po/cs/gettext_plugin.po +1 -1
- data/samples/rails/po/de/blog.po +1 -2
- data/samples/rails/po/de/gettext_plugin.po +1 -1
- data/samples/rails/po/el/blog.po +1 -1
- data/samples/rails/po/el/gettext_plugin.po +1 -1
- data/samples/rails/po/en/blog.po +1 -1
- data/samples/rails/po/es/blog.po +1 -2
- data/samples/rails/po/es/gettext_plugin.po +1 -1
- data/samples/rails/po/fr/blog.po +1 -1
- data/samples/rails/po/fr/gettext_plugin.po +1 -1
- data/samples/rails/po/gettext_plugin.pot +1 -1
- data/samples/rails/po/ja/blog.po +2 -1
- data/samples/rails/po/ja/gettext_plugin.po +1 -1
- data/samples/rails/po/ko/blog.po +1 -2
- data/samples/rails/po/ko/gettext_plugin.po +1 -1
- data/samples/rails/po/nl/blog.po +1 -3
- data/samples/rails/po/nl/gettext_plugin.po +1 -1
- data/samples/rails/po/pt_BR/blog.po +1 -1
- data/samples/rails/po/pt_BR/gettext_plugin.po +1 -1
- data/setup.rb +799 -574
- data/src/poparser.ry +6 -5
- data/test/gettext_runner.rb +3 -1
- data/test/gettext_test.rb +40 -24
- data/test/gettext_test_cgi.rb +60 -6
- data/test/gettext_test_locale.rb +136 -0
- data/test/gettext_test_parser.rb +12 -12
- data/test/locale/la/LC_MESSAGES/plural_error.mo +0 -0
- data/test/po/la/plural_error.po +21 -0
- data/test/test.bat +2 -0
- data/test/test.sh +2 -4
- data/test/test_rubyparser_n_.rb +64 -0
- metadata +24 -21
- data/ext/gettext/gettext/MANIFEST +0 -3
- data/ext/gettext/gettext/_locale-i386-mswin32.def +0 -2
- data/ext/gettext/gettext/_locale.exp +0 -0
- data/ext/gettext/gettext/_locale.lib +0 -0
- data/ext/gettext/gettext/_locale.obj +0 -0
- data/ext/gettext/gettext/_locale.so +0 -0
- data/ext/gettext/gettext/extconf.rb +0 -20
- data/ext/gettext/gettext/mkmf.log +0 -16
- data/lib/_locale.so +0 -0
- data/lib/gettext/locale_default.rb +0 -35
- data/po/it/messages.mo +0 -0
- data/samples/cgi/po/it/messages.mo +0 -0
data/lib/gettext/rails.rb
CHANGED
@@ -1,28 +1,53 @@
|
|
1
1
|
=begin
|
2
2
|
gettext/rails.rb - GetText for "Ruby on Rails"
|
3
3
|
|
4
|
-
Copyright (C) 2005 Masao Mutoh
|
4
|
+
Copyright (C) 2005,2006 Masao Mutoh
|
5
5
|
|
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.
|
9
|
+
$Id: rails.rb,v 1.17 2006/02/23 14:53:59 mutoh Exp $
|
10
10
|
=end
|
11
11
|
|
12
|
-
require 'gettext'
|
13
12
|
require 'gettext/cgi'
|
14
13
|
require 'active_record'
|
15
14
|
require 'active_support'
|
16
15
|
|
17
|
-
module GetText
|
16
|
+
module GetText #:nodoc:
|
17
|
+
# = GetText for Ruby on Rails
|
18
|
+
# GetText::Rails supports Ruby on Rails.
|
19
|
+
# You add only 2 lines in your controller, all of the controller/view/models are
|
20
|
+
# targeted the textdomain.
|
21
|
+
#
|
22
|
+
# See <Ruby-GetText-Package HOWTO for Ruby on Rails (http://www.yotabanana.com/hiki/ruby-gettext-howto-rails.html>.
|
18
23
|
module Rails
|
19
24
|
include GetText
|
25
|
+
extend GetText
|
20
26
|
|
21
|
-
Rails = ::Rails
|
27
|
+
Rails = ::Rails #:nodoc:
|
22
28
|
|
23
|
-
alias :_bindtextdomain :bindtextdomain
|
29
|
+
alias :_bindtextdomain :bindtextdomain #:nodoc:
|
24
30
|
|
31
|
+
# Bind a textdomain(#{path}/#{locale}/LC_MESSAGES/#{domainname}.mo) to your program.
|
32
|
+
# Notes the textdomain scope becomes all of the controllers/views/models in your app.
|
33
|
+
# This is different from normal GetText.bindtextomain.
|
34
|
+
#
|
35
|
+
# Usually, you don't call this directly in your rails application.
|
36
|
+
# Call init_gettext in ActionController::Base instead.
|
37
|
+
#
|
38
|
+
# On the other hand, you need to call this in helpers/plugins.
|
39
|
+
#
|
40
|
+
# * domainname: the textdomain name.
|
41
|
+
# * locale: the locale value such as "ja-JP". When the value is nil,
|
42
|
+
# * charset: the charset. Generally UTF-8 is recommanded.
|
43
|
+
# * with_model: false if you want to ignore model support.
|
44
|
+
#
|
45
|
+
# locale is searched the order by this value > "lang" value of QUERY_STRING >
|
46
|
+
# "lang" value of Cookie > HTTP_ACCEPT_LANGUAGE value > Default locale(en).
|
47
|
+
# And the charset is set order by "the argument of bindtextdomain" > HTTP_ACCEPT_CHARSET > Default charset(UTF-8).
|
48
|
+
#
|
25
49
|
def bindtextdomain(domainname, _cgi = nil, locale = nil, charset = nil, with_model = true)
|
50
|
+
Locale.clear # IMPORTANT! current locale should be nil once(default is used).
|
26
51
|
set_cgi(_cgi) if _cgi
|
27
52
|
@gettext_container_domainname = domainname
|
28
53
|
path = File.join(RAILS_ROOT, "locale")
|
@@ -31,20 +56,20 @@ module GetText
|
|
31
56
|
bindtextdomain_to(ActiveRecord::Base, domainname) if with_model
|
32
57
|
end
|
33
58
|
|
34
|
-
def bindtextdomain_to(klass, domainname)
|
59
|
+
def bindtextdomain_to(klass, domainname) #:nodoc:
|
35
60
|
klass.class_eval {
|
36
61
|
textdomain(domainname)
|
37
62
|
|
38
|
-
def self.human_attribute_name(attribute_key_name)
|
63
|
+
def self.human_attribute_name(attribute_key_name) #:nodoc:
|
39
64
|
s_("#{self}|#{attribute_key_name.humanize}")
|
40
65
|
end
|
41
|
-
def self.human_attribute_table_name_for_error(table_name)
|
66
|
+
def self.human_attribute_table_name_for_error(table_name) #:nodoc:
|
42
67
|
_(table_name.gsub(/_/, " "))
|
43
68
|
end
|
44
69
|
}
|
45
70
|
end
|
46
71
|
|
47
|
-
def callersrc
|
72
|
+
def callersrc #:nodoc:
|
48
73
|
@gettext_container_domainname = nil unless defined? @gettext_container_domainname
|
49
74
|
@gettext_container_domainname
|
50
75
|
end
|
@@ -52,7 +77,7 @@ module GetText
|
|
52
77
|
end
|
53
78
|
|
54
79
|
|
55
|
-
module ActionController
|
80
|
+
module ActionController #:nodoc:
|
56
81
|
class Base
|
57
82
|
helper GetText::Rails
|
58
83
|
include GetText::Rails
|
@@ -62,13 +87,22 @@ module ActionController
|
|
62
87
|
@@gettext_content_type = nil
|
63
88
|
|
64
89
|
prepend_before_filter :init_gettext
|
65
|
-
|
66
|
-
|
90
|
+
after_filter :init_content_type
|
91
|
+
|
92
|
+
def init_gettext_main #:nodoc:
|
67
93
|
bindtextdomain(@@gettext_domainname, request.cgi) #You need to pass CGI object first.
|
68
|
-
@headers["Content-Type"] = "#{@@gettext_content_type}; charset=#{GetText.output_charset}"
|
69
94
|
end
|
70
95
|
|
71
|
-
def
|
96
|
+
def init_content_type #:nodoc:
|
97
|
+
if @headers["Content-Type"] and /javascript/ =~ @headers["Content-Type"]
|
98
|
+
@headers["Content-Type"] = "text/javascript; charset=#{GetText.output_charset}"
|
99
|
+
elsif ! @headers["Content-Type"]
|
100
|
+
@headers["Content-Type"] = "#{@@gettext_content_type}; charset=#{GetText.output_charset}"
|
101
|
+
end
|
102
|
+
end
|
103
|
+
|
104
|
+
|
105
|
+
def init_gettext # :nodoc:
|
72
106
|
init_gettext_main if @@gettext_domainname
|
73
107
|
ActiveRecord::Errors.class_eval{
|
74
108
|
# You need to call bindtextdomain here because ActiveRecord::Errors doesn't know
|
@@ -77,6 +111,21 @@ module ActionController
|
|
77
111
|
}
|
78
112
|
end
|
79
113
|
|
114
|
+
# Bind a 'textdomain' to all of the controllers/views/models. Call this instead of GetText.bindtextdomain.
|
115
|
+
# * textdomain: the textdomain
|
116
|
+
# * charset: the output charset. Default is "UTF-8"
|
117
|
+
# * content_type: the content type. Default is "text/html"
|
118
|
+
#
|
119
|
+
# If you want to separate the textdomain each controllers, you need to call this function in the each controllers.
|
120
|
+
#
|
121
|
+
# app/controller/blog_controller.rb:
|
122
|
+
# require 'gettext/rails'
|
123
|
+
#
|
124
|
+
# class BlogController < ApplicationController
|
125
|
+
# init_gettext "blog"
|
126
|
+
# :
|
127
|
+
# :
|
128
|
+
# end
|
80
129
|
def self.init_gettext(domainname, charset = "UTF-8", content_type = "text/html")
|
81
130
|
GetText.output_charset = charset
|
82
131
|
@@gettext_domainname = domainname
|
@@ -84,7 +133,7 @@ module ActionController
|
|
84
133
|
end
|
85
134
|
end
|
86
135
|
|
87
|
-
class TestRequest < AbstractRequest
|
136
|
+
class TestRequest < AbstractRequest #:nodoc:
|
88
137
|
@cgi = nil
|
89
138
|
def cgi
|
90
139
|
@cgi = CGI.new unless @cgi
|
@@ -93,18 +142,38 @@ module ActionController
|
|
93
142
|
end
|
94
143
|
end
|
95
144
|
|
96
|
-
module ActiveRecord
|
145
|
+
module ActiveRecord #:nodoc:
|
97
146
|
class Base
|
98
|
-
include GetText::Rails
|
99
|
-
extend GetText::Rails
|
100
|
-
|
147
|
+
include GetText::Rails # Important
|
148
|
+
extend GetText::Rails # Important
|
149
|
+
|
150
|
+
@@error_message_title = nil
|
151
|
+
@@error_message_explanation = nil
|
152
|
+
|
153
|
+
# Sets a your own title of error message dialog.
|
154
|
+
def self.set_error_message_title(single_msg, plural_msg)
|
155
|
+
@@error_message_title = [single_msg, plural_msg]
|
156
|
+
end
|
157
|
+
|
158
|
+
# Sets a your own explanation of the error message dialog.
|
159
|
+
def self.set_error_message_explanation(single_msg, plural_msg)
|
160
|
+
@@error_message_explanation = [single_msg, plural_msg]
|
161
|
+
end
|
101
162
|
|
102
|
-
|
163
|
+
def error_message_title #:nodoc:
|
164
|
+
@@error_message_title
|
165
|
+
end
|
166
|
+
def error_message_explanation #:nodoc:
|
167
|
+
@@error_message_explanation
|
168
|
+
end
|
169
|
+
end
|
170
|
+
|
171
|
+
class Errors #:nodoc:
|
103
172
|
include GetText
|
104
173
|
extend GetText
|
105
174
|
|
106
|
-
RE_FIELD_NAME = /%\{fn\}/
|
107
|
-
|
175
|
+
RE_FIELD_NAME = /%\{fn\}/ #:nodoc:
|
176
|
+
|
108
177
|
# You need to define this here, because this values will be updated by application.
|
109
178
|
default_error_messages.update(
|
110
179
|
:inclusion => N_("%{fn} is not included in the list"),
|
@@ -120,22 +189,20 @@ module ActiveRecord
|
|
120
189
|
:taken => N_("%{fn} has already been taken"),
|
121
190
|
:not_a_number => N_("%{fn} is not a number")
|
122
191
|
)
|
123
|
-
|
124
192
|
@@default_error_messages_d = {
|
125
193
|
:too_long => default_error_messages[:too_long],
|
126
194
|
:too_short => default_error_messages[:too_short],
|
127
195
|
:wrong_length => default_error_messages[:wrong_length]
|
128
196
|
}
|
129
197
|
|
130
|
-
def self.convert_validates_messages_of_validates_length_of
|
198
|
+
def self.convert_validates_messages_of_validates_length_of #:nodoc:
|
131
199
|
default_error_messages[:too_long] = _(@@default_error_messages_d[:too_long])
|
132
200
|
default_error_messages[:too_short] = _(@@default_error_messages_d[:too_short])
|
133
201
|
default_error_messages[:wrong_length] = _(@@default_error_messages_d[:wrong_length])
|
134
202
|
end
|
135
203
|
|
136
|
-
def full_messages
|
204
|
+
def full_messages #:nodoc:
|
137
205
|
full_messages = []
|
138
|
-
|
139
206
|
@errors.each_key do |attr|
|
140
207
|
@errors[attr].each do |msg|
|
141
208
|
next if msg.nil?
|
@@ -152,8 +219,8 @@ module ActiveRecord
|
|
152
219
|
end
|
153
220
|
end
|
154
221
|
|
155
|
-
module Validations
|
156
|
-
module ClassMethods
|
222
|
+
module Validations #:nodoc:
|
223
|
+
module ClassMethods #:nodoc:
|
157
224
|
alias :_validates_length_of :validates_length_of
|
158
225
|
def validates_length_of(*attrs)
|
159
226
|
ActiveRecord::Errors.convert_validates_messages_of_validates_length_of
|
@@ -164,33 +231,44 @@ module ActiveRecord
|
|
164
231
|
end
|
165
232
|
|
166
233
|
|
167
|
-
module ActionView
|
168
|
-
module Helpers
|
169
|
-
module ActiveRecordHelper
|
234
|
+
module ActionView #:nodoc:
|
235
|
+
module Helpers #:nodoc:
|
236
|
+
module ActiveRecordHelper #:nodoc: all
|
170
237
|
module L10n
|
171
238
|
# Separate namespace for textdomain
|
172
239
|
include GetText
|
173
240
|
extend GetText
|
241
|
+
|
242
|
+
@error_message_title = Nn_("%{num} error prohibited this %{record} from being saved",
|
243
|
+
"%{num} errors prohibited this %{record} from being saved")
|
244
|
+
@error_message_explanation = Nn_("There was a problem with the following field:",
|
245
|
+
"There were problems with the following fields:")
|
246
|
+
|
174
247
|
module_function
|
248
|
+
def render_error_message(object, klass, record, count, options)
|
249
|
+
message_title = object.error_message_title || @error_message_title
|
250
|
+
message_explanation = object.error_message_explanation || @error_message_explanation
|
251
|
+
|
252
|
+
klass.content_tag("div",
|
253
|
+
klass.content_tag(
|
254
|
+
options[:header_tag] || "h2",
|
255
|
+
n_(message_title, count) % {:num => count, :record => record}
|
256
|
+
) +
|
257
|
+
klass.content_tag("p", n_(message_explanation, count) % {:num => count}) +
|
258
|
+
klass.content_tag("ul", object.errors.full_messages.collect { |msg| klass.content_tag("li", msg) }),
|
259
|
+
"id" => options[:id] || "errorExplanation", "class" => options[:class] || "errorExplanation"
|
260
|
+
)
|
261
|
+
end
|
262
|
+
|
175
263
|
def error_messages_for(object, object_name, klass, options = {})
|
176
264
|
textdomain("rails")
|
177
265
|
|
178
266
|
options = options.symbolize_keys
|
179
|
-
|
267
|
+
|
180
268
|
unless object.errors.empty?
|
181
269
|
count = object.errors.count
|
182
270
|
record = ActiveRecord::Base.human_attribute_table_name_for_error(object_name)
|
183
|
-
|
184
|
-
klass.content_tag(
|
185
|
-
options[:header_tag] || "h2",
|
186
|
-
n_("%{num} error prohibited this %{record} from being saved",
|
187
|
-
"%{num} errors prohibited this %{record} from being saved", count) %
|
188
|
-
{:num => count, :record => record}) +
|
189
|
-
klass.content_tag("p", n_("There were problems with the following field:",
|
190
|
-
"There were problems with the following fields:", count)) +
|
191
|
-
klass.content_tag("ul", object.errors.full_messages.collect { |msg| klass.content_tag("li", msg) }),
|
192
|
-
"id" => options[:id] || "errorExplanation", "class" => options[:class] || "errorExplanation"
|
193
|
-
)
|
271
|
+
render_error_message(object, klass, record, count, options)
|
194
272
|
end
|
195
273
|
end
|
196
274
|
end
|
data/lib/gettext/rgettext.rb
CHANGED
@@ -17,14 +17,14 @@ require 'gettext'
|
|
17
17
|
|
18
18
|
module GetText
|
19
19
|
|
20
|
-
module RGetText
|
20
|
+
module RGetText # :nodoc:
|
21
21
|
extend GetText
|
22
22
|
|
23
23
|
bindtextdomain("rgettext")
|
24
24
|
|
25
25
|
# constant values
|
26
26
|
VERSION = GetText::VERSION
|
27
|
-
DATE = %w($Date:
|
27
|
+
DATE = %w($Date: 2006/02/22 16:42:41 $)[1]
|
28
28
|
MAX_LINE_LEN = 70
|
29
29
|
|
30
30
|
@ex_parsers = []
|
@@ -46,7 +46,7 @@ module GetText
|
|
46
46
|
|
47
47
|
module_function
|
48
48
|
|
49
|
-
def generate_pot_header
|
49
|
+
def generate_pot_header # :nodoc:
|
50
50
|
time = Time.now.strftime("%Y-%m-%d %H:%M")
|
51
51
|
off = Time.now.utc_offset
|
52
52
|
sign = off <= 0 ? '-' : '+'
|
@@ -71,7 +71,7 @@ msgstr ""
|
|
71
71
|
"Plural-Forms: nplurals=INTEGER; plural=EXPRESSION;\\n"]
|
72
72
|
end
|
73
73
|
|
74
|
-
def generate_pot(ary)
|
74
|
+
def generate_pot(ary) # :nodoc:
|
75
75
|
str = ""
|
76
76
|
result = Array.new
|
77
77
|
ary.each do |key|
|
@@ -102,7 +102,7 @@ msgstr ""
|
|
102
102
|
str
|
103
103
|
end
|
104
104
|
|
105
|
-
def parse(files)
|
105
|
+
def parse(files) # :nodoc:
|
106
106
|
ary = []
|
107
107
|
files.each do |file|
|
108
108
|
begin
|
@@ -121,7 +121,7 @@ msgstr ""
|
|
121
121
|
ary
|
122
122
|
end
|
123
123
|
|
124
|
-
def check_options
|
124
|
+
def check_options # :nodoc:
|
125
125
|
output = STDOUT
|
126
126
|
|
127
127
|
opts = OptionParser.new
|
@@ -155,7 +155,7 @@ msgstr ""
|
|
155
155
|
[ARGV, output]
|
156
156
|
end
|
157
157
|
|
158
|
-
def run(targetfiles = nil, out = STDOUT)
|
158
|
+
def run(targetfiles = nil, out = STDOUT) # :nodoc:
|
159
159
|
if targetfiles.is_a? String
|
160
160
|
targetfiles = [targetfiles]
|
161
161
|
elsif ! targetfiles
|
@@ -175,13 +175,26 @@ msgstr ""
|
|
175
175
|
out.puts generate_pot_header
|
176
176
|
out.puts generate_pot(parse(targetfiles))
|
177
177
|
end
|
178
|
-
|
178
|
+
self
|
179
179
|
end
|
180
180
|
end
|
181
181
|
|
182
182
|
module_function
|
183
|
+
# Creates a po-file from targetfiles(ruby-script-files, ActiveRecord, .rhtml files, glade-2 XML files),
|
184
|
+
# then output the result to out. If no parameter is set, it behaves same as command line tools(rgettet).
|
185
|
+
#
|
186
|
+
# This function is a part of GetText.create_pofiles.
|
187
|
+
# Usually you don't need to call this function directly.
|
188
|
+
#
|
189
|
+
# *Note* for ActiveRecord, you need to run your database server and configure the config/database.xml
|
190
|
+
# correctly before execute this function.
|
191
|
+
#
|
192
|
+
# * targetfiles: An Array of po-files or nil.
|
193
|
+
# * out: output IO or output path.
|
194
|
+
# * Returns: self
|
183
195
|
def rgettext(targetfiles = nil, out = STDOUT)
|
184
196
|
RGetText.run(targetfiles, out)
|
197
|
+
self
|
185
198
|
end
|
186
199
|
end
|
187
200
|
|
data/lib/gettext/rmsgfmt.rb
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
=begin
|
2
2
|
rmsgfmt.rb - Generate a .mo
|
3
3
|
|
4
|
-
Copyright (C) 2003-
|
4
|
+
Copyright (C) 2003-2006 Masao Mutoh
|
5
5
|
|
6
6
|
You may redistribute it and/or modify it under the same
|
7
7
|
license terms as Ruby.
|
@@ -15,14 +15,14 @@ require 'gettext/poparser'
|
|
15
15
|
module GetText
|
16
16
|
GetText.bindtextdomain("rgettext")
|
17
17
|
|
18
|
-
module RMsgfmt
|
19
|
-
extend GetText
|
18
|
+
module RMsgfmt #:nodoc:
|
19
|
+
extend GetText
|
20
20
|
|
21
|
-
VERSION = GetText::VERSION
|
22
|
-
DATE = %w($Date:
|
21
|
+
VERSION = GetText::VERSION
|
22
|
+
DATE = %w($Date: 2006/02/22 16:42:41 $)[1] # :nodoc:
|
23
23
|
|
24
24
|
module_function
|
25
|
-
def run(targetfile = nil, output_path = nil)
|
25
|
+
def run(targetfile = nil, output_path = nil) # :nodoc:
|
26
26
|
unless targetfile
|
27
27
|
targetfile, output_path = check_options
|
28
28
|
end
|
@@ -39,7 +39,7 @@ module GetText
|
|
39
39
|
data.save_to_file(output_path)
|
40
40
|
end
|
41
41
|
|
42
|
-
def check_options
|
42
|
+
def check_options # :nodoc:
|
43
43
|
output = nil
|
44
44
|
|
45
45
|
opts = OptionParser.new
|
@@ -69,14 +69,21 @@ module GetText
|
|
69
69
|
end
|
70
70
|
|
71
71
|
module_function
|
72
|
+
# Creates a mo-file from a targetfile(po-file), then output the result to out.
|
73
|
+
# If no parameter is set, it behaves same as command line tools(rmsgfmt).
|
74
|
+
# * targetfile: An Array of po-files or nil.
|
75
|
+
# * output_path: output path.
|
76
|
+
# * Returns: the MOFile object.
|
72
77
|
def rmsgfmt(targetfile = nil, output_path = nil)
|
73
78
|
RMsgfmt.run(targetfile, output_path)
|
74
79
|
end
|
75
80
|
|
81
|
+
# Move to gettext/utils.rb. This will be removed in the feature.
|
82
|
+
# This remains for backward compatibility. Use gettext/utils.rb instead.
|
76
83
|
def create_mofiles(verbose = false,
|
77
84
|
podir = "./po", targetdir = "./data/locale",
|
78
85
|
targetpath_rule = "%s/LC_MESSAGES")
|
79
|
-
|
86
|
+
$stderr.puts "This function will be moved to utils.rb. So requires 'utils' first, please."
|
80
87
|
modir = File.join(targetdir, targetpath_rule)
|
81
88
|
Dir.glob(File.join(podir, "*/*.po")) do |file|
|
82
89
|
lang, basename = /\/([^\/]+?)\/(.*)\.po/.match(file[podir.size..-1]).to_a[1,2]
|
@@ -87,6 +94,7 @@ module GetText
|
|
87
94
|
$stderr.puts %Q[#{file} -> #{File.join(outdir, "#{basename}.mo")}]
|
88
95
|
end
|
89
96
|
end
|
97
|
+
self
|
90
98
|
end
|
91
99
|
end
|
92
100
|
|
data/lib/gettext/rmsgmerge.rb
CHANGED
@@ -1,8 +1,8 @@
|
|
1
1
|
=begin
|
2
2
|
rmsgmerge.rb - Merge old .po to new .po
|
3
3
|
|
4
|
-
Copyright (C) 2005 Masao Mutoh
|
5
|
-
Copyright (C) 2005 speakillof
|
4
|
+
Copyright (C) 2005,2006 Masao Mutoh
|
5
|
+
Copyright (C) 2005,2006 speakillof
|
6
6
|
|
7
7
|
You may redistribute it and/or modify it under the same
|
8
8
|
license terms as Ruby.
|
@@ -14,9 +14,9 @@ require 'gettext/poparser'
|
|
14
14
|
|
15
15
|
module GetText
|
16
16
|
|
17
|
-
module RMsgMerge
|
17
|
+
module RMsgMerge #:nodoc:
|
18
18
|
|
19
|
-
class PoData
|
19
|
+
class PoData #:nodoc:
|
20
20
|
|
21
21
|
attr_reader :msgids
|
22
22
|
|
@@ -108,7 +108,10 @@ module GetText
|
|
108
108
|
|
109
109
|
def generate_po_entry(msgid)
|
110
110
|
str = ""
|
111
|
-
str << @msgid2comment[msgid]
|
111
|
+
str << @msgid2comment[msgid]
|
112
|
+
if str[-1] != "\n"[0]
|
113
|
+
str << "\n"
|
114
|
+
end
|
112
115
|
|
113
116
|
id = msgid.gsub(/"/, '\"').gsub(/\r/, '')
|
114
117
|
msgstr = @msgid2msgstr[msgid].gsub(/"/, '\"').gsub(/\r/, '')
|
@@ -134,12 +137,12 @@ module GetText
|
|
134
137
|
|
135
138
|
def __conv(str)
|
136
139
|
s = ''
|
137
|
-
|
140
|
+
|
138
141
|
if str.count("\n") > 1
|
139
142
|
s << '""' << "\n"
|
140
143
|
s << str.gsub(/^(.*)$/, '"\1\n"')
|
141
144
|
else
|
142
|
-
s << str.
|
145
|
+
s << '"' << str.sub("\n", "\\n") << '"'
|
143
146
|
end
|
144
147
|
|
145
148
|
s.rstrip
|
@@ -147,20 +150,22 @@ module GetText
|
|
147
150
|
|
148
151
|
end
|
149
152
|
|
150
|
-
class
|
153
|
+
class Merger #:nodoc:
|
151
154
|
|
152
|
-
# From gettext source.
|
155
|
+
# From GNU gettext source.
|
153
156
|
#
|
154
157
|
# Merge the reference with the definition: take the #. and
|
155
158
|
# #: comments from the reference, take the # comments from
|
156
159
|
# the definition, take the msgstr from the definition. Add
|
157
160
|
# this merged entry to the output message list.
|
158
|
-
|
161
|
+
DOT_COMMENT_RE = /\A#\./
|
162
|
+
SEMICOLON_COMMENT_RE = /\A#\:/
|
163
|
+
FUZZY_RE = /\A#\,/
|
164
|
+
NOT_SPECIAL_COMMENT_RE = /\A#([^:.,]|\z)/
|
159
165
|
|
160
166
|
CRLF_RE = /\r?\n/
|
161
|
-
|
162
|
-
|
163
|
-
end
|
167
|
+
POT_DATE_EXTRACT_RE = /POT-Creation-Date:\s*(.*)?\s*$/
|
168
|
+
POT_DATE_RE = /POT-Creation-Date:.*?$/
|
164
169
|
|
165
170
|
def merge(definition, reference)
|
166
171
|
# deep copy
|
@@ -168,7 +173,7 @@ module GetText
|
|
168
173
|
|
169
174
|
used = []
|
170
175
|
merge_header(result, definition)
|
171
|
-
|
176
|
+
|
172
177
|
result.each_msgid do |msgid|
|
173
178
|
if definition.msgid?(msgid)
|
174
179
|
used << msgid
|
@@ -176,11 +181,11 @@ module GetText
|
|
176
181
|
elsif other_msgid = definition.search_msgid_fuzzy(msgid, used)
|
177
182
|
used << other_msgid
|
178
183
|
merge_fuzzy_message(msgid, result, other_msgid, definition)
|
184
|
+
elsif msgid.index("\000") and ( reference.msgstr(msgid).gsub("\000", '') == '' )
|
185
|
+
# plural
|
186
|
+
result[msgid] = "\000" * definition.nplural
|
179
187
|
else
|
180
|
-
|
181
|
-
#plural
|
182
|
-
result[msgid] = "\000" * definition.nplural
|
183
|
-
end
|
188
|
+
change_reference_comment(msgid, result)
|
184
189
|
end
|
185
190
|
end
|
186
191
|
|
@@ -191,7 +196,7 @@ module GetText
|
|
191
196
|
definition.each_msgid do |msgid|
|
192
197
|
unless used.include?(msgid)
|
193
198
|
last_comment << "\n"
|
194
|
-
last_comment << definition.generate_po_entry(msgid).strip.gsub(/^/, '
|
199
|
+
last_comment << definition.generate_po_entry(msgid).strip.gsub(/^/, '#. ')
|
195
200
|
last_comment << "\n"
|
196
201
|
end
|
197
202
|
end
|
@@ -237,23 +242,91 @@ module GetText
|
|
237
242
|
end
|
238
243
|
|
239
244
|
def merge_comment(msgid, target, def_msgid, definition)
|
240
|
-
|
245
|
+
ref_comment = target.comment(msgid)
|
241
246
|
def_comment = definition.comment(def_msgid)
|
242
|
-
|
247
|
+
|
248
|
+
normal_comment = []
|
249
|
+
dot_comment = []
|
250
|
+
semi_comment = []
|
251
|
+
is_fuzzy = false
|
243
252
|
|
244
253
|
def_comment.split(CRLF_RE).each do |l|
|
245
|
-
|
246
|
-
|
254
|
+
if NOT_SPECIAL_COMMENT_RE =~ l
|
255
|
+
normal_comment << l
|
247
256
|
end
|
248
257
|
end
|
249
258
|
|
250
|
-
|
251
|
-
if
|
252
|
-
|
259
|
+
ref_comment.split(CRLF_RE).each do |l|
|
260
|
+
if DOT_COMMENT_RE =~ l
|
261
|
+
dot_comment << l
|
262
|
+
elsif SEMICOLON_COMMENT_RE =~ l
|
263
|
+
semi_comment << l
|
264
|
+
elsif FUZZY_RE =~ l
|
265
|
+
is_fuzzy = true
|
266
|
+
end
|
267
|
+
end
|
268
|
+
|
269
|
+
str = format_comment(normal_comment, dot_comment, semi_comment, is_fuzzy)
|
270
|
+
target.set_comment(msgid, str)
|
271
|
+
end
|
272
|
+
|
273
|
+
def change_reference_comment(msgid, podata)
|
274
|
+
normal_comment = []
|
275
|
+
dot_comment = []
|
276
|
+
semi_comment = []
|
277
|
+
is_fuzzy = false
|
278
|
+
|
279
|
+
podata.comment(msgid).split(CRLF_RE).each do |l|
|
280
|
+
if DOT_COMMENT_RE =~ l
|
281
|
+
dot_comment << l
|
282
|
+
elsif SEMICOLON_COMMENT_RE =~ l
|
283
|
+
semi_comment << l
|
284
|
+
elsif FUZZY_RE =~ l
|
285
|
+
is_fuzzy = true
|
286
|
+
else
|
287
|
+
normal_comment << l
|
253
288
|
end
|
254
289
|
end
|
255
290
|
|
256
|
-
|
291
|
+
str = format_comment(normal_comment, dot_comment, semi_comment, is_fuzzy)
|
292
|
+
podata.set_comment(msgid, str)
|
293
|
+
end
|
294
|
+
|
295
|
+
def format_comment(normal_comment, dot_comment, semi_comment, is_fuzzy)
|
296
|
+
str = ''
|
297
|
+
|
298
|
+
str << normal_comment.join("\n").gsub(/^#(\s*)/){|sss|
|
299
|
+
if $1 == ""
|
300
|
+
"# "
|
301
|
+
else
|
302
|
+
sss
|
303
|
+
end
|
304
|
+
}
|
305
|
+
if normal_comment.size > 0
|
306
|
+
str << "\n"
|
307
|
+
end
|
308
|
+
|
309
|
+
str << dot_comment.join("\n").gsub(/^#.(\s*)/){|sss|
|
310
|
+
if $1 == ""
|
311
|
+
"#. "
|
312
|
+
else
|
313
|
+
sss
|
314
|
+
end
|
315
|
+
}
|
316
|
+
if dot_comment.size > 0
|
317
|
+
str << "\n"
|
318
|
+
end
|
319
|
+
|
320
|
+
str << semi_comment.join("\n").gsub(/^#:\s*/, "#: ")
|
321
|
+
if semi_comment.size > 0
|
322
|
+
str << "\n"
|
323
|
+
end
|
324
|
+
|
325
|
+
if is_fuzzy
|
326
|
+
str << "#, fuzzy\n"
|
327
|
+
end
|
328
|
+
|
329
|
+
str
|
257
330
|
end
|
258
331
|
|
259
332
|
def merge_header(target, definition)
|
@@ -261,9 +334,9 @@ module GetText
|
|
261
334
|
|
262
335
|
msg = target.msgstr('')
|
263
336
|
def_msg = definition.msgstr('')
|
264
|
-
if
|
337
|
+
if POT_DATE_EXTRACT_RE =~ msg
|
265
338
|
time = $1
|
266
|
-
def_msg = def_msg.sub(
|
339
|
+
def_msg = def_msg.sub(POT_DATE_RE, "POT-Creation-Date: #{time}")
|
267
340
|
end
|
268
341
|
|
269
342
|
target[''] = def_msg
|
@@ -275,11 +348,42 @@ module GetText
|
|
275
348
|
|
276
349
|
end
|
277
350
|
|
351
|
+
module GetText::RMsgMerge #:nodoc:
|
278
352
|
|
353
|
+
class Config #:nodoc:
|
354
|
+
|
355
|
+
attr_accessor :defpo, :refpot, :output, :fuzzy, :update
|
356
|
+
|
357
|
+
# update mode options
|
358
|
+
attr_accessor :backup, :suffix
|
359
|
+
|
360
|
+
=begin
|
361
|
+
The result is written back to def.po.
|
362
|
+
--backup=CONTROL make a backup of def.po
|
363
|
+
--suffix=SUFFIX override the usual backup suffix
|
364
|
+
The version control method may be selected via the --backup option or through
|
365
|
+
the VERSION_CONTROL environment variable. Here are the values:
|
366
|
+
none, off never make backups (even if --backup is given)
|
367
|
+
numbered, t make numbered backups
|
368
|
+
existing, nil numbered if numbered backups exist, simple otherwise
|
369
|
+
simple, never always make simple backups
|
370
|
+
The backup suffix is `~', unless set with --suffix or the SIMPLE_BACKUP_SUFFIX
|
371
|
+
environment variable.
|
372
|
+
=end
|
373
|
+
|
374
|
+
def initialize
|
375
|
+
@output = STDOUT
|
376
|
+
@fuzzy = nil
|
377
|
+
@update = nil
|
378
|
+
@backup = ENV["VERSION_CONTROL"]
|
379
|
+
@suffix= ENV["SIMPLE_BACKUP_SUFFIX"] || "~"
|
380
|
+
@input_dirs = ["."]
|
381
|
+
end
|
382
|
+
|
383
|
+
end
|
384
|
+
|
385
|
+
end
|
279
386
|
|
280
|
-
#
|
281
|
-
# commands
|
282
|
-
#
|
283
387
|
module GetText
|
284
388
|
|
285
389
|
module RMsgMerge
|
@@ -289,15 +393,14 @@ module GetText
|
|
289
393
|
|
290
394
|
# constant values
|
291
395
|
VERSION = GetText::VERSION
|
292
|
-
DATE = %w($Date:
|
396
|
+
DATE = %w($Date: 2006/02/23 14:53:59 $)[1]
|
293
397
|
|
294
398
|
module_function
|
295
399
|
|
296
|
-
def check_options
|
297
|
-
output = STDOUT
|
298
|
-
|
400
|
+
def check_options(config)
|
299
401
|
opts = OptionParser.new
|
300
402
|
opts.banner = _("Usage: %s def.po ref.pot [-o output.pot]") % $0
|
403
|
+
#opts.summary_width = 80
|
301
404
|
opts.separator("")
|
302
405
|
opts.separator(_("Merges two Uniforum style .po files together. The def.po file is an existing PO file with translations. The ref.pot file is the last created PO file with up-to-date source references. ref.pot is generally created by rgettext."))
|
303
406
|
opts.separator("")
|
@@ -305,13 +408,15 @@ module GetText
|
|
305
408
|
|
306
409
|
opts.on("-o", "--output=FILE", _("write output to specified file")) do |out|
|
307
410
|
unless FileTest.exist? out
|
308
|
-
output =
|
411
|
+
config.output = out
|
309
412
|
else
|
310
413
|
#$stderr.puts(_("File '%s' has already existed.") % out)
|
311
414
|
#exit 1
|
312
415
|
end
|
313
416
|
end
|
314
417
|
|
418
|
+
#opts.on("-F", "--fuzzy-matching")
|
419
|
+
|
315
420
|
opts.on_tail("--version", _("display version information and exit")) do
|
316
421
|
puts "#{$0} #{VERSION} (#{DATE})"
|
317
422
|
exit
|
@@ -324,27 +429,33 @@ module GetText
|
|
324
429
|
exit 1
|
325
430
|
end
|
326
431
|
|
327
|
-
|
432
|
+
config.defpo = ARGV[0]
|
433
|
+
config.refpot = ARGV[1]
|
328
434
|
end
|
329
435
|
|
330
436
|
def run(reference = nil, definition = nil, out = STDOUT)
|
331
|
-
|
332
|
-
|
333
|
-
|
437
|
+
config = GetText::RMsgMerge::Config.new
|
438
|
+
config.refpot = reference
|
439
|
+
config.defpo = definition
|
440
|
+
config.output = out
|
441
|
+
|
442
|
+
check_options(config)
|
334
443
|
|
335
|
-
if
|
444
|
+
if config.defpo.nil?
|
336
445
|
raise ArgumentError, _("definition po is not given.")
|
337
|
-
elsif
|
446
|
+
elsif config.refpot.nil?
|
338
447
|
raise ArgumentError, _("reference pot is not given.")
|
339
448
|
end
|
340
449
|
|
341
450
|
parser = PoParser.new
|
342
|
-
defstr = nil
|
343
|
-
|
344
|
-
defpo =
|
345
|
-
refpot =
|
346
|
-
|
347
|
-
|
451
|
+
defstr = nil
|
452
|
+
refstr = nil
|
453
|
+
File.open(config.defpo){|f| defstr = f.read}
|
454
|
+
File.open(config.refpot){|f| refstr = f.read}
|
455
|
+
defpo = parser.parse(defstr, PoData.new, false)
|
456
|
+
refpot = parser.parse(refstr, PoData.new, false)
|
457
|
+
|
458
|
+
m = Merger.new
|
348
459
|
result = m.merge(defpo, refpot)
|
349
460
|
pp result if $DEBUG
|
350
461
|
print result.generate_po if $DEBUG
|
@@ -360,16 +471,27 @@ module GetText
|
|
360
471
|
ensure
|
361
472
|
out.close
|
362
473
|
end
|
363
|
-
end
|
474
|
+
end
|
475
|
+
|
364
476
|
end
|
477
|
+
|
478
|
+
end
|
365
479
|
|
480
|
+
|
481
|
+
|
482
|
+
module GetText
|
483
|
+
|
366
484
|
module_function
|
485
|
+
|
486
|
+
# Experimental
|
367
487
|
def rmsgmerge(reference = nil, definition = nil, out = STDOUT)
|
368
488
|
RMsgMerge.run(reference, definition, out)
|
369
489
|
end
|
490
|
+
|
370
491
|
end
|
371
492
|
|
372
493
|
|
494
|
+
|
373
495
|
if $0 == __FILE__ then
|
374
496
|
require 'pp'
|
375
497
|
|