bike 0.2.1

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 (151) hide show
  1. data/LICENSE +19 -0
  2. data/README.rdoc +124 -0
  3. data/bin/bike +35 -0
  4. data/lib/_error.rb +14 -0
  5. data/lib/_field.rb +260 -0
  6. data/lib/_i18n.rb +144 -0
  7. data/lib/_parser.rb +256 -0
  8. data/lib/_path.rb +86 -0
  9. data/lib/_storage/_storage.rb +215 -0
  10. data/lib/_storage/file.rb +201 -0
  11. data/lib/_storage/sequel.rb +174 -0
  12. data/lib/_storage/temp.rb +73 -0
  13. data/lib/_widget/action_create.rb +23 -0
  14. data/lib/_widget/action_login.rb +22 -0
  15. data/lib/_widget/action_signup.rb +16 -0
  16. data/lib/_widget/action_update.rb +16 -0
  17. data/lib/_widget/crumb.rb +24 -0
  18. data/lib/_widget/done.rb +16 -0
  19. data/lib/_widget/login.rb +25 -0
  20. data/lib/_widget/me.rb +31 -0
  21. data/lib/_widget/message.rb +51 -0
  22. data/lib/_widget/navi.rb +88 -0
  23. data/lib/_widget/submit.rb +49 -0
  24. data/lib/_widget/view_ym.rb +77 -0
  25. data/lib/_workflow/_workflow.rb +89 -0
  26. data/lib/_workflow/attachment.rb +50 -0
  27. data/lib/_workflow/blog.rb +28 -0
  28. data/lib/_workflow/contact.rb +23 -0
  29. data/lib/_workflow/forum.rb +26 -0
  30. data/lib/_workflow/register.rb +39 -0
  31. data/lib/bike.rb +396 -0
  32. data/lib/meta/_meta.rb +20 -0
  33. data/lib/meta/group.rb +19 -0
  34. data/lib/meta/id.rb +59 -0
  35. data/lib/meta/owner.rb +21 -0
  36. data/lib/meta/timestamp.rb +118 -0
  37. data/lib/scalar/checkbox.rb +68 -0
  38. data/lib/scalar/file.rb +144 -0
  39. data/lib/scalar/img.rb +112 -0
  40. data/lib/scalar/password.rb +58 -0
  41. data/lib/scalar/radio.rb +47 -0
  42. data/lib/scalar/select.rb +47 -0
  43. data/lib/scalar/text.rb +38 -0
  44. data/lib/scalar/textarea.rb +35 -0
  45. data/lib/scalar/textarea_pre.rb +14 -0
  46. data/lib/scalar/textarea_wiki.rb +173 -0
  47. data/lib/set/_set.rb +196 -0
  48. data/lib/set/dynamic.rb +177 -0
  49. data/lib/set/static.rb +102 -0
  50. data/lib/set/static_folder.rb +96 -0
  51. data/locale/en/index.po +242 -0
  52. data/locale/index.pot +243 -0
  53. data/locale/ja/index.po +242 -0
  54. data/locale/lazy_parser.rb +54 -0
  55. data/skel/config.ru +27 -0
  56. data/skel/skin/_users/00000000_frank-avatar.jpg +0 -0
  57. data/skel/skin/_users/00000000_frank-avatar_small.jpg +0 -0
  58. data/skel/skin/_users/00000000_frank.yaml +12 -0
  59. data/skel/skin/_users/00000000_root-avatar.jpg +0 -0
  60. data/skel/skin/_users/00000000_root-avatar_small.jpg +0 -0
  61. data/skel/skin/_users/00000000_root.yaml +11 -0
  62. data/skel/skin/_users/css/users.css +21 -0
  63. data/skel/skin/_users/css/users.less +25 -0
  64. data/skel/skin/_users/done.html +42 -0
  65. data/skel/skin/_users/index.html +46 -0
  66. data/skel/skin/_users/index.yaml +3 -0
  67. data/skel/skin/_users/summary.html +40 -0
  68. data/skel/skin/css/base.css +93 -0
  69. data/skel/skin/css/base.less +139 -0
  70. data/skel/skin/css/coax.css +199 -0
  71. data/skel/skin/css/coax.less +244 -0
  72. data/skel/skin/examples/blog/20091214_0001.yaml +8 -0
  73. data/skel/skin/examples/blog/20100630_0001.yaml +8 -0
  74. data/skel/skin/examples/blog/20100630_0002.yaml +14 -0
  75. data/skel/skin/examples/blog/20100701_0001.yaml +8 -0
  76. data/skel/skin/examples/blog/20100701_0002-a-20100701_0001-f.jpg +0 -0
  77. data/skel/skin/examples/blog/20100701_0002-a-20100701_0001-f_small.jpg +0 -0
  78. data/skel/skin/examples/blog/20100701_0002.yaml +19 -0
  79. data/skel/skin/examples/blog/frank/20100701_0001.yaml +10 -0
  80. data/skel/skin/examples/blog/frank/index.yaml +4 -0
  81. data/skel/skin/examples/blog/index.html +51 -0
  82. data/skel/skin/examples/blog/rss.xml +18 -0
  83. data/skel/skin/examples/contact/20100701_0001-file.txt +1 -0
  84. data/skel/skin/examples/contact/20100701_0001.yaml +15 -0
  85. data/skel/skin/examples/contact/20100701_0002.yaml +8 -0
  86. data/skel/skin/examples/contact/20100701_0003.yaml +9 -0
  87. data/skel/skin/examples/contact/index.html +47 -0
  88. data/skel/skin/examples/contact/js/contact.js +13 -0
  89. data/skel/skin/examples/contact/summary.html +54 -0
  90. data/skel/skin/examples/forum/20100701_0001.yaml +41 -0
  91. data/skel/skin/examples/forum/20100701_0002.yaml +25 -0
  92. data/skel/skin/examples/forum/index.html +68 -0
  93. data/skel/skin/examples/forum/summary.html +47 -0
  94. data/skel/skin/examples/index.html +73 -0
  95. data/skel/skin/index.html +39 -0
  96. data/skel/skin/js/base.js +50 -0
  97. data/t/locale/de/index.po +19 -0
  98. data/t/locale/en-GB/index.po +25 -0
  99. data/t/locale/ja/index.po +30 -0
  100. data/t/skin/_users/00000000_test.yaml +3 -0
  101. data/t/skin/_users/index.html +13 -0
  102. data/t/skin/foo/20091120_0001.yaml +7 -0
  103. data/t/skin/foo/bar/20091120_0001.yaml +5 -0
  104. data/t/skin/foo/bar/index.yaml +5 -0
  105. data/t/skin/foo/baz/css/baz.css +1 -0
  106. data/t/skin/foo/css/foo.css +1 -0
  107. data/t/skin/foo/index.html +14 -0
  108. data/t/skin/foo/index.yaml +7 -0
  109. data/t/skin/foo/not_css/foo.css +1 -0
  110. data/t/skin/foo/qux/index.html +8 -0
  111. data/t/skin/foo/qux/moo/index.html +6 -0
  112. data/t/skin/foo/sub-20100306_0001.yaml +3 -0
  113. data/t/skin/index.yaml +3 -0
  114. data/t/skin/t_attachment/index.html +13 -0
  115. data/t/skin/t_contact/done.html +6 -0
  116. data/t/skin/t_contact/index.html +9 -0
  117. data/t/skin/t_file/index.html +16 -0
  118. data/t/skin/t_img/index.html +14 -0
  119. data/t/skin/t_img/test.jpg +0 -0
  120. data/t/skin/t_select/index.html +9 -0
  121. data/t/skin/t_store/index.html +9 -0
  122. data/t/skin/t_summary/20100326_0001.yaml +3 -0
  123. data/t/skin/t_summary/create.html +9 -0
  124. data/t/skin/t_summary/index.html +9 -0
  125. data/t/skin/t_summary/summary.html +9 -0
  126. data/t/t.rb +27 -0
  127. data/t/test_bike.rb +768 -0
  128. data/t/test_call.rb +1281 -0
  129. data/t/test_checkbox.rb +273 -0
  130. data/t/test_field.rb +330 -0
  131. data/t/test_file.rb +900 -0
  132. data/t/test_i18n.rb +325 -0
  133. data/t/test_id.rb +215 -0
  134. data/t/test_img.rb +328 -0
  135. data/t/test_meta.rb +57 -0
  136. data/t/test_parser.rb +1516 -0
  137. data/t/test_password.rb +188 -0
  138. data/t/test_radio.rb +226 -0
  139. data/t/test_role.rb +249 -0
  140. data/t/test_select.rb +182 -0
  141. data/t/test_set_complex.rb +527 -0
  142. data/t/test_set_dynamic.rb +1504 -0
  143. data/t/test_set_folder.rb +515 -0
  144. data/t/test_set_permit.rb +246 -0
  145. data/t/test_set_static.rb +468 -0
  146. data/t/test_storage.rb +915 -0
  147. data/t/test_text.rb +125 -0
  148. data/t/test_textarea.rb +138 -0
  149. data/t/test_timestamp.rb +473 -0
  150. data/t/test_workflow.rb +367 -0
  151. metadata +347 -0
@@ -0,0 +1,96 @@
1
+ # encoding: UTF-8
2
+
3
+ # Author:: Akira FUNAI
4
+ # Copyright:: Copyright (c) 2009 Akira FUNAI
5
+
6
+ class Bike::Set::Static::Folder < Bike::Set::Static
7
+
8
+ def self.root
9
+ self.new(:id => '')
10
+ end
11
+
12
+ def initialize(meta = {})
13
+ meta[:dir] = meta[:parent] ? ::File.join(meta[:parent][:dir], meta[:id]) : meta[:id]
14
+ meta[:html] = load_html(meta[:dir], meta[:parent])
15
+ super
16
+
17
+ ::Dir.glob(::File.join(Bike['skin_dir'], my[:html_dir].to_s, '*.html')).each {|f|
18
+ action = ::File.basename(f, '.*').intern
19
+ merge_tmpl(@meta, Bike::Parser.parse_html(::File.read(f), action)) if action != :index
20
+ }
21
+ ::Dir.glob(::File.join(Bike['skin_dir'], my[:html_dir].to_s, '*.xml')).each {|f|
22
+ action = ::File.basename(f, '.*').intern
23
+ merge_tmpl(@meta, Bike::Parser.parse_xml(::File.read(f), action)) if action != :index
24
+ }
25
+
26
+ @meta[:tmpl].values.each {|tmpl|
27
+ tmpl.sub!(/<head>([\s\n]*)/i) {
28
+ "#{$&}<base href=\"@(href)\" />#{$1}"
29
+ }
30
+ } if @meta[:tmpl]
31
+
32
+ @meta.merge! load_yaml(my[:dir], my[:parent])
33
+ end
34
+
35
+ def meta_dir
36
+ @meta[:dir]
37
+ end
38
+
39
+ def meta_html_dir
40
+ if ::File.readable? ::File.join(Bike['skin_dir'], my[:dir], 'index.html')
41
+ my[:dir]
42
+ elsif my[:parent]
43
+ my[:parent][:html_dir]
44
+ end
45
+ end
46
+
47
+ private
48
+
49
+ def _get(arg)
50
+ if arg['main'] && action_tmpl = my[:tmpl][arg['main'][:action]]
51
+ _get_by_tmpl(arg, action_tmpl)
52
+ else
53
+ super
54
+ end
55
+ end
56
+
57
+ def collect_item(conds = {}, &block)
58
+ if conds[:id] =~ Bike::REX::ID && sd = item('main')
59
+ return sd.instance_eval { collect_item(conds, &block) }
60
+ elsif (
61
+ conds[:id] =~ /\A\w+\z/ &&
62
+ ::File.directory?(::File.join(Bike['skin_dir'], my[:dir], conds[:id]))
63
+ )
64
+ my[:item][conds[:id]] = {:klass => 'set-static-folder'}
65
+ end
66
+ super
67
+ end
68
+
69
+ def load_html(dir, parent, action = :index)
70
+ html_file = ::File.join Bike['skin_dir'], dir, "#{action}.html"
71
+ if ::File.exists? html_file
72
+ ::File.read html_file
73
+ elsif parent
74
+ parent[:html]
75
+ end
76
+ end
77
+
78
+ def load_yaml(dir, parent)
79
+ yaml_file = ::File.join(Bike['skin_dir'], dir, 'index.yaml')
80
+ meta = ::File.exists?(yaml_file) ? YAML.load_file(yaml_file) : {}
81
+ meta.keys.inject({}) {|m, k|
82
+ m[k.intern] = meta[k]
83
+ m
84
+ }
85
+ end
86
+
87
+ def merge_tmpl(meta, action_meta)
88
+ meta[:tmpl].merge! action_meta[:tmpl]
89
+ meta[:item].each {|id, val|
90
+ merge_tmpl(val, action_meta[:item][id]) if action_meta[:item][id]
91
+ } if action_meta[:item]
92
+ meta
93
+ end
94
+
95
+ end
96
+
@@ -0,0 +1,242 @@
1
+ # Copyright (C) 2009-2010 Akira FUNAI
2
+ # This file is distributed under the same license as the Bike package.
3
+ # Akira FUNAI <akira@funai.com>, 2010.
4
+ #
5
+ msgid ""
6
+ msgstr ""
7
+ "Project-Id-Version: Bike 0.1\n"
8
+ "POT-Creation-Date: 2010-05-09 17:07+0900\n"
9
+ "PO-Revision-Date: 2010-06-29 22:51+0900\n"
10
+ "Last-Translator: Akira FUNAI <akira@funai.com>\n"
11
+ "Language-Team: English <en@translate.freefriends.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=2; plural=(n != 1);\n"
16
+
17
+ #: lib/_widget/action_signup.rb:12
18
+ msgid "signup"
19
+ msgstr "signup"
20
+
21
+ #: lib/_workflow/_workflow.rb:11
22
+ msgid "item"
23
+ msgid_plural "items"
24
+ msgstr[0] "item"
25
+ msgstr[1] "items"
26
+
27
+ #: lib/_workflow/_workflow.rb:41
28
+ msgid "admin"
29
+ msgstr "admin"
30
+
31
+ #: lib/_workflow/_workflow.rb:41
32
+ msgid "group"
33
+ msgstr "group"
34
+
35
+ #: lib/_workflow/_workflow.rb:41
36
+ msgid "owner"
37
+ msgstr "owner"
38
+
39
+ #: lib/_workflow/_workflow.rb:41
40
+ msgid "user"
41
+ msgid_plural "users"
42
+ msgstr[0] "user"
43
+ msgstr[1] "users"
44
+
45
+ #: lib/_workflow/_workflow.rb:41
46
+ msgid "none"
47
+ msgstr "none"
48
+
49
+ #: lib/_workflow/_workflow.rb:94 lib/_workflow/attachment.rb:32
50
+ msgid "create"
51
+ msgstr "create"
52
+
53
+ #: lib/_workflow/_workflow.rb:94 lib/_workflow/attachment.rb:32
54
+ msgid "update"
55
+ msgstr "update"
56
+
57
+ #: lib/_workflow/_workflow.rb:94 lib/_workflow/attachment.rb:32
58
+ msgid "delete"
59
+ msgstr "delete"
60
+
61
+ #: lib/_workflow/_workflow.rb:99
62
+ msgid "preview"
63
+ msgstr "preview"
64
+
65
+ #: lib/_workflow/_workflow.rb:112
66
+ msgid "delete..."
67
+ msgstr "delete..."
68
+
69
+ #: lib/_workflow/attachment.rb:10
70
+ msgid "attachment"
71
+ msgid_plural "attachments"
72
+ msgstr[0] "attachment"
73
+ msgstr[1] "attachments"
74
+
75
+ #: lib/_workflow/blog.rb:11
76
+ msgid "entry"
77
+ msgid_plural "entries"
78
+ msgstr[0] "entry"
79
+ msgstr[1] "entries"
80
+
81
+ #: lib/_workflow/contact.rb:11
82
+ msgid "answer"
83
+ msgid_plural "answers"
84
+ msgstr[0] "answer"
85
+ msgstr[1] "answers"
86
+
87
+ #: lib/meta/id.rb:23
88
+ msgid "malformatted id"
89
+ msgstr "malformatted id"
90
+
91
+ #: lib/meta/id.rb:30
92
+ msgid "duplicate id: %{id}"
93
+ msgstr "duplicate id: %{id}"
94
+
95
+ #: lib/meta/timestamp.rb:44
96
+ msgid "%Y-%m-%dT%H:%M:%S"
97
+ msgstr "%Y-%m-%d %H:%M:%S"
98
+
99
+ #: lib/meta/timestamp.rb:63
100
+ msgid "update the timestamp"
101
+ msgstr "update the timestamp"
102
+
103
+ #: lib/scalar/checkbox.rb:22 lib/scalar/file.rb:55 lib/scalar/radio.rb:15
104
+ #: lib/scalar/select.rb:15 lib/scalar/text.rb:17 lib/scalar/textarea.rb:12
105
+ msgid "mandatory"
106
+ msgstr "mandatory"
107
+
108
+ #: lib/scalar/checkbox.rb:24 lib/scalar/radio.rb:17 lib/scalar/select.rb:19
109
+ msgid "no such option"
110
+ msgstr "no such option"
111
+
112
+ #: lib/scalar/file.rb:53
113
+ msgid "wrong file type: should be %{types}"
114
+ msgstr "wrong file type: should be %{types}"
115
+
116
+ #: lib/scalar/file.rb:53
117
+ msgid "too large: %{max} bytes maximum"
118
+ msgstr "too large: %{max} bytes maximum"
119
+
120
+ #: lib/scalar/file.rb:57
121
+ msgid "too small: %{min} bytes minimum"
122
+ msgstr "too small: %{min} bytes minimum"
123
+
124
+ #: lib/scalar/select.rb:31
125
+ msgid "please select"
126
+ msgstr "please select"
127
+
128
+ #: lib/scalar/text.rb:15 lib/scalar/textarea.rb:10
129
+ msgid "too long: %{max} characters maximum"
130
+ msgstr "too long: %{max} characters maximum"
131
+
132
+ #: lib/scalar/text.rb:19 lib/scalar/textarea.rb:14
133
+ msgid "too short: %{min} characters minimum"
134
+ msgstr "too short: %{min} characters minimum"
135
+
136
+ #: lib/set/dynamic.rb:112
137
+ msgid "login"
138
+ msgstr "login"
139
+
140
+ #: lib/set/dynamic.rb:118
141
+ msgid "done."
142
+ msgstr "done."
143
+
144
+ #: lib/set/dynamic.rb:125
145
+ msgid "please login."
146
+ msgstr "please login."
147
+
148
+ #: lib/set/dynamic.rb:127
149
+ msgid "please confirm."
150
+ msgstr "please confirm."
151
+
152
+ #: lib/set/dynamic.rb:129
153
+ msgid "malformed input."
154
+ msgstr "malformed input."
155
+
156
+ #: lib/set/dynamic.rb:134
157
+ msgid "%{result} %{n} %{item}."
158
+ msgstr "%{result} %{n} %{item}."
159
+
160
+ #: lib/set/dynamic.rb:136
161
+ msgid "created"
162
+ msgstr "created"
163
+
164
+ #: lib/set/dynamic.rb:137
165
+ msgid "updated"
166
+ msgstr "updated"
167
+
168
+ #: lib/set/dynamic.rb:138
169
+ msgid "deleted"
170
+ msgstr "deleted"
171
+
172
+ #: lib/set/dynamic.rb:161
173
+ msgid "create new %{item}..."
174
+ msgstr "create new %{item}..."
175
+
176
+ #: lib/set/dynamic.rb:181
177
+ msgid "prev"
178
+ msgstr "prev"
179
+
180
+ #: lib/set/dynamic.rb:186
181
+ msgid "next"
182
+ msgstr "next"
183
+
184
+ #: lib/set/dynamic.rb:294
185
+ msgid "%{year}/%{month}"
186
+ msgstr "%{year}/%{month}"
187
+
188
+ #: lib/set/dynamic.rb:301
189
+ msgid "Jan"
190
+ msgstr "Jan"
191
+
192
+ #: lib/set/dynamic.rb:301
193
+ msgid "Feb"
194
+ msgstr "Feb"
195
+
196
+ #: lib/set/dynamic.rb:301
197
+ msgid "Mar"
198
+ msgstr "Mar"
199
+
200
+ #: lib/set/dynamic.rb:301
201
+ msgid "Apr"
202
+ msgstr "Apr"
203
+
204
+ #: lib/set/dynamic.rb:301
205
+ msgid "May"
206
+ msgstr "May"
207
+
208
+ #: lib/set/dynamic.rb:301
209
+ msgid "Jun"
210
+ msgstr "Jun"
211
+
212
+ #: lib/set/dynamic.rb:301
213
+ msgid "Jul"
214
+ msgstr "Jul"
215
+
216
+ #: lib/set/dynamic.rb:301
217
+ msgid "Aug"
218
+ msgstr "Aug"
219
+
220
+ #: lib/set/dynamic.rb:301
221
+ msgid "Sep"
222
+ msgstr "Sep"
223
+
224
+ #: lib/set/dynamic.rb:301
225
+ msgid "Oct"
226
+ msgstr "Oct"
227
+
228
+ #: lib/set/dynamic.rb:301
229
+ msgid "Nov"
230
+ msgstr "Nov"
231
+
232
+ #: lib/set/dynamic.rb:301
233
+ msgid "Dec"
234
+ msgstr "Dec"
235
+
236
+ #: lib/set/static.rb:40
237
+ msgid "update..."
238
+ msgstr "update..."
239
+
240
+ #: lib/set/static_folder.rb:56
241
+ msgid "logout"
242
+ msgstr "logout"
@@ -0,0 +1,243 @@
1
+ # Copyright (C) 2009-2010 Akira FUNAI
2
+ # This file is distributed under the same license as the Bike package.
3
+ # FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
4
+ #
5
+ #, fuzzy
6
+ msgid ""
7
+ msgstr ""
8
+ "Project-Id-Version: Bike 0.1\n"
9
+ "POT-Creation-Date: 2010-05-09 17:07+0900\n"
10
+ "PO-Revision-Date: 2010-05-09 17:07+0900\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: 8bit\n"
16
+ "Plural-Forms: nplurals=INTEGER; plural=EXPRESSION;\n"
17
+
18
+ #: lib/_widget/action_signup.rb:12
19
+ msgid "signup"
20
+ msgstr ""
21
+
22
+ #: lib/_workflow/_workflow.rb:11
23
+ msgid "item"
24
+ msgid_plural "items"
25
+ msgstr[0] ""
26
+ msgstr[1] ""
27
+
28
+ #: lib/_workflow/_workflow.rb:41
29
+ msgid "admin"
30
+ msgstr ""
31
+
32
+ #: lib/_workflow/_workflow.rb:41
33
+ msgid "group"
34
+ msgstr ""
35
+
36
+ #: lib/_workflow/_workflow.rb:41
37
+ msgid "owner"
38
+ msgstr ""
39
+
40
+ #: lib/_workflow/_workflow.rb:41
41
+ msgid "user"
42
+ msgid_plural "users"
43
+ msgstr[0] ""
44
+ msgstr[1] ""
45
+
46
+ #: lib/_workflow/_workflow.rb:41
47
+ msgid "none"
48
+ msgstr ""
49
+
50
+ #: lib/_workflow/_workflow.rb:94 lib/_workflow/attachment.rb:32
51
+ msgid "create"
52
+ msgstr ""
53
+
54
+ #: lib/_workflow/_workflow.rb:94 lib/_workflow/attachment.rb:32
55
+ msgid "update"
56
+ msgstr ""
57
+
58
+ #: lib/_workflow/_workflow.rb:94 lib/_workflow/attachment.rb:32
59
+ msgid "delete"
60
+ msgstr ""
61
+
62
+ #: lib/_workflow/_workflow.rb:99
63
+ msgid "preview"
64
+ msgstr ""
65
+
66
+ #: lib/_workflow/_workflow.rb:112
67
+ msgid "delete..."
68
+ msgstr ""
69
+
70
+ #: lib/_workflow/attachment.rb:10
71
+ msgid "attachment"
72
+ msgid_plural "attachments"
73
+ msgstr[0] ""
74
+ msgstr[1] ""
75
+
76
+ #: lib/_workflow/blog.rb:11
77
+ msgid "entry"
78
+ msgid_plural "entries"
79
+ msgstr[0] ""
80
+ msgstr[1] ""
81
+
82
+ #: lib/_workflow/contact.rb:11
83
+ msgid "answer"
84
+ msgid_plural "answers"
85
+ msgstr[0] ""
86
+ msgstr[1] ""
87
+
88
+ #: lib/meta/id.rb:23
89
+ msgid "malformatted id"
90
+ msgstr ""
91
+
92
+ #: lib/meta/id.rb:30
93
+ msgid "duplicate id: %{id}"
94
+ msgstr ""
95
+
96
+ #: lib/meta/timestamp.rb:44
97
+ msgid "%Y-%m-%dT%H:%M:%S"
98
+ msgstr ""
99
+
100
+ #: lib/meta/timestamp.rb:63
101
+ msgid "update the timestamp"
102
+ msgstr ""
103
+
104
+ #: lib/scalar/checkbox.rb:22 lib/scalar/file.rb:55 lib/scalar/radio.rb:15
105
+ #: lib/scalar/select.rb:15 lib/scalar/text.rb:17 lib/scalar/textarea.rb:12
106
+ msgid "mandatory"
107
+ msgstr ""
108
+
109
+ #: lib/scalar/checkbox.rb:24 lib/scalar/radio.rb:17 lib/scalar/select.rb:19
110
+ msgid "no such option"
111
+ msgstr ""
112
+
113
+ #: lib/scalar/file.rb:53
114
+ msgid "wrong file type: should be %{types}"
115
+ msgstr ""
116
+
117
+ #: lib/scalar/file.rb:53
118
+ msgid "too large: %{max} bytes maximum"
119
+ msgstr ""
120
+
121
+ #: lib/scalar/file.rb:57
122
+ msgid "too small: %{min} bytes minimum"
123
+ msgstr ""
124
+
125
+ #: lib/scalar/select.rb:31
126
+ msgid "please select"
127
+ msgstr ""
128
+
129
+ #: lib/scalar/text.rb:15 lib/scalar/textarea.rb:10
130
+ msgid "too long: %{max} characters maximum"
131
+ msgstr ""
132
+
133
+ #: lib/scalar/text.rb:19 lib/scalar/textarea.rb:14
134
+ msgid "too short: %{min} characters minimum"
135
+ msgstr ""
136
+
137
+ #: lib/set/dynamic.rb:112
138
+ msgid "login"
139
+ msgstr ""
140
+
141
+ #: lib/set/dynamic.rb:118
142
+ msgid "done."
143
+ msgstr ""
144
+
145
+ #: lib/set/dynamic.rb:125
146
+ msgid "please login."
147
+ msgstr ""
148
+
149
+ #: lib/set/dynamic.rb:127
150
+ msgid "please confirm."
151
+ msgstr ""
152
+
153
+ #: lib/set/dynamic.rb:129
154
+ msgid "malformed input."
155
+ msgstr ""
156
+
157
+ #: lib/set/dynamic.rb:134
158
+ msgid "%{result} %{n} %{item}."
159
+ msgstr ""
160
+
161
+ #: lib/set/dynamic.rb:136
162
+ msgid "created"
163
+ msgstr ""
164
+
165
+ #: lib/set/dynamic.rb:137
166
+ msgid "updated"
167
+ msgstr ""
168
+
169
+ #: lib/set/dynamic.rb:138
170
+ msgid "deleted"
171
+ msgstr ""
172
+
173
+ #: lib/set/dynamic.rb:161
174
+ msgid "create new %{item}..."
175
+ msgstr ""
176
+
177
+ #: lib/set/dynamic.rb:181
178
+ msgid "prev"
179
+ msgstr ""
180
+
181
+ #: lib/set/dynamic.rb:186
182
+ msgid "next"
183
+ msgstr ""
184
+
185
+ #: lib/set/dynamic.rb:294
186
+ msgid "%{year}/%{month}"
187
+ msgstr ""
188
+
189
+ #: lib/set/dynamic.rb:301
190
+ msgid "Jan"
191
+ msgstr ""
192
+
193
+ #: lib/set/dynamic.rb:301
194
+ msgid "Feb"
195
+ msgstr ""
196
+
197
+ #: lib/set/dynamic.rb:301
198
+ msgid "Mar"
199
+ msgstr ""
200
+
201
+ #: lib/set/dynamic.rb:301
202
+ msgid "Apr"
203
+ msgstr ""
204
+
205
+ #: lib/set/dynamic.rb:301
206
+ msgid "May"
207
+ msgstr ""
208
+
209
+ #: lib/set/dynamic.rb:301
210
+ msgid "Jun"
211
+ msgstr ""
212
+
213
+ #: lib/set/dynamic.rb:301
214
+ msgid "Jul"
215
+ msgstr ""
216
+
217
+ #: lib/set/dynamic.rb:301
218
+ msgid "Aug"
219
+ msgstr ""
220
+
221
+ #: lib/set/dynamic.rb:301
222
+ msgid "Sep"
223
+ msgstr ""
224
+
225
+ #: lib/set/dynamic.rb:301
226
+ msgid "Oct"
227
+ msgstr ""
228
+
229
+ #: lib/set/dynamic.rb:301
230
+ msgid "Nov"
231
+ msgstr ""
232
+
233
+ #: lib/set/dynamic.rb:301
234
+ msgid "Dec"
235
+ msgstr ""
236
+
237
+ #: lib/set/static.rb:40
238
+ msgid "update..."
239
+ msgstr ""
240
+
241
+ #: lib/set/static_folder.rb:56
242
+ msgid "logout"
243
+ msgstr ""