##// END OF EJS Templates
git-svn-id: http://redmine.rubyforge.org/svn/trunk@38 e93f8b46-1217-0410-a6f0-8f06a7374b81
Jean-Philippe Lang -
r36:3628515b312c
parent child
Show More
@@ -0,0 +1,3
1 Note added to issue #<%= @history.issue_id %> by <%= @history.author.name %>
2 ----------------------------------------
3 <%= @history.notes %> No newline at end of file
@@ -0,0 +1,3
1 Note added to issue #<%= @history.issue_id %> by <%= @history.author.name %>
2 ----------------------------------------
3 <%= @history.notes %> No newline at end of file
@@ -0,0 +1,3
1 Note added to issue #<%= @history.issue_id %> by <%= @history.author.name %>
2 ----------------------------------------
3 <%= @history.notes %> No newline at end of file
@@ -0,0 +1,3
1 Note ajoutée à la demande #<%= @history.issue_id %> par <%= @history.author.name %>
2 ----------------------------------------
3 <%= @history.notes %> No newline at end of file
@@ -0,0 +1,43
1 <h2><%=l(:label_activity)%></h2>
2
3 <div>
4 <div class="rightbox">
5 <%= start_form_tag %>
6 <p>From <%= text_field_tag 'date_from', @date_from, :size => 10, :class => 'button-small' %>
7 and <%= text_field_tag 'days_back', @days_back, :size => 2, :class => 'button-small' %> days back</p>
8 <%= check_box_tag 'show_issues', 1, @show_issues %><%= hidden_field_tag 'show_issues', 0 %> <%=l(:label_issue_plural)%><br />
9 <%= check_box_tag 'show_news', 1, @show_news %><%= hidden_field_tag 'show_news', 0 %> <%=l(:label_news_plural)%><br />
10 <%= check_box_tag 'show_files', 1, @show_files %><%= hidden_field_tag 'show_files', 0 %> <%=l(:label_attachment_plural)%><br />
11 <%= check_box_tag 'show_documents', 1, @show_documents %><%= hidden_field_tag 'show_documents', 0 %> <%=l(:label_document_plural)%><br />
12 <p><center><%= submit_tag l(:button_apply), :class => 'button-small' %></center></p>
13 <%= end_form_tag %>
14 </div>
15 <% @events_by_day.keys.sort {|x,y| y <=> x }.each do |day| %>
16 <h3><%= format_date(day) %></h3>
17 <ul>
18 <% @events_by_day[day].each do |e| %>
19 <li><p>
20 <% if e.is_a? Issue %>
21 <%= e.created_on.strftime("%H:%M") %> <%= e.tracker.name %> <%= link_to e.long_id, :controller => 'issues', :action => 'show', :id => e %> (<%= e.status.name %>): <%= e.subject %><br />
22 <i><%= e.author.name %></i>
23 <% elsif e.is_a? News %>
24 <%= e.created_on.strftime("%H:%M") %> <%=l(:label_news)%>: <%= link_to e.title, :controller => 'news', :action => 'show', :id => e %><br />
25 <% unless e.summary.empty? %><%= e.summary %><br /><% end %>
26 <i><%= e.author.name %></i>
27 <% elsif (e.is_a? Attachment) and (e.container.is_a? Version) %>
28 <%= e.created_on.strftime("%H:%M") %> <%=l(:label_attachment)%> (Version <%= e.container.name %>): <%= link_to e.filename, :controller => 'projects', :action => 'list_files', :id => @project %><br />
29 <i><%= e.author.name %></i>
30 <% elsif (e.is_a? Attachment) and (e.container.is_a? Document) %>
31 <%= e.created_on.strftime("%H:%M") %> <%=l(:label_document)%>: <%= link_to e.container.title, :controller => 'documents', :action => 'show', :id => e %><br />
32 <i><%= e.author.name %></i>
33 <% end %>
34 </p></li>
35
36 <% end %>
37 </ul>
38 <% end %>
39 <br />
40
41
42
43 </div> No newline at end of file
@@ -1,128 +1,129
1 1 # redMine - project management software
2 2 # Copyright (C) 2006 Jean-Philippe Lang
3 3 #
4 4 # This program is free software; you can redistribute it and/or
5 5 # modify it under the terms of the GNU General Public License
6 6 # as published by the Free Software Foundation; either version 2
7 7 # of the License, or (at your option) any later version.
8 8 #
9 9 # This program is distributed in the hope that it will be useful,
10 10 # but WITHOUT ANY WARRANTY; without even the implied warranty of
11 11 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 12 # GNU General Public License for more details.
13 13 #
14 14 # You should have received a copy of the GNU General Public License
15 15 # along with this program; if not, write to the Free Software
16 16 # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
17 17
18 18 class IssuesController < ApplicationController
19 19 layout 'base', :except => :export_pdf
20 20 before_filter :find_project, :authorize
21 21
22 22 helper :custom_fields
23 23 include CustomFieldsHelper
24 24 helper :ifpdf
25 25 include IfpdfHelper
26 26
27 27 def show
28 28 @status_options = @issue.status.workflows.find(:all, :include => :new_status, :conditions => ["role_id=? and tracker_id=?", self.logged_in_user.role_for_project(@project.id), @issue.tracker.id]).collect{ |w| w.new_status } if self.logged_in_user
29 29 @custom_values = @issue.custom_values.find(:all, :include => :custom_field)
30 30 end
31 31
32 32 def export_pdf
33 33 @custom_values = @issue.custom_values.find(:all, :include => :custom_field)
34 34 @options_for_rfpdf ||= {}
35 35 @options_for_rfpdf[:file_name] = "#{@project.name}_#{@issue.long_id}.pdf"
36 36 end
37 37
38 38 def edit
39 39 @priorities = Enumeration::get_values('IPRI')
40 40 if request.get?
41 41 @custom_values = @project.custom_fields_for_issues(@issue.tracker).collect { |x| @issue.custom_values.find_by_custom_field_id(x.id) || CustomValue.new(:custom_field => x, :customized => @issue) }
42 42 else
43 43 begin
44 44 # Retrieve custom fields and values
45 45 @custom_values = @project.custom_fields_for_issues(@issue.tracker).collect { |x| CustomValue.new(:custom_field => x, :customized => @issue, :value => params["custom_fields"][x.id.to_s]) }
46 46 @issue.custom_values = @custom_values
47 47 @issue.attributes = params[:issue]
48 48 if @issue.save
49 49 flash[:notice] = l(:notice_successful_update)
50 50 redirect_to :action => 'show', :id => @issue
51 51 end
52 52 rescue ActiveRecord::StaleObjectError
53 53 # Optimistic locking exception
54 54 flash[:notice] = l(:notice_locking_conflict)
55 55 end
56 56 end
57 57 end
58 58
59 59 def add_note
60 60 unless params[:history][:notes].empty?
61 61 @history = @issue.histories.build(params[:history])
62 62 @history.author_id = self.logged_in_user.id if self.logged_in_user
63 63 @history.status = @issue.status
64 64 if @history.save
65 65 flash[:notice] = l(:notice_successful_update)
66 Mailer.deliver_issue_add_note(@history) if Permission.find_by_controller_and_action(@params[:controller], @params[:action]).mail_enabled?
66 67 redirect_to :action => 'show', :id => @issue
67 68 return
68 69 end
69 70 end
70 71 show
71 72 render :action => 'show'
72 73 end
73 74
74 75 def change_status
75 76 @history = @issue.histories.build(params[:history])
76 77 @status_options = @issue.status.workflows.find(:all, :conditions => ["role_id=? and tracker_id=?", self.logged_in_user.role_for_project(@project.id), @issue.tracker.id]).collect{ |w| w.new_status } if self.logged_in_user
77 78 if params[:confirm]
78 79 begin
79 80 @history.author_id = self.logged_in_user.id if self.logged_in_user
80 81 @issue.status = @history.status
81 82 @issue.fixed_version_id = (params[:issue][:fixed_version_id])
82 83 @issue.assigned_to_id = (params[:issue][:assigned_to_id])
83 84 @issue.lock_version = (params[:issue][:lock_version])
84 85 if @issue.save
85 86 flash[:notice] = l(:notice_successful_update)
86 87 Mailer.deliver_issue_change_status(@issue) if Permission.find_by_controller_and_action(@params[:controller], @params[:action]).mail_enabled?
87 88 redirect_to :action => 'show', :id => @issue
88 89 end
89 90 rescue ActiveRecord::StaleObjectError
90 91 # Optimistic locking exception
91 92 flash[:notice] = l(:notice_locking_conflict)
92 93 end
93 94 end
94 95 @assignable_to = @project.members.find(:all, :include => :user).collect{ |m| m.user }
95 96 end
96 97
97 98 def destroy
98 99 @issue.destroy
99 100 redirect_to :controller => 'projects', :action => 'list_issues', :id => @project
100 101 end
101 102
102 103 def add_attachment
103 104 # Save the attachment
104 105 if params[:attachment][:file].size > 0
105 106 @attachment = @issue.attachments.build(params[:attachment])
106 107 @attachment.author_id = self.logged_in_user.id if self.logged_in_user
107 108 @attachment.save
108 109 end
109 110 redirect_to :action => 'show', :id => @issue
110 111 end
111 112
112 113 def destroy_attachment
113 114 @issue.attachments.find(params[:attachment_id]).destroy
114 115 redirect_to :action => 'show', :id => @issue
115 116 end
116 117
117 118 # Send the file in stream mode
118 119 def download
119 120 @attachment = @issue.attachments.find(params[:attachment_id])
120 121 send_file @attachment.diskfile, :filename => @attachment.filename
121 122 end
122 123
123 124 private
124 125 def find_project
125 126 @issue = Issue.find(params[:id], :include => [:project, :tracker, :status, :author, :priority, :category])
126 127 @project = @issue.project
127 128 end
128 129 end
@@ -1,368 +1,410
1 1 # redMine - project management software
2 2 # Copyright (C) 2006 Jean-Philippe Lang
3 3 #
4 4 # This program is free software; you can redistribute it and/or
5 5 # modify it under the terms of the GNU General Public License
6 6 # as published by the Free Software Foundation; either version 2
7 7 # of the License, or (at your option) any later version.
8 8 #
9 9 # This program is distributed in the hope that it will be useful,
10 10 # but WITHOUT ANY WARRANTY; without even the implied warranty of
11 11 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 12 # GNU General Public License for more details.
13 13 #
14 14 # You should have received a copy of the GNU General Public License
15 15 # along with this program; if not, write to the Free Software
16 16 # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
17 17
18 18 class ProjectsController < ApplicationController
19 19 layout 'base', :except => :export_issues_pdf
20 20 before_filter :find_project, :authorize, :except => [ :index, :list, :add ]
21 21 before_filter :require_admin, :only => [ :add, :destroy ]
22 22
23 23 helper :sort
24 24 include SortHelper
25 25 helper :search_filter
26 26 include SearchFilterHelper
27 27 helper :custom_fields
28 28 include CustomFieldsHelper
29 29 helper :ifpdf
30 30 include IfpdfHelper
31 31
32 32 def index
33 33 list
34 34 render :action => 'list' unless request.xhr?
35 35 end
36 36
37 37 # Lists public projects
38 38 def list
39 39 sort_init 'name', 'asc'
40 40 sort_update
41 41 @project_count = Project.count(["is_public=?", true])
42 42 @project_pages = Paginator.new self, @project_count,
43 43 15,
44 44 @params['page']
45 45 @projects = Project.find :all, :order => sort_clause,
46 46 :conditions => ["is_public=?", true],
47 47 :limit => @project_pages.items_per_page,
48 48 :offset => @project_pages.current.offset
49 49
50 50 render :action => "list", :layout => false if request.xhr?
51 51 end
52 52
53 53 # Add a new project
54 54 def add
55 55 @custom_fields = IssueCustomField.find(:all)
56 56 @root_projects = Project.find(:all, :conditions => "parent_id is null")
57 57 @project = Project.new(params[:project])
58 58 if request.get?
59 59 @custom_values = ProjectCustomField.find(:all).collect { |x| CustomValue.new(:custom_field => x, :customized => @project) }
60 60 else
61 61 @project.custom_fields = CustomField.find(@params[:custom_field_ids]) if @params[:custom_field_ids]
62 62 @custom_values = ProjectCustomField.find(:all).collect { |x| CustomValue.new(:custom_field => x, :customized => @project, :value => params["custom_fields"][x.id.to_s]) }
63 63 @project.custom_values = @custom_values
64 64 if @project.save
65 65 flash[:notice] = l(:notice_successful_create)
66 66 redirect_to :controller => 'admin', :action => 'projects'
67 67 end
68 68 end
69 69 end
70 70
71 71 # Show @project
72 72 def show
73 73 @custom_values = @project.custom_values.find(:all, :include => :custom_field)
74 74 @members = @project.members.find(:all, :include => [:user, :role])
75 75 @subprojects = @project.children if @project.children_count > 0
76 76 @news = @project.news.find(:all, :limit => 5, :include => [ :author, :project ], :order => "news.created_on DESC")
77 77 @trackers = Tracker.find(:all)
78 78 end
79 79
80 80 def settings
81 81 @root_projects = Project::find(:all, :conditions => ["parent_id is null and id <> ?", @project.id])
82 82 @custom_fields = IssueCustomField::find_all
83 83 @issue_category ||= IssueCategory.new
84 84 @member ||= @project.members.new
85 85 @roles = Role.find_all
86 86 @users = User.find_all - @project.members.find(:all, :include => :user).collect{|m| m.user }
87 87 @custom_values ||= ProjectCustomField.find(:all).collect { |x| @project.custom_values.find_by_custom_field_id(x.id) || CustomValue.new(:custom_field => x) }
88 88 end
89 89
90 90 # Edit @project
91 91 def edit
92 92 if request.post?
93 93 @project.custom_fields = IssueCustomField.find(@params[:custom_field_ids]) if @params[:custom_field_ids]
94 94 if params[:custom_fields]
95 95 @custom_values = ProjectCustomField.find(:all).collect { |x| CustomValue.new(:custom_field => x, :customized => @project, :value => params["custom_fields"][x.id.to_s]) }
96 96 @project.custom_values = @custom_values
97 97 end
98 98 if @project.update_attributes(params[:project])
99 99 flash[:notice] = l(:notice_successful_update)
100 100 redirect_to :action => 'settings', :id => @project
101 101 else
102 102 settings
103 103 render :action => 'settings'
104 104 end
105 105 end
106 106 end
107 107
108 108 # Delete @project
109 109 def destroy
110 110 if request.post? and params[:confirm]
111 111 @project.destroy
112 112 redirect_to :controller => 'admin', :action => 'projects'
113 113 end
114 114 end
115 115
116 116 # Add a new issue category to @project
117 117 def add_issue_category
118 118 if request.post?
119 119 @issue_category = @project.issue_categories.build(params[:issue_category])
120 120 if @issue_category.save
121 121 flash[:notice] = l(:notice_successful_create)
122 122 redirect_to :action => 'settings', :id => @project
123 123 else
124 124 settings
125 125 render :action => 'settings'
126 126 end
127 127 end
128 128 end
129 129
130 130 # Add a new version to @project
131 131 def add_version
132 132 @version = @project.versions.build(params[:version])
133 133 if request.post? and @version.save
134 134 flash[:notice] = l(:notice_successful_create)
135 135 redirect_to :action => 'settings', :id => @project
136 136 end
137 137 end
138 138
139 139 # Add a new member to @project
140 140 def add_member
141 141 @member = @project.members.build(params[:member])
142 142 if request.post?
143 143 if @member.save
144 144 flash[:notice] = l(:notice_successful_create)
145 145 redirect_to :action => 'settings', :id => @project
146 146 else
147 147 settings
148 148 render :action => 'settings'
149 149 end
150 150 end
151 151 end
152 152
153 153 # Show members list of @project
154 154 def list_members
155 155 @members = @project.members
156 156 end
157 157
158 158 # Add a new document to @project
159 159 def add_document
160 160 @categories = Enumeration::get_values('DCAT')
161 161 @document = @project.documents.build(params[:document])
162 162 if request.post?
163 163 # Save the attachment
164 164 if params[:attachment][:file].size > 0
165 165 @attachment = @document.attachments.build(params[:attachment])
166 166 @attachment.author_id = self.logged_in_user.id if self.logged_in_user
167 167 end
168 168 if @document.save
169 169 flash[:notice] = l(:notice_successful_create)
170 170 redirect_to :action => 'list_documents', :id => @project
171 171 end
172 172 end
173 173 end
174 174
175 175 # Show documents list of @project
176 176 def list_documents
177 177 @documents = @project.documents
178 178 end
179 179
180 180 # Add a new issue to @project
181 181 def add_issue
182 182 @tracker = Tracker.find(params[:tracker_id])
183 183 @priorities = Enumeration::get_values('IPRI')
184 184 @issue = Issue.new(:project => @project, :tracker => @tracker)
185 185 if request.get?
186 186 @custom_values = @project.custom_fields_for_issues(@tracker).collect { |x| CustomValue.new(:custom_field => x, :customized => @issue) }
187 187 else
188 188 @issue.attributes = params[:issue]
189 189 @issue.author_id = self.logged_in_user.id if self.logged_in_user
190 190 # Create the document if a file was sent
191 191 if params[:attachment][:file].size > 0
192 192 @attachment = @issue.attachments.build(params[:attachment])
193 193 @attachment.author_id = self.logged_in_user.id if self.logged_in_user
194 194 end
195 195 @custom_values = @project.custom_fields_for_issues(@tracker).collect { |x| CustomValue.new(:custom_field => x, :customized => @issue, :value => params["custom_fields"][x.id.to_s]) }
196 196 @issue.custom_values = @custom_values
197 197 if @issue.save
198 198 flash[:notice] = l(:notice_successful_create)
199 199 Mailer.deliver_issue_add(@issue) if Permission.find_by_controller_and_action(@params[:controller], @params[:action]).mail_enabled?
200 200 redirect_to :action => 'list_issues', :id => @project
201 201 end
202 202 end
203 203 end
204 204
205 205 # Show filtered/sorted issues list of @project
206 206 def list_issues
207 207 sort_init 'issues.id', 'desc'
208 208 sort_update
209 209
210 210 search_filter_init_list_issues
211 211 search_filter_update if params[:set_filter]
212 212
213 213 @results_per_page_options = [ 15, 25, 50, 100 ]
214 214 if params[:per_page] and @results_per_page_options.include? params[:per_page].to_i
215 215 @results_per_page = params[:per_page].to_i
216 216 session[:results_per_page] = @results_per_page
217 217 else
218 218 @results_per_page = session[:results_per_page] || @results_per_page_options.first
219 219 end
220 220
221 221 @issue_count = Issue.count(:include => [:status, :project], :conditions => search_filter_clause)
222 222 @issue_pages = Paginator.new self, @issue_count, @results_per_page, @params['page']
223 223 @issues = Issue.find :all, :order => sort_clause,
224 224 :include => [ :author, :status, :tracker, :project ],
225 225 :conditions => search_filter_clause,
226 226 :limit => @issue_pages.items_per_page,
227 227 :offset => @issue_pages.current.offset
228 228
229 229 render :layout => false if request.xhr?
230 230 end
231 231
232 232 # Export filtered/sorted issues list to CSV
233 233 def export_issues_csv
234 234 sort_init 'issues.id', 'desc'
235 235 sort_update
236 236
237 237 search_filter_init_list_issues
238 238
239 239 @issues = Issue.find :all, :order => sort_clause,
240 240 :include => [ :author, :status, :tracker, :project, :custom_values ],
241 241 :conditions => search_filter_clause
242 242
243 243 ic = Iconv.new('ISO-8859-1', 'UTF-8')
244 244 export = StringIO.new
245 245 CSV::Writer.generate(export, l(:general_csv_separator)) do |csv|
246 246 # csv header fields
247 247 headers = [ "#", l(:field_status), l(:field_tracker), l(:field_subject), l(:field_author), l(:field_created_on), l(:field_updated_on) ]
248 248 for custom_field in @project.all_custom_fields
249 249 headers << custom_field.name
250 250 end
251 251 csv << headers.collect {|c| ic.iconv(c) }
252 252 # csv lines
253 253 @issues.each do |issue|
254 254 fields = [issue.id, issue.status.name, issue.tracker.name, issue.subject, issue.author.display_name, l_datetime(issue.created_on), l_datetime(issue.updated_on)]
255 255 for custom_field in @project.all_custom_fields
256 256 fields << (show_value issue.custom_value_for(custom_field))
257 257 end
258 258 csv << fields.collect {|c| ic.iconv(c.to_s) }
259 259 end
260 260 end
261 261 export.rewind
262 262 send_data(export.read, :type => 'text/csv; header=present', :filename => 'export.csv')
263 263 end
264 264
265 265 # Export filtered/sorted issues to PDF
266 266 def export_issues_pdf
267 267 sort_init 'issues.id', 'desc'
268 268 sort_update
269 269
270 270 search_filter_init_list_issues
271 271
272 272 @issues = Issue.find :all, :order => sort_clause,
273 273 :include => [ :author, :status, :tracker, :project, :custom_values ],
274 274 :conditions => search_filter_clause
275 275
276 276 @options_for_rfpdf ||= {}
277 277 @options_for_rfpdf[:file_name] = "export.pdf"
278 278 end
279 279
280 280 def move_issues
281 281 @issues = @project.issues.find(params[:issue_ids]) if params[:issue_ids]
282 282 redirect_to :action => 'list_issues', :id => @project and return unless @issues
283 283 @projects = []
284 284 # find projects to which the user is allowed to move the issue
285 285 @logged_in_user.memberships.each {|m| @projects << m.project if Permission.allowed_to_role("projects/move_issues", m.role_id)}
286 286 # issue can be moved to any tracker
287 287 @trackers = Tracker.find(:all)
288 288 if request.post? and params[:new_project_id] and params[:new_tracker_id]
289 289 new_project = Project.find(params[:new_project_id])
290 290 new_tracker = Tracker.find(params[:new_tracker_id])
291 291 @issues.each { |i|
292 292 # category is project dependent
293 293 i.category = nil unless i.project_id == new_project.id
294 294 # move the issue
295 295 i.project = new_project
296 296 i.tracker = new_tracker
297 297 i.save
298 298 }
299 299 flash[:notice] = l(:notice_successful_update)
300 300 redirect_to :action => 'list_issues', :id => @project
301 301 end
302 302 end
303 303
304 304 # Add a news to @project
305 305 def add_news
306 306 @news = News.new(:project => @project)
307 307 if request.post?
308 308 @news.attributes = params[:news]
309 309 @news.author_id = self.logged_in_user.id if self.logged_in_user
310 310 if @news.save
311 311 flash[:notice] = l(:notice_successful_create)
312 312 redirect_to :action => 'list_news', :id => @project
313 313 end
314 314 end
315 315 end
316 316
317 317 # Show news list of @project
318 318 def list_news
319 319 @news_pages, @news = paginate :news, :per_page => 10, :conditions => ["project_id=?", @project.id], :include => :author, :order => "news.created_on DESC"
320 320 render :action => "list_news", :layout => false if request.xhr?
321 321 end
322 322
323 323 def add_file
324 324 if request.post?
325 325 # Save the attachment
326 326 if params[:attachment][:file].size > 0
327 327 @attachment = @project.versions.find(params[:version_id]).attachments.build(params[:attachment])
328 328 @attachment.author_id = self.logged_in_user.id if self.logged_in_user
329 329 if @attachment.save
330 330 flash[:notice] = l(:notice_successful_create)
331 331 redirect_to :controller => 'projects', :action => 'list_files', :id => @project
332 332 end
333 333 end
334 334 end
335 335 @versions = @project.versions
336 336 end
337 337
338 338 def list_files
339 339 @versions = @project.versions
340 340 end
341 341
342 342 # Show changelog for @project
343 343 def changelog
344 344 @trackers = Tracker.find(:all, :conditions => ["is_in_chlog=?", true])
345 345 if request.get?
346 346 @selected_tracker_ids = @trackers.collect {|t| t.id.to_s }
347 347 else
348 348 @selected_tracker_ids = params[:tracker_ids].collect { |id| id.to_i.to_s } if params[:tracker_ids] and params[:tracker_ids].is_a? Array
349 349 end
350 350 @selected_tracker_ids ||= []
351 351 @fixed_issues = @project.issues.find(:all,
352 352 :include => [ :fixed_version, :status, :tracker ],
353 353 :conditions => [ "issue_statuses.is_closed=? and issues.tracker_id in (#{@selected_tracker_ids.join(',')}) and issues.fixed_version_id is not null", true],
354 354 :order => "versions.effective_date DESC, issues.id DESC"
355 355 ) unless @selected_tracker_ids.empty?
356 356 @fixed_issues ||= []
357 357 end
358 358
359 def activity
360 @date_from = begin
361 params[:date_from].to_date
362 rescue
363 end || Date.today
364 @days_back = params[:days_back] ? params[:days_back].to_i : 15
365 @date_to = @date_from - @days_back
366 @events_by_day = {}
367
368 unless params[:show_issues] == "0"
369 @project.issues.find(:all, :include => [:author, :status], :conditions => ["issues.created_on<=? and issues.created_on>=?", @date_from+1, @date_to], :order => "issues.created_on asc" ).each { |i|
370 @events_by_day[i.created_on.to_date] ||= []
371 @events_by_day[i.created_on.to_date] << i
372 }
373 @show_issues = 1
374 end
375
376 unless params[:show_news] == "0"
377 @project.news.find(:all, :conditions => ["news.created_on<=? and news.created_on>=?", @date_from+1, @date_to], :order => "news.created_on asc" ).each { |i|
378 @events_by_day[i.created_on.to_date] ||= []
379 @events_by_day[i.created_on.to_date] << i
380 }
381 @show_news = 1
382 end
383
384 unless params[:show_files] == "0"
385 Attachment.find(:all, :joins => "LEFT JOIN versions ON versions.id = attachments.container_id", :conditions => ["attachments.container_type='Version' and versions.project_id=? and attachments.created_on<=? and attachments.created_on>=?", @project.id, @date_from+1, @date_to], :order => "attachments.created_on asc" ).each { |i|
386 @events_by_day[i.created_on.to_date] ||= []
387 @events_by_day[i.created_on.to_date] << i
388 }
389 @show_files = 1
390 end
391
392 unless params[:show_documentss] == "0"
393 Attachment.find(:all, :joins => "LEFT JOIN documents ON documents.id = attachments.container_id", :conditions => ["attachments.container_type='Document' and documents.project_id=? and attachments.created_on<=? and attachments.created_on>=?", @project.id, @date_from+1, @date_to], :order => "attachments.created_on asc" ).each { |i|
394 @events_by_day[i.created_on.to_date] ||= []
395 @events_by_day[i.created_on.to_date] << i
396 }
397 @show_documents = 1
398 end
399
400 end
359 401 private
360 402 # Find project of id params[:id]
361 403 # if not found, redirect to project list
362 404 # Used as a before_filter
363 405 def find_project
364 406 @project = Project.find(params[:id])
365 407 rescue
366 408 redirect_to :action => 'list'
367 409 end
368 410 end
@@ -1,72 +1,72
1 1 # redMine - project management software
2 2 # Copyright (C) 2006 Jean-Philippe Lang
3 3 #
4 4 # This program is free software; you can redistribute it and/or
5 5 # modify it under the terms of the GNU General Public License
6 6 # as published by the Free Software Foundation; either version 2
7 7 # of the License, or (at your option) any later version.
8 8 #
9 9 # This program is distributed in the hope that it will be useful,
10 10 # but WITHOUT ANY WARRANTY; without even the implied warranty of
11 11 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 12 # GNU General Public License for more details.
13 13 #
14 14 # You should have received a copy of the GNU General Public License
15 15 # along with this program; if not, write to the Free Software
16 16 # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
17 17
18 18 module CustomFieldsHelper
19 19
20 20 # Return custom field html tag corresponding to its format
21 21 def custom_field_tag(custom_value)
22 22 custom_field = custom_value.custom_field
23 23 field_name = "custom_fields[#{custom_field.id}]"
24 24 field_id = "custom_fields_#{custom_field.id}"
25 25
26 26 case custom_field.field_format
27 27 when "string", "int"
28 28 text_field 'custom_value', 'value', :name => field_name, :id => field_id
29 29 when "date"
30 30 text_field('custom_value', 'value', :name => field_name, :id => field_id, :size => 10) +
31 31 calendar_for(field_id)
32 32 when "text"
33 33 text_area 'custom_value', 'value', :name => field_name, :id => field_id, :cols => 60, :rows => 3
34 34 when "bool"
35 35 check_box 'custom_value', 'value', :name => field_name, :id => field_id
36 36 when "list"
37 37 select 'custom_value', 'value', custom_field.possible_values.split('|'), { :include_blank => true }, :name => field_name, :id => field_id
38 38 end
39 39 end
40 40
41 41 # Return custom field label tag
42 42 def custom_field_label_tag(custom_value)
43 43 content_tag "label", custom_value.custom_field.name +
44 44 (custom_value.custom_field.is_required? ? " <span class=\"required\">*</span>" : ""),
45 45 :for => "custom_fields_#{custom_value.custom_field.id}",
46 46 :class => (custom_value.errors.empty? ? nil : "error" )
47 47 end
48 48
49 49 # Return custom field tag with its label tag
50 50 def custom_field_tag_with_label(custom_value)
51 51 custom_field_label_tag(custom_value) + custom_field_tag(custom_value)
52 52 end
53 53
54 54 # Return a string used to display a custom value
55 55 def show_value(custom_value)
56 56 return "" unless custom_value
57 57
58 58 case custom_value.custom_field.field_format
59 59 when "date"
60 l_date(custom_value.value.to_date) if custom_value.value
60 custom_value.value.empty? ? "" : l_date(custom_value.value.to_date)
61 61 when "bool"
62 62 l_YesNo(custom_value.value == "1")
63 63 else
64 64 custom_value.value
65 65 end
66 66 end
67 67
68 68 # Return an array of custom field formats which can be used in select_tag
69 69 def custom_field_formats_for_select
70 70 CustomField::FIELD_FORMATS.keys.collect { |k| [ l(CustomField::FIELD_FORMATS[k]), k ] }
71 71 end
72 72 end
@@ -1,69 +1,69
1 1 # redMine - project management software
2 2 # Copyright (C) 2006 Jean-Philippe Lang
3 3 #
4 4 # This program is free software; you can redistribute it and/or
5 5 # modify it under the terms of the GNU General Public License
6 6 # as published by the Free Software Foundation; either version 2
7 7 # of the License, or (at your option) any later version.
8 8 #
9 9 # This program is distributed in the hope that it will be useful,
10 10 # but WITHOUT ANY WARRANTY; without even the implied warranty of
11 11 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 12 # GNU General Public License for more details.
13 13 #
14 14 # You should have received a copy of the GNU General Public License
15 15 # along with this program; if not, write to the Free Software
16 16 # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
17 17
18 18 class Issue < ActiveRecord::Base
19 19
20 20 belongs_to :project
21 21 belongs_to :tracker
22 22 belongs_to :status, :class_name => 'IssueStatus', :foreign_key => 'status_id'
23 23 belongs_to :author, :class_name => 'User', :foreign_key => 'author_id'
24 24 belongs_to :assigned_to, :class_name => 'User', :foreign_key => 'assigned_to_id'
25 25 belongs_to :fixed_version, :class_name => 'Version', :foreign_key => 'fixed_version_id'
26 26 belongs_to :priority, :class_name => 'Enumeration', :foreign_key => 'priority_id'
27 27 belongs_to :category, :class_name => 'IssueCategory', :foreign_key => 'category_id'
28 28
29 29 has_many :histories, :class_name => 'IssueHistory', :dependent => true, :order => "issue_histories.created_on DESC", :include => :status
30 30 has_many :attachments, :as => :container, :dependent => true
31 31
32 32 has_many :custom_values, :dependent => true, :as => :customized
33 33 has_many :custom_fields, :through => :custom_values
34 34
35 validates_presence_of :subject, :description, :priority, :tracker, :author
35 validates_presence_of :subject, :description, :priority, :tracker, :author, :status
36 36 validates_associated :custom_values, :on => :update
37 37
38 38 # set default status for new issues
39 39 def before_validation
40 40 self.status = IssueStatus.default if new_record?
41 41 end
42 42
43 43 def validate
44 44 if self.due_date.nil? && @attributes['due_date'] && !@attributes['due_date'].empty?
45 45 errors.add :due_date, :activerecord_error_not_a_date
46 46 end
47 47 end
48 48
49 49 def before_create
50 50 build_history
51 51 end
52
52
53 53 def long_id
54 54 "%05d" % self.id
55 55 end
56 56
57 57 def custom_value_for(custom_field)
58 58 self.custom_values.each {|v| return v if v.custom_field_id == custom_field.id }
59 59 return nil
60 60 end
61 61
62 62 private
63 63 # Creates an history for the issue
64 64 def build_history
65 65 @history = self.histories.build
66 66 @history.status = self.status
67 67 @history.author = self.author
68 68 end
69 69 end
@@ -1,23 +1,24
1 1 # redMine - project management software
2 2 # Copyright (C) 2006 Jean-Philippe Lang
3 3 #
4 4 # This program is free software; you can redistribute it and/or
5 5 # modify it under the terms of the GNU General Public License
6 6 # as published by the Free Software Foundation; either version 2
7 7 # of the License, or (at your option) any later version.
8 8 #
9 9 # This program is distributed in the hope that it will be useful,
10 10 # but WITHOUT ANY WARRANTY; without even the implied warranty of
11 11 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 12 # GNU General Public License for more details.
13 13 #
14 14 # You should have received a copy of the GNU General Public License
15 15 # along with this program; if not, write to the Free Software
16 16 # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
17 17
18 18 class IssueHistory < ActiveRecord::Base
19 19 belongs_to :status, :class_name => 'IssueStatus', :foreign_key => 'status_id'
20 20 belongs_to :author, :class_name => 'User', :foreign_key => 'author_id'
21 belongs_to :issue
21 22
22 23 validates_presence_of :status
23 24 end
@@ -1,45 +1,49
1 1 # redMine - project management software
2 2 # Copyright (C) 2006 Jean-Philippe Lang
3 3 #
4 4 # This program is free software; you can redistribute it and/or
5 5 # modify it under the terms of the GNU General Public License
6 6 # as published by the Free Software Foundation; either version 2
7 7 # of the License, or (at your option) any later version.
8 8 #
9 9 # This program is distributed in the hope that it will be useful,
10 10 # but WITHOUT ANY WARRANTY; without even the implied warranty of
11 11 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 12 # GNU General Public License for more details.
13 13 #
14 14 # You should have received a copy of the GNU General Public License
15 15 # along with this program; if not, write to the Free Software
16 16 # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
17 17
18 18 class IssueStatus < ActiveRecord::Base
19 19 before_destroy :check_integrity
20 20 has_many :workflows, :foreign_key => "old_status_id"
21 21
22 22 validates_presence_of :name
23 23 validates_uniqueness_of :name
24 validates_length_of :html_color, :is=>6
24 validates_length_of :html_color, :is => 6
25 25 validates_format_of :html_color, :with => /^[a-f0-9]*$/i
26 26
27 def before_save
28 IssueStatus.update_all "is_default=false" if self.is_default?
29 end
30
27 31 # Returns the default status for new issues
28 32 def self.default
29 33 find(:first, :conditions =>["is_default=?", true])
30 34 end
31 35
32 36 # Returns an array of all statuses the given role can switch to
33 37 def new_statuses_allowed_to(role, tracker)
34 38 statuses = []
35 39 for workflow in self.workflows
36 40 statuses << workflow.new_status if workflow.role_id == role.id and workflow.tracker_id == tracker.id
37 41 end unless role.nil? or tracker.nil?
38 42 statuses
39 43 end
40 44
41 45 private
42 46 def check_integrity
43 47 raise "Can't delete status" if Issue.find(:first, :conditions => ["status_id=?", self.id]) or IssueHistory.find(:first, :conditions => ["status_id=?", self.id])
44 48 end
45 49 end
@@ -1,49 +1,57
1 1 # redMine - project management software
2 2 # Copyright (C) 2006 Jean-Philippe Lang
3 3 #
4 4 # This program is free software; you can redistribute it and/or
5 5 # modify it under the terms of the GNU General Public License
6 6 # as published by the Free Software Foundation; either version 2
7 7 # of the License, or (at your option) any later version.
8 8 #
9 9 # This program is distributed in the hope that it will be useful,
10 10 # but WITHOUT ANY WARRANTY; without even the implied warranty of
11 11 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 12 # GNU General Public License for more details.
13 13 #
14 14 # You should have received a copy of the GNU General Public License
15 15 # along with this program; if not, write to the Free Software
16 16 # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
17 17
18 18 class Mailer < ActionMailer::Base
19 19
20 20 def issue_change_status(issue)
21 21 # Sends to all project members
22 22 @recipients = issue.project.members.collect { |m| m.user.mail if m.user.mail_notification }
23 @from = 'redmine@somenet.foo'
24 @subject = "Issue ##{issue.id} has been updated"
23 @from = $RDM_MAIL_FROM
24 @subject = "[#{issue.project.name} - #{issue.tracker.name} ##{issue.id}] #{issue.status.name} - #{issue.subject}"
25 25 @body['issue'] = issue
26 26 end
27 27
28 28 def issue_add(issue)
29 29 # Sends to all project members
30 30 @recipients = issue.project.members.collect { |m| m.user.mail if m.user.mail_notification }
31 @from = 'redmine@somenet.foo'
32 @subject = "Issue ##{issue.id} has been reported"
31 @from = $RDM_MAIL_FROM
32 @subject = "[#{issue.project.name} - #{issue.tracker.name} ##{issue.id}] #{issue.status.name} - #{issue.subject}"
33 33 @body['issue'] = issue
34 34 end
35 35
36 def issue_add_note(history)
37 # Sends to all project members
38 @recipients = history.issue.project.members.collect { |m| m.user.mail if m.user.mail_notification }
39 @from = $RDM_MAIL_FROM
40 @subject = "[#{history.issue.project.name} - #{history.issue.tracker.name} ##{history.issue.id}] #{history.issue.status.name} - #{history.issue.subject}"
41 @body['history'] = history
42 end
43
36 44 def lost_password(token)
37 45 @recipients = token.user.mail
38 @from = 'redmine@somenet.foo'
39 @subject = "redMine password"
46 @from = $RDM_MAIL_FROM
47 @subject = l(:mail_subject_lost_password)
40 48 @body['token'] = token
41 49 end
42 50
43 51 def register(token)
44 52 @recipients = token.user.mail
45 @from = 'redmine@somenet.foo'
46 @subject = "redMine account activation"
53 @from = $RDM_MAIL_FROM
54 @subject = l(:mail_subject_register)
47 55 @body['token'] = token
48 56 end
49 57 end
@@ -1,26 +1,54
1 1 <h2><%= @issue.tracker.name %> #<%= @issue.id %> - <%= @issue.subject %></h2>
2 2
3 3 <% labelled_tabular_form_for :issue, @issue, :url => {:action => 'edit'} do |f| %>
4 4 <%= error_messages_for 'issue' %>
5 5 <div class="box">
6 6 <!--[form:issue]-->
7 7 <p><label><%=l(:field_status)%></label> <%= @issue.status.name %></p>
8 8
9 9 <p><%= f.select :priority_id, (@priorities.collect {|p| [p.name, p.id]}), :required => true %></p>
10 10 <p><%= f.select :assigned_to_id, (@issue.project.members.collect {|m| [m.name, m.user_id]}), :include_blank => true %></p>
11 11 <p><%= f.select :category_id, (@project.issue_categories.collect {|c| [c.name, c.id]}) %></p>
12 12 <p><%= f.text_field :subject, :size => 80, :required => true %></p>
13 13 <p><%= f.text_area :description, :cols => 60, :rows => 10, :required => true %></p>
14 14 <p><%= f.text_field :due_date, :size => 10 %><%= calendar_for('issue_due_date') %></p>
15 15
16 16 <% for @custom_value in @custom_values %>
17 17 <p><%= custom_field_tag_with_label @custom_value %></p>
18 18 <% end %>
19 19
20 20 <p><%= f.select :fixed_version_id, (@project.versions.collect {|v| [v.name, v.id]}), { :include_blank => true } %>
21 21 </select></p>
22 22 <!--[eoform:issue]-->
23 23 </div>
24 24 <%= f.hidden_field :lock_version %>
25 25 <%= submit_tag l(:button_save) %>
26 <% end %> No newline at end of file
26 <% end %>
27
28 <%= javascript_include_tag 'jstoolbar' %>
29 <script type="text/javascript">
30 //<![CDATA[
31 jsToolBar.prototype.base_url = 'http://callmepep.org';
32 jsToolBar.prototype.legend_msg = 'You can use the following shortcuts to format your text.';
33 jsToolBar.prototype.elements.strong.title = 'Strong emphasis';
34 jsToolBar.prototype.elements.em.title = 'Emphasis';
35 jsToolBar.prototype.elements.ins.title = 'Inserted';
36 jsToolBar.prototype.elements.del.title = 'Deleted';
37 jsToolBar.prototype.elements.quote.title = 'Inline quote';
38 jsToolBar.prototype.elements.code.title = 'Code';
39 jsToolBar.prototype.elements.br.title = 'Line break';
40 jsToolBar.prototype.elements.ul.title = 'Unordered list';
41 jsToolBar.prototype.elements.ol.title = 'Ordered list';
42 jsToolBar.prototype.elements.link.title = 'Link';
43 jsToolBar.prototype.elements.link.href_prompt = 'URL?';
44 jsToolBar.prototype.elements.link.hreflang_prompt = 'Language?';
45
46 if (document.getElementById) {
47 if (document.getElementById('issue_description')) {
48 var commentTb = new jsToolBar(document.getElementById('issue_description'));
49 commentTb.draw();
50 }
51 }
52
53 //]]>
54 </script> No newline at end of file
@@ -1,119 +1,137
1 1 <h2><%= @issue.tracker.name %> #<%= @issue.id %> - <%= @issue.subject %></h2>
2 2 <div class="topright">
3 3 <small>
4 4 <%= link_to 'PDF', :action => 'export_pdf', :id => @issue %>
5 5 </small>
6 6 </div>
7 7
8 8 <div class="box">
9 <p>
10 <b><%=l(:field_status)%> :</b> <%= @issue.status.name %> &nbsp &nbsp
11 <b><%=l(:field_priority)%> :</b> <%= @issue.priority.name %> &nbsp &nbsp
12 <b><%=l(:field_assigned_to)%> :</b> <%= @issue.assigned_to ? @issue.assigned_to.display_name : "-" %> &nbsp &nbsp
13 <b><%=l(:field_category)%> :</b> <%= @issue.category ? @issue.category.name : "-" %>
14 </p>
15 <div class="tabular">
16 <p><label><%=l(:field_author)%> :</label> <%= link_to_user @issue.author %>&nbsp;</p>
17 <p><label><%=l(:field_created_on)%> :</label> <%= format_date(@issue.created_on) %>&nbsp;</p>
18 <p><label><%=l(:field_subject)%> :</label> <%= @issue.subject %>&nbsp;</p>
19 <%= simple_format ("<label>" + l(:field_description) + ": </label>" + auto_link(@issue.description)) %>
20 <p><label><%=l(:field_due_date)%> :</label> <%= format_date(@issue.due_date) %>&nbsp;</p>
9 <table width="100%">
10 <tr>
11 <td width="15%"><b><%=l(:field_status)%> :</b></td><td width="35%"><%= @issue.status.name %></td>
12 <td width="15%"><b><%=l(:field_priority)%> :</b></td><td width="35%"><%= @issue.priority.name %></td>
13 </tr>
14 <tr>
15 <td><b><%=l(:field_author)%> :</b></td><td><%= link_to_user @issue.author %></td>
16 <td><b><%=l(:field_category)%> :</b></td><td><%= @issue.category ? @issue.category.name : "-" %></td>
17 </tr>
18 <tr>
19 <td><b><%=l(:field_created_on)%> :</b></td><td><%= format_date(@issue.created_on) %></td>
20 <td><b><%=l(:field_assigned_to)%> :</b></td><td><%= @issue.assigned_to ? @issue.assigned_to.name : "-" %></td>
21 </tr>
22 <tr>
23 <td><b><%=l(:field_updated_on)%> :</b></td><td><%= format_date(@issue.updated_on) %></td>
24 <td><b><%=l(:field_due_date)%> :</b></td><td><%= format_date(@issue.due_date) %></td>
25 </tr>
26 <tr>
27 <% n = 0
28 for custom_value in @custom_values %>
29 <td><b><%= custom_value.custom_field.name %> :</b></td><td><%= show_value custom_value %></td>
30 <% n = n + 1
31 if (n > 1)
32 n = 0 %>
33 </tr><tr>
34 <%end
35 end %>
36 </tr>
37 </table>
38 <hr />
39 <br />
21 40
22 <% for custom_value in @custom_values %>
23 <p><label><%= custom_value.custom_field.name %> :</label> <%= show_value custom_value %></p>
24 <% end %>
25 &nbsp;
26 </div>
41 <b><%=l(:field_description)%> :</b><br /><br />
42 <%= textilize @issue.description %>
27 43
44 <p>
28 45 <% if authorize_for('issues', 'edit') %>
29 46 <%= start_form_tag ({:controller => 'issues', :action => 'edit', :id => @issue}, :method => "get" ) %>
30 47 <%= submit_tag l(:button_edit) %>
31 48 <%= end_form_tag %>
32 49 &nbsp;&nbsp;
33 50 <% end %>
34 51
35 52 <% if authorize_for('issues', 'change_status') and @status_options and !@status_options.empty? %>
36 53 <%= start_form_tag ({:controller => 'issues', :action => 'change_status', :id => @issue}) %>
37 54 <%=l(:label_change_status)%> :
38 55 <select name="history[status_id]">
39 56 <%= options_from_collection_for_select @status_options, "id", "name" %>
40 57 </select>
41 58 <%= submit_tag l(:button_change) %>
42 59 <%= end_form_tag %>
43 60 &nbsp;&nbsp;
44 61 <% end %>
45 62
46 63 <% if authorize_for('projects', 'move_issues') %>
47 64 <%= start_form_tag ({:controller => 'projects', :action => 'move_issues', :id => @project} ) %>
48 65 <%= hidden_field_tag "issue_ids[]", @issue.id %>
49 66 <%= submit_tag l(:button_move) %>
50 67 <%= end_form_tag %>
51 68 &nbsp;&nbsp;
52 69 <% end %>
53 70
54 71 <% if authorize_for('issues', 'destroy') %>
55 72 <%= start_form_tag ({:controller => 'issues', :action => 'destroy', :id => @issue} ) %>
56 73 <%= submit_tag l(:button_delete) %>
57 74 <%= end_form_tag %>
58 75 &nbsp;&nbsp;
59 76 <% end %>
77 </p>
60 78 </div>
61 79
62 80 <% if authorize_for('issues', 'add_note') %>
63 81 <div class="box">
64 82 <h3><%= l(:label_add_note) %></h3>
65 83 <%= start_form_tag ({:controller => 'issues', :action => 'add_note', :id => @issue}, :class => "tabular" ) %>
66 84 <p><label for="history_notes"><%=l(:field_notes)%></label>
67 85 <%= text_area 'history', 'notes', :cols => 60, :rows => 10 %></p>
68 86 <%= submit_tag l(:button_add) %>
69 87 <%= end_form_tag %>
70 88 </div>
71 89 <% end %>
72 90
73 91 <div class="splitcontentleft">
74 92 <div class="box">
75 93 <h3><%=l(:label_history)%></h3>
76 94 <table width="100%">
77 95 <% for history in @issue.histories.find(:all, :include => [:author, :status]) %>
78 96 <tr>
79 97 <td><%= format_date(history.created_on) %></td>
80 98 <td><%= history.author.display_name %></td>
81 99 <td><b><%= history.status.name %></b></td>
82 100 </tr>
83 101 <% if history.notes? %>
84 102 <tr><td colspan=3><%= simple_format auto_link history.notes %></td></tr>
85 103 <% end %>
86 104 <% end %>
87 105 </table>
88 106 </div>
89 107 </div>
90 108
91 109 <div class="splitcontentright">
92 110 <div class="box">
93 111 <h3><%=l(:label_attachment_plural)%></h3>
94 112 <table width="100%">
95 113 <% for attachment in @issue.attachments %>
96 114 <tr>
97 115 <td><%= link_to attachment.filename, :action => 'download', :id => @issue, :attachment_id => attachment %> (<%= human_size(attachment.filesize) %>)</td>
98 116 <td><%= format_date(attachment.created_on) %></td>
99 117 <td><%= attachment.author.display_name %></td>
100 118 <% if authorize_for('issues', 'destroy_attachment') %>
101 119 <td>
102 120 <%= start_form_tag :action => 'destroy_attachment', :id => @issue, :attachment_id => attachment %>
103 121 <%= submit_tag l(:button_delete), :class => "button-small" %>
104 122 <%= end_form_tag %>
105 123 </td>
106 124 <% end %>
107 125 </tr>
108 126 <% end %>
109 127 </table>
110 128 <br />
111 129 <% if authorize_for('issues', 'add_attachment') %>
112 130 <%= start_form_tag ({ :controller => 'issues', :action => 'add_attachment', :id => @issue }, :multipart => true) %>
113 131 <%=l(:label_attachment_new)%>: <%= file_field 'attachment', 'file' %>
114 132 <%= submit_tag l(:button_add) %>
115 133 <%= end_form_tag %>
116 134 <% end %>
117 135 </div>
118 136 </div>
119 137
@@ -1,137 +1,140
1 1 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
2 2 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
3 3 <head>
4 4 <title><%= $RDM_HEADER_TITLE %></title>
5 5 <meta http-equiv="content-type" content="text/html; charset=utf-8" />
6 6 <meta name="description" content="redMine" />
7 7 <meta name="keywords" content="issue,bug,tracker" />
8 8 <%= stylesheet_link_tag "application" %>
9 9 <%= stylesheet_link_tag "menu" %>
10 10 <%= stylesheet_link_tag "rails" %>
11 11 <%= javascript_include_tag :defaults %>
12 12 <%= javascript_include_tag 'menu' %>
13 13 <%= javascript_include_tag 'calendar/calendar' %>
14 14 <%= javascript_include_tag "calendar/lang/calendar-#{current_language}.js" %>
15 15 <%= javascript_include_tag 'calendar/calendar-setup' %>
16 16 <%= stylesheet_link_tag 'calendar' %>
17 <%= stylesheet_link_tag 'jstoolbar' %>
17 18 <script type='text/javascript'>
18 19 var menu_contenu=' \
19 20 <div id="menuAdmin" class="menu" onmouseover="menuMouseover(event)"> \
20 21 <a class="menuItem" href="\/admin\/projects" onmouseover="menuItemMouseover(event,\'menuProjects\');"><span class="menuItemText"><%=l(:label_project_plural)%><\/span><span class="menuItemArrow">&#9654;<\/span><\/a> \
21 22 <a class="menuItem" href="\/users" onmouseover="menuItemMouseover(event,\'menuUsers\');"><span class="menuItemText"><%=l(:label_user_plural)%><\/span><span class="menuItemArrow">&#9654;<\/span><\/a> \
22 23 <a class="menuItem" href="\/roles"><%=l(:label_role_and_permissions)%><\/a> \
23 24 <a class="menuItem" href="\/trackers" onmouseover="menuItemMouseover(event,\'menuTrackers\');"><span class="menuItemText"><%=l(:label_tracker_plural)%><\/span><span class="menuItemArrow">&#9654;<\/span><\/a> \
24 25 <a class="menuItem" href="\/custom_fields"><%=l(:label_custom_field_plural)%><\/a> \
25 26 <a class="menuItem" href="\/enumerations"><%=l(:label_enumerations)%><\/a> \
26 27 <a class="menuItem" href="\/admin\/mail_options"><%=l(:field_mail_notification)%><\/a> \
27 28 <a class="menuItem" href="\/auth_sources"><%=l(:label_authentication)%><\/a> \
28 29 <a class="menuItem" href="\/admin\/info"><%=l(:label_information_plural)%><\/a> \
29 30 <\/div> \
30 31 <div id="menuTrackers" class="menu"> \
31 32 <a class="menuItem" href="\/issue_statuses"><%=l(:label_issue_status_plural)%><\/a> \
32 33 <a class="menuItem" href="\/roles\/workflow"><%=l(:label_workflow)%><\/a> \
33 34 <\/div> \
34 35 <div id="menuProjects" class="menu"><a class="menuItem" href="\/projects\/add"><%=l(:label_new)%><\/a><\/div> \
35 36 <div id="menuUsers" class="menu"><a class="menuItem" href="\/users\/add"><%=l(:label_new)%><\/a><\/div> \
36 37 \
37 38 <% unless @project.nil? || @project.id.nil? %> \
38 39 <div id="menuProject" class="menu" onmouseover="menuMouseover(event)"> \
39 40 <%= link_to l(:label_issue_plural), {:controller => 'projects', :action => 'list_issues', :id => @project }, :class => "menuItem" %> \
40 41 <%= link_to l(:label_report_plural), {:controller => 'reports', :action => 'issue_report', :id => @project }, :class => "menuItem" %> \
42 <%= link_to l(:label_activity), {:controller => 'projects', :action => 'activity', :id => @project }, :class => "menuItem" %> \
41 43 <%= link_to l(:label_news_plural), {:controller => 'projects', :action => 'list_news', :id => @project }, :class => "menuItem" %> \
42 44 <%= link_to l(:label_change_log), {:controller => 'projects', :action => 'changelog', :id => @project }, :class => "menuItem" %> \
43 45 <%= link_to l(:label_document_plural), {:controller => 'projects', :action => 'list_documents', :id => @project }, :class => "menuItem" %> \
44 46 <%= link_to l(:label_member_plural), {:controller => 'projects', :action => 'list_members', :id => @project }, :class => "menuItem" %> \
45 47 <%= link_to l(:label_attachment_plural), {:controller => 'projects', :action => 'list_files', :id => @project }, :class => "menuItem" %> \
46 48 <%= link_to_if_authorized l(:label_settings), {:controller => 'projects', :action => 'settings', :id => @project }, :class => "menuItem" %> \
47 49 <\/div> \
48 50 <% end %> \
49 51 ';
50 52 </script>
51 53
52 54 </head>
53 55
54 56 <body>
55 57 <div id="container" >
56 58
57 59 <div id="header">
58 60 <div style="float: left;">
59 61 <h1><%= $RDM_HEADER_TITLE %></h1>
60 62 <h2><%= $RDM_HEADER_SUBTITLE %></h2>
61 63 </div>
62 64 <div style="float: right; padding-right: 1em; padding-top: 0.2em;">
63 65 <% if loggedin? %><small><%=l(:label_logged_as)%> <b><%= @logged_in_user.login %></b></small><% end %>
64 66 </div>
65 67 </div>
66 68
67 69 <div id="navigation">
68 70 <ul>
69 71 <li class="selected"><%= link_to l(:label_home), { :controller => '' }, :class => "picHome" %></li>
70 72 <li><%= link_to l(:label_my_page), { :controller => 'account', :action => 'my_page'}, :class => "picUserPage" %></li>
71 73 <li><%= link_to l(:label_project_plural), { :controller => 'projects' }, :class => "picProject" %></li>
72 74
73 75 <% unless @project.nil? || @project.id.nil? %>
74 76 <li><%= link_to @project.name, { :controller => 'projects', :action => 'show', :id => @project }, :class => "picProject", :onmouseover => "buttonMouseover(event, 'menuProject');" %></li>
75 77 <% end %>
76 78
77 79 <% if loggedin? %>
78 80 <li><%= link_to l(:label_my_account), { :controller => 'account', :action => 'my_account' }, :class => "picUser" %></li>
79 81 <% end %>
80 82
81 83 <% if admin_loggedin? %>
82 84 <li><%= link_to l(:label_administration), { :controller => 'admin' }, :class => "picAdmin", :onmouseover => "buttonMouseover(event, 'menuAdmin');" %></li>
83 85 <% end %>
84 86
85 87 <li class="right"><%= link_to l(:label_help), { :controller => 'help', :ctrl => @params[:controller], :page => @params[:action] }, :target => "new", :class => "picHelp" %></li>
86 88
87 89 <% if loggedin? %>
88 90 <li class="right"><%= link_to l(:label_logout), { :controller => 'account', :action => 'logout' }, :class => "picUser" %></li>
89 91 <% else %>
90 92 <li class="right"><%= link_to l(:label_login), { :controller => 'account', :action => 'login' }, :class => "picUser" %></li>
91 93 <% end %>
92 94 </ul>
93 95 </div>
94 96 <script type='text/javascript'>if(document.getElementById) {document.write(menu_contenu);}</script>
95 97
96 98 <div id="subcontent">
97 99
98 100 <% unless @project.nil? || @project.id.nil? %>
99 101 <h2><%= @project.name %></h2>
100 102 <ul class="menublock">
101 103 <li><%= link_to l(:label_overview), :controller => 'projects', :action => 'show', :id => @project %></li>
102 104 <li><%= link_to l(:label_issue_plural), :controller => 'projects', :action => 'list_issues', :id => @project %></li>
103 105 <li><%= link_to l(:label_report_plural), :controller => 'reports', :action => 'issue_report', :id => @project %></li>
106 <li><%= link_to l(:label_activity), :controller => 'projects', :action => 'activity', :id => @project %></li>
104 107 <li><%= link_to l(:label_news_plural), :controller => 'projects', :action => 'list_news', :id => @project %></li>
105 108 <li><%= link_to l(:label_change_log), :controller => 'projects', :action => 'changelog', :id => @project %></li>
106 109 <li><%= link_to l(:label_document_plural), :controller => 'projects', :action => 'list_documents', :id => @project %></li>
107 110 <li><%= link_to l(:label_member_plural), :controller => 'projects', :action => 'list_members', :id => @project %></li>
108 111 <li><%= link_to l(:label_attachment_plural), :controller => 'projects', :action => 'list_files', :id => @project %></li>
109 112 <li><%= link_to_if_authorized l(:label_settings), :controller => 'projects', :action => 'settings', :id => @project %></li>
110 113 </ul>
111 114 <% end %>
112 115
113 116 <% if loggedin? and @logged_in_user.memberships.length > 0 %>
114 117 <h2><%=l(:label_my_projects) %></h2>
115 118 <ul class="menublock">
116 119 <% for membership in @logged_in_user.memberships %>
117 120 <li><%= link_to membership.project.name, :controller => 'projects', :action => 'show', :id => membership.project %></li>
118 121 <% end %>
119 122 </ul>
120 123 <% end %>
121 124 </div>
122 125
123 126 <div id="content">
124 127 <% if flash[:notice] %><p style="color: green"><%= flash[:notice] %></p><% end %>
125 128 <%= @content_for_layout %>
126 129 </div>
127 130
128 131 <div id="footer">
129 132 <p>
130 133 <%= auto_link $RDM_FOOTER_SIG %> |
131 134 <a href="http://redmine.org/" target="_new"><%= RDM_APP_NAME %></a> <%= RDM_APP_VERSION %>
132 135 </p>
133 136 </div>
134 137
135 138 </div>
136 139 </body>
137 140 </html> No newline at end of file
@@ -1,25 +1,27
1 1 <h2><%=l(:label_change_log)%></h2>
2 2
3 <div>
4
5 <div class="rightbox" style="width:140px;">
3 6 <%= start_form_tag %>
7 <strong><%=l(:label_tracker_plural)%></strong><br />
4 8 <% @trackers.each do |tracker| %>
5 9 <%= check_box_tag "tracker_ids[]", tracker.id, (@selected_tracker_ids.include? tracker.id.to_s) %>
6 <%= tracker.name %>
10 <%= tracker.name %><br />
7 11 <% end %>
8 &nbsp;&nbsp;<%= submit_tag l(:button_apply), :class => 'button-small' %>
9 <%= end_form_tag %><br />
10 &nbsp;
12 <p><center><%= submit_tag l(:button_apply), :class => 'button-small' %></center></p>
13 <%= end_form_tag %>
14 </div>
11 15
12 <div class="box">
13 16 <% ver_id = nil
14 17 @fixed_issues.each do |issue| %>
15 18 <% unless ver_id == issue.fixed_version_id %>
16 19 <% if ver_id %></ul><% end %>
17 20 <p><strong><%= issue.fixed_version.name %></strong> - <%= format_date(issue.fixed_version.effective_date) %><br />
18 21 <%=h issue.fixed_version.description %></p>
19 22 <ul>
20 23 <% ver_id = issue.fixed_version_id
21 24 end %>
22 25 <li><%= link_to issue.long_id, :controller => 'issues', :action => 'show', :id => issue %> [<%= issue.tracker.name %>]: <%= issue.subject %></li>
23 26 <% end %>
24
25 27 </div> No newline at end of file
@@ -1,57 +1,60
1 1 # redMine - project management software
2 2 # Copyright (C) 2006 Jean-Philippe Lang
3 3 #
4 4 # This program is free software; you can redistribute it and/or
5 5 # modify it under the terms of the GNU General Public License
6 6 # as published by the Free Software Foundation; either version 2
7 7 # of the License, or (at your option) any later version.
8 8 #
9 9 # This program is distributed in the hope that it will be useful,
10 10 # but WITHOUT ANY WARRANTY; without even the implied warranty of
11 11 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 12 # GNU General Public License for more details.
13 13 #
14 14 # You should have received a copy of the GNU General Public License
15 15 # along with this program; if not, write to the Free Software
16 16 # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
17 17
18 18
19 19 # To set your own configuration, rename this file to config_custom.rb
20 20 # and edit parameters below
21 21 # Don't forget to restart the application after any change.
22 22
23 23
24 24 # Application host name
25 25 # Used to provide absolute links in mail notifications
26 26 # $RDM_HOST_NAME = "somenet.foo"
27 27
28 28 # File storage path
29 29 # Directory used to store uploaded files
30 30 # #{RAILS_ROOT} represents application's home directory
31 31 # $RDM_STORAGE_PATH = "#{RAILS_ROOT}/files"
32 32
33 33 # Set $RDM_LOGIN_REQUIRED to true if you want to force users to login
34 34 # to access any page of the application
35 35 # $RDM_LOGIN_REQUIRED = false
36 36
37 37 # Uncomment to disable user self-registration
38 38 # $RDM_SELF_REGISTRATION = false
39 39
40 40 # Default langage ('en', 'es', 'fr' are available)
41 41 # $RDM_DEFAULT_LANG = 'en'
42 42
43 # Email adress used to send mail notifications
44 # $RDM_MAIL_FROM = "redmine@somenet.foo"
45
43 46 # Page title
44 47 # $RDM_HEADER_TITLE = "Title"
45 48
46 49 # Page sub-title
47 50 # $RDM_HEADER_SUBTITLE = "Sub title"
48 51
49 52 # Welcome page title
50 53 # $RDM_WELCOME_TITLE = "Welcome"
51 54
52 55 # Welcome page text
53 56 # $RDM_WELCOME_TEXT = ""
54 57
55 58 # Signature displayed in footer
56 59 # Email adresses will be automatically displayed as a mailto link
57 60 # $RDM_FOOTER_SIG = "admin@somenet.foo"
@@ -1,134 +1,136
1 1 # Be sure to restart your web server when you modify this file.
2 2
3 3 # Uncomment below to force Rails into production mode when
4 4 # you don't control web/app server and can't set it the proper way
5 5 # ENV['RAILS_ENV'] ||= 'production'
6 6
7 7 # Bootstrap the Rails environment, frameworks, and default configuration
8 8 require File.join(File.dirname(__FILE__), 'boot')
9 9
10 10 Rails::Initializer.run do |config|
11 11 # Settings in config/environments/* take precedence those specified here
12 12
13 13 # Skip frameworks you're not going to use
14 14 # config.frameworks -= [ :action_web_service, :action_mailer ]
15 15
16 16 # Add additional load paths for your own custom dirs
17 17 # config.load_paths += %W( #{RAILS_ROOT}/extras )
18 18
19 19 # Force all environments to use the same logger level
20 20 # (by default production uses :info, the others :debug)
21 21 # config.log_level = :debug
22 22
23 23 # Use the database for sessions instead of the file system
24 24 # (create the session table with 'rake create_sessions_table')
25 25 # config.action_controller.session_store = :active_record_store
26 26
27 27 # Enable page/fragment caching by setting a file-based store
28 28 # (remember to create the caching directory and make it readable to the application)
29 29 # config.action_controller.fragment_cache_store = :file_store, "#{RAILS_ROOT}/cache"
30 30
31 31 # Activate observers that should always be running
32 32 # config.active_record.observers = :cacher, :garbage_collector
33 33
34 34 # Make Active Record use UTC-base instead of local time
35 35 # config.active_record.default_timezone = :utc
36 36
37 37 # Use Active Record's schema dumper instead of SQL when creating the test database
38 38 # (enables use of different database adapters for development and test environments)
39 39 # config.active_record.schema_format = :ruby
40 40
41 41 # See Rails::Configuration for more options
42 42
43 43 # SMTP server configuration
44 44 config.action_mailer.server_settings = {
45 45 :address => "127.0.0.1",
46 46 :port => 25,
47 47 :domain => "somenet.foo",
48 48 :authentication => :login,
49 49 :user_name => "redmine",
50 50 :password => "redmine",
51 51 }
52 52
53 53 config.action_mailer.perform_deliveries = true
54 54
55 55 # Tell ActionMailer not to deliver emails to the real world.
56 56 # The :test delivery method accumulates sent emails in the
57 57 # ActionMailer::Base.deliveries array.
58 58 #config.action_mailer.delivery_method = :test
59 59 config.action_mailer.delivery_method = :smtp
60 60 end
61 61
62 62 # Add new inflection rules using the following format
63 63 # (all these examples are active by default):
64 64 # Inflector.inflections do |inflect|
65 65 # inflect.plural /^(ox)$/i, '\1en'
66 66 # inflect.singular /^(ox)en/i, '\1'
67 67 # inflect.irregular 'person', 'people'
68 68 # inflect.uncountable %w( fish sheep )
69 69 # end
70 70
71 71 if File.exist? File.join(File.dirname(__FILE__), 'config_custom.rb')
72 72 begin
73 73 print "=> Loading config_custom.rb... "
74 74 require File.join(File.dirname(__FILE__), 'config_custom')
75 75 puts "done."
76 76 rescue Exception => detail
77 77 puts
78 78 puts detail
79 79 puts detail.backtrace.join("\n")
80 80 puts "=> Error in config_custom.rb. Check your configuration."
81 81 exit
82 82 end
83 83 end
84 84
85 85 # IMPORTANT !!! DO NOT MODIFY PARAMETERS HERE
86 86 # Instead, rename config_custom.example.rb to config_custom.rb
87 87 # and set your own configuration in that file
88 88 # Parameters defined in config_custom.rb override those defined below
89 89
90 90 # application host name
91 91 $RDM_HOST_NAME ||= "localhost:3000"
92 92 # file storage path
93 93 $RDM_STORAGE_PATH ||= "#{RAILS_ROOT}/files"
94 94 # if RDM_LOGIN_REQUIRED is set to true, login is required to access the application
95 95 $RDM_LOGIN_REQUIRED ||= false
96 96 # default langage
97 97 $RDM_DEFAULT_LANG ||= 'en'
98 # email sender adress
99 $RDM_MAIL_FROM ||= "redmine@somenet.foo"
98 100
99 101 # page title
100 102 $RDM_HEADER_TITLE ||= "redMine"
101 103 # page sub-title
102 104 $RDM_HEADER_SUBTITLE ||= "Project management"
103 105 # footer signature
104 106 $RDM_FOOTER_SIG = "admin@somenet.foo"
105 107
106 108 # application name
107 109 RDM_APP_NAME = "redMine"
108 110 # application version
109 111 RDM_APP_VERSION = "0.3.0"
110 112
111 113 ActiveRecord::Errors.default_error_messages = {
112 114 :inclusion => "activerecord_error_inclusion",
113 115 :exclusion => "activerecord_error_exclusion",
114 116 :invalid => "activerecord_error_invalid",
115 117 :confirmation => "activerecord_error_confirmation",
116 118 :accepted => "activerecord_error_accepted",
117 119 :empty => "activerecord_error_empty",
118 120 :blank => "activerecord_error_blank",
119 121 :too_long => "activerecord_error_too_long",
120 122 :too_short => "activerecord_error_too_short",
121 123 :wrong_length => "activerecord_error_wrong_length",
122 124 :taken => "activerecord_error_taken",
123 125 :not_a_number => "activerecord_error_not_a_number"
124 126 }
125 127
126 128 ActionView::Base.field_error_proc = Proc.new{ |html_tag, instance| "#{html_tag}" }
127 129
128 130 GLoc.set_config :default_language => $RDM_DEFAULT_LANG
129 131 GLoc.clear_strings
130 132 GLoc.set_kcode
131 133 GLoc.load_localized_strings
132 134 GLoc.set_config(:raise_string_not_found_errors => false)
133 135
134 136
@@ -1,9 +1,9
1 1 class IssueMove < ActiveRecord::Migration
2 2 def self.up
3 Permission.create :controller => "projects", :action => "move_issues", :description => "button_move", :sort => 1061, :mail_option => 1, :mail_enabled => 0
3 Permission.create :controller => "projects", :action => "move_issues", :description => "button_move", :sort => 1061, :mail_option => 0, :mail_enabled => 0
4 4 end
5 5
6 6 def self.down
7 7 Permission.find(:first, :conditions => ["controller=? and action=?", 'projects', 'move_issues']).destroy
8 8 end
9 9 end
@@ -1,299 +1,302
1 1 _gloc_rule_default: '|n| n==1 ? "" : "_plural" '
2 2
3 3 actionview_datehelper_select_day_prefix:
4 4 actionview_datehelper_select_month_names: January,February,March,April,May,June,July,August,September,October,November,December
5 5 actionview_datehelper_select_month_names_abbr: Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,Dec
6 6 actionview_datehelper_select_month_prefix:
7 7 actionview_datehelper_select_year_prefix:
8 8 actionview_datehelper_time_in_words_day: 1 day
9 9 actionview_datehelper_time_in_words_day_plural: %d days
10 10 actionview_datehelper_time_in_words_hour_about: about an hour
11 11 actionview_datehelper_time_in_words_hour_about_plural: about %d hours
12 12 actionview_datehelper_time_in_words_hour_about_single: about an hour
13 13 actionview_datehelper_time_in_words_minute: 1 minute
14 14 actionview_datehelper_time_in_words_minute_half: half a minute
15 15 actionview_datehelper_time_in_words_minute_less_than: less than a minute
16 16 actionview_datehelper_time_in_words_minute_plural: %d minutes
17 17 actionview_datehelper_time_in_words_minute_single: 1 minute
18 18 actionview_datehelper_time_in_words_second_less_than: less than a second
19 19 actionview_datehelper_time_in_words_second_less_than_plural: less than %d seconds
20 20 actionview_instancetag_blank_option: Bitte auserwählt
21 21
22 22 activerecord_error_inclusion: ist nicht in der Liste eingeschlossen
23 23 activerecord_error_exclusion: ist reserviert
24 24 activerecord_error_invalid: ist unzulässig
25 25 activerecord_error_confirmation: bringt nicht Bestätigung zusammen
26 26 activerecord_error_accepted: muß angenommen werden
27 27 activerecord_error_empty: kann nicht leer sein
28 28 activerecord_error_blank: kann nicht leer sein
29 29 activerecord_error_too_long: ist zu lang
30 30 activerecord_error_too_short: ist zu kurz
31 31 activerecord_error_wrong_length: ist die falsche Länge
32 32 activerecord_error_taken: ist bereits genommen worden
33 33 activerecord_error_not_a_number: ist nicht eine Zahl
34 34 #activerecord_error_not_a_date: is not a valid date
35 35
36 36 general_fmt_age: %d yr
37 37 general_fmt_age_plural: %d yrs
38 38 general_fmt_date: %%b %%d, %%Y (%%a)
39 39 general_fmt_datetime: %%b %%d, %%Y (%%a), %%I:%%M %%p
40 40 general_fmt_datetime_short: %%b %%d, %%I:%%M %%p
41 41 general_fmt_time: %%I:%%M %%p
42 42 general_text_No: 'Nein'
43 43 general_text_Yes: 'Ja'
44 44 general_text_no: 'nein'
45 45 general_text_yes: 'ja'
46 46 general_lang_de: 'Deutsch'
47 47 general_csv_separator: ';'
48 48
49 49 notice_account_updated: Konto wurde erfolgreich aktualisiert.
50 50 notice_account_invalid_creditentials: Unzulässiger Benutzer oder Passwort
51 51 notice_account_password_updated: Passwort wurde erfolgreich aktualisiert.
52 52 notice_account_wrong_password: Falsches Passwort
53 53 notice_account_register_done: Konto wurde erfolgreich verursacht.
54 54 notice_account_unknown_email: Unbekannter Benutzer.
55 55 notice_can_t_change_password: Dieses Konto verwendet eine externe Authentisierung Quelle. Unmöglich, das Kennwort zu ändern.
56 56 notice_account_lost_email_sent: Ein email mit Anweisungen, ein neues Kennwort zu wählen ist dir geschickt worden.
57 57 notice_account_activated: Dein Konto ist aktiviert worden. Du kannst jetzt einloggen.
58 58 notice_successful_create: Erfolgreiche Kreation.
59 59 notice_successful_update: Erfolgreiches Update.
60 60 notice_successful_delete: Erfolgreiche Auslassung.
61 61 notice_successful_connection: Erfolgreicher Anschluß.
62 62 notice_file_not_found: Erbetene Akte besteht nicht oder ist gelöscht worden.
63 63 notice_locking_conflict: Data have been updated by another user.
64 64
65 #mail_subject_lost_password: Your redMine password
66 #mail_subject_register: redMine account activation
67
65 68 gui_validation_error: 1 Störung
66 69 gui_validation_error_plural: %d Störungen
67 70
68 71 field_name: Name
69 72 field_description: Beschreibung
70 73 field_summary: Zusammenfassung
71 74 field_is_required: Erforderlich
72 75 field_firstname: Vorname
73 76 field_lastname: Nachname
74 77 field_mail: Email
75 78 field_filename: Datei
76 79 field_filesize: Grootte
77 80 field_downloads: Downloads
78 81 field_author: Autor
79 82 field_created_on: Angelegt
80 83 field_updated_on: aktualisiert
81 84 field_field_format: Format
82 85 field_is_for_all: Für alle Projekte
83 86 field_possible_values: Mögliche Werte
84 87 field_regexp: Regulärer Ausdruck
85 88 field_min_length: Minimale Länge
86 89 field_max_length: Maximale Länge
87 90 field_value: Wert
88 91 field_category: Kategorie
89 92 field_title: Títel
90 93 field_project: Projekt
91 94 #field_issue: Issue
92 95 field_status: Status
93 96 field_notes: Anmerkungen
94 97 field_is_closed: Problem erledigt
95 98 #field_is_default: Default status
96 99 field_html_color: Farbe
97 100 field_tracker: Tracker
98 101 field_subject: Thema
99 102 #field_due_date: Due date
100 103 field_assigned_to: Zugewiesen an
101 104 field_priority: Priorität
102 105 field_fixed_version: Erledigt in Version
103 106 field_user: Benutzer
104 107 field_role: Rolle
105 108 field_homepage: Startseite
106 109 field_is_public: Öffentlich
107 110 #field_parent: Subprojekt von
108 111 field_is_in_chlog: Ansicht der Issues in der Historie
109 112 field_login: Mitgliedsname
110 113 field_mail_notification: Mailbenachrichtigung
111 114 #field_admin: Administrator
112 115 field_locked: Gesperrt
113 116 field_last_login_on: Letzte Anmeldung
114 117 field_language: Sprache
115 118 field_effective_date: Datum
116 119 field_password: Passwort
117 120 field_new_password: Neues Passwort
118 121 field_password_confirmation: Bestätigung
119 122 field_version: Version
120 123 field_type: Typ
121 124 field_host: Host
122 125 #field_port: Port
123 126 #field_account: Account
124 127 #field_base_dn: Base DN
125 128 #field_attr_login: Login attribute
126 129 #field_attr_firstname: Firstname attribute
127 130 #field_attr_lastname: Lastname attribute
128 131 #field_attr_mail: Email attribute
129 132 #field_onthefly: On-the-fly user creation
130 133
131 134 label_user: Benutzer
132 135 label_user_plural: Benutzer
133 136 label_user_new: Neuer Benutzer
134 137 label_project: Projekt
135 138 label_project_new: Neues Projekt
136 139 label_project_plural: Projekte
137 140 #label_project_latest: Latest projects
138 141 #label_issue: Issue
139 142 #label_issue_new: New issue
140 143 #label_issue_plural: Issues
141 144 #label_issue_view_all: View all issues
142 145 label_document: Dokument
143 146 label_document_new: Neues Dokument
144 147 label_document_plural: Dokumente
145 148 label_role: Rolle
146 149 label_role_plural: Rollen
147 150 label_role_new: Neue Rolle
148 151 label_role_and_permissions: Rollen und Rechte
149 152 label_member: Mitglied
150 153 label_member_new: Neues Mitglied
151 154 label_member_plural: Mitglieder
152 155 label_tracker: Tracker
153 156 label_tracker_plural: Tracker
154 157 label_tracker_new: Neuer Tracker
155 158 label_workflow: Workflow
156 159 label_issue_status: Problem Status
157 160 label_issue_status_plural: Problem Stati
158 161 label_issue_status_new: Neuer Status
159 162 label_issue_category: Problem Kategorie
160 163 label_issue_category_plural: Problem Kategorien
161 164 label_issue_category_new: Neue Kategorie
162 165 label_custom_field: Benutzerdefiniertes Feld
163 166 label_custom_field_plural: Benutzerdefinierte Felder
164 167 label_custom_field_new: Neues Feld
165 168 label_enumerations: Enumerationen
166 169 label_enumeration_new: Neuer Wert
167 170 label_information: Information
168 171 label_information_plural: Informationen
169 172 #label_please_login: Please login
170 173 label_register: Anmelden
171 174 label_password_lost: Passwort vergessen
172 175 label_home: Hauptseite
173 176 label_my_page: Meine Seite
174 177 label_my_account: Mein Konto
175 178 label_my_projects: Meine Projekte
176 179 label_administration: Administration
177 180 label_login: Einloggen
178 181 label_logout: Abmelden
179 182 label_help: Hilfe
180 183 label_reported_issues: Gemeldete Issues
181 184 label_assigned_to_me_issues: Mir zugewiesen
182 185 label_last_login: Letzte Anmeldung
183 186 #label_last_updates: Last updated
184 187 #label_last_updates_plural: %d last updated
185 188 label_registered_on: Angemeldet am
186 189 label_activity: Aktivität
187 190 label_new: Neue
188 191 label_logged_as: Angemeldet als
189 192 #label_environment: Environment
190 193 label_authentication: Authentisierung
191 194 #label_auth_source: Authentification mode
192 195 #label_auth_source_new: New authentication mode
193 196 #label_auth_source_plural: Authentification modes
194 197 #label_subproject: Subproject
195 198 #label_subproject_plural: Subprojects
196 199 label_min_max_length: Min - Max Länge
197 200 label_list: Liste
198 201 label_date: Date
199 202 label_integer: Zahl
200 203 label_boolean: Boolesch
201 204 #label_string: String
202 205 label_text: Text
203 206 label_attribute: Attribut
204 207 label_attribute_plural: Attribute
205 208 #label_download: %d Download
206 209 #label_download_plural: %d Downloads
207 210 label_no_data: Nichts anzuzeigen
208 211 label_change_status: Statuswechsel
209 212 label_history: Historie
210 213 label_attachment: Datei
211 214 label_attachment_new: Neue Datei
212 215 #label_attachment_delete: Delete file
213 216 label_attachment_plural: Dateien
214 217 label_report: Bericht
215 218 label_report_plural: Berichte
216 219 #label_news: Neuigkeiten
217 220 #label_news_new: Add news
218 221 #label_news_plural: Neuigkeiten
219 222 label_news_latest: Letzte Neuigkeiten
220 223 label_news_view_all: Alle Neuigkeiten anzeigen
221 224 label_change_log: Change log
222 225 label_settings: Konfiguration
223 226 label_overview: Übersicht
224 227 label_version: Version
225 228 label_version_new: Neue Version
226 229 label_version_plural: Versionen
227 230 label_confirmation: Bestätigung
228 231 #label_export_csv: Export to CSV
229 232 #label_export_pdf: Export to PDF
230 233 label_read: Lesen...
231 234 label_public_projects: Öffentliche Projekte
232 235 #label_open_issues: Open
233 236 #label_open_issues_plural: Open
234 237 #label_closed_issues: Closed
235 238 #label_closed_issues_plural: Closed
236 239 label_total: Gesamtzahl
237 240 label_permissions: Berechtigungen
238 241 label_current_status: Gegenwärtiger Status
239 242 label_new_statuses_allowed: Neue Status gewährten
240 243 label_all: Alle
241 244 label_none: Kein
242 245 label_next: Weiter
243 246 label_previous: Zurück
244 247 label_used_by: Benutzt von
245 248 #label_details: Details...
246 249 #label_add_note: Add a note
247 250 #label_per_page: Per page
248 251
249 252 button_login: Einloggen
250 253 button_submit: Einreichen
251 254 button_save: Speichern
252 255 button_check_all: Alles auswählen
253 256 button_uncheck_all: Alles abwählen
254 257 button_delete: Löschen
255 258 button_create: Anlegen
256 259 button_test: Testen
257 260 button_edit: Bearbeiten
258 261 button_add: Hinzufügen
259 262 button_change: Wechseln
260 263 button_apply: Anwenden
261 264 button_clear: Zurücksetzen
262 265 button_lock: Verriegeln
263 266 button_unlock: Entriegeln
264 267 button_download: Fernzuladen
265 268 button_list: Aufzulisten
266 269 button_view: Siehe
267 270 button_move: Bewegen
268 271 #button_back: Back
269 272
270 273 text_select_mail_notifications: Aktionen für die Mailbenachrichtigung aktiviert werden soll.
271 274 text_regexp_info: eg. ^[A-Z0-9]+$
272 275 text_min_max_length_info: 0 heisst keine Beschränkung
273 276 #text_possible_values_info: values separated with |
274 277 text_project_destroy_confirmation: Sind sie sicher, daß sie das Projekt löschen wollen ?
275 278 text_workflow_edit: Auswahl Workflow zum Bearbeiten
276 279 text_are_you_sure: Sind sie sicher ?
277 280
278 281 default_role_manager: Manager
279 282 default_role_developper: Developer
280 283 default_role_reporter: Reporter
281 284 default_tracker_bug: Fehler
282 285 default_tracker_feature: Feature
283 286 default_tracker_support: Support
284 287 default_issue_status_new: Neu
285 288 default_issue_status_assigned: Zugewiesen
286 289 default_issue_status_resolved: Gelöst
287 290 default_issue_status_feedback: Feedback
288 291 default_issue_status_closed: Erledigt
289 292 default_issue_status_rejected: Abgewiesen
290 293 default_doc_category_user: Benutzerdokumentation
291 294 default_doc_category_tech: Technische Dokumentation
292 295 default_priority_low: Niedrig
293 296 default_priority_normal: Normal
294 297 default_priority_high: Hoch
295 298 default_priority_urgent: Dringend
296 299 default_priority_immediate: Sofort
297 300
298 301 enumeration_issue_priorities: Issue-Prioritäten
299 302 enumeration_doc_categories: Dokumentenkategorien
@@ -1,299 +1,302
1 1 _gloc_rule_default: '|n| n==1 ? "" : "_plural" '
2 2
3 3 actionview_datehelper_select_day_prefix:
4 4 actionview_datehelper_select_month_names: January,February,March,April,May,June,July,August,September,October,November,December
5 5 actionview_datehelper_select_month_names_abbr: Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,Dec
6 6 actionview_datehelper_select_month_prefix:
7 7 actionview_datehelper_select_year_prefix:
8 8 actionview_datehelper_time_in_words_day: 1 day
9 9 actionview_datehelper_time_in_words_day_plural: %d days
10 10 actionview_datehelper_time_in_words_hour_about: about an hour
11 11 actionview_datehelper_time_in_words_hour_about_plural: about %d hours
12 12 actionview_datehelper_time_in_words_hour_about_single: about an hour
13 13 actionview_datehelper_time_in_words_minute: 1 minute
14 14 actionview_datehelper_time_in_words_minute_half: half a minute
15 15 actionview_datehelper_time_in_words_minute_less_than: less than a minute
16 16 actionview_datehelper_time_in_words_minute_plural: %d minutes
17 17 actionview_datehelper_time_in_words_minute_single: 1 minute
18 18 actionview_datehelper_time_in_words_second_less_than: less than a second
19 19 actionview_datehelper_time_in_words_second_less_than_plural: less than %d seconds
20 20 actionview_instancetag_blank_option: Please select
21 21
22 22 activerecord_error_inclusion: is not included in the list
23 23 activerecord_error_exclusion: is reserved
24 24 activerecord_error_invalid: is invalid
25 25 activerecord_error_confirmation: doesn't match confirmation
26 26 activerecord_error_accepted: must be accepted
27 27 activerecord_error_empty: can't be empty
28 28 activerecord_error_blank: can't be blank
29 29 activerecord_error_too_long: is too long
30 30 activerecord_error_too_short: is too short
31 31 activerecord_error_wrong_length: is the wrong length
32 32 activerecord_error_taken: has already been taken
33 33 activerecord_error_not_a_number: is not a number
34 34 activerecord_error_not_a_date: is not a valid date
35 35
36 36 general_fmt_age: %d yr
37 37 general_fmt_age_plural: %d yrs
38 38 general_fmt_date: %%m/%%d/%%Y
39 39 general_fmt_datetime: %%m/%%d/%%Y %%I:%%M %%p
40 40 general_fmt_datetime_short: %%b %%d, %%I:%%M %%p
41 41 general_fmt_time: %%I:%%M %%p
42 42 general_text_No: 'No'
43 43 general_text_Yes: 'Yes'
44 44 general_text_no: 'no'
45 45 general_text_yes: 'yes'
46 46 general_lang_en: 'English'
47 47 general_csv_separator: ','
48 48
49 49 notice_account_updated: Account was successfully updated.
50 50 notice_account_invalid_creditentials: Invalid user or password
51 51 notice_account_password_updated: Password was successfully updated.
52 52 notice_account_wrong_password: Wrong password
53 53 notice_account_register_done: Account was successfully created.
54 54 notice_account_unknown_email: Unknown user.
55 55 notice_can_t_change_password: This account uses an external authentication source. Impossible to change the password.
56 56 notice_account_lost_email_sent: An email with instructions to choose a new password has been sent to you.
57 57 notice_account_activated: Your account has been activated. You can now log in.
58 58 notice_successful_create: Successful creation.
59 59 notice_successful_update: Successful update.
60 60 notice_successful_delete: Successful deletion.
61 61 notice_successful_connection: Successful connection.
62 62 notice_file_not_found: Requested file doesn't exist or has been deleted.
63 63 notice_locking_conflict: Data have been updated by another user.
64 64
65 mail_subject_lost_password: Your redMine password
66 mail_subject_register: redMine account activation
67
65 68 gui_validation_error: 1 error
66 69 gui_validation_error_plural: %d errors
67 70
68 71 field_name: Name
69 72 field_description: Description
70 73 field_summary: Summary
71 74 field_is_required: Required
72 75 field_firstname: Firstname
73 76 field_lastname: Lastname
74 77 field_mail: Email
75 78 field_filename: File
76 79 field_filesize: Size
77 80 field_downloads: Downloads
78 81 field_author: Author
79 82 field_created_on: Created
80 83 field_updated_on: Updated
81 84 field_field_format: Format
82 85 field_is_for_all: For all projects
83 86 field_possible_values: Possible values
84 87 field_regexp: Regular expression
85 88 field_min_length: Minimum length
86 89 field_max_length: Maximum length
87 90 field_value: Value
88 91 field_category: Category
89 92 field_title: Title
90 93 field_project: Project
91 94 field_issue: Issue
92 95 field_status: Status
93 96 field_notes: Notes
94 97 field_is_closed: Issue closed
95 98 field_is_default: Default status
96 99 field_html_color: Color
97 100 field_tracker: Tracker
98 101 field_subject: Subject
99 102 field_due_date: Due date
100 103 field_assigned_to: Assigned to
101 104 field_priority: Priority
102 105 field_fixed_version: Fixed version
103 106 field_user: User
104 107 field_role: Role
105 108 field_homepage: Homepage
106 109 field_is_public: Public
107 110 field_parent: Subproject of
108 111 field_is_in_chlog: Issues displayed in changelog
109 112 field_login: Login
110 113 field_mail_notification: Mail notifications
111 114 field_admin: Administrator
112 115 field_locked: Locked
113 116 field_last_login_on: Last connection
114 117 field_language: Language
115 118 field_effective_date: Date
116 119 field_password: Password
117 120 field_new_password: New password
118 121 field_password_confirmation: Confirmation
119 122 field_version: Version
120 123 field_type: Type
121 124 field_host: Host
122 125 field_port: Port
123 126 field_account: Account
124 127 field_base_dn: Base DN
125 128 field_attr_login: Login attribute
126 129 field_attr_firstname: Firstname attribute
127 130 field_attr_lastname: Lastname attribute
128 131 field_attr_mail: Email attribute
129 132 field_onthefly: On-the-fly user creation
130 133
131 134 label_user: User
132 135 label_user_plural: Users
133 136 label_user_new: New user
134 137 label_project: Project
135 138 label_project_new: New project
136 139 label_project_plural: Projects
137 140 label_project_latest: Latest projects
138 141 label_issue: Issue
139 142 label_issue_new: New issue
140 143 label_issue_plural: Issues
141 144 label_issue_view_all: View all issues
142 145 label_document: Document
143 146 label_document_new: New document
144 147 label_document_plural: Documents
145 148 label_role: Role
146 149 label_role_plural: Roles
147 150 label_role_new: New role
148 151 label_role_and_permissions: Roles and permissions
149 152 label_member: Member
150 153 label_member_new: New member
151 154 label_member_plural: Members
152 155 label_tracker: Tracker
153 156 label_tracker_plural: Trackers
154 157 label_tracker_new: New tracker
155 158 label_workflow: Workflow
156 159 label_issue_status: Issue status
157 160 label_issue_status_plural: Issue statuses
158 161 label_issue_status_new: New status
159 162 label_issue_category: Issue category
160 163 label_issue_category_plural: Issue categories
161 164 label_issue_category_new: New category
162 165 label_custom_field: Custom field
163 166 label_custom_field_plural: Custom fields
164 167 label_custom_field_new: New custom field
165 168 label_enumerations: Enumerations
166 169 label_enumeration_new: New value
167 170 label_information: Information
168 171 label_information_plural: Information
169 172 label_please_login: Please login
170 173 label_register: Register
171 174 label_password_lost: Lost password
172 175 label_home: Home
173 176 label_my_page: My page
174 177 label_my_account: My account
175 178 label_my_projects: My projects
176 179 label_administration: Administration
177 180 label_login: Login
178 181 label_logout: Logout
179 182 label_help: Help
180 183 label_reported_issues: Reported issues
181 184 label_assigned_to_me_issues: Issues assigned to me
182 185 label_last_login: Last connection
183 186 label_last_updates: Last updated
184 187 label_last_updates_plural: %d last updated
185 188 label_registered_on: Registered on
186 189 label_activity: Activity
187 190 label_new: New
188 191 label_logged_as: Logged as
189 192 label_environment: Environment
190 193 label_authentication: Authentication
191 194 label_auth_source: Authentification mode
192 195 label_auth_source_new: New authentication mode
193 196 label_auth_source_plural: Authentification modes
194 197 label_subproject: Subproject
195 198 label_subproject_plural: Subprojects
196 199 label_min_max_length: Min - Max length
197 200 label_list: List
198 201 label_date: Date
199 202 label_integer: Integer
200 203 label_boolean: Boolean
201 204 label_string: String
202 205 label_text: Text
203 206 label_attribute: Attribute
204 207 label_attribute_plural: Attributes
205 208 label_download: %d Download
206 209 label_download_plural: %d Downloads
207 210 label_no_data: No data to display
208 211 label_change_status: Change status
209 212 label_history: History
210 213 label_attachment: File
211 214 label_attachment_new: New file
212 215 label_attachment_delete: Delete file
213 216 label_attachment_plural: Files
214 217 label_report: Report
215 218 label_report_plural: Reports
216 219 label_news: News
217 220 label_news_new: Add news
218 221 label_news_plural: News
219 222 label_news_latest: Latest news
220 223 label_news_view_all: View all news
221 224 label_change_log: Change log
222 225 label_settings: Settings
223 226 label_overview: Overview
224 227 label_version: Version
225 228 label_version_new: New version
226 229 label_version_plural: Versions
227 230 label_confirmation: Confirmation
228 231 label_export_csv: Export to CSV
229 232 label_export_pdf: Export to PDF
230 233 label_read: Read...
231 234 label_public_projects: Public projects
232 235 label_open_issues: Open
233 236 label_open_issues_plural: Open
234 237 label_closed_issues: Closed
235 238 label_closed_issues_plural: Closed
236 239 label_total: Total
237 240 label_permissions: Permissions
238 241 label_current_status: Current status
239 242 label_new_statuses_allowed: New statuses allowed
240 243 label_all: All
241 244 label_none: None
242 245 label_next: Next
243 246 label_previous: Previous
244 247 label_used_by: Used by
245 248 label_details: Details...
246 249 label_add_note: Add a note
247 250 label_per_page: Per page
248 251
249 252 button_login: Login
250 253 button_submit: Submit
251 254 button_save: Save
252 255 button_check_all: Check all
253 256 button_uncheck_all: Uncheck all
254 257 button_delete: Delete
255 258 button_create: Create
256 259 button_test: Test
257 260 button_edit: Edit
258 261 button_add: Add
259 262 button_change: Change
260 263 button_apply: Apply
261 264 button_clear: Clear
262 265 button_lock: Lock
263 266 button_unlock: Unlock
264 267 button_download: Download
265 268 button_list: List
266 269 button_view: View
267 270 button_move: Move
268 271 button_back: Back
269 272
270 273 text_select_mail_notifications: Select actions for which mail notifications should be sent.
271 274 text_regexp_info: eg. ^[A-Z0-9]+$
272 275 text_min_max_length_info: 0 means no restriction
273 276 text_possible_values_info: values separated with |
274 277 text_project_destroy_confirmation: Are you sure you want to delete this project and all related data ?
275 278 text_workflow_edit: Select a role and a tracker to edit the workflow
276 279 text_are_you_sure: Are you sure ?
277 280
278 281 default_role_manager: Manager
279 282 default_role_developper: Developer
280 283 default_role_reporter: Reporter
281 284 default_tracker_bug: Bug
282 285 default_tracker_feature: Feature
283 286 default_tracker_support: Support
284 287 default_issue_status_new: New
285 288 default_issue_status_assigned: Assigned
286 289 default_issue_status_resolved: Resolved
287 290 default_issue_status_feedback: Feedback
288 291 default_issue_status_closed: Closed
289 292 default_issue_status_rejected: Rejected
290 293 default_doc_category_user: User documentation
291 294 default_doc_category_tech: Technical documentation
292 295 default_priority_low: Low
293 296 default_priority_normal: Normal
294 297 default_priority_high: High
295 298 default_priority_urgent: Urgent
296 299 default_priority_immediate: Immediate
297 300
298 301 enumeration_issue_priorities: Issue priorities
299 302 enumeration_doc_categories: Document categories
@@ -1,299 +1,302
1 1 _gloc_rule_default: '|n| n==1 ? "" : "_plural" '
2 2
3 3 actionview_datehelper_select_day_prefix:
4 4 actionview_datehelper_select_month_names: Enero,Febrero,Marzo,Abril,Mayo,Junio,Julio,Agosto,Septiembre,Octubre,Noviembre,Diciembre
5 5 actionview_datehelper_select_month_names_abbr: Ene,Feb,Mar,Abr,Mayo,Jun,Jul,Ago,Sep,Oct,Nov,Dic
6 6 actionview_datehelper_select_month_prefix:
7 7 actionview_datehelper_select_year_prefix:
8 8 actionview_datehelper_time_in_words_day: 1 day
9 9 actionview_datehelper_time_in_words_day_plural: %d days
10 10 actionview_datehelper_time_in_words_hour_about: about an hour
11 11 actionview_datehelper_time_in_words_hour_about_plural: about %d hours
12 12 actionview_datehelper_time_in_words_hour_about_single: about an hour
13 13 actionview_datehelper_time_in_words_minute: 1 minute
14 14 actionview_datehelper_time_in_words_minute_half: half a minute
15 15 actionview_datehelper_time_in_words_minute_less_than: less than a minute
16 16 actionview_datehelper_time_in_words_minute_plural: %d minutes
17 17 actionview_datehelper_time_in_words_minute_single: 1 minute
18 18 actionview_datehelper_time_in_words_second_less_than: less than a second
19 19 actionview_datehelper_time_in_words_second_less_than_plural: less than %d seconds
20 20 actionview_instancetag_blank_option: Please select
21 21
22 22 activerecord_error_inclusion: is not included in the list
23 23 activerecord_error_exclusion: is reserved
24 24 activerecord_error_invalid: is invalid
25 25 activerecord_error_confirmation: doesn't match confirmation
26 26 activerecord_error_accepted: must be accepted
27 27 activerecord_error_empty: can't be empty
28 28 activerecord_error_blank: can't be blank
29 29 activerecord_error_too_long: is too long
30 30 activerecord_error_too_short: is too short
31 31 activerecord_error_wrong_length: is the wrong length
32 32 activerecord_error_taken: has already been taken
33 33 activerecord_error_not_a_number: is not a number
34 34 #activerecord_error_not_a_date: is not a valid date
35 35
36 36 general_fmt_age: %d año
37 37 general_fmt_age_plural: %d años
38 38 general_fmt_date: %%d/%%m/%%Y
39 39 general_fmt_datetime: %%d/%%m/%%Y %%H:%%M
40 40 general_fmt_datetime_short: %%d/%%m %%H:%%M
41 41 general_fmt_time: %%H:%%M
42 42 general_text_No: 'No'
43 43 general_text_Yes: 'Sí'
44 44 general_text_no: 'no'
45 45 general_text_yes: 'sí'
46 46 general_lang_es: 'Español'
47 47 general_csv_separator: ';'
48 48
49 49 notice_account_updated: Account was successfully updated.
50 50 notice_account_invalid_creditentials: Invalid user or password
51 51 notice_account_password_updated: Password was successfully updated.
52 52 notice_account_wrong_password: Wrong password
53 53 notice_account_register_done: Account was successfully created.
54 54 notice_account_unknown_email: Unknown user.
55 55 notice_can_t_change_password: This account uses an external authentication source. Impossible to change the password.
56 56 notice_account_lost_email_sent: An email with instructions to choose a new password has been sent to you.
57 57 notice_account_activated: Your account has been activated. You can now log in.
58 58 notice_successful_create: Successful creation.
59 59 notice_successful_update: Successful update.
60 60 notice_successful_delete: Successful deletion.
61 61 notice_successful_connection: Successful connection.
62 62 notice_file_not_found: Requested file doesn't exist or has been deleted.
63 63 notice_locking_conflict: Data have been updated by another user.
64 64
65 #mail_subject_lost_password: Your redMine password
66 #mail_subject_register: redMine account activation
67
65 68 gui_validation_error: 1 error
66 69 gui_validation_error_plural: %d errores
67 70
68 71 field_name: Nombre
69 72 field_description: Descripción
70 73 field_summary: Resumen
71 74 field_is_required: Obligatorio
72 75 field_firstname: Nombre
73 76 field_lastname: Apellido
74 77 field_mail: Email
75 78 field_filename: Fichero
76 79 field_filesize: Tamaño
77 80 field_downloads: Telecargas
78 81 field_author: Autor
79 82 field_created_on: Creado
80 83 field_updated_on: Actualizado
81 84 field_field_format: Formato
82 85 field_is_for_all: Para todos los proyectos
83 86 field_possible_values: Valores posibles
84 87 field_regexp: Expresión regular
85 88 #field_min_length: Minimum length
86 89 #field_max_length: Maximum length
87 90 field_value: Valor
88 91 field_category: Categoría
89 92 field_title: Título
90 93 field_project: Proyecto
91 94 field_issue: Petición
92 95 field_status: Estatuto
93 96 field_notes: Notas
94 97 field_is_closed: Petición resuelta
95 98 field_is_default: Estatuto por defecto
96 99 field_html_color: Color
97 100 field_tracker: Tracker
98 101 field_subject: Tema
99 102 #field_due_date: Due date
100 103 field_assigned_to: Asignado a
101 104 field_priority: Prioridad
102 105 field_fixed_version: Versión corregida
103 106 field_user: Usuario
104 107 field_role: Papel
105 108 field_homepage: Sitio web
106 109 field_is_public: Público
107 110 #field_parent: Subproject de
108 111 field_is_in_chlog: Consultar las peticiones en el histórico
109 112 field_login: Identificador
110 113 field_mail_notification: Notificación por mail
111 114 field_admin: Administrador
112 115 field_locked: Cerrado
113 116 field_last_login_on: Última conexión
114 117 field_language: Lengua
115 118 field_effective_date: Fecha
116 119 field_password: Contraseña
117 120 field_new_password: Nueva contraseña
118 121 field_password_confirmation: Confirmación
119 122 field_version: Versión
120 123 field_type: Tipo
121 124 #field_host: Host
122 125 #field_port: Port
123 126 #field_account: Account
124 127 #field_base_dn: Base DN
125 128 #field_attr_login: Login attribute
126 129 #field_attr_firstname: Firstname attribute
127 130 #field_attr_lastname: Lastname attribute
128 131 #field_attr_mail: Email attribute
129 132 #field_onthefly: On-the-fly user creation
130 133
131 134 label_user: Usuario
132 135 label_user_plural: Usuarios
133 136 label_user_new: Nuevo usuario
134 137 label_project: Proyecto
135 138 label_project_new: Nuevo proyecto
136 139 label_project_plural: Proyectos
137 140 #label_project_latest: Latest projects
138 141 label_issue: Petición
139 142 label_issue_new: Nueva petición
140 143 label_issue_plural: Peticiones
141 144 label_issue_view_all: Ver todas las peticiones
142 145 label_document: Documento
143 146 label_document_new: Nuevo documento
144 147 label_document_plural: Documentos
145 148 label_role: Papel
146 149 label_role_plural: Papeles
147 150 label_role_new: Nuevo papel
148 151 label_role_and_permissions: Papeles y permisos
149 152 label_member: Miembro
150 153 label_member_new: Nuevo miembro
151 154 label_member_plural: Miembros
152 155 label_tracker: Tracker
153 156 label_tracker_plural: Trackers
154 157 label_tracker_new: Nuevo tracker
155 158 label_workflow: Workflow
156 159 label_issue_status: Estatuto de petición
157 160 label_issue_status_plural: Estatutos de las peticiones
158 161 label_issue_status_new: Nuevo estatuto
159 162 label_issue_category: Categoría de las peticiones
160 163 label_issue_category_plural: Categorías de las peticiones
161 164 label_issue_category_new: Nueva categoría
162 165 label_custom_field: Campo personalizado
163 166 label_custom_field_plural: Campos personalizados
164 167 label_custom_field_new: Nuevo campo personalizado
165 168 label_enumerations: Listas de valores
166 169 label_enumeration_new: Nuevo valor
167 170 label_information: Informacion
168 171 label_information_plural: Informaciones
169 172 label_please_login: Conexión
170 173 #label_register: Register
171 174 label_password_lost: ¿Olvidaste la contraseña?
172 175 label_home: Acogida
173 176 label_my_page: Mi página
174 177 label_my_account: Mi cuenta
175 178 label_my_projects: Mis proyectos
176 179 label_administration: Administración
177 180 label_login: Conexión
178 181 label_logout: Desconexión
179 182 label_help: Ayuda
180 183 label_reported_issues: Peticiones registradas
181 184 label_assigned_to_me_issues: Peticiones que me están asignadas
182 185 label_last_login: Última conexión
183 186 label_last_updates: Actualizado
184 187 label_last_updates_plural: %d Actualizados
185 188 label_registered_on: Inscrito el
186 189 label_activity: Actividad
187 190 label_new: Nuevo
188 191 label_logged_as: Conectado como
189 192 #label_environment: Environment
190 193 #label_authentication: Authentication
191 194 #label_auth_source: Authentification mode
192 195 #label_auth_source_new: New authentication mode
193 196 #label_auth_source_plural: Authentification modes
194 197 #label_subproject: Subproject
195 198 #label_subproject_plural: Subprojects
196 199 #label_min_max_length: Min - Max length
197 200 #label_list: List
198 201 label_date: Fecha
199 202 #label_integer: Integer
200 203 #label_boolean: Boolean
201 204 #label_string: String
202 205 #label_text: Text
203 206 #label_attribute: Attribute
204 207 #label_attribute_plural: Attributes
205 208 label_download: %d Telecarga
206 209 label_download_plural: %d Telecargas
207 210 #label_no_data: No data to display
208 211 label_change_status: Cambiar el estatuto
209 212 label_history: Histórico
210 213 label_attachment: Fichero
211 214 label_attachment_new: Nuevo fichero
212 215 #label_attachment_delete: Delete file
213 216 label_attachment_plural: Ficheros
214 217 #label_report: Report
215 218 #label_report_plural: Reports
216 219 label_news: Noticia
217 220 label_news_new: Nueva noticia
218 221 label_news_plural: Noticias
219 222 label_news_latest: Últimas noticias
220 223 label_news_view_all: Ver todas las noticias
221 224 label_change_log: Cambios
222 225 label_settings: Configuración
223 226 label_overview: Vistazo
224 227 label_version: Versión
225 228 label_version_new: Nueva versión
226 229 label_version_plural: Versiónes
227 230 label_confirmation: Confirmación
228 231 label_export_csv: Exportar a CSV
229 232 label_export_pdf: Exportar a PDF
230 233 label_read: Leer...
231 234 label_public_projects: Proyectos publicos
232 235 label_open_issues: Abierta
233 236 label_open_issues_plural: Abiertas
234 237 label_closed_issues: Cerrada
235 238 label_closed_issues_plural: Cerradas
236 239 label_total: Total
237 240 label_permissions: Permisos
238 241 #label_current_status: Current status
239 242 label_new_statuses_allowed: Nuevos estatutos autorizados
240 243 label_all: Todos
241 244 label_none: Ninguno
242 245 label_next: Próximo
243 246 label_previous: Precedente
244 247 label_used_by: Utilizado por
245 248 #label_details: Details...
246 249 #label_add_note: Add a note
247 250 #label_per_page: Per page
248 251
249 252 button_login: Conexión
250 253 button_submit: Someter
251 254 button_save: Validar
252 255 button_check_all: Seleccionar todo
253 256 button_uncheck_all: No seleccionar nada
254 257 button_delete: Suprimir
255 258 button_create: Crear
256 259 button_test: Testar
257 260 button_edit: Modificar
258 261 button_add: Añadir
259 262 button_change: Cambiar
260 263 button_apply: Aplicar
261 264 button_clear: Anular
262 265 button_lock: Bloquear
263 266 button_unlock: Desbloquear
264 267 button_download: Telecargar
265 268 button_list: Listar
266 269 button_view: Ver
267 270 button_move: Mover
268 271 #button_back: Back
269 272
270 273 text_select_mail_notifications: Seleccionar las actividades que necesitan la activación de la notificación por mail.
271 274 text_regexp_info: eg. ^[A-Z0-9]+$
272 275 text_min_max_length_info: 0 para ninguna restricción
273 276 #text_possible_values_info: values separated with |
274 277 text_project_destroy_confirmation: ¿ Estás seguro de querer eliminar el proyecto ?
275 278 text_workflow_edit: Seleccionar un workflow para actualizar
276 279 text_are_you_sure: ¿ Estás seguro ?
277 280
278 281 default_role_manager: Manager
279 282 default_role_developper: Desarrollador
280 283 default_role_reporter: Informador
281 284 default_tracker_bug: Anomalía
282 285 default_tracker_feature: Evolución
283 286 default_tracker_support: Asistencia
284 287 default_issue_status_new: Nuevo
285 288 default_issue_status_assigned: Asignada
286 289 default_issue_status_resolved: Resuelta
287 290 default_issue_status_feedback: Comentario
288 291 default_issue_status_closed: Cerrada
289 292 default_issue_status_rejected: Rechazada
290 293 default_doc_category_user: Documentación del usuario
291 294 default_doc_category_tech: Documentación tecnica
292 295 default_priority_low: Bajo
293 296 default_priority_normal: Normal
294 297 default_priority_high: Alto
295 298 default_priority_urgent: Urgente
296 299 default_priority_immediate: Ahora
297 300
298 301 enumeration_issue_priorities: Prioridad de las peticiones
299 302 enumeration_doc_categories: Categorías del documento
@@ -1,299 +1,302
1 1 _gloc_rule_default: '|n| n<=1 ? "" : "_plural" '
2 2
3 3 actionview_datehelper_select_day_prefix:
4 4 actionview_datehelper_select_month_names: Janvier,Février,Mars,Avril,Mai,Juin,Juillet,Août,Septembre,Octobre,Novembre,Décembre
5 5 actionview_datehelper_select_month_names_abbr: Jan,Fév,Mars,Avril,Mai,Juin,Juil,Août,Sept,Oct,Nov,Déc
6 6 actionview_datehelper_select_month_prefix:
7 7 actionview_datehelper_select_year_prefix:
8 8 actionview_datehelper_time_in_words_day: 1 jour
9 9 actionview_datehelper_time_in_words_day_plural: %d jours
10 10 actionview_datehelper_time_in_words_hour_about: about an hour
11 11 actionview_datehelper_time_in_words_hour_about_plural: about %d hours
12 12 actionview_datehelper_time_in_words_hour_about_single: about an hour
13 13 actionview_datehelper_time_in_words_minute: 1 minute
14 14 actionview_datehelper_time_in_words_minute_half: 30 secondes
15 15 actionview_datehelper_time_in_words_minute_less_than: moins d'une minute
16 16 actionview_datehelper_time_in_words_minute_plural: %d minutes
17 17 actionview_datehelper_time_in_words_minute_single: 1 minute
18 18 actionview_datehelper_time_in_words_second_less_than: moins d'une seconde
19 19 actionview_datehelper_time_in_words_second_less_than_plural: moins de %d secondes
20 20 actionview_instancetag_blank_option: Choisir
21 21
22 22 activerecord_error_inclusion: n'est pas inclus dans la liste
23 23 activerecord_error_exclusion: est reservé
24 24 activerecord_error_invalid: est invalide
25 25 activerecord_error_confirmation: ne correspond pas à la confirmation
26 26 activerecord_error_accepted: doit être accepté
27 27 activerecord_error_empty: doit être renseigné
28 28 activerecord_error_blank: doit être renseigné
29 29 activerecord_error_too_long: est trop long
30 30 activerecord_error_too_short: est trop court
31 31 activerecord_error_wrong_length: n'est pas de la bonne longueur
32 32 activerecord_error_taken: est déjà utilisé
33 33 activerecord_error_not_a_number: n'est pas un nombre
34 34 activerecord_error_not_a_date: n'est pas une date valide
35 35
36 36 general_fmt_age: %d an
37 37 general_fmt_age_plural: %d ans
38 38 general_fmt_date: %%d/%%m/%%Y
39 39 general_fmt_datetime: %%d/%%m/%%Y %%H:%%M
40 40 general_fmt_datetime_short: %%d/%%m %%H:%%M
41 41 general_fmt_time: %%H:%%M
42 42 general_text_No: 'Non'
43 43 general_text_Yes: 'Oui'
44 44 general_text_no: 'non'
45 45 general_text_yes: 'oui'
46 46 general_lang_fr: 'Français'
47 47 general_csv_separator: ';'
48 48
49 49 notice_account_updated: Le compte a été mis à jour avec succès.
50 50 notice_account_invalid_creditentials: Identifiant ou mot de passe invalide.
51 51 notice_account_password_updated: Mot de passe mis à jour avec succès.
52 52 notice_account_wrong_password: Mot de passe incorrect
53 53 notice_account_register_done: Un message contenant les instructions pour activer votre compte vous a été envoyé.
54 54 notice_account_unknown_email: Aucun compte ne correspond à cette adresse.
55 55 notice_can_t_change_password: Ce compte utilise une authentification externe. Impossible de changer le mot de passe.
56 56 notice_account_lost_email_sent: Un message contenant les instructions pour choisir un nouveau mot de passe vous a été envoyé.
57 57 notice_account_activated: Votre compte a été activé. Vous pouvez à présent vous connecter.
58 58 notice_successful_create: Création effectuée avec succès.
59 59 notice_successful_update: Mise à jour effectuée avec succès.
60 60 notice_successful_delete: Suppression effectuée avec succès.
61 61 notice_successful_connection: Connection réussie.
62 62 notice_file_not_found: Le fichier demandé n'existe pas ou a été supprimé.
63 63 notice_locking_conflict: Les données ont été mises à jour par un autre utilisateur. Mise à jour impossible.
64 64
65 mail_subject_lost_password: Votre mot de passe redMine
66 mail_subject_register: Activation de votre compte redMine
67
65 68 gui_validation_error: 1 erreur
66 69 gui_validation_error_plural: %d erreurs
67 70
68 71 field_name: Nom
69 72 field_description: Description
70 73 field_summary: Résumé
71 74 field_is_required: Obligatoire
72 75 field_firstname: Prénom
73 76 field_lastname: Nom
74 77 field_mail: Email
75 78 field_filename: Fichier
76 79 field_filesize: Taille
77 80 field_downloads: Téléchargements
78 81 field_author: Auteur
79 82 field_created_on: Créé
80 83 field_updated_on: Mis à jour
81 84 field_field_format: Format
82 85 field_is_for_all: Pour tous les projets
83 86 field_possible_values: Valeurs possibles
84 87 field_regexp: Expression régulière
85 88 field_min_length: Longueur minimum
86 89 field_max_length: Longueur maximum
87 90 field_value: Valeur
88 91 field_category: Catégorie
89 92 field_title: Titre
90 93 field_project: Projet
91 94 field_issue: Demande
92 95 field_status: Statut
93 96 field_notes: Notes
94 97 field_is_closed: Demande fermée
95 98 field_is_default: Statut par défaut
96 99 field_html_color: Couleur
97 100 field_tracker: Tracker
98 101 field_subject: Sujet
99 102 field_due_date: Date d'échéance
100 103 field_assigned_to: Assigné à
101 104 field_priority: Priorité
102 105 field_fixed_version: Version corrigée
103 106 field_user: Utilisateur
104 107 field_role: Rôle
105 108 field_homepage: Site web
106 109 field_is_public: Public
107 110 field_parent: Sous-projet de
108 111 field_is_in_chlog: Demandes affichées dans l'historique
109 112 field_login: Identifiant
110 113 field_mail_notification: Notifications par mail
111 114 field_admin: Administrateur
112 115 field_locked: Verrouillé
113 116 field_last_login_on: Dernière connexion
114 117 field_language: Langue
115 118 field_effective_date: Date
116 119 field_password: Mot de passe
117 120 field_new_password: Nouveau mot de passe
118 121 field_password_confirmation: Confirmation
119 122 field_version: Version
120 123 field_type: Type
121 124 field_host: Hôte
122 125 field_port: Port
123 126 field_account: Compte
124 127 field_base_dn: Base DN
125 128 field_attr_login: Attribut Identifiant
126 129 field_attr_firstname: Attribut Prénom
127 130 field_attr_lastname: Attribut Nom
128 131 field_attr_mail: Attribut Email
129 132 field_onthefly: Création des utilisateurs à la volée
130 133
131 134 label_user: Utilisateur
132 135 label_user_plural: Utilisateurs
133 136 label_user_new: Nouvel utilisateur
134 137 label_project: Projet
135 138 label_project_new: Nouveau projet
136 139 label_project_plural: Projets
137 140 label_project_latest: Derniers projets
138 141 label_issue: Demande
139 142 label_issue_new: Nouvelle demande
140 143 label_issue_plural: Demandes
141 144 label_issue_view_all: Voir toutes les demandes
142 145 label_document: Document
143 146 label_document_new: Nouveau document
144 147 label_document_plural: Documents
145 148 label_role: Rôle
146 149 label_role_plural: Rôles
147 150 label_role_new: Nouveau rôle
148 151 label_role_and_permissions: Rôles et permissions
149 152 label_member: Membre
150 153 label_member_new: Nouveau membre
151 154 label_member_plural: Membres
152 155 label_tracker: Tracker
153 156 label_tracker_plural: Trackers
154 157 label_tracker_new: Nouveau tracker
155 158 label_workflow: Workflow
156 159 label_issue_status: Statut de demandes
157 160 label_issue_status_plural: Statuts de demandes
158 161 label_issue_status_new: Nouveau statut
159 162 label_issue_category: Catégorie de demandes
160 163 label_issue_category_plural: Catégories de demandes
161 164 label_issue_category_new: Nouvelle catégorie
162 165 label_custom_field: Champ personnalisé
163 166 label_custom_field_plural: Champs personnalisés
164 167 label_custom_field_new: Nouveau champ personnalisé
165 168 label_enumerations: Listes de valeurs
166 169 label_enumeration_new: Nouvelle valeur
167 170 label_information: Information
168 171 label_information_plural: Informations
169 172 label_please_login: Identification
170 173 label_register: S'enregistrer
171 174 label_password_lost: Mot de passe perdu
172 175 label_home: Accueil
173 176 label_my_page: Ma page
174 177 label_my_account: Mon compte
175 178 label_my_projects: Mes projets
176 179 label_administration: Administration
177 180 label_login: Connexion
178 181 label_logout: Déconnexion
179 182 label_help: Aide
180 183 label_reported_issues: Demandes soumises
181 184 label_assigned_to_me_issues: Demandes qui me sont assignées
182 185 label_last_login: Dernière connexion
183 186 label_last_updates: Dernière mise à jour
184 187 label_last_updates_plural: %d dernières mises à jour
185 188 label_registered_on: Inscrit le
186 189 label_activity: Activité
187 190 label_new: Nouveau
188 191 label_logged_as: Connecté en tant que
189 192 label_environment: Environnement
190 193 label_authentication: Authentification
191 194 label_auth_source: Mode d'authentification
192 195 label_auth_source_new: Nouveau mode d'authentification
193 196 label_auth_source_plural: Modes d'authentification
194 197 label_subproject: Sous-projet
195 198 label_subproject_plural: Sous-projets
196 199 label_min_max_length: Longueurs mini - maxi
197 200 label_list: Liste
198 201 label_date: Date
199 202 label_integer: Entier
200 203 label_boolean: Booléen
201 204 label_string: Chaîne
202 205 label_text: Texte
203 206 label_attribute: Attribut
204 207 label_attribute_plural: Attributs
205 208 label_download: %d Téléchargement
206 209 label_download_plural: %d Téléchargements
207 210 label_no_data: Aucune donnée à afficher
208 211 label_change_status: Changer le statut
209 212 label_history: Historique
210 213 label_attachment: Fichier
211 214 label_attachment_new: Nouveau fichier
212 215 label_attachment_delete: Supprimer le fichier
213 216 label_attachment_plural: Fichiers
214 217 label_report: Rapport
215 218 label_report_plural: Rapports
216 219 label_news: Annonce
217 220 label_news_new: Nouvelle annonce
218 221 label_news_plural: Annonces
219 222 label_news_latest: Dernières annonces
220 223 label_news_view_all: Voir toutes les annonces
221 224 label_change_log: Historique
222 225 label_settings: Configuration
223 226 label_overview: Aperçu
224 227 label_version: Version
225 228 label_version_new: Nouvelle version
226 229 label_version_plural: Versions
227 230 label_confirmation: Confirmation
228 231 label_export_csv: Exporter en CSV
229 232 label_export_pdf: Exporter en PDF
230 233 label_read: Lire...
231 234 label_public_projects: Projets publics
232 235 label_open_issues: Ouverte
233 236 label_open_issues_plural: Ouvertes
234 237 label_closed_issues: Fermée
235 238 label_closed_issues_plural: Fermées
236 239 label_total: Total
237 240 label_permissions: Permissions
238 241 label_current_status: Statut actuel
239 242 label_new_statuses_allowed: Nouveaux statuts autorisés
240 243 label_all: Tous
241 244 label_none: Aucun
242 245 label_next: Suivant
243 246 label_previous: Précédent
244 247 label_used_by: Utilisé par
245 248 label_details: Détails...
246 249 label_add_note: Ajouter une note
247 250 label_per_page: Par page
248 251
249 252 button_login: Connexion
250 253 button_submit: Soumettre
251 254 button_save: Valider
252 255 button_check_all: Tout cocher
253 256 button_uncheck_all: Tout décocher
254 257 button_delete: Supprimer
255 258 button_create: Créer
256 259 button_test: Tester
257 260 button_edit: Modifier
258 261 button_add: Ajouter
259 262 button_change: Changer
260 263 button_apply: Appliquer
261 264 button_clear: Effacer
262 265 button_lock: Verrouiller
263 266 button_unlock: Déverrouiller
264 267 button_download: Télécharger
265 268 button_list: Lister
266 269 button_view: Voir
267 270 button_move: Déplacer
268 271 button_back: Retour
269 272
270 273 text_select_mail_notifications: Sélectionner les actions pour lesquelles la notification par mail doit être activée.
271 274 text_regexp_info: ex. ^[A-Z0-9]+$
272 275 text_min_max_length_info: 0 pour aucune restriction
273 276 text_possible_values_info: valeurs séparées par |
274 277 text_project_destroy_confirmation: Etes-vous sûr de vouloir supprimer ce projet et tout ce qui lui est rattaché ?
275 278 text_workflow_edit: Sélectionner un tracker et un rôle pour éditer le workflow
276 279 text_are_you_sure: Etes-vous sûr ?
277 280
278 281 default_role_manager: Manager
279 282 default_role_developper: Développeur
280 283 default_role_reporter: Rapporteur
281 284 default_tracker_bug: Anomalie
282 285 default_tracker_feature: Evolution
283 286 default_tracker_support: Assistance
284 287 default_issue_status_new: Nouveau
285 288 default_issue_status_assigned: Assigné
286 289 default_issue_status_resolved: Résolu
287 290 default_issue_status_feedback: Commentaire
288 291 default_issue_status_closed: Fermé
289 292 default_issue_status_rejected: Rejeté
290 293 default_doc_category_user: Documentation utilisateur
291 294 default_doc_category_tech: Documentation technique
292 295 default_priority_low: Bas
293 296 default_priority_normal: Normal
294 297 default_priority_high: Haut
295 298 default_priority_urgent: Urgent
296 299 default_priority_immediate: Immédiat
297 300
298 301 enumeration_issue_priorities: Priorités des demandes
299 302 enumeration_doc_categories: Catégories des documents
@@ -1,419 +1,428
1 1 /* andreas08 - an open source xhtml/css website layout by Andreas Viklund - http://andreasviklund.com . Free to use in any way and for any purpose as long as the proper credits are given to the original designer. Version: 1.0, November 28, 2005 */
2 2 /* Edited by Jean-Philippe Lang *>
3 3 /**************** Body and tag styles ****************/
4 4
5 5
6 6 #header * {margin:0; padding:0;}
7 7 p, ul, ol, li {margin:0; padding:0;}
8 8
9 9
10 10 body{
11 11 font:76% Verdana,Tahoma,Arial,sans-serif;
12 12 line-height:1.4em;
13 13 text-align:center;
14 14 color:#303030;
15 15 background:#e8eaec;
16 16 margin:0;
17 17 }
18 18
19 19
20 20 a{
21 21 color:#467aa7;
22 22 font-weight:bold;
23 23 text-decoration:none;
24 24 background-color:inherit;
25 25 }
26 26
27 27 a:hover{color:#2a5a8a; text-decoration:none; background-color:inherit;}
28 28 a img{border:none;}
29 29
30 30 p{padding:0 0 1em 0;}
31 31 p form{margin-top:0; margin-bottom:20px;}
32 32
33 33 img.left,img.center,img.right{padding:4px; border:1px solid #a0a0a0;}
34 34 img.left{float:left; margin:0 12px 5px 0;}
35 35 img.center{display:block; margin:0 auto 5px auto;}
36 36 img.right{float:right; margin:0 0 5px 12px;}
37 37
38 38 /**************** Header and navigation styles ****************/
39 39
40 40 #container{
41 41 width:100%;
42 42 min-width: 800px;
43 43 margin:0;
44 44 padding:0;
45 45 text-align:left;
46 46 background:#ffffff;
47 47 color:#303030;
48 48 }
49 49
50 50 #header{
51 51 height:4.5em;
52 52 /*width:758px;*/
53 53 margin:0;
54 54 background:#467aa7;
55 55 color:#ffffff;
56 56 margin-bottom:1px;
57 57 }
58 58
59 59 #header h1{
60 60 padding:10px 0 0 20px;
61 61 font-size:1.8em;
62 62 background-color:inherit;
63 63 color:#fff; /*rgb(152, 26, 33);*/
64 64 letter-spacing:-2px;
65 65 font-weight:normal;
66 66 }
67 67
68 68 #header h2{
69 69 margin:3px 0 0 40px;
70 70 font-size:1.4em;
71 71 background-color:inherit;
72 72 color:#f0f2f4;
73 73 letter-spacing:-1px;
74 74 font-weight:normal;
75 75 }
76 76
77 77 #navigation{
78 78 height:2.2em;
79 79 line-height:2.2em;
80 80 /*width:758px;*/
81 81 margin:0;
82 82 background:#578bb8;
83 83 color:#ffffff;
84 84 }
85 85
86 86 #navigation li{
87 87 float:left;
88 88 list-style-type:none;
89 89 border-right:1px solid #ffffff;
90 90 white-space:nowrap;
91 91 }
92 92
93 93 #navigation li.right {
94 94 float:right;
95 95 list-style-type:none;
96 96 border-right:0;
97 97 border-left:1px solid #ffffff;
98 98 white-space:nowrap;
99 99 }
100 100
101 101 #navigation li a{
102 102 display:block;
103 103 padding:0px 10px 0px 22px;
104 104 font-size:0.8em;
105 105 font-weight:normal;
106 106 /*text-transform:uppercase;*/
107 107 text-decoration:none;
108 108 background-color:inherit;
109 109 color: #ffffff;
110 110 }
111 111
112 112 * html #navigation a {width:1%;}
113 113
114 114 #navigation .selected,#navigation a:hover{
115 115 color:#ffffff;
116 116 text-decoration:none;
117 117 background-color: #80b0da;
118 118 }
119 119
120 120 /**************** Icons links *******************/
121 121 .picHome { background: url(../images/home.png) no-repeat 4px 50%; }
122 122 .picUser { background: url(../images/user.png) no-repeat 4px 50%; }
123 123 .picUserPage { background: url(../images/user_page.png) no-repeat 4px 50%; }
124 124 .picAdmin { background: url(../images/admin.png) no-repeat 4px 50%; }
125 125 .picProject { background: url(../images/projects.png) no-repeat 4px 50%; }
126 126 .picLogout { background: url(../images/logout.png) no-repeat 4px 50%; }
127 127 .picHelp { background: url(../images/help.png) no-repeat 4px 50%; }
128 128
129 129 /**************** Content styles ****************/
130 130
131 131 html>body #content {
132 132 height: auto;
133 133 min-height: 300px;
134 134 }
135 135
136 136 #content{
137 137 /*float:right;*/
138 138 /*width:530px;*/
139 139 width: auto;
140 140 height:300px;
141 141 font-size:0.9em;
142 142 padding:20px 10px 10px 20px;
143 143 /*position: absolute;*/
144 144 margin-left: 120px;
145 145 border-left: 1px dashed #c0c0c0;
146 146
147 147 }
148 148
149 149 #content h2{
150 150 display:block;
151 151 margin:0 0 16px 0;
152 152 font-size:1.7em;
153 153 font-weight:normal;
154 154 letter-spacing:-1px;
155 155 color:#505050;
156 156 background-color:inherit;
157 157 }
158 158
159 159 #content h2 a{font-weight:normal;}
160 160 #content h3{margin:0 0 12px 0; font-size:1.4em; letter-spacing:-1px;}
161 161 #content a:hover,#subcontent a:hover{text-decoration:underline;}
162 162 #content ul,#content ol{margin:0 5px 16px 35px;}
163 163 #content dl{margin:0 5px 10px 25px;}
164 164 #content dt{font-weight:bold; margin-bottom:5px;}
165 165 #content dd{margin:0 0 10px 15px;}
166 166
167 167
168 168 /***********************************************/
169 169
170 170 /*
171 171 form{
172 172 padding:15px;
173 173 margin:0 0 20px 0;
174 174 border:1px solid #c0c0c0;
175 175 background-color:#CEE1ED;
176 176 width:600px;
177 177 }
178 178 */
179 179
180 180 form {
181 181 display: inline;
182 182 }
183 183
184 184 .noborder {
185 185 border:0px;
186 186 Exception exceptions.AssertionError: <exceptions.AssertionError instance at 0xb7c0b20c> in <bound
187 187 method SubversionRepository.__del__ of <vclib.svn.SubversionRepository instance at 0xb7c1252c>>
188 188 ignored
189 189
190 190 background-color:#fff;
191 191 width:100%;
192 192 }
193 193
194 194 textarea {
195 195 padding:0;
196 196 margin:0;
197 197 }
198 198
199 199 input {
200 200 vertical-align: middle;
201 201 }
202 202
203 203 input.button-small
204 204 {
205 205 font-size: 0.8em;
206 206 }
207 207
208 208 select {
209 209 vertical-align: middle;
210 210 }
211 211
212 212 select.select-small
213 213 {
214 214 border: 1px solid #7F9DB9;
215 215 padding: 1px;
216 216 font-size: 0.8em;
217 217 }
218 218
219 219 .active-filter
220 220 {
221 221 background-color: #F9FA9E;
222 222
223 223 }
224 224
225 225 label {
226 226 font-weight: bold;
227 227 font-size: 1em;
228 228 }
229 229
230 230 fieldset {
231 231 border:1px solid #7F9DB9;
232 232 padding: 6px;
233 233 }
234 234
235 235 legend {
236 236 color: #505050;
237 237
238 238 }
239 239
240 240 .required {
241 241 color: #bb0000;
242 242 }
243 243
244 244 table.listTableContent {
245 245 border:1px solid #578bb8;
246 246 width:99%;
247 247 border-collapse: collapse;
248 248 }
249 249
250 250 table.listTableContent td {
251 251 padding:2px;
252 252 }
253 253
254 254 tr.ListHead {
255 255 background-color:#467aa7;
256 256 color:#FFFFFF;
257 257 text-align:center;
258 258 }
259 259
260 260 tr.ListHead a {
261 261 color:#FFFFFF;
262 262 text-decoration:underline;
263 263 }
264 264
265 265 tr.odd {
266 266 background-color:#f0f1f2;
267 267 }
268 268 tr.even {
269 269 background-color: #fff;
270 270 }
271 271
272 272 table.reportTableContent {
273 273 border:1px solid #c0c0c0;
274 274 width:99%;
275 275 border-collapse: collapse;
276 276 }
277 277
278 278 table.reportTableContent td {
279 279 padding:2px;
280 280 }
281 281
282 282 hr { border:none; border-bottom: dotted 2px #c0c0c0; }
283 283
284 284
285 285 /**************** Sidebar styles ****************/
286 286
287 287 #subcontent{
288 288 float:left;
289 289 clear:both;
290 290 width:110px;
291 291 padding:20px 20px 10px 5px;
292 292 }
293 293
294 294 #subcontent h2{
295 295 display:block;
296 296 margin:0 0 5px 0;
297 297 font-size:1.0em;
298 298 font-weight:bold;
299 299 text-align:left;
300 300 letter-spacing:-1px;
301 301 color:#606060;
302 302 background-color:inherit;
303 303 }
304 304
305 305 #subcontent p{margin:0 0 16px 0; font-size:0.9em;}
306 306
307 307 /**************** Menublock styles ****************/
308 308
309 309 .menublock{margin:0 0 20px 8px; font-size:0.8em;}
310 310 .menublock li{list-style:none; display:block; padding:1px; margin-bottom:0px;}
311 311 .menublock li a{font-weight:bold; text-decoration:none;}
312 312 .menublock li a:hover{text-decoration:none;}
313 313 .menublock li ul{margin:0; font-size:1em; font-weight:normal;}
314 314 .menublock li ul li{margin-bottom:0;}
315 315 .menublock li ul a{font-weight:normal;}
316 316
317 317 /**************** Searchbar styles ****************/
318 318
319 319 #searchbar{margin:0 0 20px 0;}
320 320 #searchbar form fieldset{margin-left:10px; border:0 solid;}
321 321
322 322 #searchbar #s{
323 323 height:1.2em;
324 324 width:110px;
325 325 margin:0 5px 0 0;
326 326 border:1px solid #a0a0a0;
327 327 }
328 328
329 329 #searchbar #searchbutton{
330 330 width:auto;
331 331 padding:0 1px;
332 332 border:1px solid #808080;
333 333 font-size:0.9em;
334 334 text-align:center;
335 335 }
336 336
337 337 /**************** Footer styles ****************/
338 338
339 339 #footer{
340 340 clear:both;
341 341 /*width:758px;*/
342 342 padding:5px 0;
343 343 margin:0;
344 344 font-size:0.9em;
345 345 color:#f0f0f0;
346 346 background:#467aa7;
347 347 }
348 348
349 349 #footer p{padding:0; margin:0; text-align:center;}
350 350 #footer a{color:#f0f0f0; background-color:inherit; font-weight:bold;}
351 351 #footer a:hover{color:#ffffff; background-color:inherit; text-decoration: underline;}
352 352
353 353 /**************** Misc classes and styles ****************/
354 354
355 355 .splitcontentleft{float:left; width:49%;}
356 356 .splitcontentright{float:right; width:49%;}
357 357 .clear{clear:both;}
358 358 .small{font-size:0.8em;line-height:1.4em;padding:0 0 0 0;}
359 359 .hide{display:none;}
360 360 .textcenter{text-align:center;}
361 361 .textright{text-align:right;}
362 362 .important{color:#f02025; background-color:inherit; font-weight:bold;}
363 363
364 364 .box{
365 365 margin:0 0 20px 0;
366 366 padding:10px;
367 367 border:1px solid #c0c0c0;
368 368 background-color:#fafbfc;
369 369 color:#505050;
370 370 line-height:1.5em;
371 371 }
372 372
373 .rightbox{
374 background: #fafbfc;
375 border: 1px solid #c0c0c0;
376 float: right;
377 padding: 8px;
378 position: relative;
379 margin: 0 5px 5px;
380 }
381
373 382 .topright{
374 383 position: absolute;
375 384 right: 25px;
376 385 top: 100px;
377 386 }
378 387
379 388 .login {
380 389 width: 50%;
381 390 text-align: left;
382 391 }
383 392
384 393 img.calendar-trigger {
385 394 cursor: pointer;
386 395 vertical-align: middle;
387 396 margin-left: 4px;
388 397 }
389 398
390 399
391 400 /***** CSS FORM ******/
392 401 .tabular p{
393 402 margin: 0;
394 403 padding: 5px 0 8px 0;
395 404 padding-left: 180px; /*width of left column containing the label elements*/
396 405 height: 1%;
397 406 }
398 407
399 408 .tabular label{
400 409 font-weight: bold;
401 410 float: left;
402 411 margin-left: -180px; /*width of left column*/
403 412 width: 175px; /*width of labels. Should be smaller than left column to create some right
404 413 margin*/
405 414 }
406 415
407 416 .error {
408 417 color: #cc0000;
409 418 }
410 419
411 420
412 421 /*.threepxfix class below:
413 422 Targets IE6- ONLY. Adds 3 pixel indent for multi-line form contents.
414 423 to account for 3 pixel bug: http://www.positioniseverything.net/explorer/threepxtest.html
415 424 */
416 425
417 426 * html .threepxfix{
418 427 margin-left: 3px;
419 428 } No newline at end of file
General Comments 0
You need to be logged in to leave comments. Login now