gettext 1.93.0 → 2.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (881) hide show
  1. data/ChangeLog +16 -1941
  2. data/ChangeLog-1 +2016 -0
  3. data/{NEWS → NEWS-1} +2 -0
  4. data/README.rdoc +251 -0
  5. data/Rakefile +46 -57
  6. data/bin/rgettext +1 -1
  7. data/bin/rmsgfmt +2 -2
  8. data/bin/rmsgmerge +3 -3
  9. data/data/locale/bg/LC_MESSAGES/rgettext.mo +0 -0
  10. data/data/locale/bs/LC_MESSAGES/rgettext.mo +0 -0
  11. data/data/locale/ca/LC_MESSAGES/rgettext.mo +0 -0
  12. data/data/locale/cs/LC_MESSAGES/rgettext.mo +0 -0
  13. data/data/locale/de/LC_MESSAGES/rgettext.mo +0 -0
  14. data/data/locale/el/LC_MESSAGES/rgettext.mo +0 -0
  15. data/data/locale/eo/LC_MESSAGES/rgettext.mo +0 -0
  16. data/data/locale/es/LC_MESSAGES/rgettext.mo +0 -0
  17. data/data/locale/et/LC_MESSAGES/rgettext.mo +0 -0
  18. data/data/locale/fr/LC_MESSAGES/rgettext.mo +0 -0
  19. data/data/locale/hr/LC_MESSAGES/rgettext.mo +0 -0
  20. data/data/locale/hu/LC_MESSAGES/rgettext.mo +0 -0
  21. data/data/locale/it/LC_MESSAGES/rgettext.mo +0 -0
  22. data/data/locale/ja/LC_MESSAGES/rgettext.mo +0 -0
  23. data/data/locale/ko/LC_MESSAGES/rgettext.mo +0 -0
  24. data/data/locale/lv/LC_MESSAGES/rgettext.mo +0 -0
  25. data/data/locale/nb/LC_MESSAGES/rgettext.mo +0 -0
  26. data/data/locale/nl/LC_MESSAGES/rgettext.mo +0 -0
  27. data/data/locale/pt_BR/LC_MESSAGES/rgettext.mo +0 -0
  28. data/data/locale/ru/LC_MESSAGES/rgettext.mo +0 -0
  29. data/data/locale/sr/LC_MESSAGES/rgettext.mo +0 -0
  30. data/data/locale/sv/LC_MESSAGES/rgettext.mo +0 -0
  31. data/data/locale/ua/LC_MESSAGES/rgettext.mo +0 -0
  32. data/data/locale/vi/LC_MESSAGES/rgettext.mo +0 -0
  33. data/data/locale/zh/LC_MESSAGES/rgettext.mo +0 -0
  34. data/data/locale/zh_TW/LC_MESSAGES/rgettext.mo +0 -0
  35. data/gettext.gemspec +40 -0
  36. data/lib/gettext.rb +101 -431
  37. data/lib/gettext/cgi.rb +4 -4
  38. data/lib/gettext/class_info.rb +54 -0
  39. data/lib/gettext/{iconv.rb → core_ext/iconv.rb} +1 -0
  40. data/lib/gettext/{string.rb → core_ext/string.rb} +12 -8
  41. data/lib/gettext/locale_path.rb +107 -0
  42. data/lib/gettext/mofile.rb +314 -0
  43. data/lib/gettext/parser/erb.rb +2 -1
  44. data/lib/gettext/parser/glade.rb +2 -1
  45. data/lib/gettext/parser/ruby.rb +66 -63
  46. data/lib/gettext/poparser.rb +3 -3
  47. data/lib/gettext/textdomain.rb +97 -171
  48. data/lib/gettext/textdomain_manager.rb +224 -0
  49. data/lib/gettext/tools.rb +195 -0
  50. data/lib/gettext/{rgettext.rb → tools/rgettext.rb} +74 -77
  51. data/lib/gettext/{rmsgfmt.rb → tools/rmsgfmt.rb} +12 -26
  52. data/lib/gettext/{rmsgmerge.rb → tools/rmsgmerge.rb} +3 -6
  53. data/lib/gettext/utils.rb +18 -135
  54. data/lib/gettext/version.rb +2 -2
  55. data/po/bg/rgettext.po +84 -88
  56. data/po/bs/rgettext.po +86 -90
  57. data/po/ca/rgettext.po +85 -88
  58. data/po/cs/rgettext.po +86 -90
  59. data/po/de/{rails.po → #rails.po#} +17 -16
  60. data/po/de/rgettext.po +84 -88
  61. data/po/el/rgettext.po +85 -89
  62. data/po/eo/rgettext.po +85 -89
  63. data/po/es/rgettext.po +84 -88
  64. data/po/et/rgettext.po +84 -88
  65. data/po/fr/rgettext.po +84 -88
  66. data/po/hr/rgettext.po +86 -90
  67. data/po/hu/rgettext.po +84 -88
  68. data/po/it/rgettext.po +82 -86
  69. data/po/ja/rails.po.old +150 -0
  70. data/po/ja/rgettext.po +84 -88
  71. data/po/ko/rgettext.po +86 -90
  72. data/po/lv/rgettext.po +84 -88
  73. data/po/nb/rgettext.po +84 -88
  74. data/po/nl/rgettext.po +86 -90
  75. data/po/pt_BR/rgettext.po +84 -88
  76. data/po/rgettext.pot +54 -70
  77. data/po/ru/rgettext.po +84 -88
  78. data/po/sr/rgettext.po +84 -88
  79. data/po/sv/rgettext.po +57 -73
  80. data/po/ua/rgettext.po +85 -89
  81. data/po/vi/rgettext.po +84 -88
  82. data/po/zh/rgettext.po +83 -87
  83. data/po/zh_TW/rgettext.po +83 -87
  84. data/samples/README +4 -8
  85. data/samples/cgi/Rakefile +2 -2
  86. data/samples/cgi/cookie.cgi +1 -0
  87. data/samples/cgi/helloerb1.cgi +8 -4
  88. data/samples/cgi/helloerb2.cgi +6 -4
  89. data/samples/cgi/hellolib.rb +1 -2
  90. data/samples/cgi/index.cgi +1 -0
  91. data/samples/cgi/locale/bg/LC_MESSAGES/hellolib.mo +0 -0
  92. data/samples/cgi/locale/bs/LC_MESSAGES/hellolib.mo +0 -0
  93. data/samples/cgi/locale/ca/LC_MESSAGES/hellolib.mo +0 -0
  94. data/samples/cgi/locale/cs/LC_MESSAGES/hellolib.mo +0 -0
  95. data/samples/cgi/locale/de/LC_MESSAGES/hellolib.mo +0 -0
  96. data/samples/cgi/locale/el/LC_MESSAGES/hellolib.mo +0 -0
  97. data/samples/cgi/locale/eo/LC_MESSAGES/hellolib.mo +0 -0
  98. data/samples/cgi/locale/es/LC_MESSAGES/hellolib.mo +0 -0
  99. data/samples/cgi/locale/fr/LC_MESSAGES/hellolib.mo +0 -0
  100. data/samples/cgi/locale/hr/LC_MESSAGES/hellolib.mo +0 -0
  101. data/samples/cgi/locale/hu/LC_MESSAGES/hellolib.mo +0 -0
  102. data/samples/cgi/locale/it/LC_MESSAGES/hellolib.mo +0 -0
  103. data/samples/cgi/locale/ja/LC_MESSAGES/helloerb1.mo +0 -0
  104. data/samples/cgi/locale/ja/LC_MESSAGES/helloerb2.mo +0 -0
  105. data/samples/cgi/locale/ja/LC_MESSAGES/hellolib.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/hellolib.mo +0 -0
  109. data/samples/cgi/locale/lv/LC_MESSAGES/hellolib.mo +0 -0
  110. data/samples/cgi/locale/nb/LC_MESSAGES/hellolib.mo +0 -0
  111. data/samples/cgi/locale/nl/LC_MESSAGES/hellolib.mo +0 -0
  112. data/samples/cgi/locale/pt_BR/LC_MESSAGES/hellolib.mo +0 -0
  113. data/samples/cgi/locale/ru/LC_MESSAGES/hellolib.mo +0 -0
  114. data/samples/cgi/locale/sr/LC_MESSAGES/hellolib.mo +0 -0
  115. data/samples/cgi/locale/ua/LC_MESSAGES/hellolib.mo +0 -0
  116. data/samples/cgi/locale/vi/LC_MESSAGES/hellolib.mo +0 -0
  117. data/samples/cgi/locale/zh/LC_MESSAGES/hellolib.mo +0 -0
  118. data/samples/cgi/locale/zh_TW/LC_MESSAGES/hellolib.mo +0 -0
  119. data/samples/cgi/po/ja/helloerb1.po +2 -2
  120. data/samples/cgi/po/ja/helloerb2.po +2 -2
  121. data/samples/cgi/po/ja/hellolib.po +2 -2
  122. data/samples/cgi/po/ja/main.po +2 -2
  123. data/samples/hello.rb +4 -3
  124. data/samples/hello2.rb +2 -1
  125. data/samples/{helloglade2.glade → hello_glade2.glade} +0 -0
  126. data/samples/{helloglade2.rb → hello_glade2.rb} +5 -4
  127. data/samples/{hellogtk2.rb → hello_gtk2.rb} +3 -3
  128. data/samples/hello_noop.rb +2 -1
  129. data/samples/hello_plural.rb +2 -1
  130. data/samples/{hellotk.rb → hello_tk.rb} +3 -2
  131. data/samples/locale/bg/LC_MESSAGES/hello.mo +0 -0
  132. data/samples/locale/bg/LC_MESSAGES/hello2.mo +0 -0
  133. data/samples/locale/bg/LC_MESSAGES/{helloglade2.mo → hello_glade2.mo} +0 -0
  134. data/samples/locale/bg/LC_MESSAGES/{hellogtk.mo → hello_gtk.mo} +0 -0
  135. data/samples/locale/bg/LC_MESSAGES/hello_plural.mo +0 -0
  136. data/samples/locale/bg/LC_MESSAGES/{hellotk.mo → hello_tk.mo} +0 -0
  137. data/samples/locale/bs/LC_MESSAGES/hello.mo +0 -0
  138. data/samples/locale/bs/LC_MESSAGES/hello2.mo +0 -0
  139. data/samples/locale/bs/LC_MESSAGES/{helloglade2.mo → hello_glade2.mo} +0 -0
  140. data/samples/locale/bs/LC_MESSAGES/{hellogtk.mo → hello_gtk.mo} +0 -0
  141. data/samples/locale/bs/LC_MESSAGES/hello_plural.mo +0 -0
  142. data/samples/locale/bs/LC_MESSAGES/{hellotk.mo → hello_tk.mo} +0 -0
  143. data/samples/locale/ca/LC_MESSAGES/hello.mo +0 -0
  144. data/samples/locale/ca/LC_MESSAGES/hello2.mo +0 -0
  145. data/samples/locale/ca/LC_MESSAGES/{helloglade2.mo → hello_glade2.mo} +0 -0
  146. data/samples/locale/ca/LC_MESSAGES/{hellogtk.mo → hello_gtk.mo} +0 -0
  147. data/samples/locale/ca/LC_MESSAGES/hello_plural.mo +0 -0
  148. data/samples/locale/ca/LC_MESSAGES/{hellotk.mo → hello_tk.mo} +0 -0
  149. data/samples/locale/cs/LC_MESSAGES/hello.mo +0 -0
  150. data/samples/locale/cs/LC_MESSAGES/hello2.mo +0 -0
  151. data/samples/locale/cs/LC_MESSAGES/{helloglade2.mo → hello_glade2.mo} +0 -0
  152. data/samples/locale/cs/LC_MESSAGES/{hellogtk.mo → hello_gtk.mo} +0 -0
  153. data/samples/locale/cs/LC_MESSAGES/hello_plural.mo +0 -0
  154. data/samples/locale/cs/LC_MESSAGES/{hellotk.mo → hello_tk.mo} +0 -0
  155. data/samples/locale/de/LC_MESSAGES/hello.mo +0 -0
  156. data/samples/locale/de/LC_MESSAGES/hello2.mo +0 -0
  157. data/samples/locale/de/LC_MESSAGES/{helloglade2.mo → hello_glade2.mo} +0 -0
  158. data/samples/locale/de/LC_MESSAGES/{hellogtk.mo → hello_gtk.mo} +0 -0
  159. data/samples/locale/de/LC_MESSAGES/hello_plural.mo +0 -0
  160. data/samples/locale/de/LC_MESSAGES/{hellotk.mo → hello_tk.mo} +0 -0
  161. data/samples/locale/el/LC_MESSAGES/hello.mo +0 -0
  162. data/samples/locale/el/LC_MESSAGES/hello2.mo +0 -0
  163. data/samples/locale/el/LC_MESSAGES/{helloglade2.mo → hello_glade2.mo} +0 -0
  164. data/samples/locale/el/LC_MESSAGES/{hellogtk.mo → hello_gtk.mo} +0 -0
  165. data/samples/locale/el/LC_MESSAGES/hello_plural.mo +0 -0
  166. data/samples/locale/el/LC_MESSAGES/{hellotk.mo → hello_tk.mo} +0 -0
  167. data/samples/locale/eo/LC_MESSAGES/hello.mo +0 -0
  168. data/samples/locale/eo/LC_MESSAGES/hello2.mo +0 -0
  169. data/samples/locale/eo/LC_MESSAGES/{helloglade2.mo → hello_glade2.mo} +0 -0
  170. data/samples/locale/eo/LC_MESSAGES/{hellogtk.mo → hello_gtk.mo} +0 -0
  171. data/samples/locale/eo/LC_MESSAGES/hello_plural.mo +0 -0
  172. data/samples/locale/eo/LC_MESSAGES/{hellotk.mo → hello_tk.mo} +0 -0
  173. data/samples/locale/es/LC_MESSAGES/hello.mo +0 -0
  174. data/samples/locale/es/LC_MESSAGES/hello2.mo +0 -0
  175. data/samples/locale/es/LC_MESSAGES/{helloglade2.mo → hello_glade2.mo} +0 -0
  176. data/samples/locale/es/LC_MESSAGES/{hellogtk.mo → hello_gtk.mo} +0 -0
  177. data/samples/locale/es/LC_MESSAGES/hello_plural.mo +0 -0
  178. data/samples/locale/es/LC_MESSAGES/{hellotk.mo → hello_tk.mo} +0 -0
  179. data/samples/locale/fr/LC_MESSAGES/hello.mo +0 -0
  180. data/samples/locale/fr/LC_MESSAGES/hello2.mo +0 -0
  181. data/samples/locale/fr/LC_MESSAGES/{helloglade2.mo → hello_glade2.mo} +0 -0
  182. data/samples/locale/fr/LC_MESSAGES/{hellogtk.mo → hello_gtk.mo} +0 -0
  183. data/samples/locale/fr/LC_MESSAGES/hello_plural.mo +0 -0
  184. data/samples/locale/fr/LC_MESSAGES/{hellotk.mo → hello_tk.mo} +0 -0
  185. data/samples/locale/hr/LC_MESSAGES/hello.mo +0 -0
  186. data/samples/locale/hr/LC_MESSAGES/hello2.mo +0 -0
  187. data/samples/locale/hr/LC_MESSAGES/{helloglade2.mo → hello_glade2.mo} +0 -0
  188. data/samples/locale/hr/LC_MESSAGES/{hellogtk.mo → hello_gtk.mo} +0 -0
  189. data/samples/locale/hr/LC_MESSAGES/hello_plural.mo +0 -0
  190. data/samples/locale/hr/LC_MESSAGES/{hellotk.mo → hello_tk.mo} +0 -0
  191. data/samples/locale/hu/LC_MESSAGES/hello.mo +0 -0
  192. data/samples/locale/hu/LC_MESSAGES/hello2.mo +0 -0
  193. data/samples/locale/hu/LC_MESSAGES/{helloglade2.mo → hello_glade2.mo} +0 -0
  194. data/samples/locale/hu/LC_MESSAGES/{hellogtk.mo → hello_gtk.mo} +0 -0
  195. data/samples/locale/hu/LC_MESSAGES/hello_plural.mo +0 -0
  196. data/samples/locale/hu/LC_MESSAGES/{hellotk.mo → hello_tk.mo} +0 -0
  197. data/samples/locale/it/LC_MESSAGES/hello.mo +0 -0
  198. data/samples/locale/it/LC_MESSAGES/hello2.mo +0 -0
  199. data/samples/locale/it/LC_MESSAGES/{helloglade2.mo → hello_glade2.mo} +0 -0
  200. data/samples/locale/it/LC_MESSAGES/{hellotk.mo → hello_gtk.mo} +0 -0
  201. data/samples/locale/it/LC_MESSAGES/hello_plural.mo +0 -0
  202. data/samples/locale/it/LC_MESSAGES/{hellogtk.mo → hello_tk.mo} +0 -0
  203. data/samples/locale/ja/LC_MESSAGES/hello.mo +0 -0
  204. data/samples/locale/ja/LC_MESSAGES/hello2.mo +0 -0
  205. data/samples/locale/ja/LC_MESSAGES/{helloglade2.mo → hello_glade2.mo} +0 -0
  206. data/samples/locale/ja/LC_MESSAGES/{hellogtk.mo → hello_gtk.mo} +0 -0
  207. data/samples/locale/ja/LC_MESSAGES/hello_plural.mo +0 -0
  208. data/samples/locale/ja/LC_MESSAGES/{hellotk.mo → hello_tk.mo} +0 -0
  209. data/samples/locale/ko/LC_MESSAGES/hello.mo +0 -0
  210. data/samples/locale/ko/LC_MESSAGES/hello2.mo +0 -0
  211. data/samples/locale/ko/LC_MESSAGES/{helloglade2.mo → hello_glade2.mo} +0 -0
  212. data/samples/locale/ko/LC_MESSAGES/{hellogtk.mo → hello_gtk.mo} +0 -0
  213. data/samples/locale/ko/LC_MESSAGES/hello_plural.mo +0 -0
  214. data/samples/locale/ko/LC_MESSAGES/{hellotk.mo → hello_tk.mo} +0 -0
  215. data/samples/locale/lv/LC_MESSAGES/hello.mo +0 -0
  216. data/samples/locale/lv/LC_MESSAGES/hello2.mo +0 -0
  217. data/samples/locale/lv/LC_MESSAGES/{helloglade2.mo → hello_glade2.mo} +0 -0
  218. data/samples/locale/lv/LC_MESSAGES/{hellogtk.mo → hello_gtk.mo} +0 -0
  219. data/samples/locale/lv/LC_MESSAGES/hello_plural.mo +0 -0
  220. data/samples/locale/lv/LC_MESSAGES/{hellotk.mo → hello_tk.mo} +0 -0
  221. data/samples/locale/nb/LC_MESSAGES/hello.mo +0 -0
  222. data/samples/locale/nb/LC_MESSAGES/hello2.mo +0 -0
  223. data/samples/locale/nb/LC_MESSAGES/{helloglade2.mo → hello_glade2.mo} +0 -0
  224. data/samples/locale/nb/LC_MESSAGES/{hellogtk.mo → hello_gtk.mo} +0 -0
  225. data/samples/locale/nb/LC_MESSAGES/hello_plural.mo +0 -0
  226. data/samples/locale/nb/LC_MESSAGES/{hellotk.mo → hello_tk.mo} +0 -0
  227. data/samples/locale/nl/LC_MESSAGES/hello.mo +0 -0
  228. data/samples/locale/nl/LC_MESSAGES/hello2.mo +0 -0
  229. data/samples/locale/nl/LC_MESSAGES/{helloglade2.mo → hello_glade2.mo} +0 -0
  230. data/samples/locale/nl/LC_MESSAGES/{hellotk.mo → hello_gtk.mo} +0 -0
  231. data/samples/locale/nl/LC_MESSAGES/hello_plural.mo +0 -0
  232. data/samples/locale/nl/LC_MESSAGES/{hellogtk.mo → hello_tk.mo} +0 -0
  233. data/samples/locale/pt_BR/LC_MESSAGES/hello.mo +0 -0
  234. data/samples/locale/pt_BR/LC_MESSAGES/hello2.mo +0 -0
  235. data/samples/locale/pt_BR/LC_MESSAGES/{helloglade2.mo → hello_glade2.mo} +0 -0
  236. data/samples/locale/pt_BR/LC_MESSAGES/{hellogtk.mo → hello_gtk.mo} +0 -0
  237. data/samples/locale/pt_BR/LC_MESSAGES/hello_plural.mo +0 -0
  238. data/samples/locale/pt_BR/LC_MESSAGES/{hellotk.mo → hello_tk.mo} +0 -0
  239. data/samples/locale/ru/LC_MESSAGES/hello.mo +0 -0
  240. data/samples/locale/ru/LC_MESSAGES/hello2.mo +0 -0
  241. data/samples/locale/ru/LC_MESSAGES/{helloglade2.mo → hello_glade2.mo} +0 -0
  242. data/samples/locale/ru/LC_MESSAGES/{hellogtk.mo → hello_gtk.mo} +0 -0
  243. data/samples/locale/ru/LC_MESSAGES/hello_plural.mo +0 -0
  244. data/samples/locale/ru/LC_MESSAGES/{hellotk.mo → hello_tk.mo} +0 -0
  245. data/samples/locale/sr/LC_MESSAGES/hello.mo +0 -0
  246. data/samples/locale/sr/LC_MESSAGES/hello2.mo +0 -0
  247. data/samples/locale/sr/LC_MESSAGES/{helloglade2.mo → hello_glade2.mo} +0 -0
  248. data/samples/locale/sr/LC_MESSAGES/{hellogtk.mo → hello_gtk.mo} +0 -0
  249. data/samples/locale/sr/LC_MESSAGES/hello_plural.mo +0 -0
  250. data/samples/locale/sr/LC_MESSAGES/{hellotk.mo → hello_tk.mo} +0 -0
  251. data/samples/locale/sv/LC_MESSAGES/hello.mo +0 -0
  252. data/samples/locale/sv/LC_MESSAGES/hello2.mo +0 -0
  253. data/samples/locale/sv/LC_MESSAGES/{helloglade2.mo → hello_glade2.mo} +0 -0
  254. data/samples/locale/sv/LC_MESSAGES/{hellogtk.mo → hello_gtk.mo} +0 -0
  255. data/samples/locale/sv/LC_MESSAGES/hello_plural.mo +0 -0
  256. data/samples/locale/sv/LC_MESSAGES/{hellotk.mo → hello_tk.mo} +0 -0
  257. data/samples/locale/ua/LC_MESSAGES/hello.mo +0 -0
  258. data/samples/locale/ua/LC_MESSAGES/hello2.mo +0 -0
  259. data/samples/locale/ua/LC_MESSAGES/{helloglade2.mo → hello_glade2.mo} +0 -0
  260. data/samples/locale/ua/LC_MESSAGES/{hellogtk.mo → hello_gtk.mo} +0 -0
  261. data/samples/locale/ua/LC_MESSAGES/hello_plural.mo +0 -0
  262. data/samples/locale/ua/LC_MESSAGES/{hellotk.mo → hello_tk.mo} +0 -0
  263. data/samples/locale/vi/LC_MESSAGES/hello.mo +0 -0
  264. data/samples/locale/vi/LC_MESSAGES/hello2.mo +0 -0
  265. data/samples/locale/vi/LC_MESSAGES/{helloglade2.mo → hello_glade2.mo} +0 -0
  266. data/samples/locale/vi/LC_MESSAGES/{hellogtk.mo → hello_gtk.mo} +0 -0
  267. data/samples/locale/vi/LC_MESSAGES/hello_plural.mo +0 -0
  268. data/samples/locale/vi/LC_MESSAGES/{hellotk.mo → hello_tk.mo} +0 -0
  269. data/samples/locale/zh/LC_MESSAGES/hello.mo +0 -0
  270. data/samples/locale/zh/LC_MESSAGES/hello2.mo +0 -0
  271. data/samples/locale/zh/LC_MESSAGES/{helloglade2.mo → hello_glade2.mo} +0 -0
  272. data/samples/locale/zh/LC_MESSAGES/{hellogtk.mo → hello_gtk.mo} +0 -0
  273. data/samples/locale/zh/LC_MESSAGES/hello_plural.mo +0 -0
  274. data/samples/locale/zh/LC_MESSAGES/{hellotk.mo → hello_tk.mo} +0 -0
  275. data/samples/locale/zh_TW/LC_MESSAGES/hello.mo +0 -0
  276. data/samples/locale/zh_TW/LC_MESSAGES/hello2.mo +0 -0
  277. data/samples/locale/zh_TW/LC_MESSAGES/{helloglade2.mo → hello_glade2.mo} +0 -0
  278. data/samples/locale/zh_TW/LC_MESSAGES/{hellogtk.mo → hello_gtk.mo} +0 -0
  279. data/samples/locale/zh_TW/LC_MESSAGES/hello_plural.mo +0 -0
  280. data/samples/locale/zh_TW/LC_MESSAGES/{hellotk.mo → hello_tk.mo} +0 -0
  281. data/samples/makemo.rb +3 -2
  282. data/samples/po/bg/{helloglade2.po → hello_glade2.po} +4 -4
  283. data/samples/po/bg/{hellogtk.po → hello_gtk.po} +1 -1
  284. data/samples/po/bg/{hellotk.po → hello_tk.po} +2 -2
  285. data/samples/po/bs/{helloglade2.po → hello_glade2.po} +6 -6
  286. data/samples/po/bs/{hellogtk.po → hello_gtk.po} +3 -3
  287. data/samples/po/bs/{hellotk.po → hello_tk.po} +4 -4
  288. data/samples/po/ca/{helloglade2.po → hello_glade2.po} +4 -4
  289. data/samples/po/ca/{hellogtk.po → hello_gtk.po} +1 -1
  290. data/samples/po/ca/{hellotk.po → hello_tk.po} +2 -2
  291. data/samples/po/cs/hello.po +1 -1
  292. data/samples/po/cs/hello2.po +1 -1
  293. data/samples/po/cs/{helloglade2.po → hello_glade2.po} +3 -3
  294. data/samples/po/cs/{hellogtk.po → hello_gtk.po} +2 -2
  295. data/samples/po/cs/hello_noop.po +1 -1
  296. data/samples/po/cs/{hellotk.po → hello_tk.po} +2 -2
  297. data/samples/po/de/hello.po +1 -1
  298. data/samples/po/de/hello2.po +1 -1
  299. data/samples/po/de/{helloglade2.po → hello_glade2.po} +3 -3
  300. data/samples/po/de/{hellogtk.po → hello_gtk.po} +2 -2
  301. data/samples/po/de/hello_noop.po +1 -1
  302. data/samples/po/de/{hellotk.po → hello_tk.po} +2 -2
  303. data/samples/po/el/hello.po +1 -1
  304. data/samples/po/el/{helloglade2.po → hello_glade2.po} +4 -4
  305. data/samples/po/el/{hellogtk.po → hello_gtk.po} +1 -1
  306. data/samples/po/el/{hellotk.po → hello_tk.po} +2 -2
  307. data/samples/po/eo/{helloglade2.po → hello_glade2.po} +4 -4
  308. data/samples/po/eo/{hellogtk.po → hello_gtk.po} +1 -1
  309. data/samples/po/eo/{hellotk.po → hello_tk.po} +2 -2
  310. data/samples/po/es/{helloglade2.po → hello_glade2.po} +4 -4
  311. data/samples/po/es/{hellogtk.po → hello_gtk.po} +2 -2
  312. data/samples/po/es/{hellotk.po → hello_tk.po} +2 -2
  313. data/samples/po/fr/{helloglade2.po → hello_glade2.po} +4 -4
  314. data/samples/po/fr/{hellogtk.po → hello_gtk.po} +2 -2
  315. data/samples/po/fr/{hellotk.po → hello_tk.po} +2 -2
  316. data/samples/po/{helloglade2.pot → hello_glade2.pot} +4 -4
  317. data/samples/po/{hellogtk.pot → hello_gtk.pot} +1 -1
  318. data/samples/po/{hellotk.pot → hello_tk.pot} +2 -2
  319. data/samples/po/hr/{helloglade2.po → hello_glade2.po} +6 -6
  320. data/samples/po/hr/{hellogtk.po → hello_gtk.po} +3 -3
  321. data/samples/po/hr/{hellotk.po → hello_tk.po} +4 -4
  322. data/samples/po/hu/{helloglade2.po → hello_glade2.po} +4 -4
  323. data/samples/po/hu/{hellogtk.po → hello_gtk.po} +1 -1
  324. data/samples/po/hu/{hellotk.po → hello_tk.po} +2 -2
  325. data/samples/po/it/hello.po +1 -1
  326. data/samples/po/it/hello2.po +1 -1
  327. data/samples/po/it/{helloglade2.po → hello_glade2.po} +4 -4
  328. data/samples/po/it/{hellogtk.po → hello_gtk.po} +2 -2
  329. data/samples/po/it/hello_noop.po +1 -1
  330. data/samples/po/it/{hellotk.po → hello_tk.po} +2 -2
  331. data/samples/po/ja/{helloglade2.po → hello_glade2.po} +4 -4
  332. data/samples/po/ja/{hellogtk.po → hello_gtk.po} +2 -2
  333. data/samples/po/ja/{hellotk.po → hello_tk.po} +2 -2
  334. data/samples/po/ko/hello.po +1 -1
  335. data/samples/po/ko/hello2.po +1 -1
  336. data/samples/po/ko/{helloglade2.po → hello_glade2.po} +3 -3
  337. data/samples/po/ko/{hellogtk.po → hello_gtk.po} +2 -2
  338. data/samples/po/ko/hello_noop.po +1 -1
  339. data/samples/po/ko/{hellotk.po → hello_tk.po} +1 -1
  340. data/samples/po/lv/{helloglade2.po → hello_glade2.po} +4 -4
  341. data/samples/po/lv/{hellogtk.po → hello_gtk.po} +1 -1
  342. data/samples/po/lv/{hellotk.po → hello_tk.po} +2 -2
  343. data/samples/po/nb/{helloglade2.po → hello_glade2.po} +5 -6
  344. data/samples/po/nb/{hellogtk.po → hello_gtk.po} +1 -1
  345. data/samples/po/nb/{hellotk.po → hello_tk.po} +2 -2
  346. data/samples/po/nl/hello.po +1 -1
  347. data/samples/po/nl/hello2.po +1 -1
  348. data/samples/po/nl/{helloglade2.po → hello_glade2.po} +5 -5
  349. data/samples/po/nl/{hellogtk.po → hello_gtk.po} +2 -2
  350. data/samples/po/nl/hello_noop.po +1 -1
  351. data/samples/po/nl/hello_plural.po +1 -1
  352. data/samples/po/nl/{hellotk.po → hello_tk.po} +2 -2
  353. data/samples/po/pt_BR/{helloglade2.po → hello_glade2.po} +4 -4
  354. data/samples/po/pt_BR/{hellogtk.po → hello_gtk.po} +1 -1
  355. data/samples/po/pt_BR/{hellotk.po → hello_tk.po} +0 -0
  356. data/samples/po/ru/{helloglade2.po → hello_glade2.po} +5 -5
  357. data/samples/po/ru/{hellogtk.po → hello_gtk.po} +3 -3
  358. data/samples/po/ru/{hellotk.po → hello_tk.po} +3 -3
  359. data/samples/po/sr/{helloglade2.po → hello_glade2.po} +4 -4
  360. data/samples/po/sr/{hellogtk.po → hello_gtk.po} +1 -1
  361. data/samples/po/sr/{hellotk.po → hello_tk.po} +2 -2
  362. data/samples/po/sv/{helloglade2.po → hello_glade2.po} +4 -4
  363. data/samples/po/sv/{hellogtk.po → hello_gtk.po} +1 -1
  364. data/samples/po/sv/{hellotk.po → hello_tk.po} +2 -2
  365. data/samples/po/test.rb +11 -0
  366. data/samples/po/ua/{helloglade2.po → hello_glade2.po} +4 -4
  367. data/samples/po/ua/{hellogtk.po → hello_gtk.po} +1 -1
  368. data/samples/po/ua/{hellotk.po → hello_tk.po} +2 -2
  369. data/samples/po/vi/{helloglade2.po → hello_glade2.po} +4 -4
  370. data/samples/po/vi/{hellogtk.po → hello_gtk.po} +1 -1
  371. data/samples/po/vi/{hellotk.po → hello_tk.po} +2 -2
  372. data/samples/po/zh/{helloglade2.po → hello_glade2.po} +4 -4
  373. data/samples/po/zh/{hellogtk.po → hello_gtk.po} +2 -2
  374. data/samples/po/zh/{hellotk.po → hello_tk.po} +2 -2
  375. data/samples/po/zh_TW/{helloglade2.po → hello_glade2.po} +4 -4
  376. data/samples/po/zh_TW/{hellogtk.po → hello_gtk.po} +1 -1
  377. data/samples/po/zh_TW/{hellotk.po → hello_tk.po} +2 -2
  378. data/src/poparser.ry +1 -1
  379. data/test/README +1 -18
  380. data/test/Rakefile +14 -41
  381. data/test/locale/cr/LC_MESSAGES/plural.mo +0 -0
  382. data/test/locale/da/LC_MESSAGES/plural.mo +0 -0
  383. data/test/locale/da/LC_MESSAGES/plural_error.mo +0 -0
  384. data/test/locale/fr/LC_MESSAGES/plural_error.mo +0 -0
  385. data/test/locale/fr/LC_MESSAGES/test1.mo +0 -0
  386. data/test/locale/fr/LC_MESSAGES/test2.mo +0 -0
  387. data/test/locale/fr/LC_MESSAGES/test6.mo +0 -0
  388. data/test/locale/ir/LC_MESSAGES/plural.mo +0 -0
  389. data/test/locale/ja/LC_MESSAGES/npgettext.mo +0 -0
  390. data/test/locale/ja/LC_MESSAGES/{test_nsgettext.mo → nsgettext.mo} +0 -0
  391. data/test/locale/ja/LC_MESSAGES/{test_pgettext.mo → pgettext.mo} +0 -0
  392. data/test/locale/ja/LC_MESSAGES/plural_error.mo +0 -0
  393. data/test/locale/ja/LC_MESSAGES/{test_rubyparser.mo → rubyparser.mo} +0 -0
  394. data/test/locale/ja/LC_MESSAGES/{test_sgettext.mo → sgettext.mo} +0 -0
  395. data/test/locale/ja/LC_MESSAGES/test2.mo +0 -0
  396. data/test/locale/la/LC_MESSAGES/plural.mo +0 -0
  397. data/test/locale/la/LC_MESSAGES/plural_error.mo +0 -0
  398. data/test/locale/li/LC_MESSAGES/plural.mo +0 -0
  399. data/test/locale/po/LC_MESSAGES/plural.mo +0 -0
  400. data/test/locale/sl/LC_MESSAGES/plural.mo +0 -0
  401. data/test/po/fr/test1.po +3 -3
  402. data/test/po/fr/test6.po +1 -1
  403. data/test/po/ja/{test_npgettext.po → npgettext.po} +2 -2
  404. data/test/po/ja/{test_nsgettext.po → nsgettext.po} +8 -8
  405. data/test/po/ja/{test_pgettext.po → pgettext.po} +2 -2
  406. data/test/po/ja/{test_rubyparser.po → rubyparser.po} +0 -0
  407. data/test/po/ja/{test_sgettext.po → sgettext.po} +8 -8
  408. data/test/po/ja/test1.po +2 -2
  409. data/test/test_class_info.rb +80 -0
  410. data/test/test_gettext.rb +118 -257
  411. data/test/test_locale_path.rb +37 -0
  412. data/test/test_parser.rb +6 -105
  413. data/test/test_string.rb +1 -2
  414. data/test/test_textdomain_bind.rb +37 -0
  415. data/test/test_textdomain_multi.rb +69 -0
  416. data/test/test_textdomain_toplevel.rb +42 -0
  417. data/test/test_thread.rb +39 -0
  418. data/test/testlib/N_.rb +1 -1
  419. data/test/testlib/erb.rhtml +1 -1
  420. data/test/testlib/erb.rxml +1 -1
  421. data/test/testlib/gettext.rb +1 -1
  422. data/test/testlib/helper.rb +11 -0
  423. data/test/testlib/multi_textdomain.rb +119 -0
  424. data/test/testlib/ngettext.rb +1 -1
  425. data/test/testlib/npgettext.rb +1 -3
  426. data/test/testlib/nsgettext.rb +1 -3
  427. data/test/testlib/pgettext.rb +1 -3
  428. data/test/testlib/sgettext.rb +1 -3
  429. data/test/testlib/{testlib1.rb → simple.rb} +3 -4
  430. data/{samples/rails/public/favicon.ico → test/tools/files/app.pot} +0 -0
  431. data/test/{rails/public/favicon.ico → tools/files/de/app.po} +0 -0
  432. data/test/tools/files/en/app.po +0 -0
  433. data/test/tools/files/en/test.po +21 -0
  434. data/test/tools/files/simple_1.po +2 -0
  435. data/test/tools/files/simple_2.po +2 -0
  436. data/test/tools/files/simple_translation.rb +1 -0
  437. data/test/tools/files/version.po +7 -0
  438. data/test/tools/test.pot +21 -0
  439. data/test/tools/test_tools.rb +61 -0
  440. metadata +224 -853
  441. data/README +0 -177
  442. data/data/locale/bg/LC_MESSAGES/rails.mo +0 -0
  443. data/data/locale/bs/LC_MESSAGES/rails.mo +0 -0
  444. data/data/locale/ca/LC_MESSAGES/rails.mo +0 -0
  445. data/data/locale/cs/LC_MESSAGES/rails.mo +0 -0
  446. data/data/locale/de/LC_MESSAGES/rails.mo +0 -0
  447. data/data/locale/el/LC_MESSAGES/rails.mo +0 -0
  448. data/data/locale/eo/LC_MESSAGES/rails.mo +0 -0
  449. data/data/locale/es/LC_MESSAGES/rails.mo +0 -0
  450. data/data/locale/et/LC_MESSAGES/rails.mo +0 -0
  451. data/data/locale/fr/LC_MESSAGES/rails.mo +0 -0
  452. data/data/locale/hr/LC_MESSAGES/rails.mo +0 -0
  453. data/data/locale/hu/LC_MESSAGES/rails.mo +0 -0
  454. data/data/locale/it/LC_MESSAGES/rails.mo +0 -0
  455. data/data/locale/ja/LC_MESSAGES/rails.mo +0 -0
  456. data/data/locale/ko/LC_MESSAGES/rails.mo +0 -0
  457. data/data/locale/lv/LC_MESSAGES/rails.mo +0 -0
  458. data/data/locale/nb/LC_MESSAGES/rails.mo +0 -0
  459. data/data/locale/nl/LC_MESSAGES/rails.mo +0 -0
  460. data/data/locale/pt_BR/LC_MESSAGES/rails.mo +0 -0
  461. data/data/locale/ru/LC_MESSAGES/rails.mo +0 -0
  462. data/data/locale/sr/LC_MESSAGES/rails.mo +0 -0
  463. data/data/locale/ua/LC_MESSAGES/rails.mo +0 -0
  464. data/data/locale/vi/LC_MESSAGES/rails.mo +0 -0
  465. data/data/locale/zh/LC_MESSAGES/rails.mo +0 -0
  466. data/data/locale/zh_TW/LC_MESSAGES/rails.mo +0 -0
  467. data/doc/classes/ActionView/Helpers/FormBuilder.html +0 -154
  468. data/doc/classes/ActionView/TemplateFinder.html +0 -152
  469. data/doc/classes/ActiveRecord/Base.html +0 -360
  470. data/doc/classes/ActiveRecord/ConnectionAdapters/Column.html +0 -182
  471. data/doc/classes/ActiveRecord/Migration.html +0 -118
  472. data/doc/classes/GetText.html +0 -2003
  473. data/doc/classes/GetText/ActiveRecordParser.html +0 -236
  474. data/doc/classes/GetText/Container.html +0 -119
  475. data/doc/classes/GetText/ErbContainer.html +0 -223
  476. data/doc/classes/GetText/ErbParser.html +0 -156
  477. data/doc/classes/GetText/GladeParser.html +0 -133
  478. data/doc/classes/GetText/NoboundTextDomainError.html +0 -119
  479. data/doc/classes/GetText/PoParser.html +0 -169
  480. data/doc/classes/GetText/Rails.html +0 -293
  481. data/doc/classes/GetText/RubyParser.html +0 -133
  482. data/doc/classes/GetText/TextDomain.html +0 -572
  483. data/doc/classes/GetText/TextDomainManager.html +0 -443
  484. data/doc/classes/Iconv.html +0 -257
  485. data/doc/classes/Iconv/Failure.html +0 -105
  486. data/doc/classes/Iconv/IllegalSequence.html +0 -118
  487. data/doc/classes/Iconv/InvalidCharacter.html +0 -118
  488. data/doc/classes/Iconv/InvalidEncoding.html +0 -118
  489. data/doc/classes/Locale.html +0 -840
  490. data/doc/classes/Locale/Object.html +0 -803
  491. data/doc/classes/Locale/SystemBase.html +0 -271
  492. data/doc/classes/Locale/SystemCGI.html +0 -312
  493. data/doc/classes/Locale/SystemJRuby.html +0 -112
  494. data/doc/classes/Locale/SystemPosix.html +0 -163
  495. data/doc/classes/Locale/SystemWin32.html +0 -167
  496. data/doc/classes/Locale/SystemWin32Table.html +0 -123
  497. data/doc/classes/MOFile.html +0 -695
  498. data/doc/classes/MOFile/HeaderRev1.html +0 -150
  499. data/doc/classes/MOFile/InvalidFormat.html +0 -111
  500. data/doc/classes/Module.html +0 -158
  501. data/doc/classes/String.html +0 -225
  502. data/doc/created.rid +0 -1
  503. data/doc/files/ChangeLog.html +0 -2623
  504. data/doc/files/README.html +0 -531
  505. data/doc/files/lib/gettext/active_record_rb.html +0 -110
  506. data/doc/files/lib/gettext/cgi_rb.html +0 -110
  507. data/doc/files/lib/gettext/container_rb.html +0 -108
  508. data/doc/files/lib/gettext/erb_rb.html +0 -109
  509. data/doc/files/lib/gettext/iconv_rb.html +0 -109
  510. data/doc/files/lib/gettext/mo_rb.html +0 -109
  511. data/doc/files/lib/gettext/parser/active_record_rb.html +0 -119
  512. data/doc/files/lib/gettext/parser/erb_rb.html +0 -109
  513. data/doc/files/lib/gettext/parser/glade_rb.html +0 -109
  514. data/doc/files/lib/gettext/parser/ruby_rb.html +0 -110
  515. data/doc/files/lib/gettext/poparser_rb.html +0 -108
  516. data/doc/files/lib/gettext/rails_compat_rb.html +0 -108
  517. data/doc/files/lib/gettext/rails_rb.html +0 -112
  518. data/doc/files/lib/gettext/rgettext_rb.html +0 -110
  519. data/doc/files/lib/gettext/rmsgfmt_rb.html +0 -113
  520. data/doc/files/lib/gettext/rmsgmerge_rb.html +0 -112
  521. data/doc/files/lib/gettext/string_rb.html +0 -101
  522. data/doc/files/lib/gettext/textdomain_rb.html +0 -109
  523. data/doc/files/lib/gettext/textdomainmanager_rb.html +0 -109
  524. data/doc/files/lib/gettext/utils_rb.html +0 -111
  525. data/doc/files/lib/gettext/version_rb.html +0 -101
  526. data/doc/files/lib/gettext_rb.html +0 -113
  527. data/doc/files/lib/locale/base_rb.html +0 -101
  528. data/doc/files/lib/locale/cgi_rb.html +0 -108
  529. data/doc/files/lib/locale/jruby_rb.html +0 -110
  530. data/doc/files/lib/locale/object_rb.html +0 -101
  531. data/doc/files/lib/locale/posix_rb.html +0 -108
  532. data/doc/files/lib/locale/win32_rb.html +0 -110
  533. data/doc/files/lib/locale/win32_table_rb.html +0 -101
  534. data/doc/files/lib/locale_rb.html +0 -111
  535. data/doc/fr_class_index.html +0 -61
  536. data/doc/fr_file_index.html +0 -58
  537. data/doc/fr_method_index.html +0 -163
  538. data/doc/index.html +0 -24
  539. data/doc/rdoc-style.css +0 -208
  540. data/lib/gettext/active_record.rb +0 -357
  541. data/lib/gettext/container.rb +0 -19
  542. data/lib/gettext/erb.rb +0 -56
  543. data/lib/gettext/mo.rb +0 -320
  544. data/lib/gettext/parser/active_record.rb +0 -184
  545. data/lib/gettext/rails.rb +0 -547
  546. data/lib/gettext/rails_compat.rb +0 -16
  547. data/lib/gettext/textdomainmanager.rb +0 -103
  548. data/lib/locale.rb +0 -183
  549. data/lib/locale/base.rb +0 -60
  550. data/lib/locale/cgi.rb +0 -103
  551. data/lib/locale/jruby.rb +0 -36
  552. data/lib/locale/object.rb +0 -237
  553. data/lib/locale/posix.rb +0 -36
  554. data/lib/locale/win32.rb +0 -49
  555. data/lib/locale/win32_table.rb +0 -235
  556. data/po/bg/rails.po +0 -169
  557. data/po/bs/rails.po +0 -185
  558. data/po/ca/rails.po +0 -170
  559. data/po/cs/rails.po +0 -189
  560. data/po/el/rails.po +0 -169
  561. data/po/eo/rails.po +0 -170
  562. data/po/es/rails.po +0 -170
  563. data/po/et/rails.po +0 -170
  564. data/po/fr/rails.po +0 -174
  565. data/po/hr/rails.po +0 -186
  566. data/po/hu/rails.po +0 -170
  567. data/po/it/rails.po +0 -176
  568. data/po/ja/rails.po +0 -170
  569. data/po/ko/rails.po +0 -174
  570. data/po/lv/rails.po +0 -175
  571. data/po/nb/rails.po +0 -171
  572. data/po/nl/rails.po +0 -178
  573. data/po/pt_BR/rails.po +0 -171
  574. data/po/rails.pot +0 -170
  575. data/po/ru/rails.po +0 -178
  576. data/po/sr/rails.po +0 -178
  577. data/po/ua/rails.po +0 -184
  578. data/po/vi/rails.po +0 -170
  579. data/po/zh/rails.po +0 -166
  580. data/po/zh_TW/rails.po +0 -166
  581. data/post-setup.rb +0 -17
  582. data/pre-setup.rb +0 -20
  583. data/samples/hello_textdomain.rb +0 -21
  584. data/samples/hellogtk.rb +0 -27
  585. data/samples/rails/README +0 -73
  586. data/samples/rails/Rakefile +0 -10
  587. data/samples/rails/app/controllers/application.rb +0 -40
  588. data/samples/rails/app/controllers/articles_controller.rb +0 -96
  589. data/samples/rails/app/helpers/application_helper.rb +0 -3
  590. data/samples/rails/app/helpers/articles_helper.rb +0 -60
  591. data/samples/rails/app/models/article.rb +0 -16
  592. data/samples/rails/app/views/articles/edit.html.erb +0 -21
  593. data/samples/rails/app/views/articles/index.html.erb +0 -17
  594. data/samples/rails/app/views/articles/new.html.erb +0 -19
  595. data/samples/rails/app/views/articles/show.html.erb +0 -6
  596. data/samples/rails/app/views/layouts/articles.html.erb +0 -26
  597. data/samples/rails/config/boot.rb +0 -109
  598. data/samples/rails/config/database.yml +0 -47
  599. data/samples/rails/config/environment.rb +0 -60
  600. data/samples/rails/config/environments/development.rb +0 -18
  601. data/samples/rails/config/environments/production.rb +0 -18
  602. data/samples/rails/config/environments/test.rb +0 -22
  603. data/samples/rails/config/initializers/inflections.rb +0 -10
  604. data/samples/rails/config/initializers/mime_types.rb +0 -5
  605. data/samples/rails/config/routes.rb +0 -38
  606. data/samples/rails/db/migrate/001_create_articles.rb +0 -14
  607. data/samples/rails/db/schema.rb +0 -20
  608. data/samples/rails/lib/tasks/gettext.rake +0 -16
  609. data/samples/rails/locale/bg/LC_MESSAGES/blog.mo +0 -0
  610. data/samples/rails/locale/bs/LC_MESSAGES/blog.mo +0 -0
  611. data/samples/rails/locale/ca/LC_MESSAGES/blog.mo +0 -0
  612. data/samples/rails/locale/cs/LC_MESSAGES/blog.mo +0 -0
  613. data/samples/rails/locale/de/LC_MESSAGES/blog.mo +0 -0
  614. data/samples/rails/locale/el/LC_MESSAGES/blog.mo +0 -0
  615. data/samples/rails/locale/en/LC_MESSAGES/blog.mo +0 -0
  616. data/samples/rails/locale/eo/LC_MESSAGES/blog.mo +0 -0
  617. data/samples/rails/locale/es/LC_MESSAGES/blog.mo +0 -0
  618. data/samples/rails/locale/fr/LC_MESSAGES/blog.mo +0 -0
  619. data/samples/rails/locale/hr/LC_MESSAGES/blog.mo +0 -0
  620. data/samples/rails/locale/hu/LC_MESSAGES/blog.mo +0 -0
  621. data/samples/rails/locale/it/LC_MESSAGES/blog.mo +0 -0
  622. data/samples/rails/locale/ja/LC_MESSAGES/blog.mo +0 -0
  623. data/samples/rails/locale/ko/LC_MESSAGES/blog.mo +0 -0
  624. data/samples/rails/locale/lv/LC_MESSAGES/blog.mo +0 -0
  625. data/samples/rails/locale/nb/LC_MESSAGES/blog.mo +0 -0
  626. data/samples/rails/locale/nl/LC_MESSAGES/blog.mo +0 -0
  627. data/samples/rails/locale/pt_BR/LC_MESSAGES/blog.mo +0 -0
  628. data/samples/rails/locale/ru/LC_MESSAGES/blog.mo +0 -0
  629. data/samples/rails/locale/sr/LC_MESSAGES/blog.mo +0 -0
  630. data/samples/rails/locale/ua/LC_MESSAGES/blog.mo +0 -0
  631. data/samples/rails/locale/vi/LC_MESSAGES/blog.mo +0 -0
  632. data/samples/rails/locale/zh/LC_MESSAGES/blog.mo +0 -0
  633. data/samples/rails/locale/zh_TW/LC_MESSAGES/blog.mo +0 -0
  634. data/samples/rails/po/bg/blog.po +0 -101
  635. data/samples/rails/po/blog.pot +0 -102
  636. data/samples/rails/po/bs/blog.po +0 -103
  637. data/samples/rails/po/ca/blog.po +0 -101
  638. data/samples/rails/po/cs/blog.po +0 -104
  639. data/samples/rails/po/de/blog.po +0 -104
  640. data/samples/rails/po/el/blog.po +0 -102
  641. data/samples/rails/po/en/blog.po +0 -103
  642. data/samples/rails/po/eo/blog.po +0 -102
  643. data/samples/rails/po/es/blog.po +0 -101
  644. data/samples/rails/po/fr/blog.po +0 -102
  645. data/samples/rails/po/hr/blog.po +0 -102
  646. data/samples/rails/po/hu/blog.po +0 -101
  647. data/samples/rails/po/it/blog.po +0 -102
  648. data/samples/rails/po/ja/blog.po +0 -101
  649. data/samples/rails/po/ko/blog.po +0 -102
  650. data/samples/rails/po/lv/blog.po +0 -103
  651. data/samples/rails/po/nb/blog.po +0 -102
  652. data/samples/rails/po/nl/blog.po +0 -102
  653. data/samples/rails/po/pt_BR/blog.po +0 -102
  654. data/samples/rails/po/ru/blog.po +0 -102
  655. data/samples/rails/po/sr/blog.po +0 -103
  656. data/samples/rails/po/ua/blog.po +0 -105
  657. data/samples/rails/po/vi/blog.po +0 -102
  658. data/samples/rails/po/zh/blog.po +0 -101
  659. data/samples/rails/po/zh_TW/blog.po +0 -103
  660. data/samples/rails/public/404.html +0 -30
  661. data/samples/rails/public/422.html +0 -30
  662. data/samples/rails/public/500.html +0 -30
  663. data/samples/rails/public/dispatch.cgi +0 -10
  664. data/samples/rails/public/dispatch.fcgi +0 -24
  665. data/samples/rails/public/dispatch.rb +0 -10
  666. data/samples/rails/public/images/rails.png +0 -0
  667. data/samples/rails/public/index.html +0 -277
  668. data/samples/rails/public/javascripts/application.js +0 -2
  669. data/samples/rails/public/javascripts/controls.js +0 -963
  670. data/samples/rails/public/javascripts/dragdrop.js +0 -972
  671. data/samples/rails/public/javascripts/effects.js +0 -1120
  672. data/samples/rails/public/javascripts/prototype.js +0 -4225
  673. data/samples/rails/public/robots.txt +0 -1
  674. data/samples/rails/public/stylesheets/blog.css +0 -136
  675. data/samples/rails/public/stylesheets/scaffold.css +0 -74
  676. data/samples/rails/script/about +0 -3
  677. data/samples/rails/script/breakpointer +0 -3
  678. data/samples/rails/script/console +0 -3
  679. data/samples/rails/script/destroy +0 -3
  680. data/samples/rails/script/generate +0 -3
  681. data/samples/rails/script/performance/benchmarker +0 -3
  682. data/samples/rails/script/performance/profiler +0 -3
  683. data/samples/rails/script/plugin +0 -3
  684. data/samples/rails/script/process/reaper +0 -3
  685. data/samples/rails/script/process/spawner +0 -3
  686. data/samples/rails/script/process/spinner +0 -3
  687. data/samples/rails/script/runner +0 -3
  688. data/samples/rails/script/server +0 -3
  689. data/samples/rails/test/fixtures/articles.yml +0 -5
  690. data/samples/rails/test/functional/articles_controller_test.rb +0 -51
  691. data/samples/rails/test/test_helper.rb +0 -38
  692. data/samples/rails/test/unit/article_test.rb +0 -7
  693. data/samples/rails/vendor/plugins/gettext/README +0 -17
  694. data/samples/rails/vendor/plugins/gettext/Rakefile +0 -17
  695. data/samples/rails/vendor/plugins/gettext/init.rb +0 -21
  696. data/samples/rails/vendor/plugins/gettext/lib/gettext_plugin.rb +0 -33
  697. data/samples/rails/vendor/plugins/gettext/locale/bg/LC_MESSAGES/gettext_plugin.mo +0 -0
  698. data/samples/rails/vendor/plugins/gettext/locale/bs/LC_MESSAGES/gettext_plugin.mo +0 -0
  699. data/samples/rails/vendor/plugins/gettext/locale/ca/LC_MESSAGES/gettext_plugin.mo +0 -0
  700. data/samples/rails/vendor/plugins/gettext/locale/cs/LC_MESSAGES/gettext_plugin.mo +0 -0
  701. data/samples/rails/vendor/plugins/gettext/locale/de/LC_MESSAGES/gettext_plugin.mo +0 -0
  702. data/samples/rails/vendor/plugins/gettext/locale/el/LC_MESSAGES/gettext_plugin.mo +0 -0
  703. data/samples/rails/vendor/plugins/gettext/locale/eo/LC_MESSAGES/gettext_plugin.mo +0 -0
  704. data/samples/rails/vendor/plugins/gettext/locale/es/LC_MESSAGES/gettext_plugin.mo +0 -0
  705. data/samples/rails/vendor/plugins/gettext/locale/fr/LC_MESSAGES/gettext_plugin.mo +0 -0
  706. data/samples/rails/vendor/plugins/gettext/locale/hr/LC_MESSAGES/gettext_plugin.mo +0 -0
  707. data/samples/rails/vendor/plugins/gettext/locale/hu/LC_MESSAGES/gettext_plugin.mo +0 -0
  708. data/samples/rails/vendor/plugins/gettext/locale/it/LC_MESSAGES/gettext_plugin.mo +0 -0
  709. data/samples/rails/vendor/plugins/gettext/locale/ja/LC_MESSAGES/gettext_plugin.mo +0 -0
  710. data/samples/rails/vendor/plugins/gettext/locale/ko/LC_MESSAGES/gettext_plugin.mo +0 -0
  711. data/samples/rails/vendor/plugins/gettext/locale/lv/LC_MESSAGES/gettext_plugin.mo +0 -0
  712. data/samples/rails/vendor/plugins/gettext/locale/nb/LC_MESSAGES/gettext_plugin.mo +0 -0
  713. data/samples/rails/vendor/plugins/gettext/locale/nl/LC_MESSAGES/gettext_plugin.mo +0 -0
  714. data/samples/rails/vendor/plugins/gettext/locale/pt_BR/LC_MESSAGES/gettext_plugin.mo +0 -0
  715. data/samples/rails/vendor/plugins/gettext/locale/ru/LC_MESSAGES/gettext_plugin.mo +0 -0
  716. data/samples/rails/vendor/plugins/gettext/locale/sr/LC_MESSAGES/gettext_plugin.mo +0 -0
  717. data/samples/rails/vendor/plugins/gettext/locale/ua/LC_MESSAGES/gettext_plugin.mo +0 -0
  718. data/samples/rails/vendor/plugins/gettext/locale/vi/LC_MESSAGES/gettext_plugin.mo +0 -0
  719. data/samples/rails/vendor/plugins/gettext/locale/zh/LC_MESSAGES/gettext_plugin.mo +0 -0
  720. data/samples/rails/vendor/plugins/gettext/locale/zh_TW/LC_MESSAGES/gettext_plugin.mo +0 -0
  721. data/samples/rails/vendor/plugins/gettext/po/bg/gettext_plugin.po +0 -27
  722. data/samples/rails/vendor/plugins/gettext/po/bs/gettext_plugin.po +0 -27
  723. data/samples/rails/vendor/plugins/gettext/po/ca/gettext_plugin.po +0 -27
  724. data/samples/rails/vendor/plugins/gettext/po/cs/gettext_plugin.po +0 -29
  725. data/samples/rails/vendor/plugins/gettext/po/de/gettext_plugin.po +0 -29
  726. data/samples/rails/vendor/plugins/gettext/po/el/gettext_plugin.po +0 -27
  727. data/samples/rails/vendor/plugins/gettext/po/eo/gettext_plugin.po +0 -28
  728. data/samples/rails/vendor/plugins/gettext/po/es/gettext_plugin.po +0 -28
  729. data/samples/rails/vendor/plugins/gettext/po/fr/gettext_plugin.po +0 -27
  730. data/samples/rails/vendor/plugins/gettext/po/gettext_plugin.pot +0 -28
  731. data/samples/rails/vendor/plugins/gettext/po/hr/gettext_plugin.po +0 -27
  732. data/samples/rails/vendor/plugins/gettext/po/hu/gettext_plugin.po +0 -27
  733. data/samples/rails/vendor/plugins/gettext/po/it/gettext_plugin.po +0 -27
  734. data/samples/rails/vendor/plugins/gettext/po/ja/gettext_plugin.po +0 -28
  735. data/samples/rails/vendor/plugins/gettext/po/ko/gettext_plugin.po +0 -27
  736. data/samples/rails/vendor/plugins/gettext/po/lv/gettext_plugin.po +0 -28
  737. data/samples/rails/vendor/plugins/gettext/po/nb/gettext_plugin.po +0 -29
  738. data/samples/rails/vendor/plugins/gettext/po/nl/gettext_plugin.po +0 -28
  739. data/samples/rails/vendor/plugins/gettext/po/pt_BR/gettext_plugin.po +0 -27
  740. data/samples/rails/vendor/plugins/gettext/po/ru/gettext_plugin.po +0 -25
  741. data/samples/rails/vendor/plugins/gettext/po/sr/gettext_plugin.po +0 -28
  742. data/samples/rails/vendor/plugins/gettext/po/ua/gettext_plugin.po +0 -30
  743. data/samples/rails/vendor/plugins/gettext/po/vi/gettext_plugin.po +0 -27
  744. data/samples/rails/vendor/plugins/gettext/po/zh/gettext_plugin.po +0 -27
  745. data/samples/rails/vendor/plugins/gettext/po/zh_TW/gettext_plugin.po +0 -29
  746. data/setup.rb +0 -1585
  747. data/test/benchmark.rb +0 -28
  748. data/test/db/mysql.drop.sql +0 -5
  749. data/test/db/mysql.sql +0 -57
  750. data/test/fixtures/book.rb +0 -3
  751. data/test/fixtures/developer.rb +0 -5
  752. data/test/fixtures/developers.yml +0 -21
  753. data/test/fixtures/inept_wizard.rb +0 -3
  754. data/test/fixtures/people.yml +0 -6
  755. data/test/fixtures/reply.rb +0 -40
  756. data/test/fixtures/topic.rb +0 -68
  757. data/test/fixtures/topics.yml +0 -22
  758. data/test/fixtures/user.rb +0 -3
  759. data/test/fixtures/wizard.rb +0 -5
  760. data/test/locale/ja/LC_MESSAGES/active_record.mo +0 -0
  761. data/test/locale/ja/LC_MESSAGES/test_npgettext.mo +0 -0
  762. data/test/po/active_record.pot +0 -393
  763. data/test/po/ja/active_record.po +0 -392
  764. data/test/rails/README +0 -5
  765. data/test/rails/Rakefile +0 -36
  766. data/test/rails/app/controllers/application.rb +0 -8
  767. data/test/rails/app/controllers/articles_controller.rb +0 -61
  768. data/test/rails/app/controllers/mailer_controller.rb +0 -19
  769. data/test/rails/app/controllers/users_controller.rb +0 -11
  770. data/test/rails/app/helpers/application_helper.rb +0 -3
  771. data/test/rails/app/helpers/articles_helper.rb +0 -2
  772. data/test/rails/app/helpers/mailer_helper.rb +0 -2
  773. data/test/rails/app/models/article.rb +0 -5
  774. data/test/rails/app/models/mailer.rb +0 -38
  775. data/test/rails/app/models/user.rb +0 -4
  776. data/test/rails/app/views/articles/_form.html.erb +0 -13
  777. data/test/rails/app/views/articles/_form_fr.html.erb +0 -1
  778. data/test/rails/app/views/articles/active_form_error.html.erb +0 -1
  779. data/test/rails/app/views/articles/change_title_error_messages_for.html.erb +0 -21
  780. data/test/rails/app/views/articles/edit.html.erb +0 -9
  781. data/test/rails/app/views/articles/list.html.erb +0 -27
  782. data/test/rails/app/views/articles/list_fr.html.erb +0 -1
  783. data/test/rails/app/views/articles/multi_error_messages_for.html.erb +0 -19
  784. data/test/rails/app/views/articles/new.html.erb +0 -8
  785. data/test/rails/app/views/articles/show.html.erb +0 -29
  786. data/test/rails/app/views/layouts/application.html.erb +0 -14
  787. data/test/rails/app/views/layouts/mailer.html.erb +0 -20
  788. data/test/rails/app/views/layouts/users.html.erb +0 -13
  789. data/test/rails/app/views/mailer/coverpage.rhtml +0 -6
  790. data/test/rails/app/views/mailer/coverpage_fr.rhtml +0 -6
  791. data/test/rails/app/views/mailer/singlepart.rhtml +0 -3
  792. data/test/rails/app/views/mailer/singlepart_fr.rhtml +0 -3
  793. data/test/rails/app/views/users/custom_error_message.html.erb +0 -13
  794. data/test/rails/app/views/users/custom_error_message_fr.html.erb +0 -13
  795. data/test/rails/config/boot.rb +0 -109
  796. data/test/rails/config/database.yml +0 -36
  797. data/test/rails/config/environment.rb +0 -70
  798. data/test/rails/config/environments/development.rb +0 -18
  799. data/test/rails/config/environments/production.rb +0 -18
  800. data/test/rails/config/environments/test.rb +0 -19
  801. data/test/rails/config/routes.rb +0 -23
  802. data/test/rails/db/schema.rb +0 -34
  803. data/test/rails/po/ja/rails_test.po +0 -149
  804. data/test/rails/po/rails_test.pot +0 -149
  805. data/test/rails/public/404.html +0 -30
  806. data/test/rails/public/500.html +0 -30
  807. data/test/rails/public/dispatch.cgi +0 -10
  808. data/test/rails/public/dispatch.fcgi +0 -24
  809. data/test/rails/public/dispatch.rb +0 -10
  810. data/test/rails/public/images/rails.png +0 -0
  811. data/test/rails/public/index.html +0 -277
  812. data/test/rails/public/javascripts/application.js +0 -2
  813. data/test/rails/public/javascripts/controls.js +0 -963
  814. data/test/rails/public/javascripts/dragdrop.js +0 -972
  815. data/test/rails/public/javascripts/effects.js +0 -1120
  816. data/test/rails/public/javascripts/prototype.js +0 -4225
  817. data/test/rails/public/robots.txt +0 -1
  818. data/test/rails/public/stylesheets/scaffold.css +0 -74
  819. data/test/rails/script/about +0 -3
  820. data/test/rails/script/breakpointer +0 -3
  821. data/test/rails/script/console +0 -3
  822. data/test/rails/script/destroy +0 -3
  823. data/test/rails/script/generate +0 -3
  824. data/test/rails/script/performance/benchmarker +0 -3
  825. data/test/rails/script/performance/profiler +0 -3
  826. data/test/rails/script/plugin +0 -3
  827. data/test/rails/script/process/inspector +0 -3
  828. data/test/rails/script/process/reaper +0 -3
  829. data/test/rails/script/process/spawner +0 -3
  830. data/test/rails/script/runner +0 -3
  831. data/test/rails/script/server +0 -3
  832. data/test/rails/test/fixtures/articles.yml +0 -11
  833. data/test/rails/test/fixtures/users.yml +0 -5
  834. data/test/rails/test/functional/articles_controller_test.rb +0 -119
  835. data/test/rails/test/functional/mailer_controller_test.rb +0 -95
  836. data/test/rails/test/functional/users_controller_test.rb +0 -65
  837. data/test/rails/test/integration/general_stories_test.rb +0 -58
  838. data/test/rails/test/result/en/create_error.html +0 -95
  839. data/test/rails/test/result/en/custom_error_message.html +0 -83
  840. data/test/rails/test/result/en/custom_error_message_with_plural.html +0 -83
  841. data/test/rails/test/result/en/list.html +0 -62
  842. data/test/rails/test/result/en/multi_error_messages_for.html +0 -153
  843. data/test/rails/test/result/en/multipart.html +0 -67
  844. data/test/rails/test/result/en/new.html +0 -95
  845. data/test/rails/test/result/en/show.html +0 -51
  846. data/test/rails/test/result/en/singlepart.html +0 -10
  847. data/test/rails/test/result/fr/custom_error_message.html +0 -83
  848. data/test/rails/test/result/fr/custom_error_message_with_plural.html +0 -83
  849. data/test/rails/test/result/fr/list.html +0 -15
  850. data/test/rails/test/result/fr/multipart.html +0 -67
  851. data/test/rails/test/result/fr/new.html +0 -23
  852. data/test/rails/test/result/fr/singlepart.html +0 -10
  853. data/test/rails/test/result/ja/create_error.html +0 -95
  854. data/test/rails/test/result/ja/custom_error_message.html +0 -83
  855. data/test/rails/test/result/ja/custom_error_message_with_plural.html +0 -83
  856. data/test/rails/test/result/ja/list.html +0 -62
  857. data/test/rails/test/result/ja/multi_error_messages_for.html +0 -153
  858. data/test/rails/test/result/ja/multipart.html +0 -67
  859. data/test/rails/test/result/ja/new.html +0 -95
  860. data/test/rails/test/result/ja/show.html +0 -51
  861. data/test/rails/test/result/ja/singlepart.html +0 -10
  862. data/test/rails/test/test_helper.rb +0 -28
  863. data/test/rails/test/unit/article_test.rb +0 -18
  864. data/test/test.bat +0 -2
  865. data/test/test.sh +0 -13
  866. data/test/test_active_record.rb +0 -2606
  867. data/test/test_cgi.rb +0 -91
  868. data/test/test_erb.rhtml +0 -15
  869. data/test/test_erb.rxml +0 -16
  870. data/test/test_gettext_toplevel.rb +0 -44
  871. data/test/test_gladeparser.glade +0 -183
  872. data/test/test_java.sh +0 -12
  873. data/test/test_locale.rb +0 -250
  874. data/test/test_multi_textdomain.rb +0 -49
  875. data/test/test_rails.rb +0 -45
  876. data/test/test_rails_caching.rb +0 -232
  877. data/test/testlib/testlib2.rb +0 -11
  878. data/test/testlib/testlib3.rb +0 -12
  879. data/test/testlib/testlib4.rb +0 -11
  880. data/test/testlib/testlib5.rb +0 -70
  881. data/test/testlib/testlib6.rb +0 -19
@@ -0,0 +1,224 @@
1
+ =begin
2
+ gettext/textdomain_manager - GetText::TextDomainManager class
3
+
4
+ Copyright (C) 2009 Masao Mutoh
5
+
6
+ You may redistribute it and/or modify it under the same
7
+ license terms as Ruby.
8
+
9
+ =end
10
+
11
+ require 'gettext/textdomain'
12
+ require 'gettext/class_info'
13
+ require 'locale/util/memoizable'
14
+
15
+ module GetText
16
+ class TextDomainManager
17
+ include Locale::Util::Memoizable
18
+
19
+ @@textdomain_pool = {}
20
+ @@textdomain_manager_pool = {}
21
+
22
+ @@output_charset = nil
23
+ @@gettext_classes = []
24
+
25
+ # Find textdomain by name
26
+ def self.textdomain_pool(domainname)
27
+ @@textdomain_pool[domainname]
28
+ end
29
+
30
+ # create or find a textdomain-manager for an given object/class
31
+ def self.get(obj)
32
+ klass = ClassInfo.normalize_class(obj)
33
+ manager = @@textdomain_manager_pool[klass]
34
+ return manager if manager
35
+ @@textdomain_manager_pool[klass] = TextDomainManager.new
36
+ end
37
+
38
+ # Set the value whether cache messages or not.
39
+ # true to cache messages, otherwise false.
40
+ #
41
+ # Default is true. If $DEBUG is false, messages are not checked even if
42
+ # this value is true.
43
+ def self.cached=(val)
44
+ TextDomain.cached = val
45
+ end
46
+
47
+ # Return the cached value.
48
+ def self.cached?
49
+ TextDomain.cached?
50
+ end
51
+
52
+ # Gets the output charset.
53
+ def self.output_charset
54
+ @@output_charset
55
+ end
56
+
57
+ # Sets the output charset.The program can have a output charset.
58
+ def self.output_charset=(charset)
59
+ @@output_charset = charset
60
+ @@textdomain_pool.each do |key, textdomain|
61
+ textdomain.output_charset = charset
62
+ end
63
+ end
64
+
65
+ # bind textdomain to the class.
66
+ def self.bind_to(klass, domainname, options = {})
67
+ warn "Bind the domain '#{domainname}' to '#{klass}'. " if $DEBUG
68
+
69
+ charset = options[:output_charset] || self.output_charset
70
+ textdomain = create_or_find_textdomain(domainname,options[:path],charset)
71
+
72
+ target_klass = ClassInfo.normalize_class(klass)
73
+ get(target_klass).add(textdomain, options[:supported_language_tags])
74
+ add_to_gettext_classes(target_klass)
75
+
76
+ textdomain
77
+ end
78
+
79
+ def self.each_textdomains(klass) #:nodoc:
80
+ ClassInfo.related_classes(klass, @@gettext_classes).each do |target|
81
+ msg = nil
82
+ get(target).textdomains.each do |textdomain|
83
+ yield textdomain
84
+ end
85
+ end
86
+ end
87
+
88
+ #
89
+ # Instance methods
90
+ #
91
+
92
+ # Returns the textdoman in the instance.
93
+ attr_reader :textdomains, :supported_language_tags
94
+
95
+ def initialize
96
+ @textdomains = []
97
+ @supported_language_tags = nil
98
+ end
99
+
100
+ def add(textdomain, supported_language_tags)
101
+ @textdomains.unshift(textdomain) unless @textdomains.include? textdomain
102
+ @supported_language_tags = supported_language_tags if supported_language_tags
103
+ end
104
+
105
+ # Translates msgid, but if there are no localized text,
106
+ # it returns a last part of msgid separeted "div" or whole of the msgid with no "div".
107
+ #
108
+ # * msgid: the message id.
109
+ # * div: separator or nil.
110
+ # * Returns: the localized text by msgid. If there are no localized text,
111
+ # it returns a last part of msgid separeted "div".
112
+ def translate_singluar_message(klass, msgid, div = '|')
113
+ lang = Locale.candidates(:supported_language_tags => @supported_language_tags,
114
+ :type => :posix)[0]
115
+ translate_singluar_message_to(lang, klass, msgid, div)
116
+ end
117
+
118
+ def translate_singluar_message_to(lang, klass, msgid, div = '|') #:nodoc:
119
+ msg = nil
120
+ # Find messages from related classes.
121
+ self.class.each_textdomains(klass) do |textdomain|
122
+ msg = textdomain.translate_singluar_message(lang, msgid)
123
+ break if msg
124
+ end
125
+
126
+ # If not found, return msgid.
127
+ msg ||= msgid
128
+ if div and msg == msgid
129
+ if index = msg.rindex(div)
130
+ msg = msg[(index + 1)..-1]
131
+ end
132
+ end
133
+ msg
134
+ end
135
+ memoize :translate_singluar_message_to unless $DEBUG
136
+
137
+ # This function is similar to the get_singluar_message function
138
+ # as it finds the message catalogs in the same way.
139
+ # But it takes two extra arguments for plural form.
140
+ # The msgid parameter must contain the singular form of the string to be converted.
141
+ # It is also used as the key for the search in the catalog.
142
+ # The msgid_plural parameter is the plural form.
143
+ # The parameter n is used to determine the plural form.
144
+ # If no message catalog is found msgid1 is returned if n == 1, otherwise msgid2.
145
+ # And if msgid includes "div", it returns a last part of msgid separeted "div".
146
+ #
147
+ # * msgid: the singular form with "div". (e.g. "Special|An apple", "An apple")
148
+ # * msgid_plural: the plural form. (e.g. "%{num} Apples")
149
+ # * n: a number used to determine the plural form.
150
+ # * div: the separator. Default is "|".
151
+ # * Returns: the localized text which key is msgid_plural if n is plural(follow plural-rule) or msgid.
152
+ # "plural-rule" is defined in po-file.
153
+ #
154
+ # or
155
+ #
156
+ # * [msgid, msgid_plural] : msgid and msgid_plural an Array
157
+ # * n: a number used to determine the plural form.
158
+ # * div: the separator. Default is "|".
159
+ def translate_plural_message(klass, arg1, arg2, arg3 = "|", arg4 = "|")
160
+ lang = Locale.candidates(:supported_language_tags => @supported_language_tags,
161
+ :type => :posix)[0]
162
+ translate_plural_message_to(lang, klass, arg1, arg2, arg3, arg4)
163
+ end
164
+
165
+ def translate_plural_message_to(lang, klass, arg1, arg2, arg3 = "|", arg4 = "|")
166
+ # parse arguments
167
+ if arg1.kind_of?(Array)
168
+ msgid = arg1[0]
169
+ msgid_plural = arg1[1]
170
+ n = arg2
171
+ if arg3 and arg3.kind_of? Numeric
172
+ raise ArgumentError, _("3rd parmeter is wrong: value = %{number}") % {:number => arg3}
173
+ end
174
+ div = arg3
175
+ else
176
+ msgid = arg1
177
+ msgid_plural = arg2
178
+ n = arg3
179
+ div = arg4
180
+ end
181
+
182
+ # Find messages from related classes.
183
+ msgs = nil
184
+ self.class.each_textdomains(klass) do |textdomain|
185
+ msgs = textdomain.translate_plural_message(lang, msgid, msgid_plural)
186
+ break if msgs
187
+ end
188
+
189
+ # If not found, return msgid.
190
+ msgs = [[msgid, msgid_plural], "n != 1"] unless msgs
191
+
192
+ msgstrs = msgs[0]
193
+ if div and msgstrs[0] == msgid and index = msgstrs[0].rindex(div)
194
+ msgstrs[0] = msgstrs[0][(index + 1)..-1]
195
+ end
196
+
197
+ # Return the singular or plural message.
198
+ plural = eval(msgs[1])
199
+ return msgstrs[plural] if plural.kind_of?(Numeric)
200
+ return plural ? msgstrs[1] : msgstrs[0]
201
+ end
202
+ memoize :translate_plural_message_to unless $DEBUG
203
+
204
+ # for testing.
205
+ def self.clear_all_textdomains
206
+ @@textdomain_pool = {}
207
+ @@textdomain_manager_pool = {}
208
+ @@gettext_classes = []
209
+ end
210
+
211
+ private
212
+
213
+ def self.add_to_gettext_classes(klass)
214
+ @@gettext_classes << klass unless @@gettext_classes.include? klass
215
+ end
216
+
217
+ def self.create_or_find_textdomain(name, path, charset)#:nodoc:
218
+ textdomain = @@textdomain_pool[name]
219
+ return textdomain if textdomain
220
+
221
+ @@textdomain_pool[name] = TextDomain.new(name, path, charset)
222
+ end
223
+ end
224
+ end
@@ -0,0 +1,195 @@
1
+ =begin
2
+ tools.rb - Utility functions
3
+
4
+ Copyright (C) 2005-2008 Masao Mutoh
5
+
6
+ You may redistribute it and/or modify it under the same
7
+ license terms as Ruby.
8
+ =end
9
+
10
+ require 'rbconfig'
11
+ if /mingw|mswin|mswin32/ =~ RUBY_PLATFORM
12
+ ENV['PATH'] = %w(bin lib).collect{|dir|
13
+ "#{Config::CONFIG["prefix"]}\\lib\\GTK\\#{dir};"
14
+ }.join('') + ENV['PATH']
15
+ end
16
+
17
+ require 'gettext/tools/rgettext'
18
+ require 'gettext/tools/rmsgfmt'
19
+ require 'gettext/mofile'
20
+ require 'fileutils'
21
+
22
+ module GetText
23
+ bindtextdomain "rgettext"
24
+
25
+ BOM_UTF8 = [0xef, 0xbb, 0xbf].pack("c3")
26
+
27
+ # Currently, GNU msgmerge doesn't accept BOM.
28
+ # This mesthod remove the UTF-8 BOM from the po-file.
29
+ def remove_bom(path) #:nodoc:
30
+ bom = IO.read(path, 3)
31
+ if bom == BOM_UTF8
32
+ data = IO.read(path)[3..-1]
33
+ File.open(path, "w") {|f| f.write(data)}
34
+ end
35
+ end
36
+
37
+ # Merges two Uniforum style .po files together.
38
+ #
39
+ # *Note* This function requires "msgmerge" tool included in GNU GetText. So you need to install GNU GetText.
40
+ #
41
+ # The def.po file is an existing PO file with translations which will be taken
42
+ # over to the newly created file as long as they still match; comments will be preserved,
43
+ # but extracted comments and file positions will be discarded.
44
+ #
45
+ # The ref.pot file is the last created PO file with up-to-date source references but
46
+ # old translations, or a PO Template file (generally created by rgettext);
47
+ # any translations or comments in the file will be discarded, however dot
48
+ # comments and file positions will be preserved. Where an exact match
49
+ # cannot be found, fuzzy matching is used to produce better results.
50
+ #
51
+ # Usually you don't need to call this function directly. Use GetText.update_pofiles instead.
52
+ #
53
+ # * defpo: a po-file. translations referring to old sources
54
+ # * refpo: a po-file. references to new sources
55
+ # * app_version: the application information which appears "Project-Id-Version: #{app_version}" in the pot/po-files.
56
+ # * Returns: self
57
+ def msgmerge(defpo, refpo, app_version, options={})
58
+ verbose = options.delete(:verbose)
59
+ puts "msgmerge called" if verbose
60
+ $stderr.print defpo + " "
61
+
62
+ content = merge_po_files(defpo,refpo,options.delete(:msgmerge),verbose)
63
+
64
+ if content.empty?
65
+ # report failure
66
+ failed_filename = refpo + "~"
67
+ FileUtils.cp(refpo, failed_filename)
68
+ $stderr.puts _("Failed to merge with %{defpo}") % {:defpo => defpo}
69
+ $stderr.puts _("New .pot was copied to %{failed_filename}") %{:failed_filename => failed_filename}
70
+ raise _("Check these po/pot-files. It may have syntax errors or something wrong.")
71
+ else
72
+ # update version and save merged data
73
+ content.sub!(/(Project-Id-Version\:).*$/, "\\1 #{app_version}\\n\"")
74
+ File.open(defpo, "w") {|f|f.write(content)}
75
+ end
76
+
77
+ self
78
+ end
79
+
80
+ # Creates mo-files using #{po_root}/#{lang}/*.po an put them to
81
+ # #{targetdir}/#{targetdir_rule}/.
82
+ #
83
+ # This is a convenience function of GetText.rmsgfmt for multiple target files.
84
+ # * options: options as a Hash.
85
+ # * verbose: true if verbose mode, otherwise false
86
+ # * po_root: the root directory of po-files.
87
+ # * mo_root: the target root directory where the mo-files are stored.
88
+ # * mo_path_rule: the target directory for each mo-files.
89
+ def create_mofiles(options = {})
90
+ options = {:po_root => "./po"}.merge(options)
91
+
92
+ Dir.glob(File.join(options[:po_root], "*/*.po")) do |po_file|
93
+ mo_file = mo_file_from_po_file(po_file,options)
94
+ $stderr.print %Q[#{po_file} -> #{mo_file} ... ] if options[:verbose]
95
+ FileUtils.mkdir_p(File.dirname(mo_file))
96
+ rmsgfmt(po_file, mo_file)
97
+ $stderr.puts "Done." if options[:verbose]
98
+ end
99
+ end
100
+
101
+
102
+ # At first, this creates the #{po_root}/#{domainname}.pot file using GetText.rgettext.
103
+ # In the second step, this updates(merges) the #{po_root}/#{domainname}.pot and all of the
104
+ # #{po_root}/#{lang}/#{domainname}.po files under "po_root" using "msgmerge".
105
+ #
106
+ # *Note* "msgmerge" tool is included in GNU GetText. So you need to install GNU GetText.
107
+ #
108
+ # See <HOWTO maintain po/mo files(http://www.yotabanana.com/hiki/ruby-gettext-howto-manage.html)> for more detals.
109
+ # * domainname: the textdomain name.
110
+ # * targetfiles: An Array of target files, that should be parsed for messages (See GetText.rgettext for more details).
111
+ # * app_version: the application information which appears "Project-Id-Version: #{app_version}" in the pot/po-files.
112
+ # * options: a hash with following possible settings
113
+ # :lang - update files only for one language - the language specified by this option
114
+ # :po_root - the root directory of po-files
115
+ # :msgmerge - an array with the options, passed through to the gnu msgmerge tool
116
+ # symbols are automatically translated to options with dashes,
117
+ # example: [:no_wrap, :no_fuzzy_matching, :sort_output] translated to '--no-fuzzy-matching --sort-output'
118
+ # :verbose - true to show verbose messages. default is false.
119
+ #
120
+ # Example: GetText.update_pofiles("myapp", Dir.glob("lib/*.rb"), "myapp 1.0.0", :verbose => true)
121
+ def update_pofiles(textdomain, files, app_version, options = {})
122
+ puts options.inspect if options[:verbose]
123
+
124
+ #write found messages to tmp.pot
125
+ temp_pot = "tmp.pot"
126
+ rgettext(files, temp_pot)
127
+
128
+ #merge tmp.pot and existing pot
129
+ po_root = options.delete(:po_root) || "po"
130
+ FileUtils.mkdir_p(po_root)
131
+ msgmerge("#{po_root}/#{textdomain}.pot", temp_pot, app_version, options.dup)
132
+
133
+ #update local po-files
134
+ only_one_language = options.delete(:lang)
135
+ if only_one_language
136
+ msgmerge("#{po_root}/#{only_one_language}/#{textdomain}.po", temp_pot, app_version, options.dup)
137
+ else
138
+ Dir.glob("#{po_root}/*/#{textdomain}.po") do |po_file|
139
+ msgmerge(po_file, temp_pot, app_version, options.dup)
140
+ end
141
+ end
142
+
143
+ File.delete(temp_pot)
144
+ end
145
+
146
+ private
147
+
148
+ # Merge 2 po files, using msgmerge
149
+ def merge_po_files(po_a,po_b,msgmerge_options=[],verbose=false)
150
+ return File.read(po_b) unless FileTest.exist? po_a
151
+
152
+ cmd = ENV["MSGMERGE_PATH"] || "msgmerge"
153
+ ensure_command_exists(cmd)
154
+
155
+ remove_bom(po_a)
156
+
157
+ cmd_params = array_to_cli_options(msgmerge_options)
158
+ to_run = "#{cmd} #{cmd_params} #{po_a} #{po_b}"
159
+ puts "\nrunning #{to_run}" if verbose
160
+ `#{to_run}`
161
+ end
162
+
163
+ # convert an array of String/Symbol to cli options
164
+ def array_to_cli_options(array)
165
+ [*array].map do |o|
166
+ o.kind_of?(Symbol) ? "--#{o}".gsub('_','-') : o.to_s
167
+ end.join(' ')
168
+ end
169
+
170
+ def ensure_command_exists(cmd)
171
+ `#{cmd} --help`
172
+ unless $? && $?.success?
173
+ raise _("`%{cmd}' can not be found. \nInstall GNU Gettext then set PATH or MSGMERGE_PATH correctly.") % {:cmd => cmd}
174
+ end
175
+ end
176
+
177
+ # where lies the mo file for a given po_file
178
+ # generare directory unless it exists
179
+ def mo_file_from_po_file(po_file,options)
180
+ options = {
181
+ :mo_root => "./data/locale",
182
+ :mo_path_rule => "%{lang}/LC_MESSAGES"
183
+ }.merge(options)
184
+
185
+ lang, textdomain = %r[/([^/]+?)/(.*)\.po].match(po_file[options[:po_root].size..-1]).to_a[1,2]
186
+
187
+ mo_dir_rule = File.join(options[:mo_root], options[:mo_path_rule])
188
+ mo_dir = mo_dir_rule % {:lang => lang}
189
+ File.join(mo_dir, "#{textdomain}.mo")
190
+ end
191
+ end
192
+
193
+ if __FILE__ == $0
194
+ GetText.update_pofiles("foo", ARGV, "foo 1.1.0")
195
+ end
@@ -2,11 +2,11 @@
2
2
  =begin
3
3
  rgettext.rb - Generate a .pot file.
4
4
 
5
- Copyright (C) 2003-2006 Masao Mutoh
5
+ Copyright (C) 2003-2009 Masao Mutoh
6
6
  Copyright (C) 2001,2002 Yasushi Shoji, Masao Mutoh
7
7
 
8
8
  Yasushi Shoji <yashi at atmark-techno.com>
9
- Masao Mutoh <mutoh at highway.ne.jp>
9
+ Masao Mutoh <mutomasa at gmail.com>
10
10
 
11
11
  You may redistribute it and/or modify it under the same
12
12
  license terms as Ruby.
@@ -32,16 +32,16 @@ module GetText
32
32
  [
33
33
  ["glade.rb", "GladeParser"],
34
34
  ["erb.rb", "ErbParser"],
35
- ["active_record.rb", "ActiveRecordParser"],
35
+ # ["active_record.rb", "ActiveRecordParser"],
36
36
  # ["ripper.rb", "RipperParser"],
37
37
  ["ruby.rb", "RubyParser"] # Default parser.
38
38
  ].each do |f, klass|
39
39
  begin
40
- require "gettext/parser/#{f}"
41
- @ex_parsers << GetText.const_get(klass)
40
+ require "gettext/parser/#{f}"
41
+ @ex_parsers << GetText.const_get(klass)
42
42
  rescue
43
- $stderr.puts _("'%{klass}' is ignored.") % {:klass => klass}
44
- $stderr.puts $! if $DEBUG
43
+ $stderr.puts _("'%{klass}' is ignored.") % {:klass => klass}
44
+ $stderr.puts $! if $DEBUG
45
45
  end
46
46
  end
47
47
 
@@ -73,7 +73,8 @@ module GetText
73
73
  sign = off <= 0 ? '-' : '+'
74
74
  time += sprintf('%s%02d%02d', sign, *(off.abs / 60).divmod(60))
75
75
 
76
- %Q[# SOME DESCRIPTIVE TITLE.
76
+ <<TITLE
77
+ # SOME DESCRIPTIVE TITLE.
77
78
  # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
78
79
  # This file is distributed under the same license as the PACKAGE package.
79
80
  # FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
@@ -89,42 +90,42 @@ msgstr ""
89
90
  "MIME-Version: 1.0\\n"
90
91
  "Content-Type: text/plain; charset=UTF-8\\n"
91
92
  "Content-Transfer-Encoding: 8bit\\n"
92
- "Plural-Forms: nplurals=INTEGER; plural=EXPRESSION;\\n"]
93
+ "Plural-Forms: nplurals=INTEGER; plural=EXPRESSION;\\n"
94
+ TITLE
93
95
  end
94
96
 
95
97
  def generate_pot(ary) # :nodoc:
96
98
  str = ""
97
- result = Array.new
98
99
  ary.each do |key|
99
- msgid = key.shift
100
- curr_pos = MAX_LINE_LEN
101
- key.each do |e|
102
- if curr_pos + e.size > MAX_LINE_LEN
103
- str << "\n#:"
104
- curr_pos = 3
105
- else
106
- curr_pos += (e.size + 1)
107
- end
108
- str << " " << e
109
- end
110
- msgid.gsub!(/"/, '\"')
111
- msgid.gsub!(/\r/, '')
112
- if msgid.include?("\004")
113
- msgctxt, msgid = msgid.split(/\004/)
114
- str << "\nmsgctxt \"" << msgctxt << "\"\n"
100
+ msgid = key.shift
101
+ curr_pos = MAX_LINE_LEN
102
+ key.each do |e|
103
+ if curr_pos + e.size > MAX_LINE_LEN
104
+ str << "\n#:"
105
+ curr_pos = 3
106
+ else
107
+ curr_pos += (e.size + 1)
108
+ end
109
+ str << " " << e
110
+ end
111
+ msgid.gsub!(/"/, '\"')
112
+ msgid.gsub!(/\r/, '')
113
+ if msgid.include?("\004")
114
+ msgctxt, msgid = msgid.split(/\004/)
115
+ str << "\nmsgctxt \"" << msgctxt << "\"\n"
115
116
  else
116
117
  str << "\n"
117
- end
118
- if msgid.include?("\000")
119
- ids = msgid.split(/\000/)
120
- str << "msgid \"" << ids[0] << "\"\n"
121
- str << "msgid_plural \"" << ids[1] << "\"\n"
122
- str << "msgstr[0] \"\"\n"
123
- str << "msgstr[1] \"\"\n"
124
- else
125
- str << "msgid \"" << msgid << "\"\n"
126
- str << "msgstr \"\"\n"
127
- end
118
+ end
119
+ if msgid.include?("\000")
120
+ ids = msgid.split(/\000/)
121
+ str << "msgid \"" << ids[0] << "\"\n"
122
+ str << "msgid_plural \"" << ids[1] << "\"\n"
123
+ str << "msgstr[0] \"\"\n"
124
+ str << "msgstr[1] \"\"\n"
125
+ else
126
+ str << "msgid \"" << msgid << "\"\n"
127
+ str << "msgstr \"\"\n"
128
+ end
128
129
  end
129
130
  str
130
131
  end
@@ -142,7 +143,7 @@ msgstr ""
142
143
  single_msg[0] != plural_msg[0])
143
144
  if single_msg[0] != key
144
145
  warn %Q[Warning: n_("#{plural_msg[0].gsub(/\000/, '", "')}") and n_("#{single_msg[0].gsub(/\000/, '", "')}") are duplicated. First msgid was used.]
145
- used_plural_msgs << single_msg[0]
146
+ used_plural_msgs << single_msg[0]
146
147
  end
147
148
 
148
149
  single_msg[1..-1].each do |line_info|
@@ -167,17 +168,17 @@ msgstr ""
167
168
  def parse(files) # :nodoc:
168
169
  ary = []
169
170
  files.each do |file|
170
- begin
171
- @ex_parsers.each do |klass|
172
- if klass.target?(file)
173
- ary = klass.parse(file, ary)
174
- break
175
- end
176
- end
177
- rescue
178
- puts "Error occurs in " + file
179
- raise
180
- end
171
+ begin
172
+ @ex_parsers.each do |klass|
173
+ if klass.target?(file)
174
+ ary = klass.parse(file, ary)
175
+ break
176
+ end
177
+ end
178
+ rescue
179
+ puts "Error occurs in " + file
180
+ raise
181
+ end
181
182
  end
182
183
  normalize(ary)
183
184
  end
@@ -193,33 +194,33 @@ msgstr ""
193
194
  opts.separator(_("Specific options:"))
194
195
 
195
196
  opts.on("-o", "--output=FILE", _("write output to specified file")) do |out|
196
- unless FileTest.exist? out
197
- output = File.new(File.expand_path(out), "w+")
198
- else
199
- $stderr.puts(_("File '%s' already exists.") % out)
200
- exit 1
201
- end
197
+ unless FileTest.exist? out
198
+ output = File.new(File.expand_path(out), "w+")
199
+ else
200
+ $stderr.puts(_("File '%s' already exists.") % out)
201
+ exit 1
202
+ end
202
203
  end
203
204
 
204
205
  opts.on("-r", "--require=library", _("require the library before executing rgettext")) do |out|
205
- require out
206
+ require out
206
207
  end
207
208
 
208
209
  opts.on("-d", "--debug", _("run in debugging mode")) do
209
- $DEBUG = true
210
+ $DEBUG = true
210
211
  end
211
212
 
212
213
  opts.on_tail("--version", _("display version information and exit")) do
213
- puts "#{$0} #{VERSION} (#{DATE})"
214
- puts "#{File.join(Config::CONFIG["bindir"], Config::CONFIG["RUBY_INSTALL_NAME"])} #{RUBY_VERSION} (#{RUBY_RELEASE_DATE}) [#{RUBY_PLATFORM}]"
215
- exit
214
+ puts "#{$0} #{VERSION} (#{DATE})"
215
+ puts "#{File.join(Config::CONFIG["bindir"], Config::CONFIG["RUBY_INSTALL_NAME"])} #{RUBY_VERSION} (#{RUBY_RELEASE_DATE}) [#{RUBY_PLATFORM}]"
216
+ exit
216
217
  end
217
218
 
218
219
  opts.parse!(ARGV)
219
220
 
220
221
  if ARGV.size == 0
221
- puts opts.help
222
- exit 1
222
+ puts opts.help
223
+ exit 1
223
224
  end
224
225
 
225
226
  [ARGV, output]
@@ -227,38 +228,34 @@ msgstr ""
227
228
 
228
229
  def run(targetfiles = nil, out = STDOUT) # :nodoc:
229
230
  if targetfiles.is_a? String
230
- targetfiles = [targetfiles]
231
+ targetfiles = [targetfiles]
231
232
  elsif ! targetfiles
232
- targetfiles, out = check_options
233
+ targetfiles, out = check_options
233
234
  end
234
235
 
235
236
  if targetfiles.size == 0
236
- raise ArgumentError, _("no input files")
237
+ raise ArgumentError, _("no input files")
237
238
  end
238
239
 
239
240
  if out.is_a? String
240
- File.open(File.expand_path(out), "w+") do |file|
241
- file.puts generate_pot_header
242
- file.puts generate_pot(parse(targetfiles))
243
- end
241
+ File.open(File.expand_path(out), "w+") do |file|
242
+ file.puts generate_pot_header
243
+ file.puts generate_pot(parse(targetfiles))
244
+ end
244
245
  else
245
- out.puts generate_pot_header
246
- out.puts generate_pot(parse(targetfiles))
246
+ out.puts generate_pot_header
247
+ out.puts generate_pot(parse(targetfiles))
247
248
  end
248
249
  self
249
250
  end
250
251
  end
251
-
252
- module_function
253
- # Creates a po-file from targetfiles(ruby-script-files, ActiveRecord, .rhtml files, glade-2 XML files),
252
+ extend self
253
+ # Creates a po-file from targetfiles(ruby-script-files, .rhtml files, glade-2 XML files),
254
254
  # then output the result to out. If no parameter is set, it behaves same as command line tools(rgettet).
255
255
  #
256
256
  # This function is a part of GetText.create_pofiles.
257
257
  # Usually you don't need to call this function directly.
258
258
  #
259
- # *Note* for ActiveRecord, you need to run your database server and configure the config/database.xml
260
- # correctly before execute this function.
261
- #
262
259
  # * targetfiles: An Array of po-files or nil.
263
260
  # * out: output IO or output path.
264
261
  # * Returns: self