fair-gettext 2.0.0
Sign up to get free protection for your applications and to get access to all the features.
- data/ChangeLog +78 -0
- data/README.rdoc +245 -0
- data/Rakefile +234 -0
- data/bin/rgettext +23 -0
- data/bin/rmsgfmt +22 -0
- data/bin/rmsgmerge +22 -0
- data/gettext.gemspec +40 -0
- data/lib/gettext/cgi.rb +37 -0
- data/lib/gettext/core_ext/iconv.rb +110 -0
- data/lib/gettext/core_ext/string.rb +84 -0
- data/lib/gettext/parser/erb.rb +3 -0
- data/lib/gettext/parser/glade.rb +3 -0
- data/lib/gettext/parser/ruby.rb +172 -0
- data/lib/gettext/tools/rgettext.rb +248 -0
- data/lib/gettext/tools/rmsgfmt.rb +84 -0
- data/lib/gettext/tools/rmsgmerge.rb +498 -0
- data/lib/gettext/tools.rb +202 -0
- data/lib/gettext/utils.rb +37 -0
- data/lib/gettext/version.rb +12 -0
- data/lib/gettext.rb +310 -0
- data/po/bg/rgettext.po +134 -0
- data/po/bs/rgettext.po +135 -0
- data/po/ca/rgettext.po +133 -0
- data/po/cs/rgettext.po +136 -0
- data/po/de/rgettext.po +141 -0
- data/po/el/rgettext.po +132 -0
- data/po/eo/rgettext.po +133 -0
- data/po/es/rgettext.po +134 -0
- data/po/et/rgettext.po +131 -0
- data/po/fr/rgettext.po +137 -0
- data/po/hr/rgettext.po +135 -0
- data/po/hu/rgettext.po +133 -0
- data/po/it/rgettext.po +134 -0
- data/po/ja/rgettext.po +134 -0
- data/po/ko/rgettext.po +133 -0
- data/po/lv/rgettext.po +134 -0
- data/po/nb/rgettext.po +135 -0
- data/po/nl/rgettext.po +134 -0
- data/po/pt_BR/rgettext.po +136 -0
- data/po/rgettext.pot +125 -0
- data/po/ru/rgettext.po +135 -0
- data/po/sr/rgettext.po +134 -0
- data/po/sv/rgettext.po +127 -0
- data/po/ua/rgettext.po +138 -0
- data/po/vi/rgettext.po +132 -0
- data/po/zh/rgettext.po +133 -0
- data/po/zh_TW/rgettext.po +132 -0
- data/samples/README +16 -0
- data/samples/cgi/README +43 -0
- data/samples/cgi/Rakefile +27 -0
- data/samples/cgi/cookie.cgi +64 -0
- data/samples/cgi/gettext.css +116 -0
- data/samples/cgi/helloerb.rhtml +28 -0
- data/samples/cgi/helloerb1.cgi +58 -0
- data/samples/cgi/helloerb2.cgi +51 -0
- data/samples/cgi/hellolib.rb +18 -0
- data/samples/cgi/http.rb +49 -0
- data/samples/cgi/index.cgi +111 -0
- data/samples/cgi/other.rhtml +20 -0
- data/samples/cgi/po/bg/helloerb1.po +59 -0
- data/samples/cgi/po/bg/helloerb2.po +51 -0
- data/samples/cgi/po/bg/hellolib.po +23 -0
- data/samples/cgi/po/bg/main.po +83 -0
- data/samples/cgi/po/bs/helloerb1.po +59 -0
- data/samples/cgi/po/bs/helloerb2.po +51 -0
- data/samples/cgi/po/bs/hellolib.po +23 -0
- data/samples/cgi/po/bs/main.po +83 -0
- data/samples/cgi/po/ca/helloerb1.po +59 -0
- data/samples/cgi/po/ca/helloerb2.po +51 -0
- data/samples/cgi/po/ca/hellolib.po +23 -0
- data/samples/cgi/po/ca/main.po +83 -0
- data/samples/cgi/po/cs/helloerb1.po +61 -0
- data/samples/cgi/po/cs/helloerb2.po +52 -0
- data/samples/cgi/po/cs/hellolib.po +25 -0
- data/samples/cgi/po/cs/main.po +85 -0
- data/samples/cgi/po/de/helloerb1.po +61 -0
- data/samples/cgi/po/de/helloerb2.po +52 -0
- data/samples/cgi/po/de/hellolib.po +24 -0
- data/samples/cgi/po/de/main.po +86 -0
- data/samples/cgi/po/el/helloerb1.po +60 -0
- data/samples/cgi/po/el/helloerb2.po +51 -0
- data/samples/cgi/po/el/hellolib.po +23 -0
- data/samples/cgi/po/el/main.po +84 -0
- data/samples/cgi/po/eo/helloerb1.po +60 -0
- data/samples/cgi/po/eo/helloerb2.po +52 -0
- data/samples/cgi/po/eo/hellolib.po +24 -0
- data/samples/cgi/po/eo/main.po +84 -0
- data/samples/cgi/po/es/helloerb1.po +59 -0
- data/samples/cgi/po/es/helloerb2.po +50 -0
- data/samples/cgi/po/es/hellolib.po +22 -0
- data/samples/cgi/po/es/main.po +83 -0
- data/samples/cgi/po/fr/helloerb1.po +59 -0
- data/samples/cgi/po/fr/helloerb2.po +51 -0
- data/samples/cgi/po/fr/hellolib.po +22 -0
- data/samples/cgi/po/fr/main.po +85 -0
- data/samples/cgi/po/helloerb1.pot +60 -0
- data/samples/cgi/po/helloerb2.pot +52 -0
- data/samples/cgi/po/hellolib.pot +24 -0
- data/samples/cgi/po/hr/helloerb1.po +59 -0
- data/samples/cgi/po/hr/helloerb2.po +51 -0
- data/samples/cgi/po/hr/hellolib.po +23 -0
- data/samples/cgi/po/hr/main.po +83 -0
- data/samples/cgi/po/hu/helloerb1.po +59 -0
- data/samples/cgi/po/hu/helloerb2.po +51 -0
- data/samples/cgi/po/hu/hellolib.po +23 -0
- data/samples/cgi/po/hu/main.po +82 -0
- data/samples/cgi/po/it/helloerb1.po +60 -0
- data/samples/cgi/po/it/helloerb2.po +52 -0
- data/samples/cgi/po/it/hellolib.po +24 -0
- data/samples/cgi/po/it/main.po +84 -0
- data/samples/cgi/po/ja/helloerb1.po +60 -0
- data/samples/cgi/po/ja/helloerb2.po +52 -0
- data/samples/cgi/po/ja/hellolib.po +24 -0
- data/samples/cgi/po/ja/main.po +85 -0
- data/samples/cgi/po/ko/helloerb1.po +59 -0
- data/samples/cgi/po/ko/helloerb2.po +51 -0
- data/samples/cgi/po/ko/hellolib.po +23 -0
- data/samples/cgi/po/ko/main.po +84 -0
- data/samples/cgi/po/lv/helloerb1.po +65 -0
- data/samples/cgi/po/lv/helloerb2.po +52 -0
- data/samples/cgi/po/lv/hellolib.po +24 -0
- data/samples/cgi/po/lv/main.po +77 -0
- data/samples/cgi/po/main.pot +80 -0
- data/samples/cgi/po/nb/helloerb1.po +60 -0
- data/samples/cgi/po/nb/helloerb2.po +52 -0
- data/samples/cgi/po/nb/hellolib.po +24 -0
- data/samples/cgi/po/nb/main.po +84 -0
- data/samples/cgi/po/nl/helloerb1.po +61 -0
- data/samples/cgi/po/nl/helloerb2.po +52 -0
- data/samples/cgi/po/nl/hellolib.po +24 -0
- data/samples/cgi/po/nl/main.po +86 -0
- data/samples/cgi/po/pt_BR/helloerb1.po +59 -0
- data/samples/cgi/po/pt_BR/helloerb2.po +51 -0
- data/samples/cgi/po/pt_BR/hellolib.po +23 -0
- data/samples/cgi/po/pt_BR/main.po +84 -0
- data/samples/cgi/po/ru/helloerb1.po +58 -0
- data/samples/cgi/po/ru/helloerb2.po +50 -0
- data/samples/cgi/po/ru/hellolib.po +22 -0
- data/samples/cgi/po/ru/main.po +82 -0
- data/samples/cgi/po/sr/helloerb1.po +60 -0
- data/samples/cgi/po/sr/helloerb2.po +52 -0
- data/samples/cgi/po/sr/hellolib.po +24 -0
- data/samples/cgi/po/sr/main.po +80 -0
- data/samples/cgi/po/ua/helloerb1.po +62 -0
- data/samples/cgi/po/ua/helloerb2.po +54 -0
- data/samples/cgi/po/ua/hellolib.po +26 -0
- data/samples/cgi/po/ua/main.po +84 -0
- data/samples/cgi/po/vi/helloerb1.po +65 -0
- data/samples/cgi/po/vi/helloerb2.po +52 -0
- data/samples/cgi/po/vi/hellolib.po +24 -0
- data/samples/cgi/po/vi/main.po +77 -0
- data/samples/cgi/po/zh/helloerb1.po +60 -0
- data/samples/cgi/po/zh/helloerb2.po +52 -0
- data/samples/cgi/po/zh/hellolib.po +24 -0
- data/samples/cgi/po/zh/main.po +80 -0
- data/samples/cgi/po/zh_TW/helloerb1.po +67 -0
- data/samples/cgi/po/zh_TW/helloerb2.po +54 -0
- data/samples/cgi/po/zh_TW/hellolib.po +26 -0
- data/samples/cgi/po/zh_TW/main.po +79 -0
- data/samples/hello.rb +36 -0
- data/samples/hello2.rb +23 -0
- data/samples/hello_glade2.glade +70 -0
- data/samples/hello_glade2.rb +25 -0
- data/samples/hello_gtk2.rb +27 -0
- data/samples/hello_noop.rb +31 -0
- data/samples/hello_plural.rb +26 -0
- data/samples/hello_tk.rb +19 -0
- data/samples/makemo.rb +4 -0
- data/samples/po/bg/hello.po +24 -0
- data/samples/po/bg/hello2.po +31 -0
- data/samples/po/bg/hello_glade2.po +31 -0
- data/samples/po/bg/hello_gtk.po +23 -0
- data/samples/po/bg/hello_noop.po +27 -0
- data/samples/po/bg/hello_plural.po +25 -0
- data/samples/po/bg/hello_tk.po +23 -0
- data/samples/po/bs/hello.po +23 -0
- data/samples/po/bs/hello2.po +31 -0
- data/samples/po/bs/hello_glade2.po +31 -0
- data/samples/po/bs/hello_gtk.po +23 -0
- data/samples/po/bs/hello_noop.po +27 -0
- data/samples/po/bs/hello_plural.po +26 -0
- data/samples/po/bs/hello_tk.po +23 -0
- data/samples/po/ca/hello.po +23 -0
- data/samples/po/ca/hello2.po +31 -0
- data/samples/po/ca/hello_glade2.po +31 -0
- data/samples/po/ca/hello_gtk.po +23 -0
- data/samples/po/ca/hello_noop.po +27 -0
- data/samples/po/ca/hello_plural.po +25 -0
- data/samples/po/ca/hello_tk.po +23 -0
- data/samples/po/cs/hello.po +23 -0
- data/samples/po/cs/hello2.po +31 -0
- data/samples/po/cs/hello_glade2.po +37 -0
- data/samples/po/cs/hello_gtk.po +23 -0
- data/samples/po/cs/hello_noop.po +27 -0
- data/samples/po/cs/hello_plural.po +26 -0
- data/samples/po/cs/hello_tk.po +23 -0
- data/samples/po/de/hello.po +20 -0
- data/samples/po/de/hello2.po +28 -0
- data/samples/po/de/hello_glade2.po +27 -0
- data/samples/po/de/hello_gtk.po +20 -0
- data/samples/po/de/hello_noop.po +24 -0
- data/samples/po/de/hello_plural.po +25 -0
- data/samples/po/de/hello_tk.po +20 -0
- data/samples/po/el/hello.po +23 -0
- data/samples/po/el/hello2.po +31 -0
- data/samples/po/el/hello_glade2.po +31 -0
- data/samples/po/el/hello_gtk.po +22 -0
- data/samples/po/el/hello_noop.po +27 -0
- data/samples/po/el/hello_plural.po +25 -0
- data/samples/po/el/hello_tk.po +23 -0
- data/samples/po/eo/hello.po +23 -0
- data/samples/po/eo/hello2.po +31 -0
- data/samples/po/eo/hello_glade2.po +32 -0
- data/samples/po/eo/hello_gtk.po +23 -0
- data/samples/po/eo/hello_noop.po +27 -0
- data/samples/po/eo/hello_plural.po +26 -0
- data/samples/po/eo/hello_tk.po +24 -0
- data/samples/po/es/hello.po +21 -0
- data/samples/po/es/hello2.po +28 -0
- data/samples/po/es/hello_glade2.po +28 -0
- data/samples/po/es/hello_gtk.po +20 -0
- data/samples/po/es/hello_noop.po +24 -0
- data/samples/po/es/hello_plural.po +23 -0
- data/samples/po/es/hello_tk.po +20 -0
- data/samples/po/fr/hello.po +18 -0
- data/samples/po/fr/hello2.po +26 -0
- data/samples/po/fr/hello_glade2.po +27 -0
- data/samples/po/fr/hello_gtk.po +18 -0
- data/samples/po/fr/hello_noop.po +22 -0
- data/samples/po/fr/hello_plural.po +21 -0
- data/samples/po/fr/hello_tk.po +18 -0
- data/samples/po/hello.pot +23 -0
- data/samples/po/hello2.pot +31 -0
- data/samples/po/hello_glade2.pot +32 -0
- data/samples/po/hello_gtk.pot +23 -0
- data/samples/po/hello_noop.pot +27 -0
- data/samples/po/hello_plural.pot +26 -0
- data/samples/po/hello_tk.pot +24 -0
- data/samples/po/hr/hello.po +23 -0
- data/samples/po/hr/hello2.po +31 -0
- data/samples/po/hr/hello_glade2.po +31 -0
- data/samples/po/hr/hello_gtk.po +23 -0
- data/samples/po/hr/hello_noop.po +27 -0
- data/samples/po/hr/hello_plural.po +26 -0
- data/samples/po/hr/hello_tk.po +23 -0
- data/samples/po/hu/hello.po +22 -0
- data/samples/po/hu/hello2.po +30 -0
- data/samples/po/hu/hello_glade2.po +31 -0
- data/samples/po/hu/hello_gtk.po +22 -0
- data/samples/po/hu/hello_noop.po +26 -0
- data/samples/po/hu/hello_plural.po +25 -0
- data/samples/po/hu/hello_tk.po +23 -0
- data/samples/po/it/hello.po +20 -0
- data/samples/po/it/hello2.po +28 -0
- data/samples/po/it/hello_glade2.po +28 -0
- data/samples/po/it/hello_gtk.po +21 -0
- data/samples/po/it/hello_noop.po +24 -0
- data/samples/po/it/hello_plural.po +23 -0
- data/samples/po/it/hello_tk.po +21 -0
- data/samples/po/ja/hello.po +20 -0
- data/samples/po/ja/hello2.po +28 -0
- data/samples/po/ja/hello_glade2.po +26 -0
- data/samples/po/ja/hello_gtk.po +19 -0
- data/samples/po/ja/hello_noop.po +23 -0
- data/samples/po/ja/hello_plural.po +21 -0
- data/samples/po/ja/hello_tk.po +19 -0
- data/samples/po/ko/hello.po +18 -0
- data/samples/po/ko/hello2.po +26 -0
- data/samples/po/ko/hello_glade2.po +29 -0
- data/samples/po/ko/hello_gtk.po +18 -0
- data/samples/po/ko/hello_noop.po +22 -0
- data/samples/po/ko/hello_plural.po +25 -0
- data/samples/po/ko/hello_tk.po +19 -0
- data/samples/po/lv/hello.po +24 -0
- data/samples/po/lv/hello2.po +32 -0
- data/samples/po/lv/hello_glade2.po +38 -0
- data/samples/po/lv/hello_gtk.po +24 -0
- data/samples/po/lv/hello_noop.po +28 -0
- data/samples/po/lv/hello_plural.po +26 -0
- data/samples/po/lv/hello_tk.po +24 -0
- data/samples/po/nb/hello.po +23 -0
- data/samples/po/nb/hello2.po +31 -0
- data/samples/po/nb/hello_glade2.po +31 -0
- data/samples/po/nb/hello_gtk.po +23 -0
- data/samples/po/nb/hello_noop.po +27 -0
- data/samples/po/nb/hello_plural.po +26 -0
- data/samples/po/nb/hello_tk.po +24 -0
- data/samples/po/nl/hello.po +24 -0
- data/samples/po/nl/hello2.po +32 -0
- data/samples/po/nl/hello_glade2.po +31 -0
- data/samples/po/nl/hello_gtk.po +24 -0
- data/samples/po/nl/hello_noop.po +28 -0
- data/samples/po/nl/hello_plural.po +25 -0
- data/samples/po/nl/hello_tk.po +24 -0
- data/samples/po/pt_BR/hello.po +21 -0
- data/samples/po/pt_BR/hello2.po +29 -0
- data/samples/po/pt_BR/hello_glade2.po +29 -0
- data/samples/po/pt_BR/hello_gtk.po +21 -0
- data/samples/po/pt_BR/hello_noop.po +25 -0
- data/samples/po/pt_BR/hello_plural.po +23 -0
- data/samples/po/pt_BR/hello_tk.po +21 -0
- data/samples/po/ru/hello.po +22 -0
- data/samples/po/ru/hello2.po +30 -0
- data/samples/po/ru/hello_glade2.po +30 -0
- data/samples/po/ru/hello_gtk.po +22 -0
- data/samples/po/ru/hello_noop.po +26 -0
- data/samples/po/ru/hello_plural.po +28 -0
- data/samples/po/ru/hello_tk.po +22 -0
- data/samples/po/sr/hello.po +22 -0
- data/samples/po/sr/hello2.po +30 -0
- data/samples/po/sr/hello_glade2.po +32 -0
- data/samples/po/sr/hello_gtk.po +22 -0
- data/samples/po/sr/hello_noop.po +26 -0
- data/samples/po/sr/hello_plural.po +26 -0
- data/samples/po/sr/hello_tk.po +24 -0
- data/samples/po/sv/hello.po +20 -0
- data/samples/po/sv/hello2.po +28 -0
- data/samples/po/sv/hello_glade2.po +28 -0
- data/samples/po/sv/hello_gtk.po +20 -0
- data/samples/po/sv/hello_noop.po +24 -0
- data/samples/po/sv/hello_plural.po +23 -0
- data/samples/po/sv/hello_tk.po +20 -0
- data/samples/po/test.rb +11 -0
- data/samples/po/ua/hello.po +22 -0
- data/samples/po/ua/hello2.po +30 -0
- data/samples/po/ua/hello_glade2.po +34 -0
- data/samples/po/ua/hello_gtk.po +22 -0
- data/samples/po/ua/hello_noop.po +26 -0
- data/samples/po/ua/hello_plural.po +29 -0
- data/samples/po/ua/hello_tk.po +26 -0
- data/samples/po/vi/hello.po +23 -0
- data/samples/po/vi/hello2.po +31 -0
- data/samples/po/vi/hello_glade2.po +38 -0
- data/samples/po/vi/hello_gtk.po +23 -0
- data/samples/po/vi/hello_noop.po +27 -0
- data/samples/po/vi/hello_plural.po +26 -0
- data/samples/po/vi/hello_tk.po +24 -0
- data/samples/po/zh/hello.po +23 -0
- data/samples/po/zh/hello2.po +31 -0
- data/samples/po/zh/hello_glade2.po +31 -0
- data/samples/po/zh/hello_gtk.po +23 -0
- data/samples/po/zh/hello_noop.po +27 -0
- data/samples/po/zh/hello_plural.po +25 -0
- data/samples/po/zh/hello_tk.po +23 -0
- data/samples/po/zh_TW/hello.po +26 -0
- data/samples/po/zh_TW/hello2.po +34 -0
- data/samples/po/zh_TW/hello_glade2.po +40 -0
- data/samples/po/zh_TW/hello_gtk.po +25 -0
- data/samples/po/zh_TW/hello_noop.po +30 -0
- data/samples/po/zh_TW/hello_plural.po +28 -0
- data/samples/po/zh_TW/hello_tk.po +26 -0
- data/src/poparser.ry +217 -0
- data/test/README +1 -0
- data/test/Rakefile +17 -0
- data/test/po/cr/plural.po +23 -0
- data/test/po/da/plural.po +22 -0
- data/test/po/da/plural_error.po +22 -0
- data/test/po/fr/plural.po +28 -0
- data/test/po/fr/plural_error.po +20 -0
- data/test/po/fr/test1.po +23 -0
- data/test/po/fr/test2.po +19 -0
- data/test/po/ir/plural.po +23 -0
- data/test/po/ja/npgettext.po +46 -0
- data/test/po/ja/nsgettext.po +65 -0
- data/test/po/ja/pgettext.po +41 -0
- data/test/po/ja/plural.po +28 -0
- data/test/po/ja/plural_error.po +20 -0
- data/test/po/ja/rubyparser.po +43 -0
- data/test/po/ja/sgettext.po +47 -0
- data/test/po/ja/test1.po +23 -0
- data/test/po/ja/test2.po +19 -0
- data/test/po/la/plural.po +23 -0
- data/test/po/la/plural_error.po +21 -0
- data/test/po/li/plural.po +23 -0
- data/test/po/po/plural.po +23 -0
- data/test/po/sl/plural.po +24 -0
- data/test/test_class_info.rb +83 -0
- data/test/test_gettext.rb +311 -0
- data/test/test_parser.rb +158 -0
- data/test/test_string.rb +65 -0
- data/test/test_textdomain_multi.rb +80 -0
- data/test/test_textdomain_toplevel.rb +42 -0
- data/test/testlib/N_.rb +66 -0
- data/test/testlib/erb.rhtml +15 -0
- data/test/testlib/erb.rxml +16 -0
- data/test/testlib/gettext.rb +113 -0
- data/test/testlib/gladeparser.glade +183 -0
- data/test/testlib/helper.rb +11 -0
- data/test/testlib/multi_textdomain.rb +131 -0
- data/test/testlib/ngettext.rb +79 -0
- data/test/testlib/npgettext.rb +31 -0
- data/test/testlib/nsgettext.rb +42 -0
- data/test/testlib/pgettext.rb +36 -0
- data/test/testlib/sgettext.rb +46 -0
- data/test/testlib/simple.rb +14 -0
- metadata +496 -0
data/gettext.gemspec
ADDED
@@ -0,0 +1,40 @@
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
2
|
+
|
3
|
+
Gem::Specification.new do |s|
|
4
|
+
s.name = %q{fair-gettext}
|
5
|
+
s.version = "2.0.0"
|
6
|
+
|
7
|
+
s.required_rubygems_version = Gem::Requirement.new(">= 1.2") if s.respond_to? :required_rubygems_version=
|
8
|
+
s.authors = ["Masao Mutoh"]
|
9
|
+
s.date = %q{2009-02-06}
|
10
|
+
s.description = %q{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.}
|
11
|
+
s.email = %q{mutomasa at gmail.com}
|
12
|
+
s.executables = ["rgettext", "rmsgmerge", "rmsgfmt"]
|
13
|
+
s.extra_rdoc_files = ["lib/gettext.rb", "lib/gettext/tools.rb", "lib/gettext/core_ext/string.rb", "lib/gettext/version.rb", "README.rdoc"]
|
14
|
+
s.files = ["po/hr/rgettext.po", "po/cs/rgettext.po",
|
15
|
+
"po/el/rgettext.po", "po/bs/rgettext.po", "po/et/rgettext.po", "po/vi/rgettext.po", "po/pt_BR/rgettext.po", "po/nb/rgettext.po", "po/ko/rgettext.po", "po/lv/rgettext.po", "po/ru/rgettext.po", "po/zh_TW/rgettext.po", "po/rgettext.pot", "po/ca/rgettext.po", "po/de/rgettext.po", "po/es/rgettext.po", "po/eo/rgettext.po", "po/nl/rgettext.po", "po/sr/rgettext.po", "po/hu/rgettext.po", "po/zh/rgettext.po", "po/ja/rgettext.po", "po/bg/rgettext.po", "po/ua/rgettext.po", "po/fr/rgettext.po", "po/sv/rgettext.po", "po/it/rgettext.po", "lib/gettext.rb", "lib/gettext/cgi.rb", "lib/gettext/utils.rb", "lib/gettext/tools.rb", "lib/gettext/core_ext/iconv.rb", "lib/gettext/core_ext/string.rb", "lib/gettext/version.rb", "lib/gettext/parser/glade.rb", "lib/gettext/parser/erb.rb", "lib/gettext/parser/ruby.rb", "lib/gettext/tools/rgettext.rb", "lib/gettext/tools/rmsgmerge.rb", "lib/gettext/tools/rmsgfmt.rb", "test/po/po/plural.po", "test/po/cr/plural.po", "test/po/sl/plural.po", "test/po/li/plural.po", "test/po/ir/plural.po", "test/po/ja/sgettext.po", "test/po/ja/test2.po", "test/po/ja/pgettext.po", "test/po/ja/test1.po", "test/po/ja/nsgettext.po", "test/po/ja/plural_error.po", "test/po/ja/plural.po", "test/po/ja/rubyparser.po", "test/po/ja/npgettext.po", "test/po/fr/test2.po", "test/po/fr/test1.po", "test/po/fr/plural_error.po", "test/po/fr/plural.po", "test/po/la/plural_error.po", "test/po/la/plural.po", "test/po/da/plural_error.po", "test/po/da/plural.po", "test/test_textdomain_toplevel.rb", "test/test_gettext.rb", "test/test_parser.rb", "test/README", "test/test_string.rb", "test/Rakefile", "test/test_class_info.rb", "test/test_textdomain_multi.rb", "test/testlib/simple.rb", "test/testlib/gettext.rb", "test/testlib/gladeparser.glade", "test/testlib/npgettext.rb", "test/testlib/multi_textdomain.rb", "test/testlib/erb.rhtml", "test/testlib/nsgettext.rb", "test/testlib/erb.rxml", "test/testlib/pgettext.rb", "test/testlib/helper.rb", "test/testlib/N_.rb", "test/testlib/ngettext.rb", "test/testlib/sgettext.rb", "bin/rgettext", "bin/rmsgmerge", "bin/rmsgfmt", "Rakefile", "README.rdoc", "ChangeLog", "src/poparser.ry", "samples/cgi/po/hr/main.po", "samples/cgi/po/hr/hellolib.po", "samples/cgi/po/hr/helloerb1.po", "samples/cgi/po/hr/helloerb2.po", "samples/cgi/po/cs/main.po", "samples/cgi/po/cs/hellolib.po", "samples/cgi/po/cs/helloerb1.po", "samples/cgi/po/cs/helloerb2.po", "samples/cgi/po/hellolib.pot", "samples/cgi/po/el/main.po", "samples/cgi/po/el/hellolib.po", "samples/cgi/po/el/helloerb1.po", "samples/cgi/po/el/helloerb2.po", "samples/cgi/po/bs/main.po", "samples/cgi/po/bs/hellolib.po", "samples/cgi/po/bs/helloerb1.po", "samples/cgi/po/bs/helloerb2.po", "samples/cgi/po/vi/main.po", "samples/cgi/po/vi/hellolib.po", "samples/cgi/po/vi/helloerb1.po", "samples/cgi/po/vi/helloerb2.po", "samples/cgi/po/pt_BR/main.po", "samples/cgi/po/pt_BR/hellolib.po", "samples/cgi/po/pt_BR/helloerb1.po", "samples/cgi/po/pt_BR/helloerb2.po", "samples/cgi/po/nb/main.po", "samples/cgi/po/nb/hellolib.po", "samples/cgi/po/nb/helloerb1.po", "samples/cgi/po/nb/helloerb2.po", "samples/cgi/po/ko/main.po", "samples/cgi/po/ko/hellolib.po", "samples/cgi/po/ko/helloerb1.po", "samples/cgi/po/ko/helloerb2.po", "samples/cgi/po/lv/main.po", "samples/cgi/po/lv/hellolib.po", "samples/cgi/po/lv/helloerb1.po", "samples/cgi/po/lv/helloerb2.po", "samples/cgi/po/ru/main.po", "samples/cgi/po/ru/hellolib.po", "samples/cgi/po/ru/helloerb1.po", "samples/cgi/po/ru/helloerb2.po", "samples/cgi/po/zh_TW/main.po", "samples/cgi/po/zh_TW/hellolib.po", "samples/cgi/po/zh_TW/helloerb1.po", "samples/cgi/po/zh_TW/helloerb2.po", "samples/cgi/po/ca/main.po", "samples/cgi/po/ca/hellolib.po", "samples/cgi/po/ca/helloerb1.po", "samples/cgi/po/ca/helloerb2.po", "samples/cgi/po/de/main.po", "samples/cgi/po/de/hellolib.po", "samples/cgi/po/de/helloerb1.po", "samples/cgi/po/de/helloerb2.po", "samples/cgi/po/es/main.po", "samples/cgi/po/es/hellolib.po", "samples/cgi/po/es/helloerb1.po", "samples/cgi/po/es/helloerb2.po", "samples/cgi/po/eo/main.po", "samples/cgi/po/eo/hellolib.po", "samples/cgi/po/eo/helloerb1.po", "samples/cgi/po/eo/helloerb2.po", "samples/cgi/po/nl/main.po", "samples/cgi/po/nl/hellolib.po", "samples/cgi/po/nl/helloerb1.po", "samples/cgi/po/nl/helloerb2.po", "samples/cgi/po/sr/main.po", "samples/cgi/po/sr/hellolib.po", "samples/cgi/po/sr/helloerb1.po", "samples/cgi/po/sr/helloerb2.po", "samples/cgi/po/hu/main.po", "samples/cgi/po/hu/hellolib.po", "samples/cgi/po/hu/helloerb1.po", "samples/cgi/po/hu/helloerb2.po", "samples/cgi/po/helloerb1.pot", "samples/cgi/po/helloerb2.pot", "samples/cgi/po/zh/main.po", "samples/cgi/po/zh/hellolib.po", "samples/cgi/po/zh/helloerb1.po", "samples/cgi/po/zh/helloerb2.po", "samples/cgi/po/ja/main.po", "samples/cgi/po/ja/hellolib.po", "samples/cgi/po/ja/helloerb1.po", "samples/cgi/po/ja/helloerb2.po", "samples/cgi/po/bg/main.po", "samples/cgi/po/bg/hellolib.po", "samples/cgi/po/bg/helloerb1.po", "samples/cgi/po/bg/helloerb2.po", "samples/cgi/po/main.pot", "samples/cgi/po/ua/main.po", "samples/cgi/po/ua/hellolib.po", "samples/cgi/po/ua/helloerb1.po", "samples/cgi/po/ua/helloerb2.po", "samples/cgi/po/fr/main.po", "samples/cgi/po/fr/hellolib.po", "samples/cgi/po/fr/helloerb1.po", "samples/cgi/po/fr/helloerb2.po", "samples/cgi/po/it/main.po", "samples/cgi/po/it/hellolib.po", "samples/cgi/po/it/helloerb1.po", "samples/cgi/po/it/helloerb2.po", "samples/cgi/hellolib.rb", "samples/cgi/helloerb1.cgi", "samples/cgi/cookie.cgi", "samples/cgi/README", "samples/cgi/other.rhtml", "samples/cgi/Rakefile", "samples/cgi/gettext.css", "samples/cgi/helloerb2.cgi", "samples/cgi/http.rb", "samples/cgi/helloerb.rhtml", "samples/cgi/index.cgi", "samples/po/hello_plural.pot", "samples/po/hr/hello_glade2.po", "samples/po/hr/hello_plural.po", "samples/po/hr/hello_noop.po", "samples/po/hr/hello.po", "samples/po/hr/hello2.po", "samples/po/hr/hello_tk.po", "samples/po/hr/hello_gtk.po", "samples/po/cs/hello_glade2.po", "samples/po/cs/hello_plural.po", "samples/po/cs/hello_noop.po", "samples/po/cs/hello.po", "samples/po/cs/hello2.po", "samples/po/cs/hello_tk.po", "samples/po/cs/hello_gtk.po", "samples/po/el/hello_glade2.po", "samples/po/el/hello_plural.po", "samples/po/el/hello_noop.po", "samples/po/el/hello.po", "samples/po/el/hello2.po", "samples/po/el/hello_tk.po", "samples/po/el/hello_gtk.po", "samples/po/bs/hello_glade2.po", "samples/po/bs/hello_plural.po", "samples/po/bs/hello_noop.po", "samples/po/bs/hello.po", "samples/po/bs/hello2.po", "samples/po/bs/hello_tk.po", "samples/po/bs/hello_gtk.po", "samples/po/vi/hello_glade2.po", "samples/po/vi/hello_plural.po", "samples/po/vi/hello_noop.po", "samples/po/vi/hello.po", "samples/po/vi/hello2.po", "samples/po/vi/hello_tk.po", "samples/po/vi/hello_gtk.po", "samples/po/pt_BR/hello_glade2.po", "samples/po/pt_BR/hello_plural.po", "samples/po/pt_BR/hello_noop.po", "samples/po/pt_BR/hello.po", "samples/po/pt_BR/hello2.po", "samples/po/pt_BR/hello_tk.po", "samples/po/pt_BR/hello_gtk.po", "samples/po/nb/hello_glade2.po", "samples/po/nb/hello_plural.po", "samples/po/nb/hello_noop.po", "samples/po/nb/hello.po", "samples/po/nb/hello2.po", "samples/po/nb/hello_tk.po", "samples/po/nb/hello_gtk.po", "samples/po/hello_noop.pot", "samples/po/ko/hello_glade2.po", "samples/po/ko/hello_plural.po", "samples/po/ko/hello_noop.po", "samples/po/ko/hello.po", "samples/po/ko/hello2.po", "samples/po/ko/hello_tk.po", "samples/po/ko/hello_gtk.po", "samples/po/lv/hello_glade2.po", "samples/po/lv/hello_plural.po", "samples/po/lv/hello_noop.po", "samples/po/lv/hello.po", "samples/po/lv/hello2.po", "samples/po/lv/hello_tk.po", "samples/po/lv/hello_gtk.po", "samples/po/ru/hello_glade2.po", "samples/po/ru/hello_plural.po", "samples/po/ru/hello_noop.po", "samples/po/ru/hello.po", "samples/po/ru/hello2.po", "samples/po/ru/hello_tk.po", "samples/po/ru/hello_gtk.po", "samples/po/zh_TW/hello_glade2.po", "samples/po/zh_TW/hello_plural.po", "samples/po/zh_TW/hello_noop.po", "samples/po/zh_TW/hello.po", "samples/po/zh_TW/hello2.po", "samples/po/zh_TW/hello_tk.po", "samples/po/zh_TW/hello_gtk.po", "samples/po/ca/hello_glade2.po", "samples/po/ca/hello_plural.po", "samples/po/ca/hello_noop.po", "samples/po/ca/hello.po", "samples/po/ca/hello2.po", "samples/po/ca/hello_tk.po", "samples/po/ca/hello_gtk.po", "samples/po/hello2.pot", "samples/po/de/hello_glade2.po", "samples/po/de/hello_plural.po", "samples/po/de/hello_noop.po", "samples/po/de/hello.po", "samples/po/de/hello2.po", "samples/po/de/hello_tk.po", "samples/po/de/hello_gtk.po", "samples/po/es/hello_glade2.po", "samples/po/es/hello_plural.po", "samples/po/es/hello_noop.po", "samples/po/es/hello.po", "samples/po/es/hello2.po", "samples/po/es/hello_tk.po", "samples/po/es/hello_gtk.po", "samples/po/hello_gtk.pot", "samples/po/eo/hello_glade2.po", "samples/po/eo/hello_plural.po", "samples/po/eo/hello_noop.po", "samples/po/eo/hello.po", "samples/po/eo/hello2.po", "samples/po/eo/hello_tk.po", "samples/po/eo/hello_gtk.po", "samples/po/nl/hello_glade2.po", "samples/po/nl/hello_plural.po", "samples/po/nl/hello_noop.po", "samples/po/nl/hello.po", "samples/po/nl/hello2.po", "samples/po/nl/hello_tk.po", "samples/po/nl/hello_gtk.po", "samples/po/sr/hello_glade2.po", "samples/po/sr/hello_plural.po", "samples/po/sr/hello_noop.po", "samples/po/sr/hello.po", "samples/po/sr/hello2.po", "samples/po/sr/hello_tk.po", "samples/po/sr/hello_gtk.po", "samples/po/hello.pot", "samples/po/hu/hello_glade2.po", "samples/po/hu/hello_plural.po", "samples/po/hu/hello_noop.po", "samples/po/hu/hello.po", "samples/po/hu/hello2.po", "samples/po/hu/hello_tk.po", "samples/po/hu/hello_gtk.po", "samples/po/zh/hello_glade2.po", "samples/po/zh/hello_plural.po", "samples/po/zh/hello_noop.po", "samples/po/zh/hello.po", "samples/po/zh/hello2.po", "samples/po/zh/hello_tk.po", "samples/po/zh/hello_gtk.po", "samples/po/test.rb", "samples/po/ja/hello_glade2.po", "samples/po/ja/hello_plural.po", "samples/po/ja/hello_noop.po", "samples/po/ja/hello.po", "samples/po/ja/hello2.po", "samples/po/ja/hello_tk.po", "samples/po/ja/hello_gtk.po", "samples/po/bg/hello_glade2.po", "samples/po/bg/hello_plural.po", "samples/po/bg/hello_noop.po", "samples/po/bg/hello.po", "samples/po/bg/hello2.po", "samples/po/bg/hello_tk.po", "samples/po/bg/hello_gtk.po", "samples/po/ua/hello_glade2.po", "samples/po/ua/hello_plural.po", "samples/po/ua/hello_noop.po", "samples/po/ua/hello.po", "samples/po/ua/hello2.po", "samples/po/ua/hello_tk.po", "samples/po/ua/hello_gtk.po", "samples/po/fr/hello_glade2.po", "samples/po/fr/hello_plural.po", "samples/po/fr/hello_noop.po", "samples/po/fr/hello.po", "samples/po/fr/hello2.po", "samples/po/fr/hello_tk.po", "samples/po/fr/hello_gtk.po", "samples/po/hello_tk.pot", "samples/po/sv/hello_glade2.po", "samples/po/sv/hello_plural.po", "samples/po/sv/hello_noop.po", "samples/po/sv/hello.po", "samples/po/sv/hello2.po", "samples/po/sv/hello_tk.po", "samples/po/sv/hello_gtk.po", "samples/po/hello_glade2.pot", "samples/po/it/hello_glade2.po", "samples/po/it/hello_plural.po", "samples/po/it/hello_noop.po", "samples/po/it/hello.po", "samples/po/it/hello2.po", "samples/po/it/hello_tk.po", "samples/po/it/hello_gtk.po", "samples/hello_noop.rb", "samples/hello_plural.rb", "samples/makemo.rb", "samples/hello_glade2.glade", "samples/hello.rb", "samples/hello_gtk2.rb", "samples/README", "samples/hello_glade2.rb", "samples/hello2.rb", "samples/hello_tk.rb", "gettext.gemspec"]
|
16
|
+
s.has_rdoc = true
|
17
|
+
s.homepage = %q{http://gettext.rubyforge.org/}
|
18
|
+
s.rdoc_options = ["--line-numbers", "--inline-source", "--title", "GetText", "--main", "README.rdoc"]
|
19
|
+
s.require_paths = ["lib"]
|
20
|
+
s.rubyforge_project = %q{gettext}
|
21
|
+
s.rubygems_version = %q{1.3.1}
|
22
|
+
s.summary = %q{Ruby-GetText-Package is a libary and tools to localize messages.}
|
23
|
+
s.test_files = ["test/test_textdomain_toplevel.rb", "test/test_gettext.rb", "test/test_parser.rb", "test/test_string.rb", "test/test_class_info.rb", "test/test_textdomain_multi.rb"]
|
24
|
+
|
25
|
+
if s.respond_to? :specification_version then
|
26
|
+
current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
|
27
|
+
s.specification_version = 2
|
28
|
+
|
29
|
+
if Gem::Version.new(Gem::RubyGemsVersion) >= Gem::Version.new('1.2.0') then
|
30
|
+
s.add_runtime_dependency(%q<locale>, [">= 0"])
|
31
|
+
s.add_development_dependency(%q<echoe>, [">= 0"])
|
32
|
+
else
|
33
|
+
s.add_dependency(%q<locale>, [">= 0"])
|
34
|
+
s.add_dependency(%q<echoe>, [">= 0"])
|
35
|
+
end
|
36
|
+
else
|
37
|
+
s.add_dependency(%q<locale>, [">= 0"])
|
38
|
+
s.add_dependency(%q<echoe>, [">= 0"])
|
39
|
+
end
|
40
|
+
end
|
data/lib/gettext/cgi.rb
ADDED
@@ -0,0 +1,37 @@
|
|
1
|
+
=begin
|
2
|
+
gettext/cgi.rb - GetText for CGI
|
3
|
+
|
4
|
+
Copyright (C) 2005-2009 Masao Mutoh
|
5
|
+
|
6
|
+
You may redistribute it and/or modify it under the same
|
7
|
+
license terms as Ruby or LGPL.
|
8
|
+
=end
|
9
|
+
|
10
|
+
require 'cgi'
|
11
|
+
require 'gettext'
|
12
|
+
|
13
|
+
Locale.init(:driver => :cgi)
|
14
|
+
|
15
|
+
module GetText
|
16
|
+
|
17
|
+
# Sets a CGI object. This methods is appeared when requiring "gettext/cgi".
|
18
|
+
# * cgi_: CGI object
|
19
|
+
# * Returns: self
|
20
|
+
def set_cgi(cgi_)
|
21
|
+
Locale.set_cgi(cgi_)
|
22
|
+
end
|
23
|
+
|
24
|
+
# Same as GetText.set_cgi. This methods is appeared when requiring "gettext/cgi".
|
25
|
+
# * cgi_: CGI object
|
26
|
+
# * Returns: cgi_
|
27
|
+
def cgi=(cgi_)
|
28
|
+
set_cgi(cgi_)
|
29
|
+
cgi_
|
30
|
+
end
|
31
|
+
|
32
|
+
# Gets the CGI object. If it is nil, returns new CGI object. This methods is appeared when requiring "gettext/cgi".
|
33
|
+
# * Returns: the CGI object
|
34
|
+
def cgi
|
35
|
+
Locale.cgi
|
36
|
+
end
|
37
|
+
end
|
@@ -0,0 +1,110 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
=begin
|
3
|
+
iconv.rb - Pseudo Iconv class. Supports Iconv.iconv, Iconv.conv.
|
4
|
+
|
5
|
+
For Matz Ruby:
|
6
|
+
If you don't have iconv but glib2, this library uses glib2 iconv functions.
|
7
|
+
|
8
|
+
For JRuby:
|
9
|
+
Use Java String class to convert strings.
|
10
|
+
|
11
|
+
Copyright (C) 2004-2009 Masao Mutoh
|
12
|
+
|
13
|
+
You may redistribute it and/or modify it under the same
|
14
|
+
license terms as Ruby or LGPL.
|
15
|
+
=end
|
16
|
+
|
17
|
+
begin
|
18
|
+
require 'iconv.so'
|
19
|
+
rescue LoadError
|
20
|
+
# Pseudo Iconv class
|
21
|
+
#
|
22
|
+
# ==== For Matz Ruby:
|
23
|
+
# If you don't have iconv but Ruby/GLib2, this library uses Ruby/GLib2's
|
24
|
+
# iconv functions.
|
25
|
+
#
|
26
|
+
# Ruby/GLib is a module which is provided from Ruby-GNOME2 Project.
|
27
|
+
# You can get binaries for Win32(One-Click Ruby Installer).
|
28
|
+
# <URL: http://ruby-gnome2.sourceforge.jp/>
|
29
|
+
# ==== For JRuby:
|
30
|
+
# Use Java String class to convert strings.
|
31
|
+
class Iconv
|
32
|
+
module Failure; end
|
33
|
+
class InvalidEncoding < ArgumentError; include Failure; end
|
34
|
+
class IllegalSequence < ArgumentError; include Failure; end
|
35
|
+
class InvalidCharacter < ArgumentError; include Failure; end
|
36
|
+
|
37
|
+
if RUBY_PLATFORM =~ /java/
|
38
|
+
def self.conv(to, from, str)
|
39
|
+
raise InvalidCharacter, "the 3rd argument is nil" unless str
|
40
|
+
begin
|
41
|
+
str = java.lang.String.new(str.unpack("C*").to_java(:byte), from)
|
42
|
+
str.getBytes(to).to_ary.pack("C*")
|
43
|
+
rescue java.io.UnsupportedEncodingException
|
44
|
+
raise InvalidEncoding
|
45
|
+
end
|
46
|
+
end
|
47
|
+
else
|
48
|
+
begin
|
49
|
+
require 'glib2'
|
50
|
+
|
51
|
+
def self.check_glib_version?(major, minor, micro) # :nodoc:
|
52
|
+
(GLib::BINDING_VERSION[0] > major ||
|
53
|
+
(GLib::BINDING_VERSION[0] == major &&
|
54
|
+
GLib::BINDING_VERSION[1] > minor) ||
|
55
|
+
(GLib::BINDING_VERSION[0] == major &&
|
56
|
+
GLib::BINDING_VERSION[1] == minor &&
|
57
|
+
GLib::BINDING_VERSION[2] >= micro))
|
58
|
+
end
|
59
|
+
|
60
|
+
if check_glib_version?(0, 11, 0)
|
61
|
+
# This is a function equivalent of Iconv.iconv.
|
62
|
+
# * to: encoding name for destination
|
63
|
+
# * from: encoding name for source
|
64
|
+
# * str: strings to be converted
|
65
|
+
# * Returns: Returns an Array of converted strings.
|
66
|
+
def self.conv(to, from, str)
|
67
|
+
begin
|
68
|
+
GLib.convert(str, to, from)
|
69
|
+
rescue GLib::ConvertError => e
|
70
|
+
case e.code
|
71
|
+
when GLib::ConvertError::NO_CONVERSION
|
72
|
+
raise InvalidEncoding.new(str)
|
73
|
+
when GLib::ConvertError::ILLEGAL_SEQUENCE
|
74
|
+
raise IllegalSequence.new(str)
|
75
|
+
else
|
76
|
+
raise InvalidCharacter.new(str)
|
77
|
+
end
|
78
|
+
end
|
79
|
+
end
|
80
|
+
else
|
81
|
+
def self.conv(to, from, str) # :nodoc:
|
82
|
+
begin
|
83
|
+
GLib.convert(str, to, from)
|
84
|
+
rescue
|
85
|
+
raise IllegalSequence.new(str)
|
86
|
+
end
|
87
|
+
end
|
88
|
+
end
|
89
|
+
rescue LoadError
|
90
|
+
def self.conv(to, from, str) # :nodoc:
|
91
|
+
warn "Iconv was not found." if $DEBUG
|
92
|
+
str
|
93
|
+
end
|
94
|
+
end
|
95
|
+
end
|
96
|
+
def self.iconv(to, from, str)
|
97
|
+
conv(to, from, str).split(//)
|
98
|
+
end
|
99
|
+
end
|
100
|
+
end
|
101
|
+
|
102
|
+
if __FILE__ == $0
|
103
|
+
puts Iconv.iconv("EUC-JP", "UTF-8", "ほげ").join
|
104
|
+
begin
|
105
|
+
puts Iconv.iconv("EUC-JP", "EUC-JP", "ほげ").join
|
106
|
+
rescue Iconv::Failure
|
107
|
+
puts $!
|
108
|
+
puts $!.class
|
109
|
+
end
|
110
|
+
end
|
@@ -0,0 +1,84 @@
|
|
1
|
+
=begin
|
2
|
+
string.rb - Extension for String.
|
3
|
+
|
4
|
+
Copyright (C) 2005-2009 Masao Mutoh
|
5
|
+
|
6
|
+
You may redistribute it and/or modify it under the same
|
7
|
+
license terms as Ruby or LGPL.
|
8
|
+
=end
|
9
|
+
|
10
|
+
# Extension for String class. This feature is included in Ruby 1.9 or later but not occur TypeError.
|
11
|
+
#
|
12
|
+
# String#% method which accept "named argument". The translator can know
|
13
|
+
# the meaning of the msgids using "named argument" instead of %s/%d style.
|
14
|
+
class String
|
15
|
+
|
16
|
+
unless instance_methods.find {|m| m.to_s == 'bytesize'}
|
17
|
+
# For older ruby (such as ruby-1.8.5)
|
18
|
+
alias :bytesize :size
|
19
|
+
end
|
20
|
+
|
21
|
+
alias :_old_format_m :% # :nodoc:
|
22
|
+
|
23
|
+
PERCENT_MATCH_RE = Regexp.union(
|
24
|
+
/%%/,
|
25
|
+
/%\{(.+?)\}/,
|
26
|
+
/%<(.+?)>(.*?\d*\.?\d*[bBdiouxXeEfgGcps])/
|
27
|
+
)
|
28
|
+
|
29
|
+
# call-seq:
|
30
|
+
# %(arg)
|
31
|
+
# %(hash)
|
32
|
+
#
|
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
|
36
|
+
# format string. This is the default behavior of the String class.
|
37
|
+
# * arg: an Array or other class except Hash.
|
38
|
+
# * Returns: formatted String
|
39
|
+
#
|
40
|
+
# (e.g.) "%s, %s" % ["Masao", "Mutoh"]
|
41
|
+
#
|
42
|
+
# Also you can use a Hash as the "named argument". This is recommanded way for Ruby-GetText
|
43
|
+
# because the translators can understand the meanings of the msgids easily.
|
44
|
+
# * hash: {:key1 => value1, :key2 => value2, ... }
|
45
|
+
# * Returns: formatted String
|
46
|
+
#
|
47
|
+
# (e.g.)
|
48
|
+
# For strings.
|
49
|
+
# "%{firstname}, %{familyname}" % {:firstname => "Masao", :familyname => "Mutoh"}
|
50
|
+
#
|
51
|
+
# With field type to specify format such as d(decimal), f(float),...
|
52
|
+
# "%<age>d, %<weight>.1f" % {:age => 10, :weight => 43.4}
|
53
|
+
def %(args)
|
54
|
+
if args.kind_of?(Hash)
|
55
|
+
ret = dup
|
56
|
+
ret.gsub!(PERCENT_MATCH_RE) {|match|
|
57
|
+
if match == '%%'
|
58
|
+
'%'
|
59
|
+
elsif $1
|
60
|
+
key = $1.to_sym
|
61
|
+
args.has_key?(key) ? args[key] : match
|
62
|
+
elsif $2
|
63
|
+
key = $2.to_sym
|
64
|
+
args.has_key?(key) ? sprintf("%#{$3}", args[key]) : match
|
65
|
+
end
|
66
|
+
}
|
67
|
+
ret
|
68
|
+
else
|
69
|
+
ret = gsub(/%([{<])/, '%%\1')
|
70
|
+
begin
|
71
|
+
ret._old_format_m(args)
|
72
|
+
rescue ArgumentError => e
|
73
|
+
if $DEBUG
|
74
|
+
$stderr.puts " The string:#{ret}"
|
75
|
+
$stderr.puts " args:#{args.inspect}"
|
76
|
+
puts e.backtrace
|
77
|
+
else
|
78
|
+
raise ArgumentError, e.message
|
79
|
+
end
|
80
|
+
end
|
81
|
+
end
|
82
|
+
end
|
83
|
+
end
|
84
|
+
|
@@ -0,0 +1,172 @@
|
|
1
|
+
#!/usr/bin/ruby
|
2
|
+
=begin
|
3
|
+
parser/ruby.rb - parser for ruby script
|
4
|
+
|
5
|
+
Copyright (C) 2003-2005 Masao Mutoh
|
6
|
+
Copyright (C) 2005 speakillof
|
7
|
+
Copyright (C) 2001,2002 Yasushi Shoji, Masao Mutoh
|
8
|
+
|
9
|
+
You may redistribute it and/or modify it under the same
|
10
|
+
license terms as Ruby.
|
11
|
+
|
12
|
+
=end
|
13
|
+
|
14
|
+
require 'irb/ruby-lex.rb'
|
15
|
+
require 'stringio'
|
16
|
+
warn "DEPRECATED: Use 'gettext/tools/parser/ruby' instead."
|
17
|
+
|
18
|
+
class RubyLexX < RubyLex # :nodoc: all
|
19
|
+
# Parser#parse resemlbes RubyLex#lex
|
20
|
+
def parse
|
21
|
+
until ( (tk = token).kind_of?(RubyToken::TkEND_OF_SCRIPT) && !@continue or tk.nil? )
|
22
|
+
s = get_readed
|
23
|
+
if RubyToken::TkSTRING === tk
|
24
|
+
def tk.value
|
25
|
+
@value
|
26
|
+
end
|
27
|
+
|
28
|
+
def tk.value=(s)
|
29
|
+
@value = s
|
30
|
+
end
|
31
|
+
|
32
|
+
if @here_header
|
33
|
+
s = s.sub(/\A.*?\n/, '').sub(/^.*\n\Z/, '')
|
34
|
+
else
|
35
|
+
begin
|
36
|
+
s = eval(s)
|
37
|
+
rescue Exception
|
38
|
+
# Do nothing.
|
39
|
+
end
|
40
|
+
end
|
41
|
+
|
42
|
+
tk.value = s
|
43
|
+
end
|
44
|
+
|
45
|
+
if $DEBUG
|
46
|
+
if tk.is_a? TkSTRING
|
47
|
+
$stderr.puts("#{tk}: #{tk.value}")
|
48
|
+
elsif tk.is_a? TkIDENTIFIER
|
49
|
+
$stderr.puts("#{tk}: #{tk.name}")
|
50
|
+
else
|
51
|
+
$stderr.puts(tk)
|
52
|
+
end
|
53
|
+
end
|
54
|
+
|
55
|
+
yield tk
|
56
|
+
end
|
57
|
+
return nil
|
58
|
+
end
|
59
|
+
|
60
|
+
end
|
61
|
+
|
62
|
+
module GetText
|
63
|
+
module RubyParser
|
64
|
+
extend self
|
65
|
+
|
66
|
+
unless defined? ID
|
67
|
+
ID = ['gettext', '_', 'N_', 'sgettext', 's_']
|
68
|
+
PLURAL_ID = ['ngettext', 'n_', 'Nn_', 'ns_', 'nsgettext']
|
69
|
+
MSGCTXT_ID = ['pgettext', 'p_']
|
70
|
+
MSGCTXT_PLURAL_ID = ['npgettext', 'np_']
|
71
|
+
end
|
72
|
+
|
73
|
+
def parse(file, targets = []) # :nodoc:
|
74
|
+
lines = IO.readlines(file)
|
75
|
+
parse_lines(file, lines, targets)
|
76
|
+
end
|
77
|
+
|
78
|
+
def parse_lines(file_name, lines, targets) # :nodoc:
|
79
|
+
file = StringIO.new(lines.join + "\n")
|
80
|
+
rl = RubyLexX.new
|
81
|
+
rl.set_input(file)
|
82
|
+
rl.skip_space = true
|
83
|
+
#rl.readed_auto_clean_up = true
|
84
|
+
|
85
|
+
target = nil
|
86
|
+
msgid = nil
|
87
|
+
line_no = nil
|
88
|
+
rl.parse do |tk|
|
89
|
+
begin
|
90
|
+
case tk
|
91
|
+
when RubyToken::TkIDENTIFIER, RubyToken::TkCONSTANT
|
92
|
+
if ID.include?(tk.name)
|
93
|
+
target = :normal
|
94
|
+
elsif PLURAL_ID.include?(tk.name)
|
95
|
+
target = :plural
|
96
|
+
elsif MSGCTXT_ID.include?(tk.name)
|
97
|
+
target = :msgctxt
|
98
|
+
elsif MSGCTXT_PLURAL_ID.include?(tk.name)
|
99
|
+
target = :msgctxt_plural
|
100
|
+
else
|
101
|
+
target = nil
|
102
|
+
end
|
103
|
+
line_no = tk.line_no.to_s
|
104
|
+
when RubyToken::TkSTRING
|
105
|
+
if target
|
106
|
+
if msgid
|
107
|
+
msgid += tk.value
|
108
|
+
else
|
109
|
+
msgid = tk.value
|
110
|
+
end
|
111
|
+
end
|
112
|
+
when RubyToken::TkPLUS, RubyToken::TkNL
|
113
|
+
#do nothing
|
114
|
+
when RubyToken::TkCOMMA
|
115
|
+
if msgid
|
116
|
+
case target
|
117
|
+
when :plural
|
118
|
+
msgid += "\000"
|
119
|
+
target = :normal
|
120
|
+
when :msgctxt
|
121
|
+
msgid += "\004"
|
122
|
+
target = :normal
|
123
|
+
when :msgctxt_plural
|
124
|
+
msgid += "\004"
|
125
|
+
target = :plural
|
126
|
+
else
|
127
|
+
target = :normal
|
128
|
+
end
|
129
|
+
end
|
130
|
+
else
|
131
|
+
if msgid
|
132
|
+
key_existed = targets.assoc(msgid.gsub(/\n/, '\n'))
|
133
|
+
if key_existed
|
134
|
+
targets[targets.index(key_existed)] = key_existed <<
|
135
|
+
file_name + ":" + line_no
|
136
|
+
else
|
137
|
+
targets << [msgid.gsub(/\n/, '\n'), file_name + ":" + line_no]
|
138
|
+
end
|
139
|
+
msgid = nil
|
140
|
+
target = nil
|
141
|
+
end
|
142
|
+
end
|
143
|
+
targets
|
144
|
+
rescue
|
145
|
+
$stderr.print "\n\nError: #{$!.inspect} "
|
146
|
+
$stderr.print " in #{file_name}:#{tk.line_no}\n\t #{lines[tk.line_no - 1]}" if tk
|
147
|
+
$stderr.print "\n"
|
148
|
+
exit 1
|
149
|
+
end
|
150
|
+
end
|
151
|
+
targets
|
152
|
+
end
|
153
|
+
|
154
|
+
def target?(file) # :nodoc:
|
155
|
+
true # always true, as default parser.
|
156
|
+
end
|
157
|
+
end
|
158
|
+
end
|
159
|
+
|
160
|
+
|
161
|
+
|
162
|
+
if __FILE__ == $0
|
163
|
+
require 'pp'
|
164
|
+
ARGV.each do |file|
|
165
|
+
pp GetText::RubyParser.parse(file)
|
166
|
+
end
|
167
|
+
|
168
|
+
#rl = RubyLexX.new; rl.set_input(ARGF)
|
169
|
+
#rl.parse do |tk|
|
170
|
+
#p tk
|
171
|
+
#end
|
172
|
+
end
|