gettext 2.2.1 → 2.3.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (500) hide show
  1. data/COPYING +2 -1
  2. data/README.rdoc +9 -9
  3. data/Rakefile +94 -149
  4. data/bin/rmsgfmt +23 -20
  5. data/bin/rmsginit +29 -0
  6. data/bin/rmsgmerge +22 -20
  7. data/bin/rxgettext +24 -0
  8. data/doc/text/news.md +60 -0
  9. data/gettext.gemspec +7 -4
  10. data/lib/gettext.rb +3 -3
  11. data/lib/gettext/core_ext/string.rb +2 -1
  12. data/lib/gettext/runtime/locale_path.rb +6 -4
  13. data/lib/gettext/runtime/textdomain.rb +14 -8
  14. data/lib/gettext/runtime/textdomain_manager.rb +3 -3
  15. data/lib/gettext/task.rb +203 -0
  16. data/lib/gettext/tools.rb +33 -24
  17. data/lib/gettext/tools/msgfmt.rb +104 -0
  18. data/lib/gettext/tools/msginit.rb +363 -0
  19. data/lib/gettext/tools/msgmerge.rb +510 -0
  20. data/lib/gettext/tools/parser/ruby.rb +12 -17
  21. data/lib/gettext/tools/pomessage.rb +37 -4
  22. data/lib/gettext/tools/poparser.rb +27 -24
  23. data/lib/gettext/tools/xgettext.rb +327 -0
  24. data/lib/gettext/version.rb +2 -2
  25. data/po/bg/rgettext.po +2 -2
  26. data/po/bs/rgettext.po +2 -2
  27. data/po/ca/rgettext.po +2 -2
  28. data/po/cs/rgettext.po +2 -2
  29. data/po/de/gettext.po +668 -0
  30. data/po/de/gettext.po.bak +589 -0
  31. data/po/de/rgettext.po +2 -2
  32. data/po/el/gettext.po +571 -0
  33. data/po/el/rgettext.po +2 -2
  34. data/po/eo/rgettext.po +2 -2
  35. data/po/es/rgettext.po +2 -2
  36. data/po/et/rgettext.po +2 -2
  37. data/po/fr/gettext.po +589 -0
  38. data/po/fr/rgettext.po +2 -2
  39. data/po/gettext.pot +638 -0
  40. data/po/gettext.pot~ +638 -0
  41. data/po/hr/rgettext.po +2 -2
  42. data/po/hu/rgettext.po +2 -2
  43. data/po/it/gettext.po +589 -0
  44. data/po/it/rgettext.po +2 -2
  45. data/po/ja/gettext.po +591 -0
  46. data/po/ja/rgettext.po +112 -69
  47. data/po/ko/rgettext.po +2 -2
  48. data/po/lv/rgettext.po +2 -2
  49. data/po/nb/rgettext.po +2 -2
  50. data/po/nl/rgettext.po +2 -2
  51. data/po/pt_BR/rgettext.po +2 -2
  52. data/po/ru/rgettext.po +2 -2
  53. data/po/sr/rgettext.po +2 -2
  54. data/po/sv/rgettext.po +2 -2
  55. data/po/uk/gettext.po +571 -0
  56. data/po/uk/rgettext.po +2 -2
  57. data/po/vi/rgettext.po +2 -2
  58. data/po/zh/rgettext.po +2 -2
  59. data/po/zh_TW/rgettext.po +2 -2
  60. data/samples/README +2 -4
  61. data/samples/cgi/README +1 -1
  62. data/samples/cgi/cookie.cgi +1 -1
  63. data/samples/cgi/gettext.css +1 -1
  64. data/samples/cgi/helloerb.rhtml +1 -1
  65. data/samples/cgi/hellolib.rb +1 -1
  66. data/samples/cgi/http.rb +2 -2
  67. data/samples/cgi/index.cgi +1 -1
  68. data/samples/cgi/locale/bg/LC_MESSAGES/helloerb1.mo +0 -0
  69. data/samples/cgi/locale/bg/LC_MESSAGES/helloerb2.mo +0 -0
  70. data/samples/cgi/locale/bg/LC_MESSAGES/main.mo +0 -0
  71. data/samples/cgi/locale/bs/LC_MESSAGES/helloerb1.mo +0 -0
  72. data/samples/cgi/locale/bs/LC_MESSAGES/helloerb2.mo +0 -0
  73. data/samples/cgi/locale/bs/LC_MESSAGES/main.mo +0 -0
  74. data/samples/cgi/locale/ca/LC_MESSAGES/helloerb1.mo +0 -0
  75. data/samples/cgi/locale/ca/LC_MESSAGES/helloerb2.mo +0 -0
  76. data/samples/cgi/locale/ca/LC_MESSAGES/main.mo +0 -0
  77. data/samples/cgi/locale/cs/LC_MESSAGES/helloerb1.mo +0 -0
  78. data/samples/cgi/locale/cs/LC_MESSAGES/helloerb2.mo +0 -0
  79. data/samples/cgi/locale/cs/LC_MESSAGES/main.mo +0 -0
  80. data/samples/cgi/locale/de/LC_MESSAGES/helloerb1.mo +0 -0
  81. data/samples/cgi/locale/de/LC_MESSAGES/helloerb2.mo +0 -0
  82. data/samples/cgi/locale/de/LC_MESSAGES/main.mo +0 -0
  83. data/samples/cgi/locale/el/LC_MESSAGES/helloerb1.mo +0 -0
  84. data/samples/cgi/locale/el/LC_MESSAGES/helloerb2.mo +0 -0
  85. data/samples/cgi/locale/el/LC_MESSAGES/main.mo +0 -0
  86. data/samples/cgi/locale/eo/LC_MESSAGES/helloerb1.mo +0 -0
  87. data/samples/cgi/locale/eo/LC_MESSAGES/helloerb2.mo +0 -0
  88. data/samples/cgi/locale/eo/LC_MESSAGES/main.mo +0 -0
  89. data/samples/cgi/locale/es/LC_MESSAGES/helloerb1.mo +0 -0
  90. data/samples/cgi/locale/es/LC_MESSAGES/helloerb2.mo +0 -0
  91. data/samples/cgi/locale/es/LC_MESSAGES/main.mo +0 -0
  92. data/samples/cgi/locale/fr/LC_MESSAGES/helloerb1.mo +0 -0
  93. data/samples/cgi/locale/fr/LC_MESSAGES/helloerb2.mo +0 -0
  94. data/samples/cgi/locale/fr/LC_MESSAGES/main.mo +0 -0
  95. data/samples/cgi/locale/hr/LC_MESSAGES/helloerb1.mo +0 -0
  96. data/samples/cgi/locale/hr/LC_MESSAGES/helloerb2.mo +0 -0
  97. data/samples/cgi/locale/hr/LC_MESSAGES/main.mo +0 -0
  98. data/samples/cgi/locale/hu/LC_MESSAGES/helloerb1.mo +0 -0
  99. data/samples/cgi/locale/hu/LC_MESSAGES/helloerb2.mo +0 -0
  100. data/samples/cgi/locale/hu/LC_MESSAGES/main.mo +0 -0
  101. data/samples/cgi/locale/it/LC_MESSAGES/helloerb1.mo +0 -0
  102. data/samples/cgi/locale/it/LC_MESSAGES/helloerb2.mo +0 -0
  103. data/samples/cgi/locale/it/LC_MESSAGES/main.mo +0 -0
  104. data/samples/cgi/locale/ja/LC_MESSAGES/helloerb1.mo +0 -0
  105. data/samples/cgi/locale/ja/LC_MESSAGES/helloerb2.mo +0 -0
  106. data/samples/cgi/locale/ja/LC_MESSAGES/main.mo +0 -0
  107. data/samples/cgi/locale/ko/LC_MESSAGES/helloerb1.mo +0 -0
  108. data/samples/cgi/locale/ko/LC_MESSAGES/helloerb2.mo +0 -0
  109. data/samples/cgi/locale/ko/LC_MESSAGES/main.mo +0 -0
  110. data/samples/cgi/locale/lv/LC_MESSAGES/helloerb1.mo +0 -0
  111. data/samples/cgi/locale/lv/LC_MESSAGES/helloerb2.mo +0 -0
  112. data/samples/cgi/locale/lv/LC_MESSAGES/main.mo +0 -0
  113. data/samples/cgi/locale/nb/LC_MESSAGES/helloerb1.mo +0 -0
  114. data/samples/cgi/locale/nb/LC_MESSAGES/helloerb2.mo +0 -0
  115. data/samples/cgi/locale/nb/LC_MESSAGES/main.mo +0 -0
  116. data/samples/cgi/locale/nl/LC_MESSAGES/helloerb1.mo +0 -0
  117. data/samples/cgi/locale/nl/LC_MESSAGES/helloerb2.mo +0 -0
  118. data/samples/cgi/locale/nl/LC_MESSAGES/main.mo +0 -0
  119. data/samples/cgi/locale/pt_BR/LC_MESSAGES/helloerb1.mo +0 -0
  120. data/samples/cgi/locale/pt_BR/LC_MESSAGES/helloerb2.mo +0 -0
  121. data/samples/cgi/locale/pt_BR/LC_MESSAGES/main.mo +0 -0
  122. data/samples/cgi/locale/ru/LC_MESSAGES/helloerb1.mo +0 -0
  123. data/samples/cgi/locale/ru/LC_MESSAGES/helloerb2.mo +0 -0
  124. data/samples/cgi/locale/ru/LC_MESSAGES/main.mo +0 -0
  125. data/samples/cgi/locale/sr/LC_MESSAGES/helloerb1.mo +0 -0
  126. data/samples/cgi/locale/sr/LC_MESSAGES/helloerb2.mo +0 -0
  127. data/samples/cgi/locale/sr/LC_MESSAGES/main.mo +0 -0
  128. data/samples/cgi/locale/uk/LC_MESSAGES/helloerb1.mo +0 -0
  129. data/samples/cgi/locale/uk/LC_MESSAGES/helloerb2.mo +0 -0
  130. data/samples/cgi/locale/uk/LC_MESSAGES/main.mo +0 -0
  131. data/samples/cgi/locale/vi/LC_MESSAGES/helloerb1.mo +0 -0
  132. data/samples/cgi/locale/vi/LC_MESSAGES/helloerb2.mo +0 -0
  133. data/samples/cgi/locale/vi/LC_MESSAGES/main.mo +0 -0
  134. data/samples/cgi/locale/zh/LC_MESSAGES/helloerb1.mo +0 -0
  135. data/samples/cgi/locale/zh/LC_MESSAGES/helloerb2.mo +0 -0
  136. data/samples/cgi/locale/zh/LC_MESSAGES/main.mo +0 -0
  137. data/samples/cgi/locale/zh_TW/LC_MESSAGES/helloerb1.mo +0 -0
  138. data/samples/cgi/locale/zh_TW/LC_MESSAGES/helloerb2.mo +0 -0
  139. data/samples/cgi/locale/zh_TW/LC_MESSAGES/main.mo +0 -0
  140. data/samples/cgi/other.rhtml +1 -1
  141. data/samples/cgi/po/bg/helloerb1.po +4 -4
  142. data/samples/cgi/po/bg/helloerb2.po +4 -4
  143. data/samples/cgi/po/bg/hellolib.po +2 -2
  144. data/samples/cgi/po/bg/main.po +4 -4
  145. data/samples/cgi/po/bs/helloerb1.po +3 -3
  146. data/samples/cgi/po/bs/helloerb2.po +3 -3
  147. data/samples/cgi/po/bs/hellolib.po +2 -2
  148. data/samples/cgi/po/bs/main.po +3 -3
  149. data/samples/cgi/po/ca/helloerb1.po +4 -4
  150. data/samples/cgi/po/ca/helloerb2.po +4 -4
  151. data/samples/cgi/po/ca/hellolib.po +2 -2
  152. data/samples/cgi/po/ca/main.po +4 -4
  153. data/samples/cgi/po/cs/helloerb1.po +4 -4
  154. data/samples/cgi/po/cs/helloerb2.po +4 -4
  155. data/samples/cgi/po/cs/hellolib.po +2 -2
  156. data/samples/cgi/po/cs/main.po +4 -4
  157. data/samples/cgi/po/de/helloerb1.po +3 -3
  158. data/samples/cgi/po/de/helloerb2.po +3 -3
  159. data/samples/cgi/po/de/hellolib.po +2 -2
  160. data/samples/cgi/po/de/main.po +3 -3
  161. data/samples/cgi/po/el/helloerb1.po +3 -3
  162. data/samples/cgi/po/el/helloerb2.po +3 -3
  163. data/samples/cgi/po/el/hellolib.po +2 -2
  164. data/samples/cgi/po/el/main.po +3 -3
  165. data/samples/cgi/po/eo/helloerb1.po +3 -3
  166. data/samples/cgi/po/eo/helloerb2.po +3 -3
  167. data/samples/cgi/po/eo/hellolib.po +2 -2
  168. data/samples/cgi/po/eo/main.po +3 -3
  169. data/samples/cgi/po/es/helloerb1.po +4 -4
  170. data/samples/cgi/po/es/helloerb2.po +4 -4
  171. data/samples/cgi/po/es/hellolib.po +2 -2
  172. data/samples/cgi/po/es/main.po +4 -4
  173. data/samples/cgi/po/fr/helloerb1.po +4 -4
  174. data/samples/cgi/po/fr/helloerb2.po +4 -4
  175. data/samples/cgi/po/fr/hellolib.po +2 -2
  176. data/samples/cgi/po/fr/main.po +4 -4
  177. data/samples/cgi/po/hr/helloerb1.po +3 -3
  178. data/samples/cgi/po/hr/helloerb2.po +3 -3
  179. data/samples/cgi/po/hr/hellolib.po +2 -2
  180. data/samples/cgi/po/hr/main.po +3 -3
  181. data/samples/cgi/po/hu/helloerb1.po +4 -4
  182. data/samples/cgi/po/hu/helloerb2.po +4 -4
  183. data/samples/cgi/po/hu/hellolib.po +2 -2
  184. data/samples/cgi/po/hu/main.po +4 -4
  185. data/samples/cgi/po/it/helloerb1.po +3 -3
  186. data/samples/cgi/po/it/helloerb2.po +3 -3
  187. data/samples/cgi/po/it/hellolib.po +2 -2
  188. data/samples/cgi/po/it/main.po +3 -3
  189. data/samples/cgi/po/ja/helloerb1.po +4 -4
  190. data/samples/cgi/po/ja/helloerb2.po +4 -4
  191. data/samples/cgi/po/ja/hellolib.po +2 -2
  192. data/samples/cgi/po/ja/main.po +3 -3
  193. data/samples/cgi/po/ko/helloerb1.po +3 -3
  194. data/samples/cgi/po/ko/helloerb2.po +3 -3
  195. data/samples/cgi/po/ko/hellolib.po +2 -2
  196. data/samples/cgi/po/ko/main.po +3 -3
  197. data/samples/cgi/po/lv/helloerb1.po +4 -4
  198. data/samples/cgi/po/lv/helloerb2.po +4 -4
  199. data/samples/cgi/po/lv/hellolib.po +2 -2
  200. data/samples/cgi/po/lv/main.po +4 -4
  201. data/samples/cgi/po/nb/helloerb1.po +3 -3
  202. data/samples/cgi/po/nb/helloerb2.po +3 -3
  203. data/samples/cgi/po/nb/hellolib.po +2 -2
  204. data/samples/cgi/po/nb/main.po +3 -3
  205. data/samples/cgi/po/nl/helloerb1.po +4 -4
  206. data/samples/cgi/po/nl/helloerb2.po +4 -4
  207. data/samples/cgi/po/nl/hellolib.po +2 -2
  208. data/samples/cgi/po/nl/main.po +4 -4
  209. data/samples/cgi/po/pt_BR/helloerb1.po +4 -4
  210. data/samples/cgi/po/pt_BR/helloerb2.po +4 -4
  211. data/samples/cgi/po/pt_BR/hellolib.po +2 -2
  212. data/samples/cgi/po/pt_BR/main.po +4 -4
  213. data/samples/cgi/po/ru/helloerb1.po +4 -4
  214. data/samples/cgi/po/ru/helloerb2.po +4 -4
  215. data/samples/cgi/po/ru/hellolib.po +2 -2
  216. data/samples/cgi/po/ru/main.po +4 -4
  217. data/samples/cgi/po/sr/helloerb1.po +4 -4
  218. data/samples/cgi/po/sr/helloerb2.po +4 -4
  219. data/samples/cgi/po/sr/hellolib.po +2 -2
  220. data/samples/cgi/po/sr/main.po +4 -4
  221. data/samples/cgi/po/uk/helloerb1.po +4 -4
  222. data/samples/cgi/po/uk/helloerb2.po +4 -4
  223. data/samples/cgi/po/uk/hellolib.po +2 -2
  224. data/samples/cgi/po/uk/main.po +4 -4
  225. data/samples/cgi/po/vi/helloerb1.po +3 -3
  226. data/samples/cgi/po/vi/helloerb2.po +3 -3
  227. data/samples/cgi/po/vi/hellolib.po +2 -2
  228. data/samples/cgi/po/vi/main.po +3 -3
  229. data/samples/cgi/po/zh/helloerb1.po +4 -4
  230. data/samples/cgi/po/zh/helloerb2.po +4 -4
  231. data/samples/cgi/po/zh/hellolib.po +2 -2
  232. data/samples/cgi/po/zh/main.po +4 -4
  233. data/samples/cgi/po/zh_TW/helloerb1.po +4 -4
  234. data/samples/cgi/po/zh_TW/helloerb2.po +4 -4
  235. data/samples/cgi/po/zh_TW/hellolib.po +2 -2
  236. data/samples/cgi/po/zh_TW/main.po +4 -4
  237. data/samples/hello.rb +1 -1
  238. data/samples/hello2.rb +1 -1
  239. data/samples/hello_glade2.rb +1 -1
  240. data/samples/hello_gtk2.rb +2 -2
  241. data/samples/hello_noop.rb +1 -1
  242. data/samples/hello_plural.rb +1 -1
  243. data/samples/hello_tk.rb +1 -1
  244. data/samples/locale/bg/LC_MESSAGES/hello_gtk2.mo +0 -0
  245. data/samples/locale/bs/LC_MESSAGES/hello_gtk2.mo +0 -0
  246. data/samples/locale/ca/LC_MESSAGES/hello_gtk2.mo +0 -0
  247. data/samples/locale/cs/LC_MESSAGES/hello_gtk2.mo +0 -0
  248. data/samples/locale/de/LC_MESSAGES/hello_gtk2.mo +0 -0
  249. data/samples/locale/el/LC_MESSAGES/hello_gtk2.mo +0 -0
  250. data/samples/locale/eo/LC_MESSAGES/hello_gtk2.mo +0 -0
  251. data/samples/locale/es/LC_MESSAGES/hello_gtk2.mo +0 -0
  252. data/samples/locale/fr/LC_MESSAGES/hello_gtk2.mo +0 -0
  253. data/samples/locale/hr/LC_MESSAGES/hello_gtk2.mo +0 -0
  254. data/samples/locale/hu/LC_MESSAGES/hello_gtk2.mo +0 -0
  255. data/samples/locale/it/LC_MESSAGES/hello_gtk2.mo +0 -0
  256. data/samples/locale/ja/LC_MESSAGES/hello_gtk2.mo +0 -0
  257. data/samples/locale/ko/LC_MESSAGES/hello_gtk2.mo +0 -0
  258. data/samples/locale/lv/LC_MESSAGES/hello_gtk2.mo +0 -0
  259. data/samples/locale/nb/LC_MESSAGES/hello_gtk2.mo +0 -0
  260. data/samples/locale/nl/LC_MESSAGES/hello_gtk2.mo +0 -0
  261. data/samples/locale/pt_BR/LC_MESSAGES/hello_gtk2.mo +0 -0
  262. data/samples/locale/ru/LC_MESSAGES/hello_gtk2.mo +0 -0
  263. data/samples/locale/sr/LC_MESSAGES/hello_gtk2.mo +0 -0
  264. data/samples/locale/sv/LC_MESSAGES/hello_gtk2.mo +0 -0
  265. data/samples/locale/uk/LC_MESSAGES/hello_gtk2.mo +0 -0
  266. data/samples/locale/vi/LC_MESSAGES/hello_gtk2.mo +0 -0
  267. data/samples/locale/zh/LC_MESSAGES/hello_gtk2.mo +0 -0
  268. data/samples/locale/zh_TW/LC_MESSAGES/hello_gtk2.mo +0 -0
  269. data/samples/po/bg/hello.po +2 -2
  270. data/samples/po/bg/hello2.po +1 -1
  271. data/samples/po/bg/hello_glade2.po +1 -1
  272. data/samples/po/bg/{hello_gtk.po → hello_gtk2.po} +1 -1
  273. data/samples/po/bg/hello_noop.po +1 -1
  274. data/samples/po/bg/hello_plural.po +1 -1
  275. data/samples/po/bg/hello_tk.po +1 -1
  276. data/samples/po/bs/hello.po +2 -2
  277. data/samples/po/bs/hello2.po +1 -1
  278. data/samples/po/bs/hello_glade2.po +1 -1
  279. data/samples/po/bs/{hello_gtk.po → hello_gtk2.po} +1 -1
  280. data/samples/po/bs/hello_noop.po +1 -1
  281. data/samples/po/bs/hello_plural.po +1 -1
  282. data/samples/po/bs/hello_tk.po +1 -1
  283. data/samples/po/ca/hello.po +2 -2
  284. data/samples/po/ca/hello2.po +1 -1
  285. data/samples/po/ca/hello_glade2.po +1 -1
  286. data/samples/po/ca/{hello_gtk.po → hello_gtk2.po} +1 -1
  287. data/samples/po/ca/hello_noop.po +1 -1
  288. data/samples/po/ca/hello_plural.po +1 -1
  289. data/samples/po/ca/hello_tk.po +1 -1
  290. data/samples/po/cs/hello.po +1 -1
  291. data/samples/po/cs/hello_glade2.po +1 -1
  292. data/samples/po/cs/{hello_gtk.po → hello_gtk2.po} +0 -0
  293. data/samples/po/cs/hello_plural.po +1 -1
  294. data/samples/po/de/hello.po +1 -1
  295. data/samples/po/de/{hello_gtk.po → hello_gtk2.po} +0 -0
  296. data/samples/po/de/hello_plural.po +1 -1
  297. data/samples/po/el/hello.po +2 -2
  298. data/samples/po/el/hello2.po +1 -1
  299. data/samples/po/el/hello_glade2.po +1 -1
  300. data/samples/po/el/{hello_gtk.po → hello_gtk2.po} +1 -1
  301. data/samples/po/el/hello_noop.po +1 -1
  302. data/samples/po/el/hello_plural.po +1 -1
  303. data/samples/po/el/hello_tk.po +1 -1
  304. data/samples/po/eo/hello.po +2 -2
  305. data/samples/po/eo/hello2.po +1 -1
  306. data/samples/po/eo/hello_glade2.po +1 -1
  307. data/samples/po/eo/{hello_gtk.po → hello_gtk2.po} +1 -1
  308. data/samples/po/eo/hello_noop.po +1 -1
  309. data/samples/po/eo/hello_plural.po +1 -1
  310. data/samples/po/eo/hello_tk.po +1 -1
  311. data/samples/po/es/{hello_gtk.po → hello_gtk2.po} +0 -0
  312. data/samples/po/fr/{hello_gtk.po → hello_gtk2.po} +0 -0
  313. data/samples/po/hello.pot +13 -13
  314. data/samples/po/hello2.pot +17 -17
  315. data/samples/po/hello_glade2.pot +12 -13
  316. data/{test/pot/backslash.pot → samples/po/hello_gtk2.pot} +8 -6
  317. data/samples/po/hello_noop.pot +13 -13
  318. data/samples/po/hello_plural.pot +14 -15
  319. data/samples/po/hello_tk.pot +9 -10
  320. data/samples/po/hr/hello.po +2 -2
  321. data/samples/po/hr/hello2.po +1 -1
  322. data/samples/po/hr/hello_glade2.po +1 -1
  323. data/samples/po/hr/{hello_gtk.po → hello_gtk2.po} +1 -1
  324. data/samples/po/hr/hello_noop.po +1 -1
  325. data/samples/po/hr/hello_plural.po +1 -1
  326. data/samples/po/hr/hello_tk.po +1 -1
  327. data/samples/po/hu/hello.po +2 -2
  328. data/samples/po/hu/hello2.po +1 -1
  329. data/samples/po/hu/hello_glade2.po +1 -1
  330. data/samples/po/hu/{hello_gtk.po → hello_gtk2.po} +1 -1
  331. data/samples/po/hu/hello_noop.po +1 -1
  332. data/samples/po/hu/hello_plural.po +1 -1
  333. data/samples/po/hu/hello_tk.po +1 -1
  334. data/samples/po/it/hello.po +1 -1
  335. data/samples/po/it/{hello_gtk.po → hello_gtk2.po} +0 -0
  336. data/samples/po/ja/{hello_gtk.po → hello_gtk2.po} +0 -0
  337. data/samples/po/ko/{hello_gtk.po → hello_gtk2.po} +0 -0
  338. data/samples/po/ko/hello_plural.po +1 -1
  339. data/samples/po/lv/hello.po +2 -2
  340. data/samples/po/lv/hello2.po +1 -1
  341. data/samples/po/lv/hello_glade2.po +1 -1
  342. data/samples/po/lv/{hello_gtk.po → hello_gtk2.po} +1 -1
  343. data/samples/po/lv/hello_noop.po +1 -1
  344. data/samples/po/lv/hello_plural.po +1 -1
  345. data/samples/po/lv/hello_tk.po +1 -1
  346. data/samples/po/nb/hello.po +2 -2
  347. data/samples/po/nb/hello2.po +1 -1
  348. data/samples/po/nb/hello_glade2.po +1 -1
  349. data/samples/po/nb/{hello_gtk.po → hello_gtk2.po} +1 -1
  350. data/samples/po/nb/hello_noop.po +1 -1
  351. data/samples/po/nb/hello_plural.po +1 -1
  352. data/samples/po/nb/hello_tk.po +1 -1
  353. data/samples/po/nl/hello.po +2 -2
  354. data/samples/po/nl/hello2.po +1 -1
  355. data/samples/po/nl/hello_glade2.po +1 -1
  356. data/samples/po/nl/{hello_gtk.po → hello_gtk2.po} +1 -1
  357. data/samples/po/nl/hello_noop.po +1 -1
  358. data/samples/po/nl/hello_plural.po +1 -1
  359. data/samples/po/nl/hello_tk.po +1 -1
  360. data/samples/po/pt_BR/{hello_gtk.po → hello_gtk2.po} +0 -0
  361. data/samples/po/ru/hello.po +2 -2
  362. data/samples/po/ru/hello2.po +1 -1
  363. data/samples/po/ru/hello_glade2.po +1 -1
  364. data/samples/po/ru/{hello_gtk.po → hello_gtk2.po} +1 -1
  365. data/samples/po/ru/hello_noop.po +1 -1
  366. data/samples/po/ru/hello_plural.po +1 -1
  367. data/samples/po/ru/hello_tk.po +1 -1
  368. data/samples/po/sr/hello.po +2 -2
  369. data/samples/po/sr/hello2.po +1 -1
  370. data/samples/po/sr/hello_glade2.po +1 -1
  371. data/samples/po/sr/{hello_gtk.po → hello_gtk2.po} +1 -1
  372. data/samples/po/sr/hello_noop.po +1 -1
  373. data/samples/po/sr/hello_plural.po +1 -1
  374. data/samples/po/sr/hello_tk.po +1 -1
  375. data/samples/po/sv/{hello_gtk.po → hello_gtk2.po} +0 -0
  376. data/samples/po/uk/hello.po +2 -2
  377. data/samples/po/uk/hello2.po +1 -1
  378. data/samples/po/uk/hello_glade2.po +1 -1
  379. data/samples/po/uk/{hello_gtk.po → hello_gtk2.po} +1 -1
  380. data/samples/po/uk/hello_noop.po +1 -1
  381. data/samples/po/uk/hello_plural.po +1 -1
  382. data/samples/po/uk/hello_tk.po +1 -1
  383. data/samples/po/vi/hello.po +2 -2
  384. data/samples/po/vi/hello2.po +1 -1
  385. data/samples/po/vi/hello_glade2.po +1 -1
  386. data/samples/po/vi/{hello_gtk.po → hello_gtk2.po} +1 -1
  387. data/samples/po/vi/hello_noop.po +1 -1
  388. data/samples/po/vi/hello_plural.po +1 -1
  389. data/samples/po/vi/hello_tk.po +1 -1
  390. data/samples/po/zh/hello.po +2 -2
  391. data/samples/po/zh/hello2.po +1 -1
  392. data/samples/po/zh/hello_glade2.po +1 -1
  393. data/samples/po/zh/{hello_gtk.po → hello_gtk2.po} +1 -1
  394. data/samples/po/zh/hello_noop.po +1 -1
  395. data/samples/po/zh/hello_plural.po +1 -1
  396. data/samples/po/zh/hello_tk.po +1 -1
  397. data/samples/po/zh_TW/hello.po +2 -2
  398. data/samples/po/zh_TW/hello2.po +1 -1
  399. data/samples/po/zh_TW/hello_glade2.po +1 -1
  400. data/samples/po/zh_TW/{hello_gtk.po → hello_gtk2.po} +1 -1
  401. data/samples/po/zh_TW/hello_noop.po +1 -1
  402. data/samples/po/zh_TW/hello_plural.po +1 -1
  403. data/samples/po/zh_TW/hello_tk.po +1 -1
  404. data/src/poparser.ry +18 -14
  405. data/test/{testlib → fixtures}/N_.rb +0 -0
  406. data/test/{testlib/gettext.rb → fixtures/_.rb} +27 -1
  407. data/test/fixtures/_/one_line.rb +32 -0
  408. data/test/fixtures/backslash.rb +29 -0
  409. data/test/{testlib → fixtures}/erb.rhtml +0 -0
  410. data/test/{testlib → fixtures}/erb.rxml +0 -0
  411. data/test/{testlib → fixtures}/gladeparser.glade +0 -0
  412. data/test/{testlib → fixtures}/multi_textdomain.rb +0 -0
  413. data/test/{testlib/ngettext.rb → fixtures/n_.rb} +20 -1
  414. data/test/{testlib → fixtures}/non_ascii.rb +0 -0
  415. data/test/fixtures/np_.rb +51 -0
  416. data/test/{testlib/nsgettext.rb → fixtures/ns_.rb} +20 -2
  417. data/test/fixtures/ns_/custom.rb +32 -0
  418. data/test/fixtures/p_.rb +57 -0
  419. data/test/fixtures/s_.rb +66 -0
  420. data/test/fixtures/s_/custom.rb +32 -0
  421. data/test/{testlib → fixtures}/simple.rb +0 -0
  422. data/test/gettext-test-utils.rb +44 -0
  423. data/test/locale/ja/LC_MESSAGES/_.mo +0 -0
  424. data/test/locale/ja/LC_MESSAGES/backslash.mo +0 -0
  425. data/test/locale/ja/LC_MESSAGES/np_.mo +0 -0
  426. data/test/locale/ja/LC_MESSAGES/ns_.mo +0 -0
  427. data/test/locale/ja/LC_MESSAGES/p_.mo +0 -0
  428. data/test/locale/ja/LC_MESSAGES/s_.mo +0 -0
  429. data/test/parser/test_ruby.rb +121 -0
  430. data/test/po/_.pot +109 -0
  431. data/test/{pot/sgettext.pot → po/backslash.pot} +10 -4
  432. data/test/po/ja/_.po +114 -0
  433. data/test/po/ja/backslash.po +3 -3
  434. data/test/po/ja/non_ascii.po +1 -1
  435. data/test/po/ja/{npgettext.po → np_.po} +6 -6
  436. data/test/po/ja/{nsgettext.po → ns_.po} +16 -10
  437. data/test/po/ja/{pgettext.po → p_.po} +5 -5
  438. data/test/po/ja/{sgettext.po → s_.po} +0 -0
  439. data/test/{pot → po}/non_ascii.pot +7 -5
  440. data/test/{pot/npgettext.pot → po/np_.pot} +10 -9
  441. data/test/{pot/nsgettext.pot → po/ns_.pot} +20 -12
  442. data/test/{pot/pgettext.pot → po/p_.pot} +12 -10
  443. data/test/po/s_.pot +55 -0
  444. data/test/run-test.rb +5 -0
  445. data/test/test_class_info.rb +0 -1
  446. data/test/test_gettext.rb +49 -12
  447. data/test/test_locale_path.rb +1 -4
  448. data/test/test_mofile.rb +0 -1
  449. data/test/test_parser.rb +119 -88
  450. data/test/test_po_generation.rb +32 -9
  451. data/test/{test_pomessage.rb → test_po_message.rb} +18 -1
  452. data/test/test_po_parser.rb +117 -0
  453. data/test/test_string.rb +0 -2
  454. data/test/test_textdomain_bind.rb +0 -2
  455. data/test/test_textdomain_multi.rb +1 -2
  456. data/test/test_textdomain_toplevel.rb +0 -1
  457. data/test/test_thread.rb +0 -1
  458. data/test/tools/test_msginit.rb +351 -0
  459. data/test/tools/test_msgmerge.rb +202 -0
  460. data/test/tools/test_tools.rb +0 -2
  461. data/test/tools/test_xgettext.rb +154 -0
  462. metadata +822 -753
  463. data/bin/rgettext +0 -23
  464. data/data/locale/bg/LC_MESSAGES/rgettext.mo +0 -0
  465. data/data/locale/bs/LC_MESSAGES/rgettext.mo +0 -0
  466. data/data/locale/ca/LC_MESSAGES/rgettext.mo +0 -0
  467. data/data/locale/cs/LC_MESSAGES/rgettext.mo +0 -0
  468. data/data/locale/de/LC_MESSAGES/rgettext.mo +0 -0
  469. data/data/locale/el/LC_MESSAGES/rgettext.mo +0 -0
  470. data/data/locale/eo/LC_MESSAGES/rgettext.mo +0 -0
  471. data/data/locale/es/LC_MESSAGES/rgettext.mo +0 -0
  472. data/data/locale/et/LC_MESSAGES/rgettext.mo +0 -0
  473. data/data/locale/fr/LC_MESSAGES/rgettext.mo +0 -0
  474. data/data/locale/hr/LC_MESSAGES/rgettext.mo +0 -0
  475. data/data/locale/hu/LC_MESSAGES/rgettext.mo +0 -0
  476. data/data/locale/it/LC_MESSAGES/rgettext.mo +0 -0
  477. data/data/locale/ja/LC_MESSAGES/rgettext.mo +0 -0
  478. data/data/locale/ko/LC_MESSAGES/rgettext.mo +0 -0
  479. data/data/locale/lv/LC_MESSAGES/rgettext.mo +0 -0
  480. data/data/locale/nb/LC_MESSAGES/rgettext.mo +0 -0
  481. data/data/locale/nl/LC_MESSAGES/rgettext.mo +0 -0
  482. data/data/locale/pt_BR/LC_MESSAGES/rgettext.mo +0 -0
  483. data/data/locale/ru/LC_MESSAGES/rgettext.mo +0 -0
  484. data/data/locale/sr/LC_MESSAGES/rgettext.mo +0 -0
  485. data/data/locale/sv/LC_MESSAGES/rgettext.mo +0 -0
  486. data/data/locale/uk/LC_MESSAGES/rgettext.mo +0 -0
  487. data/data/locale/vi/LC_MESSAGES/rgettext.mo +0 -0
  488. data/data/locale/zh/LC_MESSAGES/rgettext.mo +0 -0
  489. data/data/locale/zh_TW/LC_MESSAGES/rgettext.mo +0 -0
  490. data/lib/gettext/tools/rgettext.rb +0 -251
  491. data/lib/gettext/tools/rmsgfmt.rb +0 -86
  492. data/lib/gettext/tools/rmsgmerge.rb +0 -500
  493. data/samples/makemo.rb +0 -6
  494. data/samples/po/hello_gtk.pot +0 -23
  495. data/samples/po/test.rb +0 -13
  496. data/test/testlib/backslash.rb +0 -12
  497. data/test/testlib/helper.rb +0 -13
  498. data/test/testlib/npgettext.rb +0 -33
  499. data/test/testlib/pgettext.rb +0 -38
  500. data/test/testlib/sgettext.rb +0 -48
@@ -1,17 +1,40 @@
1
- # encoding: utf-8
1
+ # -*- coding: utf-8 -*-
2
+ #
3
+ # Copyright (C) 2012 Kouhei Sutou <kou@clear-code.com>
4
+ # Copyright (C) 2012 Haruka Yoshihara <yoshihara@clear-code.com>
5
+ # Copyright (C) 2010 masone (Christian Felder) <ema@rh-productions.ch>
6
+ # Copyright (C) 2009 Masao Mutoh
7
+ # Copyright (C) 2009 Vladimir Dobriakov <vladimir@geekq.net>
8
+ #
9
+ # License: Ruby's or LGPL
10
+ #
11
+ # This library is free software: you can redistribute it and/or modify
12
+ # it under the terms of the GNU Lesser General Public License as published by
13
+ # the Free Software Foundation, either version 3 of the License, or
14
+ # (at your option) any later version.
15
+ #
16
+ # This library is distributed in the hope that it will be useful,
17
+ # but WITHOUT ANY WARRANTY; without even the implied warranty of
18
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
19
+ # GNU Lesser General Public License for more details.
20
+ #
21
+ # You should have received a copy of the GNU Lesser General Public License
22
+ # along with this program. If not, see <http://www.gnu.org/licenses/>.
2
23
 
3
- require 'testlib/helper.rb'
4
24
  require 'gettext'
5
- require 'gettext/tools/rgettext.rb'
6
- require 'stringio'
25
+ require 'gettext/tools/xgettext.rb'
7
26
 
8
27
  class TestPoGeneration < Test::Unit::TestCase
9
28
  def test_extracted_comments
10
- GetText::RGetText.run(
11
- File.join(File.dirname(__FILE__), 'testlib/gettext.rb'),
12
- out = StringIO.new)
13
- res = out.string
14
-
29
+ input_file = File.join(File.dirname(__FILE__), 'fixtures/_.rb')
30
+ res = ""
31
+ Dir.mktmpdir do |dir|
32
+ Dir.chdir(dir) do
33
+ out = "comments.pot"
34
+ GetText::Tools::XGetText.run(input_file, "-o", out)
35
+ res = File.read(out)
36
+ end
37
+ end
15
38
  # Use following to debug the content of the
16
39
  # created file: File.open('/tmp/test.po', 'w').write(res)
17
40
 
@@ -1,6 +1,5 @@
1
1
  # encoding: utf-8
2
2
 
3
- require 'testlib/helper.rb'
4
3
  require 'gettext/tools/parser/ruby'
5
4
 
6
5
  # Most functionality of PoMessage is thoroughly tested together
@@ -98,4 +97,22 @@ class TestPoMessage < Test::Unit::TestCase
98
97
  po.sources = ["file1:1", "file2:10"]
99
98
  assert_raise(RuntimeError){ po.to_po_str }
100
99
  end
100
+
101
+ class TestEscape < self
102
+ def setup
103
+ @message = GetText::PoMessage.new(:normal)
104
+ end
105
+
106
+ def test_backslash
107
+ @message.msgid = "You should escape '\\' as '\\\\'."
108
+ assert_equal("You should escape '\\\\' as '\\\\\\\\'.",
109
+ @message.escaped(:msgid))
110
+ end
111
+
112
+ def test_new_line
113
+ @message.msgid = "First\nSecond\nThird"
114
+ assert_equal("First\\nSecond\\nThird",
115
+ @message.escaped(:msgid))
116
+ end
117
+ end
101
118
  end
@@ -0,0 +1,117 @@
1
+ # -*- coding: utf-8 -*-
2
+ #
3
+ # Copyright (C) 2012 Kouhei Sutou <kou@clear-code.com>
4
+ # Copyright (C) 2012 Haruka Yoshihara <yoshihara@clear-code.com>
5
+ #
6
+ # License: Ruby's or LGPL
7
+ #
8
+ # This library is free software: you can redistribute it and/or modify
9
+ # it under the terms of the GNU Lesser General Public License as published by
10
+ # the Free Software Foundation, either version 3 of the License, or
11
+ # (at your option) any later version.
12
+ #
13
+ # This library is distributed in the hope that it will be useful,
14
+ # but WITHOUT ANY WARRANTY; without even the implied warranty of
15
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16
+ # GNU Lesser General Public License for more details.
17
+ #
18
+ # You should have received a copy of the GNU Lesser General Public License
19
+ # along with this program. If not, see <http://www.gnu.org/licenses/>.
20
+
21
+ require "gettext/tools/poparser"
22
+
23
+ class TestPoParser < Test::Unit::TestCase
24
+ def test_msgstr_not_existing
25
+ po_file = create_po_file(<<-EOP)
26
+ msgid "Hello"
27
+ msgstr ""
28
+ EOP
29
+ messages = parse_po_file(po_file)
30
+
31
+ assert_equal("", messages["Hello"])
32
+ end
33
+
34
+ private
35
+ def create_po_file(content)
36
+ po_file = Tempfile.new("hello.po")
37
+ po_file.print(content)
38
+ po_file.close
39
+ po_file
40
+ end
41
+
42
+ def parse_po_file(po_file)
43
+ parser = GetText::PoParser.new
44
+ parser.parse_file(po_file.path, MoFile.new)
45
+ end
46
+
47
+ class FuzzyTest < self
48
+ def setup
49
+ @po = <<-EOP
50
+ #, fuzzy
51
+ msgid "Hello"
52
+ msgstr "Bonjour"
53
+ EOP
54
+ @po_file = Tempfile.new("hello.po")
55
+ @po_file.print(@po)
56
+ @po_file.close
57
+ end
58
+
59
+ class IgnoreTest < self
60
+ def test_report_warning
61
+ mock($stderr).print("Warning: fuzzy message was ignored.\n")
62
+ mock($stderr).print(" #{@po_file.path}: msgid 'Hello'\n")
63
+ messages = parse do |parser|
64
+ parser.ignore_fuzzy = true
65
+ parser.report_warning = true
66
+ end
67
+ assert_nil(messages["Hello"])
68
+ end
69
+
70
+ def test_not_report_warning
71
+ dont_allow($stderr).print("Warning: fuzzy message was ignored.\n")
72
+ dont_allow($stderr).print(" #{@po_file.path}: msgid 'Hello'\n")
73
+ messages = parse do |parser|
74
+ parser.ignore_fuzzy = true
75
+ parser.report_warning = false
76
+ end
77
+ assert_nil(messages["Hello"])
78
+ end
79
+ end
80
+
81
+ class NotIgnore < self
82
+ def test_report_warning
83
+ mock($stderr).print("Warning: fuzzy message was used.\n")
84
+ mock($stderr).print(" #{@po_file.path}: msgid 'Hello'\n")
85
+ messages = parse do |parser|
86
+ parser.ignore_fuzzy = false
87
+ parser.report_warning = true
88
+ end
89
+ assert_equal("Bonjour", messages["Hello"])
90
+ end
91
+
92
+ def test_not_report_warning
93
+ dont_allow($stderr).print("Warning: fuzzy message was used.\n")
94
+ dont_allow($stderr).print(" #{@po_file.path}: msgid 'Hello'\n")
95
+ messages = parse do |parser|
96
+ parser.ignore_fuzzy = false
97
+ parser.report_warning = false
98
+ end
99
+ assert_equal("Bonjour", messages["Hello"])
100
+ end
101
+ end
102
+
103
+ private
104
+ def parse
105
+ parser = GetText::PoParser.new
106
+ class << parser
107
+ def _(message_id)
108
+ message_id
109
+ end
110
+ end
111
+ messages = MoFile.new
112
+ yield parser
113
+ parser.parse_file(@po_file.path, messages)
114
+ messages
115
+ end
116
+ end
117
+ end
data/test/test_string.rb CHANGED
@@ -1,7 +1,5 @@
1
1
  # encoding: utf-8
2
2
 
3
- require 'testlib/helper.rb'
4
-
5
3
  class TestGetTextString < Test::Unit::TestCase
6
4
  class TestFormat < self
7
5
  def test_basic
@@ -1,7 +1,5 @@
1
1
  # encoding: utf-8
2
2
 
3
- require 'testlib/helper.rb'
4
-
5
3
  class Foo
6
4
  end
7
5
 
@@ -1,7 +1,6 @@
1
1
  # encoding: utf-8
2
2
 
3
- require 'testlib/helper.rb'
4
- require 'testlib/multi_textdomain.rb'
3
+ require 'fixtures/multi_textdomain.rb'
5
4
 
6
5
  class TestGetTextMulti < Test::Unit::TestCase
7
6
  include MultiTextDomain
@@ -1,6 +1,5 @@
1
1
  # encoding: utf-8
2
2
 
3
- require 'testlib/helper.rb'
4
3
  include GetText
5
4
 
6
5
  bindtextdomain("test1", :path => "locale")
data/test/test_thread.rb CHANGED
@@ -1,6 +1,5 @@
1
1
  # encoding: utf-8
2
2
 
3
- require 'testlib/helper.rb'
4
3
  require 'thread'
5
4
 
6
5
  class TestThread < Test::Unit::TestCase
@@ -0,0 +1,351 @@
1
+ # -*- coding: utf-8 -*-
2
+ #
3
+ # Copyright (C) 2012 Haruka Yoshihara <yoshihara@clear-code.com>
4
+ # Copyright (C) 2012 Kouhei Sutou <kou@clear-code.com>
5
+ #
6
+ # License: Ruby's or LGPL
7
+ #
8
+ # This library is free software: you can redistribute it and/or modify
9
+ # it under the terms of the GNU Lesser General Public License as published by
10
+ # the Free Software Foundation, either version 3 of the License, or
11
+ # (at your option) any later version.
12
+ #
13
+ # This library is distributed in the hope that it will be useful,
14
+ # but WITHOUT ANY WARRANTY; without even the implied warranty of
15
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16
+ # GNU Lesser General Public License for more details.
17
+ #
18
+ # You should have received a copy of the GNU Lesser General Public License
19
+ # along with this program. If not, see <http://www.gnu.org/licenses/>.
20
+
21
+ require "gettext/tools/msginit"
22
+
23
+ class TestToolsMsgInit < Test::Unit::TestCase
24
+ def setup
25
+ @msginit = GetText::Tools::MsgInit.new
26
+ stub(@msginit).read_translator_full_name {translator_full_name}
27
+ stub(@msginit).read_translator_mail {translator_mail}
28
+
29
+ Locale.current = "ja_JP.UTF-8"
30
+ @pot_create_date = "2012-08-24 11:35+0900"
31
+ @po_revision_date = Time.now.strftime("%Y-%m-%d %H:%M%z")
32
+ end
33
+
34
+ def test_all_options
35
+ Dir.mktmpdir do |dir|
36
+ pot_file_path = File.join(dir, "test.pot")
37
+ create_pot_file(pot_file_path)
38
+ po_file_path = File.join(dir, "test.po")
39
+ locale = "en"
40
+ language = locale
41
+
42
+ @msginit.run("--input", pot_file_path,
43
+ "--output", po_file_path,
44
+ "--locale", locale)
45
+
46
+ actual_po_header = normalize_po_header(po_file_path)
47
+ expected_po_header = po_header(locale, language)
48
+ assert_equal(expected_po_header, actual_po_header)
49
+ end
50
+ end
51
+
52
+ def test_locale_including_language
53
+ Dir.mktmpdir do |dir|
54
+ Dir.chdir(dir) do
55
+ create_pot_file("test.pot")
56
+ locale = "en"
57
+ language = locale
58
+ po_file_path = "#{locale}.po"
59
+
60
+ @msginit.run("--locale", locale)
61
+
62
+ actual_po_header = normalize_po_header(po_file_path)
63
+ expected_po_header = po_header(locale, language)
64
+ assert_equal(expected_po_header, actual_po_header)
65
+ end
66
+ end
67
+ end
68
+
69
+ def test_locale_including_language_and_region
70
+ Dir.mktmpdir do |dir|
71
+ Dir.chdir(dir) do
72
+ create_pot_file("test.pot")
73
+ locale = "en_US"
74
+ language = "en"
75
+ po_file_path = "#{locale}.po"
76
+
77
+ @msginit.run("--locale", locale)
78
+
79
+ actual_po_header = normalize_po_header(po_file_path)
80
+ expected_po_header = po_header(locale, language)
81
+ assert_equal(expected_po_header, actual_po_header)
82
+ end
83
+ end
84
+ end
85
+
86
+ def test_locale_including_language_and_region_with_charset
87
+ Dir.mktmpdir do |dir|
88
+ Dir.chdir(dir) do
89
+ create_pot_file("test.pot")
90
+ locale = "en_US"
91
+ language = "en"
92
+ charset = "UTF-8"
93
+ po_file_path = "en_US.po"
94
+
95
+ @msginit.run("--locale", "#{locale}.#{charset}")
96
+
97
+ actual_po_header = normalize_po_header(po_file_path)
98
+ expected_po_header = po_header(locale, language)
99
+ assert_equal(expected_po_header, actual_po_header)
100
+ end
101
+ end
102
+ end
103
+
104
+ def test_pot_file_and_po_file
105
+ Dir.mktmpdir do |dir|
106
+ pot_file_path = File.join(dir, "test.pot")
107
+ create_pot_file(pot_file_path)
108
+ locale = current_locale
109
+ language = current_language
110
+ po_file_path = File.join(dir, "test.po")
111
+
112
+ @msginit.run("--input", pot_file_path, "--output", po_file_path)
113
+
114
+ actual_po_header = normalize_po_header(po_file_path)
115
+ expected_po_header = po_header(locale, language)
116
+ assert_equal(expected_po_header, actual_po_header)
117
+ end
118
+ end
119
+
120
+ def test_pot_file
121
+ Dir.mktmpdir do |dir|
122
+ Dir.chdir(dir) do
123
+ pot_file_path = "test.pot"
124
+ create_pot_file(pot_file_path)
125
+ locale = current_locale
126
+ language = current_language
127
+ po_file_path = "#{locale}.po"
128
+
129
+ @msginit.run("--input", pot_file_path)
130
+
131
+ actual_po_header = normalize_po_header(po_file_path)
132
+ expected_po_header = po_header(locale, language)
133
+ assert_equal(expected_po_header, actual_po_header)
134
+ end
135
+ end
136
+ end
137
+
138
+ def test_no_options
139
+ Dir.mktmpdir do |dir|
140
+ Dir.chdir(dir) do
141
+ create_pot_file("test.pot")
142
+ locale = current_locale
143
+ language = current_language
144
+ po_file_path = "#{locale}.po"
145
+
146
+ @msginit.run
147
+
148
+ actual_po_header = normalize_po_header(po_file_path)
149
+ expected_po_header = po_header(locale, language)
150
+ assert_equal(expected_po_header, actual_po_header)
151
+ end
152
+ end
153
+ end
154
+
155
+ def test_no_translator
156
+ stub(@msginit).read_translator_full_name {nil}
157
+ stub(@msginit).read_translator_mail {nil}
158
+
159
+ Dir.mktmpdir do |dir|
160
+ Dir.chdir(dir) do
161
+ create_pot_file("test.pot")
162
+ locale = current_locale
163
+ language = current_language
164
+ po_file_path = "#{locale}.po"
165
+
166
+ @msginit.run
167
+
168
+ actual_po_header = normalize_po_header(po_file_path)
169
+ expected_po_header = no_translator_po_header(locale, language)
170
+ assert_equal(expected_po_header, actual_po_header)
171
+ end
172
+ end
173
+ end
174
+
175
+ def test_no_translator_full_name
176
+ stub(@msginit).read_translator_full_name {nil}
177
+
178
+ Dir.mktmpdir do |dir|
179
+ Dir.chdir(dir) do
180
+ create_pot_file("test.pot")
181
+ locale = current_locale
182
+ language = current_language
183
+ po_file_path = "#{locale}.po"
184
+
185
+ @msginit.run
186
+
187
+ actual_po_header = normalize_po_header(po_file_path)
188
+ expected_po_header = no_translator_po_header(locale, language)
189
+ assert_equal(expected_po_header, actual_po_header)
190
+ end
191
+ end
192
+ end
193
+
194
+ def test_no_translator_mail
195
+ stub(@msginit).read_translator_mail {nil}
196
+
197
+ Dir.mktmpdir do |dir|
198
+ Dir.chdir(dir) do
199
+ create_pot_file("test.pot")
200
+ locale = current_locale
201
+ language = current_language
202
+ po_file_path = "#{locale}.po"
203
+
204
+ @msginit.run
205
+
206
+ actual_po_header = normalize_po_header(po_file_path)
207
+ expected_po_header = no_translator_po_header(locale, language)
208
+ assert_equal(expected_po_header, actual_po_header)
209
+ end
210
+ end
211
+ end
212
+
213
+ def test_package_name_specified_in_project_id_version
214
+ Dir.mktmpdir do |dir|
215
+ Dir.chdir(dir) do
216
+ pot_file_name = "test.pot"
217
+ options = {:package_name => "test-package"}
218
+ pot_file = create_pot_file(pot_file_name, options)
219
+ locale = current_locale
220
+ language = current_language
221
+ po_file_path = "#{locale}.po"
222
+
223
+ @msginit.run("--input", pot_file_name)
224
+
225
+ expected_po_header = po_header(locale, language, options)
226
+ actual_po_header = normalize_po_header(po_file_path)
227
+
228
+ assert_equal(expected_po_header, actual_po_header)
229
+ end
230
+ end
231
+ end
232
+
233
+ private
234
+ def current_locale
235
+ Locale.current.to_simple.to_s
236
+ end
237
+
238
+ def current_language
239
+ Locale.current.language
240
+ end
241
+
242
+ def translator_full_name
243
+ "me"
244
+ end
245
+
246
+ def translator_mail
247
+ "me@example.com"
248
+ end
249
+
250
+ def create_pot_file(path, options=nil)
251
+ options ||= {}
252
+ File.open(path, "w") do |pot_file|
253
+ pot_file.puts(pot_header(options))
254
+ end
255
+ end
256
+
257
+ def pot_header(options)
258
+ package_name = options[:package_name] || default_package_name
259
+ <<EOF
260
+ # SOME DESCRIPTIVE TITLE.
261
+ # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
262
+ # This file is distributed under the same license as the PACKAGE package.
263
+ # FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
264
+ #
265
+ #, fuzzy
266
+ msgid ""
267
+ msgstr ""
268
+ "Project-Id-Version: #{package_name} VERSION\\n"
269
+ "POT-Creation-Date: #{@pot_create_date}\\n"
270
+ "PO-Revision-Date: #{@pot_create_date}\\n"
271
+ "Last-Translator: FULL NAME <EMAIL@ADDRESS>\\n"
272
+ "Language: \\n"
273
+ "Language-Team: LANGUAGE <LL@li.org>\\n"
274
+ "MIME-Version: 1.0\\n"
275
+ "Content-Type: text/plain; charset=UTF-8\\n"
276
+ "Content-Transfer-Encoding: 8bit\\n"
277
+ "Plural-Forms: nplurals=INTEGER; plural=EXPRESSION;\\n"
278
+ EOF
279
+ end
280
+
281
+ def normalize_po_header(po_file_path)
282
+ po_file = ""
283
+ File.open(po_file_path) do |file|
284
+ po_file = file.read
285
+ end
286
+
287
+ po_file = po_file.gsub(/#{Regexp.escape(@pot_create_date)}/,
288
+ "XXXX-XX-XX XX:XX+XXXX")
289
+ po_file = po_file.gsub(/#{Regexp.escape(@po_revision_date)}/,
290
+ "YYYY-YY-YY YY:YY+YYYY")
291
+ po_file.gsub(/#{Time.now.year}/, "YEAR")
292
+ end
293
+
294
+ def po_header(locale, language, options=nil)
295
+ options ||= {}
296
+ package_name = options[:package_name] || default_package_name
297
+ full_name = translator_full_name
298
+ mail = translator_mail
299
+ language_name = Locale::Info.get_language(language).name
300
+ plural_forms = @msginit.send(:plural_forms, language)
301
+
302
+ <<EOF
303
+ # #{language_name} translations for #{package_name} package.
304
+ # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
305
+ # This file is distributed under the same license as the PACKAGE package.
306
+ # #{full_name} <#{mail}>, YEAR.
307
+ #
308
+ msgid ""
309
+ msgstr ""
310
+ "Project-Id-Version: #{package_name} VERSION\\n"
311
+ "POT-Creation-Date: XXXX-XX-XX XX:XX+XXXX\\n"
312
+ "PO-Revision-Date: YYYY-YY-YY YY:YY+YYYY\\n"
313
+ "Last-Translator: #{full_name} <#{mail}>\\n"
314
+ "Language: #{locale}\\n"
315
+ "Language-Team: #{language_name}\\n"
316
+ "MIME-Version: 1.0\\n"
317
+ "Content-Type: text/plain; charset=UTF-8\\n"
318
+ "Content-Transfer-Encoding: 8bit\\n"
319
+ "Plural-Forms: #{plural_forms}\\n"
320
+ EOF
321
+ end
322
+
323
+ def default_package_name
324
+ "PACKAGE"
325
+ end
326
+
327
+ def no_translator_po_header(locale, language)
328
+ language_name = Locale::Info.get_language(language).name
329
+ plural_forms = @msginit.send(:plural_forms, language)
330
+
331
+ <<EOF
332
+ # #{language_name} translations for PACKAGE package.
333
+ # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
334
+ # This file is distributed under the same license as the PACKAGE package.
335
+ # FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
336
+ #
337
+ msgid ""
338
+ msgstr ""
339
+ "Project-Id-Version: PACKAGE VERSION\\n"
340
+ "POT-Creation-Date: XXXX-XX-XX XX:XX+XXXX\\n"
341
+ "PO-Revision-Date: YYYY-YY-YY YY:YY+YYYY\\n"
342
+ "Last-Translator: FULL NAME <EMAIL@ADDRESS>\\n"
343
+ "Language: #{locale}\\n"
344
+ "Language-Team: #{language_name}\\n"
345
+ "MIME-Version: 1.0\\n"
346
+ "Content-Type: text/plain; charset=UTF-8\\n"
347
+ "Content-Transfer-Encoding: 8bit\\n"
348
+ "Plural-Forms: #{plural_forms}\\n"
349
+ EOF
350
+ end
351
+ end