##// END OF EJS Templates
Gantt progress lines (#12122)....
Jean-Philippe Lang -
r10980:237f297f03e2
parent child
Show More
@@ -1,282 +1,319
1 <% @gantt.view = self %>
1 <% @gantt.view = self %>
2 <h2><%= @query.new_record? ? l(:label_gantt) : h(@query.name) %></h2>
2 <h2><%= @query.new_record? ? l(:label_gantt) : h(@query.name) %></h2>
3
3
4 <%= form_tag({:controller => 'gantts', :action => 'show',
4 <%= form_tag({:controller => 'gantts', :action => 'show',
5 :project_id => @project, :month => params[:month],
5 :project_id => @project, :month => params[:month],
6 :year => params[:year], :months => params[:months]},
6 :year => params[:year], :months => params[:months]},
7 :method => :get, :id => 'query_form') do %>
7 :method => :get, :id => 'query_form') do %>
8 <%= hidden_field_tag 'set_filter', '1' %>
8 <%= hidden_field_tag 'set_filter', '1' %>
9 <fieldset id="filters" class="collapsible <%= @query.new_record? ? "" : "collapsed" %>">
9 <fieldset id="filters" class="collapsible <%= @query.new_record? ? "" : "collapsed" %>">
10 <legend onclick="toggleFieldset(this);"><%= l(:label_filter_plural) %></legend>
10 <legend onclick="toggleFieldset(this);"><%= l(:label_filter_plural) %></legend>
11 <div style="<%= @query.new_record? ? "" : "display: none;" %>">
11 <div style="<%= @query.new_record? ? "" : "display: none;" %>">
12 <%= render :partial => 'queries/filters', :locals => {:query => @query} %>
12 <%= render :partial => 'queries/filters', :locals => {:query => @query} %>
13 </div>
13 </div>
14 </fieldset>
14 </fieldset>
15 <fieldset id="filters" class="collapsible">
16 <legend onclick="toggleFieldset(this);"><%= l(:label_display) %></legend>
17 <div>
18 <table>
19 <tr>
20 <td>
21 <fieldset>
22 <legend><%= l(:label_related_issues) %></legend>
23 <label>
24 <%= check_box_tag "draw_rels", params["draw_rels"], true %>
25 <% rels = [IssueRelation::TYPE_BLOCKS, IssueRelation::TYPE_PRECEDES] %>
26 <% rels.each do |rel| %>
27 <% color = Redmine::Helpers::Gantt::DRAW_TYPES[rel][:color] %>
28 <%= content_tag(:span, '&nbsp;&nbsp;&nbsp;'.html_safe,
29 :style => "background-color: #{color}") %>
30 <%= l(IssueRelation::TYPES[rel][:name]) %>
31 <% end %>
32 </label>
33 </fieldset>
34 </td>
35 <td>
36 <fieldset>
37 <legend><%= l(:label_gantt_progress_line) %></legend>
38 <label>
39 <%= check_box_tag "draw_progress_line", params[:draw_progress_line], false %>
40 <%= l(:label_display) %>
41 </label>
42 </fieldset>
43 </td>
44 </tr>
45 </table>
46 </div>
47 </fieldset>
15
48
16 <p class="contextual">
49 <p class="contextual">
17 <%= gantt_zoom_link(@gantt, :in) %>
50 <%= gantt_zoom_link(@gantt, :in) %>
18 <%= gantt_zoom_link(@gantt, :out) %>
51 <%= gantt_zoom_link(@gantt, :out) %>
19 </p>
52 </p>
20
53
21 <p class="buttons">
54 <p class="buttons">
22 <%= text_field_tag 'months', @gantt.months, :size => 2 %>
55 <%= text_field_tag 'months', @gantt.months, :size => 2 %>
23 <%= l(:label_months_from) %>
56 <%= l(:label_months_from) %>
24 <%= select_month(@gantt.month_from, :prefix => "month", :discard_type => true) %>
57 <%= select_month(@gantt.month_from, :prefix => "month", :discard_type => true) %>
25 <%= select_year(@gantt.year_from, :prefix => "year", :discard_type => true) %>
58 <%= select_year(@gantt.year_from, :prefix => "year", :discard_type => true) %>
26 <%= hidden_field_tag 'zoom', @gantt.zoom %>
59 <%= hidden_field_tag 'zoom', @gantt.zoom %>
27
60
28 <%= link_to_function l(:button_apply), '$("#query_form").submit()',
61 <%= link_to_function l(:button_apply), '$("#query_form").submit()',
29 :class => 'icon icon-checked' %>
62 :class => 'icon icon-checked' %>
30 <%= link_to l(:button_clear), { :project_id => @project, :set_filter => 1 },
63 <%= link_to l(:button_clear), { :project_id => @project, :set_filter => 1 },
31 :class => 'icon icon-reload' %>
64 :class => 'icon icon-reload' %>
32 </p>
65 </p>
33 <% end %>
66 <% end %>
34
67
35 <%= error_messages_for 'query' %>
68 <%= error_messages_for 'query' %>
36 <% if @query.valid? %>
69 <% if @query.valid? %>
37 <%
70 <%
38 zoom = 1
71 zoom = 1
39 @gantt.zoom.times { zoom = zoom * 2 }
72 @gantt.zoom.times { zoom = zoom * 2 }
40
73
41 subject_width = 330
74 subject_width = 330
42 header_heigth = 18
75 header_heigth = 18
43
76
44 headers_height = header_heigth
77 headers_height = header_heigth
45 show_weeks = false
78 show_weeks = false
46 show_days = false
79 show_days = false
47
80
48 if @gantt.zoom > 1
81 if @gantt.zoom > 1
49 show_weeks = true
82 show_weeks = true
50 headers_height = 2 * header_heigth
83 headers_height = 2 * header_heigth
51 if @gantt.zoom > 2
84 if @gantt.zoom > 2
52 show_days = true
85 show_days = true
53 headers_height = 3 * header_heigth
86 headers_height = 3 * header_heigth
54 end
87 end
55 end
88 end
56
89
57 # Width of the entire chart
90 # Width of the entire chart
58 g_width = ((@gantt.date_to - @gantt.date_from + 1) * zoom).to_i
91 g_width = ((@gantt.date_to - @gantt.date_from + 1) * zoom).to_i
59 @gantt.render(:top => headers_height + 8,
92 @gantt.render(:top => headers_height + 8,
60 :zoom => zoom,
93 :zoom => zoom,
61 :g_width => g_width,
94 :g_width => g_width,
62 :subject_width => subject_width)
95 :subject_width => subject_width)
63 g_height = [(20 * (@gantt.number_of_rows + 6)) + 150, 206].max
96 g_height = [(20 * (@gantt.number_of_rows + 6)) + 150, 206].max
64 t_height = g_height + headers_height
97 t_height = g_height + headers_height
65 %>
98 %>
66
99
67 <% if @gantt.truncated %>
100 <% if @gantt.truncated %>
68 <p class="warning"><%= l(:notice_gantt_chart_truncated, :max => @gantt.max_rows) %></p>
101 <p class="warning"><%= l(:notice_gantt_chart_truncated, :max => @gantt.max_rows) %></p>
69 <% end %>
102 <% end %>
70
103
71 <table style="width:100%; border:0; border-collapse: collapse;">
104 <table style="width:100%; border:0; border-collapse: collapse;">
72 <tr>
105 <tr>
73 <td style="width:<%= subject_width %>px; padding:0px;">
106 <td style="width:<%= subject_width %>px; padding:0px;">
74 <%
107 <%
75 style = ""
108 style = ""
76 style += "position:relative;"
109 style += "position:relative;"
77 style += "height: #{t_height + 24}px;"
110 style += "height: #{t_height + 24}px;"
78 style += "width: #{subject_width + 1}px;"
111 style += "width: #{subject_width + 1}px;"
79 %>
112 %>
80 <%= content_tag(:div, :style => style) do %>
113 <%= content_tag(:div, :style => style) do %>
81 <%
114 <%
82 style = ""
115 style = ""
83 style += "right:-2px;"
116 style += "right:-2px;"
84 style += "width: #{subject_width}px;"
117 style += "width: #{subject_width}px;"
85 style += "height: #{headers_height}px;"
118 style += "height: #{headers_height}px;"
86 style += 'background: #eee;'
119 style += 'background: #eee;'
87 %>
120 %>
88 <%= content_tag(:div, "", :style => style, :class => "gantt_hdr") %>
121 <%= content_tag(:div, "", :style => style, :class => "gantt_hdr") %>
89 <%
122 <%
90 style = ""
123 style = ""
91 style += "right:-2px;"
124 style += "right:-2px;"
92 style += "width: #{subject_width}px;"
125 style += "width: #{subject_width}px;"
93 style += "height: #{t_height}px;"
126 style += "height: #{t_height}px;"
94 style += 'border-left: 1px solid #c0c0c0;'
127 style += 'border-left: 1px solid #c0c0c0;'
95 style += 'overflow: hidden;'
128 style += 'overflow: hidden;'
96 %>
129 %>
97 <%= content_tag(:div, "", :style => style, :class => "gantt_hdr") %>
130 <%= content_tag(:div, "", :style => style, :class => "gantt_hdr") %>
98 <%= content_tag(:div, :class => "gantt_subjects") do %>
131 <%= content_tag(:div, :class => "gantt_subjects") do %>
99 <%= @gantt.subjects.html_safe %>
132 <%= @gantt.subjects.html_safe %>
100 <% end %>
133 <% end %>
101 <% end %>
134 <% end %>
102 </td>
135 </td>
103
136
104 <td>
137 <td>
105 <div style="position:relative;height:<%= t_height + 24 %>px;overflow:auto;" id="gantt_area">
138 <div style="position:relative;height:<%= t_height + 24 %>px;overflow:auto;" id="gantt_area">
106 <%
139 <%
107 style = ""
140 style = ""
108 style += "width: #{g_width - 1}px;"
141 style += "width: #{g_width - 1}px;"
109 style += "height: #{headers_height}px;"
142 style += "height: #{headers_height}px;"
110 style += 'background: #eee;'
143 style += 'background: #eee;'
111 %>
144 %>
112 <%= content_tag(:div, '&nbsp;'.html_safe, :style => style, :class => "gantt_hdr") %>
145 <%= content_tag(:div, '&nbsp;'.html_safe, :style => style, :class => "gantt_hdr") %>
113
146
114 <% ###### Months headers ###### %>
147 <% ###### Months headers ###### %>
115 <%
148 <%
116 month_f = @gantt.date_from
149 month_f = @gantt.date_from
117 left = 0
150 left = 0
118 height = (show_weeks ? header_heigth : header_heigth + g_height)
151 height = (show_weeks ? header_heigth : header_heigth + g_height)
119 %>
152 %>
120 <% @gantt.months.times do %>
153 <% @gantt.months.times do %>
121 <%
154 <%
122 width = (((month_f >> 1) - month_f) * zoom - 1).to_i
155 width = (((month_f >> 1) - month_f) * zoom - 1).to_i
123 style = ""
156 style = ""
124 style += "left: #{left}px;"
157 style += "left: #{left}px;"
125 style += "width: #{width}px;"
158 style += "width: #{width}px;"
126 style += "height: #{height}px;"
159 style += "height: #{height}px;"
127 %>
160 %>
128 <%= content_tag(:div, :style => style, :class => "gantt_hdr") do %>
161 <%= content_tag(:div, :style => style, :class => "gantt_hdr") do %>
129 <%= link_to h("#{month_f.year}-#{month_f.month}"),
162 <%= link_to h("#{month_f.year}-#{month_f.month}"),
130 @gantt.params.merge(:year => month_f.year, :month => month_f.month),
163 @gantt.params.merge(:year => month_f.year, :month => month_f.month),
131 :title => "#{month_name(month_f.month)} #{month_f.year}" %>
164 :title => "#{month_name(month_f.month)} #{month_f.year}" %>
132 <% end %>
165 <% end %>
133 <%
166 <%
134 left = left + width + 1
167 left = left + width + 1
135 month_f = month_f >> 1
168 month_f = month_f >> 1
136 %>
169 %>
137 <% end %>
170 <% end %>
138
171
139 <% ###### Weeks headers ###### %>
172 <% ###### Weeks headers ###### %>
140 <% if show_weeks %>
173 <% if show_weeks %>
141 <%
174 <%
142 left = 0
175 left = 0
143 height = (show_days ? header_heigth - 1 : header_heigth - 1 + g_height)
176 height = (show_days ? header_heigth - 1 : header_heigth - 1 + g_height)
144 %>
177 %>
145 <% if @gantt.date_from.cwday == 1 %>
178 <% if @gantt.date_from.cwday == 1 %>
146 <%
179 <%
147 # @date_from is monday
180 # @date_from is monday
148 week_f = @gantt.date_from
181 week_f = @gantt.date_from
149 %>
182 %>
150 <% else %>
183 <% else %>
151 <%
184 <%
152 # find next monday after @date_from
185 # find next monday after @date_from
153 week_f = @gantt.date_from + (7 - @gantt.date_from.cwday + 1)
186 week_f = @gantt.date_from + (7 - @gantt.date_from.cwday + 1)
154 width = (7 - @gantt.date_from.cwday + 1) * zoom - 1
187 width = (7 - @gantt.date_from.cwday + 1) * zoom - 1
155 style = ""
188 style = ""
156 style += "left: #{left}px;"
189 style += "left: #{left}px;"
157 style += "top: 19px;"
190 style += "top: 19px;"
158 style += "width: #{width}px;"
191 style += "width: #{width}px;"
159 style += "height: #{height}px;"
192 style += "height: #{height}px;"
160 %>
193 %>
161 <%= content_tag(:div, '&nbsp;'.html_safe,
194 <%= content_tag(:div, '&nbsp;'.html_safe,
162 :style => style, :class => "gantt_hdr") %>
195 :style => style, :class => "gantt_hdr") %>
163 <% left = left + width + 1 %>
196 <% left = left + width + 1 %>
164 <% end %>
197 <% end %>
165 <% while week_f <= @gantt.date_to %>
198 <% while week_f <= @gantt.date_to %>
166 <%
199 <%
167 width = ((week_f + 6 <= @gantt.date_to) ?
200 width = ((week_f + 6 <= @gantt.date_to) ?
168 7 * zoom - 1 :
201 7 * zoom - 1 :
169 (@gantt.date_to - week_f + 1) * zoom - 1).to_i
202 (@gantt.date_to - week_f + 1) * zoom - 1).to_i
170 style = ""
203 style = ""
171 style += "left: #{left}px;"
204 style += "left: #{left}px;"
172 style += "top: 19px;"
205 style += "top: 19px;"
173 style += "width: #{width}px;"
206 style += "width: #{width}px;"
174 style += "height: #{height}px;"
207 style += "height: #{height}px;"
175 %>
208 %>
176 <%= content_tag(:div, :style => style, :class => "gantt_hdr") do %>
209 <%= content_tag(:div, :style => style, :class => "gantt_hdr") do %>
177 <%= content_tag(:small) do %>
210 <%= content_tag(:small) do %>
178 <%= week_f.cweek if width >= 16 %>
211 <%= week_f.cweek if width >= 16 %>
179 <% end %>
212 <% end %>
180 <% end %>
213 <% end %>
181 <%
214 <%
182 left = left + width + 1
215 left = left + width + 1
183 week_f = week_f + 7
216 week_f = week_f + 7
184 %>
217 %>
185 <% end %>
218 <% end %>
186 <% end %>
219 <% end %>
187
220
188 <% ###### Days headers ####### %>
221 <% ###### Days headers ####### %>
189 <% if show_days %>
222 <% if show_days %>
190 <%
223 <%
191 left = 0
224 left = 0
192 height = g_height + header_heigth - 1
225 height = g_height + header_heigth - 1
193 wday = @gantt.date_from.cwday
226 wday = @gantt.date_from.cwday
194 %>
227 %>
195 <% (@gantt.date_to - @gantt.date_from + 1).to_i.times do %>
228 <% (@gantt.date_to - @gantt.date_from + 1).to_i.times do %>
196 <%
229 <%
197 width = zoom - 1
230 width = zoom - 1
198 style = ""
231 style = ""
199 style += "left: #{left}px;"
232 style += "left: #{left}px;"
200 style += "top:37px;"
233 style += "top:37px;"
201 style += "width: #{width}px;"
234 style += "width: #{width}px;"
202 style += "height: #{height}px;"
235 style += "height: #{height}px;"
203 style += "font-size:0.7em;"
236 style += "font-size:0.7em;"
204 clss = "gantt_hdr"
237 clss = "gantt_hdr"
205 clss << " nwday" if @gantt.non_working_week_days.include?(wday)
238 clss << " nwday" if @gantt.non_working_week_days.include?(wday)
206 %>
239 %>
207 <%= content_tag(:div, :style => style, :class => clss) do %>
240 <%= content_tag(:div, :style => style, :class => clss) do %>
208 <%= day_letter(wday) %>
241 <%= day_letter(wday) %>
209 <% end %>
242 <% end %>
210 <%
243 <%
211 left = left + width + 1
244 left = left + width + 1
212 wday = wday + 1
245 wday = wday + 1
213 wday = 1 if wday > 7
246 wday = 1 if wday > 7
214 %>
247 %>
215 <% end %>
248 <% end %>
216 <% end %>
249 <% end %>
217
250
218 <%= @gantt.lines.html_safe %>
251 <%= @gantt.lines.html_safe %>
219
252
220 <% ###### Today red line (excluded from cache) ###### %>
253 <% ###### Today red line (excluded from cache) ###### %>
221 <% if Date.today >= @gantt.date_from and Date.today <= @gantt.date_to %>
254 <% if Date.today >= @gantt.date_from and Date.today <= @gantt.date_to %>
222 <%
255 <%
223 today_left = (((Date.today - @gantt.date_from + 1) * zoom).floor() - 1).to_i
256 today_left = (((Date.today - @gantt.date_from + 1) * zoom).floor() - 1).to_i
224 style = ""
257 style = ""
225 style += "position: absolute;"
258 style += "position: absolute;"
226 style += "height: #{g_height}px;"
259 style += "height: #{g_height}px;"
227 style += "top: #{headers_height + 1}px;"
260 style += "top: #{headers_height + 1}px;"
228 style += "left: #{today_left}px;"
261 style += "left: #{today_left}px;"
229 style += "width:10px;"
262 style += "width:10px;"
230 style += "border-left: 1px dashed red;"
263 style += "border-left: 1px dashed red;"
231 %>
264 %>
232 <%= content_tag(:div, '&nbsp;'.html_safe, :style => style) %>
265 <%= content_tag(:div, '&nbsp;'.html_safe, :style => style, :id => 'today_line') %>
233 <% end %>
266 <% end %>
234 <%
267 <%
235 style = ""
268 style = ""
236 style += "position: absolute;"
269 style += "position: absolute;"
237 style += "height: #{g_height}px;"
270 style += "height: #{g_height}px;"
238 style += "top: #{headers_height + 1}px;"
271 style += "top: #{headers_height + 1}px;"
239 style += "left: 0px;"
272 style += "left: 0px;"
240 style += "width: #{g_width - 1}px;"
273 style += "width: #{g_width - 1}px;"
241 %>
274 %>
242 <%= content_tag(:div, '', :style => style, :id => "gantt_draw_area") %>
275 <%= content_tag(:div, '', :style => style, :id => "gantt_draw_area") %>
243 </div>
276 </div>
244 </td>
277 </td>
245 </tr>
278 </tr>
246 </table>
279 </table>
247
280
248 <table style="width:100%">
281 <table style="width:100%">
249 <tr>
282 <tr>
250 <td align="left">
283 <td align="left">
251 <%= link_to_content_update("\xc2\xab " + l(:label_previous),
284 <%= link_to_content_update("\xc2\xab " + l(:label_previous),
252 params.merge(@gantt.params_previous)) %>
285 params.merge(@gantt.params_previous)) %>
253 </td>
286 </td>
254 <td align="right">
287 <td align="right">
255 <%= link_to_content_update(l(:label_next) + " \xc2\xbb",
288 <%= link_to_content_update(l(:label_next) + " \xc2\xbb",
256 params.merge(@gantt.params_next)) %>
289 params.merge(@gantt.params_next)) %>
257 </td>
290 </td>
258 </tr>
291 </tr>
259 </table>
292 </table>
260
293
261 <% other_formats_links do |f| %>
294 <% other_formats_links do |f| %>
262 <%= f.link_to 'PDF', :url => params.merge(@gantt.params) %>
295 <%= f.link_to 'PDF', :url => params.merge(@gantt.params) %>
263 <%= f.link_to('PNG', :url => params.merge(@gantt.params)) if @gantt.respond_to?('to_image') %>
296 <%= f.link_to('PNG', :url => params.merge(@gantt.params)) if @gantt.respond_to?('to_image') %>
264 <% end %>
297 <% end %>
265 <% end # query.valid? %>
298 <% end # query.valid? %>
266
299
267 <% content_for :sidebar do %>
300 <% content_for :sidebar do %>
268 <%= render :partial => 'issues/sidebar' %>
301 <%= render :partial => 'issues/sidebar' %>
269 <% end %>
302 <% end %>
270
303
271 <% html_title(l(:label_gantt)) -%>
304 <% html_title(l(:label_gantt)) -%>
272
305
273 <% content_for :header_tags do %>
306 <% content_for :header_tags do %>
274 <%= javascript_include_tag 'raphael' %>
307 <%= javascript_include_tag 'raphael' %>
275 <%= javascript_include_tag 'gantt' %>
308 <%= javascript_include_tag 'gantt' %>
276 <% end %>
309 <% end %>
277
310
278 <%= javascript_tag do %>
311 <%= javascript_tag do %>
279 var issue_relation_type = <%= raw Redmine::Helpers::Gantt::DRAW_TYPES.to_json %>;
312 var issue_relation_type = <%= raw Redmine::Helpers::Gantt::DRAW_TYPES.to_json %>;
280 $(document).ready(drawGanttHandler);
313 $(document).ready(drawGanttHandler);
281 $(window).resize(drawGanttHandler);
314 $(window).resize(drawGanttHandler);
315 $(function() {
316 $("#draw_rels").change(drawGanttHandler);
317 $("#draw_progress_line").change(drawGanttHandler);
318 });
282 <% end %>
319 <% end %>
@@ -1,1078 +1,1079
1 en:
1 en:
2 # Text direction: Left-to-Right (ltr) or Right-to-Left (rtl)
2 # Text direction: Left-to-Right (ltr) or Right-to-Left (rtl)
3 direction: ltr
3 direction: ltr
4 date:
4 date:
5 formats:
5 formats:
6 # Use the strftime parameters for formats.
6 # Use the strftime parameters for formats.
7 # When no format has been given, it uses default.
7 # When no format has been given, it uses default.
8 # You can provide other formats here if you like!
8 # You can provide other formats here if you like!
9 default: "%m/%d/%Y"
9 default: "%m/%d/%Y"
10 short: "%b %d"
10 short: "%b %d"
11 long: "%B %d, %Y"
11 long: "%B %d, %Y"
12
12
13 day_names: [Sunday, Monday, Tuesday, Wednesday, Thursday, Friday, Saturday]
13 day_names: [Sunday, Monday, Tuesday, Wednesday, Thursday, Friday, Saturday]
14 abbr_day_names: [Sun, Mon, Tue, Wed, Thu, Fri, Sat]
14 abbr_day_names: [Sun, Mon, Tue, Wed, Thu, Fri, Sat]
15
15
16 # Don't forget the nil at the beginning; there's no such thing as a 0th month
16 # Don't forget the nil at the beginning; there's no such thing as a 0th month
17 month_names: [~, January, February, March, April, May, June, July, August, September, October, November, December]
17 month_names: [~, January, February, March, April, May, June, July, August, September, October, November, December]
18 abbr_month_names: [~, Jan, Feb, Mar, Apr, May, Jun, Jul, Aug, Sep, Oct, Nov, Dec]
18 abbr_month_names: [~, Jan, Feb, Mar, Apr, May, Jun, Jul, Aug, Sep, Oct, Nov, Dec]
19 # Used in date_select and datime_select.
19 # Used in date_select and datime_select.
20 order:
20 order:
21 - :year
21 - :year
22 - :month
22 - :month
23 - :day
23 - :day
24
24
25 time:
25 time:
26 formats:
26 formats:
27 default: "%m/%d/%Y %I:%M %p"
27 default: "%m/%d/%Y %I:%M %p"
28 time: "%I:%M %p"
28 time: "%I:%M %p"
29 short: "%d %b %H:%M"
29 short: "%d %b %H:%M"
30 long: "%B %d, %Y %H:%M"
30 long: "%B %d, %Y %H:%M"
31 am: "am"
31 am: "am"
32 pm: "pm"
32 pm: "pm"
33
33
34 datetime:
34 datetime:
35 distance_in_words:
35 distance_in_words:
36 half_a_minute: "half a minute"
36 half_a_minute: "half a minute"
37 less_than_x_seconds:
37 less_than_x_seconds:
38 one: "less than 1 second"
38 one: "less than 1 second"
39 other: "less than %{count} seconds"
39 other: "less than %{count} seconds"
40 x_seconds:
40 x_seconds:
41 one: "1 second"
41 one: "1 second"
42 other: "%{count} seconds"
42 other: "%{count} seconds"
43 less_than_x_minutes:
43 less_than_x_minutes:
44 one: "less than a minute"
44 one: "less than a minute"
45 other: "less than %{count} minutes"
45 other: "less than %{count} minutes"
46 x_minutes:
46 x_minutes:
47 one: "1 minute"
47 one: "1 minute"
48 other: "%{count} minutes"
48 other: "%{count} minutes"
49 about_x_hours:
49 about_x_hours:
50 one: "about 1 hour"
50 one: "about 1 hour"
51 other: "about %{count} hours"
51 other: "about %{count} hours"
52 x_hours:
52 x_hours:
53 one: "1 hour"
53 one: "1 hour"
54 other: "%{count} hours"
54 other: "%{count} hours"
55 x_days:
55 x_days:
56 one: "1 day"
56 one: "1 day"
57 other: "%{count} days"
57 other: "%{count} days"
58 about_x_months:
58 about_x_months:
59 one: "about 1 month"
59 one: "about 1 month"
60 other: "about %{count} months"
60 other: "about %{count} months"
61 x_months:
61 x_months:
62 one: "1 month"
62 one: "1 month"
63 other: "%{count} months"
63 other: "%{count} months"
64 about_x_years:
64 about_x_years:
65 one: "about 1 year"
65 one: "about 1 year"
66 other: "about %{count} years"
66 other: "about %{count} years"
67 over_x_years:
67 over_x_years:
68 one: "over 1 year"
68 one: "over 1 year"
69 other: "over %{count} years"
69 other: "over %{count} years"
70 almost_x_years:
70 almost_x_years:
71 one: "almost 1 year"
71 one: "almost 1 year"
72 other: "almost %{count} years"
72 other: "almost %{count} years"
73
73
74 number:
74 number:
75 format:
75 format:
76 separator: "."
76 separator: "."
77 delimiter: ""
77 delimiter: ""
78 precision: 3
78 precision: 3
79
79
80 human:
80 human:
81 format:
81 format:
82 delimiter: ""
82 delimiter: ""
83 precision: 3
83 precision: 3
84 storage_units:
84 storage_units:
85 format: "%n %u"
85 format: "%n %u"
86 units:
86 units:
87 byte:
87 byte:
88 one: "Byte"
88 one: "Byte"
89 other: "Bytes"
89 other: "Bytes"
90 kb: "KB"
90 kb: "KB"
91 mb: "MB"
91 mb: "MB"
92 gb: "GB"
92 gb: "GB"
93 tb: "TB"
93 tb: "TB"
94
94
95 # Used in array.to_sentence.
95 # Used in array.to_sentence.
96 support:
96 support:
97 array:
97 array:
98 sentence_connector: "and"
98 sentence_connector: "and"
99 skip_last_comma: false
99 skip_last_comma: false
100
100
101 activerecord:
101 activerecord:
102 errors:
102 errors:
103 template:
103 template:
104 header:
104 header:
105 one: "1 error prohibited this %{model} from being saved"
105 one: "1 error prohibited this %{model} from being saved"
106 other: "%{count} errors prohibited this %{model} from being saved"
106 other: "%{count} errors prohibited this %{model} from being saved"
107 messages:
107 messages:
108 inclusion: "is not included in the list"
108 inclusion: "is not included in the list"
109 exclusion: "is reserved"
109 exclusion: "is reserved"
110 invalid: "is invalid"
110 invalid: "is invalid"
111 confirmation: "doesn't match confirmation"
111 confirmation: "doesn't match confirmation"
112 accepted: "must be accepted"
112 accepted: "must be accepted"
113 empty: "can't be empty"
113 empty: "can't be empty"
114 blank: "can't be blank"
114 blank: "can't be blank"
115 too_long: "is too long (maximum is %{count} characters)"
115 too_long: "is too long (maximum is %{count} characters)"
116 too_short: "is too short (minimum is %{count} characters)"
116 too_short: "is too short (minimum is %{count} characters)"
117 wrong_length: "is the wrong length (should be %{count} characters)"
117 wrong_length: "is the wrong length (should be %{count} characters)"
118 taken: "has already been taken"
118 taken: "has already been taken"
119 not_a_number: "is not a number"
119 not_a_number: "is not a number"
120 not_a_date: "is not a valid date"
120 not_a_date: "is not a valid date"
121 greater_than: "must be greater than %{count}"
121 greater_than: "must be greater than %{count}"
122 greater_than_or_equal_to: "must be greater than or equal to %{count}"
122 greater_than_or_equal_to: "must be greater than or equal to %{count}"
123 equal_to: "must be equal to %{count}"
123 equal_to: "must be equal to %{count}"
124 less_than: "must be less than %{count}"
124 less_than: "must be less than %{count}"
125 less_than_or_equal_to: "must be less than or equal to %{count}"
125 less_than_or_equal_to: "must be less than or equal to %{count}"
126 odd: "must be odd"
126 odd: "must be odd"
127 even: "must be even"
127 even: "must be even"
128 greater_than_start_date: "must be greater than start date"
128 greater_than_start_date: "must be greater than start date"
129 not_same_project: "doesn't belong to the same project"
129 not_same_project: "doesn't belong to the same project"
130 circular_dependency: "This relation would create a circular dependency"
130 circular_dependency: "This relation would create a circular dependency"
131 cant_link_an_issue_with_a_descendant: "An issue cannot be linked to one of its subtasks"
131 cant_link_an_issue_with_a_descendant: "An issue cannot be linked to one of its subtasks"
132
132
133 actionview_instancetag_blank_option: Please select
133 actionview_instancetag_blank_option: Please select
134
134
135 general_text_No: 'No'
135 general_text_No: 'No'
136 general_text_Yes: 'Yes'
136 general_text_Yes: 'Yes'
137 general_text_no: 'no'
137 general_text_no: 'no'
138 general_text_yes: 'yes'
138 general_text_yes: 'yes'
139 general_lang_name: 'English'
139 general_lang_name: 'English'
140 general_csv_separator: ','
140 general_csv_separator: ','
141 general_csv_decimal_separator: '.'
141 general_csv_decimal_separator: '.'
142 general_csv_encoding: ISO-8859-1
142 general_csv_encoding: ISO-8859-1
143 general_pdf_encoding: UTF-8
143 general_pdf_encoding: UTF-8
144 general_first_day_of_week: '7'
144 general_first_day_of_week: '7'
145
145
146 notice_account_updated: Account was successfully updated.
146 notice_account_updated: Account was successfully updated.
147 notice_account_invalid_creditentials: Invalid user or password
147 notice_account_invalid_creditentials: Invalid user or password
148 notice_account_password_updated: Password was successfully updated.
148 notice_account_password_updated: Password was successfully updated.
149 notice_account_wrong_password: Wrong password
149 notice_account_wrong_password: Wrong password
150 notice_account_register_done: Account was successfully created. To activate your account, click on the link that was emailed to you.
150 notice_account_register_done: Account was successfully created. To activate your account, click on the link that was emailed to you.
151 notice_account_unknown_email: Unknown user.
151 notice_account_unknown_email: Unknown user.
152 notice_can_t_change_password: This account uses an external authentication source. Impossible to change the password.
152 notice_can_t_change_password: This account uses an external authentication source. Impossible to change the password.
153 notice_account_lost_email_sent: An email with instructions to choose a new password has been sent to you.
153 notice_account_lost_email_sent: An email with instructions to choose a new password has been sent to you.
154 notice_account_activated: Your account has been activated. You can now log in.
154 notice_account_activated: Your account has been activated. You can now log in.
155 notice_successful_create: Successful creation.
155 notice_successful_create: Successful creation.
156 notice_successful_update: Successful update.
156 notice_successful_update: Successful update.
157 notice_successful_delete: Successful deletion.
157 notice_successful_delete: Successful deletion.
158 notice_successful_connection: Successful connection.
158 notice_successful_connection: Successful connection.
159 notice_file_not_found: The page you were trying to access doesn't exist or has been removed.
159 notice_file_not_found: The page you were trying to access doesn't exist or has been removed.
160 notice_locking_conflict: Data has been updated by another user.
160 notice_locking_conflict: Data has been updated by another user.
161 notice_not_authorized: You are not authorized to access this page.
161 notice_not_authorized: You are not authorized to access this page.
162 notice_not_authorized_archived_project: The project you're trying to access has been archived.
162 notice_not_authorized_archived_project: The project you're trying to access has been archived.
163 notice_email_sent: "An email was sent to %{value}"
163 notice_email_sent: "An email was sent to %{value}"
164 notice_email_error: "An error occurred while sending mail (%{value})"
164 notice_email_error: "An error occurred while sending mail (%{value})"
165 notice_feeds_access_key_reseted: Your RSS access key was reset.
165 notice_feeds_access_key_reseted: Your RSS access key was reset.
166 notice_api_access_key_reseted: Your API access key was reset.
166 notice_api_access_key_reseted: Your API access key was reset.
167 notice_failed_to_save_issues: "Failed to save %{count} issue(s) on %{total} selected: %{ids}."
167 notice_failed_to_save_issues: "Failed to save %{count} issue(s) on %{total} selected: %{ids}."
168 notice_failed_to_save_time_entries: "Failed to save %{count} time entrie(s) on %{total} selected: %{ids}."
168 notice_failed_to_save_time_entries: "Failed to save %{count} time entrie(s) on %{total} selected: %{ids}."
169 notice_failed_to_save_members: "Failed to save member(s): %{errors}."
169 notice_failed_to_save_members: "Failed to save member(s): %{errors}."
170 notice_no_issue_selected: "No issue is selected! Please, check the issues you want to edit."
170 notice_no_issue_selected: "No issue is selected! Please, check the issues you want to edit."
171 notice_account_pending: "Your account was created and is now pending administrator approval."
171 notice_account_pending: "Your account was created and is now pending administrator approval."
172 notice_default_data_loaded: Default configuration successfully loaded.
172 notice_default_data_loaded: Default configuration successfully loaded.
173 notice_unable_delete_version: Unable to delete version.
173 notice_unable_delete_version: Unable to delete version.
174 notice_unable_delete_time_entry: Unable to delete time log entry.
174 notice_unable_delete_time_entry: Unable to delete time log entry.
175 notice_issue_done_ratios_updated: Issue done ratios updated.
175 notice_issue_done_ratios_updated: Issue done ratios updated.
176 notice_gantt_chart_truncated: "The chart was truncated because it exceeds the maximum number of items that can be displayed (%{max})"
176 notice_gantt_chart_truncated: "The chart was truncated because it exceeds the maximum number of items that can be displayed (%{max})"
177 notice_issue_successful_create: "Issue %{id} created."
177 notice_issue_successful_create: "Issue %{id} created."
178 notice_issue_update_conflict: "The issue has been updated by an other user while you were editing it."
178 notice_issue_update_conflict: "The issue has been updated by an other user while you were editing it."
179 notice_account_deleted: "Your account has been permanently deleted."
179 notice_account_deleted: "Your account has been permanently deleted."
180 notice_user_successful_create: "User %{id} created."
180 notice_user_successful_create: "User %{id} created."
181
181
182 error_can_t_load_default_data: "Default configuration could not be loaded: %{value}"
182 error_can_t_load_default_data: "Default configuration could not be loaded: %{value}"
183 error_scm_not_found: "The entry or revision was not found in the repository."
183 error_scm_not_found: "The entry or revision was not found in the repository."
184 error_scm_command_failed: "An error occurred when trying to access the repository: %{value}"
184 error_scm_command_failed: "An error occurred when trying to access the repository: %{value}"
185 error_scm_annotate: "The entry does not exist or cannot be annotated."
185 error_scm_annotate: "The entry does not exist or cannot be annotated."
186 error_scm_annotate_big_text_file: "The entry cannot be annotated, as it exceeds the maximum text file size."
186 error_scm_annotate_big_text_file: "The entry cannot be annotated, as it exceeds the maximum text file size."
187 error_issue_not_found_in_project: 'The issue was not found or does not belong to this project'
187 error_issue_not_found_in_project: 'The issue was not found or does not belong to this project'
188 error_no_tracker_in_project: 'No tracker is associated to this project. Please check the Project settings.'
188 error_no_tracker_in_project: 'No tracker is associated to this project. Please check the Project settings.'
189 error_no_default_issue_status: 'No default issue status is defined. Please check your configuration (Go to "Administration -> Issue statuses").'
189 error_no_default_issue_status: 'No default issue status is defined. Please check your configuration (Go to "Administration -> Issue statuses").'
190 error_can_not_delete_custom_field: Unable to delete custom field
190 error_can_not_delete_custom_field: Unable to delete custom field
191 error_can_not_delete_tracker: "This tracker contains issues and cannot be deleted."
191 error_can_not_delete_tracker: "This tracker contains issues and cannot be deleted."
192 error_can_not_remove_role: "This role is in use and cannot be deleted."
192 error_can_not_remove_role: "This role is in use and cannot be deleted."
193 error_can_not_reopen_issue_on_closed_version: 'An issue assigned to a closed version cannot be reopened'
193 error_can_not_reopen_issue_on_closed_version: 'An issue assigned to a closed version cannot be reopened'
194 error_can_not_archive_project: This project cannot be archived
194 error_can_not_archive_project: This project cannot be archived
195 error_issue_done_ratios_not_updated: "Issue done ratios not updated."
195 error_issue_done_ratios_not_updated: "Issue done ratios not updated."
196 error_workflow_copy_source: 'Please select a source tracker or role'
196 error_workflow_copy_source: 'Please select a source tracker or role'
197 error_workflow_copy_target: 'Please select target tracker(s) and role(s)'
197 error_workflow_copy_target: 'Please select target tracker(s) and role(s)'
198 error_unable_delete_issue_status: 'Unable to delete issue status'
198 error_unable_delete_issue_status: 'Unable to delete issue status'
199 error_unable_to_connect: "Unable to connect (%{value})"
199 error_unable_to_connect: "Unable to connect (%{value})"
200 error_attachment_too_big: "This file cannot be uploaded because it exceeds the maximum allowed file size (%{max_size})"
200 error_attachment_too_big: "This file cannot be uploaded because it exceeds the maximum allowed file size (%{max_size})"
201 error_session_expired: "Your session has expired. Please login again."
201 error_session_expired: "Your session has expired. Please login again."
202 warning_attachments_not_saved: "%{count} file(s) could not be saved."
202 warning_attachments_not_saved: "%{count} file(s) could not be saved."
203
203
204 mail_subject_lost_password: "Your %{value} password"
204 mail_subject_lost_password: "Your %{value} password"
205 mail_body_lost_password: 'To change your password, click on the following link:'
205 mail_body_lost_password: 'To change your password, click on the following link:'
206 mail_subject_register: "Your %{value} account activation"
206 mail_subject_register: "Your %{value} account activation"
207 mail_body_register: 'To activate your account, click on the following link:'
207 mail_body_register: 'To activate your account, click on the following link:'
208 mail_body_account_information_external: "You can use your %{value} account to log in."
208 mail_body_account_information_external: "You can use your %{value} account to log in."
209 mail_body_account_information: Your account information
209 mail_body_account_information: Your account information
210 mail_subject_account_activation_request: "%{value} account activation request"
210 mail_subject_account_activation_request: "%{value} account activation request"
211 mail_body_account_activation_request: "A new user (%{value}) has registered. The account is pending your approval:"
211 mail_body_account_activation_request: "A new user (%{value}) has registered. The account is pending your approval:"
212 mail_subject_reminder: "%{count} issue(s) due in the next %{days} days"
212 mail_subject_reminder: "%{count} issue(s) due in the next %{days} days"
213 mail_body_reminder: "%{count} issue(s) that are assigned to you are due in the next %{days} days:"
213 mail_body_reminder: "%{count} issue(s) that are assigned to you are due in the next %{days} days:"
214 mail_subject_wiki_content_added: "'%{id}' wiki page has been added"
214 mail_subject_wiki_content_added: "'%{id}' wiki page has been added"
215 mail_body_wiki_content_added: "The '%{id}' wiki page has been added by %{author}."
215 mail_body_wiki_content_added: "The '%{id}' wiki page has been added by %{author}."
216 mail_subject_wiki_content_updated: "'%{id}' wiki page has been updated"
216 mail_subject_wiki_content_updated: "'%{id}' wiki page has been updated"
217 mail_body_wiki_content_updated: "The '%{id}' wiki page has been updated by %{author}."
217 mail_body_wiki_content_updated: "The '%{id}' wiki page has been updated by %{author}."
218
218
219 field_name: Name
219 field_name: Name
220 field_description: Description
220 field_description: Description
221 field_summary: Summary
221 field_summary: Summary
222 field_is_required: Required
222 field_is_required: Required
223 field_firstname: First name
223 field_firstname: First name
224 field_lastname: Last name
224 field_lastname: Last name
225 field_mail: Email
225 field_mail: Email
226 field_filename: File
226 field_filename: File
227 field_filesize: Size
227 field_filesize: Size
228 field_downloads: Downloads
228 field_downloads: Downloads
229 field_author: Author
229 field_author: Author
230 field_created_on: Created
230 field_created_on: Created
231 field_updated_on: Updated
231 field_updated_on: Updated
232 field_field_format: Format
232 field_field_format: Format
233 field_is_for_all: For all projects
233 field_is_for_all: For all projects
234 field_possible_values: Possible values
234 field_possible_values: Possible values
235 field_regexp: Regular expression
235 field_regexp: Regular expression
236 field_min_length: Minimum length
236 field_min_length: Minimum length
237 field_max_length: Maximum length
237 field_max_length: Maximum length
238 field_value: Value
238 field_value: Value
239 field_category: Category
239 field_category: Category
240 field_title: Title
240 field_title: Title
241 field_project: Project
241 field_project: Project
242 field_issue: Issue
242 field_issue: Issue
243 field_status: Status
243 field_status: Status
244 field_notes: Notes
244 field_notes: Notes
245 field_is_closed: Issue closed
245 field_is_closed: Issue closed
246 field_is_default: Default value
246 field_is_default: Default value
247 field_tracker: Tracker
247 field_tracker: Tracker
248 field_subject: Subject
248 field_subject: Subject
249 field_due_date: Due date
249 field_due_date: Due date
250 field_assigned_to: Assignee
250 field_assigned_to: Assignee
251 field_priority: Priority
251 field_priority: Priority
252 field_fixed_version: Target version
252 field_fixed_version: Target version
253 field_user: User
253 field_user: User
254 field_principal: Principal
254 field_principal: Principal
255 field_role: Role
255 field_role: Role
256 field_homepage: Homepage
256 field_homepage: Homepage
257 field_is_public: Public
257 field_is_public: Public
258 field_parent: Subproject of
258 field_parent: Subproject of
259 field_is_in_roadmap: Issues displayed in roadmap
259 field_is_in_roadmap: Issues displayed in roadmap
260 field_login: Login
260 field_login: Login
261 field_mail_notification: Email notifications
261 field_mail_notification: Email notifications
262 field_admin: Administrator
262 field_admin: Administrator
263 field_last_login_on: Last connection
263 field_last_login_on: Last connection
264 field_language: Language
264 field_language: Language
265 field_effective_date: Date
265 field_effective_date: Date
266 field_password: Password
266 field_password: Password
267 field_new_password: New password
267 field_new_password: New password
268 field_password_confirmation: Confirmation
268 field_password_confirmation: Confirmation
269 field_version: Version
269 field_version: Version
270 field_type: Type
270 field_type: Type
271 field_host: Host
271 field_host: Host
272 field_port: Port
272 field_port: Port
273 field_account: Account
273 field_account: Account
274 field_base_dn: Base DN
274 field_base_dn: Base DN
275 field_attr_login: Login attribute
275 field_attr_login: Login attribute
276 field_attr_firstname: Firstname attribute
276 field_attr_firstname: Firstname attribute
277 field_attr_lastname: Lastname attribute
277 field_attr_lastname: Lastname attribute
278 field_attr_mail: Email attribute
278 field_attr_mail: Email attribute
279 field_onthefly: On-the-fly user creation
279 field_onthefly: On-the-fly user creation
280 field_start_date: Start date
280 field_start_date: Start date
281 field_done_ratio: "% Done"
281 field_done_ratio: "% Done"
282 field_auth_source: Authentication mode
282 field_auth_source: Authentication mode
283 field_hide_mail: Hide my email address
283 field_hide_mail: Hide my email address
284 field_comments: Comment
284 field_comments: Comment
285 field_url: URL
285 field_url: URL
286 field_start_page: Start page
286 field_start_page: Start page
287 field_subproject: Subproject
287 field_subproject: Subproject
288 field_hours: Hours
288 field_hours: Hours
289 field_activity: Activity
289 field_activity: Activity
290 field_spent_on: Date
290 field_spent_on: Date
291 field_identifier: Identifier
291 field_identifier: Identifier
292 field_is_filter: Used as a filter
292 field_is_filter: Used as a filter
293 field_issue_to: Related issue
293 field_issue_to: Related issue
294 field_delay: Delay
294 field_delay: Delay
295 field_assignable: Issues can be assigned to this role
295 field_assignable: Issues can be assigned to this role
296 field_redirect_existing_links: Redirect existing links
296 field_redirect_existing_links: Redirect existing links
297 field_estimated_hours: Estimated time
297 field_estimated_hours: Estimated time
298 field_column_names: Columns
298 field_column_names: Columns
299 field_time_entries: Log time
299 field_time_entries: Log time
300 field_time_zone: Time zone
300 field_time_zone: Time zone
301 field_searchable: Searchable
301 field_searchable: Searchable
302 field_default_value: Default value
302 field_default_value: Default value
303 field_comments_sorting: Display comments
303 field_comments_sorting: Display comments
304 field_parent_title: Parent page
304 field_parent_title: Parent page
305 field_editable: Editable
305 field_editable: Editable
306 field_watcher: Watcher
306 field_watcher: Watcher
307 field_identity_url: OpenID URL
307 field_identity_url: OpenID URL
308 field_content: Content
308 field_content: Content
309 field_group_by: Group results by
309 field_group_by: Group results by
310 field_sharing: Sharing
310 field_sharing: Sharing
311 field_parent_issue: Parent task
311 field_parent_issue: Parent task
312 field_member_of_group: "Assignee's group"
312 field_member_of_group: "Assignee's group"
313 field_assigned_to_role: "Assignee's role"
313 field_assigned_to_role: "Assignee's role"
314 field_text: Text field
314 field_text: Text field
315 field_visible: Visible
315 field_visible: Visible
316 field_warn_on_leaving_unsaved: "Warn me when leaving a page with unsaved text"
316 field_warn_on_leaving_unsaved: "Warn me when leaving a page with unsaved text"
317 field_issues_visibility: Issues visibility
317 field_issues_visibility: Issues visibility
318 field_is_private: Private
318 field_is_private: Private
319 field_commit_logs_encoding: Commit messages encoding
319 field_commit_logs_encoding: Commit messages encoding
320 field_scm_path_encoding: Path encoding
320 field_scm_path_encoding: Path encoding
321 field_path_to_repository: Path to repository
321 field_path_to_repository: Path to repository
322 field_root_directory: Root directory
322 field_root_directory: Root directory
323 field_cvsroot: CVSROOT
323 field_cvsroot: CVSROOT
324 field_cvs_module: Module
324 field_cvs_module: Module
325 field_repository_is_default: Main repository
325 field_repository_is_default: Main repository
326 field_multiple: Multiple values
326 field_multiple: Multiple values
327 field_auth_source_ldap_filter: LDAP filter
327 field_auth_source_ldap_filter: LDAP filter
328 field_core_fields: Standard fields
328 field_core_fields: Standard fields
329 field_timeout: "Timeout (in seconds)"
329 field_timeout: "Timeout (in seconds)"
330 field_board_parent: Parent forum
330 field_board_parent: Parent forum
331 field_private_notes: Private notes
331 field_private_notes: Private notes
332
332
333 setting_app_title: Application title
333 setting_app_title: Application title
334 setting_app_subtitle: Application subtitle
334 setting_app_subtitle: Application subtitle
335 setting_welcome_text: Welcome text
335 setting_welcome_text: Welcome text
336 setting_default_language: Default language
336 setting_default_language: Default language
337 setting_login_required: Authentication required
337 setting_login_required: Authentication required
338 setting_self_registration: Self-registration
338 setting_self_registration: Self-registration
339 setting_attachment_max_size: Maximum attachment size
339 setting_attachment_max_size: Maximum attachment size
340 setting_issues_export_limit: Issues export limit
340 setting_issues_export_limit: Issues export limit
341 setting_mail_from: Emission email address
341 setting_mail_from: Emission email address
342 setting_bcc_recipients: Blind carbon copy recipients (bcc)
342 setting_bcc_recipients: Blind carbon copy recipients (bcc)
343 setting_plain_text_mail: Plain text mail (no HTML)
343 setting_plain_text_mail: Plain text mail (no HTML)
344 setting_host_name: Host name and path
344 setting_host_name: Host name and path
345 setting_text_formatting: Text formatting
345 setting_text_formatting: Text formatting
346 setting_wiki_compression: Wiki history compression
346 setting_wiki_compression: Wiki history compression
347 setting_feeds_limit: Maximum number of items in Atom feeds
347 setting_feeds_limit: Maximum number of items in Atom feeds
348 setting_default_projects_public: New projects are public by default
348 setting_default_projects_public: New projects are public by default
349 setting_autofetch_changesets: Fetch commits automatically
349 setting_autofetch_changesets: Fetch commits automatically
350 setting_sys_api_enabled: Enable WS for repository management
350 setting_sys_api_enabled: Enable WS for repository management
351 setting_commit_ref_keywords: Referencing keywords
351 setting_commit_ref_keywords: Referencing keywords
352 setting_commit_fix_keywords: Fixing keywords
352 setting_commit_fix_keywords: Fixing keywords
353 setting_autologin: Autologin
353 setting_autologin: Autologin
354 setting_date_format: Date format
354 setting_date_format: Date format
355 setting_time_format: Time format
355 setting_time_format: Time format
356 setting_cross_project_issue_relations: Allow cross-project issue relations
356 setting_cross_project_issue_relations: Allow cross-project issue relations
357 setting_cross_project_subtasks: Allow cross-project subtasks
357 setting_cross_project_subtasks: Allow cross-project subtasks
358 setting_issue_list_default_columns: Default columns displayed on the issue list
358 setting_issue_list_default_columns: Default columns displayed on the issue list
359 setting_repositories_encodings: Attachments and repositories encodings
359 setting_repositories_encodings: Attachments and repositories encodings
360 setting_emails_header: Emails header
360 setting_emails_header: Emails header
361 setting_emails_footer: Emails footer
361 setting_emails_footer: Emails footer
362 setting_protocol: Protocol
362 setting_protocol: Protocol
363 setting_per_page_options: Objects per page options
363 setting_per_page_options: Objects per page options
364 setting_user_format: Users display format
364 setting_user_format: Users display format
365 setting_activity_days_default: Days displayed on project activity
365 setting_activity_days_default: Days displayed on project activity
366 setting_display_subprojects_issues: Display subprojects issues on main projects by default
366 setting_display_subprojects_issues: Display subprojects issues on main projects by default
367 setting_enabled_scm: Enabled SCM
367 setting_enabled_scm: Enabled SCM
368 setting_mail_handler_body_delimiters: "Truncate emails after one of these lines"
368 setting_mail_handler_body_delimiters: "Truncate emails after one of these lines"
369 setting_mail_handler_api_enabled: Enable WS for incoming emails
369 setting_mail_handler_api_enabled: Enable WS for incoming emails
370 setting_mail_handler_api_key: API key
370 setting_mail_handler_api_key: API key
371 setting_sequential_project_identifiers: Generate sequential project identifiers
371 setting_sequential_project_identifiers: Generate sequential project identifiers
372 setting_gravatar_enabled: Use Gravatar user icons
372 setting_gravatar_enabled: Use Gravatar user icons
373 setting_gravatar_default: Default Gravatar image
373 setting_gravatar_default: Default Gravatar image
374 setting_diff_max_lines_displayed: Maximum number of diff lines displayed
374 setting_diff_max_lines_displayed: Maximum number of diff lines displayed
375 setting_file_max_size_displayed: Maximum size of text files displayed inline
375 setting_file_max_size_displayed: Maximum size of text files displayed inline
376 setting_repository_log_display_limit: Maximum number of revisions displayed on file log
376 setting_repository_log_display_limit: Maximum number of revisions displayed on file log
377 setting_openid: Allow OpenID login and registration
377 setting_openid: Allow OpenID login and registration
378 setting_password_min_length: Minimum password length
378 setting_password_min_length: Minimum password length
379 setting_new_project_user_role_id: Role given to a non-admin user who creates a project
379 setting_new_project_user_role_id: Role given to a non-admin user who creates a project
380 setting_default_projects_modules: Default enabled modules for new projects
380 setting_default_projects_modules: Default enabled modules for new projects
381 setting_issue_done_ratio: Calculate the issue done ratio with
381 setting_issue_done_ratio: Calculate the issue done ratio with
382 setting_issue_done_ratio_issue_field: Use the issue field
382 setting_issue_done_ratio_issue_field: Use the issue field
383 setting_issue_done_ratio_issue_status: Use the issue status
383 setting_issue_done_ratio_issue_status: Use the issue status
384 setting_start_of_week: Start calendars on
384 setting_start_of_week: Start calendars on
385 setting_rest_api_enabled: Enable REST web service
385 setting_rest_api_enabled: Enable REST web service
386 setting_cache_formatted_text: Cache formatted text
386 setting_cache_formatted_text: Cache formatted text
387 setting_default_notification_option: Default notification option
387 setting_default_notification_option: Default notification option
388 setting_commit_logtime_enabled: Enable time logging
388 setting_commit_logtime_enabled: Enable time logging
389 setting_commit_logtime_activity_id: Activity for logged time
389 setting_commit_logtime_activity_id: Activity for logged time
390 setting_gantt_items_limit: Maximum number of items displayed on the gantt chart
390 setting_gantt_items_limit: Maximum number of items displayed on the gantt chart
391 setting_issue_group_assignment: Allow issue assignment to groups
391 setting_issue_group_assignment: Allow issue assignment to groups
392 setting_default_issue_start_date_to_creation_date: Use current date as start date for new issues
392 setting_default_issue_start_date_to_creation_date: Use current date as start date for new issues
393 setting_commit_cross_project_ref: Allow issues of all the other projects to be referenced and fixed
393 setting_commit_cross_project_ref: Allow issues of all the other projects to be referenced and fixed
394 setting_unsubscribe: Allow users to delete their own account
394 setting_unsubscribe: Allow users to delete their own account
395 setting_session_lifetime: Session maximum lifetime
395 setting_session_lifetime: Session maximum lifetime
396 setting_session_timeout: Session inactivity timeout
396 setting_session_timeout: Session inactivity timeout
397 setting_thumbnails_enabled: Display attachment thumbnails
397 setting_thumbnails_enabled: Display attachment thumbnails
398 setting_thumbnails_size: Thumbnails size (in pixels)
398 setting_thumbnails_size: Thumbnails size (in pixels)
399 setting_non_working_week_days: Non-working days
399 setting_non_working_week_days: Non-working days
400
400
401 permission_add_project: Create project
401 permission_add_project: Create project
402 permission_add_subprojects: Create subprojects
402 permission_add_subprojects: Create subprojects
403 permission_edit_project: Edit project
403 permission_edit_project: Edit project
404 permission_close_project: Close / reopen the project
404 permission_close_project: Close / reopen the project
405 permission_select_project_modules: Select project modules
405 permission_select_project_modules: Select project modules
406 permission_manage_members: Manage members
406 permission_manage_members: Manage members
407 permission_manage_project_activities: Manage project activities
407 permission_manage_project_activities: Manage project activities
408 permission_manage_versions: Manage versions
408 permission_manage_versions: Manage versions
409 permission_manage_categories: Manage issue categories
409 permission_manage_categories: Manage issue categories
410 permission_view_issues: View Issues
410 permission_view_issues: View Issues
411 permission_add_issues: Add issues
411 permission_add_issues: Add issues
412 permission_edit_issues: Edit issues
412 permission_edit_issues: Edit issues
413 permission_manage_issue_relations: Manage issue relations
413 permission_manage_issue_relations: Manage issue relations
414 permission_set_issues_private: Set issues public or private
414 permission_set_issues_private: Set issues public or private
415 permission_set_own_issues_private: Set own issues public or private
415 permission_set_own_issues_private: Set own issues public or private
416 permission_add_issue_notes: Add notes
416 permission_add_issue_notes: Add notes
417 permission_edit_issue_notes: Edit notes
417 permission_edit_issue_notes: Edit notes
418 permission_edit_own_issue_notes: Edit own notes
418 permission_edit_own_issue_notes: Edit own notes
419 permission_view_private_notes: View private notes
419 permission_view_private_notes: View private notes
420 permission_set_notes_private: Set notes as private
420 permission_set_notes_private: Set notes as private
421 permission_move_issues: Move issues
421 permission_move_issues: Move issues
422 permission_delete_issues: Delete issues
422 permission_delete_issues: Delete issues
423 permission_manage_public_queries: Manage public queries
423 permission_manage_public_queries: Manage public queries
424 permission_save_queries: Save queries
424 permission_save_queries: Save queries
425 permission_view_gantt: View gantt chart
425 permission_view_gantt: View gantt chart
426 permission_view_calendar: View calendar
426 permission_view_calendar: View calendar
427 permission_view_issue_watchers: View watchers list
427 permission_view_issue_watchers: View watchers list
428 permission_add_issue_watchers: Add watchers
428 permission_add_issue_watchers: Add watchers
429 permission_delete_issue_watchers: Delete watchers
429 permission_delete_issue_watchers: Delete watchers
430 permission_log_time: Log spent time
430 permission_log_time: Log spent time
431 permission_view_time_entries: View spent time
431 permission_view_time_entries: View spent time
432 permission_edit_time_entries: Edit time logs
432 permission_edit_time_entries: Edit time logs
433 permission_edit_own_time_entries: Edit own time logs
433 permission_edit_own_time_entries: Edit own time logs
434 permission_manage_news: Manage news
434 permission_manage_news: Manage news
435 permission_comment_news: Comment news
435 permission_comment_news: Comment news
436 permission_view_documents: View documents
436 permission_view_documents: View documents
437 permission_add_documents: Add documents
437 permission_add_documents: Add documents
438 permission_edit_documents: Edit documents
438 permission_edit_documents: Edit documents
439 permission_delete_documents: Delete documents
439 permission_delete_documents: Delete documents
440 permission_manage_files: Manage files
440 permission_manage_files: Manage files
441 permission_view_files: View files
441 permission_view_files: View files
442 permission_manage_wiki: Manage wiki
442 permission_manage_wiki: Manage wiki
443 permission_rename_wiki_pages: Rename wiki pages
443 permission_rename_wiki_pages: Rename wiki pages
444 permission_delete_wiki_pages: Delete wiki pages
444 permission_delete_wiki_pages: Delete wiki pages
445 permission_view_wiki_pages: View wiki
445 permission_view_wiki_pages: View wiki
446 permission_view_wiki_edits: View wiki history
446 permission_view_wiki_edits: View wiki history
447 permission_edit_wiki_pages: Edit wiki pages
447 permission_edit_wiki_pages: Edit wiki pages
448 permission_delete_wiki_pages_attachments: Delete attachments
448 permission_delete_wiki_pages_attachments: Delete attachments
449 permission_protect_wiki_pages: Protect wiki pages
449 permission_protect_wiki_pages: Protect wiki pages
450 permission_manage_repository: Manage repository
450 permission_manage_repository: Manage repository
451 permission_browse_repository: Browse repository
451 permission_browse_repository: Browse repository
452 permission_view_changesets: View changesets
452 permission_view_changesets: View changesets
453 permission_commit_access: Commit access
453 permission_commit_access: Commit access
454 permission_manage_boards: Manage forums
454 permission_manage_boards: Manage forums
455 permission_view_messages: View messages
455 permission_view_messages: View messages
456 permission_add_messages: Post messages
456 permission_add_messages: Post messages
457 permission_edit_messages: Edit messages
457 permission_edit_messages: Edit messages
458 permission_edit_own_messages: Edit own messages
458 permission_edit_own_messages: Edit own messages
459 permission_delete_messages: Delete messages
459 permission_delete_messages: Delete messages
460 permission_delete_own_messages: Delete own messages
460 permission_delete_own_messages: Delete own messages
461 permission_export_wiki_pages: Export wiki pages
461 permission_export_wiki_pages: Export wiki pages
462 permission_manage_subtasks: Manage subtasks
462 permission_manage_subtasks: Manage subtasks
463 permission_manage_related_issues: Manage related issues
463 permission_manage_related_issues: Manage related issues
464
464
465 project_module_issue_tracking: Issue tracking
465 project_module_issue_tracking: Issue tracking
466 project_module_time_tracking: Time tracking
466 project_module_time_tracking: Time tracking
467 project_module_news: News
467 project_module_news: News
468 project_module_documents: Documents
468 project_module_documents: Documents
469 project_module_files: Files
469 project_module_files: Files
470 project_module_wiki: Wiki
470 project_module_wiki: Wiki
471 project_module_repository: Repository
471 project_module_repository: Repository
472 project_module_boards: Forums
472 project_module_boards: Forums
473 project_module_calendar: Calendar
473 project_module_calendar: Calendar
474 project_module_gantt: Gantt
474 project_module_gantt: Gantt
475
475
476 label_user: User
476 label_user: User
477 label_user_plural: Users
477 label_user_plural: Users
478 label_user_new: New user
478 label_user_new: New user
479 label_user_anonymous: Anonymous
479 label_user_anonymous: Anonymous
480 label_project: Project
480 label_project: Project
481 label_project_new: New project
481 label_project_new: New project
482 label_project_plural: Projects
482 label_project_plural: Projects
483 label_x_projects:
483 label_x_projects:
484 zero: no projects
484 zero: no projects
485 one: 1 project
485 one: 1 project
486 other: "%{count} projects"
486 other: "%{count} projects"
487 label_project_all: All Projects
487 label_project_all: All Projects
488 label_project_latest: Latest projects
488 label_project_latest: Latest projects
489 label_issue: Issue
489 label_issue: Issue
490 label_issue_new: New issue
490 label_issue_new: New issue
491 label_issue_plural: Issues
491 label_issue_plural: Issues
492 label_issue_view_all: View all issues
492 label_issue_view_all: View all issues
493 label_issues_by: "Issues by %{value}"
493 label_issues_by: "Issues by %{value}"
494 label_issue_added: Issue added
494 label_issue_added: Issue added
495 label_issue_updated: Issue updated
495 label_issue_updated: Issue updated
496 label_issue_note_added: Note added
496 label_issue_note_added: Note added
497 label_issue_status_updated: Status updated
497 label_issue_status_updated: Status updated
498 label_issue_priority_updated: Priority updated
498 label_issue_priority_updated: Priority updated
499 label_document: Document
499 label_document: Document
500 label_document_new: New document
500 label_document_new: New document
501 label_document_plural: Documents
501 label_document_plural: Documents
502 label_document_added: Document added
502 label_document_added: Document added
503 label_role: Role
503 label_role: Role
504 label_role_plural: Roles
504 label_role_plural: Roles
505 label_role_new: New role
505 label_role_new: New role
506 label_role_and_permissions: Roles and permissions
506 label_role_and_permissions: Roles and permissions
507 label_role_anonymous: Anonymous
507 label_role_anonymous: Anonymous
508 label_role_non_member: Non member
508 label_role_non_member: Non member
509 label_member: Member
509 label_member: Member
510 label_member_new: New member
510 label_member_new: New member
511 label_member_plural: Members
511 label_member_plural: Members
512 label_tracker: Tracker
512 label_tracker: Tracker
513 label_tracker_plural: Trackers
513 label_tracker_plural: Trackers
514 label_tracker_new: New tracker
514 label_tracker_new: New tracker
515 label_workflow: Workflow
515 label_workflow: Workflow
516 label_issue_status: Issue status
516 label_issue_status: Issue status
517 label_issue_status_plural: Issue statuses
517 label_issue_status_plural: Issue statuses
518 label_issue_status_new: New status
518 label_issue_status_new: New status
519 label_issue_category: Issue category
519 label_issue_category: Issue category
520 label_issue_category_plural: Issue categories
520 label_issue_category_plural: Issue categories
521 label_issue_category_new: New category
521 label_issue_category_new: New category
522 label_custom_field: Custom field
522 label_custom_field: Custom field
523 label_custom_field_plural: Custom fields
523 label_custom_field_plural: Custom fields
524 label_custom_field_new: New custom field
524 label_custom_field_new: New custom field
525 label_enumerations: Enumerations
525 label_enumerations: Enumerations
526 label_enumeration_new: New value
526 label_enumeration_new: New value
527 label_information: Information
527 label_information: Information
528 label_information_plural: Information
528 label_information_plural: Information
529 label_please_login: Please log in
529 label_please_login: Please log in
530 label_register: Register
530 label_register: Register
531 label_login_with_open_id_option: or login with OpenID
531 label_login_with_open_id_option: or login with OpenID
532 label_password_lost: Lost password
532 label_password_lost: Lost password
533 label_home: Home
533 label_home: Home
534 label_my_page: My page
534 label_my_page: My page
535 label_my_account: My account
535 label_my_account: My account
536 label_my_projects: My projects
536 label_my_projects: My projects
537 label_my_page_block: My page block
537 label_my_page_block: My page block
538 label_administration: Administration
538 label_administration: Administration
539 label_login: Sign in
539 label_login: Sign in
540 label_logout: Sign out
540 label_logout: Sign out
541 label_help: Help
541 label_help: Help
542 label_reported_issues: Reported issues
542 label_reported_issues: Reported issues
543 label_assigned_to_me_issues: Issues assigned to me
543 label_assigned_to_me_issues: Issues assigned to me
544 label_last_login: Last connection
544 label_last_login: Last connection
545 label_registered_on: Registered on
545 label_registered_on: Registered on
546 label_activity: Activity
546 label_activity: Activity
547 label_overall_activity: Overall activity
547 label_overall_activity: Overall activity
548 label_user_activity: "%{value}'s activity"
548 label_user_activity: "%{value}'s activity"
549 label_new: New
549 label_new: New
550 label_logged_as: Logged in as
550 label_logged_as: Logged in as
551 label_environment: Environment
551 label_environment: Environment
552 label_authentication: Authentication
552 label_authentication: Authentication
553 label_auth_source: Authentication mode
553 label_auth_source: Authentication mode
554 label_auth_source_new: New authentication mode
554 label_auth_source_new: New authentication mode
555 label_auth_source_plural: Authentication modes
555 label_auth_source_plural: Authentication modes
556 label_subproject_plural: Subprojects
556 label_subproject_plural: Subprojects
557 label_subproject_new: New subproject
557 label_subproject_new: New subproject
558 label_and_its_subprojects: "%{value} and its subprojects"
558 label_and_its_subprojects: "%{value} and its subprojects"
559 label_min_max_length: Min - Max length
559 label_min_max_length: Min - Max length
560 label_list: List
560 label_list: List
561 label_date: Date
561 label_date: Date
562 label_integer: Integer
562 label_integer: Integer
563 label_float: Float
563 label_float: Float
564 label_boolean: Boolean
564 label_boolean: Boolean
565 label_string: Text
565 label_string: Text
566 label_text: Long text
566 label_text: Long text
567 label_attribute: Attribute
567 label_attribute: Attribute
568 label_attribute_plural: Attributes
568 label_attribute_plural: Attributes
569 label_no_data: No data to display
569 label_no_data: No data to display
570 label_change_status: Change status
570 label_change_status: Change status
571 label_history: History
571 label_history: History
572 label_attachment: File
572 label_attachment: File
573 label_attachment_new: New file
573 label_attachment_new: New file
574 label_attachment_delete: Delete file
574 label_attachment_delete: Delete file
575 label_attachment_plural: Files
575 label_attachment_plural: Files
576 label_file_added: File added
576 label_file_added: File added
577 label_report: Report
577 label_report: Report
578 label_report_plural: Reports
578 label_report_plural: Reports
579 label_news: News
579 label_news: News
580 label_news_new: Add news
580 label_news_new: Add news
581 label_news_plural: News
581 label_news_plural: News
582 label_news_latest: Latest news
582 label_news_latest: Latest news
583 label_news_view_all: View all news
583 label_news_view_all: View all news
584 label_news_added: News added
584 label_news_added: News added
585 label_news_comment_added: Comment added to a news
585 label_news_comment_added: Comment added to a news
586 label_settings: Settings
586 label_settings: Settings
587 label_overview: Overview
587 label_overview: Overview
588 label_version: Version
588 label_version: Version
589 label_version_new: New version
589 label_version_new: New version
590 label_version_plural: Versions
590 label_version_plural: Versions
591 label_close_versions: Close completed versions
591 label_close_versions: Close completed versions
592 label_confirmation: Confirmation
592 label_confirmation: Confirmation
593 label_export_to: 'Also available in:'
593 label_export_to: 'Also available in:'
594 label_read: Read...
594 label_read: Read...
595 label_public_projects: Public projects
595 label_public_projects: Public projects
596 label_open_issues: open
596 label_open_issues: open
597 label_open_issues_plural: open
597 label_open_issues_plural: open
598 label_closed_issues: closed
598 label_closed_issues: closed
599 label_closed_issues_plural: closed
599 label_closed_issues_plural: closed
600 label_x_open_issues_abbr_on_total:
600 label_x_open_issues_abbr_on_total:
601 zero: 0 open / %{total}
601 zero: 0 open / %{total}
602 one: 1 open / %{total}
602 one: 1 open / %{total}
603 other: "%{count} open / %{total}"
603 other: "%{count} open / %{total}"
604 label_x_open_issues_abbr:
604 label_x_open_issues_abbr:
605 zero: 0 open
605 zero: 0 open
606 one: 1 open
606 one: 1 open
607 other: "%{count} open"
607 other: "%{count} open"
608 label_x_closed_issues_abbr:
608 label_x_closed_issues_abbr:
609 zero: 0 closed
609 zero: 0 closed
610 one: 1 closed
610 one: 1 closed
611 other: "%{count} closed"
611 other: "%{count} closed"
612 label_x_issues:
612 label_x_issues:
613 zero: 0 issues
613 zero: 0 issues
614 one: 1 issue
614 one: 1 issue
615 other: "%{count} issues"
615 other: "%{count} issues"
616 label_total: Total
616 label_total: Total
617 label_permissions: Permissions
617 label_permissions: Permissions
618 label_current_status: Current status
618 label_current_status: Current status
619 label_new_statuses_allowed: New statuses allowed
619 label_new_statuses_allowed: New statuses allowed
620 label_all: all
620 label_all: all
621 label_any: any
621 label_any: any
622 label_none: none
622 label_none: none
623 label_nobody: nobody
623 label_nobody: nobody
624 label_next: Next
624 label_next: Next
625 label_previous: Previous
625 label_previous: Previous
626 label_used_by: Used by
626 label_used_by: Used by
627 label_details: Details
627 label_details: Details
628 label_add_note: Add a note
628 label_add_note: Add a note
629 label_per_page: Per page
629 label_per_page: Per page
630 label_calendar: Calendar
630 label_calendar: Calendar
631 label_months_from: months from
631 label_months_from: months from
632 label_gantt: Gantt
632 label_gantt: Gantt
633 label_internal: Internal
633 label_internal: Internal
634 label_last_changes: "last %{count} changes"
634 label_last_changes: "last %{count} changes"
635 label_change_view_all: View all changes
635 label_change_view_all: View all changes
636 label_personalize_page: Personalize this page
636 label_personalize_page: Personalize this page
637 label_comment: Comment
637 label_comment: Comment
638 label_comment_plural: Comments
638 label_comment_plural: Comments
639 label_x_comments:
639 label_x_comments:
640 zero: no comments
640 zero: no comments
641 one: 1 comment
641 one: 1 comment
642 other: "%{count} comments"
642 other: "%{count} comments"
643 label_comment_add: Add a comment
643 label_comment_add: Add a comment
644 label_comment_added: Comment added
644 label_comment_added: Comment added
645 label_comment_delete: Delete comments
645 label_comment_delete: Delete comments
646 label_query: Custom query
646 label_query: Custom query
647 label_query_plural: Custom queries
647 label_query_plural: Custom queries
648 label_query_new: New query
648 label_query_new: New query
649 label_my_queries: My custom queries
649 label_my_queries: My custom queries
650 label_filter_add: Add filter
650 label_filter_add: Add filter
651 label_filter_plural: Filters
651 label_filter_plural: Filters
652 label_equals: is
652 label_equals: is
653 label_not_equals: is not
653 label_not_equals: is not
654 label_in_less_than: in less than
654 label_in_less_than: in less than
655 label_in_more_than: in more than
655 label_in_more_than: in more than
656 label_in_the_next_days: in the next
656 label_in_the_next_days: in the next
657 label_in_the_past_days: in the past
657 label_in_the_past_days: in the past
658 label_greater_or_equal: '>='
658 label_greater_or_equal: '>='
659 label_less_or_equal: '<='
659 label_less_or_equal: '<='
660 label_between: between
660 label_between: between
661 label_in: in
661 label_in: in
662 label_today: today
662 label_today: today
663 label_all_time: all time
663 label_all_time: all time
664 label_yesterday: yesterday
664 label_yesterday: yesterday
665 label_this_week: this week
665 label_this_week: this week
666 label_last_week: last week
666 label_last_week: last week
667 label_last_n_weeks: "last %{count} weeks"
667 label_last_n_weeks: "last %{count} weeks"
668 label_last_n_days: "last %{count} days"
668 label_last_n_days: "last %{count} days"
669 label_this_month: this month
669 label_this_month: this month
670 label_last_month: last month
670 label_last_month: last month
671 label_this_year: this year
671 label_this_year: this year
672 label_date_range: Date range
672 label_date_range: Date range
673 label_less_than_ago: less than days ago
673 label_less_than_ago: less than days ago
674 label_more_than_ago: more than days ago
674 label_more_than_ago: more than days ago
675 label_ago: days ago
675 label_ago: days ago
676 label_contains: contains
676 label_contains: contains
677 label_not_contains: doesn't contain
677 label_not_contains: doesn't contain
678 label_any_issues_in_project: any issues in project
678 label_any_issues_in_project: any issues in project
679 label_any_issues_not_in_project: any issues not in project
679 label_any_issues_not_in_project: any issues not in project
680 label_no_issues_in_project: no issues in project
680 label_no_issues_in_project: no issues in project
681 label_day_plural: days
681 label_day_plural: days
682 label_repository: Repository
682 label_repository: Repository
683 label_repository_new: New repository
683 label_repository_new: New repository
684 label_repository_plural: Repositories
684 label_repository_plural: Repositories
685 label_browse: Browse
685 label_browse: Browse
686 label_branch: Branch
686 label_branch: Branch
687 label_tag: Tag
687 label_tag: Tag
688 label_revision: Revision
688 label_revision: Revision
689 label_revision_plural: Revisions
689 label_revision_plural: Revisions
690 label_revision_id: "Revision %{value}"
690 label_revision_id: "Revision %{value}"
691 label_associated_revisions: Associated revisions
691 label_associated_revisions: Associated revisions
692 label_added: added
692 label_added: added
693 label_modified: modified
693 label_modified: modified
694 label_copied: copied
694 label_copied: copied
695 label_renamed: renamed
695 label_renamed: renamed
696 label_deleted: deleted
696 label_deleted: deleted
697 label_latest_revision: Latest revision
697 label_latest_revision: Latest revision
698 label_latest_revision_plural: Latest revisions
698 label_latest_revision_plural: Latest revisions
699 label_view_revisions: View revisions
699 label_view_revisions: View revisions
700 label_view_all_revisions: View all revisions
700 label_view_all_revisions: View all revisions
701 label_max_size: Maximum size
701 label_max_size: Maximum size
702 label_sort_highest: Move to top
702 label_sort_highest: Move to top
703 label_sort_higher: Move up
703 label_sort_higher: Move up
704 label_sort_lower: Move down
704 label_sort_lower: Move down
705 label_sort_lowest: Move to bottom
705 label_sort_lowest: Move to bottom
706 label_roadmap: Roadmap
706 label_roadmap: Roadmap
707 label_roadmap_due_in: "Due in %{value}"
707 label_roadmap_due_in: "Due in %{value}"
708 label_roadmap_overdue: "%{value} late"
708 label_roadmap_overdue: "%{value} late"
709 label_roadmap_no_issues: No issues for this version
709 label_roadmap_no_issues: No issues for this version
710 label_search: Search
710 label_search: Search
711 label_result_plural: Results
711 label_result_plural: Results
712 label_all_words: All words
712 label_all_words: All words
713 label_wiki: Wiki
713 label_wiki: Wiki
714 label_wiki_edit: Wiki edit
714 label_wiki_edit: Wiki edit
715 label_wiki_edit_plural: Wiki edits
715 label_wiki_edit_plural: Wiki edits
716 label_wiki_page: Wiki page
716 label_wiki_page: Wiki page
717 label_wiki_page_plural: Wiki pages
717 label_wiki_page_plural: Wiki pages
718 label_index_by_title: Index by title
718 label_index_by_title: Index by title
719 label_index_by_date: Index by date
719 label_index_by_date: Index by date
720 label_current_version: Current version
720 label_current_version: Current version
721 label_preview: Preview
721 label_preview: Preview
722 label_feed_plural: Feeds
722 label_feed_plural: Feeds
723 label_changes_details: Details of all changes
723 label_changes_details: Details of all changes
724 label_issue_tracking: Issue tracking
724 label_issue_tracking: Issue tracking
725 label_spent_time: Spent time
725 label_spent_time: Spent time
726 label_overall_spent_time: Overall spent time
726 label_overall_spent_time: Overall spent time
727 label_f_hour: "%{value} hour"
727 label_f_hour: "%{value} hour"
728 label_f_hour_plural: "%{value} hours"
728 label_f_hour_plural: "%{value} hours"
729 label_time_tracking: Time tracking
729 label_time_tracking: Time tracking
730 label_change_plural: Changes
730 label_change_plural: Changes
731 label_statistics: Statistics
731 label_statistics: Statistics
732 label_commits_per_month: Commits per month
732 label_commits_per_month: Commits per month
733 label_commits_per_author: Commits per author
733 label_commits_per_author: Commits per author
734 label_diff: diff
734 label_diff: diff
735 label_view_diff: View differences
735 label_view_diff: View differences
736 label_diff_inline: inline
736 label_diff_inline: inline
737 label_diff_side_by_side: side by side
737 label_diff_side_by_side: side by side
738 label_options: Options
738 label_options: Options
739 label_copy_workflow_from: Copy workflow from
739 label_copy_workflow_from: Copy workflow from
740 label_permissions_report: Permissions report
740 label_permissions_report: Permissions report
741 label_watched_issues: Watched issues
741 label_watched_issues: Watched issues
742 label_related_issues: Related issues
742 label_related_issues: Related issues
743 label_applied_status: Applied status
743 label_applied_status: Applied status
744 label_loading: Loading...
744 label_loading: Loading...
745 label_relation_new: New relation
745 label_relation_new: New relation
746 label_relation_delete: Delete relation
746 label_relation_delete: Delete relation
747 label_relates_to: Related to
747 label_relates_to: Related to
748 label_duplicates: Duplicates
748 label_duplicates: Duplicates
749 label_duplicated_by: Duplicated by
749 label_duplicated_by: Duplicated by
750 label_blocks: Blocks
750 label_blocks: Blocks
751 label_blocked_by: Blocked by
751 label_blocked_by: Blocked by
752 label_precedes: Precedes
752 label_precedes: Precedes
753 label_follows: Follows
753 label_follows: Follows
754 label_copied_to: Copied to
754 label_copied_to: Copied to
755 label_copied_from: Copied from
755 label_copied_from: Copied from
756 label_end_to_start: end to start
756 label_end_to_start: end to start
757 label_end_to_end: end to end
757 label_end_to_end: end to end
758 label_start_to_start: start to start
758 label_start_to_start: start to start
759 label_start_to_end: start to end
759 label_start_to_end: start to end
760 label_stay_logged_in: Stay logged in
760 label_stay_logged_in: Stay logged in
761 label_disabled: disabled
761 label_disabled: disabled
762 label_show_completed_versions: Show completed versions
762 label_show_completed_versions: Show completed versions
763 label_me: me
763 label_me: me
764 label_board: Forum
764 label_board: Forum
765 label_board_new: New forum
765 label_board_new: New forum
766 label_board_plural: Forums
766 label_board_plural: Forums
767 label_board_locked: Locked
767 label_board_locked: Locked
768 label_board_sticky: Sticky
768 label_board_sticky: Sticky
769 label_topic_plural: Topics
769 label_topic_plural: Topics
770 label_message_plural: Messages
770 label_message_plural: Messages
771 label_message_last: Last message
771 label_message_last: Last message
772 label_message_new: New message
772 label_message_new: New message
773 label_message_posted: Message added
773 label_message_posted: Message added
774 label_reply_plural: Replies
774 label_reply_plural: Replies
775 label_send_information: Send account information to the user
775 label_send_information: Send account information to the user
776 label_year: Year
776 label_year: Year
777 label_month: Month
777 label_month: Month
778 label_week: Week
778 label_week: Week
779 label_date_from: From
779 label_date_from: From
780 label_date_to: To
780 label_date_to: To
781 label_language_based: Based on user's language
781 label_language_based: Based on user's language
782 label_sort_by: "Sort by %{value}"
782 label_sort_by: "Sort by %{value}"
783 label_send_test_email: Send a test email
783 label_send_test_email: Send a test email
784 label_feeds_access_key: RSS access key
784 label_feeds_access_key: RSS access key
785 label_missing_feeds_access_key: Missing a RSS access key
785 label_missing_feeds_access_key: Missing a RSS access key
786 label_feeds_access_key_created_on: "RSS access key created %{value} ago"
786 label_feeds_access_key_created_on: "RSS access key created %{value} ago"
787 label_module_plural: Modules
787 label_module_plural: Modules
788 label_added_time_by: "Added by %{author} %{age} ago"
788 label_added_time_by: "Added by %{author} %{age} ago"
789 label_updated_time_by: "Updated by %{author} %{age} ago"
789 label_updated_time_by: "Updated by %{author} %{age} ago"
790 label_updated_time: "Updated %{value} ago"
790 label_updated_time: "Updated %{value} ago"
791 label_jump_to_a_project: Jump to a project...
791 label_jump_to_a_project: Jump to a project...
792 label_file_plural: Files
792 label_file_plural: Files
793 label_changeset_plural: Changesets
793 label_changeset_plural: Changesets
794 label_default_columns: Default columns
794 label_default_columns: Default columns
795 label_no_change_option: (No change)
795 label_no_change_option: (No change)
796 label_bulk_edit_selected_issues: Bulk edit selected issues
796 label_bulk_edit_selected_issues: Bulk edit selected issues
797 label_bulk_edit_selected_time_entries: Bulk edit selected time entries
797 label_bulk_edit_selected_time_entries: Bulk edit selected time entries
798 label_theme: Theme
798 label_theme: Theme
799 label_default: Default
799 label_default: Default
800 label_search_titles_only: Search titles only
800 label_search_titles_only: Search titles only
801 label_user_mail_option_all: "For any event on all my projects"
801 label_user_mail_option_all: "For any event on all my projects"
802 label_user_mail_option_selected: "For any event on the selected projects only..."
802 label_user_mail_option_selected: "For any event on the selected projects only..."
803 label_user_mail_option_none: "No events"
803 label_user_mail_option_none: "No events"
804 label_user_mail_option_only_my_events: "Only for things I watch or I'm involved in"
804 label_user_mail_option_only_my_events: "Only for things I watch or I'm involved in"
805 label_user_mail_option_only_assigned: "Only for things I am assigned to"
805 label_user_mail_option_only_assigned: "Only for things I am assigned to"
806 label_user_mail_option_only_owner: "Only for things I am the owner of"
806 label_user_mail_option_only_owner: "Only for things I am the owner of"
807 label_user_mail_no_self_notified: "I don't want to be notified of changes that I make myself"
807 label_user_mail_no_self_notified: "I don't want to be notified of changes that I make myself"
808 label_registration_activation_by_email: account activation by email
808 label_registration_activation_by_email: account activation by email
809 label_registration_manual_activation: manual account activation
809 label_registration_manual_activation: manual account activation
810 label_registration_automatic_activation: automatic account activation
810 label_registration_automatic_activation: automatic account activation
811 label_display_per_page: "Per page: %{value}"
811 label_display_per_page: "Per page: %{value}"
812 label_age: Age
812 label_age: Age
813 label_change_properties: Change properties
813 label_change_properties: Change properties
814 label_general: General
814 label_general: General
815 label_more: More
815 label_more: More
816 label_scm: SCM
816 label_scm: SCM
817 label_plugins: Plugins
817 label_plugins: Plugins
818 label_ldap_authentication: LDAP authentication
818 label_ldap_authentication: LDAP authentication
819 label_downloads_abbr: D/L
819 label_downloads_abbr: D/L
820 label_optional_description: Optional description
820 label_optional_description: Optional description
821 label_add_another_file: Add another file
821 label_add_another_file: Add another file
822 label_preferences: Preferences
822 label_preferences: Preferences
823 label_chronological_order: In chronological order
823 label_chronological_order: In chronological order
824 label_reverse_chronological_order: In reverse chronological order
824 label_reverse_chronological_order: In reverse chronological order
825 label_planning: Planning
825 label_planning: Planning
826 label_incoming_emails: Incoming emails
826 label_incoming_emails: Incoming emails
827 label_generate_key: Generate a key
827 label_generate_key: Generate a key
828 label_issue_watchers: Watchers
828 label_issue_watchers: Watchers
829 label_example: Example
829 label_example: Example
830 label_display: Display
830 label_display: Display
831 label_sort: Sort
831 label_sort: Sort
832 label_ascending: Ascending
832 label_ascending: Ascending
833 label_descending: Descending
833 label_descending: Descending
834 label_date_from_to: From %{start} to %{end}
834 label_date_from_to: From %{start} to %{end}
835 label_wiki_content_added: Wiki page added
835 label_wiki_content_added: Wiki page added
836 label_wiki_content_updated: Wiki page updated
836 label_wiki_content_updated: Wiki page updated
837 label_group: Group
837 label_group: Group
838 label_group_plural: Groups
838 label_group_plural: Groups
839 label_group_new: New group
839 label_group_new: New group
840 label_time_entry_plural: Spent time
840 label_time_entry_plural: Spent time
841 label_version_sharing_none: Not shared
841 label_version_sharing_none: Not shared
842 label_version_sharing_descendants: With subprojects
842 label_version_sharing_descendants: With subprojects
843 label_version_sharing_hierarchy: With project hierarchy
843 label_version_sharing_hierarchy: With project hierarchy
844 label_version_sharing_tree: With project tree
844 label_version_sharing_tree: With project tree
845 label_version_sharing_system: With all projects
845 label_version_sharing_system: With all projects
846 label_update_issue_done_ratios: Update issue done ratios
846 label_update_issue_done_ratios: Update issue done ratios
847 label_copy_source: Source
847 label_copy_source: Source
848 label_copy_target: Target
848 label_copy_target: Target
849 label_copy_same_as_target: Same as target
849 label_copy_same_as_target: Same as target
850 label_display_used_statuses_only: Only display statuses that are used by this tracker
850 label_display_used_statuses_only: Only display statuses that are used by this tracker
851 label_api_access_key: API access key
851 label_api_access_key: API access key
852 label_missing_api_access_key: Missing an API access key
852 label_missing_api_access_key: Missing an API access key
853 label_api_access_key_created_on: "API access key created %{value} ago"
853 label_api_access_key_created_on: "API access key created %{value} ago"
854 label_profile: Profile
854 label_profile: Profile
855 label_subtask_plural: Subtasks
855 label_subtask_plural: Subtasks
856 label_project_copy_notifications: Send email notifications during the project copy
856 label_project_copy_notifications: Send email notifications during the project copy
857 label_principal_search: "Search for user or group:"
857 label_principal_search: "Search for user or group:"
858 label_user_search: "Search for user:"
858 label_user_search: "Search for user:"
859 label_additional_workflow_transitions_for_author: Additional transitions allowed when the user is the author
859 label_additional_workflow_transitions_for_author: Additional transitions allowed when the user is the author
860 label_additional_workflow_transitions_for_assignee: Additional transitions allowed when the user is the assignee
860 label_additional_workflow_transitions_for_assignee: Additional transitions allowed when the user is the assignee
861 label_issues_visibility_all: All issues
861 label_issues_visibility_all: All issues
862 label_issues_visibility_public: All non private issues
862 label_issues_visibility_public: All non private issues
863 label_issues_visibility_own: Issues created by or assigned to the user
863 label_issues_visibility_own: Issues created by or assigned to the user
864 label_git_report_last_commit: Report last commit for files and directories
864 label_git_report_last_commit: Report last commit for files and directories
865 label_parent_revision: Parent
865 label_parent_revision: Parent
866 label_child_revision: Child
866 label_child_revision: Child
867 label_export_options: "%{export_format} export options"
867 label_export_options: "%{export_format} export options"
868 label_copy_attachments: Copy attachments
868 label_copy_attachments: Copy attachments
869 label_copy_subtasks: Copy subtasks
869 label_copy_subtasks: Copy subtasks
870 label_item_position: "%{position} of %{count}"
870 label_item_position: "%{position} of %{count}"
871 label_completed_versions: Completed versions
871 label_completed_versions: Completed versions
872 label_search_for_watchers: Search for watchers to add
872 label_search_for_watchers: Search for watchers to add
873 label_session_expiration: Session expiration
873 label_session_expiration: Session expiration
874 label_show_closed_projects: View closed projects
874 label_show_closed_projects: View closed projects
875 label_status_transitions: Status transitions
875 label_status_transitions: Status transitions
876 label_fields_permissions: Fields permissions
876 label_fields_permissions: Fields permissions
877 label_readonly: Read-only
877 label_readonly: Read-only
878 label_required: Required
878 label_required: Required
879 label_attribute_of_project: "Project's %{name}"
879 label_attribute_of_project: "Project's %{name}"
880 label_attribute_of_issue: "Issue's %{name}"
880 label_attribute_of_issue: "Issue's %{name}"
881 label_attribute_of_author: "Author's %{name}"
881 label_attribute_of_author: "Author's %{name}"
882 label_attribute_of_assigned_to: "Assignee's %{name}"
882 label_attribute_of_assigned_to: "Assignee's %{name}"
883 label_attribute_of_user: "User's %{name}"
883 label_attribute_of_user: "User's %{name}"
884 label_attribute_of_fixed_version: "Target version's %{name}"
884 label_attribute_of_fixed_version: "Target version's %{name}"
885 label_cross_project_descendants: With subprojects
885 label_cross_project_descendants: With subprojects
886 label_cross_project_tree: With project tree
886 label_cross_project_tree: With project tree
887 label_cross_project_hierarchy: With project hierarchy
887 label_cross_project_hierarchy: With project hierarchy
888 label_cross_project_system: With all projects
888 label_cross_project_system: With all projects
889 label_gantt_progress_line: Progress line
889
890
890 button_login: Login
891 button_login: Login
891 button_submit: Submit
892 button_submit: Submit
892 button_save: Save
893 button_save: Save
893 button_check_all: Check all
894 button_check_all: Check all
894 button_uncheck_all: Uncheck all
895 button_uncheck_all: Uncheck all
895 button_collapse_all: Collapse all
896 button_collapse_all: Collapse all
896 button_expand_all: Expand all
897 button_expand_all: Expand all
897 button_delete: Delete
898 button_delete: Delete
898 button_create: Create
899 button_create: Create
899 button_create_and_continue: Create and continue
900 button_create_and_continue: Create and continue
900 button_test: Test
901 button_test: Test
901 button_edit: Edit
902 button_edit: Edit
902 button_edit_associated_wikipage: "Edit associated Wiki page: %{page_title}"
903 button_edit_associated_wikipage: "Edit associated Wiki page: %{page_title}"
903 button_add: Add
904 button_add: Add
904 button_change: Change
905 button_change: Change
905 button_apply: Apply
906 button_apply: Apply
906 button_clear: Clear
907 button_clear: Clear
907 button_lock: Lock
908 button_lock: Lock
908 button_unlock: Unlock
909 button_unlock: Unlock
909 button_download: Download
910 button_download: Download
910 button_list: List
911 button_list: List
911 button_view: View
912 button_view: View
912 button_move: Move
913 button_move: Move
913 button_move_and_follow: Move and follow
914 button_move_and_follow: Move and follow
914 button_back: Back
915 button_back: Back
915 button_cancel: Cancel
916 button_cancel: Cancel
916 button_activate: Activate
917 button_activate: Activate
917 button_sort: Sort
918 button_sort: Sort
918 button_log_time: Log time
919 button_log_time: Log time
919 button_rollback: Rollback to this version
920 button_rollback: Rollback to this version
920 button_watch: Watch
921 button_watch: Watch
921 button_unwatch: Unwatch
922 button_unwatch: Unwatch
922 button_reply: Reply
923 button_reply: Reply
923 button_archive: Archive
924 button_archive: Archive
924 button_unarchive: Unarchive
925 button_unarchive: Unarchive
925 button_reset: Reset
926 button_reset: Reset
926 button_rename: Rename
927 button_rename: Rename
927 button_change_password: Change password
928 button_change_password: Change password
928 button_copy: Copy
929 button_copy: Copy
929 button_copy_and_follow: Copy and follow
930 button_copy_and_follow: Copy and follow
930 button_annotate: Annotate
931 button_annotate: Annotate
931 button_update: Update
932 button_update: Update
932 button_configure: Configure
933 button_configure: Configure
933 button_quote: Quote
934 button_quote: Quote
934 button_duplicate: Duplicate
935 button_duplicate: Duplicate
935 button_show: Show
936 button_show: Show
936 button_hide: Hide
937 button_hide: Hide
937 button_edit_section: Edit this section
938 button_edit_section: Edit this section
938 button_export: Export
939 button_export: Export
939 button_delete_my_account: Delete my account
940 button_delete_my_account: Delete my account
940 button_close: Close
941 button_close: Close
941 button_reopen: Reopen
942 button_reopen: Reopen
942
943
943 status_active: active
944 status_active: active
944 status_registered: registered
945 status_registered: registered
945 status_locked: locked
946 status_locked: locked
946
947
947 project_status_active: active
948 project_status_active: active
948 project_status_closed: closed
949 project_status_closed: closed
949 project_status_archived: archived
950 project_status_archived: archived
950
951
951 version_status_open: open
952 version_status_open: open
952 version_status_locked: locked
953 version_status_locked: locked
953 version_status_closed: closed
954 version_status_closed: closed
954
955
955 field_active: Active
956 field_active: Active
956
957
957 text_select_mail_notifications: Select actions for which email notifications should be sent.
958 text_select_mail_notifications: Select actions for which email notifications should be sent.
958 text_regexp_info: eg. ^[A-Z0-9]+$
959 text_regexp_info: eg. ^[A-Z0-9]+$
959 text_min_max_length_info: 0 means no restriction
960 text_min_max_length_info: 0 means no restriction
960 text_project_destroy_confirmation: Are you sure you want to delete this project and related data?
961 text_project_destroy_confirmation: Are you sure you want to delete this project and related data?
961 text_subprojects_destroy_warning: "Its subproject(s): %{value} will be also deleted."
962 text_subprojects_destroy_warning: "Its subproject(s): %{value} will be also deleted."
962 text_workflow_edit: Select a role and a tracker to edit the workflow
963 text_workflow_edit: Select a role and a tracker to edit the workflow
963 text_are_you_sure: Are you sure?
964 text_are_you_sure: Are you sure?
964 text_journal_changed: "%{label} changed from %{old} to %{new}"
965 text_journal_changed: "%{label} changed from %{old} to %{new}"
965 text_journal_changed_no_detail: "%{label} updated"
966 text_journal_changed_no_detail: "%{label} updated"
966 text_journal_set_to: "%{label} set to %{value}"
967 text_journal_set_to: "%{label} set to %{value}"
967 text_journal_deleted: "%{label} deleted (%{old})"
968 text_journal_deleted: "%{label} deleted (%{old})"
968 text_journal_added: "%{label} %{value} added"
969 text_journal_added: "%{label} %{value} added"
969 text_tip_issue_begin_day: issue beginning this day
970 text_tip_issue_begin_day: issue beginning this day
970 text_tip_issue_end_day: issue ending this day
971 text_tip_issue_end_day: issue ending this day
971 text_tip_issue_begin_end_day: issue beginning and ending this day
972 text_tip_issue_begin_end_day: issue beginning and ending this day
972 text_project_identifier_info: 'Only lower case letters (a-z), numbers, dashes and underscores are allowed, must start with a lower case letter.<br />Once saved, the identifier cannot be changed.'
973 text_project_identifier_info: 'Only lower case letters (a-z), numbers, dashes and underscores are allowed, must start with a lower case letter.<br />Once saved, the identifier cannot be changed.'
973 text_caracters_maximum: "%{count} characters maximum."
974 text_caracters_maximum: "%{count} characters maximum."
974 text_caracters_minimum: "Must be at least %{count} characters long."
975 text_caracters_minimum: "Must be at least %{count} characters long."
975 text_length_between: "Length between %{min} and %{max} characters."
976 text_length_between: "Length between %{min} and %{max} characters."
976 text_tracker_no_workflow: No workflow defined for this tracker
977 text_tracker_no_workflow: No workflow defined for this tracker
977 text_unallowed_characters: Unallowed characters
978 text_unallowed_characters: Unallowed characters
978 text_comma_separated: Multiple values allowed (comma separated).
979 text_comma_separated: Multiple values allowed (comma separated).
979 text_line_separated: Multiple values allowed (one line for each value).
980 text_line_separated: Multiple values allowed (one line for each value).
980 text_issues_ref_in_commit_messages: Referencing and fixing issues in commit messages
981 text_issues_ref_in_commit_messages: Referencing and fixing issues in commit messages
981 text_issue_added: "Issue %{id} has been reported by %{author}."
982 text_issue_added: "Issue %{id} has been reported by %{author}."
982 text_issue_updated: "Issue %{id} has been updated by %{author}."
983 text_issue_updated: "Issue %{id} has been updated by %{author}."
983 text_wiki_destroy_confirmation: Are you sure you want to delete this wiki and all its content?
984 text_wiki_destroy_confirmation: Are you sure you want to delete this wiki and all its content?
984 text_issue_category_destroy_question: "Some issues (%{count}) are assigned to this category. What do you want to do?"
985 text_issue_category_destroy_question: "Some issues (%{count}) are assigned to this category. What do you want to do?"
985 text_issue_category_destroy_assignments: Remove category assignments
986 text_issue_category_destroy_assignments: Remove category assignments
986 text_issue_category_reassign_to: Reassign issues to this category
987 text_issue_category_reassign_to: Reassign issues to this category
987 text_user_mail_option: "For unselected projects, you will only receive notifications about things you watch or you're involved in (eg. issues you're the author or assignee)."
988 text_user_mail_option: "For unselected projects, you will only receive notifications about things you watch or you're involved in (eg. issues you're the author or assignee)."
988 text_no_configuration_data: "Roles, trackers, issue statuses and workflow have not been configured yet.\nIt is highly recommended to load the default configuration. You will be able to modify it once loaded."
989 text_no_configuration_data: "Roles, trackers, issue statuses and workflow have not been configured yet.\nIt is highly recommended to load the default configuration. You will be able to modify it once loaded."
989 text_load_default_configuration: Load the default configuration
990 text_load_default_configuration: Load the default configuration
990 text_status_changed_by_changeset: "Applied in changeset %{value}."
991 text_status_changed_by_changeset: "Applied in changeset %{value}."
991 text_time_logged_by_changeset: "Applied in changeset %{value}."
992 text_time_logged_by_changeset: "Applied in changeset %{value}."
992 text_issues_destroy_confirmation: 'Are you sure you want to delete the selected issue(s)?'
993 text_issues_destroy_confirmation: 'Are you sure you want to delete the selected issue(s)?'
993 text_issues_destroy_descendants_confirmation: "This will also delete %{count} subtask(s)."
994 text_issues_destroy_descendants_confirmation: "This will also delete %{count} subtask(s)."
994 text_time_entries_destroy_confirmation: 'Are you sure you want to delete the selected time entr(y/ies)?'
995 text_time_entries_destroy_confirmation: 'Are you sure you want to delete the selected time entr(y/ies)?'
995 text_select_project_modules: 'Select modules to enable for this project:'
996 text_select_project_modules: 'Select modules to enable for this project:'
996 text_default_administrator_account_changed: Default administrator account changed
997 text_default_administrator_account_changed: Default administrator account changed
997 text_file_repository_writable: Attachments directory writable
998 text_file_repository_writable: Attachments directory writable
998 text_plugin_assets_writable: Plugin assets directory writable
999 text_plugin_assets_writable: Plugin assets directory writable
999 text_rmagick_available: RMagick available (optional)
1000 text_rmagick_available: RMagick available (optional)
1000 text_destroy_time_entries_question: "%{hours} hours were reported on the issues you are about to delete. What do you want to do?"
1001 text_destroy_time_entries_question: "%{hours} hours were reported on the issues you are about to delete. What do you want to do?"
1001 text_destroy_time_entries: Delete reported hours
1002 text_destroy_time_entries: Delete reported hours
1002 text_assign_time_entries_to_project: Assign reported hours to the project
1003 text_assign_time_entries_to_project: Assign reported hours to the project
1003 text_reassign_time_entries: 'Reassign reported hours to this issue:'
1004 text_reassign_time_entries: 'Reassign reported hours to this issue:'
1004 text_user_wrote: "%{value} wrote:"
1005 text_user_wrote: "%{value} wrote:"
1005 text_enumeration_destroy_question: "%{count} objects are assigned to this value."
1006 text_enumeration_destroy_question: "%{count} objects are assigned to this value."
1006 text_enumeration_category_reassign_to: 'Reassign them to this value:'
1007 text_enumeration_category_reassign_to: 'Reassign them to this value:'
1007 text_email_delivery_not_configured: "Email delivery is not configured, and notifications are disabled.\nConfigure your SMTP server in config/configuration.yml and restart the application to enable them."
1008 text_email_delivery_not_configured: "Email delivery is not configured, and notifications are disabled.\nConfigure your SMTP server in config/configuration.yml and restart the application to enable them."
1008 text_repository_usernames_mapping: "Select or update the Redmine user mapped to each username found in the repository log.\nUsers with the same Redmine and repository username or email are automatically mapped."
1009 text_repository_usernames_mapping: "Select or update the Redmine user mapped to each username found in the repository log.\nUsers with the same Redmine and repository username or email are automatically mapped."
1009 text_diff_truncated: '... This diff was truncated because it exceeds the maximum size that can be displayed.'
1010 text_diff_truncated: '... This diff was truncated because it exceeds the maximum size that can be displayed.'
1010 text_custom_field_possible_values_info: 'One line for each value'
1011 text_custom_field_possible_values_info: 'One line for each value'
1011 text_wiki_page_destroy_question: "This page has %{descendants} child page(s) and descendant(s). What do you want to do?"
1012 text_wiki_page_destroy_question: "This page has %{descendants} child page(s) and descendant(s). What do you want to do?"
1012 text_wiki_page_nullify_children: "Keep child pages as root pages"
1013 text_wiki_page_nullify_children: "Keep child pages as root pages"
1013 text_wiki_page_destroy_children: "Delete child pages and all their descendants"
1014 text_wiki_page_destroy_children: "Delete child pages and all their descendants"
1014 text_wiki_page_reassign_children: "Reassign child pages to this parent page"
1015 text_wiki_page_reassign_children: "Reassign child pages to this parent page"
1015 text_own_membership_delete_confirmation: "You are about to remove some or all of your permissions and may no longer be able to edit this project after that.\nAre you sure you want to continue?"
1016 text_own_membership_delete_confirmation: "You are about to remove some or all of your permissions and may no longer be able to edit this project after that.\nAre you sure you want to continue?"
1016 text_zoom_in: Zoom in
1017 text_zoom_in: Zoom in
1017 text_zoom_out: Zoom out
1018 text_zoom_out: Zoom out
1018 text_warn_on_leaving_unsaved: "The current page contains unsaved text that will be lost if you leave this page."
1019 text_warn_on_leaving_unsaved: "The current page contains unsaved text that will be lost if you leave this page."
1019 text_scm_path_encoding_note: "Default: UTF-8"
1020 text_scm_path_encoding_note: "Default: UTF-8"
1020 text_git_repository_note: Repository is bare and local (e.g. /gitrepo, c:\gitrepo)
1021 text_git_repository_note: Repository is bare and local (e.g. /gitrepo, c:\gitrepo)
1021 text_mercurial_repository_note: Local repository (e.g. /hgrepo, c:\hgrepo)
1022 text_mercurial_repository_note: Local repository (e.g. /hgrepo, c:\hgrepo)
1022 text_scm_command: Command
1023 text_scm_command: Command
1023 text_scm_command_version: Version
1024 text_scm_command_version: Version
1024 text_scm_config: You can configure your scm commands in config/configuration.yml. Please restart the application after editing it.
1025 text_scm_config: You can configure your scm commands in config/configuration.yml. Please restart the application after editing it.
1025 text_scm_command_not_available: Scm command is not available. Please check settings on the administration panel.
1026 text_scm_command_not_available: Scm command is not available. Please check settings on the administration panel.
1026 text_issue_conflict_resolution_overwrite: "Apply my changes anyway (previous notes will be kept but some changes may be overwritten)"
1027 text_issue_conflict_resolution_overwrite: "Apply my changes anyway (previous notes will be kept but some changes may be overwritten)"
1027 text_issue_conflict_resolution_add_notes: "Add my notes and discard my other changes"
1028 text_issue_conflict_resolution_add_notes: "Add my notes and discard my other changes"
1028 text_issue_conflict_resolution_cancel: "Discard all my changes and redisplay %{link}"
1029 text_issue_conflict_resolution_cancel: "Discard all my changes and redisplay %{link}"
1029 text_account_destroy_confirmation: "Are you sure you want to proceed?\nYour account will be permanently deleted, with no way to reactivate it."
1030 text_account_destroy_confirmation: "Are you sure you want to proceed?\nYour account will be permanently deleted, with no way to reactivate it."
1030 text_session_expiration_settings: "Warning: changing these settings may expire the current sessions including yours."
1031 text_session_expiration_settings: "Warning: changing these settings may expire the current sessions including yours."
1031 text_project_closed: This project is closed and read-only.
1032 text_project_closed: This project is closed and read-only.
1032 text_turning_multiple_off: "If you disable multiple values, duplicate values will be removed in order to preserve only one value per item."
1033 text_turning_multiple_off: "If you disable multiple values, duplicate values will be removed in order to preserve only one value per item."
1033
1034
1034 default_role_manager: Manager
1035 default_role_manager: Manager
1035 default_role_developer: Developer
1036 default_role_developer: Developer
1036 default_role_reporter: Reporter
1037 default_role_reporter: Reporter
1037 default_tracker_bug: Bug
1038 default_tracker_bug: Bug
1038 default_tracker_feature: Feature
1039 default_tracker_feature: Feature
1039 default_tracker_support: Support
1040 default_tracker_support: Support
1040 default_issue_status_new: New
1041 default_issue_status_new: New
1041 default_issue_status_in_progress: In Progress
1042 default_issue_status_in_progress: In Progress
1042 default_issue_status_resolved: Resolved
1043 default_issue_status_resolved: Resolved
1043 default_issue_status_feedback: Feedback
1044 default_issue_status_feedback: Feedback
1044 default_issue_status_closed: Closed
1045 default_issue_status_closed: Closed
1045 default_issue_status_rejected: Rejected
1046 default_issue_status_rejected: Rejected
1046 default_doc_category_user: User documentation
1047 default_doc_category_user: User documentation
1047 default_doc_category_tech: Technical documentation
1048 default_doc_category_tech: Technical documentation
1048 default_priority_low: Low
1049 default_priority_low: Low
1049 default_priority_normal: Normal
1050 default_priority_normal: Normal
1050 default_priority_high: High
1051 default_priority_high: High
1051 default_priority_urgent: Urgent
1052 default_priority_urgent: Urgent
1052 default_priority_immediate: Immediate
1053 default_priority_immediate: Immediate
1053 default_activity_design: Design
1054 default_activity_design: Design
1054 default_activity_development: Development
1055 default_activity_development: Development
1055
1056
1056 enumeration_issue_priorities: Issue priorities
1057 enumeration_issue_priorities: Issue priorities
1057 enumeration_doc_categories: Document categories
1058 enumeration_doc_categories: Document categories
1058 enumeration_activities: Activities (time tracking)
1059 enumeration_activities: Activities (time tracking)
1059 enumeration_system_activity: System Activity
1060 enumeration_system_activity: System Activity
1060 description_filter: Filter
1061 description_filter: Filter
1061 description_search: Searchfield
1062 description_search: Searchfield
1062 description_choose_project: Projects
1063 description_choose_project: Projects
1063 description_project_scope: Search scope
1064 description_project_scope: Search scope
1064 description_notes: Notes
1065 description_notes: Notes
1065 description_message_content: Message content
1066 description_message_content: Message content
1066 description_query_sort_criteria_attribute: Sort attribute
1067 description_query_sort_criteria_attribute: Sort attribute
1067 description_query_sort_criteria_direction: Sort direction
1068 description_query_sort_criteria_direction: Sort direction
1068 description_user_mail_notification: Mail notification settings
1069 description_user_mail_notification: Mail notification settings
1069 description_available_columns: Available Columns
1070 description_available_columns: Available Columns
1070 description_selected_columns: Selected Columns
1071 description_selected_columns: Selected Columns
1071 description_all_columns: All Columns
1072 description_all_columns: All Columns
1072 description_issue_category_reassign: Choose issue category
1073 description_issue_category_reassign: Choose issue category
1073 description_wiki_subpages_reassign: Choose new parent page
1074 description_wiki_subpages_reassign: Choose new parent page
1074 description_date_range_list: Choose range from list
1075 description_date_range_list: Choose range from list
1075 description_date_range_interval: Choose range by selecting start and end date
1076 description_date_range_interval: Choose range by selecting start and end date
1076 description_date_from: Enter start date
1077 description_date_from: Enter start date
1077 description_date_to: Enter end date
1078 description_date_to: Enter end date
1078 text_repository_identifier_info: 'Only lower case letters (a-z), numbers, dashes and underscores are allowed.<br />Once saved, the identifier cannot be changed.'
1079 text_repository_identifier_info: 'Only lower case letters (a-z), numbers, dashes and underscores are allowed.<br />Once saved, the identifier cannot be changed.'
@@ -1,1113 +1,1114
1 # Japanese translations for Ruby on Rails
1 # Japanese translations for Ruby on Rails
2 # by Akira Matsuda (ronnie@dio.jp)
2 # by Akira Matsuda (ronnie@dio.jp)
3 # AR error messages are basically taken from Ruby-GetText-Package. Thanks to Masao Mutoh.
3 # AR error messages are basically taken from Ruby-GetText-Package. Thanks to Masao Mutoh.
4
4
5 ja:
5 ja:
6 direction: ltr
6 direction: ltr
7 date:
7 date:
8 formats:
8 formats:
9 # Use the strftime parameters for formats.
9 # Use the strftime parameters for formats.
10 # When no format has been given, it uses default.
10 # When no format has been given, it uses default.
11 # You can provide other formats here if you like!
11 # You can provide other formats here if you like!
12 default: "%Y/%m/%d"
12 default: "%Y/%m/%d"
13 short: "%m/%d"
13 short: "%m/%d"
14 long: "%Y年%m月%d日(%a)"
14 long: "%Y年%m月%d日(%a)"
15
15
16 day_names: [日曜日, 月曜日, 火曜日, 水曜日, 木曜日, 金曜日, 土曜日]
16 day_names: [日曜日, 月曜日, 火曜日, 水曜日, 木曜日, 金曜日, 土曜日]
17 abbr_day_names: [, , , , , , ]
17 abbr_day_names: [, , , , , , ]
18
18
19 # Don't forget the nil at the beginning; there's no such thing as a 0th month
19 # Don't forget the nil at the beginning; there's no such thing as a 0th month
20 month_names: [~, 1月, 2月, 3月, 4月, 5月, 6月, 7月, 8月, 9月, 10月, 11月, 12月]
20 month_names: [~, 1月, 2月, 3月, 4月, 5月, 6月, 7月, 8月, 9月, 10月, 11月, 12月]
21 abbr_month_names: [~, 1月, 2月, 3月, 4月, 5月, 6月, 7月, 8月, 9月, 10月, 11月, 12月]
21 abbr_month_names: [~, 1月, 2月, 3月, 4月, 5月, 6月, 7月, 8月, 9月, 10月, 11月, 12月]
22 # Used in date_select and datime_select.
22 # Used in date_select and datime_select.
23 order:
23 order:
24 - :year
24 - :year
25 - :month
25 - :month
26 - :day
26 - :day
27
27
28 time:
28 time:
29 formats:
29 formats:
30 default: "%Y/%m/%d %H:%M:%S"
30 default: "%Y/%m/%d %H:%M:%S"
31 time: "%H:%M"
31 time: "%H:%M"
32 short: "%y/%m/%d %H:%M"
32 short: "%y/%m/%d %H:%M"
33 long: "%Y年%m月%d日(%a) %H時%M分%S秒 %Z"
33 long: "%Y年%m月%d日(%a) %H時%M分%S秒 %Z"
34 am: "午前"
34 am: "午前"
35 pm: "午後"
35 pm: "午後"
36
36
37 datetime:
37 datetime:
38 distance_in_words:
38 distance_in_words:
39 half_a_minute: "30秒前後"
39 half_a_minute: "30秒前後"
40 less_than_x_seconds:
40 less_than_x_seconds:
41 one: "1秒以内"
41 one: "1秒以内"
42 other: "%{count}秒以内"
42 other: "%{count}秒以内"
43 x_seconds:
43 x_seconds:
44 one: "1秒"
44 one: "1秒"
45 other: "%{count}秒"
45 other: "%{count}秒"
46 less_than_x_minutes:
46 less_than_x_minutes:
47 one: "1分以内"
47 one: "1分以内"
48 other: "%{count}分以内"
48 other: "%{count}分以内"
49 x_minutes:
49 x_minutes:
50 one: "1分"
50 one: "1分"
51 other: "%{count}分"
51 other: "%{count}分"
52 about_x_hours:
52 about_x_hours:
53 one: "約1時間"
53 one: "約1時間"
54 other: "約%{count}時間"
54 other: "約%{count}時間"
55 x_hours:
55 x_hours:
56 one: "1時間"
56 one: "1時間"
57 other: "%{count}時間"
57 other: "%{count}時間"
58 x_days:
58 x_days:
59 one: "1日"
59 one: "1日"
60 other: "%{count}日"
60 other: "%{count}日"
61 about_x_months:
61 about_x_months:
62 one: "約1ヶ月"
62 one: "約1ヶ月"
63 other: "約%{count}ヶ月"
63 other: "約%{count}ヶ月"
64 x_months:
64 x_months:
65 one: "1ヶ月"
65 one: "1ヶ月"
66 other: "%{count}ヶ月"
66 other: "%{count}ヶ月"
67 about_x_years:
67 about_x_years:
68 one: "約1年"
68 one: "約1年"
69 other: "約%{count}年"
69 other: "約%{count}年"
70 over_x_years:
70 over_x_years:
71 one: "1年以上"
71 one: "1年以上"
72 other: "%{count}年以上"
72 other: "%{count}年以上"
73 almost_x_years:
73 almost_x_years:
74 one: "ほぼ1年"
74 one: "ほぼ1年"
75 other: "ほぼ%{count}年"
75 other: "ほぼ%{count}年"
76
76
77 number:
77 number:
78 format:
78 format:
79 separator: "."
79 separator: "."
80 delimiter: ","
80 delimiter: ","
81 precision: 3
81 precision: 3
82
82
83 currency:
83 currency:
84 format:
84 format:
85 format: "%n%u"
85 format: "%n%u"
86 unit: "円"
86 unit: "円"
87 separator: "."
87 separator: "."
88 delimiter: ","
88 delimiter: ","
89 precision: 0
89 precision: 0
90
90
91 percentage:
91 percentage:
92 format:
92 format:
93 delimiter: ""
93 delimiter: ""
94
94
95 precision:
95 precision:
96 format:
96 format:
97 delimiter: ""
97 delimiter: ""
98
98
99 human:
99 human:
100 format:
100 format:
101 delimiter: ""
101 delimiter: ""
102 precision: 3
102 precision: 3
103 storage_units:
103 storage_units:
104 format: "%n %u"
104 format: "%n %u"
105 units:
105 units:
106 byte:
106 byte:
107 one: "Byte"
107 one: "Byte"
108 other: "Bytes"
108 other: "Bytes"
109 kb: "KB"
109 kb: "KB"
110 mb: "MB"
110 mb: "MB"
111 gb: "GB"
111 gb: "GB"
112 tb: "TB"
112 tb: "TB"
113
113
114 # Used in array.to_sentence.
114 # Used in array.to_sentence.
115 support:
115 support:
116 array:
116 array:
117 sentence_connector: "及び"
117 sentence_connector: "及び"
118 skip_last_comma: true
118 skip_last_comma: true
119
119
120 activerecord:
120 activerecord:
121 errors:
121 errors:
122 template:
122 template:
123 header:
123 header:
124 one: "%{model} にエラーが発生しました。"
124 one: "%{model} にエラーが発生しました。"
125 other: "%{model} %{count} つのエラーが発生しました。"
125 other: "%{model} %{count} つのエラーが発生しました。"
126 body: "次の項目を確認してください。"
126 body: "次の項目を確認してください。"
127
127
128 messages:
128 messages:
129 inclusion: "は一覧にありません。"
129 inclusion: "は一覧にありません。"
130 exclusion: "は予約されています。"
130 exclusion: "は予約されています。"
131 invalid: "は不正な値です。"
131 invalid: "は不正な値です。"
132 confirmation: "が一致しません。"
132 confirmation: "が一致しません。"
133 accepted: "を受諾してください。"
133 accepted: "を受諾してください。"
134 empty: "を入力してください。"
134 empty: "を入力してください。"
135 blank: "を入力してください。"
135 blank: "を入力してください。"
136 too_long: "は%{count}文字以内で入力してください。"
136 too_long: "は%{count}文字以内で入力してください。"
137 too_short: "は%{count}文字以上で入力してください。"
137 too_short: "は%{count}文字以上で入力してください。"
138 wrong_length: "は%{count}文字で入力してください。"
138 wrong_length: "は%{count}文字で入力してください。"
139 taken: "はすでに存在します。"
139 taken: "はすでに存在します。"
140 not_a_number: "は数値で入力してください。"
140 not_a_number: "は数値で入力してください。"
141 not_a_date: "は日付を入力してください。"
141 not_a_date: "は日付を入力してください。"
142 greater_than: "は%{count}より大きい値にしてください。"
142 greater_than: "は%{count}より大きい値にしてください。"
143 greater_than_or_equal_to: "は%{count}以上の値にしてください。"
143 greater_than_or_equal_to: "は%{count}以上の値にしてください。"
144 equal_to: "は%{count}にしてください。"
144 equal_to: "は%{count}にしてください。"
145 less_than: "は%{count}より小さい値にしてください。"
145 less_than: "は%{count}より小さい値にしてください。"
146 less_than_or_equal_to: "は%{count}以下の値にしてください。"
146 less_than_or_equal_to: "は%{count}以下の値にしてください。"
147 odd: "は奇数にしてください。"
147 odd: "は奇数にしてください。"
148 even: "は偶数にしてください。"
148 even: "は偶数にしてください。"
149 greater_than_start_date: "を開始日より後にしてください"
149 greater_than_start_date: "を開始日より後にしてください"
150 not_same_project: "同じプロジェクトに属していません"
150 not_same_project: "同じプロジェクトに属していません"
151 circular_dependency: "この関係では、循環依存になります"
151 circular_dependency: "この関係では、循環依存になります"
152 cant_link_an_issue_with_a_descendant: "指定したチケットとは親子関係になっているため関連づけられません"
152 cant_link_an_issue_with_a_descendant: "指定したチケットとは親子関係になっているため関連づけられません"
153
153
154 actionview_instancetag_blank_option: 選んでください
154 actionview_instancetag_blank_option: 選んでください
155
155
156 general_text_No: 'いいえ'
156 general_text_No: 'いいえ'
157 general_text_Yes: 'はい'
157 general_text_Yes: 'はい'
158 general_text_no: 'いいえ'
158 general_text_no: 'いいえ'
159 general_text_yes: 'はい'
159 general_text_yes: 'はい'
160 general_lang_name: 'Japanese (日本語)'
160 general_lang_name: 'Japanese (日本語)'
161 general_csv_separator: ','
161 general_csv_separator: ','
162 general_csv_decimal_separator: '.'
162 general_csv_decimal_separator: '.'
163 general_csv_encoding: CP932
163 general_csv_encoding: CP932
164 ## Redmine 1.2.0 現在、この値によって、pdfの出力のフォントを切り替えています。
164 ## Redmine 1.2.0 現在、この値によって、pdfの出力のフォントを切り替えています。
165 ## CRuby では CP932 にしてください。
165 ## CRuby では CP932 にしてください。
166 ## JRuby 1.6.2 (ruby-1.8.7-p330) では、CP932 ですと
166 ## JRuby 1.6.2 (ruby-1.8.7-p330) では、CP932 ですと
167 ## Iconv::InvalidEncoding例外が発生します。
167 ## Iconv::InvalidEncoding例外が発生します。
168 ## JRuby では、SJIS か Shift_JIS にしてください。
168 ## JRuby では、SJIS か Shift_JIS にしてください。
169 ## ご存知の通り、CP932 と SJIS は別物ですが、
169 ## ご存知の通り、CP932 と SJIS は別物ですが、
170 ## そこまでの検証はしていません。
170 ## そこまでの検証はしていません。
171 # general_pdf_encoding: SJIS
171 # general_pdf_encoding: SJIS
172 general_pdf_encoding: CP932
172 general_pdf_encoding: CP932
173 general_first_day_of_week: '7'
173 general_first_day_of_week: '7'
174
174
175 notice_account_updated: アカウントが更新されました。
175 notice_account_updated: アカウントが更新されました。
176 notice_account_invalid_creditentials: ユーザー名もしくはパスワードが無効です
176 notice_account_invalid_creditentials: ユーザー名もしくはパスワードが無効です
177 notice_account_password_updated: パスワードが更新されました。
177 notice_account_password_updated: パスワードが更新されました。
178 notice_account_wrong_password: パスワードが違います
178 notice_account_wrong_password: パスワードが違います
179 notice_account_register_done: アカウントが作成されました。有効にするには送信したメールにあるリンクをクリックしてください。
179 notice_account_register_done: アカウントが作成されました。有効にするには送信したメールにあるリンクをクリックしてください。
180 notice_account_unknown_email: ユーザーが存在しません。
180 notice_account_unknown_email: ユーザーが存在しません。
181 notice_can_t_change_password: このアカウントでは外部認証を使っています。パスワードは変更できません。
181 notice_can_t_change_password: このアカウントでは外部認証を使っています。パスワードは変更できません。
182 notice_account_lost_email_sent: 新しいパスワードのメールを送信しました。
182 notice_account_lost_email_sent: 新しいパスワードのメールを送信しました。
183 notice_account_activated: アカウントが有効になりました。ログインできます。
183 notice_account_activated: アカウントが有効になりました。ログインできます。
184 notice_successful_create: 作成しました。
184 notice_successful_create: 作成しました。
185 notice_successful_update: 更新しました。
185 notice_successful_update: 更新しました。
186 notice_successful_delete: 削除しました。
186 notice_successful_delete: 削除しました。
187 notice_successful_connection: 接続しました。
187 notice_successful_connection: 接続しました。
188 notice_file_not_found: アクセスしようとしたページは存在しないか削除されています。
188 notice_file_not_found: アクセスしようとしたページは存在しないか削除されています。
189 notice_locking_conflict: 別のユーザーがデータを更新しています。
189 notice_locking_conflict: 別のユーザーがデータを更新しています。
190 notice_not_authorized: このページにアクセスするには認証が必要です。
190 notice_not_authorized: このページにアクセスするには認証が必要です。
191 notice_not_authorized_archived_project: プロジェクトはアーカイブされています。
191 notice_not_authorized_archived_project: プロジェクトはアーカイブされています。
192 notice_email_sent: "%{value} 宛にメールを送信しました。"
192 notice_email_sent: "%{value} 宛にメールを送信しました。"
193 notice_email_error: "メール送信中にエラーが発生しました (%{value})"
193 notice_email_error: "メール送信中にエラーが発生しました (%{value})"
194 notice_feeds_access_key_reseted: RSSアクセスキーを初期化しました。
194 notice_feeds_access_key_reseted: RSSアクセスキーを初期化しました。
195 notice_api_access_key_reseted: APIアクセスキーを初期化しました。
195 notice_api_access_key_reseted: APIアクセスキーを初期化しました。
196 notice_failed_to_save_issues: "全%{total}件中%{count}件のチケットが保存できませんでした: %{ids}."
196 notice_failed_to_save_issues: "全%{total}件中%{count}件のチケットが保存できませんでした: %{ids}."
197 notice_failed_to_save_members: "メンバーの保存に失敗しました: %{errors}."
197 notice_failed_to_save_members: "メンバーの保存に失敗しました: %{errors}."
198 notice_no_issue_selected: "チケットが選択されていません! 更新対象のチケットを選択してください。"
198 notice_no_issue_selected: "チケットが選択されていません! 更新対象のチケットを選択してください。"
199 notice_account_pending: アカウントは作成済みで、システム管理者の承認待ちです。
199 notice_account_pending: アカウントは作成済みで、システム管理者の承認待ちです。
200 notice_default_data_loaded: デフォルト設定をロードしました。
200 notice_default_data_loaded: デフォルト設定をロードしました。
201 notice_unable_delete_version: バージョンを削除できません
201 notice_unable_delete_version: バージョンを削除できません
202 notice_unable_delete_time_entry: 作業時間を削除できません
202 notice_unable_delete_time_entry: 作業時間を削除できません
203 notice_issue_done_ratios_updated: チケットの進捗が更新されました。
203 notice_issue_done_ratios_updated: チケットの進捗が更新されました。
204 notice_gantt_chart_truncated: ガントチャートは、最大表示項目数(%{max})を超えたたため切り捨てられました。
204 notice_gantt_chart_truncated: ガントチャートは、最大表示項目数(%{max})を超えたたため切り捨てられました。
205
205
206 error_can_t_load_default_data: "デフォルト設定がロードできませんでした: %{value}"
206 error_can_t_load_default_data: "デフォルト設定がロードできませんでした: %{value}"
207 error_scm_not_found: リポジトリに、エントリ/リビジョンが存在しません。
207 error_scm_not_found: リポジトリに、エントリ/リビジョンが存在しません。
208 error_scm_command_failed: "リポジトリへアクセスしようとしてエラーになりました: %{value}"
208 error_scm_command_failed: "リポジトリへアクセスしようとしてエラーになりました: %{value}"
209 error_scm_annotate: "エントリが存在しない、もしくはアノテートできません。"
209 error_scm_annotate: "エントリが存在しない、もしくはアノテートできません。"
210 error_issue_not_found_in_project: 'チケットが見つかりません、もしくはこのプロジェクトに属していません'
210 error_issue_not_found_in_project: 'チケットが見つかりません、もしくはこのプロジェクトに属していません'
211 error_unable_delete_issue_status: "チケットのステータスを削除できませんでした。"
211 error_unable_delete_issue_status: "チケットのステータスを削除できませんでした。"
212 error_no_tracker_in_project: 'このプロジェクトにはトラッカーが登録されていません。プロジェクト設定を確認してください。'
212 error_no_tracker_in_project: 'このプロジェクトにはトラッカーが登録されていません。プロジェクト設定を確認してください。'
213 error_no_default_issue_status: 'デフォルトのチケットステータスが定義されていません。設定を確認してください(管理→チケットのステータス)。'
213 error_no_default_issue_status: 'デフォルトのチケットステータスが定義されていません。設定を確認してください(管理→チケットのステータス)。'
214 error_can_not_delete_custom_field: 'カスタムフィールドを削除できません。'
214 error_can_not_delete_custom_field: 'カスタムフィールドを削除できません。'
215 error_unable_to_connect: "接続できません。 (%{value})"
215 error_unable_to_connect: "接続できません。 (%{value})"
216 error_can_not_remove_role: 'このロールは使用されています。削除できません。'
216 error_can_not_remove_role: 'このロールは使用されています。削除できません。'
217 error_can_not_reopen_issue_on_closed_version: '終了したバージョンにひも付けされたチケットの再オープンはできません。'
217 error_can_not_reopen_issue_on_closed_version: '終了したバージョンにひも付けされたチケットの再オープンはできません。'
218 error_can_not_archive_project: このプロジェクトはアーカイブできません
218 error_can_not_archive_project: このプロジェクトはアーカイブできません
219 error_issue_done_ratios_not_updated: "チケットの進捗が更新できません。"
219 error_issue_done_ratios_not_updated: "チケットの進捗が更新できません。"
220 error_workflow_copy_source: 'コピー元となるトラッカーまたはロールを選択してください'
220 error_workflow_copy_source: 'コピー元となるトラッカーまたはロールを選択してください'
221 error_workflow_copy_target: 'コピー先となるトラッカーとロールを選択してください'
221 error_workflow_copy_target: 'コピー先となるトラッカーとロールを選択してください'
222 error_can_not_delete_tracker: 'このトラッカーは使用されています。削除できません。'
222 error_can_not_delete_tracker: 'このトラッカーは使用されています。削除できません。'
223
223
224 warning_attachments_not_saved: "%{count}個の添付ファイルが保存できませんでした。"
224 warning_attachments_not_saved: "%{count}個の添付ファイルが保存できませんでした。"
225
225
226 mail_subject_lost_password: "%{value} パスワード再発行"
226 mail_subject_lost_password: "%{value} パスワード再発行"
227 mail_body_lost_password: 'パスワードを変更するには、以下のリンクをクリックしてください:'
227 mail_body_lost_password: 'パスワードを変更するには、以下のリンクをクリックしてください:'
228 mail_subject_register: "%{value} アカウント登録の確認"
228 mail_subject_register: "%{value} アカウント登録の確認"
229 mail_body_register: 'アカウント登録を完了するには、以下のアドレスをクリックしてください:'
229 mail_body_register: 'アカウント登録を完了するには、以下のアドレスをクリックしてください:'
230 mail_body_account_information_external: "%{value} アカウントを使ってにログインできます。"
230 mail_body_account_information_external: "%{value} アカウントを使ってにログインできます。"
231 mail_body_account_information: アカウント情報
231 mail_body_account_information: アカウント情報
232 mail_subject_account_activation_request: "%{value} アカウントの承認要求"
232 mail_subject_account_activation_request: "%{value} アカウントの承認要求"
233 mail_body_account_activation_request: "新しいユーザー %{value} が登録されました。このアカウントはあなたの承認待ちです:"
233 mail_body_account_activation_request: "新しいユーザー %{value} が登録されました。このアカウントはあなたの承認待ちです:"
234 mail_subject_reminder: "%{count}件のチケットの期日が%{days}日以内に到来します"
234 mail_subject_reminder: "%{count}件のチケットの期日が%{days}日以内に到来します"
235 mail_body_reminder: "%{count}件の担当チケットの期日が%{days}日以内に到来します:"
235 mail_body_reminder: "%{count}件の担当チケットの期日が%{days}日以内に到来します:"
236 mail_subject_wiki_content_added: "Wikiページ %{id} が追加されました"
236 mail_subject_wiki_content_added: "Wikiページ %{id} が追加されました"
237 mail_body_wiki_content_added: "%{author} によってWikiページ %{id} が追加されました。"
237 mail_body_wiki_content_added: "%{author} によってWikiページ %{id} が追加されました。"
238 mail_subject_wiki_content_updated: "Wikiページ %{id} が更新されました"
238 mail_subject_wiki_content_updated: "Wikiページ %{id} が更新されました"
239 mail_body_wiki_content_updated: "%{author} によってWikiページ %{id} が更新されました。"
239 mail_body_wiki_content_updated: "%{author} によってWikiページ %{id} が更新されました。"
240
240
241
241
242 field_name: 名称
242 field_name: 名称
243 field_description: 説明
243 field_description: 説明
244 field_summary: サマリー
244 field_summary: サマリー
245 field_is_required: 必須
245 field_is_required: 必須
246 field_firstname: 名前
246 field_firstname: 名前
247 field_lastname: 苗字
247 field_lastname: 苗字
248 field_mail: メールアドレス
248 field_mail: メールアドレス
249 field_filename: ファイル
249 field_filename: ファイル
250 field_filesize: サイズ
250 field_filesize: サイズ
251 field_downloads: ダウンロード
251 field_downloads: ダウンロード
252 field_author: 作成者
252 field_author: 作成者
253 field_created_on: 作成日
253 field_created_on: 作成日
254 field_updated_on: 更新日
254 field_updated_on: 更新日
255 field_field_format: 書式
255 field_field_format: 書式
256 field_is_for_all: 全プロジェクト向け
256 field_is_for_all: 全プロジェクト向け
257 field_possible_values: 選択肢
257 field_possible_values: 選択肢
258 field_regexp: 正規表現
258 field_regexp: 正規表現
259 field_min_length: 最小値
259 field_min_length: 最小値
260 field_max_length: 最大値
260 field_max_length: 最大値
261 field_value:
261 field_value:
262 field_category: カテゴリ
262 field_category: カテゴリ
263 field_title: タイトル
263 field_title: タイトル
264 field_project: プロジェクト
264 field_project: プロジェクト
265 field_issue: チケット
265 field_issue: チケット
266 field_status: ステータス
266 field_status: ステータス
267 field_notes: 注記
267 field_notes: 注記
268 field_is_closed: 終了したチケット
268 field_is_closed: 終了したチケット
269 field_is_default: デフォルト値
269 field_is_default: デフォルト値
270 field_tracker: トラッカー
270 field_tracker: トラッカー
271 field_subject: 題名
271 field_subject: 題名
272 field_due_date: 期日
272 field_due_date: 期日
273 field_assigned_to: 担当者
273 field_assigned_to: 担当者
274 field_priority: 優先度
274 field_priority: 優先度
275 field_fixed_version: 対象バージョン
275 field_fixed_version: 対象バージョン
276 field_user: ユーザー
276 field_user: ユーザー
277 field_principal: 主体
277 field_principal: 主体
278 field_role: ロール
278 field_role: ロール
279 field_homepage: ホームページ
279 field_homepage: ホームページ
280 field_is_public: 公開
280 field_is_public: 公開
281 field_parent: 親プロジェクト名
281 field_parent: 親プロジェクト名
282 field_is_in_roadmap: チケットをロードマップに表示する
282 field_is_in_roadmap: チケットをロードマップに表示する
283 field_login: ログイン
283 field_login: ログイン
284 field_mail_notification: メール通知
284 field_mail_notification: メール通知
285 field_admin: システム管理者
285 field_admin: システム管理者
286 field_last_login_on: 最終接続日
286 field_last_login_on: 最終接続日
287 field_language: 言語
287 field_language: 言語
288 field_effective_date: 期日
288 field_effective_date: 期日
289 field_password: パスワード
289 field_password: パスワード
290 field_new_password: 新しいパスワード
290 field_new_password: 新しいパスワード
291 field_password_confirmation: パスワードの確認
291 field_password_confirmation: パスワードの確認
292 field_version: バージョン
292 field_version: バージョン
293 field_type: タイプ
293 field_type: タイプ
294 field_host: ホスト
294 field_host: ホスト
295 field_port: ポート
295 field_port: ポート
296 field_account: アカウント
296 field_account: アカウント
297 field_base_dn: 検索範囲
297 field_base_dn: 検索範囲
298 field_attr_login: ログイン名属性
298 field_attr_login: ログイン名属性
299 field_attr_firstname: 名前属性
299 field_attr_firstname: 名前属性
300 field_attr_lastname: 苗字属性
300 field_attr_lastname: 苗字属性
301 field_attr_mail: メール属性
301 field_attr_mail: メール属性
302 field_onthefly: あわせてユーザーを作成
302 field_onthefly: あわせてユーザーを作成
303 field_start_date: 開始日
303 field_start_date: 開始日
304 field_done_ratio: 進捗 %
304 field_done_ratio: 進捗 %
305 field_auth_source: 認証方式
305 field_auth_source: 認証方式
306 field_hide_mail: メールアドレスを隠す
306 field_hide_mail: メールアドレスを隠す
307 field_comments: コメント
307 field_comments: コメント
308 field_url: URL
308 field_url: URL
309 field_start_page: メインページ
309 field_start_page: メインページ
310 field_subproject: サブプロジェクト
310 field_subproject: サブプロジェクト
311 field_hours: 時間
311 field_hours: 時間
312 field_activity: 活動
312 field_activity: 活動
313 field_spent_on: 日付
313 field_spent_on: 日付
314 field_identifier: 識別子
314 field_identifier: 識別子
315 field_is_filter: フィルタとして使う
315 field_is_filter: フィルタとして使う
316 field_issue_to: 関連するチケット
316 field_issue_to: 関連するチケット
317 field_delay: 遅延
317 field_delay: 遅延
318 field_assignable: このロールにチケットを割り当て可能
318 field_assignable: このロールにチケットを割り当て可能
319 field_redirect_existing_links: 既存のリンクをリダイレクトする
319 field_redirect_existing_links: 既存のリンクをリダイレクトする
320 field_estimated_hours: 予定工数
320 field_estimated_hours: 予定工数
321 field_column_names: 項目
321 field_column_names: 項目
322 field_time_entries: 時間を記録
322 field_time_entries: 時間を記録
323 field_time_zone: タイムゾーン
323 field_time_zone: タイムゾーン
324 field_searchable: 検索条件に設定可能とする
324 field_searchable: 検索条件に設定可能とする
325 field_default_value: デフォルト値
325 field_default_value: デフォルト値
326 field_comments_sorting: コメントの表示順
326 field_comments_sorting: コメントの表示順
327 field_parent_title: 親ページ
327 field_parent_title: 親ページ
328 field_editable: 編集可能
328 field_editable: 編集可能
329 field_watcher: ウォッチャー
329 field_watcher: ウォッチャー
330 field_identity_url: OpenID URL
330 field_identity_url: OpenID URL
331 field_content: 内容
331 field_content: 内容
332 field_group_by: グループ条件
332 field_group_by: グループ条件
333 field_sharing: 共有
333 field_sharing: 共有
334 field_parent_issue: 親チケット
334 field_parent_issue: 親チケット
335 field_member_of_group: 担当者のグループ
335 field_member_of_group: 担当者のグループ
336 field_assigned_to_role: 担当者のロール
336 field_assigned_to_role: 担当者のロール
337 field_text: テキスト
337 field_text: テキスト
338 field_visible: 表示
338 field_visible: 表示
339 field_warn_on_leaving_unsaved: データを保存せずにページから移動するときに警告
339 field_warn_on_leaving_unsaved: データを保存せずにページから移動するときに警告
340 field_commit_logs_encoding: コミットメッセージのエンコーディング
340 field_commit_logs_encoding: コミットメッセージのエンコーディング
341 field_scm_path_encoding: パスのエンコーディング
341 field_scm_path_encoding: パスのエンコーディング
342 field_path_to_repository: リポジトリのパス
342 field_path_to_repository: リポジトリのパス
343 field_root_directory: ルートディレクトリ
343 field_root_directory: ルートディレクトリ
344 field_cvsroot: CVSROOT
344 field_cvsroot: CVSROOT
345 field_cvs_module: モジュール
345 field_cvs_module: モジュール
346
346
347 setting_app_title: アプリケーションのタイトル
347 setting_app_title: アプリケーションのタイトル
348 setting_app_subtitle: アプリケーションのサブタイトル
348 setting_app_subtitle: アプリケーションのサブタイトル
349 setting_welcome_text: ウェルカムメッセージ
349 setting_welcome_text: ウェルカムメッセージ
350 setting_default_language: 既定の言語
350 setting_default_language: 既定の言語
351 setting_login_required: 認証が必要
351 setting_login_required: 認証が必要
352 setting_self_registration: ユーザーによるアカウント登録
352 setting_self_registration: ユーザーによるアカウント登録
353 setting_attachment_max_size: 添付ファイルサイズの上限
353 setting_attachment_max_size: 添付ファイルサイズの上限
354 setting_issues_export_limit: エクスポートするチケット数の上限
354 setting_issues_export_limit: エクスポートするチケット数の上限
355 setting_mail_from: 送信元メールアドレス
355 setting_mail_from: 送信元メールアドレス
356 setting_bcc_recipients: ブラインドカーボンコピーで受信(bcc)
356 setting_bcc_recipients: ブラインドカーボンコピーで受信(bcc)
357 setting_plain_text_mail: プレインテキストのみ(HTMLなし)
357 setting_plain_text_mail: プレインテキストのみ(HTMLなし)
358 setting_host_name: ホスト名
358 setting_host_name: ホスト名
359 setting_text_formatting: テキストの書式
359 setting_text_formatting: テキストの書式
360 setting_cache_formatted_text: 書式化されたテキストをキャッシュする
360 setting_cache_formatted_text: 書式化されたテキストをキャッシュする
361 setting_wiki_compression: Wiki履歴を圧縮する
361 setting_wiki_compression: Wiki履歴を圧縮する
362 setting_feeds_limit: フィード内容の上限
362 setting_feeds_limit: フィード内容の上限
363 setting_default_projects_public: デフォルトで新しいプロジェクトは公開にする
363 setting_default_projects_public: デフォルトで新しいプロジェクトは公開にする
364 setting_autofetch_changesets: コミットを自動取得する
364 setting_autofetch_changesets: コミットを自動取得する
365 setting_sys_api_enabled: リポジトリ管理用のWebサービスを有効にする
365 setting_sys_api_enabled: リポジトリ管理用のWebサービスを有効にする
366 setting_commit_ref_keywords: 参照用キーワード
366 setting_commit_ref_keywords: 参照用キーワード
367 setting_commit_fix_keywords: 修正用キーワード
367 setting_commit_fix_keywords: 修正用キーワード
368 setting_autologin: 自動ログイン
368 setting_autologin: 自動ログイン
369 setting_date_format: 日付の形式
369 setting_date_format: 日付の形式
370 setting_time_format: 時刻の形式
370 setting_time_format: 時刻の形式
371 setting_cross_project_issue_relations: 異なるプロジェクトのチケット間で関連の設定を許可
371 setting_cross_project_issue_relations: 異なるプロジェクトのチケット間で関連の設定を許可
372 setting_issue_list_default_columns: チケットの一覧で表示する項目
372 setting_issue_list_default_columns: チケットの一覧で表示する項目
373 setting_repositories_encodings: 添付ファイルとリポジトリのエンコーディング
373 setting_repositories_encodings: 添付ファイルとリポジトリのエンコーディング
374 setting_emails_header: メールのヘッダ
374 setting_emails_header: メールのヘッダ
375 setting_emails_footer: メールのフッタ
375 setting_emails_footer: メールのフッタ
376 setting_protocol: プロトコル
376 setting_protocol: プロトコル
377 setting_per_page_options: ページ毎の表示件数
377 setting_per_page_options: ページ毎の表示件数
378 setting_user_format: ユーザー名の表示書式
378 setting_user_format: ユーザー名の表示書式
379 setting_activity_days_default: プロジェクトの活動ページに表示される日数
379 setting_activity_days_default: プロジェクトの活動ページに表示される日数
380 setting_display_subprojects_issues: サブプロジェクトのチケットをメインプロジェクトに表示する
380 setting_display_subprojects_issues: サブプロジェクトのチケットをメインプロジェクトに表示する
381 setting_enabled_scm: 使用するバージョン管理システム
381 setting_enabled_scm: 使用するバージョン管理システム
382 setting_mail_handler_body_delimiters: "メール本文から一致する行以降を切り取る"
382 setting_mail_handler_body_delimiters: "メール本文から一致する行以降を切り取る"
383 setting_mail_handler_api_enabled: 受信メール用のWebサービスを有効にする
383 setting_mail_handler_api_enabled: 受信メール用のWebサービスを有効にする
384 setting_mail_handler_api_key: APIキー
384 setting_mail_handler_api_key: APIキー
385 setting_sequential_project_identifiers: プロジェクト識別子を連番で生成する
385 setting_sequential_project_identifiers: プロジェクト識別子を連番で生成する
386 setting_gravatar_enabled: Gravatarのアイコンを使用する
386 setting_gravatar_enabled: Gravatarのアイコンを使用する
387 setting_gravatar_default: デフォルトのGravatarアイコン
387 setting_gravatar_default: デフォルトのGravatarアイコン
388 setting_diff_max_lines_displayed: 差分の表示行数の上限
388 setting_diff_max_lines_displayed: 差分の表示行数の上限
389 setting_file_max_size_displayed: 画面表示するテキストファイルサイズの上限
389 setting_file_max_size_displayed: 画面表示するテキストファイルサイズの上限
390 setting_repository_log_display_limit: ファイルのリビジョン表示数の上限
390 setting_repository_log_display_limit: ファイルのリビジョン表示数の上限
391 setting_openid: OpenIDによるログインと登録
391 setting_openid: OpenIDによるログインと登録
392 setting_password_min_length: パスワードの最低必要文字数
392 setting_password_min_length: パスワードの最低必要文字数
393 setting_new_project_user_role_id: システム管理者以外のユーザーが作成したプロジェクトに設定するロール
393 setting_new_project_user_role_id: システム管理者以外のユーザーが作成したプロジェクトに設定するロール
394 setting_default_projects_modules: 新規プロジェクトにおいてデフォルトで有効になるモジュール
394 setting_default_projects_modules: 新規プロジェクトにおいてデフォルトで有効になるモジュール
395 setting_issue_done_ratio: 進捗の算出方法
395 setting_issue_done_ratio: 進捗の算出方法
396 setting_issue_done_ratio_issue_field: 各チケットにフィールドを用意する
396 setting_issue_done_ratio_issue_field: 各チケットにフィールドを用意する
397 setting_issue_done_ratio_issue_status: チケットのステータスを使用する
397 setting_issue_done_ratio_issue_status: チケットのステータスを使用する
398 setting_start_of_week: 週の開始曜日
398 setting_start_of_week: 週の開始曜日
399 setting_rest_api_enabled: RESTによるWebサービスを有効にする
399 setting_rest_api_enabled: RESTによるWebサービスを有効にする
400 setting_default_notification_option: デフォルトのメール通知オプション
400 setting_default_notification_option: デフォルトのメール通知オプション
401 setting_commit_logtime_enabled: コミット時に作業時間を記録する
401 setting_commit_logtime_enabled: コミット時に作業時間を記録する
402 setting_commit_logtime_activity_id: 作業時間の作業分類
402 setting_commit_logtime_activity_id: 作業時間の作業分類
403 setting_gantt_items_limit: ガントチャート最大表示項目数
403 setting_gantt_items_limit: ガントチャート最大表示項目数
404
404
405 permission_add_project: プロジェクトの追加
405 permission_add_project: プロジェクトの追加
406 permission_add_subprojects: サブプロジェクトの追加
406 permission_add_subprojects: サブプロジェクトの追加
407 permission_edit_project: プロジェクトの編集
407 permission_edit_project: プロジェクトの編集
408 permission_select_project_modules: モジュールの選択
408 permission_select_project_modules: モジュールの選択
409 permission_manage_members: メンバーの管理
409 permission_manage_members: メンバーの管理
410 permission_manage_versions: バージョンの管理
410 permission_manage_versions: バージョンの管理
411 permission_manage_categories: チケットのカテゴリの管理
411 permission_manage_categories: チケットのカテゴリの管理
412 permission_view_issues: チケットの閲覧
412 permission_view_issues: チケットの閲覧
413 permission_add_issues: チケットの追加
413 permission_add_issues: チケットの追加
414 permission_edit_issues: チケットの編集
414 permission_edit_issues: チケットの編集
415 permission_manage_issue_relations: 関連するチケットの管理
415 permission_manage_issue_relations: 関連するチケットの管理
416 permission_add_issue_notes: 注記の追加
416 permission_add_issue_notes: 注記の追加
417 permission_edit_issue_notes: 注記の編集
417 permission_edit_issue_notes: 注記の編集
418 permission_edit_own_issue_notes: 自身が記入した注記の編集
418 permission_edit_own_issue_notes: 自身が記入した注記の編集
419 permission_move_issues: チケットの移動
419 permission_move_issues: チケットの移動
420 permission_delete_issues: チケットの削除
420 permission_delete_issues: チケットの削除
421 permission_manage_public_queries: 公開クエリの管理
421 permission_manage_public_queries: 公開クエリの管理
422 permission_save_queries: クエリの保存
422 permission_save_queries: クエリの保存
423 permission_view_gantt: ガントチャートの閲覧
423 permission_view_gantt: ガントチャートの閲覧
424 permission_view_calendar: カレンダーの閲覧
424 permission_view_calendar: カレンダーの閲覧
425 permission_view_issue_watchers: ウォッチャー一覧の閲覧
425 permission_view_issue_watchers: ウォッチャー一覧の閲覧
426 permission_add_issue_watchers: ウォッチャーの追加
426 permission_add_issue_watchers: ウォッチャーの追加
427 permission_delete_issue_watchers: ウォッチャーの削除
427 permission_delete_issue_watchers: ウォッチャーの削除
428 permission_log_time: 作業時間の記入
428 permission_log_time: 作業時間の記入
429 permission_view_time_entries: 作業時間の閲覧
429 permission_view_time_entries: 作業時間の閲覧
430 permission_edit_time_entries: 作業時間の編集
430 permission_edit_time_entries: 作業時間の編集
431 permission_edit_own_time_entries: 自身が記入した作業時間の編集
431 permission_edit_own_time_entries: 自身が記入した作業時間の編集
432 permission_manage_project_activities: 作業分類 (時間トラッキング) の管理
432 permission_manage_project_activities: 作業分類 (時間トラッキング) の管理
433 permission_manage_news: ニュースの管理
433 permission_manage_news: ニュースの管理
434 permission_comment_news: ニュースへのコメント
434 permission_comment_news: ニュースへのコメント
435 permission_view_documents: 文書の閲覧
435 permission_view_documents: 文書の閲覧
436 permission_manage_files: ファイルの管理
436 permission_manage_files: ファイルの管理
437 permission_view_files: ファイルの閲覧
437 permission_view_files: ファイルの閲覧
438 permission_manage_wiki: Wikiの管理
438 permission_manage_wiki: Wikiの管理
439 permission_rename_wiki_pages: Wikiページ名の変更
439 permission_rename_wiki_pages: Wikiページ名の変更
440 permission_delete_wiki_pages: Wikiページの削除
440 permission_delete_wiki_pages: Wikiページの削除
441 permission_view_wiki_pages: Wikiの閲覧
441 permission_view_wiki_pages: Wikiの閲覧
442 permission_export_wiki_pages: Wikiページを他の形式にエクスポート
442 permission_export_wiki_pages: Wikiページを他の形式にエクスポート
443 permission_view_wiki_edits: Wiki履歴の閲覧
443 permission_view_wiki_edits: Wiki履歴の閲覧
444 permission_edit_wiki_pages: Wikiページの編集
444 permission_edit_wiki_pages: Wikiページの編集
445 permission_delete_wiki_pages_attachments: 添付ファイルの削除
445 permission_delete_wiki_pages_attachments: 添付ファイルの削除
446 permission_protect_wiki_pages: Wikiページの凍結
446 permission_protect_wiki_pages: Wikiページの凍結
447 permission_manage_repository: リポジトリの管理
447 permission_manage_repository: リポジトリの管理
448 permission_browse_repository: リポジトリの閲覧
448 permission_browse_repository: リポジトリの閲覧
449 permission_view_changesets: 更新履歴の閲覧
449 permission_view_changesets: 更新履歴の閲覧
450 permission_commit_access: コミット権限
450 permission_commit_access: コミット権限
451 permission_manage_boards: フォーラムの管理
451 permission_manage_boards: フォーラムの管理
452 permission_view_messages: メッセージの閲覧
452 permission_view_messages: メッセージの閲覧
453 permission_add_messages: メッセージの追加
453 permission_add_messages: メッセージの追加
454 permission_edit_messages: メッセージの編集
454 permission_edit_messages: メッセージの編集
455 permission_edit_own_messages: 自身が記入したメッセージの編集
455 permission_edit_own_messages: 自身が記入したメッセージの編集
456 permission_delete_messages: メッセージの削除
456 permission_delete_messages: メッセージの削除
457 permission_delete_own_messages: 自身が記入したメッセージの削除
457 permission_delete_own_messages: 自身が記入したメッセージの削除
458 permission_manage_subtasks: 子チケットの管理
458 permission_manage_subtasks: 子チケットの管理
459
459
460 project_module_issue_tracking: チケットトラッキング
460 project_module_issue_tracking: チケットトラッキング
461 project_module_time_tracking: 時間トラッキング
461 project_module_time_tracking: 時間トラッキング
462 project_module_news: ニュース
462 project_module_news: ニュース
463 project_module_documents: 文書
463 project_module_documents: 文書
464 project_module_files: ファイル
464 project_module_files: ファイル
465 project_module_wiki: Wiki
465 project_module_wiki: Wiki
466 project_module_repository: リポジトリ
466 project_module_repository: リポジトリ
467 project_module_boards: フォーラム
467 project_module_boards: フォーラム
468 project_module_gantt: ガントチャート
468 project_module_gantt: ガントチャート
469 project_module_calendar: カレンダー
469 project_module_calendar: カレンダー
470
470
471 label_user: ユーザー
471 label_user: ユーザー
472 label_user_plural: ユーザー
472 label_user_plural: ユーザー
473 label_user_new: 新しいユーザー
473 label_user_new: 新しいユーザー
474 label_user_anonymous: 匿名ユーザー
474 label_user_anonymous: 匿名ユーザー
475 label_profile: プロフィール
475 label_profile: プロフィール
476 label_project: プロジェクト
476 label_project: プロジェクト
477 label_project_new: 新しいプロジェクト
477 label_project_new: 新しいプロジェクト
478 label_project_plural: プロジェクト
478 label_project_plural: プロジェクト
479 label_x_projects:
479 label_x_projects:
480 zero: プロジェクトはありません
480 zero: プロジェクトはありません
481 one: 1プロジェクト
481 one: 1プロジェクト
482 other: "%{count}プロジェクト"
482 other: "%{count}プロジェクト"
483 label_project_all: 全プロジェクト
483 label_project_all: 全プロジェクト
484 label_project_latest: 最近のプロジェクト
484 label_project_latest: 最近のプロジェクト
485 label_issue: チケット
485 label_issue: チケット
486 label_issue_new: 新しいチケット
486 label_issue_new: 新しいチケット
487 label_issue_plural: チケット
487 label_issue_plural: チケット
488 label_issue_view_all: すべてのチケットを見る
488 label_issue_view_all: すべてのチケットを見る
489 label_issues_by: "%{value} 別のチケット"
489 label_issues_by: "%{value} 別のチケット"
490 label_issue_added: チケットが追加されました
490 label_issue_added: チケットが追加されました
491 label_issue_updated: チケットが更新されました
491 label_issue_updated: チケットが更新されました
492 label_document: 文書
492 label_document: 文書
493 label_document_new: 新しい文書
493 label_document_new: 新しい文書
494 label_document_plural: 文書
494 label_document_plural: 文書
495 label_document_added: 文書が追加されました
495 label_document_added: 文書が追加されました
496 label_role: ロール
496 label_role: ロール
497 label_role_plural: ロール
497 label_role_plural: ロール
498 label_role_new: 新しいロール
498 label_role_new: 新しいロール
499 label_role_and_permissions: ロールと権限
499 label_role_and_permissions: ロールと権限
500 label_member: メンバー
500 label_member: メンバー
501 label_member_new: 新しいメンバー
501 label_member_new: 新しいメンバー
502 label_member_plural: メンバー
502 label_member_plural: メンバー
503 label_tracker: トラッカー
503 label_tracker: トラッカー
504 label_tracker_plural: トラッカー
504 label_tracker_plural: トラッカー
505 label_tracker_new: 新しいトラッカーを作成
505 label_tracker_new: 新しいトラッカーを作成
506 label_workflow: ワークフロー
506 label_workflow: ワークフロー
507 label_issue_status: チケットのステータス
507 label_issue_status: チケットのステータス
508 label_issue_status_plural: チケットのステータス
508 label_issue_status_plural: チケットのステータス
509 label_issue_status_new: 新しいステータス
509 label_issue_status_new: 新しいステータス
510 label_issue_category: チケットのカテゴリ
510 label_issue_category: チケットのカテゴリ
511 label_issue_category_plural: チケットのカテゴリ
511 label_issue_category_plural: チケットのカテゴリ
512 label_issue_category_new: 新しいカテゴリ
512 label_issue_category_new: 新しいカテゴリ
513 label_custom_field: カスタムフィールド
513 label_custom_field: カスタムフィールド
514 label_custom_field_plural: カスタムフィールド
514 label_custom_field_plural: カスタムフィールド
515 label_custom_field_new: 新しいカスタムフィールドを作成
515 label_custom_field_new: 新しいカスタムフィールドを作成
516 label_enumerations: 列挙項目
516 label_enumerations: 列挙項目
517 label_enumeration_new: 新しい値
517 label_enumeration_new: 新しい値
518 label_information: 情報
518 label_information: 情報
519 label_information_plural: 情報
519 label_information_plural: 情報
520 label_please_login: ログインしてください
520 label_please_login: ログインしてください
521 label_register: 登録する
521 label_register: 登録する
522 label_login_with_open_id_option: またはOpenIDでログインする
522 label_login_with_open_id_option: またはOpenIDでログインする
523 label_password_lost: パスワードの再発行
523 label_password_lost: パスワードの再発行
524 label_home: ホーム
524 label_home: ホーム
525 label_my_page: マイページ
525 label_my_page: マイページ
526 label_my_account: 個人設定
526 label_my_account: 個人設定
527 label_my_projects: マイプロジェクト
527 label_my_projects: マイプロジェクト
528 label_my_page_block: マイページパーツ
528 label_my_page_block: マイページパーツ
529 label_administration: 管理
529 label_administration: 管理
530 label_login: ログイン
530 label_login: ログイン
531 label_logout: ログアウト
531 label_logout: ログアウト
532 label_help: ヘルプ
532 label_help: ヘルプ
533 label_reported_issues: 報告したチケット
533 label_reported_issues: 報告したチケット
534 label_assigned_to_me_issues: 担当しているチケット
534 label_assigned_to_me_issues: 担当しているチケット
535 label_last_login: 最近の接続
535 label_last_login: 最近の接続
536 label_registered_on: 登録日
536 label_registered_on: 登録日
537 label_activity: 活動
537 label_activity: 活動
538 label_overall_activity: すべての活動
538 label_overall_activity: すべての活動
539 label_user_activity: "%{value} の活動"
539 label_user_activity: "%{value} の活動"
540 label_new: 新しく作成
540 label_new: 新しく作成
541 label_logged_as: ログイン中:
541 label_logged_as: ログイン中:
542 label_environment: 環境
542 label_environment: 環境
543 label_authentication: 認証
543 label_authentication: 認証
544 label_auth_source: 認証方式
544 label_auth_source: 認証方式
545 label_auth_source_new: 新しい認証方式
545 label_auth_source_new: 新しい認証方式
546 label_auth_source_plural: 認証方式
546 label_auth_source_plural: 認証方式
547 label_subproject_plural: サブプロジェクト
547 label_subproject_plural: サブプロジェクト
548 label_subproject_new: 新しいサブプロジェクト
548 label_subproject_new: 新しいサブプロジェクト
549 label_and_its_subprojects: "%{value} とサブプロジェクト"
549 label_and_its_subprojects: "%{value} とサブプロジェクト"
550 label_min_max_length: 最小値 - 最大値の長さ
550 label_min_max_length: 最小値 - 最大値の長さ
551 label_list: リストから選択
551 label_list: リストから選択
552 label_date: 日付
552 label_date: 日付
553 label_integer: 整数
553 label_integer: 整数
554 label_float: 小数
554 label_float: 小数
555 label_boolean: 真偽値
555 label_boolean: 真偽値
556 label_string: テキスト
556 label_string: テキスト
557 label_text: 長いテキスト
557 label_text: 長いテキスト
558 label_attribute: 属性
558 label_attribute: 属性
559 label_attribute_plural: 属性
559 label_attribute_plural: 属性
560 label_no_data: 表示するデータがありません
560 label_no_data: 表示するデータがありません
561 label_change_status: ステータスの変更
561 label_change_status: ステータスの変更
562 label_history: 履歴
562 label_history: 履歴
563 label_attachment: ファイル
563 label_attachment: ファイル
564 label_attachment_new: 新しいファイル
564 label_attachment_new: 新しいファイル
565 label_attachment_delete: ファイルを削除
565 label_attachment_delete: ファイルを削除
566 label_attachment_plural: ファイル
566 label_attachment_plural: ファイル
567 label_file_added: ファイルが追加されました
567 label_file_added: ファイルが追加されました
568 label_report: レポート
568 label_report: レポート
569 label_report_plural: レポート
569 label_report_plural: レポート
570 label_news: ニュース
570 label_news: ニュース
571 label_news_new: ニュースを追加
571 label_news_new: ニュースを追加
572 label_news_plural: ニュース
572 label_news_plural: ニュース
573 label_news_latest: 最新ニュース
573 label_news_latest: 最新ニュース
574 label_news_view_all: すべてのニュースを見る
574 label_news_view_all: すべてのニュースを見る
575 label_news_added: ニュースが追加されました
575 label_news_added: ニュースが追加されました
576 label_news_comment_added: ニュースにコメントが追加されました
576 label_news_comment_added: ニュースにコメントが追加されました
577 label_settings: 設定
577 label_settings: 設定
578 label_overview: 概要
578 label_overview: 概要
579 label_version: バージョン
579 label_version: バージョン
580 label_version_new: 新しいバージョン
580 label_version_new: 新しいバージョン
581 label_version_plural: バージョン
581 label_version_plural: バージョン
582 label_confirmation: 確認
582 label_confirmation: 確認
583 label_close_versions: 完了したバージョンを終了にする
583 label_close_versions: 完了したバージョンを終了にする
584 label_export_to: '他の形式にエクスポート:'
584 label_export_to: '他の形式にエクスポート:'
585 label_read: 読む...
585 label_read: 読む...
586 label_public_projects: 公開プロジェクト
586 label_public_projects: 公開プロジェクト
587 label_open_issues: 未完了
587 label_open_issues: 未完了
588 label_open_issues_plural: 未完了
588 label_open_issues_plural: 未完了
589 label_closed_issues: 完了
589 label_closed_issues: 完了
590 label_closed_issues_plural: 完了
590 label_closed_issues_plural: 完了
591 label_x_open_issues_abbr_on_total:
591 label_x_open_issues_abbr_on_total:
592 zero: 0件未完了 / 全%{total}件
592 zero: 0件未完了 / 全%{total}件
593 one: 1件未完了 / 全%{total}件
593 one: 1件未完了 / 全%{total}件
594 other: "%{count}件未完了 / 全%{total}件"
594 other: "%{count}件未完了 / 全%{total}件"
595 label_x_open_issues_abbr:
595 label_x_open_issues_abbr:
596 zero: 0件未完了
596 zero: 0件未完了
597 one: 1件未完了
597 one: 1件未完了
598 other: "%{count}件未完了"
598 other: "%{count}件未完了"
599 label_x_closed_issues_abbr:
599 label_x_closed_issues_abbr:
600 zero: 0件完了
600 zero: 0件完了
601 one: 1件完了
601 one: 1件完了
602 other: "%{count}件完了"
602 other: "%{count}件完了"
603 label_total: 合計
603 label_total: 合計
604 label_permissions: 権限
604 label_permissions: 権限
605 label_current_status: 現在のステータス
605 label_current_status: 現在のステータス
606 label_new_statuses_allowed: ステータスの移行先
606 label_new_statuses_allowed: ステータスの移行先
607 label_all: すべて
607 label_all: すべて
608 label_none: なし
608 label_none: なし
609 label_nobody: 無記名
609 label_nobody: 無記名
610 label_next:
610 label_next:
611 label_previous:
611 label_previous:
612 label_used_by: 使用中
612 label_used_by: 使用中
613 label_details: 詳細
613 label_details: 詳細
614 label_add_note: 注記を追加
614 label_add_note: 注記を追加
615 label_per_page: ページ毎
615 label_per_page: ページ毎
616 label_calendar: カレンダー
616 label_calendar: カレンダー
617 label_months_from: ヶ月分
617 label_months_from: ヶ月分
618 label_gantt: ガントチャート
618 label_gantt: ガントチャート
619 label_internal: 内部
619 label_internal: 内部
620 label_last_changes: "最新の変更 %{count}件"
620 label_last_changes: "最新の変更 %{count}件"
621 label_change_view_all: すべての変更を見る
621 label_change_view_all: すべての変更を見る
622 label_personalize_page: このページをパーソナライズする
622 label_personalize_page: このページをパーソナライズする
623 label_comment: コメント
623 label_comment: コメント
624 label_comment_plural: コメント
624 label_comment_plural: コメント
625 label_x_comments:
625 label_x_comments:
626 zero: コメントがありません
626 zero: コメントがありません
627 one: 1コメント
627 one: 1コメント
628 other: "%{count}コメント"
628 other: "%{count}コメント"
629 label_comment_add: コメント追加
629 label_comment_add: コメント追加
630 label_comment_added: 追加されたコメント
630 label_comment_added: 追加されたコメント
631 label_comment_delete: コメント削除
631 label_comment_delete: コメント削除
632 label_query: カスタムクエリ
632 label_query: カスタムクエリ
633 label_query_plural: カスタムクエリ
633 label_query_plural: カスタムクエリ
634 label_query_new: 新しいクエリ
634 label_query_new: 新しいクエリ
635 label_my_queries: マイカスタムクエリ
635 label_my_queries: マイカスタムクエリ
636 label_filter_add: フィルタ追加
636 label_filter_add: フィルタ追加
637 label_filter_plural: フィルタ
637 label_filter_plural: フィルタ
638 label_equals: 等しい
638 label_equals: 等しい
639 label_not_equals: 等しくない
639 label_not_equals: 等しくない
640 label_in_less_than: 今日から○日後以前
640 label_in_less_than: 今日から○日後以前
641 label_in_more_than: 今日から○日後以降
641 label_in_more_than: 今日から○日後以降
642 label_greater_or_equal: 以上
642 label_greater_or_equal: 以上
643 label_less_or_equal: 以下
643 label_less_or_equal: 以下
644 label_in: 今日から○日後
644 label_in: 今日から○日後
645 label_today: 今日
645 label_today: 今日
646 label_all_time: 全期間
646 label_all_time: 全期間
647 label_yesterday: 昨日
647 label_yesterday: 昨日
648 label_this_week: 今週
648 label_this_week: 今週
649 label_last_week: 先週
649 label_last_week: 先週
650 label_last_n_days: "直近%{count}日間"
650 label_last_n_days: "直近%{count}日間"
651 label_this_month: 今月
651 label_this_month: 今月
652 label_last_month: 先月
652 label_last_month: 先月
653 label_this_year: 今年
653 label_this_year: 今年
654 label_date_range: 期間
654 label_date_range: 期間
655 label_less_than_ago: 今日より○日前以降
655 label_less_than_ago: 今日より○日前以降
656 label_more_than_ago: 今日より○日前以前
656 label_more_than_ago: 今日より○日前以前
657 label_ago: ○日前
657 label_ago: ○日前
658 label_contains: 含む
658 label_contains: 含む
659 label_not_contains: 含まない
659 label_not_contains: 含まない
660 label_day_plural:
660 label_day_plural:
661 label_repository: リポジトリ
661 label_repository: リポジトリ
662 label_repository_plural: リポジトリ
662 label_repository_plural: リポジトリ
663 label_browse: ブラウズ
663 label_browse: ブラウズ
664 label_branch: ブランチ
664 label_branch: ブランチ
665 label_tag: タグ
665 label_tag: タグ
666 label_revision: リビジョン
666 label_revision: リビジョン
667 label_revision_plural: リビジョン
667 label_revision_plural: リビジョン
668 label_revision_id: リビジョン %{value}
668 label_revision_id: リビジョン %{value}
669 label_associated_revisions: 関係しているリビジョン
669 label_associated_revisions: 関係しているリビジョン
670 label_added: 追加
670 label_added: 追加
671 label_modified: 変更
671 label_modified: 変更
672 label_copied: コピー
672 label_copied: コピー
673 label_renamed: 名称変更
673 label_renamed: 名称変更
674 label_deleted: 削除
674 label_deleted: 削除
675 label_latest_revision: 最新リビジョン
675 label_latest_revision: 最新リビジョン
676 label_latest_revision_plural: 最新リビジョン
676 label_latest_revision_plural: 最新リビジョン
677 label_view_revisions: リビジョンを見る
677 label_view_revisions: リビジョンを見る
678 label_view_all_revisions: すべてのリビジョンを見る
678 label_view_all_revisions: すべてのリビジョンを見る
679 label_max_size: サイズの上限
679 label_max_size: サイズの上限
680 label_sort_highest: 一番上へ
680 label_sort_highest: 一番上へ
681 label_sort_higher: 上へ
681 label_sort_higher: 上へ
682 label_sort_lower: 下へ
682 label_sort_lower: 下へ
683 label_sort_lowest: 一番下へ
683 label_sort_lowest: 一番下へ
684 label_roadmap: ロードマップ
684 label_roadmap: ロードマップ
685 label_roadmap_due_in: "期日まで %{value}"
685 label_roadmap_due_in: "期日まで %{value}"
686 label_roadmap_overdue: "%{value} 遅れ"
686 label_roadmap_overdue: "%{value} 遅れ"
687 label_roadmap_no_issues: このバージョンに関するチケットはありません
687 label_roadmap_no_issues: このバージョンに関するチケットはありません
688 label_search: 検索
688 label_search: 検索
689 label_result_plural: 結果
689 label_result_plural: 結果
690 label_all_words: すべての単語
690 label_all_words: すべての単語
691 label_wiki: Wiki
691 label_wiki: Wiki
692 label_wiki_edit: Wiki編集
692 label_wiki_edit: Wiki編集
693 label_wiki_edit_plural: Wiki編集
693 label_wiki_edit_plural: Wiki編集
694 label_wiki_page: Wikiページ
694 label_wiki_page: Wikiページ
695 label_wiki_page_plural: Wikiページ
695 label_wiki_page_plural: Wikiページ
696 label_index_by_title: 索引(名前順)
696 label_index_by_title: 索引(名前順)
697 label_index_by_date: 索引(日付順)
697 label_index_by_date: 索引(日付順)
698 label_current_version: 最新版
698 label_current_version: 最新版
699 label_preview: プレビュー
699 label_preview: プレビュー
700 label_feed_plural: フィード
700 label_feed_plural: フィード
701 label_changes_details: 全変更の詳細
701 label_changes_details: 全変更の詳細
702 label_issue_tracking: チケットトラッキング
702 label_issue_tracking: チケットトラッキング
703 label_spent_time: 作業時間の記録
703 label_spent_time: 作業時間の記録
704 label_overall_spent_time: すべての作業時間の記録
704 label_overall_spent_time: すべての作業時間の記録
705 label_f_hour: "%{value}時間"
705 label_f_hour: "%{value}時間"
706 label_f_hour_plural: "%{value}時間"
706 label_f_hour_plural: "%{value}時間"
707 label_time_tracking: 時間トラッキング
707 label_time_tracking: 時間トラッキング
708 label_change_plural: 変更
708 label_change_plural: 変更
709 label_statistics: 統計
709 label_statistics: 統計
710 label_commits_per_month: 月別のコミット
710 label_commits_per_month: 月別のコミット
711 label_commits_per_author: 起票者別のコミット
711 label_commits_per_author: 起票者別のコミット
712 label_diff: 差分
712 label_diff: 差分
713 label_view_diff: 差分を見る
713 label_view_diff: 差分を見る
714 label_diff_inline: インライン
714 label_diff_inline: インライン
715 label_diff_side_by_side: 横に並べる
715 label_diff_side_by_side: 横に並べる
716 label_options: オプション
716 label_options: オプション
717 label_copy_workflow_from: ワークフローをここからコピー
717 label_copy_workflow_from: ワークフローをここからコピー
718 label_permissions_report: 権限レポート
718 label_permissions_report: 権限レポート
719 label_watched_issues: ウォッチしているチケット
719 label_watched_issues: ウォッチしているチケット
720 label_related_issues: 関連するチケット
720 label_related_issues: 関連するチケット
721 label_applied_status: 適用されるステータス
721 label_applied_status: 適用されるステータス
722 label_loading: ロード中...
722 label_loading: ロード中...
723 label_relation_new: 新しい関連
723 label_relation_new: 新しい関連
724 label_relation_delete: 関連の削除
724 label_relation_delete: 関連の削除
725 label_relates_to: 関連している
725 label_relates_to: 関連している
726 label_duplicates: 次のチケットと重複
726 label_duplicates: 次のチケットと重複
727 label_duplicated_by: 次のチケットが重複
727 label_duplicated_by: 次のチケットが重複
728 label_blocks: ブロックしている
728 label_blocks: ブロックしている
729 label_blocked_by: ブロックされている
729 label_blocked_by: ブロックされている
730 label_precedes: 次のチケットに先行
730 label_precedes: 次のチケットに先行
731 label_follows: 次のチケットに後続
731 label_follows: 次のチケットに後続
732 label_end_to_start: 最後-最初
732 label_end_to_start: 最後-最初
733 label_end_to_end: 最後-最後
733 label_end_to_end: 最後-最後
734 label_start_to_start: 最初-最初
734 label_start_to_start: 最初-最初
735 label_start_to_end: 最初-最後
735 label_start_to_end: 最初-最後
736 label_stay_logged_in: ログインを維持
736 label_stay_logged_in: ログインを維持
737 label_disabled: 無効
737 label_disabled: 無効
738 label_show_completed_versions: 完了したバージョンを表示
738 label_show_completed_versions: 完了したバージョンを表示
739 label_me: 自分
739 label_me: 自分
740 label_board: フォーラム
740 label_board: フォーラム
741 label_board_new: 新しいフォーラム
741 label_board_new: 新しいフォーラム
742 label_board_plural: フォーラム
742 label_board_plural: フォーラム
743 label_board_sticky: スティッキー
743 label_board_sticky: スティッキー
744 label_board_locked: ロック
744 label_board_locked: ロック
745 label_topic_plural: トピック
745 label_topic_plural: トピック
746 label_message_plural: メッセージ
746 label_message_plural: メッセージ
747 label_message_last: 最新のメッセージ
747 label_message_last: 最新のメッセージ
748 label_message_new: 新しいメッセージ
748 label_message_new: 新しいメッセージ
749 label_message_posted: メッセージが追加されました
749 label_message_posted: メッセージが追加されました
750 label_reply_plural: 返答
750 label_reply_plural: 返答
751 label_send_information: アカウント情報をユーザーに送信
751 label_send_information: アカウント情報をユーザーに送信
752 label_year:
752 label_year:
753 label_month:
753 label_month:
754 label_week:
754 label_week:
755 label_date_from: "日付指定: "
755 label_date_from: "日付指定: "
756 label_date_to: から
756 label_date_to: から
757 label_language_based: ユーザーの言語の設定に従う
757 label_language_based: ユーザーの言語の設定に従う
758 label_sort_by: "並び替え %{value}"
758 label_sort_by: "並び替え %{value}"
759 label_send_test_email: テストメールを送信
759 label_send_test_email: テストメールを送信
760 label_feeds_access_key: RSSアクセスキー
760 label_feeds_access_key: RSSアクセスキー
761 label_missing_feeds_access_key: RSSアクセスキーが見つかりません
761 label_missing_feeds_access_key: RSSアクセスキーが見つかりません
762 label_feeds_access_key_created_on: "RSSアクセスキーは%{value}前に作成されました"
762 label_feeds_access_key_created_on: "RSSアクセスキーは%{value}前に作成されました"
763 label_module_plural: モジュール
763 label_module_plural: モジュール
764 label_added_time_by: "%{author} が%{age}前に追加"
764 label_added_time_by: "%{author} が%{age}前に追加"
765 label_updated_time_by: "%{author} が%{age}前に更新"
765 label_updated_time_by: "%{author} が%{age}前に更新"
766 label_updated_time: "%{value}前に更新"
766 label_updated_time: "%{value}前に更新"
767 label_jump_to_a_project: プロジェクトへ移動...
767 label_jump_to_a_project: プロジェクトへ移動...
768 label_file_plural: ファイル
768 label_file_plural: ファイル
769 label_changeset_plural: 更新履歴
769 label_changeset_plural: 更新履歴
770 label_default_columns: 既定の項目
770 label_default_columns: 既定の項目
771 label_no_change_option: (変更無し)
771 label_no_change_option: (変更無し)
772 label_bulk_edit_selected_issues: チケットの一括編集
772 label_bulk_edit_selected_issues: チケットの一括編集
773 label_theme: テーマ
773 label_theme: テーマ
774 label_default: 既定
774 label_default: 既定
775 label_search_titles_only: タイトルのみ
775 label_search_titles_only: タイトルのみ
776 label_user_mail_option_all: "参加しているプロジェクトのすべての通知"
776 label_user_mail_option_all: "参加しているプロジェクトのすべての通知"
777 label_user_mail_option_selected: "選択したプロジェクトのすべての通知..."
777 label_user_mail_option_selected: "選択したプロジェクトのすべての通知..."
778 label_user_mail_option_none: "通知しない"
778 label_user_mail_option_none: "通知しない"
779 label_user_mail_option_only_my_events: "ウォッチまたは関係している事柄のみ"
779 label_user_mail_option_only_my_events: "ウォッチまたは関係している事柄のみ"
780 label_user_mail_option_only_assigned: "自分が担当している事柄のみ"
780 label_user_mail_option_only_assigned: "自分が担当している事柄のみ"
781 label_user_mail_option_only_owner: "自分が作成した事柄のみ"
781 label_user_mail_option_only_owner: "自分が作成した事柄のみ"
782 label_user_mail_no_self_notified: 自分自身による変更の通知は不要
782 label_user_mail_no_self_notified: 自分自身による変更の通知は不要
783 label_registration_activation_by_email: メールでアカウントを有効化
783 label_registration_activation_by_email: メールでアカウントを有効化
784 label_registration_manual_activation: 手動でアカウントを有効化
784 label_registration_manual_activation: 手動でアカウントを有効化
785 label_registration_automatic_activation: 自動でアカウントを有効化
785 label_registration_automatic_activation: 自動でアカウントを有効化
786 label_display_per_page: "1ページに: %{value}"
786 label_display_per_page: "1ページに: %{value}"
787 label_age: 年齢
787 label_age: 年齢
788 label_change_properties: プロパティの変更
788 label_change_properties: プロパティの変更
789 label_general: 全般
789 label_general: 全般
790 label_more: 続き
790 label_more: 続き
791 label_scm: バージョン管理システム
791 label_scm: バージョン管理システム
792 label_plugins: プラグイン
792 label_plugins: プラグイン
793 label_ldap_authentication: LDAP認証
793 label_ldap_authentication: LDAP認証
794 label_downloads_abbr: DL
794 label_downloads_abbr: DL
795 label_optional_description: 任意のコメント
795 label_optional_description: 任意のコメント
796 label_add_another_file: 別のファイルを追加
796 label_add_another_file: 別のファイルを追加
797 label_preferences: 設定
797 label_preferences: 設定
798 label_chronological_order: 古い順
798 label_chronological_order: 古い順
799 label_reverse_chronological_order: 新しい順
799 label_reverse_chronological_order: 新しい順
800 label_planning: 計画
800 label_planning: 計画
801 label_incoming_emails: 受信メール
801 label_incoming_emails: 受信メール
802 label_generate_key: キーの生成
802 label_generate_key: キーの生成
803 label_issue_watchers: チケットのウォッチャー
803 label_issue_watchers: チケットのウォッチャー
804 label_example:
804 label_example:
805 label_display: 表示
805 label_display: 表示
806 label_sort: ソート条件
806 label_sort: ソート条件
807 label_ascending: 昇順
807 label_ascending: 昇順
808 label_descending: 降順
808 label_descending: 降順
809 label_date_from_to: "%{start}から%{end}まで"
809 label_date_from_to: "%{start}から%{end}まで"
810 label_wiki_content_added: Wikiページが追加されました
810 label_wiki_content_added: Wikiページが追加されました
811 label_wiki_content_updated: Wikiページが更新されました
811 label_wiki_content_updated: Wikiページが更新されました
812 label_group: グループ
812 label_group: グループ
813 label_group_plural: グループ
813 label_group_plural: グループ
814 label_group_new: 新しいグループ
814 label_group_new: 新しいグループ
815 label_time_entry_plural: 作業時間の記録
815 label_time_entry_plural: 作業時間の記録
816 label_version_sharing_none: 共有しない
816 label_version_sharing_none: 共有しない
817 label_version_sharing_descendants: サブプロジェクト単位
817 label_version_sharing_descendants: サブプロジェクト単位
818 label_version_sharing_hierarchy: プロジェクト階層単位
818 label_version_sharing_hierarchy: プロジェクト階層単位
819 label_version_sharing_tree: プロジェクトツリー単位
819 label_version_sharing_tree: プロジェクトツリー単位
820 label_version_sharing_system: すべてのプロジェクト
820 label_version_sharing_system: すべてのプロジェクト
821 label_update_issue_done_ratios: 進捗の更新
821 label_update_issue_done_ratios: 進捗の更新
822 label_copy_source: コピー元
822 label_copy_source: コピー元
823 label_copy_target: コピー先
823 label_copy_target: コピー先
824 label_copy_same_as_target: 同じコピー先
824 label_copy_same_as_target: 同じコピー先
825 label_display_used_statuses_only: このトラッカーで使われているステータスのみ表示する
825 label_display_used_statuses_only: このトラッカーで使われているステータスのみ表示する
826 label_api_access_key: APIアクセスキー
826 label_api_access_key: APIアクセスキー
827 label_missing_api_access_key: APIアクセスキーが見つかりません
827 label_missing_api_access_key: APIアクセスキーが見つかりません
828 label_api_access_key_created_on: "APIアクセスキーは%{value}前に作成されました"
828 label_api_access_key_created_on: "APIアクセスキーは%{value}前に作成されました"
829 label_subtask_plural: 子チケット
829 label_subtask_plural: 子チケット
830 label_project_copy_notifications: コピーしたチケットのメール通知を送信する
830 label_project_copy_notifications: コピーしたチケットのメール通知を送信する
831 label_principal_search: "ユーザーまたはグループの検索:"
831 label_principal_search: "ユーザーまたはグループの検索:"
832 label_user_search: "ユーザーの検索:"
832 label_user_search: "ユーザーの検索:"
833 label_git_report_last_commit: ファイルとディレクトリの最新コミットを表示する
833 label_git_report_last_commit: ファイルとディレクトリの最新コミットを表示する
834 label_parent_revision:
834 label_parent_revision:
835 label_child_revision:
835 label_child_revision:
836 label_gantt_progress_line: イナズマ線
836
837
837 button_login: ログイン
838 button_login: ログイン
838 button_submit: 送信
839 button_submit: 送信
839 button_save: 保存
840 button_save: 保存
840 button_check_all: すべてにチェックをつける
841 button_check_all: すべてにチェックをつける
841 button_uncheck_all: すべてのチェックを外す
842 button_uncheck_all: すべてのチェックを外す
842 button_expand_all: 展開
843 button_expand_all: 展開
843 button_collapse_all: 折りたたみ
844 button_collapse_all: 折りたたみ
844 button_delete: 削除
845 button_delete: 削除
845 button_create: 作成
846 button_create: 作成
846 button_create_and_continue: 連続作成
847 button_create_and_continue: 連続作成
847 button_test: テスト
848 button_test: テスト
848 button_edit: 編集
849 button_edit: 編集
849 button_edit_associated_wikipage: "関連するWikiページを編集: %{page_title}"
850 button_edit_associated_wikipage: "関連するWikiページを編集: %{page_title}"
850 button_add: 追加
851 button_add: 追加
851 button_change: 変更
852 button_change: 変更
852 button_apply: 適用
853 button_apply: 適用
853 button_clear: クリア
854 button_clear: クリア
854 button_lock: ロック
855 button_lock: ロック
855 button_unlock: アンロック
856 button_unlock: アンロック
856 button_download: ダウンロード
857 button_download: ダウンロード
857 button_list: 一覧
858 button_list: 一覧
858 button_view: 表示
859 button_view: 表示
859 button_move: 移動
860 button_move: 移動
860 button_move_and_follow: 移動後表示
861 button_move_and_follow: 移動後表示
861 button_back: 戻る
862 button_back: 戻る
862 button_cancel: キャンセル
863 button_cancel: キャンセル
863 button_activate: 有効にする
864 button_activate: 有効にする
864 button_sort: ソート
865 button_sort: ソート
865 button_log_time: 時間を記録
866 button_log_time: 時間を記録
866 button_rollback: このバージョンにロールバック
867 button_rollback: このバージョンにロールバック
867 button_watch: ウォッチ
868 button_watch: ウォッチ
868 button_unwatch: ウォッチをやめる
869 button_unwatch: ウォッチをやめる
869 button_reply: 返答
870 button_reply: 返答
870 button_archive: アーカイブ
871 button_archive: アーカイブ
871 button_unarchive: アーカイブ解除
872 button_unarchive: アーカイブ解除
872 button_reset: リセット
873 button_reset: リセット
873 button_rename: 名前変更
874 button_rename: 名前変更
874 button_change_password: パスワード変更
875 button_change_password: パスワード変更
875 button_copy: コピー
876 button_copy: コピー
876 button_copy_and_follow: コピー後表示
877 button_copy_and_follow: コピー後表示
877 button_annotate: アノテート
878 button_annotate: アノテート
878 button_update: 更新
879 button_update: 更新
879 button_configure: 設定
880 button_configure: 設定
880 button_quote: 引用
881 button_quote: 引用
881 button_duplicate: 複製
882 button_duplicate: 複製
882 button_show: 表示
883 button_show: 表示
883
884
884 status_active: 有効
885 status_active: 有効
885 status_registered: 登録
886 status_registered: 登録
886 status_locked: ロック
887 status_locked: ロック
887
888
888 version_status_open: 進行中
889 version_status_open: 進行中
889 version_status_locked: ロック中
890 version_status_locked: ロック中
890 version_status_closed: 終了
891 version_status_closed: 終了
891
892
892 field_active: 有効
893 field_active: 有効
893
894
894 text_select_mail_notifications: どのメール通知を送信するか、アクションを選択してください。
895 text_select_mail_notifications: どのメール通知を送信するか、アクションを選択してください。
895 text_regexp_info: 例) ^[A-Z0-9]+$
896 text_regexp_info: 例) ^[A-Z0-9]+$
896 text_min_max_length_info: 0だと無制限になります
897 text_min_max_length_info: 0だと無制限になります
897 text_project_destroy_confirmation: 本当にこのプロジェクトと関連データを削除しますか?
898 text_project_destroy_confirmation: 本当にこのプロジェクトと関連データを削除しますか?
898 text_subprojects_destroy_warning: "サブプロジェクト %{value} も削除されます。"
899 text_subprojects_destroy_warning: "サブプロジェクト %{value} も削除されます。"
899 text_workflow_edit: ワークフローを編集するロールとトラッカーを選んでください
900 text_workflow_edit: ワークフローを編集するロールとトラッカーを選んでください
900 text_are_you_sure: よろしいですか?
901 text_are_you_sure: よろしいですか?
901 text_journal_changed: "%{label} %{old} から %{new} に変更"
902 text_journal_changed: "%{label} %{old} から %{new} に変更"
902 text_journal_changed_no_detail: "%{label} を更新"
903 text_journal_changed_no_detail: "%{label} を更新"
903 text_journal_set_to: "%{label} %{value} にセット"
904 text_journal_set_to: "%{label} %{value} にセット"
904 text_journal_deleted: "%{label} を削除 (%{old})"
905 text_journal_deleted: "%{label} を削除 (%{old})"
905 text_journal_added: "%{label} %{value} を追加"
906 text_journal_added: "%{label} %{value} を追加"
906 text_tip_issue_begin_day: この日に開始するタスク
907 text_tip_issue_begin_day: この日に開始するタスク
907 text_tip_issue_end_day: この日に終了するタスク
908 text_tip_issue_end_day: この日に終了するタスク
908 text_tip_issue_begin_end_day: この日のうちに開始して終了するタスク
909 text_tip_issue_begin_end_day: この日のうちに開始して終了するタスク
909 text_caracters_maximum: "最大%{count}文字です。"
910 text_caracters_maximum: "最大%{count}文字です。"
910 text_caracters_minimum: "最低%{count}文字の長さが必要です"
911 text_caracters_minimum: "最低%{count}文字の長さが必要です"
911 text_length_between: "長さは%{min}から%{max}文字までです。"
912 text_length_between: "長さは%{min}から%{max}文字までです。"
912 text_tracker_no_workflow: このトラッカーにワークフローが定義されていません
913 text_tracker_no_workflow: このトラッカーにワークフローが定義されていません
913 text_unallowed_characters: 次の文字は使用できません
914 text_unallowed_characters: 次の文字は使用できません
914 text_comma_separated: (カンマで区切ることで)複数の値を設定できます。
915 text_comma_separated: (カンマで区切ることで)複数の値を設定できます。
915 text_line_separated: (1行ごとに書くことで)複数の値を設定できます。
916 text_line_separated: (1行ごとに書くことで)複数の値を設定できます。
916 text_issues_ref_in_commit_messages: コミットメッセージ内でチケットの参照/修正
917 text_issues_ref_in_commit_messages: コミットメッセージ内でチケットの参照/修正
917 text_issue_added: "チケット %{id} %{author} によって報告されました。"
918 text_issue_added: "チケット %{id} %{author} によって報告されました。"
918 text_issue_updated: "チケット %{id} %{author} によって更新されました。"
919 text_issue_updated: "チケット %{id} %{author} によって更新されました。"
919 text_wiki_destroy_confirmation: 本当にこのwikiとその内容のすべてを削除しますか?
920 text_wiki_destroy_confirmation: 本当にこのwikiとその内容のすべてを削除しますか?
920 text_issue_category_destroy_question: "%{count}件のチケットがこのカテゴリに割り当てられています。"
921 text_issue_category_destroy_question: "%{count}件のチケットがこのカテゴリに割り当てられています。"
921 text_issue_category_destroy_assignments: カテゴリの割り当てを削除する
922 text_issue_category_destroy_assignments: カテゴリの割り当てを削除する
922 text_issue_category_reassign_to: チケットをこのカテゴリに再割り当てする
923 text_issue_category_reassign_to: チケットをこのカテゴリに再割り当てする
923 text_user_mail_option: "未選択のプロジェクトでは、ウォッチまたは関係している事柄(例: 自分が報告者もしくは担当者であるチケット)のみメールが送信されます。"
924 text_user_mail_option: "未選択のプロジェクトでは、ウォッチまたは関係している事柄(例: 自分が報告者もしくは担当者であるチケット)のみメールが送信されます。"
924 text_no_configuration_data: "ロール、トラッカー、チケットのステータス、ワークフローがまだ設定されていません。\nデフォルト設定のロードを強くお勧めします。ロードした後、それを修正することができます。"
925 text_no_configuration_data: "ロール、トラッカー、チケットのステータス、ワークフローがまだ設定されていません。\nデフォルト設定のロードを強くお勧めします。ロードした後、それを修正することができます。"
925 text_load_default_configuration: デフォルト設定をロード
926 text_load_default_configuration: デフォルト設定をロード
926 text_status_changed_by_changeset: "更新履歴 %{value} で適用されました。"
927 text_status_changed_by_changeset: "更新履歴 %{value} で適用されました。"
927 text_time_logged_by_changeset: "更新履歴 %{value} で適用されました。"
928 text_time_logged_by_changeset: "更新履歴 %{value} で適用されました。"
928 text_issues_destroy_confirmation: '本当に選択したチケットを削除しますか?'
929 text_issues_destroy_confirmation: '本当に選択したチケットを削除しますか?'
929 text_select_project_modules: 'このプロジェクトで使用するモジュールを選択してください:'
930 text_select_project_modules: 'このプロジェクトで使用するモジュールを選択してください:'
930 text_default_administrator_account_changed: デフォルト管理アカウントが変更済
931 text_default_administrator_account_changed: デフォルト管理アカウントが変更済
931 text_file_repository_writable: ファイルリポジトリに書き込み可能
932 text_file_repository_writable: ファイルリポジトリに書き込み可能
932 text_plugin_assets_writable: Plugin assetsディレクトリに書き込み可能
933 text_plugin_assets_writable: Plugin assetsディレクトリに書き込み可能
933 text_rmagick_available: RMagickが使用可能 (オプション)
934 text_rmagick_available: RMagickが使用可能 (オプション)
934 text_destroy_time_entries_question: このチケットの%{hours}時間分の作業記録の扱いを選択してください。
935 text_destroy_time_entries_question: このチケットの%{hours}時間分の作業記録の扱いを選択してください。
935 text_destroy_time_entries: 記録された作業時間を含めて削除
936 text_destroy_time_entries: 記録された作業時間を含めて削除
936 text_assign_time_entries_to_project: 記録された作業時間をプロジェクト自体に割り当て
937 text_assign_time_entries_to_project: 記録された作業時間をプロジェクト自体に割り当て
937 text_reassign_time_entries: '記録された作業時間をこのチケットに再割り当て:'
938 text_reassign_time_entries: '記録された作業時間をこのチケットに再割り当て:'
938 text_user_wrote: "%{value} は書きました:"
939 text_user_wrote: "%{value} は書きました:"
939 text_enumeration_destroy_question: "%{count}個のオブジェクトがこの値に割り当てられています。"
940 text_enumeration_destroy_question: "%{count}個のオブジェクトがこの値に割り当てられています。"
940 text_enumeration_category_reassign_to: '次の値に割り当て直す:'
941 text_enumeration_category_reassign_to: '次の値に割り当て直す:'
941 text_email_delivery_not_configured: "メールを送信するために必要な設定が行われていないため、メール通知は利用できません。\nconfig/configuration.ymlでSMTPサーバの設定を行い、アプリケーションを再起動してください。"
942 text_email_delivery_not_configured: "メールを送信するために必要な設定が行われていないため、メール通知は利用できません。\nconfig/configuration.ymlでSMTPサーバの設定を行い、アプリケーションを再起動してください。"
942 text_repository_usernames_mapping: "リポジトリのログから検出されたユーザー名をどのRedmineユーザーに関連づけるのか選択してください。\nログ上のユーザー名またはメールアドレスがRedmineのユーザーと一致する場合は自動的に関連づけられます。"
943 text_repository_usernames_mapping: "リポジトリのログから検出されたユーザー名をどのRedmineユーザーに関連づけるのか選択してください。\nログ上のユーザー名またはメールアドレスがRedmineのユーザーと一致する場合は自動的に関連づけられます。"
943 text_diff_truncated: '... 差分の行数が表示可能な上限を超えました。超過分は表示しません。'
944 text_diff_truncated: '... 差分の行数が表示可能な上限を超えました。超過分は表示しません。'
944 text_custom_field_possible_values_info: '選択肢の値は1行に1個ずつ記述してください。'
945 text_custom_field_possible_values_info: '選択肢の値は1行に1個ずつ記述してください。'
945 text_wiki_page_destroy_question: "この親ページの配下に%{descendants}ページの子孫ページがあります。"
946 text_wiki_page_destroy_question: "この親ページの配下に%{descendants}ページの子孫ページがあります。"
946 text_wiki_page_nullify_children: "子ページをメインページ配下に移動する"
947 text_wiki_page_nullify_children: "子ページをメインページ配下に移動する"
947 text_wiki_page_destroy_children: "配下の子孫ページも削除する"
948 text_wiki_page_destroy_children: "配下の子孫ページも削除する"
948 text_wiki_page_reassign_children: "子ページを次の親ページの配下に移動する"
949 text_wiki_page_reassign_children: "子ページを次の親ページの配下に移動する"
949 text_own_membership_delete_confirmation: "一部またはすべての権限を自分自身から剥奪しようとしているため、このプロジェクトを編集できなくなる可能性があります。\n本当に続けますか?"
950 text_own_membership_delete_confirmation: "一部またはすべての権限を自分自身から剥奪しようとしているため、このプロジェクトを編集できなくなる可能性があります。\n本当に続けますか?"
950 text_zoom_in: 拡大
951 text_zoom_in: 拡大
951 text_zoom_out: 縮小
952 text_zoom_out: 縮小
952 text_warn_on_leaving_unsaved: このページから移動すると、保存されていないデータが失われます。
953 text_warn_on_leaving_unsaved: このページから移動すると、保存されていないデータが失われます。
953 text_scm_path_encoding_note: "デフォルト: UTF-8"
954 text_scm_path_encoding_note: "デフォルト: UTF-8"
954 text_mercurial_repository_note: "ローカルリポジトリ (例: /hgrepo, c:\\hgrepo)"
955 text_mercurial_repository_note: "ローカルリポジトリ (例: /hgrepo, c:\\hgrepo)"
955 text_git_repository_note: "Bare、かつ、ローカルリポジトリ (例: /gitrepo, c:\\gitrepo)"
956 text_git_repository_note: "Bare、かつ、ローカルリポジトリ (例: /gitrepo, c:\\gitrepo)"
956 text_scm_command: コマンド
957 text_scm_command: コマンド
957 text_scm_command_version: バージョン
958 text_scm_command_version: バージョン
958 text_scm_config: バージョン管理システムのコマンドをconfig/configuration.ymlで設定できます。設定後、Redmineを再起動してください。
959 text_scm_config: バージョン管理システムのコマンドをconfig/configuration.ymlで設定できます。設定後、Redmineを再起動してください。
959 text_scm_command_not_available: バージョン管理システムのコマンドが利用できません。管理画面にて設定を確認してください。
960 text_scm_command_not_available: バージョン管理システムのコマンドが利用できません。管理画面にて設定を確認してください。
960
961
961 default_role_manager: 管理者
962 default_role_manager: 管理者
962 default_role_developer: 開発者
963 default_role_developer: 開発者
963 default_role_reporter: 報告者
964 default_role_reporter: 報告者
964 default_tracker_bug: バグ
965 default_tracker_bug: バグ
965 default_tracker_feature: 機能
966 default_tracker_feature: 機能
966 default_tracker_support: サポート
967 default_tracker_support: サポート
967 default_issue_status_new: 新規
968 default_issue_status_new: 新規
968 default_issue_status_in_progress: 進行中
969 default_issue_status_in_progress: 進行中
969 default_issue_status_resolved: 解決
970 default_issue_status_resolved: 解決
970 default_issue_status_feedback: フィードバック
971 default_issue_status_feedback: フィードバック
971 default_issue_status_closed: 終了
972 default_issue_status_closed: 終了
972 default_issue_status_rejected: 却下
973 default_issue_status_rejected: 却下
973 default_doc_category_user: ユーザー文書
974 default_doc_category_user: ユーザー文書
974 default_doc_category_tech: 技術文書
975 default_doc_category_tech: 技術文書
975 default_priority_low: 低め
976 default_priority_low: 低め
976 default_priority_normal: 通常
977 default_priority_normal: 通常
977 default_priority_high: 高め
978 default_priority_high: 高め
978 default_priority_urgent: 急いで
979 default_priority_urgent: 急いで
979 default_priority_immediate: 今すぐ
980 default_priority_immediate: 今すぐ
980 default_activity_design: 設計作業
981 default_activity_design: 設計作業
981 default_activity_development: 開発作業
982 default_activity_development: 開発作業
982
983
983 enumeration_issue_priorities: チケットの優先度
984 enumeration_issue_priorities: チケットの優先度
984 enumeration_doc_categories: 文書カテゴリ
985 enumeration_doc_categories: 文書カテゴリ
985 enumeration_activities: 作業分類 (時間トラッキング)
986 enumeration_activities: 作業分類 (時間トラッキング)
986 enumeration_system_activity: システム作業分類
987 enumeration_system_activity: システム作業分類
987 label_additional_workflow_transitions_for_assignee: チケット担当者に追加で許可する遷移
988 label_additional_workflow_transitions_for_assignee: チケット担当者に追加で許可する遷移
988 label_additional_workflow_transitions_for_author: チケット作成者に追加で許可する遷移
989 label_additional_workflow_transitions_for_author: チケット作成者に追加で許可する遷移
989 label_bulk_edit_selected_time_entries: 作業時間の一括編集
990 label_bulk_edit_selected_time_entries: 作業時間の一括編集
990 text_time_entries_destroy_confirmation: 本当に選択した作業時間を削除しますか?
991 text_time_entries_destroy_confirmation: 本当に選択した作業時間を削除しますか?
991
992
992 label_role_anonymous: 匿名ユーザー
993 label_role_anonymous: 匿名ユーザー
993 label_role_non_member: 非メンバー
994 label_role_non_member: 非メンバー
994
995
995 label_issue_note_added: 注記が追加されました
996 label_issue_note_added: 注記が追加されました
996 label_issue_status_updated: ステータスが更新されました
997 label_issue_status_updated: ステータスが更新されました
997 label_issue_priority_updated: 優先度が更新されました
998 label_issue_priority_updated: 優先度が更新されました
998 label_issues_visibility_own: 作成者か担当者であるチケット
999 label_issues_visibility_own: 作成者か担当者であるチケット
999 field_issues_visibility: 表示できるチケット
1000 field_issues_visibility: 表示できるチケット
1000 label_issues_visibility_all: すべてのチケット
1001 label_issues_visibility_all: すべてのチケット
1001 permission_set_own_issues_private: 自分のチケットをプライベートに設定
1002 permission_set_own_issues_private: 自分のチケットをプライベートに設定
1002 field_is_private: プライベート
1003 field_is_private: プライベート
1003 permission_set_issues_private: チケットをプライベートに設定
1004 permission_set_issues_private: チケットをプライベートに設定
1004 label_issues_visibility_public: プライベートチケット以外
1005 label_issues_visibility_public: プライベートチケット以外
1005 text_issues_destroy_descendants_confirmation: "%{count}個の子チケットも削除されます。"
1006 text_issues_destroy_descendants_confirmation: "%{count}個の子チケットも削除されます。"
1006 notice_issue_successful_create: チケット %{id} が作成されました。
1007 notice_issue_successful_create: チケット %{id} が作成されました。
1007 label_between: 次の範囲内
1008 label_between: 次の範囲内
1008 setting_issue_group_assignment: グループへのチケット割り当てを許可
1009 setting_issue_group_assignment: グループへのチケット割り当てを許可
1009 description_query_sort_criteria_direction: 順序
1010 description_query_sort_criteria_direction: 順序
1010 description_project_scope: 検索範囲
1011 description_project_scope: 検索範囲
1011 description_filter: Filter
1012 description_filter: Filter
1012 description_user_mail_notification: メール通知の設定
1013 description_user_mail_notification: メール通知の設定
1013 description_date_from: 開始日
1014 description_date_from: 開始日
1014 description_message_content: 内容
1015 description_message_content: 内容
1015 description_available_columns: 利用できる項目
1016 description_available_columns: 利用できる項目
1016 description_date_range_interval: 日付で指定
1017 description_date_range_interval: 日付で指定
1017 description_issue_category_reassign: 新しいカテゴリを選択してください
1018 description_issue_category_reassign: 新しいカテゴリを選択してください
1018 description_search: 検索キーワード
1019 description_search: 検索キーワード
1019 description_notes: 注記
1020 description_notes: 注記
1020 description_date_range_list: 一覧から選択
1021 description_date_range_list: 一覧から選択
1021 description_choose_project: プロジェクト
1022 description_choose_project: プロジェクト
1022 description_date_to: 終了日
1023 description_date_to: 終了日
1023 description_query_sort_criteria_attribute: 項目
1024 description_query_sort_criteria_attribute: 項目
1024 description_wiki_subpages_reassign: 新しい親ページを選択してください
1025 description_wiki_subpages_reassign: 新しい親ページを選択してください
1025 description_selected_columns: 選択された項目
1026 description_selected_columns: 選択された項目
1026 error_scm_annotate_big_text_file: テキストファイルサイズの上限を超えているためアノテートできません。
1027 error_scm_annotate_big_text_file: テキストファイルサイズの上限を超えているためアノテートできません。
1027 setting_default_issue_start_date_to_creation_date: 現在の日付を新しいチケットの開始日とする
1028 setting_default_issue_start_date_to_creation_date: 現在の日付を新しいチケットの開始日とする
1028 button_edit_section: このセクションを編集
1029 button_edit_section: このセクションを編集
1029 description_all_columns: すべての項目
1030 description_all_columns: すべての項目
1030 button_export: エクスポート
1031 button_export: エクスポート
1031 label_export_options: "%{export_format} エクスポート設定"
1032 label_export_options: "%{export_format} エクスポート設定"
1032 error_attachment_too_big: このファイルはアップロードできません。添付ファイルサイズの上限(%{max_size})を超えています。
1033 error_attachment_too_big: このファイルはアップロードできません。添付ファイルサイズの上限(%{max_size})を超えています。
1033 notice_failed_to_save_time_entries: "全%{total}件中%{count}件の作業時間が保存できませんでした: %{ids}."
1034 notice_failed_to_save_time_entries: "全%{total}件中%{count}件の作業時間が保存できませんでした: %{ids}."
1034 label_x_issues:
1035 label_x_issues:
1035 zero: 0 チケット
1036 zero: 0 チケット
1036 one: 1 チケット
1037 one: 1 チケット
1037 other: "%{count} チケット"
1038 other: "%{count} チケット"
1038 label_repository_new: 新しいリポジトリ
1039 label_repository_new: 新しいリポジトリ
1039 field_repository_is_default: メインリポジトリ
1040 field_repository_is_default: メインリポジトリ
1040 label_copy_attachments: 添付ファイルをコピー
1041 label_copy_attachments: 添付ファイルをコピー
1041 label_item_position: "%{position}/%{count}"
1042 label_item_position: "%{position}/%{count}"
1042 label_completed_versions: 完了したバージョン
1043 label_completed_versions: 完了したバージョン
1043 text_project_identifier_info: アルファベット小文字(a-z)・数字・ハイフン・アンダースコアが使えます。最初の文字はアルファベットの小文字にしてください。<br />識別子は後で変更することはできません。
1044 text_project_identifier_info: アルファベット小文字(a-z)・数字・ハイフン・アンダースコアが使えます。最初の文字はアルファベットの小文字にしてください。<br />識別子は後で変更することはできません。
1044 field_multiple: 複数選択可
1045 field_multiple: 複数選択可
1045 setting_commit_cross_project_ref: 異なるプロジェクトのチケットの参照/修正を許可
1046 setting_commit_cross_project_ref: 異なるプロジェクトのチケットの参照/修正を許可
1046 text_issue_conflict_resolution_add_notes: 自分の編集内容を破棄し注記のみ追加
1047 text_issue_conflict_resolution_add_notes: 自分の編集内容を破棄し注記のみ追加
1047 text_issue_conflict_resolution_overwrite: 自分の編集内容の保存を強行 (他のユーザーの更新内容は注記を除き上書きされます)
1048 text_issue_conflict_resolution_overwrite: 自分の編集内容の保存を強行 (他のユーザーの更新内容は注記を除き上書きされます)
1048 notice_issue_update_conflict: このチケットを編集中に他のユーザーが更新しました。
1049 notice_issue_update_conflict: このチケットを編集中に他のユーザーが更新しました。
1049 text_issue_conflict_resolution_cancel: 自分の編集内容を破棄し %{link} を再表示
1050 text_issue_conflict_resolution_cancel: 自分の編集内容を破棄し %{link} を再表示
1050 permission_manage_related_issues: 関連するチケットの管理
1051 permission_manage_related_issues: 関連するチケットの管理
1051 field_auth_source_ldap_filter: LDAPフィルタ
1052 field_auth_source_ldap_filter: LDAPフィルタ
1052 label_search_for_watchers: ウォッチャーを検索して追加
1053 label_search_for_watchers: ウォッチャーを検索して追加
1053 notice_account_deleted: アカウントが削除されました。
1054 notice_account_deleted: アカウントが削除されました。
1054 setting_unsubscribe: ユーザーによるアカウント削除を許可
1055 setting_unsubscribe: ユーザーによるアカウント削除を許可
1055 button_delete_my_account: 自分のアカウントを削除
1056 button_delete_my_account: 自分のアカウントを削除
1056 text_account_destroy_confirmation: |-
1057 text_account_destroy_confirmation: |-
1057 本当にアカウントを削除しますか?
1058 本当にアカウントを削除しますか?
1058 アカウントは恒久的に削除されます。削除後に再度アカウントを有効にする手段はありません。
1059 アカウントは恒久的に削除されます。削除後に再度アカウントを有効にする手段はありません。
1059 error_session_expired: セッションが失効しました。ログインし直してください。
1060 error_session_expired: セッションが失効しました。ログインし直してください。
1060 text_session_expiration_settings: "警告: この設定を変更すると現在有効なセッションが失効する可能性があります。"
1061 text_session_expiration_settings: "警告: この設定を変更すると現在有効なセッションが失効する可能性があります。"
1061 setting_session_lifetime: 有効期間の最大値
1062 setting_session_lifetime: 有効期間の最大値
1062 setting_session_timeout: 無操作タイムアウト
1063 setting_session_timeout: 無操作タイムアウト
1063 label_session_expiration: セッション有効期間
1064 label_session_expiration: セッション有効期間
1064 permission_close_project: プロジェクトの終了/再開
1065 permission_close_project: プロジェクトの終了/再開
1065 label_show_closed_projects: 終了したプロジェクトを表示
1066 label_show_closed_projects: 終了したプロジェクトを表示
1066 button_close: 終了
1067 button_close: 終了
1067 button_reopen: 再開
1068 button_reopen: 再開
1068 project_status_active: 有効
1069 project_status_active: 有効
1069 project_status_closed: 終了
1070 project_status_closed: 終了
1070 project_status_archived: アーカイブ
1071 project_status_archived: アーカイブ
1071 text_project_closed: このプロジェクトは終了しているため読み取り専用です。
1072 text_project_closed: このプロジェクトは終了しているため読み取り専用です。
1072 notice_user_successful_create: ユーザー %{id} を作成しました。
1073 notice_user_successful_create: ユーザー %{id} を作成しました。
1073 field_core_fields: 標準フィールド
1074 field_core_fields: 標準フィールド
1074 field_timeout: タイムアウト(秒単位)
1075 field_timeout: タイムアウト(秒単位)
1075 setting_thumbnails_enabled: 添付ファイルのサムネイル画像を表示
1076 setting_thumbnails_enabled: 添付ファイルのサムネイル画像を表示
1076 setting_thumbnails_size: サムネイル画像の大きさ(ピクセル単位)
1077 setting_thumbnails_size: サムネイル画像の大きさ(ピクセル単位)
1077 label_status_transitions: ステータスの遷移
1078 label_status_transitions: ステータスの遷移
1078 label_fields_permissions: フィールドに対する権限
1079 label_fields_permissions: フィールドに対する権限
1079 label_readonly: 読み取り専用
1080 label_readonly: 読み取り専用
1080 label_required: 必須
1081 label_required: 必須
1081 text_repository_identifier_info: アルファベット小文字(a-z)・数字・ハイフン・アンダースコアが使えます。<br />識別子は後で変更することはできません。
1082 text_repository_identifier_info: アルファベット小文字(a-z)・数字・ハイフン・アンダースコアが使えます。<br />識別子は後で変更することはできません。
1082 field_board_parent: 親フォーラム
1083 field_board_parent: 親フォーラム
1083 label_attribute_of_project: プロジェクトの %{name}
1084 label_attribute_of_project: プロジェクトの %{name}
1084 label_attribute_of_author: 作成者の %{name}
1085 label_attribute_of_author: 作成者の %{name}
1085 label_attribute_of_assigned_to: 担当者の %{name}
1086 label_attribute_of_assigned_to: 担当者の %{name}
1086 label_attribute_of_fixed_version: 対象バージョンの %{name}
1087 label_attribute_of_fixed_version: 対象バージョンの %{name}
1087 label_copy_subtasks: 子チケットをコピー
1088 label_copy_subtasks: 子チケットをコピー
1088 label_copied_to: コピー先
1089 label_copied_to: コピー先
1089 label_copied_from: コピー元
1090 label_copied_from: コピー元
1090 label_any_issues_in_project: 次のプロジェクト内のチケット
1091 label_any_issues_in_project: 次のプロジェクト内のチケット
1091 label_any_issues_not_in_project: 次のプロジェクト外のチケット
1092 label_any_issues_not_in_project: 次のプロジェクト外のチケット
1092 field_private_notes: プライベート注記
1093 field_private_notes: プライベート注記
1093 permission_view_private_notes: プライベート注記の閲覧
1094 permission_view_private_notes: プライベート注記の閲覧
1094 permission_set_notes_private: 注記をプライベートに設定
1095 permission_set_notes_private: 注記をプライベートに設定
1095 label_no_issues_in_project: 次のプロジェクト内のチケットを除く
1096 label_no_issues_in_project: 次のプロジェクト内のチケットを除く
1096 label_any: すべて
1097 label_any: すべて
1097 label_last_n_weeks: 直近%{count}週間
1098 label_last_n_weeks: 直近%{count}週間
1098 setting_cross_project_subtasks: 異なるプロジェクトのチケット間の親子関係を許可
1099 setting_cross_project_subtasks: 異なるプロジェクトのチケット間の親子関係を許可
1099 label_cross_project_descendants: サブプロジェクト単位
1100 label_cross_project_descendants: サブプロジェクト単位
1100 label_cross_project_tree: プロジェクトツリー単位
1101 label_cross_project_tree: プロジェクトツリー単位
1101 label_cross_project_hierarchy: プロジェクト階層単位
1102 label_cross_project_hierarchy: プロジェクト階層単位
1102 label_cross_project_system: すべてのプロジェクト
1103 label_cross_project_system: すべてのプロジェクト
1103 button_hide: 隠す
1104 button_hide: 隠す
1104 setting_non_working_week_days: 休業日
1105 setting_non_working_week_days: 休業日
1105 label_in_the_next_days: 今後○日
1106 label_in_the_next_days: 今後○日
1106 label_in_the_past_days: 過去○日
1107 label_in_the_past_days: 過去○日
1107 label_attribute_of_user: ユーザーの %{name}
1108 label_attribute_of_user: ユーザーの %{name}
1108 text_turning_multiple_off: If you disable multiple values, duplicate values will be
1109 text_turning_multiple_off: If you disable multiple values, duplicate values will be
1109 removed in order to preserve only one value per item.
1110 removed in order to preserve only one value per item.
1110 label_attribute_of_issue: Issue's %{name}
1111 label_attribute_of_issue: Issue's %{name}
1111 permission_add_documents: Add documents
1112 permission_add_documents: Add documents
1112 permission_edit_documents: Edit documents
1113 permission_edit_documents: Edit documents
1113 permission_delete_documents: Delete documents
1114 permission_delete_documents: Delete documents
@@ -1,918 +1,943
1 # Redmine - project management software
1 # Redmine - project management software
2 # Copyright (C) 2006-2013 Jean-Philippe Lang
2 # Copyright (C) 2006-2013 Jean-Philippe Lang
3 #
3 #
4 # This program is free software; you can redistribute it and/or
4 # This program is free software; you can redistribute it and/or
5 # modify it under the terms of the GNU General Public License
5 # modify it under the terms of the GNU General Public License
6 # as published by the Free Software Foundation; either version 2
6 # as published by the Free Software Foundation; either version 2
7 # of the License, or (at your option) any later version.
7 # of the License, or (at your option) any later version.
8 #
8 #
9 # This program is distributed in the hope that it will be useful,
9 # This program is distributed in the hope that it will be useful,
10 # but WITHOUT ANY WARRANTY; without even the implied warranty of
10 # but WITHOUT ANY WARRANTY; without even the implied warranty of
11 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 # GNU General Public License for more details.
12 # GNU General Public License for more details.
13 #
13 #
14 # You should have received a copy of the GNU General Public License
14 # You should have received a copy of the GNU General Public License
15 # along with this program; if not, write to the Free Software
15 # along with this program; if not, write to the Free Software
16 # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
16 # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
17
17
18 module Redmine
18 module Redmine
19 module Helpers
19 module Helpers
20 # Simple class to handle gantt chart data
20 # Simple class to handle gantt chart data
21 class Gantt
21 class Gantt
22 include ERB::Util
22 include ERB::Util
23 include Redmine::I18n
23 include Redmine::I18n
24 include Redmine::Utils::DateCalculation
24 include Redmine::Utils::DateCalculation
25
25
26 # Relation types that are rendered
26 # Relation types that are rendered
27 DRAW_TYPES = {
27 DRAW_TYPES = {
28 IssueRelation::TYPE_BLOCKS => { :landscape_margin => 16, :color => '#F34F4F' },
28 IssueRelation::TYPE_BLOCKS => { :landscape_margin => 16, :color => '#F34F4F' },
29 IssueRelation::TYPE_PRECEDES => { :landscape_margin => 20, :color => '#628FEA' }
29 IssueRelation::TYPE_PRECEDES => { :landscape_margin => 20, :color => '#628FEA' }
30 }.freeze
30 }.freeze
31
31
32 # :nodoc:
32 # :nodoc:
33 # Some utility methods for the PDF export
33 # Some utility methods for the PDF export
34 class PDF
34 class PDF
35 MaxCharactorsForSubject = 45
35 MaxCharactorsForSubject = 45
36 TotalWidth = 280
36 TotalWidth = 280
37 LeftPaneWidth = 100
37 LeftPaneWidth = 100
38
38
39 def self.right_pane_width
39 def self.right_pane_width
40 TotalWidth - LeftPaneWidth
40 TotalWidth - LeftPaneWidth
41 end
41 end
42 end
42 end
43
43
44 attr_reader :year_from, :month_from, :date_from, :date_to, :zoom, :months, :truncated, :max_rows
44 attr_reader :year_from, :month_from, :date_from, :date_to, :zoom, :months, :truncated, :max_rows
45 attr_accessor :query
45 attr_accessor :query
46 attr_accessor :project
46 attr_accessor :project
47 attr_accessor :view
47 attr_accessor :view
48
48
49 def initialize(options={})
49 def initialize(options={})
50 options = options.dup
50 options = options.dup
51 if options[:year] && options[:year].to_i >0
51 if options[:year] && options[:year].to_i >0
52 @year_from = options[:year].to_i
52 @year_from = options[:year].to_i
53 if options[:month] && options[:month].to_i >=1 && options[:month].to_i <= 12
53 if options[:month] && options[:month].to_i >=1 && options[:month].to_i <= 12
54 @month_from = options[:month].to_i
54 @month_from = options[:month].to_i
55 else
55 else
56 @month_from = 1
56 @month_from = 1
57 end
57 end
58 else
58 else
59 @month_from ||= Date.today.month
59 @month_from ||= Date.today.month
60 @year_from ||= Date.today.year
60 @year_from ||= Date.today.year
61 end
61 end
62 zoom = (options[:zoom] || User.current.pref[:gantt_zoom]).to_i
62 zoom = (options[:zoom] || User.current.pref[:gantt_zoom]).to_i
63 @zoom = (zoom > 0 && zoom < 5) ? zoom : 2
63 @zoom = (zoom > 0 && zoom < 5) ? zoom : 2
64 months = (options[:months] || User.current.pref[:gantt_months]).to_i
64 months = (options[:months] || User.current.pref[:gantt_months]).to_i
65 @months = (months > 0 && months < 25) ? months : 6
65 @months = (months > 0 && months < 25) ? months : 6
66 # Save gantt parameters as user preference (zoom and months count)
66 # Save gantt parameters as user preference (zoom and months count)
67 if (User.current.logged? && (@zoom != User.current.pref[:gantt_zoom] ||
67 if (User.current.logged? && (@zoom != User.current.pref[:gantt_zoom] ||
68 @months != User.current.pref[:gantt_months]))
68 @months != User.current.pref[:gantt_months]))
69 User.current.pref[:gantt_zoom], User.current.pref[:gantt_months] = @zoom, @months
69 User.current.pref[:gantt_zoom], User.current.pref[:gantt_months] = @zoom, @months
70 User.current.preference.save
70 User.current.preference.save
71 end
71 end
72 @date_from = Date.civil(@year_from, @month_from, 1)
72 @date_from = Date.civil(@year_from, @month_from, 1)
73 @date_to = (@date_from >> @months) - 1
73 @date_to = (@date_from >> @months) - 1
74 @subjects = ''
74 @subjects = ''
75 @lines = ''
75 @lines = ''
76 @number_of_rows = nil
76 @number_of_rows = nil
77 @issue_ancestors = []
77 @issue_ancestors = []
78 @truncated = false
78 @truncated = false
79 if options.has_key?(:max_rows)
79 if options.has_key?(:max_rows)
80 @max_rows = options[:max_rows]
80 @max_rows = options[:max_rows]
81 else
81 else
82 @max_rows = Setting.gantt_items_limit.blank? ? nil : Setting.gantt_items_limit.to_i
82 @max_rows = Setting.gantt_items_limit.blank? ? nil : Setting.gantt_items_limit.to_i
83 end
83 end
84 end
84 end
85
85
86 def common_params
86 def common_params
87 { :controller => 'gantts', :action => 'show', :project_id => @project }
87 { :controller => 'gantts', :action => 'show', :project_id => @project }
88 end
88 end
89
89
90 def params
90 def params
91 common_params.merge({:zoom => zoom, :year => year_from,
91 common_params.merge({:zoom => zoom, :year => year_from,
92 :month => month_from, :months => months})
92 :month => month_from, :months => months})
93 end
93 end
94
94
95 def params_previous
95 def params_previous
96 common_params.merge({:year => (date_from << months).year,
96 common_params.merge({:year => (date_from << months).year,
97 :month => (date_from << months).month,
97 :month => (date_from << months).month,
98 :zoom => zoom, :months => months})
98 :zoom => zoom, :months => months})
99 end
99 end
100
100
101 def params_next
101 def params_next
102 common_params.merge({:year => (date_from >> months).year,
102 common_params.merge({:year => (date_from >> months).year,
103 :month => (date_from >> months).month,
103 :month => (date_from >> months).month,
104 :zoom => zoom, :months => months})
104 :zoom => zoom, :months => months})
105 end
105 end
106
106
107 # Returns the number of rows that will be rendered on the Gantt chart
107 # Returns the number of rows that will be rendered on the Gantt chart
108 def number_of_rows
108 def number_of_rows
109 return @number_of_rows if @number_of_rows
109 return @number_of_rows if @number_of_rows
110 rows = projects.inject(0) {|total, p| total += number_of_rows_on_project(p)}
110 rows = projects.inject(0) {|total, p| total += number_of_rows_on_project(p)}
111 rows > @max_rows ? @max_rows : rows
111 rows > @max_rows ? @max_rows : rows
112 end
112 end
113
113
114 # Returns the number of rows that will be used to list a project on
114 # Returns the number of rows that will be used to list a project on
115 # the Gantt chart. This will recurse for each subproject.
115 # the Gantt chart. This will recurse for each subproject.
116 def number_of_rows_on_project(project)
116 def number_of_rows_on_project(project)
117 return 0 unless projects.include?(project)
117 return 0 unless projects.include?(project)
118 count = 1
118 count = 1
119 count += project_issues(project).size
119 count += project_issues(project).size
120 count += project_versions(project).size
120 count += project_versions(project).size
121 count
121 count
122 end
122 end
123
123
124 # Renders the subjects of the Gantt chart, the left side.
124 # Renders the subjects of the Gantt chart, the left side.
125 def subjects(options={})
125 def subjects(options={})
126 render(options.merge(:only => :subjects)) unless @subjects_rendered
126 render(options.merge(:only => :subjects)) unless @subjects_rendered
127 @subjects
127 @subjects
128 end
128 end
129
129
130 # Renders the lines of the Gantt chart, the right side
130 # Renders the lines of the Gantt chart, the right side
131 def lines(options={})
131 def lines(options={})
132 render(options.merge(:only => :lines)) unless @lines_rendered
132 render(options.merge(:only => :lines)) unless @lines_rendered
133 @lines
133 @lines
134 end
134 end
135
135
136 # Returns issues that will be rendered
136 # Returns issues that will be rendered
137 def issues
137 def issues
138 @issues ||= @query.issues(
138 @issues ||= @query.issues(
139 :include => [:assigned_to, :tracker, :priority, :category, :fixed_version],
139 :include => [:assigned_to, :tracker, :priority, :category, :fixed_version],
140 :order => "#{Project.table_name}.lft ASC, #{Issue.table_name}.id ASC",
140 :order => "#{Project.table_name}.lft ASC, #{Issue.table_name}.id ASC",
141 :limit => @max_rows
141 :limit => @max_rows
142 )
142 )
143 end
143 end
144
144
145 # Returns a hash of the relations between the issues that are present on the gantt
145 # Returns a hash of the relations between the issues that are present on the gantt
146 # and that should be displayed, grouped by issue ids.
146 # and that should be displayed, grouped by issue ids.
147 def relations
147 def relations
148 return @relations if @relations
148 return @relations if @relations
149 if issues.any?
149 if issues.any?
150 issue_ids = issues.map(&:id)
150 issue_ids = issues.map(&:id)
151 @relations = IssueRelation.
151 @relations = IssueRelation.
152 where(:issue_from_id => issue_ids, :issue_to_id => issue_ids, :relation_type => DRAW_TYPES.keys).
152 where(:issue_from_id => issue_ids, :issue_to_id => issue_ids, :relation_type => DRAW_TYPES.keys).
153 group_by(&:issue_from_id)
153 group_by(&:issue_from_id)
154 else
154 else
155 @relations = {}
155 @relations = {}
156 end
156 end
157 end
157 end
158
158
159 # Return all the project nodes that will be displayed
159 # Return all the project nodes that will be displayed
160 def projects
160 def projects
161 return @projects if @projects
161 return @projects if @projects
162 ids = issues.collect(&:project).uniq.collect(&:id)
162 ids = issues.collect(&:project).uniq.collect(&:id)
163 if ids.any?
163 if ids.any?
164 # All issues projects and their visible ancestors
164 # All issues projects and their visible ancestors
165 @projects = Project.visible.all(
165 @projects = Project.visible.all(
166 :joins => "LEFT JOIN #{Project.table_name} child ON #{Project.table_name}.lft <= child.lft AND #{Project.table_name}.rgt >= child.rgt",
166 :joins => "LEFT JOIN #{Project.table_name} child ON #{Project.table_name}.lft <= child.lft AND #{Project.table_name}.rgt >= child.rgt",
167 :conditions => ["child.id IN (?)", ids],
167 :conditions => ["child.id IN (?)", ids],
168 :order => "#{Project.table_name}.lft ASC"
168 :order => "#{Project.table_name}.lft ASC"
169 ).uniq
169 ).uniq
170 else
170 else
171 @projects = []
171 @projects = []
172 end
172 end
173 end
173 end
174
174
175 # Returns the issues that belong to +project+
175 # Returns the issues that belong to +project+
176 def project_issues(project)
176 def project_issues(project)
177 @issues_by_project ||= issues.group_by(&:project)
177 @issues_by_project ||= issues.group_by(&:project)
178 @issues_by_project[project] || []
178 @issues_by_project[project] || []
179 end
179 end
180
180
181 # Returns the distinct versions of the issues that belong to +project+
181 # Returns the distinct versions of the issues that belong to +project+
182 def project_versions(project)
182 def project_versions(project)
183 project_issues(project).collect(&:fixed_version).compact.uniq
183 project_issues(project).collect(&:fixed_version).compact.uniq
184 end
184 end
185
185
186 # Returns the issues that belong to +project+ and are assigned to +version+
186 # Returns the issues that belong to +project+ and are assigned to +version+
187 def version_issues(project, version)
187 def version_issues(project, version)
188 project_issues(project).select {|issue| issue.fixed_version == version}
188 project_issues(project).select {|issue| issue.fixed_version == version}
189 end
189 end
190
190
191 def render(options={})
191 def render(options={})
192 options = {:top => 0, :top_increment => 20,
192 options = {:top => 0, :top_increment => 20,
193 :indent_increment => 20, :render => :subject,
193 :indent_increment => 20, :render => :subject,
194 :format => :html}.merge(options)
194 :format => :html}.merge(options)
195 indent = options[:indent] || 4
195 indent = options[:indent] || 4
196 @subjects = '' unless options[:only] == :lines
196 @subjects = '' unless options[:only] == :lines
197 @lines = '' unless options[:only] == :subjects
197 @lines = '' unless options[:only] == :subjects
198 @number_of_rows = 0
198 @number_of_rows = 0
199 Project.project_tree(projects) do |project, level|
199 Project.project_tree(projects) do |project, level|
200 options[:indent] = indent + level * options[:indent_increment]
200 options[:indent] = indent + level * options[:indent_increment]
201 render_project(project, options)
201 render_project(project, options)
202 break if abort?
202 break if abort?
203 end
203 end
204 @subjects_rendered = true unless options[:only] == :lines
204 @subjects_rendered = true unless options[:only] == :lines
205 @lines_rendered = true unless options[:only] == :subjects
205 @lines_rendered = true unless options[:only] == :subjects
206 render_end(options)
206 render_end(options)
207 end
207 end
208
208
209 def render_project(project, options={})
209 def render_project(project, options={})
210 subject_for_project(project, options) unless options[:only] == :lines
210 subject_for_project(project, options) unless options[:only] == :lines
211 line_for_project(project, options) unless options[:only] == :subjects
211 line_for_project(project, options) unless options[:only] == :subjects
212 options[:top] += options[:top_increment]
212 options[:top] += options[:top_increment]
213 options[:indent] += options[:indent_increment]
213 options[:indent] += options[:indent_increment]
214 @number_of_rows += 1
214 @number_of_rows += 1
215 return if abort?
215 return if abort?
216 issues = project_issues(project).select {|i| i.fixed_version.nil?}
216 issues = project_issues(project).select {|i| i.fixed_version.nil?}
217 sort_issues!(issues)
217 sort_issues!(issues)
218 if issues
218 if issues
219 render_issues(issues, options)
219 render_issues(issues, options)
220 return if abort?
220 return if abort?
221 end
221 end
222 versions = project_versions(project)
222 versions = project_versions(project)
223 versions.each do |version|
223 versions.each do |version|
224 render_version(project, version, options)
224 render_version(project, version, options)
225 end
225 end
226 # Remove indent to hit the next sibling
226 # Remove indent to hit the next sibling
227 options[:indent] -= options[:indent_increment]
227 options[:indent] -= options[:indent_increment]
228 end
228 end
229
229
230 def render_issues(issues, options={})
230 def render_issues(issues, options={})
231 @issue_ancestors = []
231 @issue_ancestors = []
232 issues.each do |i|
232 issues.each do |i|
233 subject_for_issue(i, options) unless options[:only] == :lines
233 subject_for_issue(i, options) unless options[:only] == :lines
234 line_for_issue(i, options) unless options[:only] == :subjects
234 line_for_issue(i, options) unless options[:only] == :subjects
235 options[:top] += options[:top_increment]
235 options[:top] += options[:top_increment]
236 @number_of_rows += 1
236 @number_of_rows += 1
237 break if abort?
237 break if abort?
238 end
238 end
239 options[:indent] -= (options[:indent_increment] * @issue_ancestors.size)
239 options[:indent] -= (options[:indent_increment] * @issue_ancestors.size)
240 end
240 end
241
241
242 def render_version(project, version, options={})
242 def render_version(project, version, options={})
243 # Version header
243 # Version header
244 subject_for_version(version, options) unless options[:only] == :lines
244 subject_for_version(version, options) unless options[:only] == :lines
245 line_for_version(version, options) unless options[:only] == :subjects
245 line_for_version(version, options) unless options[:only] == :subjects
246 options[:top] += options[:top_increment]
246 options[:top] += options[:top_increment]
247 @number_of_rows += 1
247 @number_of_rows += 1
248 return if abort?
248 return if abort?
249 issues = version_issues(project, version)
249 issues = version_issues(project, version)
250 if issues
250 if issues
251 sort_issues!(issues)
251 sort_issues!(issues)
252 # Indent issues
252 # Indent issues
253 options[:indent] += options[:indent_increment]
253 options[:indent] += options[:indent_increment]
254 render_issues(issues, options)
254 render_issues(issues, options)
255 options[:indent] -= options[:indent_increment]
255 options[:indent] -= options[:indent_increment]
256 end
256 end
257 end
257 end
258
258
259 def render_end(options={})
259 def render_end(options={})
260 case options[:format]
260 case options[:format]
261 when :pdf
261 when :pdf
262 options[:pdf].Line(15, options[:top], PDF::TotalWidth, options[:top])
262 options[:pdf].Line(15, options[:top], PDF::TotalWidth, options[:top])
263 end
263 end
264 end
264 end
265
265
266 def subject_for_project(project, options)
266 def subject_for_project(project, options)
267 case options[:format]
267 case options[:format]
268 when :html
268 when :html
269 html_class = ""
269 html_class = ""
270 html_class << 'icon icon-projects '
270 html_class << 'icon icon-projects '
271 html_class << (project.overdue? ? 'project-overdue' : '')
271 html_class << (project.overdue? ? 'project-overdue' : '')
272 s = view.link_to_project(project).html_safe
272 s = view.link_to_project(project).html_safe
273 subject = view.content_tag(:span, s,
273 subject = view.content_tag(:span, s,
274 :class => html_class).html_safe
274 :class => html_class).html_safe
275 html_subject(options, subject, :css => "project-name")
275 html_subject(options, subject, :css => "project-name")
276 when :image
276 when :image
277 image_subject(options, project.name)
277 image_subject(options, project.name)
278 when :pdf
278 when :pdf
279 pdf_new_page?(options)
279 pdf_new_page?(options)
280 pdf_subject(options, project.name)
280 pdf_subject(options, project.name)
281 end
281 end
282 end
282 end
283
283
284 def line_for_project(project, options)
284 def line_for_project(project, options)
285 # Skip versions that don't have a start_date or due date
285 # Skip versions that don't have a start_date or due date
286 if project.is_a?(Project) && project.start_date && project.due_date
286 if project.is_a?(Project) && project.start_date && project.due_date
287 options[:zoom] ||= 1
287 options[:zoom] ||= 1
288 options[:g_width] ||= (self.date_to - self.date_from + 1) * options[:zoom]
288 options[:g_width] ||= (self.date_to - self.date_from + 1) * options[:zoom]
289 coords = coordinates(project.start_date, project.due_date, nil, options[:zoom])
289 coords = coordinates(project.start_date, project.due_date, nil, options[:zoom])
290 label = h(project)
290 label = h(project)
291 case options[:format]
291 case options[:format]
292 when :html
292 when :html
293 html_task(options, coords, :css => "project task", :label => label, :markers => true)
293 html_task(options, coords, :css => "project task", :label => label, :markers => true)
294 when :image
294 when :image
295 image_task(options, coords, :label => label, :markers => true, :height => 3)
295 image_task(options, coords, :label => label, :markers => true, :height => 3)
296 when :pdf
296 when :pdf
297 pdf_task(options, coords, :label => label, :markers => true, :height => 0.8)
297 pdf_task(options, coords, :label => label, :markers => true, :height => 0.8)
298 end
298 end
299 else
299 else
300 ''
300 ''
301 end
301 end
302 end
302 end
303
303
304 def subject_for_version(version, options)
304 def subject_for_version(version, options)
305 case options[:format]
305 case options[:format]
306 when :html
306 when :html
307 html_class = ""
307 html_class = ""
308 html_class << 'icon icon-package '
308 html_class << 'icon icon-package '
309 html_class << (version.behind_schedule? ? 'version-behind-schedule' : '') << " "
309 html_class << (version.behind_schedule? ? 'version-behind-schedule' : '') << " "
310 html_class << (version.overdue? ? 'version-overdue' : '')
310 html_class << (version.overdue? ? 'version-overdue' : '')
311 html_class << ' version-closed' unless version.open?
312 if version.start_date && version.due_date && version.completed_pourcent
313 progress_date = calc_progress_date(version.start_date,
314 version.due_date, version.completed_pourcent)
315 html_class << ' behind-start-date' if progress_date < self.date_from
316 html_class << ' over-end-date' if progress_date > self.date_to
317 end
311 s = view.link_to_version(version).html_safe
318 s = view.link_to_version(version).html_safe
312 subject = view.content_tag(:span, s,
319 subject = view.content_tag(:span, s,
313 :class => html_class).html_safe
320 :class => html_class).html_safe
314 html_subject(options, subject, :css => "version-name")
321 html_subject(options, subject, :css => "version-name",
322 :id => "version-#{version.id}")
315 when :image
323 when :image
316 image_subject(options, version.to_s_with_project)
324 image_subject(options, version.to_s_with_project)
317 when :pdf
325 when :pdf
318 pdf_new_page?(options)
326 pdf_new_page?(options)
319 pdf_subject(options, version.to_s_with_project)
327 pdf_subject(options, version.to_s_with_project)
320 end
328 end
321 end
329 end
322
330
323 def line_for_version(version, options)
331 def line_for_version(version, options)
324 # Skip versions that don't have a start_date
332 # Skip versions that don't have a start_date
325 if version.is_a?(Version) && version.due_date && version.start_date
333 if version.is_a?(Version) && version.due_date && version.start_date
326 options[:zoom] ||= 1
334 options[:zoom] ||= 1
327 options[:g_width] ||= (self.date_to - self.date_from + 1) * options[:zoom]
335 options[:g_width] ||= (self.date_to - self.date_from + 1) * options[:zoom]
328 coords = coordinates(version.start_date,
336 coords = coordinates(version.start_date,
329 version.due_date, version.completed_percent,
337 version.due_date, version.completed_percent,
330 options[:zoom])
338 options[:zoom])
331 label = "#{h version} #{h version.completed_percent.to_i.to_s}%"
339 label = "#{h version} #{h version.completed_percent.to_i.to_s}%"
332 label = h("#{version.project} -") + label unless @project && @project == version.project
340 label = h("#{version.project} -") + label unless @project && @project == version.project
333 case options[:format]
341 case options[:format]
334 when :html
342 when :html
335 html_task(options, coords, :css => "version task", :label => label, :markers => true)
343 html_task(options, coords, :css => "version task",
344 :label => label, :markers => true, :version => version)
336 when :image
345 when :image
337 image_task(options, coords, :label => label, :markers => true, :height => 3)
346 image_task(options, coords, :label => label, :markers => true, :height => 3)
338 when :pdf
347 when :pdf
339 pdf_task(options, coords, :label => label, :markers => true, :height => 0.8)
348 pdf_task(options, coords, :label => label, :markers => true, :height => 0.8)
340 end
349 end
341 else
350 else
342 ''
351 ''
343 end
352 end
344 end
353 end
345
354
346 def subject_for_issue(issue, options)
355 def subject_for_issue(issue, options)
347 while @issue_ancestors.any? && !issue.is_descendant_of?(@issue_ancestors.last)
356 while @issue_ancestors.any? && !issue.is_descendant_of?(@issue_ancestors.last)
348 @issue_ancestors.pop
357 @issue_ancestors.pop
349 options[:indent] -= options[:indent_increment]
358 options[:indent] -= options[:indent_increment]
350 end
359 end
351 output = case options[:format]
360 output = case options[:format]
352 when :html
361 when :html
353 css_classes = ''
362 css_classes = ''
354 css_classes << ' issue-overdue' if issue.overdue?
363 css_classes << ' issue-overdue' if issue.overdue?
355 css_classes << ' issue-behind-schedule' if issue.behind_schedule?
364 css_classes << ' issue-behind-schedule' if issue.behind_schedule?
356 css_classes << ' icon icon-issue' unless Setting.gravatar_enabled? && issue.assigned_to
365 css_classes << ' icon icon-issue' unless Setting.gravatar_enabled? && issue.assigned_to
366 css_classes << ' issue-closed' if issue.closed?
367 if issue.start_date && issue.due_before && issue.done_ratio
368 progress_date = calc_progress_date(issue.start_date,
369 issue.due_before, issue.done_ratio)
370 css_classes << ' behind-start-date' if progress_date < self.date_from
371 css_classes << ' over-end-date' if progress_date > self.date_to
372 end
357 s = "".html_safe
373 s = "".html_safe
358 if issue.assigned_to.present?
374 if issue.assigned_to.present?
359 assigned_string = l(:field_assigned_to) + ": " + issue.assigned_to.name
375 assigned_string = l(:field_assigned_to) + ": " + issue.assigned_to.name
360 s << view.avatar(issue.assigned_to,
376 s << view.avatar(issue.assigned_to,
361 :class => 'gravatar icon-gravatar',
377 :class => 'gravatar icon-gravatar',
362 :size => 10,
378 :size => 10,
363 :title => assigned_string).to_s.html_safe
379 :title => assigned_string).to_s.html_safe
364 end
380 end
365 s << view.link_to_issue(issue).html_safe
381 s << view.link_to_issue(issue).html_safe
366 subject = view.content_tag(:span, s, :class => css_classes).html_safe
382 subject = view.content_tag(:span, s, :class => css_classes).html_safe
367 html_subject(options, subject, :css => "issue-subject",
383 html_subject(options, subject, :css => "issue-subject",
368 :title => issue.subject) + "\n"
384 :title => issue.subject, :id => "issue-#{issue.id}") + "\n"
369 when :image
385 when :image
370 image_subject(options, issue.subject)
386 image_subject(options, issue.subject)
371 when :pdf
387 when :pdf
372 pdf_new_page?(options)
388 pdf_new_page?(options)
373 pdf_subject(options, issue.subject)
389 pdf_subject(options, issue.subject)
374 end
390 end
375 unless issue.leaf?
391 unless issue.leaf?
376 @issue_ancestors << issue
392 @issue_ancestors << issue
377 options[:indent] += options[:indent_increment]
393 options[:indent] += options[:indent_increment]
378 end
394 end
379 output
395 output
380 end
396 end
381
397
382 def line_for_issue(issue, options)
398 def line_for_issue(issue, options)
383 # Skip issues that don't have a due_before (due_date or version's due_date)
399 # Skip issues that don't have a due_before (due_date or version's due_date)
384 if issue.is_a?(Issue) && issue.due_before
400 if issue.is_a?(Issue) && issue.due_before
385 coords = coordinates(issue.start_date, issue.due_before, issue.done_ratio, options[:zoom])
401 coords = coordinates(issue.start_date, issue.due_before, issue.done_ratio, options[:zoom])
386 label = "#{issue.status.name} #{issue.done_ratio}%"
402 label = "#{issue.status.name} #{issue.done_ratio}%"
387 case options[:format]
403 case options[:format]
388 when :html
404 when :html
389 html_task(options, coords,
405 html_task(options, coords,
390 :css => "task " + (issue.leaf? ? 'leaf' : 'parent'),
406 :css => "task " + (issue.leaf? ? 'leaf' : 'parent'),
391 :label => label, :issue => issue,
407 :label => label, :issue => issue,
392 :markers => !issue.leaf?)
408 :markers => !issue.leaf?)
393 when :image
409 when :image
394 image_task(options, coords, :label => label)
410 image_task(options, coords, :label => label)
395 when :pdf
411 when :pdf
396 pdf_task(options, coords, :label => label)
412 pdf_task(options, coords, :label => label)
397 end
413 end
398 else
414 else
399 ''
415 ''
400 end
416 end
401 end
417 end
402
418
403 # Generates a gantt image
419 # Generates a gantt image
404 # Only defined if RMagick is avalaible
420 # Only defined if RMagick is avalaible
405 def to_image(format='PNG')
421 def to_image(format='PNG')
406 date_to = (@date_from >> @months) - 1
422 date_to = (@date_from >> @months) - 1
407 show_weeks = @zoom > 1
423 show_weeks = @zoom > 1
408 show_days = @zoom > 2
424 show_days = @zoom > 2
409 subject_width = 400
425 subject_width = 400
410 header_height = 18
426 header_height = 18
411 # width of one day in pixels
427 # width of one day in pixels
412 zoom = @zoom * 2
428 zoom = @zoom * 2
413 g_width = (@date_to - @date_from + 1) * zoom
429 g_width = (@date_to - @date_from + 1) * zoom
414 g_height = 20 * number_of_rows + 30
430 g_height = 20 * number_of_rows + 30
415 headers_height = (show_weeks ? 2 * header_height : header_height)
431 headers_height = (show_weeks ? 2 * header_height : header_height)
416 height = g_height + headers_height
432 height = g_height + headers_height
417 imgl = Magick::ImageList.new
433 imgl = Magick::ImageList.new
418 imgl.new_image(subject_width + g_width + 1, height)
434 imgl.new_image(subject_width + g_width + 1, height)
419 gc = Magick::Draw.new
435 gc = Magick::Draw.new
420 gc.font = Redmine::Configuration['rmagick_font_path'] || ""
436 gc.font = Redmine::Configuration['rmagick_font_path'] || ""
421 # Subjects
437 # Subjects
422 gc.stroke('transparent')
438 gc.stroke('transparent')
423 subjects(:image => gc, :top => (headers_height + 20), :indent => 4, :format => :image)
439 subjects(:image => gc, :top => (headers_height + 20), :indent => 4, :format => :image)
424 # Months headers
440 # Months headers
425 month_f = @date_from
441 month_f = @date_from
426 left = subject_width
442 left = subject_width
427 @months.times do
443 @months.times do
428 width = ((month_f >> 1) - month_f) * zoom
444 width = ((month_f >> 1) - month_f) * zoom
429 gc.fill('white')
445 gc.fill('white')
430 gc.stroke('grey')
446 gc.stroke('grey')
431 gc.stroke_width(1)
447 gc.stroke_width(1)
432 gc.rectangle(left, 0, left + width, height)
448 gc.rectangle(left, 0, left + width, height)
433 gc.fill('black')
449 gc.fill('black')
434 gc.stroke('transparent')
450 gc.stroke('transparent')
435 gc.stroke_width(1)
451 gc.stroke_width(1)
436 gc.text(left.round + 8, 14, "#{month_f.year}-#{month_f.month}")
452 gc.text(left.round + 8, 14, "#{month_f.year}-#{month_f.month}")
437 left = left + width
453 left = left + width
438 month_f = month_f >> 1
454 month_f = month_f >> 1
439 end
455 end
440 # Weeks headers
456 # Weeks headers
441 if show_weeks
457 if show_weeks
442 left = subject_width
458 left = subject_width
443 height = header_height
459 height = header_height
444 if @date_from.cwday == 1
460 if @date_from.cwday == 1
445 # date_from is monday
461 # date_from is monday
446 week_f = date_from
462 week_f = date_from
447 else
463 else
448 # find next monday after date_from
464 # find next monday after date_from
449 week_f = @date_from + (7 - @date_from.cwday + 1)
465 week_f = @date_from + (7 - @date_from.cwday + 1)
450 width = (7 - @date_from.cwday + 1) * zoom
466 width = (7 - @date_from.cwday + 1) * zoom
451 gc.fill('white')
467 gc.fill('white')
452 gc.stroke('grey')
468 gc.stroke('grey')
453 gc.stroke_width(1)
469 gc.stroke_width(1)
454 gc.rectangle(left, header_height, left + width, 2 * header_height + g_height - 1)
470 gc.rectangle(left, header_height, left + width, 2 * header_height + g_height - 1)
455 left = left + width
471 left = left + width
456 end
472 end
457 while week_f <= date_to
473 while week_f <= date_to
458 width = (week_f + 6 <= date_to) ? 7 * zoom : (date_to - week_f + 1) * zoom
474 width = (week_f + 6 <= date_to) ? 7 * zoom : (date_to - week_f + 1) * zoom
459 gc.fill('white')
475 gc.fill('white')
460 gc.stroke('grey')
476 gc.stroke('grey')
461 gc.stroke_width(1)
477 gc.stroke_width(1)
462 gc.rectangle(left.round, header_height, left.round + width, 2 * header_height + g_height - 1)
478 gc.rectangle(left.round, header_height, left.round + width, 2 * header_height + g_height - 1)
463 gc.fill('black')
479 gc.fill('black')
464 gc.stroke('transparent')
480 gc.stroke('transparent')
465 gc.stroke_width(1)
481 gc.stroke_width(1)
466 gc.text(left.round + 2, header_height + 14, week_f.cweek.to_s)
482 gc.text(left.round + 2, header_height + 14, week_f.cweek.to_s)
467 left = left + width
483 left = left + width
468 week_f = week_f + 7
484 week_f = week_f + 7
469 end
485 end
470 end
486 end
471 # Days details (week-end in grey)
487 # Days details (week-end in grey)
472 if show_days
488 if show_days
473 left = subject_width
489 left = subject_width
474 height = g_height + header_height - 1
490 height = g_height + header_height - 1
475 wday = @date_from.cwday
491 wday = @date_from.cwday
476 (date_to - @date_from + 1).to_i.times do
492 (date_to - @date_from + 1).to_i.times do
477 width = zoom
493 width = zoom
478 gc.fill(non_working_week_days.include?(wday) ? '#eee' : 'white')
494 gc.fill(non_working_week_days.include?(wday) ? '#eee' : 'white')
479 gc.stroke('#ddd')
495 gc.stroke('#ddd')
480 gc.stroke_width(1)
496 gc.stroke_width(1)
481 gc.rectangle(left, 2 * header_height, left + width, 2 * header_height + g_height - 1)
497 gc.rectangle(left, 2 * header_height, left + width, 2 * header_height + g_height - 1)
482 left = left + width
498 left = left + width
483 wday = wday + 1
499 wday = wday + 1
484 wday = 1 if wday > 7
500 wday = 1 if wday > 7
485 end
501 end
486 end
502 end
487 # border
503 # border
488 gc.fill('transparent')
504 gc.fill('transparent')
489 gc.stroke('grey')
505 gc.stroke('grey')
490 gc.stroke_width(1)
506 gc.stroke_width(1)
491 gc.rectangle(0, 0, subject_width + g_width, headers_height)
507 gc.rectangle(0, 0, subject_width + g_width, headers_height)
492 gc.stroke('black')
508 gc.stroke('black')
493 gc.rectangle(0, 0, subject_width + g_width, g_height + headers_height - 1)
509 gc.rectangle(0, 0, subject_width + g_width, g_height + headers_height - 1)
494 # content
510 # content
495 top = headers_height + 20
511 top = headers_height + 20
496 gc.stroke('transparent')
512 gc.stroke('transparent')
497 lines(:image => gc, :top => top, :zoom => zoom,
513 lines(:image => gc, :top => top, :zoom => zoom,
498 :subject_width => subject_width, :format => :image)
514 :subject_width => subject_width, :format => :image)
499 # today red line
515 # today red line
500 if Date.today >= @date_from and Date.today <= date_to
516 if Date.today >= @date_from and Date.today <= date_to
501 gc.stroke('red')
517 gc.stroke('red')
502 x = (Date.today - @date_from + 1) * zoom + subject_width
518 x = (Date.today - @date_from + 1) * zoom + subject_width
503 gc.line(x, headers_height, x, headers_height + g_height - 1)
519 gc.line(x, headers_height, x, headers_height + g_height - 1)
504 end
520 end
505 gc.draw(imgl)
521 gc.draw(imgl)
506 imgl.format = format
522 imgl.format = format
507 imgl.to_blob
523 imgl.to_blob
508 end if Object.const_defined?(:Magick)
524 end if Object.const_defined?(:Magick)
509
525
510 def to_pdf
526 def to_pdf
511 pdf = ::Redmine::Export::PDF::ITCPDF.new(current_language)
527 pdf = ::Redmine::Export::PDF::ITCPDF.new(current_language)
512 pdf.SetTitle("#{l(:label_gantt)} #{project}")
528 pdf.SetTitle("#{l(:label_gantt)} #{project}")
513 pdf.alias_nb_pages
529 pdf.alias_nb_pages
514 pdf.footer_date = format_date(Date.today)
530 pdf.footer_date = format_date(Date.today)
515 pdf.AddPage("L")
531 pdf.AddPage("L")
516 pdf.SetFontStyle('B', 12)
532 pdf.SetFontStyle('B', 12)
517 pdf.SetX(15)
533 pdf.SetX(15)
518 pdf.RDMCell(PDF::LeftPaneWidth, 20, project.to_s)
534 pdf.RDMCell(PDF::LeftPaneWidth, 20, project.to_s)
519 pdf.Ln
535 pdf.Ln
520 pdf.SetFontStyle('B', 9)
536 pdf.SetFontStyle('B', 9)
521 subject_width = PDF::LeftPaneWidth
537 subject_width = PDF::LeftPaneWidth
522 header_height = 5
538 header_height = 5
523 headers_height = header_height
539 headers_height = header_height
524 show_weeks = false
540 show_weeks = false
525 show_days = false
541 show_days = false
526 if self.months < 7
542 if self.months < 7
527 show_weeks = true
543 show_weeks = true
528 headers_height = 2 * header_height
544 headers_height = 2 * header_height
529 if self.months < 3
545 if self.months < 3
530 show_days = true
546 show_days = true
531 headers_height = 3 * header_height
547 headers_height = 3 * header_height
532 end
548 end
533 end
549 end
534 g_width = PDF.right_pane_width
550 g_width = PDF.right_pane_width
535 zoom = (g_width) / (self.date_to - self.date_from + 1)
551 zoom = (g_width) / (self.date_to - self.date_from + 1)
536 g_height = 120
552 g_height = 120
537 t_height = g_height + headers_height
553 t_height = g_height + headers_height
538 y_start = pdf.GetY
554 y_start = pdf.GetY
539 # Months headers
555 # Months headers
540 month_f = self.date_from
556 month_f = self.date_from
541 left = subject_width
557 left = subject_width
542 height = header_height
558 height = header_height
543 self.months.times do
559 self.months.times do
544 width = ((month_f >> 1) - month_f) * zoom
560 width = ((month_f >> 1) - month_f) * zoom
545 pdf.SetY(y_start)
561 pdf.SetY(y_start)
546 pdf.SetX(left)
562 pdf.SetX(left)
547 pdf.RDMCell(width, height, "#{month_f.year}-#{month_f.month}", "LTR", 0, "C")
563 pdf.RDMCell(width, height, "#{month_f.year}-#{month_f.month}", "LTR", 0, "C")
548 left = left + width
564 left = left + width
549 month_f = month_f >> 1
565 month_f = month_f >> 1
550 end
566 end
551 # Weeks headers
567 # Weeks headers
552 if show_weeks
568 if show_weeks
553 left = subject_width
569 left = subject_width
554 height = header_height
570 height = header_height
555 if self.date_from.cwday == 1
571 if self.date_from.cwday == 1
556 # self.date_from is monday
572 # self.date_from is monday
557 week_f = self.date_from
573 week_f = self.date_from
558 else
574 else
559 # find next monday after self.date_from
575 # find next monday after self.date_from
560 week_f = self.date_from + (7 - self.date_from.cwday + 1)
576 week_f = self.date_from + (7 - self.date_from.cwday + 1)
561 width = (7 - self.date_from.cwday + 1) * zoom-1
577 width = (7 - self.date_from.cwday + 1) * zoom-1
562 pdf.SetY(y_start + header_height)
578 pdf.SetY(y_start + header_height)
563 pdf.SetX(left)
579 pdf.SetX(left)
564 pdf.RDMCell(width + 1, height, "", "LTR")
580 pdf.RDMCell(width + 1, height, "", "LTR")
565 left = left + width + 1
581 left = left + width + 1
566 end
582 end
567 while week_f <= self.date_to
583 while week_f <= self.date_to
568 width = (week_f + 6 <= self.date_to) ? 7 * zoom : (self.date_to - week_f + 1) * zoom
584 width = (week_f + 6 <= self.date_to) ? 7 * zoom : (self.date_to - week_f + 1) * zoom
569 pdf.SetY(y_start + header_height)
585 pdf.SetY(y_start + header_height)
570 pdf.SetX(left)
586 pdf.SetX(left)
571 pdf.RDMCell(width, height, (width >= 5 ? week_f.cweek.to_s : ""), "LTR", 0, "C")
587 pdf.RDMCell(width, height, (width >= 5 ? week_f.cweek.to_s : ""), "LTR", 0, "C")
572 left = left + width
588 left = left + width
573 week_f = week_f + 7
589 week_f = week_f + 7
574 end
590 end
575 end
591 end
576 # Days headers
592 # Days headers
577 if show_days
593 if show_days
578 left = subject_width
594 left = subject_width
579 height = header_height
595 height = header_height
580 wday = self.date_from.cwday
596 wday = self.date_from.cwday
581 pdf.SetFontStyle('B', 7)
597 pdf.SetFontStyle('B', 7)
582 (self.date_to - self.date_from + 1).to_i.times do
598 (self.date_to - self.date_from + 1).to_i.times do
583 width = zoom
599 width = zoom
584 pdf.SetY(y_start + 2 * header_height)
600 pdf.SetY(y_start + 2 * header_height)
585 pdf.SetX(left)
601 pdf.SetX(left)
586 pdf.RDMCell(width, height, day_name(wday).first, "LTR", 0, "C")
602 pdf.RDMCell(width, height, day_name(wday).first, "LTR", 0, "C")
587 left = left + width
603 left = left + width
588 wday = wday + 1
604 wday = wday + 1
589 wday = 1 if wday > 7
605 wday = 1 if wday > 7
590 end
606 end
591 end
607 end
592 pdf.SetY(y_start)
608 pdf.SetY(y_start)
593 pdf.SetX(15)
609 pdf.SetX(15)
594 pdf.RDMCell(subject_width + g_width - 15, headers_height, "", 1)
610 pdf.RDMCell(subject_width + g_width - 15, headers_height, "", 1)
595 # Tasks
611 # Tasks
596 top = headers_height + y_start
612 top = headers_height + y_start
597 options = {
613 options = {
598 :top => top,
614 :top => top,
599 :zoom => zoom,
615 :zoom => zoom,
600 :subject_width => subject_width,
616 :subject_width => subject_width,
601 :g_width => g_width,
617 :g_width => g_width,
602 :indent => 0,
618 :indent => 0,
603 :indent_increment => 5,
619 :indent_increment => 5,
604 :top_increment => 5,
620 :top_increment => 5,
605 :format => :pdf,
621 :format => :pdf,
606 :pdf => pdf
622 :pdf => pdf
607 }
623 }
608 render(options)
624 render(options)
609 pdf.Output
625 pdf.Output
610 end
626 end
611
627
612 private
628 private
613
629
614 def coordinates(start_date, end_date, progress, zoom=nil)
630 def coordinates(start_date, end_date, progress, zoom=nil)
615 zoom ||= @zoom
631 zoom ||= @zoom
616 coords = {}
632 coords = {}
617 if start_date && end_date && start_date < self.date_to && end_date > self.date_from
633 if start_date && end_date && start_date < self.date_to && end_date > self.date_from
618 if start_date > self.date_from
634 if start_date > self.date_from
619 coords[:start] = start_date - self.date_from
635 coords[:start] = start_date - self.date_from
620 coords[:bar_start] = start_date - self.date_from
636 coords[:bar_start] = start_date - self.date_from
621 else
637 else
622 coords[:bar_start] = 0
638 coords[:bar_start] = 0
623 end
639 end
624 if end_date < self.date_to
640 if end_date < self.date_to
625 coords[:end] = end_date - self.date_from
641 coords[:end] = end_date - self.date_from
626 coords[:bar_end] = end_date - self.date_from + 1
642 coords[:bar_end] = end_date - self.date_from + 1
627 else
643 else
628 coords[:bar_end] = self.date_to - self.date_from + 1
644 coords[:bar_end] = self.date_to - self.date_from + 1
629 end
645 end
630 if progress
646 if progress
631 progress_date = start_date + (end_date - start_date + 1) * (progress / 100.0)
647 progress_date = calc_progress_date(start_date, end_date, progress)
632 if progress_date > self.date_from && progress_date > start_date
648 if progress_date > self.date_from && progress_date > start_date
633 if progress_date < self.date_to
649 if progress_date < self.date_to
634 coords[:bar_progress_end] = progress_date - self.date_from
650 coords[:bar_progress_end] = progress_date - self.date_from
635 else
651 else
636 coords[:bar_progress_end] = self.date_to - self.date_from + 1
652 coords[:bar_progress_end] = self.date_to - self.date_from + 1
637 end
653 end
638 end
654 end
639 if progress_date < Date.today
655 if progress_date < Date.today
640 late_date = [Date.today, end_date].min
656 late_date = [Date.today, end_date].min
641 if late_date > self.date_from && late_date > start_date
657 if late_date > self.date_from && late_date > start_date
642 if late_date < self.date_to
658 if late_date < self.date_to
643 coords[:bar_late_end] = late_date - self.date_from + 1
659 coords[:bar_late_end] = late_date - self.date_from + 1
644 else
660 else
645 coords[:bar_late_end] = self.date_to - self.date_from + 1
661 coords[:bar_late_end] = self.date_to - self.date_from + 1
646 end
662 end
647 end
663 end
648 end
664 end
649 end
665 end
650 end
666 end
651 # Transforms dates into pixels witdh
667 # Transforms dates into pixels witdh
652 coords.keys.each do |key|
668 coords.keys.each do |key|
653 coords[key] = (coords[key] * zoom).floor
669 coords[key] = (coords[key] * zoom).floor
654 end
670 end
655 coords
671 coords
656 end
672 end
657
673
674 def calc_progress_date(start_date, end_date, progress)
675 start_date + (end_date - start_date + 1) * (progress / 100.0)
676 end
677
658 # Sorts a collection of issues by start_date, due_date, id for gantt rendering
678 # Sorts a collection of issues by start_date, due_date, id for gantt rendering
659 def sort_issues!(issues)
679 def sort_issues!(issues)
660 issues.sort! { |a, b| gantt_issue_compare(a, b) }
680 issues.sort! { |a, b| gantt_issue_compare(a, b) }
661 end
681 end
662
682
663 # TODO: top level issues should be sorted by start date
683 # TODO: top level issues should be sorted by start date
664 def gantt_issue_compare(x, y)
684 def gantt_issue_compare(x, y)
665 if x.root_id == y.root_id
685 if x.root_id == y.root_id
666 x.lft <=> y.lft
686 x.lft <=> y.lft
667 else
687 else
668 x.root_id <=> y.root_id
688 x.root_id <=> y.root_id
669 end
689 end
670 end
690 end
671
691
672 def current_limit
692 def current_limit
673 if @max_rows
693 if @max_rows
674 @max_rows - @number_of_rows
694 @max_rows - @number_of_rows
675 else
695 else
676 nil
696 nil
677 end
697 end
678 end
698 end
679
699
680 def abort?
700 def abort?
681 if @max_rows && @number_of_rows >= @max_rows
701 if @max_rows && @number_of_rows >= @max_rows
682 @truncated = true
702 @truncated = true
683 end
703 end
684 end
704 end
685
705
686 def pdf_new_page?(options)
706 def pdf_new_page?(options)
687 if options[:top] > 180
707 if options[:top] > 180
688 options[:pdf].Line(15, options[:top], PDF::TotalWidth, options[:top])
708 options[:pdf].Line(15, options[:top], PDF::TotalWidth, options[:top])
689 options[:pdf].AddPage("L")
709 options[:pdf].AddPage("L")
690 options[:top] = 15
710 options[:top] = 15
691 options[:pdf].Line(15, options[:top] - 0.1, PDF::TotalWidth, options[:top] - 0.1)
711 options[:pdf].Line(15, options[:top] - 0.1, PDF::TotalWidth, options[:top] - 0.1)
692 end
712 end
693 end
713 end
694
714
695 def html_subject(params, subject, options={})
715 def html_subject(params, subject, options={})
696 style = "position: absolute;top:#{params[:top]}px;left:#{params[:indent]}px;"
716 style = "position: absolute;top:#{params[:top]}px;left:#{params[:indent]}px;"
697 style << "width:#{params[:subject_width] - params[:indent]}px;" if params[:subject_width]
717 style << "width:#{params[:subject_width] - params[:indent]}px;" if params[:subject_width]
698 output = view.content_tag('div', subject,
718 output = view.content_tag(:div, subject,
699 :class => options[:css], :style => style,
719 :class => options[:css], :style => style,
700 :title => options[:title])
720 :title => options[:title],
721 :id => options[:id])
701 @subjects << output
722 @subjects << output
702 output
723 output
703 end
724 end
704
725
705 def pdf_subject(params, subject, options={})
726 def pdf_subject(params, subject, options={})
706 params[:pdf].SetY(params[:top])
727 params[:pdf].SetY(params[:top])
707 params[:pdf].SetX(15)
728 params[:pdf].SetX(15)
708 char_limit = PDF::MaxCharactorsForSubject - params[:indent]
729 char_limit = PDF::MaxCharactorsForSubject - params[:indent]
709 params[:pdf].RDMCell(params[:subject_width] - 15, 5,
730 params[:pdf].RDMCell(params[:subject_width] - 15, 5,
710 (" " * params[:indent]) +
731 (" " * params[:indent]) +
711 subject.to_s.sub(/^(.{#{char_limit}}[^\s]*\s).*$/, '\1 (...)'),
732 subject.to_s.sub(/^(.{#{char_limit}}[^\s]*\s).*$/, '\1 (...)'),
712 "LR")
733 "LR")
713 params[:pdf].SetY(params[:top])
734 params[:pdf].SetY(params[:top])
714 params[:pdf].SetX(params[:subject_width])
735 params[:pdf].SetX(params[:subject_width])
715 params[:pdf].RDMCell(params[:g_width], 5, "", "LR")
736 params[:pdf].RDMCell(params[:g_width], 5, "", "LR")
716 end
737 end
717
738
718 def image_subject(params, subject, options={})
739 def image_subject(params, subject, options={})
719 params[:image].fill('black')
740 params[:image].fill('black')
720 params[:image].stroke('transparent')
741 params[:image].stroke('transparent')
721 params[:image].stroke_width(1)
742 params[:image].stroke_width(1)
722 params[:image].text(params[:indent], params[:top] + 2, subject)
743 params[:image].text(params[:indent], params[:top] + 2, subject)
723 end
744 end
724
745
725 def issue_relations(issue)
746 def issue_relations(issue)
726 rels = {}
747 rels = {}
727 if relations[issue.id]
748 if relations[issue.id]
728 relations[issue.id].each do |relation|
749 relations[issue.id].each do |relation|
729 (rels[relation.relation_type] ||= []) << relation.issue_to_id
750 (rels[relation.relation_type] ||= []) << relation.issue_to_id
730 end
751 end
731 end
752 end
732 rels
753 rels
733 end
754 end
734
755
735 def html_task(params, coords, options={})
756 def html_task(params, coords, options={})
736 output = ''
757 output = ''
737 # Renders the task bar, with progress and late
758 # Renders the task bar, with progress and late
738 if coords[:bar_start] && coords[:bar_end]
759 if coords[:bar_start] && coords[:bar_end]
739 width = coords[:bar_end] - coords[:bar_start] - 2
760 width = coords[:bar_end] - coords[:bar_start] - 2
740 style = ""
761 style = ""
741 style << "top:#{params[:top]}px;"
762 style << "top:#{params[:top]}px;"
742 style << "left:#{coords[:bar_start]}px;"
763 style << "left:#{coords[:bar_start]}px;"
743 style << "width:#{width}px;"
764 style << "width:#{width}px;"
744 html_id = "task-todo-issue-#{options[:issue].id}" if options[:issue]
765 html_id = "task-todo-issue-#{options[:issue].id}" if options[:issue]
766 html_id = "task-todo-version-#{options[:version].id}" if options[:version]
745 content_opt = {:style => style,
767 content_opt = {:style => style,
746 :class => "#{options[:css]} task_todo",
768 :class => "#{options[:css]} task_todo",
747 :id => html_id}
769 :id => html_id}
748 if options[:issue]
770 if options[:issue]
749 rels = issue_relations(options[:issue])
771 rels = issue_relations(options[:issue])
750 if rels.present?
772 if rels.present?
751 content_opt[:data] = {"rels" => rels.to_json}
773 content_opt[:data] = {"rels" => rels.to_json}
752 end
774 end
753 end
775 end
754 output << view.content_tag(:div, '&nbsp;'.html_safe, content_opt)
776 output << view.content_tag(:div, '&nbsp;'.html_safe, content_opt)
755 if coords[:bar_late_end]
777 if coords[:bar_late_end]
756 width = coords[:bar_late_end] - coords[:bar_start] - 2
778 width = coords[:bar_late_end] - coords[:bar_start] - 2
757 style = ""
779 style = ""
758 style << "top:#{params[:top]}px;"
780 style << "top:#{params[:top]}px;"
759 style << "left:#{coords[:bar_start]}px;"
781 style << "left:#{coords[:bar_start]}px;"
760 style << "width:#{width}px;"
782 style << "width:#{width}px;"
761 output << view.content_tag(:div, '&nbsp;'.html_safe,
783 output << view.content_tag(:div, '&nbsp;'.html_safe,
762 :style => style,
784 :style => style,
763 :class => "#{options[:css]} task_late")
785 :class => "#{options[:css]} task_late")
764 end
786 end
765 if coords[:bar_progress_end]
787 if coords[:bar_progress_end]
766 width = coords[:bar_progress_end] - coords[:bar_start] - 2
788 width = coords[:bar_progress_end] - coords[:bar_start] - 2
767 style = ""
789 style = ""
768 style << "top:#{params[:top]}px;"
790 style << "top:#{params[:top]}px;"
769 style << "left:#{coords[:bar_start]}px;"
791 style << "left:#{coords[:bar_start]}px;"
770 style << "width:#{width}px;"
792 style << "width:#{width}px;"
793 html_id = "task-done-issue-#{options[:issue].id}" if options[:issue]
794 html_id = "task-done-version-#{options[:version].id}" if options[:version]
771 output << view.content_tag(:div, '&nbsp;'.html_safe,
795 output << view.content_tag(:div, '&nbsp;'.html_safe,
772 :style => style,
796 :style => style,
773 :class => "#{options[:css]} task_done")
797 :class => "#{options[:css]} task_done",
798 :id => html_id)
774 end
799 end
775 end
800 end
776 # Renders the markers
801 # Renders the markers
777 if options[:markers]
802 if options[:markers]
778 if coords[:start]
803 if coords[:start]
779 style = ""
804 style = ""
780 style << "top:#{params[:top]}px;"
805 style << "top:#{params[:top]}px;"
781 style << "left:#{coords[:start]}px;"
806 style << "left:#{coords[:start]}px;"
782 style << "width:15px;"
807 style << "width:15px;"
783 output << view.content_tag(:div, '&nbsp;'.html_safe,
808 output << view.content_tag(:div, '&nbsp;'.html_safe,
784 :style => style,
809 :style => style,
785 :class => "#{options[:css]} marker starting")
810 :class => "#{options[:css]} marker starting")
786 end
811 end
787 if coords[:end]
812 if coords[:end]
788 style = ""
813 style = ""
789 style << "top:#{params[:top]}px;"
814 style << "top:#{params[:top]}px;"
790 style << "left:#{coords[:end] + params[:zoom]}px;"
815 style << "left:#{coords[:end] + params[:zoom]}px;"
791 style << "width:15px;"
816 style << "width:15px;"
792 output << view.content_tag(:div, '&nbsp;'.html_safe,
817 output << view.content_tag(:div, '&nbsp;'.html_safe,
793 :style => style,
818 :style => style,
794 :class => "#{options[:css]} marker ending")
819 :class => "#{options[:css]} marker ending")
795 end
820 end
796 end
821 end
797 # Renders the label on the right
822 # Renders the label on the right
798 if options[:label]
823 if options[:label]
799 style = ""
824 style = ""
800 style << "top:#{params[:top]}px;"
825 style << "top:#{params[:top]}px;"
801 style << "left:#{(coords[:bar_end] || 0) + 8}px;"
826 style << "left:#{(coords[:bar_end] || 0) + 8}px;"
802 style << "width:15px;"
827 style << "width:15px;"
803 output << view.content_tag(:div, options[:label],
828 output << view.content_tag(:div, options[:label],
804 :style => style,
829 :style => style,
805 :class => "#{options[:css]} label")
830 :class => "#{options[:css]} label")
806 end
831 end
807 # Renders the tooltip
832 # Renders the tooltip
808 if options[:issue] && coords[:bar_start] && coords[:bar_end]
833 if options[:issue] && coords[:bar_start] && coords[:bar_end]
809 s = view.content_tag(:span,
834 s = view.content_tag(:span,
810 view.render_issue_tooltip(options[:issue]).html_safe,
835 view.render_issue_tooltip(options[:issue]).html_safe,
811 :class => "tip")
836 :class => "tip")
812 style = ""
837 style = ""
813 style << "position: absolute;"
838 style << "position: absolute;"
814 style << "top:#{params[:top]}px;"
839 style << "top:#{params[:top]}px;"
815 style << "left:#{coords[:bar_start]}px;"
840 style << "left:#{coords[:bar_start]}px;"
816 style << "width:#{coords[:bar_end] - coords[:bar_start]}px;"
841 style << "width:#{coords[:bar_end] - coords[:bar_start]}px;"
817 style << "height:12px;"
842 style << "height:12px;"
818 output << view.content_tag(:div, s.html_safe,
843 output << view.content_tag(:div, s.html_safe,
819 :style => style,
844 :style => style,
820 :class => "tooltip")
845 :class => "tooltip")
821 end
846 end
822 @lines << output
847 @lines << output
823 output
848 output
824 end
849 end
825
850
826 def pdf_task(params, coords, options={})
851 def pdf_task(params, coords, options={})
827 height = options[:height] || 2
852 height = options[:height] || 2
828 # Renders the task bar, with progress and late
853 # Renders the task bar, with progress and late
829 if coords[:bar_start] && coords[:bar_end]
854 if coords[:bar_start] && coords[:bar_end]
830 params[:pdf].SetY(params[:top] + 1.5)
855 params[:pdf].SetY(params[:top] + 1.5)
831 params[:pdf].SetX(params[:subject_width] + coords[:bar_start])
856 params[:pdf].SetX(params[:subject_width] + coords[:bar_start])
832 params[:pdf].SetFillColor(200, 200, 200)
857 params[:pdf].SetFillColor(200, 200, 200)
833 params[:pdf].RDMCell(coords[:bar_end] - coords[:bar_start], height, "", 0, 0, "", 1)
858 params[:pdf].RDMCell(coords[:bar_end] - coords[:bar_start], height, "", 0, 0, "", 1)
834 if coords[:bar_late_end]
859 if coords[:bar_late_end]
835 params[:pdf].SetY(params[:top] + 1.5)
860 params[:pdf].SetY(params[:top] + 1.5)
836 params[:pdf].SetX(params[:subject_width] + coords[:bar_start])
861 params[:pdf].SetX(params[:subject_width] + coords[:bar_start])
837 params[:pdf].SetFillColor(255, 100, 100)
862 params[:pdf].SetFillColor(255, 100, 100)
838 params[:pdf].RDMCell(coords[:bar_late_end] - coords[:bar_start], height, "", 0, 0, "", 1)
863 params[:pdf].RDMCell(coords[:bar_late_end] - coords[:bar_start], height, "", 0, 0, "", 1)
839 end
864 end
840 if coords[:bar_progress_end]
865 if coords[:bar_progress_end]
841 params[:pdf].SetY(params[:top] + 1.5)
866 params[:pdf].SetY(params[:top] + 1.5)
842 params[:pdf].SetX(params[:subject_width] + coords[:bar_start])
867 params[:pdf].SetX(params[:subject_width] + coords[:bar_start])
843 params[:pdf].SetFillColor(90, 200, 90)
868 params[:pdf].SetFillColor(90, 200, 90)
844 params[:pdf].RDMCell(coords[:bar_progress_end] - coords[:bar_start], height, "", 0, 0, "", 1)
869 params[:pdf].RDMCell(coords[:bar_progress_end] - coords[:bar_start], height, "", 0, 0, "", 1)
845 end
870 end
846 end
871 end
847 # Renders the markers
872 # Renders the markers
848 if options[:markers]
873 if options[:markers]
849 if coords[:start]
874 if coords[:start]
850 params[:pdf].SetY(params[:top] + 1)
875 params[:pdf].SetY(params[:top] + 1)
851 params[:pdf].SetX(params[:subject_width] + coords[:start] - 1)
876 params[:pdf].SetX(params[:subject_width] + coords[:start] - 1)
852 params[:pdf].SetFillColor(50, 50, 200)
877 params[:pdf].SetFillColor(50, 50, 200)
853 params[:pdf].RDMCell(2, 2, "", 0, 0, "", 1)
878 params[:pdf].RDMCell(2, 2, "", 0, 0, "", 1)
854 end
879 end
855 if coords[:end]
880 if coords[:end]
856 params[:pdf].SetY(params[:top] + 1)
881 params[:pdf].SetY(params[:top] + 1)
857 params[:pdf].SetX(params[:subject_width] + coords[:end] - 1)
882 params[:pdf].SetX(params[:subject_width] + coords[:end] - 1)
858 params[:pdf].SetFillColor(50, 50, 200)
883 params[:pdf].SetFillColor(50, 50, 200)
859 params[:pdf].RDMCell(2, 2, "", 0, 0, "", 1)
884 params[:pdf].RDMCell(2, 2, "", 0, 0, "", 1)
860 end
885 end
861 end
886 end
862 # Renders the label on the right
887 # Renders the label on the right
863 if options[:label]
888 if options[:label]
864 params[:pdf].SetX(params[:subject_width] + (coords[:bar_end] || 0) + 5)
889 params[:pdf].SetX(params[:subject_width] + (coords[:bar_end] || 0) + 5)
865 params[:pdf].RDMCell(30, 2, options[:label])
890 params[:pdf].RDMCell(30, 2, options[:label])
866 end
891 end
867 end
892 end
868
893
869 def image_task(params, coords, options={})
894 def image_task(params, coords, options={})
870 height = options[:height] || 6
895 height = options[:height] || 6
871 # Renders the task bar, with progress and late
896 # Renders the task bar, with progress and late
872 if coords[:bar_start] && coords[:bar_end]
897 if coords[:bar_start] && coords[:bar_end]
873 params[:image].fill('#aaa')
898 params[:image].fill('#aaa')
874 params[:image].rectangle(params[:subject_width] + coords[:bar_start],
899 params[:image].rectangle(params[:subject_width] + coords[:bar_start],
875 params[:top],
900 params[:top],
876 params[:subject_width] + coords[:bar_end],
901 params[:subject_width] + coords[:bar_end],
877 params[:top] - height)
902 params[:top] - height)
878 if coords[:bar_late_end]
903 if coords[:bar_late_end]
879 params[:image].fill('#f66')
904 params[:image].fill('#f66')
880 params[:image].rectangle(params[:subject_width] + coords[:bar_start],
905 params[:image].rectangle(params[:subject_width] + coords[:bar_start],
881 params[:top],
906 params[:top],
882 params[:subject_width] + coords[:bar_late_end],
907 params[:subject_width] + coords[:bar_late_end],
883 params[:top] - height)
908 params[:top] - height)
884 end
909 end
885 if coords[:bar_progress_end]
910 if coords[:bar_progress_end]
886 params[:image].fill('#00c600')
911 params[:image].fill('#00c600')
887 params[:image].rectangle(params[:subject_width] + coords[:bar_start],
912 params[:image].rectangle(params[:subject_width] + coords[:bar_start],
888 params[:top],
913 params[:top],
889 params[:subject_width] + coords[:bar_progress_end],
914 params[:subject_width] + coords[:bar_progress_end],
890 params[:top] - height)
915 params[:top] - height)
891 end
916 end
892 end
917 end
893 # Renders the markers
918 # Renders the markers
894 if options[:markers]
919 if options[:markers]
895 if coords[:start]
920 if coords[:start]
896 x = params[:subject_width] + coords[:start]
921 x = params[:subject_width] + coords[:start]
897 y = params[:top] - height / 2
922 y = params[:top] - height / 2
898 params[:image].fill('blue')
923 params[:image].fill('blue')
899 params[:image].polygon(x - 4, y, x, y - 4, x + 4, y, x, y + 4)
924 params[:image].polygon(x - 4, y, x, y - 4, x + 4, y, x, y + 4)
900 end
925 end
901 if coords[:end]
926 if coords[:end]
902 x = params[:subject_width] + coords[:end] + params[:zoom]
927 x = params[:subject_width] + coords[:end] + params[:zoom]
903 y = params[:top] - height / 2
928 y = params[:top] - height / 2
904 params[:image].fill('blue')
929 params[:image].fill('blue')
905 params[:image].polygon(x - 4, y, x, y - 4, x + 4, y, x, y + 4)
930 params[:image].polygon(x - 4, y, x, y - 4, x + 4, y, x, y + 4)
906 end
931 end
907 end
932 end
908 # Renders the label on the right
933 # Renders the label on the right
909 if options[:label]
934 if options[:label]
910 params[:image].fill('black')
935 params[:image].fill('black')
911 params[:image].text(params[:subject_width] + (coords[:bar_end] || 0) + 5,
936 params[:image].text(params[:subject_width] + (coords[:bar_end] || 0) + 5,
912 params[:top] + 1,
937 params[:top] + 1,
913 options[:label])
938 options[:label])
914 end
939 end
915 end
940 end
916 end
941 end
917 end
942 end
918 end
943 end
@@ -1,109 +1,172
1 var draw_gantt = null;
1 var draw_gantt = null;
2 var draw_top;
2 var draw_top;
3 var draw_right;
3 var draw_right;
4 var draw_left;
4 var draw_left;
5
5
6 var rels_stroke_width = 2;
6 var rels_stroke_width = 2;
7
7
8 function setDrawArea() {
8 function setDrawArea() {
9 draw_top = $("#gantt_draw_area").position().top;
9 draw_top = $("#gantt_draw_area").position().top;
10 draw_right = $("#gantt_draw_area").width();
10 draw_right = $("#gantt_draw_area").width();
11 draw_left = $("#gantt_area").scrollLeft();
11 draw_left = $("#gantt_area").scrollLeft();
12 }
12 }
13
13
14 function getRelationsArray() {
14 function getRelationsArray() {
15 var arr = new Array();
15 var arr = new Array();
16 $.each($('div.task_todo[data-rels]'), function(index_div, element) {
16 $.each($('div.task_todo[data-rels]'), function(index_div, element) {
17 var element_id = $(element).attr("id");
17 var element_id = $(element).attr("id");
18 if (element_id != null) {
18 if (element_id != null) {
19 var issue_id = element_id.replace("task-todo-issue-", "");
19 var issue_id = element_id.replace("task-todo-issue-", "");
20 var data_rels = $(element).data("rels");
20 var data_rels = $(element).data("rels");
21 for (rel_type_key in data_rels) {
21 for (rel_type_key in data_rels) {
22 $.each(data_rels[rel_type_key], function(index_issue, element_issue) {
22 $.each(data_rels[rel_type_key], function(index_issue, element_issue) {
23 arr.push({issue_from: issue_id, issue_to: element_issue,
23 arr.push({issue_from: issue_id, issue_to: element_issue,
24 rel_type: rel_type_key});
24 rel_type: rel_type_key});
25 });
25 });
26 }
26 }
27 }
27 }
28 });
28 });
29 return arr;
29 return arr;
30 }
30 }
31
31
32 function drawRelations() {
32 function drawRelations() {
33 var arr = getRelationsArray();
33 var arr = getRelationsArray();
34 $.each(arr, function(index_issue, element_issue) {
34 $.each(arr, function(index_issue, element_issue) {
35 var issue_from = $("#task-todo-issue-" + element_issue["issue_from"]);
35 var issue_from = $("#task-todo-issue-" + element_issue["issue_from"]);
36 var issue_to = $("#task-todo-issue-" + element_issue["issue_to"]);
36 var issue_to = $("#task-todo-issue-" + element_issue["issue_to"]);
37 if (issue_from.size() == 0 || issue_to.size() == 0) {
37 if (issue_from.size() == 0 || issue_to.size() == 0) {
38 return;
38 return;
39 }
39 }
40 var issue_height = issue_from.height();
40 var issue_height = issue_from.height();
41 var issue_from_top = issue_from.position().top + (issue_height / 2) - draw_top;
41 var issue_from_top = issue_from.position().top + (issue_height / 2) - draw_top;
42 var issue_from_right = issue_from.position().left + issue_from.width();
42 var issue_from_right = issue_from.position().left + issue_from.width();
43 var issue_to_top = issue_to.position().top + (issue_height / 2) - draw_top;
43 var issue_to_top = issue_to.position().top + (issue_height / 2) - draw_top;
44 var issue_to_left = issue_to.position().left;
44 var issue_to_left = issue_to.position().left;
45 var color = issue_relation_type[element_issue["rel_type"]]["color"];
45 var color = issue_relation_type[element_issue["rel_type"]]["color"];
46 var landscape_margin = issue_relation_type[element_issue["rel_type"]]["landscape_margin"];
46 var landscape_margin = issue_relation_type[element_issue["rel_type"]]["landscape_margin"];
47 var issue_from_right_rel = issue_from_right + landscape_margin;
47 var issue_from_right_rel = issue_from_right + landscape_margin;
48 var issue_to_left_rel = issue_to_left - landscape_margin;
48 var issue_to_left_rel = issue_to_left - landscape_margin;
49 draw_gantt.path(["M", issue_from_right + draw_left, issue_from_top,
49 draw_gantt.path(["M", issue_from_right + draw_left, issue_from_top,
50 "L", issue_from_right_rel + draw_left, issue_from_top])
50 "L", issue_from_right_rel + draw_left, issue_from_top])
51 .attr({stroke: color,
51 .attr({stroke: color,
52 "stroke-width": rels_stroke_width
52 "stroke-width": rels_stroke_width
53 });
53 });
54 if (issue_from_right_rel < issue_to_left_rel) {
54 if (issue_from_right_rel < issue_to_left_rel) {
55 draw_gantt.path(["M", issue_from_right_rel + draw_left, issue_from_top,
55 draw_gantt.path(["M", issue_from_right_rel + draw_left, issue_from_top,
56 "L", issue_from_right_rel + draw_left, issue_to_top])
56 "L", issue_from_right_rel + draw_left, issue_to_top])
57 .attr({stroke: color,
57 .attr({stroke: color,
58 "stroke-width": rels_stroke_width
58 "stroke-width": rels_stroke_width
59 });
59 });
60 draw_gantt.path(["M", issue_from_right_rel + draw_left, issue_to_top,
60 draw_gantt.path(["M", issue_from_right_rel + draw_left, issue_to_top,
61 "L", issue_to_left + draw_left, issue_to_top])
61 "L", issue_to_left + draw_left, issue_to_top])
62 .attr({stroke: color,
62 .attr({stroke: color,
63 "stroke-width": rels_stroke_width
63 "stroke-width": rels_stroke_width
64 });
64 });
65 } else {
65 } else {
66 var issue_middle_top = issue_to_top +
66 var issue_middle_top = issue_to_top +
67 (issue_height *
67 (issue_height *
68 ((issue_from_top > issue_to_top) ? 1 : -1));
68 ((issue_from_top > issue_to_top) ? 1 : -1));
69 draw_gantt.path(["M", issue_from_right_rel + draw_left, issue_from_top,
69 draw_gantt.path(["M", issue_from_right_rel + draw_left, issue_from_top,
70 "L", issue_from_right_rel + draw_left, issue_middle_top])
70 "L", issue_from_right_rel + draw_left, issue_middle_top])
71 .attr({stroke: color,
71 .attr({stroke: color,
72 "stroke-width": rels_stroke_width
72 "stroke-width": rels_stroke_width
73 });
73 });
74 draw_gantt.path(["M", issue_from_right_rel + draw_left, issue_middle_top,
74 draw_gantt.path(["M", issue_from_right_rel + draw_left, issue_middle_top,
75 "L", issue_to_left_rel + draw_left, issue_middle_top])
75 "L", issue_to_left_rel + draw_left, issue_middle_top])
76 .attr({stroke: color,
76 .attr({stroke: color,
77 "stroke-width": rels_stroke_width
77 "stroke-width": rels_stroke_width
78 });
78 });
79 draw_gantt.path(["M", issue_to_left_rel + draw_left, issue_middle_top,
79 draw_gantt.path(["M", issue_to_left_rel + draw_left, issue_middle_top,
80 "L", issue_to_left_rel + draw_left, issue_to_top])
80 "L", issue_to_left_rel + draw_left, issue_to_top])
81 .attr({stroke: color,
81 .attr({stroke: color,
82 "stroke-width": rels_stroke_width
82 "stroke-width": rels_stroke_width
83 });
83 });
84 draw_gantt.path(["M", issue_to_left_rel + draw_left, issue_to_top,
84 draw_gantt.path(["M", issue_to_left_rel + draw_left, issue_to_top,
85 "L", issue_to_left + draw_left, issue_to_top])
85 "L", issue_to_left + draw_left, issue_to_top])
86 .attr({stroke: color,
86 .attr({stroke: color,
87 "stroke-width": rels_stroke_width
87 "stroke-width": rels_stroke_width
88 });
88 });
89 }
89 }
90 draw_gantt.path(["M", issue_to_left + draw_left, issue_to_top,
90 draw_gantt.path(["M", issue_to_left + draw_left, issue_to_top,
91 "l", -4 * rels_stroke_width, -2 * rels_stroke_width,
91 "l", -4 * rels_stroke_width, -2 * rels_stroke_width,
92 "l", 0, 4 * rels_stroke_width, "z"])
92 "l", 0, 4 * rels_stroke_width, "z"])
93 .attr({stroke: "none",
93 .attr({stroke: "none",
94 fill: color,
94 fill: color,
95 "stroke-linecap": "butt",
95 "stroke-linecap": "butt",
96 "stroke-linejoin": "miter",
96 "stroke-linejoin": "miter",
97 });
97 });
98 });
98 });
99 }
99 }
100
100
101 function getProgressLinesArray() {
102 var arr = new Array();
103 var today_left = $('#today_line').position().left;
104 arr.push({left: today_left, top: 0});
105 $.each($('div.issue-subject, div.version-name'), function(index, element) {
106 var t = $(element).position().top - draw_top ;
107 var h = ($(element).height() / 9);
108 var element_top_upper = t - h;
109 var element_top_center = t + (h * 3);
110 var element_top_lower = t + (h * 8);
111 var issue_closed = $(element).children('span').hasClass('issue-closed');
112 var version_closed = $(element).children('span').hasClass('version-closed');
113 if (issue_closed || version_closed) {
114 arr.push({left: today_left, top: element_top_center});
115 } else {
116 var issue_done = $("#task-done-" + $(element).attr("id"));
117 var is_behind_start = $(element).children('span').hasClass('behind-start-date');
118 var is_over_end = $(element).children('span').hasClass('over-end-date');
119 if (is_over_end) {
120 arr.push({left: draw_right, top: element_top_upper, is_right_edge: true});
121 arr.push({left: draw_right, top: element_top_lower, is_right_edge: true, none_stroke: true});
122 } else if (issue_done.size() > 0) {
123 var done_left = issue_done.first().position().left +
124 issue_done.first().width();
125 arr.push({left: done_left, top: element_top_center});
126 } else if (is_behind_start) {
127 arr.push({left: 0 , top: element_top_upper, is_left_edge: true});
128 arr.push({left: 0 , top: element_top_lower, is_left_edge: true, none_stroke: true});
129 } else {
130 var todo_left = today_left;
131 var issue_todo = $("#task-todo-" + $(element).attr("id"));
132 if (issue_todo.size() > 0){
133 todo_left = issue_todo.first().position().left;
134 }
135 arr.push({left: Math.min(today_left, todo_left), top: element_top_center});
136 }
137 }
138 });
139 return arr;
140 }
141
142 function drawGanttProgressLines() {
143 var arr = getProgressLinesArray();
144 var color = $("#today_line")
145 .css("border-left-color");
146 var i;
147 for(i = 1 ; i < arr.length ; i++) {
148 if (!("none_stroke" in arr[i]) &&
149 (!("is_right_edge" in arr[i - 1] && "is_right_edge" in arr[i]) &&
150 !("is_left_edge" in arr[i - 1] && "is_left_edge" in arr[i]))
151 ) {
152 var x1 = (arr[i - 1].left == 0) ? 0 : arr[i - 1].left + draw_left;
153 var x2 = (arr[i].left == 0) ? 0 : arr[i].left + draw_left;
154 draw_gantt.path(["M", x1, arr[i - 1].top,
155 "L", x2, arr[i].top])
156 .attr({stroke: color, "stroke-width": 2});
157 }
158 }
159 }
160
101 function drawGanttHandler() {
161 function drawGanttHandler() {
102 var folder = document.getElementById('gantt_draw_area');
162 var folder = document.getElementById('gantt_draw_area');
103 if(draw_gantt != null)
163 if(draw_gantt != null)
104 draw_gantt.clear();
164 draw_gantt.clear();
105 else
165 else
106 draw_gantt = Raphael(folder);
166 draw_gantt = Raphael(folder);
107 setDrawArea();
167 setDrawArea();
108 drawRelations();
168 if ($("#draw_progress_line").attr('checked'))
169 drawGanttProgressLines();
170 if ($("#draw_rels").attr('checked'))
171 drawRelations();
109 }
172 }
General Comments 0
You need to be logged in to leave comments. Login now