fair-gettext 2.0.0 → 2.0.1
Sign up to get free protection for your applications and to get access to all the features.
- data/gettext.gemspec +1 -1
- data/lib/gettext/tools.rb +31 -38
- data/lib/gettext/tools/rgettext.rb +5 -27
- metadata +2 -2
data/gettext.gemspec
CHANGED
data/lib/gettext/tools.rb
CHANGED
@@ -1,29 +1,29 @@
|
|
1
1
|
=begin
|
2
2
|
tools.rb - Utility functions
|
3
|
-
|
3
|
+
|
4
4
|
Copyright (C) 2005-2008 Masao Mutoh
|
5
|
-
|
5
|
+
|
6
6
|
You may redistribute it and/or modify it under the same
|
7
7
|
license terms as Ruby or LGPL.
|
8
8
|
=end
|
9
|
-
|
9
|
+
|
10
10
|
require 'rbconfig'
|
11
11
|
if /mingw|mswin|mswin32/ =~ RUBY_PLATFORM
|
12
12
|
ENV['PATH'] = %w(bin lib).collect{|dir|
|
13
13
|
"#{Config::CONFIG["prefix"]}\\lib\\GTK\\#{dir};"
|
14
14
|
}.join('') + ENV['PATH']
|
15
15
|
end
|
16
|
-
|
16
|
+
|
17
17
|
require 'gettext/tools/rgettext'
|
18
18
|
require 'gettext/tools/rmsgfmt'
|
19
19
|
require 'gettext/runtime/mofile'
|
20
20
|
require 'fileutils'
|
21
|
-
|
21
|
+
|
22
22
|
module GetText
|
23
23
|
bindtextdomain "rgettext"
|
24
|
-
|
24
|
+
|
25
25
|
BOM_UTF8 = [0xef, 0xbb, 0xbf].pack("c3")
|
26
|
-
|
26
|
+
|
27
27
|
# Currently, GNU msgmerge doesn't accept BOM.
|
28
28
|
# This mesthod remove the UTF-8 BOM from the po-file.
|
29
29
|
def remove_bom(path) #:nodoc:
|
@@ -33,7 +33,7 @@ module GetText
|
|
33
33
|
File.open(path, "w") {|f| f.write(data)}
|
34
34
|
end
|
35
35
|
end
|
36
|
-
|
36
|
+
|
37
37
|
# Merges two Uniforum style .po files together.
|
38
38
|
#
|
39
39
|
# *Note* This function requires "msgmerge" tool included in GNU GetText. So you need to install GNU GetText.
|
@@ -58,7 +58,7 @@ module GetText
|
|
58
58
|
verbose = options.delete(:verbose)
|
59
59
|
puts "msgmerge called" if verbose
|
60
60
|
$stderr.print defpo + " "
|
61
|
-
|
61
|
+
|
62
62
|
content = merge_po_files(defpo,refpo,options.delete(:msgmerge),verbose)
|
63
63
|
|
64
64
|
if content.empty?
|
@@ -76,7 +76,7 @@ module GetText
|
|
76
76
|
|
77
77
|
self
|
78
78
|
end
|
79
|
-
|
79
|
+
|
80
80
|
# Creates mo-files using #{po_root}/#{lang}/*.po an put them to
|
81
81
|
# #{targetdir}/#{targetdir_rule}/.
|
82
82
|
#
|
@@ -88,7 +88,7 @@ module GetText
|
|
88
88
|
# * mo_path_rule: the target directory for each mo-files.
|
89
89
|
def create_mofiles(options = {})
|
90
90
|
options = {:po_root => "./po"}.merge(options)
|
91
|
-
|
91
|
+
|
92
92
|
Dir.glob(File.join(options[:po_root], "*/*.po")) do |po_file|
|
93
93
|
mo_file = mo_file_from_po_file(po_file,options)
|
94
94
|
$stderr.print %Q[#{po_file} -> #{mo_file} ... ] if options[:verbose]
|
@@ -97,8 +97,8 @@ module GetText
|
|
97
97
|
$stderr.puts "Done." if options[:verbose]
|
98
98
|
end
|
99
99
|
end
|
100
|
-
|
101
|
-
|
100
|
+
|
101
|
+
|
102
102
|
# At first, this creates the #{po_root}/#{domainname}.pot file using GetText.rgettext.
|
103
103
|
# In the second step, this updates(merges) the #{po_root}/#{domainname}.pot and all of the
|
104
104
|
# #{po_root}/#{lang}/#{domainname}.po files under "po_root" using "msgmerge".
|
@@ -120,67 +120,60 @@ module GetText
|
|
120
120
|
# Example: GetText.update_pofiles("myapp", Dir.glob("lib/*.rb"), "myapp 1.0.0", :verbose => true)
|
121
121
|
def update_pofiles(textdomain, files, app_version, options = {})
|
122
122
|
puts options.inspect if options[:verbose]
|
123
|
-
|
124
|
-
#write found messages to tmp.pot
|
123
|
+
|
124
|
+
#write found messages to tmp.pot
|
125
125
|
temp_pot = "tmp.pot"
|
126
|
-
|
127
|
-
|
128
|
-
|
129
|
-
#merge tmp.pot and private_tmp.pot with existing pot
|
126
|
+
rgettext(files, temp_pot)
|
127
|
+
|
128
|
+
#merge tmp.pot and existing pot
|
130
129
|
po_root = options.delete(:po_root) || "po"
|
131
130
|
FileUtils.mkdir_p(po_root)
|
132
131
|
msgmerge("#{po_root}/#{textdomain}.pot", temp_pot, app_version, options.dup)
|
133
|
-
|
134
|
-
|
132
|
+
|
135
133
|
#update local po-files
|
136
134
|
only_one_language = options.delete(:lang)
|
137
135
|
if only_one_language
|
138
136
|
msgmerge("#{po_root}/#{only_one_language}/#{textdomain}.po", temp_pot, app_version, options.dup)
|
139
|
-
msgmerge("#{po_root}/#{only_one_language}/private_#{textdomain}.po", private_temp_pot, app_version, options.dup)
|
140
137
|
else
|
141
138
|
Dir.glob("#{po_root}/*/#{textdomain}.po") do |po_file|
|
142
139
|
msgmerge(po_file, temp_pot, app_version, options.dup)
|
143
140
|
end
|
144
|
-
Dir.glob("#{po_root}/*/private_#{textdomain}.po") do |po_file|
|
145
|
-
msgmerge(po_file, private_temp_pot, app_version, options.dup)
|
146
|
-
end
|
147
141
|
end
|
148
|
-
|
142
|
+
|
149
143
|
File.delete(temp_pot)
|
150
|
-
File.delete(private_temp_pot)
|
151
144
|
end
|
152
|
-
|
145
|
+
|
153
146
|
private
|
154
|
-
|
147
|
+
|
155
148
|
# Merge 2 po files, using msgmerge
|
156
149
|
def merge_po_files(po_a,po_b,msgmerge_options=[],verbose=false)
|
157
150
|
return File.read(po_b) unless FileTest.exist? po_a
|
158
|
-
|
151
|
+
|
159
152
|
cmd = ENV["MSGMERGE_PATH"] || "msgmerge"
|
160
153
|
ensure_command_exists(cmd)
|
161
|
-
|
154
|
+
|
162
155
|
remove_bom(po_a)
|
163
|
-
|
156
|
+
|
164
157
|
cmd_params = array_to_cli_options(msgmerge_options)
|
165
158
|
to_run = "#{cmd} #{cmd_params} #{po_a} #{po_b}"
|
166
159
|
puts "\nrunning #{to_run}" if verbose
|
167
160
|
`#{to_run}`
|
168
161
|
end
|
169
|
-
|
162
|
+
|
170
163
|
# convert an array of String/Symbol to cli options
|
171
164
|
def array_to_cli_options(array)
|
172
165
|
[*array].map do |o|
|
173
166
|
o.kind_of?(Symbol) ? "--#{o}".gsub('_','-') : o.to_s
|
174
167
|
end.join(' ')
|
175
168
|
end
|
176
|
-
|
169
|
+
|
177
170
|
def ensure_command_exists(cmd)
|
178
171
|
`#{cmd} --help`
|
179
172
|
unless $? && $?.success?
|
180
173
|
raise _("`%{cmd}' can not be found. \nInstall GNU Gettext then set PATH or MSGMERGE_PATH correctly.") % {:cmd => cmd}
|
181
174
|
end
|
182
175
|
end
|
183
|
-
|
176
|
+
|
184
177
|
# where lies the mo file for a given po_file
|
185
178
|
# generare directory unless it exists
|
186
179
|
def mo_file_from_po_file(po_file,options)
|
@@ -190,13 +183,13 @@ module GetText
|
|
190
183
|
}.merge(options)
|
191
184
|
|
192
185
|
lang, textdomain = %r[/([^/]+?)/(.*)\.po].match(po_file[options[:po_root].size..-1]).to_a[1,2]
|
193
|
-
|
186
|
+
|
194
187
|
mo_dir_rule = File.join(options[:mo_root], options[:mo_path_rule])
|
195
188
|
mo_dir = mo_dir_rule % {:lang => lang}
|
196
189
|
File.join(mo_dir, "#{textdomain}.mo")
|
197
190
|
end
|
198
191
|
end
|
199
|
-
|
192
|
+
|
200
193
|
if __FILE__ == $0
|
201
194
|
GetText.update_pofiles("foo", ARGV, "foo 1.1.0")
|
202
|
-
end
|
195
|
+
end
|
@@ -91,30 +91,14 @@ msgstr ""
|
|
91
91
|
TITLE
|
92
92
|
end
|
93
93
|
|
94
|
-
#PARSE HERE
|
95
94
|
def generate_pot(paths) # :nodoc:
|
96
95
|
pomessages = parse(paths)
|
97
96
|
str = ""
|
98
|
-
|
99
97
|
pomessages.each do |target|
|
100
|
-
|
101
|
-
str << target.to_po_str
|
102
|
-
end
|
98
|
+
str << target.to_po_str
|
103
99
|
end
|
104
100
|
str
|
105
101
|
end
|
106
|
-
|
107
|
-
def generate_private_pot(paths)
|
108
|
-
pomessages = parse(paths)
|
109
|
-
private_str = ""
|
110
|
-
|
111
|
-
pomessages.each do |target|
|
112
|
-
if target.to_po_str.include? "[private]"
|
113
|
-
private_str << target.to_po_str
|
114
|
-
end
|
115
|
-
end
|
116
|
-
private_str
|
117
|
-
end
|
118
102
|
|
119
103
|
def parse(paths) # :nodoc:
|
120
104
|
pomessages = []
|
@@ -197,7 +181,7 @@ TITLE
|
|
197
181
|
[ARGV, output]
|
198
182
|
end
|
199
183
|
|
200
|
-
def run(paths = nil, out = STDOUT
|
184
|
+
def run(paths = nil, out = STDOUT) # :nodoc:
|
201
185
|
if paths.is_a? String
|
202
186
|
paths = [paths]
|
203
187
|
elsif ! paths
|
@@ -208,20 +192,14 @@ TITLE
|
|
208
192
|
raise ArgumentError, _("no input files")
|
209
193
|
end
|
210
194
|
|
211
|
-
if
|
195
|
+
if out.is_a? String
|
212
196
|
File.open(File.expand_path(out), "w+") do |file|
|
213
197
|
file.puts generate_pot_header
|
214
198
|
file.puts generate_pot(paths)
|
215
199
|
end
|
216
|
-
File.open(File.expand_path(private_out), "w+") do |file|
|
217
|
-
file.puts generate_pot_header
|
218
|
-
file.puts generate_private_pot(paths)
|
219
|
-
end
|
220
200
|
else
|
221
201
|
out.puts generate_pot_header
|
222
202
|
out.puts generate_pot(paths)
|
223
|
-
private_out.puts generate_pot_header
|
224
|
-
private_out.puts generate_private_pot(paths)
|
225
203
|
end
|
226
204
|
self
|
227
205
|
end
|
@@ -236,8 +214,8 @@ TITLE
|
|
236
214
|
# * paths: An Array of po-file paths or nil.
|
237
215
|
# * out: output IO or output path.
|
238
216
|
# * Returns: self
|
239
|
-
def rgettext(paths = nil, out = STDOUT
|
240
|
-
RGetText.run(paths, out
|
217
|
+
def rgettext(paths = nil, out = STDOUT)
|
218
|
+
RGetText.run(paths, out)
|
241
219
|
self
|
242
220
|
end
|
243
221
|
end
|