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/ChangeLog CHANGED
@@ -1,3 +1,18 @@
1
+ = Ruby-GetText-Package-2.0.1 (2009-04-17)
2
+ * Fixed bugs
3
+ * doesn't work with ruby-1.8.5. [Reported by Dan Coutu]
4
+ * GetText.locale= can't keep the locale. [Reported by Adam Ilan]
5
+ * Break backward compatibility of bindtextdomain
6
+ [Reported by Mamoru Tasaka(#24947), Mathieu Blondel]
7
+ * Other trivial fixes/improvement.
8
+ * 1.8 times faster than 2.0.0.
9
+ * GetText::LocalePath is separated from GetText::TextDomainManager.
10
+ Improve to find the locale path.
11
+ * Enhance to support ruby-1.9.x [by OZAWA Sakuro]
12
+
13
+ Thanks to:
14
+ OZAWA Sakuro, Tietew, Adam Ilan, Mamoru Tasaka, Mathieu Blondel.
15
+
1
16
  = Ruby-GetText-Package-2.0.0 (2009-03-21)
2
17
  * Separate this library to locale and rails-support to locale,
3
18
  locale_rails, gettext_activerecord, gettext_rails.
@@ -60,7 +60,7 @@ Rails / ActiveRecord specific code now lives in locale_rails[http://github.com/m
60
60
  * (for compiling src/rmsgfmt.ry only)
61
61
 
62
62
  == Install
63
- * Uninstall old gettext if exists. (You need to do this when updating 1.93.0 -> 2.0.0)
63
+ * Uninstall old gettext if exists. (You need to do this when updating 1.93.0 -> 2.0.1)
64
64
  (sudo/su on POSIX system)
65
65
  gem uninstall gettext
66
66
 
@@ -220,32 +220,32 @@ This program is licenced under the same licence as Ruby.
220
220
 
221
221
  == Status of translations
222
222
  * Bosnian(bs) - 1.90.0 (old)
223
- * Bulgarian(bg) - 2.0.0 (new)
224
- * Catalan(ca) - 2.0.0
223
+ * Bulgarian(bg) - 2.0.1
224
+ * Catalan(ca) - 2.0.1
225
225
  * Croatian(hr) - 1.90.0 (old)
226
- * Chinese(zh_CN) - 2.0.0
227
- * Chinese(zh_TW) - 2.0.0
226
+ * Chinese(zh_CN) - 2.0.1
227
+ * Chinese(zh_TW) - 2.0.1
228
228
  * Czech(cs) - 1.9.0 (old)
229
229
  * Dutch(nl) - 1.90.0 (old)
230
230
  * English(default) - 1.90.0 (old)
231
- * Esperanto(eo) - 2.0.0
232
- * Estonian(et) - 2.0.0
233
- * French(fr) - 2.0.0
234
- * German(de) - 2.0.0
235
- * Greek(el) - 2.0.0
236
- * Hungarian(hu) - 2.0.0
231
+ * Esperanto(eo) - 2.0.1
232
+ * Estonian(et) - 2.0.1
233
+ * French(fr) - 2.0.1
234
+ * German(de) - 2.0.1
235
+ * Greek(el) - 2.0.1
236
+ * Hungarian(hu) - 2.0.1
237
237
  * Italian(it) - 1.6.0 (old)
238
- * Japanese(ja) - 2.0.0
238
+ * Japanese(ja) - 2.0.1
239
239
  * Korean(ko) - 1.9.0 (old)
240
- * Latvian(lv) - 2.0.0 (new)
241
- * Norwegian(nb) - 2.0.0
242
- * Portuguese(Brazil)(pt_BR) - 2.0.0
243
- * Russian(ru) - 2.0.0
240
+ * Latvian(lv) - 2.0.1
241
+ * Norwegian(nb) - 2.0.1
242
+ * Portuguese(Brazil)(pt_BR) - 2.0.1
243
+ * Russian(ru) - 2.0.1
244
244
  * Serbian(sr) - 1.91.0 (old)
245
- * Spanish(es) - 2.0.0
245
+ * Spanish(es) - 2.0.1
246
246
  * Swedish(sv) - 0.8.0 (too much old)
247
- * Ukrainian(ua) - 2.0.0
248
- * Vietnamese(vi) - 2.0.0
247
+ * Ukrainian(ua) - 2.0.1
248
+ * Vietnamese(vi) - 2.0.1
249
249
 
250
250
  == Maintainer
251
251
  Masao Mutoh <mutomasa at gmail.com>
data/Rakefile CHANGED
@@ -172,7 +172,7 @@ spec = Gem::Specification.new do |s|
172
172
  s.require_path = 'lib'
173
173
  s.executables = Dir.entries('bin').delete_if {|item| /^\.|CVS|~$/ =~ item }
174
174
  s.bindir = 'bin'
175
- s.add_dependency('locale', '>= 2.0.0')
175
+ s.add_dependency('locale', '>= 2.0.1')
176
176
  s.has_rdoc = true
177
177
  s.description = <<-EOF
178
178
  Ruby-GetText-Package is a GNU GetText-like program for Ruby.
@@ -216,13 +216,13 @@ Rake::RDocTask.new { |rdoc|
216
216
  rdoc.rdoc_dir = 'doc'
217
217
  rdoc.title = "Ruby-GetText-Package API Reference"
218
218
  rdoc.options << '--line-numbers' << '--inline-source'
219
- rdoc.rdoc_files.include('README', 'ChangeLog')
219
+ rdoc.rdoc_files.include('README.rdoc', 'ChangeLog')
220
220
  rdoc.rdoc_files.include('lib/**/*.rb')
221
221
  rdoc.template = allison if allison.size > 0
222
222
  }
223
223
 
224
224
  desc "Publish the release files to RubyForge."
225
- task :release => [ :package ] do
225
+ task :release => [:makemo, :package ] do
226
226
  require 'rubyforge'
227
227
 
228
228
  rubyforge = RubyForge.new
@@ -13,9 +13,19 @@
13
13
  $Id: gettext.rb,v 1.46 2008/09/13 18:23:55 mutoh Exp $
14
14
  =end
15
15
 
16
- begin gem 'locale', '>=0.9'; rescue LoadError;end
16
+ if respond_to? :gem
17
+ begin
18
+ begin
19
+ gem 'locale', '>=0.9'
20
+ rescue Gem::LoadError
21
+ end
22
+ rescue NoMethodError
23
+ else LoadError
24
+ end
25
+ end
26
+
17
27
  require 'locale'
18
- raise "Insall locale as gem or uninstall old gettext" unless Locale.respond_to? :candidates
28
+ raise "Install locale as gem or uninstall old gettext" unless Locale.respond_to? :candidates
19
29
 
20
30
  require 'gettext/version'
21
31
  require 'gettext/textdomain_manager'
@@ -27,7 +37,7 @@ module GetText
27
37
  @domainname = domainname
28
38
  end
29
39
  def message
30
- "#{domainname} is not bound."
40
+ "#{@domainname} is not bound."
31
41
  end
32
42
  end
33
43
 
@@ -53,27 +63,27 @@ module GetText
53
63
  # library doesn't use this option. Application may use this once.
54
64
  # * Returns: the GetText::TextDomainManager.
55
65
  #
56
- def bindtextdomain(domainname, options = {})
57
- bindtextdomain_to(self, domainname, options)
66
+ def bindtextdomain(domainname, *options)
67
+ bindtextdomain_to(self, domainname, *options)
58
68
  end
59
69
 
60
70
  # Includes GetText module and bind a textdomain to a class.
61
71
  # * klass: the target ruby class.
62
72
  # * domainname: the textdomain name.
63
73
  # * options: options as an Hash. See GetText.bindtextdomain.
64
- def bindtextdomain_to(klass, domainname, *args)
65
- if args[0].kind_of? Hash
66
- options = args[0]
74
+ def bindtextdomain_to(klass, domainname, *options)
75
+ if options[0].kind_of? Hash
76
+ opts = options[0]
67
77
  else
68
78
  # for backward compatibility.
69
- options = {}
70
- options[:path] = args[0] if args[0]
71
- options[:output_charset] = args[2] if args[2]
79
+ opts = {}
80
+ opts[:path] = options[0] if options[0]
81
+ opts[:output_charset] = options[2] if options[2]
72
82
  end
73
83
  unless (klass.kind_of? GetText or klass.include? GetText)
74
84
  klass.__send__(:include, GetText)
75
85
  end
76
- TextDomainManager.bind_to(klass, domainname, options)
86
+ TextDomainManager.bind_to(klass, domainname, opts)
77
87
  end
78
88
 
79
89
  # Binds a existed textdomain to your program.
@@ -118,7 +128,7 @@ module GetText
118
128
  # * msgid: the message id.
119
129
  # * Returns: localized text by msgid. If there are not binded mo-file, it will return msgid.
120
130
  def gettext(msgid)
121
- TextDomainManager.get(self).translate_singluar_message(self, msgid)
131
+ TextDomainManager.translate_singluar_message(self, msgid)
122
132
  end
123
133
 
124
134
  # call-seq:
@@ -135,7 +145,7 @@ module GetText
135
145
  # <tt>Movie|Location -> Location</tt>
136
146
  # See: http://www.gnu.org/software/gettext/manual/html_mono/gettext.html#SEC151
137
147
  def sgettext(msgid, seperator = "|")
138
- TextDomainManager.get(self).translate_singluar_message(self, msgid, seperator)
148
+ TextDomainManager.translate_singluar_message(self, msgid, seperator)
139
149
  end
140
150
 
141
151
  # call-seq:
@@ -152,7 +162,7 @@ module GetText
152
162
  # it returns msgid.
153
163
  # See: http://www.gnu.org/software/autoconf/manual/gettext/Contexts.html
154
164
  def pgettext(msgctxt, msgid)
155
- TextDomainManager.get(self).translate_singluar_message(self, "#{msgctxt}\004#{msgid}", "\004")
165
+ TextDomainManager.translate_singluar_message(self, "#{msgctxt}\004#{msgid}", "\004")
156
166
  end
157
167
 
158
168
  # call-seq:
@@ -170,7 +180,7 @@ module GetText
170
180
  # * Returns: the localized text which key is msgid_plural if n is plural(follow plural-rule) or msgid.
171
181
  # "plural-rule" is defined in po-file.
172
182
  def ngettext(msgid, msgid_plural, n = nil)
173
- TextDomainManager.get(self).translate_plural_message(self, msgid, msgid_plural, n)
183
+ TextDomainManager.translate_plural_message(self, msgid, msgid_plural, n)
174
184
  end
175
185
 
176
186
  # call-seq:
@@ -189,7 +199,7 @@ module GetText
189
199
  # * Returns: the localized text which key is msgid_plural if n is plural(follow plural-rule) or msgid.
190
200
  # "plural-rule" is defined in po-file.
191
201
  def nsgettext(msgid, msgid_plural, n="|", seperator = "|")
192
- TextDomainManager.get(self).translate_plural_message(self, msgid, msgid_plural, n, seperator)
202
+ TextDomainManager.translate_plural_message(self, msgid, msgid_plural, n, seperator)
193
203
  end
194
204
 
195
205
  # call-seq:
@@ -221,7 +231,7 @@ module GetText
221
231
  opt2 = nil
222
232
  end
223
233
 
224
- msgstr = TextDomainManager.get(self).translate_plural_message(self, msgid_ctxt, msgid_plural, opt1, opt2)
234
+ msgstr = TextDomainManager.translate_plural_message(self, msgid_ctxt, msgid_plural, opt1, opt2)
225
235
  if msgstr == msgid_ctxt
226
236
  msgid
227
237
  else
@@ -262,7 +272,10 @@ module GetText
262
272
  end
263
273
 
264
274
  def set_locale(lang)
265
- Locale.clear
275
+ Locale.default = lang
276
+ end
277
+
278
+ def set_current_locale(lang)
266
279
  Locale.current = lang
267
280
  end
268
281
 
@@ -271,6 +284,7 @@ module GetText
271
284
  end
272
285
 
273
286
  alias :locale= :set_locale #:nodoc:
287
+ alias :current_locale= :set_current_locale #:nodoc:
274
288
  alias :_ :gettext #:nodoc:
275
289
  alias :n_ :ngettext #:nodoc:
276
290
  alias :s_ :sgettext #:nodoc:
@@ -8,7 +8,7 @@ module GetText
8
8
  # normalize the klass name
9
9
  def normalize_class(klass)
10
10
  ret = (klass.kind_of? Module) ? klass : klass.class
11
- if ret.name =~ /^\#<|^$/ or ret == GetText
11
+ if ret.name.to_s =~ /^\#<|^$/ or ret == GetText
12
12
  ret = Object
13
13
  end
14
14
  ret
@@ -47,8 +47,11 @@ module GetText
47
47
  # (klass's ancestors, included modules and nested modules)
48
48
  def related_classes(klass, all_classes = [])
49
49
  ret = related_classes_internal(klass, all_classes)
50
- (ret + [Object]).uniq
50
+ unless ret.include? Object
51
+ ret += [Object]
52
+ end
53
+ ret
51
54
  end
52
55
  memoize :related_classes
53
56
  end
54
- end
57
+ end
@@ -1,4 +1,3 @@
1
- #! /usr/bin/ruby
2
1
  =begin
3
2
  string.rb - Extension for String.
4
3
 
@@ -9,12 +8,16 @@
9
8
  =end
10
9
 
11
10
  if RUBY_VERSION < "1.9.0"
12
-
13
11
  # Extension for String class. This feature is included in Ruby 1.9 or later.
14
12
  #
15
13
  # String#% method which accept "named argument". The translator can know
16
14
  # the meaning of the msgids using "named argument" instead of %s/%d style.
17
15
  class String
16
+
17
+ unless respond_to? :bytesize # For older ruby (such as ruby-1.8.5)
18
+ alias :bytesize :size
19
+ end
20
+
18
21
  alias :_old_format_m :% # :nodoc:
19
22
 
20
23
  # call-seq:
@@ -9,59 +9,68 @@
9
9
  =end
10
10
 
11
11
  require 'rbconfig'
12
+ require 'gettext/core_ext/string'
12
13
 
13
14
  module GetText
14
15
  # Treats locale-path for mo-files.
15
16
  class LocalePath
17
+ include Locale::Util::Memoizable
18
+
16
19
  # The default locale paths.
17
20
  CONFIG_PREFIX = Config::CONFIG['prefix'].gsub(/\/local/, "")
18
21
  DEFAULT_RULES = [
22
+ "./locale/%{lang}/LC_MESSAGES/%{name}.mo",
23
+ "./locale/%{lang}/%{name}.mo",
19
24
  "#{Config::CONFIG['datadir']}/locale/%{lang}/LC_MESSAGES/%{name}.mo",
20
25
  "#{Config::CONFIG['datadir'].gsub(/\/local/, "")}/locale/%{lang}/LC_MESSAGES/%{name}.mo",
21
26
  "#{CONFIG_PREFIX}/share/locale/%{lang}/LC_MESSAGES/%{name}.mo",
22
27
  "#{CONFIG_PREFIX}/local/share/locale/%{lang}/LC_MESSAGES/%{name}.mo"
23
28
  ].uniq
24
-
25
- # Add default locale path. Usually you should use GetText.add_default_locale_path instead.
26
- # * path: a new locale path. (e.g.) "/usr/share/locale/%{lang}/LC_MESSAGES/%{name}.mo"
27
- # ('locale' => "ja_JP", 'name' => "textdomain")
28
- # * Returns: the new DEFAULT_LOCALE_PATHS
29
- def self.add_default_rule(path)
30
- DEFAULT_RULES.unshift(path)
31
- end
32
29
 
33
- @@default_path_rules = []
30
+ class << self
31
+ include Locale::Util::Memoizable
34
32
 
35
- # Returns path rules as an Array.
36
- # (e.g.) ["/usr/share/locale/%{lang}/LC_MESSAGES/%{name}.mo", ...]
37
- def self.default_path_rules
38
- return @@default_path_rules.dup if @@default_path_rules.size > 0
39
-
40
- if ENV["GETTEXT_PATH"]
41
- ENV["GETTEXT_PATH"].split(/,/).each {|i|
42
- @@default_path_rules = ["#{i}/%{lang}/LC_MESSAGES/%{name}.mo", "#{i}/%{lang}/%{name}.mo"]
43
- }
33
+ # Add default locale path. Usually you should use GetText.add_default_locale_path instead.
34
+ # * path: a new locale path. (e.g.) "/usr/share/locale/%{lang}/LC_MESSAGES/%{name}.mo"
35
+ # ('locale' => "ja_JP", 'name' => "textdomain")
36
+ # * Returns: the new DEFAULT_LOCALE_PATHS
37
+ def add_default_rule(path)
38
+ DEFAULT_RULES.unshift(path)
44
39
  end
45
-
46
- @@default_path_rules += DEFAULT_RULES
47
40
 
48
- $LOAD_PATH.each {|path|
49
- if /(.*)\/lib$/ =~ path
50
- @@default_path_rules += [
51
- "#{$1}/data/locale/%{lang}/LC_MESSAGES/%{name}.mo",
52
- "#{$1}/data/locale/%{lang}/%{name}.mo",
53
- "#{$1}/locale/%{lang}/%{name}.mo"]
54
- end
55
- }
56
- @@default_path_rules.dup
57
- end
41
+ # Returns path rules as an Array.
42
+ # (e.g.) ["/usr/share/locale/%{lang}/LC_MESSAGES/%{name}.mo", ...]
43
+ def default_path_rules
44
+ default_path_rules = []
58
45
 
59
- # Clear path_rules for testing.
60
- def self.clear
61
- @@default_path_rules = nil
46
+ if ENV["GETTEXT_PATH"]
47
+ ENV["GETTEXT_PATH"].split(/,/).each {|i|
48
+ default_path_rules = ["#{i}/%{lang}/LC_MESSAGES/%{name}.mo", "#{i}/%{lang}/%{name}.mo"]
49
+ }
50
+ end
51
+
52
+ default_path_rules += DEFAULT_RULES
53
+
54
+ load_path = $LOAD_PATH
55
+ if defined? ::Gem
56
+ load_path += Gem.all_load_paths.map{|v| v =~ /(.*)\/lib$/; $1}
57
+ end
58
+
59
+ load_path.each {|path|
60
+ default_path_rules += [
61
+ "#{path}/data/locale/%{lang}/LC_MESSAGES/%{name}.mo",
62
+ "#{path}/data/locale/%{lang}/%{name}.mo",
63
+ "#{path}/locale/%{lang}/%{name}.mo"]
64
+ }
65
+ # paths existed only.
66
+ default_path_rules = default_path_rules.select{|path|
67
+ Dir.glob(path % {:lang => "*", :name => "*"}).size > 0}.uniq
68
+ default_path_rules
69
+ end
70
+ memoize_dup :default_path_rules
62
71
  end
63
72
 
64
- attr_reader :locale_paths
73
+ attr_reader :locale_paths, :supported_locales
65
74
 
66
75
  # Creates a new GetText::TextDomain.
67
76
  # * name: the textdomain name.
@@ -70,11 +79,22 @@ module GetText
70
79
  @name = name
71
80
 
72
81
  if topdir
73
- @locale_paths = ["#{topdir}/%{lang}/LC_MESSAGES/%{name}.mo", "#{topdir}/%{lang}/%{name}.mo"]
82
+ path_rules = ["#{topdir}/%{lang}/LC_MESSAGES/%{name}.mo", "#{topdir}/%{lang}/%{name}.mo"]
74
83
  else
75
- @locale_paths = self.class.default_path_rules
84
+ path_rules = self.class.default_path_rules
85
+
86
+ end
87
+
88
+ @locale_paths = {}
89
+ path_rules.each do |rule|
90
+ this_path_rules = rule % {:lang => "([^\/]+)", :name => name}
91
+ Dir.glob(rule %{:lang => "*", :name => name}).each do |path|
92
+ if /#{this_path_rules}/ =~ path
93
+ @locale_paths[$1] = path unless @locale_paths[$1]
94
+ end
95
+ end
76
96
  end
77
- @locale_paths.map! {|v| v % {:name => name} }
97
+ @supported_locales = @locale_paths.keys.sort
78
98
  end
79
99
 
80
100
  # Gets the current path.
@@ -83,25 +103,21 @@ module GetText
83
103
  lang_candidates = lang.to_posix.candidates
84
104
  search_files = []
85
105
 
86
- @locale_paths.each {|path|
87
- lang_candidates.each{|tag|
88
- fname = path % {:lang => tag}
89
- if $DEBUG
90
- search_files << fname unless search_files.include?(fname)
91
- end
92
- if File.exist?(fname)
93
- warn "GetText::TextDomain#load_mo: mo-file is #{fname}" if $DEBUG
94
- return fname
95
- end
96
- }
97
- }
106
+ lang_candidates.each do |tag|
107
+ path = @locale_paths[tag.to_s]
108
+ warn "GetText::TextDomain#load_mo: mo-file is #{path}" if $DEBUG
109
+ return path if path
110
+ end
111
+
98
112
  if $DEBUG
99
113
  warn "MO file is not found in"
100
- search_files.each do |v|
101
- warn " #{v}"
114
+ @locale_paths.each do |path|
115
+ warn " #{path}"
102
116
  end
103
117
  end
104
118
  nil
105
119
  end
120
+ memoize :current_path
121
+
106
122
  end
107
123
  end
@@ -1,7 +1,7 @@
1
1
  =begin
2
2
  mofile.rb - A simple class for operating GNU MO file.
3
3
 
4
- Copyright (C) 2003-2008 Masao Mutoh
4
+ Copyright (C) 2003-2009 Masao Mutoh
5
5
  Copyright (C) 2002 Masahiro Sakai, Masao Mutoh
6
6
  Copyright (C) 2001 Masahiro Sakai
7
7
 
@@ -12,7 +12,6 @@
12
12
  of Ruby. License of Ruby is included with Ruby distribution in
13
13
  the file "README".
14
14
 
15
- $Id: mo.rb,v 1.10 2008/06/17 16:40:52 mutoh Exp $
16
15
  =end
17
16
 
18
17
  require 'gettext/core_ext/iconv'
@@ -169,11 +168,18 @@ module GetText
169
168
  ('1' * number) !~ /^1?$|^(11+?)\1+$/
170
169
  end
171
170
 
172
- def next_prime(seed)
173
- require 'mathn'
174
- prime = Prime.new
175
- while current = prime.succ
176
- return current if current > seed
171
+ begin
172
+ require 'prime'
173
+ def next_prime(seed)
174
+ Prime.instance.find{|x| x > seed }
175
+ end
176
+ rescue LoadError
177
+ def next_prime(seed)
178
+ require 'mathn'
179
+ prime = Prime.new
180
+ while current = prime.succ
181
+ return current if current > seed
182
+ end
177
183
  end
178
184
  end
179
185
 
@@ -223,17 +229,17 @@ module GetText
223
229
 
224
230
  orig_table_data = Array.new()
225
231
  ary.each{|item, _|
226
- orig_table_data.push(item.size)
232
+ orig_table_data.push(item.bytesize)
227
233
  orig_table_data.push(pos)
228
- pos += item.size + 1 # +1 is <NUL>
234
+ pos += item.bytesize + 1 # +1 is <NUL>
229
235
  }
230
236
  io.write(orig_table_data.pack('V*'))
231
237
 
232
238
  trans_table_data = Array.new()
233
239
  ary.each{|_, item|
234
- trans_table_data.push(item.size)
240
+ trans_table_data.push(item.bytesize)
235
241
  trans_table_data.push(pos)
236
- pos += item.size + 1 # +1 is <NUL>
242
+ pos += item.bytesize + 1 # +1 is <NUL>
237
243
  }
238
244
  io.write(trans_table_data.pack('V*'))
239
245
 
@@ -30,7 +30,10 @@ module GetText
30
30
  end
31
31
 
32
32
  def parse(file, targets = []) # :nodoc:
33
- erb = ERB.new(IO.readlines(file).join).src.split(/$/)
33
+ src = ERB.new(IO.readlines(file).join).src
34
+ # Remove magic comment prepended by erb in Ruby 1.9.
35
+ src.sub!(/\A#.*?coding[:=].*?\n/, '') if src.respond_to?(:encode)
36
+ erb = src.split(/$/)
34
37
  RubyParser.parse_lines(file, erb, targets)
35
38
  end
36
39
 
@@ -112,6 +112,9 @@ module GetText
112
112
  end
113
113
  end
114
114
 
115
+ DEFAULT_PLURAL_CALC = Proc.new{|n| "n != 1"}
116
+ DEFAULT_SINGLE_CALC = Proc.new{|n| 0}
117
+
115
118
  # Translates the translated string.
116
119
  # * lang: Locale::Tag::Simple's subclass.
117
120
  # * msgid: the original message.
@@ -126,11 +129,11 @@ module GetText
126
129
  elsif msg.include?("\000")
127
130
  # [[msgstr[0], msgstr[1], msgstr[2],...], cond]
128
131
  mofile = @mofiles[lang.to_posix.to_s]
129
- cond = (mofile and mofile != :empty) ? mofile.plural : nil
130
- cond ||= "n != 1"
132
+ cond = (mofile and mofile != :empty) ? Proc.new{|n| eval(mofile.plural)} : nil
133
+ cond ||= DEFAULT_PLURAL_CALC
131
134
  ret = [msg.split("\000"), cond]
132
135
  else
133
- ret = [[msg], "0"]
136
+ ret = [[msg], DEFAULT_SINGLE_CALC]
134
137
  end
135
138
  ret
136
139
  end
@@ -0,0 +1,25 @@
1
+ =begin
2
+ gettext/textdomain_group - GetText::TextDomainGroup class
3
+
4
+ Copyright (C) 2009 Masao Mutoh
5
+
6
+ You may redistribute it and/or modify it under the same
7
+ license terms as Ruby.
8
+
9
+ =end
10
+
11
+ module GetText
12
+
13
+ class TextDomainGroup
14
+ attr_reader :textdomains, :supported_language_tags
15
+
16
+ def initialize(supported_language_tags)
17
+ @textdomains = []
18
+ @supported_language_tags = supported_language_tags
19
+ end
20
+
21
+ def add(textdomain)
22
+ @textdomains.unshift(textdomain) unless @textdomains.include? textdomain
23
+ end
24
+ end
25
+ end
@@ -8,100 +8,87 @@
8
8
 
9
9
  =end
10
10
 
11
- require 'gettext/textdomain'
12
11
  require 'gettext/class_info'
13
- require 'locale/util/memoizable'
12
+ require 'gettext/textdomain'
13
+ require 'gettext/textdomain_group'
14
14
 
15
15
  module GetText
16
- class TextDomainManager
17
- include Locale::Util::Memoizable
16
+
17
+ module TextDomainManager
18
18
 
19
19
  @@textdomain_pool = {}
20
- @@textdomain_manager_pool = {}
20
+ @@textdomain_group_pool = {}
21
21
 
22
22
  @@output_charset = nil
23
23
  @@gettext_classes = []
24
24
 
25
+ @@singular_message_cache = {}
26
+ @@plural_message_cache = {}
27
+ @@cached = ! $DEBUG
28
+
29
+ extend self
30
+
25
31
  # Find textdomain by name
26
- def self.textdomain_pool(domainname)
32
+ def textdomain_pool(domainname)
27
33
  @@textdomain_pool[domainname]
28
34
  end
29
35
 
30
- # create or find a textdomain-manager for an given object/class
31
- def self.get(obj)
32
- klass = ClassInfo.normalize_class(obj)
33
- manager = @@textdomain_manager_pool[klass]
34
- return manager if manager
35
- @@textdomain_manager_pool[klass] = TextDomainManager.new
36
- end
37
-
38
36
  # Set the value whether cache messages or not.
39
37
  # true to cache messages, otherwise false.
40
38
  #
41
39
  # Default is true. If $DEBUG is false, messages are not checked even if
42
40
  # this value is true.
43
- def self.cached=(val)
41
+ def cached=(val)
42
+ @@cached = val
44
43
  TextDomain.cached = val
45
44
  end
46
45
 
47
46
  # Return the cached value.
48
- def self.cached?
47
+ def cached?
48
+ @@cached
49
49
  TextDomain.cached?
50
50
  end
51
51
 
52
52
  # Gets the output charset.
53
- def self.output_charset
53
+ def output_charset
54
54
  @@output_charset
55
55
  end
56
-
56
+
57
57
  # Sets the output charset.The program can have a output charset.
58
- def self.output_charset=(charset)
58
+ def output_charset=(charset)
59
59
  @@output_charset = charset
60
60
  @@textdomain_pool.each do |key, textdomain|
61
61
  textdomain.output_charset = charset
62
62
  end
63
63
  end
64
-
64
+
65
65
  # bind textdomain to the class.
66
- def self.bind_to(klass, domainname, options = {})
66
+ def bind_to(klass, domainname, options = {})
67
67
  warn "Bind the domain '#{domainname}' to '#{klass}'. " if $DEBUG
68
68
 
69
69
  charset = options[:output_charset] || self.output_charset
70
70
  textdomain = create_or_find_textdomain(domainname,options[:path],charset)
71
71
 
72
72
  target_klass = ClassInfo.normalize_class(klass)
73
- get(target_klass).add(textdomain, options[:supported_language_tags])
74
- add_to_gettext_classes(target_klass)
75
-
73
+ create_or_find_textdomain_group(target_klass, options[:supported_language_tags]).add(textdomain)
74
+ @@gettext_classes << target_klass unless @@gettext_classes.include? target_klass
75
+
76
76
  textdomain
77
77
  end
78
-
79
- def self.each_textdomains(klass) #:nodoc:
78
+
79
+ def each_textdomains(klass) #:nodoc:
80
80
  ClassInfo.related_classes(klass, @@gettext_classes).each do |target|
81
81
  msg = nil
82
- get(target).textdomains.each do |textdomain|
83
- yield textdomain
82
+ if group = @@textdomain_group_pool[target]
83
+ lang = Locale.candidates(:supported_language_tags => group.supported_language_tags,
84
+ :type => :posix)[0]
85
+ group.textdomains.each do |textdomain|
86
+ yield textdomain, lang
87
+ end
84
88
  end
85
89
  end
86
90
  end
87
91
 
88
- #
89
- # Instance methods
90
- #
91
-
92
- # Returns the textdoman in the instance.
93
- attr_reader :textdomains, :supported_language_tags
94
-
95
- def initialize
96
- @textdomains = []
97
- @supported_language_tags = nil
98
- end
99
-
100
- def add(textdomain, supported_language_tags)
101
- @textdomains.unshift(textdomain) unless @textdomains.include? textdomain
102
- @supported_language_tags = supported_language_tags if supported_language_tags
103
- end
104
-
105
92
  # Translates msgid, but if there are no localized text,
106
93
  # it returns a last part of msgid separeted "div" or whole of the msgid with no "div".
107
94
  #
@@ -109,16 +96,12 @@ module GetText
109
96
  # * div: separator or nil.
110
97
  # * Returns: the localized text by msgid. If there are no localized text,
111
98
  # it returns a last part of msgid separeted "div".
112
- def translate_singluar_message(klass, msgid, div = '|')
113
- lang = Locale.candidates(:supported_language_tags => @supported_language_tags,
114
- :type => :posix)[0]
115
- translate_singluar_message_to(lang, klass, msgid, div)
116
- end
117
-
118
- def translate_singluar_message_to(lang, klass, msgid, div = '|') #:nodoc:
119
- msg = nil
99
+ def translate_singluar_message(klass, msgid, div = nil)
100
+ key = [Locale.current, klass, msgid, div].hash
101
+ msg = @@singular_message_cache[key]
102
+ return msg if msg and @@cached
120
103
  # Find messages from related classes.
121
- self.class.each_textdomains(klass) do |textdomain|
104
+ each_textdomains(klass) do |textdomain, lang|
122
105
  msg = textdomain.translate_singluar_message(lang, msgid)
123
106
  break if msg
124
107
  end
@@ -130,10 +113,9 @@ module GetText
130
113
  msg = msg[(index + 1)..-1]
131
114
  end
132
115
  end
133
- msg
116
+ @@singular_message_cache[key] = msg
134
117
  end
135
- memoize :translate_singluar_message_to unless $DEBUG
136
-
118
+
137
119
  # This function is similar to the get_singluar_message function
138
120
  # as it finds the message catalogs in the same way.
139
121
  # But it takes two extra arguments for plural form.
@@ -157,12 +139,6 @@ module GetText
157
139
  # * n: a number used to determine the plural form.
158
140
  # * div: the separator. Default is "|".
159
141
  def translate_plural_message(klass, arg1, arg2, arg3 = "|", arg4 = "|")
160
- lang = Locale.candidates(:supported_language_tags => @supported_language_tags,
161
- :type => :posix)[0]
162
- translate_plural_message_to(lang, klass, arg1, arg2, arg3, arg4)
163
- end
164
-
165
- def translate_plural_message_to(lang, klass, arg1, arg2, arg3 = "|", arg4 = "|")
166
142
  # parse arguments
167
143
  if arg1.kind_of?(Array)
168
144
  msgid = arg1[0]
@@ -179,45 +155,53 @@ module GetText
179
155
  div = arg4
180
156
  end
181
157
 
182
- # Find messages from related classes.
183
- msgs = nil
184
- self.class.each_textdomains(klass) do |textdomain|
185
- msgs = textdomain.translate_plural_message(lang, msgid, msgid_plural)
186
- break if msgs
187
- end
188
-
189
- # If not found, return msgid.
190
- msgs = [[msgid, msgid_plural], "n != 1"] unless msgs
158
+ key = [Locale.current, klass, msgid, msgid_plural, div].hash
159
+ msgs = @@plural_message_cache[key]
160
+ unless (msgs and @@cached)
191
161
 
192
- msgstrs = msgs[0]
193
- if div and msgstrs[0] == msgid and index = msgstrs[0].rindex(div)
194
- msgstrs[0] = msgstrs[0][(index + 1)..-1]
162
+ # Find messages from related classes.
163
+ msgs = nil
164
+ each_textdomains(klass) do |textdomain, lang|
165
+ msgs = textdomain.translate_plural_message(lang, msgid, msgid_plural)
166
+ break if msgs
167
+ end
168
+
169
+ msgs = [[msgid, msgid_plural], Proc.new{|n| eval("n != 1")}] unless msgs
170
+
171
+ msgstrs = msgs[0]
172
+ if div and msgstrs[0] == msgid and index = msgstrs[0].rindex(div)
173
+ msgstrs[0] = msgstrs[0][(index + 1)..-1]
174
+ end
175
+ @@plural_message_cache[key] = msgs
195
176
  end
196
177
 
197
178
  # Return the singular or plural message.
198
- plural = eval(msgs[1])
179
+ msgstrs = msgs[0]
180
+ plural = msgs[1].call(n)
199
181
  return msgstrs[plural] if plural.kind_of?(Numeric)
200
182
  return plural ? msgstrs[1] : msgstrs[0]
201
183
  end
202
- memoize :translate_plural_message_to unless $DEBUG
203
184
 
204
185
  # for testing.
205
- def self.clear_all_textdomains
186
+ def clear_all_textdomains
206
187
  @@textdomain_pool = {}
207
- @@textdomain_manager_pool = {}
188
+ @@textdomain_group_pool = {}
208
189
  @@gettext_classes = []
190
+ @@singular_message_cache = {}
191
+ @@plural_message_cache = {}
209
192
  end
210
-
211
- private
212
193
 
213
- def self.add_to_gettext_classes(klass)
214
- @@gettext_classes << klass unless @@gettext_classes.include? klass
194
+ def create_or_find_textdomain_group(klass, supported_language_tags = nil) #:nodoc:
195
+ group = @@textdomain_group_pool[klass]
196
+ return group if group
197
+
198
+ @@textdomain_group_pool[klass] = TextDomainGroup.new(supported_language_tags)
215
199
  end
216
-
217
- def self.create_or_find_textdomain(name, path, charset)#:nodoc:
200
+
201
+ def create_or_find_textdomain(name, path, charset)#:nodoc:
218
202
  textdomain = @@textdomain_pool[name]
219
203
  return textdomain if textdomain
220
-
204
+
221
205
  @@textdomain_pool[name] = TextDomain.new(name, path, charset)
222
206
  end
223
207
  end
@@ -188,6 +188,25 @@ module GetText
188
188
  mo_dir = mo_dir_rule % {:lang => lang}
189
189
  File.join(mo_dir, "#{textdomain}.mo")
190
190
  end
191
+
192
+ # In Ruby 1.9, we must detect proper encoding of a PO file.
193
+ def po_file_content(po_file)
194
+ args = [ po_file ]
195
+ if String.instance_methods.include?(:encode)
196
+ encoding = detect_po_file_encoding(po_file)
197
+ args << "r:#{encoding}"
198
+ end
199
+ File.open(*args) {|io| io.read }
200
+ end
201
+
202
+ def detect_po_file_encoding(po_file)
203
+ open(po_file, :encoding => 'ASCII-8BIT') do |input|
204
+ input.lines.each do |line|
205
+ return Encoding.find($1) if %r["Content-Type:.*\scharset=(.*)\\n"] =~ line
206
+ end
207
+ end
208
+ Encoding.default_external
209
+ end
191
210
  end
192
211
 
193
212
  if __FILE__ == $0
@@ -34,7 +34,8 @@ module GetText
34
34
 
35
35
  parser = PoParser.new
36
36
  data = MOFile.new
37
- parser.parse(File.open(targetfile).read, data)
37
+
38
+ parser.parse(po_file_content(targetfile), data)
38
39
  data.save_to_file(output_path)
39
40
  end
40
41
 
@@ -8,5 +8,5 @@
8
8
  license terms as Ruby.
9
9
  =end
10
10
  module GetText
11
- VERSION = "2.0.0"
11
+ VERSION = "2.0.1"
12
12
  end
@@ -15,6 +15,6 @@ desc 'Run all tests'
15
15
  task :test do
16
16
  Dir.glob("**/test_*.rb").each do |path|
17
17
  puts ""
18
- ruby "-I../lib", "-rubygems", path rescue nil
18
+ ruby "-I../lib:../../locale/lib", "-rubygems", path rescue nil
19
19
  end
20
20
  end
@@ -6,7 +6,7 @@
6
6
  msgid ""
7
7
  msgstr ""
8
8
  "Project-Id-Version: PACKAGE VERSION\n"
9
- "POT-Creation-Date: 2002-01-01 02:24:56+0900\n"
9
+ "POT-Creation-Date: 2001-10-28 01:39:53+0900\n"
10
10
  "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
11
11
  "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
12
12
  "Language-Team: LANGUAGE <LL@li.org>\n"
@@ -14,10 +14,6 @@ msgstr ""
14
14
  "Content-Type: text/plain; charset=utf-8\n"
15
15
  "Content-Transfer-Encoding: ENCODING\n"
16
16
 
17
- #: testlib1.rb:10
17
+ #: test.rb:9 test.rb:11
18
18
  msgid "language"
19
- msgstr "french"
20
-
21
- #: testlib1.rb:14
22
- msgid "one is %d."
23
- msgstr "ONE IS %d."
19
+ msgstr "JAPANESE"
@@ -66,7 +66,6 @@ class TestClassInfo < Test::Unit::TestCase
66
66
  end
67
67
 
68
68
  def test_rellated_classes_with_all_classes
69
- # Evertime Object is returned as the fallback object.
70
69
  assert_equal [M1, Object], related_classes(M1, [M1])
71
70
  assert_equal [M1, Object], related_classes(M1::M3::M4, [M1])
72
71
  assert_equal [M1::M3, Object], related_classes(M1::M3::M4, [M1::M3])
@@ -1,3 +1,4 @@
1
+ # -*- coding: UTF-8 -*-
1
2
  require 'testlib/helper.rb'
2
3
 
3
4
  require 'testlib/simple.rb'
@@ -12,6 +12,8 @@ class TestLocalePath < Test::Unit::TestCase
12
12
  assert_equal("japanese", test.test)
13
13
  prefix = GetText::LocalePath::CONFIG_PREFIX
14
14
  default_locale_dirs = [
15
+ "./locale/%{lang}/LC_MESSAGES/%{name}.mo",
16
+ "./locale/%{lang}/%{name}.mo",
15
17
  "#{Config::CONFIG['datadir']}/locale/%{lang}/LC_MESSAGES/%{name}.mo",
16
18
  "#{Config::CONFIG['datadir'].gsub(/\/local/, "")}/locale/%{lang}/LC_MESSAGES/%{name}.mo",
17
19
  "#{prefix}/share/locale/%{lang}/LC_MESSAGES/%{name}.mo",
@@ -26,12 +28,23 @@ class TestLocalePath < Test::Unit::TestCase
26
28
  def test_initialize_with_topdir
27
29
  testdir = File.dirname(File.expand_path(__FILE__))
28
30
  path = GetText::LocalePath.new("test1", "#{testdir}/locale")
29
- assert_equal path.locale_paths, ["#{testdir}/locale/%{lang}/LC_MESSAGES/test1.mo",
30
- "#{testdir}/locale/%{lang}/test1.mo"]
31
+ assert_equal path.locale_paths, { "ja" => "#{testdir}/locale/ja/LC_MESSAGES/test1.mo",
32
+ "fr" => "#{testdir}/locale/fr/LC_MESSAGES/test1.mo"}
31
33
  assert_equal path.current_path(Locale::Tag.parse("ja")), "#{testdir}/locale/ja/LC_MESSAGES/test1.mo"
32
34
  assert_equal path.current_path(Locale::Tag.parse("ja-JP")), "#{testdir}/locale/ja/LC_MESSAGES/test1.mo"
33
35
  assert_equal path.current_path(Locale::Tag.parse("ja_JP.UTF-8")), "#{testdir}/locale/ja/LC_MESSAGES/test1.mo"
34
36
  assert_equal path.current_path(Locale::Tag.parse("en")), nil
35
37
  end
36
38
 
39
+ def test_supported_locales
40
+ testdir = File.dirname(File.expand_path(__FILE__))
41
+ path = GetText::LocalePath.new("test1", "#{testdir}/locale")
42
+ assert_equal ["fr", "ja"], path.supported_locales
43
+
44
+ path = GetText::LocalePath.new("plural", "#{testdir}/locale")
45
+ assert_equal ["cr", "da", "fr", "ir", "ja", "la", "li", "po", "sl"], path.supported_locales
46
+
47
+ path = GetText::LocalePath.new("nodomain", "#{testdir}/locale")
48
+ assert_equal [], path.supported_locales
49
+ end
37
50
  end
@@ -92,20 +92,20 @@ class TestGetTextParser < Test::Unit::TestCase
92
92
 
93
93
  def test_rgettext_parse
94
94
  GetText::ErbParser.init(:extnames => ['.rhtml', '.rxml'])
95
- ary = GetText::RGetText.parse('testlib/erb.rhtml')
95
+ ary = GetText::RGetText.parse(['testlib/erb.rhtml'])
96
96
  assert_equal(['aaa', 'testlib/erb.rhtml:8'], ary[0])
97
97
  assert_equal(['aaa\n', 'testlib/erb.rhtml:11'], ary[1])
98
98
  assert_equal(['bbb', 'testlib/erb.rhtml:12'], ary[2])
99
99
  assert_equal(["ccc1\000ccc2", 'testlib/erb.rhtml:13'], ary[3])
100
100
 
101
- ary = GetText::RGetText.parse('testlib/erb.rxml')
101
+ ary = GetText::RGetText.parse(['testlib/erb.rxml'])
102
102
  assert_equal(['aaa', 'testlib/erb.rxml:9'], ary[0])
103
103
  assert_equal(['aaa\n', 'testlib/erb.rxml:12'], ary[1])
104
104
  assert_equal(['bbb', 'testlib/erb.rxml:13'], ary[2])
105
105
  assert_equal(["ccc1\000ccc2", 'testlib/erb.rxml:14'], ary[3])
106
106
 
107
107
 
108
- ary = GetText::RGetText.parse('testlib/ngettext.rb')
108
+ ary = GetText::RGetText.parse(['testlib/ngettext.rb'])
109
109
  assert_equal(["ooo\000ppp", 'testlib/ngettext.rb:64', 'testlib/ngettext.rb:65'], ary[12])
110
110
  assert_equal(["qqq\000rrr", 'testlib/ngettext.rb:69', 'testlib/ngettext.rb:70'], ary[13])
111
111
  end
@@ -1,7 +1,7 @@
1
1
  require 'testlib/helper.rb'
2
2
 
3
3
  class TestGetTextString < Test::Unit::TestCase
4
- def test_string_sprintf
4
+ def test_sprintf
5
5
  assert_equal("foo is a number", "%{msg} is a number" % {:msg => "foo"})
6
6
  assert_equal("bar is a number", "%s is a number" % ["bar"])
7
7
  assert_equal("bar is a number", "%s is a number" % "bar")
@@ -11,4 +11,26 @@ class TestGetTextString < Test::Unit::TestCase
11
11
  assert_equal("test, 1", "%2$s, %1$d" % [1, "test"])
12
12
  assert_raise(ArgumentError) { "%-%" % [1] }
13
13
  end
14
+
15
+ =begin
16
+ def test_sprintf_lack_argument
17
+ assert_equal("%{num}, test", "%{num}, %{record}" % {:record => "test"})
18
+ assert_equal("%{record}", "%{record}" % {:num => 1})
19
+ end
20
+
21
+ def test_sprintf_ruby19
22
+ assert_equal("1", "%<num>d" % {:num => 1})
23
+ assert_equal("1", "%<num>#b" % {:num => 1})
24
+ assert_equal("foo", "%<msg>s" % {:msg => "foo"})
25
+ assert_equal("1.000000", "%<num>f" % {:num => 1.0})
26
+ assert_equal(" 1", "%<num>3.0f" % {:num => 1.0})
27
+ assert_equal("100.00", "%<num>2.2f" % {:num => 100.0})
28
+ assert_equal("0x64", "%<num>#x" % {:num => 100.0})
29
+ end
30
+
31
+ def test_percent
32
+ assert_equal("% 1", "%% %<num>d" % {:num => 1.0})
33
+ end
34
+ =end
35
+
14
36
  end
@@ -11,7 +11,7 @@ class TestGetTextBind < Test::Unit::TestCase
11
11
 
12
12
  def test_bindtextdomain
13
13
  domain = GetText.bindtextdomain("foo")
14
- assert_equal domain, GetText::TextDomainManager.get(GetText).textdomains[0]
14
+ assert_equal domain, GetText::TextDomainManager.create_or_find_textdomain_group(Object).textdomains[0]
15
15
  assert_equal domain, GetText::TextDomainManager.textdomain_pool("foo")
16
16
  end
17
17
 
@@ -2,6 +2,7 @@ require 'testlib/helper.rb'
2
2
  require 'testlib/multi_textdomain.rb'
3
3
 
4
4
  class TestGetTextMulti < Test::Unit::TestCase
5
+
5
6
  def setup
6
7
  GetText.locale = "ja_JP.EUC-JP"
7
8
  end
@@ -65,5 +66,14 @@ class TestGetTextMulti < Test::Unit::TestCase
65
66
  assert_equal("no data", test.test3) # No po file.
66
67
  end
67
68
 
69
+ def test_same_msgid_but_different_textdomain
70
+ test1 = C12.new # test1 domain
71
+ test2 = C51.new # test3 domain
72
+ test3 = C52.new # test3 domain but inherited C11.
73
+
74
+ assert_equal("japanese", test1.test) # Use text1 message
75
+ assert_equal("JAPANESE", test2.test) # Use text3 message
76
+ assert_equal("JAPANESE", test3.test) # Use text3 message
77
+ end
68
78
 
69
79
  end
@@ -15,7 +15,7 @@ class TestThread < Test::Unit::TestCase
15
15
  Thread.start do
16
16
  @mutex.synchronize {
17
17
  Thread.current["language"] = language
18
- GetText.locale = tag
18
+ GetText.current_locale = tag
19
19
  }
20
20
  (1..10).each do |v|
21
21
  assert_equal Thread.current["language"], _("language")
@@ -117,3 +117,15 @@ class C4 < C3
117
117
  _("no data")
118
118
  end
119
119
  end
120
+
121
+ class C51
122
+ include GetText
123
+ bindtextdomain("test3", :path => "locale")
124
+ def test
125
+ _("language")
126
+ end
127
+ end
128
+
129
+ class C52 < C12
130
+ bindtextdomain("test3", :path => "locale")
131
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: gettext
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.0.0
4
+ version: 2.0.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Masao Mutoh
@@ -9,7 +9,7 @@ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
11
 
12
- date: 2009-03-22 00:00:00 +09:00
12
+ date: 2009-04-19 00:00:00 +09:00
13
13
  default_executable:
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
@@ -20,7 +20,7 @@ dependencies:
20
20
  requirements:
21
21
  - - ">="
22
22
  - !ruby/object:Gem::Version
23
- version: 2.0.0
23
+ version: 2.0.1
24
24
  version:
25
25
  description: Ruby-GetText-Package is a GNU GetText-like program for Ruby. The catalog file(po-file) is same format with GNU GetText. So you can use GNU GetText tools for maintaining.
26
26
  email: mutomasa at gmail.com
@@ -828,6 +828,7 @@ files:
828
828
  - lib/gettext/poparser.rb
829
829
  - lib/gettext/textdomain.rb
830
830
  - lib/gettext/textdomain_manager.rb
831
+ - lib/gettext/textdomain_group.rb
831
832
  - lib/gettext/utils.rb
832
833
  - lib/gettext/version.rb
833
834
  - lib/gettext/mofile.rb
@@ -860,7 +861,6 @@ files:
860
861
  - test/po/sl
861
862
  - test/po/sl/plural.po
862
863
  - test/po/fr
863
- - test/po/fr/test6.po
864
864
  - test/po/fr/plural_error.po
865
865
  - test/po/fr/plural.po
866
866
  - test/po/fr/test2.po
@@ -868,12 +868,12 @@ files:
868
868
  - test/po/li
869
869
  - test/po/li/plural.po
870
870
  - test/po/ja
871
- - test/po/ja/test6.po
872
871
  - test/po/ja/pgettext.po
873
872
  - test/po/ja/sgettext.po
874
873
  - test/po/ja/nsgettext.po
875
874
  - test/po/ja/plural_error.po
876
875
  - test/po/ja/rubyparser.po
876
+ - test/po/ja/test3.po
877
877
  - test/po/ja/plural.po
878
878
  - test/po/ja/test2.po
879
879
  - test/po/ja/npgettext.po
@@ -902,7 +902,6 @@ files:
902
902
  - test/locale/sl/LC_MESSAGES/plural.mo
903
903
  - test/locale/fr
904
904
  - test/locale/fr/LC_MESSAGES
905
- - test/locale/fr/LC_MESSAGES/test6.mo
906
905
  - test/locale/fr/LC_MESSAGES/plural_error.mo
907
906
  - test/locale/fr/LC_MESSAGES/test2.mo
908
907
  - test/locale/fr/LC_MESSAGES/plural.mo
@@ -912,7 +911,6 @@ files:
912
911
  - test/locale/li/LC_MESSAGES/plural.mo
913
912
  - test/locale/ja
914
913
  - test/locale/ja/LC_MESSAGES
915
- - test/locale/ja/LC_MESSAGES/test6.mo
916
914
  - test/locale/ja/LC_MESSAGES/plural_error.mo
917
915
  - test/locale/ja/LC_MESSAGES/pgettext.mo
918
916
  - test/locale/ja/LC_MESSAGES/test2.mo
@@ -921,6 +919,7 @@ files:
921
919
  - test/locale/ja/LC_MESSAGES/npgettext.mo
922
920
  - test/locale/ja/LC_MESSAGES/rubyparser.mo
923
921
  - test/locale/ja/LC_MESSAGES/nsgettext.mo
922
+ - test/locale/ja/LC_MESSAGES/test3.mo
924
923
  - test/locale/ja/LC_MESSAGES/test1.mo
925
924
  - test/locale/cr
926
925
  - test/locale/cr/LC_MESSAGES
@@ -1,23 +0,0 @@
1
- # SOME DESCRIPTIVE TITLE.
2
- # Copyright (C) YEAR ORGANIZATION
3
- # FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
4
- #
5
- #, fuzzy
6
- msgid ""
7
- msgstr ""
8
- "Project-Id-Version: PACKAGE VERSION\n"
9
- "POT-Creation-Date: 2002-01-01 02:24:56+0900\n"
10
- "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
11
- "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
12
- "Language-Team: LANGUAGE <LL@li.org>\n"
13
- "MIME-Version: 1.0\n"
14
- "Content-Type: text/plain; charset=utf-8\n"
15
- "Content-Transfer-Encoding: ENCODING\n"
16
-
17
- #: testlib1.rb:10
18
- msgid "language"
19
- msgstr "japanese"
20
-
21
- #: testlib1.rb:14
22
- msgid "one is %d."
23
- msgstr "ONE IS %d."