##// END OF EJS Templates
Adds workflow copy functionality (#1727)....
Jean-Philippe Lang -
r3040:5c6ce51ec9f1
parent child
Show More
@@ -0,0 +1,5
1 <div class="contextual">
2 <%= link_to l(:button_edit), {:action => 'edit'}, :class => 'icon icon-edit' %>
3 <%= link_to l(:button_copy), {:action => 'copy'}, :class => 'icon icon-copy' %>
4 <%= link_to l(:field_summary), {:action => 'index'}, :class => 'icon icon-summary' %>
5 </div>
@@ -0,0 +1,33
1 <%= render :partial => 'action_menu' %>
2
3 <h2><%=l(:label_workflow)%></h2>
4
5 <% form_tag({}, :id => 'workflow_copy_form') do %>
6 <div class="tabular box">
7 <p>
8 <label><%= l(:label_copy_source) %></label>
9 <%= l(:label_tracker) %><br />
10 <%= select_tag('source_tracker_id',
11 "<option value=\"\">--- #{l(:actionview_instancetag_blank_option)} ---</option>" +
12 "<option value=\"any\">--- #{ l(:label_copy_same_as_target) } ---</option>" +
13 options_from_collection_for_select(@trackers, 'id', 'name', @source_tracker && @source_tracker.id)) %><br />
14 <%= l(:label_role) %><br />
15 <%= select_tag('source_role_id',
16 "<option value=\"\">--- #{l(:actionview_instancetag_blank_option)} ---</option>" +
17 "<option value=\"any\">--- #{ l(:label_copy_same_as_target) } ---</option>" +
18 options_from_collection_for_select(@roles, 'id', 'name', @source_role && @source_role.id)) %>
19 </p>
20 <p>
21 <label><%= l(:label_copy_target) %></label>
22 <%= l(:label_tracker) %><br />
23 <%= select_tag 'target_tracker_ids',
24 "<option value=\"\" disabled=\"disabled\">--- #{l(:actionview_instancetag_blank_option)} ---</option>" +
25 options_from_collection_for_select(@trackers, 'id', 'name', @target_trackers && @target_trackers.map(&:id)), :multiple => true %><br />
26 <%= l(:label_role) %><br />
27 <%= select_tag 'target_role_ids',
28 "<option value=\"\" disabled=\"disabled\">--- #{l(:actionview_instancetag_blank_option)} ---</option>" +
29 options_from_collection_for_select(@roles, 'id', 'name', @target_roles && @target_roles.map(&:id)), :multiple => true %>
30 </p>
31 </div>
32 <%= submit_tag l(:button_copy) %>
33 <% end %>
1 NO CONTENT: new file 100644, binary diff hidden
@@ -1,45 +1,68
1 1 # Redmine - project management software
2 2 # Copyright (C) 2006-2008 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 WorkflowsController < ApplicationController
19 19 before_filter :require_admin
20 20
21 21 def index
22 22 @workflow_counts = Workflow.count_by_tracker_and_role
23 23 end
24 24
25 25 def edit
26 26 @role = Role.find_by_id(params[:role_id])
27 27 @tracker = Tracker.find_by_id(params[:tracker_id])
28 28
29 29 if request.post?
30 30 Workflow.destroy_all( ["role_id=? and tracker_id=?", @role.id, @tracker.id])
31 31 (params[:issue_status] || []).each { |old, news|
32 32 news.each { |new|
33 33 @role.workflows.build(:tracker_id => @tracker.id, :old_status_id => old, :new_status_id => new)
34 34 }
35 35 }
36 36 if @role.save
37 37 flash[:notice] = l(:notice_successful_update)
38 38 redirect_to :action => 'edit', :role_id => @role, :tracker_id => @tracker
39 39 end
40 40 end
41 41 @roles = Role.find(:all, :order => 'builtin, position')
42 42 @trackers = Tracker.find(:all, :order => 'position')
43 43 @statuses = IssueStatus.find(:all, :order => 'position')
44 44 end
45
46 def copy
47 @trackers = Tracker.find(:all, :order => 'position')
48 @roles = Role.find(:all, :order => 'builtin, position')
49
50 @source_tracker = params[:source_tracker_id].blank? ? nil : Tracker.find_by_id(params[:source_tracker_id])
51 @source_role = params[:source_role_id].blank? ? nil : Role.find_by_id(params[:source_role_id])
52
53 @target_trackers = params[:target_tracker_ids].blank? ? nil : Tracker.find_all_by_id(params[:target_tracker_ids])
54 @target_roles = params[:target_role_ids].blank? ? nil : Role.find_all_by_id(params[:target_role_ids])
55
56 if request.post?
57 if params[:source_tracker_id].blank? || params[:source_role_id].blank? || (@source_tracker.nil? && @source_role.nil?)
58 flash.now[:error] = l(:error_workflow_copy_source)
59 elsif @target_trackers.nil? || @target_roles.nil?
60 flash.now[:error] = l(:error_workflow_copy_target)
61 else
62 Workflow.copy(@source_tracker, @source_role, @target_trackers, @target_roles)
63 flash[:notice] = l(:notice_successful_update)
64 redirect_to :action => 'copy', :source_tracker_id => @source_tracker, :source_role_id => @source_role
65 end
66 end
67 end
45 68 end
@@ -1,153 +1,147
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 Role < ActiveRecord::Base
19 19 # Built-in roles
20 20 BUILTIN_NON_MEMBER = 1
21 21 BUILTIN_ANONYMOUS = 2
22 22
23 23 named_scope :givable, { :conditions => "builtin = 0", :order => 'position' }
24 24 named_scope :builtin, lambda { |*args|
25 25 compare = 'not' if args.first == true
26 26 { :conditions => "#{compare} builtin = 0" }
27 27 }
28 28
29 29 before_destroy :check_deletable
30 30 has_many :workflows, :dependent => :delete_all do
31 def copy(role)
32 raise "Can not copy workflow from a #{role.class}" unless role.is_a?(Role)
33 raise "Can not copy workflow from/to an unsaved role" if proxy_owner.new_record? || role.new_record?
34 clear
35 connection.insert "INSERT INTO #{Workflow.table_name} (tracker_id, old_status_id, new_status_id, role_id)" +
36 " SELECT tracker_id, old_status_id, new_status_id, #{proxy_owner.id}" +
37 " FROM #{Workflow.table_name}" +
38 " WHERE role_id = #{role.id}"
31 def copy(source_role)
32 Workflow.copy(nil, source_role, nil, proxy_owner)
39 33 end
40 34 end
41 35
42 36 has_many :member_roles, :dependent => :destroy
43 37 has_many :members, :through => :member_roles
44 38 acts_as_list
45 39
46 40 serialize :permissions, Array
47 41 attr_protected :builtin
48 42
49 43 validates_presence_of :name
50 44 validates_uniqueness_of :name
51 45 validates_length_of :name, :maximum => 30
52 46 validates_format_of :name, :with => /^[\w\s\'\-]*$/i
53 47
54 48 def permissions
55 49 read_attribute(:permissions) || []
56 50 end
57 51
58 52 def permissions=(perms)
59 53 perms = perms.collect {|p| p.to_sym unless p.blank? }.compact.uniq if perms
60 54 write_attribute(:permissions, perms)
61 55 end
62 56
63 57 def add_permission!(*perms)
64 58 self.permissions = [] unless permissions.is_a?(Array)
65 59
66 60 permissions_will_change!
67 61 perms.each do |p|
68 62 p = p.to_sym
69 63 permissions << p unless permissions.include?(p)
70 64 end
71 65 save!
72 66 end
73 67
74 68 def remove_permission!(*perms)
75 69 return unless permissions.is_a?(Array)
76 70 permissions_will_change!
77 71 perms.each { |p| permissions.delete(p.to_sym) }
78 72 save!
79 73 end
80 74
81 75 # Returns true if the role has the given permission
82 76 def has_permission?(perm)
83 77 !permissions.nil? && permissions.include?(perm.to_sym)
84 78 end
85 79
86 80 def <=>(role)
87 81 role ? position <=> role.position : -1
88 82 end
89 83
90 84 def to_s
91 85 name
92 86 end
93 87
94 88 # Return true if the role is a builtin role
95 89 def builtin?
96 90 self.builtin != 0
97 91 end
98 92
99 93 # Return true if the role is a project member role
100 94 def member?
101 95 !self.builtin?
102 96 end
103 97
104 98 # Return true if role is allowed to do the specified action
105 99 # action can be:
106 100 # * a parameter-like Hash (eg. :controller => 'projects', :action => 'edit')
107 101 # * a permission Symbol (eg. :edit_project)
108 102 def allowed_to?(action)
109 103 if action.is_a? Hash
110 104 allowed_actions.include? "#{action[:controller]}/#{action[:action]}"
111 105 else
112 106 allowed_permissions.include? action
113 107 end
114 108 end
115 109
116 110 # Return all the permissions that can be given to the role
117 111 def setable_permissions
118 112 setable_permissions = Redmine::AccessControl.permissions - Redmine::AccessControl.public_permissions
119 113 setable_permissions -= Redmine::AccessControl.members_only_permissions if self.builtin == BUILTIN_NON_MEMBER
120 114 setable_permissions -= Redmine::AccessControl.loggedin_only_permissions if self.builtin == BUILTIN_ANONYMOUS
121 115 setable_permissions
122 116 end
123 117
124 118 # Find all the roles that can be given to a project member
125 119 def self.find_all_givable
126 120 find(:all, :conditions => {:builtin => 0}, :order => 'position')
127 121 end
128 122
129 123 # Return the builtin 'non member' role
130 124 def self.non_member
131 125 find(:first, :conditions => {:builtin => BUILTIN_NON_MEMBER}) || raise('Missing non-member builtin role.')
132 126 end
133 127
134 128 # Return the builtin 'anonymous' role
135 129 def self.anonymous
136 130 find(:first, :conditions => {:builtin => BUILTIN_ANONYMOUS}) || raise('Missing anonymous builtin role.')
137 131 end
138 132
139 133
140 134 private
141 135 def allowed_permissions
142 136 @allowed_permissions ||= permissions + Redmine::AccessControl.public_permissions.collect {|p| p.name}
143 137 end
144 138
145 139 def allowed_actions
146 140 @actions_allowed ||= allowed_permissions.inject([]) { |actions, permission| actions += Redmine::AccessControl.allowed_actions(permission) }.flatten
147 141 end
148 142
149 143 def check_deletable
150 144 raise "Can't delete role" if members.any?
151 145 raise "Can't delete builtin role" if builtin?
152 146 end
153 147 end
@@ -1,56 +1,50
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 Tracker < ActiveRecord::Base
19 19 before_destroy :check_integrity
20 20 has_many :issues
21 21 has_many :workflows, :dependent => :delete_all do
22 def copy(tracker)
23 raise "Can not copy workflow from a #{tracker.class}" unless tracker.is_a?(Tracker)
24 raise "Can not copy workflow from/to an unsaved tracker" if proxy_owner.new_record? || tracker.new_record?
25 clear
26 connection.insert "INSERT INTO #{Workflow.table_name} (tracker_id, old_status_id, new_status_id, role_id)" +
27 " SELECT #{proxy_owner.id}, old_status_id, new_status_id, role_id" +
28 " FROM #{Workflow.table_name}" +
29 " WHERE tracker_id = #{tracker.id}"
22 def copy(source_tracker)
23 Workflow.copy(source_tracker, nil, proxy_owner, nil)
30 24 end
31 25 end
32 26
33 27 has_and_belongs_to_many :projects
34 28 has_and_belongs_to_many :custom_fields, :class_name => 'IssueCustomField', :join_table => "#{table_name_prefix}custom_fields_trackers#{table_name_suffix}", :association_foreign_key => 'custom_field_id'
35 29 acts_as_list
36 30
37 31 validates_presence_of :name
38 32 validates_uniqueness_of :name
39 33 validates_length_of :name, :maximum => 30
40 34 validates_format_of :name, :with => /^[\w\s\'\-]*$/i
41 35
42 36 def to_s; name end
43 37
44 38 def <=>(tracker)
45 39 name <=> tracker.name
46 40 end
47 41
48 42 def self.all
49 43 find(:all, :order => 'position')
50 44 end
51 45
52 46 private
53 47 def check_integrity
54 48 raise "Can't delete tracker" if Issue.find(:first, :conditions => ["tracker_id=?", self.id])
55 49 end
56 50 end
@@ -1,54 +1,100
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 Workflow < ActiveRecord::Base
19 19 belongs_to :role
20 20 belongs_to :old_status, :class_name => 'IssueStatus', :foreign_key => 'old_status_id'
21 21 belongs_to :new_status, :class_name => 'IssueStatus', :foreign_key => 'new_status_id'
22 22
23 23 validates_presence_of :role, :old_status, :new_status
24 24
25 25 # Returns workflow transitions count by tracker and role
26 26 def self.count_by_tracker_and_role
27 27 counts = connection.select_all("SELECT role_id, tracker_id, count(id) AS c FROM #{Workflow.table_name} GROUP BY role_id, tracker_id")
28 28 roles = Role.find(:all, :order => 'builtin, position')
29 29 trackers = Tracker.find(:all, :order => 'position')
30 30
31 31 result = []
32 32 trackers.each do |tracker|
33 33 t = []
34 34 roles.each do |role|
35 35 row = counts.detect {|c| c['role_id'] == role.id.to_s && c['tracker_id'] == tracker.id.to_s}
36 36 t << [role, (row.nil? ? 0 : row['c'].to_i)]
37 37 end
38 38 result << [tracker, t]
39 39 end
40 40
41 41 result
42 42 end
43 43
44 44 # Find potential statuses the user could be allowed to switch issues to
45 45 def self.available_statuses(project, user=User.current)
46 46 Workflow.find(:all,
47 47 :include => :new_status,
48 48 :conditions => {:role_id => user.roles_for_project(project).collect(&:id)}).
49 49 collect(&:new_status).
50 50 compact.
51 51 uniq.
52 52 sort
53 53 end
54
55 # Copies workflows from source to targets
56 def self.copy(source_tracker, source_role, target_trackers, target_roles)
57 unless source_tracker.is_a?(Tracker) || source_role.is_a?(Role)
58 raise ArgumentError.new "source_tracker or source_role must be specified"
59 end
60
61 target_trackers = [target_trackers].flatten.compact
62 target_roles = [target_roles].flatten.compact
63
64 target_trackers = Tracker.all if target_trackers.empty?
65 target_roles = Role.all if target_roles.empty?
66
67 target_trackers.each do |target_tracker|
68 target_roles.each do |target_role|
69 copy_one(source_tracker || target_tracker,
70 source_role || target_role,
71 target_tracker,
72 target_role)
73 end
74 end
75 end
76
77 # Copies a single set of workflows from source to target
78 def self.copy_one(source_tracker, source_role, target_tracker, target_role)
79 unless source_tracker.is_a?(Tracker) && !source_tracker.new_record? &&
80 source_role.is_a?(Role) && !source_role.new_record? &&
81 target_tracker.is_a?(Tracker) && !target_tracker.new_record? &&
82 target_role.is_a?(Role) && !target_role.new_record?
83
84 raise ArgumentError.new("arguments can not be nil or unsaved objects")
85 end
86
87 if source_tracker == target_tracker && source_role == target_role
88 false
89 else
90 transaction do
91 delete_all :tracker_id => target_tracker.id, :role_id => target_role.id
92 connection.insert "INSERT INTO #{Workflow.table_name} (tracker_id, role_id, old_status_id, new_status_id)" +
93 " SELECT #{target_tracker.id}, #{target_role.id}, old_status_id, new_status_id" +
94 " FROM #{Workflow.table_name}" +
95 " WHERE tracker_id = #{source_tracker.id} AND role_id = #{source_role.id}"
96 end
97 true
98 end
99 end
54 100 end
@@ -1,59 +1,57
1 <div class="contextual">
2 <%= link_to l(:field_summary), :action => 'index' %>
3 </div>
1 <%= render :partial => 'action_menu' %>
4 2
5 3 <h2><%=l(:label_workflow)%></h2>
6 4
7 5 <p><%=l(:text_workflow_edit)%>:</p>
8 6
9 7 <% form_tag({}, :method => 'get') do %>
10 8 <p>
11 9 <label><%=l(:label_role)%>:</label>
12 10 <%= select_tag 'role_id', options_from_collection_for_select(@roles, "id", "name", @role && @role.id) %>
13 11
14 12 <label><%=l(:label_tracker)%>:</label>
15 13 <%= select_tag 'tracker_id', options_from_collection_for_select(@trackers, "id", "name", @tracker && @tracker.id) %>
16 14
17 15 <%= submit_tag l(:button_edit), :name => nil %>
18 16 </p>
19 17 <% end %>
20 18
21 19
22 20 <% if @tracker && @role && @statuses.any? %>
23 21 <% form_tag({}, :id => 'workflow_form' ) do %>
24 22 <%= hidden_field_tag 'tracker_id', @tracker.id %>
25 23 <%= hidden_field_tag 'role_id', @role.id %>
26 24 <table class="list">
27 25 <thead>
28 26 <tr>
29 27 <th align="left"><%=l(:label_current_status)%></th>
30 28 <th align="center" colspan="<%= @statuses.length %>"><%=l(:label_new_statuses_allowed)%></th>
31 29 </tr>
32 30 <tr>
33 31 <td></td>
34 32 <% for new_status in @statuses %>
35 33 <td width="<%= 75 / @statuses.size %>%" align="center"><%= new_status.name %></td>
36 34 <% end %>
37 35 </tr>
38 36 </thead>
39 37 <tbody>
40 38 <% for old_status in @statuses %>
41 39 <tr class="<%= cycle("odd", "even") %>">
42 40 <td><%= old_status.name %></td>
43 41 <% new_status_ids_allowed = old_status.find_new_statuses_allowed_to([@role], @tracker).collect(&:id) -%>
44 42 <% for new_status in @statuses -%>
45 43 <td align="center">
46 44 <%= check_box_tag "issue_status[#{ old_status.id }][]", new_status.id, new_status_ids_allowed.include?(new_status.id) %>
47 45 </td>
48 46 <% end -%>
49 47 </tr>
50 48 <% end %>
51 49 </tbody>
52 50 </table>
53 51 <p><%= check_all_links 'workflow_form' %></p>
54 52
55 53 <%= submit_tag l(:button_save) %>
56 54 <% end %>
57 55 <% end %>
58 56
59 57 <% html_title(l(:label_workflow)) -%>
@@ -1,31 +1,33
1 <%= render :partial => 'action_menu' %>
2
1 3 <h2><%=l(:label_workflow)%></h2>
2 4
3 5 <% if @workflow_counts.empty? %>
4 6 <p class="nodata"><%= l(:label_no_data) %></p>
5 7 <% else %>
6 8 <table class="list">
7 9 <thead>
8 10 <tr>
9 11 <th></th>
10 12 <% @workflow_counts.first.last.each do |role, count| %>
11 13 <th>
12 14 <%= content_tag(role.builtin? ? 'em' : 'span', h(role.name)) %>
13 15 </th>
14 16
15 17 <% end %>
16 18 </tr>
17 19 </thead>
18 20 <tbody>
19 21 <% @workflow_counts.each do |tracker, roles| -%>
20 22 <tr class="<%= cycle('odd', 'even') %>">
21 23 <td><%= h tracker %></td>
22 24 <% roles.each do |role, count| -%>
23 25 <td align="center">
24 26 <%= link_to((count > 1 ? count : image_tag('false.png')), {:action => 'edit', :role_id => role, :tracker_id => tracker}, :title => l(:button_edit)) %>
25 27 </td>
26 28 <% end -%>
27 29 </tr>
28 30 <% end -%>
29 31 </tbody>
30 32 </table>
31 33 <% end %>
@@ -1,859 +1,864
1 1 en:
2 2 date:
3 3 formats:
4 4 # Use the strftime parameters for formats.
5 5 # When no format has been given, it uses default.
6 6 # You can provide other formats here if you like!
7 7 default: "%m/%d/%Y"
8 8 short: "%b %d"
9 9 long: "%B %d, %Y"
10 10
11 11 day_names: [Sunday, Monday, Tuesday, Wednesday, Thursday, Friday, Saturday]
12 12 abbr_day_names: [Sun, Mon, Tue, Wed, Thu, Fri, Sat]
13 13
14 14 # Don't forget the nil at the beginning; there's no such thing as a 0th month
15 15 month_names: [~, January, February, March, April, May, June, July, August, September, October, November, December]
16 16 abbr_month_names: [~, Jan, Feb, Mar, Apr, May, Jun, Jul, Aug, Sep, Oct, Nov, Dec]
17 17 # Used in date_select and datime_select.
18 18 order: [ :year, :month, :day ]
19 19
20 20 time:
21 21 formats:
22 22 default: "%m/%d/%Y %I:%M %p"
23 23 time: "%I:%M %p"
24 24 short: "%d %b %H:%M"
25 25 long: "%B %d, %Y %H:%M"
26 26 am: "am"
27 27 pm: "pm"
28 28
29 29 datetime:
30 30 distance_in_words:
31 31 half_a_minute: "half a minute"
32 32 less_than_x_seconds:
33 33 one: "less than 1 second"
34 34 other: "less than {{count}} seconds"
35 35 x_seconds:
36 36 one: "1 second"
37 37 other: "{{count}} seconds"
38 38 less_than_x_minutes:
39 39 one: "less than a minute"
40 40 other: "less than {{count}} minutes"
41 41 x_minutes:
42 42 one: "1 minute"
43 43 other: "{{count}} minutes"
44 44 about_x_hours:
45 45 one: "about 1 hour"
46 46 other: "about {{count}} hours"
47 47 x_days:
48 48 one: "1 day"
49 49 other: "{{count}} days"
50 50 about_x_months:
51 51 one: "about 1 month"
52 52 other: "about {{count}} months"
53 53 x_months:
54 54 one: "1 month"
55 55 other: "{{count}} months"
56 56 about_x_years:
57 57 one: "about 1 year"
58 58 other: "about {{count}} years"
59 59 over_x_years:
60 60 one: "over 1 year"
61 61 other: "over {{count}} years"
62 62
63 63 number:
64 64 human:
65 65 format:
66 66 delimiter: ""
67 67 precision: 1
68 68 storage_units:
69 69 format: "%n %u"
70 70 units:
71 71 byte:
72 72 one: "Byte"
73 73 other: "Bytes"
74 74 kb: "KB"
75 75 mb: "MB"
76 76 gb: "GB"
77 77 tb: "TB"
78 78
79 79
80 80 # Used in array.to_sentence.
81 81 support:
82 82 array:
83 83 sentence_connector: "and"
84 84 skip_last_comma: false
85 85
86 86 activerecord:
87 87 errors:
88 88 messages:
89 89 inclusion: "is not included in the list"
90 90 exclusion: "is reserved"
91 91 invalid: "is invalid"
92 92 confirmation: "doesn't match confirmation"
93 93 accepted: "must be accepted"
94 94 empty: "can't be empty"
95 95 blank: "can't be blank"
96 96 too_long: "is too long (maximum is {{count}} characters)"
97 97 too_short: "is too short (minimum is {{count}} characters)"
98 98 wrong_length: "is the wrong length (should be {{count}} characters)"
99 99 taken: "has already been taken"
100 100 not_a_number: "is not a number"
101 101 not_a_date: "is not a valid date"
102 102 greater_than: "must be greater than {{count}}"
103 103 greater_than_or_equal_to: "must be greater than or equal to {{count}}"
104 104 equal_to: "must be equal to {{count}}"
105 105 less_than: "must be less than {{count}}"
106 106 less_than_or_equal_to: "must be less than or equal to {{count}}"
107 107 odd: "must be odd"
108 108 even: "must be even"
109 109 greater_than_start_date: "must be greater than start date"
110 110 not_same_project: "doesn't belong to the same project"
111 111 circular_dependency: "This relation would create a circular dependency"
112 112
113 113 actionview_instancetag_blank_option: Please select
114 114
115 115 general_text_No: 'No'
116 116 general_text_Yes: 'Yes'
117 117 general_text_no: 'no'
118 118 general_text_yes: 'yes'
119 119 general_lang_name: 'English'
120 120 general_csv_separator: ','
121 121 general_csv_decimal_separator: '.'
122 122 general_csv_encoding: ISO-8859-1
123 123 general_pdf_encoding: ISO-8859-1
124 124 general_first_day_of_week: '7'
125 125
126 126 notice_account_updated: Account was successfully updated.
127 127 notice_account_invalid_creditentials: Invalid user or password
128 128 notice_account_password_updated: Password was successfully updated.
129 129 notice_account_wrong_password: Wrong password
130 130 notice_account_register_done: Account was successfully created. To activate your account, click on the link that was emailed to you.
131 131 notice_account_unknown_email: Unknown user.
132 132 notice_can_t_change_password: This account uses an external authentication source. Impossible to change the password.
133 133 notice_account_lost_email_sent: An email with instructions to choose a new password has been sent to you.
134 134 notice_account_activated: Your account has been activated. You can now log in.
135 135 notice_successful_create: Successful creation.
136 136 notice_successful_update: Successful update.
137 137 notice_successful_delete: Successful deletion.
138 138 notice_successful_connection: Successful connection.
139 139 notice_file_not_found: The page you were trying to access doesn't exist or has been removed.
140 140 notice_locking_conflict: Data has been updated by another user.
141 141 notice_not_authorized: You are not authorized to access this page.
142 142 notice_email_sent: "An email was sent to {{value}}"
143 143 notice_email_error: "An error occurred while sending mail ({{value}})"
144 144 notice_feeds_access_key_reseted: Your RSS access key was reset.
145 145 notice_failed_to_save_issues: "Failed to save {{count}} issue(s) on {{total}} selected: {{ids}}."
146 146 notice_no_issue_selected: "No issue is selected! Please, check the issues you want to edit."
147 147 notice_account_pending: "Your account was created and is now pending administrator approval."
148 148 notice_default_data_loaded: Default configuration successfully loaded.
149 149 notice_unable_delete_version: Unable to delete version.
150 150 notice_issue_done_ratios_updated: Issue done ratios updated.
151 151
152 152 error_can_t_load_default_data: "Default configuration could not be loaded: {{value}}"
153 153 error_scm_not_found: "The entry or revision was not found in the repository."
154 154 error_scm_command_failed: "An error occurred when trying to access the repository: {{value}}"
155 155 error_scm_annotate: "The entry does not exist or can not be annotated."
156 156 error_issue_not_found_in_project: 'The issue was not found or does not belong to this project'
157 157 error_no_tracker_in_project: 'No tracker is associated to this project. Please check the Project settings.'
158 158 error_no_default_issue_status: 'No default issue status is defined. Please check your configuration (Go to "Administration -> Issue statuses").'
159 159 error_can_not_reopen_issue_on_closed_version: 'An issue assigned to a closed version can not be reopened'
160 160 error_can_not_archive_project: This project can not be archived
161 161 error_issue_done_ratios_not_updated: "Issue done ratios not updated."
162
162 error_workflow_copy_source: 'Please select a source tracker or role'
163 error_workflow_copy_target: 'Please select target tracker(s) and role(s)'
164
163 165 warning_attachments_not_saved: "{{count}} file(s) could not be saved."
164 166
165 167 mail_subject_lost_password: "Your {{value}} password"
166 168 mail_body_lost_password: 'To change your password, click on the following link:'
167 169 mail_subject_register: "Your {{value}} account activation"
168 170 mail_body_register: 'To activate your account, click on the following link:'
169 171 mail_body_account_information_external: "You can use your {{value}} account to log in."
170 172 mail_body_account_information: Your account information
171 173 mail_subject_account_activation_request: "{{value}} account activation request"
172 174 mail_body_account_activation_request: "A new user ({{value}}) has registered. The account is pending your approval:"
173 175 mail_subject_reminder: "{{count}} issue(s) due in the next days"
174 176 mail_body_reminder: "{{count}} issue(s) that are assigned to you are due in the next {{days}} days:"
175 177 mail_subject_wiki_content_added: "'{{page}}' wiki page has been added"
176 178 mail_body_wiki_content_added: "The '{{page}}' wiki page has been added by {{author}}."
177 179 mail_subject_wiki_content_updated: "'{{page}}' wiki page has been updated"
178 180 mail_body_wiki_content_updated: "The '{{page}}' wiki page has been updated by {{author}}."
179 181
180 182 gui_validation_error: 1 error
181 183 gui_validation_error_plural: "{{count}} errors"
182 184
183 185 field_name: Name
184 186 field_description: Description
185 187 field_summary: Summary
186 188 field_is_required: Required
187 189 field_firstname: Firstname
188 190 field_lastname: Lastname
189 191 field_mail: Email
190 192 field_filename: File
191 193 field_filesize: Size
192 194 field_downloads: Downloads
193 195 field_author: Author
194 196 field_created_on: Created
195 197 field_updated_on: Updated
196 198 field_field_format: Format
197 199 field_is_for_all: For all projects
198 200 field_possible_values: Possible values
199 201 field_regexp: Regular expression
200 202 field_min_length: Minimum length
201 203 field_max_length: Maximum length
202 204 field_value: Value
203 205 field_category: Category
204 206 field_title: Title
205 207 field_project: Project
206 208 field_issue: Issue
207 209 field_status: Status
208 210 field_notes: Notes
209 211 field_is_closed: Issue closed
210 212 field_is_default: Default value
211 213 field_tracker: Tracker
212 214 field_subject: Subject
213 215 field_due_date: Due date
214 216 field_assigned_to: Assigned to
215 217 field_priority: Priority
216 218 field_fixed_version: Target version
217 219 field_user: User
218 220 field_role: Role
219 221 field_homepage: Homepage
220 222 field_is_public: Public
221 223 field_parent: Subproject of
222 224 field_is_in_chlog: Issues displayed in changelog
223 225 field_is_in_roadmap: Issues displayed in roadmap
224 226 field_login: Login
225 227 field_mail_notification: Email notifications
226 228 field_admin: Administrator
227 229 field_last_login_on: Last connection
228 230 field_language: Language
229 231 field_effective_date: Date
230 232 field_password: Password
231 233 field_new_password: New password
232 234 field_password_confirmation: Confirmation
233 235 field_version: Version
234 236 field_type: Type
235 237 field_host: Host
236 238 field_port: Port
237 239 field_account: Account
238 240 field_base_dn: Base DN
239 241 field_attr_login: Login attribute
240 242 field_attr_firstname: Firstname attribute
241 243 field_attr_lastname: Lastname attribute
242 244 field_attr_mail: Email attribute
243 245 field_onthefly: On-the-fly user creation
244 246 field_start_date: Start
245 247 field_done_ratio: % Done
246 248 field_auth_source: Authentication mode
247 249 field_hide_mail: Hide my email address
248 250 field_comments: Comment
249 251 field_url: URL
250 252 field_start_page: Start page
251 253 field_subproject: Subproject
252 254 field_hours: Hours
253 255 field_activity: Activity
254 256 field_spent_on: Date
255 257 field_identifier: Identifier
256 258 field_is_filter: Used as a filter
257 259 field_issue_to: Related issue
258 260 field_delay: Delay
259 261 field_assignable: Issues can be assigned to this role
260 262 field_redirect_existing_links: Redirect existing links
261 263 field_estimated_hours: Estimated time
262 264 field_column_names: Columns
263 265 field_time_zone: Time zone
264 266 field_searchable: Searchable
265 267 field_default_value: Default value
266 268 field_comments_sorting: Display comments
267 269 field_parent_title: Parent page
268 270 field_editable: Editable
269 271 field_watcher: Watcher
270 272 field_identity_url: OpenID URL
271 273 field_content: Content
272 274 field_group_by: Group results by
273 275 field_sharing: Sharing
274 276
275 277 setting_app_title: Application title
276 278 setting_app_subtitle: Application subtitle
277 279 setting_welcome_text: Welcome text
278 280 setting_default_language: Default language
279 281 setting_login_required: Authentication required
280 282 setting_self_registration: Self-registration
281 283 setting_attachment_max_size: Attachment max. size
282 284 setting_issues_export_limit: Issues export limit
283 285 setting_mail_from: Emission email address
284 286 setting_bcc_recipients: Blind carbon copy recipients (bcc)
285 287 setting_plain_text_mail: Plain text mail (no HTML)
286 288 setting_host_name: Host name and path
287 289 setting_text_formatting: Text formatting
288 290 setting_wiki_compression: Wiki history compression
289 291 setting_feeds_limit: Feed content limit
290 292 setting_default_projects_public: New projects are public by default
291 293 setting_autofetch_changesets: Autofetch commits
292 294 setting_sys_api_enabled: Enable WS for repository management
293 295 setting_commit_ref_keywords: Referencing keywords
294 296 setting_commit_fix_keywords: Fixing keywords
295 297 setting_autologin: Autologin
296 298 setting_date_format: Date format
297 299 setting_time_format: Time format
298 300 setting_cross_project_issue_relations: Allow cross-project issue relations
299 301 setting_issue_list_default_columns: Default columns displayed on the issue list
300 302 setting_repositories_encodings: Repositories encodings
301 303 setting_commit_logs_encoding: Commit messages encoding
302 304 setting_emails_footer: Emails footer
303 305 setting_protocol: Protocol
304 306 setting_per_page_options: Objects per page options
305 307 setting_user_format: Users display format
306 308 setting_activity_days_default: Days displayed on project activity
307 309 setting_display_subprojects_issues: Display subprojects issues on main projects by default
308 310 setting_enabled_scm: Enabled SCM
309 311 setting_mail_handler_api_enabled: Enable WS for incoming emails
310 312 setting_mail_handler_api_key: API key
311 313 setting_sequential_project_identifiers: Generate sequential project identifiers
312 314 setting_gravatar_enabled: Use Gravatar user icons
313 315 setting_gravatar_default: Default Gravatar image
314 316 setting_issue_done_ratio: Calculate the issue done ratio with
315 317 setting_diff_max_lines_displayed: Max number of diff lines displayed
316 318 setting_file_max_size_displayed: Max size of text files displayed inline
317 319 setting_repository_log_display_limit: Maximum number of revisions displayed on file log
318 320 setting_openid: Allow OpenID login and registration
319 321 setting_password_min_length: Minimum password length
320 322 setting_new_project_user_role_id: Role given to a non-admin user who creates a project
321 323 setting_default_projects_modules: Default enabled modules for new projects
322 324
323 325 permission_add_project: Create project
324 326 permission_edit_project: Edit project
325 327 permission_select_project_modules: Select project modules
326 328 permission_manage_members: Manage members
327 329 permission_manage_versions: Manage versions
328 330 permission_manage_categories: Manage issue categories
329 331 permission_add_issues: Add issues
330 332 permission_edit_issues: Edit issues
331 333 permission_manage_issue_relations: Manage issue relations
332 334 permission_add_issue_notes: Add notes
333 335 permission_edit_issue_notes: Edit notes
334 336 permission_edit_own_issue_notes: Edit own notes
335 337 permission_move_issues: Move issues
336 338 permission_delete_issues: Delete issues
337 339 permission_manage_public_queries: Manage public queries
338 340 permission_save_queries: Save queries
339 341 permission_view_gantt: View gantt chart
340 342 permission_view_calendar: View calendar
341 343 permission_view_issue_watchers: View watchers list
342 344 permission_add_issue_watchers: Add watchers
343 345 permission_delete_issue_watchers: Delete watchers
344 346 permission_log_time: Log spent time
345 347 permission_view_time_entries: View spent time
346 348 permission_edit_time_entries: Edit time logs
347 349 permission_edit_own_time_entries: Edit own time logs
348 350 permission_manage_news: Manage news
349 351 permission_comment_news: Comment news
350 352 permission_manage_documents: Manage documents
351 353 permission_view_documents: View documents
352 354 permission_manage_files: Manage files
353 355 permission_view_files: View files
354 356 permission_manage_wiki: Manage wiki
355 357 permission_rename_wiki_pages: Rename wiki pages
356 358 permission_delete_wiki_pages: Delete wiki pages
357 359 permission_view_wiki_pages: View wiki
358 360 permission_view_wiki_edits: View wiki history
359 361 permission_edit_wiki_pages: Edit wiki pages
360 362 permission_delete_wiki_pages_attachments: Delete attachments
361 363 permission_protect_wiki_pages: Protect wiki pages
362 364 permission_manage_repository: Manage repository
363 365 permission_browse_repository: Browse repository
364 366 permission_view_changesets: View changesets
365 367 permission_commit_access: Commit access
366 368 permission_manage_boards: Manage boards
367 369 permission_view_messages: View messages
368 370 permission_add_messages: Post messages
369 371 permission_edit_messages: Edit messages
370 372 permission_edit_own_messages: Edit own messages
371 373 permission_delete_messages: Delete messages
372 374 permission_delete_own_messages: Delete own messages
373 375
374 376 project_module_issue_tracking: Issue tracking
375 377 project_module_time_tracking: Time tracking
376 378 project_module_news: News
377 379 project_module_documents: Documents
378 380 project_module_files: Files
379 381 project_module_wiki: Wiki
380 382 project_module_repository: Repository
381 383 project_module_boards: Boards
382 384
383 385 label_user: User
384 386 label_user_plural: Users
385 387 label_user_new: New user
386 388 label_user_anonymous: Anonymous
387 389 label_project: Project
388 390 label_project_new: New project
389 391 label_project_plural: Projects
390 392 label_x_projects:
391 393 zero: no projects
392 394 one: 1 project
393 395 other: "{{count}} projects"
394 396 label_project_all: All Projects
395 397 label_project_latest: Latest projects
396 398 label_issue: Issue
397 399 label_issue_new: New issue
398 400 label_issue_plural: Issues
399 401 label_issue_view_all: View all issues
400 402 label_issues_by: "Issues by {{value}}"
401 403 label_issue_added: Issue added
402 404 label_issue_updated: Issue updated
403 405 label_document: Document
404 406 label_document_new: New document
405 407 label_document_plural: Documents
406 408 label_document_added: Document added
407 409 label_role: Role
408 410 label_role_plural: Roles
409 411 label_role_new: New role
410 412 label_role_and_permissions: Roles and permissions
411 413 label_member: Member
412 414 label_member_new: New member
413 415 label_member_plural: Members
414 416 label_tracker: Tracker
415 417 label_tracker_plural: Trackers
416 418 label_tracker_new: New tracker
417 419 label_workflow: Workflow
418 420 label_issue_status: Issue status
419 421 label_issue_status_plural: Issue statuses
420 422 label_issue_status_new: New status
421 423 label_issue_category: Issue category
422 424 label_issue_category_plural: Issue categories
423 425 label_issue_category_new: New category
424 426 label_custom_field: Custom field
425 427 label_custom_field_plural: Custom fields
426 428 label_custom_field_new: New custom field
427 429 label_enumerations: Enumerations
428 430 label_enumeration_new: New value
429 431 label_information: Information
430 432 label_information_plural: Information
431 433 label_please_login: Please log in
432 434 label_register: Register
433 435 label_login_with_open_id_option: or login with OpenID
434 436 label_password_lost: Lost password
435 437 label_home: Home
436 438 label_my_page: My page
437 439 label_my_account: My account
438 440 label_my_projects: My projects
439 441 label_administration: Administration
440 442 label_login: Sign in
441 443 label_logout: Sign out
442 444 label_help: Help
443 445 label_reported_issues: Reported issues
444 446 label_assigned_to_me_issues: Issues assigned to me
445 447 label_last_login: Last connection
446 448 label_registered_on: Registered on
447 449 label_activity: Activity
448 450 label_overall_activity: Overall activity
449 451 label_user_activity: "{{value}}'s activity"
450 452 label_new: New
451 453 label_logged_as: Logged in as
452 454 label_environment: Environment
453 455 label_authentication: Authentication
454 456 label_auth_source: Authentication mode
455 457 label_auth_source_new: New authentication mode
456 458 label_auth_source_plural: Authentication modes
457 459 label_subproject_plural: Subprojects
458 460 label_and_its_subprojects: "{{value}} and its subprojects"
459 461 label_min_max_length: Min - Max length
460 462 label_list: List
461 463 label_date: Date
462 464 label_integer: Integer
463 465 label_float: Float
464 466 label_boolean: Boolean
465 467 label_string: Text
466 468 label_text: Long text
467 469 label_attribute: Attribute
468 470 label_attribute_plural: Attributes
469 471 label_download: "{{count}} Download"
470 472 label_download_plural: "{{count}} Downloads"
471 473 label_no_data: No data to display
472 474 label_change_status: Change status
473 475 label_history: History
474 476 label_attachment: File
475 477 label_attachment_new: New file
476 478 label_attachment_delete: Delete file
477 479 label_attachment_plural: Files
478 480 label_file_added: File added
479 481 label_report: Report
480 482 label_report_plural: Reports
481 483 label_news: News
482 484 label_news_new: Add news
483 485 label_news_plural: News
484 486 label_news_latest: Latest news
485 487 label_news_view_all: View all news
486 488 label_news_added: News added
487 489 label_change_log: Change log
488 490 label_settings: Settings
489 491 label_overview: Overview
490 492 label_version: Version
491 493 label_version_new: New version
492 494 label_version_plural: Versions
493 495 label_confirmation: Confirmation
494 496 label_export_to: 'Also available in:'
495 497 label_read: Read...
496 498 label_public_projects: Public projects
497 499 label_open_issues: open
498 500 label_open_issues_plural: open
499 501 label_closed_issues: closed
500 502 label_closed_issues_plural: closed
501 503 label_x_open_issues_abbr_on_total:
502 504 zero: 0 open / {{total}}
503 505 one: 1 open / {{total}}
504 506 other: "{{count}} open / {{total}}"
505 507 label_x_open_issues_abbr:
506 508 zero: 0 open
507 509 one: 1 open
508 510 other: "{{count}} open"
509 511 label_x_closed_issues_abbr:
510 512 zero: 0 closed
511 513 one: 1 closed
512 514 other: "{{count}} closed"
513 515 label_total: Total
514 516 label_permissions: Permissions
515 517 label_current_status: Current status
516 518 label_new_statuses_allowed: New statuses allowed
517 519 label_all: all
518 520 label_none: none
519 521 label_nobody: nobody
520 522 label_next: Next
521 523 label_previous: Previous
522 524 label_used_by: Used by
523 525 label_details: Details
524 526 label_add_note: Add a note
525 527 label_per_page: Per page
526 528 label_calendar: Calendar
527 529 label_months_from: months from
528 530 label_gantt: Gantt
529 531 label_internal: Internal
530 532 label_last_changes: "last {{count}} changes"
531 533 label_change_view_all: View all changes
532 534 label_personalize_page: Personalize this page
533 535 label_comment: Comment
534 536 label_comment_plural: Comments
535 537 label_x_comments:
536 538 zero: no comments
537 539 one: 1 comment
538 540 other: "{{count}} comments"
539 541 label_comment_add: Add a comment
540 542 label_comment_added: Comment added
541 543 label_comment_delete: Delete comments
542 544 label_query: Custom query
543 545 label_query_plural: Custom queries
544 546 label_query_new: New query
545 547 label_filter_add: Add filter
546 548 label_filter_plural: Filters
547 549 label_equals: is
548 550 label_not_equals: is not
549 551 label_in_less_than: in less than
550 552 label_in_more_than: in more than
551 553 label_greater_or_equal: '>='
552 554 label_less_or_equal: '<='
553 555 label_in: in
554 556 label_today: today
555 557 label_all_time: all time
556 558 label_yesterday: yesterday
557 559 label_this_week: this week
558 560 label_last_week: last week
559 561 label_last_n_days: "last {{count}} days"
560 562 label_this_month: this month
561 563 label_last_month: last month
562 564 label_this_year: this year
563 565 label_date_range: Date range
564 566 label_less_than_ago: less than days ago
565 567 label_more_than_ago: more than days ago
566 568 label_ago: days ago
567 569 label_contains: contains
568 570 label_not_contains: doesn't contain
569 571 label_day_plural: days
570 572 label_repository: Repository
571 573 label_repository_plural: Repositories
572 574 label_browse: Browse
573 575 label_modification: "{{count}} change"
574 576 label_modification_plural: "{{count}} changes"
575 577 label_branch: Branch
576 578 label_tag: Tag
577 579 label_revision: Revision
578 580 label_revision_plural: Revisions
579 581 label_associated_revisions: Associated revisions
580 582 label_added: added
581 583 label_modified: modified
582 584 label_copied: copied
583 585 label_renamed: renamed
584 586 label_deleted: deleted
585 587 label_latest_revision: Latest revision
586 588 label_latest_revision_plural: Latest revisions
587 589 label_view_revisions: View revisions
588 590 label_view_all_revisions: View all revisions
589 591 label_max_size: Maximum size
590 592 label_sort_highest: Move to top
591 593 label_sort_higher: Move up
592 594 label_sort_lower: Move down
593 595 label_sort_lowest: Move to bottom
594 596 label_roadmap: Roadmap
595 597 label_roadmap_due_in: "Due in {{value}}"
596 598 label_roadmap_overdue: "{{value}} late"
597 599 label_roadmap_no_issues: No issues for this version
598 600 label_search: Search
599 601 label_result_plural: Results
600 602 label_all_words: All words
601 603 label_wiki: Wiki
602 604 label_wiki_edit: Wiki edit
603 605 label_wiki_edit_plural: Wiki edits
604 606 label_wiki_page: Wiki page
605 607 label_wiki_page_plural: Wiki pages
606 608 label_index_by_title: Index by title
607 609 label_index_by_date: Index by date
608 610 label_current_version: Current version
609 611 label_preview: Preview
610 612 label_feed_plural: Feeds
611 613 label_changes_details: Details of all changes
612 614 label_issue_tracking: Issue tracking
613 615 label_spent_time: Spent time
614 616 label_f_hour: "{{value}} hour"
615 617 label_f_hour_plural: "{{value}} hours"
616 618 label_time_tracking: Time tracking
617 619 label_change_plural: Changes
618 620 label_statistics: Statistics
619 621 label_commits_per_month: Commits per month
620 622 label_commits_per_author: Commits per author
621 623 label_view_diff: View differences
622 624 label_diff_inline: inline
623 625 label_diff_side_by_side: side by side
624 626 label_options: Options
625 627 label_copy_workflow_from: Copy workflow from
626 628 label_permissions_report: Permissions report
627 629 label_watched_issues: Watched issues
628 630 label_related_issues: Related issues
629 631 label_applied_status: Applied status
630 632 label_loading: Loading...
631 633 label_relation_new: New relation
632 634 label_relation_delete: Delete relation
633 635 label_relates_to: related to
634 636 label_duplicates: duplicates
635 637 label_duplicated_by: duplicated by
636 638 label_blocks: blocks
637 639 label_blocked_by: blocked by
638 640 label_precedes: precedes
639 641 label_follows: follows
640 642 label_end_to_start: end to start
641 643 label_end_to_end: end to end
642 644 label_start_to_start: start to start
643 645 label_start_to_end: start to end
644 646 label_stay_logged_in: Stay logged in
645 647 label_disabled: disabled
646 648 label_show_completed_versions: Show completed versions
647 649 label_me: me
648 650 label_board: Forum
649 651 label_board_new: New forum
650 652 label_board_plural: Forums
651 653 label_topic_plural: Topics
652 654 label_message_plural: Messages
653 655 label_message_last: Last message
654 656 label_message_new: New message
655 657 label_message_posted: Message added
656 658 label_reply_plural: Replies
657 659 label_send_information: Send account information to the user
658 660 label_year: Year
659 661 label_month: Month
660 662 label_week: Week
661 663 label_date_from: From
662 664 label_date_to: To
663 665 label_language_based: Based on user's language
664 666 label_sort_by: "Sort by {{value}}"
665 667 label_send_test_email: Send a test email
666 668 label_feeds_access_key_created_on: "RSS access key created {{value}} ago"
667 669 label_module_plural: Modules
668 670 label_added_time_by: "Added by {{author}} {{age}} ago"
669 671 label_updated_time_by: "Updated by {{author}} {{age}} ago"
670 672 label_updated_time: "Updated {{value}} ago"
671 673 label_jump_to_a_project: Jump to a project...
672 674 label_file_plural: Files
673 675 label_changeset_plural: Changesets
674 676 label_default_columns: Default columns
675 677 label_no_change_option: (No change)
676 678 label_bulk_edit_selected_issues: Bulk edit selected issues
677 679 label_theme: Theme
678 680 label_default: Default
679 681 label_search_titles_only: Search titles only
680 682 label_user_mail_option_all: "For any event on all my projects"
681 683 label_user_mail_option_selected: "For any event on the selected projects only..."
682 684 label_user_mail_option_none: "Only for things I watch or I'm involved in"
683 685 label_user_mail_no_self_notified: "I don't want to be notified of changes that I make myself"
684 686 label_registration_activation_by_email: account activation by email
685 687 label_registration_manual_activation: manual account activation
686 688 label_registration_automatic_activation: automatic account activation
687 689 label_display_per_page: "Per page: {{value}}"
688 690 label_age: Age
689 691 label_change_properties: Change properties
690 692 label_general: General
691 693 label_more: More
692 694 label_scm: SCM
693 695 label_plugins: Plugins
694 696 label_ldap_authentication: LDAP authentication
695 697 label_downloads_abbr: D/L
696 698 label_optional_description: Optional description
697 699 label_add_another_file: Add another file
698 700 label_preferences: Preferences
699 701 label_chronological_order: In chronological order
700 702 label_reverse_chronological_order: In reverse chronological order
701 703 label_planning: Planning
702 704 label_incoming_emails: Incoming emails
703 705 label_generate_key: Generate a key
704 706 label_issue_watchers: Watchers
705 707 label_example: Example
706 708 label_display: Display
707 709 label_sort: Sort
708 710 label_ascending: Ascending
709 711 label_descending: Descending
710 712 label_date_from_to: From {{start}} to {{end}}
711 713 label_wiki_content_added: Wiki page added
712 714 label_wiki_content_updated: Wiki page updated
713 715 label_group: Group
714 716 label_group_plural: Groups
715 717 label_group_new: New group
716 718 label_time_entry_plural: Spent time
717 719 label_version_sharing_none: Not shared
718 720 label_version_sharing_descendants: With subprojects
719 721 label_version_sharing_hierarchy: With project hierarchy
720 722 label_version_sharing_tree: With project tree
721 723 label_version_sharing_system: With all projects
722 724 label_update_issue_done_ratios: Update issue done ratios
725 label_copy_source: Source
726 label_copy_target: Target
727 label_copy_same_as_target: Same as target
723 728
724 729 button_login: Login
725 730 button_submit: Submit
726 731 button_save: Save
727 732 button_check_all: Check all
728 733 button_uncheck_all: Uncheck all
729 734 button_delete: Delete
730 735 button_create: Create
731 736 button_create_and_continue: Create and continue
732 737 button_test: Test
733 738 button_edit: Edit
734 739 button_add: Add
735 740 button_change: Change
736 741 button_apply: Apply
737 742 button_clear: Clear
738 743 button_lock: Lock
739 744 button_unlock: Unlock
740 745 button_download: Download
741 746 button_list: List
742 747 button_view: View
743 748 button_move: Move
744 749 button_move_and_follow: Move and follow
745 750 button_back: Back
746 751 button_cancel: Cancel
747 752 button_activate: Activate
748 753 button_sort: Sort
749 754 button_log_time: Log time
750 755 button_rollback: Rollback to this version
751 756 button_watch: Watch
752 757 button_unwatch: Unwatch
753 758 button_reply: Reply
754 759 button_archive: Archive
755 760 button_unarchive: Unarchive
756 761 button_reset: Reset
757 762 button_rename: Rename
758 763 button_change_password: Change password
759 764 button_copy: Copy
760 765 button_copy_and_follow: Copy and follow
761 766 button_annotate: Annotate
762 767 button_update: Update
763 768 button_configure: Configure
764 769 button_quote: Quote
765 770 button_duplicate: Duplicate
766 771
767 772 status_active: active
768 773 status_registered: registered
769 774 status_locked: locked
770 775
771 776 version_status_open: open
772 777 version_status_locked: locked
773 778 version_status_closed: closed
774 779
775 780 field_active: Active
776 781
777 782 text_select_mail_notifications: Select actions for which email notifications should be sent.
778 783 text_regexp_info: eg. ^[A-Z0-9]+$
779 784 text_min_max_length_info: 0 means no restriction
780 785 text_project_destroy_confirmation: Are you sure you want to delete this project and related data ?
781 786 text_subprojects_destroy_warning: "Its subproject(s): {{value}} will be also deleted."
782 787 text_workflow_edit: Select a role and a tracker to edit the workflow
783 788 text_are_you_sure: Are you sure ?
784 789 text_journal_changed: "{{label}} changed from {{old}} to {{new}}"
785 790 text_journal_set_to: "{{label}} set to {{value}}"
786 791 text_journal_deleted: "{{label}} deleted ({{old}})"
787 792 text_journal_added: "{{label}} {{value}} added"
788 793 text_tip_task_begin_day: task beginning this day
789 794 text_tip_task_end_day: task ending this day
790 795 text_tip_task_begin_end_day: task beginning and ending this day
791 796 text_project_identifier_info: 'Only lower case letters (a-z), numbers and dashes are allowed.<br />Once saved, the identifier can not be changed.'
792 797 text_caracters_maximum: "{{count}} characters maximum."
793 798 text_caracters_minimum: "Must be at least {{count}} characters long."
794 799 text_length_between: "Length between {{min}} and {{max}} characters."
795 800 text_tracker_no_workflow: No workflow defined for this tracker
796 801 text_unallowed_characters: Unallowed characters
797 802 text_comma_separated: Multiple values allowed (comma separated).
798 803 text_issues_ref_in_commit_messages: Referencing and fixing issues in commit messages
799 804 text_issue_added: "Issue {{id}} has been reported by {{author}}."
800 805 text_issue_updated: "Issue {{id}} has been updated by {{author}}."
801 806 text_wiki_destroy_confirmation: Are you sure you want to delete this wiki and all its content ?
802 807 text_issue_category_destroy_question: "Some issues ({{count}}) are assigned to this category. What do you want to do ?"
803 808 text_issue_category_destroy_assignments: Remove category assignments
804 809 text_issue_category_reassign_to: Reassign issues to this category
805 810 text_user_mail_option: "For unselected projects, you will only receive notifications about things you watch or you're involved in (eg. issues you're the author or assignee)."
806 811 text_no_configuration_data: "Roles, trackers, issue statuses and workflow have not been configured yet.\nIt is highly recommended to load the default configuration. You will be able to modify it once loaded."
807 812 text_load_default_configuration: Load the default configuration
808 813 text_status_changed_by_changeset: "Applied in changeset {{value}}."
809 814 text_issues_destroy_confirmation: 'Are you sure you want to delete the selected issue(s) ?'
810 815 text_select_project_modules: 'Select modules to enable for this project:'
811 816 text_default_administrator_account_changed: Default administrator account changed
812 817 text_file_repository_writable: Attachments directory writable
813 818 text_plugin_assets_writable: Plugin assets directory writable
814 819 text_rmagick_available: RMagick available (optional)
815 820 text_destroy_time_entries_question: "{{hours}} hours were reported on the issues you are about to delete. What do you want to do ?"
816 821 text_destroy_time_entries: Delete reported hours
817 822 text_assign_time_entries_to_project: Assign reported hours to the project
818 823 text_reassign_time_entries: 'Reassign reported hours to this issue:'
819 824 text_user_wrote: "{{value}} wrote:"
820 825 text_enumeration_destroy_question: "{{count}} objects are assigned to this value."
821 826 text_enumeration_category_reassign_to: 'Reassign them to this value:'
822 827 text_email_delivery_not_configured: "Email delivery is not configured, and notifications are disabled.\nConfigure your SMTP server in config/email.yml and restart the application to enable them."
823 828 text_repository_usernames_mapping: "Select or update the Redmine user mapped to each username found in the repository log.\nUsers with the same Redmine and repository username or email are automatically mapped."
824 829 text_diff_truncated: '... This diff was truncated because it exceeds the maximum size that can be displayed.'
825 830 text_custom_field_possible_values_info: 'One line for each value'
826 831 text_wiki_page_destroy_question: "This page has {{descendants}} child page(s) and descendant(s). What do you want to do?"
827 832 text_wiki_page_nullify_children: "Keep child pages as root pages"
828 833 text_wiki_page_destroy_children: "Delete child pages and all their descendants"
829 834 text_wiki_page_reassign_children: "Reassign child pages to this parent page"
830 835
831 836 default_role_manager: Manager
832 837 default_role_developper: Developer
833 838 default_role_reporter: Reporter
834 839 default_tracker_bug: Bug
835 840 default_tracker_feature: Feature
836 841 default_tracker_support: Support
837 842 default_issue_status_new: New
838 843 default_issue_status_in_progress: In Progress
839 844 default_issue_status_resolved: Resolved
840 845 default_issue_status_feedback: Feedback
841 846 default_issue_status_closed: Closed
842 847 default_issue_status_rejected: Rejected
843 848 default_doc_category_user: User documentation
844 849 default_doc_category_tech: Technical documentation
845 850 default_priority_low: Low
846 851 default_priority_normal: Normal
847 852 default_priority_high: High
848 853 default_priority_urgent: Urgent
849 854 default_priority_immediate: Immediate
850 855 default_activity_design: Design
851 856 default_activity_development: Development
852 857
853 858 enumeration_issue_priorities: Issue priorities
854 859 enumeration_doc_categories: Document categories
855 860 enumeration_activities: Activities (time tracking)
856 861 enumeration_system_activity: System Activity
857 862
858 863 issue_field: Use the issue field
859 864 issue_status: Use the issue status
@@ -1,875 +1,880
1 1 # French translations for Ruby on Rails
2 2 # by Christian Lescuyer (christian@flyingcoders.com)
3 3 # contributor: Sebastien Grosjean - ZenCocoon.com
4 4
5 5 fr:
6 6 date:
7 7 formats:
8 8 default: "%d/%m/%Y"
9 9 short: "%e %b"
10 10 long: "%e %B %Y"
11 11 long_ordinal: "%e %B %Y"
12 12 only_day: "%e"
13 13
14 14 day_names: [dimanche, lundi, mardi, mercredi, jeudi, vendredi, samedi]
15 15 abbr_day_names: [dim, lun, mar, mer, jeu, ven, sam]
16 16 month_names: [~, janvier, fΓ©vrier, mars, avril, mai, juin, juillet, aoΓ»t, septembre, octobre, novembre, dΓ©cembre]
17 17 abbr_month_names: [~, jan., fΓ©v., mar., avr., mai, juin, juil., aoΓ»t, sept., oct., nov., dΓ©c.]
18 18 order: [ :day, :month, :year ]
19 19
20 20 time:
21 21 formats:
22 22 default: "%d/%m/%Y %H:%M"
23 23 time: "%H:%M"
24 24 short: "%d %b %H:%M"
25 25 long: "%A %d %B %Y %H:%M:%S %Z"
26 26 long_ordinal: "%A %d %B %Y %H:%M:%S %Z"
27 27 only_second: "%S"
28 28 am: 'am'
29 29 pm: 'pm'
30 30
31 31 datetime:
32 32 distance_in_words:
33 33 half_a_minute: "30 secondes"
34 34 less_than_x_seconds:
35 35 zero: "moins d'une seconde"
36 36 one: "moins de 1Β seconde"
37 37 other: "moins de {{count}}Β secondes"
38 38 x_seconds:
39 39 one: "1Β seconde"
40 40 other: "{{count}}Β secondes"
41 41 less_than_x_minutes:
42 42 zero: "moins d'une minute"
43 43 one: "moins de 1Β minute"
44 44 other: "moins de {{count}}Β minutes"
45 45 x_minutes:
46 46 one: "1Β minute"
47 47 other: "{{count}}Β minutes"
48 48 about_x_hours:
49 49 one: "environ une heure"
50 50 other: "environ {{count}}Β heures"
51 51 x_days:
52 52 one: "1Β jour"
53 53 other: "{{count}}Β jours"
54 54 about_x_months:
55 55 one: "environ un mois"
56 56 other: "environ {{count}}Β mois"
57 57 x_months:
58 58 one: "1Β mois"
59 59 other: "{{count}}Β mois"
60 60 about_x_years:
61 61 one: "environ un an"
62 62 other: "environ {{count}}Β ans"
63 63 over_x_years:
64 64 one: "plus d'un an"
65 65 other: "plus de {{count}}Β ans"
66 66 prompts:
67 67 year: "AnnΓ©e"
68 68 month: "Mois"
69 69 day: "Jour"
70 70 hour: "Heure"
71 71 minute: "Minute"
72 72 second: "Seconde"
73 73
74 74 number:
75 75 format:
76 76 precision: 3
77 77 separator: ','
78 78 delimiter: 'Β '
79 79 currency:
80 80 format:
81 81 unit: '€'
82 82 precision: 2
83 83 format: '%nΒ %u'
84 84 human:
85 85 format:
86 86 precision: 2
87 87 storage_units:
88 88 format: "%n %u"
89 89 units:
90 90 byte:
91 91 one: "Octet"
92 92 other: "Octet"
93 93 kb: "ko"
94 94 mb: "Mo"
95 95 gb: "Go"
96 96 tb: "To"
97 97
98 98 support:
99 99 array:
100 100 sentence_connector: 'et'
101 101 skip_last_comma: true
102 102 word_connector: ", "
103 103 two_words_connector: " et "
104 104 last_word_connector: " et "
105 105
106 106 activerecord:
107 107 errors:
108 108 template:
109 109 header:
110 110 one: "Impossible d'enregistrer {{model}}: 1 erreur"
111 111 other: "Impossible d'enregistrer {{model}}: {{count}} erreurs."
112 112 body: "Veuillez vΓ©rifier les champs suivantsΒ :"
113 113 messages:
114 114 inclusion: "n'est pas inclus(e) dans la liste"
115 115 exclusion: "n'est pas disponible"
116 116 invalid: "n'est pas valide"
117 117 confirmation: "ne concorde pas avec la confirmation"
118 118 accepted: "doit Γͺtre acceptΓ©(e)"
119 119 empty: "doit Γͺtre renseignΓ©(e)"
120 120 blank: "doit Γͺtre renseignΓ©(e)"
121 121 too_long: "est trop long (pas plus de {{count}} caractères)"
122 122 too_short: "est trop court (au moins {{count}} caractères)"
123 123 wrong_length: "ne fait pas la bonne longueur (doit comporter {{count}} caractères)"
124 124 taken: "est dΓ©jΓ  utilisΓ©"
125 125 not_a_number: "n'est pas un nombre"
126 126 greater_than: "doit Γͺtre supΓ©rieur Γ  {{count}}"
127 127 greater_than_or_equal_to: "doit Γͺtre supΓ©rieur ou Γ©gal Γ  {{count}}"
128 128 equal_to: "doit Γͺtre Γ©gal Γ  {{count}}"
129 129 less_than: "doit Γͺtre infΓ©rieur Γ  {{count}}"
130 130 less_than_or_equal_to: "doit Γͺtre infΓ©rieur ou Γ©gal Γ  {{count}}"
131 131 odd: "doit Γͺtre impair"
132 132 even: "doit Γͺtre pair"
133 133 greater_than_start_date: "doit Γͺtre postΓ©rieure Γ  la date de dΓ©but"
134 134 not_same_project: "n'appartient pas au mΓͺme projet"
135 135 circular_dependency: "Cette relation crΓ©erait une dΓ©pendance circulaire"
136 136
137 137 actionview_instancetag_blank_option: Choisir
138 138
139 139 general_text_No: 'Non'
140 140 general_text_Yes: 'Oui'
141 141 general_text_no: 'non'
142 142 general_text_yes: 'oui'
143 143 general_lang_name: 'FranΓ§ais'
144 144 general_csv_separator: ';'
145 145 general_csv_decimal_separator: ','
146 146 general_csv_encoding: ISO-8859-1
147 147 general_pdf_encoding: ISO-8859-1
148 148 general_first_day_of_week: '1'
149 149
150 150 notice_account_updated: Le compte a été mis à jour avec succès.
151 151 notice_account_invalid_creditentials: Identifiant ou mot de passe invalide.
152 152 notice_account_password_updated: Mot de passe mis à jour avec succès.
153 153 notice_account_wrong_password: Mot de passe incorrect
154 154 notice_account_register_done: Un message contenant les instructions pour activer votre compte vous a Γ©tΓ© envoyΓ©.
155 155 notice_account_unknown_email: Aucun compte ne correspond Γ  cette adresse.
156 156 notice_can_t_change_password: Ce compte utilise une authentification externe. Impossible de changer le mot de passe.
157 157 notice_account_lost_email_sent: Un message contenant les instructions pour choisir un nouveau mot de passe vous a Γ©tΓ© envoyΓ©.
158 158 notice_account_activated: Votre compte a Γ©tΓ© activΓ©. Vous pouvez Γ  prΓ©sent vous connecter.
159 159 notice_successful_create: Création effectuée avec succès.
160 160 notice_successful_update: Mise à jour effectuée avec succès.
161 161 notice_successful_delete: Suppression effectuée avec succès.
162 162 notice_successful_connection: Connection rΓ©ussie.
163 163 notice_file_not_found: "La page Γ  laquelle vous souhaitez accΓ©der n'existe pas ou a Γ©tΓ© supprimΓ©e."
164 164 notice_locking_conflict: Les donnΓ©es ont Γ©tΓ© mises Γ  jour par un autre utilisateur. Mise Γ  jour impossible.
165 165 notice_not_authorized: "Vous n'Γͺtes pas autorisΓ©s Γ  accΓ©der Γ  cette page."
166 166 notice_email_sent: "Un email a Γ©tΓ© envoyΓ© Γ  {{value}}"
167 167 notice_email_error: "Erreur lors de l'envoi de l'email ({{value}})"
168 168 notice_feeds_access_key_reseted: "Votre clé d'accès aux flux RSS a été réinitialisée."
169 169 notice_failed_to_save_issues: "{{count}} demande(s) sur les {{total}} sΓ©lectionnΓ©es n'ont pas pu Γͺtre mise(s) Γ  jour: {{ids}}."
170 170 notice_no_issue_selected: "Aucune demande sΓ©lectionnΓ©e ! Cochez les demandes que vous voulez mettre Γ  jour."
171 171 notice_account_pending: "Votre compte a été créé et attend l'approbation de l'administrateur."
172 172 notice_default_data_loaded: Paramétrage par défaut chargé avec succès.
173 173 notice_unable_delete_version: Impossible de supprimer cette version.
174 174
175 175 error_can_t_load_default_data: "Une erreur s'est produite lors du chargement du paramΓ©trage: {{value}}"
176 176 error_scm_not_found: "L'entrΓ©e et/ou la rΓ©vision demandΓ©e n'existe pas dans le dΓ©pΓ΄t."
177 177 error_scm_command_failed: "Une erreur s'est produite lors de l'accès au dépôt: {{value}}"
178 178 error_scm_annotate: "L'entrΓ©e n'existe pas ou ne peut pas Γͺtre annotΓ©e."
179 179 error_issue_not_found_in_project: "La demande n'existe pas ou n'appartient pas Γ  ce projet"
180 180 error_can_not_reopen_issue_on_closed_version: 'Une demande assignΓ©e Γ  une version fermΓ©e ne peut pas Γͺtre rΓ©ouverte'
181 181 error_can_not_archive_project: "Ce projet ne peut pas Γͺtre archivΓ©"
182 error_workflow_copy_source: 'Veuillez sΓ©lectionner un tracker et/ou un rΓ΄le source'
183 error_workflow_copy_target: 'Veuillez sΓ©lectionner les trackers et rΓ΄les cibles'
182 184
183 185 warning_attachments_not_saved: "{{count}} fichier(s) n'ont pas pu Γͺtre sauvegardΓ©s."
184 186
185 187 mail_subject_lost_password: "Votre mot de passe {{value}}"
186 188 mail_body_lost_password: 'Pour changer votre mot de passe, cliquez sur le lien suivant:'
187 189 mail_subject_register: "Activation de votre compte {{value}}"
188 190 mail_body_register: 'Pour activer votre compte, cliquez sur le lien suivant:'
189 191 mail_body_account_information_external: "Vous pouvez utiliser votre compte {{value}} pour vous connecter."
190 192 mail_body_account_information: Paramètres de connexion de votre compte
191 193 mail_subject_account_activation_request: "Demande d'activation d'un compte {{value}}"
192 194 mail_body_account_activation_request: "Un nouvel utilisateur ({{value}}) s'est inscrit. Son compte nΓ©cessite votre approbation:"
193 195 mail_subject_reminder: "{{count}} demande(s) arrivent Γ  Γ©chΓ©ance"
194 196 mail_body_reminder: "{{count}} demande(s) qui vous sont assignΓ©es arrivent Γ  Γ©chΓ©ance dans les {{days}} prochains jours:"
195 197 mail_subject_wiki_content_added: "Page wiki '{{page}}' ajoutΓ©e"
196 198 mail_body_wiki_content_added: "La page wiki '{{page}}' a Γ©tΓ© ajoutΓ©e par {{author}}."
197 199 mail_subject_wiki_content_updated: "Page wiki '{{page}}' mise Γ  jour"
198 200 mail_body_wiki_content_updated: "La page wiki '{{page}}' a Γ©tΓ© mise Γ  jour par {{author}}."
199 201
200 202 gui_validation_error: 1 erreur
201 203 gui_validation_error_plural: "{{count}} erreurs"
202 204
203 205 field_name: Nom
204 206 field_description: Description
205 207 field_summary: RΓ©sumΓ©
206 208 field_is_required: Obligatoire
207 209 field_firstname: PrΓ©nom
208 210 field_lastname: Nom
209 211 field_mail: Email
210 212 field_filename: Fichier
211 213 field_filesize: Taille
212 214 field_downloads: TΓ©lΓ©chargements
213 215 field_author: Auteur
214 216 field_created_on: Créé
215 217 field_updated_on: Mis Γ  jour
216 218 field_field_format: Format
217 219 field_is_for_all: Pour tous les projets
218 220 field_possible_values: Valeurs possibles
219 221 field_regexp: Expression régulière
220 222 field_min_length: Longueur minimum
221 223 field_max_length: Longueur maximum
222 224 field_value: Valeur
223 225 field_category: CatΓ©gorie
224 226 field_title: Titre
225 227 field_project: Projet
226 228 field_issue: Demande
227 229 field_status: Statut
228 230 field_notes: Notes
229 231 field_is_closed: Demande fermΓ©e
230 232 field_is_default: Valeur par dΓ©faut
231 233 field_tracker: Tracker
232 234 field_subject: Sujet
233 235 field_due_date: EchΓ©ance
234 236 field_assigned_to: AssignΓ© Γ 
235 237 field_priority: PrioritΓ©
236 238 field_fixed_version: Version cible
237 239 field_user: Utilisateur
238 240 field_role: RΓ΄le
239 241 field_homepage: Site web
240 242 field_is_public: Public
241 243 field_parent: Sous-projet de
242 244 field_is_in_chlog: Demandes affichΓ©es dans l'historique
243 245 field_is_in_roadmap: Demandes affichΓ©es dans la roadmap
244 246 field_login: Identifiant
245 247 field_mail_notification: Notifications par mail
246 248 field_admin: Administrateur
247 249 field_last_login_on: Dernière connexion
248 250 field_language: Langue
249 251 field_effective_date: Date
250 252 field_password: Mot de passe
251 253 field_new_password: Nouveau mot de passe
252 254 field_password_confirmation: Confirmation
253 255 field_version: Version
254 256 field_type: Type
255 257 field_host: HΓ΄te
256 258 field_port: Port
257 259 field_account: Compte
258 260 field_base_dn: Base DN
259 261 field_attr_login: Attribut Identifiant
260 262 field_attr_firstname: Attribut PrΓ©nom
261 263 field_attr_lastname: Attribut Nom
262 264 field_attr_mail: Attribut Email
263 265 field_onthefly: CrΓ©ation des utilisateurs Γ  la volΓ©e
264 266 field_start_date: DΓ©but
265 267 field_done_ratio: % RΓ©alisΓ©
266 268 field_auth_source: Mode d'authentification
267 269 field_hide_mail: Cacher mon adresse mail
268 270 field_comments: Commentaire
269 271 field_url: URL
270 272 field_start_page: Page de dΓ©marrage
271 273 field_subproject: Sous-projet
272 274 field_hours: Heures
273 275 field_activity: ActivitΓ©
274 276 field_spent_on: Date
275 277 field_identifier: Identifiant
276 278 field_is_filter: UtilisΓ© comme filtre
277 279 field_issue_to: Demande liΓ©e
278 280 field_delay: Retard
279 281 field_assignable: Demandes assignables Γ  ce rΓ΄le
280 282 field_redirect_existing_links: Rediriger les liens existants
281 283 field_estimated_hours: Temps estimΓ©
282 284 field_column_names: Colonnes
283 285 field_time_zone: Fuseau horaire
284 286 field_searchable: UtilisΓ© pour les recherches
285 287 field_default_value: Valeur par dΓ©faut
286 288 field_comments_sorting: Afficher les commentaires
287 289 field_parent_title: Page parent
288 290 field_editable: Modifiable
289 291 field_watcher: Observateur
290 292 field_identity_url: URL OpenID
291 293 field_content: Contenu
292 294 field_group_by: Grouper par
293 295 field_sharing: Partage
294 296
295 297 setting_app_title: Titre de l'application
296 298 setting_app_subtitle: Sous-titre de l'application
297 299 setting_welcome_text: Texte d'accueil
298 300 setting_default_language: Langue par dΓ©faut
299 301 setting_login_required: Authentification obligatoire
300 302 setting_self_registration: Inscription des nouveaux utilisateurs
301 303 setting_attachment_max_size: Taille max des fichiers
302 304 setting_issues_export_limit: Limite export demandes
303 305 setting_mail_from: Adresse d'Γ©mission
304 306 setting_bcc_recipients: Destinataires en copie cachΓ©e (cci)
305 307 setting_plain_text_mail: Mail texte brut (non HTML)
306 308 setting_host_name: Nom d'hΓ΄te et chemin
307 309 setting_text_formatting: Formatage du texte
308 310 setting_wiki_compression: Compression historique wiki
309 311 setting_feeds_limit: Limite du contenu des flux RSS
310 312 setting_default_projects_public: DΓ©finir les nouveaux projects comme publics par dΓ©faut
311 313 setting_autofetch_changesets: RΓ©cupΓ©ration auto. des commits
312 314 setting_sys_api_enabled: Activer les WS pour la gestion des dΓ©pΓ΄ts
313 315 setting_commit_ref_keywords: Mot-clΓ©s de rΓ©fΓ©rencement
314 316 setting_commit_fix_keywords: Mot-clΓ©s de rΓ©solution
315 317 setting_autologin: Autologin
316 318 setting_date_format: Format de date
317 319 setting_time_format: Format d'heure
318 320 setting_cross_project_issue_relations: Autoriser les relations entre demandes de diffΓ©rents projets
319 321 setting_issue_list_default_columns: Colonnes affichΓ©es par dΓ©faut sur la liste des demandes
320 322 setting_repositories_encodings: Encodages des dΓ©pΓ΄ts
321 323 setting_commit_logs_encoding: Encodage des messages de commit
322 324 setting_emails_footer: Pied-de-page des emails
323 325 setting_protocol: Protocole
324 326 setting_per_page_options: Options d'objets affichΓ©s par page
325 327 setting_user_format: Format d'affichage des utilisateurs
326 328 setting_activity_days_default: Nombre de jours affichΓ©s sur l'activitΓ© des projets
327 329 setting_display_subprojects_issues: Afficher par dΓ©faut les demandes des sous-projets sur les projets principaux
328 330 setting_enabled_scm: SCM activΓ©s
329 331 setting_mail_handler_api_enabled: "Activer le WS pour la rΓ©ception d'emails"
330 332 setting_mail_handler_api_key: ClΓ© de protection de l'API
331 333 setting_sequential_project_identifiers: GΓ©nΓ©rer des identifiants de projet sΓ©quentiels
332 334 setting_gravatar_enabled: Afficher les Gravatar des utilisateurs
333 335 setting_diff_max_lines_displayed: Nombre maximum de lignes de diff affichΓ©es
334 336 setting_file_max_size_displayed: Taille maximum des fichiers texte affichΓ©s en ligne
335 337 setting_repository_log_display_limit: "Nombre maximum de revisions affichΓ©es sur l'historique d'un fichier"
336 338 setting_openid: "Autoriser l'authentification et l'enregistrement OpenID"
337 339 setting_password_min_length: Longueur minimum des mots de passe
338 340 setting_new_project_user_role_id: RΓ΄le donnΓ© Γ  un utilisateur non-administrateur qui crΓ©e un projet
339 341 setting_default_projects_modules: Modules activΓ©s par dΓ©faut pour les nouveaux projets
340 342
341 343 permission_add_project: CrΓ©er un projet
342 344 permission_edit_project: Modifier le projet
343 345 permission_select_project_modules: Choisir les modules
344 346 permission_manage_members: GΓ©rer les members
345 347 permission_manage_versions: GΓ©rer les versions
346 348 permission_manage_categories: GΓ©rer les catΓ©gories de demandes
347 349 permission_add_issues: CrΓ©er des demandes
348 350 permission_edit_issues: Modifier les demandes
349 351 permission_manage_issue_relations: GΓ©rer les relations
350 352 permission_add_issue_notes: Ajouter des notes
351 353 permission_edit_issue_notes: Modifier les notes
352 354 permission_edit_own_issue_notes: Modifier ses propres notes
353 355 permission_move_issues: DΓ©placer les demandes
354 356 permission_delete_issues: Supprimer les demandes
355 357 permission_manage_public_queries: GΓ©rer les requΓͺtes publiques
356 358 permission_save_queries: Sauvegarder les requΓͺtes
357 359 permission_view_gantt: Voir le gantt
358 360 permission_view_calendar: Voir le calendrier
359 361 permission_view_issue_watchers: Voir la liste des observateurs
360 362 permission_add_issue_watchers: Ajouter des observateurs
361 363 permission_delete_issue_watchers: Supprimer des observateurs
362 364 permission_log_time: Saisir le temps passΓ©
363 365 permission_view_time_entries: Voir le temps passΓ©
364 366 permission_edit_time_entries: Modifier les temps passΓ©s
365 367 permission_edit_own_time_entries: Modifier son propre temps passΓ©
366 368 permission_manage_news: GΓ©rer les annonces
367 369 permission_comment_news: Commenter les annonces
368 370 permission_manage_documents: GΓ©rer les documents
369 371 permission_view_documents: Voir les documents
370 372 permission_manage_files: GΓ©rer les fichiers
371 373 permission_view_files: Voir les fichiers
372 374 permission_manage_wiki: GΓ©rer le wiki
373 375 permission_rename_wiki_pages: Renommer les pages
374 376 permission_delete_wiki_pages: Supprimer les pages
375 377 permission_view_wiki_pages: Voir le wiki
376 378 permission_view_wiki_edits: "Voir l'historique des modifications"
377 379 permission_edit_wiki_pages: Modifier les pages
378 380 permission_delete_wiki_pages_attachments: Supprimer les fichiers joints
379 381 permission_protect_wiki_pages: ProtΓ©ger les pages
380 382 permission_manage_repository: GΓ©rer le dΓ©pΓ΄t de sources
381 383 permission_browse_repository: Parcourir les sources
382 384 permission_view_changesets: Voir les rΓ©visions
383 385 permission_commit_access: Droit de commit
384 386 permission_manage_boards: GΓ©rer les forums
385 387 permission_view_messages: Voir les messages
386 388 permission_add_messages: Poster un message
387 389 permission_edit_messages: Modifier les messages
388 390 permission_edit_own_messages: Modifier ses propres messages
389 391 permission_delete_messages: Supprimer les messages
390 392 permission_delete_own_messages: Supprimer ses propres messages
391 393
392 394 project_module_issue_tracking: Suivi des demandes
393 395 project_module_time_tracking: Suivi du temps passΓ©
394 396 project_module_news: Publication d'annonces
395 397 project_module_documents: Publication de documents
396 398 project_module_files: Publication de fichiers
397 399 project_module_wiki: Wiki
398 400 project_module_repository: DΓ©pΓ΄t de sources
399 401 project_module_boards: Forums de discussion
400 402
401 403 label_user: Utilisateur
402 404 label_user_plural: Utilisateurs
403 405 label_user_new: Nouvel utilisateur
404 406 label_user_anonymous: Anonyme
405 407 label_project: Projet
406 408 label_project_new: Nouveau projet
407 409 label_project_plural: Projets
408 410 label_x_projects:
409 411 zero: aucun projet
410 412 one: 1 projet
411 413 other: "{{count}} projets"
412 414 label_project_all: Tous les projets
413 415 label_project_latest: Derniers projets
414 416 label_issue: Demande
415 417 label_issue_new: Nouvelle demande
416 418 label_issue_plural: Demandes
417 419 label_issue_view_all: Voir toutes les demandes
418 420 label_issue_added: Demande ajoutΓ©e
419 421 label_issue_updated: Demande mise Γ  jour
420 422 label_issues_by: "Demandes par {{value}}"
421 423 label_document: Document
422 424 label_document_new: Nouveau document
423 425 label_document_plural: Documents
424 426 label_document_added: Document ajoutΓ©
425 427 label_role: RΓ΄le
426 428 label_role_plural: RΓ΄les
427 429 label_role_new: Nouveau rΓ΄le
428 430 label_role_and_permissions: RΓ΄les et permissions
429 431 label_member: Membre
430 432 label_member_new: Nouveau membre
431 433 label_member_plural: Membres
432 434 label_tracker: Tracker
433 435 label_tracker_plural: Trackers
434 436 label_tracker_new: Nouveau tracker
435 437 label_workflow: Workflow
436 438 label_issue_status: Statut de demandes
437 439 label_issue_status_plural: Statuts de demandes
438 440 label_issue_status_new: Nouveau statut
439 441 label_issue_category: CatΓ©gorie de demandes
440 442 label_issue_category_plural: CatΓ©gories de demandes
441 443 label_issue_category_new: Nouvelle catΓ©gorie
442 444 label_custom_field: Champ personnalisΓ©
443 445 label_custom_field_plural: Champs personnalisΓ©s
444 446 label_custom_field_new: Nouveau champ personnalisΓ©
445 447 label_enumerations: Listes de valeurs
446 448 label_enumeration_new: Nouvelle valeur
447 449 label_information: Information
448 450 label_information_plural: Informations
449 451 label_please_login: Identification
450 452 label_register: S'enregistrer
451 453 label_login_with_open_id_option: S'authentifier avec OpenID
452 454 label_password_lost: Mot de passe perdu
453 455 label_home: Accueil
454 456 label_my_page: Ma page
455 457 label_my_account: Mon compte
456 458 label_my_projects: Mes projets
457 459 label_administration: Administration
458 460 label_login: Connexion
459 461 label_logout: DΓ©connexion
460 462 label_help: Aide
461 463 label_reported_issues: Demandes soumises
462 464 label_assigned_to_me_issues: Demandes qui me sont assignΓ©es
463 465 label_last_login: Dernière connexion
464 466 label_registered_on: Inscrit le
465 467 label_activity: ActivitΓ©
466 468 label_overall_activity: ActivitΓ© globale
467 469 label_user_activity: "ActivitΓ© de {{value}}"
468 470 label_new: Nouveau
469 471 label_logged_as: ConnectΓ© en tant que
470 472 label_environment: Environnement
471 473 label_authentication: Authentification
472 474 label_auth_source: Mode d'authentification
473 475 label_auth_source_new: Nouveau mode d'authentification
474 476 label_auth_source_plural: Modes d'authentification
475 477 label_subproject_plural: Sous-projets
476 478 label_and_its_subprojects: "{{value}} et ses sous-projets"
477 479 label_min_max_length: Longueurs mini - maxi
478 480 label_list: Liste
479 481 label_date: Date
480 482 label_integer: Entier
481 483 label_float: Nombre dΓ©cimal
482 484 label_boolean: BoolΓ©en
483 485 label_string: Texte
484 486 label_text: Texte long
485 487 label_attribute: Attribut
486 488 label_attribute_plural: Attributs
487 489 label_download: "{{count}} TΓ©lΓ©chargement"
488 490 label_download_plural: "{{count}} TΓ©lΓ©chargements"
489 491 label_no_data: Aucune donnΓ©e Γ  afficher
490 492 label_change_status: Changer le statut
491 493 label_history: Historique
492 494 label_attachment: Fichier
493 495 label_attachment_new: Nouveau fichier
494 496 label_attachment_delete: Supprimer le fichier
495 497 label_attachment_plural: Fichiers
496 498 label_file_added: Fichier ajoutΓ©
497 499 label_report: Rapport
498 500 label_report_plural: Rapports
499 501 label_news: Annonce
500 502 label_news_new: Nouvelle annonce
501 503 label_news_plural: Annonces
502 504 label_news_latest: Dernières annonces
503 505 label_news_view_all: Voir toutes les annonces
504 506 label_news_added: Annonce ajoutΓ©e
505 507 label_change_log: Historique
506 508 label_settings: Configuration
507 509 label_overview: AperΓ§u
508 510 label_version: Version
509 511 label_version_new: Nouvelle version
510 512 label_version_plural: Versions
511 513 label_confirmation: Confirmation
512 514 label_export_to: 'Formats disponibles:'
513 515 label_read: Lire...
514 516 label_public_projects: Projets publics
515 517 label_open_issues: ouvert
516 518 label_open_issues_plural: ouverts
517 519 label_closed_issues: fermΓ©
518 520 label_closed_issues_plural: fermΓ©s
519 521 label_x_open_issues_abbr_on_total:
520 522 zero: 0 ouvert sur {{total}}
521 523 one: 1 ouvert sur {{total}}
522 524 other: "{{count}} ouverts sur {{total}}"
523 525 label_x_open_issues_abbr:
524 526 zero: 0 ouvert
525 527 one: 1 ouvert
526 528 other: "{{count}} ouverts"
527 529 label_x_closed_issues_abbr:
528 530 zero: 0 fermΓ©
529 531 one: 1 fermΓ©
530 532 other: "{{count}} fermΓ©s"
531 533 label_total: Total
532 534 label_permissions: Permissions
533 535 label_current_status: Statut actuel
534 536 label_new_statuses_allowed: Nouveaux statuts autorisΓ©s
535 537 label_all: tous
536 538 label_none: aucun
537 539 label_nobody: personne
538 540 label_next: Suivant
539 541 label_previous: PrΓ©cΓ©dent
540 542 label_used_by: UtilisΓ© par
541 543 label_details: DΓ©tails
542 544 label_add_note: Ajouter une note
543 545 label_per_page: Par page
544 546 label_calendar: Calendrier
545 547 label_months_from: mois depuis
546 548 label_gantt: Gantt
547 549 label_internal: Interne
548 550 label_last_changes: "{{count}} derniers changements"
549 551 label_change_view_all: Voir tous les changements
550 552 label_personalize_page: Personnaliser cette page
551 553 label_comment: Commentaire
552 554 label_comment_plural: Commentaires
553 555 label_x_comments:
554 556 zero: aucun commentaire
555 557 one: 1 commentaire
556 558 other: "{{count}} commentaires"
557 559 label_comment_add: Ajouter un commentaire
558 560 label_comment_added: Commentaire ajoutΓ©
559 561 label_comment_delete: Supprimer les commentaires
560 562 label_query: Rapport personnalisΓ©
561 563 label_query_plural: Rapports personnalisΓ©s
562 564 label_query_new: Nouveau rapport
563 565 label_filter_add: Ajouter le filtre
564 566 label_filter_plural: Filtres
565 567 label_equals: Γ©gal
566 568 label_not_equals: diffΓ©rent
567 569 label_in_less_than: dans moins de
568 570 label_in_more_than: dans plus de
569 571 label_in: dans
570 572 label_today: aujourd'hui
571 573 label_all_time: toute la pΓ©riode
572 574 label_yesterday: hier
573 575 label_this_week: cette semaine
574 576 label_last_week: la semaine dernière
575 577 label_last_n_days: "les {{count}} derniers jours"
576 578 label_this_month: ce mois-ci
577 579 label_last_month: le mois dernier
578 580 label_this_year: cette annΓ©e
579 581 label_date_range: PΓ©riode
580 582 label_less_than_ago: il y a moins de
581 583 label_more_than_ago: il y a plus de
582 584 label_ago: il y a
583 585 label_contains: contient
584 586 label_not_contains: ne contient pas
585 587 label_day_plural: jours
586 588 label_repository: DΓ©pΓ΄t
587 589 label_repository_plural: DΓ©pΓ΄ts
588 590 label_browse: Parcourir
589 591 label_modification: "{{count}} modification"
590 592 label_modification_plural: "{{count}} modifications"
591 593 label_revision: RΓ©vision
592 594 label_revision_plural: RΓ©visions
593 595 label_associated_revisions: RΓ©visions associΓ©es
594 596 label_added: ajoutΓ©
595 597 label_modified: modifiΓ©
596 598 label_copied: copiΓ©
597 599 label_renamed: renommΓ©
598 600 label_deleted: supprimΓ©
599 601 label_latest_revision: Dernière révision
600 602 label_latest_revision_plural: Dernières révisions
601 603 label_view_revisions: Voir les rΓ©visions
602 604 label_max_size: Taille maximale
603 605 label_sort_highest: Remonter en premier
604 606 label_sort_higher: Remonter
605 607 label_sort_lower: Descendre
606 608 label_sort_lowest: Descendre en dernier
607 609 label_roadmap: Roadmap
608 610 label_roadmap_due_in: "EchΓ©ance dans {{value}}"
609 611 label_roadmap_overdue: "En retard de {{value}}"
610 612 label_roadmap_no_issues: Aucune demande pour cette version
611 613 label_search: Recherche
612 614 label_result_plural: RΓ©sultats
613 615 label_all_words: Tous les mots
614 616 label_wiki: Wiki
615 617 label_wiki_edit: RΓ©vision wiki
616 618 label_wiki_edit_plural: RΓ©visions wiki
617 619 label_wiki_page: Page wiki
618 620 label_wiki_page_plural: Pages wiki
619 621 label_index_by_title: Index par titre
620 622 label_index_by_date: Index par date
621 623 label_current_version: Version actuelle
622 624 label_preview: PrΓ©visualisation
623 625 label_feed_plural: Flux RSS
624 626 label_changes_details: DΓ©tails de tous les changements
625 627 label_issue_tracking: Suivi des demandes
626 628 label_spent_time: Temps passΓ©
627 629 label_f_hour: "{{value}} heure"
628 630 label_f_hour_plural: "{{value}} heures"
629 631 label_time_tracking: Suivi du temps
630 632 label_change_plural: Changements
631 633 label_statistics: Statistiques
632 634 label_commits_per_month: Commits par mois
633 635 label_commits_per_author: Commits par auteur
634 636 label_view_diff: Voir les diffΓ©rences
635 637 label_diff_inline: en ligne
636 638 label_diff_side_by_side: cΓ΄te Γ  cΓ΄te
637 639 label_options: Options
638 640 label_copy_workflow_from: Copier le workflow de
639 641 label_permissions_report: Synthèse des permissions
640 642 label_watched_issues: Demandes surveillΓ©es
641 643 label_related_issues: Demandes liΓ©es
642 644 label_applied_status: Statut appliquΓ©
643 645 label_loading: Chargement...
644 646 label_relation_new: Nouvelle relation
645 647 label_relation_delete: Supprimer la relation
646 648 label_relates_to: liΓ© Γ 
647 649 label_duplicates: duplique
648 650 label_duplicated_by: dupliquΓ© par
649 651 label_blocks: bloque
650 652 label_blocked_by: bloquΓ© par
651 653 label_precedes: précède
652 654 label_follows: suit
653 655 label_end_to_start: fin Γ  dΓ©but
654 656 label_end_to_end: fin Γ  fin
655 657 label_start_to_start: dΓ©but Γ  dΓ©but
656 658 label_start_to_end: dΓ©but Γ  fin
657 659 label_stay_logged_in: Rester connectΓ©
658 660 label_disabled: dΓ©sactivΓ©
659 661 label_show_completed_versions: Voir les versions passΓ©es
660 662 label_me: moi
661 663 label_board: Forum
662 664 label_board_new: Nouveau forum
663 665 label_board_plural: Forums
664 666 label_topic_plural: Discussions
665 667 label_message_plural: Messages
666 668 label_message_last: Dernier message
667 669 label_message_new: Nouveau message
668 670 label_message_posted: Message ajoutΓ©
669 671 label_reply_plural: RΓ©ponses
670 672 label_send_information: Envoyer les informations Γ  l'utilisateur
671 673 label_year: AnnΓ©e
672 674 label_month: Mois
673 675 label_week: Semaine
674 676 label_date_from: Du
675 677 label_date_to: Au
676 678 label_language_based: BasΓ© sur la langue de l'utilisateur
677 679 label_sort_by: "Trier par {{value}}"
678 680 label_send_test_email: Envoyer un email de test
679 681 label_feeds_access_key_created_on: "Clé d'accès RSS créée il y a {{value}}"
680 682 label_module_plural: Modules
681 683 label_added_time_by: "AjoutΓ© par {{author}} il y a {{age}}"
682 684 label_updated_time_by: "Mis Γ  jour par {{author}} il y a {{age}}"
683 685 label_updated_time: "Mis Γ  jour il y a {{value}}"
684 686 label_jump_to_a_project: Aller Γ  un projet...
685 687 label_file_plural: Fichiers
686 688 label_changeset_plural: RΓ©visions
687 689 label_default_columns: Colonnes par dΓ©faut
688 690 label_no_change_option: (Pas de changement)
689 691 label_bulk_edit_selected_issues: Modifier les demandes sΓ©lectionnΓ©es
690 692 label_theme: Thème
691 693 label_default: DΓ©faut
692 694 label_search_titles_only: Uniquement dans les titres
693 695 label_user_mail_option_all: "Pour tous les Γ©vΓ©nements de tous mes projets"
694 696 label_user_mail_option_selected: "Pour tous les Γ©vΓ©nements des projets sΓ©lectionnΓ©s..."
695 697 label_user_mail_option_none: "Seulement pour ce que je surveille ou Γ  quoi je participe"
696 698 label_user_mail_no_self_notified: "Je ne veux pas Γͺtre notifiΓ© des changements que j'effectue"
697 699 label_registration_activation_by_email: activation du compte par email
698 700 label_registration_manual_activation: activation manuelle du compte
699 701 label_registration_automatic_activation: activation automatique du compte
700 702 label_display_per_page: "Par page: {{value}}"
701 703 label_age: Age
702 704 label_change_properties: Changer les propriΓ©tΓ©s
703 705 label_general: GΓ©nΓ©ral
704 706 label_more: Plus
705 707 label_scm: SCM
706 708 label_plugins: Plugins
707 709 label_ldap_authentication: Authentification LDAP
708 710 label_downloads_abbr: D/L
709 711 label_optional_description: Description facultative
710 712 label_add_another_file: Ajouter un autre fichier
711 713 label_preferences: PrΓ©fΓ©rences
712 714 label_chronological_order: Dans l'ordre chronologique
713 715 label_reverse_chronological_order: Dans l'ordre chronologique inverse
714 716 label_planning: Planning
715 717 label_incoming_emails: Emails entrants
716 718 label_generate_key: GΓ©nΓ©rer une clΓ©
717 719 label_issue_watchers: Observateurs
718 720 label_example: Exemple
719 721 label_display: Affichage
720 722 label_sort: Tri
721 723 label_ascending: Croissant
722 724 label_descending: DΓ©croissant
723 725 label_date_from_to: Du {{start}} au {{end}}
724 726 label_wiki_content_added: Page wiki ajoutΓ©e
725 727 label_wiki_content_updated: Page wiki mise Γ  jour
726 728 label_group_plural: Groupes
727 729 label_group: Groupe
728 730 label_group_new: Nouveau groupe
729 731 label_time_entry_plural: Temps passΓ©
730 732 label_version_sharing_none: Non partagΓ©
731 733 label_version_sharing_descendants: Avec les sous-projets
732 734 label_version_sharing_hierarchy: Avec toute la hiΓ©rarchie
733 735 label_version_sharing_tree: Avec tout l'arbre
734 736 label_version_sharing_system: Avec tous les projets
737 label_copy_source: Source
738 label_copy_target: Cible
739 label_copy_same_as_target: Comme la cible
735 740
736 741 button_login: Connexion
737 742 button_submit: Soumettre
738 743 button_save: Sauvegarder
739 744 button_check_all: Tout cocher
740 745 button_uncheck_all: Tout dΓ©cocher
741 746 button_delete: Supprimer
742 747 button_create: CrΓ©er
743 748 button_create_and_continue: CrΓ©er et continuer
744 749 button_test: Tester
745 750 button_edit: Modifier
746 751 button_add: Ajouter
747 752 button_change: Changer
748 753 button_apply: Appliquer
749 754 button_clear: Effacer
750 755 button_lock: Verrouiller
751 756 button_unlock: DΓ©verrouiller
752 757 button_download: TΓ©lΓ©charger
753 758 button_list: Lister
754 759 button_view: Voir
755 760 button_move: DΓ©placer
756 761 button_move_and_follow: DΓ©placer et suivre
757 762 button_back: Retour
758 763 button_cancel: Annuler
759 764 button_activate: Activer
760 765 button_sort: Trier
761 766 button_log_time: Saisir temps
762 767 button_rollback: Revenir Γ  cette version
763 768 button_watch: Surveiller
764 769 button_unwatch: Ne plus surveiller
765 770 button_reply: RΓ©pondre
766 771 button_archive: Archiver
767 772 button_unarchive: DΓ©sarchiver
768 773 button_reset: RΓ©initialiser
769 774 button_rename: Renommer
770 775 button_change_password: Changer de mot de passe
771 776 button_copy: Copier
772 777 button_copy_and_follow: Copier et suivre
773 778 button_annotate: Annoter
774 779 button_update: Mettre Γ  jour
775 780 button_configure: Configurer
776 781 button_quote: Citer
777 782 button_duplicate: Dupliquer
778 783
779 784 status_active: actif
780 785 status_registered: enregistrΓ©
781 786 status_locked: vΓ©rouillΓ©
782 787
783 788 version_status_open: ouvert
784 789 version_status_locked: vΓ©rouillΓ©
785 790 version_status_closed: fermΓ©
786 791
787 792 text_select_mail_notifications: Actions pour lesquelles une notification par e-mail est envoyΓ©e
788 793 text_regexp_info: ex. ^[A-Z0-9]+$
789 794 text_min_max_length_info: 0 pour aucune restriction
790 795 text_project_destroy_confirmation: Etes-vous sΓ»r de vouloir supprimer ce projet et toutes ses donnΓ©es ?
791 796 text_subprojects_destroy_warning: "Ses sous-projets: {{value}} seront Γ©galement supprimΓ©s."
792 797 text_workflow_edit: SΓ©lectionner un tracker et un rΓ΄le pour Γ©diter le workflow
793 798 text_are_you_sure: Etes-vous sΓ»r ?
794 799 text_tip_task_begin_day: tΓ’che commenΓ§ant ce jour
795 800 text_tip_task_end_day: tΓ’che finissant ce jour
796 801 text_tip_task_begin_end_day: tΓ’che commenΓ§ant et finissant ce jour
797 802 text_project_identifier_info: 'Seuls les lettres minuscules (a-z), chiffres et tirets sont autorisΓ©s.<br />Un fois sauvegardΓ©, l''identifiant ne pourra plus Γͺtre modifiΓ©.'
798 803 text_caracters_maximum: "{{count}} caractères maximum."
799 804 text_caracters_minimum: "{{count}} caractères minimum."
800 805 text_length_between: "Longueur comprise entre {{min}} et {{max}} caractères."
801 806 text_tracker_no_workflow: Aucun worflow n'est dΓ©fini pour ce tracker
802 807 text_unallowed_characters: Caractères non autorisés
803 808 text_comma_separated: Plusieurs valeurs possibles (sΓ©parΓ©es par des virgules).
804 809 text_issues_ref_in_commit_messages: RΓ©fΓ©rencement et rΓ©solution des demandes dans les commentaires de commits
805 810 text_issue_added: "La demande {{id}} a Γ©tΓ© soumise par {{author}}."
806 811 text_issue_updated: "La demande {{id}} a Γ©tΓ© mise Γ  jour par {{author}}."
807 812 text_wiki_destroy_confirmation: Etes-vous sΓ»r de vouloir supprimer ce wiki et tout son contenu ?
808 813 text_issue_category_destroy_question: "{{count}} demandes sont affectΓ©es Γ  cette catΓ©gories. Que voulez-vous faire ?"
809 814 text_issue_category_destroy_assignments: N'affecter les demandes Γ  aucune autre catΓ©gorie
810 815 text_issue_category_reassign_to: RΓ©affecter les demandes Γ  cette catΓ©gorie
811 816 text_user_mail_option: "Pour les projets non sΓ©lectionnΓ©s, vous recevrez seulement des notifications pour ce que vous surveillez ou Γ  quoi vous participez (exemple: demandes dont vous Γͺtes l'auteur ou la personne assignΓ©e)."
812 817 text_no_configuration_data: "Les rΓ΄les, trackers, statuts et le workflow ne sont pas encore paramΓ©trΓ©s.\nIl est vivement recommandΓ© de charger le paramΓ©trage par defaut. Vous pourrez le modifier une fois chargΓ©."
813 818 text_load_default_configuration: Charger le paramΓ©trage par dΓ©faut
814 819 text_status_changed_by_changeset: "AppliquΓ© par commit {{value}}."
815 820 text_issues_destroy_confirmation: 'Etes-vous sΓ»r de vouloir supprimer le(s) demandes(s) selectionnΓ©e(s) ?'
816 821 text_select_project_modules: 'Selectionner les modules Γ  activer pour ce project:'
817 822 text_default_administrator_account_changed: Compte administrateur par dΓ©faut changΓ©
818 823 text_file_repository_writable: RΓ©pertoire de stockage des fichiers accessible en Γ©criture
819 824 text_plugin_assets_writable: RΓ©pertoire public des plugins accessible en Γ©criture
820 825 text_rmagick_available: Bibliothèque RMagick présente (optionnelle)
821 826 text_destroy_time_entries_question: "{{hours}} heures ont Γ©tΓ© enregistrΓ©es sur les demandes Γ  supprimer. Que voulez-vous faire ?"
822 827 text_destroy_time_entries: Supprimer les heures
823 828 text_assign_time_entries_to_project: Reporter les heures sur le projet
824 829 text_reassign_time_entries: 'Reporter les heures sur cette demande:'
825 830 text_user_wrote: "{{value}} a Γ©crit:"
826 831 text_enumeration_destroy_question: "Cette valeur est affectΓ©e Γ  {{count}} objets."
827 832 text_enumeration_category_reassign_to: 'RΓ©affecter les objets Γ  cette valeur:'
828 833 text_email_delivery_not_configured: "L'envoi de mail n'est pas configurΓ©, les notifications sont dΓ©sactivΓ©es.\nConfigurez votre serveur SMTP dans config/email.yml et redΓ©marrez l'application pour les activer."
829 834 text_repository_usernames_mapping: "Vous pouvez sΓ©lectionner ou modifier l'utilisateur Redmine associΓ© Γ  chaque nom d'utilisateur figurant dans l'historique du dΓ©pΓ΄t.\nLes utilisateurs avec le mΓͺme identifiant ou la mΓͺme adresse mail seront automatiquement associΓ©s."
830 835 text_diff_truncated: '... Ce diffΓ©rentiel a Γ©tΓ© tronquΓ© car il excΓ¨de la taille maximale pouvant Γͺtre affichΓ©e.'
831 836 text_custom_field_possible_values_info: 'Une ligne par valeur'
832 837 text_wiki_page_destroy_question: "Cette page possède {{descendants}} sous-page(s) et descendante(s). Que voulez-vous faire ?"
833 838 text_wiki_page_nullify_children: "Conserver les sous-pages en tant que pages racines"
834 839 text_wiki_page_destroy_children: "Supprimer les sous-pages et toutes leurs descedantes"
835 840 text_wiki_page_reassign_children: "RΓ©affecter les sous-pages Γ  cette page"
836 841
837 842 default_role_manager: Manager
838 843 default_role_developper: DΓ©veloppeur
839 844 default_role_reporter: Rapporteur
840 845 default_tracker_bug: Anomalie
841 846 default_tracker_feature: Evolution
842 847 default_tracker_support: Assistance
843 848 default_issue_status_new: Nouveau
844 849 default_issue_status_in_progress: In Progress
845 850 default_issue_status_resolved: RΓ©solu
846 851 default_issue_status_feedback: Commentaire
847 852 default_issue_status_closed: FermΓ©
848 853 default_issue_status_rejected: RejetΓ©
849 854 default_doc_category_user: Documentation utilisateur
850 855 default_doc_category_tech: Documentation technique
851 856 default_priority_low: Bas
852 857 default_priority_normal: Normal
853 858 default_priority_high: Haut
854 859 default_priority_urgent: Urgent
855 860 default_priority_immediate: ImmΓ©diat
856 861 default_activity_design: Conception
857 862 default_activity_development: DΓ©veloppement
858 863
859 864 enumeration_issue_priorities: PrioritΓ©s des demandes
860 865 enumeration_doc_categories: CatΓ©gories des documents
861 866 enumeration_activities: ActivitΓ©s (suivi du temps)
862 867 label_greater_or_equal: ">="
863 868 label_less_or_equal: "<="
864 869 label_view_all_revisions: Voir toutes les rΓ©visions
865 870 label_tag: Tag
866 871 label_branch: Branche
867 872 error_no_tracker_in_project: "Aucun tracker n'est associΓ© Γ  ce projet. VΓ©rifier la configuration du projet."
868 873 error_no_default_issue_status: "Aucun statut de demande n'est dΓ©fini par dΓ©faut. VΓ©rifier votre configuration (Administration -> Statuts de demandes)."
869 874 text_journal_changed: "{{label}} changΓ© de {{old}} Γ  {{new}}"
870 875 text_journal_set_to: "{{label}} mis Γ  {{value}}"
871 876 text_journal_deleted: "{{label}} {{old}} supprimΓ©"
872 877 text_journal_added: "{{label}} {{value}} ajoutΓ©"
873 878 field_active: Actif
874 879 enumeration_system_activity: Activité système
875 880 setting_gravatar_default: Default Gravatar image
@@ -1,816 +1,819
1 1 body { font-family: Verdana, sans-serif; font-size: 12px; color:#484848; margin: 0; padding: 0; min-width: 900px; }
2 2
3 3 h1, h2, h3, h4 { font-family: "Trebuchet MS", Verdana, sans-serif;}
4 4 h1 {margin:0; padding:0; font-size: 24px;}
5 5 h2, .wiki h1 {font-size: 20px;padding: 2px 10px 1px 0px;margin: 0 0 10px 0; border-bottom: 1px solid #bbbbbb; color: #444;}
6 6 h3, .wiki h2 {font-size: 16px;padding: 2px 10px 1px 0px;margin: 0 0 10px 0; border-bottom: 1px solid #bbbbbb; color: #444;}
7 7 h4, .wiki h3 {font-size: 13px;padding: 2px 10px 1px 0px;margin-bottom: 5px; border-bottom: 1px dotted #bbbbbb; color: #444;}
8 8
9 9 /***** Layout *****/
10 10 #wrapper {background: white;}
11 11
12 12 #top-menu {background: #2C4056; color: #fff; height:1.8em; font-size: 0.8em; padding: 2px 2px 0px 6px;}
13 13 #top-menu ul {margin: 0; padding: 0;}
14 14 #top-menu li {
15 15 float:left;
16 16 list-style-type:none;
17 17 margin: 0px 0px 0px 0px;
18 18 padding: 0px 0px 0px 0px;
19 19 white-space:nowrap;
20 20 }
21 21 #top-menu a {color: #fff; margin-right: 8px; font-weight: bold;}
22 22 #top-menu #loggedas { float: right; margin-right: 0.5em; color: #fff; }
23 23
24 24 #account {float:right;}
25 25
26 26 #header {height:5.3em;margin:0;background-color:#507AAA;color:#f8f8f8; padding: 4px 8px 0px 6px; position:relative;}
27 27 #header a {color:#f8f8f8;}
28 28 #header h1 a.ancestor { font-size: 80%; }
29 29 #quick-search {float:right;}
30 30
31 31 #main-menu {position: absolute; bottom: 0px; left:6px; margin-right: -500px;}
32 32 #main-menu ul {margin: 0; padding: 0;}
33 33 #main-menu li {
34 34 float:left;
35 35 list-style-type:none;
36 36 margin: 0px 2px 0px 0px;
37 37 padding: 0px 0px 0px 0px;
38 38 white-space:nowrap;
39 39 }
40 40 #main-menu li a {
41 41 display: block;
42 42 color: #fff;
43 43 text-decoration: none;
44 44 font-weight: bold;
45 45 margin: 0;
46 46 padding: 4px 10px 4px 10px;
47 47 }
48 48 #main-menu li a:hover {background:#759FCF; color:#fff;}
49 49 #main-menu li a.selected, #main-menu li a.selected:hover {background:#fff; color:#555;}
50 50
51 51 #main {background-color:#EEEEEE;}
52 52
53 53 #sidebar{ float: right; width: 17%; position: relative; z-index: 9; min-height: 600px; padding: 0; margin: 0;}
54 54 * html #sidebar{ width: 17%; }
55 55 #sidebar h3{ font-size: 14px; margin-top:14px; color: #666; }
56 56 #sidebar hr{ width: 100%; margin: 0 auto; height: 1px; background: #ccc; border: 0; }
57 57 * html #sidebar hr{ width: 95%; position: relative; left: -6px; color: #ccc; }
58 58
59 59 #content { width: 80%; background-color: #fff; margin: 0px; border-right: 1px solid #ddd; padding: 6px 10px 10px 10px; z-index: 10; }
60 60 * html #content{ width: 80%; padding-left: 0; margin-top: 0px; padding: 6px 10px 10px 10px;}
61 61 html>body #content { min-height: 600px; }
62 62 * html body #content { height: 600px; } /* IE */
63 63
64 64 #main.nosidebar #sidebar{ display: none; }
65 65 #main.nosidebar #content{ width: auto; border-right: 0; }
66 66
67 67 #footer {clear: both; border-top: 1px solid #bbb; font-size: 0.9em; color: #aaa; padding: 5px; text-align:center; background:#fff;}
68 68
69 69 #login-form table {margin-top:5em; padding:1em; margin-left: auto; margin-right: auto; border: 2px solid #FDBF3B; background-color:#FFEBC1; }
70 70 #login-form table td {padding: 6px;}
71 71 #login-form label {font-weight: bold;}
72 72 #login-form input#username, #login-form input#password { width: 300px; }
73 73
74 74 input#openid_url { background: url(../images/openid-bg.gif) no-repeat; background-color: #fff; background-position: 0 50%; padding-left: 18px; }
75 75
76 76 .clear:after{ content: "."; display: block; height: 0; clear: both; visibility: hidden; }
77 77
78 78 /***** Links *****/
79 79 a, a:link, a:visited{ color: #2A5685; text-decoration: none; }
80 80 a:hover, a:active{ color: #c61a1a; text-decoration: underline;}
81 81 a img{ border: 0; }
82 82
83 83 a.issue.closed, a.issue.closed:link, a.issue.closed:visited { color: #999; text-decoration: line-through; }
84 84
85 85 /***** Tables *****/
86 86 table.list { border: 1px solid #e4e4e4; border-collapse: collapse; width: 100%; margin-bottom: 4px; }
87 87 table.list th { background-color:#EEEEEE; padding: 4px; white-space:nowrap; }
88 88 table.list td { vertical-align: top; }
89 89 table.list td.id { width: 2%; text-align: center;}
90 90 table.list td.checkbox { width: 15px; padding: 0px;}
91 91 table.list td.buttons { width: 15%; white-space:nowrap; text-align: right; }
92 92 table.list td.buttons a { padding-right: 0.6em; }
93 93
94 94 tr.project td.name a { padding-left: 16px; white-space:nowrap; }
95 95 tr.project.parent td.name a { background: url('../images/bullet_toggle_minus.png') no-repeat; }
96 96
97 97 tr.issue { text-align: center; white-space: nowrap; }
98 98 tr.issue td.subject, tr.issue td.category, td.assigned_to { white-space: normal; }
99 99 tr.issue td.subject { text-align: left; }
100 100 tr.issue td.done_ratio table.progress { margin-left:auto; margin-right: auto;}
101 101
102 102 tr.entry { border: 1px solid #f8f8f8; }
103 103 tr.entry td { white-space: nowrap; }
104 104 tr.entry td.filename { width: 30%; }
105 105 tr.entry td.size { text-align: right; font-size: 90%; }
106 106 tr.entry td.revision, tr.entry td.author { text-align: center; }
107 107 tr.entry td.age { text-align: right; }
108 108 tr.entry.file td.filename a { margin-left: 16px; }
109 109
110 110 tr span.expander {background-image: url(../images/bullet_toggle_plus.png); padding-left: 8px; margin-left: 0; cursor: pointer;}
111 111 tr.open span.expander {background-image: url(../images/bullet_toggle_minus.png);}
112 112
113 113 tr.changeset td.author { text-align: center; width: 15%; }
114 114 tr.changeset td.committed_on { text-align: center; width: 15%; }
115 115
116 116 table.files tr.file td { text-align: center; }
117 117 table.files tr.file td.filename { text-align: left; padding-left: 24px; }
118 118 table.files tr.file td.digest { font-size: 80%; }
119 119
120 120 table.members td.roles, table.memberships td.roles { width: 45%; }
121 121
122 122 tr.message { height: 2.6em; }
123 123 tr.message td.last_message { font-size: 80%; }
124 124 tr.message.locked td.subject a { background-image: url(../images/locked.png); }
125 125 tr.message.sticky td.subject a { background-image: url(../images/sticky.png); font-weight: bold; }
126 126
127 127 tr.version.closed, tr.version.closed a { color: #999; }
128 128 tr.version td.name { padding-left: 20px; }
129 129 tr.version.shared td.name { background: url(../images/link.png) no-repeat 0% 70%; }
130 130 tr.version td.date, tr.version td.status, tr.version td.sharing { text-align: center; }
131 131
132 132 tr.user td { width:13%; }
133 133 tr.user td.email { width:18%; }
134 134 tr.user td { white-space: nowrap; }
135 135 tr.user.locked, tr.user.registered { color: #aaa; }
136 136 tr.user.locked a, tr.user.registered a { color: #aaa; }
137 137
138 138 tr.time-entry { text-align: center; white-space: nowrap; }
139 139 tr.time-entry td.subject, tr.time-entry td.comments { text-align: left; white-space: normal; }
140 140 td.hours { text-align: right; font-weight: bold; padding-right: 0.5em; }
141 141 td.hours .hours-dec { font-size: 0.9em; }
142 142
143 143 table.plugins td { vertical-align: middle; }
144 144 table.plugins td.configure { text-align: right; padding-right: 1em; }
145 145 table.plugins span.name { font-weight: bold; display: block; margin-bottom: 6px; }
146 146 table.plugins span.description { display: block; font-size: 0.9em; }
147 147 table.plugins span.url { display: block; font-size: 0.9em; }
148 148
149 149 table.list tbody tr.group td { padding: 0.8em 0 0.5em 0.3em; font-weight: bold; border-bottom: 1px solid #ccc; }
150 150 table.list tbody tr.group span.count { color: #aaa; font-size: 80%; }
151 151
152 152 table.list tbody tr:hover { background-color:#ffffdd; }
153 153 table.list tbody tr.group:hover { background-color:inherit; }
154 154 table td {padding:2px;}
155 155 table p {margin:0;}
156 156 .odd {background-color:#f6f7f8;}
157 157 .even {background-color: #fff;}
158 158
159 159 a.sort { padding-right: 16px; background-position: 100% 50%; background-repeat: no-repeat; }
160 160 a.sort.asc { background-image: url(../images/sort_asc.png); }
161 161 a.sort.desc { background-image: url(../images/sort_desc.png); }
162 162
163 163 table.attributes { width: 100% }
164 164 table.attributes th { vertical-align: top; text-align: left; }
165 165 table.attributes td { vertical-align: top; }
166 166
167 167 td.center {text-align:center;}
168 168
169 169 .highlight { background-color: #FCFD8D;}
170 170 .highlight.token-1 { background-color: #faa;}
171 171 .highlight.token-2 { background-color: #afa;}
172 172 .highlight.token-3 { background-color: #aaf;}
173 173
174 174 .box{
175 175 padding:6px;
176 176 margin-bottom: 10px;
177 177 background-color:#f6f6f6;
178 178 color:#505050;
179 179 line-height:1.5em;
180 180 border: 1px solid #e4e4e4;
181 181 }
182 182
183 183 div.square {
184 184 border: 1px solid #999;
185 185 float: left;
186 186 margin: .3em .4em 0 .4em;
187 187 overflow: hidden;
188 188 width: .6em; height: .6em;
189 189 }
190 190 .contextual {float:right; white-space: nowrap; line-height:1.4em;margin-top:5px; padding-left: 10px; font-size:0.9em;}
191 191 .contextual input, .contextual select {font-size:0.9em;}
192 192 .message .contextual { margin-top: 0; }
193 193
194 194 .splitcontentleft{float:left; width:49%;}
195 195 .splitcontentright{float:right; width:49%;}
196 196 form {display: inline;}
197 197 input, select {vertical-align: middle; margin-top: 1px; margin-bottom: 1px;}
198 198 fieldset {border: 1px solid #e4e4e4; margin:0;}
199 199 legend {color: #484848;}
200 200 hr { width: 100%; height: 1px; background: #ccc; border: 0;}
201 201 blockquote { font-style: italic; border-left: 3px solid #e0e0e0; padding-left: 0.6em; margin-left: 2.4em;}
202 202 blockquote blockquote { margin-left: 0;}
203 203 acronym { border-bottom: 1px dotted; cursor: help; }
204 204 textarea.wiki-edit { width: 99%; }
205 205 li p {margin-top: 0;}
206 206 div.issue {background:#ffffdd; padding:6px; margin-bottom:6px;border: 1px solid #d7d7d7;}
207 207 p.breadcrumb { font-size: 0.9em; margin: 4px 0 4px 0;}
208 208 p.subtitle { font-size: 0.9em; margin: -6px 0 12px 0; font-style: italic; }
209 209 p.footnote { font-size: 0.9em; margin-top: 0px; margin-bottom: 0px; }
210 210
211 211 fieldset.collapsible { border-width: 1px 0 0 0; font-size: 0.9em; }
212 212 fieldset.collapsible legend { padding-left: 16px; background: url(../images/arrow_expanded.png) no-repeat 0% 40%; cursor:pointer; }
213 213 fieldset.collapsible.collapsed legend { background-image: url(../images/arrow_collapsed.png); }
214 214
215 215 fieldset#date-range p { margin: 2px 0 2px 0; }
216 216 fieldset#filters table { border-collapse: collapse; }
217 217 fieldset#filters table td { padding: 0; vertical-align: middle; }
218 218 fieldset#filters tr.filter { height: 2em; }
219 219 fieldset#filters td.add-filter { text-align: right; vertical-align: top; }
220 220 .buttons { font-size: 0.9em; margin-bottom: 1.4em; margin-top: 1em; }
221 221
222 222 div#issue-changesets {float:right; width:45%; margin-left: 1em; margin-bottom: 1em; background: #fff; padding-left: 1em; font-size: 90%;}
223 223 div#issue-changesets .changeset { padding: 4px;}
224 224 div#issue-changesets .changeset { border-bottom: 1px solid #ddd; }
225 225 div#issue-changesets p { margin-top: 0; margin-bottom: 1em;}
226 226
227 227 div#activity dl, #search-results { margin-left: 2em; }
228 228 div#activity dd, #search-results dd { margin-bottom: 1em; padding-left: 18px; font-size: 0.9em; }
229 229 div#activity dt, #search-results dt { margin-bottom: 0px; padding-left: 20px; line-height: 18px; background-position: 0 50%; background-repeat: no-repeat; }
230 230 div#activity dt.me .time { border-bottom: 1px solid #999; }
231 231 div#activity dt .time { color: #777; font-size: 80%; }
232 232 div#activity dd .description, #search-results dd .description { font-style: italic; }
233 233 div#activity span.project:after, #search-results span.project:after { content: " -"; }
234 234 div#activity dd span.description, #search-results dd span.description { display:block; color: #808080; }
235 235
236 236 #search-results dd { margin-bottom: 1em; padding-left: 20px; margin-left:0px; }
237 237
238 238 div#search-results-counts {float:right;}
239 239 div#search-results-counts ul { margin-top: 0.5em; }
240 240 div#search-results-counts li { list-style-type:none; float: left; margin-left: 1em; }
241 241
242 242 dt.issue { background-image: url(../images/ticket.png); }
243 243 dt.issue-edit { background-image: url(../images/ticket_edit.png); }
244 244 dt.issue-closed { background-image: url(../images/ticket_checked.png); }
245 245 dt.issue-note { background-image: url(../images/ticket_note.png); }
246 246 dt.changeset { background-image: url(../images/changeset.png); }
247 247 dt.news { background-image: url(../images/news.png); }
248 248 dt.message { background-image: url(../images/message.png); }
249 249 dt.reply { background-image: url(../images/comments.png); }
250 250 dt.wiki-page { background-image: url(../images/wiki_edit.png); }
251 251 dt.attachment { background-image: url(../images/attachment.png); }
252 252 dt.document { background-image: url(../images/document.png); }
253 253 dt.project { background-image: url(../images/projects.png); }
254 254 dt.time-entry { background-image: url(../images/time.png); }
255 255
256 256 #search-results dt.issue.closed { background-image: url(../images/ticket_checked.png); }
257 257
258 258 div#roadmap fieldset.related-issues { margin-bottom: 1em; }
259 259 div#roadmap fieldset.related-issues ul { margin-top: 0.3em; margin-bottom: 0.3em; }
260 260 div#roadmap .wiki h1:first-child { display: none; }
261 261 div#roadmap .wiki h1 { font-size: 120%; }
262 262 div#roadmap .wiki h2 { font-size: 110%; }
263 263
264 264 div#version-summary { float:right; width:380px; margin-left: 16px; margin-bottom: 16px; background-color: #fff; }
265 265 div#version-summary fieldset { margin-bottom: 1em; }
266 266 div#version-summary .total-hours { text-align: right; }
267 267
268 268 table#time-report td.hours, table#time-report th.period, table#time-report th.total { text-align: right; padding-right: 0.5em; }
269 269 table#time-report tbody tr { font-style: italic; color: #777; }
270 270 table#time-report tbody tr.last-level { font-style: normal; color: #555; }
271 271 table#time-report tbody tr.total { font-style: normal; font-weight: bold; color: #555; background-color:#EEEEEE; }
272 272 table#time-report .hours-dec { font-size: 0.9em; }
273 273
274 274 form#issue-form .attributes { margin-bottom: 8px; }
275 275 form#issue-form .attributes p { padding-top: 1px; padding-bottom: 2px; }
276 276 form#issue-form .attributes select { min-width: 30%; }
277 277
278 278 ul.projects { margin: 0; padding-left: 1em; }
279 279 ul.projects.root { margin: 0; padding: 0; }
280 280 ul.projects ul { border-left: 3px solid #e0e0e0; }
281 281 ul.projects li { list-style-type:none; }
282 282 ul.projects li.root { margin-bottom: 1em; }
283 283 ul.projects li.child { margin-top: 1em;}
284 284 ul.projects div.root a.project { font-family: "Trebuchet MS", Verdana, sans-serif; font-weight: bold; font-size: 16px; margin: 0 0 10px 0; }
285 285 .my-project { padding-left: 18px; background: url(../images/fav.png) no-repeat 0 50%; }
286 286
287 287 #tracker_project_ids ul { margin: 0; padding-left: 1em; }
288 288 #tracker_project_ids li { list-style-type:none; }
289 289
290 290 ul.properties {padding:0; font-size: 0.9em; color: #777;}
291 291 ul.properties li {list-style-type:none;}
292 292 ul.properties li span {font-style:italic;}
293 293
294 294 .total-hours { font-size: 110%; font-weight: bold; }
295 295 .total-hours span.hours-int { font-size: 120%; }
296 296
297 297 .autoscroll {overflow-x: auto; padding:1px; margin-bottom: 1.2em;}
298 298 #user_firstname, #user_lastname, #user_mail, #my_account_form select { width: 90%; }
299 299
300 #workflow_copy_form select { width: 200px; }
301
300 302 .pagination {font-size: 90%}
301 303 p.pagination {margin-top:8px;}
302 304
303 305 /***** Tabular forms ******/
304 306 .tabular p{
305 307 margin: 0;
306 308 padding: 5px 0 8px 0;
307 309 padding-left: 180px; /*width of left column containing the label elements*/
308 310 height: 1%;
309 311 clear:left;
310 312 }
311 313
312 314 html>body .tabular p {overflow:hidden;}
313 315
314 316 .tabular label{
315 317 font-weight: bold;
316 318 float: left;
317 319 text-align: right;
318 320 margin-left: -180px; /*width of left column*/
319 321 width: 175px; /*width of labels. Should be smaller than left column to create some right
320 322 margin*/
321 323 }
322 324
323 325 .tabular label.floating{
324 326 font-weight: normal;
325 327 margin-left: 0px;
326 328 text-align: left;
327 329 width: 270px;
328 330 }
329 331
330 332 .tabular label.block{
331 333 font-weight: normal;
332 334 margin-left: 0px !important;
333 335 text-align: left;
334 336 float: none;
335 337 display: block;
336 338 width: auto;
337 339 }
338 340
339 341 input#time_entry_comments { width: 90%;}
340 342
341 343 #preview fieldset {margin-top: 1em; background: url(../images/draft.png)}
342 344
343 345 .tabular.settings p{ padding-left: 300px; }
344 346 .tabular.settings label{ margin-left: -300px; width: 295px; }
345 347
346 348 .required {color: #bb0000;}
347 349 .summary {font-style: italic;}
348 350
349 351 #attachments_fields input[type=text] {margin-left: 8px; }
350 352
351 353 div.attachments { margin-top: 12px; }
352 354 div.attachments p { margin:4px 0 2px 0; }
353 355 div.attachments img { vertical-align: middle; }
354 356 div.attachments span.author { font-size: 0.9em; color: #888; }
355 357
356 358 p.other-formats { text-align: right; font-size:0.9em; color: #666; }
357 359 .other-formats span + span:before { content: "| "; }
358 360
359 361 a.atom { background: url(../images/feed.png) no-repeat 1px 50%; padding: 2px 0px 3px 16px; }
360 362
361 363 /* Project members tab */
362 364 div#tab-content-members .splitcontentleft, div#tab-content-memberships .splitcontentleft, div#tab-content-users .splitcontentleft { width: 64% }
363 365 div#tab-content-members .splitcontentright, div#tab-content-memberships .splitcontentright, div#tab-content-users .splitcontentright { width: 34% }
364 366 div#tab-content-members fieldset, div#tab-content-memberships fieldset, div#tab-content-users fieldset { padding:1em; margin-bottom: 1em; }
365 367 div#tab-content-members fieldset legend, div#tab-content-memberships fieldset legend, div#tab-content-users fieldset legend { font-weight: bold; }
366 368 div#tab-content-members fieldset label, div#tab-content-memberships fieldset label, div#tab-content-users fieldset label { display: block; }
367 369 div#tab-content-members fieldset div, div#tab-content-users fieldset div { max-height: 400px; overflow:auto; }
368 370
369 371 table.members td.group { padding-left: 20px; background: url(../images/users.png) no-repeat 0% 0%; }
370 372
371 373 * html div#tab-content-members fieldset div { height: 450px; }
372 374
373 375 /***** Flash & error messages ****/
374 376 #errorExplanation, div.flash, .nodata, .warning {
375 377 padding: 4px 4px 4px 30px;
376 378 margin-bottom: 12px;
377 379 font-size: 1.1em;
378 380 border: 2px solid;
379 381 }
380 382
381 383 div.flash {margin-top: 8px;}
382 384
383 385 div.flash.error, #errorExplanation {
384 386 background: url(../images/false.png) 8px 5px no-repeat;
385 387 background-color: #ffe3e3;
386 388 border-color: #dd0000;
387 389 color: #550000;
388 390 }
389 391
390 392 div.flash.notice {
391 393 background: url(../images/true.png) 8px 5px no-repeat;
392 394 background-color: #dfffdf;
393 395 border-color: #9fcf9f;
394 396 color: #005f00;
395 397 }
396 398
397 399 div.flash.warning {
398 400 background: url(../images/warning.png) 8px 5px no-repeat;
399 401 background-color: #FFEBC1;
400 402 border-color: #FDBF3B;
401 403 color: #A6750C;
402 404 text-align: left;
403 405 }
404 406
405 407 .nodata, .warning {
406 408 text-align: center;
407 409 background-color: #FFEBC1;
408 410 border-color: #FDBF3B;
409 411 color: #A6750C;
410 412 }
411 413
412 414 #errorExplanation ul { font-size: 0.9em;}
413 415 #errorExplanation h2, #errorExplanation p { display: none; }
414 416
415 417 /***** Ajax indicator ******/
416 418 #ajax-indicator {
417 419 position: absolute; /* fixed not supported by IE */
418 420 background-color:#eee;
419 421 border: 1px solid #bbb;
420 422 top:35%;
421 423 left:40%;
422 424 width:20%;
423 425 font-weight:bold;
424 426 text-align:center;
425 427 padding:0.6em;
426 428 z-index:100;
427 429 filter:alpha(opacity=50);
428 430 opacity: 0.5;
429 431 }
430 432
431 433 html>body #ajax-indicator { position: fixed; }
432 434
433 435 #ajax-indicator span {
434 436 background-position: 0% 40%;
435 437 background-repeat: no-repeat;
436 438 background-image: url(../images/loading.gif);
437 439 padding-left: 26px;
438 440 vertical-align: bottom;
439 441 }
440 442
441 443 /***** Calendar *****/
442 444 table.cal {border-collapse: collapse; width: 100%; margin: 0px 0 6px 0;border: 1px solid #d7d7d7;}
443 445 table.cal thead th {width: 14%;}
444 446 table.cal tbody tr {height: 100px;}
445 447 table.cal th { background-color:#EEEEEE; padding: 4px; }
446 448 table.cal td {border: 1px solid #d7d7d7; vertical-align: top; font-size: 0.9em;}
447 449 table.cal td p.day-num {font-size: 1.1em; text-align:right;}
448 450 table.cal td.odd p.day-num {color: #bbb;}
449 451 table.cal td.today {background:#ffffdd;}
450 452 table.cal td.today p.day-num {font-weight: bold;}
451 453
452 454 /***** Tooltips ******/
453 455 .tooltip{position:relative;z-index:24;}
454 456 .tooltip:hover{z-index:25;color:#000;}
455 457 .tooltip span.tip{display: none; text-align:left;}
456 458
457 459 div.tooltip:hover span.tip{
458 460 display:block;
459 461 position:absolute;
460 462 top:12px; left:24px; width:270px;
461 463 border:1px solid #555;
462 464 background-color:#fff;
463 465 padding: 4px;
464 466 font-size: 0.8em;
465 467 color:#505050;
466 468 }
467 469
468 470 /***** Progress bar *****/
469 471 table.progress {
470 472 border: 1px solid #D7D7D7;
471 473 border-collapse: collapse;
472 474 border-spacing: 0pt;
473 475 empty-cells: show;
474 476 text-align: center;
475 477 float:left;
476 478 margin: 1px 6px 1px 0px;
477 479 }
478 480
479 481 table.progress td { height: 0.9em; }
480 482 table.progress td.closed { background: #BAE0BA none repeat scroll 0%; }
481 483 table.progress td.done { background: #DEF0DE none repeat scroll 0%; }
482 484 table.progress td.open { background: #FFF none repeat scroll 0%; }
483 485 p.pourcent {font-size: 80%;}
484 486 p.progress-info {clear: left; font-style: italic; font-size: 80%;}
485 487
486 488 /***** Tabs *****/
487 489 #content .tabs {height: 2.6em; border-bottom: 1px solid #bbbbbb; margin-bottom:1.2em; position:relative;}
488 490 #content .tabs ul {margin:0; position:absolute; bottom:-2px; padding-left:1em;}
489 491 #content .tabs>ul { bottom:-1px; } /* others */
490 492 #content .tabs ul li {
491 493 float:left;
492 494 list-style-type:none;
493 495 white-space:nowrap;
494 496 margin-right:8px;
495 497 background:#fff;
496 498 }
497 499 #content .tabs ul li a{
498 500 display:block;
499 501 font-size: 0.9em;
500 502 text-decoration:none;
501 503 line-height:1.3em;
502 504 padding:4px 6px 4px 6px;
503 505 border: 1px solid #ccc;
504 506 border-bottom: 1px solid #bbbbbb;
505 507 background-color: #eeeeee;
506 508 color:#777;
507 509 font-weight:bold;
508 510 }
509 511
510 512 #content .tabs ul li a:hover {
511 513 background-color: #ffffdd;
512 514 text-decoration:none;
513 515 }
514 516
515 517 #content .tabs ul li a.selected {
516 518 background-color: #fff;
517 519 border: 1px solid #bbbbbb;
518 520 border-bottom: 1px solid #fff;
519 521 }
520 522
521 523 #content .tabs ul li a.selected:hover {
522 524 background-color: #fff;
523 525 }
524 526
525 527 /***** Auto-complete *****/
526 528 div.autocomplete {
527 529 position:absolute;
528 530 width:250px;
529 531 background-color:white;
530 532 margin:0;
531 533 padding:0;
532 534 }
533 535 div.autocomplete ul {
534 536 list-style-type:none;
535 537 margin:0;
536 538 padding:0;
537 539 }
538 540 div.autocomplete ul li.selected { background-color: #ffb;}
539 541 div.autocomplete ul li {
540 542 list-style-type:none;
541 543 display:block;
542 544 margin:0;
543 545 padding:2px;
544 546 cursor:pointer;
545 547 font-size: 90%;
546 548 border-bottom: 1px solid #ccc;
547 549 border-left: 1px solid #ccc;
548 550 border-right: 1px solid #ccc;
549 551 }
550 552 div.autocomplete ul li span.informal {
551 553 font-size: 80%;
552 554 color: #aaa;
553 555 }
554 556
555 557 /***** Diff *****/
556 558 .diff_out { background: #fcc; }
557 559 .diff_in { background: #cfc; }
558 560
559 561 /***** Wiki *****/
560 562 div.wiki table {
561 563 border: 1px solid #505050;
562 564 border-collapse: collapse;
563 565 margin-bottom: 1em;
564 566 }
565 567
566 568 div.wiki table, div.wiki td, div.wiki th {
567 569 border: 1px solid #bbb;
568 570 padding: 4px;
569 571 }
570 572
571 573 div.wiki .external {
572 574 background-position: 0% 60%;
573 575 background-repeat: no-repeat;
574 576 padding-left: 12px;
575 577 background-image: url(../images/external.png);
576 578 }
577 579
578 580 div.wiki a.new {
579 581 color: #b73535;
580 582 }
581 583
582 584 div.wiki pre {
583 585 margin: 1em 1em 1em 1.6em;
584 586 padding: 2px;
585 587 background-color: #fafafa;
586 588 border: 1px solid #dadada;
587 589 width:95%;
588 590 overflow-x: auto;
589 591 }
590 592
591 593 div.wiki ul.toc {
592 594 background-color: #ffffdd;
593 595 border: 1px solid #e4e4e4;
594 596 padding: 4px;
595 597 line-height: 1.2em;
596 598 margin-bottom: 12px;
597 599 margin-right: 12px;
598 600 margin-left: 0;
599 601 display: table
600 602 }
601 603 * html div.wiki ul.toc { width: 50%; } /* IE6 doesn't autosize div */
602 604
603 605 div.wiki ul.toc.right { float: right; margin-left: 12px; margin-right: 0; width: auto; }
604 606 div.wiki ul.toc.left { float: left; margin-right: 12px; margin-left: 0; width: auto; }
605 607 div.wiki ul.toc li { list-style-type:none;}
606 608 div.wiki ul.toc li.heading2 { margin-left: 6px; }
607 609 div.wiki ul.toc li.heading3 { margin-left: 12px; font-size: 0.8em; }
608 610
609 611 div.wiki ul.toc a {
610 612 font-size: 0.9em;
611 613 font-weight: normal;
612 614 text-decoration: none;
613 615 color: #606060;
614 616 }
615 617 div.wiki ul.toc a:hover { color: #c61a1a; text-decoration: underline;}
616 618
617 619 a.wiki-anchor { display: none; margin-left: 6px; text-decoration: none; }
618 620 a.wiki-anchor:hover { color: #aaa !important; text-decoration: none; }
619 621 h1:hover a.wiki-anchor, h2:hover a.wiki-anchor, h3:hover a.wiki-anchor { display: inline; color: #ddd; }
620 622
621 623 /***** My page layout *****/
622 624 .block-receiver {
623 625 border:1px dashed #c0c0c0;
624 626 margin-bottom: 20px;
625 627 padding: 15px 0 15px 0;
626 628 }
627 629
628 630 .mypage-box {
629 631 margin:0 0 20px 0;
630 632 color:#505050;
631 633 line-height:1.5em;
632 634 }
633 635
634 636 .handle {
635 637 cursor: move;
636 638 }
637 639
638 640 a.close-icon {
639 641 display:block;
640 642 margin-top:3px;
641 643 overflow:hidden;
642 644 width:12px;
643 645 height:12px;
644 646 background-repeat: no-repeat;
645 647 cursor:pointer;
646 648 background-image:url('../images/close.png');
647 649 }
648 650
649 651 a.close-icon:hover {
650 652 background-image:url('../images/close_hl.png');
651 653 }
652 654
653 655 /***** Gantt chart *****/
654 656 .gantt_hdr {
655 657 position:absolute;
656 658 top:0;
657 659 height:16px;
658 660 border-top: 1px solid #c0c0c0;
659 661 border-bottom: 1px solid #c0c0c0;
660 662 border-right: 1px solid #c0c0c0;
661 663 text-align: center;
662 664 overflow: hidden;
663 665 }
664 666
665 667 .task {
666 668 position: absolute;
667 669 height:8px;
668 670 font-size:0.8em;
669 671 color:#888;
670 672 padding:0;
671 673 margin:0;
672 674 line-height:0.8em;
673 675 }
674 676
675 677 .task_late { background:#f66 url(../images/task_late.png); border: 1px solid #f66; }
676 678 .task_done { background:#66f url(../images/task_done.png); border: 1px solid #66f; }
677 679 .task_todo { background:#aaa url(../images/task_todo.png); border: 1px solid #aaa; }
678 680 .milestone { background-image:url(../images/milestone.png); background-repeat: no-repeat; border: 0; }
679 681
680 682 /***** Icons *****/
681 683 .icon {
682 684 background-position: 0% 40%;
683 685 background-repeat: no-repeat;
684 686 padding-left: 20px;
685 687 padding-top: 2px;
686 688 padding-bottom: 3px;
687 689 }
688 690
689 691 .icon22 {
690 692 background-position: 0% 40%;
691 693 background-repeat: no-repeat;
692 694 padding-left: 26px;
693 695 line-height: 22px;
694 696 vertical-align: middle;
695 697 }
696 698
697 699 .icon-add { background-image: url(../images/add.png); }
698 700 .icon-edit { background-image: url(../images/edit.png); }
699 701 .icon-copy { background-image: url(../images/copy.png); }
700 702 .icon-duplicate { background-image: url(../images/duplicate.png); }
701 703 .icon-del { background-image: url(../images/delete.png); }
702 704 .icon-move { background-image: url(../images/move.png); }
703 705 .icon-save { background-image: url(../images/save.png); }
704 706 .icon-cancel { background-image: url(../images/cancel.png); }
705 707 .icon-multiple { background-image: url(../images/table_multiple.png); }
706 708 .icon-folder { background-image: url(../images/folder.png); }
707 709 .open .icon-folder { background-image: url(../images/folder_open.png); }
708 710 .icon-package { background-image: url(../images/package.png); }
709 711 .icon-home { background-image: url(../images/home.png); }
710 712 .icon-user { background-image: url(../images/user.png); }
711 713 .icon-mypage { background-image: url(../images/user_page.png); }
712 714 .icon-admin { background-image: url(../images/admin.png); }
713 715 .icon-projects { background-image: url(../images/projects.png); }
714 716 .icon-help { background-image: url(../images/help.png); }
715 717 .icon-attachment { background-image: url(../images/attachment.png); }
716 718 .icon-index { background-image: url(../images/index.png); }
717 719 .icon-history { background-image: url(../images/history.png); }
718 720 .icon-time { background-image: url(../images/time.png); }
719 721 .icon-time-add { background-image: url(../images/time_add.png); }
720 722 .icon-stats { background-image: url(../images/stats.png); }
721 723 .icon-warning { background-image: url(../images/warning.png); }
722 724 .icon-fav { background-image: url(../images/fav.png); }
723 725 .icon-fav-off { background-image: url(../images/fav_off.png); }
724 726 .icon-reload { background-image: url(../images/reload.png); }
725 727 .icon-lock { background-image: url(../images/locked.png); }
726 728 .icon-unlock { background-image: url(../images/unlock.png); }
727 729 .icon-checked { background-image: url(../images/true.png); }
728 730 .icon-details { background-image: url(../images/zoom_in.png); }
729 731 .icon-report { background-image: url(../images/report.png); }
730 732 .icon-comment { background-image: url(../images/comment.png); }
733 .icon-summary { background-image: url(../images/lightning.png); }
731 734
732 735 .icon-file { background-image: url(../images/files/default.png); }
733 736 .icon-file.text-plain { background-image: url(../images/files/text.png); }
734 737 .icon-file.text-x-c { background-image: url(../images/files/c.png); }
735 738 .icon-file.text-x-csharp { background-image: url(../images/files/csharp.png); }
736 739 .icon-file.text-x-php { background-image: url(../images/files/php.png); }
737 740 .icon-file.text-x-ruby { background-image: url(../images/files/ruby.png); }
738 741 .icon-file.text-xml { background-image: url(../images/files/xml.png); }
739 742 .icon-file.image-gif { background-image: url(../images/files/image.png); }
740 743 .icon-file.image-jpeg { background-image: url(../images/files/image.png); }
741 744 .icon-file.image-png { background-image: url(../images/files/image.png); }
742 745 .icon-file.image-tiff { background-image: url(../images/files/image.png); }
743 746 .icon-file.application-pdf { background-image: url(../images/files/pdf.png); }
744 747 .icon-file.application-zip { background-image: url(../images/files/zip.png); }
745 748 .icon-file.application-x-gzip { background-image: url(../images/files/zip.png); }
746 749
747 750 .icon22-projects { background-image: url(../images/22x22/projects.png); }
748 751 .icon22-users { background-image: url(../images/22x22/users.png); }
749 752 .icon22-groups { background-image: url(../images/22x22/groups.png); }
750 753 .icon22-tracker { background-image: url(../images/22x22/tracker.png); }
751 754 .icon22-role { background-image: url(../images/22x22/role.png); }
752 755 .icon22-workflow { background-image: url(../images/22x22/workflow.png); }
753 756 .icon22-options { background-image: url(../images/22x22/options.png); }
754 757 .icon22-notifications { background-image: url(../images/22x22/notifications.png); }
755 758 .icon22-authent { background-image: url(../images/22x22/authent.png); }
756 759 .icon22-info { background-image: url(../images/22x22/info.png); }
757 760 .icon22-comment { background-image: url(../images/22x22/comment.png); }
758 761 .icon22-package { background-image: url(../images/22x22/package.png); }
759 762 .icon22-settings { background-image: url(../images/22x22/settings.png); }
760 763 .icon22-plugin { background-image: url(../images/22x22/plugin.png); }
761 764
762 765 img.gravatar {
763 766 padding: 2px;
764 767 border: solid 1px #d5d5d5;
765 768 background: #fff;
766 769 }
767 770
768 771 div.issue img.gravatar {
769 772 float: right;
770 773 margin: 0 0 0 1em;
771 774 padding: 5px;
772 775 }
773 776
774 777 div.issue table img.gravatar {
775 778 height: 14px;
776 779 width: 14px;
777 780 padding: 2px;
778 781 float: left;
779 782 margin: 0 0.5em 0 0;
780 783 }
781 784
782 785 #history img.gravatar {
783 786 padding: 3px;
784 787 margin: 0 1.5em 1em 0;
785 788 float: left;
786 789 }
787 790
788 791 td.username img.gravatar {
789 792 float: left;
790 793 margin: 0 1em 0 0;
791 794 }
792 795
793 796 #activity dt img.gravatar {
794 797 float: left;
795 798 margin: 0 1em 1em 0;
796 799 }
797 800
798 801 #activity dt,
799 802 .journal {
800 803 clear: left;
801 804 }
802 805
803 806 .gravatar-margin {
804 807 margin-left: 40px;
805 808 }
806 809
807 810 h2 img { vertical-align:middle; }
808 811
809 812
810 813 /***** Media print specific styles *****/
811 814 @media print {
812 815 #top-menu, #header, #main-menu, #sidebar, #footer, .contextual, .other-formats { display:none; }
813 816 #main { background: #fff; }
814 817 #content { width: 99%; margin: 0; padding: 0; border: 0; background: #fff; overflow: visible !important;}
815 818 #wiki_add_attachment { display:none; }
816 819 }
@@ -1,84 +1,130
1 1 # Redmine - project management software
2 2 # Copyright (C) 2006-2008 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 require File.dirname(__FILE__) + '/../test_helper'
19 19 require 'workflows_controller'
20 20
21 21 # Re-raise errors caught by the controller.
22 22 class WorkflowsController; def rescue_action(e) raise e end; end
23 23
24 24 class WorkflowsControllerTest < ActionController::TestCase
25 fixtures :roles, :trackers, :workflows
25 fixtures :roles, :trackers, :workflows, :users
26 26
27 27 def setup
28 28 @controller = WorkflowsController.new
29 29 @request = ActionController::TestRequest.new
30 30 @response = ActionController::TestResponse.new
31 31 User.current = nil
32 32 @request.session[:user_id] = 1 # admin
33 33 end
34 34
35 35 def test_index
36 36 get :index
37 37 assert_response :success
38 38 assert_template 'index'
39 39
40 40 count = Workflow.count(:all, :conditions => 'role_id = 1 AND tracker_id = 2')
41 41 assert_tag :tag => 'a', :content => count.to_s,
42 42 :attributes => { :href => '/workflows/edit?role_id=1&amp;tracker_id=2' }
43 43 end
44 44
45 45 def test_get_edit
46 46 get :edit
47 47 assert_response :success
48 48 assert_template 'edit'
49 49 assert_not_nil assigns(:roles)
50 50 assert_not_nil assigns(:trackers)
51 51 end
52 52
53 53 def test_get_edit_with_role_and_tracker
54 54 get :edit, :role_id => 2, :tracker_id => 1
55 55 assert_response :success
56 56 assert_template 'edit'
57 57 # allowed transitions
58 58 assert_tag :tag => 'input', :attributes => { :type => 'checkbox',
59 59 :name => 'issue_status[2][]',
60 60 :value => '1',
61 61 :checked => 'checked' }
62 62 # not allowed
63 63 assert_tag :tag => 'input', :attributes => { :type => 'checkbox',
64 64 :name => 'issue_status[2][]',
65 65 :value => '3',
66 66 :checked => nil }
67 67 end
68 68
69 69 def test_post_edit
70 70 post :edit, :role_id => 2, :tracker_id => 1, :issue_status => {'4' => ['5'], '3' => ['1', '2']}
71 71 assert_redirected_to '/workflows/edit?role_id=2&tracker_id=1'
72 72
73 73 assert_equal 3, Workflow.count(:conditions => {:tracker_id => 1, :role_id => 2})
74 74 assert_not_nil Workflow.find(:first, :conditions => {:role_id => 2, :tracker_id => 1, :old_status_id => 3, :new_status_id => 2})
75 75 assert_nil Workflow.find(:first, :conditions => {:role_id => 2, :tracker_id => 1, :old_status_id => 5, :new_status_id => 4})
76 76 end
77 77
78 78 def test_clear_workflow
79 79 assert Workflow.count(:conditions => {:tracker_id => 1, :role_id => 2}) > 0
80 80
81 81 post :edit, :role_id => 2, :tracker_id => 1
82 82 assert_equal 0, Workflow.count(:conditions => {:tracker_id => 1, :role_id => 2})
83 83 end
84
85 def test_get_copy
86 get :copy
87 assert_response :success
88 assert_template 'copy'
89 end
90
91 def test_post_copy_one_to_one
92 source_transitions = status_transitions(:tracker_id => 1, :role_id => 2)
93
94 post :copy, :source_tracker_id => '1', :source_role_id => '2',
95 :target_tracker_ids => ['3'], :target_role_ids => ['1']
96 assert_response 302
97 assert_equal source_transitions, status_transitions(:tracker_id => 3, :role_id => 1)
98 end
99
100 def test_post_copy_one_to_many
101 source_transitions = status_transitions(:tracker_id => 1, :role_id => 2)
102
103 post :copy, :source_tracker_id => '1', :source_role_id => '2',
104 :target_tracker_ids => ['2', '3'], :target_role_ids => ['1', '3']
105 assert_response 302
106 assert_equal source_transitions, status_transitions(:tracker_id => 2, :role_id => 1)
107 assert_equal source_transitions, status_transitions(:tracker_id => 3, :role_id => 1)
108 assert_equal source_transitions, status_transitions(:tracker_id => 2, :role_id => 3)
109 assert_equal source_transitions, status_transitions(:tracker_id => 3, :role_id => 3)
110 end
111
112 def test_post_copy_many_to_many
113 source_t2 = status_transitions(:tracker_id => 2, :role_id => 2)
114 source_t3 = status_transitions(:tracker_id => 3, :role_id => 2)
115
116 post :copy, :source_tracker_id => 'any', :source_role_id => '2',
117 :target_tracker_ids => ['2', '3'], :target_role_ids => ['1', '3']
118 assert_response 302
119 assert_equal source_t2, status_transitions(:tracker_id => 2, :role_id => 1)
120 assert_equal source_t3, status_transitions(:tracker_id => 3, :role_id => 1)
121 assert_equal source_t2, status_transitions(:tracker_id => 2, :role_id => 3)
122 assert_equal source_t3, status_transitions(:tracker_id => 3, :role_id => 3)
123 end
124
125 # Returns an array of status transitions that can be compared
126 def status_transitions(conditions)
127 Workflow.find(:all, :conditions => conditions,
128 :order => 'tracker_id, role_id, old_status_id, new_status_id').collect {|w| [w.old_status, w.new_status_id]}
129 end
84 130 end
General Comments 0
You need to be logged in to leave comments. Login now