experteer-gettext 2.0.4

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 (424) hide show
  1. data/COPYING +55 -0
  2. data/ChangeLog +57 -0
  3. data/ChangeLog-1 +2016 -0
  4. data/NEWS-1 +414 -0
  5. data/README.rdoc +251 -0
  6. data/Rakefile +260 -0
  7. data/VERSION +2 -0
  8. data/bin/rgettext +24 -0
  9. data/bin/rmsgfmt +24 -0
  10. data/bin/rmsgmerge +24 -0
  11. data/gettext.gemspec +494 -0
  12. data/lib/gettext/cgi.rb +39 -0
  13. data/lib/gettext/class_info.rb +67 -0
  14. data/lib/gettext/core_ext/iconv.rb +112 -0
  15. data/lib/gettext/core_ext/string.rb +84 -0
  16. data/lib/gettext/locale_path.rb +123 -0
  17. data/lib/gettext/mofile.rb +330 -0
  18. data/lib/gettext/parser/erb.rb +54 -0
  19. data/lib/gettext/parser/glade.rb +100 -0
  20. data/lib/gettext/parser/ruby.rb +193 -0
  21. data/lib/gettext/poparser.rb +355 -0
  22. data/lib/gettext/textdomain.rb +179 -0
  23. data/lib/gettext/textdomain_group.rb +24 -0
  24. data/lib/gettext/textdomain_manager.rb +212 -0
  25. data/lib/gettext/tools/rgettext.rb +236 -0
  26. data/lib/gettext/tools/rmsgfmt.rb +84 -0
  27. data/lib/gettext/tools/rmsgmerge.rb +498 -0
  28. data/lib/gettext/tools.rb +195 -0
  29. data/lib/gettext/translation_target.rb +93 -0
  30. data/lib/gettext/utils.rb +37 -0
  31. data/lib/gettext/version.rb +12 -0
  32. data/lib/gettext.rb +312 -0
  33. data/po/bg/rgettext.po +130 -0
  34. data/po/bs/rgettext.po +131 -0
  35. data/po/ca/rgettext.po +129 -0
  36. data/po/cs/rgettext.po +132 -0
  37. data/po/de/rgettext.po +137 -0
  38. data/po/el/rgettext.po +128 -0
  39. data/po/eo/rgettext.po +129 -0
  40. data/po/es/rgettext.po +130 -0
  41. data/po/et/rgettext.po +127 -0
  42. data/po/fr/rgettext.po +133 -0
  43. data/po/hr/rgettext.po +131 -0
  44. data/po/hu/rgettext.po +129 -0
  45. data/po/it/rgettext.po +130 -0
  46. data/po/ja/rgettext.po +129 -0
  47. data/po/ko/rgettext.po +129 -0
  48. data/po/lv/rgettext.po +130 -0
  49. data/po/nb/rgettext.po +131 -0
  50. data/po/nl/rgettext.po +130 -0
  51. data/po/pt_BR/rgettext.po +132 -0
  52. data/po/rgettext.pot +121 -0
  53. data/po/ru/rgettext.po +131 -0
  54. data/po/sr/rgettext.po +130 -0
  55. data/po/sv/rgettext.po +123 -0
  56. data/po/ua/rgettext.po +134 -0
  57. data/po/vi/rgettext.po +128 -0
  58. data/po/zh/rgettext.po +129 -0
  59. data/po/zh_TW/rgettext.po +128 -0
  60. data/samples/README +16 -0
  61. data/samples/cgi/README +43 -0
  62. data/samples/cgi/Rakefile +27 -0
  63. data/samples/cgi/cookie.cgi +64 -0
  64. data/samples/cgi/gettext.css +116 -0
  65. data/samples/cgi/helloerb.rhtml +28 -0
  66. data/samples/cgi/helloerb1.cgi +58 -0
  67. data/samples/cgi/helloerb2.cgi +51 -0
  68. data/samples/cgi/hellolib.rb +20 -0
  69. data/samples/cgi/http.rb +51 -0
  70. data/samples/cgi/index.cgi +111 -0
  71. data/samples/cgi/other.rhtml +20 -0
  72. data/samples/cgi/po/bg/helloerb1.po +59 -0
  73. data/samples/cgi/po/bg/helloerb2.po +51 -0
  74. data/samples/cgi/po/bg/hellolib.po +23 -0
  75. data/samples/cgi/po/bg/main.po +83 -0
  76. data/samples/cgi/po/bs/helloerb1.po +59 -0
  77. data/samples/cgi/po/bs/helloerb2.po +51 -0
  78. data/samples/cgi/po/bs/hellolib.po +23 -0
  79. data/samples/cgi/po/bs/main.po +83 -0
  80. data/samples/cgi/po/ca/helloerb1.po +59 -0
  81. data/samples/cgi/po/ca/helloerb2.po +51 -0
  82. data/samples/cgi/po/ca/hellolib.po +23 -0
  83. data/samples/cgi/po/ca/main.po +83 -0
  84. data/samples/cgi/po/cs/helloerb1.po +61 -0
  85. data/samples/cgi/po/cs/helloerb2.po +52 -0
  86. data/samples/cgi/po/cs/hellolib.po +25 -0
  87. data/samples/cgi/po/cs/main.po +85 -0
  88. data/samples/cgi/po/de/helloerb1.po +61 -0
  89. data/samples/cgi/po/de/helloerb2.po +52 -0
  90. data/samples/cgi/po/de/hellolib.po +24 -0
  91. data/samples/cgi/po/de/main.po +86 -0
  92. data/samples/cgi/po/el/helloerb1.po +60 -0
  93. data/samples/cgi/po/el/helloerb2.po +51 -0
  94. data/samples/cgi/po/el/hellolib.po +23 -0
  95. data/samples/cgi/po/el/main.po +84 -0
  96. data/samples/cgi/po/eo/helloerb1.po +60 -0
  97. data/samples/cgi/po/eo/helloerb2.po +52 -0
  98. data/samples/cgi/po/eo/hellolib.po +24 -0
  99. data/samples/cgi/po/eo/main.po +84 -0
  100. data/samples/cgi/po/es/helloerb1.po +59 -0
  101. data/samples/cgi/po/es/helloerb2.po +50 -0
  102. data/samples/cgi/po/es/hellolib.po +22 -0
  103. data/samples/cgi/po/es/main.po +83 -0
  104. data/samples/cgi/po/fr/helloerb1.po +59 -0
  105. data/samples/cgi/po/fr/helloerb2.po +51 -0
  106. data/samples/cgi/po/fr/hellolib.po +22 -0
  107. data/samples/cgi/po/fr/main.po +85 -0
  108. data/samples/cgi/po/helloerb1.pot +60 -0
  109. data/samples/cgi/po/helloerb2.pot +52 -0
  110. data/samples/cgi/po/hellolib.pot +24 -0
  111. data/samples/cgi/po/hr/helloerb1.po +59 -0
  112. data/samples/cgi/po/hr/helloerb2.po +51 -0
  113. data/samples/cgi/po/hr/hellolib.po +23 -0
  114. data/samples/cgi/po/hr/main.po +83 -0
  115. data/samples/cgi/po/hu/helloerb1.po +59 -0
  116. data/samples/cgi/po/hu/helloerb2.po +51 -0
  117. data/samples/cgi/po/hu/hellolib.po +23 -0
  118. data/samples/cgi/po/hu/main.po +82 -0
  119. data/samples/cgi/po/it/helloerb1.po +60 -0
  120. data/samples/cgi/po/it/helloerb2.po +52 -0
  121. data/samples/cgi/po/it/hellolib.po +24 -0
  122. data/samples/cgi/po/it/main.po +84 -0
  123. data/samples/cgi/po/ja/helloerb1.po +60 -0
  124. data/samples/cgi/po/ja/helloerb2.po +52 -0
  125. data/samples/cgi/po/ja/hellolib.po +24 -0
  126. data/samples/cgi/po/ja/main.po +85 -0
  127. data/samples/cgi/po/ko/helloerb1.po +59 -0
  128. data/samples/cgi/po/ko/helloerb2.po +51 -0
  129. data/samples/cgi/po/ko/hellolib.po +23 -0
  130. data/samples/cgi/po/ko/main.po +84 -0
  131. data/samples/cgi/po/lv/helloerb1.po +65 -0
  132. data/samples/cgi/po/lv/helloerb2.po +52 -0
  133. data/samples/cgi/po/lv/hellolib.po +24 -0
  134. data/samples/cgi/po/lv/main.po +77 -0
  135. data/samples/cgi/po/main.pot +80 -0
  136. data/samples/cgi/po/nb/helloerb1.po +60 -0
  137. data/samples/cgi/po/nb/helloerb2.po +52 -0
  138. data/samples/cgi/po/nb/hellolib.po +24 -0
  139. data/samples/cgi/po/nb/main.po +84 -0
  140. data/samples/cgi/po/nl/helloerb1.po +61 -0
  141. data/samples/cgi/po/nl/helloerb2.po +52 -0
  142. data/samples/cgi/po/nl/hellolib.po +24 -0
  143. data/samples/cgi/po/nl/main.po +86 -0
  144. data/samples/cgi/po/pt_BR/helloerb1.po +59 -0
  145. data/samples/cgi/po/pt_BR/helloerb2.po +51 -0
  146. data/samples/cgi/po/pt_BR/hellolib.po +23 -0
  147. data/samples/cgi/po/pt_BR/main.po +84 -0
  148. data/samples/cgi/po/ru/helloerb1.po +58 -0
  149. data/samples/cgi/po/ru/helloerb2.po +50 -0
  150. data/samples/cgi/po/ru/hellolib.po +22 -0
  151. data/samples/cgi/po/ru/main.po +82 -0
  152. data/samples/cgi/po/sr/helloerb1.po +60 -0
  153. data/samples/cgi/po/sr/helloerb2.po +52 -0
  154. data/samples/cgi/po/sr/hellolib.po +24 -0
  155. data/samples/cgi/po/sr/main.po +80 -0
  156. data/samples/cgi/po/ua/helloerb1.po +62 -0
  157. data/samples/cgi/po/ua/helloerb2.po +54 -0
  158. data/samples/cgi/po/ua/hellolib.po +26 -0
  159. data/samples/cgi/po/ua/main.po +84 -0
  160. data/samples/cgi/po/vi/helloerb1.po +65 -0
  161. data/samples/cgi/po/vi/helloerb2.po +52 -0
  162. data/samples/cgi/po/vi/hellolib.po +24 -0
  163. data/samples/cgi/po/vi/main.po +77 -0
  164. data/samples/cgi/po/zh/helloerb1.po +60 -0
  165. data/samples/cgi/po/zh/helloerb2.po +52 -0
  166. data/samples/cgi/po/zh/hellolib.po +24 -0
  167. data/samples/cgi/po/zh/main.po +80 -0
  168. data/samples/cgi/po/zh_TW/helloerb1.po +67 -0
  169. data/samples/cgi/po/zh_TW/helloerb2.po +54 -0
  170. data/samples/cgi/po/zh_TW/hellolib.po +26 -0
  171. data/samples/cgi/po/zh_TW/main.po +79 -0
  172. data/samples/hello.rb +36 -0
  173. data/samples/hello2.rb +23 -0
  174. data/samples/hello_glade2.glade +70 -0
  175. data/samples/hello_glade2.rb +25 -0
  176. data/samples/hello_gtk2.rb +27 -0
  177. data/samples/hello_noop.rb +31 -0
  178. data/samples/hello_plural.rb +26 -0
  179. data/samples/hello_tk.rb +19 -0
  180. data/samples/makemo.rb +4 -0
  181. data/samples/po/bg/hello.po +24 -0
  182. data/samples/po/bg/hello2.po +31 -0
  183. data/samples/po/bg/hello_glade2.po +31 -0
  184. data/samples/po/bg/hello_gtk.po +23 -0
  185. data/samples/po/bg/hello_noop.po +27 -0
  186. data/samples/po/bg/hello_plural.po +25 -0
  187. data/samples/po/bg/hello_tk.po +23 -0
  188. data/samples/po/bs/hello.po +23 -0
  189. data/samples/po/bs/hello2.po +31 -0
  190. data/samples/po/bs/hello_glade2.po +31 -0
  191. data/samples/po/bs/hello_gtk.po +23 -0
  192. data/samples/po/bs/hello_noop.po +27 -0
  193. data/samples/po/bs/hello_plural.po +26 -0
  194. data/samples/po/bs/hello_tk.po +23 -0
  195. data/samples/po/ca/hello.po +23 -0
  196. data/samples/po/ca/hello2.po +31 -0
  197. data/samples/po/ca/hello_glade2.po +31 -0
  198. data/samples/po/ca/hello_gtk.po +23 -0
  199. data/samples/po/ca/hello_noop.po +27 -0
  200. data/samples/po/ca/hello_plural.po +25 -0
  201. data/samples/po/ca/hello_tk.po +23 -0
  202. data/samples/po/cs/hello.po +23 -0
  203. data/samples/po/cs/hello2.po +31 -0
  204. data/samples/po/cs/hello_glade2.po +37 -0
  205. data/samples/po/cs/hello_gtk.po +23 -0
  206. data/samples/po/cs/hello_noop.po +27 -0
  207. data/samples/po/cs/hello_plural.po +26 -0
  208. data/samples/po/cs/hello_tk.po +23 -0
  209. data/samples/po/de/hello.po +20 -0
  210. data/samples/po/de/hello2.po +28 -0
  211. data/samples/po/de/hello_glade2.po +27 -0
  212. data/samples/po/de/hello_gtk.po +20 -0
  213. data/samples/po/de/hello_noop.po +24 -0
  214. data/samples/po/de/hello_plural.po +25 -0
  215. data/samples/po/de/hello_tk.po +20 -0
  216. data/samples/po/el/hello.po +23 -0
  217. data/samples/po/el/hello2.po +31 -0
  218. data/samples/po/el/hello_glade2.po +31 -0
  219. data/samples/po/el/hello_gtk.po +22 -0
  220. data/samples/po/el/hello_noop.po +27 -0
  221. data/samples/po/el/hello_plural.po +25 -0
  222. data/samples/po/el/hello_tk.po +23 -0
  223. data/samples/po/eo/hello.po +23 -0
  224. data/samples/po/eo/hello2.po +31 -0
  225. data/samples/po/eo/hello_glade2.po +32 -0
  226. data/samples/po/eo/hello_gtk.po +23 -0
  227. data/samples/po/eo/hello_noop.po +27 -0
  228. data/samples/po/eo/hello_plural.po +26 -0
  229. data/samples/po/eo/hello_tk.po +24 -0
  230. data/samples/po/es/hello.po +21 -0
  231. data/samples/po/es/hello2.po +28 -0
  232. data/samples/po/es/hello_glade2.po +28 -0
  233. data/samples/po/es/hello_gtk.po +20 -0
  234. data/samples/po/es/hello_noop.po +24 -0
  235. data/samples/po/es/hello_plural.po +23 -0
  236. data/samples/po/es/hello_tk.po +20 -0
  237. data/samples/po/fr/hello.po +18 -0
  238. data/samples/po/fr/hello2.po +26 -0
  239. data/samples/po/fr/hello_glade2.po +27 -0
  240. data/samples/po/fr/hello_gtk.po +18 -0
  241. data/samples/po/fr/hello_noop.po +22 -0
  242. data/samples/po/fr/hello_plural.po +21 -0
  243. data/samples/po/fr/hello_tk.po +18 -0
  244. data/samples/po/hello.pot +23 -0
  245. data/samples/po/hello2.pot +31 -0
  246. data/samples/po/hello_glade2.pot +32 -0
  247. data/samples/po/hello_gtk.pot +23 -0
  248. data/samples/po/hello_noop.pot +27 -0
  249. data/samples/po/hello_plural.pot +26 -0
  250. data/samples/po/hello_tk.pot +24 -0
  251. data/samples/po/hr/hello.po +23 -0
  252. data/samples/po/hr/hello2.po +31 -0
  253. data/samples/po/hr/hello_glade2.po +31 -0
  254. data/samples/po/hr/hello_gtk.po +23 -0
  255. data/samples/po/hr/hello_noop.po +27 -0
  256. data/samples/po/hr/hello_plural.po +26 -0
  257. data/samples/po/hr/hello_tk.po +23 -0
  258. data/samples/po/hu/hello.po +22 -0
  259. data/samples/po/hu/hello2.po +30 -0
  260. data/samples/po/hu/hello_glade2.po +31 -0
  261. data/samples/po/hu/hello_gtk.po +22 -0
  262. data/samples/po/hu/hello_noop.po +26 -0
  263. data/samples/po/hu/hello_plural.po +25 -0
  264. data/samples/po/hu/hello_tk.po +23 -0
  265. data/samples/po/it/hello.po +20 -0
  266. data/samples/po/it/hello2.po +28 -0
  267. data/samples/po/it/hello_glade2.po +28 -0
  268. data/samples/po/it/hello_gtk.po +21 -0
  269. data/samples/po/it/hello_noop.po +24 -0
  270. data/samples/po/it/hello_plural.po +23 -0
  271. data/samples/po/it/hello_tk.po +21 -0
  272. data/samples/po/ja/hello.po +20 -0
  273. data/samples/po/ja/hello2.po +28 -0
  274. data/samples/po/ja/hello_glade2.po +26 -0
  275. data/samples/po/ja/hello_gtk.po +19 -0
  276. data/samples/po/ja/hello_noop.po +23 -0
  277. data/samples/po/ja/hello_plural.po +21 -0
  278. data/samples/po/ja/hello_tk.po +19 -0
  279. data/samples/po/ko/hello.po +18 -0
  280. data/samples/po/ko/hello2.po +26 -0
  281. data/samples/po/ko/hello_glade2.po +29 -0
  282. data/samples/po/ko/hello_gtk.po +18 -0
  283. data/samples/po/ko/hello_noop.po +22 -0
  284. data/samples/po/ko/hello_plural.po +25 -0
  285. data/samples/po/ko/hello_tk.po +19 -0
  286. data/samples/po/lv/hello.po +24 -0
  287. data/samples/po/lv/hello2.po +32 -0
  288. data/samples/po/lv/hello_glade2.po +38 -0
  289. data/samples/po/lv/hello_gtk.po +24 -0
  290. data/samples/po/lv/hello_noop.po +28 -0
  291. data/samples/po/lv/hello_plural.po +26 -0
  292. data/samples/po/lv/hello_tk.po +24 -0
  293. data/samples/po/nb/hello.po +23 -0
  294. data/samples/po/nb/hello2.po +31 -0
  295. data/samples/po/nb/hello_glade2.po +31 -0
  296. data/samples/po/nb/hello_gtk.po +23 -0
  297. data/samples/po/nb/hello_noop.po +27 -0
  298. data/samples/po/nb/hello_plural.po +26 -0
  299. data/samples/po/nb/hello_tk.po +24 -0
  300. data/samples/po/nl/hello.po +24 -0
  301. data/samples/po/nl/hello2.po +32 -0
  302. data/samples/po/nl/hello_glade2.po +31 -0
  303. data/samples/po/nl/hello_gtk.po +24 -0
  304. data/samples/po/nl/hello_noop.po +28 -0
  305. data/samples/po/nl/hello_plural.po +25 -0
  306. data/samples/po/nl/hello_tk.po +24 -0
  307. data/samples/po/pt_BR/hello.po +21 -0
  308. data/samples/po/pt_BR/hello2.po +29 -0
  309. data/samples/po/pt_BR/hello_glade2.po +29 -0
  310. data/samples/po/pt_BR/hello_gtk.po +21 -0
  311. data/samples/po/pt_BR/hello_noop.po +25 -0
  312. data/samples/po/pt_BR/hello_plural.po +23 -0
  313. data/samples/po/pt_BR/hello_tk.po +21 -0
  314. data/samples/po/ru/hello.po +22 -0
  315. data/samples/po/ru/hello2.po +30 -0
  316. data/samples/po/ru/hello_glade2.po +30 -0
  317. data/samples/po/ru/hello_gtk.po +22 -0
  318. data/samples/po/ru/hello_noop.po +26 -0
  319. data/samples/po/ru/hello_plural.po +28 -0
  320. data/samples/po/ru/hello_tk.po +22 -0
  321. data/samples/po/sr/hello.po +22 -0
  322. data/samples/po/sr/hello2.po +30 -0
  323. data/samples/po/sr/hello_glade2.po +32 -0
  324. data/samples/po/sr/hello_gtk.po +22 -0
  325. data/samples/po/sr/hello_noop.po +26 -0
  326. data/samples/po/sr/hello_plural.po +26 -0
  327. data/samples/po/sr/hello_tk.po +24 -0
  328. data/samples/po/sv/hello.po +20 -0
  329. data/samples/po/sv/hello2.po +28 -0
  330. data/samples/po/sv/hello_glade2.po +28 -0
  331. data/samples/po/sv/hello_gtk.po +20 -0
  332. data/samples/po/sv/hello_noop.po +24 -0
  333. data/samples/po/sv/hello_plural.po +23 -0
  334. data/samples/po/sv/hello_tk.po +20 -0
  335. data/samples/po/test.rb +11 -0
  336. data/samples/po/ua/hello.po +22 -0
  337. data/samples/po/ua/hello2.po +30 -0
  338. data/samples/po/ua/hello_glade2.po +34 -0
  339. data/samples/po/ua/hello_gtk.po +22 -0
  340. data/samples/po/ua/hello_noop.po +26 -0
  341. data/samples/po/ua/hello_plural.po +29 -0
  342. data/samples/po/ua/hello_tk.po +26 -0
  343. data/samples/po/vi/hello.po +23 -0
  344. data/samples/po/vi/hello2.po +31 -0
  345. data/samples/po/vi/hello_glade2.po +38 -0
  346. data/samples/po/vi/hello_gtk.po +23 -0
  347. data/samples/po/vi/hello_noop.po +27 -0
  348. data/samples/po/vi/hello_plural.po +26 -0
  349. data/samples/po/vi/hello_tk.po +24 -0
  350. data/samples/po/zh/hello.po +23 -0
  351. data/samples/po/zh/hello2.po +31 -0
  352. data/samples/po/zh/hello_glade2.po +31 -0
  353. data/samples/po/zh/hello_gtk.po +23 -0
  354. data/samples/po/zh/hello_noop.po +27 -0
  355. data/samples/po/zh/hello_plural.po +25 -0
  356. data/samples/po/zh/hello_tk.po +23 -0
  357. data/samples/po/zh_TW/hello.po +26 -0
  358. data/samples/po/zh_TW/hello2.po +34 -0
  359. data/samples/po/zh_TW/hello_glade2.po +40 -0
  360. data/samples/po/zh_TW/hello_gtk.po +25 -0
  361. data/samples/po/zh_TW/hello_noop.po +30 -0
  362. data/samples/po/zh_TW/hello_plural.po +28 -0
  363. data/samples/po/zh_TW/hello_tk.po +26 -0
  364. data/test/README +1 -0
  365. data/test/Rakefile +17 -0
  366. data/test/po/cr/plural.po +23 -0
  367. data/test/po/da/plural.po +22 -0
  368. data/test/po/da/plural_error.po +22 -0
  369. data/test/po/fr/plural.po +28 -0
  370. data/test/po/fr/plural_error.po +20 -0
  371. data/test/po/fr/test1.po +23 -0
  372. data/test/po/fr/test2.po +19 -0
  373. data/test/po/ir/plural.po +23 -0
  374. data/test/po/ja/npgettext.po +46 -0
  375. data/test/po/ja/nsgettext.po +65 -0
  376. data/test/po/ja/pgettext.po +41 -0
  377. data/test/po/ja/plural.po +28 -0
  378. data/test/po/ja/plural_error.po +20 -0
  379. data/test/po/ja/rubyparser.po +43 -0
  380. data/test/po/ja/sgettext.po +47 -0
  381. data/test/po/ja/test1.po +23 -0
  382. data/test/po/ja/test2.po +19 -0
  383. data/test/po/ja/test3.po +19 -0
  384. data/test/po/la/plural.po +23 -0
  385. data/test/po/la/plural_error.po +21 -0
  386. data/test/po/li/plural.po +23 -0
  387. data/test/po/li/plural_error.po +27 -0
  388. data/test/po/po/plural.po +23 -0
  389. data/test/po/sl/plural.po +24 -0
  390. data/test/test_class_info.rb +83 -0
  391. data/test/test_gettext.rb +311 -0
  392. data/test/test_locale_path.rb +50 -0
  393. data/test/test_parser.rb +157 -0
  394. data/test/test_po_generation.rb +20 -0
  395. data/test/test_string.rb +65 -0
  396. data/test/test_textdomain_bind.rb +37 -0
  397. data/test/test_textdomain_multi.rb +80 -0
  398. data/test/test_textdomain_toplevel.rb +42 -0
  399. data/test/test_thread.rb +41 -0
  400. data/test/test_translation_target.rb +29 -0
  401. data/test/testlib/N_.rb +66 -0
  402. data/test/testlib/erb.rhtml +15 -0
  403. data/test/testlib/erb.rxml +16 -0
  404. data/test/testlib/gettext.rb +113 -0
  405. data/test/testlib/gladeparser.glade +183 -0
  406. data/test/testlib/helper.rb +11 -0
  407. data/test/testlib/multi_textdomain.rb +131 -0
  408. data/test/testlib/ngettext.rb +79 -0
  409. data/test/testlib/npgettext.rb +31 -0
  410. data/test/testlib/nsgettext.rb +42 -0
  411. data/test/testlib/pgettext.rb +36 -0
  412. data/test/testlib/sgettext.rb +46 -0
  413. data/test/testlib/simple.rb +14 -0
  414. data/test/tools/files/app.pot +0 -0
  415. data/test/tools/files/de/app.po +0 -0
  416. data/test/tools/files/en/app.po +0 -0
  417. data/test/tools/files/en/test.po +21 -0
  418. data/test/tools/files/simple_1.po +2 -0
  419. data/test/tools/files/simple_2.po +2 -0
  420. data/test/tools/files/simple_translation.rb +1 -0
  421. data/test/tools/files/version.po +7 -0
  422. data/test/tools/test.pot +21 -0
  423. data/test/tools/test_tools.rb +61 -0
  424. metadata +510 -0
@@ -0,0 +1,50 @@
1
+ require 'testlib/helper.rb'
2
+ require 'testlib/simple'
3
+
4
+ class TestLocalePath < Test::Unit::TestCase
5
+ def setup
6
+ GetText.locale = "ja_JP.eucJP"
7
+ GetText::LocalePath.clear
8
+ end
9
+
10
+ def test_locale_path
11
+ test = Simple.new
12
+ assert_equal("japanese", test.test)
13
+ prefix = GetText::LocalePath::CONFIG_PREFIX
14
+ default_locale_dirs = [
15
+ "./locale/%{lang}/LC_MESSAGES/%{name}.mo",
16
+ "./locale/%{lang}/%{name}.mo",
17
+ "#{Config::CONFIG['datadir']}/locale/%{lang}/LC_MESSAGES/%{name}.mo",
18
+ "#{Config::CONFIG['datadir'].gsub(/\/local/, "")}/locale/%{lang}/LC_MESSAGES/%{name}.mo",
19
+ "#{prefix}/share/locale/%{lang}/LC_MESSAGES/%{name}.mo",
20
+ "#{prefix}/local/share/locale/%{lang}/LC_MESSAGES/%{name}.mo"
21
+ ].uniq
22
+ assert_equal(default_locale_dirs, GetText::LocalePath::DEFAULT_RULES)
23
+ new_path = "/foo/%{lang}/%{name}.mo"
24
+ GetText::LocalePath.add_default_rule(new_path)
25
+ assert_equal([new_path] + default_locale_dirs, GetText::LocalePath::DEFAULT_RULES)
26
+ end
27
+
28
+ def test_initialize_with_topdir
29
+ testdir = File.dirname(File.expand_path(__FILE__))
30
+ path = GetText::LocalePath.new("test1", "#{testdir}/locale")
31
+ assert_equal path.locale_paths, { "ja" => "#{testdir}/locale/ja/LC_MESSAGES/test1.mo",
32
+ "fr" => "#{testdir}/locale/fr/LC_MESSAGES/test1.mo"}
33
+ assert_equal path.current_path(Locale::Tag.parse("ja")), "#{testdir}/locale/ja/LC_MESSAGES/test1.mo"
34
+ assert_equal path.current_path(Locale::Tag.parse("ja-JP")), "#{testdir}/locale/ja/LC_MESSAGES/test1.mo"
35
+ assert_equal path.current_path(Locale::Tag.parse("ja_JP.UTF-8")), "#{testdir}/locale/ja/LC_MESSAGES/test1.mo"
36
+ assert_equal path.current_path(Locale::Tag.parse("en")), nil
37
+ end
38
+
39
+ def test_supported_locales
40
+ testdir = File.dirname(File.expand_path(__FILE__))
41
+ path = GetText::LocalePath.new("test1", "#{testdir}/locale")
42
+ assert_equal ["fr", "ja"], path.supported_locales
43
+
44
+ path = GetText::LocalePath.new("plural", "#{testdir}/locale")
45
+ assert_equal ["cr", "da", "fr", "ir", "ja", "la", "li", "po", "sl"], path.supported_locales
46
+
47
+ path = GetText::LocalePath.new("nodomain", "#{testdir}/locale")
48
+ assert_equal [], path.supported_locales
49
+ end
50
+ end
@@ -0,0 +1,157 @@
1
+ require 'testlib/helper.rb'
2
+ require 'gettext/parser/ruby'
3
+ require 'gettext/parser/glade'
4
+ require 'gettext/parser/erb'
5
+
6
+ require 'gettext/tools/rgettext'
7
+
8
+ class TestGetTextParser < Test::Unit::TestCase
9
+ def test_ruby
10
+ @ary = GetText::RubyParser.parse('testlib/gettext.rb')
11
+
12
+ assert_target 'aaa', ['testlib/gettext.rb:8']
13
+ assert_target 'aaa\n', ['testlib/gettext.rb:12']
14
+ assert_target 'bbb\nccc', ['testlib/gettext.rb:16']
15
+ assert_target 'bbb\nccc\nddd\n', ['testlib/gettext.rb:20']
16
+ assert_target 'eee', ['testlib/gettext.rb:27', 'testlib/gettext.rb:31']
17
+ assert_target 'fff', ['testlib/gettext.rb:31']
18
+ assert_target 'ggghhhiii', ['testlib/gettext.rb:35']
19
+ assert_target 'a"b"c"', ['testlib/gettext.rb:41']
20
+ assert_target 'd"e"f"', ['testlib/gettext.rb:45']
21
+ assert_target 'jjj', ['testlib/gettext.rb:49']
22
+ assert_target 'kkk', ['testlib/gettext.rb:50']
23
+ assert_target 'lllmmm', ['testlib/gettext.rb:54']
24
+ assert_target 'nnn\nooo', ['testlib/gettext.rb:62']
25
+ assert_target "\#", ['testlib/gettext.rb:66', 'testlib/gettext.rb:70']
26
+ assert_target "\\taaa", ['testlib/gettext.rb:74']
27
+ assert_target "Here document1\\nHere document2\\n", ['testlib/gettext.rb:78']
28
+ assert_target "Francois Pinard", ['testlib/gettext.rb:97'] do |t|
29
+ assert_match /proper name/, t.extracted_comment
30
+ assert_match /Pronunciation/, t.extracted_comment
31
+ end
32
+ assert_target "self explaining", ['testlib/gettext.rb:102'] do |t|
33
+ assert_nil t.extracted_comment
34
+ end
35
+ # TODO: assert_target "in_quote", ['testlib/gettext.rb:96']
36
+ end
37
+
38
+ def test_ruby_N
39
+ @ary = GetText::RubyParser.parse('testlib/N_.rb')
40
+
41
+ assert_target 'aaa', ['testlib/N_.rb:8']
42
+ assert_target 'aaa\n', ['testlib/N_.rb:12']
43
+ assert_target 'bbb\nccc', ['testlib/N_.rb:16']
44
+ assert_target 'bbb\nccc\nddd\n', ['testlib/N_.rb:20']
45
+ assert_target 'eee', ['testlib/N_.rb:27', 'testlib/N_.rb:31']
46
+ assert_target 'fff', ['testlib/N_.rb:31']
47
+ assert_target 'ggghhhiii', ['testlib/N_.rb:35']
48
+ assert_target 'a"b"c"', ['testlib/N_.rb:41']
49
+ assert_target 'd"e"f"', ['testlib/N_.rb:45']
50
+ assert_target 'jjj', ['testlib/N_.rb:49']
51
+ assert_target 'kkk', ['testlib/N_.rb:50']
52
+ assert_target 'lllmmm', ['testlib/N_.rb:54']
53
+ assert_target 'nnn\nooo', ['testlib/N_.rb:62']
54
+ end
55
+
56
+ def test_ruby_n
57
+ @ary = GetText::RubyParser.parse('testlib/ngettext.rb')
58
+ assert_plural_target "aaa", "aaa2", ['testlib/ngettext.rb:8']
59
+ assert_plural_target "bbb\\n", "ccc2\\nccc2", ['testlib/ngettext.rb:12']
60
+ assert_plural_target "ddd\\nddd", "ddd2\\nddd2", ['testlib/ngettext.rb:16']
61
+ assert_plural_target "eee\\neee\\n", "eee2\\neee2\\n", ['testlib/ngettext.rb:21']
62
+ assert_plural_target "ddd\\neee\\n", "ddd\\neee2", ['testlib/ngettext.rb:27']
63
+ assert_plural_target "fff", "fff2", ['testlib/ngettext.rb:34', 'testlib/ngettext.rb:38']
64
+ assert_plural_target "ggg", "ggg2", ['testlib/ngettext.rb:38']
65
+ assert_plural_target "ggghhhiii", "jjjkkklll", ['testlib/ngettext.rb:42']
66
+ assert_plural_target "a\"b\"c\"", "a\"b\"c\"2", ['testlib/ngettext.rb:51']
67
+ assert_plural_target "mmmmmm", "mmm2mmm2", ['testlib/ngettext.rb:59']
68
+ assert_plural_target "nnn", "nnn2", ['testlib/ngettext.rb:60']
69
+ assert_plural_target "comment", "comments", ['testlib/ngettext.rb:76'] do |t|
70
+ assert_equal "please provide translations for all \n the plural forms!", t.extracted_comment
71
+ end
72
+ end
73
+
74
+ def test_ruby_p
75
+ @ary = GetText::RubyParser.parse('testlib/pgettext.rb')
76
+ assert_target_in_context "AAA", "BBB", ["testlib/pgettext.rb:8", "testlib/pgettext.rb:12"]
77
+ assert_target_in_context "AAA|BBB", "CCC", ["testlib/pgettext.rb:16"]
78
+ assert_target_in_context "AAA", "CCC", ["testlib/pgettext.rb:20"]
79
+ assert_target_in_context "CCC", "BBB", ["testlib/pgettext.rb:24"]
80
+ assert_target_in_context "program", "name", ['testlib/pgettext.rb:34'] do |t|
81
+ assert_equal "please translate 'name' in the context of 'program'.\n Hint: the translation should NOT contain the translation of 'program'.", t.extracted_comment
82
+ end
83
+ end
84
+
85
+ def test_glade
86
+ ary = GetText::GladeParser.parse('testlib/gladeparser.glade')
87
+
88
+ assert_equal(['window1', 'testlib/gladeparser.glade:8'], ary[0])
89
+ assert_equal(['normal text', 'testlib/gladeparser.glade:29'], ary[1])
90
+ assert_equal(['1st line\n2nd line\n3rd line', 'testlib/gladeparser.glade:50'], ary[2])
91
+ assert_equal(['<span color="red" weight="bold" size="large">markup </span>', 'testlib/gladeparser.glade:73'], ary[3])
92
+ assert_equal(['<span color="red">1st line markup </span>\n<span color="blue">2nd line markup</span>', 'testlib/gladeparser.glade:94'], ary[4])
93
+ assert_equal(['<span>&quot;markup&quot; with &lt;escaped strings&gt;</span>', 'testlib/gladeparser.glade:116'], ary[5])
94
+ assert_equal(['duplicated', 'testlib/gladeparser.glade:137', 'testlib/gladeparser.glade:158'], ary[6])
95
+ end
96
+
97
+ def testlib_erb
98
+ @ary = GetText::ErbParser.parse('testlib/erb.rhtml')
99
+
100
+ assert_target 'aaa', ['testlib/erb.rhtml:8']
101
+ assert_target 'aaa\n', ['testlib/erb.rhtml:11']
102
+ assert_target 'bbb', ['testlib/erb.rhtml:12']
103
+ assert_plural_target "ccc1", "ccc2", ['testlib/erb.rhtml:13']
104
+ end
105
+
106
+ def test_rgettext_parse
107
+ GetText::ErbParser.init(:extnames => ['.rhtml', '.rxml'])
108
+ @ary = GetText::RGetText.parse(['testlib/erb.rhtml'])
109
+ assert_target 'aaa', ['testlib/erb.rhtml:8']
110
+ assert_target 'aaa\n', ['testlib/erb.rhtml:11']
111
+ assert_target 'bbb', ['testlib/erb.rhtml:12']
112
+ assert_plural_target "ccc1", "ccc2", ['testlib/erb.rhtml:13']
113
+
114
+ @ary = GetText::RGetText.parse(['testlib/erb.rxml'])
115
+ assert_target 'aaa', ['testlib/erb.rxml:9']
116
+ assert_target 'aaa\n', ['testlib/erb.rxml:12']
117
+ assert_target 'bbb', ['testlib/erb.rxml:13']
118
+ assert_plural_target "ccc1", "ccc2", ['testlib/erb.rxml:14']
119
+
120
+ @ary = GetText::RGetText.parse(['testlib/ngettext.rb'])
121
+ assert_plural_target "ooo", "ppp", ['testlib/ngettext.rb:64', 'testlib/ngettext.rb:65']
122
+ assert_plural_target "qqq", "rrr", ['testlib/ngettext.rb:69', 'testlib/ngettext.rb:70']
123
+ end
124
+
125
+ private
126
+
127
+ def assert_target(msgid, occurrences = nil)
128
+ t = @ary.detect {|elem| elem.msgid == msgid}
129
+ if t
130
+ if occurrences
131
+ assert_equal occurrences.sort, t.occurrences.sort, 'Translation target occurrences do not match.'
132
+ end
133
+ yield t if block_given?
134
+ else
135
+ flunk "Expected a translation target with id '#{msgid}'. Not found."
136
+ end
137
+ end
138
+
139
+ def assert_plural_target(msgid, plural, occurrences = nil)
140
+ assert_target msgid, occurrences do |t|
141
+ assert_equal plural, t.plural, 'Expected plural form'
142
+ yield t if block_given?
143
+ end
144
+ end
145
+
146
+ def assert_target_in_context(msgid, msgctxt, occurrences = nil)
147
+ t = @ary.detect {|elem| elem.msgid == msgid && elem.msgctxt == msgctxt}
148
+ if t
149
+ if occurrences
150
+ assert_equal occurrences.sort, t.occurrences.sort, 'Translation target occurrences do not match.'
151
+ end
152
+ yield t if block_given?
153
+ else
154
+ flunk "Expected a translation target with id '#{msgid}' and context '#{msgctxt}'. Not found."
155
+ end
156
+ end
157
+ end
@@ -0,0 +1,20 @@
1
+ require 'testlib/helper.rb'
2
+ require 'gettext'
3
+ require 'gettext/tools/rgettext.rb'
4
+ require 'stringio'
5
+
6
+ class TestPoGeneration < Test::Unit::TestCase
7
+ def test_extracted_comments
8
+ GetText::RGetText.run(
9
+ File.join(File.dirname(__FILE__), 'testlib/gettext.rb'),
10
+ out = StringIO.new)
11
+ res = out.string
12
+
13
+ # Use following to debug the content of the
14
+ # created file: File.open('/tmp/test.po', 'w').write(res)
15
+
16
+ assert_match '#. "Fran\u00e7ois" or (with HTML entities) "Fran&ccedil;ois".', res
17
+ assert_no_match /Ignored/, res, 'Only comments starting with TRANSLATORS should be extracted'
18
+ assert_no_match /TRANSLATORS: This is a proper name/, res, 'The prefix "TRANSLATORS:" should be skipped'
19
+ end
20
+ end
@@ -0,0 +1,65 @@
1
+ require 'testlib/helper.rb'
2
+
3
+ class TestGetTextString < Test::Unit::TestCase
4
+ def test_sprintf
5
+ assert_equal("foo is a number", "%{msg} is a number" % {:msg => "foo"})
6
+ assert_equal("bar is a number", "%s is a number" % ["bar"])
7
+ assert_equal("bar is a number", "%s is a number" % "bar")
8
+ assert_equal("1, test", "%{num}, %{record}" % {:num => 1, :record => "test"})
9
+ assert_equal("test, 1", "%{record}, %{num}" % {:num => 1, :record => "test"})
10
+ assert_equal("1, test", "%d, %s" % [1, "test"])
11
+ assert_equal("test, 1", "%2$s, %1$d" % [1, "test"])
12
+ assert_raise(ArgumentError) { "%-%" % [1] }
13
+ end
14
+
15
+ def test_sprintf_placeholder_include_non_english
16
+ assert_equal("a", "%{foo+foo}" % {"foo+foo".to_sym => "a"})
17
+ assert_equal("a", "%{foo.foo}" % {"foo.foo".to_sym => "a"})
18
+ assert_equal("a }", "%{foo+foo} }" % {"foo+foo".to_sym => "a"})
19
+ assert_equal("a { b }", "%{foo+foo} { %{bar bar-} }" % {"foo+foo".to_sym => "a", "bar bar-".to_sym => "b"})
20
+ end
21
+
22
+ def test_percent
23
+ assert_equal("% 1", "%% %<num>d" % {:num => 1.0})
24
+ assert_equal("%{num} %<num>d", "%%{num} %%<num>d" % {:num => 1})
25
+ end
26
+
27
+ def test_sprintf_percent_in_replacement
28
+ assert_equal("%<not_translated>s", "%{msg}" % { :msg => '%<not_translated>s', :not_translated => 'should not happen' })
29
+ end
30
+
31
+ def test_sprintf_lack_argument
32
+ assert_equal("%{num}, test", "%{num}, %{record}" % {:record => "test"})
33
+ assert_equal("%{record}", "%{record}" % {:num => 1})
34
+ end
35
+
36
+ def test_no_placeholder
37
+ assert_equal("aaa", "aaa" % {:num => 1})
38
+ assert_equal("bbb", "bbb" % [1])
39
+ end
40
+
41
+ def test_sprintf_ruby19_style
42
+ assert_equal("1", "%<num>d" % {:num => 1})
43
+ assert_equal("0b1", "%<num>#b" % {:num => 1})
44
+ assert_equal("foo", "%<msg>s" % {:msg => "foo"})
45
+ assert_equal("1.000000", "%<num>f" % {:num => 1.0})
46
+ assert_equal(" 1", "%<num>3.0f" % {:num => 1.0})
47
+ assert_equal("100.00", "%<num>2.2f" % {:num => 100.0})
48
+ assert_equal("0x64", "%<num>#x" % {:num => 100.0})
49
+ assert_equal("a", "%<foo.foo>s" % {"foo.foo".to_sym => "a"})
50
+ assert_raise(ArgumentError) { "%<num>,d" % {:num => 100} }
51
+ assert_raise(ArgumentError) { "%<num>/d" % {:num => 100} }
52
+ end
53
+
54
+ def test_sprintf_old_style
55
+ assert_equal("foo 1.000000", "%s %f" % ["foo", 1.0])
56
+ end
57
+
58
+ def test_sprintf_mix
59
+ assert_equal("foo 1.000000", "%{name} %<num>f" % {:name => "foo", :num => 1.0})
60
+ assert_equal("%{name} 1.000000", "%{name} %f" % [1.0])
61
+ assert_equal("%{name} 1.000000", "%{name} %f" % [1.0, 2.0])
62
+ end
63
+
64
+
65
+ end
@@ -0,0 +1,37 @@
1
+ require 'testlib/helper.rb'
2
+
3
+ class Foo
4
+ end
5
+
6
+ class TestGetTextBind < Test::Unit::TestCase
7
+ def setup
8
+ GetText.locale = "ja_JP.EUC-JP"
9
+ GetText::TextDomainManager.clear_all_textdomains
10
+ end
11
+
12
+ def test_bindtextdomain
13
+ domain = GetText.bindtextdomain("foo")
14
+ assert_equal domain, GetText::TextDomainManager.create_or_find_textdomain_group(Object).textdomains[0]
15
+ assert_equal domain, GetText::TextDomainManager.textdomain_pool("foo")
16
+ end
17
+
18
+ def test_textdomain
19
+ domain1 = GetText.bindtextdomain("foo")
20
+
21
+ assert_equal domain1, GetText.textdomain("foo")
22
+
23
+ assert_raise(GetText::NoboundTextDomainError) {
24
+ GetText.textdomain_to(Foo, "bar")
25
+ }
26
+ end
27
+
28
+ def test_textdomain_to
29
+ domain1 = GetText.bindtextdomain("foo")
30
+
31
+ assert_equal domain1, GetText.textdomain_to(Foo, "foo")
32
+
33
+ assert_raise(GetText::NoboundTextDomainError) {
34
+ GetText.textdomain_to(Foo, "bar")
35
+ }
36
+ end
37
+ end
@@ -0,0 +1,80 @@
1
+ require 'testlib/helper.rb'
2
+ require 'testlib/multi_textdomain.rb'
3
+
4
+ class TestGetTextMulti < Test::Unit::TestCase
5
+
6
+ def setup
7
+ GetText.locale = "ja"
8
+ end
9
+
10
+ def test_two_domains_in_a_class
11
+
12
+ test = C11.new
13
+ assert_equal("japanese", test.test) # Use test1.po
14
+ assert_equal("JAPANESE", test.test2) # Use test2.po
15
+
16
+ test = C12.new
17
+ assert_equal("japanese", test.test) # Use test1.po
18
+ assert_equal("JAPANESE", test.test2) # Use test2.po
19
+ end
20
+
21
+ def test_inheritance
22
+ # inheritance. only parent has a textdomain and it's methods
23
+ test = C21.new
24
+ assert_equal("japanese", test.test) # Use C11's po(test1.po)
25
+ assert_equal("JAPANESE", test.test2) # Use C11's po(test2.po)
26
+
27
+ test = C22.new
28
+ assert_equal("japanese", test.test) # Use C11's po(test1.po)
29
+ assert_equal("JAPANESE", test.test2) # Use C11's po(test2.po)
30
+ end
31
+
32
+ def test_module_and_sub_modules
33
+ # module
34
+ assert_equal("japanese", M1.test)
35
+
36
+ # sub-module. only an included module has a textdomain and it's methods
37
+ assert_equal("japanese", M1::M1M1.test) # Same method with M1.
38
+ assert_equal("LANGUAGE", M1::M1M1.test2) # No influence from ancestors.
39
+
40
+ # sub-class (class bindtextdomain).
41
+ test = M1::M1C1.new
42
+ assert_equal("japanese", test.test) # Use test1.po
43
+ assert_equal("JAPANESE", test.test2) # Use test2.po
44
+
45
+ # sub-class (instance bindtextdomain).
46
+ test = M1::M1C2.new
47
+ assert_equal("japanese", test.test) # Use test1.po
48
+ assert_equal("JAPANESE", test.test2) # Use test2.po
49
+ end
50
+
51
+ def test_eval
52
+ test = C2.new
53
+ assert_equal("japanese", test.test) # Use test1.po
54
+ end
55
+
56
+ def test_as_class_methods
57
+ test = C3.new
58
+ assert_equal("japanese", test.test) # Use test1.po
59
+ assert_equal("japanese", C3.test) # Use test1.po
60
+ end
61
+
62
+ def test_simple_inheritance
63
+ test = C4.new
64
+ assert_equal("japanese", test.test) # Use C3's test1.po
65
+ assert_equal("japanese", C4.test) # Use C3's test1.po
66
+ assert_equal("JAPANESE", test.test2) # Use C4's test2.po
67
+ assert_equal("no data", test.test3) # No po file.
68
+ end
69
+
70
+ def test_same_msgid_but_different_textdomain
71
+ test1 = C12.new # test1 domain
72
+ test2 = C51.new # test3 domain
73
+ test3 = C52.new # test3 domain but inherited C11.
74
+
75
+ assert_equal("japanese", test1.test) # Use text1 message
76
+ assert_equal("JAPANESE", test2.test) # Use text3 message
77
+ assert_equal("JAPANESE", test3.test) # Use text3 message
78
+ end
79
+
80
+ end
@@ -0,0 +1,42 @@
1
+ require 'testlib/helper.rb'
2
+ include GetText
3
+
4
+ bindtextdomain("test1", :path => "locale")
5
+ module M1
6
+ module_function
7
+ def module_function
8
+ _("language")
9
+ end
10
+ end
11
+
12
+ class C1
13
+ def instance_method
14
+ _("language")
15
+ end
16
+ def self.class_method
17
+ _("language")
18
+ end
19
+ end
20
+
21
+ def toplevel_method
22
+ _("language")
23
+ end
24
+
25
+ class TestGetText < Test::Unit::TestCase
26
+ include GetText
27
+
28
+ def test_toplevel
29
+ GetText.locale = "ja"
30
+ assert_equal("japanese", toplevel_method)
31
+ assert_equal("japanese", M1.module_function)
32
+ assert_equal("japanese", C1.class_method)
33
+ assert_equal("japanese", C1.new.instance_method)
34
+
35
+ GetText::TextDomainManager.clear_all_textdomains
36
+ GetText.bindtextdomain("test1", :path => "locale")
37
+ assert_equal("japanese", toplevel_method)
38
+ assert_equal("japanese", M1.module_function)
39
+ assert_equal("japanese", C1.class_method)
40
+ assert_equal("japanese", C1.new.instance_method)
41
+ end
42
+ end
@@ -0,0 +1,41 @@
1
+ require 'testlib/helper.rb'
2
+ require 'thread'
3
+
4
+ class TestThread < Test::Unit::TestCase
5
+ include GetText
6
+
7
+ bindtextdomain "test1", :path => "locale"
8
+
9
+ def setup
10
+ Locale.init(:driver => :env)
11
+ @mutex = Mutex.new
12
+ end
13
+
14
+ def invoke_thread(tag, language, sleep_time)
15
+ Thread.start do
16
+ @mutex.synchronize {
17
+ Thread.current["language"] = language
18
+ GetText.current_locale = tag
19
+ }
20
+ (1..10).each do |v|
21
+ @mutex.synchronize{
22
+ assert_equal Thread.current["language"], _("language")
23
+ }
24
+ print "."
25
+ $stdout.flush
26
+ sleep sleep_time
27
+ end
28
+ end
29
+ end
30
+
31
+ def test_thread
32
+ th1 = invoke_thread("ja_JP.eucJP", "japanese", 0.4)
33
+ th2 = invoke_thread("fr", "french", 0.3)
34
+ th3 = invoke_thread("en", "language", 0.1)
35
+ th4 = invoke_thread("zh_CN", "language", 0.2) # No translation.
36
+ th1.join
37
+ th2.join
38
+ th3.join
39
+ th4.join
40
+ end
41
+ end
@@ -0,0 +1,29 @@
1
+ require 'testlib/helper.rb'
2
+ require 'gettext/translation_target'
3
+
4
+ # Most functionality of TranslationTarget is thoroughly tested together
5
+ # with the parser and po file generator. Here only tests for some special
6
+ # functionality.
7
+ class TestTranslationTarget < Test::Unit::TestCase
8
+
9
+ def test_context_match
10
+ tt1 = GetText::TranslationTarget.new(:msgctxt)
11
+ tt1.msgid = 'hello'
12
+ tt1.msgctxt = 'world'
13
+ tt2 = GetText::TranslationTarget.new(:normal)
14
+ tt2.msgid = 'hello'
15
+ assert_raise GetText::ParseError do
16
+ tt1.merge tt2
17
+ end
18
+ end
19
+
20
+ def test_attribute_accumulation
21
+ tt = GetText::TranslationTarget.new(:plural)
22
+ tt.set_current_attribute 'long'
23
+ tt.set_current_attribute ' tail'
24
+ tt.advance_to_next_attribute
25
+ tt.set_current_attribute 'long tails'
26
+ assert_equal 'long tail', tt.msgid
27
+ assert_equal 'long tails', tt.plural
28
+ end
29
+ end
@@ -0,0 +1,66 @@
1
+ require 'gettext'
2
+ include GetText
3
+
4
+ class TestRubyParser_N
5
+ bindtextdomain("testN_rubyparser", :path => "locale")
6
+
7
+ def testN_1
8
+ N_("aaa")
9
+ end
10
+
11
+ def testN_2
12
+ N_("aaa\n")
13
+ end
14
+
15
+ def testN_3
16
+ N_("bbb\nccc")
17
+ end
18
+
19
+ def testN_4
20
+ N_("bbb
21
+ ccc
22
+ ddd
23
+ ")
24
+ end
25
+
26
+ def testN_5
27
+ N_("eee")
28
+ end
29
+
30
+ def testN_6
31
+ N_("eee") + "foo" + N_("fff")
32
+ end
33
+
34
+ def testN_7
35
+ N_("ggg"\
36
+ "hhh"\
37
+ "iii")
38
+ end
39
+
40
+ def testN_8
41
+ N_('a"b"c"')
42
+ end
43
+
44
+ def testN_9
45
+ N_("d\"e\"f\"")
46
+ end
47
+
48
+ def testN_10
49
+ N_("jjj") +
50
+ N_("kkk")
51
+ end
52
+
53
+ def testN_11
54
+ N_("lll" + "mmm")
55
+ end
56
+
57
+ def testN_12
58
+ puts N_(msg), "ppp" #Ignored
59
+ end
60
+
61
+ def testN_13
62
+ N_("nnn\n" +
63
+ "ooo")
64
+ end
65
+ end
66
+
@@ -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>