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
data/src/poparser.ry ADDED
@@ -0,0 +1,217 @@
1
+ #
2
+ # poparser.ry - ruby version of msgfmt
3
+ #
4
+ # Copyright (C) 2002-2008 Masao Mutoh <mutomasa at gmail.com>
5
+ #
6
+ # You may redistribute it and/or modify it under the same
7
+ # license terms as Ruby.
8
+
9
+ class GetText::PoParser
10
+ token COMMENT MSGID MSGCTXT MSGID_PLURAL MSGSTR STRING PLURAL_NUM
11
+
12
+ rule
13
+
14
+ msgfmt
15
+ : /* empty */
16
+ | msgfmt comment
17
+ | msgfmt msgctxt
18
+ | msgfmt message
19
+ ;
20
+
21
+ msgctxt
22
+ : MSGCTXT string_list
23
+ {
24
+ @msgctxt = unescape(val[1]) + "\004"
25
+ }
26
+ ;
27
+
28
+ message
29
+ : single_message
30
+ | plural_message
31
+ ;
32
+
33
+ single_message
34
+ : MSGID string_list MSGSTR string_list
35
+ {
36
+ if @fuzzy and $ignore_fuzzy
37
+ if val[1] != ""
38
+ $stderr.print _("Warning: fuzzy message was ignored.\n")
39
+ $stderr.print " #{@po_file}: msgid '#{val[1]}'\n"
40
+ else
41
+ on_message('', unescape(val[3]))
42
+ end
43
+ @fuzzy = false
44
+ else
45
+ on_message(@msgctxt + unescape(val[1]), unescape(val[3]))
46
+ end
47
+ result = ""
48
+ }
49
+
50
+ plural_message
51
+ : MSGID string_list MSGID_PLURAL string_list msgstr_plural
52
+ {
53
+ if @fuzzy and $ignore_fuzzy
54
+ if val[1] != ""
55
+ $stderr.print _("Warning: fuzzy message was ignored.\n")
56
+ $stderr.print "msgid = '#{val[1]}\n"
57
+ else
58
+ on_message('', unescape(val[3]))
59
+ end
60
+ @fuzzy = false
61
+ else
62
+ on_message(@msgctxt + unescape(val[1]) + "\000" + unescape(val[3]), unescape(val[4]))
63
+ end
64
+ result = ""
65
+ }
66
+ ;
67
+
68
+ msgstr_plural
69
+ : msgstr_plural msgstr_plural_line
70
+ {
71
+ if val[0].size > 0
72
+ result = val[0] + "\000" + val[1]
73
+ else
74
+ result = ""
75
+ end
76
+ }
77
+ | msgstr_plural_line
78
+ ;
79
+
80
+ msgstr_plural_line
81
+ : MSGSTR PLURAL_NUM string_list
82
+ {
83
+ result = val[2]
84
+ }
85
+ ;
86
+
87
+ comment
88
+ : COMMENT
89
+ {
90
+ on_comment(val[0])
91
+ }
92
+ #| COMMENT
93
+ #;
94
+
95
+ string_list
96
+ : string_list STRING
97
+ {
98
+ result = val.delete_if{|item| item == ""}.join
99
+ }
100
+ | STRING
101
+ {
102
+ result = val[0]
103
+ }
104
+ ;
105
+ end
106
+
107
+ ---- inner
108
+ include GetText
109
+ GetText.bindtextdomain("rgettext")
110
+
111
+ def unescape(orig)
112
+ ret = orig.gsub(/\\n/, "\n")
113
+ ret.gsub!(/\\t/, "\t")
114
+ ret.gsub!(/\\r/, "\r")
115
+ ret.gsub!(/\\"/, "\"")
116
+ ret
117
+ end
118
+
119
+ def parse(str, data, ignore_fuzzy = true)
120
+ @comments = []
121
+ @data = data
122
+ @fuzzy = false
123
+ @msgctxt = ""
124
+ $ignore_fuzzy = ignore_fuzzy
125
+
126
+ str.strip!
127
+ @q = []
128
+ until str.empty? do
129
+ case str
130
+ when /\A\s+/
131
+ str = $'
132
+ when /\Amsgctxt/
133
+ @q.push [:MSGCTXT, $&]
134
+ str = $'
135
+ when /\Amsgid_plural/
136
+ @q.push [:MSGID_PLURAL, $&]
137
+ str = $'
138
+ when /\Amsgid/
139
+ @q.push [:MSGID, $&]
140
+ str = $'
141
+ when /\Amsgstr/
142
+ @q.push [:MSGSTR, $&]
143
+ str = $'
144
+ when /\A\[(\d+)\]/
145
+ @q.push [:PLURAL_NUM, $1]
146
+ str = $'
147
+ when /\A\#~(.*)/
148
+ $stderr.print _("Warning: obsolete msgid exists.\n")
149
+ $stderr.print " #{$&}\n"
150
+ @q.push [:COMMENT, $&]
151
+ str = $'
152
+ when /\A\#(.*)/
153
+ @q.push [:COMMENT, $&]
154
+ str = $'
155
+ when /\A\"(.*)\"/
156
+ @q.push [:STRING, $1]
157
+ str = $'
158
+ else
159
+ #c = str[0,1]
160
+ #@q.push [:STRING, c]
161
+ str = str[1..-1]
162
+ end
163
+ end
164
+ @q.push [false, '$end']
165
+ if $DEBUG
166
+ @q.each do |a,b|
167
+ puts "[#{a}, #{b}]"
168
+ end
169
+ end
170
+ @yydebug = true if $DEBUG
171
+ do_parse
172
+
173
+ if @comments.size > 0
174
+ @data.set_comment(:last, @comments.join("\n"))
175
+ end
176
+ @data
177
+ end
178
+
179
+ def next_token
180
+ @q.shift
181
+ end
182
+
183
+ def on_message(msgid, msgstr)
184
+ if msgstr.size > 0
185
+ @data[msgid] = msgstr
186
+ @data.set_comment(msgid, @comments.join("\n"))
187
+ end
188
+ @comments.clear
189
+ @msgctxt = ""
190
+ end
191
+
192
+ def on_comment(comment)
193
+ @fuzzy = true if (/fuzzy/ =~ comment)
194
+ @comments << comment
195
+ end
196
+
197
+ def parse_file(po_file, data, ignore_fuzzy = true)
198
+ args = [ po_file ]
199
+ # In Ruby 1.9, we must detect proper encoding of a PO file.
200
+ if String.instance_methods.include?(:encode)
201
+ encoding = detect_file_encoding(po_file)
202
+ args << "r:#{encoding}"
203
+ end
204
+ @po_file = po_file
205
+ parse(File.open(*args) {|io| io.read }, data, ignore_fuzzy)
206
+ end
207
+
208
+ def detect_file_encoding(po_file)
209
+ open(po_file, :encoding => 'ASCII-8BIT') do |input|
210
+ input.lines.each do |line|
211
+ return Encoding.find($1) if %r["Content-Type:.*\scharset=(.*)\\n"] =~ line
212
+ end
213
+ end
214
+ Encoding.default_external
215
+ end
216
+ private :detect_file_encoding
217
+ ---- footer
data/test/README ADDED
@@ -0,0 +1 @@
1
+ Go to gettext dir and run "rake makemo" prior to running any tests!
data/test/Rakefile ADDED
@@ -0,0 +1,17 @@
1
+ $LOAD_PATH.unshift "../lib"
2
+
3
+ task :default => :test
4
+
5
+ desc "Create mo files"
6
+ task :makemo do
7
+ require 'gettext/tools'
8
+ GetText.create_mofiles(:mo_root => "locale")
9
+ end
10
+
11
+ desc 'Run all tests'
12
+ task :test do
13
+ Dir.glob("**/test_*.rb").each do |path|
14
+ puts ""
15
+ ruby "-I../lib:../../locale/lib:. -rubygems #{path}"
16
+ end
17
+ end
@@ -0,0 +1,23 @@
1
+ # SOME DESCRIPTIVE TITLE.
2
+ # Copyright (C) YEAR ORGANIZATION
3
+ # FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
4
+ #
5
+ #, fuzzy
6
+ msgid ""
7
+ msgstr ""
8
+ "Project-Id-Version: PACKAGE VERSION\n"
9
+ "POT-Creation-Date: 2002-10-21 15:32:15+0900\n"
10
+ "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
11
+ "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
12
+ "Language-Team: LANGUAGE <LL@li.org>\n"
13
+ "MIME-Version: 1.0\n"
14
+ "Content-Type: text/plain; charset=US-ASCII\n"
15
+ "Content-Transfer-Encoding: ENCODING\n"
16
+ "Plural-Forms: nplurals=3; plural= n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
17
+
18
+ #: hello_plural.rb:11
19
+ msgid "one"
20
+ msgid_plural "two"
21
+ msgstr[0] "cr_one"
22
+ msgstr[1] "cr_two"
23
+ msgstr[2] "cr_three"
@@ -0,0 +1,22 @@
1
+ # SOME DESCRIPTIVE TITLE.
2
+ # Copyright (C) YEAR ORGANIZATION
3
+ # FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
4
+ #
5
+ #, fuzzy
6
+ msgid ""
7
+ msgstr ""
8
+ "Project-Id-Version: PACKAGE VERSION\n"
9
+ "POT-Creation-Date: 2002-10-21 15:32:15+0900\n"
10
+ "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
11
+ "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
12
+ "Language-Team: LANGUAGE <LL@li.org>\n"
13
+ "MIME-Version: 1.0\n"
14
+ "Content-Type: text/plain; charset=US-ASCII\n"
15
+ "Content-Transfer-Encoding: ENCODING\n"
16
+ "Plural-Forms: nplurals=2; plural= n != 1;\n"
17
+
18
+ #: hello_plural.rb:11
19
+ msgid "one"
20
+ msgid_plural "two"
21
+ msgstr[0] "da_one"
22
+ msgstr[1] "da_plural"
@@ -0,0 +1,22 @@
1
+ # SOME DESCRIPTIVE TITLE.
2
+ # Copyright (C) YEAR ORGANIZATION
3
+ # FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
4
+ #
5
+ #, fuzzy
6
+ msgid ""
7
+ msgstr ""
8
+ "Project-Id-Version: PACKAGE VERSION\n"
9
+ "POT-Creation-Date: 2002-10-21 15:32:15+0900\n"
10
+ "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
11
+ "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
12
+ "Language-Team: LANGUAGE <LL@li.org>\n"
13
+ "MIME-Version: 1.0\n"
14
+ "Content-Type: text/plain; charset=US-ASCII\n"
15
+ "Content-Transfer-Encoding: ENCODING\n"
16
+ "Plural-Forms: nplurals=INTEGER; plural=EXPRESSION;\n"
17
+
18
+ #: hello_plural.rb:11
19
+ msgid "first"
20
+ msgid_plural "second"
21
+ msgstr[0] "da_first"
22
+ msgstr[1] "da_second"
@@ -0,0 +1,28 @@
1
+ # SOME DESCRIPTIVE TITLE.
2
+ # Copyright (C) YEAR ORGANIZATION
3
+ # FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
4
+ #
5
+ #, fuzzy
6
+ msgid ""
7
+ msgstr ""
8
+ "Project-Id-Version: PACKAGE VERSION\n"
9
+ "POT-Creation-Date: 2002-10-21 15:32:15+0900\n"
10
+ "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
11
+ "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
12
+ "Language-Team: LANGUAGE <LL@li.org>\n"
13
+ "MIME-Version: 1.0\n"
14
+ "Content-Type: text/plain; charset=US-ASCII\n"
15
+ "Content-Transfer-Encoding: ENCODING\n"
16
+ "Plural-Forms: nplurals=2; plural=n>1;\n"
17
+
18
+ #: hello_plural.rb:11
19
+ msgid "one"
20
+ msgid_plural "two"
21
+ msgstr[0] "fr_one"
22
+ msgstr[1] "fr_plural"
23
+
24
+ #: hello_plural.rb:14
25
+ msgid "single"
26
+ msgid_plural "plural"
27
+ msgstr[0] "fr_hitotsu"
28
+ msgstr[1] "fr_fukusu"
@@ -0,0 +1,20 @@
1
+ # SOME DESCRIPTIVE TITLE.
2
+ # Copyright (C) YEAR ORGANIZATION
3
+ # FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
4
+ #
5
+ #, fuzzy
6
+ msgid ""
7
+ msgstr ""
8
+ "Project-Id-Version: PACKAGE VERSION\n"
9
+ "POT-Creation-Date: 2002-10-21 15:32:15+0900\n"
10
+ "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
11
+ "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
12
+ "Language-Team: LANGUAGE <LL@li.org>\n"
13
+ "MIME-Version: 1.0\n"
14
+ "Content-Type: text/plain; charset=US-ASCII\n"
15
+ "Content-Transfer-Encoding: ENCODING\n"
16
+
17
+ #: hello_plural.rb:11
18
+ msgid "first"
19
+ msgid_plural "second"
20
+ msgstr[0] "fr_first"
@@ -0,0 +1,23 @@
1
+ # SOME DESCRIPTIVE TITLE.
2
+ # Copyright (C) YEAR ORGANIZATION
3
+ # FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
4
+ #
5
+ #, fuzzy
6
+ msgid ""
7
+ msgstr ""
8
+ "Project-Id-Version: PACKAGE VERSION\n"
9
+ "POT-Creation-Date: 2002-01-01 02:24:56+0900\n"
10
+ "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
11
+ "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
12
+ "Language-Team: LANGUAGE <LL@li.org>\n"
13
+ "MIME-Version: 1.0\n"
14
+ "Content-Type: text/plain; charset=utf-8\n"
15
+ "Content-Transfer-Encoding: ENCODING\n"
16
+
17
+ #: simple.rb:10
18
+ msgid "language"
19
+ msgstr "french"
20
+
21
+ #: simple.rb:14
22
+ msgid "one is %d."
23
+ msgstr "FRENCH:ONE IS %d."
@@ -0,0 +1,19 @@
1
+ # SOME DESCRIPTIVE TITLE.
2
+ # Copyright (C) YEAR ORGANIZATION
3
+ # FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
4
+ #
5
+ #, fuzzy
6
+ msgid ""
7
+ msgstr ""
8
+ "Project-Id-Version: PACKAGE VERSION\n"
9
+ "POT-Creation-Date: 2001-10-28 01:39:53+0900\n"
10
+ "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
11
+ "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
12
+ "Language-Team: LANGUAGE <LL@li.org>\n"
13
+ "MIME-Version: 1.0\n"
14
+ "Content-Type: text/plain; charset=utf-8\n"
15
+ "Content-Transfer-Encoding: ENCODING\n"
16
+
17
+ #: test.rb:9 test.rb:11
18
+ msgid "LANGUAGE"
19
+ msgstr "FRENCH"
@@ -0,0 +1,23 @@
1
+ # SOME DESCRIPTIVE TITLE.
2
+ # Copyright (C) YEAR ORGANIZATION
3
+ # FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
4
+ #
5
+ #, fuzzy
6
+ msgid ""
7
+ msgstr ""
8
+ "Project-Id-Version: PACKAGE VERSION\n"
9
+ "POT-Creation-Date: 2002-10-21 15:32:15+0900\n"
10
+ "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
11
+ "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
12
+ "Language-Team: LANGUAGE <LL@li.org>\n"
13
+ "MIME-Version: 1.0\n"
14
+ "Content-Type: text/plain; charset=US-ASCII\n"
15
+ "Content-Transfer-Encoding: ENCODING\n"
16
+ "Plural-Forms: nplurals=3; plural=n==1 ? 0 : n==2 ? 1 : 2;\n"
17
+
18
+ #: hello_plural.rb:11
19
+ msgid "one"
20
+ msgid_plural "two"
21
+ msgstr[0] "ir_one"
22
+ msgstr[1] "ir_two"
23
+ msgstr[2] "ir_plural"
@@ -0,0 +1,46 @@
1
+ # Japanese translations for PACKAGE package
2
+ # PACKAGE パッケージに対する英訳.
3
+ # Copyright (C) 2008 THE PACKAGE'S COPYRIGHT HOLDER
4
+ # This file is distributed under the same license as the PACKAGE package.
5
+ # Masao Mutoh <mutomasa at gmail.com>, 2008.
6
+ #
7
+ msgid ""
8
+ msgstr ""
9
+ "Project-Id-Version: PACKAGE VERSION\n"
10
+ "POT-Creation-Date: 2008-08-06 02:36+0900\n"
11
+ "PO-Revision-Date: 2008-08-06 02:36+0900\n"
12
+ "Last-Translator: Masao Mutoh <mutomasa at gmail.com>\n"
13
+ "Language-Team: Japanese\n"
14
+ "MIME-Version: 1.0\n"
15
+ "Content-Type: text/plain; charset=UTF-8\n"
16
+ "Content-Transfer-Encoding: 8bit\n"
17
+ "Plural-Forms: nplurals=2; plural=(n != 1);\n"
18
+
19
+ #: testlib/npgettext.rb:10 testlib/npgettext.rb:11 testlib/npgettext.rb:15
20
+ #: testlib/npgettext.rb:16
21
+ msgctxt "Magazine"
22
+ msgid "a book"
23
+ msgid_plural "%{num} books"
24
+ msgstr[0] "一つの本"
25
+ msgstr[1] "%{num}の本たち"
26
+
27
+ #: testlib/npgettext.rb:20 testlib/npgettext.rb:21
28
+ msgctxt "Hardcover"
29
+ msgid "a book"
30
+ msgid_plural "%{num} books"
31
+ msgstr[0] "一つのハードカバー本"
32
+ msgstr[1] "%{num}のハードカバー本たち"
33
+
34
+ #: testlib/npgettext.rb:25 testlib/npgettext.rb:26
35
+ msgctxt "Magaine"
36
+ msgid "I have a magazine"
37
+ msgid_plural "I have %{num} magazines"
38
+ msgstr[0] "マガジンを1冊持ってます。"
39
+ msgstr[0] "マガジンたちを%{num}冊持ってます。"
40
+
41
+ #: testlib/npgettext.rb:30 testlib/npgettext.rb:31
42
+ msgctxt "Hardcover"
43
+ msgid "a picture"
44
+ msgid_plural "%{num} pictures"
45
+ msgstr[0] ""
46
+ msgstr[1] ""
@@ -0,0 +1,65 @@
1
+ # SOME DESCRIPTIVE TITLE.
2
+ # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
3
+ # This file is distributed under the same license as the PACKAGE package.
4
+ # FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
5
+ #
6
+ #, fuzzy
7
+ msgid ""
8
+ msgstr ""
9
+ "Project-Id-Version: PACKAGE VERSION\n"
10
+ "POT-Creation-Date: 2007-07-03 00:20+0900\n"
11
+ "PO-Revision-Date: 2007-07-03 00:20+0900\n"
12
+ "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
13
+ "Language-Team: LANGUAGE <LL@li.org>\n"
14
+ "MIME-Version: 1.0\n"
15
+ "Content-Type: text/plain; charset=UTF-8\n"
16
+ "Content-Transfer-Encoding: 8bit\n"
17
+ "Plural-Forms: nplurals=2; plural=(n != 1);\n"
18
+
19
+ #: nsgettext.rb:10 nsgettext.rb:14
20
+ msgid "AAA|BBB"
21
+ msgid_plural "CCC"
22
+ msgstr[0] "single"
23
+ msgstr[1] "plural"
24
+
25
+ #: nsgettext.rb:18
26
+ msgid "AAA"
27
+ msgid_plural "BBB"
28
+ msgstr[0] ""
29
+ msgstr[1] ""
30
+
31
+ #: nsgettext.rb:22
32
+ msgid "AAA|CCC"
33
+ msgid_plural "DDD"
34
+ msgstr[0] ""
35
+ msgstr[1] ""
36
+
37
+ #: nsgettext.rb:26
38
+ msgid "AAA|BBB|CCC"
39
+ msgid_plural "DDD"
40
+ msgstr[0] ""
41
+ msgstr[1] ""
42
+
43
+ #: nsgettext.rb:30
44
+ msgid "AAA$BBB"
45
+ msgid_plural "CCC"
46
+ msgstr[0] ""
47
+ msgstr[1] ""
48
+
49
+ #: nsgettext.rb:34
50
+ msgid "AAA$B|BB"
51
+ msgid_plural "CCC"
52
+ msgstr[0] ""
53
+ msgstr[1] ""
54
+
55
+ #: nsgettext.rb:38
56
+ msgid "AAA$B|CC"
57
+ msgid_plural "DDD"
58
+ msgstr[0] "single"
59
+ msgstr[1] "plural"
60
+
61
+ #: nsgettext.rb:42
62
+ msgid "AAA|CCC|BBB"
63
+ msgid_plural "DDD"
64
+ msgstr[0] ""
65
+ msgstr[1] ""
@@ -0,0 +1,41 @@
1
+ # Japanese translations for PACKAGE package
2
+ # PACKAGE パッケージに対する英訳.
3
+ # Copyright (C) 2008 THE PACKAGE'S COPYRIGHT HOLDER
4
+ # This file is distributed under the same license as the PACKAGE package.
5
+ # Masao Mutoh <mutomasa at gmail.com>, 2008.
6
+ #
7
+ msgid ""
8
+ msgstr ""
9
+ "Project-Id-Version: PACKAGE VERSION\n"
10
+ "POT-Creation-Date: 2008-07-26 15:39+0900\n"
11
+ "PO-Revision-Date: 2008-07-26 15:39+0900\n"
12
+ "Last-Translator: Masao Mutoh <mutomasa at gmail.com>\n"
13
+ "Language-Team: Japanese\n"
14
+ "MIME-Version: 1.0\n"
15
+ "Content-Type: text/plain; charset=UTF-8\n"
16
+ "Content-Transfer-Encoding: 8bit\n"
17
+ "Plural-Forms: nplurals=1; plural=0;\n"
18
+
19
+ #: testlib/pgettext.rb:10 testlib/pgettext.rb:14
20
+ msgctxt "AAA"
21
+ msgid "BBB"
22
+ msgstr "えーびー"
23
+
24
+ #: testlib/pgettext.rb:18
25
+ msgctxt "AAA|BBB"
26
+ msgid "CCC"
27
+ msgstr "えーびーしー"
28
+
29
+ #: testlib/pgettext.rb:22
30
+ msgctxt "AAA"
31
+ msgid "CCC"
32
+ msgstr ""
33
+
34
+ #: testlib/pgettext.rb:26
35
+ msgctxt "CCC"
36
+ msgid "BBB"
37
+ msgstr "しーびー"
38
+
39
+ #: testlib/pgettext.rb:33
40
+ msgid "BBB"
41
+ msgstr "びー"
@@ -0,0 +1,28 @@
1
+ # SOME DESCRIPTIVE TITLE.
2
+ # Copyright (C) YEAR ORGANIZATION
3
+ # FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
4
+ #
5
+ #, fuzzy
6
+ msgid ""
7
+ msgstr ""
8
+ "Project-Id-Version: PACKAGE VERSION\n"
9
+ "POT-Creation-Date: 2002-10-21 15:32:15+0900\n"
10
+ "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
11
+ "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
12
+ "Language-Team: LANGUAGE <LL@li.org>\n"
13
+ "MIME-Version: 1.0\n"
14
+ "Content-Type: text/plain; charset=US-ASCII\n"
15
+ "Content-Transfer-Encoding: ENCODING\n"
16
+ "Plural-Forms: nplurals=1; plural=0;\n"
17
+
18
+ #: hello_plural.rb:11
19
+ msgid "one"
20
+ msgid_plural "two"
21
+ msgstr[0] "all"
22
+ msgstr[1] ""
23
+
24
+ #: hello_plural.rb:13
25
+ msgid "single"
26
+ msgid_plural "plural"
27
+ msgstr[0] "hitotsu"
28
+ msgstr[1] "fukusu"
@@ -0,0 +1,20 @@
1
+ # SOME DESCRIPTIVE TITLE.
2
+ # Copyright (C) YEAR ORGANIZATION
3
+ # FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
4
+ #
5
+ #, fuzzy
6
+ msgid ""
7
+ msgstr ""
8
+ "Project-Id-Version: PACKAGE VERSION\n"
9
+ "POT-Creation-Date: 2002-10-21 15:32:15+0900\n"
10
+ "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
11
+ "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
12
+ "Language-Team: LANGUAGE <LL@li.org>\n"
13
+ "MIME-Version: 1.0\n"
14
+ "Content-Type: text/plain; charset=US-ASCII\n"
15
+ "Content-Transfer-Encoding: ENCODING\n"
16
+
17
+ #: hello_plural.rb:11
18
+ msgid "first"
19
+ msgid_plural "second"
20
+ msgstr[0] "a"
@@ -0,0 +1,43 @@
1
+ # SOME DESCRIPTIVE TITLE.
2
+ # Copyright (C) YEAR ORGANIZATION
3
+ # FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
4
+ #
5
+ msgid ""
6
+ msgstr ""
7
+ "Project-Id-Version: PACKAGE VERSION\n"
8
+ "POT-Creation-Date: 2004-07-03 23:03+0900\n"
9
+ "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
10
+ "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
11
+ "Language-Team: LANGUAGE <LL@li.org>\n"
12
+ "MIME-Version: 1.0\n"
13
+ "Content-Type: text/plain; charset=UTF-8\n"
14
+ "Content-Transfer-Encoding: 8bit\n"
15
+ "Plural-Forms: nplurals=INTEGER; plural=EXPRESSION;\n"
16
+
17
+ #: test_rubyparser.rb:8
18
+ msgid "aaa"
19
+ msgstr "AAA"
20
+
21
+ #: test_rubyparser.rb:12
22
+ msgid "aaa\n"
23
+ msgstr "AAA\n"
24
+
25
+ #: test_rubyparser.rb:16
26
+ msgid "bbb\nccc"
27
+ msgstr "BBB\nCCC"
28
+
29
+ #: test_rubyparser.rb:20
30
+ msgid "bbb\nccc\nddd\n"
31
+ msgstr "BBB\nCCC\nDDD\n"
32
+
33
+ #: test_rubyparser.rb:27 test_rubyparser.rb:31
34
+ msgid "eee"
35
+ msgstr "EEE"
36
+
37
+ #: test_rubyparser.rb:31
38
+ msgid "fff"
39
+ msgstr "FFF"
40
+
41
+ #: test_rubyparser.rb:35
42
+ msgid "ggghhhiii"
43
+ msgstr "GGGHHHIII"