gettext 2.1.0 → 2.2.0
Sign up to get free protection for your applications and to get access to all the features.
- data/README.rdoc +10 -6
- data/Rakefile +15 -66
- data/data/locale/bg/LC_MESSAGES/rgettext.mo +0 -0
- data/data/locale/bs/LC_MESSAGES/rgettext.mo +0 -0
- data/data/locale/ca/LC_MESSAGES/rgettext.mo +0 -0
- data/data/locale/cs/LC_MESSAGES/rgettext.mo +0 -0
- data/data/locale/de/LC_MESSAGES/rgettext.mo +0 -0
- data/data/locale/el/LC_MESSAGES/rgettext.mo +0 -0
- data/data/locale/eo/LC_MESSAGES/rgettext.mo +0 -0
- data/data/locale/es/LC_MESSAGES/rgettext.mo +0 -0
- data/data/locale/et/LC_MESSAGES/rgettext.mo +0 -0
- data/data/locale/fr/LC_MESSAGES/rgettext.mo +0 -0
- data/data/locale/hr/LC_MESSAGES/rgettext.mo +0 -0
- data/data/locale/hu/LC_MESSAGES/rgettext.mo +0 -0
- data/data/locale/it/LC_MESSAGES/rgettext.mo +0 -0
- data/data/locale/ja/LC_MESSAGES/rgettext.mo +0 -0
- data/data/locale/ko/LC_MESSAGES/rgettext.mo +0 -0
- data/data/locale/lv/LC_MESSAGES/rgettext.mo +0 -0
- data/data/locale/nb/LC_MESSAGES/rgettext.mo +0 -0
- data/data/locale/nl/LC_MESSAGES/rgettext.mo +0 -0
- data/data/locale/pt_BR/LC_MESSAGES/rgettext.mo +0 -0
- data/data/locale/ru/LC_MESSAGES/rgettext.mo +0 -0
- data/data/locale/sr/LC_MESSAGES/rgettext.mo +0 -0
- data/data/locale/sv/LC_MESSAGES/rgettext.mo +0 -0
- data/data/locale/uk/LC_MESSAGES/rgettext.mo +0 -0
- data/data/locale/vi/LC_MESSAGES/rgettext.mo +0 -0
- data/data/locale/zh/LC_MESSAGES/rgettext.mo +0 -0
- data/data/locale/zh_TW/LC_MESSAGES/rgettext.mo +0 -0
- data/doc/text/news.md +30 -0
- data/gettext.gemspec +26 -34
- data/lib/gettext.rb +26 -24
- data/lib/gettext/cgi.rb +2 -0
- data/lib/gettext/core_ext/iconv.rb +7 -7
- data/lib/gettext/core_ext/string.rb +8 -6
- data/lib/gettext/parser/erb.rb +2 -0
- data/lib/gettext/parser/glade.rb +2 -0
- data/lib/gettext/parser/ruby.rb +12 -12
- data/lib/gettext/runtime/class_info.rb +5 -3
- data/lib/gettext/runtime/locale_path.rb +20 -22
- data/lib/gettext/runtime/mofile.rb +45 -18
- data/lib/gettext/runtime/textdomain.rb +6 -4
- data/lib/gettext/runtime/textdomain_group.rb +3 -1
- data/lib/gettext/runtime/textdomain_manager.rb +29 -26
- data/lib/gettext/tools.rb +15 -13
- data/lib/gettext/tools/parser/erb.rb +5 -3
- data/lib/gettext/tools/parser/glade.rb +16 -14
- data/lib/gettext/tools/parser/ruby.rb +16 -16
- data/lib/gettext/tools/pomessage.rb +9 -7
- data/lib/gettext/tools/poparser.rb +38 -36
- data/lib/gettext/tools/rgettext.rb +38 -13
- data/lib/gettext/tools/rmsgfmt.rb +7 -5
- data/lib/gettext/tools/rmsgmerge.rb +116 -114
- data/lib/gettext/utils.rb +2 -0
- data/lib/gettext/version.rb +3 -3
- data/po/bg/rgettext.po +17 -12
- data/po/bs/rgettext.po +16 -12
- data/po/ca/rgettext.po +17 -12
- data/po/cs/rgettext.po +16 -12
- data/po/de/rgettext.po +17 -12
- data/po/el/rgettext.po +17 -12
- data/po/eo/rgettext.po +17 -12
- data/po/es/rgettext.po +17 -12
- data/po/et/rgettext.po +17 -12
- data/po/fr/rgettext.po +17 -12
- data/po/hr/rgettext.po +19 -15
- data/po/hu/rgettext.po +17 -12
- data/po/it/rgettext.po +16 -12
- data/po/ja/rgettext.po +21 -15
- data/po/ko/rgettext.po +16 -12
- data/po/lv/rgettext.po +17 -12
- data/po/nb/rgettext.po +17 -12
- data/po/nl/rgettext.po +16 -12
- data/po/pt_BR/rgettext.po +17 -12
- data/po/rgettext.pot +16 -12
- data/po/ru/rgettext.po +17 -12
- data/po/sr/rgettext.po +17 -12
- data/po/sv/rgettext.po +16 -12
- data/po/{ua → uk}/rgettext.po +17 -12
- data/po/vi/rgettext.po +17 -12
- data/po/zh/rgettext.po +17 -12
- data/po/zh_TW/rgettext.po +17 -12
- data/samples/cgi/hellolib.rb +1 -1
- data/samples/cgi/http.rb +5 -5
- data/samples/cgi/locale/{ua → uk}/LC_MESSAGES/helloerb1.mo +0 -0
- data/samples/cgi/locale/{ua → uk}/LC_MESSAGES/helloerb2.mo +0 -0
- data/samples/cgi/locale/{ua → uk}/LC_MESSAGES/hellolib.mo +0 -0
- data/samples/cgi/locale/{ua → uk}/LC_MESSAGES/main.mo +0 -0
- data/samples/cgi/po/{ua → uk}/helloerb1.po +0 -0
- data/samples/cgi/po/{ua → uk}/helloerb2.po +0 -0
- data/samples/cgi/po/{ua → uk}/hellolib.po +0 -0
- data/samples/cgi/po/{ua → uk}/main.po +0 -0
- data/samples/hello.rb +1 -1
- data/samples/hello_gtk2.rb +1 -1
- data/samples/hello_noop.rb +1 -1
- data/samples/locale/{ua → uk}/LC_MESSAGES/hello.mo +0 -0
- data/samples/locale/{ua → uk}/LC_MESSAGES/hello2.mo +0 -0
- data/samples/locale/{ua → uk}/LC_MESSAGES/hello_glade2.mo +0 -0
- data/samples/locale/{ua → uk}/LC_MESSAGES/hello_gtk.mo +0 -0
- data/samples/locale/{ua → uk}/LC_MESSAGES/hello_noop.mo +0 -0
- data/samples/locale/{ua → uk}/LC_MESSAGES/hello_plural.mo +0 -0
- data/samples/locale/{ua → uk}/LC_MESSAGES/hello_tk.mo +0 -0
- data/samples/makemo.rb +2 -0
- data/samples/po/test.rb +2 -0
- data/samples/po/{ua → uk}/hello.po +0 -0
- data/samples/po/{ua → uk}/hello2.po +0 -0
- data/samples/po/{ua → uk}/hello_glade2.po +0 -0
- data/samples/po/{ua → uk}/hello_gtk.po +0 -0
- data/samples/po/{ua → uk}/hello_noop.po +0 -0
- data/samples/po/{ua → uk}/hello_plural.po +0 -0
- data/samples/po/{ua → uk}/hello_tk.po +0 -0
- data/test/Rakefile +1 -1
- data/test/test_class_info.rb +5 -0
- data/test/test_gettext.rb +12 -1
- data/test/test_locale_path.rb +29 -3
- data/test/test_parser.rb +61 -59
- data/test/test_po_generation.rb +3 -1
- data/test/test_pomessage.rb +4 -2
- data/test/test_string.rb +2 -0
- data/test/test_textdomain_bind.rb +2 -0
- data/test/test_textdomain_multi.rb +2 -0
- data/test/test_textdomain_toplevel.rb +2 -0
- data/test/test_thread.rb +4 -2
- data/test/testlib/N_.rb +5 -3
- data/test/testlib/gettext.rb +4 -2
- data/test/testlib/helper.rb +2 -0
- data/test/testlib/multi_textdomain.rb +2 -0
- data/test/testlib/ngettext.rb +10 -8
- data/test/testlib/npgettext.rb +9 -7
- data/test/testlib/nsgettext.rb +4 -2
- data/test/testlib/pgettext.rb +4 -2
- data/test/testlib/sgettext.rb +4 -2
- data/test/testlib/simple.rb +2 -0
- data/test/tools/files/simple_translation.rb +3 -1
- data/test/tools/test_tools.rb +3 -1
- metadata +772 -737
- data/ChangeLog +0 -78
- data/ChangeLog-1 +0 -2016
- data/NEWS-1 +0 -414
- data/benchmark/1.93.0.txt +0 -8
- data/benchmark/2.0.0.txt +0 -8
- data/benchmark/2.0.4.txt +0 -11
- data/benchmark/2.1.0.txt +0 -11
- data/benchmark/benchmark.rb +0 -68
- data/benchmark/test.rb +0 -28
- data/data/locale/ua/LC_MESSAGES/rgettext.mo +0 -0
- data/replace.rb +0 -8
- data/samples/cgi/po/bg/#main.po# +0 -84
- data/test.rb +0 -33
data/lib/gettext/cgi.rb
CHANGED
@@ -18,12 +18,12 @@ begin
|
|
18
18
|
require 'iconv.so'
|
19
19
|
rescue LoadError
|
20
20
|
# Pseudo Iconv class
|
21
|
-
#
|
21
|
+
#
|
22
22
|
# ==== For Matz Ruby:
|
23
|
-
# If you don't have iconv but Ruby/GLib2, this library uses Ruby/GLib2's
|
23
|
+
# If you don't have iconv but Ruby/GLib2, this library uses Ruby/GLib2's
|
24
24
|
# iconv functions.
|
25
25
|
#
|
26
|
-
# Ruby/GLib is a module which is provided from Ruby-GNOME2 Project.
|
26
|
+
# Ruby/GLib is a module which is provided from Ruby-GNOME2 Project.
|
27
27
|
# You can get binaries for Win32(One-Click Ruby Installer).
|
28
28
|
# <URL: http://ruby-gnome2.sourceforge.jp/>
|
29
29
|
# ==== For JRuby:
|
@@ -47,16 +47,16 @@ rescue LoadError
|
|
47
47
|
else
|
48
48
|
begin
|
49
49
|
require 'glib2'
|
50
|
-
|
50
|
+
|
51
51
|
def self.check_glib_version?(major, minor, micro) # :nodoc:
|
52
52
|
(GLib::BINDING_VERSION[0] > major ||
|
53
|
-
(GLib::BINDING_VERSION[0] == major &&
|
53
|
+
(GLib::BINDING_VERSION[0] == major &&
|
54
54
|
GLib::BINDING_VERSION[1] > minor) ||
|
55
|
-
(GLib::BINDING_VERSION[0] == major &&
|
55
|
+
(GLib::BINDING_VERSION[0] == major &&
|
56
56
|
GLib::BINDING_VERSION[1] == minor &&
|
57
57
|
GLib::BINDING_VERSION[2] >= micro))
|
58
58
|
end
|
59
|
-
|
59
|
+
|
60
60
|
if check_glib_version?(0, 11, 0)
|
61
61
|
# This is a function equivalent of Iconv.iconv.
|
62
62
|
# * to: encoding name for destination
|
@@ -1,19 +1,21 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
1
3
|
=begin
|
2
4
|
string.rb - Extension for String.
|
3
5
|
|
4
6
|
Copyright (C) 2005-2009 Masao Mutoh
|
5
|
-
|
7
|
+
|
6
8
|
You may redistribute it and/or modify it under the same
|
7
9
|
license terms as Ruby or LGPL.
|
8
10
|
=end
|
9
11
|
|
10
12
|
# Extension for String class. This feature is included in Ruby 1.9 or later but not occur TypeError.
|
11
13
|
#
|
12
|
-
# String#% method which accept "named argument". The translator can know
|
14
|
+
# String#% method which accept "named argument". The translator can know
|
13
15
|
# the meaning of the msgids using "named argument" instead of %s/%d style.
|
14
16
|
class String
|
15
17
|
|
16
|
-
unless instance_methods.find {|m| m.to_s == 'bytesize'}
|
18
|
+
unless instance_methods.find {|m| m.to_s == 'bytesize'}
|
17
19
|
# For older ruby (such as ruby-1.8.5)
|
18
20
|
alias :bytesize :size
|
19
21
|
end
|
@@ -30,9 +32,9 @@ class String
|
|
30
32
|
# %(arg)
|
31
33
|
# %(hash)
|
32
34
|
#
|
33
|
-
# Format - Uses str as a format specification, and returns the result of applying it to arg.
|
34
|
-
# If the format specification contains more than one substitution, then arg must be
|
35
|
-
# an Array containing the values to be substituted. See Kernel::sprintf for details of the
|
35
|
+
# Format - Uses str as a format specification, and returns the result of applying it to arg.
|
36
|
+
# If the format specification contains more than one substitution, then arg must be
|
37
|
+
# an Array containing the values to be substituted. See Kernel::sprintf for details of the
|
36
38
|
# format string. This is the default behavior of the String class.
|
37
39
|
# * arg: an Array or other class except Hash.
|
38
40
|
# * Returns: formatted String
|
data/lib/gettext/parser/erb.rb
CHANGED
data/lib/gettext/parser/glade.rb
CHANGED
data/lib/gettext/parser/ruby.rb
CHANGED
@@ -5,7 +5,7 @@
|
|
5
5
|
Copyright (C) 2003-2005 Masao Mutoh
|
6
6
|
Copyright (C) 2005 speakillof
|
7
7
|
Copyright (C) 2001,2002 Yasushi Shoji, Masao Mutoh
|
8
|
-
|
8
|
+
|
9
9
|
You may redistribute it and/or modify it under the same
|
10
10
|
license terms as Ruby.
|
11
11
|
|
@@ -22,13 +22,13 @@ class RubyLexX < RubyLex # :nodoc: all
|
|
22
22
|
s = get_readed
|
23
23
|
if RubyToken::TkSTRING === tk
|
24
24
|
def tk.value
|
25
|
-
@value
|
25
|
+
@value
|
26
26
|
end
|
27
|
-
|
27
|
+
|
28
28
|
def tk.value=(s)
|
29
29
|
@value = s
|
30
30
|
end
|
31
|
-
|
31
|
+
|
32
32
|
if @here_header
|
33
33
|
s = s.sub(/\A.*?\n/, '').sub(/^.*\n\Z/, '')
|
34
34
|
else
|
@@ -38,10 +38,10 @@ class RubyLexX < RubyLex # :nodoc: all
|
|
38
38
|
# Do nothing.
|
39
39
|
end
|
40
40
|
end
|
41
|
-
|
41
|
+
|
42
42
|
tk.value = s
|
43
43
|
end
|
44
|
-
|
44
|
+
|
45
45
|
if $DEBUG
|
46
46
|
if tk.is_a? TkSTRING
|
47
47
|
$stderr.puts("#{tk}: #{tk.value}")
|
@@ -51,7 +51,7 @@ class RubyLexX < RubyLex # :nodoc: all
|
|
51
51
|
$stderr.puts(tk)
|
52
52
|
end
|
53
53
|
end
|
54
|
-
|
54
|
+
|
55
55
|
yield tk
|
56
56
|
end
|
57
57
|
return nil
|
@@ -62,7 +62,7 @@ end
|
|
62
62
|
module GetText
|
63
63
|
module RubyParser
|
64
64
|
extend self
|
65
|
-
|
65
|
+
|
66
66
|
unless defined? ID
|
67
67
|
ID = ['gettext', '_', 'N_', 'sgettext', 's_']
|
68
68
|
PLURAL_ID = ['ngettext', 'n_', 'Nn_', 'ns_', 'nsgettext']
|
@@ -154,7 +154,7 @@ module GetText
|
|
154
154
|
def target?(file) # :nodoc:
|
155
155
|
true # always true, as default parser.
|
156
156
|
end
|
157
|
-
end
|
157
|
+
end
|
158
158
|
end
|
159
159
|
|
160
160
|
|
@@ -164,9 +164,9 @@ if __FILE__ == $0
|
|
164
164
|
ARGV.each do |file|
|
165
165
|
pp GetText::RubyParser.parse(file)
|
166
166
|
end
|
167
|
-
|
168
|
-
#rl = RubyLexX.new; rl.set_input(ARGF)
|
167
|
+
|
168
|
+
#rl = RubyLexX.new; rl.set_input(ARGF)
|
169
169
|
#rl.parse do |tk|
|
170
170
|
#p tk
|
171
|
-
#end
|
171
|
+
#end
|
172
172
|
end
|
@@ -1,3 +1,5 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
1
3
|
require 'locale/util/memoizable'
|
2
4
|
|
3
5
|
module GetText
|
@@ -12,7 +14,7 @@ module GetText
|
|
12
14
|
# klass should kind of the class, not object.
|
13
15
|
def normalize_class(klass)
|
14
16
|
ret = (klass.kind_of? Module) ? klass : klass.class
|
15
|
-
if ret.name =~ /^\#<|^$/ or ret == GetText
|
17
|
+
if ret.name =~ /^\#<|^$/ or ret == GetText or ret.name.nil?
|
16
18
|
ret = Object
|
17
19
|
end
|
18
20
|
ret
|
@@ -47,13 +49,13 @@ module GetText
|
|
47
49
|
end
|
48
50
|
|
49
51
|
if all_classes.size > 0
|
50
|
-
(ret & all_classes).uniq
|
52
|
+
(ret & all_classes).uniq
|
51
53
|
else
|
52
54
|
ret.uniq
|
53
55
|
end
|
54
56
|
end
|
55
57
|
|
56
|
-
# Returns the classes which related to klass
|
58
|
+
# Returns the classes which related to klass
|
57
59
|
# (klass's ancestors, included modules and nested modules)
|
58
60
|
def related_classes(klass, all_classes = [])
|
59
61
|
ret = related_classes_internal(klass, all_classes)
|
@@ -1,7 +1,9 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
1
3
|
=begin
|
2
4
|
locale_path.rb - GetText::LocalePath
|
3
5
|
|
4
|
-
Copyright (C) 2001-
|
6
|
+
Copyright (C) 2001-2010 Masao Mutoh
|
5
7
|
|
6
8
|
You may redistribute it and/or modify it under the same
|
7
9
|
license terms as Ruby or LGPL.
|
@@ -17,12 +19,12 @@ module GetText
|
|
17
19
|
include Locale::Util::Memoizable
|
18
20
|
|
19
21
|
# The default locale paths.
|
20
|
-
CONFIG_PREFIX =
|
22
|
+
CONFIG_PREFIX = RbConfig::CONFIG['prefix'].gsub(/\/local/, "")
|
21
23
|
DEFAULT_RULES = [
|
22
24
|
"./locale/%{lang}/LC_MESSAGES/%{name}.mo",
|
23
25
|
"./locale/%{lang}/%{name}.mo",
|
24
|
-
"#{
|
25
|
-
"#{
|
26
|
+
"#{RbConfig::CONFIG['datadir']}/locale/%{lang}/LC_MESSAGES/%{name}.mo",
|
27
|
+
"#{RbConfig::CONFIG['datadir'].gsub(/\/local/, "")}/locale/%{lang}/LC_MESSAGES/%{name}.mo",
|
26
28
|
"#{CONFIG_PREFIX}/share/locale/%{lang}/LC_MESSAGES/%{name}.mo",
|
27
29
|
"#{CONFIG_PREFIX}/local/share/locale/%{lang}/LC_MESSAGES/%{name}.mo"
|
28
30
|
].uniq
|
@@ -37,33 +39,29 @@ module GetText
|
|
37
39
|
def add_default_rule(path)
|
38
40
|
DEFAULT_RULES.unshift(path)
|
39
41
|
end
|
40
|
-
|
41
|
-
# Returns path rules as an Array.
|
42
|
-
# (e.g.) ["/usr/share/locale/%{lang}/LC_MESSAGES/%{name}.mo", ...]
|
43
|
-
def default_path_rules
|
42
|
+
|
43
|
+
# Returns path rules as an Array.
|
44
|
+
# (e.g.) ["/usr/share/locale/%{lang}/LC_MESSAGES/%{name}.mo", ...]
|
45
|
+
def default_path_rules
|
44
46
|
default_path_rules = []
|
45
47
|
|
46
48
|
if ENV["GETTEXT_PATH"]
|
47
|
-
ENV["GETTEXT_PATH"].split(/,/).each {|i|
|
48
|
-
default_path_rules
|
49
|
+
ENV["GETTEXT_PATH"].split(/,/).each {|i|
|
50
|
+
default_path_rules += ["#{i}/%{lang}/LC_MESSAGES/%{name}.mo", "#{i}/%{lang}/%{name}.mo"]
|
49
51
|
}
|
50
52
|
end
|
51
|
-
|
52
53
|
default_path_rules += DEFAULT_RULES
|
53
|
-
|
54
|
-
load_path = $LOAD_PATH
|
55
|
-
if defined? ::Gem
|
56
|
-
load_path += Gem.all_load_paths
|
57
|
-
end
|
54
|
+
|
55
|
+
load_path = $LOAD_PATH.dup
|
58
56
|
load_path.map!{|v| v.match(/(.*?)(\/lib)*?$/); $1}
|
59
57
|
load_path.each {|path|
|
60
58
|
default_path_rules += [
|
61
|
-
"#{path}/data/locale/%{lang}/LC_MESSAGES/%{name}.mo",
|
62
|
-
"#{path}/data/locale/%{lang}/%{name}.mo",
|
59
|
+
"#{path}/data/locale/%{lang}/LC_MESSAGES/%{name}.mo",
|
60
|
+
"#{path}/data/locale/%{lang}/%{name}.mo",
|
63
61
|
"#{path}/locale/%{lang}/%{name}.mo"]
|
64
62
|
}
|
65
63
|
# paths existed only.
|
66
|
-
default_path_rules = default_path_rules.select{|path|
|
64
|
+
default_path_rules = default_path_rules.select{|path|
|
67
65
|
Dir.glob(path % {:lang => "*", :name => "*"}).size > 0}.uniq
|
68
66
|
default_path_rules
|
69
67
|
end
|
@@ -77,7 +75,7 @@ module GetText
|
|
77
75
|
# * topdir: the locale path ("%{topdir}/%{lang}/LC_MESSAGES/%{name}.mo") or nil.
|
78
76
|
def initialize(name, topdir = nil)
|
79
77
|
@name = name
|
80
|
-
|
78
|
+
|
81
79
|
if topdir
|
82
80
|
path_rules = ["#{topdir}/%{lang}/LC_MESSAGES/%{name}.mo", "#{topdir}/%{lang}/%{name}.mo"]
|
83
81
|
else
|
@@ -89,7 +87,7 @@ module GetText
|
|
89
87
|
this_path_rules = rule % {:lang => "([^\/]+)", :name => name}
|
90
88
|
Dir.glob(rule %{:lang => "*", :name => name}).each do |path|
|
91
89
|
if /#{this_path_rules}/ =~ path
|
92
|
-
@locale_paths[$1] = path unless @locale_paths[$1]
|
90
|
+
@locale_paths[$1] = path.untaint unless @locale_paths[$1]
|
93
91
|
end
|
94
92
|
end
|
95
93
|
end
|
@@ -117,6 +115,6 @@ module GetText
|
|
117
115
|
nil
|
118
116
|
end
|
119
117
|
memoize :current_path
|
120
|
-
|
118
|
+
|
121
119
|
end
|
122
120
|
end
|
@@ -1,6 +1,9 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
1
3
|
=begin
|
2
4
|
mofile.rb - A simple class for operating GNU MO file.
|
3
5
|
|
6
|
+
Copyright (C) 2012 Kouhei Sutou <kou@clear-code.com>
|
4
7
|
Copyright (C) 2003-2009 Masao Mutoh
|
5
8
|
Copyright (C) 2002 Masahiro Sakai, Masao Mutoh
|
6
9
|
Copyright (C) 2001 Masahiro Sakai
|
@@ -14,11 +17,10 @@
|
|
14
17
|
|
15
18
|
=end
|
16
19
|
|
17
|
-
require 'gettext/core_ext/iconv'
|
18
20
|
require 'stringio'
|
19
21
|
|
20
22
|
module GetText
|
21
|
-
class MOFile < Hash
|
23
|
+
class MOFile < Hash
|
22
24
|
class InvalidFormat < RuntimeError; end;
|
23
25
|
|
24
26
|
attr_reader :filename
|
@@ -31,7 +33,7 @@ module GetText
|
|
31
33
|
:hash_table_size,
|
32
34
|
:hash_table_offset)
|
33
35
|
|
34
|
-
# The following are only used in .mo files
|
36
|
+
# The following are only used in .mo files
|
35
37
|
# with minor revision >= 1.
|
36
38
|
class HeaderRev1 < Header
|
37
39
|
attr_accessor :n_sysdep_segments,
|
@@ -43,6 +45,10 @@ module GetText
|
|
43
45
|
|
44
46
|
MAGIC_BIG_ENDIAN = "\x95\x04\x12\xde"
|
45
47
|
MAGIC_LITTLE_ENDIAN = "\xde\x12\x04\x95"
|
48
|
+
if "".respond_to?(:force_encoding)
|
49
|
+
MAGIC_BIG_ENDIAN.force_encoding("ASCII-8BIT")
|
50
|
+
MAGIC_LITTLE_ENDIAN.force_encoding("ASCII-8BIT")
|
51
|
+
end
|
46
52
|
|
47
53
|
def self.open(arg = nil, output_charset = nil)
|
48
54
|
result = self.new(output_charset)
|
@@ -145,17 +151,8 @@ module GetText
|
|
145
151
|
@plural = "0" unless @plural
|
146
152
|
end
|
147
153
|
else
|
148
|
-
if @output_charset
|
149
|
-
|
150
|
-
str = Iconv.conv(@output_charset, @charset, str) if @charset
|
151
|
-
rescue Iconv::Failure
|
152
|
-
if $DEBUG
|
153
|
-
warn "@charset = ", @charset
|
154
|
-
warn"@output_charset = ", @output_charset
|
155
|
-
warn "msgid = ", original_strings[i]
|
156
|
-
warn "msgstr = ", str
|
157
|
-
end
|
158
|
-
end
|
154
|
+
if @charset and @output_charset
|
155
|
+
str = convert_encoding(str, original_strings[i])
|
159
156
|
end
|
160
157
|
end
|
161
158
|
self[original_strings[i]] = str.freeze
|
@@ -186,7 +183,7 @@ module GetText
|
|
186
183
|
# From gettext-0.12.1/gettext-runtime/intl/hash-string.h
|
187
184
|
# Defines the so called `hashpjw' function by P.J. Weinberger
|
188
185
|
# [see Aho/Sethi/Ullman, COMPILERS: Principles, Techniques and Tools,
|
189
|
-
# 1986, 1987 Bell Telephone Laboratories, Inc.]
|
186
|
+
# 1986, 1987 Bell Telephone Laboratories, Inc.]
|
190
187
|
def hash_string(str)
|
191
188
|
hval = 0
|
192
189
|
i = 0
|
@@ -208,7 +205,7 @@ module GetText
|
|
208
205
|
header_size = 4 * 7
|
209
206
|
table_size = 4 * 2 * size
|
210
207
|
|
211
|
-
hash_table_size = next_prime((size * 4) / 3)
|
208
|
+
hash_table_size = next_prime((size * 4) / 3)
|
212
209
|
hash_table_size = 3 if hash_table_size <= 2
|
213
210
|
header = Header.new(
|
214
211
|
MAGIC_LITTLE_ENDIAN, # magic
|
@@ -302,8 +299,38 @@ module GetText
|
|
302
299
|
|
303
300
|
attr_accessor :little_endian, :path, :last_modified
|
304
301
|
attr_reader :charset, :nplurals, :plural
|
305
|
-
end
|
306
302
|
|
303
|
+
private
|
304
|
+
if "".respond_to?(:encode)
|
305
|
+
def convert_encoding(string, original_string)
|
306
|
+
begin
|
307
|
+
string.encode(@output_charset, @charset)
|
308
|
+
rescue EncodingError
|
309
|
+
if $DEBUG
|
310
|
+
warn "@charset = ", @charset
|
311
|
+
warn "@output_charset = ", @output_charset
|
312
|
+
warn "msgid = ", original_string
|
313
|
+
warn "msgstr = ", string
|
314
|
+
end
|
315
|
+
string
|
316
|
+
end
|
317
|
+
end
|
318
|
+
else
|
319
|
+
require 'gettext/core_ext/iconv'
|
320
|
+
def convert_encoding(string, original_string)
|
321
|
+
begin
|
322
|
+
Iconv.conv(@output_charset, @charset, string)
|
323
|
+
rescue Iconv::Failure
|
324
|
+
if $DEBUG
|
325
|
+
warn "@charset = ", @charset
|
326
|
+
warn "@output_charset = ", @output_charset
|
327
|
+
warn "msgid = ", original_string
|
328
|
+
warn "msgstr = ", str
|
329
|
+
end
|
330
|
+
end
|
331
|
+
end
|
332
|
+
end
|
333
|
+
end
|
307
334
|
end
|
308
335
|
|
309
336
|
# Test
|
@@ -313,7 +340,7 @@ if $0 == __FILE__
|
|
313
340
|
STDERR.puts("mo.rb [filename.mo ...]")
|
314
341
|
exit
|
315
342
|
end
|
316
|
-
|
343
|
+
|
317
344
|
ARGV.each{ |item|
|
318
345
|
mo = GetText::MOFile.open(item)
|
319
346
|
puts "------------------------------------------------------------------"
|
@@ -1,3 +1,5 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
1
3
|
=begin
|
2
4
|
textdomain.rb - GetText::Textdomain
|
3
5
|
|
@@ -60,7 +62,7 @@ module GetText
|
|
60
62
|
@locale_path = LocalePath.new(@name, topdir)
|
61
63
|
@mofiles = {}
|
62
64
|
end
|
63
|
-
|
65
|
+
|
64
66
|
# Translates the translated string.
|
65
67
|
# * lang: Locale::Tag::Simple's subclass.
|
66
68
|
# * msgid: the original message.
|
@@ -77,7 +79,7 @@ module GetText
|
|
77
79
|
unless mofile
|
78
80
|
mofile = load_mo(lang)
|
79
81
|
end
|
80
|
-
|
82
|
+
|
81
83
|
if (! mofile) or (mofile ==:empty)
|
82
84
|
return nil
|
83
85
|
end
|
@@ -89,7 +91,7 @@ module GetText
|
|
89
91
|
# Check "aaa\000bbb" and show warning but return the singluar part.
|
90
92
|
ret = nil
|
91
93
|
msgid_single = msgid.split("\000")[0]
|
92
|
-
mofile.each{|key, val|
|
94
|
+
mofile.each{|key, val|
|
93
95
|
if key =~ /^#{Regexp.quote(msgid_single)}\000/
|
94
96
|
# Usually, this is not caused to make po-files from rgettext.
|
95
97
|
warn %Q[Warning: n_("#{msgid_single}", "#{msgid.split("\000")[1]}") and n_("#{key.gsub(/\000/, '", "')}") are duplicated.]
|
@@ -100,7 +102,7 @@ module GetText
|
|
100
102
|
ret
|
101
103
|
else
|
102
104
|
ret = nil
|
103
|
-
mofile.each{|key, val|
|
105
|
+
mofile.each{|key, val|
|
104
106
|
if key =~ /^#{Regexp.quote(msgid)}\000/
|
105
107
|
ret = val.split("\000")[0]
|
106
108
|
break
|