gettext 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (384) hide show
  1. data/COPYING +55 -0
  2. data/COPYING.ja +51 -0
  3. data/ChangeLog +492 -0
  4. data/NEWS +99 -0
  5. data/README +112 -0
  6. data/README.ja +115 -0
  7. data/Rakefile +170 -0
  8. data/bin/rgettext +22 -0
  9. data/bin/rmsgfmt +22 -0
  10. data/data/locale/de/LC_MESSAGES/rgettext.mo +0 -0
  11. data/data/locale/de/LC_MESSAGES/rmsgfmt.mo +0 -0
  12. data/data/locale/es/LC_MESSAGES/rgettext.mo +0 -0
  13. data/data/locale/es/LC_MESSAGES/rmsgfmt.mo +0 -0
  14. data/data/locale/fr/LC_MESSAGES/rgettext.mo +0 -0
  15. data/data/locale/fr/LC_MESSAGES/rmsgfmt.mo +0 -0
  16. data/data/locale/it/LC_MESSAGES/rgettext.mo +0 -0
  17. data/data/locale/it/LC_MESSAGES/rmsgfmt.mo +0 -0
  18. data/data/locale/ja/LC_MESSAGES/rgettext.mo +0 -0
  19. data/data/locale/ja/LC_MESSAGES/rmsgfmt.mo +0 -0
  20. data/data/locale/ko/LC_MESSAGES/rgettext.mo +0 -0
  21. data/data/locale/ko/LC_MESSAGES/rmsgfmt.mo +0 -0
  22. data/data/locale/pt_BR/LC_MESSAGES/rgettext.mo +0 -0
  23. data/data/locale/pt_BR/LC_MESSAGES/rmsgfmt.mo +0 -0
  24. data/data/locale/sv/LC_MESSAGES/rgettext.mo +0 -0
  25. data/data/locale/sv/LC_MESSAGES/rmsgfmt.mo +0 -0
  26. data/ext/gettext/gettext/MANIFEST +3 -0
  27. data/ext/gettext/gettext/_locale.c +86 -0
  28. data/ext/gettext/gettext/extconf.rb +20 -0
  29. data/lib/gettext.rb +127 -0
  30. data/lib/gettext/cgi.rb +83 -0
  31. data/lib/gettext/container.rb +30 -0
  32. data/lib/gettext/erb.rb +28 -0
  33. data/lib/gettext/iconv.rb +80 -0
  34. data/lib/gettext/locale.rb +71 -0
  35. data/lib/gettext/locale_default.rb +35 -0
  36. data/lib/gettext/locale_table_win32.rb +192 -0
  37. data/lib/gettext/locale_win32.rb +35 -0
  38. data/lib/gettext/mo.rb +262 -0
  39. data/lib/gettext/parser/erb.rb +34 -0
  40. data/lib/gettext/parser/glade.rb +98 -0
  41. data/lib/gettext/parser/ruby.rb +211 -0
  42. data/lib/gettext/rails.rb +40 -0
  43. data/lib/gettext/rgettext.rb +181 -0
  44. data/lib/gettext/rmsgfmt.rb +363 -0
  45. data/lib/gettext/textdomain.rb +168 -0
  46. data/lib/gettext/version.rb +12 -0
  47. data/po/de/rgettext.po +49 -0
  48. data/po/de/rmsgfmt.po +45 -0
  49. data/po/es/rgettext.po +47 -0
  50. data/po/es/rmsgfmt.po +43 -0
  51. data/po/fr/rgettext.po +47 -0
  52. data/po/fr/rmsgfmt.po +43 -0
  53. data/po/it/rgettext.po +47 -0
  54. data/po/it/rmsgfmt.po +44 -0
  55. data/po/ja/rgettext.po +49 -0
  56. data/po/ja/rmsgfmt.po +43 -0
  57. data/po/ko/rgettext.po +46 -0
  58. data/po/ko/rmsgfmt.po +40 -0
  59. data/po/pt_BR/rgettext.po +47 -0
  60. data/po/pt_BR/rmsgfmt.po +42 -0
  61. data/po/rgettext.pot +45 -0
  62. data/po/rmsgfmt.pot +40 -0
  63. data/po/sv/rgettext.po +48 -0
  64. data/po/sv/rmsgfmt.po +43 -0
  65. data/post-setup.rb +12 -0
  66. data/pre-setup.rb +12 -0
  67. data/samples/README +20 -0
  68. data/samples/cgi/README +43 -0
  69. data/samples/cgi/Rakefile +9 -0
  70. data/samples/cgi/cookie.cgi +57 -0
  71. data/samples/cgi/gettext.css +116 -0
  72. data/samples/cgi/helloerb.rhtml +27 -0
  73. data/samples/cgi/helloerb1.cgi +47 -0
  74. data/samples/cgi/helloerb2.cgi +41 -0
  75. data/samples/cgi/hellolib.rb +21 -0
  76. data/samples/cgi/http.rb +54 -0
  77. data/samples/cgi/index.cgi +104 -0
  78. data/samples/cgi/locale/de/LC_MESSAGES/helloerb1.mo +0 -0
  79. data/samples/cgi/locale/de/LC_MESSAGES/helloerb2.mo +0 -0
  80. data/samples/cgi/locale/de/LC_MESSAGES/hellolib.mo +0 -0
  81. data/samples/cgi/locale/de/LC_MESSAGES/main.mo +0 -0
  82. data/samples/cgi/locale/es/LC_MESSAGES/helloerb1.mo +0 -0
  83. data/samples/cgi/locale/es/LC_MESSAGES/helloerb2.mo +0 -0
  84. data/samples/cgi/locale/es/LC_MESSAGES/hellolib.mo +0 -0
  85. data/samples/cgi/locale/es/LC_MESSAGES/main.mo +0 -0
  86. data/samples/cgi/locale/fr/LC_MESSAGES/helloerb1.mo +0 -0
  87. data/samples/cgi/locale/fr/LC_MESSAGES/helloerb2.mo +0 -0
  88. data/samples/cgi/locale/fr/LC_MESSAGES/hellolib.mo +0 -0
  89. data/samples/cgi/locale/fr/LC_MESSAGES/main.mo +0 -0
  90. data/samples/cgi/locale/it/LC_MESSAGES/helloerb1.mo +0 -0
  91. data/samples/cgi/locale/it/LC_MESSAGES/helloerb2.mo +0 -0
  92. data/samples/cgi/locale/it/LC_MESSAGES/hellolib.mo +0 -0
  93. data/samples/cgi/locale/it/LC_MESSAGES/main.mo +0 -0
  94. data/samples/cgi/locale/ja/LC_MESSAGES/helloerb1.mo +0 -0
  95. data/samples/cgi/locale/ja/LC_MESSAGES/helloerb2.mo +0 -0
  96. data/samples/cgi/locale/ja/LC_MESSAGES/hellolib.mo +0 -0
  97. data/samples/cgi/locale/ja/LC_MESSAGES/main.mo +0 -0
  98. data/samples/cgi/locale/ko/LC_MESSAGES/helloerb1.mo +0 -0
  99. data/samples/cgi/locale/ko/LC_MESSAGES/helloerb2.mo +0 -0
  100. data/samples/cgi/locale/ko/LC_MESSAGES/hellolib.mo +0 -0
  101. data/samples/cgi/locale/ko/LC_MESSAGES/main.mo +0 -0
  102. data/samples/cgi/other.rhtml +20 -0
  103. data/samples/cgi/po/de/helloerb1.po +60 -0
  104. data/samples/cgi/po/de/helloerb2.po +52 -0
  105. data/samples/cgi/po/de/hellolib.po +23 -0
  106. data/samples/cgi/po/de/main.po +76 -0
  107. data/samples/cgi/po/es/helloerb1.po +59 -0
  108. data/samples/cgi/po/es/helloerb2.po +50 -0
  109. data/samples/cgi/po/es/hellolib.po +22 -0
  110. data/samples/cgi/po/es/main.po +74 -0
  111. data/samples/cgi/po/fr/helloerb1.po +59 -0
  112. data/samples/cgi/po/fr/helloerb2.po +51 -0
  113. data/samples/cgi/po/fr/hellolib.po +22 -0
  114. data/samples/cgi/po/fr/main.po +75 -0
  115. data/samples/cgi/po/helloerb1.pot +60 -0
  116. data/samples/cgi/po/helloerb2.pot +52 -0
  117. data/samples/cgi/po/hellolib.pot +23 -0
  118. data/samples/cgi/po/it/helloerb1.po +61 -0
  119. data/samples/cgi/po/it/helloerb2.po +52 -0
  120. data/samples/cgi/po/it/hellolib.po +24 -0
  121. data/samples/cgi/po/it/main.po +76 -0
  122. data/samples/cgi/po/ja/helloerb1.po +59 -0
  123. data/samples/cgi/po/ja/helloerb2.po +52 -0
  124. data/samples/cgi/po/ja/hellolib.po +23 -0
  125. data/samples/cgi/po/ja/main.po +76 -0
  126. data/samples/cgi/po/ko/helloerb1.po +58 -0
  127. data/samples/cgi/po/ko/helloerb2.po +52 -0
  128. data/samples/cgi/po/ko/hellolib.po +22 -0
  129. data/samples/cgi/po/ko/main.po +74 -0
  130. data/samples/cgi/po/main.pot +76 -0
  131. data/samples/cgi/ruby.bat +4 -0
  132. data/samples/hello.rb +12 -0
  133. data/samples/hello2.rb +15 -0
  134. data/samples/hello_noop.rb +18 -0
  135. data/samples/hello_plural.rb +15 -0
  136. data/samples/hello_textdomain.rb +12 -0
  137. data/samples/helloglade2.glade +70 -0
  138. data/samples/helloglade2.rb +24 -0
  139. data/samples/hellogtk.rb +26 -0
  140. data/samples/hellogtk2.rb +28 -0
  141. data/samples/hellotk.rb +18 -0
  142. data/samples/locale/de/LC_MESSAGES/hello.mo +0 -0
  143. data/samples/locale/de/LC_MESSAGES/hello2.mo +0 -0
  144. data/samples/locale/de/LC_MESSAGES/hello_noop.mo +0 -0
  145. data/samples/locale/de/LC_MESSAGES/hello_plural.mo +0 -0
  146. data/samples/locale/de/LC_MESSAGES/helloglade2.mo +0 -0
  147. data/samples/locale/de/LC_MESSAGES/hellogtk.mo +0 -0
  148. data/samples/locale/de/LC_MESSAGES/hellotk.mo +0 -0
  149. data/samples/locale/es/LC_MESSAGES/hello.mo +0 -0
  150. data/samples/locale/es/LC_MESSAGES/hello2.mo +0 -0
  151. data/samples/locale/es/LC_MESSAGES/hello_noop.mo +0 -0
  152. data/samples/locale/es/LC_MESSAGES/hello_plural.mo +0 -0
  153. data/samples/locale/es/LC_MESSAGES/helloglade2.mo +0 -0
  154. data/samples/locale/es/LC_MESSAGES/hellogtk.mo +0 -0
  155. data/samples/locale/es/LC_MESSAGES/hellotk.mo +0 -0
  156. data/samples/locale/fr/LC_MESSAGES/hello.mo +0 -0
  157. data/samples/locale/fr/LC_MESSAGES/hello2.mo +0 -0
  158. data/samples/locale/fr/LC_MESSAGES/hello_noop.mo +0 -0
  159. data/samples/locale/fr/LC_MESSAGES/hello_plural.mo +0 -0
  160. data/samples/locale/fr/LC_MESSAGES/helloglade2.mo +0 -0
  161. data/samples/locale/fr/LC_MESSAGES/hellogtk.mo +0 -0
  162. data/samples/locale/fr/LC_MESSAGES/hellotk.mo +0 -0
  163. data/samples/locale/it/LC_MESSAGES/hello.mo +0 -0
  164. data/samples/locale/it/LC_MESSAGES/hello2.mo +0 -0
  165. data/samples/locale/it/LC_MESSAGES/hello_noop.mo +0 -0
  166. data/samples/locale/it/LC_MESSAGES/hello_plural.mo +0 -0
  167. data/samples/locale/it/LC_MESSAGES/helloglade2.mo +0 -0
  168. data/samples/locale/it/LC_MESSAGES/hellogtk.mo +0 -0
  169. data/samples/locale/it/LC_MESSAGES/hellotk.mo +0 -0
  170. data/samples/locale/ja/LC_MESSAGES/hello.mo +0 -0
  171. data/samples/locale/ja/LC_MESSAGES/hello2.mo +0 -0
  172. data/samples/locale/ja/LC_MESSAGES/hello_noop.mo +0 -0
  173. data/samples/locale/ja/LC_MESSAGES/hello_plural.mo +0 -0
  174. data/samples/locale/ja/LC_MESSAGES/helloglade2.mo +0 -0
  175. data/samples/locale/ja/LC_MESSAGES/hellogtk.mo +0 -0
  176. data/samples/locale/ja/LC_MESSAGES/hellotk.mo +0 -0
  177. data/samples/locale/ko/LC_MESSAGES/hello.mo +0 -0
  178. data/samples/locale/ko/LC_MESSAGES/hello2.mo +0 -0
  179. data/samples/locale/ko/LC_MESSAGES/hello_noop.mo +0 -0
  180. data/samples/locale/ko/LC_MESSAGES/hello_plural.mo +0 -0
  181. data/samples/locale/ko/LC_MESSAGES/helloglade2.mo +0 -0
  182. data/samples/locale/ko/LC_MESSAGES/hellogtk.mo +0 -0
  183. data/samples/locale/ko/LC_MESSAGES/hellotk.mo +0 -0
  184. data/samples/locale/pt_BR/LC_MESSAGES/hello.mo +0 -0
  185. data/samples/locale/pt_BR/LC_MESSAGES/hello2.mo +0 -0
  186. data/samples/locale/pt_BR/LC_MESSAGES/hello_noop.mo +0 -0
  187. data/samples/locale/pt_BR/LC_MESSAGES/hello_plural.mo +0 -0
  188. data/samples/locale/pt_BR/LC_MESSAGES/helloglade2.mo +0 -0
  189. data/samples/locale/pt_BR/LC_MESSAGES/hellogtk.mo +0 -0
  190. data/samples/locale/pt_BR/LC_MESSAGES/hellotk.mo +0 -0
  191. data/samples/locale/sv/LC_MESSAGES/hello.mo +0 -0
  192. data/samples/locale/sv/LC_MESSAGES/hello2.mo +0 -0
  193. data/samples/locale/sv/LC_MESSAGES/hello_noop.mo +0 -0
  194. data/samples/locale/sv/LC_MESSAGES/hello_plural.mo +0 -0
  195. data/samples/locale/sv/LC_MESSAGES/helloglade2.mo +0 -0
  196. data/samples/locale/sv/LC_MESSAGES/hellogtk.mo +0 -0
  197. data/samples/locale/sv/LC_MESSAGES/hellotk.mo +0 -0
  198. data/samples/makemo.rb +3 -0
  199. data/samples/po/de/hello.po +20 -0
  200. data/samples/po/de/hello2.po +28 -0
  201. data/samples/po/de/hello_noop.po +24 -0
  202. data/samples/po/de/hello_plural.po +22 -0
  203. data/samples/po/de/helloglade2.po +27 -0
  204. data/samples/po/de/hellogtk.po +20 -0
  205. data/samples/po/de/hellotk.po +20 -0
  206. data/samples/po/es/hello.po +21 -0
  207. data/samples/po/es/hello2.po +28 -0
  208. data/samples/po/es/hello_noop.po +24 -0
  209. data/samples/po/es/hello_plural.po +23 -0
  210. data/samples/po/es/helloglade2.po +28 -0
  211. data/samples/po/es/hellogtk.po +20 -0
  212. data/samples/po/es/hellotk.po +20 -0
  213. data/samples/po/fr/hello.po +18 -0
  214. data/samples/po/fr/hello2.po +26 -0
  215. data/samples/po/fr/hello_noop.po +22 -0
  216. data/samples/po/fr/hello_plural.po +21 -0
  217. data/samples/po/fr/helloglade2.po +27 -0
  218. data/samples/po/fr/hellogtk.po +18 -0
  219. data/samples/po/fr/hellotk.po +18 -0
  220. data/samples/po/hello.pot +20 -0
  221. data/samples/po/hello2.pot +28 -0
  222. data/samples/po/hello_noop.pot +24 -0
  223. data/samples/po/hello_plural.pot +22 -0
  224. data/samples/po/helloglade2.pot +27 -0
  225. data/samples/po/hellogtk.pot +20 -0
  226. data/samples/po/hellotk.pot +20 -0
  227. data/samples/po/it/hello.po +20 -0
  228. data/samples/po/it/hello2.po +28 -0
  229. data/samples/po/it/hello_noop.po +24 -0
  230. data/samples/po/it/hello_plural.po +24 -0
  231. data/samples/po/it/helloglade2.po +28 -0
  232. data/samples/po/it/hellogtk.po +21 -0
  233. data/samples/po/it/hellotk.po +21 -0
  234. data/samples/po/ja/hello.po +20 -0
  235. data/samples/po/ja/hello2.po +28 -0
  236. data/samples/po/ja/hello_noop.po +23 -0
  237. data/samples/po/ja/hello_plural.po +22 -0
  238. data/samples/po/ja/helloglade2.po +26 -0
  239. data/samples/po/ja/hellogtk.po +19 -0
  240. data/samples/po/ja/hellotk.po +19 -0
  241. data/samples/po/ko/hello.po +19 -0
  242. data/samples/po/ko/hello2.po +27 -0
  243. data/samples/po/ko/hello_noop.po +23 -0
  244. data/samples/po/ko/hello_plural.po +23 -0
  245. data/samples/po/ko/helloglade2.po +29 -0
  246. data/samples/po/ko/hellogtk.po +19 -0
  247. data/samples/po/ko/hellotk.po +20 -0
  248. data/samples/po/pt_BR/hello.po +20 -0
  249. data/samples/po/pt_BR/hello2.po +28 -0
  250. data/samples/po/pt_BR/hello_noop.po +24 -0
  251. data/samples/po/pt_BR/hello_plural.po +23 -0
  252. data/samples/po/pt_BR/helloglade2.po +28 -0
  253. data/samples/po/pt_BR/hellogtk.po +20 -0
  254. data/samples/po/pt_BR/hellotk.po +20 -0
  255. data/samples/po/sv/hello.po +20 -0
  256. data/samples/po/sv/hello2.po +28 -0
  257. data/samples/po/sv/hello_noop.po +24 -0
  258. data/samples/po/sv/hello_plural.po +23 -0
  259. data/samples/po/sv/helloglade2.po +28 -0
  260. data/samples/po/sv/hellogtk.po +20 -0
  261. data/samples/po/sv/hellotk.po +20 -0
  262. data/samples/rails/README +79 -0
  263. data/samples/rails/Rakefile +212 -0
  264. data/samples/rails/app/controllers/application.rb +37 -0
  265. data/samples/rails/app/controllers/blog_controller.rb +62 -0
  266. data/samples/rails/app/helpers/application_helper.rb +3 -0
  267. data/samples/rails/app/helpers/blog_helper.rb +61 -0
  268. data/samples/rails/app/models/article.rb +2 -0
  269. data/samples/rails/app/views/blog/_form.rhtml +25 -0
  270. data/samples/rails/app/views/blog/edit.rhtml +22 -0
  271. data/samples/rails/app/views/blog/list.rhtml +30 -0
  272. data/samples/rails/app/views/blog/new.rhtml +21 -0
  273. data/samples/rails/app/views/blog/show.rhtml +18 -0
  274. data/samples/rails/app/views/layouts/blog.rhtml +36 -0
  275. data/samples/rails/config/database.yml +32 -0
  276. data/samples/rails/config/environment.rb +88 -0
  277. data/samples/rails/config/environments/development.rb +14 -0
  278. data/samples/rails/config/environments/production.rb +8 -0
  279. data/samples/rails/config/environments/test.rb +17 -0
  280. data/samples/rails/config/routes.rb +19 -0
  281. data/samples/rails/db/mysql.sql +8 -0
  282. data/samples/rails/db/postgresql.sql +7 -0
  283. data/samples/rails/locale/de/LC_MESSAGES/blog.mo +0 -0
  284. data/samples/rails/locale/de/LC_MESSAGES/lang_helper.mo +0 -0
  285. data/samples/rails/locale/es/LC_MESSAGES/blog.mo +0 -0
  286. data/samples/rails/locale/es/LC_MESSAGES/lang_helper.mo +0 -0
  287. data/samples/rails/locale/fr/LC_MESSAGES/blog.mo +0 -0
  288. data/samples/rails/locale/fr/LC_MESSAGES/lang_helper.mo +0 -0
  289. data/samples/rails/locale/ja/LC_MESSAGES/blog.mo +0 -0
  290. data/samples/rails/locale/ja/LC_MESSAGES/lang_helper.mo +0 -0
  291. data/samples/rails/locale/ko/LC_MESSAGES/blog.mo +0 -0
  292. data/samples/rails/locale/ko/LC_MESSAGES/lang_helper.mo +0 -0
  293. data/samples/rails/po/blog.pot +90 -0
  294. data/samples/rails/po/de/blog.po +91 -0
  295. data/samples/rails/po/de/lang_helper.po +28 -0
  296. data/samples/rails/po/es/blog.po +90 -0
  297. data/samples/rails/po/es/lang_helper.po +28 -0
  298. data/samples/rails/po/fr/blog.po +89 -0
  299. data/samples/rails/po/fr/lang_helper.po +27 -0
  300. data/samples/rails/po/ja/blog.po +89 -0
  301. data/samples/rails/po/ja/lang_helper.po +28 -0
  302. data/samples/rails/po/ko/blog.po +87 -0
  303. data/samples/rails/po/ko/lang_helper.po +26 -0
  304. data/samples/rails/po/lang_helper.pot +28 -0
  305. data/samples/rails/public/404.html +8 -0
  306. data/samples/rails/public/500.html +8 -0
  307. data/samples/rails/public/dispatch.cgi +10 -0
  308. data/samples/rails/public/dispatch.fcgi +24 -0
  309. data/samples/rails/public/dispatch.rb +10 -0
  310. data/samples/rails/public/favicon.ico +0 -0
  311. data/samples/rails/public/index.html +78 -0
  312. data/samples/rails/public/javascripts/controls.js +446 -0
  313. data/samples/rails/public/javascripts/dragdrop.js +537 -0
  314. data/samples/rails/public/javascripts/effects.js +612 -0
  315. data/samples/rails/public/javascripts/prototype.js +1038 -0
  316. data/samples/rails/public/stylesheets/blog.css +132 -0
  317. data/samples/rails/public/stylesheets/scaffold.css +74 -0
  318. data/samples/rails/script/benchmarker +19 -0
  319. data/samples/rails/script/breakpointer +4 -0
  320. data/samples/rails/script/console +23 -0
  321. data/samples/rails/script/destroy +7 -0
  322. data/samples/rails/script/generate +7 -0
  323. data/samples/rails/script/profiler +34 -0
  324. data/samples/rails/script/runner +29 -0
  325. data/samples/rails/script/server +49 -0
  326. data/samples/rails/test/fixtures/articles.yml +5 -0
  327. data/samples/rails/test/functional/blog_controller_test.rb +88 -0
  328. data/samples/rails/test/test_helper.rb +26 -0
  329. data/samples/rails/test/unit/article_test.rb +14 -0
  330. data/samples/rails/vendor/lang_helper.rb +49 -0
  331. data/setup.rb +1360 -0
  332. data/src/rmsgfmt.ry +233 -0
  333. data/test/README +10 -0
  334. data/test/gettext_runner.rb +18 -0
  335. data/test/gettext_test.rb +202 -0
  336. data/test/gettext_test_parser.rb +80 -0
  337. data/test/locale/cr/LC_MESSAGES/plural.mo +0 -0
  338. data/test/locale/da/LC_MESSAGES/plural.mo +0 -0
  339. data/test/locale/da/LC_MESSAGES/plural_error.mo +0 -0
  340. data/test/locale/fr/LC_MESSAGES/plural.mo +0 -0
  341. data/test/locale/fr/LC_MESSAGES/plural_error.mo +0 -0
  342. data/test/locale/fr/LC_MESSAGES/test1.mo +0 -0
  343. data/test/locale/fr/LC_MESSAGES/test2.mo +0 -0
  344. data/test/locale/ir/LC_MESSAGES/plural.mo +0 -0
  345. data/test/locale/ja/LC_MESSAGES/plural.mo +0 -0
  346. data/test/locale/ja/LC_MESSAGES/plural_error.mo +0 -0
  347. data/test/locale/ja/LC_MESSAGES/test1.mo +0 -0
  348. data/test/locale/ja/LC_MESSAGES/test2.mo +0 -0
  349. data/test/locale/ja/LC_MESSAGES/test_rubyparser.mo +0 -0
  350. data/test/locale/ja/LC_MESSAGES/test_sgettext.mo +0 -0
  351. data/test/locale/la/LC_MESSAGES/plural.mo +0 -0
  352. data/test/locale/li/LC_MESSAGES/plural.mo +0 -0
  353. data/test/locale/po/LC_MESSAGES/plural.mo +0 -0
  354. data/test/locale/sl/LC_MESSAGES/plural.mo +0 -0
  355. data/test/po/cr/plural.po +23 -0
  356. data/test/po/da/plural.po +22 -0
  357. data/test/po/da/plural_error.po +20 -0
  358. data/test/po/fr/plural.po +22 -0
  359. data/test/po/fr/plural_error.po +19 -0
  360. data/test/po/fr/test1.po +23 -0
  361. data/test/po/fr/test2.po +19 -0
  362. data/test/po/ir/plural.po +23 -0
  363. data/test/po/ja/plural.po +22 -0
  364. data/test/po/ja/plural_error.po +20 -0
  365. data/test/po/ja/test1.po +23 -0
  366. data/test/po/ja/test2.po +19 -0
  367. data/test/po/ja/test_rubyparser.po +43 -0
  368. data/test/po/ja/test_sgettext.po +47 -0
  369. data/test/po/la/plural.po +23 -0
  370. data/test/po/li/plural.po +23 -0
  371. data/test/po/po/plural.po +23 -0
  372. data/test/po/sl/plural.po +24 -0
  373. data/test/test.sh +7 -0
  374. data/test/test_erb.rhtml +15 -0
  375. data/test/test_gladeparser.glade +183 -0
  376. data/test/test_rubyparser.rb +77 -0
  377. data/test/test_rubyparser_N.rb +66 -0
  378. data/test/test_rubyparser_n.rb +64 -0
  379. data/test/test_sgettext.rb +48 -0
  380. data/test/testlib1.rb +20 -0
  381. data/test/testlib2.rb +11 -0
  382. data/test/testlib3.rb +12 -0
  383. data/test/testlib4.rb +11 -0
  384. metadata +580 -0
@@ -0,0 +1,34 @@
1
+ =begin
2
+ parser/erb.rb - parser for ERB
3
+
4
+ Copyright (C) 2005 Masao Mutoh
5
+
6
+ You may redistribute it and/or modify it under the same
7
+ license terms as Ruby.
8
+
9
+ $Id: erb.rb,v 1.2 2005/08/20 17:05:34 mutoh Exp $
10
+ =end
11
+
12
+ require 'erb'
13
+ require 'gettext/parser/ruby.rb'
14
+
15
+ module GetText
16
+ module ErbParser
17
+ module_function
18
+ def parse(file, targets = [])
19
+ erb = ERB.new(IO.readlines(file).join).src.split(/$/)
20
+ RubyParser.parse_lines(file, erb, targets)
21
+ end
22
+
23
+ def target?(file)
24
+ File.extname(file) == '.rhtml'
25
+ end
26
+ end
27
+ end
28
+
29
+ if __FILE__ == $0
30
+ # ex) ruby glade.rhtml foo.rhtml bar.rhtml
31
+ ARGV.each do |file|
32
+ p GetText::ErbParser.parse(file)
33
+ end
34
+ end
@@ -0,0 +1,98 @@
1
+ =begin
2
+ parser/glade.rb - parser for Glade-2
3
+
4
+ Copyright (C) 2004,2005 Masao Mutoh
5
+
6
+ You may redistribute it and/or modify it under the same
7
+ license terms as Ruby.
8
+
9
+ $Id: glade.rb,v 1.1.1.1 2005/08/13 02:38:09 mutoh Exp $
10
+ =end
11
+
12
+ require 'cgi'
13
+ require 'gettext'
14
+
15
+ module GetText
16
+ module GladeParser
17
+
18
+ TARGET1 = /<property.*translatable="yes">(.*)/
19
+ TARGET2 = /(.*)<\/property>/
20
+
21
+ module_function
22
+ def parse(file, targets = [])
23
+ lines = IO.readlines(file)
24
+ parse_lines(file, lines, targets)
25
+ end
26
+
27
+ #from ary of lines.
28
+ def parse_lines(file, lines, targets)
29
+ cnt = 0
30
+ target = false
31
+ line_no = 0
32
+ val = nil
33
+
34
+ loop do
35
+ line = lines.shift
36
+ break unless line
37
+
38
+ cnt += 1
39
+ if TARGET1 =~ line
40
+ line_no = cnt
41
+ val = $1 + "\n"
42
+ target = true
43
+ if TARGET2 =~ $1
44
+ val = $1
45
+ add_target(val, file, line_no, targets)
46
+ val = nil
47
+ target = false
48
+ end
49
+ elsif target
50
+ if TARGET2 =~ line
51
+ val << $1
52
+ add_target(val, file, line_no, targets)
53
+ val = nil
54
+ target = false
55
+ else
56
+ val << line
57
+ end
58
+ end
59
+ end
60
+ targets
61
+ end
62
+
63
+ XML_RE = /<\?xml/
64
+ GLADE_RE = /glade-2.0.dtd/
65
+
66
+ def target?(file)
67
+ data = IO.readlines(file)
68
+ if XML_RE =~ data[0]
69
+ if GLADE_RE =~ data[1]
70
+ return true
71
+ else
72
+ raise _("%s is not glade-2.0 format.") % [file]
73
+ end
74
+ else
75
+ return false
76
+ end
77
+ end
78
+
79
+ def add_target(val, file, line_no, targets)
80
+ return unless val.size > 0
81
+ assoc_data = targets.assoc(val)
82
+ val = CGI.unescapeHTML(val)
83
+ if assoc_data
84
+ targets[targets.index(assoc_data)] = assoc_data << "#{file}:#{line_no}"
85
+ else
86
+ targets << [val.gsub(/\n/, '\n'), "#{file}:#{line_no}"]
87
+ end
88
+ targets
89
+ end
90
+ end
91
+ end
92
+
93
+ if __FILE__ == $0
94
+ # ex) ruby glade.rb foo.glade bar.glade
95
+ ARGV.each do |file|
96
+ p GetText::GladeParser.parse(file)
97
+ end
98
+ end
@@ -0,0 +1,211 @@
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) 2001,2002 Yasushi Shoji, Masao Mutoh
7
+
8
+ Yasushi Shoji <yashi@yashi.com>
9
+ Masao Mutoh <mutoh@highway.ne.jp>
10
+
11
+ You may redistribute it and/or modify it under the same
12
+ license terms as Ruby.
13
+
14
+ $Id: ruby.rb,v 1.1.1.1 2005/08/13 02:38:09 mutoh Exp $
15
+ =end
16
+
17
+ require 'irb/ruby-lex'
18
+ require 'irb/ruby-token'
19
+ require 'stringio'
20
+
21
+ class RubyLexX < RubyLex
22
+ def initialize
23
+ super
24
+ @prompt = nil
25
+ @here_header = nil
26
+ @lex_state = nil
27
+ end
28
+
29
+ def token
30
+ tk = super
31
+ if $DEBUG
32
+ if tk.is_a? TkSTRING
33
+ $stderr.puts("#{tk}: #{tk.value}")
34
+ elsif tk.is_a? TkIDENTIFIER
35
+ $stderr.puts("#{tk}: #{tk.name}")
36
+ else
37
+ $stderr.puts(tk)
38
+ end
39
+ end
40
+ tk
41
+ end
42
+
43
+ def read_escape
44
+ case ch = getc
45
+ when "\n", "\r", "\f"
46
+ when "\\", "n", "t", "r", "f", "v", "a", "e", "b" #"
47
+ return "\\".concat(ch)
48
+ when /[0-7]/
49
+ ungetc ch
50
+ 3.times do
51
+ case ch = getc
52
+ when /[0-7]/
53
+ when nil
54
+ break
55
+ else
56
+ ungetc
57
+ break
58
+ end
59
+ end
60
+
61
+ when "x"
62
+ 2.times do
63
+ case ch = getc
64
+ when /[0-9a-fA-F]/
65
+ when nil
66
+ break
67
+ else
68
+ ungetc
69
+ break
70
+ end
71
+ end
72
+
73
+ when "M"
74
+ if (ch = getc) != '-'
75
+ ungetc
76
+ else
77
+ if (ch = getc) == "\\" #"
78
+ read_escape
79
+ end
80
+ end
81
+
82
+ when "C", "c", "^"
83
+ if ch == "C" and (ch = getc) != "-"
84
+ ungetc
85
+ elsif (ch = getc) == "\\" #"
86
+ read_escape
87
+ end
88
+ when '#'
89
+ return ch
90
+ else
91
+ # other characters
92
+ end
93
+ end
94
+
95
+ def identify_string(ltype, quoted = ltype)
96
+ @ltype = ltype
97
+ @quoted = quoted
98
+ subtype = nil
99
+ str = ''
100
+ begin
101
+ while ch = getc
102
+ if @quoted == ch
103
+ break
104
+ elsif @ltype != "'" && @ltype != "]" and ch == "#"
105
+ subtype = true
106
+ elsif ch == '\\' #'
107
+ e = read_escape
108
+ str.concat e unless e.nil?
109
+ else
110
+ str.concat ch
111
+ end
112
+ end
113
+ if @ltype == "/"
114
+ if peek(0) =~ /i|o|n|e|s/
115
+ getc
116
+ end
117
+ end
118
+ if subtype
119
+ tk = Token(DLtype2Token[ltype], str)
120
+ else
121
+ tk = Token(Ltype2Token[ltype], str)
122
+ end
123
+ ensure
124
+ @ltype = nil
125
+ @quoted = nil
126
+ @lex_state = EXPR_END
127
+ end
128
+ end
129
+ end
130
+
131
+ ######################################################################
132
+ # GetText::RubyParser
133
+
134
+ module GetText
135
+ module RubyParser
136
+ ID = ['gettext', '_', 'N_', 'sgettext', 's_']
137
+ PLURAL_ID = ['ngettext', 'n_']
138
+
139
+ module_function
140
+ def parse(file, targets = [])
141
+ lines = IO.readlines(file)
142
+ parse_lines(file, lines, targets)
143
+ end
144
+
145
+ def parse_lines(file_name, lines, targets)
146
+ file = StringIO.new(lines.join + "\n")
147
+ rl = RubyLexX.new
148
+ rl.set_input(file)
149
+ rl.skip_space = true
150
+ rl.readed_auto_clean_up = true
151
+
152
+ target = nil
153
+ msgid = nil
154
+ line_no = nil
155
+ while tk = rl.token
156
+ case tk
157
+ when RubyToken::TkIDENTIFIER, RubyToken::TkCONSTANT
158
+ if ID.include?(tk.name)
159
+ target = :normal
160
+ elsif PLURAL_ID.include?(tk.name)
161
+ target = :plural
162
+ else
163
+ target = nil
164
+ end
165
+ line_no = tk.line_no.to_s
166
+ when RubyToken::TkSTRING
167
+ if target
168
+ if msgid
169
+ msgid += tk.value
170
+ else
171
+ msgid = tk.value
172
+ end
173
+ end
174
+ when RubyToken::TkPLUS, RubyToken::TkNL
175
+ #do nothing
176
+ when RubyToken::TkCOMMA
177
+ if msgid and target == :plural
178
+ msgid += "\000"
179
+ target = :normal
180
+ end
181
+ else
182
+ if msgid
183
+ key_existed = targets.assoc(msgid)
184
+ if key_existed
185
+ targets[targets.index(key_existed)] = key_existed <<
186
+ file_name + ":" + line_no
187
+ else
188
+ targets << [msgid.gsub(/\n/, '\n'), file_name + ":" + line_no]
189
+ end
190
+ msgid = nil
191
+ target = nil
192
+ end
193
+ end
194
+ targets
195
+ end
196
+ targets
197
+ end
198
+
199
+ def target?(file)
200
+ true # always true, as default parser.
201
+ end
202
+
203
+ end
204
+ end
205
+
206
+ if __FILE__ == $0
207
+ # ex) ruby c.rb foo.rb bar.rb
208
+ ARGV.each do |file|
209
+ p GetText::RubyParser.parse(file)
210
+ end
211
+ end
@@ -0,0 +1,40 @@
1
+ =begin
2
+ gettext/rails.rb - GetText for "Ruby on Rails"
3
+
4
+ Copyright (C) 2005 Masao Mutoh
5
+
6
+ You may redistribute it and/or modify it under the same
7
+ license terms as Ruby.
8
+
9
+ $Id: rails.rb,v 1.1 2005/08/27 18:52:20 mutoh Exp $
10
+ =end
11
+
12
+ require 'gettext'
13
+ require 'gettext/cgi'
14
+
15
+ module GetText
16
+ module Rails
17
+ include GetText
18
+
19
+ alias :_bindtextdomain :bindtextdomain
20
+
21
+ def bindtextdomain(domainname, _cgi = nil, locale = nil, charset = "UTF-8")
22
+ set_cgi(_cgi) if _cgi
23
+ @gettext_container_domainname = domainname
24
+ path = File.join(RAILS_ROOT, "locale")
25
+ _bindtextdomain(domainname, path, locale, charset)
26
+ end
27
+
28
+ def callersrc
29
+ @gettext_container_domainname
30
+ end
31
+
32
+ end
33
+ end
34
+
35
+ module ActionController
36
+ class Base
37
+ helper GetText::Rails
38
+ include GetText::Rails
39
+ end
40
+ end
@@ -0,0 +1,181 @@
1
+ #! /usr/bin/env ruby
2
+ =begin
3
+ rgettext.rb - Generate a .pot file.
4
+
5
+ Copyright (C) 2003-2005 Masao Mutoh
6
+ Copyright (C) 2001,2002 Yasushi Shoji, Masao Mutoh
7
+
8
+ Yasushi Shoji <yashi@yashi.com>
9
+ Masao Mutoh <mutoh@highway.ne.jp>
10
+
11
+ You may redistribute it and/or modify it under the same
12
+ license terms as Ruby.
13
+ =end
14
+
15
+ require 'optparse'
16
+ require 'gettext'
17
+
18
+ module GetText
19
+
20
+ module RGetText
21
+ extend GetText
22
+
23
+ bindtextdomain("rgettext")
24
+
25
+ # constant values
26
+ VERSION = GetText::VERSION
27
+ DATE = %w($Date: 2005/09/02 19:32:48 $)[1]
28
+ MAX_LINE_LEN = 70
29
+
30
+ EX_PARSERS = [
31
+ ["glade.rb", "GladeParser"],
32
+ ["erb.rb", "ErbParser"],
33
+ ["ruby.rb", "RubyParser"] # Default parser.
34
+ ]
35
+
36
+ EX_PARSERS.each do |f, _|
37
+ require File.join("gettext/parser/#{f}")
38
+ end
39
+
40
+ module_function
41
+
42
+ def generate_pot_header
43
+ time = Time.now.strftime("%Y-%m-%d %H:%M%z")
44
+ %Q[# SOME DESCRIPTIVE TITLE.
45
+ # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
46
+ # This file is distributed under the same license as the PACKAGE package.
47
+ # FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
48
+ #
49
+ #, fuzzy
50
+ msgid ""
51
+ msgstr ""
52
+ "Project-Id-Version: PACKAGE VERSION\\n"
53
+ "POT-Creation-Date: #{time}\\n"
54
+ "PO-Revision-Date: #{time}\\n"
55
+ "Last-Translator: FULL NAME <EMAIL@ADDRESS>\\n"
56
+ "Language-Team: LANGUAGE <LL@li.org>\\n"
57
+ "MIME-Version: 1.0\\n"
58
+ "Content-Type: text/plain; charset=UTF-8\\n"
59
+ "Content-Transfer-Encoding: 8bit\\n"
60
+ "Plural-Forms: nplurals=INTEGER; plural=EXPRESSION;\\n"]
61
+ end
62
+
63
+ def generate_pot(ary)
64
+ str = ""
65
+ result = Array.new
66
+ ary.each do |key|
67
+ msgid = key.shift
68
+ curr_pos = MAX_LINE_LEN
69
+ key.each do |e|
70
+ if curr_pos + e.size > MAX_LINE_LEN
71
+ str << "\n#:"
72
+ curr_pos = 3
73
+ else
74
+ curr_pos += (e.size + 1)
75
+ end
76
+ str << " " << e
77
+ end
78
+ msgid.gsub!(/"/, '\"')
79
+ msgid.gsub!(/\r/, '')
80
+ if msgid.include?("\000")
81
+ ids = msgid.split(/\000/)
82
+ str << "\nmsgid \"" << ids[0] << "\"\n"
83
+ str << "msgid_plural \"" << ids[1] << "\"\n"
84
+ str << "msgstr[0] \"\"\n"
85
+ str << "msgstr[1] \"\"\n"
86
+ else
87
+ str << "\nmsgid \"" << msgid << "\"\n"
88
+ str << "msgstr \"\"\n"
89
+ end
90
+ end
91
+ str
92
+ end
93
+
94
+ def parse(files)
95
+ ary = []
96
+ files.each do |file|
97
+ begin
98
+ EX_PARSERS.each do |_, c|
99
+ klass = GetText.const_get(c)
100
+ if klass.target?(file)
101
+ ary = klass.parse(file, ary)
102
+ break
103
+ end
104
+ end
105
+ rescue
106
+ puts $!
107
+ exit 1
108
+ end
109
+ end
110
+
111
+ ary
112
+ end
113
+
114
+ def check_options
115
+ output = STDOUT
116
+
117
+ opts = OptionParser.new
118
+ opts.banner = _("Usage: %s input.rb [-o output.pot]") % $0
119
+ opts.separator("")
120
+ opts.separator(_("Extract translatable strings from given input files."))
121
+ opts.separator("")
122
+ opts.separator(_("Specific options:"))
123
+
124
+ opts.on("-o", "--output=FILE", _("write output to specified file")) do |out|
125
+ unless FileTest.exist? out
126
+ output = File.new(File.expand_path(out), "w+")
127
+ else
128
+ $stderr.puts(_("File '%s' has already existed.") % out)
129
+ exit 1
130
+ end
131
+ end
132
+
133
+ opts.on_tail("--version", _("display version information and exit")) do
134
+ puts "#{$0} #{VERSION} (#{DATE})"
135
+ exit
136
+ end
137
+
138
+ opts.parse!(ARGV)
139
+
140
+ if ARGV.size == 0
141
+ puts opts.help
142
+ exit 1
143
+ end
144
+
145
+ [ARGV, output]
146
+ end
147
+
148
+ def run(targetfiles = nil, out = STDOUT)
149
+ if targetfiles.is_a? String
150
+ targetfiles = [targetfiles]
151
+ elsif ! targetfiles
152
+ targetfiles, out = check_options
153
+ end
154
+
155
+ if targetfiles.size == 0
156
+ raise ArgumentError, _("no input files")
157
+ end
158
+
159
+ if out.is_a? String
160
+ File.open(File.expand_path(out), "w+") do |file|
161
+ file.puts generate_pot_header
162
+ file.puts generate_pot(parse(targetfiles))
163
+ end
164
+ else
165
+ out.puts generate_pot_header
166
+ out.puts generate_pot(parse(targetfiles))
167
+ end
168
+
169
+ end
170
+ end
171
+
172
+ module_function
173
+ def rgettext(targetfiles = nil, out = STDOUT)
174
+ RGetText.run(targetfiles, out)
175
+ end
176
+ end
177
+
178
+ if $0 == __FILE__
179
+ GetText.rgettext
180
+ # GetText.rgettext($0, "tmp.txt")
181
+ end