grosser-gettext 2.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 (406) hide show
  1. data/ChangeLog +2014 -0
  2. data/README.rdoc +172 -0
  3. data/Rakefile +192 -0
  4. data/bin/rgettext +24 -0
  5. data/bin/rmsgfmt +24 -0
  6. data/bin/rmsgmerge +24 -0
  7. data/gettext.gemspec +39 -0
  8. data/lib/gettext.rb +263 -0
  9. data/lib/gettext/cgi.rb +40 -0
  10. data/lib/gettext/class_info.rb +55 -0
  11. data/lib/gettext/core_ext/iconv.rb +109 -0
  12. data/lib/gettext/core_ext/string.rb +63 -0
  13. data/lib/gettext/mofile.rb +320 -0
  14. data/lib/gettext/parser/erb.rb +50 -0
  15. data/lib/gettext/parser/glade.rb +99 -0
  16. data/lib/gettext/parser/ruby.rb +170 -0
  17. data/lib/gettext/poparser.rb +332 -0
  18. data/lib/gettext/textdomain.rb +225 -0
  19. data/lib/gettext/textdomain_manager.rb +218 -0
  20. data/lib/gettext/tools.rb +177 -0
  21. data/lib/gettext/tools/rgettext.rb +275 -0
  22. data/lib/gettext/tools/rmsgfmt.rb +84 -0
  23. data/lib/gettext/tools/rmsgmerge.rb +505 -0
  24. data/lib/gettext/utils.rb +39 -0
  25. data/lib/gettext/version.rb +12 -0
  26. data/po/bg/rgettext.po +150 -0
  27. data/po/bs/rgettext.po +151 -0
  28. data/po/ca/rgettext.po +149 -0
  29. data/po/cs/rgettext.po +152 -0
  30. data/po/de/#rails.po# +175 -0
  31. data/po/de/rgettext.po +157 -0
  32. data/po/el/rgettext.po +148 -0
  33. data/po/eo/rgettext.po +149 -0
  34. data/po/es/rgettext.po +150 -0
  35. data/po/et/rgettext.po +147 -0
  36. data/po/fr/rgettext.po +153 -0
  37. data/po/hr/rgettext.po +151 -0
  38. data/po/hu/rgettext.po +149 -0
  39. data/po/it/rgettext.po +150 -0
  40. data/po/ja/rails.po.old +150 -0
  41. data/po/ja/rgettext.po +149 -0
  42. data/po/ko/rgettext.po +149 -0
  43. data/po/lv/rgettext.po +150 -0
  44. data/po/nb/rgettext.po +151 -0
  45. data/po/nl/rgettext.po +150 -0
  46. data/po/pt_BR/rgettext.po +152 -0
  47. data/po/rgettext.pot +141 -0
  48. data/po/ru/rgettext.po +151 -0
  49. data/po/sr/rgettext.po +150 -0
  50. data/po/sv/rgettext.po +143 -0
  51. data/po/ua/rgettext.po +155 -0
  52. data/po/vi/rgettext.po +148 -0
  53. data/po/zh/rgettext.po +149 -0
  54. data/po/zh_TW/rgettext.po +148 -0
  55. data/samples/README +16 -0
  56. data/samples/cgi/README +43 -0
  57. data/samples/cgi/Rakefile +27 -0
  58. data/samples/cgi/cookie.cgi +64 -0
  59. data/samples/cgi/gettext.css +116 -0
  60. data/samples/cgi/helloerb.rhtml +28 -0
  61. data/samples/cgi/helloerb1.cgi +58 -0
  62. data/samples/cgi/helloerb2.cgi +51 -0
  63. data/samples/cgi/hellolib.rb +20 -0
  64. data/samples/cgi/http.rb +51 -0
  65. data/samples/cgi/index.cgi +111 -0
  66. data/samples/cgi/other.rhtml +20 -0
  67. data/samples/cgi/po/bg/helloerb1.po +59 -0
  68. data/samples/cgi/po/bg/helloerb2.po +51 -0
  69. data/samples/cgi/po/bg/hellolib.po +23 -0
  70. data/samples/cgi/po/bg/main.po +83 -0
  71. data/samples/cgi/po/bs/helloerb1.po +59 -0
  72. data/samples/cgi/po/bs/helloerb2.po +51 -0
  73. data/samples/cgi/po/bs/hellolib.po +23 -0
  74. data/samples/cgi/po/bs/main.po +83 -0
  75. data/samples/cgi/po/ca/helloerb1.po +59 -0
  76. data/samples/cgi/po/ca/helloerb2.po +51 -0
  77. data/samples/cgi/po/ca/hellolib.po +23 -0
  78. data/samples/cgi/po/ca/main.po +83 -0
  79. data/samples/cgi/po/cs/helloerb1.po +61 -0
  80. data/samples/cgi/po/cs/helloerb2.po +52 -0
  81. data/samples/cgi/po/cs/hellolib.po +25 -0
  82. data/samples/cgi/po/cs/main.po +85 -0
  83. data/samples/cgi/po/de/helloerb1.po +61 -0
  84. data/samples/cgi/po/de/helloerb2.po +52 -0
  85. data/samples/cgi/po/de/hellolib.po +24 -0
  86. data/samples/cgi/po/de/main.po +86 -0
  87. data/samples/cgi/po/el/helloerb1.po +60 -0
  88. data/samples/cgi/po/el/helloerb2.po +51 -0
  89. data/samples/cgi/po/el/hellolib.po +23 -0
  90. data/samples/cgi/po/el/main.po +84 -0
  91. data/samples/cgi/po/eo/helloerb1.po +60 -0
  92. data/samples/cgi/po/eo/helloerb2.po +52 -0
  93. data/samples/cgi/po/eo/hellolib.po +24 -0
  94. data/samples/cgi/po/eo/main.po +84 -0
  95. data/samples/cgi/po/es/helloerb1.po +59 -0
  96. data/samples/cgi/po/es/helloerb2.po +50 -0
  97. data/samples/cgi/po/es/hellolib.po +22 -0
  98. data/samples/cgi/po/es/main.po +83 -0
  99. data/samples/cgi/po/fr/helloerb1.po +59 -0
  100. data/samples/cgi/po/fr/helloerb2.po +51 -0
  101. data/samples/cgi/po/fr/hellolib.po +22 -0
  102. data/samples/cgi/po/fr/main.po +85 -0
  103. data/samples/cgi/po/helloerb1.pot +60 -0
  104. data/samples/cgi/po/helloerb2.pot +52 -0
  105. data/samples/cgi/po/hellolib.pot +24 -0
  106. data/samples/cgi/po/hr/helloerb1.po +59 -0
  107. data/samples/cgi/po/hr/helloerb2.po +51 -0
  108. data/samples/cgi/po/hr/hellolib.po +23 -0
  109. data/samples/cgi/po/hr/main.po +83 -0
  110. data/samples/cgi/po/hu/helloerb1.po +59 -0
  111. data/samples/cgi/po/hu/helloerb2.po +51 -0
  112. data/samples/cgi/po/hu/hellolib.po +23 -0
  113. data/samples/cgi/po/hu/main.po +82 -0
  114. data/samples/cgi/po/it/helloerb1.po +60 -0
  115. data/samples/cgi/po/it/helloerb2.po +52 -0
  116. data/samples/cgi/po/it/hellolib.po +24 -0
  117. data/samples/cgi/po/it/main.po +84 -0
  118. data/samples/cgi/po/ja/helloerb1.po +60 -0
  119. data/samples/cgi/po/ja/helloerb2.po +52 -0
  120. data/samples/cgi/po/ja/hellolib.po +24 -0
  121. data/samples/cgi/po/ja/main.po +85 -0
  122. data/samples/cgi/po/ko/helloerb1.po +59 -0
  123. data/samples/cgi/po/ko/helloerb2.po +51 -0
  124. data/samples/cgi/po/ko/hellolib.po +23 -0
  125. data/samples/cgi/po/ko/main.po +84 -0
  126. data/samples/cgi/po/lv/helloerb1.po +65 -0
  127. data/samples/cgi/po/lv/helloerb2.po +52 -0
  128. data/samples/cgi/po/lv/hellolib.po +24 -0
  129. data/samples/cgi/po/lv/main.po +77 -0
  130. data/samples/cgi/po/main.pot +80 -0
  131. data/samples/cgi/po/nb/helloerb1.po +60 -0
  132. data/samples/cgi/po/nb/helloerb2.po +52 -0
  133. data/samples/cgi/po/nb/hellolib.po +24 -0
  134. data/samples/cgi/po/nb/main.po +84 -0
  135. data/samples/cgi/po/nl/helloerb1.po +61 -0
  136. data/samples/cgi/po/nl/helloerb2.po +52 -0
  137. data/samples/cgi/po/nl/hellolib.po +24 -0
  138. data/samples/cgi/po/nl/main.po +86 -0
  139. data/samples/cgi/po/pt_BR/helloerb1.po +59 -0
  140. data/samples/cgi/po/pt_BR/helloerb2.po +51 -0
  141. data/samples/cgi/po/pt_BR/hellolib.po +23 -0
  142. data/samples/cgi/po/pt_BR/main.po +84 -0
  143. data/samples/cgi/po/ru/helloerb1.po +58 -0
  144. data/samples/cgi/po/ru/helloerb2.po +50 -0
  145. data/samples/cgi/po/ru/hellolib.po +22 -0
  146. data/samples/cgi/po/ru/main.po +82 -0
  147. data/samples/cgi/po/sr/helloerb1.po +60 -0
  148. data/samples/cgi/po/sr/helloerb2.po +52 -0
  149. data/samples/cgi/po/sr/hellolib.po +24 -0
  150. data/samples/cgi/po/sr/main.po +80 -0
  151. data/samples/cgi/po/ua/helloerb1.po +62 -0
  152. data/samples/cgi/po/ua/helloerb2.po +54 -0
  153. data/samples/cgi/po/ua/hellolib.po +26 -0
  154. data/samples/cgi/po/ua/main.po +84 -0
  155. data/samples/cgi/po/vi/helloerb1.po +65 -0
  156. data/samples/cgi/po/vi/helloerb2.po +52 -0
  157. data/samples/cgi/po/vi/hellolib.po +24 -0
  158. data/samples/cgi/po/vi/main.po +77 -0
  159. data/samples/cgi/po/zh/helloerb1.po +60 -0
  160. data/samples/cgi/po/zh/helloerb2.po +52 -0
  161. data/samples/cgi/po/zh/hellolib.po +24 -0
  162. data/samples/cgi/po/zh/main.po +80 -0
  163. data/samples/cgi/po/zh_TW/helloerb1.po +67 -0
  164. data/samples/cgi/po/zh_TW/helloerb2.po +54 -0
  165. data/samples/cgi/po/zh_TW/hellolib.po +26 -0
  166. data/samples/cgi/po/zh_TW/main.po +79 -0
  167. data/samples/hello.rb +36 -0
  168. data/samples/hello2.rb +23 -0
  169. data/samples/hello_glade2.glade +70 -0
  170. data/samples/hello_glade2.rb +25 -0
  171. data/samples/hello_gtk2.rb +27 -0
  172. data/samples/hello_noop.rb +31 -0
  173. data/samples/hello_plural.rb +26 -0
  174. data/samples/hello_tk.rb +19 -0
  175. data/samples/makemo.rb +4 -0
  176. data/samples/po/bg/hello.po +24 -0
  177. data/samples/po/bg/hello2.po +31 -0
  178. data/samples/po/bg/hello_glade2.po +31 -0
  179. data/samples/po/bg/hello_gtk.po +23 -0
  180. data/samples/po/bg/hello_noop.po +27 -0
  181. data/samples/po/bg/hello_plural.po +25 -0
  182. data/samples/po/bg/hello_tk.po +23 -0
  183. data/samples/po/bs/hello.po +23 -0
  184. data/samples/po/bs/hello2.po +31 -0
  185. data/samples/po/bs/hello_glade2.po +31 -0
  186. data/samples/po/bs/hello_gtk.po +23 -0
  187. data/samples/po/bs/hello_noop.po +27 -0
  188. data/samples/po/bs/hello_plural.po +26 -0
  189. data/samples/po/bs/hello_tk.po +23 -0
  190. data/samples/po/ca/hello.po +23 -0
  191. data/samples/po/ca/hello2.po +31 -0
  192. data/samples/po/ca/hello_glade2.po +31 -0
  193. data/samples/po/ca/hello_gtk.po +23 -0
  194. data/samples/po/ca/hello_noop.po +27 -0
  195. data/samples/po/ca/hello_plural.po +25 -0
  196. data/samples/po/ca/hello_tk.po +23 -0
  197. data/samples/po/cs/hello.po +23 -0
  198. data/samples/po/cs/hello2.po +31 -0
  199. data/samples/po/cs/hello_glade2.po +37 -0
  200. data/samples/po/cs/hello_gtk.po +23 -0
  201. data/samples/po/cs/hello_noop.po +27 -0
  202. data/samples/po/cs/hello_plural.po +26 -0
  203. data/samples/po/cs/hello_tk.po +23 -0
  204. data/samples/po/de/hello.po +20 -0
  205. data/samples/po/de/hello2.po +28 -0
  206. data/samples/po/de/hello_glade2.po +27 -0
  207. data/samples/po/de/hello_gtk.po +20 -0
  208. data/samples/po/de/hello_noop.po +24 -0
  209. data/samples/po/de/hello_plural.po +25 -0
  210. data/samples/po/de/hello_tk.po +20 -0
  211. data/samples/po/el/hello.po +23 -0
  212. data/samples/po/el/hello2.po +31 -0
  213. data/samples/po/el/hello_glade2.po +31 -0
  214. data/samples/po/el/hello_gtk.po +22 -0
  215. data/samples/po/el/hello_noop.po +27 -0
  216. data/samples/po/el/hello_plural.po +25 -0
  217. data/samples/po/el/hello_tk.po +23 -0
  218. data/samples/po/eo/hello.po +23 -0
  219. data/samples/po/eo/hello2.po +31 -0
  220. data/samples/po/eo/hello_glade2.po +32 -0
  221. data/samples/po/eo/hello_gtk.po +23 -0
  222. data/samples/po/eo/hello_noop.po +27 -0
  223. data/samples/po/eo/hello_plural.po +26 -0
  224. data/samples/po/eo/hello_tk.po +24 -0
  225. data/samples/po/es/hello.po +21 -0
  226. data/samples/po/es/hello2.po +28 -0
  227. data/samples/po/es/hello_glade2.po +28 -0
  228. data/samples/po/es/hello_gtk.po +20 -0
  229. data/samples/po/es/hello_noop.po +24 -0
  230. data/samples/po/es/hello_plural.po +23 -0
  231. data/samples/po/es/hello_tk.po +20 -0
  232. data/samples/po/fr/hello.po +18 -0
  233. data/samples/po/fr/hello2.po +26 -0
  234. data/samples/po/fr/hello_glade2.po +27 -0
  235. data/samples/po/fr/hello_gtk.po +18 -0
  236. data/samples/po/fr/hello_noop.po +22 -0
  237. data/samples/po/fr/hello_plural.po +21 -0
  238. data/samples/po/fr/hello_tk.po +18 -0
  239. data/samples/po/hello.pot +23 -0
  240. data/samples/po/hello2.pot +31 -0
  241. data/samples/po/hello_glade2.pot +32 -0
  242. data/samples/po/hello_gtk.pot +23 -0
  243. data/samples/po/hello_noop.pot +27 -0
  244. data/samples/po/hello_plural.pot +26 -0
  245. data/samples/po/hello_tk.pot +24 -0
  246. data/samples/po/hr/hello.po +23 -0
  247. data/samples/po/hr/hello2.po +31 -0
  248. data/samples/po/hr/hello_glade2.po +31 -0
  249. data/samples/po/hr/hello_gtk.po +23 -0
  250. data/samples/po/hr/hello_noop.po +27 -0
  251. data/samples/po/hr/hello_plural.po +26 -0
  252. data/samples/po/hr/hello_tk.po +23 -0
  253. data/samples/po/hu/hello.po +22 -0
  254. data/samples/po/hu/hello2.po +30 -0
  255. data/samples/po/hu/hello_glade2.po +31 -0
  256. data/samples/po/hu/hello_gtk.po +22 -0
  257. data/samples/po/hu/hello_noop.po +26 -0
  258. data/samples/po/hu/hello_plural.po +25 -0
  259. data/samples/po/hu/hello_tk.po +23 -0
  260. data/samples/po/it/hello.po +20 -0
  261. data/samples/po/it/hello2.po +28 -0
  262. data/samples/po/it/hello_glade2.po +28 -0
  263. data/samples/po/it/hello_gtk.po +21 -0
  264. data/samples/po/it/hello_noop.po +24 -0
  265. data/samples/po/it/hello_plural.po +23 -0
  266. data/samples/po/it/hello_tk.po +21 -0
  267. data/samples/po/ja/hello.po +20 -0
  268. data/samples/po/ja/hello2.po +28 -0
  269. data/samples/po/ja/hello_glade2.po +26 -0
  270. data/samples/po/ja/hello_gtk.po +19 -0
  271. data/samples/po/ja/hello_noop.po +23 -0
  272. data/samples/po/ja/hello_plural.po +21 -0
  273. data/samples/po/ja/hello_tk.po +19 -0
  274. data/samples/po/ko/hello.po +18 -0
  275. data/samples/po/ko/hello2.po +26 -0
  276. data/samples/po/ko/hello_glade2.po +29 -0
  277. data/samples/po/ko/hello_gtk.po +18 -0
  278. data/samples/po/ko/hello_noop.po +22 -0
  279. data/samples/po/ko/hello_plural.po +25 -0
  280. data/samples/po/ko/hello_tk.po +19 -0
  281. data/samples/po/lv/hello.po +24 -0
  282. data/samples/po/lv/hello2.po +32 -0
  283. data/samples/po/lv/hello_glade2.po +38 -0
  284. data/samples/po/lv/hello_gtk.po +24 -0
  285. data/samples/po/lv/hello_noop.po +28 -0
  286. data/samples/po/lv/hello_plural.po +26 -0
  287. data/samples/po/lv/hello_tk.po +24 -0
  288. data/samples/po/nb/hello.po +23 -0
  289. data/samples/po/nb/hello2.po +31 -0
  290. data/samples/po/nb/hello_glade2.po +31 -0
  291. data/samples/po/nb/hello_gtk.po +23 -0
  292. data/samples/po/nb/hello_noop.po +27 -0
  293. data/samples/po/nb/hello_plural.po +26 -0
  294. data/samples/po/nb/hello_tk.po +24 -0
  295. data/samples/po/nl/hello.po +24 -0
  296. data/samples/po/nl/hello2.po +32 -0
  297. data/samples/po/nl/hello_glade2.po +31 -0
  298. data/samples/po/nl/hello_gtk.po +24 -0
  299. data/samples/po/nl/hello_noop.po +28 -0
  300. data/samples/po/nl/hello_plural.po +25 -0
  301. data/samples/po/nl/hello_tk.po +24 -0
  302. data/samples/po/pt_BR/hello.po +21 -0
  303. data/samples/po/pt_BR/hello2.po +29 -0
  304. data/samples/po/pt_BR/hello_glade2.po +29 -0
  305. data/samples/po/pt_BR/hello_gtk.po +21 -0
  306. data/samples/po/pt_BR/hello_noop.po +25 -0
  307. data/samples/po/pt_BR/hello_plural.po +23 -0
  308. data/samples/po/pt_BR/hello_tk.po +21 -0
  309. data/samples/po/ru/hello.po +22 -0
  310. data/samples/po/ru/hello2.po +30 -0
  311. data/samples/po/ru/hello_glade2.po +30 -0
  312. data/samples/po/ru/hello_gtk.po +22 -0
  313. data/samples/po/ru/hello_noop.po +26 -0
  314. data/samples/po/ru/hello_plural.po +28 -0
  315. data/samples/po/ru/hello_tk.po +22 -0
  316. data/samples/po/sr/hello.po +22 -0
  317. data/samples/po/sr/hello2.po +30 -0
  318. data/samples/po/sr/hello_glade2.po +32 -0
  319. data/samples/po/sr/hello_gtk.po +22 -0
  320. data/samples/po/sr/hello_noop.po +26 -0
  321. data/samples/po/sr/hello_plural.po +26 -0
  322. data/samples/po/sr/hello_tk.po +24 -0
  323. data/samples/po/sv/hello.po +20 -0
  324. data/samples/po/sv/hello2.po +28 -0
  325. data/samples/po/sv/hello_glade2.po +28 -0
  326. data/samples/po/sv/hello_gtk.po +20 -0
  327. data/samples/po/sv/hello_noop.po +24 -0
  328. data/samples/po/sv/hello_plural.po +23 -0
  329. data/samples/po/sv/hello_tk.po +20 -0
  330. data/samples/po/test.rb +11 -0
  331. data/samples/po/ua/hello.po +22 -0
  332. data/samples/po/ua/hello2.po +30 -0
  333. data/samples/po/ua/hello_glade2.po +34 -0
  334. data/samples/po/ua/hello_gtk.po +22 -0
  335. data/samples/po/ua/hello_noop.po +26 -0
  336. data/samples/po/ua/hello_plural.po +29 -0
  337. data/samples/po/ua/hello_tk.po +26 -0
  338. data/samples/po/vi/hello.po +23 -0
  339. data/samples/po/vi/hello2.po +31 -0
  340. data/samples/po/vi/hello_glade2.po +38 -0
  341. data/samples/po/vi/hello_gtk.po +23 -0
  342. data/samples/po/vi/hello_noop.po +27 -0
  343. data/samples/po/vi/hello_plural.po +26 -0
  344. data/samples/po/vi/hello_tk.po +24 -0
  345. data/samples/po/zh/hello.po +23 -0
  346. data/samples/po/zh/hello2.po +31 -0
  347. data/samples/po/zh/hello_glade2.po +31 -0
  348. data/samples/po/zh/hello_gtk.po +23 -0
  349. data/samples/po/zh/hello_noop.po +27 -0
  350. data/samples/po/zh/hello_plural.po +25 -0
  351. data/samples/po/zh/hello_tk.po +23 -0
  352. data/samples/po/zh_TW/hello.po +26 -0
  353. data/samples/po/zh_TW/hello2.po +34 -0
  354. data/samples/po/zh_TW/hello_glade2.po +40 -0
  355. data/samples/po/zh_TW/hello_gtk.po +25 -0
  356. data/samples/po/zh_TW/hello_noop.po +30 -0
  357. data/samples/po/zh_TW/hello_plural.po +28 -0
  358. data/samples/po/zh_TW/hello_tk.po +26 -0
  359. data/src/poparser.ry +198 -0
  360. data/test/README +1 -0
  361. data/test/Rakefile +19 -0
  362. data/test/po/cr/plural.po +23 -0
  363. data/test/po/da/plural.po +22 -0
  364. data/test/po/da/plural_error.po +21 -0
  365. data/test/po/fr/plural.po +28 -0
  366. data/test/po/fr/plural_error.po +20 -0
  367. data/test/po/fr/test1.po +23 -0
  368. data/test/po/fr/test2.po +19 -0
  369. data/test/po/fr/test6.po +23 -0
  370. data/test/po/ir/plural.po +23 -0
  371. data/test/po/ja/npgettext.po +46 -0
  372. data/test/po/ja/nsgettext.po +65 -0
  373. data/test/po/ja/pgettext.po +41 -0
  374. data/test/po/ja/plural.po +28 -0
  375. data/test/po/ja/plural_error.po +20 -0
  376. data/test/po/ja/rubyparser.po +43 -0
  377. data/test/po/ja/sgettext.po +47 -0
  378. data/test/po/ja/test1.po +23 -0
  379. data/test/po/ja/test2.po +19 -0
  380. data/test/po/ja/test6.po +23 -0
  381. data/test/po/la/plural.po +23 -0
  382. data/test/po/la/plural_error.po +21 -0
  383. data/test/po/li/plural.po +23 -0
  384. data/test/po/po/plural.po +23 -0
  385. data/test/po/sl/plural.po +24 -0
  386. data/test/test_class_info.rb +80 -0
  387. data/test/test_gettext.rb +274 -0
  388. data/test/test_parser.rb +113 -0
  389. data/test/test_string.rb +14 -0
  390. data/test/test_textdomain.rb +25 -0
  391. data/test/test_textdomain_multi.rb +69 -0
  392. data/test/test_textdomain_toplevel.rb +42 -0
  393. data/test/testlib/N_.rb +66 -0
  394. data/test/testlib/erb.rhtml +15 -0
  395. data/test/testlib/erb.rxml +16 -0
  396. data/test/testlib/gettext.rb +96 -0
  397. data/test/testlib/gladeparser.glade +183 -0
  398. data/test/testlib/helper.rb +11 -0
  399. data/test/testlib/multi_textdomain.rb +119 -0
  400. data/test/testlib/ngettext.rb +74 -0
  401. data/test/testlib/npgettext.rb +31 -0
  402. data/test/testlib/nsgettext.rb +42 -0
  403. data/test/testlib/pgettext.rb +31 -0
  404. data/test/testlib/sgettext.rb +46 -0
  405. data/test/testlib/simple.rb +14 -0
  406. metadata +509 -0
@@ -0,0 +1,170 @@
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
+ $Id: ruby.rb,v 1.13 2008/12/01 14:30:30 mutoh Exp $
13
+ =end
14
+
15
+ require 'irb/ruby-lex.rb'
16
+ require 'stringio'
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
+ ID = ['gettext', '_', 'N_', 'sgettext', 's_']
65
+ PLURAL_ID = ['ngettext', 'n_', 'Nn_', 'ns_', 'nsgettext']
66
+ MSGCTXT_ID = ['pgettext', 'p_']
67
+ MSGCTXT_PLURAL_ID = ['npgettext', 'np_']
68
+
69
+ module_function
70
+ def parse(file, targets = []) # :nodoc:
71
+ lines = IO.readlines(file)
72
+ parse_lines(file, lines, targets)
73
+ end
74
+
75
+ def parse_lines(file_name, lines, targets) # :nodoc:
76
+ file = StringIO.new(lines.join + "\n")
77
+ rl = RubyLexX.new
78
+ rl.set_input(file)
79
+ rl.skip_space = true
80
+ #rl.readed_auto_clean_up = true
81
+
82
+ target = nil
83
+ msgid = nil
84
+ line_no = nil
85
+ tk = nil
86
+ begin
87
+ rl.parse do |tk|
88
+ case tk
89
+ when RubyToken::TkIDENTIFIER, RubyToken::TkCONSTANT
90
+ if ID.include?(tk.name)
91
+ target = :normal
92
+ elsif PLURAL_ID.include?(tk.name)
93
+ target = :plural
94
+ elsif MSGCTXT_ID.include?(tk.name)
95
+ target = :msgctxt
96
+ elsif MSGCTXT_PLURAL_ID.include?(tk.name)
97
+ target = :msgctxt_plural
98
+ else
99
+ target = nil
100
+ end
101
+ line_no = tk.line_no.to_s
102
+ when RubyToken::TkSTRING
103
+ if target
104
+ if msgid
105
+ msgid += tk.value
106
+ else
107
+ msgid = tk.value
108
+ end
109
+ end
110
+ when RubyToken::TkPLUS, RubyToken::TkNL
111
+ #do nothing
112
+ when RubyToken::TkCOMMA
113
+ if msgid
114
+ case target
115
+ when :plural
116
+ msgid += "\000"
117
+ target = :normal
118
+ when :msgctxt
119
+ msgid += "\004"
120
+ target = :normal
121
+ when :msgctxt_plural
122
+ msgid += "\004"
123
+ target = :plural
124
+ else
125
+ target = :normal
126
+ end
127
+ end
128
+ else
129
+ if msgid
130
+ key_existed = targets.assoc(msgid.gsub(/\n/, '\n'))
131
+ if key_existed
132
+ targets[targets.index(key_existed)] = key_existed <<
133
+ file_name + ":" + line_no
134
+ else
135
+ targets << [msgid.gsub(/\n/, '\n'), file_name + ":" + line_no]
136
+ end
137
+ msgid = nil
138
+ target = nil
139
+ end
140
+ end
141
+ targets
142
+ end
143
+ rescue
144
+ $stderr.print "\n\nError: #{$!.inspect} "
145
+ $stderr.print " in #{file_name}:#{tk.line_no}\n\t #{lines[tk.line_no - 1]}" if tk
146
+ $stderr.print "\n"
147
+ exit 1
148
+ end
149
+ targets
150
+ end
151
+
152
+ def target?(file) # :nodoc:
153
+ true # always true, as default parser.
154
+ end
155
+ end
156
+ end
157
+
158
+
159
+
160
+ if __FILE__ == $0
161
+ require 'pp'
162
+ ARGV.each do |file|
163
+ pp GetText::RubyParser.parse(file)
164
+ end
165
+
166
+ #rl = RubyLexX.new; rl.set_input(ARGF)
167
+ #rl.parse do |tk|
168
+ #p tk
169
+ #end
170
+ end
@@ -0,0 +1,332 @@
1
+ =begin
2
+ poparser.rb - Generate a .mo
3
+
4
+ Copyright (C) 2003-2009 Masao Mutoh <mutoh at highway.ne.jp>
5
+
6
+ You may redistribute it and/or modify it under the same
7
+ license terms as Ruby.
8
+ =end
9
+
10
+ #
11
+ # DO NOT MODIFY!!!!
12
+ # This file is automatically generated by racc 1.4.5
13
+ # from racc grammer file "src/poparser.ry".
14
+ #
15
+
16
+ require 'racc/parser'
17
+
18
+
19
+ module GetText
20
+
21
+ class PoParser < Racc::Parser
22
+
23
+ module_eval <<'..end src/poparser.ry modeval..id7a99570e05', 'src/poparser.ry', 108
24
+ include GetText
25
+ GetText.bindtextdomain("rgettext")
26
+
27
+ def unescape(orig)
28
+ ret = orig.gsub(/\\n/, "\n")
29
+ ret.gsub!(/\\t/, "\t")
30
+ ret.gsub!(/\\r/, "\r")
31
+ ret.gsub!(/\\"/, "\"")
32
+ ret
33
+ end
34
+
35
+ def parse(str, data, ignore_fuzzy = true)
36
+ @comments = []
37
+ @data = data
38
+ @fuzzy = false
39
+ @msgctxt = ""
40
+ $ignore_fuzzy = ignore_fuzzy
41
+
42
+ str.strip!
43
+ @q = []
44
+ until str.empty? do
45
+ case str
46
+ when /\A\s+/
47
+ str = $'
48
+ when /\Amsgctxt/
49
+ @q.push [:MSGCTXT, $&]
50
+ str = $'
51
+ when /\Amsgid_plural/
52
+ @q.push [:MSGID_PLURAL, $&]
53
+ str = $'
54
+ when /\Amsgid/
55
+ @q.push [:MSGID, $&]
56
+ str = $'
57
+ when /\Amsgstr/
58
+ @q.push [:MSGSTR, $&]
59
+ str = $'
60
+ when /\A\[(\d+)\]/
61
+ @q.push [:PLURAL_NUM, $1]
62
+ str = $'
63
+ when /\A\#~(.*)/
64
+ $stderr.print _("Warning: obsolete msgid exists.\n")
65
+ $stderr.print " #{$&}\n"
66
+ @q.push [:COMMENT, $&]
67
+ str = $'
68
+ when /\A\#(.*)/
69
+ @q.push [:COMMENT, $&]
70
+ str = $'
71
+ when /\A\"(.*)\"/
72
+ @q.push [:STRING, $1]
73
+ str = $'
74
+ else
75
+ #c = str[0,1]
76
+ #@q.push [:STRING, c]
77
+ str = str[1..-1]
78
+ end
79
+ end
80
+ @q.push [false, '$end']
81
+ if $DEBUG
82
+ @q.each do |a,b|
83
+ puts "[#{a}, #{b}]"
84
+ end
85
+ end
86
+ @yydebug = true if $DEBUG
87
+ do_parse
88
+
89
+ if @comments.size > 0
90
+ @data.set_comment(:last, @comments.join("\n"))
91
+ end
92
+ @data
93
+ end
94
+
95
+ def next_token
96
+ @q.shift
97
+ end
98
+
99
+ def on_message(msgid, msgstr)
100
+ if msgstr.size > 0
101
+ @data[msgid] = msgstr
102
+ @data.set_comment(msgid, @comments.join("\n"))
103
+ end
104
+ @comments.clear
105
+ @msgctxt = ""
106
+ end
107
+
108
+ def on_comment(comment)
109
+ @fuzzy = true if (/fuzzy/ =~ comment)
110
+ @comments << comment
111
+ end
112
+
113
+
114
+ ..end src/poparser.ry modeval..id7a99570e05
115
+
116
+ ##### racc 1.4.5 generates ###
117
+
118
+ racc_reduce_table = [
119
+ 0, 0, :racc_error,
120
+ 0, 10, :_reduce_none,
121
+ 2, 10, :_reduce_none,
122
+ 2, 10, :_reduce_none,
123
+ 2, 10, :_reduce_none,
124
+ 2, 12, :_reduce_5,
125
+ 1, 13, :_reduce_none,
126
+ 1, 13, :_reduce_none,
127
+ 4, 15, :_reduce_8,
128
+ 5, 16, :_reduce_9,
129
+ 2, 17, :_reduce_10,
130
+ 1, 17, :_reduce_none,
131
+ 3, 18, :_reduce_12,
132
+ 1, 11, :_reduce_13,
133
+ 2, 14, :_reduce_14,
134
+ 1, 14, :_reduce_15 ]
135
+
136
+ racc_reduce_n = 16
137
+
138
+ racc_shift_n = 26
139
+
140
+ racc_action_table = [
141
+ 3, 13, 5, 7, 9, 15, 16, 17, 20, 17,
142
+ 13, 17, 13, 13, 11, 17, 23, 20, 13, 17 ]
143
+
144
+ racc_action_check = [
145
+ 1, 16, 1, 1, 1, 12, 12, 12, 18, 18,
146
+ 7, 14, 15, 9, 3, 19, 20, 21, 23, 25 ]
147
+
148
+ racc_action_pointer = [
149
+ nil, 0, nil, 14, nil, nil, nil, 3, nil, 6,
150
+ nil, nil, 0, nil, 4, 5, -6, nil, 2, 8,
151
+ 8, 11, nil, 11, nil, 12 ]
152
+
153
+ racc_action_default = [
154
+ -1, -16, -2, -16, -3, -13, -4, -16, -6, -16,
155
+ -7, 26, -16, -15, -5, -16, -16, -14, -16, -8,
156
+ -16, -9, -11, -16, -10, -12 ]
157
+
158
+ racc_goto_table = [
159
+ 12, 22, 14, 4, 24, 6, 2, 8, 18, 19,
160
+ 10, 21, 1, nil, nil, nil, 25 ]
161
+
162
+ racc_goto_check = [
163
+ 5, 9, 5, 3, 9, 4, 2, 6, 5, 5,
164
+ 7, 8, 1, nil, nil, nil, 5 ]
165
+
166
+ racc_goto_pointer = [
167
+ nil, 12, 5, 2, 4, -7, 6, 9, -7, -17 ]
168
+
169
+ racc_goto_default = [
170
+ nil, nil, nil, nil, nil, nil, nil, nil, nil, nil ]
171
+
172
+ racc_token_table = {
173
+ false => 0,
174
+ Object.new => 1,
175
+ :COMMENT => 2,
176
+ :MSGID => 3,
177
+ :MSGCTXT => 4,
178
+ :MSGID_PLURAL => 5,
179
+ :MSGSTR => 6,
180
+ :STRING => 7,
181
+ :PLURAL_NUM => 8 }
182
+
183
+ racc_use_result_var = true
184
+
185
+ racc_nt_base = 9
186
+
187
+ Racc_arg = [
188
+ racc_action_table,
189
+ racc_action_check,
190
+ racc_action_default,
191
+ racc_action_pointer,
192
+ racc_goto_table,
193
+ racc_goto_check,
194
+ racc_goto_default,
195
+ racc_goto_pointer,
196
+ racc_nt_base,
197
+ racc_reduce_table,
198
+ racc_token_table,
199
+ racc_shift_n,
200
+ racc_reduce_n,
201
+ racc_use_result_var ]
202
+
203
+ Racc_token_to_s_table = [
204
+ '$end',
205
+ 'error',
206
+ 'COMMENT',
207
+ 'MSGID',
208
+ 'MSGCTXT',
209
+ 'MSGID_PLURAL',
210
+ 'MSGSTR',
211
+ 'STRING',
212
+ 'PLURAL_NUM',
213
+ '$start',
214
+ 'msgfmt',
215
+ 'comment',
216
+ 'msgctxt',
217
+ 'message',
218
+ 'string_list',
219
+ 'single_message',
220
+ 'plural_message',
221
+ 'msgstr_plural',
222
+ 'msgstr_plural_line']
223
+
224
+ Racc_debug_parser = true
225
+
226
+ ##### racc system variables end #####
227
+
228
+ # reduce 0 omitted
229
+
230
+ # reduce 1 omitted
231
+
232
+ # reduce 2 omitted
233
+
234
+ # reduce 3 omitted
235
+
236
+ # reduce 4 omitted
237
+
238
+ module_eval <<'.,.,', 'src/poparser.ry', 25
239
+ def _reduce_5( val, _values, result )
240
+ @msgctxt = unescape(val[1]) + "\004"
241
+ result
242
+ end
243
+ .,.,
244
+
245
+ # reduce 6 omitted
246
+
247
+ # reduce 7 omitted
248
+
249
+ module_eval <<'.,.,', 'src/poparser.ry', 48
250
+ def _reduce_8( val, _values, result )
251
+ if @fuzzy and $ignore_fuzzy
252
+ if val[1] != ""
253
+ $stderr.print _("Warning: fuzzy message was ignored.\n")
254
+ $stderr.print " msgid '#{val[1]}'\n"
255
+ else
256
+ on_message('', unescape(val[3]))
257
+ end
258
+ @fuzzy = false
259
+ else
260
+ on_message(@msgctxt + unescape(val[1]), unescape(val[3]))
261
+ end
262
+ result = ""
263
+ result
264
+ end
265
+ .,.,
266
+
267
+ module_eval <<'.,.,', 'src/poparser.ry', 65
268
+ def _reduce_9( val, _values, result )
269
+ if @fuzzy and $ignore_fuzzy
270
+ if val[1] != ""
271
+ $stderr.print _("Warning: fuzzy message was ignored.\n")
272
+ $stderr.print "msgid = '#{val[1]}\n"
273
+ else
274
+ on_message('', unescape(val[3]))
275
+ end
276
+ @fuzzy = false
277
+ else
278
+ on_message(@msgctxt + unescape(val[1]) + "\000" + unescape(val[3]), unescape(val[4]))
279
+ end
280
+ result = ""
281
+ result
282
+ end
283
+ .,.,
284
+
285
+ module_eval <<'.,.,', 'src/poparser.ry', 76
286
+ def _reduce_10( val, _values, result )
287
+ if val[0].size > 0
288
+ result = val[0] + "\000" + val[1]
289
+ else
290
+ result = ""
291
+ end
292
+ result
293
+ end
294
+ .,.,
295
+
296
+ # reduce 11 omitted
297
+
298
+ module_eval <<'.,.,', 'src/poparser.ry', 84
299
+ def _reduce_12( val, _values, result )
300
+ result = val[2]
301
+ result
302
+ end
303
+ .,.,
304
+
305
+ module_eval <<'.,.,', 'src/poparser.ry', 91
306
+ def _reduce_13( val, _values, result )
307
+ on_comment(val[0])
308
+ result
309
+ end
310
+ .,.,
311
+
312
+ module_eval <<'.,.,', 'src/poparser.ry', 99
313
+ def _reduce_14( val, _values, result )
314
+ result = val.delete_if{|item| item == ""}.join
315
+ result
316
+ end
317
+ .,.,
318
+
319
+ module_eval <<'.,.,', 'src/poparser.ry', 103
320
+ def _reduce_15( val, _values, result )
321
+ result = val[0]
322
+ result
323
+ end
324
+ .,.,
325
+
326
+ def _reduce_none( val, _values, result )
327
+ result
328
+ end
329
+
330
+ end # class PoParser
331
+
332
+ end # module GetText