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