ofm_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 (384) hide show
  1. data/ChangeLog +78 -0
  2. data/README.rdoc +245 -0
  3. data/Rakefile +234 -0
  4. data/bin/rgettext +23 -0
  5. data/bin/rmsgfmt +22 -0
  6. data/bin/rmsgmerge +22 -0
  7. data/gettext.gemspec +40 -0
  8. data/lib/gettext/cgi.rb +39 -0
  9. data/lib/gettext/core_ext/iconv.rb +110 -0
  10. data/lib/gettext/core_ext/string.rb +86 -0
  11. data/lib/gettext/parser/erb.rb +5 -0
  12. data/lib/gettext/parser/glade.rb +5 -0
  13. data/lib/gettext/parser/ruby.rb +172 -0
  14. data/lib/gettext/tools/rgettext.rb +251 -0
  15. data/lib/gettext/tools/rmsgfmt.rb +86 -0
  16. data/lib/gettext/tools/rmsgmerge.rb +500 -0
  17. data/lib/gettext/tools.rb +197 -0
  18. data/lib/gettext/utils.rb +39 -0
  19. data/lib/gettext/version.rb +12 -0
  20. data/lib/gettext.rb +312 -0
  21. data/po/bg/rgettext.po +139 -0
  22. data/po/bs/rgettext.po +139 -0
  23. data/po/ca/rgettext.po +138 -0
  24. data/po/cs/rgettext.po +140 -0
  25. data/po/de/rgettext.po +146 -0
  26. data/po/el/rgettext.po +137 -0
  27. data/po/eo/rgettext.po +138 -0
  28. data/po/es/rgettext.po +139 -0
  29. data/po/et/rgettext.po +136 -0
  30. data/po/fr/rgettext.po +142 -0
  31. data/po/hr/rgettext.po +139 -0
  32. data/po/hu/rgettext.po +138 -0
  33. data/po/it/rgettext.po +138 -0
  34. data/po/ja/rgettext.po +140 -0
  35. data/po/ko/rgettext.po +137 -0
  36. data/po/lv/rgettext.po +139 -0
  37. data/po/nb/rgettext.po +140 -0
  38. data/po/nl/rgettext.po +138 -0
  39. data/po/pt_BR/rgettext.po +141 -0
  40. data/po/rgettext.pot +129 -0
  41. data/po/ru/rgettext.po +140 -0
  42. data/po/sr/rgettext.po +139 -0
  43. data/po/sv/rgettext.po +131 -0
  44. data/po/vi/rgettext.po +137 -0
  45. data/po/zh/rgettext.po +138 -0
  46. data/po/zh_TW/rgettext.po +137 -0
  47. data/samples/README +16 -0
  48. data/samples/cgi/README +43 -0
  49. data/samples/cgi/Rakefile +27 -0
  50. data/samples/cgi/cookie.cgi +64 -0
  51. data/samples/cgi/gettext.css +116 -0
  52. data/samples/cgi/helloerb.rhtml +28 -0
  53. data/samples/cgi/helloerb1.cgi +58 -0
  54. data/samples/cgi/helloerb2.cgi +51 -0
  55. data/samples/cgi/hellolib.rb +18 -0
  56. data/samples/cgi/http.rb +49 -0
  57. data/samples/cgi/index.cgi +111 -0
  58. data/samples/cgi/other.rhtml +20 -0
  59. data/samples/cgi/po/bg/helloerb1.po +59 -0
  60. data/samples/cgi/po/bg/helloerb2.po +51 -0
  61. data/samples/cgi/po/bg/hellolib.po +23 -0
  62. data/samples/cgi/po/bg/main.po +83 -0
  63. data/samples/cgi/po/bs/helloerb1.po +59 -0
  64. data/samples/cgi/po/bs/helloerb2.po +51 -0
  65. data/samples/cgi/po/bs/hellolib.po +23 -0
  66. data/samples/cgi/po/bs/main.po +83 -0
  67. data/samples/cgi/po/ca/helloerb1.po +59 -0
  68. data/samples/cgi/po/ca/helloerb2.po +51 -0
  69. data/samples/cgi/po/ca/hellolib.po +23 -0
  70. data/samples/cgi/po/ca/main.po +83 -0
  71. data/samples/cgi/po/cs/helloerb1.po +61 -0
  72. data/samples/cgi/po/cs/helloerb2.po +52 -0
  73. data/samples/cgi/po/cs/hellolib.po +25 -0
  74. data/samples/cgi/po/cs/main.po +85 -0
  75. data/samples/cgi/po/de/helloerb1.po +61 -0
  76. data/samples/cgi/po/de/helloerb2.po +52 -0
  77. data/samples/cgi/po/de/hellolib.po +24 -0
  78. data/samples/cgi/po/de/main.po +86 -0
  79. data/samples/cgi/po/el/helloerb1.po +60 -0
  80. data/samples/cgi/po/el/helloerb2.po +51 -0
  81. data/samples/cgi/po/el/hellolib.po +23 -0
  82. data/samples/cgi/po/el/main.po +84 -0
  83. data/samples/cgi/po/eo/helloerb1.po +60 -0
  84. data/samples/cgi/po/eo/helloerb2.po +52 -0
  85. data/samples/cgi/po/eo/hellolib.po +24 -0
  86. data/samples/cgi/po/eo/main.po +84 -0
  87. data/samples/cgi/po/es/helloerb1.po +59 -0
  88. data/samples/cgi/po/es/helloerb2.po +50 -0
  89. data/samples/cgi/po/es/hellolib.po +22 -0
  90. data/samples/cgi/po/es/main.po +83 -0
  91. data/samples/cgi/po/fr/helloerb1.po +59 -0
  92. data/samples/cgi/po/fr/helloerb2.po +51 -0
  93. data/samples/cgi/po/fr/hellolib.po +22 -0
  94. data/samples/cgi/po/fr/main.po +85 -0
  95. data/samples/cgi/po/helloerb1.pot +60 -0
  96. data/samples/cgi/po/helloerb2.pot +52 -0
  97. data/samples/cgi/po/hellolib.pot +24 -0
  98. data/samples/cgi/po/hr/helloerb1.po +59 -0
  99. data/samples/cgi/po/hr/helloerb2.po +51 -0
  100. data/samples/cgi/po/hr/hellolib.po +23 -0
  101. data/samples/cgi/po/hr/main.po +83 -0
  102. data/samples/cgi/po/hu/helloerb1.po +59 -0
  103. data/samples/cgi/po/hu/helloerb2.po +51 -0
  104. data/samples/cgi/po/hu/hellolib.po +23 -0
  105. data/samples/cgi/po/hu/main.po +82 -0
  106. data/samples/cgi/po/it/helloerb1.po +60 -0
  107. data/samples/cgi/po/it/helloerb2.po +52 -0
  108. data/samples/cgi/po/it/hellolib.po +24 -0
  109. data/samples/cgi/po/it/main.po +84 -0
  110. data/samples/cgi/po/ja/helloerb1.po +60 -0
  111. data/samples/cgi/po/ja/helloerb2.po +52 -0
  112. data/samples/cgi/po/ja/hellolib.po +24 -0
  113. data/samples/cgi/po/ja/main.po +85 -0
  114. data/samples/cgi/po/ko/helloerb1.po +59 -0
  115. data/samples/cgi/po/ko/helloerb2.po +51 -0
  116. data/samples/cgi/po/ko/hellolib.po +23 -0
  117. data/samples/cgi/po/ko/main.po +84 -0
  118. data/samples/cgi/po/lv/helloerb1.po +65 -0
  119. data/samples/cgi/po/lv/helloerb2.po +52 -0
  120. data/samples/cgi/po/lv/hellolib.po +24 -0
  121. data/samples/cgi/po/lv/main.po +77 -0
  122. data/samples/cgi/po/main.pot +80 -0
  123. data/samples/cgi/po/nb/helloerb1.po +60 -0
  124. data/samples/cgi/po/nb/helloerb2.po +52 -0
  125. data/samples/cgi/po/nb/hellolib.po +24 -0
  126. data/samples/cgi/po/nb/main.po +84 -0
  127. data/samples/cgi/po/nl/helloerb1.po +61 -0
  128. data/samples/cgi/po/nl/helloerb2.po +52 -0
  129. data/samples/cgi/po/nl/hellolib.po +24 -0
  130. data/samples/cgi/po/nl/main.po +86 -0
  131. data/samples/cgi/po/pt_BR/helloerb1.po +59 -0
  132. data/samples/cgi/po/pt_BR/helloerb2.po +51 -0
  133. data/samples/cgi/po/pt_BR/hellolib.po +23 -0
  134. data/samples/cgi/po/pt_BR/main.po +84 -0
  135. data/samples/cgi/po/ru/helloerb1.po +58 -0
  136. data/samples/cgi/po/ru/helloerb2.po +50 -0
  137. data/samples/cgi/po/ru/hellolib.po +22 -0
  138. data/samples/cgi/po/ru/main.po +82 -0
  139. data/samples/cgi/po/sr/helloerb1.po +60 -0
  140. data/samples/cgi/po/sr/helloerb2.po +52 -0
  141. data/samples/cgi/po/sr/hellolib.po +24 -0
  142. data/samples/cgi/po/sr/main.po +80 -0
  143. data/samples/cgi/po/vi/helloerb1.po +65 -0
  144. data/samples/cgi/po/vi/helloerb2.po +52 -0
  145. data/samples/cgi/po/vi/hellolib.po +24 -0
  146. data/samples/cgi/po/vi/main.po +77 -0
  147. data/samples/cgi/po/zh/helloerb1.po +60 -0
  148. data/samples/cgi/po/zh/helloerb2.po +52 -0
  149. data/samples/cgi/po/zh/hellolib.po +24 -0
  150. data/samples/cgi/po/zh/main.po +80 -0
  151. data/samples/cgi/po/zh_TW/helloerb1.po +67 -0
  152. data/samples/cgi/po/zh_TW/helloerb2.po +54 -0
  153. data/samples/cgi/po/zh_TW/hellolib.po +26 -0
  154. data/samples/cgi/po/zh_TW/main.po +79 -0
  155. data/samples/hello.rb +36 -0
  156. data/samples/hello2.rb +23 -0
  157. data/samples/hello_glade2.glade +70 -0
  158. data/samples/hello_glade2.rb +25 -0
  159. data/samples/hello_gtk2.rb +27 -0
  160. data/samples/hello_noop.rb +31 -0
  161. data/samples/hello_plural.rb +26 -0
  162. data/samples/hello_tk.rb +19 -0
  163. data/samples/makemo.rb +6 -0
  164. data/samples/po/bg/hello.po +24 -0
  165. data/samples/po/bg/hello2.po +31 -0
  166. data/samples/po/bg/hello_glade2.po +31 -0
  167. data/samples/po/bg/hello_gtk.po +23 -0
  168. data/samples/po/bg/hello_noop.po +27 -0
  169. data/samples/po/bg/hello_plural.po +25 -0
  170. data/samples/po/bg/hello_tk.po +23 -0
  171. data/samples/po/bs/hello.po +23 -0
  172. data/samples/po/bs/hello2.po +31 -0
  173. data/samples/po/bs/hello_glade2.po +31 -0
  174. data/samples/po/bs/hello_gtk.po +23 -0
  175. data/samples/po/bs/hello_noop.po +27 -0
  176. data/samples/po/bs/hello_plural.po +26 -0
  177. data/samples/po/bs/hello_tk.po +23 -0
  178. data/samples/po/ca/hello.po +23 -0
  179. data/samples/po/ca/hello2.po +31 -0
  180. data/samples/po/ca/hello_glade2.po +31 -0
  181. data/samples/po/ca/hello_gtk.po +23 -0
  182. data/samples/po/ca/hello_noop.po +27 -0
  183. data/samples/po/ca/hello_plural.po +25 -0
  184. data/samples/po/ca/hello_tk.po +23 -0
  185. data/samples/po/cs/hello.po +23 -0
  186. data/samples/po/cs/hello2.po +31 -0
  187. data/samples/po/cs/hello_glade2.po +37 -0
  188. data/samples/po/cs/hello_gtk.po +23 -0
  189. data/samples/po/cs/hello_noop.po +27 -0
  190. data/samples/po/cs/hello_plural.po +26 -0
  191. data/samples/po/cs/hello_tk.po +23 -0
  192. data/samples/po/de/hello.po +20 -0
  193. data/samples/po/de/hello2.po +28 -0
  194. data/samples/po/de/hello_glade2.po +27 -0
  195. data/samples/po/de/hello_gtk.po +20 -0
  196. data/samples/po/de/hello_noop.po +24 -0
  197. data/samples/po/de/hello_plural.po +25 -0
  198. data/samples/po/de/hello_tk.po +20 -0
  199. data/samples/po/el/hello.po +23 -0
  200. data/samples/po/el/hello2.po +31 -0
  201. data/samples/po/el/hello_glade2.po +31 -0
  202. data/samples/po/el/hello_gtk.po +22 -0
  203. data/samples/po/el/hello_noop.po +27 -0
  204. data/samples/po/el/hello_plural.po +25 -0
  205. data/samples/po/el/hello_tk.po +23 -0
  206. data/samples/po/eo/hello.po +23 -0
  207. data/samples/po/eo/hello2.po +31 -0
  208. data/samples/po/eo/hello_glade2.po +32 -0
  209. data/samples/po/eo/hello_gtk.po +23 -0
  210. data/samples/po/eo/hello_noop.po +27 -0
  211. data/samples/po/eo/hello_plural.po +26 -0
  212. data/samples/po/eo/hello_tk.po +24 -0
  213. data/samples/po/es/hello.po +21 -0
  214. data/samples/po/es/hello2.po +28 -0
  215. data/samples/po/es/hello_glade2.po +28 -0
  216. data/samples/po/es/hello_gtk.po +20 -0
  217. data/samples/po/es/hello_noop.po +24 -0
  218. data/samples/po/es/hello_plural.po +23 -0
  219. data/samples/po/es/hello_tk.po +20 -0
  220. data/samples/po/fr/hello.po +18 -0
  221. data/samples/po/fr/hello2.po +26 -0
  222. data/samples/po/fr/hello_glade2.po +27 -0
  223. data/samples/po/fr/hello_gtk.po +18 -0
  224. data/samples/po/fr/hello_noop.po +22 -0
  225. data/samples/po/fr/hello_plural.po +21 -0
  226. data/samples/po/fr/hello_tk.po +18 -0
  227. data/samples/po/hello.pot +23 -0
  228. data/samples/po/hello2.pot +31 -0
  229. data/samples/po/hello_glade2.pot +32 -0
  230. data/samples/po/hello_gtk.pot +23 -0
  231. data/samples/po/hello_noop.pot +27 -0
  232. data/samples/po/hello_plural.pot +26 -0
  233. data/samples/po/hello_tk.pot +24 -0
  234. data/samples/po/hr/hello.po +23 -0
  235. data/samples/po/hr/hello2.po +31 -0
  236. data/samples/po/hr/hello_glade2.po +31 -0
  237. data/samples/po/hr/hello_gtk.po +23 -0
  238. data/samples/po/hr/hello_noop.po +27 -0
  239. data/samples/po/hr/hello_plural.po +26 -0
  240. data/samples/po/hr/hello_tk.po +23 -0
  241. data/samples/po/hu/hello.po +22 -0
  242. data/samples/po/hu/hello2.po +30 -0
  243. data/samples/po/hu/hello_glade2.po +31 -0
  244. data/samples/po/hu/hello_gtk.po +22 -0
  245. data/samples/po/hu/hello_noop.po +26 -0
  246. data/samples/po/hu/hello_plural.po +25 -0
  247. data/samples/po/hu/hello_tk.po +23 -0
  248. data/samples/po/it/hello.po +20 -0
  249. data/samples/po/it/hello2.po +28 -0
  250. data/samples/po/it/hello_glade2.po +28 -0
  251. data/samples/po/it/hello_gtk.po +21 -0
  252. data/samples/po/it/hello_noop.po +24 -0
  253. data/samples/po/it/hello_plural.po +23 -0
  254. data/samples/po/it/hello_tk.po +21 -0
  255. data/samples/po/ja/hello.po +20 -0
  256. data/samples/po/ja/hello2.po +28 -0
  257. data/samples/po/ja/hello_glade2.po +26 -0
  258. data/samples/po/ja/hello_gtk.po +19 -0
  259. data/samples/po/ja/hello_noop.po +23 -0
  260. data/samples/po/ja/hello_plural.po +21 -0
  261. data/samples/po/ja/hello_tk.po +19 -0
  262. data/samples/po/ko/hello.po +18 -0
  263. data/samples/po/ko/hello2.po +26 -0
  264. data/samples/po/ko/hello_glade2.po +29 -0
  265. data/samples/po/ko/hello_gtk.po +18 -0
  266. data/samples/po/ko/hello_noop.po +22 -0
  267. data/samples/po/ko/hello_plural.po +25 -0
  268. data/samples/po/ko/hello_tk.po +19 -0
  269. data/samples/po/lv/hello.po +24 -0
  270. data/samples/po/lv/hello2.po +32 -0
  271. data/samples/po/lv/hello_glade2.po +38 -0
  272. data/samples/po/lv/hello_gtk.po +24 -0
  273. data/samples/po/lv/hello_noop.po +28 -0
  274. data/samples/po/lv/hello_plural.po +26 -0
  275. data/samples/po/lv/hello_tk.po +24 -0
  276. data/samples/po/nb/hello.po +23 -0
  277. data/samples/po/nb/hello2.po +31 -0
  278. data/samples/po/nb/hello_glade2.po +31 -0
  279. data/samples/po/nb/hello_gtk.po +23 -0
  280. data/samples/po/nb/hello_noop.po +27 -0
  281. data/samples/po/nb/hello_plural.po +26 -0
  282. data/samples/po/nb/hello_tk.po +24 -0
  283. data/samples/po/nl/hello.po +24 -0
  284. data/samples/po/nl/hello2.po +32 -0
  285. data/samples/po/nl/hello_glade2.po +31 -0
  286. data/samples/po/nl/hello_gtk.po +24 -0
  287. data/samples/po/nl/hello_noop.po +28 -0
  288. data/samples/po/nl/hello_plural.po +25 -0
  289. data/samples/po/nl/hello_tk.po +24 -0
  290. data/samples/po/pt_BR/hello.po +21 -0
  291. data/samples/po/pt_BR/hello2.po +29 -0
  292. data/samples/po/pt_BR/hello_glade2.po +29 -0
  293. data/samples/po/pt_BR/hello_gtk.po +21 -0
  294. data/samples/po/pt_BR/hello_noop.po +25 -0
  295. data/samples/po/pt_BR/hello_plural.po +23 -0
  296. data/samples/po/pt_BR/hello_tk.po +21 -0
  297. data/samples/po/ru/hello.po +22 -0
  298. data/samples/po/ru/hello2.po +30 -0
  299. data/samples/po/ru/hello_glade2.po +30 -0
  300. data/samples/po/ru/hello_gtk.po +22 -0
  301. data/samples/po/ru/hello_noop.po +26 -0
  302. data/samples/po/ru/hello_plural.po +28 -0
  303. data/samples/po/ru/hello_tk.po +22 -0
  304. data/samples/po/sr/hello.po +22 -0
  305. data/samples/po/sr/hello2.po +30 -0
  306. data/samples/po/sr/hello_glade2.po +32 -0
  307. data/samples/po/sr/hello_gtk.po +22 -0
  308. data/samples/po/sr/hello_noop.po +26 -0
  309. data/samples/po/sr/hello_plural.po +26 -0
  310. data/samples/po/sr/hello_tk.po +24 -0
  311. data/samples/po/sv/hello.po +20 -0
  312. data/samples/po/sv/hello2.po +28 -0
  313. data/samples/po/sv/hello_glade2.po +28 -0
  314. data/samples/po/sv/hello_gtk.po +20 -0
  315. data/samples/po/sv/hello_noop.po +24 -0
  316. data/samples/po/sv/hello_plural.po +23 -0
  317. data/samples/po/sv/hello_tk.po +20 -0
  318. data/samples/po/test.rb +13 -0
  319. data/samples/po/vi/hello.po +23 -0
  320. data/samples/po/vi/hello2.po +31 -0
  321. data/samples/po/vi/hello_glade2.po +38 -0
  322. data/samples/po/vi/hello_gtk.po +23 -0
  323. data/samples/po/vi/hello_noop.po +27 -0
  324. data/samples/po/vi/hello_plural.po +26 -0
  325. data/samples/po/vi/hello_tk.po +24 -0
  326. data/samples/po/zh/hello.po +23 -0
  327. data/samples/po/zh/hello2.po +31 -0
  328. data/samples/po/zh/hello_glade2.po +31 -0
  329. data/samples/po/zh/hello_gtk.po +23 -0
  330. data/samples/po/zh/hello_noop.po +27 -0
  331. data/samples/po/zh/hello_plural.po +25 -0
  332. data/samples/po/zh/hello_tk.po +23 -0
  333. data/samples/po/zh_TW/hello.po +26 -0
  334. data/samples/po/zh_TW/hello2.po +34 -0
  335. data/samples/po/zh_TW/hello_glade2.po +40 -0
  336. data/samples/po/zh_TW/hello_gtk.po +25 -0
  337. data/samples/po/zh_TW/hello_noop.po +30 -0
  338. data/samples/po/zh_TW/hello_plural.po +28 -0
  339. data/samples/po/zh_TW/hello_tk.po +26 -0
  340. data/src/poparser.ry +217 -0
  341. data/test/README +1 -0
  342. data/test/Rakefile +17 -0
  343. data/test/po/cr/plural.po +23 -0
  344. data/test/po/da/plural.po +22 -0
  345. data/test/po/da/plural_error.po +22 -0
  346. data/test/po/fr/plural.po +28 -0
  347. data/test/po/fr/plural_error.po +20 -0
  348. data/test/po/fr/test1.po +23 -0
  349. data/test/po/fr/test2.po +19 -0
  350. data/test/po/ir/plural.po +23 -0
  351. data/test/po/ja/npgettext.po +46 -0
  352. data/test/po/ja/nsgettext.po +65 -0
  353. data/test/po/ja/pgettext.po +41 -0
  354. data/test/po/ja/plural.po +28 -0
  355. data/test/po/ja/plural_error.po +20 -0
  356. data/test/po/ja/rubyparser.po +43 -0
  357. data/test/po/ja/sgettext.po +47 -0
  358. data/test/po/ja/test1.po +23 -0
  359. data/test/po/ja/test2.po +19 -0
  360. data/test/po/la/plural.po +23 -0
  361. data/test/po/la/plural_error.po +21 -0
  362. data/test/po/li/plural.po +23 -0
  363. data/test/po/po/plural.po +23 -0
  364. data/test/po/sl/plural.po +24 -0
  365. data/test/test_class_info.rb +88 -0
  366. data/test/test_gettext.rb +322 -0
  367. data/test/test_parser.rb +160 -0
  368. data/test/test_string.rb +67 -0
  369. data/test/test_textdomain_multi.rb +82 -0
  370. data/test/test_textdomain_toplevel.rb +44 -0
  371. data/test/testlib/N_.rb +68 -0
  372. data/test/testlib/erb.rhtml +15 -0
  373. data/test/testlib/erb.rxml +16 -0
  374. data/test/testlib/gettext.rb +115 -0
  375. data/test/testlib/gladeparser.glade +183 -0
  376. data/test/testlib/helper.rb +13 -0
  377. data/test/testlib/multi_textdomain.rb +133 -0
  378. data/test/testlib/ngettext.rb +81 -0
  379. data/test/testlib/npgettext.rb +33 -0
  380. data/test/testlib/nsgettext.rb +44 -0
  381. data/test/testlib/pgettext.rb +38 -0
  382. data/test/testlib/sgettext.rb +48 -0
  383. data/test/testlib/simple.rb +16 -0
  384. metadata +475 -0
@@ -0,0 +1,160 @@
1
+ # encoding: utf-8
2
+
3
+ require 'testlib/helper.rb'
4
+ require 'gettext/tools/parser/ruby'
5
+ require 'gettext/tools/parser/glade'
6
+ require 'gettext/tools/parser/erb'
7
+
8
+ require 'gettext/tools/rgettext'
9
+
10
+ class TestGetTextParser < Test::Unit::TestCase
11
+ def test_ruby
12
+ @ary = GetText::RGetText.parse(['testlib/gettext.rb'])
13
+
14
+ assert_target 'aaa', ['testlib/gettext.rb:8']
15
+ assert_target 'aaa\n', ['testlib/gettext.rb:12']
16
+ assert_target 'bbb\nccc', ['testlib/gettext.rb:16']
17
+ assert_target 'bbb\nccc\nddd\n', ['testlib/gettext.rb:20']
18
+ assert_target 'eee', ['testlib/gettext.rb:27', 'testlib/gettext.rb:31']
19
+ assert_target 'fff', ['testlib/gettext.rb:31']
20
+ assert_target 'ggghhhiii', ['testlib/gettext.rb:35']
21
+ assert_target 'a"b"c"', ['testlib/gettext.rb:41']
22
+ assert_target 'd"e"f"', ['testlib/gettext.rb:45']
23
+ assert_target 'jjj', ['testlib/gettext.rb:49']
24
+ assert_target 'kkk', ['testlib/gettext.rb:50']
25
+ assert_target 'lllmmm', ['testlib/gettext.rb:54']
26
+ assert_target 'nnn\nooo', ['testlib/gettext.rb:62']
27
+ assert_target "\#", ['testlib/gettext.rb:66', 'testlib/gettext.rb:70']
28
+ assert_target "\\taaa", ['testlib/gettext.rb:74']
29
+ assert_target "Here document1\\nHere document2\\n", ['testlib/gettext.rb:78']
30
+ assert_target "Francois Pinard", ['testlib/gettext.rb:97'] do |t|
31
+ assert_match /proper name/, t.comment
32
+ assert_match /Pronunciation/, t.comment
33
+ end
34
+ assert_target "self explaining", ['testlib/gettext.rb:102'] do |t|
35
+ assert_nil t.comment
36
+ end
37
+ # TODO: assert_target "in_quote", ['testlib/gettext.rb:96']
38
+ end
39
+
40
+ def test_ruby_N
41
+ @ary = GetText::RGetText.parse(['testlib/N_.rb'])
42
+
43
+ assert_target 'aaa', ['testlib/N_.rb:8']
44
+ assert_target 'aaa\n', ['testlib/N_.rb:12']
45
+ assert_target 'bbb\nccc', ['testlib/N_.rb:16']
46
+ assert_target 'bbb\nccc\nddd\n', ['testlib/N_.rb:20']
47
+ assert_target 'eee', ['testlib/N_.rb:27', 'testlib/N_.rb:31']
48
+ assert_target 'fff', ['testlib/N_.rb:31']
49
+ assert_target 'ggghhhiii', ['testlib/N_.rb:35']
50
+ assert_target 'a"b"c"', ['testlib/N_.rb:41']
51
+ assert_target 'd"e"f"', ['testlib/N_.rb:45']
52
+ assert_target 'jjj', ['testlib/N_.rb:49']
53
+ assert_target 'kkk', ['testlib/N_.rb:50']
54
+ assert_target 'lllmmm', ['testlib/N_.rb:54']
55
+ assert_target 'nnn\nooo', ['testlib/N_.rb:62']
56
+ end
57
+
58
+ def test_ruby_n
59
+ @ary = GetText::RGetText.parse(['testlib/ngettext.rb'])
60
+ assert_plural_target "aaa", "aaa2", ['testlib/ngettext.rb:8']
61
+ assert_plural_target "bbb\\n", "ccc2\\nccc2", ['testlib/ngettext.rb:12']
62
+ assert_plural_target "ddd\\nddd", "ddd2\\nddd2", ['testlib/ngettext.rb:16']
63
+ assert_plural_target "eee\\neee\\n", "eee2\\neee2\\n", ['testlib/ngettext.rb:21']
64
+ assert_plural_target "ddd\\neee\\n", "ddd\\neee2", ['testlib/ngettext.rb:27']
65
+ assert_plural_target "fff", "fff2", ['testlib/ngettext.rb:34', 'testlib/ngettext.rb:38']
66
+ assert_plural_target "ggg", "ggg2", ['testlib/ngettext.rb:38']
67
+ assert_plural_target "ggghhhiii", "jjjkkklll", ['testlib/ngettext.rb:42']
68
+ assert_plural_target "a\"b\"c\"", "a\"b\"c\"2", ['testlib/ngettext.rb:51']
69
+ assert_plural_target "mmmmmm", "mmm2mmm2", ['testlib/ngettext.rb:59']
70
+ assert_plural_target "nnn", "nnn2", ['testlib/ngettext.rb:60']
71
+ assert_plural_target "comment", "comments", ['testlib/ngettext.rb:76'] do |t|
72
+ assert_equal "please provide translations for all \n the plural forms!", t.comment
73
+ end
74
+ end
75
+
76
+ def test_ruby_p
77
+ @ary = GetText::RGetText.parse(['testlib/pgettext.rb'])
78
+ assert_target_in_context "AAA", "BBB", ["testlib/pgettext.rb:8", "testlib/pgettext.rb:12"]
79
+ assert_target_in_context "AAA|BBB", "CCC", ["testlib/pgettext.rb:16"]
80
+ assert_target_in_context "AAA", "CCC", ["testlib/pgettext.rb:20"]
81
+ assert_target_in_context "CCC", "BBB", ["testlib/pgettext.rb:24"]
82
+ assert_target_in_context "program", "name", ['testlib/pgettext.rb:34'] do |t|
83
+ assert_equal "please translate 'name' in the context of 'program'.\n Hint: the translation should NOT contain the translation of 'program'.", t.comment
84
+ end
85
+ end
86
+
87
+ def test_glade
88
+ # Old style (~2.0.4)
89
+ ary = GetText::GladeParser.parse('testlib/gladeparser.glade')
90
+
91
+ assert_equal(['window1', 'testlib/gladeparser.glade:8'], ary[0])
92
+ assert_equal(['normal text', 'testlib/gladeparser.glade:29'], ary[1])
93
+ assert_equal(['1st line\n2nd line\n3rd line', 'testlib/gladeparser.glade:50'], ary[2])
94
+ assert_equal(['<span color="red" weight="bold" size="large">markup </span>', 'testlib/gladeparser.glade:73'], ary[3])
95
+ assert_equal(['<span color="red">1st line markup </span>\n<span color="blue">2nd line markup</span>', 'testlib/gladeparser.glade:94'], ary[4])
96
+ assert_equal(['<span>&quot;markup&quot; with &lt;escaped strings&gt;</span>', 'testlib/gladeparser.glade:116'], ary[5])
97
+ assert_equal(['duplicated', 'testlib/gladeparser.glade:137', 'testlib/gladeparser.glade:158'], ary[6])
98
+ end
99
+
100
+ def testlib_erb
101
+ @ary = GetText::ErbParser.parse('testlib/erb.rhtml')
102
+
103
+ assert_target 'aaa', ['testlib/erb.rhtml:8']
104
+ assert_target 'aaa\n', ['testlib/erb.rhtml:11']
105
+ assert_target 'bbb', ['testlib/erb.rhtml:12']
106
+ assert_plural_target "ccc1", "ccc2", ['testlib/erb.rhtml:13']
107
+ end
108
+
109
+ def test_rgettext_parse
110
+ GetText::ErbParser.init(:extnames => ['.rhtml', '.rxml'])
111
+ @ary = GetText::RGetText.parse(['testlib/erb.rhtml'])
112
+ assert_target 'aaa', ['testlib/erb.rhtml:8']
113
+ assert_target 'aaa\n', ['testlib/erb.rhtml:11']
114
+ assert_target 'bbb', ['testlib/erb.rhtml:12']
115
+ assert_plural_target "ccc1", "ccc2", ['testlib/erb.rhtml:13']
116
+
117
+ @ary = GetText::RGetText.parse(['testlib/erb.rxml'])
118
+ assert_target 'aaa', ['testlib/erb.rxml:9']
119
+ assert_target 'aaa\n', ['testlib/erb.rxml:12']
120
+ assert_target 'bbb', ['testlib/erb.rxml:13']
121
+ assert_plural_target "ccc1", "ccc2", ['testlib/erb.rxml:14']
122
+
123
+ @ary = GetText::RGetText.parse(['testlib/ngettext.rb'])
124
+ assert_plural_target "ooo", "ppp", ['testlib/ngettext.rb:64', 'testlib/ngettext.rb:65']
125
+ assert_plural_target "qqq", "rrr", ['testlib/ngettext.rb:69', 'testlib/ngettext.rb:70']
126
+ end
127
+
128
+ private
129
+
130
+ def assert_target(msgid, sources = nil)
131
+ t = @ary.detect {|elem| elem.msgid == msgid}
132
+ if t
133
+ if sources
134
+ assert_equal sources.sort, t.sources.sort, 'Translation target sources do not match.'
135
+ end
136
+ yield t if block_given?
137
+ else
138
+ flunk "Expected a translation target with id '#{msgid}'. Not found."
139
+ end
140
+ end
141
+
142
+ def assert_plural_target(msgid, plural, sources = nil)
143
+ assert_target msgid, sources do |t|
144
+ assert_equal plural, t.msgid_plural, 'Expected plural form'
145
+ yield t if block_given?
146
+ end
147
+ end
148
+
149
+ def assert_target_in_context(msgctxt, msgid, sources = nil)
150
+ t = @ary.detect {|elem| elem.msgid == msgid && elem.msgctxt == msgctxt}
151
+ if t
152
+ if sources
153
+ assert_equal sources.sort, t.sources.sort, 'Translation target sources do not match.'
154
+ end
155
+ yield t if block_given?
156
+ else
157
+ flunk "Expected a translation target with id '#{msgid}' and context '#{msgctxt}'. Not found."
158
+ end
159
+ end
160
+ end
@@ -0,0 +1,67 @@
1
+ # encoding: utf-8
2
+
3
+ require 'testlib/helper.rb'
4
+
5
+ class TestGetTextString < Test::Unit::TestCase
6
+ def test_sprintf
7
+ assert_equal("foo is a number", "%{msg} is a number" % {:msg => "foo"})
8
+ assert_equal("bar is a number", "%s is a number" % ["bar"])
9
+ assert_equal("bar is a number", "%s is a number" % "bar")
10
+ assert_equal("1, test", "%{num}, %{record}" % {:num => 1, :record => "test"})
11
+ assert_equal("test, 1", "%{record}, %{num}" % {:num => 1, :record => "test"})
12
+ assert_equal("1, test", "%d, %s" % [1, "test"])
13
+ assert_equal("test, 1", "%2$s, %1$d" % [1, "test"])
14
+ assert_raise(ArgumentError) { "%-%" % [1] }
15
+ end
16
+
17
+ def test_sprintf_placeholder_include_non_english
18
+ assert_equal("a", "%{foo+foo}" % {"foo+foo".to_sym => "a"})
19
+ assert_equal("a", "%{foo.foo}" % {"foo.foo".to_sym => "a"})
20
+ assert_equal("a }", "%{foo+foo} }" % {"foo+foo".to_sym => "a"})
21
+ assert_equal("a { b }", "%{foo+foo} { %{bar bar-} }" % {"foo+foo".to_sym => "a", "bar bar-".to_sym => "b"})
22
+ end
23
+
24
+ def test_percent
25
+ assert_equal("% 1", "%% %<num>d" % {:num => 1.0})
26
+ assert_equal("%{num} %<num>d", "%%{num} %%<num>d" % {:num => 1})
27
+ end
28
+
29
+ def test_sprintf_percent_in_replacement
30
+ assert_equal("%<not_translated>s", "%{msg}" % { :msg => '%<not_translated>s', :not_translated => 'should not happen' })
31
+ end
32
+
33
+ def test_sprintf_lack_argument
34
+ assert_equal("%{num}, test", "%{num}, %{record}" % {:record => "test"})
35
+ assert_equal("%{record}", "%{record}" % {:num => 1})
36
+ end
37
+
38
+ def test_no_placeholder
39
+ assert_equal("aaa", "aaa" % {:num => 1})
40
+ assert_equal("bbb", "bbb" % [1])
41
+ end
42
+
43
+ def test_sprintf_ruby19_style
44
+ assert_equal("1", "%<num>d" % {:num => 1})
45
+ assert_equal("0b1", "%<num>#b" % {:num => 1})
46
+ assert_equal("foo", "%<msg>s" % {:msg => "foo"})
47
+ assert_equal("1.000000", "%<num>f" % {:num => 1.0})
48
+ assert_equal(" 1", "%<num>3.0f" % {:num => 1.0})
49
+ assert_equal("100.00", "%<num>2.2f" % {:num => 100.0})
50
+ assert_equal("0x64", "%<num>#x" % {:num => 100.0})
51
+ assert_equal("a", "%<foo.foo>s" % {"foo.foo".to_sym => "a"})
52
+ assert_raise(ArgumentError) { "%<num>,d" % {:num => 100} }
53
+ assert_raise(ArgumentError) { "%<num>/d" % {:num => 100} }
54
+ end
55
+
56
+ def test_sprintf_old_style
57
+ assert_equal("foo 1.000000", "%s %f" % ["foo", 1.0])
58
+ end
59
+
60
+ def test_sprintf_mix
61
+ assert_equal("foo 1.000000", "%{name} %<num>f" % {:name => "foo", :num => 1.0})
62
+ assert_equal("%{name} 1.000000", "%{name} %f" % [1.0])
63
+ assert_equal("%{name} 1.000000", "%{name} %f" % [1.0, 2.0])
64
+ end
65
+
66
+
67
+ end
@@ -0,0 +1,82 @@
1
+ # encoding: utf-8
2
+
3
+ require 'testlib/helper.rb'
4
+ require 'testlib/multi_textdomain.rb'
5
+
6
+ class TestGetTextMulti < Test::Unit::TestCase
7
+
8
+ def setup
9
+ GetText.locale = "ja"
10
+ end
11
+
12
+ def test_two_domains_in_a_class
13
+
14
+ test = C11.new
15
+ assert_equal("japanese", test.test) # Use test1.po
16
+ assert_equal("JAPANESE", test.test2) # Use test2.po
17
+
18
+ test = C12.new
19
+ assert_equal("japanese", test.test) # Use test1.po
20
+ assert_equal("JAPANESE", test.test2) # Use test2.po
21
+ end
22
+
23
+ def test_inheritance
24
+ # inheritance. only parent has a textdomain and it's methods
25
+ test = C21.new
26
+ assert_equal("japanese", test.test) # Use C11's po(test1.po)
27
+ assert_equal("JAPANESE", test.test2) # Use C11's po(test2.po)
28
+
29
+ test = C22.new
30
+ assert_equal("japanese", test.test) # Use C11's po(test1.po)
31
+ assert_equal("JAPANESE", test.test2) # Use C11's po(test2.po)
32
+ end
33
+
34
+ def test_module_and_sub_modules
35
+ # module
36
+ assert_equal("japanese", M1.test)
37
+
38
+ # sub-module. only an included module has a textdomain and it's methods
39
+ assert_equal("japanese", M1::M1M1.test) # Same method with M1.
40
+ assert_equal("LANGUAGE", M1::M1M1.test2) # No influence from ancestors.
41
+
42
+ # sub-class (class bindtextdomain).
43
+ test = M1::M1C1.new
44
+ assert_equal("japanese", test.test) # Use test1.po
45
+ assert_equal("JAPANESE", test.test2) # Use test2.po
46
+
47
+ # sub-class (instance bindtextdomain).
48
+ test = M1::M1C2.new
49
+ assert_equal("japanese", test.test) # Use test1.po
50
+ assert_equal("JAPANESE", test.test2) # Use test2.po
51
+ end
52
+
53
+ def test_eval
54
+ test = C2.new
55
+ assert_equal("japanese", test.test) # Use test1.po
56
+ end
57
+
58
+ def test_as_class_methods
59
+ test = C3.new
60
+ assert_equal("japanese", test.test) # Use test1.po
61
+ assert_equal("japanese", C3.test) # Use test1.po
62
+ end
63
+
64
+ def test_simple_inheritance
65
+ test = C4.new
66
+ assert_equal("japanese", test.test) # Use C3's test1.po
67
+ assert_equal("japanese", C4.test) # Use C3's test1.po
68
+ assert_equal("JAPANESE", test.test2) # Use C4's test2.po
69
+ assert_equal("no data", test.test3) # No po file.
70
+ end
71
+
72
+ def test_same_msgid_but_different_textdomain
73
+ test1 = C12.new # test1 domain
74
+ test2 = C51.new # test3 domain
75
+ test3 = C52.new # test3 domain but inherited C11.
76
+
77
+ assert_equal("japanese", test1.test) # Use text1 message
78
+ assert_equal("JAPANESE", test2.test) # Use text3 message
79
+ assert_equal("JAPANESE", test3.test) # Use text3 message
80
+ end
81
+
82
+ end
@@ -0,0 +1,44 @@
1
+ # encoding: utf-8
2
+
3
+ require 'testlib/helper.rb'
4
+ include GetText
5
+
6
+ bindtextdomain("test1", :path => "locale")
7
+ module M1
8
+ module_function
9
+ def module_function
10
+ _("language")
11
+ end
12
+ end
13
+
14
+ class C1
15
+ def instance_method
16
+ _("language")
17
+ end
18
+ def self.class_method
19
+ _("language")
20
+ end
21
+ end
22
+
23
+ def toplevel_method
24
+ _("language")
25
+ end
26
+
27
+ class TestGetText < Test::Unit::TestCase
28
+ include GetText
29
+
30
+ def test_toplevel
31
+ GetText.locale = "ja"
32
+ assert_equal("japanese", toplevel_method)
33
+ assert_equal("japanese", M1.module_function)
34
+ assert_equal("japanese", C1.class_method)
35
+ assert_equal("japanese", C1.new.instance_method)
36
+
37
+ GetText::TextDomainManager.clear_all_textdomains
38
+ GetText.bindtextdomain("test1", :path => "locale")
39
+ assert_equal("japanese", toplevel_method)
40
+ assert_equal("japanese", M1.module_function)
41
+ assert_equal("japanese", C1.class_method)
42
+ assert_equal("japanese", C1.new.instance_method)
43
+ end
44
+ end
@@ -0,0 +1,68 @@
1
+ # encoding: utf-8
2
+
3
+ require 'gettext'
4
+ include GetText
5
+
6
+ class TestRubyParser_N
7
+ bindtextdomain("testN_rubyparser", :path => "locale")
8
+
9
+ def testN_1
10
+ N_("aaa")
11
+ end
12
+
13
+ def testN_2
14
+ N_("aaa\n")
15
+ end
16
+
17
+ def testN_3
18
+ N_("bbb\nccc")
19
+ end
20
+
21
+ def testN_4
22
+ N_("bbb
23
+ ccc
24
+ ddd
25
+ ")
26
+ end
27
+
28
+ def testN_5
29
+ N_("eee")
30
+ end
31
+
32
+ def testN_6
33
+ N_("eee") + "foo" + N_("fff")
34
+ end
35
+
36
+ def testN_7
37
+ N_("ggg"\
38
+ "hhh"\
39
+ "iii")
40
+ end
41
+
42
+ def testN_8
43
+ N_('a"b"c"')
44
+ end
45
+
46
+ def testN_9
47
+ N_("d\"e\"f\"")
48
+ end
49
+
50
+ def testN_10
51
+ N_("jjj") +
52
+ N_("kkk")
53
+ end
54
+
55
+ def testN_11
56
+ N_("lll" + "mmm")
57
+ end
58
+
59
+ def testN_12
60
+ puts N_(msg), "ppp" #Ignored
61
+ end
62
+
63
+ def testN_13
64
+ N_("nnn\n" +
65
+ "ooo")
66
+ end
67
+ end
68
+
@@ -0,0 +1,15 @@
1
+ <%
2
+ require 'gettext'
3
+ include GetText
4
+ bindtextdomain("helloerb", :path => "locale")
5
+ %>
6
+ <html>
7
+ <head>
8
+ <title><%= _("aaa") %></title>
9
+ </head>
10
+ <body>
11
+ <h1><%= _("aaa\n") %></h1>
12
+ <p><%= N_("bbb") %></p>
13
+ <p><%= n_("ccc1", "ccc2", 1) %></p>
14
+ </body>
15
+ </html>
@@ -0,0 +1,16 @@
1
+ <?xml version="1.0" standalone="no"?>
2
+ <%
3
+ require 'gettext'
4
+ include GetText
5
+ bindtextdomain("helloerb", :path => "locale")
6
+ %>
7
+ <html>
8
+ <head>
9
+ <title><%= _("aaa") %></title>
10
+ </head>
11
+ <body>
12
+ <h1><%= _("aaa\n") %></h1>
13
+ <p><%= N_("bbb") %></p>
14
+ <p><%= n_("ccc1", "ccc2", 1) %></p>
15
+ </body>
16
+ </html>
@@ -0,0 +1,115 @@
1
+ # encoding: utf-8
2
+
3
+ require 'gettext'
4
+ include GetText
5
+
6
+ class TestRubyParser
7
+ bindtextdomain("rubyparser", :path => "locale")
8
+
9
+ def test_1
10
+ _("aaa")
11
+ end
12
+
13
+ def test_2
14
+ _("aaa\n")
15
+ end
16
+
17
+ def test_3
18
+ _("bbb\nccc")
19
+ end
20
+
21
+ def test_4
22
+ _("bbb
23
+ ccc
24
+ ddd
25
+ ")
26
+ end
27
+
28
+ def test_5
29
+ _("eee")
30
+ end
31
+
32
+ def test_6
33
+ _("eee") + "foo" + _("fff")
34
+ end
35
+
36
+ def test_7
37
+ _("ggg"\
38
+ "hhh"\
39
+ "iii")
40
+ end
41
+
42
+ def test_8
43
+ _('a"b"c"')
44
+ end
45
+
46
+ def test_9
47
+ _("d\"e\"f\"")
48
+ end
49
+
50
+ def test_10
51
+ _("jjj") +
52
+ _("kkk")
53
+ end
54
+
55
+ def test_11
56
+ _("lll" + "mmm")
57
+ end
58
+
59
+ def test_12
60
+ puts _(msg), "ppp" #Ignored
61
+ end
62
+
63
+ def test_13
64
+ _("nnn\n" +
65
+ "ooo")
66
+ end
67
+ def test_14
68
+ _("\#")
69
+ end
70
+
71
+ def test_15
72
+ _('#')
73
+ end
74
+
75
+ def test_16
76
+ _('\taaa')
77
+ end
78
+
79
+ def test_17
80
+ ret = _(<<EOF
81
+ Here document1
82
+ Here document2
83
+ EOF
84
+ )
85
+ end
86
+
87
+ def test_18
88
+ "<div>#{_('in_quote')}</div>"
89
+ end
90
+
91
+ def about
92
+ puts (
93
+ # TRANSLATORS: This is a proper name. See the gettext
94
+ # manual, section Names. Note this is actually a non-ASCII
95
+ # name: The first name is (with Unicode escapes)
96
+ # "Fran\u00e7ois" or (with HTML entities) "Fran&ccedil;ois".
97
+ # Pronunciation is like "fraa-swa pee-nar".
98
+ # This is an example from GNU gettext documentation.
99
+ _("Francois Pinard"))
100
+
101
+ puts (
102
+ # This comment should not be extracted because it does
103
+ # not start with 'TRANSLATORS:'
104
+ _('self explaining'))
105
+ end
106
+
107
+ end
108
+
109
+ module ActionController
110
+ class Base
111
+ end
112
+ end
113
+ class ApplicationController < ActionController::Base
114
+ "#{Time.now.strftime('%m/%d')}"
115
+ end