@@ -1,659 +1,660 | |||||
1 | # Redmine - project management software |
|
1 | # Redmine - project management software | |
2 | # Copyright (C) 2006-2015 Jean-Philippe Lang |
|
2 | # Copyright (C) 2006-2015 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 'uri' |
|
18 | require 'uri' | |
19 | require 'cgi' |
|
19 | require 'cgi' | |
20 |
|
20 | |||
21 | class Unauthorized < Exception; end |
|
21 | class Unauthorized < Exception; end | |
22 |
|
22 | |||
23 | class ApplicationController < ActionController::Base |
|
23 | class ApplicationController < ActionController::Base | |
24 | include Redmine::I18n |
|
24 | include Redmine::I18n | |
25 | include Redmine::Pagination |
|
25 | include Redmine::Pagination | |
26 | include RoutesHelper |
|
26 | include RoutesHelper | |
27 | helper :routes |
|
27 | helper :routes | |
28 |
|
28 | |||
29 | class_attribute :accept_api_auth_actions |
|
29 | class_attribute :accept_api_auth_actions | |
30 | class_attribute :accept_rss_auth_actions |
|
30 | class_attribute :accept_rss_auth_actions | |
31 | class_attribute :model_object |
|
31 | class_attribute :model_object | |
32 |
|
32 | |||
33 | layout 'base' |
|
33 | layout 'base' | |
34 |
|
34 | |||
35 | protect_from_forgery |
|
35 | protect_from_forgery | |
36 |
|
36 | |||
37 | def verify_authenticity_token |
|
37 | def verify_authenticity_token | |
38 | unless api_request? |
|
38 | unless api_request? | |
39 | super |
|
39 | super | |
40 | end |
|
40 | end | |
41 | end |
|
41 | end | |
42 |
|
42 | |||
43 | def handle_unverified_request |
|
43 | def handle_unverified_request | |
44 | unless api_request? |
|
44 | unless api_request? | |
45 | super |
|
45 | super | |
46 | cookies.delete(autologin_cookie_name) |
|
46 | cookies.delete(autologin_cookie_name) | |
47 | self.logged_user = nil |
|
47 | self.logged_user = nil | |
48 | set_localization |
|
48 | set_localization | |
49 | render_error :status => 422, :message => "Invalid form authenticity token." |
|
49 | render_error :status => 422, :message => "Invalid form authenticity token." | |
50 | end |
|
50 | end | |
51 | end |
|
51 | end | |
52 |
|
52 | |||
53 | before_filter :session_expiration, :user_setup, :force_logout_if_password_changed, :check_if_login_required, :check_password_change, :set_localization |
|
53 | before_filter :session_expiration, :user_setup, :force_logout_if_password_changed, :check_if_login_required, :check_password_change, :set_localization | |
54 |
|
54 | |||
55 | rescue_from ::Unauthorized, :with => :deny_access |
|
55 | rescue_from ::Unauthorized, :with => :deny_access | |
56 | rescue_from ::ActionView::MissingTemplate, :with => :missing_template |
|
56 | rescue_from ::ActionView::MissingTemplate, :with => :missing_template | |
57 |
|
57 | |||
58 | include Redmine::Search::Controller |
|
58 | include Redmine::Search::Controller | |
59 | include Redmine::MenuManager::MenuController |
|
59 | include Redmine::MenuManager::MenuController | |
60 | helper Redmine::MenuManager::MenuHelper |
|
60 | helper Redmine::MenuManager::MenuHelper | |
61 |
|
61 | |||
62 | def session_expiration |
|
62 | def session_expiration | |
63 | if session[:user_id] |
|
63 | if session[:user_id] | |
64 | if session_expired? && !try_to_autologin |
|
64 | if session_expired? && !try_to_autologin | |
65 | set_localization(User.active.find_by_id(session[:user_id])) |
|
65 | set_localization(User.active.find_by_id(session[:user_id])) | |
66 | self.logged_user = nil |
|
66 | self.logged_user = nil | |
67 | flash[:error] = l(:error_session_expired) |
|
67 | flash[:error] = l(:error_session_expired) | |
68 | require_login |
|
68 | require_login | |
69 | else |
|
69 | else | |
70 | session[:atime] = Time.now.utc.to_i |
|
70 | session[:atime] = Time.now.utc.to_i | |
71 | end |
|
71 | end | |
72 | end |
|
72 | end | |
73 | end |
|
73 | end | |
74 |
|
74 | |||
75 | def session_expired? |
|
75 | def session_expired? | |
76 | if Setting.session_lifetime? |
|
76 | if Setting.session_lifetime? | |
77 | unless session[:ctime] && (Time.now.utc.to_i - session[:ctime].to_i <= Setting.session_lifetime.to_i * 60) |
|
77 | unless session[:ctime] && (Time.now.utc.to_i - session[:ctime].to_i <= Setting.session_lifetime.to_i * 60) | |
78 | return true |
|
78 | return true | |
79 | end |
|
79 | end | |
80 | end |
|
80 | end | |
81 | if Setting.session_timeout? |
|
81 | if Setting.session_timeout? | |
82 | unless session[:atime] && (Time.now.utc.to_i - session[:atime].to_i <= Setting.session_timeout.to_i * 60) |
|
82 | unless session[:atime] && (Time.now.utc.to_i - session[:atime].to_i <= Setting.session_timeout.to_i * 60) | |
83 | return true |
|
83 | return true | |
84 | end |
|
84 | end | |
85 | end |
|
85 | end | |
86 | false |
|
86 | false | |
87 | end |
|
87 | end | |
88 |
|
88 | |||
89 | def start_user_session(user) |
|
89 | def start_user_session(user) | |
90 | session[:user_id] = user.id |
|
90 | session[:user_id] = user.id | |
91 | session[:ctime] = Time.now.utc.to_i |
|
91 | session[:ctime] = Time.now.utc.to_i | |
92 | session[:atime] = Time.now.utc.to_i |
|
92 | session[:atime] = Time.now.utc.to_i | |
93 | if user.must_change_password? |
|
93 | if user.must_change_password? | |
94 | session[:pwd] = '1' |
|
94 | session[:pwd] = '1' | |
95 | end |
|
95 | end | |
96 | end |
|
96 | end | |
97 |
|
97 | |||
98 | def user_setup |
|
98 | def user_setup | |
99 | # Check the settings cache for each request |
|
99 | # Check the settings cache for each request | |
100 | Setting.check_cache |
|
100 | Setting.check_cache | |
101 | # Find the current user |
|
101 | # Find the current user | |
102 | User.current = find_current_user |
|
102 | User.current = find_current_user | |
103 | logger.info(" Current user: " + (User.current.logged? ? "#{User.current.login} (id=#{User.current.id})" : "anonymous")) if logger |
|
103 | logger.info(" Current user: " + (User.current.logged? ? "#{User.current.login} (id=#{User.current.id})" : "anonymous")) if logger | |
104 | end |
|
104 | end | |
105 |
|
105 | |||
106 | # Returns the current user or nil if no user is logged in |
|
106 | # Returns the current user or nil if no user is logged in | |
107 | # and starts a session if needed |
|
107 | # and starts a session if needed | |
108 | def find_current_user |
|
108 | def find_current_user | |
109 | user = nil |
|
109 | user = nil | |
110 | unless api_request? |
|
110 | unless api_request? | |
111 | if session[:user_id] |
|
111 | if session[:user_id] | |
112 | # existing session |
|
112 | # existing session | |
113 | user = (User.active.find(session[:user_id]) rescue nil) |
|
113 | user = (User.active.find(session[:user_id]) rescue nil) | |
114 | elsif autologin_user = try_to_autologin |
|
114 | elsif autologin_user = try_to_autologin | |
115 | user = autologin_user |
|
115 | user = autologin_user | |
116 | elsif params[:format] == 'atom' && params[:key] && request.get? && accept_rss_auth? |
|
116 | elsif params[:format] == 'atom' && params[:key] && request.get? && accept_rss_auth? | |
117 | # RSS key authentication does not start a session |
|
117 | # RSS key authentication does not start a session | |
118 | user = User.find_by_rss_key(params[:key]) |
|
118 | user = User.find_by_rss_key(params[:key]) | |
119 | end |
|
119 | end | |
120 | end |
|
120 | end | |
121 | if user.nil? && Setting.rest_api_enabled? && accept_api_auth? |
|
121 | if user.nil? && Setting.rest_api_enabled? && accept_api_auth? | |
122 | if (key = api_key_from_request) |
|
122 | if (key = api_key_from_request) | |
123 | # Use API key |
|
123 | # Use API key | |
124 | user = User.find_by_api_key(key) |
|
124 | user = User.find_by_api_key(key) | |
125 | elsif request.authorization.to_s =~ /\ABasic /i |
|
125 | elsif request.authorization.to_s =~ /\ABasic /i | |
126 | # HTTP Basic, either username/password or API key/random |
|
126 | # HTTP Basic, either username/password or API key/random | |
127 | authenticate_with_http_basic do |username, password| |
|
127 | authenticate_with_http_basic do |username, password| | |
128 | user = User.try_to_login(username, password) || User.find_by_api_key(username) |
|
128 | user = User.try_to_login(username, password) || User.find_by_api_key(username) | |
129 | end |
|
129 | end | |
130 | if user && user.must_change_password? |
|
130 | if user && user.must_change_password? | |
131 | render_error :message => 'You must change your password', :status => 403 |
|
131 | render_error :message => 'You must change your password', :status => 403 | |
132 | return |
|
132 | return | |
133 | end |
|
133 | end | |
134 | end |
|
134 | end | |
135 | # Switch user if requested by an admin user |
|
135 | # Switch user if requested by an admin user | |
136 | if user && user.admin? && (username = api_switch_user_from_request) |
|
136 | if user && user.admin? && (username = api_switch_user_from_request) | |
137 | su = User.find_by_login(username) |
|
137 | su = User.find_by_login(username) | |
138 | if su && su.active? |
|
138 | if su && su.active? | |
139 | logger.info(" User switched by: #{user.login} (id=#{user.id})") if logger |
|
139 | logger.info(" User switched by: #{user.login} (id=#{user.id})") if logger | |
140 | user = su |
|
140 | user = su | |
141 | else |
|
141 | else | |
142 | render_error :message => 'Invalid X-Redmine-Switch-User header', :status => 412 |
|
142 | render_error :message => 'Invalid X-Redmine-Switch-User header', :status => 412 | |
143 | end |
|
143 | end | |
144 | end |
|
144 | end | |
145 | end |
|
145 | end | |
146 | user |
|
146 | user | |
147 | end |
|
147 | end | |
148 |
|
148 | |||
149 | def force_logout_if_password_changed |
|
149 | def force_logout_if_password_changed | |
150 | passwd_changed_on = User.current.passwd_changed_on || Time.at(0) |
|
150 | passwd_changed_on = User.current.passwd_changed_on || Time.at(0) | |
151 | # Make sure we force logout only for web browser sessions, not API calls |
|
151 | # Make sure we force logout only for web browser sessions, not API calls | |
152 | # if the password was changed after the session creation. |
|
152 | # if the password was changed after the session creation. | |
153 | if session[:user_id] && passwd_changed_on.utc.to_i > session[:ctime].to_i |
|
153 | if session[:user_id] && passwd_changed_on.utc.to_i > session[:ctime].to_i | |
154 | reset_session |
|
154 | reset_session | |
155 | set_localization |
|
155 | set_localization | |
156 | flash[:error] = l(:error_session_expired) |
|
156 | flash[:error] = l(:error_session_expired) | |
157 | redirect_to signin_url |
|
157 | redirect_to signin_url | |
158 | end |
|
158 | end | |
159 | end |
|
159 | end | |
160 |
|
160 | |||
161 | def autologin_cookie_name |
|
161 | def autologin_cookie_name | |
162 | Redmine::Configuration['autologin_cookie_name'].presence || 'autologin' |
|
162 | Redmine::Configuration['autologin_cookie_name'].presence || 'autologin' | |
163 | end |
|
163 | end | |
164 |
|
164 | |||
165 | def try_to_autologin |
|
165 | def try_to_autologin | |
166 | if cookies[autologin_cookie_name] && Setting.autologin? |
|
166 | if cookies[autologin_cookie_name] && Setting.autologin? | |
167 | # auto-login feature starts a new session |
|
167 | # auto-login feature starts a new session | |
168 | user = User.try_to_autologin(cookies[autologin_cookie_name]) |
|
168 | user = User.try_to_autologin(cookies[autologin_cookie_name]) | |
169 | if user |
|
169 | if user | |
170 | reset_session |
|
170 | reset_session | |
171 | start_user_session(user) |
|
171 | start_user_session(user) | |
172 | end |
|
172 | end | |
173 | user |
|
173 | user | |
174 | end |
|
174 | end | |
175 | end |
|
175 | end | |
176 |
|
176 | |||
177 | # Sets the logged in user |
|
177 | # Sets the logged in user | |
178 | def logged_user=(user) |
|
178 | def logged_user=(user) | |
179 | reset_session |
|
179 | reset_session | |
180 | if user && user.is_a?(User) |
|
180 | if user && user.is_a?(User) | |
181 | User.current = user |
|
181 | User.current = user | |
182 | start_user_session(user) |
|
182 | start_user_session(user) | |
183 | else |
|
183 | else | |
184 | User.current = User.anonymous |
|
184 | User.current = User.anonymous | |
185 | end |
|
185 | end | |
186 | end |
|
186 | end | |
187 |
|
187 | |||
188 | # Logs out current user |
|
188 | # Logs out current user | |
189 | def logout_user |
|
189 | def logout_user | |
190 | if User.current.logged? |
|
190 | if User.current.logged? | |
191 | cookies.delete(autologin_cookie_name) |
|
191 | cookies.delete(autologin_cookie_name) | |
192 | Token.delete_all(["user_id = ? AND action = ?", User.current.id, 'autologin']) |
|
192 | Token.delete_all(["user_id = ? AND action = ?", User.current.id, 'autologin']) | |
193 | self.logged_user = nil |
|
193 | self.logged_user = nil | |
194 | end |
|
194 | end | |
195 | end |
|
195 | end | |
196 |
|
196 | |||
197 | # check if login is globally required to access the application |
|
197 | # check if login is globally required to access the application | |
198 | def check_if_login_required |
|
198 | def check_if_login_required | |
199 | # no check needed if user is already logged in |
|
199 | # no check needed if user is already logged in | |
200 | return true if User.current.logged? |
|
200 | return true if User.current.logged? | |
201 | require_login if Setting.login_required? |
|
201 | require_login if Setting.login_required? | |
202 | end |
|
202 | end | |
203 |
|
203 | |||
204 | def check_password_change |
|
204 | def check_password_change | |
205 | if session[:pwd] |
|
205 | if session[:pwd] | |
206 | if User.current.must_change_password? |
|
206 | if User.current.must_change_password? | |
|
207 | flash[:error] = l(:error_password_expired) | |||
207 | redirect_to my_password_path |
|
208 | redirect_to my_password_path | |
208 | else |
|
209 | else | |
209 | session.delete(:pwd) |
|
210 | session.delete(:pwd) | |
210 | end |
|
211 | end | |
211 | end |
|
212 | end | |
212 | end |
|
213 | end | |
213 |
|
214 | |||
214 | def set_localization(user=User.current) |
|
215 | def set_localization(user=User.current) | |
215 | lang = nil |
|
216 | lang = nil | |
216 | if user && user.logged? |
|
217 | if user && user.logged? | |
217 | lang = find_language(user.language) |
|
218 | lang = find_language(user.language) | |
218 | end |
|
219 | end | |
219 | if lang.nil? && !Setting.force_default_language_for_anonymous? && request.env['HTTP_ACCEPT_LANGUAGE'] |
|
220 | if lang.nil? && !Setting.force_default_language_for_anonymous? && request.env['HTTP_ACCEPT_LANGUAGE'] | |
220 | accept_lang = parse_qvalues(request.env['HTTP_ACCEPT_LANGUAGE']).first |
|
221 | accept_lang = parse_qvalues(request.env['HTTP_ACCEPT_LANGUAGE']).first | |
221 | if !accept_lang.blank? |
|
222 | if !accept_lang.blank? | |
222 | accept_lang = accept_lang.downcase |
|
223 | accept_lang = accept_lang.downcase | |
223 | lang = find_language(accept_lang) || find_language(accept_lang.split('-').first) |
|
224 | lang = find_language(accept_lang) || find_language(accept_lang.split('-').first) | |
224 | end |
|
225 | end | |
225 | end |
|
226 | end | |
226 | lang ||= Setting.default_language |
|
227 | lang ||= Setting.default_language | |
227 | set_language_if_valid(lang) |
|
228 | set_language_if_valid(lang) | |
228 | end |
|
229 | end | |
229 |
|
230 | |||
230 | def require_login |
|
231 | def require_login | |
231 | if !User.current.logged? |
|
232 | if !User.current.logged? | |
232 | # Extract only the basic url parameters on non-GET requests |
|
233 | # Extract only the basic url parameters on non-GET requests | |
233 | if request.get? |
|
234 | if request.get? | |
234 | url = url_for(params) |
|
235 | url = url_for(params) | |
235 | else |
|
236 | else | |
236 | url = url_for(:controller => params[:controller], :action => params[:action], :id => params[:id], :project_id => params[:project_id]) |
|
237 | url = url_for(:controller => params[:controller], :action => params[:action], :id => params[:id], :project_id => params[:project_id]) | |
237 | end |
|
238 | end | |
238 | respond_to do |format| |
|
239 | respond_to do |format| | |
239 | format.html { |
|
240 | format.html { | |
240 | if request.xhr? |
|
241 | if request.xhr? | |
241 | head :unauthorized |
|
242 | head :unauthorized | |
242 | else |
|
243 | else | |
243 | redirect_to signin_path(:back_url => url) |
|
244 | redirect_to signin_path(:back_url => url) | |
244 | end |
|
245 | end | |
245 | } |
|
246 | } | |
246 | format.any(:atom, :pdf, :csv) { |
|
247 | format.any(:atom, :pdf, :csv) { | |
247 | redirect_to signin_path(:back_url => url) |
|
248 | redirect_to signin_path(:back_url => url) | |
248 | } |
|
249 | } | |
249 | format.xml { head :unauthorized, 'WWW-Authenticate' => 'Basic realm="Redmine API"' } |
|
250 | format.xml { head :unauthorized, 'WWW-Authenticate' => 'Basic realm="Redmine API"' } | |
250 | format.js { head :unauthorized, 'WWW-Authenticate' => 'Basic realm="Redmine API"' } |
|
251 | format.js { head :unauthorized, 'WWW-Authenticate' => 'Basic realm="Redmine API"' } | |
251 | format.json { head :unauthorized, 'WWW-Authenticate' => 'Basic realm="Redmine API"' } |
|
252 | format.json { head :unauthorized, 'WWW-Authenticate' => 'Basic realm="Redmine API"' } | |
252 | format.any { head :unauthorized } |
|
253 | format.any { head :unauthorized } | |
253 | end |
|
254 | end | |
254 | return false |
|
255 | return false | |
255 | end |
|
256 | end | |
256 | true |
|
257 | true | |
257 | end |
|
258 | end | |
258 |
|
259 | |||
259 | def require_admin |
|
260 | def require_admin | |
260 | return unless require_login |
|
261 | return unless require_login | |
261 | if !User.current.admin? |
|
262 | if !User.current.admin? | |
262 | render_403 |
|
263 | render_403 | |
263 | return false |
|
264 | return false | |
264 | end |
|
265 | end | |
265 | true |
|
266 | true | |
266 | end |
|
267 | end | |
267 |
|
268 | |||
268 | def deny_access |
|
269 | def deny_access | |
269 | User.current.logged? ? render_403 : require_login |
|
270 | User.current.logged? ? render_403 : require_login | |
270 | end |
|
271 | end | |
271 |
|
272 | |||
272 | # Authorize the user for the requested action |
|
273 | # Authorize the user for the requested action | |
273 | def authorize(ctrl = params[:controller], action = params[:action], global = false) |
|
274 | def authorize(ctrl = params[:controller], action = params[:action], global = false) | |
274 | allowed = User.current.allowed_to?({:controller => ctrl, :action => action}, @project || @projects, :global => global) |
|
275 | allowed = User.current.allowed_to?({:controller => ctrl, :action => action}, @project || @projects, :global => global) | |
275 | if allowed |
|
276 | if allowed | |
276 | true |
|
277 | true | |
277 | else |
|
278 | else | |
278 | if @project && @project.archived? |
|
279 | if @project && @project.archived? | |
279 | render_403 :message => :notice_not_authorized_archived_project |
|
280 | render_403 :message => :notice_not_authorized_archived_project | |
280 | else |
|
281 | else | |
281 | deny_access |
|
282 | deny_access | |
282 | end |
|
283 | end | |
283 | end |
|
284 | end | |
284 | end |
|
285 | end | |
285 |
|
286 | |||
286 | # Authorize the user for the requested action outside a project |
|
287 | # Authorize the user for the requested action outside a project | |
287 | def authorize_global(ctrl = params[:controller], action = params[:action], global = true) |
|
288 | def authorize_global(ctrl = params[:controller], action = params[:action], global = true) | |
288 | authorize(ctrl, action, global) |
|
289 | authorize(ctrl, action, global) | |
289 | end |
|
290 | end | |
290 |
|
291 | |||
291 | # Find project of id params[:id] |
|
292 | # Find project of id params[:id] | |
292 | def find_project |
|
293 | def find_project | |
293 | @project = Project.find(params[:id]) |
|
294 | @project = Project.find(params[:id]) | |
294 | rescue ActiveRecord::RecordNotFound |
|
295 | rescue ActiveRecord::RecordNotFound | |
295 | render_404 |
|
296 | render_404 | |
296 | end |
|
297 | end | |
297 |
|
298 | |||
298 | # Find project of id params[:project_id] |
|
299 | # Find project of id params[:project_id] | |
299 | def find_project_by_project_id |
|
300 | def find_project_by_project_id | |
300 | @project = Project.find(params[:project_id]) |
|
301 | @project = Project.find(params[:project_id]) | |
301 | rescue ActiveRecord::RecordNotFound |
|
302 | rescue ActiveRecord::RecordNotFound | |
302 | render_404 |
|
303 | render_404 | |
303 | end |
|
304 | end | |
304 |
|
305 | |||
305 | # Find a project based on params[:project_id] |
|
306 | # Find a project based on params[:project_id] | |
306 | # TODO: some subclasses override this, see about merging their logic |
|
307 | # TODO: some subclasses override this, see about merging their logic | |
307 | def find_optional_project |
|
308 | def find_optional_project | |
308 | @project = Project.find(params[:project_id]) unless params[:project_id].blank? |
|
309 | @project = Project.find(params[:project_id]) unless params[:project_id].blank? | |
309 | allowed = User.current.allowed_to?({:controller => params[:controller], :action => params[:action]}, @project, :global => true) |
|
310 | allowed = User.current.allowed_to?({:controller => params[:controller], :action => params[:action]}, @project, :global => true) | |
310 | allowed ? true : deny_access |
|
311 | allowed ? true : deny_access | |
311 | rescue ActiveRecord::RecordNotFound |
|
312 | rescue ActiveRecord::RecordNotFound | |
312 | render_404 |
|
313 | render_404 | |
313 | end |
|
314 | end | |
314 |
|
315 | |||
315 | # Finds and sets @project based on @object.project |
|
316 | # Finds and sets @project based on @object.project | |
316 | def find_project_from_association |
|
317 | def find_project_from_association | |
317 | render_404 unless @object.present? |
|
318 | render_404 unless @object.present? | |
318 |
|
319 | |||
319 | @project = @object.project |
|
320 | @project = @object.project | |
320 | end |
|
321 | end | |
321 |
|
322 | |||
322 | def find_model_object |
|
323 | def find_model_object | |
323 | model = self.class.model_object |
|
324 | model = self.class.model_object | |
324 | if model |
|
325 | if model | |
325 | @object = model.find(params[:id]) |
|
326 | @object = model.find(params[:id]) | |
326 | self.instance_variable_set('@' + controller_name.singularize, @object) if @object |
|
327 | self.instance_variable_set('@' + controller_name.singularize, @object) if @object | |
327 | end |
|
328 | end | |
328 | rescue ActiveRecord::RecordNotFound |
|
329 | rescue ActiveRecord::RecordNotFound | |
329 | render_404 |
|
330 | render_404 | |
330 | end |
|
331 | end | |
331 |
|
332 | |||
332 | def self.model_object(model) |
|
333 | def self.model_object(model) | |
333 | self.model_object = model |
|
334 | self.model_object = model | |
334 | end |
|
335 | end | |
335 |
|
336 | |||
336 | # Find the issue whose id is the :id parameter |
|
337 | # Find the issue whose id is the :id parameter | |
337 | # Raises a Unauthorized exception if the issue is not visible |
|
338 | # Raises a Unauthorized exception if the issue is not visible | |
338 | def find_issue |
|
339 | def find_issue | |
339 | # Issue.visible.find(...) can not be used to redirect user to the login form |
|
340 | # Issue.visible.find(...) can not be used to redirect user to the login form | |
340 | # if the issue actually exists but requires authentication |
|
341 | # if the issue actually exists but requires authentication | |
341 | @issue = Issue.find(params[:id]) |
|
342 | @issue = Issue.find(params[:id]) | |
342 | raise Unauthorized unless @issue.visible? |
|
343 | raise Unauthorized unless @issue.visible? | |
343 | @project = @issue.project |
|
344 | @project = @issue.project | |
344 | rescue ActiveRecord::RecordNotFound |
|
345 | rescue ActiveRecord::RecordNotFound | |
345 | render_404 |
|
346 | render_404 | |
346 | end |
|
347 | end | |
347 |
|
348 | |||
348 | # Find issues with a single :id param or :ids array param |
|
349 | # Find issues with a single :id param or :ids array param | |
349 | # Raises a Unauthorized exception if one of the issues is not visible |
|
350 | # Raises a Unauthorized exception if one of the issues is not visible | |
350 | def find_issues |
|
351 | def find_issues | |
351 | @issues = Issue.where(:id => (params[:id] || params[:ids])).preload(:project, :status, :tracker, :priority, :author, :assigned_to, :relations_to).to_a |
|
352 | @issues = Issue.where(:id => (params[:id] || params[:ids])).preload(:project, :status, :tracker, :priority, :author, :assigned_to, :relations_to).to_a | |
352 | raise ActiveRecord::RecordNotFound if @issues.empty? |
|
353 | raise ActiveRecord::RecordNotFound if @issues.empty? | |
353 | raise Unauthorized unless @issues.all?(&:visible?) |
|
354 | raise Unauthorized unless @issues.all?(&:visible?) | |
354 | @projects = @issues.collect(&:project).compact.uniq |
|
355 | @projects = @issues.collect(&:project).compact.uniq | |
355 | @project = @projects.first if @projects.size == 1 |
|
356 | @project = @projects.first if @projects.size == 1 | |
356 | rescue ActiveRecord::RecordNotFound |
|
357 | rescue ActiveRecord::RecordNotFound | |
357 | render_404 |
|
358 | render_404 | |
358 | end |
|
359 | end | |
359 |
|
360 | |||
360 | def find_attachments |
|
361 | def find_attachments | |
361 | if (attachments = params[:attachments]).present? |
|
362 | if (attachments = params[:attachments]).present? | |
362 | att = attachments.values.collect do |attachment| |
|
363 | att = attachments.values.collect do |attachment| | |
363 | Attachment.find_by_token( attachment[:token] ) if attachment[:token].present? |
|
364 | Attachment.find_by_token( attachment[:token] ) if attachment[:token].present? | |
364 | end |
|
365 | end | |
365 | att.compact! |
|
366 | att.compact! | |
366 | end |
|
367 | end | |
367 | @attachments = att || [] |
|
368 | @attachments = att || [] | |
368 | end |
|
369 | end | |
369 |
|
370 | |||
370 | # make sure that the user is a member of the project (or admin) if project is private |
|
371 | # make sure that the user is a member of the project (or admin) if project is private | |
371 | # used as a before_filter for actions that do not require any particular permission on the project |
|
372 | # used as a before_filter for actions that do not require any particular permission on the project | |
372 | def check_project_privacy |
|
373 | def check_project_privacy | |
373 | if @project && !@project.archived? |
|
374 | if @project && !@project.archived? | |
374 | if @project.visible? |
|
375 | if @project.visible? | |
375 | true |
|
376 | true | |
376 | else |
|
377 | else | |
377 | deny_access |
|
378 | deny_access | |
378 | end |
|
379 | end | |
379 | else |
|
380 | else | |
380 | @project = nil |
|
381 | @project = nil | |
381 | render_404 |
|
382 | render_404 | |
382 | false |
|
383 | false | |
383 | end |
|
384 | end | |
384 | end |
|
385 | end | |
385 |
|
386 | |||
386 | def back_url |
|
387 | def back_url | |
387 | url = params[:back_url] |
|
388 | url = params[:back_url] | |
388 | if url.nil? && referer = request.env['HTTP_REFERER'] |
|
389 | if url.nil? && referer = request.env['HTTP_REFERER'] | |
389 | url = CGI.unescape(referer.to_s) |
|
390 | url = CGI.unescape(referer.to_s) | |
390 | end |
|
391 | end | |
391 | url |
|
392 | url | |
392 | end |
|
393 | end | |
393 |
|
394 | |||
394 | def redirect_back_or_default(default, options={}) |
|
395 | def redirect_back_or_default(default, options={}) | |
395 | back_url = params[:back_url].to_s |
|
396 | back_url = params[:back_url].to_s | |
396 | if back_url.present? && valid_back_url?(back_url) |
|
397 | if back_url.present? && valid_back_url?(back_url) | |
397 | redirect_to(back_url) |
|
398 | redirect_to(back_url) | |
398 | return |
|
399 | return | |
399 | elsif options[:referer] |
|
400 | elsif options[:referer] | |
400 | redirect_to_referer_or default |
|
401 | redirect_to_referer_or default | |
401 | return |
|
402 | return | |
402 | end |
|
403 | end | |
403 | redirect_to default |
|
404 | redirect_to default | |
404 | false |
|
405 | false | |
405 | end |
|
406 | end | |
406 |
|
407 | |||
407 | # Returns true if back_url is a valid url for redirection, otherwise false |
|
408 | # Returns true if back_url is a valid url for redirection, otherwise false | |
408 | def valid_back_url?(back_url) |
|
409 | def valid_back_url?(back_url) | |
409 | if CGI.unescape(back_url).include?('..') |
|
410 | if CGI.unescape(back_url).include?('..') | |
410 | return false |
|
411 | return false | |
411 | end |
|
412 | end | |
412 |
|
413 | |||
413 | begin |
|
414 | begin | |
414 | uri = URI.parse(back_url) |
|
415 | uri = URI.parse(back_url) | |
415 | rescue URI::InvalidURIError |
|
416 | rescue URI::InvalidURIError | |
416 | return false |
|
417 | return false | |
417 | end |
|
418 | end | |
418 |
|
419 | |||
419 | if uri.host.present? && uri.host != request.host |
|
420 | if uri.host.present? && uri.host != request.host | |
420 | return false |
|
421 | return false | |
421 | end |
|
422 | end | |
422 |
|
423 | |||
423 | if uri.path.match(%r{/(login|account/register)}) |
|
424 | if uri.path.match(%r{/(login|account/register)}) | |
424 | return false |
|
425 | return false | |
425 | end |
|
426 | end | |
426 |
|
427 | |||
427 | if relative_url_root.present? && !uri.path.starts_with?(relative_url_root) |
|
428 | if relative_url_root.present? && !uri.path.starts_with?(relative_url_root) | |
428 | return false |
|
429 | return false | |
429 | end |
|
430 | end | |
430 |
|
431 | |||
431 | return true |
|
432 | return true | |
432 | end |
|
433 | end | |
433 | private :valid_back_url? |
|
434 | private :valid_back_url? | |
434 |
|
435 | |||
435 | # Redirects to the request referer if present, redirects to args or call block otherwise. |
|
436 | # Redirects to the request referer if present, redirects to args or call block otherwise. | |
436 | def redirect_to_referer_or(*args, &block) |
|
437 | def redirect_to_referer_or(*args, &block) | |
437 | redirect_to :back |
|
438 | redirect_to :back | |
438 | rescue ::ActionController::RedirectBackError |
|
439 | rescue ::ActionController::RedirectBackError | |
439 | if args.any? |
|
440 | if args.any? | |
440 | redirect_to *args |
|
441 | redirect_to *args | |
441 | elsif block_given? |
|
442 | elsif block_given? | |
442 | block.call |
|
443 | block.call | |
443 | else |
|
444 | else | |
444 | raise "#redirect_to_referer_or takes arguments or a block" |
|
445 | raise "#redirect_to_referer_or takes arguments or a block" | |
445 | end |
|
446 | end | |
446 | end |
|
447 | end | |
447 |
|
448 | |||
448 | def render_403(options={}) |
|
449 | def render_403(options={}) | |
449 | @project = nil |
|
450 | @project = nil | |
450 | render_error({:message => :notice_not_authorized, :status => 403}.merge(options)) |
|
451 | render_error({:message => :notice_not_authorized, :status => 403}.merge(options)) | |
451 | return false |
|
452 | return false | |
452 | end |
|
453 | end | |
453 |
|
454 | |||
454 | def render_404(options={}) |
|
455 | def render_404(options={}) | |
455 | render_error({:message => :notice_file_not_found, :status => 404}.merge(options)) |
|
456 | render_error({:message => :notice_file_not_found, :status => 404}.merge(options)) | |
456 | return false |
|
457 | return false | |
457 | end |
|
458 | end | |
458 |
|
459 | |||
459 | # Renders an error response |
|
460 | # Renders an error response | |
460 | def render_error(arg) |
|
461 | def render_error(arg) | |
461 | arg = {:message => arg} unless arg.is_a?(Hash) |
|
462 | arg = {:message => arg} unless arg.is_a?(Hash) | |
462 |
|
463 | |||
463 | @message = arg[:message] |
|
464 | @message = arg[:message] | |
464 | @message = l(@message) if @message.is_a?(Symbol) |
|
465 | @message = l(@message) if @message.is_a?(Symbol) | |
465 | @status = arg[:status] || 500 |
|
466 | @status = arg[:status] || 500 | |
466 |
|
467 | |||
467 | respond_to do |format| |
|
468 | respond_to do |format| | |
468 | format.html { |
|
469 | format.html { | |
469 | render :template => 'common/error', :layout => use_layout, :status => @status |
|
470 | render :template => 'common/error', :layout => use_layout, :status => @status | |
470 | } |
|
471 | } | |
471 | format.any { head @status } |
|
472 | format.any { head @status } | |
472 | end |
|
473 | end | |
473 | end |
|
474 | end | |
474 |
|
475 | |||
475 | # Handler for ActionView::MissingTemplate exception |
|
476 | # Handler for ActionView::MissingTemplate exception | |
476 | def missing_template |
|
477 | def missing_template | |
477 | logger.warn "Missing template, responding with 404" |
|
478 | logger.warn "Missing template, responding with 404" | |
478 | @project = nil |
|
479 | @project = nil | |
479 | render_404 |
|
480 | render_404 | |
480 | end |
|
481 | end | |
481 |
|
482 | |||
482 | # Filter for actions that provide an API response |
|
483 | # Filter for actions that provide an API response | |
483 | # but have no HTML representation for non admin users |
|
484 | # but have no HTML representation for non admin users | |
484 | def require_admin_or_api_request |
|
485 | def require_admin_or_api_request | |
485 | return true if api_request? |
|
486 | return true if api_request? | |
486 | if User.current.admin? |
|
487 | if User.current.admin? | |
487 | true |
|
488 | true | |
488 | elsif User.current.logged? |
|
489 | elsif User.current.logged? | |
489 | render_error(:status => 406) |
|
490 | render_error(:status => 406) | |
490 | else |
|
491 | else | |
491 | deny_access |
|
492 | deny_access | |
492 | end |
|
493 | end | |
493 | end |
|
494 | end | |
494 |
|
495 | |||
495 | # Picks which layout to use based on the request |
|
496 | # Picks which layout to use based on the request | |
496 | # |
|
497 | # | |
497 | # @return [boolean, string] name of the layout to use or false for no layout |
|
498 | # @return [boolean, string] name of the layout to use or false for no layout | |
498 | def use_layout |
|
499 | def use_layout | |
499 | request.xhr? ? false : 'base' |
|
500 | request.xhr? ? false : 'base' | |
500 | end |
|
501 | end | |
501 |
|
502 | |||
502 | def render_feed(items, options={}) |
|
503 | def render_feed(items, options={}) | |
503 | @items = (items || []).to_a |
|
504 | @items = (items || []).to_a | |
504 | @items.sort! {|x,y| y.event_datetime <=> x.event_datetime } |
|
505 | @items.sort! {|x,y| y.event_datetime <=> x.event_datetime } | |
505 | @items = @items.slice(0, Setting.feeds_limit.to_i) |
|
506 | @items = @items.slice(0, Setting.feeds_limit.to_i) | |
506 | @title = options[:title] || Setting.app_title |
|
507 | @title = options[:title] || Setting.app_title | |
507 | render :template => "common/feed", :formats => [:atom], :layout => false, |
|
508 | render :template => "common/feed", :formats => [:atom], :layout => false, | |
508 | :content_type => 'application/atom+xml' |
|
509 | :content_type => 'application/atom+xml' | |
509 | end |
|
510 | end | |
510 |
|
511 | |||
511 | def self.accept_rss_auth(*actions) |
|
512 | def self.accept_rss_auth(*actions) | |
512 | if actions.any? |
|
513 | if actions.any? | |
513 | self.accept_rss_auth_actions = actions |
|
514 | self.accept_rss_auth_actions = actions | |
514 | else |
|
515 | else | |
515 | self.accept_rss_auth_actions || [] |
|
516 | self.accept_rss_auth_actions || [] | |
516 | end |
|
517 | end | |
517 | end |
|
518 | end | |
518 |
|
519 | |||
519 | def accept_rss_auth?(action=action_name) |
|
520 | def accept_rss_auth?(action=action_name) | |
520 | self.class.accept_rss_auth.include?(action.to_sym) |
|
521 | self.class.accept_rss_auth.include?(action.to_sym) | |
521 | end |
|
522 | end | |
522 |
|
523 | |||
523 | def self.accept_api_auth(*actions) |
|
524 | def self.accept_api_auth(*actions) | |
524 | if actions.any? |
|
525 | if actions.any? | |
525 | self.accept_api_auth_actions = actions |
|
526 | self.accept_api_auth_actions = actions | |
526 | else |
|
527 | else | |
527 | self.accept_api_auth_actions || [] |
|
528 | self.accept_api_auth_actions || [] | |
528 | end |
|
529 | end | |
529 | end |
|
530 | end | |
530 |
|
531 | |||
531 | def accept_api_auth?(action=action_name) |
|
532 | def accept_api_auth?(action=action_name) | |
532 | self.class.accept_api_auth.include?(action.to_sym) |
|
533 | self.class.accept_api_auth.include?(action.to_sym) | |
533 | end |
|
534 | end | |
534 |
|
535 | |||
535 | # Returns the number of objects that should be displayed |
|
536 | # Returns the number of objects that should be displayed | |
536 | # on the paginated list |
|
537 | # on the paginated list | |
537 | def per_page_option |
|
538 | def per_page_option | |
538 | per_page = nil |
|
539 | per_page = nil | |
539 | if params[:per_page] && Setting.per_page_options_array.include?(params[:per_page].to_s.to_i) |
|
540 | if params[:per_page] && Setting.per_page_options_array.include?(params[:per_page].to_s.to_i) | |
540 | per_page = params[:per_page].to_s.to_i |
|
541 | per_page = params[:per_page].to_s.to_i | |
541 | session[:per_page] = per_page |
|
542 | session[:per_page] = per_page | |
542 | elsif session[:per_page] |
|
543 | elsif session[:per_page] | |
543 | per_page = session[:per_page] |
|
544 | per_page = session[:per_page] | |
544 | else |
|
545 | else | |
545 | per_page = Setting.per_page_options_array.first || 25 |
|
546 | per_page = Setting.per_page_options_array.first || 25 | |
546 | end |
|
547 | end | |
547 | per_page |
|
548 | per_page | |
548 | end |
|
549 | end | |
549 |
|
550 | |||
550 | # Returns offset and limit used to retrieve objects |
|
551 | # Returns offset and limit used to retrieve objects | |
551 | # for an API response based on offset, limit and page parameters |
|
552 | # for an API response based on offset, limit and page parameters | |
552 | def api_offset_and_limit(options=params) |
|
553 | def api_offset_and_limit(options=params) | |
553 | if options[:offset].present? |
|
554 | if options[:offset].present? | |
554 | offset = options[:offset].to_i |
|
555 | offset = options[:offset].to_i | |
555 | if offset < 0 |
|
556 | if offset < 0 | |
556 | offset = 0 |
|
557 | offset = 0 | |
557 | end |
|
558 | end | |
558 | end |
|
559 | end | |
559 | limit = options[:limit].to_i |
|
560 | limit = options[:limit].to_i | |
560 | if limit < 1 |
|
561 | if limit < 1 | |
561 | limit = 25 |
|
562 | limit = 25 | |
562 | elsif limit > 100 |
|
563 | elsif limit > 100 | |
563 | limit = 100 |
|
564 | limit = 100 | |
564 | end |
|
565 | end | |
565 | if offset.nil? && options[:page].present? |
|
566 | if offset.nil? && options[:page].present? | |
566 | offset = (options[:page].to_i - 1) * limit |
|
567 | offset = (options[:page].to_i - 1) * limit | |
567 | offset = 0 if offset < 0 |
|
568 | offset = 0 if offset < 0 | |
568 | end |
|
569 | end | |
569 | offset ||= 0 |
|
570 | offset ||= 0 | |
570 |
|
571 | |||
571 | [offset, limit] |
|
572 | [offset, limit] | |
572 | end |
|
573 | end | |
573 |
|
574 | |||
574 | # qvalues http header parser |
|
575 | # qvalues http header parser | |
575 | # code taken from webrick |
|
576 | # code taken from webrick | |
576 | def parse_qvalues(value) |
|
577 | def parse_qvalues(value) | |
577 | tmp = [] |
|
578 | tmp = [] | |
578 | if value |
|
579 | if value | |
579 | parts = value.split(/,\s*/) |
|
580 | parts = value.split(/,\s*/) | |
580 | parts.each {|part| |
|
581 | parts.each {|part| | |
581 | if m = %r{^([^\s,]+?)(?:;\s*q=(\d+(?:\.\d+)?))?$}.match(part) |
|
582 | if m = %r{^([^\s,]+?)(?:;\s*q=(\d+(?:\.\d+)?))?$}.match(part) | |
582 | val = m[1] |
|
583 | val = m[1] | |
583 | q = (m[2] or 1).to_f |
|
584 | q = (m[2] or 1).to_f | |
584 | tmp.push([val, q]) |
|
585 | tmp.push([val, q]) | |
585 | end |
|
586 | end | |
586 | } |
|
587 | } | |
587 | tmp = tmp.sort_by{|val, q| -q} |
|
588 | tmp = tmp.sort_by{|val, q| -q} | |
588 | tmp.collect!{|val, q| val} |
|
589 | tmp.collect!{|val, q| val} | |
589 | end |
|
590 | end | |
590 | return tmp |
|
591 | return tmp | |
591 | rescue |
|
592 | rescue | |
592 | nil |
|
593 | nil | |
593 | end |
|
594 | end | |
594 |
|
595 | |||
595 | # Returns a string that can be used as filename value in Content-Disposition header |
|
596 | # Returns a string that can be used as filename value in Content-Disposition header | |
596 | def filename_for_content_disposition(name) |
|
597 | def filename_for_content_disposition(name) | |
597 | request.env['HTTP_USER_AGENT'] =~ %r{(MSIE|Trident)} ? ERB::Util.url_encode(name) : name |
|
598 | request.env['HTTP_USER_AGENT'] =~ %r{(MSIE|Trident)} ? ERB::Util.url_encode(name) : name | |
598 | end |
|
599 | end | |
599 |
|
600 | |||
600 | def api_request? |
|
601 | def api_request? | |
601 | %w(xml json).include? params[:format] |
|
602 | %w(xml json).include? params[:format] | |
602 | end |
|
603 | end | |
603 |
|
604 | |||
604 | # Returns the API key present in the request |
|
605 | # Returns the API key present in the request | |
605 | def api_key_from_request |
|
606 | def api_key_from_request | |
606 | if params[:key].present? |
|
607 | if params[:key].present? | |
607 | params[:key].to_s |
|
608 | params[:key].to_s | |
608 | elsif request.headers["X-Redmine-API-Key"].present? |
|
609 | elsif request.headers["X-Redmine-API-Key"].present? | |
609 | request.headers["X-Redmine-API-Key"].to_s |
|
610 | request.headers["X-Redmine-API-Key"].to_s | |
610 | end |
|
611 | end | |
611 | end |
|
612 | end | |
612 |
|
613 | |||
613 | # Returns the API 'switch user' value if present |
|
614 | # Returns the API 'switch user' value if present | |
614 | def api_switch_user_from_request |
|
615 | def api_switch_user_from_request | |
615 | request.headers["X-Redmine-Switch-User"].to_s.presence |
|
616 | request.headers["X-Redmine-Switch-User"].to_s.presence | |
616 | end |
|
617 | end | |
617 |
|
618 | |||
618 | # Renders a warning flash if obj has unsaved attachments |
|
619 | # Renders a warning flash if obj has unsaved attachments | |
619 | def render_attachment_warning_if_needed(obj) |
|
620 | def render_attachment_warning_if_needed(obj) | |
620 | flash[:warning] = l(:warning_attachments_not_saved, obj.unsaved_attachments.size) if obj.unsaved_attachments.present? |
|
621 | flash[:warning] = l(:warning_attachments_not_saved, obj.unsaved_attachments.size) if obj.unsaved_attachments.present? | |
621 | end |
|
622 | end | |
622 |
|
623 | |||
623 | # Rescues an invalid query statement. Just in case... |
|
624 | # Rescues an invalid query statement. Just in case... | |
624 | def query_statement_invalid(exception) |
|
625 | def query_statement_invalid(exception) | |
625 | logger.error "Query::StatementInvalid: #{exception.message}" if logger |
|
626 | logger.error "Query::StatementInvalid: #{exception.message}" if logger | |
626 | session.delete(:query) |
|
627 | session.delete(:query) | |
627 | sort_clear if respond_to?(:sort_clear) |
|
628 | sort_clear if respond_to?(:sort_clear) | |
628 | render_error "An error occurred while executing the query and has been logged. Please report this error to your Redmine administrator." |
|
629 | render_error "An error occurred while executing the query and has been logged. Please report this error to your Redmine administrator." | |
629 | end |
|
630 | end | |
630 |
|
631 | |||
631 | # Renders a 200 response for successfull updates or deletions via the API |
|
632 | # Renders a 200 response for successfull updates or deletions via the API | |
632 | def render_api_ok |
|
633 | def render_api_ok | |
633 | render_api_head :ok |
|
634 | render_api_head :ok | |
634 | end |
|
635 | end | |
635 |
|
636 | |||
636 | # Renders a head API response |
|
637 | # Renders a head API response | |
637 | def render_api_head(status) |
|
638 | def render_api_head(status) | |
638 | # #head would return a response body with one space |
|
639 | # #head would return a response body with one space | |
639 | render :text => '', :status => status, :layout => nil |
|
640 | render :text => '', :status => status, :layout => nil | |
640 | end |
|
641 | end | |
641 |
|
642 | |||
642 | # Renders API response on validation failure |
|
643 | # Renders API response on validation failure | |
643 | # for an object or an array of objects |
|
644 | # for an object or an array of objects | |
644 | def render_validation_errors(objects) |
|
645 | def render_validation_errors(objects) | |
645 | messages = Array.wrap(objects).map {|object| object.errors.full_messages}.flatten |
|
646 | messages = Array.wrap(objects).map {|object| object.errors.full_messages}.flatten | |
646 | render_api_errors(messages) |
|
647 | render_api_errors(messages) | |
647 | end |
|
648 | end | |
648 |
|
649 | |||
649 | def render_api_errors(*messages) |
|
650 | def render_api_errors(*messages) | |
650 | @error_messages = messages.flatten |
|
651 | @error_messages = messages.flatten | |
651 | render :template => 'common/error_messages.api', :status => :unprocessable_entity, :layout => nil |
|
652 | render :template => 'common/error_messages.api', :status => :unprocessable_entity, :layout => nil | |
652 | end |
|
653 | end | |
653 |
|
654 | |||
654 | # Overrides #_include_layout? so that #render with no arguments |
|
655 | # Overrides #_include_layout? so that #render with no arguments | |
655 | # doesn't use the layout for api requests |
|
656 | # doesn't use the layout for api requests | |
656 | def _include_layout?(*args) |
|
657 | def _include_layout?(*args) | |
657 | api_request? ? false : super |
|
658 | api_request? ? false : super | |
658 | end |
|
659 | end | |
659 | end |
|
660 | end |
@@ -1,835 +1,846 | |||||
1 | # Redmine - project management software |
|
1 | # Redmine - project management software | |
2 | # Copyright (C) 2006-2015 Jean-Philippe Lang |
|
2 | # Copyright (C) 2006-2015 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 "digest/sha1" |
|
18 | require "digest/sha1" | |
19 |
|
19 | |||
20 | class User < Principal |
|
20 | class User < Principal | |
21 | include Redmine::SafeAttributes |
|
21 | include Redmine::SafeAttributes | |
22 |
|
22 | |||
23 | # Different ways of displaying/sorting users |
|
23 | # Different ways of displaying/sorting users | |
24 | USER_FORMATS = { |
|
24 | USER_FORMATS = { | |
25 | :firstname_lastname => { |
|
25 | :firstname_lastname => { | |
26 | :string => '#{firstname} #{lastname}', |
|
26 | :string => '#{firstname} #{lastname}', | |
27 | :order => %w(firstname lastname id), |
|
27 | :order => %w(firstname lastname id), | |
28 | :setting_order => 1 |
|
28 | :setting_order => 1 | |
29 | }, |
|
29 | }, | |
30 | :firstname_lastinitial => { |
|
30 | :firstname_lastinitial => { | |
31 | :string => '#{firstname} #{lastname.to_s.chars.first}.', |
|
31 | :string => '#{firstname} #{lastname.to_s.chars.first}.', | |
32 | :order => %w(firstname lastname id), |
|
32 | :order => %w(firstname lastname id), | |
33 | :setting_order => 2 |
|
33 | :setting_order => 2 | |
34 | }, |
|
34 | }, | |
35 | :firstinitial_lastname => { |
|
35 | :firstinitial_lastname => { | |
36 | :string => '#{firstname.to_s.gsub(/(([[:alpha:]])[[:alpha:]]*\.?)/, \'\2.\')} #{lastname}', |
|
36 | :string => '#{firstname.to_s.gsub(/(([[:alpha:]])[[:alpha:]]*\.?)/, \'\2.\')} #{lastname}', | |
37 | :order => %w(firstname lastname id), |
|
37 | :order => %w(firstname lastname id), | |
38 | :setting_order => 2 |
|
38 | :setting_order => 2 | |
39 | }, |
|
39 | }, | |
40 | :firstname => { |
|
40 | :firstname => { | |
41 | :string => '#{firstname}', |
|
41 | :string => '#{firstname}', | |
42 | :order => %w(firstname id), |
|
42 | :order => %w(firstname id), | |
43 | :setting_order => 3 |
|
43 | :setting_order => 3 | |
44 | }, |
|
44 | }, | |
45 | :lastname_firstname => { |
|
45 | :lastname_firstname => { | |
46 | :string => '#{lastname} #{firstname}', |
|
46 | :string => '#{lastname} #{firstname}', | |
47 | :order => %w(lastname firstname id), |
|
47 | :order => %w(lastname firstname id), | |
48 | :setting_order => 4 |
|
48 | :setting_order => 4 | |
49 | }, |
|
49 | }, | |
50 | :lastname_coma_firstname => { |
|
50 | :lastname_coma_firstname => { | |
51 | :string => '#{lastname}, #{firstname}', |
|
51 | :string => '#{lastname}, #{firstname}', | |
52 | :order => %w(lastname firstname id), |
|
52 | :order => %w(lastname firstname id), | |
53 | :setting_order => 5 |
|
53 | :setting_order => 5 | |
54 | }, |
|
54 | }, | |
55 | :lastname => { |
|
55 | :lastname => { | |
56 | :string => '#{lastname}', |
|
56 | :string => '#{lastname}', | |
57 | :order => %w(lastname id), |
|
57 | :order => %w(lastname id), | |
58 | :setting_order => 6 |
|
58 | :setting_order => 6 | |
59 | }, |
|
59 | }, | |
60 | :username => { |
|
60 | :username => { | |
61 | :string => '#{login}', |
|
61 | :string => '#{login}', | |
62 | :order => %w(login id), |
|
62 | :order => %w(login id), | |
63 | :setting_order => 7 |
|
63 | :setting_order => 7 | |
64 | }, |
|
64 | }, | |
65 | } |
|
65 | } | |
66 |
|
66 | |||
67 | MAIL_NOTIFICATION_OPTIONS = [ |
|
67 | MAIL_NOTIFICATION_OPTIONS = [ | |
68 | ['all', :label_user_mail_option_all], |
|
68 | ['all', :label_user_mail_option_all], | |
69 | ['selected', :label_user_mail_option_selected], |
|
69 | ['selected', :label_user_mail_option_selected], | |
70 | ['only_my_events', :label_user_mail_option_only_my_events], |
|
70 | ['only_my_events', :label_user_mail_option_only_my_events], | |
71 | ['only_assigned', :label_user_mail_option_only_assigned], |
|
71 | ['only_assigned', :label_user_mail_option_only_assigned], | |
72 | ['only_owner', :label_user_mail_option_only_owner], |
|
72 | ['only_owner', :label_user_mail_option_only_owner], | |
73 | ['none', :label_user_mail_option_none] |
|
73 | ['none', :label_user_mail_option_none] | |
74 | ] |
|
74 | ] | |
75 |
|
75 | |||
76 | has_and_belongs_to_many :groups, |
|
76 | has_and_belongs_to_many :groups, | |
77 | :join_table => "#{table_name_prefix}groups_users#{table_name_suffix}", |
|
77 | :join_table => "#{table_name_prefix}groups_users#{table_name_suffix}", | |
78 | :after_add => Proc.new {|user, group| group.user_added(user)}, |
|
78 | :after_add => Proc.new {|user, group| group.user_added(user)}, | |
79 | :after_remove => Proc.new {|user, group| group.user_removed(user)} |
|
79 | :after_remove => Proc.new {|user, group| group.user_removed(user)} | |
80 | has_many :changesets, :dependent => :nullify |
|
80 | has_many :changesets, :dependent => :nullify | |
81 | has_one :preference, :dependent => :destroy, :class_name => 'UserPreference' |
|
81 | has_one :preference, :dependent => :destroy, :class_name => 'UserPreference' | |
82 | has_one :rss_token, lambda {where "action='feeds'"}, :class_name => 'Token' |
|
82 | has_one :rss_token, lambda {where "action='feeds'"}, :class_name => 'Token' | |
83 | has_one :api_token, lambda {where "action='api'"}, :class_name => 'Token' |
|
83 | has_one :api_token, lambda {where "action='api'"}, :class_name => 'Token' | |
84 | has_one :email_address, lambda {where :is_default => true}, :autosave => true |
|
84 | has_one :email_address, lambda {where :is_default => true}, :autosave => true | |
85 | has_many :email_addresses, :dependent => :delete_all |
|
85 | has_many :email_addresses, :dependent => :delete_all | |
86 | belongs_to :auth_source |
|
86 | belongs_to :auth_source | |
87 |
|
87 | |||
88 | scope :logged, lambda { where("#{User.table_name}.status <> #{STATUS_ANONYMOUS}") } |
|
88 | scope :logged, lambda { where("#{User.table_name}.status <> #{STATUS_ANONYMOUS}") } | |
89 | scope :status, lambda {|arg| where(arg.blank? ? nil : {:status => arg.to_i}) } |
|
89 | scope :status, lambda {|arg| where(arg.blank? ? nil : {:status => arg.to_i}) } | |
90 |
|
90 | |||
91 | acts_as_customizable |
|
91 | acts_as_customizable | |
92 |
|
92 | |||
93 | attr_accessor :password, :password_confirmation, :generate_password |
|
93 | attr_accessor :password, :password_confirmation, :generate_password | |
94 | attr_accessor :last_before_login_on |
|
94 | attr_accessor :last_before_login_on | |
95 | # Prevents unauthorized assignments |
|
95 | # Prevents unauthorized assignments | |
96 | attr_protected :login, :admin, :password, :password_confirmation, :hashed_password |
|
96 | attr_protected :login, :admin, :password, :password_confirmation, :hashed_password | |
97 |
|
97 | |||
98 | LOGIN_LENGTH_LIMIT = 60 |
|
98 | LOGIN_LENGTH_LIMIT = 60 | |
99 | MAIL_LENGTH_LIMIT = 60 |
|
99 | MAIL_LENGTH_LIMIT = 60 | |
100 |
|
100 | |||
101 | validates_presence_of :login, :firstname, :lastname, :if => Proc.new { |user| !user.is_a?(AnonymousUser) } |
|
101 | validates_presence_of :login, :firstname, :lastname, :if => Proc.new { |user| !user.is_a?(AnonymousUser) } | |
102 | validates_uniqueness_of :login, :if => Proc.new { |user| user.login_changed? && user.login.present? }, :case_sensitive => false |
|
102 | validates_uniqueness_of :login, :if => Proc.new { |user| user.login_changed? && user.login.present? }, :case_sensitive => false | |
103 | # Login must contain letters, numbers, underscores only |
|
103 | # Login must contain letters, numbers, underscores only | |
104 | validates_format_of :login, :with => /\A[a-z0-9_\-@\.]*\z/i |
|
104 | validates_format_of :login, :with => /\A[a-z0-9_\-@\.]*\z/i | |
105 | validates_length_of :login, :maximum => LOGIN_LENGTH_LIMIT |
|
105 | validates_length_of :login, :maximum => LOGIN_LENGTH_LIMIT | |
106 | validates_length_of :firstname, :lastname, :maximum => 30 |
|
106 | validates_length_of :firstname, :lastname, :maximum => 30 | |
107 | validates_inclusion_of :mail_notification, :in => MAIL_NOTIFICATION_OPTIONS.collect(&:first), :allow_blank => true |
|
107 | validates_inclusion_of :mail_notification, :in => MAIL_NOTIFICATION_OPTIONS.collect(&:first), :allow_blank => true | |
108 | validate :validate_password_length |
|
108 | validate :validate_password_length | |
109 | validate do |
|
109 | validate do | |
110 | if password_confirmation && password != password_confirmation |
|
110 | if password_confirmation && password != password_confirmation | |
111 | errors.add(:password, :confirmation) |
|
111 | errors.add(:password, :confirmation) | |
112 | end |
|
112 | end | |
113 | end |
|
113 | end | |
114 |
|
114 | |||
115 | before_validation :instantiate_email_address |
|
115 | before_validation :instantiate_email_address | |
116 | before_create :set_mail_notification |
|
116 | before_create :set_mail_notification | |
117 | before_save :generate_password_if_needed, :update_hashed_password |
|
117 | before_save :generate_password_if_needed, :update_hashed_password | |
118 | before_destroy :remove_references_before_destroy |
|
118 | before_destroy :remove_references_before_destroy | |
119 | after_save :update_notified_project_ids, :destroy_tokens |
|
119 | after_save :update_notified_project_ids, :destroy_tokens | |
120 |
|
120 | |||
121 | scope :in_group, lambda {|group| |
|
121 | scope :in_group, lambda {|group| | |
122 | group_id = group.is_a?(Group) ? group.id : group.to_i |
|
122 | group_id = group.is_a?(Group) ? group.id : group.to_i | |
123 | where("#{User.table_name}.id IN (SELECT gu.user_id FROM #{table_name_prefix}groups_users#{table_name_suffix} gu WHERE gu.group_id = ?)", group_id) |
|
123 | where("#{User.table_name}.id IN (SELECT gu.user_id FROM #{table_name_prefix}groups_users#{table_name_suffix} gu WHERE gu.group_id = ?)", group_id) | |
124 | } |
|
124 | } | |
125 | scope :not_in_group, lambda {|group| |
|
125 | scope :not_in_group, lambda {|group| | |
126 | group_id = group.is_a?(Group) ? group.id : group.to_i |
|
126 | group_id = group.is_a?(Group) ? group.id : group.to_i | |
127 | where("#{User.table_name}.id NOT IN (SELECT gu.user_id FROM #{table_name_prefix}groups_users#{table_name_suffix} gu WHERE gu.group_id = ?)", group_id) |
|
127 | where("#{User.table_name}.id NOT IN (SELECT gu.user_id FROM #{table_name_prefix}groups_users#{table_name_suffix} gu WHERE gu.group_id = ?)", group_id) | |
128 | } |
|
128 | } | |
129 | scope :sorted, lambda { order(*User.fields_for_order_statement)} |
|
129 | scope :sorted, lambda { order(*User.fields_for_order_statement)} | |
130 | scope :having_mail, lambda {|arg| |
|
130 | scope :having_mail, lambda {|arg| | |
131 | addresses = Array.wrap(arg).map {|a| a.to_s.downcase} |
|
131 | addresses = Array.wrap(arg).map {|a| a.to_s.downcase} | |
132 | if addresses.any? |
|
132 | if addresses.any? | |
133 | joins(:email_addresses).where("LOWER(address) IN (?)", addresses).uniq |
|
133 | joins(:email_addresses).where("LOWER(address) IN (?)", addresses).uniq | |
134 | else |
|
134 | else | |
135 | none |
|
135 | none | |
136 | end |
|
136 | end | |
137 | } |
|
137 | } | |
138 |
|
138 | |||
139 | def set_mail_notification |
|
139 | def set_mail_notification | |
140 | self.mail_notification = Setting.default_notification_option if self.mail_notification.blank? |
|
140 | self.mail_notification = Setting.default_notification_option if self.mail_notification.blank? | |
141 | true |
|
141 | true | |
142 | end |
|
142 | end | |
143 |
|
143 | |||
144 | def update_hashed_password |
|
144 | def update_hashed_password | |
145 | # update hashed_password if password was set |
|
145 | # update hashed_password if password was set | |
146 | if self.password && self.auth_source_id.blank? |
|
146 | if self.password && self.auth_source_id.blank? | |
147 | salt_password(password) |
|
147 | salt_password(password) | |
148 | end |
|
148 | end | |
149 | end |
|
149 | end | |
150 |
|
150 | |||
151 | alias :base_reload :reload |
|
151 | alias :base_reload :reload | |
152 | def reload(*args) |
|
152 | def reload(*args) | |
153 | @name = nil |
|
153 | @name = nil | |
154 | @projects_by_role = nil |
|
154 | @projects_by_role = nil | |
155 | @membership_by_project_id = nil |
|
155 | @membership_by_project_id = nil | |
156 | @notified_projects_ids = nil |
|
156 | @notified_projects_ids = nil | |
157 | @notified_projects_ids_changed = false |
|
157 | @notified_projects_ids_changed = false | |
158 | @builtin_role = nil |
|
158 | @builtin_role = nil | |
159 | @visible_project_ids = nil |
|
159 | @visible_project_ids = nil | |
160 | base_reload(*args) |
|
160 | base_reload(*args) | |
161 | end |
|
161 | end | |
162 |
|
162 | |||
163 | def mail |
|
163 | def mail | |
164 | email_address.try(:address) |
|
164 | email_address.try(:address) | |
165 | end |
|
165 | end | |
166 |
|
166 | |||
167 | def mail=(arg) |
|
167 | def mail=(arg) | |
168 | email = email_address || build_email_address |
|
168 | email = email_address || build_email_address | |
169 | email.address = arg |
|
169 | email.address = arg | |
170 | end |
|
170 | end | |
171 |
|
171 | |||
172 | def mail_changed? |
|
172 | def mail_changed? | |
173 | email_address.try(:address_changed?) |
|
173 | email_address.try(:address_changed?) | |
174 | end |
|
174 | end | |
175 |
|
175 | |||
176 | def mails |
|
176 | def mails | |
177 | email_addresses.pluck(:address) |
|
177 | email_addresses.pluck(:address) | |
178 | end |
|
178 | end | |
179 |
|
179 | |||
180 | def self.find_or_initialize_by_identity_url(url) |
|
180 | def self.find_or_initialize_by_identity_url(url) | |
181 | user = where(:identity_url => url).first |
|
181 | user = where(:identity_url => url).first | |
182 | unless user |
|
182 | unless user | |
183 | user = User.new |
|
183 | user = User.new | |
184 | user.identity_url = url |
|
184 | user.identity_url = url | |
185 | end |
|
185 | end | |
186 | user |
|
186 | user | |
187 | end |
|
187 | end | |
188 |
|
188 | |||
189 | def identity_url=(url) |
|
189 | def identity_url=(url) | |
190 | if url.blank? |
|
190 | if url.blank? | |
191 | write_attribute(:identity_url, '') |
|
191 | write_attribute(:identity_url, '') | |
192 | else |
|
192 | else | |
193 | begin |
|
193 | begin | |
194 | write_attribute(:identity_url, OpenIdAuthentication.normalize_identifier(url)) |
|
194 | write_attribute(:identity_url, OpenIdAuthentication.normalize_identifier(url)) | |
195 | rescue OpenIdAuthentication::InvalidOpenId |
|
195 | rescue OpenIdAuthentication::InvalidOpenId | |
196 | # Invalid url, don't save |
|
196 | # Invalid url, don't save | |
197 | end |
|
197 | end | |
198 | end |
|
198 | end | |
199 | self.read_attribute(:identity_url) |
|
199 | self.read_attribute(:identity_url) | |
200 | end |
|
200 | end | |
201 |
|
201 | |||
202 | # Returns the user that matches provided login and password, or nil |
|
202 | # Returns the user that matches provided login and password, or nil | |
203 | def self.try_to_login(login, password, active_only=true) |
|
203 | def self.try_to_login(login, password, active_only=true) | |
204 | login = login.to_s |
|
204 | login = login.to_s | |
205 | password = password.to_s |
|
205 | password = password.to_s | |
206 |
|
206 | |||
207 | # Make sure no one can sign in with an empty login or password |
|
207 | # Make sure no one can sign in with an empty login or password | |
208 | return nil if login.empty? || password.empty? |
|
208 | return nil if login.empty? || password.empty? | |
209 | user = find_by_login(login) |
|
209 | user = find_by_login(login) | |
210 | if user |
|
210 | if user | |
211 | # user is already in local database |
|
211 | # user is already in local database | |
212 | return nil unless user.check_password?(password) |
|
212 | return nil unless user.check_password?(password) | |
213 | return nil if !user.active? && active_only |
|
213 | return nil if !user.active? && active_only | |
214 | else |
|
214 | else | |
215 | # user is not yet registered, try to authenticate with available sources |
|
215 | # user is not yet registered, try to authenticate with available sources | |
216 | attrs = AuthSource.authenticate(login, password) |
|
216 | attrs = AuthSource.authenticate(login, password) | |
217 | if attrs |
|
217 | if attrs | |
218 | user = new(attrs) |
|
218 | user = new(attrs) | |
219 | user.login = login |
|
219 | user.login = login | |
220 | user.language = Setting.default_language |
|
220 | user.language = Setting.default_language | |
221 | if user.save |
|
221 | if user.save | |
222 | user.reload |
|
222 | user.reload | |
223 | logger.info("User '#{user.login}' created from external auth source: #{user.auth_source.type} - #{user.auth_source.name}") if logger && user.auth_source |
|
223 | logger.info("User '#{user.login}' created from external auth source: #{user.auth_source.type} - #{user.auth_source.name}") if logger && user.auth_source | |
224 | end |
|
224 | end | |
225 | end |
|
225 | end | |
226 | end |
|
226 | end | |
227 | user.update_column(:last_login_on, Time.now) if user && !user.new_record? && user.active? |
|
227 | user.update_column(:last_login_on, Time.now) if user && !user.new_record? && user.active? | |
228 | user |
|
228 | user | |
229 | rescue => text |
|
229 | rescue => text | |
230 | raise text |
|
230 | raise text | |
231 | end |
|
231 | end | |
232 |
|
232 | |||
233 | # Returns the user who matches the given autologin +key+ or nil |
|
233 | # Returns the user who matches the given autologin +key+ or nil | |
234 | def self.try_to_autologin(key) |
|
234 | def self.try_to_autologin(key) | |
235 | user = Token.find_active_user('autologin', key, Setting.autologin.to_i) |
|
235 | user = Token.find_active_user('autologin', key, Setting.autologin.to_i) | |
236 | if user |
|
236 | if user | |
237 | user.update_column(:last_login_on, Time.now) |
|
237 | user.update_column(:last_login_on, Time.now) | |
238 | user |
|
238 | user | |
239 | end |
|
239 | end | |
240 | end |
|
240 | end | |
241 |
|
241 | |||
242 | def self.name_formatter(formatter = nil) |
|
242 | def self.name_formatter(formatter = nil) | |
243 | USER_FORMATS[formatter || Setting.user_format] || USER_FORMATS[:firstname_lastname] |
|
243 | USER_FORMATS[formatter || Setting.user_format] || USER_FORMATS[:firstname_lastname] | |
244 | end |
|
244 | end | |
245 |
|
245 | |||
246 | # Returns an array of fields names than can be used to make an order statement for users |
|
246 | # Returns an array of fields names than can be used to make an order statement for users | |
247 | # according to how user names are displayed |
|
247 | # according to how user names are displayed | |
248 | # Examples: |
|
248 | # Examples: | |
249 | # |
|
249 | # | |
250 | # User.fields_for_order_statement => ['users.login', 'users.id'] |
|
250 | # User.fields_for_order_statement => ['users.login', 'users.id'] | |
251 | # User.fields_for_order_statement('authors') => ['authors.login', 'authors.id'] |
|
251 | # User.fields_for_order_statement('authors') => ['authors.login', 'authors.id'] | |
252 | def self.fields_for_order_statement(table=nil) |
|
252 | def self.fields_for_order_statement(table=nil) | |
253 | table ||= table_name |
|
253 | table ||= table_name | |
254 | name_formatter[:order].map {|field| "#{table}.#{field}"} |
|
254 | name_formatter[:order].map {|field| "#{table}.#{field}"} | |
255 | end |
|
255 | end | |
256 |
|
256 | |||
257 | # Return user's full name for display |
|
257 | # Return user's full name for display | |
258 | def name(formatter = nil) |
|
258 | def name(formatter = nil) | |
259 | f = self.class.name_formatter(formatter) |
|
259 | f = self.class.name_formatter(formatter) | |
260 | if formatter |
|
260 | if formatter | |
261 | eval('"' + f[:string] + '"') |
|
261 | eval('"' + f[:string] + '"') | |
262 | else |
|
262 | else | |
263 | @name ||= eval('"' + f[:string] + '"') |
|
263 | @name ||= eval('"' + f[:string] + '"') | |
264 | end |
|
264 | end | |
265 | end |
|
265 | end | |
266 |
|
266 | |||
267 | def active? |
|
267 | def active? | |
268 | self.status == STATUS_ACTIVE |
|
268 | self.status == STATUS_ACTIVE | |
269 | end |
|
269 | end | |
270 |
|
270 | |||
271 | def registered? |
|
271 | def registered? | |
272 | self.status == STATUS_REGISTERED |
|
272 | self.status == STATUS_REGISTERED | |
273 | end |
|
273 | end | |
274 |
|
274 | |||
275 | def locked? |
|
275 | def locked? | |
276 | self.status == STATUS_LOCKED |
|
276 | self.status == STATUS_LOCKED | |
277 | end |
|
277 | end | |
278 |
|
278 | |||
279 | def activate |
|
279 | def activate | |
280 | self.status = STATUS_ACTIVE |
|
280 | self.status = STATUS_ACTIVE | |
281 | end |
|
281 | end | |
282 |
|
282 | |||
283 | def register |
|
283 | def register | |
284 | self.status = STATUS_REGISTERED |
|
284 | self.status = STATUS_REGISTERED | |
285 | end |
|
285 | end | |
286 |
|
286 | |||
287 | def lock |
|
287 | def lock | |
288 | self.status = STATUS_LOCKED |
|
288 | self.status = STATUS_LOCKED | |
289 | end |
|
289 | end | |
290 |
|
290 | |||
291 | def activate! |
|
291 | def activate! | |
292 | update_attribute(:status, STATUS_ACTIVE) |
|
292 | update_attribute(:status, STATUS_ACTIVE) | |
293 | end |
|
293 | end | |
294 |
|
294 | |||
295 | def register! |
|
295 | def register! | |
296 | update_attribute(:status, STATUS_REGISTERED) |
|
296 | update_attribute(:status, STATUS_REGISTERED) | |
297 | end |
|
297 | end | |
298 |
|
298 | |||
299 | def lock! |
|
299 | def lock! | |
300 | update_attribute(:status, STATUS_LOCKED) |
|
300 | update_attribute(:status, STATUS_LOCKED) | |
301 | end |
|
301 | end | |
302 |
|
302 | |||
303 | # Returns true if +clear_password+ is the correct user's password, otherwise false |
|
303 | # Returns true if +clear_password+ is the correct user's password, otherwise false | |
304 | def check_password?(clear_password) |
|
304 | def check_password?(clear_password) | |
305 | if auth_source_id.present? |
|
305 | if auth_source_id.present? | |
306 | auth_source.authenticate(self.login, clear_password) |
|
306 | auth_source.authenticate(self.login, clear_password) | |
307 | else |
|
307 | else | |
308 | User.hash_password("#{salt}#{User.hash_password clear_password}") == hashed_password |
|
308 | User.hash_password("#{salt}#{User.hash_password clear_password}") == hashed_password | |
309 | end |
|
309 | end | |
310 | end |
|
310 | end | |
311 |
|
311 | |||
312 | # Generates a random salt and computes hashed_password for +clear_password+ |
|
312 | # Generates a random salt and computes hashed_password for +clear_password+ | |
313 | # The hashed password is stored in the following form: SHA1(salt + SHA1(password)) |
|
313 | # The hashed password is stored in the following form: SHA1(salt + SHA1(password)) | |
314 | def salt_password(clear_password) |
|
314 | def salt_password(clear_password) | |
315 | self.salt = User.generate_salt |
|
315 | self.salt = User.generate_salt | |
316 | self.hashed_password = User.hash_password("#{salt}#{User.hash_password clear_password}") |
|
316 | self.hashed_password = User.hash_password("#{salt}#{User.hash_password clear_password}") | |
317 | self.passwd_changed_on = Time.now.change(:usec => 0) |
|
317 | self.passwd_changed_on = Time.now.change(:usec => 0) | |
318 | end |
|
318 | end | |
319 |
|
319 | |||
320 | # Does the backend storage allow this user to change their password? |
|
320 | # Does the backend storage allow this user to change their password? | |
321 | def change_password_allowed? |
|
321 | def change_password_allowed? | |
322 | return true if auth_source.nil? |
|
322 | return true if auth_source.nil? | |
323 | return auth_source.allow_password_changes? |
|
323 | return auth_source.allow_password_changes? | |
324 | end |
|
324 | end | |
325 |
|
325 | |||
|
326 | def password_expired? | |||
|
327 | changed_on = self.passwd_changed_on || Time.at(0) | |||
|
328 | period = Setting.password_max_age.to_i | |||
|
329 | ||||
|
330 | if period.zero? | |||
|
331 | false | |||
|
332 | else | |||
|
333 | changed_on < period.days.ago | |||
|
334 | end | |||
|
335 | end | |||
|
336 | ||||
326 | def must_change_password? |
|
337 | def must_change_password? | |
327 | must_change_passwd? && change_password_allowed? |
|
338 | (must_change_passwd? || password_expired?) && change_password_allowed? | |
328 | end |
|
339 | end | |
329 |
|
340 | |||
330 | def generate_password? |
|
341 | def generate_password? | |
331 | generate_password == '1' || generate_password == true |
|
342 | generate_password == '1' || generate_password == true | |
332 | end |
|
343 | end | |
333 |
|
344 | |||
334 | # Generate and set a random password on given length |
|
345 | # Generate and set a random password on given length | |
335 | def random_password(length=40) |
|
346 | def random_password(length=40) | |
336 | chars = ("a".."z").to_a + ("A".."Z").to_a + ("0".."9").to_a |
|
347 | chars = ("a".."z").to_a + ("A".."Z").to_a + ("0".."9").to_a | |
337 | chars -= %w(0 O 1 l) |
|
348 | chars -= %w(0 O 1 l) | |
338 | password = '' |
|
349 | password = '' | |
339 | length.times {|i| password << chars[SecureRandom.random_number(chars.size)] } |
|
350 | length.times {|i| password << chars[SecureRandom.random_number(chars.size)] } | |
340 | self.password = password |
|
351 | self.password = password | |
341 | self.password_confirmation = password |
|
352 | self.password_confirmation = password | |
342 | self |
|
353 | self | |
343 | end |
|
354 | end | |
344 |
|
355 | |||
345 | def pref |
|
356 | def pref | |
346 | self.preference ||= UserPreference.new(:user => self) |
|
357 | self.preference ||= UserPreference.new(:user => self) | |
347 | end |
|
358 | end | |
348 |
|
359 | |||
349 | def time_zone |
|
360 | def time_zone | |
350 | @time_zone ||= (self.pref.time_zone.blank? ? nil : ActiveSupport::TimeZone[self.pref.time_zone]) |
|
361 | @time_zone ||= (self.pref.time_zone.blank? ? nil : ActiveSupport::TimeZone[self.pref.time_zone]) | |
351 | end |
|
362 | end | |
352 |
|
363 | |||
353 | def force_default_language? |
|
364 | def force_default_language? | |
354 | Setting.force_default_language_for_loggedin? |
|
365 | Setting.force_default_language_for_loggedin? | |
355 | end |
|
366 | end | |
356 |
|
367 | |||
357 | def language |
|
368 | def language | |
358 | if force_default_language? |
|
369 | if force_default_language? | |
359 | Setting.default_language |
|
370 | Setting.default_language | |
360 | else |
|
371 | else | |
361 | super |
|
372 | super | |
362 | end |
|
373 | end | |
363 | end |
|
374 | end | |
364 |
|
375 | |||
365 | def wants_comments_in_reverse_order? |
|
376 | def wants_comments_in_reverse_order? | |
366 | self.pref[:comments_sorting] == 'desc' |
|
377 | self.pref[:comments_sorting] == 'desc' | |
367 | end |
|
378 | end | |
368 |
|
379 | |||
369 | # Return user's RSS key (a 40 chars long string), used to access feeds |
|
380 | # Return user's RSS key (a 40 chars long string), used to access feeds | |
370 | def rss_key |
|
381 | def rss_key | |
371 | if rss_token.nil? |
|
382 | if rss_token.nil? | |
372 | create_rss_token(:action => 'feeds') |
|
383 | create_rss_token(:action => 'feeds') | |
373 | end |
|
384 | end | |
374 | rss_token.value |
|
385 | rss_token.value | |
375 | end |
|
386 | end | |
376 |
|
387 | |||
377 | # Return user's API key (a 40 chars long string), used to access the API |
|
388 | # Return user's API key (a 40 chars long string), used to access the API | |
378 | def api_key |
|
389 | def api_key | |
379 | if api_token.nil? |
|
390 | if api_token.nil? | |
380 | create_api_token(:action => 'api') |
|
391 | create_api_token(:action => 'api') | |
381 | end |
|
392 | end | |
382 | api_token.value |
|
393 | api_token.value | |
383 | end |
|
394 | end | |
384 |
|
395 | |||
385 | # Return an array of project ids for which the user has explicitly turned mail notifications on |
|
396 | # Return an array of project ids for which the user has explicitly turned mail notifications on | |
386 | def notified_projects_ids |
|
397 | def notified_projects_ids | |
387 | @notified_projects_ids ||= memberships.select {|m| m.mail_notification?}.collect(&:project_id) |
|
398 | @notified_projects_ids ||= memberships.select {|m| m.mail_notification?}.collect(&:project_id) | |
388 | end |
|
399 | end | |
389 |
|
400 | |||
390 | def notified_project_ids=(ids) |
|
401 | def notified_project_ids=(ids) | |
391 | @notified_projects_ids_changed = true |
|
402 | @notified_projects_ids_changed = true | |
392 | @notified_projects_ids = ids.map(&:to_i).uniq.select {|n| n > 0} |
|
403 | @notified_projects_ids = ids.map(&:to_i).uniq.select {|n| n > 0} | |
393 | end |
|
404 | end | |
394 |
|
405 | |||
395 | # Updates per project notifications (after_save callback) |
|
406 | # Updates per project notifications (after_save callback) | |
396 | def update_notified_project_ids |
|
407 | def update_notified_project_ids | |
397 | if @notified_projects_ids_changed |
|
408 | if @notified_projects_ids_changed | |
398 | ids = (mail_notification == 'selected' ? Array.wrap(notified_projects_ids).reject(&:blank?) : []) |
|
409 | ids = (mail_notification == 'selected' ? Array.wrap(notified_projects_ids).reject(&:blank?) : []) | |
399 | members.update_all(:mail_notification => false) |
|
410 | members.update_all(:mail_notification => false) | |
400 | members.where(:project_id => ids).update_all(:mail_notification => true) if ids.any? |
|
411 | members.where(:project_id => ids).update_all(:mail_notification => true) if ids.any? | |
401 | end |
|
412 | end | |
402 | end |
|
413 | end | |
403 | private :update_notified_project_ids |
|
414 | private :update_notified_project_ids | |
404 |
|
415 | |||
405 | def valid_notification_options |
|
416 | def valid_notification_options | |
406 | self.class.valid_notification_options(self) |
|
417 | self.class.valid_notification_options(self) | |
407 | end |
|
418 | end | |
408 |
|
419 | |||
409 | # Only users that belong to more than 1 project can select projects for which they are notified |
|
420 | # Only users that belong to more than 1 project can select projects for which they are notified | |
410 | def self.valid_notification_options(user=nil) |
|
421 | def self.valid_notification_options(user=nil) | |
411 | # Note that @user.membership.size would fail since AR ignores |
|
422 | # Note that @user.membership.size would fail since AR ignores | |
412 | # :include association option when doing a count |
|
423 | # :include association option when doing a count | |
413 | if user.nil? || user.memberships.length < 1 |
|
424 | if user.nil? || user.memberships.length < 1 | |
414 | MAIL_NOTIFICATION_OPTIONS.reject {|option| option.first == 'selected'} |
|
425 | MAIL_NOTIFICATION_OPTIONS.reject {|option| option.first == 'selected'} | |
415 | else |
|
426 | else | |
416 | MAIL_NOTIFICATION_OPTIONS |
|
427 | MAIL_NOTIFICATION_OPTIONS | |
417 | end |
|
428 | end | |
418 | end |
|
429 | end | |
419 |
|
430 | |||
420 | # Find a user account by matching the exact login and then a case-insensitive |
|
431 | # Find a user account by matching the exact login and then a case-insensitive | |
421 | # version. Exact matches will be given priority. |
|
432 | # version. Exact matches will be given priority. | |
422 | def self.find_by_login(login) |
|
433 | def self.find_by_login(login) | |
423 | login = Redmine::CodesetUtil.replace_invalid_utf8(login.to_s) |
|
434 | login = Redmine::CodesetUtil.replace_invalid_utf8(login.to_s) | |
424 | if login.present? |
|
435 | if login.present? | |
425 | # First look for an exact match |
|
436 | # First look for an exact match | |
426 | user = where(:login => login).detect {|u| u.login == login} |
|
437 | user = where(:login => login).detect {|u| u.login == login} | |
427 | unless user |
|
438 | unless user | |
428 | # Fail over to case-insensitive if none was found |
|
439 | # Fail over to case-insensitive if none was found | |
429 | user = where("LOWER(login) = ?", login.downcase).first |
|
440 | user = where("LOWER(login) = ?", login.downcase).first | |
430 | end |
|
441 | end | |
431 | user |
|
442 | user | |
432 | end |
|
443 | end | |
433 | end |
|
444 | end | |
434 |
|
445 | |||
435 | def self.find_by_rss_key(key) |
|
446 | def self.find_by_rss_key(key) | |
436 | Token.find_active_user('feeds', key) |
|
447 | Token.find_active_user('feeds', key) | |
437 | end |
|
448 | end | |
438 |
|
449 | |||
439 | def self.find_by_api_key(key) |
|
450 | def self.find_by_api_key(key) | |
440 | Token.find_active_user('api', key) |
|
451 | Token.find_active_user('api', key) | |
441 | end |
|
452 | end | |
442 |
|
453 | |||
443 | # Makes find_by_mail case-insensitive |
|
454 | # Makes find_by_mail case-insensitive | |
444 | def self.find_by_mail(mail) |
|
455 | def self.find_by_mail(mail) | |
445 | having_mail(mail).first |
|
456 | having_mail(mail).first | |
446 | end |
|
457 | end | |
447 |
|
458 | |||
448 | # Returns true if the default admin account can no longer be used |
|
459 | # Returns true if the default admin account can no longer be used | |
449 | def self.default_admin_account_changed? |
|
460 | def self.default_admin_account_changed? | |
450 | !User.active.find_by_login("admin").try(:check_password?, "admin") |
|
461 | !User.active.find_by_login("admin").try(:check_password?, "admin") | |
451 | end |
|
462 | end | |
452 |
|
463 | |||
453 | def to_s |
|
464 | def to_s | |
454 | name |
|
465 | name | |
455 | end |
|
466 | end | |
456 |
|
467 | |||
457 | CSS_CLASS_BY_STATUS = { |
|
468 | CSS_CLASS_BY_STATUS = { | |
458 | STATUS_ANONYMOUS => 'anon', |
|
469 | STATUS_ANONYMOUS => 'anon', | |
459 | STATUS_ACTIVE => 'active', |
|
470 | STATUS_ACTIVE => 'active', | |
460 | STATUS_REGISTERED => 'registered', |
|
471 | STATUS_REGISTERED => 'registered', | |
461 | STATUS_LOCKED => 'locked' |
|
472 | STATUS_LOCKED => 'locked' | |
462 | } |
|
473 | } | |
463 |
|
474 | |||
464 | def css_classes |
|
475 | def css_classes | |
465 | "user #{CSS_CLASS_BY_STATUS[status]}" |
|
476 | "user #{CSS_CLASS_BY_STATUS[status]}" | |
466 | end |
|
477 | end | |
467 |
|
478 | |||
468 | # Returns the current day according to user's time zone |
|
479 | # Returns the current day according to user's time zone | |
469 | def today |
|
480 | def today | |
470 | if time_zone.nil? |
|
481 | if time_zone.nil? | |
471 | Date.today |
|
482 | Date.today | |
472 | else |
|
483 | else | |
473 | Time.now.in_time_zone(time_zone).to_date |
|
484 | Time.now.in_time_zone(time_zone).to_date | |
474 | end |
|
485 | end | |
475 | end |
|
486 | end | |
476 |
|
487 | |||
477 | # Returns the day of +time+ according to user's time zone |
|
488 | # Returns the day of +time+ according to user's time zone | |
478 | def time_to_date(time) |
|
489 | def time_to_date(time) | |
479 | if time_zone.nil? |
|
490 | if time_zone.nil? | |
480 | time.to_date |
|
491 | time.to_date | |
481 | else |
|
492 | else | |
482 | time.in_time_zone(time_zone).to_date |
|
493 | time.in_time_zone(time_zone).to_date | |
483 | end |
|
494 | end | |
484 | end |
|
495 | end | |
485 |
|
496 | |||
486 | def logged? |
|
497 | def logged? | |
487 | true |
|
498 | true | |
488 | end |
|
499 | end | |
489 |
|
500 | |||
490 | def anonymous? |
|
501 | def anonymous? | |
491 | !logged? |
|
502 | !logged? | |
492 | end |
|
503 | end | |
493 |
|
504 | |||
494 | # Returns user's membership for the given project |
|
505 | # Returns user's membership for the given project | |
495 | # or nil if the user is not a member of project |
|
506 | # or nil if the user is not a member of project | |
496 | def membership(project) |
|
507 | def membership(project) | |
497 | project_id = project.is_a?(Project) ? project.id : project |
|
508 | project_id = project.is_a?(Project) ? project.id : project | |
498 |
|
509 | |||
499 | @membership_by_project_id ||= Hash.new {|h, project_id| |
|
510 | @membership_by_project_id ||= Hash.new {|h, project_id| | |
500 | h[project_id] = memberships.where(:project_id => project_id).first |
|
511 | h[project_id] = memberships.where(:project_id => project_id).first | |
501 | } |
|
512 | } | |
502 | @membership_by_project_id[project_id] |
|
513 | @membership_by_project_id[project_id] | |
503 | end |
|
514 | end | |
504 |
|
515 | |||
505 | # Returns the user's bult-in role |
|
516 | # Returns the user's bult-in role | |
506 | def builtin_role |
|
517 | def builtin_role | |
507 | @builtin_role ||= Role.non_member |
|
518 | @builtin_role ||= Role.non_member | |
508 | end |
|
519 | end | |
509 |
|
520 | |||
510 | # Return user's roles for project |
|
521 | # Return user's roles for project | |
511 | def roles_for_project(project) |
|
522 | def roles_for_project(project) | |
512 | # No role on archived projects |
|
523 | # No role on archived projects | |
513 | return [] if project.nil? || project.archived? |
|
524 | return [] if project.nil? || project.archived? | |
514 | if membership = membership(project) |
|
525 | if membership = membership(project) | |
515 | membership.roles.dup |
|
526 | membership.roles.dup | |
516 | elsif project.is_public? |
|
527 | elsif project.is_public? | |
517 | project.override_roles(builtin_role) |
|
528 | project.override_roles(builtin_role) | |
518 | else |
|
529 | else | |
519 | [] |
|
530 | [] | |
520 | end |
|
531 | end | |
521 | end |
|
532 | end | |
522 |
|
533 | |||
523 | # Returns a hash of user's projects grouped by roles |
|
534 | # Returns a hash of user's projects grouped by roles | |
524 | def projects_by_role |
|
535 | def projects_by_role | |
525 | return @projects_by_role if @projects_by_role |
|
536 | return @projects_by_role if @projects_by_role | |
526 |
|
537 | |||
527 | hash = Hash.new([]) |
|
538 | hash = Hash.new([]) | |
528 |
|
539 | |||
529 | group_class = anonymous? ? GroupAnonymous : GroupNonMember |
|
540 | group_class = anonymous? ? GroupAnonymous : GroupNonMember | |
530 | members = Member.joins(:project, :principal). |
|
541 | members = Member.joins(:project, :principal). | |
531 | where("#{Project.table_name}.status <> 9"). |
|
542 | where("#{Project.table_name}.status <> 9"). | |
532 | where("#{Member.table_name}.user_id = ? OR (#{Project.table_name}.is_public = ? AND #{Principal.table_name}.type = ?)", self.id, true, group_class.name). |
|
543 | where("#{Member.table_name}.user_id = ? OR (#{Project.table_name}.is_public = ? AND #{Principal.table_name}.type = ?)", self.id, true, group_class.name). | |
533 | preload(:project, :roles). |
|
544 | preload(:project, :roles). | |
534 | to_a |
|
545 | to_a | |
535 |
|
546 | |||
536 | members.reject! {|member| member.user_id != id && project_ids.include?(member.project_id)} |
|
547 | members.reject! {|member| member.user_id != id && project_ids.include?(member.project_id)} | |
537 | members.each do |member| |
|
548 | members.each do |member| | |
538 | if member.project |
|
549 | if member.project | |
539 | member.roles.each do |role| |
|
550 | member.roles.each do |role| | |
540 | hash[role] = [] unless hash.key?(role) |
|
551 | hash[role] = [] unless hash.key?(role) | |
541 | hash[role] << member.project |
|
552 | hash[role] << member.project | |
542 | end |
|
553 | end | |
543 | end |
|
554 | end | |
544 | end |
|
555 | end | |
545 |
|
556 | |||
546 | hash.each do |role, projects| |
|
557 | hash.each do |role, projects| | |
547 | projects.uniq! |
|
558 | projects.uniq! | |
548 | end |
|
559 | end | |
549 |
|
560 | |||
550 | @projects_by_role = hash |
|
561 | @projects_by_role = hash | |
551 | end |
|
562 | end | |
552 |
|
563 | |||
553 | # Returns the ids of visible projects |
|
564 | # Returns the ids of visible projects | |
554 | def visible_project_ids |
|
565 | def visible_project_ids | |
555 | @visible_project_ids ||= Project.visible(self).pluck(:id) |
|
566 | @visible_project_ids ||= Project.visible(self).pluck(:id) | |
556 | end |
|
567 | end | |
557 |
|
568 | |||
558 | # Returns true if user is arg or belongs to arg |
|
569 | # Returns true if user is arg or belongs to arg | |
559 | def is_or_belongs_to?(arg) |
|
570 | def is_or_belongs_to?(arg) | |
560 | if arg.is_a?(User) |
|
571 | if arg.is_a?(User) | |
561 | self == arg |
|
572 | self == arg | |
562 | elsif arg.is_a?(Group) |
|
573 | elsif arg.is_a?(Group) | |
563 | arg.users.include?(self) |
|
574 | arg.users.include?(self) | |
564 | else |
|
575 | else | |
565 | false |
|
576 | false | |
566 | end |
|
577 | end | |
567 | end |
|
578 | end | |
568 |
|
579 | |||
569 | # Return true if the user is allowed to do the specified action on a specific context |
|
580 | # Return true if the user is allowed to do the specified action on a specific context | |
570 | # Action can be: |
|
581 | # Action can be: | |
571 | # * a parameter-like Hash (eg. :controller => 'projects', :action => 'edit') |
|
582 | # * a parameter-like Hash (eg. :controller => 'projects', :action => 'edit') | |
572 | # * a permission Symbol (eg. :edit_project) |
|
583 | # * a permission Symbol (eg. :edit_project) | |
573 | # Context can be: |
|
584 | # Context can be: | |
574 | # * a project : returns true if user is allowed to do the specified action on this project |
|
585 | # * a project : returns true if user is allowed to do the specified action on this project | |
575 | # * an array of projects : returns true if user is allowed on every project |
|
586 | # * an array of projects : returns true if user is allowed on every project | |
576 | # * nil with options[:global] set : check if user has at least one role allowed for this action, |
|
587 | # * nil with options[:global] set : check if user has at least one role allowed for this action, | |
577 | # or falls back to Non Member / Anonymous permissions depending if the user is logged |
|
588 | # or falls back to Non Member / Anonymous permissions depending if the user is logged | |
578 | def allowed_to?(action, context, options={}, &block) |
|
589 | def allowed_to?(action, context, options={}, &block) | |
579 | if context && context.is_a?(Project) |
|
590 | if context && context.is_a?(Project) | |
580 | return false unless context.allows_to?(action) |
|
591 | return false unless context.allows_to?(action) | |
581 | # Admin users are authorized for anything else |
|
592 | # Admin users are authorized for anything else | |
582 | return true if admin? |
|
593 | return true if admin? | |
583 |
|
594 | |||
584 | roles = roles_for_project(context) |
|
595 | roles = roles_for_project(context) | |
585 | return false unless roles |
|
596 | return false unless roles | |
586 | roles.any? {|role| |
|
597 | roles.any? {|role| | |
587 | (context.is_public? || role.member?) && |
|
598 | (context.is_public? || role.member?) && | |
588 | role.allowed_to?(action) && |
|
599 | role.allowed_to?(action) && | |
589 | (block_given? ? yield(role, self) : true) |
|
600 | (block_given? ? yield(role, self) : true) | |
590 | } |
|
601 | } | |
591 | elsif context && context.is_a?(Array) |
|
602 | elsif context && context.is_a?(Array) | |
592 | if context.empty? |
|
603 | if context.empty? | |
593 | false |
|
604 | false | |
594 | else |
|
605 | else | |
595 | # Authorize if user is authorized on every element of the array |
|
606 | # Authorize if user is authorized on every element of the array | |
596 | context.map {|project| allowed_to?(action, project, options, &block)}.reduce(:&) |
|
607 | context.map {|project| allowed_to?(action, project, options, &block)}.reduce(:&) | |
597 | end |
|
608 | end | |
598 | elsif context |
|
609 | elsif context | |
599 | raise ArgumentError.new("#allowed_to? context argument must be a Project, an Array of projects or nil") |
|
610 | raise ArgumentError.new("#allowed_to? context argument must be a Project, an Array of projects or nil") | |
600 | elsif options[:global] |
|
611 | elsif options[:global] | |
601 | # Admin users are always authorized |
|
612 | # Admin users are always authorized | |
602 | return true if admin? |
|
613 | return true if admin? | |
603 |
|
614 | |||
604 | # authorize if user has at least one role that has this permission |
|
615 | # authorize if user has at least one role that has this permission | |
605 | roles = memberships.collect {|m| m.roles}.flatten.uniq |
|
616 | roles = memberships.collect {|m| m.roles}.flatten.uniq | |
606 | roles << (self.logged? ? Role.non_member : Role.anonymous) |
|
617 | roles << (self.logged? ? Role.non_member : Role.anonymous) | |
607 | roles.any? {|role| |
|
618 | roles.any? {|role| | |
608 | role.allowed_to?(action) && |
|
619 | role.allowed_to?(action) && | |
609 | (block_given? ? yield(role, self) : true) |
|
620 | (block_given? ? yield(role, self) : true) | |
610 | } |
|
621 | } | |
611 | else |
|
622 | else | |
612 | false |
|
623 | false | |
613 | end |
|
624 | end | |
614 | end |
|
625 | end | |
615 |
|
626 | |||
616 | # Is the user allowed to do the specified action on any project? |
|
627 | # Is the user allowed to do the specified action on any project? | |
617 | # See allowed_to? for the actions and valid options. |
|
628 | # See allowed_to? for the actions and valid options. | |
618 | # |
|
629 | # | |
619 | # NB: this method is not used anywhere in the core codebase as of |
|
630 | # NB: this method is not used anywhere in the core codebase as of | |
620 | # 2.5.2, but it's used by many plugins so if we ever want to remove |
|
631 | # 2.5.2, but it's used by many plugins so if we ever want to remove | |
621 | # it it has to be carefully deprecated for a version or two. |
|
632 | # it it has to be carefully deprecated for a version or two. | |
622 | def allowed_to_globally?(action, options={}, &block) |
|
633 | def allowed_to_globally?(action, options={}, &block) | |
623 | allowed_to?(action, nil, options.reverse_merge(:global => true), &block) |
|
634 | allowed_to?(action, nil, options.reverse_merge(:global => true), &block) | |
624 | end |
|
635 | end | |
625 |
|
636 | |||
626 | # Returns true if the user is allowed to delete the user's own account |
|
637 | # Returns true if the user is allowed to delete the user's own account | |
627 | def own_account_deletable? |
|
638 | def own_account_deletable? | |
628 | Setting.unsubscribe? && |
|
639 | Setting.unsubscribe? && | |
629 | (!admin? || User.active.where("admin = ? AND id <> ?", true, id).exists?) |
|
640 | (!admin? || User.active.where("admin = ? AND id <> ?", true, id).exists?) | |
630 | end |
|
641 | end | |
631 |
|
642 | |||
632 | safe_attributes 'login', |
|
643 | safe_attributes 'login', | |
633 | 'firstname', |
|
644 | 'firstname', | |
634 | 'lastname', |
|
645 | 'lastname', | |
635 | 'mail', |
|
646 | 'mail', | |
636 | 'mail_notification', |
|
647 | 'mail_notification', | |
637 | 'notified_project_ids', |
|
648 | 'notified_project_ids', | |
638 | 'language', |
|
649 | 'language', | |
639 | 'custom_field_values', |
|
650 | 'custom_field_values', | |
640 | 'custom_fields', |
|
651 | 'custom_fields', | |
641 | 'identity_url' |
|
652 | 'identity_url' | |
642 |
|
653 | |||
643 | safe_attributes 'status', |
|
654 | safe_attributes 'status', | |
644 | 'auth_source_id', |
|
655 | 'auth_source_id', | |
645 | 'generate_password', |
|
656 | 'generate_password', | |
646 | 'must_change_passwd', |
|
657 | 'must_change_passwd', | |
647 | :if => lambda {|user, current_user| current_user.admin?} |
|
658 | :if => lambda {|user, current_user| current_user.admin?} | |
648 |
|
659 | |||
649 | safe_attributes 'group_ids', |
|
660 | safe_attributes 'group_ids', | |
650 | :if => lambda {|user, current_user| current_user.admin? && !user.new_record?} |
|
661 | :if => lambda {|user, current_user| current_user.admin? && !user.new_record?} | |
651 |
|
662 | |||
652 | # Utility method to help check if a user should be notified about an |
|
663 | # Utility method to help check if a user should be notified about an | |
653 | # event. |
|
664 | # event. | |
654 | # |
|
665 | # | |
655 | # TODO: only supports Issue events currently |
|
666 | # TODO: only supports Issue events currently | |
656 | def notify_about?(object) |
|
667 | def notify_about?(object) | |
657 | if mail_notification == 'all' |
|
668 | if mail_notification == 'all' | |
658 | true |
|
669 | true | |
659 | elsif mail_notification.blank? || mail_notification == 'none' |
|
670 | elsif mail_notification.blank? || mail_notification == 'none' | |
660 | false |
|
671 | false | |
661 | else |
|
672 | else | |
662 | case object |
|
673 | case object | |
663 | when Issue |
|
674 | when Issue | |
664 | case mail_notification |
|
675 | case mail_notification | |
665 | when 'selected', 'only_my_events' |
|
676 | when 'selected', 'only_my_events' | |
666 | # user receives notifications for created/assigned issues on unselected projects |
|
677 | # user receives notifications for created/assigned issues on unselected projects | |
667 | object.author == self || is_or_belongs_to?(object.assigned_to) || is_or_belongs_to?(object.assigned_to_was) |
|
678 | object.author == self || is_or_belongs_to?(object.assigned_to) || is_or_belongs_to?(object.assigned_to_was) | |
668 | when 'only_assigned' |
|
679 | when 'only_assigned' | |
669 | is_or_belongs_to?(object.assigned_to) || is_or_belongs_to?(object.assigned_to_was) |
|
680 | is_or_belongs_to?(object.assigned_to) || is_or_belongs_to?(object.assigned_to_was) | |
670 | when 'only_owner' |
|
681 | when 'only_owner' | |
671 | object.author == self |
|
682 | object.author == self | |
672 | end |
|
683 | end | |
673 | when News |
|
684 | when News | |
674 | # always send to project members except when mail_notification is set to 'none' |
|
685 | # always send to project members except when mail_notification is set to 'none' | |
675 | true |
|
686 | true | |
676 | end |
|
687 | end | |
677 | end |
|
688 | end | |
678 | end |
|
689 | end | |
679 |
|
690 | |||
680 | def self.current=(user) |
|
691 | def self.current=(user) | |
681 | RequestStore.store[:current_user] = user |
|
692 | RequestStore.store[:current_user] = user | |
682 | end |
|
693 | end | |
683 |
|
694 | |||
684 | def self.current |
|
695 | def self.current | |
685 | RequestStore.store[:current_user] ||= User.anonymous |
|
696 | RequestStore.store[:current_user] ||= User.anonymous | |
686 | end |
|
697 | end | |
687 |
|
698 | |||
688 | # Returns the anonymous user. If the anonymous user does not exist, it is created. There can be only |
|
699 | # Returns the anonymous user. If the anonymous user does not exist, it is created. There can be only | |
689 | # one anonymous user per database. |
|
700 | # one anonymous user per database. | |
690 | def self.anonymous |
|
701 | def self.anonymous | |
691 | anonymous_user = AnonymousUser.first |
|
702 | anonymous_user = AnonymousUser.first | |
692 | if anonymous_user.nil? |
|
703 | if anonymous_user.nil? | |
693 | anonymous_user = AnonymousUser.create(:lastname => 'Anonymous', :firstname => '', :login => '', :status => 0) |
|
704 | anonymous_user = AnonymousUser.create(:lastname => 'Anonymous', :firstname => '', :login => '', :status => 0) | |
694 | raise 'Unable to create the anonymous user.' if anonymous_user.new_record? |
|
705 | raise 'Unable to create the anonymous user.' if anonymous_user.new_record? | |
695 | end |
|
706 | end | |
696 | anonymous_user |
|
707 | anonymous_user | |
697 | end |
|
708 | end | |
698 |
|
709 | |||
699 | # Salts all existing unsalted passwords |
|
710 | # Salts all existing unsalted passwords | |
700 | # It changes password storage scheme from SHA1(password) to SHA1(salt + SHA1(password)) |
|
711 | # It changes password storage scheme from SHA1(password) to SHA1(salt + SHA1(password)) | |
701 | # This method is used in the SaltPasswords migration and is to be kept as is |
|
712 | # This method is used in the SaltPasswords migration and is to be kept as is | |
702 | def self.salt_unsalted_passwords! |
|
713 | def self.salt_unsalted_passwords! | |
703 | transaction do |
|
714 | transaction do | |
704 | User.where("salt IS NULL OR salt = ''").find_each do |user| |
|
715 | User.where("salt IS NULL OR salt = ''").find_each do |user| | |
705 | next if user.hashed_password.blank? |
|
716 | next if user.hashed_password.blank? | |
706 | salt = User.generate_salt |
|
717 | salt = User.generate_salt | |
707 | hashed_password = User.hash_password("#{salt}#{user.hashed_password}") |
|
718 | hashed_password = User.hash_password("#{salt}#{user.hashed_password}") | |
708 | User.where(:id => user.id).update_all(:salt => salt, :hashed_password => hashed_password) |
|
719 | User.where(:id => user.id).update_all(:salt => salt, :hashed_password => hashed_password) | |
709 | end |
|
720 | end | |
710 | end |
|
721 | end | |
711 | end |
|
722 | end | |
712 |
|
723 | |||
713 | protected |
|
724 | protected | |
714 |
|
725 | |||
715 | def validate_password_length |
|
726 | def validate_password_length | |
716 | return if password.blank? && generate_password? |
|
727 | return if password.blank? && generate_password? | |
717 | # Password length validation based on setting |
|
728 | # Password length validation based on setting | |
718 | if !password.nil? && password.size < Setting.password_min_length.to_i |
|
729 | if !password.nil? && password.size < Setting.password_min_length.to_i | |
719 | errors.add(:password, :too_short, :count => Setting.password_min_length.to_i) |
|
730 | errors.add(:password, :too_short, :count => Setting.password_min_length.to_i) | |
720 | end |
|
731 | end | |
721 | end |
|
732 | end | |
722 |
|
733 | |||
723 | def instantiate_email_address |
|
734 | def instantiate_email_address | |
724 | email_address || build_email_address |
|
735 | email_address || build_email_address | |
725 | end |
|
736 | end | |
726 |
|
737 | |||
727 | private |
|
738 | private | |
728 |
|
739 | |||
729 | def generate_password_if_needed |
|
740 | def generate_password_if_needed | |
730 | if generate_password? && auth_source.nil? |
|
741 | if generate_password? && auth_source.nil? | |
731 | length = [Setting.password_min_length.to_i + 2, 10].max |
|
742 | length = [Setting.password_min_length.to_i + 2, 10].max | |
732 | random_password(length) |
|
743 | random_password(length) | |
733 | end |
|
744 | end | |
734 | end |
|
745 | end | |
735 |
|
746 | |||
736 | # Delete all outstanding password reset tokens on password change. |
|
747 | # Delete all outstanding password reset tokens on password change. | |
737 | # Delete the autologin tokens on password change to prohibit session leakage. |
|
748 | # Delete the autologin tokens on password change to prohibit session leakage. | |
738 | # This helps to keep the account secure in case the associated email account |
|
749 | # This helps to keep the account secure in case the associated email account | |
739 | # was compromised. |
|
750 | # was compromised. | |
740 | def destroy_tokens |
|
751 | def destroy_tokens | |
741 | if hashed_password_changed? |
|
752 | if hashed_password_changed? | |
742 | tokens = ['recovery', 'autologin'] |
|
753 | tokens = ['recovery', 'autologin'] | |
743 | Token.where(:user_id => id, :action => tokens).delete_all |
|
754 | Token.where(:user_id => id, :action => tokens).delete_all | |
744 | end |
|
755 | end | |
745 | end |
|
756 | end | |
746 |
|
757 | |||
747 | # Removes references that are not handled by associations |
|
758 | # Removes references that are not handled by associations | |
748 | # Things that are not deleted are reassociated with the anonymous user |
|
759 | # Things that are not deleted are reassociated with the anonymous user | |
749 | def remove_references_before_destroy |
|
760 | def remove_references_before_destroy | |
750 | return if self.id.nil? |
|
761 | return if self.id.nil? | |
751 |
|
762 | |||
752 | substitute = User.anonymous |
|
763 | substitute = User.anonymous | |
753 | Attachment.where(['author_id = ?', id]).update_all(['author_id = ?', substitute.id]) |
|
764 | Attachment.where(['author_id = ?', id]).update_all(['author_id = ?', substitute.id]) | |
754 | Comment.where(['author_id = ?', id]).update_all(['author_id = ?', substitute.id]) |
|
765 | Comment.where(['author_id = ?', id]).update_all(['author_id = ?', substitute.id]) | |
755 | Issue.where(['author_id = ?', id]).update_all(['author_id = ?', substitute.id]) |
|
766 | Issue.where(['author_id = ?', id]).update_all(['author_id = ?', substitute.id]) | |
756 | Issue.where(['assigned_to_id = ?', id]).update_all('assigned_to_id = NULL') |
|
767 | Issue.where(['assigned_to_id = ?', id]).update_all('assigned_to_id = NULL') | |
757 | Journal.where(['user_id = ?', id]).update_all(['user_id = ?', substitute.id]) |
|
768 | Journal.where(['user_id = ?', id]).update_all(['user_id = ?', substitute.id]) | |
758 | JournalDetail. |
|
769 | JournalDetail. | |
759 | where(["property = 'attr' AND prop_key = 'assigned_to_id' AND old_value = ?", id.to_s]). |
|
770 | where(["property = 'attr' AND prop_key = 'assigned_to_id' AND old_value = ?", id.to_s]). | |
760 | update_all(['old_value = ?', substitute.id.to_s]) |
|
771 | update_all(['old_value = ?', substitute.id.to_s]) | |
761 | JournalDetail. |
|
772 | JournalDetail. | |
762 | where(["property = 'attr' AND prop_key = 'assigned_to_id' AND value = ?", id.to_s]). |
|
773 | where(["property = 'attr' AND prop_key = 'assigned_to_id' AND value = ?", id.to_s]). | |
763 | update_all(['value = ?', substitute.id.to_s]) |
|
774 | update_all(['value = ?', substitute.id.to_s]) | |
764 | Message.where(['author_id = ?', id]).update_all(['author_id = ?', substitute.id]) |
|
775 | Message.where(['author_id = ?', id]).update_all(['author_id = ?', substitute.id]) | |
765 | News.where(['author_id = ?', id]).update_all(['author_id = ?', substitute.id]) |
|
776 | News.where(['author_id = ?', id]).update_all(['author_id = ?', substitute.id]) | |
766 | # Remove private queries and keep public ones |
|
777 | # Remove private queries and keep public ones | |
767 | ::Query.delete_all ['user_id = ? AND visibility = ?', id, ::Query::VISIBILITY_PRIVATE] |
|
778 | ::Query.delete_all ['user_id = ? AND visibility = ?', id, ::Query::VISIBILITY_PRIVATE] | |
768 | ::Query.where(['user_id = ?', id]).update_all(['user_id = ?', substitute.id]) |
|
779 | ::Query.where(['user_id = ?', id]).update_all(['user_id = ?', substitute.id]) | |
769 | TimeEntry.where(['user_id = ?', id]).update_all(['user_id = ?', substitute.id]) |
|
780 | TimeEntry.where(['user_id = ?', id]).update_all(['user_id = ?', substitute.id]) | |
770 | Token.delete_all ['user_id = ?', id] |
|
781 | Token.delete_all ['user_id = ?', id] | |
771 | Watcher.delete_all ['user_id = ?', id] |
|
782 | Watcher.delete_all ['user_id = ?', id] | |
772 | WikiContent.where(['author_id = ?', id]).update_all(['author_id = ?', substitute.id]) |
|
783 | WikiContent.where(['author_id = ?', id]).update_all(['author_id = ?', substitute.id]) | |
773 | WikiContent::Version.where(['author_id = ?', id]).update_all(['author_id = ?', substitute.id]) |
|
784 | WikiContent::Version.where(['author_id = ?', id]).update_all(['author_id = ?', substitute.id]) | |
774 | end |
|
785 | end | |
775 |
|
786 | |||
776 | # Return password digest |
|
787 | # Return password digest | |
777 | def self.hash_password(clear_password) |
|
788 | def self.hash_password(clear_password) | |
778 | Digest::SHA1.hexdigest(clear_password || "") |
|
789 | Digest::SHA1.hexdigest(clear_password || "") | |
779 | end |
|
790 | end | |
780 |
|
791 | |||
781 | # Returns a 128bits random salt as a hex string (32 chars long) |
|
792 | # Returns a 128bits random salt as a hex string (32 chars long) | |
782 | def self.generate_salt |
|
793 | def self.generate_salt | |
783 | Redmine::Utils.random_hex(16) |
|
794 | Redmine::Utils.random_hex(16) | |
784 | end |
|
795 | end | |
785 |
|
796 | |||
786 | end |
|
797 | end | |
787 |
|
798 | |||
788 | class AnonymousUser < User |
|
799 | class AnonymousUser < User | |
789 | validate :validate_anonymous_uniqueness, :on => :create |
|
800 | validate :validate_anonymous_uniqueness, :on => :create | |
790 |
|
801 | |||
791 | def validate_anonymous_uniqueness |
|
802 | def validate_anonymous_uniqueness | |
792 | # There should be only one AnonymousUser in the database |
|
803 | # There should be only one AnonymousUser in the database | |
793 | errors.add :base, 'An anonymous user already exists.' if AnonymousUser.exists? |
|
804 | errors.add :base, 'An anonymous user already exists.' if AnonymousUser.exists? | |
794 | end |
|
805 | end | |
795 |
|
806 | |||
796 | def available_custom_fields |
|
807 | def available_custom_fields | |
797 | [] |
|
808 | [] | |
798 | end |
|
809 | end | |
799 |
|
810 | |||
800 | # Overrides a few properties |
|
811 | # Overrides a few properties | |
801 | def logged?; false end |
|
812 | def logged?; false end | |
802 | def admin; false end |
|
813 | def admin; false end | |
803 | def name(*args); I18n.t(:label_user_anonymous) end |
|
814 | def name(*args); I18n.t(:label_user_anonymous) end | |
804 | def mail=(*args); nil end |
|
815 | def mail=(*args); nil end | |
805 | def mail; nil end |
|
816 | def mail; nil end | |
806 | def time_zone; nil end |
|
817 | def time_zone; nil end | |
807 | def rss_key; nil end |
|
818 | def rss_key; nil end | |
808 |
|
819 | |||
809 | def pref |
|
820 | def pref | |
810 | UserPreference.new(:user => self) |
|
821 | UserPreference.new(:user => self) | |
811 | end |
|
822 | end | |
812 |
|
823 | |||
813 | # Returns the user's bult-in role |
|
824 | # Returns the user's bult-in role | |
814 | def builtin_role |
|
825 | def builtin_role | |
815 | @builtin_role ||= Role.anonymous |
|
826 | @builtin_role ||= Role.anonymous | |
816 | end |
|
827 | end | |
817 |
|
828 | |||
818 | def membership(*args) |
|
829 | def membership(*args) | |
819 | nil |
|
830 | nil | |
820 | end |
|
831 | end | |
821 |
|
832 | |||
822 | def member_of?(*args) |
|
833 | def member_of?(*args) | |
823 | false |
|
834 | false | |
824 | end |
|
835 | end | |
825 |
|
836 | |||
826 | # Anonymous user can not be destroyed |
|
837 | # Anonymous user can not be destroyed | |
827 | def destroy |
|
838 | def destroy | |
828 | false |
|
839 | false | |
829 | end |
|
840 | end | |
830 |
|
841 | |||
831 | protected |
|
842 | protected | |
832 |
|
843 | |||
833 | def instantiate_email_address |
|
844 | def instantiate_email_address | |
834 | end |
|
845 | end | |
835 | end |
|
846 | end |
@@ -1,24 +1,24 | |||||
1 | <h2><%=l(:button_change_password)%></h2> |
|
1 | <h2><%=l(:button_change_password)%></h2> | |
2 |
|
2 | |||
3 | <%= error_messages_for 'user' %> |
|
3 | <%= error_messages_for 'user' %> | |
4 |
|
4 | |||
5 | <%= form_tag({}, :class => "tabular") do %> |
|
5 | <%= form_tag({}, :class => "tabular") do %> | |
6 | <div class="box"> |
|
6 | <div class="box"> | |
7 | <p><label for="password"><%=l(:field_password)%> <span class="required">*</span></label> |
|
7 | <p><label for="password"><%=l(:field_password)%> <span class="required">*</span></label> | |
8 | <%= password_field_tag 'password', nil, :size => 25 %></p> |
|
8 | <%= password_field_tag 'password', nil, :size => 25 %></p> | |
9 |
|
9 | |||
10 | <p><label for="new_password"><%=l(:field_new_password)%> <span class="required">*</span></label> |
|
10 | <p><label for="new_password"><%=l(:field_new_password)%> <span class="required">*</span></label> | |
11 | <%= password_field_tag 'new_password', nil, :size => 25 %> |
|
11 | <%= password_field_tag 'new_password', nil, :size => 25 %> | |
12 | <em class="info"><%= l(:text_caracters_minimum, :count => Setting.password_min_length) %></em></p> |
|
12 | <em class="info"><%= l(:text_caracters_minimum, :count => Setting.password_min_length) %></em></p> | |
13 |
|
13 | |||
14 | <p><label for="new_password_confirmation"><%=l(:field_password_confirmation)%> <span class="required">*</span></label> |
|
14 | <p><label for="new_password_confirmation"><%=l(:field_password_confirmation)%> <span class="required">*</span></label> | |
15 | <%= password_field_tag 'new_password_confirmation', nil, :size => 25 %></p> |
|
15 | <%= password_field_tag 'new_password_confirmation', nil, :size => 25 %></p> | |
16 | </div> |
|
16 | </div> | |
17 | <%= submit_tag l(:button_apply) %> |
|
17 | <%= submit_tag l(:button_apply) %> | |
18 | <% end %> |
|
18 | <% end %> | |
19 |
|
19 | |||
20 | <% unless @user.must_change_passwd? %> |
|
20 | <% unless @user.must_change_passwd? || @user.password_expired? %> | |
21 | <% content_for :sidebar do %> |
|
21 | <% content_for :sidebar do %> | |
22 | <%= render :partial => 'sidebar' %> |
|
22 | <%= render :partial => 'sidebar' %> | |
23 | <% end %> |
|
23 | <% end %> | |
24 | <% end %> |
|
24 | <% end %> |
@@ -1,40 +1,44 | |||||
1 | <%= form_tag({:action => 'edit', :tab => 'authentication'}) do %> |
|
1 | <%= form_tag({:action => 'edit', :tab => 'authentication'}) do %> | |
2 |
|
2 | |||
3 | <div class="box tabular settings"> |
|
3 | <div class="box tabular settings"> | |
4 | <p><%= setting_check_box :login_required %></p> |
|
4 | <p><%= setting_check_box :login_required %></p> | |
5 |
|
5 | |||
6 | <p><%= setting_select :autologin, [[l(:label_disabled), 0]] + [1, 7, 30, 365].collect{|days| [l('datetime.distance_in_words.x_days', :count => days), days.to_s]} %></p> |
|
6 | <p><%= setting_select :autologin, [[l(:label_disabled), 0]] + [1, 7, 30, 365].collect{|days| [l('datetime.distance_in_words.x_days', :count => days), days.to_s]} %></p> | |
7 |
|
7 | |||
8 | <p><%= setting_select :self_registration, [[l(:label_disabled), "0"], |
|
8 | <p><%= setting_select :self_registration, [[l(:label_disabled), "0"], | |
9 | [l(:label_registration_activation_by_email), "1"], |
|
9 | [l(:label_registration_activation_by_email), "1"], | |
10 | [l(:label_registration_manual_activation), "2"], |
|
10 | [l(:label_registration_manual_activation), "2"], | |
11 | [l(:label_registration_automatic_activation), "3"]] %></p> |
|
11 | [l(:label_registration_automatic_activation), "3"]] %></p> | |
12 |
|
12 | |||
13 | <p><%= setting_check_box :unsubscribe %></p> |
|
13 | <p><%= setting_check_box :unsubscribe %></p> | |
14 |
|
14 | |||
15 | <p><%= setting_text_field :password_min_length, :size => 6 %></p> |
|
15 | <p><%= setting_text_field :password_min_length, :size => 6 %></p> | |
16 |
|
16 | |||
|
17 | <p> | |||
|
18 | <%= setting_select :password_max_age, [[l(:label_disabled), 0]] + [7, 30, 60, 90, 180, 365].collect{|days| [l('datetime.distance_in_words.x_days', :count => days), days.to_s]} %> | |||
|
19 | </p> | |||
|
20 | ||||
17 | <p><%= setting_check_box :lost_password, :label => :label_password_lost %></p> |
|
21 | <p><%= setting_check_box :lost_password, :label => :label_password_lost %></p> | |
18 |
|
22 | |||
19 | <p><%= setting_text_field :max_additional_emails, :size => 6 %></p> |
|
23 | <p><%= setting_text_field :max_additional_emails, :size => 6 %></p> | |
20 |
|
24 | |||
21 | <p><%= setting_check_box :openid, :disabled => !Object.const_defined?(:OpenID) %></p> |
|
25 | <p><%= setting_check_box :openid, :disabled => !Object.const_defined?(:OpenID) %></p> | |
22 |
|
26 | |||
23 | <p><%= setting_check_box :rest_api_enabled %></p> |
|
27 | <p><%= setting_check_box :rest_api_enabled %></p> | |
24 |
|
28 | |||
25 | <p><%= setting_check_box :jsonp_enabled %></p> |
|
29 | <p><%= setting_check_box :jsonp_enabled %></p> | |
26 | </div> |
|
30 | </div> | |
27 |
|
31 | |||
28 | <fieldset class="box"> |
|
32 | <fieldset class="box"> | |
29 | <legend><%= l(:label_session_expiration) %></legend> |
|
33 | <legend><%= l(:label_session_expiration) %></legend> | |
30 |
|
34 | |||
31 | <div class="tabular settings"> |
|
35 | <div class="tabular settings"> | |
32 | <p><%= setting_select :session_lifetime, [[l(:label_disabled), 0]] + [1, 7, 30, 60, 365].collect{|days| [l('datetime.distance_in_words.x_days', :count => days), (days * 60 * 24).to_s]} %></p> |
|
36 | <p><%= setting_select :session_lifetime, [[l(:label_disabled), 0]] + [1, 7, 30, 60, 365].collect{|days| [l('datetime.distance_in_words.x_days', :count => days), (days * 60 * 24).to_s]} %></p> | |
33 | <p><%= setting_select :session_timeout, [[l(:label_disabled), 0]] + [1, 2, 4, 8, 12, 24, 48].collect{|hours| [l('datetime.distance_in_words.x_hours', :count => hours), (hours * 60).to_s]} %></p> |
|
37 | <p><%= setting_select :session_timeout, [[l(:label_disabled), 0]] + [1, 2, 4, 8, 12, 24, 48].collect{|hours| [l('datetime.distance_in_words.x_hours', :count => hours), (hours * 60).to_s]} %></p> | |
34 | </div> |
|
38 | </div> | |
35 |
|
39 | |||
36 | <p><em class="info"><%= l(:text_session_expiration_settings) %></em></p> |
|
40 | <p><em class="info"><%= l(:text_session_expiration_settings) %></em></p> | |
37 | </fieldset> |
|
41 | </fieldset> | |
38 |
|
42 | |||
39 | <%= submit_tag l(:button_save) %> |
|
43 | <%= submit_tag l(:button_save) %> | |
40 | <% end %> |
|
44 | <% end %> |
@@ -1,1152 +1,1153 | |||||
1 | # German translations for Ruby on Rails |
|
1 | # German translations for Ruby on Rails | |
2 | # by Clemens Kofler (clemens@railway.at) |
|
2 | # by Clemens Kofler (clemens@railway.at) | |
3 | # additions for Redmine 1.2 by Jens Martsch (jmartsch@gmail.com) |
|
3 | # additions for Redmine 1.2 by Jens Martsch (jmartsch@gmail.com) | |
4 |
|
4 | |||
5 | de: |
|
5 | de: | |
6 | direction: ltr |
|
6 | direction: ltr | |
7 | date: |
|
7 | date: | |
8 | formats: |
|
8 | formats: | |
9 | # Use the strftime parameters for formats. |
|
9 | # Use the strftime parameters for formats. | |
10 | # When no format has been given, it uses default. |
|
10 | # When no format has been given, it uses default. | |
11 | # You can provide other formats here if you like! |
|
11 | # You can provide other formats here if you like! | |
12 | default: "%d.%m.%Y" |
|
12 | default: "%d.%m.%Y" | |
13 | short: "%e. %b" |
|
13 | short: "%e. %b" | |
14 | long: "%e. %B %Y" |
|
14 | long: "%e. %B %Y" | |
15 |
|
15 | |||
16 | day_names: [Sonntag, Montag, Dienstag, Mittwoch, Donnerstag, Freitag, Samstag] |
|
16 | day_names: [Sonntag, Montag, Dienstag, Mittwoch, Donnerstag, Freitag, Samstag] | |
17 | abbr_day_names: [So, Mo, Di, Mi, Do, Fr, Sa] |
|
17 | abbr_day_names: [So, Mo, Di, Mi, Do, Fr, Sa] | |
18 |
|
18 | |||
19 | # Don't forget the nil at the beginning; there's no such thing as a 0th month |
|
19 | # Don't forget the nil at the beginning; there's no such thing as a 0th month | |
20 | month_names: [~, Januar, Februar, MΓ€rz, April, Mai, Juni, Juli, August, September, Oktober, November, Dezember] |
|
20 | month_names: [~, Januar, Februar, MΓ€rz, April, Mai, Juni, Juli, August, September, Oktober, November, Dezember] | |
21 | abbr_month_names: [~, Jan, Feb, MΓ€r, Apr, Mai, Jun, Jul, Aug, Sep, Okt, Nov, Dez] |
|
21 | abbr_month_names: [~, Jan, Feb, MΓ€r, Apr, Mai, Jun, Jul, Aug, Sep, Okt, Nov, Dez] | |
22 | # Used in date_select and datime_select. |
|
22 | # Used in date_select and datime_select. | |
23 | order: |
|
23 | order: | |
24 | - :day |
|
24 | - :day | |
25 | - :month |
|
25 | - :month | |
26 | - :year |
|
26 | - :year | |
27 |
|
27 | |||
28 | time: |
|
28 | time: | |
29 | formats: |
|
29 | formats: | |
30 | default: "%d.%m.%Y %H:%M" |
|
30 | default: "%d.%m.%Y %H:%M" | |
31 | time: "%H:%M" |
|
31 | time: "%H:%M" | |
32 | short: "%e. %b %H:%M" |
|
32 | short: "%e. %b %H:%M" | |
33 | long: "%A, %e. %B %Y, %H:%M Uhr" |
|
33 | long: "%A, %e. %B %Y, %H:%M Uhr" | |
34 | am: "vormittags" |
|
34 | am: "vormittags" | |
35 | pm: "nachmittags" |
|
35 | pm: "nachmittags" | |
36 |
|
36 | |||
37 | datetime: |
|
37 | datetime: | |
38 | distance_in_words: |
|
38 | distance_in_words: | |
39 | half_a_minute: 'eine halbe Minute' |
|
39 | half_a_minute: 'eine halbe Minute' | |
40 | less_than_x_seconds: |
|
40 | less_than_x_seconds: | |
41 | one: 'weniger als 1 Sekunde' |
|
41 | one: 'weniger als 1 Sekunde' | |
42 | other: 'weniger als %{count} Sekunden' |
|
42 | other: 'weniger als %{count} Sekunden' | |
43 | x_seconds: |
|
43 | x_seconds: | |
44 | one: '1 Sekunde' |
|
44 | one: '1 Sekunde' | |
45 | other: '%{count} Sekunden' |
|
45 | other: '%{count} Sekunden' | |
46 | less_than_x_minutes: |
|
46 | less_than_x_minutes: | |
47 | one: 'weniger als 1 Minute' |
|
47 | one: 'weniger als 1 Minute' | |
48 | other: 'weniger als %{count} Minuten' |
|
48 | other: 'weniger als %{count} Minuten' | |
49 | x_minutes: |
|
49 | x_minutes: | |
50 | one: '1 Minute' |
|
50 | one: '1 Minute' | |
51 | other: '%{count} Minuten' |
|
51 | other: '%{count} Minuten' | |
52 | about_x_hours: |
|
52 | about_x_hours: | |
53 | one: 'etwa 1 Stunde' |
|
53 | one: 'etwa 1 Stunde' | |
54 | other: 'etwa %{count} Stunden' |
|
54 | other: 'etwa %{count} Stunden' | |
55 | x_hours: |
|
55 | x_hours: | |
56 | one: "1 Stunde" |
|
56 | one: "1 Stunde" | |
57 | other: "%{count} Stunden" |
|
57 | other: "%{count} Stunden" | |
58 | x_days: |
|
58 | x_days: | |
59 | one: '1 Tag' |
|
59 | one: '1 Tag' | |
60 | other: '%{count} Tagen' |
|
60 | other: '%{count} Tagen' | |
61 | about_x_months: |
|
61 | about_x_months: | |
62 | one: 'etwa 1 Monat' |
|
62 | one: 'etwa 1 Monat' | |
63 | other: 'etwa %{count} Monaten' |
|
63 | other: 'etwa %{count} Monaten' | |
64 | x_months: |
|
64 | x_months: | |
65 | one: '1 Monat' |
|
65 | one: '1 Monat' | |
66 | other: '%{count} Monaten' |
|
66 | other: '%{count} Monaten' | |
67 | about_x_years: |
|
67 | about_x_years: | |
68 | one: 'etwa 1 Jahr' |
|
68 | one: 'etwa 1 Jahr' | |
69 | other: 'etwa %{count} Jahren' |
|
69 | other: 'etwa %{count} Jahren' | |
70 | over_x_years: |
|
70 | over_x_years: | |
71 | one: 'mehr als 1 Jahr' |
|
71 | one: 'mehr als 1 Jahr' | |
72 | other: 'mehr als %{count} Jahren' |
|
72 | other: 'mehr als %{count} Jahren' | |
73 | almost_x_years: |
|
73 | almost_x_years: | |
74 | one: "fast 1 Jahr" |
|
74 | one: "fast 1 Jahr" | |
75 | other: "fast %{count} Jahren" |
|
75 | other: "fast %{count} Jahren" | |
76 |
|
76 | |||
77 | number: |
|
77 | number: | |
78 | # Default format for numbers |
|
78 | # Default format for numbers | |
79 | format: |
|
79 | format: | |
80 | separator: ',' |
|
80 | separator: ',' | |
81 | delimiter: '.' |
|
81 | delimiter: '.' | |
82 | precision: 2 |
|
82 | precision: 2 | |
83 | currency: |
|
83 | currency: | |
84 | format: |
|
84 | format: | |
85 | unit: 'β¬' |
|
85 | unit: 'β¬' | |
86 | format: '%n %u' |
|
86 | format: '%n %u' | |
87 | delimiter: '' |
|
87 | delimiter: '' | |
88 | percentage: |
|
88 | percentage: | |
89 | format: |
|
89 | format: | |
90 | delimiter: "" |
|
90 | delimiter: "" | |
91 | precision: |
|
91 | precision: | |
92 | format: |
|
92 | format: | |
93 | delimiter: "" |
|
93 | delimiter: "" | |
94 | human: |
|
94 | human: | |
95 | format: |
|
95 | format: | |
96 | delimiter: "" |
|
96 | delimiter: "" | |
97 | precision: 3 |
|
97 | precision: 3 | |
98 | storage_units: |
|
98 | storage_units: | |
99 | format: "%n %u" |
|
99 | format: "%n %u" | |
100 | units: |
|
100 | units: | |
101 | byte: |
|
101 | byte: | |
102 | one: "Byte" |
|
102 | one: "Byte" | |
103 | other: "Bytes" |
|
103 | other: "Bytes" | |
104 | kb: "KB" |
|
104 | kb: "KB" | |
105 | mb: "MB" |
|
105 | mb: "MB" | |
106 | gb: "GB" |
|
106 | gb: "GB" | |
107 | tb: "TB" |
|
107 | tb: "TB" | |
108 |
|
108 | |||
109 | # Used in array.to_sentence. |
|
109 | # Used in array.to_sentence. | |
110 | support: |
|
110 | support: | |
111 | array: |
|
111 | array: | |
112 | sentence_connector: "und" |
|
112 | sentence_connector: "und" | |
113 | skip_last_comma: true |
|
113 | skip_last_comma: true | |
114 |
|
114 | |||
115 | activerecord: |
|
115 | activerecord: | |
116 | errors: |
|
116 | errors: | |
117 | template: |
|
117 | template: | |
118 | header: |
|
118 | header: | |
119 | one: "Dieses %{model}-Objekt konnte nicht gespeichert werden: %{count} Fehler." |
|
119 | one: "Dieses %{model}-Objekt konnte nicht gespeichert werden: %{count} Fehler." | |
120 | other: "Dieses %{model}-Objekt konnte nicht gespeichert werden: %{count} Fehler." |
|
120 | other: "Dieses %{model}-Objekt konnte nicht gespeichert werden: %{count} Fehler." | |
121 | body: "Bitte ΓΌberprΓΌfen Sie die folgenden Felder:" |
|
121 | body: "Bitte ΓΌberprΓΌfen Sie die folgenden Felder:" | |
122 |
|
122 | |||
123 | messages: |
|
123 | messages: | |
124 | inclusion: "ist kein gΓΌltiger Wert" |
|
124 | inclusion: "ist kein gΓΌltiger Wert" | |
125 | exclusion: "ist nicht verfΓΌgbar" |
|
125 | exclusion: "ist nicht verfΓΌgbar" | |
126 | invalid: "ist nicht gΓΌltig" |
|
126 | invalid: "ist nicht gΓΌltig" | |
127 | confirmation: "stimmt nicht mit der BestΓ€tigung ΓΌberein" |
|
127 | confirmation: "stimmt nicht mit der BestΓ€tigung ΓΌberein" | |
128 | accepted: "muss akzeptiert werden" |
|
128 | accepted: "muss akzeptiert werden" | |
129 | empty: "muss ausgefΓΌllt werden" |
|
129 | empty: "muss ausgefΓΌllt werden" | |
130 | blank: "muss ausgefΓΌllt werden" |
|
130 | blank: "muss ausgefΓΌllt werden" | |
131 | too_long: "ist zu lang (nicht mehr als %{count} Zeichen)" |
|
131 | too_long: "ist zu lang (nicht mehr als %{count} Zeichen)" | |
132 | too_short: "ist zu kurz (nicht weniger als %{count} Zeichen)" |
|
132 | too_short: "ist zu kurz (nicht weniger als %{count} Zeichen)" | |
133 | wrong_length: "hat die falsche LΓ€nge (muss genau %{count} Zeichen haben)" |
|
133 | wrong_length: "hat die falsche LΓ€nge (muss genau %{count} Zeichen haben)" | |
134 | taken: "ist bereits vergeben" |
|
134 | taken: "ist bereits vergeben" | |
135 | not_a_number: "ist keine Zahl" |
|
135 | not_a_number: "ist keine Zahl" | |
136 | not_a_date: "ist kein gΓΌltiges Datum" |
|
136 | not_a_date: "ist kein gΓΌltiges Datum" | |
137 | greater_than: "muss grΓΆΓer als %{count} sein" |
|
137 | greater_than: "muss grΓΆΓer als %{count} sein" | |
138 | greater_than_or_equal_to: "muss grΓΆΓer oder gleich %{count} sein" |
|
138 | greater_than_or_equal_to: "muss grΓΆΓer oder gleich %{count} sein" | |
139 | equal_to: "muss genau %{count} sein" |
|
139 | equal_to: "muss genau %{count} sein" | |
140 | less_than: "muss kleiner als %{count} sein" |
|
140 | less_than: "muss kleiner als %{count} sein" | |
141 | less_than_or_equal_to: "muss kleiner oder gleich %{count} sein" |
|
141 | less_than_or_equal_to: "muss kleiner oder gleich %{count} sein" | |
142 | odd: "muss ungerade sein" |
|
142 | odd: "muss ungerade sein" | |
143 | even: "muss gerade sein" |
|
143 | even: "muss gerade sein" | |
144 | greater_than_start_date: "muss grΓΆΓer als Anfangsdatum sein" |
|
144 | greater_than_start_date: "muss grΓΆΓer als Anfangsdatum sein" | |
145 | not_same_project: "gehΓΆrt nicht zum selben Projekt" |
|
145 | not_same_project: "gehΓΆrt nicht zum selben Projekt" | |
146 | circular_dependency: "Diese Beziehung wΓΌrde eine zyklische AbhΓ€ngigkeit erzeugen" |
|
146 | circular_dependency: "Diese Beziehung wΓΌrde eine zyklische AbhΓ€ngigkeit erzeugen" | |
147 | cant_link_an_issue_with_a_descendant: "Ein Ticket kann nicht mit einer Ihrer Unteraufgaben verlinkt werden" |
|
147 | cant_link_an_issue_with_a_descendant: "Ein Ticket kann nicht mit einer Ihrer Unteraufgaben verlinkt werden" | |
148 | earlier_than_minimum_start_date: "cannot be earlier than %{date} because of preceding issues" |
|
148 | earlier_than_minimum_start_date: "cannot be earlier than %{date} because of preceding issues" | |
149 |
|
149 | |||
150 | actionview_instancetag_blank_option: Bitte auswΓ€hlen |
|
150 | actionview_instancetag_blank_option: Bitte auswΓ€hlen | |
151 |
|
151 | |||
152 | button_activate: Aktivieren |
|
152 | button_activate: Aktivieren | |
153 | button_add: HinzufΓΌgen |
|
153 | button_add: HinzufΓΌgen | |
154 | button_annotate: Annotieren |
|
154 | button_annotate: Annotieren | |
155 | button_apply: Anwenden |
|
155 | button_apply: Anwenden | |
156 | button_archive: Archivieren |
|
156 | button_archive: Archivieren | |
157 | button_back: ZurΓΌck |
|
157 | button_back: ZurΓΌck | |
158 | button_cancel: Abbrechen |
|
158 | button_cancel: Abbrechen | |
159 | button_change: Wechseln |
|
159 | button_change: Wechseln | |
160 | button_change_password: Kennwort Γ€ndern |
|
160 | button_change_password: Kennwort Γ€ndern | |
161 | button_check_all: Alles auswΓ€hlen |
|
161 | button_check_all: Alles auswΓ€hlen | |
162 | button_clear: ZurΓΌcksetzen |
|
162 | button_clear: ZurΓΌcksetzen | |
163 | button_close: SchlieΓen |
|
163 | button_close: SchlieΓen | |
164 | button_collapse_all: Alle einklappen |
|
164 | button_collapse_all: Alle einklappen | |
165 | button_configure: Konfigurieren |
|
165 | button_configure: Konfigurieren | |
166 | button_copy: Kopieren |
|
166 | button_copy: Kopieren | |
167 | button_copy_and_follow: Kopieren und Ticket anzeigen |
|
167 | button_copy_and_follow: Kopieren und Ticket anzeigen | |
168 | button_create: Anlegen |
|
168 | button_create: Anlegen | |
169 | button_create_and_continue: Anlegen und weiter |
|
169 | button_create_and_continue: Anlegen und weiter | |
170 | button_delete: LΓΆschen |
|
170 | button_delete: LΓΆschen | |
171 | button_delete_my_account: Mein Benutzerkonto lΓΆschen |
|
171 | button_delete_my_account: Mein Benutzerkonto lΓΆschen | |
172 | button_download: Download |
|
172 | button_download: Download | |
173 | button_duplicate: Duplizieren |
|
173 | button_duplicate: Duplizieren | |
174 | button_edit: Bearbeiten |
|
174 | button_edit: Bearbeiten | |
175 | button_edit_associated_wikipage: "ZugehΓΆrige Wikiseite bearbeiten: %{page_title}" |
|
175 | button_edit_associated_wikipage: "ZugehΓΆrige Wikiseite bearbeiten: %{page_title}" | |
176 | button_edit_section: Diesen Bereich bearbeiten |
|
176 | button_edit_section: Diesen Bereich bearbeiten | |
177 | button_expand_all: Alle ausklappen |
|
177 | button_expand_all: Alle ausklappen | |
178 | button_export: Exportieren |
|
178 | button_export: Exportieren | |
179 | button_hide: Verstecken |
|
179 | button_hide: Verstecken | |
180 | button_list: Liste |
|
180 | button_list: Liste | |
181 | button_lock: Sperren |
|
181 | button_lock: Sperren | |
182 | button_log_time: Aufwand buchen |
|
182 | button_log_time: Aufwand buchen | |
183 | button_login: Anmelden |
|
183 | button_login: Anmelden | |
184 | button_move: Verschieben |
|
184 | button_move: Verschieben | |
185 | button_move_and_follow: Verschieben und Ticket anzeigen |
|
185 | button_move_and_follow: Verschieben und Ticket anzeigen | |
186 | button_quote: Zitieren |
|
186 | button_quote: Zitieren | |
187 | button_rename: Umbenennen |
|
187 | button_rename: Umbenennen | |
188 | button_reopen: Γffnen |
|
188 | button_reopen: Γffnen | |
189 | button_reply: Antworten |
|
189 | button_reply: Antworten | |
190 | button_reset: ZurΓΌcksetzen |
|
190 | button_reset: ZurΓΌcksetzen | |
191 | button_rollback: Auf diese Version zurΓΌcksetzen |
|
191 | button_rollback: Auf diese Version zurΓΌcksetzen | |
192 | button_save: Speichern |
|
192 | button_save: Speichern | |
193 | button_show: Anzeigen |
|
193 | button_show: Anzeigen | |
194 | button_sort: Sortieren |
|
194 | button_sort: Sortieren | |
195 | button_submit: OK |
|
195 | button_submit: OK | |
196 | button_test: Testen |
|
196 | button_test: Testen | |
197 | button_unarchive: Entarchivieren |
|
197 | button_unarchive: Entarchivieren | |
198 | button_uncheck_all: Alles abwΓ€hlen |
|
198 | button_uncheck_all: Alles abwΓ€hlen | |
199 | button_unlock: Entsperren |
|
199 | button_unlock: Entsperren | |
200 | button_unwatch: Nicht beobachten |
|
200 | button_unwatch: Nicht beobachten | |
201 | button_update: Aktualisieren |
|
201 | button_update: Aktualisieren | |
202 | button_view: Anzeigen |
|
202 | button_view: Anzeigen | |
203 | button_watch: Beobachten |
|
203 | button_watch: Beobachten | |
204 |
|
204 | |||
205 | default_activity_design: Design |
|
205 | default_activity_design: Design | |
206 | default_activity_development: Entwicklung |
|
206 | default_activity_development: Entwicklung | |
207 | default_doc_category_tech: Technische Dokumentation |
|
207 | default_doc_category_tech: Technische Dokumentation | |
208 | default_doc_category_user: Benutzerdokumentation |
|
208 | default_doc_category_user: Benutzerdokumentation | |
209 | default_issue_status_closed: Erledigt |
|
209 | default_issue_status_closed: Erledigt | |
210 | default_issue_status_feedback: Feedback |
|
210 | default_issue_status_feedback: Feedback | |
211 | default_issue_status_in_progress: In Bearbeitung |
|
211 | default_issue_status_in_progress: In Bearbeitung | |
212 | default_issue_status_new: Neu |
|
212 | default_issue_status_new: Neu | |
213 | default_issue_status_rejected: Abgewiesen |
|
213 | default_issue_status_rejected: Abgewiesen | |
214 | default_issue_status_resolved: GelΓΆst |
|
214 | default_issue_status_resolved: GelΓΆst | |
215 | default_priority_high: Hoch |
|
215 | default_priority_high: Hoch | |
216 | default_priority_immediate: Sofort |
|
216 | default_priority_immediate: Sofort | |
217 | default_priority_low: Niedrig |
|
217 | default_priority_low: Niedrig | |
218 | default_priority_normal: Normal |
|
218 | default_priority_normal: Normal | |
219 | default_priority_urgent: Dringend |
|
219 | default_priority_urgent: Dringend | |
220 | default_role_developer: Entwickler |
|
220 | default_role_developer: Entwickler | |
221 | default_role_manager: Manager |
|
221 | default_role_manager: Manager | |
222 | default_role_reporter: Reporter |
|
222 | default_role_reporter: Reporter | |
223 | default_tracker_bug: Fehler |
|
223 | default_tracker_bug: Fehler | |
224 | default_tracker_feature: Feature |
|
224 | default_tracker_feature: Feature | |
225 | default_tracker_support: UnterstΓΌtzung |
|
225 | default_tracker_support: UnterstΓΌtzung | |
226 |
|
226 | |||
227 | description_all_columns: Alle Spalten |
|
227 | description_all_columns: Alle Spalten | |
228 | description_available_columns: VerfΓΌgbare Spalten |
|
228 | description_available_columns: VerfΓΌgbare Spalten | |
229 | description_choose_project: Projekte |
|
229 | description_choose_project: Projekte | |
230 | description_date_from: Startdatum eintragen |
|
230 | description_date_from: Startdatum eintragen | |
231 | description_date_range_interval: Zeitraum durch Start- und Enddatum festlegen |
|
231 | description_date_range_interval: Zeitraum durch Start- und Enddatum festlegen | |
232 | description_date_range_list: Zeitraum aus einer Liste wΓ€hlen |
|
232 | description_date_range_list: Zeitraum aus einer Liste wΓ€hlen | |
233 | description_date_to: Enddatum eintragen |
|
233 | description_date_to: Enddatum eintragen | |
234 | description_filter: Filter |
|
234 | description_filter: Filter | |
235 | description_issue_category_reassign: Neue Kategorie wΓ€hlen |
|
235 | description_issue_category_reassign: Neue Kategorie wΓ€hlen | |
236 | description_message_content: Nachrichteninhalt |
|
236 | description_message_content: Nachrichteninhalt | |
237 | description_notes: Kommentare |
|
237 | description_notes: Kommentare | |
238 | description_project_scope: Suchbereich |
|
238 | description_project_scope: Suchbereich | |
239 | description_query_sort_criteria_attribute: Sortierattribut |
|
239 | description_query_sort_criteria_attribute: Sortierattribut | |
240 | description_query_sort_criteria_direction: Sortierrichtung |
|
240 | description_query_sort_criteria_direction: Sortierrichtung | |
241 | description_search: Suchfeld |
|
241 | description_search: Suchfeld | |
242 | description_selected_columns: AusgewΓ€hlte Spalten |
|
242 | description_selected_columns: AusgewΓ€hlte Spalten | |
243 |
|
243 | |||
244 | description_user_mail_notification: Mailbenachrichtigungseinstellung |
|
244 | description_user_mail_notification: Mailbenachrichtigungseinstellung | |
245 | description_wiki_subpages_reassign: Neue Elternseite wΓ€hlen |
|
245 | description_wiki_subpages_reassign: Neue Elternseite wΓ€hlen | |
246 |
|
246 | |||
247 | enumeration_activities: AktivitΓ€ten (Zeiterfassung) |
|
247 | enumeration_activities: AktivitΓ€ten (Zeiterfassung) | |
248 | enumeration_doc_categories: Dokumentenkategorien |
|
248 | enumeration_doc_categories: Dokumentenkategorien | |
249 | enumeration_issue_priorities: Ticket-PrioritΓ€ten |
|
249 | enumeration_issue_priorities: Ticket-PrioritΓ€ten | |
250 | enumeration_system_activity: System-AktivitΓ€t |
|
250 | enumeration_system_activity: System-AktivitΓ€t | |
251 |
|
251 | |||
252 | error_attachment_too_big: Diese Datei kann nicht hochgeladen werden, da sie die maximale DateigrΓΆΓe von (%{max_size}) ΓΌberschreitet. |
|
252 | error_attachment_too_big: Diese Datei kann nicht hochgeladen werden, da sie die maximale DateigrΓΆΓe von (%{max_size}) ΓΌberschreitet. | |
253 | error_can_not_archive_project: Dieses Projekt kann nicht archiviert werden. |
|
253 | error_can_not_archive_project: Dieses Projekt kann nicht archiviert werden. | |
254 | error_can_not_delete_custom_field: Kann das benutzerdefinierte Feld nicht lΓΆschen. |
|
254 | error_can_not_delete_custom_field: Kann das benutzerdefinierte Feld nicht lΓΆschen. | |
255 | error_can_not_delete_tracker: Dieser Tracker enthΓ€lt Tickets und kann nicht gelΓΆscht werden. |
|
255 | error_can_not_delete_tracker: Dieser Tracker enthΓ€lt Tickets und kann nicht gelΓΆscht werden. | |
256 | error_can_not_remove_role: Diese Rolle wird verwendet und kann nicht gelΓΆscht werden. |
|
256 | error_can_not_remove_role: Diese Rolle wird verwendet und kann nicht gelΓΆscht werden. | |
257 | error_can_not_reopen_issue_on_closed_version: Das Ticket ist einer abgeschlossenen Version zugeordnet und kann daher nicht wieder geΓΆffnet werden. |
|
257 | error_can_not_reopen_issue_on_closed_version: Das Ticket ist einer abgeschlossenen Version zugeordnet und kann daher nicht wieder geΓΆffnet werden. | |
258 | error_can_t_load_default_data: "Die Standard-Konfiguration konnte nicht geladen werden: %{value}" |
|
258 | error_can_t_load_default_data: "Die Standard-Konfiguration konnte nicht geladen werden: %{value}" | |
259 | error_issue_done_ratios_not_updated: Der Ticket-Fortschritt wurde nicht aktualisiert. |
|
259 | error_issue_done_ratios_not_updated: Der Ticket-Fortschritt wurde nicht aktualisiert. | |
260 | error_issue_not_found_in_project: 'Das Ticket wurde nicht gefunden oder gehΓΆrt nicht zu diesem Projekt.' |
|
260 | error_issue_not_found_in_project: 'Das Ticket wurde nicht gefunden oder gehΓΆrt nicht zu diesem Projekt.' | |
261 | error_no_default_issue_status: Es ist kein Status als Standard definiert. Bitte ΓΌberprΓΌfen Sie Ihre Konfiguration (unter "Administration -> Ticket-Status"). |
|
261 | error_no_default_issue_status: Es ist kein Status als Standard definiert. Bitte ΓΌberprΓΌfen Sie Ihre Konfiguration (unter "Administration -> Ticket-Status"). | |
262 | error_no_tracker_in_project: Diesem Projekt ist kein Tracker zugeordnet. Bitte ΓΌberprΓΌfen Sie die Projekteinstellungen. |
|
262 | error_no_tracker_in_project: Diesem Projekt ist kein Tracker zugeordnet. Bitte ΓΌberprΓΌfen Sie die Projekteinstellungen. | |
263 | error_scm_annotate: "Der Eintrag existiert nicht oder kann nicht annotiert werden." |
|
263 | error_scm_annotate: "Der Eintrag existiert nicht oder kann nicht annotiert werden." | |
264 | error_scm_annotate_big_text_file: Der Eintrag kann nicht umgesetzt werden, da er die maximale TextlΓ€nge ΓΌberschreitet. |
|
264 | error_scm_annotate_big_text_file: Der Eintrag kann nicht umgesetzt werden, da er die maximale TextlΓ€nge ΓΌberschreitet. | |
265 | error_scm_command_failed: "Beim Zugriff auf das Projektarchiv ist ein Fehler aufgetreten: %{value}" |
|
265 | error_scm_command_failed: "Beim Zugriff auf das Projektarchiv ist ein Fehler aufgetreten: %{value}" | |
266 | error_scm_not_found: Eintrag und/oder Revision existiert nicht im Projektarchiv. |
|
266 | error_scm_not_found: Eintrag und/oder Revision existiert nicht im Projektarchiv. | |
267 | error_session_expired: Ihre Sitzung ist abgelaufen. Bitte melden Sie sich erneut an. |
|
267 | error_session_expired: Ihre Sitzung ist abgelaufen. Bitte melden Sie sich erneut an. | |
268 | error_unable_delete_issue_status: "Der Ticket-Status konnte nicht gelΓΆscht werden." |
|
268 | error_unable_delete_issue_status: "Der Ticket-Status konnte nicht gelΓΆscht werden." | |
269 | error_unable_to_connect: Fehler beim Verbinden (%{value}) |
|
269 | error_unable_to_connect: Fehler beim Verbinden (%{value}) | |
270 | error_workflow_copy_source: Bitte wΓ€hlen Sie einen Quell-Tracker und eine Quell-Rolle. |
|
270 | error_workflow_copy_source: Bitte wΓ€hlen Sie einen Quell-Tracker und eine Quell-Rolle. | |
271 | error_workflow_copy_target: Bitte wΓ€hlen Sie die Ziel-Tracker und -Rollen. |
|
271 | error_workflow_copy_target: Bitte wΓ€hlen Sie die Ziel-Tracker und -Rollen. | |
272 |
|
272 | |||
273 | field_account: Konto |
|
273 | field_account: Konto | |
274 | field_active: Aktiv |
|
274 | field_active: Aktiv | |
275 | field_activity: AktivitΓ€t |
|
275 | field_activity: AktivitΓ€t | |
276 | field_admin: Administrator |
|
276 | field_admin: Administrator | |
277 | field_assignable: Tickets kΓΆnnen dieser Rolle zugewiesen werden |
|
277 | field_assignable: Tickets kΓΆnnen dieser Rolle zugewiesen werden | |
278 | field_assigned_to: Zugewiesen an |
|
278 | field_assigned_to: Zugewiesen an | |
279 | field_assigned_to_role: ZustΓ€ndigkeitsrolle |
|
279 | field_assigned_to_role: ZustΓ€ndigkeitsrolle | |
280 | field_attr_firstname: Vorname-Attribut |
|
280 | field_attr_firstname: Vorname-Attribut | |
281 | field_attr_lastname: Name-Attribut |
|
281 | field_attr_lastname: Name-Attribut | |
282 | field_attr_login: Mitgliedsname-Attribut |
|
282 | field_attr_login: Mitgliedsname-Attribut | |
283 | field_attr_mail: E-Mail-Attribut |
|
283 | field_attr_mail: E-Mail-Attribut | |
284 | field_auth_source: Authentifizierungs-Modus |
|
284 | field_auth_source: Authentifizierungs-Modus | |
285 | field_auth_source_ldap_filter: LDAP-Filter |
|
285 | field_auth_source_ldap_filter: LDAP-Filter | |
286 | field_author: Autor |
|
286 | field_author: Autor | |
287 | field_base_dn: Base DN |
|
287 | field_base_dn: Base DN | |
288 | field_board_parent: Γbergeordnetes Forum |
|
288 | field_board_parent: Γbergeordnetes Forum | |
289 | field_category: Kategorie |
|
289 | field_category: Kategorie | |
290 | field_column_names: Spalten |
|
290 | field_column_names: Spalten | |
291 | field_closed_on: Geschlossen am |
|
291 | field_closed_on: Geschlossen am | |
292 | field_comments: Kommentar |
|
292 | field_comments: Kommentar | |
293 | field_comments_sorting: Kommentare anzeigen |
|
293 | field_comments_sorting: Kommentare anzeigen | |
294 | field_commit_logs_encoding: Kodierung der Commit-Log-Meldungen |
|
294 | field_commit_logs_encoding: Kodierung der Commit-Log-Meldungen | |
295 | field_content: Inhalt |
|
295 | field_content: Inhalt | |
296 | field_core_fields: Standardwerte |
|
296 | field_core_fields: Standardwerte | |
297 | field_created_on: Angelegt |
|
297 | field_created_on: Angelegt | |
298 | field_cvs_module: Modul |
|
298 | field_cvs_module: Modul | |
299 | field_cvsroot: CVSROOT |
|
299 | field_cvsroot: CVSROOT | |
300 | field_default_value: Standardwert |
|
300 | field_default_value: Standardwert | |
301 | field_default_status: Standardstatus |
|
301 | field_default_status: Standardstatus | |
302 | field_delay: Pufferzeit |
|
302 | field_delay: Pufferzeit | |
303 | field_description: Beschreibung |
|
303 | field_description: Beschreibung | |
304 | field_done_ratio: "% erledigt" |
|
304 | field_done_ratio: "% erledigt" | |
305 | field_downloads: Downloads |
|
305 | field_downloads: Downloads | |
306 | field_due_date: Abgabedatum |
|
306 | field_due_date: Abgabedatum | |
307 | field_editable: Bearbeitbar |
|
307 | field_editable: Bearbeitbar | |
308 | field_effective_date: Datum |
|
308 | field_effective_date: Datum | |
309 | field_estimated_hours: GeschΓ€tzter Aufwand |
|
309 | field_estimated_hours: GeschΓ€tzter Aufwand | |
310 | field_field_format: Format |
|
310 | field_field_format: Format | |
311 | field_filename: Datei |
|
311 | field_filename: Datei | |
312 | field_filesize: GrΓΆΓe |
|
312 | field_filesize: GrΓΆΓe | |
313 | field_firstname: Vorname |
|
313 | field_firstname: Vorname | |
314 | field_fixed_version: Zielversion |
|
314 | field_fixed_version: Zielversion | |
315 | field_generate_password: Passwort generieren |
|
315 | field_generate_password: Passwort generieren | |
316 | field_group_by: Gruppiere Ergebnisse nach |
|
316 | field_group_by: Gruppiere Ergebnisse nach | |
317 | field_hide_mail: E-Mail-Adresse nicht anzeigen |
|
317 | field_hide_mail: E-Mail-Adresse nicht anzeigen | |
318 | field_homepage: Projekt-Homepage |
|
318 | field_homepage: Projekt-Homepage | |
319 | field_host: Host |
|
319 | field_host: Host | |
320 | field_hours: Stunden |
|
320 | field_hours: Stunden | |
321 | field_identifier: Kennung |
|
321 | field_identifier: Kennung | |
322 | field_identity_url: OpenID-URL |
|
322 | field_identity_url: OpenID-URL | |
323 | field_inherit_members: Benutzer erben |
|
323 | field_inherit_members: Benutzer erben | |
324 | field_is_closed: Ticket geschlossen |
|
324 | field_is_closed: Ticket geschlossen | |
325 | field_is_default: Standardeinstellung |
|
325 | field_is_default: Standardeinstellung | |
326 | field_is_filter: Als Filter benutzen |
|
326 | field_is_filter: Als Filter benutzen | |
327 | field_is_for_all: FΓΌr alle Projekte |
|
327 | field_is_for_all: FΓΌr alle Projekte | |
328 | field_is_in_roadmap: In der Roadmap anzeigen |
|
328 | field_is_in_roadmap: In der Roadmap anzeigen | |
329 | field_is_private: Privat |
|
329 | field_is_private: Privat | |
330 | field_is_public: Γffentlich |
|
330 | field_is_public: Γffentlich | |
331 | field_is_required: Erforderlich |
|
331 | field_is_required: Erforderlich | |
332 | field_issue: Ticket |
|
332 | field_issue: Ticket | |
333 | field_issue_to: ZugehΓΆriges Ticket |
|
333 | field_issue_to: ZugehΓΆriges Ticket | |
334 | field_issues_visibility: Ticket Sichtbarkeit |
|
334 | field_issues_visibility: Ticket Sichtbarkeit | |
335 | field_language: Sprache |
|
335 | field_language: Sprache | |
336 | field_last_login_on: Letzte Anmeldung |
|
336 | field_last_login_on: Letzte Anmeldung | |
337 | field_lastname: Nachname |
|
337 | field_lastname: Nachname | |
338 | field_login: Mitgliedsname |
|
338 | field_login: Mitgliedsname | |
339 | field_mail: E-Mail |
|
339 | field_mail: E-Mail | |
340 | field_mail_notification: Mailbenachrichtigung |
|
340 | field_mail_notification: Mailbenachrichtigung | |
341 | field_max_length: Maximale LΓ€nge |
|
341 | field_max_length: Maximale LΓ€nge | |
342 | field_member_of_group: ZustΓ€ndigkeitsgruppe |
|
342 | field_member_of_group: ZustΓ€ndigkeitsgruppe | |
343 | field_min_length: Minimale LΓ€nge |
|
343 | field_min_length: Minimale LΓ€nge | |
344 | field_multiple: Mehrere Werte |
|
344 | field_multiple: Mehrere Werte | |
345 | field_must_change_passwd: Passwort beim nΓ€chsten Login Γ€ndern |
|
345 | field_must_change_passwd: Passwort beim nΓ€chsten Login Γ€ndern | |
346 | field_name: Name |
|
346 | field_name: Name | |
347 | field_new_password: Neues Kennwort |
|
347 | field_new_password: Neues Kennwort | |
348 | field_notes: Kommentare |
|
348 | field_notes: Kommentare | |
349 | field_onthefly: On-the-fly-Benutzererstellung |
|
349 | field_onthefly: On-the-fly-Benutzererstellung | |
350 | field_parent: Unterprojekt von |
|
350 | field_parent: Unterprojekt von | |
351 | field_parent_issue: Γbergeordnete Aufgabe |
|
351 | field_parent_issue: Γbergeordnete Aufgabe | |
352 | field_parent_title: Γbergeordnete Seite |
|
352 | field_parent_title: Γbergeordnete Seite | |
353 | field_password: Kennwort |
|
353 | field_password: Kennwort | |
354 | field_password_confirmation: BestΓ€tigung |
|
354 | field_password_confirmation: BestΓ€tigung | |
355 | field_path_to_repository: Pfad zum Repository |
|
355 | field_path_to_repository: Pfad zum Repository | |
356 | field_port: Port |
|
356 | field_port: Port | |
357 | field_possible_values: MΓΆgliche Werte |
|
357 | field_possible_values: MΓΆgliche Werte | |
358 | field_principal: Auftraggeber |
|
358 | field_principal: Auftraggeber | |
359 | field_priority: PrioritΓ€t |
|
359 | field_priority: PrioritΓ€t | |
360 | field_private_notes: Privater Kommentar |
|
360 | field_private_notes: Privater Kommentar | |
361 | field_project: Projekt |
|
361 | field_project: Projekt | |
362 | field_redirect_existing_links: Existierende Links umleiten |
|
362 | field_redirect_existing_links: Existierende Links umleiten | |
363 | field_regexp: RegulΓ€rer Ausdruck |
|
363 | field_regexp: RegulΓ€rer Ausdruck | |
364 | field_repository_is_default: Haupt-Repository |
|
364 | field_repository_is_default: Haupt-Repository | |
365 | field_role: Rolle |
|
365 | field_role: Rolle | |
366 | field_root_directory: Wurzelverzeichnis |
|
366 | field_root_directory: Wurzelverzeichnis | |
367 | field_scm_path_encoding: Pfad-Kodierung |
|
367 | field_scm_path_encoding: Pfad-Kodierung | |
368 | field_searchable: Durchsuchbar |
|
368 | field_searchable: Durchsuchbar | |
369 | field_sharing: Gemeinsame Verwendung |
|
369 | field_sharing: Gemeinsame Verwendung | |
370 | field_spent_on: Datum |
|
370 | field_spent_on: Datum | |
371 | field_start_date: Beginn |
|
371 | field_start_date: Beginn | |
372 | field_start_page: Hauptseite |
|
372 | field_start_page: Hauptseite | |
373 | field_status: Status |
|
373 | field_status: Status | |
374 | field_subject: Thema |
|
374 | field_subject: Thema | |
375 | field_subproject: Unterprojekt von |
|
375 | field_subproject: Unterprojekt von | |
376 | field_summary: Zusammenfassung |
|
376 | field_summary: Zusammenfassung | |
377 | field_text: Textfeld |
|
377 | field_text: Textfeld | |
378 | field_time_entries: Logzeit |
|
378 | field_time_entries: Logzeit | |
379 | field_time_zone: Zeitzone |
|
379 | field_time_zone: Zeitzone | |
380 | field_timeout: Auszeit (in Sekunden) |
|
380 | field_timeout: Auszeit (in Sekunden) | |
381 | field_title: Titel |
|
381 | field_title: Titel | |
382 | field_tracker: Tracker |
|
382 | field_tracker: Tracker | |
383 | field_type: Typ |
|
383 | field_type: Typ | |
384 | field_updated_on: Aktualisiert |
|
384 | field_updated_on: Aktualisiert | |
385 | field_url: URL |
|
385 | field_url: URL | |
386 | field_user: Benutzer |
|
386 | field_user: Benutzer | |
387 | field_users_visibility: Benutzer Sichtbarkeit |
|
387 | field_users_visibility: Benutzer Sichtbarkeit | |
388 | field_value: Wert |
|
388 | field_value: Wert | |
389 | field_version: Version |
|
389 | field_version: Version | |
390 | field_visible: Sichtbar |
|
390 | field_visible: Sichtbar | |
391 | field_warn_on_leaving_unsaved: Vor dem Verlassen einer Seite mit ungesichertem Text im Editor warnen |
|
391 | field_warn_on_leaving_unsaved: Vor dem Verlassen einer Seite mit ungesichertem Text im Editor warnen | |
392 | field_watcher: Beobachter |
|
392 | field_watcher: Beobachter | |
393 |
|
393 | |||
394 | general_csv_decimal_separator: ',' |
|
394 | general_csv_decimal_separator: ',' | |
395 | general_csv_encoding: ISO-8859-1 |
|
395 | general_csv_encoding: ISO-8859-1 | |
396 | general_csv_separator: ';' |
|
396 | general_csv_separator: ';' | |
397 | general_pdf_fontname: freesans |
|
397 | general_pdf_fontname: freesans | |
398 | general_first_day_of_week: '1' |
|
398 | general_first_day_of_week: '1' | |
399 | general_lang_name: 'German (Deutsch)' |
|
399 | general_lang_name: 'German (Deutsch)' | |
400 | general_text_No: 'Nein' |
|
400 | general_text_No: 'Nein' | |
401 | general_text_Yes: 'Ja' |
|
401 | general_text_Yes: 'Ja' | |
402 | general_text_no: 'nein' |
|
402 | general_text_no: 'nein' | |
403 | general_text_yes: 'ja' |
|
403 | general_text_yes: 'ja' | |
404 |
|
404 | |||
405 | label_activity: AktivitΓ€t |
|
405 | label_activity: AktivitΓ€t | |
406 | label_add_another_file: Eine weitere Datei hinzufΓΌgen |
|
406 | label_add_another_file: Eine weitere Datei hinzufΓΌgen | |
407 | label_add_note: Kommentar hinzufΓΌgen |
|
407 | label_add_note: Kommentar hinzufΓΌgen | |
408 | label_add_projects: Projekt hinzufΓΌgen |
|
408 | label_add_projects: Projekt hinzufΓΌgen | |
409 | label_added: hinzugefΓΌgt |
|
409 | label_added: hinzugefΓΌgt | |
410 | label_added_time_by: "Von %{author} vor %{age} hinzugefΓΌgt" |
|
410 | label_added_time_by: "Von %{author} vor %{age} hinzugefΓΌgt" | |
411 | label_additional_workflow_transitions_for_assignee: ZusΓ€tzliche Berechtigungen wenn der Benutzer der Zugewiesene ist |
|
411 | label_additional_workflow_transitions_for_assignee: ZusΓ€tzliche Berechtigungen wenn der Benutzer der Zugewiesene ist | |
412 | label_additional_workflow_transitions_for_author: ZusΓ€tzliche Berechtigungen wenn der Benutzer der Autor ist |
|
412 | label_additional_workflow_transitions_for_author: ZusΓ€tzliche Berechtigungen wenn der Benutzer der Autor ist | |
413 | label_administration: Administration |
|
413 | label_administration: Administration | |
414 | label_age: GeΓ€ndert vor |
|
414 | label_age: GeΓ€ndert vor | |
415 | label_ago: vor |
|
415 | label_ago: vor | |
416 | label_all: alle |
|
416 | label_all: alle | |
417 | label_all_time: gesamter Zeitraum |
|
417 | label_all_time: gesamter Zeitraum | |
418 | label_all_words: Alle WΓΆrter |
|
418 | label_all_words: Alle WΓΆrter | |
419 | label_and_its_subprojects: "%{value} und dessen Unterprojekte" |
|
419 | label_and_its_subprojects: "%{value} und dessen Unterprojekte" | |
420 | label_any: alle |
|
420 | label_any: alle | |
421 | label_any_issues_in_project: irgendein Ticket im Projekt |
|
421 | label_any_issues_in_project: irgendein Ticket im Projekt | |
422 | label_any_issues_not_in_project: irgendein Ticket nicht im Projekt |
|
422 | label_any_issues_not_in_project: irgendein Ticket nicht im Projekt | |
423 | label_api_access_key: API-ZugriffsschlΓΌssel |
|
423 | label_api_access_key: API-ZugriffsschlΓΌssel | |
424 | label_api_access_key_created_on: Der API-ZugriffsschlΓΌssel wurde vor %{value} erstellt |
|
424 | label_api_access_key_created_on: Der API-ZugriffsschlΓΌssel wurde vor %{value} erstellt | |
425 | label_applied_status: Zugewiesener Status |
|
425 | label_applied_status: Zugewiesener Status | |
426 | label_ascending: Aufsteigend |
|
426 | label_ascending: Aufsteigend | |
427 | label_ask: Nachfragen |
|
427 | label_ask: Nachfragen | |
428 | label_assigned_to_me_issues: Mir zugewiesene Tickets |
|
428 | label_assigned_to_me_issues: Mir zugewiesene Tickets | |
429 | label_associated_revisions: ZugehΓΆrige Revisionen |
|
429 | label_associated_revisions: ZugehΓΆrige Revisionen | |
430 | label_attachment: Datei |
|
430 | label_attachment: Datei | |
431 | label_attachment_delete: Anhang lΓΆschen |
|
431 | label_attachment_delete: Anhang lΓΆschen | |
432 | label_attachment_new: Neue Datei |
|
432 | label_attachment_new: Neue Datei | |
433 | label_attachment_plural: Dateien |
|
433 | label_attachment_plural: Dateien | |
434 | label_attribute: Attribut |
|
434 | label_attribute: Attribut | |
435 | label_attribute_of_assigned_to: "%{name} des Bearbeiters" |
|
435 | label_attribute_of_assigned_to: "%{name} des Bearbeiters" | |
436 | label_attribute_of_author: "%{name} des Autors" |
|
436 | label_attribute_of_author: "%{name} des Autors" | |
437 | label_attribute_of_fixed_version: "%{name} der Zielversion" |
|
437 | label_attribute_of_fixed_version: "%{name} der Zielversion" | |
438 | label_attribute_of_issue: "%{name} des Tickets" |
|
438 | label_attribute_of_issue: "%{name} des Tickets" | |
439 | label_attribute_of_project: "%{name} des Projekts" |
|
439 | label_attribute_of_project: "%{name} des Projekts" | |
440 | label_attribute_of_user: "%{name} des Benutzers" |
|
440 | label_attribute_of_user: "%{name} des Benutzers" | |
441 | label_attribute_plural: Attribute |
|
441 | label_attribute_plural: Attribute | |
442 | label_auth_source: Authentifizierungs-Modus |
|
442 | label_auth_source: Authentifizierungs-Modus | |
443 | label_auth_source_new: Neuer Authentifizierungs-Modus |
|
443 | label_auth_source_new: Neuer Authentifizierungs-Modus | |
444 | label_auth_source_plural: Authentifizierungs-Arten |
|
444 | label_auth_source_plural: Authentifizierungs-Arten | |
445 | label_authentication: Authentifizierung |
|
445 | label_authentication: Authentifizierung | |
446 | label_between: zwischen |
|
446 | label_between: zwischen | |
447 | label_blocked_by: Blockiert durch |
|
447 | label_blocked_by: Blockiert durch | |
448 | label_blocks: Blockiert |
|
448 | label_blocks: Blockiert | |
449 | label_board: Forum |
|
449 | label_board: Forum | |
450 | label_board_locked: Gesperrt |
|
450 | label_board_locked: Gesperrt | |
451 | label_board_new: Neues Forum |
|
451 | label_board_new: Neues Forum | |
452 | label_board_plural: Foren |
|
452 | label_board_plural: Foren | |
453 | label_board_sticky: Wichtig (immer oben) |
|
453 | label_board_sticky: Wichtig (immer oben) | |
454 | label_boolean: Boolean |
|
454 | label_boolean: Boolean | |
455 | label_branch: Zweig |
|
455 | label_branch: Zweig | |
456 | label_browse: Codebrowser |
|
456 | label_browse: Codebrowser | |
457 | label_bulk_edit_selected_issues: Alle ausgewΓ€hlten Tickets bearbeiten |
|
457 | label_bulk_edit_selected_issues: Alle ausgewΓ€hlten Tickets bearbeiten | |
458 | label_bulk_edit_selected_time_entries: AusgewΓ€hlte ZeitaufwΓ€nde bearbeiten |
|
458 | label_bulk_edit_selected_time_entries: AusgewΓ€hlte ZeitaufwΓ€nde bearbeiten | |
459 | label_calendar: Kalender |
|
459 | label_calendar: Kalender | |
460 | label_change_plural: Γnderungen |
|
460 | label_change_plural: Γnderungen | |
461 | label_change_properties: Eigenschaften Γ€ndern |
|
461 | label_change_properties: Eigenschaften Γ€ndern | |
462 | label_change_status: Statuswechsel |
|
462 | label_change_status: Statuswechsel | |
463 | label_change_view_all: Alle Γnderungen anzeigen |
|
463 | label_change_view_all: Alle Γnderungen anzeigen | |
464 | label_changes_details: Details aller Γnderungen |
|
464 | label_changes_details: Details aller Γnderungen | |
465 | label_changeset_plural: Changesets |
|
465 | label_changeset_plural: Changesets | |
466 | label_checkboxes: Checkboxen |
|
466 | label_checkboxes: Checkboxen | |
467 | label_check_for_updates: Auf Updates prΓΌfen |
|
467 | label_check_for_updates: Auf Updates prΓΌfen | |
468 | label_child_revision: Nachfolger |
|
468 | label_child_revision: Nachfolger | |
469 | label_chronological_order: in zeitlicher Reihenfolge |
|
469 | label_chronological_order: in zeitlicher Reihenfolge | |
470 | label_close_versions: VollstΓ€ndige Versionen schlieΓen |
|
470 | label_close_versions: VollstΓ€ndige Versionen schlieΓen | |
471 | label_closed_issues: geschlossen |
|
471 | label_closed_issues: geschlossen | |
472 | label_closed_issues_plural: geschlossen |
|
472 | label_closed_issues_plural: geschlossen | |
473 | label_comment: Kommentar |
|
473 | label_comment: Kommentar | |
474 | label_comment_add: Kommentar hinzufΓΌgen |
|
474 | label_comment_add: Kommentar hinzufΓΌgen | |
475 | label_comment_added: Kommentar hinzugefΓΌgt |
|
475 | label_comment_added: Kommentar hinzugefΓΌgt | |
476 | label_comment_delete: Kommentar lΓΆschen |
|
476 | label_comment_delete: Kommentar lΓΆschen | |
477 | label_comment_plural: Kommentare |
|
477 | label_comment_plural: Kommentare | |
478 | label_commits_per_author: Γbertragungen pro Autor |
|
478 | label_commits_per_author: Γbertragungen pro Autor | |
479 | label_commits_per_month: Γbertragungen pro Monat |
|
479 | label_commits_per_month: Γbertragungen pro Monat | |
480 | label_completed_versions: Abgeschlossene Versionen |
|
480 | label_completed_versions: Abgeschlossene Versionen | |
481 | label_confirmation: BestΓ€tigung |
|
481 | label_confirmation: BestΓ€tigung | |
482 | label_contains: enthΓ€lt |
|
482 | label_contains: enthΓ€lt | |
483 | label_copied: kopiert |
|
483 | label_copied: kopiert | |
484 | label_copied_from: Kopiert von |
|
484 | label_copied_from: Kopiert von | |
485 | label_copied_to: Kopiert nach |
|
485 | label_copied_to: Kopiert nach | |
486 | label_copy_attachments: AnhΓ€nge kopieren |
|
486 | label_copy_attachments: AnhΓ€nge kopieren | |
487 | label_copy_same_as_target: So wie das Ziel |
|
487 | label_copy_same_as_target: So wie das Ziel | |
488 | label_copy_source: Quelle |
|
488 | label_copy_source: Quelle | |
489 | label_copy_subtasks: Unteraufgaben kopieren |
|
489 | label_copy_subtasks: Unteraufgaben kopieren | |
490 | label_copy_target: Ziel |
|
490 | label_copy_target: Ziel | |
491 | label_copy_workflow_from: Workflow kopieren von |
|
491 | label_copy_workflow_from: Workflow kopieren von | |
492 | label_cross_project_descendants: Mit Unterprojekten |
|
492 | label_cross_project_descendants: Mit Unterprojekten | |
493 | label_cross_project_hierarchy: Mit Projekthierarchie |
|
493 | label_cross_project_hierarchy: Mit Projekthierarchie | |
494 | label_cross_project_system: Mit allen Projekten |
|
494 | label_cross_project_system: Mit allen Projekten | |
495 | label_cross_project_tree: Mit Projektbaum |
|
495 | label_cross_project_tree: Mit Projektbaum | |
496 | label_current_status: GegenwΓ€rtiger Status |
|
496 | label_current_status: GegenwΓ€rtiger Status | |
497 | label_current_version: GegenwΓ€rtige Version |
|
497 | label_current_version: GegenwΓ€rtige Version | |
498 | label_custom_field: Benutzerdefiniertes Feld |
|
498 | label_custom_field: Benutzerdefiniertes Feld | |
499 | label_custom_field_new: Neues Feld |
|
499 | label_custom_field_new: Neues Feld | |
500 | label_custom_field_plural: Benutzerdefinierte Felder |
|
500 | label_custom_field_plural: Benutzerdefinierte Felder | |
501 | label_custom_field_select_type: Bitte wΓ€hlen Sie den Objekttyp, zu dem das benutzerdefinierte Feld hinzugefΓΌgt werden soll |
|
501 | label_custom_field_select_type: Bitte wΓ€hlen Sie den Objekttyp, zu dem das benutzerdefinierte Feld hinzugefΓΌgt werden soll | |
502 | label_date: Datum |
|
502 | label_date: Datum | |
503 | label_date_from: Von |
|
503 | label_date_from: Von | |
504 | label_date_from_to: von %{start} bis %{end} |
|
504 | label_date_from_to: von %{start} bis %{end} | |
505 | label_date_range: Zeitraum |
|
505 | label_date_range: Zeitraum | |
506 | label_date_to: Bis |
|
506 | label_date_to: Bis | |
507 | label_day_plural: Tage |
|
507 | label_day_plural: Tage | |
508 | label_default: Standard |
|
508 | label_default: Standard | |
509 | label_default_columns: Standard-Spalten |
|
509 | label_default_columns: Standard-Spalten | |
510 | label_deleted: gelΓΆscht |
|
510 | label_deleted: gelΓΆscht | |
511 | label_descending: Absteigend |
|
511 | label_descending: Absteigend | |
512 | label_details: Details |
|
512 | label_details: Details | |
513 | label_diff: diff |
|
513 | label_diff: diff | |
514 | label_diff_inline: einspaltig |
|
514 | label_diff_inline: einspaltig | |
515 | label_diff_side_by_side: nebeneinander |
|
515 | label_diff_side_by_side: nebeneinander | |
516 | label_disabled: gesperrt |
|
516 | label_disabled: gesperrt | |
517 | label_display: Anzeige |
|
517 | label_display: Anzeige | |
518 | label_display_per_page: "Pro Seite: %{value}" |
|
518 | label_display_per_page: "Pro Seite: %{value}" | |
519 | label_display_used_statuses_only: Zeige nur Status an, die von diesem Tracker verwendet werden |
|
519 | label_display_used_statuses_only: Zeige nur Status an, die von diesem Tracker verwendet werden | |
520 | label_document: Dokument |
|
520 | label_document: Dokument | |
521 | label_document_added: Dokument hinzugefΓΌgt |
|
521 | label_document_added: Dokument hinzugefΓΌgt | |
522 | label_document_new: Neues Dokument |
|
522 | label_document_new: Neues Dokument | |
523 | label_document_plural: Dokumente |
|
523 | label_document_plural: Dokumente | |
524 | label_downloads_abbr: D/L |
|
524 | label_downloads_abbr: D/L | |
525 | label_drop_down_list: Dropdown-Liste |
|
525 | label_drop_down_list: Dropdown-Liste | |
526 | label_duplicated_by: Dupliziert durch |
|
526 | label_duplicated_by: Dupliziert durch | |
527 | label_duplicates: Duplikat von |
|
527 | label_duplicates: Duplikat von | |
528 | label_edit_attachments: AngehΓ€ngte Dateien bearbeiten |
|
528 | label_edit_attachments: AngehΓ€ngte Dateien bearbeiten | |
529 | label_end_to_end: Ende - Ende |
|
529 | label_end_to_end: Ende - Ende | |
530 | label_end_to_start: Ende - Anfang |
|
530 | label_end_to_start: Ende - Anfang | |
531 | label_enumeration_new: Neuer Wert |
|
531 | label_enumeration_new: Neuer Wert | |
532 | label_enumerations: AufzΓ€hlungen |
|
532 | label_enumerations: AufzΓ€hlungen | |
533 | label_environment: Umgebung |
|
533 | label_environment: Umgebung | |
534 | label_equals: ist |
|
534 | label_equals: ist | |
535 | label_example: Beispiel |
|
535 | label_example: Beispiel | |
536 | label_export_options: "%{export_format} Export-Eigenschaften" |
|
536 | label_export_options: "%{export_format} Export-Eigenschaften" | |
537 | label_export_to: "Auch abrufbar als:" |
|
537 | label_export_to: "Auch abrufbar als:" | |
538 | label_f_hour: "%{value} Stunde" |
|
538 | label_f_hour: "%{value} Stunde" | |
539 | label_f_hour_plural: "%{value} Stunden" |
|
539 | label_f_hour_plural: "%{value} Stunden" | |
540 | label_feed_plural: Feeds |
|
540 | label_feed_plural: Feeds | |
541 | label_feeds_access_key: Atom-ZugriffsschlΓΌssel |
|
541 | label_feeds_access_key: Atom-ZugriffsschlΓΌssel | |
542 | label_feeds_access_key_created_on: "Atom-ZugriffsschlΓΌssel vor %{value} erstellt" |
|
542 | label_feeds_access_key_created_on: "Atom-ZugriffsschlΓΌssel vor %{value} erstellt" | |
543 | label_fields_permissions: Feldberechtigungen |
|
543 | label_fields_permissions: Feldberechtigungen | |
544 | label_file_added: Datei hinzugefΓΌgt |
|
544 | label_file_added: Datei hinzugefΓΌgt | |
545 | label_file_plural: Dateien |
|
545 | label_file_plural: Dateien | |
546 | label_filter_add: Filter hinzufΓΌgen |
|
546 | label_filter_add: Filter hinzufΓΌgen | |
547 | label_filter_plural: Filter |
|
547 | label_filter_plural: Filter | |
548 | label_float: FlieΓkommazahl |
|
548 | label_float: FlieΓkommazahl | |
549 | label_follows: Nachfolger von |
|
549 | label_follows: Nachfolger von | |
550 | label_gantt: Gantt-Diagramm |
|
550 | label_gantt: Gantt-Diagramm | |
551 | label_gantt_progress_line: Fortschrittslinie |
|
551 | label_gantt_progress_line: Fortschrittslinie | |
552 | label_general: Allgemein |
|
552 | label_general: Allgemein | |
553 | label_generate_key: Generieren |
|
553 | label_generate_key: Generieren | |
554 | label_git_report_last_commit: Bericht des letzten Commits fΓΌr Dateien und Verzeichnisse |
|
554 | label_git_report_last_commit: Bericht des letzten Commits fΓΌr Dateien und Verzeichnisse | |
555 | label_greater_or_equal: ">=" |
|
555 | label_greater_or_equal: ">=" | |
556 | label_group: Gruppe |
|
556 | label_group: Gruppe | |
557 | label_group_anonymous: Anonyme Benutzer |
|
557 | label_group_anonymous: Anonyme Benutzer | |
558 | label_group_new: Neue Gruppe |
|
558 | label_group_new: Neue Gruppe | |
559 | label_group_non_member: Nichtmitglieder |
|
559 | label_group_non_member: Nichtmitglieder | |
560 | label_group_plural: Gruppen |
|
560 | label_group_plural: Gruppen | |
561 | label_help: Hilfe |
|
561 | label_help: Hilfe | |
562 | label_hidden: Versteckt |
|
562 | label_hidden: Versteckt | |
563 | label_history: Historie |
|
563 | label_history: Historie | |
564 | label_home: Hauptseite |
|
564 | label_home: Hauptseite | |
565 | label_in: in |
|
565 | label_in: in | |
566 | label_in_less_than: in weniger als |
|
566 | label_in_less_than: in weniger als | |
567 | label_in_more_than: in mehr als |
|
567 | label_in_more_than: in mehr als | |
568 | label_in_the_next_days: in den nΓ€chsten |
|
568 | label_in_the_next_days: in den nΓ€chsten | |
569 | label_in_the_past_days: in den letzten |
|
569 | label_in_the_past_days: in den letzten | |
570 | label_incoming_emails: Eingehende E-Mails |
|
570 | label_incoming_emails: Eingehende E-Mails | |
571 | label_index_by_date: Seiten nach Datum sortiert |
|
571 | label_index_by_date: Seiten nach Datum sortiert | |
572 | label_index_by_title: Seiten nach Titel sortiert |
|
572 | label_index_by_title: Seiten nach Titel sortiert | |
573 | label_information: Information |
|
573 | label_information: Information | |
574 | label_information_plural: Informationen |
|
574 | label_information_plural: Informationen | |
575 | label_integer: Zahl |
|
575 | label_integer: Zahl | |
576 | label_internal: Intern |
|
576 | label_internal: Intern | |
577 | label_issue: Ticket |
|
577 | label_issue: Ticket | |
578 | label_issue_added: Ticket hinzugefΓΌgt |
|
578 | label_issue_added: Ticket hinzugefΓΌgt | |
579 | label_issue_assigned_to_updated: Bearbeiter aktualisiert |
|
579 | label_issue_assigned_to_updated: Bearbeiter aktualisiert | |
580 | label_issue_category: Ticket-Kategorie |
|
580 | label_issue_category: Ticket-Kategorie | |
581 | label_issue_category_new: Neue Kategorie |
|
581 | label_issue_category_new: Neue Kategorie | |
582 | label_issue_category_plural: Ticket-Kategorien |
|
582 | label_issue_category_plural: Ticket-Kategorien | |
583 | label_issue_new: Neues Ticket |
|
583 | label_issue_new: Neues Ticket | |
584 | label_issue_note_added: Notiz hinzugefΓΌgt |
|
584 | label_issue_note_added: Notiz hinzugefΓΌgt | |
585 | label_issue_plural: Tickets |
|
585 | label_issue_plural: Tickets | |
586 | label_issue_priority_updated: PrioritΓ€t aktualisiert |
|
586 | label_issue_priority_updated: PrioritΓ€t aktualisiert | |
587 | label_issue_status: Ticket-Status |
|
587 | label_issue_status: Ticket-Status | |
588 | label_issue_status_new: Neuer Status |
|
588 | label_issue_status_new: Neuer Status | |
589 | label_issue_status_plural: Ticket-Status |
|
589 | label_issue_status_plural: Ticket-Status | |
590 | label_issue_status_updated: Status aktualisiert |
|
590 | label_issue_status_updated: Status aktualisiert | |
591 | label_issue_tracking: Tickets |
|
591 | label_issue_tracking: Tickets | |
592 | label_issue_updated: Ticket aktualisiert |
|
592 | label_issue_updated: Ticket aktualisiert | |
593 | label_issue_view_all: Alle Tickets anzeigen |
|
593 | label_issue_view_all: Alle Tickets anzeigen | |
594 | label_issue_watchers: Beobachter |
|
594 | label_issue_watchers: Beobachter | |
595 | label_issues_by: "Tickets pro %{value}" |
|
595 | label_issues_by: "Tickets pro %{value}" | |
596 | label_issues_visibility_all: Alle Tickets |
|
596 | label_issues_visibility_all: Alle Tickets | |
597 | label_issues_visibility_own: Tickets die folgender Benutzer erstellt hat oder die ihm zugewiesen sind |
|
597 | label_issues_visibility_own: Tickets die folgender Benutzer erstellt hat oder die ihm zugewiesen sind | |
598 | label_issues_visibility_public: Alle ΓΆffentlichen Tickets |
|
598 | label_issues_visibility_public: Alle ΓΆffentlichen Tickets | |
599 | label_item_position: "%{position}/%{count}" |
|
599 | label_item_position: "%{position}/%{count}" | |
600 | label_jump_to_a_project: Zu einem Projekt springen... |
|
600 | label_jump_to_a_project: Zu einem Projekt springen... | |
601 | label_language_based: SprachabhΓ€ngig |
|
601 | label_language_based: SprachabhΓ€ngig | |
602 | label_last_changes: "%{count} letzte Γnderungen" |
|
602 | label_last_changes: "%{count} letzte Γnderungen" | |
603 | label_last_login: Letzte Anmeldung |
|
603 | label_last_login: Letzte Anmeldung | |
604 | label_last_month: voriger Monat |
|
604 | label_last_month: voriger Monat | |
605 | label_last_n_days: "die letzten %{count} Tage" |
|
605 | label_last_n_days: "die letzten %{count} Tage" | |
606 | label_last_n_weeks: letzte %{count} Wochen |
|
606 | label_last_n_weeks: letzte %{count} Wochen | |
607 | label_last_week: vorige Woche |
|
607 | label_last_week: vorige Woche | |
608 | label_latest_compatible_version: Letzte kompatible Version |
|
608 | label_latest_compatible_version: Letzte kompatible Version | |
609 | label_latest_revision: Aktuellste Revision |
|
609 | label_latest_revision: Aktuellste Revision | |
610 | label_latest_revision_plural: Aktuellste Revisionen |
|
610 | label_latest_revision_plural: Aktuellste Revisionen | |
611 | label_ldap_authentication: LDAP-Authentifizierung |
|
611 | label_ldap_authentication: LDAP-Authentifizierung | |
612 | label_less_or_equal: "<=" |
|
612 | label_less_or_equal: "<=" | |
613 | label_less_than_ago: vor weniger als |
|
613 | label_less_than_ago: vor weniger als | |
614 | label_link: Link |
|
614 | label_link: Link | |
615 | label_link_copied_issue: Kopierte Tickets verlinken |
|
615 | label_link_copied_issue: Kopierte Tickets verlinken | |
616 | label_link_values_to: Werte mit URL verknΓΌpfen |
|
616 | label_link_values_to: Werte mit URL verknΓΌpfen | |
617 | label_list: Liste |
|
617 | label_list: Liste | |
618 | label_loading: Lade... |
|
618 | label_loading: Lade... | |
619 | label_logged_as: Angemeldet als |
|
619 | label_logged_as: Angemeldet als | |
620 | label_login: Anmelden |
|
620 | label_login: Anmelden | |
621 | label_login_with_open_id_option: oder mit OpenID anmelden |
|
621 | label_login_with_open_id_option: oder mit OpenID anmelden | |
622 | label_logout: Abmelden |
|
622 | label_logout: Abmelden | |
623 | label_only: nur |
|
623 | label_only: nur | |
624 | label_max_size: Maximale GrΓΆΓe |
|
624 | label_max_size: Maximale GrΓΆΓe | |
625 | label_me: ich |
|
625 | label_me: ich | |
626 | label_member: Mitglied |
|
626 | label_member: Mitglied | |
627 | label_member_new: Neues Mitglied |
|
627 | label_member_new: Neues Mitglied | |
628 | label_member_plural: Mitglieder |
|
628 | label_member_plural: Mitglieder | |
629 | label_message_last: Letzter Forenbeitrag |
|
629 | label_message_last: Letzter Forenbeitrag | |
630 | label_message_new: Neues Thema |
|
630 | label_message_new: Neues Thema | |
631 | label_message_plural: ForenbeitrΓ€ge |
|
631 | label_message_plural: ForenbeitrΓ€ge | |
632 | label_message_posted: Forenbeitrag hinzugefΓΌgt |
|
632 | label_message_posted: Forenbeitrag hinzugefΓΌgt | |
633 | label_min_max_length: LΓ€nge (Min. - Max.) |
|
633 | label_min_max_length: LΓ€nge (Min. - Max.) | |
634 | label_missing_api_access_key: Der API-ZugriffsschlΓΌssel fehlt. |
|
634 | label_missing_api_access_key: Der API-ZugriffsschlΓΌssel fehlt. | |
635 | label_missing_feeds_access_key: Der Atom-ZugriffsschlΓΌssel fehlt. |
|
635 | label_missing_feeds_access_key: Der Atom-ZugriffsschlΓΌssel fehlt. | |
636 | label_modified: geΓ€ndert |
|
636 | label_modified: geΓ€ndert | |
637 | label_module_plural: Module |
|
637 | label_module_plural: Module | |
638 | label_month: Monat |
|
638 | label_month: Monat | |
639 | label_months_from: Monate ab |
|
639 | label_months_from: Monate ab | |
640 | label_more: Mehr |
|
640 | label_more: Mehr | |
641 | label_more_than_ago: vor mehr als |
|
641 | label_more_than_ago: vor mehr als | |
642 | label_my_account: Mein Konto |
|
642 | label_my_account: Mein Konto | |
643 | label_my_page: Meine Seite |
|
643 | label_my_page: Meine Seite | |
644 | label_my_page_block: VerfΓΌgbare Widgets |
|
644 | label_my_page_block: VerfΓΌgbare Widgets | |
645 | label_my_projects: Meine Projekte |
|
645 | label_my_projects: Meine Projekte | |
646 | label_my_queries: Meine eigenen Abfragen |
|
646 | label_my_queries: Meine eigenen Abfragen | |
647 | label_new: Neu |
|
647 | label_new: Neu | |
648 | label_new_statuses_allowed: Neue Berechtigungen |
|
648 | label_new_statuses_allowed: Neue Berechtigungen | |
649 | label_news: News |
|
649 | label_news: News | |
650 | label_news_added: News hinzugefΓΌgt |
|
650 | label_news_added: News hinzugefΓΌgt | |
651 | label_news_comment_added: Kommentar zu einer News hinzugefΓΌgt |
|
651 | label_news_comment_added: Kommentar zu einer News hinzugefΓΌgt | |
652 | label_news_latest: Letzte News |
|
652 | label_news_latest: Letzte News | |
653 | label_news_new: News hinzufΓΌgen |
|
653 | label_news_new: News hinzufΓΌgen | |
654 | label_news_plural: News |
|
654 | label_news_plural: News | |
655 | label_news_view_all: Alle News anzeigen |
|
655 | label_news_view_all: Alle News anzeigen | |
656 | label_next: Weiter |
|
656 | label_next: Weiter | |
657 | label_no_change_option: (Keine Γnderung) |
|
657 | label_no_change_option: (Keine Γnderung) | |
658 | label_no_data: Nichts anzuzeigen |
|
658 | label_no_data: Nichts anzuzeigen | |
659 | label_no_issues_in_project: keine Tickets im Projekt |
|
659 | label_no_issues_in_project: keine Tickets im Projekt | |
660 | label_nobody: Niemand |
|
660 | label_nobody: Niemand | |
661 | label_none: kein |
|
661 | label_none: kein | |
662 | label_not_contains: enthΓ€lt nicht |
|
662 | label_not_contains: enthΓ€lt nicht | |
663 | label_not_equals: ist nicht |
|
663 | label_not_equals: ist nicht | |
664 | label_open_issues: offen |
|
664 | label_open_issues: offen | |
665 | label_open_issues_plural: offen |
|
665 | label_open_issues_plural: offen | |
666 | label_optional_description: Beschreibung (optional) |
|
666 | label_optional_description: Beschreibung (optional) | |
667 | label_options: Optionen |
|
667 | label_options: Optionen | |
668 | label_overall_activity: AktivitΓ€ten aller Projekte anzeigen |
|
668 | label_overall_activity: AktivitΓ€ten aller Projekte anzeigen | |
669 | label_overall_spent_time: Aufgewendete Zeit aller Projekte anzeigen |
|
669 | label_overall_spent_time: Aufgewendete Zeit aller Projekte anzeigen | |
670 | label_overview: Γbersicht |
|
670 | label_overview: Γbersicht | |
671 | label_parent_revision: VorgΓ€nger |
|
671 | label_parent_revision: VorgΓ€nger | |
672 | label_password_lost: Kennwort vergessen |
|
672 | label_password_lost: Kennwort vergessen | |
673 | label_permissions: Berechtigungen |
|
673 | label_permissions: Berechtigungen | |
674 | label_permissions_report: BerechtigungsΓΌbersicht |
|
674 | label_permissions_report: BerechtigungsΓΌbersicht | |
675 | label_personalize_page: Diese Seite anpassen |
|
675 | label_personalize_page: Diese Seite anpassen | |
676 | label_planning: Terminplanung |
|
676 | label_planning: Terminplanung | |
677 | label_please_login: Anmelden |
|
677 | label_please_login: Anmelden | |
678 | label_plugins: Plugins |
|
678 | label_plugins: Plugins | |
679 | label_precedes: VorgΓ€nger von |
|
679 | label_precedes: VorgΓ€nger von | |
680 | label_preferences: PrΓ€ferenzen |
|
680 | label_preferences: PrΓ€ferenzen | |
681 | label_preview: Vorschau |
|
681 | label_preview: Vorschau | |
682 | label_previous: ZurΓΌck |
|
682 | label_previous: ZurΓΌck | |
683 | label_principal_search: "Nach Benutzer oder Gruppe suchen:" |
|
683 | label_principal_search: "Nach Benutzer oder Gruppe suchen:" | |
684 | label_profile: Profil |
|
684 | label_profile: Profil | |
685 | label_project: Projekt |
|
685 | label_project: Projekt | |
686 | label_project_all: Alle Projekte |
|
686 | label_project_all: Alle Projekte | |
687 | label_project_copy_notifications: Sende Mailbenachrichtigungen beim Kopieren des Projekts. |
|
687 | label_project_copy_notifications: Sende Mailbenachrichtigungen beim Kopieren des Projekts. | |
688 | label_project_latest: Neueste Projekte |
|
688 | label_project_latest: Neueste Projekte | |
689 | label_project_new: Neues Projekt |
|
689 | label_project_new: Neues Projekt | |
690 | label_project_plural: Projekte |
|
690 | label_project_plural: Projekte | |
691 | label_public_projects: Γffentliche Projekte |
|
691 | label_public_projects: Γffentliche Projekte | |
692 | label_query: Benutzerdefinierte Abfrage |
|
692 | label_query: Benutzerdefinierte Abfrage | |
693 | label_query_new: Neue Abfrage |
|
693 | label_query_new: Neue Abfrage | |
694 | label_query_plural: Benutzerdefinierte Abfragen |
|
694 | label_query_plural: Benutzerdefinierte Abfragen | |
695 | label_radio_buttons: Radio-Buttons |
|
695 | label_radio_buttons: Radio-Buttons | |
696 | label_read: Lesen... |
|
696 | label_read: Lesen... | |
697 | label_readonly: Nur-Lese-Zugriff |
|
697 | label_readonly: Nur-Lese-Zugriff | |
698 | label_register: Registrieren |
|
698 | label_register: Registrieren | |
699 | label_registered_on: Angemeldet am |
|
699 | label_registered_on: Angemeldet am | |
700 | label_registration_activation_by_email: Kontoaktivierung durch E-Mail |
|
700 | label_registration_activation_by_email: Kontoaktivierung durch E-Mail | |
701 | label_registration_automatic_activation: Automatische Kontoaktivierung |
|
701 | label_registration_automatic_activation: Automatische Kontoaktivierung | |
702 | label_registration_manual_activation: Manuelle Kontoaktivierung |
|
702 | label_registration_manual_activation: Manuelle Kontoaktivierung | |
703 | label_related_issues: ZugehΓΆrige Tickets |
|
703 | label_related_issues: ZugehΓΆrige Tickets | |
704 | label_relates_to: Beziehung mit |
|
704 | label_relates_to: Beziehung mit | |
705 | label_relation_delete: Beziehung lΓΆschen |
|
705 | label_relation_delete: Beziehung lΓΆschen | |
706 | label_relation_new: Neue Beziehung |
|
706 | label_relation_new: Neue Beziehung | |
707 | label_renamed: umbenannt |
|
707 | label_renamed: umbenannt | |
708 | label_reply_plural: Antworten |
|
708 | label_reply_plural: Antworten | |
709 | label_report: Bericht |
|
709 | label_report: Bericht | |
710 | label_report_plural: Berichte |
|
710 | label_report_plural: Berichte | |
711 | label_reported_issues: Erstellte Tickets |
|
711 | label_reported_issues: Erstellte Tickets | |
712 | label_repository: Projektarchiv |
|
712 | label_repository: Projektarchiv | |
713 | label_repository_new: Neues Repository |
|
713 | label_repository_new: Neues Repository | |
714 | label_repository_plural: Projektarchive |
|
714 | label_repository_plural: Projektarchive | |
715 | label_required: Erforderlich |
|
715 | label_required: Erforderlich | |
716 | label_result_plural: Resultate |
|
716 | label_result_plural: Resultate | |
717 | label_reverse_chronological_order: in umgekehrter zeitlicher Reihenfolge |
|
717 | label_reverse_chronological_order: in umgekehrter zeitlicher Reihenfolge | |
718 | label_revision: Revision |
|
718 | label_revision: Revision | |
719 | label_revision_id: Revision %{value} |
|
719 | label_revision_id: Revision %{value} | |
720 | label_revision_plural: Revisionen |
|
720 | label_revision_plural: Revisionen | |
721 | label_roadmap: Roadmap |
|
721 | label_roadmap: Roadmap | |
722 | label_roadmap_due_in: "FΓ€llig in %{value}" |
|
722 | label_roadmap_due_in: "FΓ€llig in %{value}" | |
723 | label_roadmap_no_issues: Keine Tickets fΓΌr diese Version |
|
723 | label_roadmap_no_issues: Keine Tickets fΓΌr diese Version | |
724 | label_roadmap_overdue: "seit %{value} verspΓ€tet" |
|
724 | label_roadmap_overdue: "seit %{value} verspΓ€tet" | |
725 | label_role: Rolle |
|
725 | label_role: Rolle | |
726 | label_role_and_permissions: Rollen und Rechte |
|
726 | label_role_and_permissions: Rollen und Rechte | |
727 | label_role_anonymous: Anonymous |
|
727 | label_role_anonymous: Anonymous | |
728 | label_role_new: Neue Rolle |
|
728 | label_role_new: Neue Rolle | |
729 | label_role_non_member: Nichtmitglied |
|
729 | label_role_non_member: Nichtmitglied | |
730 | label_role_plural: Rollen |
|
730 | label_role_plural: Rollen | |
731 | label_scm: Versionskontrollsystem |
|
731 | label_scm: Versionskontrollsystem | |
732 | label_search: Suche |
|
732 | label_search: Suche | |
733 | label_search_for_watchers: Nach hinzufΓΌgbaren Beobachtern suchen |
|
733 | label_search_for_watchers: Nach hinzufΓΌgbaren Beobachtern suchen | |
734 | label_search_titles_only: Nur Titel durchsuchen |
|
734 | label_search_titles_only: Nur Titel durchsuchen | |
735 | label_send_information: Sende Kontoinformationen an Benutzer |
|
735 | label_send_information: Sende Kontoinformationen an Benutzer | |
736 | label_send_test_email: Test-E-Mail senden |
|
736 | label_send_test_email: Test-E-Mail senden | |
737 | label_session_expiration: Ende einer Sitzung |
|
737 | label_session_expiration: Ende einer Sitzung | |
738 | label_settings: Konfiguration |
|
738 | label_settings: Konfiguration | |
739 | label_show_closed_projects: Geschlossene Projekte anzeigen |
|
739 | label_show_closed_projects: Geschlossene Projekte anzeigen | |
740 | label_show_completed_versions: Abgeschlossene Versionen anzeigen |
|
740 | label_show_completed_versions: Abgeschlossene Versionen anzeigen | |
741 | label_sort: Sortierung |
|
741 | label_sort: Sortierung | |
742 | label_sort_by: "Sortiert nach %{value}" |
|
742 | label_sort_by: "Sortiert nach %{value}" | |
743 | label_sort_higher: Eins hΓΆher |
|
743 | label_sort_higher: Eins hΓΆher | |
744 | label_sort_highest: An den Anfang |
|
744 | label_sort_highest: An den Anfang | |
745 | label_sort_lower: Eins tiefer |
|
745 | label_sort_lower: Eins tiefer | |
746 | label_sort_lowest: Ans Ende |
|
746 | label_sort_lowest: Ans Ende | |
747 | label_spent_time: Aufgewendete Zeit |
|
747 | label_spent_time: Aufgewendete Zeit | |
748 | label_start_to_end: Anfang - Ende |
|
748 | label_start_to_end: Anfang - Ende | |
749 | label_start_to_start: Anfang - Anfang |
|
749 | label_start_to_start: Anfang - Anfang | |
750 | label_statistics: Statistiken |
|
750 | label_statistics: Statistiken | |
751 | label_status_transitions: StatusΓ€nderungen |
|
751 | label_status_transitions: StatusΓ€nderungen | |
752 | label_stay_logged_in: Angemeldet bleiben |
|
752 | label_stay_logged_in: Angemeldet bleiben | |
753 | label_string: Text |
|
753 | label_string: Text | |
754 | label_subproject_new: Neues Unterprojekt |
|
754 | label_subproject_new: Neues Unterprojekt | |
755 | label_subproject_plural: Unterprojekte |
|
755 | label_subproject_plural: Unterprojekte | |
756 | label_subtask_plural: Unteraufgaben |
|
756 | label_subtask_plural: Unteraufgaben | |
757 | label_tag: Markierung |
|
757 | label_tag: Markierung | |
758 | label_text: Langer Text |
|
758 | label_text: Langer Text | |
759 | label_theme: Stil |
|
759 | label_theme: Stil | |
760 | label_this_month: aktueller Monat |
|
760 | label_this_month: aktueller Monat | |
761 | label_this_week: aktuelle Woche |
|
761 | label_this_week: aktuelle Woche | |
762 | label_this_year: aktuelles Jahr |
|
762 | label_this_year: aktuelles Jahr | |
763 | label_time_entry_plural: BenΓΆtigte Zeit |
|
763 | label_time_entry_plural: BenΓΆtigte Zeit | |
764 | label_time_tracking: Zeiterfassung |
|
764 | label_time_tracking: Zeiterfassung | |
765 | label_today: heute |
|
765 | label_today: heute | |
766 | label_topic_plural: Themen |
|
766 | label_topic_plural: Themen | |
767 | label_total: Gesamtzahl |
|
767 | label_total: Gesamtzahl | |
768 | label_total_time: Gesamtzeit |
|
768 | label_total_time: Gesamtzeit | |
769 | label_tracker: Tracker |
|
769 | label_tracker: Tracker | |
770 | label_tracker_new: Neuer Tracker |
|
770 | label_tracker_new: Neuer Tracker | |
771 | label_tracker_plural: Tracker |
|
771 | label_tracker_plural: Tracker | |
772 | label_unknown_plugin: Unbekanntes Plugin |
|
772 | label_unknown_plugin: Unbekanntes Plugin | |
773 | label_update_issue_done_ratios: Ticket-Fortschritt aktualisieren |
|
773 | label_update_issue_done_ratios: Ticket-Fortschritt aktualisieren | |
774 | label_updated_time: "Vor %{value} aktualisiert" |
|
774 | label_updated_time: "Vor %{value} aktualisiert" | |
775 | label_updated_time_by: "Von %{author} vor %{age} aktualisiert" |
|
775 | label_updated_time_by: "Von %{author} vor %{age} aktualisiert" | |
776 | label_used_by: Benutzt von |
|
776 | label_used_by: Benutzt von | |
777 | label_user: Benutzer |
|
777 | label_user: Benutzer | |
778 | label_user_activity: "AktivitΓ€t von %{value}" |
|
778 | label_user_activity: "AktivitΓ€t von %{value}" | |
779 | label_user_anonymous: Anonym |
|
779 | label_user_anonymous: Anonym | |
780 | label_user_mail_no_self_notified: "Ich mΓΆchte nicht ΓΌber Γnderungen benachrichtigt werden, die ich selbst durchfΓΌhre." |
|
780 | label_user_mail_no_self_notified: "Ich mΓΆchte nicht ΓΌber Γnderungen benachrichtigt werden, die ich selbst durchfΓΌhre." | |
781 | label_user_mail_option_all: "FΓΌr alle Ereignisse in all meinen Projekten" |
|
781 | label_user_mail_option_all: "FΓΌr alle Ereignisse in all meinen Projekten" | |
782 | label_user_mail_option_none: Keine Ereignisse |
|
782 | label_user_mail_option_none: Keine Ereignisse | |
783 | label_user_mail_option_only_assigned: Nur fΓΌr Aufgaben fΓΌr die ich zustΓ€ndig bin |
|
783 | label_user_mail_option_only_assigned: Nur fΓΌr Aufgaben fΓΌr die ich zustΓ€ndig bin | |
784 | label_user_mail_option_only_my_events: Nur fΓΌr Aufgaben die ich beobachte oder an welchen ich mitarbeite |
|
784 | label_user_mail_option_only_my_events: Nur fΓΌr Aufgaben die ich beobachte oder an welchen ich mitarbeite | |
785 | label_user_mail_option_only_owner: Nur fΓΌr Aufgaben die ich angelegt habe |
|
785 | label_user_mail_option_only_owner: Nur fΓΌr Aufgaben die ich angelegt habe | |
786 | label_user_mail_option_selected: "FΓΌr alle Ereignisse in den ausgewΓ€hlten Projekten" |
|
786 | label_user_mail_option_selected: "FΓΌr alle Ereignisse in den ausgewΓ€hlten Projekten" | |
787 | label_user_new: Neuer Benutzer |
|
787 | label_user_new: Neuer Benutzer | |
788 | label_user_plural: Benutzer |
|
788 | label_user_plural: Benutzer | |
789 | label_user_search: "Nach Benutzer suchen:" |
|
789 | label_user_search: "Nach Benutzer suchen:" | |
790 | label_users_visibility_all: Alle aktiven Benutzer |
|
790 | label_users_visibility_all: Alle aktiven Benutzer | |
791 | label_users_visibility_members_of_visible_projects: Mitglieder von sichtbaren Projekten |
|
791 | label_users_visibility_members_of_visible_projects: Mitglieder von sichtbaren Projekten | |
792 | label_version: Version |
|
792 | label_version: Version | |
793 | label_version_new: Neue Version |
|
793 | label_version_new: Neue Version | |
794 | label_version_plural: Versionen |
|
794 | label_version_plural: Versionen | |
795 | label_version_sharing_descendants: Mit Unterprojekten |
|
795 | label_version_sharing_descendants: Mit Unterprojekten | |
796 | label_version_sharing_hierarchy: Mit Projekthierarchie |
|
796 | label_version_sharing_hierarchy: Mit Projekthierarchie | |
797 | label_version_sharing_none: Nicht gemeinsam verwenden |
|
797 | label_version_sharing_none: Nicht gemeinsam verwenden | |
798 | label_version_sharing_system: Mit allen Projekten |
|
798 | label_version_sharing_system: Mit allen Projekten | |
799 | label_version_sharing_tree: Mit Projektbaum |
|
799 | label_version_sharing_tree: Mit Projektbaum | |
800 | label_view_all_revisions: Alle Revisionen anzeigen |
|
800 | label_view_all_revisions: Alle Revisionen anzeigen | |
801 | label_view_diff: Unterschiede anzeigen |
|
801 | label_view_diff: Unterschiede anzeigen | |
802 | label_view_revisions: Revisionen anzeigen |
|
802 | label_view_revisions: Revisionen anzeigen | |
803 | label_visibility_private: nur fΓΌr mich |
|
803 | label_visibility_private: nur fΓΌr mich | |
804 | label_visibility_public: fΓΌr jeden Benutzer |
|
804 | label_visibility_public: fΓΌr jeden Benutzer | |
805 | label_visibility_roles: nur fΓΌr diese Rollen |
|
805 | label_visibility_roles: nur fΓΌr diese Rollen | |
806 | label_watched_issues: Beobachtete Tickets |
|
806 | label_watched_issues: Beobachtete Tickets | |
807 | label_week: Woche |
|
807 | label_week: Woche | |
808 | label_wiki: Wiki |
|
808 | label_wiki: Wiki | |
809 | label_wiki_content_added: Wiki-Seite hinzugefΓΌgt |
|
809 | label_wiki_content_added: Wiki-Seite hinzugefΓΌgt | |
810 | label_wiki_content_updated: Wiki-Seite aktualisiert |
|
810 | label_wiki_content_updated: Wiki-Seite aktualisiert | |
811 | label_wiki_edit: Wiki-Bearbeitung |
|
811 | label_wiki_edit: Wiki-Bearbeitung | |
812 | label_wiki_edit_plural: Wiki-Bearbeitungen |
|
812 | label_wiki_edit_plural: Wiki-Bearbeitungen | |
813 | label_wiki_page: Wiki-Seite |
|
813 | label_wiki_page: Wiki-Seite | |
814 | label_wiki_page_plural: Wiki-Seiten |
|
814 | label_wiki_page_plural: Wiki-Seiten | |
815 | label_workflow: Workflow |
|
815 | label_workflow: Workflow | |
816 | label_x_closed_issues_abbr: |
|
816 | label_x_closed_issues_abbr: | |
817 | zero: 0 geschlossen |
|
817 | zero: 0 geschlossen | |
818 | one: 1 geschlossen |
|
818 | one: 1 geschlossen | |
819 | other: "%{count} geschlossen" |
|
819 | other: "%{count} geschlossen" | |
820 | label_x_comments: |
|
820 | label_x_comments: | |
821 | zero: keine Kommentare |
|
821 | zero: keine Kommentare | |
822 | one: 1 Kommentar |
|
822 | one: 1 Kommentar | |
823 | other: "%{count} Kommentare" |
|
823 | other: "%{count} Kommentare" | |
824 | label_x_issues: |
|
824 | label_x_issues: | |
825 | zero: 0 Tickets |
|
825 | zero: 0 Tickets | |
826 | one: 1 Ticket |
|
826 | one: 1 Ticket | |
827 | other: "%{count} Tickets" |
|
827 | other: "%{count} Tickets" | |
828 | label_x_open_issues_abbr: |
|
828 | label_x_open_issues_abbr: | |
829 | zero: 0 offen |
|
829 | zero: 0 offen | |
830 | one: 1 offen |
|
830 | one: 1 offen | |
831 | other: "%{count} offen" |
|
831 | other: "%{count} offen" | |
832 | label_x_open_issues_abbr_on_total: |
|
832 | label_x_open_issues_abbr_on_total: | |
833 | zero: 0 offen / %{total} |
|
833 | zero: 0 offen / %{total} | |
834 | one: 1 offen / %{total} |
|
834 | one: 1 offen / %{total} | |
835 | other: "%{count} offen / %{total}" |
|
835 | other: "%{count} offen / %{total}" | |
836 | label_x_projects: |
|
836 | label_x_projects: | |
837 | zero: keine Projekte |
|
837 | zero: keine Projekte | |
838 | one: 1 Projekt |
|
838 | one: 1 Projekt | |
839 | other: "%{count} Projekte" |
|
839 | other: "%{count} Projekte" | |
840 | label_year: Jahr |
|
840 | label_year: Jahr | |
841 | label_yesterday: gestern |
|
841 | label_yesterday: gestern | |
842 |
|
842 | |||
843 | mail_body_account_activation_request: "Ein neuer Benutzer (%{value}) hat sich registriert. Sein Konto wartet auf Ihre Genehmigung:" |
|
843 | mail_body_account_activation_request: "Ein neuer Benutzer (%{value}) hat sich registriert. Sein Konto wartet auf Ihre Genehmigung:" | |
844 | mail_body_account_information: Ihre Konto-Informationen |
|
844 | mail_body_account_information: Ihre Konto-Informationen | |
845 | mail_body_account_information_external: "Sie kΓΆnnen sich mit Ihrem Konto %{value} anmelden." |
|
845 | mail_body_account_information_external: "Sie kΓΆnnen sich mit Ihrem Konto %{value} anmelden." | |
846 | mail_body_lost_password: 'Benutzen Sie den folgenden Link, um Ihr Kennwort zu Γ€ndern:' |
|
846 | mail_body_lost_password: 'Benutzen Sie den folgenden Link, um Ihr Kennwort zu Γ€ndern:' | |
847 | mail_body_register: 'Um Ihr Konto zu aktivieren, benutzen Sie folgenden Link:' |
|
847 | mail_body_register: 'Um Ihr Konto zu aktivieren, benutzen Sie folgenden Link:' | |
848 | mail_body_reminder: "%{count} Tickets, die Ihnen zugewiesen sind, mΓΌssen in den nΓ€chsten %{days} Tagen abgegeben werden:" |
|
848 | mail_body_reminder: "%{count} Tickets, die Ihnen zugewiesen sind, mΓΌssen in den nΓ€chsten %{days} Tagen abgegeben werden:" | |
849 | mail_body_wiki_content_added: "Die Wiki-Seite '%{id}' wurde von %{author} hinzugefΓΌgt." |
|
849 | mail_body_wiki_content_added: "Die Wiki-Seite '%{id}' wurde von %{author} hinzugefΓΌgt." | |
850 | mail_body_wiki_content_updated: "Die Wiki-Seite '%{id}' wurde von %{author} aktualisiert." |
|
850 | mail_body_wiki_content_updated: "Die Wiki-Seite '%{id}' wurde von %{author} aktualisiert." | |
851 | mail_subject_account_activation_request: "Antrag auf %{value} Kontoaktivierung" |
|
851 | mail_subject_account_activation_request: "Antrag auf %{value} Kontoaktivierung" | |
852 | mail_subject_lost_password: "Ihr %{value} Kennwort" |
|
852 | mail_subject_lost_password: "Ihr %{value} Kennwort" | |
853 | mail_subject_register: "%{value} Kontoaktivierung" |
|
853 | mail_subject_register: "%{value} Kontoaktivierung" | |
854 | mail_subject_reminder: "%{count} Tickets mΓΌssen in den nΓ€chsten %{days} Tagen abgegeben werden" |
|
854 | mail_subject_reminder: "%{count} Tickets mΓΌssen in den nΓ€chsten %{days} Tagen abgegeben werden" | |
855 | mail_subject_wiki_content_added: "Wiki-Seite '%{id}' hinzugefΓΌgt" |
|
855 | mail_subject_wiki_content_added: "Wiki-Seite '%{id}' hinzugefΓΌgt" | |
856 | mail_subject_wiki_content_updated: "Wiki-Seite '%{id}' erfolgreich aktualisiert" |
|
856 | mail_subject_wiki_content_updated: "Wiki-Seite '%{id}' erfolgreich aktualisiert" | |
857 |
|
857 | |||
858 | notice_account_activated: Ihr Konto ist aktiviert. Sie kΓΆnnen sich jetzt anmelden. |
|
858 | notice_account_activated: Ihr Konto ist aktiviert. Sie kΓΆnnen sich jetzt anmelden. | |
859 | notice_account_deleted: Ihr Benutzerkonto wurde unwiderruflich gelΓΆscht. |
|
859 | notice_account_deleted: Ihr Benutzerkonto wurde unwiderruflich gelΓΆscht. | |
860 | notice_account_invalid_creditentials: Benutzer oder Kennwort ist ungΓΌltig. |
|
860 | notice_account_invalid_creditentials: Benutzer oder Kennwort ist ungΓΌltig. | |
861 | notice_account_lost_email_sent: Eine E-Mail mit Anweisungen, ein neues Kennwort zu wΓ€hlen, wurde Ihnen geschickt. |
|
861 | notice_account_lost_email_sent: Eine E-Mail mit Anweisungen, ein neues Kennwort zu wΓ€hlen, wurde Ihnen geschickt. | |
862 | notice_account_locked: Ihr Konto ist gesperrt. |
|
862 | notice_account_locked: Ihr Konto ist gesperrt. | |
863 | notice_account_not_activated_yet: Sie haben Ihr Konto noch nicht aktiviert. Wenn Sie die Aktivierungsmail erneut erhalten wollen, <a href="%{url}">klicken Sie bitte hier</a>. |
|
863 | notice_account_not_activated_yet: Sie haben Ihr Konto noch nicht aktiviert. Wenn Sie die Aktivierungsmail erneut erhalten wollen, <a href="%{url}">klicken Sie bitte hier</a>. | |
864 | notice_account_password_updated: Kennwort wurde erfolgreich aktualisiert. |
|
864 | notice_account_password_updated: Kennwort wurde erfolgreich aktualisiert. | |
865 | notice_account_pending: "Ihr Konto wurde erstellt und wartet jetzt auf die Genehmigung des Administrators." |
|
865 | notice_account_pending: "Ihr Konto wurde erstellt und wartet jetzt auf die Genehmigung des Administrators." | |
866 | notice_account_register_done: Konto wurde erfolgreich angelegt. Eine E-Mail mit weiteren Instruktionen zur Kontoaktivierung wurde an %{email} gesendet. |
|
866 | notice_account_register_done: Konto wurde erfolgreich angelegt. Eine E-Mail mit weiteren Instruktionen zur Kontoaktivierung wurde an %{email} gesendet. | |
867 | notice_account_unknown_email: Unbekannter Benutzer. |
|
867 | notice_account_unknown_email: Unbekannter Benutzer. | |
868 | notice_account_updated: Konto wurde erfolgreich aktualisiert. |
|
868 | notice_account_updated: Konto wurde erfolgreich aktualisiert. | |
869 | notice_account_wrong_password: Falsches Kennwort. |
|
869 | notice_account_wrong_password: Falsches Kennwort. | |
870 | notice_api_access_key_reseted: Ihr API-ZugriffsschlΓΌssel wurde zurΓΌckgesetzt. |
|
870 | notice_api_access_key_reseted: Ihr API-ZugriffsschlΓΌssel wurde zurΓΌckgesetzt. | |
871 | notice_can_t_change_password: Dieses Konto verwendet eine externe Authentifizierungs-Quelle. UnmΓΆglich, das Kennwort zu Γ€ndern. |
|
871 | notice_can_t_change_password: Dieses Konto verwendet eine externe Authentifizierungs-Quelle. UnmΓΆglich, das Kennwort zu Γ€ndern. | |
872 | notice_default_data_loaded: Die Standard-Konfiguration wurde erfolgreich geladen. |
|
872 | notice_default_data_loaded: Die Standard-Konfiguration wurde erfolgreich geladen. | |
873 | notice_email_error: "Beim Senden einer E-Mail ist ein Fehler aufgetreten (%{value})." |
|
873 | notice_email_error: "Beim Senden einer E-Mail ist ein Fehler aufgetreten (%{value})." | |
874 | notice_email_sent: "Eine E-Mail wurde an %{value} gesendet." |
|
874 | notice_email_sent: "Eine E-Mail wurde an %{value} gesendet." | |
875 | notice_failed_to_save_issues: "%{count} von %{total} ausgewΓ€hlten Tickets konnte(n) nicht gespeichert werden: %{ids}." |
|
875 | notice_failed_to_save_issues: "%{count} von %{total} ausgewΓ€hlten Tickets konnte(n) nicht gespeichert werden: %{ids}." | |
876 | notice_failed_to_save_members: "Benutzer konnte nicht gespeichert werden: %{errors}." |
|
876 | notice_failed_to_save_members: "Benutzer konnte nicht gespeichert werden: %{errors}." | |
877 | notice_failed_to_save_time_entries: "Gescheitert %{count} ZeiteintrΓ€ge fΓΌr %{total} von ausgewΓ€hlten: %{ids} zu speichern." |
|
877 | notice_failed_to_save_time_entries: "Gescheitert %{count} ZeiteintrΓ€ge fΓΌr %{total} von ausgewΓ€hlten: %{ids} zu speichern." | |
878 | notice_feeds_access_key_reseted: Ihr Atom-ZugriffsschlΓΌssel wurde zurΓΌckgesetzt. |
|
878 | notice_feeds_access_key_reseted: Ihr Atom-ZugriffsschlΓΌssel wurde zurΓΌckgesetzt. | |
879 | notice_file_not_found: Anhang existiert nicht oder ist gelΓΆscht worden. |
|
879 | notice_file_not_found: Anhang existiert nicht oder ist gelΓΆscht worden. | |
880 | notice_gantt_chart_truncated: Die Grafik ist unvollstΓ€ndig, da das Maximum der anzeigbaren Aufgaben ΓΌberschritten wurde (%{max}) |
|
880 | notice_gantt_chart_truncated: Die Grafik ist unvollstΓ€ndig, da das Maximum der anzeigbaren Aufgaben ΓΌberschritten wurde (%{max}) | |
881 | notice_issue_done_ratios_updated: Der Ticket-Fortschritt wurde aktualisiert. |
|
881 | notice_issue_done_ratios_updated: Der Ticket-Fortschritt wurde aktualisiert. | |
882 | notice_issue_successful_create: Ticket %{id} erstellt. |
|
882 | notice_issue_successful_create: Ticket %{id} erstellt. | |
883 | notice_issue_update_conflict: Das Ticket wurde wΓ€hrend Ihrer Bearbeitung von einem anderen Nutzer ΓΌberarbeitet. |
|
883 | notice_issue_update_conflict: Das Ticket wurde wΓ€hrend Ihrer Bearbeitung von einem anderen Nutzer ΓΌberarbeitet. | |
884 | notice_locking_conflict: Datum wurde von einem anderen Benutzer geΓ€ndert. |
|
884 | notice_locking_conflict: Datum wurde von einem anderen Benutzer geΓ€ndert. | |
885 | notice_new_password_must_be_different: Das neue Passwort muss sich vom dem aktuellen |
|
885 | notice_new_password_must_be_different: Das neue Passwort muss sich vom dem aktuellen | |
886 | unterscheiden |
|
886 | unterscheiden | |
887 | notice_no_issue_selected: "Kein Ticket ausgewΓ€hlt! Bitte wΓ€hlen Sie die Tickets, die Sie bearbeiten mΓΆchten." |
|
887 | notice_no_issue_selected: "Kein Ticket ausgewΓ€hlt! Bitte wΓ€hlen Sie die Tickets, die Sie bearbeiten mΓΆchten." | |
888 | notice_not_authorized: Sie sind nicht berechtigt, auf diese Seite zuzugreifen. |
|
888 | notice_not_authorized: Sie sind nicht berechtigt, auf diese Seite zuzugreifen. | |
889 | notice_not_authorized_archived_project: Das Projekt wurde archiviert und ist daher nicht nicht verfΓΌgbar. |
|
889 | notice_not_authorized_archived_project: Das Projekt wurde archiviert und ist daher nicht nicht verfΓΌgbar. | |
890 | notice_successful_connection: Verbindung erfolgreich. |
|
890 | notice_successful_connection: Verbindung erfolgreich. | |
891 | notice_successful_create: Erfolgreich angelegt |
|
891 | notice_successful_create: Erfolgreich angelegt | |
892 | notice_successful_delete: Erfolgreich gelΓΆscht. |
|
892 | notice_successful_delete: Erfolgreich gelΓΆscht. | |
893 | notice_successful_update: Erfolgreich aktualisiert. |
|
893 | notice_successful_update: Erfolgreich aktualisiert. | |
894 | notice_unable_delete_time_entry: Der Zeiterfassungseintrag konnte nicht gelΓΆscht werden. |
|
894 | notice_unable_delete_time_entry: Der Zeiterfassungseintrag konnte nicht gelΓΆscht werden. | |
895 | notice_unable_delete_version: Die Version konnte nicht gelΓΆscht werden. |
|
895 | notice_unable_delete_version: Die Version konnte nicht gelΓΆscht werden. | |
896 | notice_user_successful_create: Benutzer %{id} angelegt. |
|
896 | notice_user_successful_create: Benutzer %{id} angelegt. | |
897 |
|
897 | |||
898 | permission_add_issue_notes: Kommentare hinzufΓΌgen |
|
898 | permission_add_issue_notes: Kommentare hinzufΓΌgen | |
899 | permission_add_issue_watchers: Beobachter hinzufΓΌgen |
|
899 | permission_add_issue_watchers: Beobachter hinzufΓΌgen | |
900 | permission_add_issues: Tickets hinzufΓΌgen |
|
900 | permission_add_issues: Tickets hinzufΓΌgen | |
901 | permission_add_messages: ForenbeitrΓ€ge hinzufΓΌgen |
|
901 | permission_add_messages: ForenbeitrΓ€ge hinzufΓΌgen | |
902 | permission_add_project: Projekt erstellen |
|
902 | permission_add_project: Projekt erstellen | |
903 | permission_add_subprojects: Unterprojekte erstellen |
|
903 | permission_add_subprojects: Unterprojekte erstellen | |
904 | permission_add_documents: Dokumente hinzufΓΌgen |
|
904 | permission_add_documents: Dokumente hinzufΓΌgen | |
905 | permission_browse_repository: Projektarchiv ansehen |
|
905 | permission_browse_repository: Projektarchiv ansehen | |
906 | permission_close_project: SchlieΓen / erneutes Γffnen eines Projekts |
|
906 | permission_close_project: SchlieΓen / erneutes Γffnen eines Projekts | |
907 | permission_comment_news: News kommentieren |
|
907 | permission_comment_news: News kommentieren | |
908 | permission_commit_access: Commit-Zugriff |
|
908 | permission_commit_access: Commit-Zugriff | |
909 | permission_delete_issue_watchers: Beobachter lΓΆschen |
|
909 | permission_delete_issue_watchers: Beobachter lΓΆschen | |
910 | permission_delete_issues: Tickets lΓΆschen |
|
910 | permission_delete_issues: Tickets lΓΆschen | |
911 | permission_delete_messages: ForenbeitrΓ€ge lΓΆschen |
|
911 | permission_delete_messages: ForenbeitrΓ€ge lΓΆschen | |
912 | permission_delete_own_messages: Eigene ForenbeitrΓ€ge lΓΆschen |
|
912 | permission_delete_own_messages: Eigene ForenbeitrΓ€ge lΓΆschen | |
913 | permission_delete_wiki_pages: Wiki-Seiten lΓΆschen |
|
913 | permission_delete_wiki_pages: Wiki-Seiten lΓΆschen | |
914 | permission_delete_wiki_pages_attachments: AnhΓ€nge lΓΆschen |
|
914 | permission_delete_wiki_pages_attachments: AnhΓ€nge lΓΆschen | |
915 | permission_delete_documents: Dokumente lΓΆschen |
|
915 | permission_delete_documents: Dokumente lΓΆschen | |
916 | permission_edit_issue_notes: Kommentare bearbeiten |
|
916 | permission_edit_issue_notes: Kommentare bearbeiten | |
917 | permission_edit_issues: Tickets bearbeiten |
|
917 | permission_edit_issues: Tickets bearbeiten | |
918 | permission_edit_messages: ForenbeitrΓ€ge bearbeiten |
|
918 | permission_edit_messages: ForenbeitrΓ€ge bearbeiten | |
919 | permission_edit_own_issue_notes: Eigene Kommentare bearbeiten |
|
919 | permission_edit_own_issue_notes: Eigene Kommentare bearbeiten | |
920 | permission_edit_own_messages: Eigene ForenbeitrΓ€ge bearbeiten |
|
920 | permission_edit_own_messages: Eigene ForenbeitrΓ€ge bearbeiten | |
921 | permission_edit_own_time_entries: Selbst gebuchte AufwΓ€nde bearbeiten |
|
921 | permission_edit_own_time_entries: Selbst gebuchte AufwΓ€nde bearbeiten | |
922 | permission_edit_project: Projekt bearbeiten |
|
922 | permission_edit_project: Projekt bearbeiten | |
923 | permission_edit_time_entries: Gebuchte AufwΓ€nde bearbeiten |
|
923 | permission_edit_time_entries: Gebuchte AufwΓ€nde bearbeiten | |
924 | permission_edit_wiki_pages: Wiki-Seiten bearbeiten |
|
924 | permission_edit_wiki_pages: Wiki-Seiten bearbeiten | |
925 | permission_edit_documents: Dokumente bearbeiten |
|
925 | permission_edit_documents: Dokumente bearbeiten | |
926 | permission_export_wiki_pages: Wiki-Seiten exportieren |
|
926 | permission_export_wiki_pages: Wiki-Seiten exportieren | |
927 | permission_log_time: AufwΓ€nde buchen |
|
927 | permission_log_time: AufwΓ€nde buchen | |
928 | permission_manage_boards: Foren verwalten |
|
928 | permission_manage_boards: Foren verwalten | |
929 | permission_manage_categories: Ticket-Kategorien verwalten |
|
929 | permission_manage_categories: Ticket-Kategorien verwalten | |
930 | permission_manage_files: Dateien verwalten |
|
930 | permission_manage_files: Dateien verwalten | |
931 | permission_manage_issue_relations: Ticket-Beziehungen verwalten |
|
931 | permission_manage_issue_relations: Ticket-Beziehungen verwalten | |
932 | permission_manage_members: Mitglieder verwalten |
|
932 | permission_manage_members: Mitglieder verwalten | |
933 | permission_manage_news: News verwalten |
|
933 | permission_manage_news: News verwalten | |
934 | permission_manage_project_activities: AktivitΓ€ten (Zeiterfassung) verwalten |
|
934 | permission_manage_project_activities: AktivitΓ€ten (Zeiterfassung) verwalten | |
935 | permission_manage_public_queries: Γffentliche Filter verwalten |
|
935 | permission_manage_public_queries: Γffentliche Filter verwalten | |
936 | permission_manage_related_issues: ZugehΓΆrige Tickets verwalten |
|
936 | permission_manage_related_issues: ZugehΓΆrige Tickets verwalten | |
937 | permission_manage_repository: Projektarchiv verwalten |
|
937 | permission_manage_repository: Projektarchiv verwalten | |
938 | permission_manage_subtasks: Unteraufgaben verwalten |
|
938 | permission_manage_subtasks: Unteraufgaben verwalten | |
939 | permission_manage_versions: Versionen verwalten |
|
939 | permission_manage_versions: Versionen verwalten | |
940 | permission_manage_wiki: Wiki verwalten |
|
940 | permission_manage_wiki: Wiki verwalten | |
941 | permission_move_issues: Tickets verschieben |
|
941 | permission_move_issues: Tickets verschieben | |
942 | permission_protect_wiki_pages: Wiki-Seiten schΓΌtzen |
|
942 | permission_protect_wiki_pages: Wiki-Seiten schΓΌtzen | |
943 | permission_rename_wiki_pages: Wiki-Seiten umbenennen |
|
943 | permission_rename_wiki_pages: Wiki-Seiten umbenennen | |
944 | permission_save_queries: Filter speichern |
|
944 | permission_save_queries: Filter speichern | |
945 | permission_select_project_modules: Projektmodule auswΓ€hlen |
|
945 | permission_select_project_modules: Projektmodule auswΓ€hlen | |
946 | permission_set_issues_private: Tickets privat oder ΓΆffentlich markieren |
|
946 | permission_set_issues_private: Tickets privat oder ΓΆffentlich markieren | |
947 | permission_set_notes_private: Kommentar als privat markieren |
|
947 | permission_set_notes_private: Kommentar als privat markieren | |
948 | permission_set_own_issues_private: Eigene Tickets privat oder ΓΆffentlich markieren |
|
948 | permission_set_own_issues_private: Eigene Tickets privat oder ΓΆffentlich markieren | |
949 | permission_view_calendar: Kalender ansehen |
|
949 | permission_view_calendar: Kalender ansehen | |
950 | permission_view_changesets: Changesets ansehen |
|
950 | permission_view_changesets: Changesets ansehen | |
951 | permission_view_documents: Dokumente ansehen |
|
951 | permission_view_documents: Dokumente ansehen | |
952 | permission_view_files: Dateien ansehen |
|
952 | permission_view_files: Dateien ansehen | |
953 | permission_view_gantt: Gantt-Diagramm ansehen |
|
953 | permission_view_gantt: Gantt-Diagramm ansehen | |
954 | permission_view_issue_watchers: Liste der Beobachter ansehen |
|
954 | permission_view_issue_watchers: Liste der Beobachter ansehen | |
955 | permission_view_issues: Tickets anzeigen |
|
955 | permission_view_issues: Tickets anzeigen | |
956 | permission_view_messages: ForenbeitrΓ€ge ansehen |
|
956 | permission_view_messages: ForenbeitrΓ€ge ansehen | |
957 | permission_view_private_notes: Private Kommentare sehen |
|
957 | permission_view_private_notes: Private Kommentare sehen | |
958 | permission_view_time_entries: Gebuchte AufwΓ€nde ansehen |
|
958 | permission_view_time_entries: Gebuchte AufwΓ€nde ansehen | |
959 | permission_view_wiki_edits: Wiki-Versionsgeschichte ansehen |
|
959 | permission_view_wiki_edits: Wiki-Versionsgeschichte ansehen | |
960 | permission_view_wiki_pages: Wiki ansehen |
|
960 | permission_view_wiki_pages: Wiki ansehen | |
961 |
|
961 | |||
962 | project_module_boards: Foren |
|
962 | project_module_boards: Foren | |
963 | project_module_calendar: Kalender |
|
963 | project_module_calendar: Kalender | |
964 | project_module_documents: Dokumente |
|
964 | project_module_documents: Dokumente | |
965 | project_module_files: Dateien |
|
965 | project_module_files: Dateien | |
966 | project_module_gantt: Gantt |
|
966 | project_module_gantt: Gantt | |
967 | project_module_issue_tracking: Ticket-Verfolgung |
|
967 | project_module_issue_tracking: Ticket-Verfolgung | |
968 | project_module_news: News |
|
968 | project_module_news: News | |
969 | project_module_repository: Projektarchiv |
|
969 | project_module_repository: Projektarchiv | |
970 | project_module_time_tracking: Zeiterfassung |
|
970 | project_module_time_tracking: Zeiterfassung | |
971 | project_module_wiki: Wiki |
|
971 | project_module_wiki: Wiki | |
972 | project_status_active: aktiv |
|
972 | project_status_active: aktiv | |
973 | project_status_archived: archiviert |
|
973 | project_status_archived: archiviert | |
974 | project_status_closed: geschlossen |
|
974 | project_status_closed: geschlossen | |
975 |
|
975 | |||
976 | setting_activity_days_default: Anzahl Tage pro Seite der Projekt-AktivitΓ€t |
|
976 | setting_activity_days_default: Anzahl Tage pro Seite der Projekt-AktivitΓ€t | |
977 | setting_app_subtitle: Applikations-Untertitel |
|
977 | setting_app_subtitle: Applikations-Untertitel | |
978 | setting_app_title: Applikations-Titel |
|
978 | setting_app_title: Applikations-Titel | |
979 | setting_attachment_max_size: Max. DateigrΓΆΓe |
|
979 | setting_attachment_max_size: Max. DateigrΓΆΓe | |
980 | setting_autofetch_changesets: Changesets automatisch abrufen |
|
980 | setting_autofetch_changesets: Changesets automatisch abrufen | |
981 | setting_autologin: Automatische Anmeldung lΓ€uft ab nach |
|
981 | setting_autologin: Automatische Anmeldung lΓ€uft ab nach | |
982 | setting_bcc_recipients: E-Mails als Blindkopie (BCC) senden |
|
982 | setting_bcc_recipients: E-Mails als Blindkopie (BCC) senden | |
983 | setting_cache_formatted_text: Formatierten Text im Cache speichern |
|
983 | setting_cache_formatted_text: Formatierten Text im Cache speichern | |
984 | setting_commit_cross_project_ref: Erlauben auf Tickets aller anderen Projekte zu referenzieren |
|
984 | setting_commit_cross_project_ref: Erlauben auf Tickets aller anderen Projekte zu referenzieren | |
985 | setting_commit_fix_keywords: SchlΓΌsselwΓΆrter (Status) |
|
985 | setting_commit_fix_keywords: SchlΓΌsselwΓΆrter (Status) | |
986 | setting_commit_logtime_activity_id: AktivitΓ€t fΓΌr die Zeiterfassung |
|
986 | setting_commit_logtime_activity_id: AktivitΓ€t fΓΌr die Zeiterfassung | |
987 | setting_commit_logtime_enabled: Aktiviere Zeitlogging |
|
987 | setting_commit_logtime_enabled: Aktiviere Zeitlogging | |
988 | setting_commit_ref_keywords: SchlΓΌsselwΓΆrter (Beziehungen) |
|
988 | setting_commit_ref_keywords: SchlΓΌsselwΓΆrter (Beziehungen) | |
989 | setting_cross_project_issue_relations: Ticket-Beziehungen zwischen Projekten erlauben |
|
989 | setting_cross_project_issue_relations: Ticket-Beziehungen zwischen Projekten erlauben | |
990 | setting_cross_project_subtasks: ProjektΓΌbergreifende Unteraufgaben erlauben |
|
990 | setting_cross_project_subtasks: ProjektΓΌbergreifende Unteraufgaben erlauben | |
991 | setting_date_format: Datumsformat |
|
991 | setting_date_format: Datumsformat | |
992 | setting_default_issue_start_date_to_creation_date: Aktuelles Datum als Beginn fΓΌr neue Tickets verwenden |
|
992 | setting_default_issue_start_date_to_creation_date: Aktuelles Datum als Beginn fΓΌr neue Tickets verwenden | |
993 | setting_default_language: Standardsprache |
|
993 | setting_default_language: Standardsprache | |
994 | setting_default_notification_option: Standard Benachrichtigungsoptionen |
|
994 | setting_default_notification_option: Standard Benachrichtigungsoptionen | |
995 | setting_default_projects_modules: StandardmΓ€Γig aktivierte Module fΓΌr neue Projekte |
|
995 | setting_default_projects_modules: StandardmΓ€Γig aktivierte Module fΓΌr neue Projekte | |
996 | setting_default_projects_public: Neue Projekte sind standardmΓ€Γig ΓΆffentlich |
|
996 | setting_default_projects_public: Neue Projekte sind standardmΓ€Γig ΓΆffentlich | |
997 | setting_default_projects_tracker_ids: StandardmΓ€Γig aktivierte Tracker fΓΌr neue Projekte |
|
997 | setting_default_projects_tracker_ids: StandardmΓ€Γig aktivierte Tracker fΓΌr neue Projekte | |
998 | setting_diff_max_lines_displayed: Maximale Anzahl anzuzeigender Diff-Zeilen |
|
998 | setting_diff_max_lines_displayed: Maximale Anzahl anzuzeigender Diff-Zeilen | |
999 | setting_display_subprojects_issues: Tickets von Unterprojekten im Hauptprojekt anzeigen |
|
999 | setting_display_subprojects_issues: Tickets von Unterprojekten im Hauptprojekt anzeigen | |
1000 | setting_emails_footer: E-Mail-FuΓzeile |
|
1000 | setting_emails_footer: E-Mail-FuΓzeile | |
1001 | setting_emails_header: E-Mail-Kopfzeile |
|
1001 | setting_emails_header: E-Mail-Kopfzeile | |
1002 | setting_enabled_scm: Aktivierte Versionskontrollsysteme |
|
1002 | setting_enabled_scm: Aktivierte Versionskontrollsysteme | |
1003 | setting_feeds_limit: Max. Anzahl EintrΓ€ge pro Atom-Feed |
|
1003 | setting_feeds_limit: Max. Anzahl EintrΓ€ge pro Atom-Feed | |
1004 | setting_file_max_size_displayed: Maximale GrΓΆΓe inline angezeigter Textdateien |
|
1004 | setting_file_max_size_displayed: Maximale GrΓΆΓe inline angezeigter Textdateien | |
1005 | setting_force_default_language_for_anonymous: Standardsprache fΓΌr anonyme Benutzer erzwingen |
|
1005 | setting_force_default_language_for_anonymous: Standardsprache fΓΌr anonyme Benutzer erzwingen | |
1006 | setting_force_default_language_for_loggedin: Standardsprache fΓΌr angemeldete Benutzer erzwingen |
|
1006 | setting_force_default_language_for_loggedin: Standardsprache fΓΌr angemeldete Benutzer erzwingen | |
1007 | setting_gantt_items_limit: Maximale Anzahl von Aufgaben die im Gantt-Chart angezeigt werden |
|
1007 | setting_gantt_items_limit: Maximale Anzahl von Aufgaben die im Gantt-Chart angezeigt werden | |
1008 | setting_gravatar_default: Standard-Gravatar-Bild |
|
1008 | setting_gravatar_default: Standard-Gravatar-Bild | |
1009 | setting_gravatar_enabled: Gravatar-Benutzerbilder benutzen |
|
1009 | setting_gravatar_enabled: Gravatar-Benutzerbilder benutzen | |
1010 | setting_host_name: Hostname |
|
1010 | setting_host_name: Hostname | |
1011 | setting_issue_done_ratio: Berechne den Ticket-Fortschritt mittels |
|
1011 | setting_issue_done_ratio: Berechne den Ticket-Fortschritt mittels | |
1012 | setting_issue_done_ratio_issue_field: Ticket-Feld %-erledigt |
|
1012 | setting_issue_done_ratio_issue_field: Ticket-Feld %-erledigt | |
1013 | setting_issue_done_ratio_issue_status: Ticket-Status |
|
1013 | setting_issue_done_ratio_issue_status: Ticket-Status | |
1014 | setting_issue_group_assignment: Ticketzuweisung an Gruppen erlauben |
|
1014 | setting_issue_group_assignment: Ticketzuweisung an Gruppen erlauben | |
1015 | setting_issue_list_default_columns: Standard-Spalten in der Ticket-Auflistung |
|
1015 | setting_issue_list_default_columns: Standard-Spalten in der Ticket-Auflistung | |
1016 | setting_issues_export_limit: Max. Anzahl Tickets bei CSV/PDF-Export |
|
1016 | setting_issues_export_limit: Max. Anzahl Tickets bei CSV/PDF-Export | |
1017 | setting_jsonp_enabled: JSONP UnterstΓΌtzung aktivieren |
|
1017 | setting_jsonp_enabled: JSONP UnterstΓΌtzung aktivieren | |
1018 | setting_link_copied_issue: Tickets beim kopieren verlinken |
|
1018 | setting_link_copied_issue: Tickets beim kopieren verlinken | |
1019 | setting_login_required: Authentifizierung erforderlich |
|
1019 | setting_login_required: Authentifizierung erforderlich | |
1020 | setting_mail_from: E-Mail-Absender |
|
1020 | setting_mail_from: E-Mail-Absender | |
1021 | setting_mail_handler_api_enabled: Abruf eingehender E-Mails aktivieren |
|
1021 | setting_mail_handler_api_enabled: Abruf eingehender E-Mails aktivieren | |
1022 | setting_mail_handler_api_key: API-SchlΓΌssel |
|
1022 | setting_mail_handler_api_key: API-SchlΓΌssel | |
1023 | setting_mail_handler_body_delimiters: "Schneide E-Mails nach einer dieser Zeilen ab" |
|
1023 | setting_mail_handler_body_delimiters: "Schneide E-Mails nach einer dieser Zeilen ab" | |
1024 | setting_mail_handler_excluded_filenames: AnhΓ€nge nach Namen ausschlieΓen |
|
1024 | setting_mail_handler_excluded_filenames: AnhΓ€nge nach Namen ausschlieΓen | |
1025 | setting_new_project_user_role_id: Rolle, die einem Nicht-Administrator zugeordnet wird, der ein Projekt erstellt |
|
1025 | setting_new_project_user_role_id: Rolle, die einem Nicht-Administrator zugeordnet wird, der ein Projekt erstellt | |
1026 | setting_non_working_week_days: Arbeitsfreie Tage |
|
1026 | setting_non_working_week_days: Arbeitsfreie Tage | |
1027 | setting_openid: Erlaube OpenID-Anmeldung und -Registrierung |
|
1027 | setting_openid: Erlaube OpenID-Anmeldung und -Registrierung | |
1028 | setting_password_min_length: MindestlΓ€nge des Kennworts |
|
1028 | setting_password_min_length: MindestlΓ€nge des Kennworts | |
|
1029 | setting_password_max_age: Erzwinge Passwortwechsel nach | |||
1029 | setting_per_page_options: Objekte pro Seite |
|
1030 | setting_per_page_options: Objekte pro Seite | |
1030 | setting_plain_text_mail: Nur reinen Text (kein HTML) senden |
|
1031 | setting_plain_text_mail: Nur reinen Text (kein HTML) senden | |
1031 | setting_protocol: Protokoll |
|
1032 | setting_protocol: Protokoll | |
1032 | setting_repositories_encodings: Enkodierung von AnhΓ€ngen und Repositories |
|
1033 | setting_repositories_encodings: Enkodierung von AnhΓ€ngen und Repositories | |
1033 | setting_repository_log_display_limit: Maximale Anzahl anzuzeigender Revisionen in der Historie einer Datei |
|
1034 | setting_repository_log_display_limit: Maximale Anzahl anzuzeigender Revisionen in der Historie einer Datei | |
1034 | setting_rest_api_enabled: REST-Schnittstelle aktivieren |
|
1035 | setting_rest_api_enabled: REST-Schnittstelle aktivieren | |
1035 | setting_self_registration: Registrierung ermΓΆglichen |
|
1036 | setting_self_registration: Registrierung ermΓΆglichen | |
1036 | setting_sequential_project_identifiers: Fortlaufende Projektkennungen generieren |
|
1037 | setting_sequential_project_identifiers: Fortlaufende Projektkennungen generieren | |
1037 | setting_session_lifetime: LΓ€ngste Dauer einer Sitzung |
|
1038 | setting_session_lifetime: LΓ€ngste Dauer einer Sitzung | |
1038 | setting_session_timeout: ZeitΓΌberschreitung bei InaktivitΓ€t |
|
1039 | setting_session_timeout: ZeitΓΌberschreitung bei InaktivitΓ€t | |
1039 | setting_start_of_week: Wochenanfang |
|
1040 | setting_start_of_week: Wochenanfang | |
1040 | setting_sys_api_enabled: Webservice zur Verwaltung der Projektarchive benutzen |
|
1041 | setting_sys_api_enabled: Webservice zur Verwaltung der Projektarchive benutzen | |
1041 | setting_text_formatting: Textformatierung |
|
1042 | setting_text_formatting: Textformatierung | |
1042 | setting_thumbnails_enabled: Vorschaubilder von DateianhΓ€ngen anzeigen |
|
1043 | setting_thumbnails_enabled: Vorschaubilder von DateianhΓ€ngen anzeigen | |
1043 | setting_thumbnails_size: GrΓΆΓe der Vorschaubilder (in Pixel) |
|
1044 | setting_thumbnails_size: GrΓΆΓe der Vorschaubilder (in Pixel) | |
1044 | setting_time_format: Zeitformat |
|
1045 | setting_time_format: Zeitformat | |
1045 | setting_unsubscribe: Erlaubt Benutzern das eigene Benutzerkonto zu lΓΆschen |
|
1046 | setting_unsubscribe: Erlaubt Benutzern das eigene Benutzerkonto zu lΓΆschen | |
1046 | setting_user_format: Benutzer-Anzeigeformat |
|
1047 | setting_user_format: Benutzer-Anzeigeformat | |
1047 | setting_welcome_text: Willkommenstext |
|
1048 | setting_welcome_text: Willkommenstext | |
1048 | setting_wiki_compression: Wiki-Historie komprimieren |
|
1049 | setting_wiki_compression: Wiki-Historie komprimieren | |
1049 |
|
1050 | |||
1050 | status_active: aktiv |
|
1051 | status_active: aktiv | |
1051 | status_locked: gesperrt |
|
1052 | status_locked: gesperrt | |
1052 | status_registered: nicht aktivierte |
|
1053 | status_registered: nicht aktivierte | |
1053 |
|
1054 | |||
1054 | text_account_destroy_confirmation: "MΓΆchten Sie wirklich fortfahren?\nIhr Benutzerkonto wird fΓΌr immer gelΓΆscht und kann nicht wiederhergestellt werden." |
|
1055 | text_account_destroy_confirmation: "MΓΆchten Sie wirklich fortfahren?\nIhr Benutzerkonto wird fΓΌr immer gelΓΆscht und kann nicht wiederhergestellt werden." | |
1055 | text_are_you_sure: Sind Sie sicher? |
|
1056 | text_are_you_sure: Sind Sie sicher? | |
1056 | text_assign_time_entries_to_project: Gebuchte AufwΓ€nde dem Projekt zuweisen |
|
1057 | text_assign_time_entries_to_project: Gebuchte AufwΓ€nde dem Projekt zuweisen | |
1057 | text_caracters_maximum: "Max. %{count} Zeichen." |
|
1058 | text_caracters_maximum: "Max. %{count} Zeichen." | |
1058 | text_caracters_minimum: "Muss mindestens %{count} Zeichen lang sein." |
|
1059 | text_caracters_minimum: "Muss mindestens %{count} Zeichen lang sein." | |
1059 | text_comma_separated: Mehrere Werte erlaubt (durch Komma getrennt). |
|
1060 | text_comma_separated: Mehrere Werte erlaubt (durch Komma getrennt). | |
1060 | text_convert_available: ImageMagick Konvertierung verfΓΌgbar (optional) |
|
1061 | text_convert_available: ImageMagick Konvertierung verfΓΌgbar (optional) | |
1061 | text_custom_field_possible_values_info: 'Eine Zeile pro Wert' |
|
1062 | text_custom_field_possible_values_info: 'Eine Zeile pro Wert' | |
1062 | text_default_administrator_account_changed: Administrator-Kennwort geΓ€ndert |
|
1063 | text_default_administrator_account_changed: Administrator-Kennwort geΓ€ndert | |
1063 | text_destroy_time_entries: Gebuchte AufwΓ€nde lΓΆschen |
|
1064 | text_destroy_time_entries: Gebuchte AufwΓ€nde lΓΆschen | |
1064 | text_destroy_time_entries_question: Es wurden bereits %{hours} Stunden auf dieses Ticket gebucht. Was soll mit den AufwΓ€nden geschehen? |
|
1065 | text_destroy_time_entries_question: Es wurden bereits %{hours} Stunden auf dieses Ticket gebucht. Was soll mit den AufwΓ€nden geschehen? | |
1065 | text_diff_truncated: '... Dieser Diff wurde abgeschnitten, weil er die maximale Anzahl anzuzeigender Zeilen ΓΌberschreitet.' |
|
1066 | text_diff_truncated: '... Dieser Diff wurde abgeschnitten, weil er die maximale Anzahl anzuzeigender Zeilen ΓΌberschreitet.' | |
1066 | text_email_delivery_not_configured: "Der SMTP-Server ist nicht konfiguriert und Mailbenachrichtigungen sind ausgeschaltet.\nNehmen Sie die Einstellungen fΓΌr Ihren SMTP-Server in config/configuration.yml vor und starten Sie die Applikation neu." |
|
1067 | text_email_delivery_not_configured: "Der SMTP-Server ist nicht konfiguriert und Mailbenachrichtigungen sind ausgeschaltet.\nNehmen Sie die Einstellungen fΓΌr Ihren SMTP-Server in config/configuration.yml vor und starten Sie die Applikation neu." | |
1067 | text_enumeration_category_reassign_to: 'Die Objekte stattdessen diesem Wert zuordnen:' |
|
1068 | text_enumeration_category_reassign_to: 'Die Objekte stattdessen diesem Wert zuordnen:' | |
1068 | text_enumeration_destroy_question: "%{count} Objekt(e) sind diesem Wert zugeordnet." |
|
1069 | text_enumeration_destroy_question: "%{count} Objekt(e) sind diesem Wert zugeordnet." | |
1069 | text_file_repository_writable: Verzeichnis fΓΌr Dateien beschreibbar |
|
1070 | text_file_repository_writable: Verzeichnis fΓΌr Dateien beschreibbar | |
1070 | text_git_repository_note: Repository steht fΓΌr sich alleine (bare) und liegt lokal (z.B. /gitrepo, c:\gitrepo) |
|
1071 | text_git_repository_note: Repository steht fΓΌr sich alleine (bare) und liegt lokal (z.B. /gitrepo, c:\gitrepo) | |
1071 | text_issue_added: "Ticket %{id} wurde erstellt von %{author}." |
|
1072 | text_issue_added: "Ticket %{id} wurde erstellt von %{author}." | |
1072 | text_issue_category_destroy_assignments: Kategorie-Zuordnung entfernen |
|
1073 | text_issue_category_destroy_assignments: Kategorie-Zuordnung entfernen | |
1073 | text_issue_category_destroy_question: "Einige Tickets (%{count}) sind dieser Kategorie zugeodnet. Was mΓΆchten Sie tun?" |
|
1074 | text_issue_category_destroy_question: "Einige Tickets (%{count}) sind dieser Kategorie zugeodnet. Was mΓΆchten Sie tun?" | |
1074 | text_issue_category_reassign_to: Tickets dieser Kategorie zuordnen |
|
1075 | text_issue_category_reassign_to: Tickets dieser Kategorie zuordnen | |
1075 | text_issue_conflict_resolution_add_notes: Meine Γnderungen ΓΌbernehmen und alle anderen Γnderungen verwerfen |
|
1076 | text_issue_conflict_resolution_add_notes: Meine Γnderungen ΓΌbernehmen und alle anderen Γnderungen verwerfen | |
1076 | text_issue_conflict_resolution_cancel: Meine Γnderungen verwerfen und %{link} neu anzeigen |
|
1077 | text_issue_conflict_resolution_cancel: Meine Γnderungen verwerfen und %{link} neu anzeigen | |
1077 | text_issue_conflict_resolution_overwrite: Meine Γnderungen trotzdem ΓΌbernehmen (vorherige Notizen bleiben erhalten aber manche kΓΆnnen ΓΌberschrieben werden) |
|
1078 | text_issue_conflict_resolution_overwrite: Meine Γnderungen trotzdem ΓΌbernehmen (vorherige Notizen bleiben erhalten aber manche kΓΆnnen ΓΌberschrieben werden) | |
1078 | text_issue_updated: "Ticket %{id} wurde aktualisiert von %{author}." |
|
1079 | text_issue_updated: "Ticket %{id} wurde aktualisiert von %{author}." | |
1079 | text_issues_destroy_confirmation: 'Sind Sie sicher, dass Sie die ausgewΓ€hlten Tickets lΓΆschen mΓΆchten?' |
|
1080 | text_issues_destroy_confirmation: 'Sind Sie sicher, dass Sie die ausgewΓ€hlten Tickets lΓΆschen mΓΆchten?' | |
1080 | text_issues_destroy_descendants_confirmation: Dies wird auch %{count} Unteraufgabe/n lΓΆschen. |
|
1081 | text_issues_destroy_descendants_confirmation: Dies wird auch %{count} Unteraufgabe/n lΓΆschen. | |
1081 | text_issues_ref_in_commit_messages: Ticket-Beziehungen und -Status in Commit-Log-Meldungen |
|
1082 | text_issues_ref_in_commit_messages: Ticket-Beziehungen und -Status in Commit-Log-Meldungen | |
1082 | text_journal_added: "%{label} %{value} wurde hinzugefΓΌgt" |
|
1083 | text_journal_added: "%{label} %{value} wurde hinzugefΓΌgt" | |
1083 | text_journal_changed: "%{label} wurde von %{old} zu %{new} geΓ€ndert" |
|
1084 | text_journal_changed: "%{label} wurde von %{old} zu %{new} geΓ€ndert" | |
1084 | text_journal_changed_no_detail: "%{label} aktualisiert" |
|
1085 | text_journal_changed_no_detail: "%{label} aktualisiert" | |
1085 | text_journal_deleted: "%{label} %{old} wurde gelΓΆscht" |
|
1086 | text_journal_deleted: "%{label} %{old} wurde gelΓΆscht" | |
1086 | text_journal_set_to: "%{label} wurde auf %{value} gesetzt" |
|
1087 | text_journal_set_to: "%{label} wurde auf %{value} gesetzt" | |
1087 | text_length_between: "LΓ€nge zwischen %{min} und %{max} Zeichen." |
|
1088 | text_length_between: "LΓ€nge zwischen %{min} und %{max} Zeichen." | |
1088 | text_line_separated: Mehrere Werte sind erlaubt (eine Zeile pro Wert). |
|
1089 | text_line_separated: Mehrere Werte sind erlaubt (eine Zeile pro Wert). | |
1089 | text_load_default_configuration: Standard-Konfiguration laden |
|
1090 | text_load_default_configuration: Standard-Konfiguration laden | |
1090 | text_mercurial_repository_note: Lokales repository (e.g. /hgrepo, c:\hgrepo) |
|
1091 | text_mercurial_repository_note: Lokales repository (e.g. /hgrepo, c:\hgrepo) | |
1091 | text_min_max_length_info: 0 heiΓt keine BeschrΓ€nkung |
|
1092 | text_min_max_length_info: 0 heiΓt keine BeschrΓ€nkung | |
1092 | text_no_configuration_data: "Rollen, Tracker, Ticket-Status und Workflows wurden noch nicht konfiguriert.\nEs ist sehr zu empfehlen, die Standard-Konfiguration zu laden. Sobald sie geladen ist, kΓΆnnen Sie diese abΓ€ndern." |
|
1093 | text_no_configuration_data: "Rollen, Tracker, Ticket-Status und Workflows wurden noch nicht konfiguriert.\nEs ist sehr zu empfehlen, die Standard-Konfiguration zu laden. Sobald sie geladen ist, kΓΆnnen Sie diese abΓ€ndern." | |
1093 | text_own_membership_delete_confirmation: "Sie sind dabei, einige oder alle Ihre Berechtigungen zu entfernen. Es ist mΓΆglich, dass Sie danach das Projekt nicht mehr ansehen oder bearbeiten dΓΌrfen.\nSind Sie sicher, dass Sie dies tun mΓΆchten?" |
|
1094 | text_own_membership_delete_confirmation: "Sie sind dabei, einige oder alle Ihre Berechtigungen zu entfernen. Es ist mΓΆglich, dass Sie danach das Projekt nicht mehr ansehen oder bearbeiten dΓΌrfen.\nSind Sie sicher, dass Sie dies tun mΓΆchten?" | |
1094 | text_plugin_assets_writable: Verzeichnis fΓΌr Plugin-Assets beschreibbar |
|
1095 | text_plugin_assets_writable: Verzeichnis fΓΌr Plugin-Assets beschreibbar | |
1095 | text_project_closed: Dieses Projekt ist geschlossen und kann nicht bearbeitet werden. |
|
1096 | text_project_closed: Dieses Projekt ist geschlossen und kann nicht bearbeitet werden. | |
1096 | text_project_destroy_confirmation: Sind Sie sicher, dass Sie das Projekt lΓΆschen wollen? |
|
1097 | text_project_destroy_confirmation: Sind Sie sicher, dass Sie das Projekt lΓΆschen wollen? | |
1097 | text_project_identifier_info: 'Kleinbuchstaben (a-z), Ziffern, Binde- und Unterstriche erlaubt, muss mit einem Kleinbuchstaben beginnen.<br />Einmal gespeichert, kann die Kennung nicht mehr geΓ€ndert werden.' |
|
1098 | text_project_identifier_info: 'Kleinbuchstaben (a-z), Ziffern, Binde- und Unterstriche erlaubt, muss mit einem Kleinbuchstaben beginnen.<br />Einmal gespeichert, kann die Kennung nicht mehr geΓ€ndert werden.' | |
1098 | text_reassign_time_entries: 'Gebuchte AufwΓ€nde diesem Ticket zuweisen:' |
|
1099 | text_reassign_time_entries: 'Gebuchte AufwΓ€nde diesem Ticket zuweisen:' | |
1099 | text_regexp_info: z. B. ^[A-Z0-9]+$ |
|
1100 | text_regexp_info: z. B. ^[A-Z0-9]+$ | |
1100 | text_repository_identifier_info: 'Kleinbuchstaben (a-z), Ziffern, Binde- und Unterstriche erlaubt.<br />Einmal gespeichert, kann die Kennung nicht mehr geΓ€ndert werden.' |
|
1101 | text_repository_identifier_info: 'Kleinbuchstaben (a-z), Ziffern, Binde- und Unterstriche erlaubt.<br />Einmal gespeichert, kann die Kennung nicht mehr geΓ€ndert werden.' | |
1101 | text_repository_usernames_mapping: "Bitte legen Sie die Zuordnung der Redmine-Benutzer zu den Benutzernamen der Commit-Log-Meldungen des Projektarchivs fest.\nBenutzer mit identischen Redmine- und Projektarchiv-Benutzernamen oder -E-Mail-Adressen werden automatisch zugeordnet." |
|
1102 | text_repository_usernames_mapping: "Bitte legen Sie die Zuordnung der Redmine-Benutzer zu den Benutzernamen der Commit-Log-Meldungen des Projektarchivs fest.\nBenutzer mit identischen Redmine- und Projektarchiv-Benutzernamen oder -E-Mail-Adressen werden automatisch zugeordnet." | |
1102 | text_rmagick_available: RMagick verfΓΌgbar (optional) |
|
1103 | text_rmagick_available: RMagick verfΓΌgbar (optional) | |
1103 | text_scm_command: Kommando |
|
1104 | text_scm_command: Kommando | |
1104 | text_scm_command_not_available: SCM-Kommando ist nicht verfΓΌgbar. Bitte prΓΌfen Sie die Einstellungen im Administrationspanel. |
|
1105 | text_scm_command_not_available: SCM-Kommando ist nicht verfΓΌgbar. Bitte prΓΌfen Sie die Einstellungen im Administrationspanel. | |
1105 | text_scm_command_version: Version |
|
1106 | text_scm_command_version: Version | |
1106 | text_scm_config: Die SCM-Kommandos kΓΆnnen in der in config/configuration.yml konfiguriert werden. Redmine muss anschlieΓend neu gestartet werden. |
|
1107 | text_scm_config: Die SCM-Kommandos kΓΆnnen in der in config/configuration.yml konfiguriert werden. Redmine muss anschlieΓend neu gestartet werden. | |
1107 | text_scm_path_encoding_note: "Standard: UTF-8" |
|
1108 | text_scm_path_encoding_note: "Standard: UTF-8" | |
1108 | text_select_mail_notifications: Bitte wΓ€hlen Sie die Aktionen aus, fΓΌr die eine Mailbenachrichtigung gesendet werden soll. |
|
1109 | text_select_mail_notifications: Bitte wΓ€hlen Sie die Aktionen aus, fΓΌr die eine Mailbenachrichtigung gesendet werden soll. | |
1109 | text_select_project_modules: 'Bitte wΓ€hlen Sie die Module aus, die in diesem Projekt aktiviert sein sollen:' |
|
1110 | text_select_project_modules: 'Bitte wΓ€hlen Sie die Module aus, die in diesem Projekt aktiviert sein sollen:' | |
1110 | text_session_expiration_settings: "Achtung: Γnderungen kΓΆnnen aktuelle Sitzungen beenden, Ihre eingeschlossen!" |
|
1111 | text_session_expiration_settings: "Achtung: Γnderungen kΓΆnnen aktuelle Sitzungen beenden, Ihre eingeschlossen!" | |
1111 | text_status_changed_by_changeset: "Status geΓ€ndert durch Changeset %{value}." |
|
1112 | text_status_changed_by_changeset: "Status geΓ€ndert durch Changeset %{value}." | |
1112 | text_subprojects_destroy_warning: "Dessen Unterprojekte (%{value}) werden ebenfalls gelΓΆscht." |
|
1113 | text_subprojects_destroy_warning: "Dessen Unterprojekte (%{value}) werden ebenfalls gelΓΆscht." | |
1113 | text_subversion_repository_note: 'Beispiele: file:///, http://, https://, svn://, svn+[tunnelscheme]://' |
|
1114 | text_subversion_repository_note: 'Beispiele: file:///, http://, https://, svn://, svn+[tunnelscheme]://' | |
1114 | text_time_entries_destroy_confirmation: Sind Sie sicher, dass Sie die ausgewΓ€hlten ZeitaufwΓ€nde lΓΆschen mΓΆchten? |
|
1115 | text_time_entries_destroy_confirmation: Sind Sie sicher, dass Sie die ausgewΓ€hlten ZeitaufwΓ€nde lΓΆschen mΓΆchten? | |
1115 | text_time_logged_by_changeset: Angewendet in Changeset %{value}. |
|
1116 | text_time_logged_by_changeset: Angewendet in Changeset %{value}. | |
1116 | text_tip_issue_begin_day: Aufgabe, die an diesem Tag beginnt |
|
1117 | text_tip_issue_begin_day: Aufgabe, die an diesem Tag beginnt | |
1117 | text_tip_issue_begin_end_day: Aufgabe, die an diesem Tag beginnt und endet |
|
1118 | text_tip_issue_begin_end_day: Aufgabe, die an diesem Tag beginnt und endet | |
1118 | text_tip_issue_end_day: Aufgabe, die an diesem Tag endet |
|
1119 | text_tip_issue_end_day: Aufgabe, die an diesem Tag endet | |
1119 | text_tracker_no_workflow: Kein Workflow fΓΌr diesen Tracker definiert. |
|
1120 | text_tracker_no_workflow: Kein Workflow fΓΌr diesen Tracker definiert. | |
1120 | text_turning_multiple_off: Wenn Sie die Mehrfachauswahl deaktivieren, werden Felder mit Mehrfachauswahl bereinigt. |
|
1121 | text_turning_multiple_off: Wenn Sie die Mehrfachauswahl deaktivieren, werden Felder mit Mehrfachauswahl bereinigt. | |
1121 | Dadurch wird sichergestellt, dass lediglich ein Wert pro Feld ausgewΓ€hlt ist. |
|
1122 | Dadurch wird sichergestellt, dass lediglich ein Wert pro Feld ausgewΓ€hlt ist. | |
1122 | text_unallowed_characters: Nicht erlaubte Zeichen |
|
1123 | text_unallowed_characters: Nicht erlaubte Zeichen | |
1123 | text_user_mail_option: "FΓΌr nicht ausgewΓ€hlte Projekte werden Sie nur Benachrichtigungen fΓΌr Dinge erhalten, die Sie beobachten oder an denen Sie beteiligt sind (z. B. Tickets, deren Autor Sie sind oder die Ihnen zugewiesen sind)." |
|
1124 | text_user_mail_option: "FΓΌr nicht ausgewΓ€hlte Projekte werden Sie nur Benachrichtigungen fΓΌr Dinge erhalten, die Sie beobachten oder an denen Sie beteiligt sind (z. B. Tickets, deren Autor Sie sind oder die Ihnen zugewiesen sind)." | |
1124 | text_user_wrote: "%{value} schrieb:" |
|
1125 | text_user_wrote: "%{value} schrieb:" | |
1125 | text_warn_on_leaving_unsaved: Die aktuellen Γnderungen gehen verloren, wenn Sie diese Seite verlassen. |
|
1126 | text_warn_on_leaving_unsaved: Die aktuellen Γnderungen gehen verloren, wenn Sie diese Seite verlassen. | |
1126 | text_wiki_destroy_confirmation: Sind Sie sicher, dass Sie dieses Wiki mit sΓ€mtlichem Inhalt lΓΆschen mΓΆchten? |
|
1127 | text_wiki_destroy_confirmation: Sind Sie sicher, dass Sie dieses Wiki mit sΓ€mtlichem Inhalt lΓΆschen mΓΆchten? | |
1127 | text_wiki_page_destroy_children: LΓΆsche alle Unterseiten |
|
1128 | text_wiki_page_destroy_children: LΓΆsche alle Unterseiten | |
1128 | text_wiki_page_destroy_question: "Diese Seite hat %{descendants} Unterseite(n). Was mΓΆchten Sie tun?" |
|
1129 | text_wiki_page_destroy_question: "Diese Seite hat %{descendants} Unterseite(n). Was mΓΆchten Sie tun?" | |
1129 | text_wiki_page_nullify_children: Verschiebe die Unterseiten auf die oberste Ebene |
|
1130 | text_wiki_page_nullify_children: Verschiebe die Unterseiten auf die oberste Ebene | |
1130 | text_wiki_page_reassign_children: Ordne die Unterseiten dieser Seite zu |
|
1131 | text_wiki_page_reassign_children: Ordne die Unterseiten dieser Seite zu | |
1131 | text_workflow_edit: Workflow zum Bearbeiten auswΓ€hlen |
|
1132 | text_workflow_edit: Workflow zum Bearbeiten auswΓ€hlen | |
1132 | text_zoom_in: Ansicht vergrΓΆΓern |
|
1133 | text_zoom_in: Ansicht vergrΓΆΓern | |
1133 | text_zoom_out: Ansicht verkleinern |
|
1134 | text_zoom_out: Ansicht verkleinern | |
1134 |
|
1135 | |||
1135 | version_status_closed: abgeschlossen |
|
1136 | version_status_closed: abgeschlossen | |
1136 | version_status_locked: gesperrt |
|
1137 | version_status_locked: gesperrt | |
1137 | version_status_open: offen |
|
1138 | version_status_open: offen | |
1138 |
|
1139 | |||
1139 | warning_attachments_not_saved: "%{count} Datei(en) konnten nicht gespeichert werden." |
|
1140 | warning_attachments_not_saved: "%{count} Datei(en) konnten nicht gespeichert werden." | |
1140 | label_search_attachments_yes: Namen und Beschreibungen von AnhΓ€ngen durchsuchen |
|
1141 | label_search_attachments_yes: Namen und Beschreibungen von AnhΓ€ngen durchsuchen | |
1141 | label_search_attachments_no: Keine AnhΓ€nge suchen |
|
1142 | label_search_attachments_no: Keine AnhΓ€nge suchen | |
1142 | label_search_attachments_only: Nur AnhΓ€nge suchen |
|
1143 | label_search_attachments_only: Nur AnhΓ€nge suchen | |
1143 | label_search_open_issues_only: Nur offene Tickets |
|
1144 | label_search_open_issues_only: Nur offene Tickets | |
1144 | field_address: E-Mail |
|
1145 | field_address: E-Mail | |
1145 | setting_max_additional_emails: Maximale Anzahl zusΓ€tzlicher E-Mailadressen |
|
1146 | setting_max_additional_emails: Maximale Anzahl zusΓ€tzlicher E-Mailadressen | |
1146 | label_email_address_plural: E-Mails |
|
1147 | label_email_address_plural: E-Mails | |
1147 | label_email_address_add: E-Mailadresse hinzufΓΌgen |
|
1148 | label_email_address_add: E-Mailadresse hinzufΓΌgen | |
1148 | label_enable_notifications: Benachrichtigungen aktivieren |
|
1149 | label_enable_notifications: Benachrichtigungen aktivieren | |
1149 | label_disable_notifications: Benachrichtigungen deaktivieren |
|
1150 | label_disable_notifications: Benachrichtigungen deaktivieren | |
1150 | setting_search_results_per_page: Suchergebnisse pro Seite |
|
1151 | setting_search_results_per_page: Suchergebnisse pro Seite | |
1151 | label_blank_value: leer |
|
1152 | label_blank_value: leer | |
1152 | permission_copy_issues: Tickets kopieren |
|
1153 | permission_copy_issues: Tickets kopieren |
@@ -1,1133 +1,1135 | |||||
1 | en: |
|
1 | en: | |
2 | # Text direction: Left-to-Right (ltr) or Right-to-Left (rtl) |
|
2 | # Text direction: Left-to-Right (ltr) or Right-to-Left (rtl) | |
3 | direction: ltr |
|
3 | direction: ltr | |
4 | date: |
|
4 | date: | |
5 | formats: |
|
5 | formats: | |
6 | # Use the strftime parameters for formats. |
|
6 | # Use the strftime parameters for formats. | |
7 | # When no format has been given, it uses default. |
|
7 | # When no format has been given, it uses default. | |
8 | # You can provide other formats here if you like! |
|
8 | # You can provide other formats here if you like! | |
9 | default: "%m/%d/%Y" |
|
9 | default: "%m/%d/%Y" | |
10 | short: "%b %d" |
|
10 | short: "%b %d" | |
11 | long: "%B %d, %Y" |
|
11 | long: "%B %d, %Y" | |
12 |
|
12 | |||
13 | day_names: [Sunday, Monday, Tuesday, Wednesday, Thursday, Friday, Saturday] |
|
13 | day_names: [Sunday, Monday, Tuesday, Wednesday, Thursday, Friday, Saturday] | |
14 | abbr_day_names: [Sun, Mon, Tue, Wed, Thu, Fri, Sat] |
|
14 | abbr_day_names: [Sun, Mon, Tue, Wed, Thu, Fri, Sat] | |
15 |
|
15 | |||
16 | # Don't forget the nil at the beginning; there's no such thing as a 0th month |
|
16 | # Don't forget the nil at the beginning; there's no such thing as a 0th month | |
17 | month_names: [~, January, February, March, April, May, June, July, August, September, October, November, December] |
|
17 | month_names: [~, January, February, March, April, May, June, July, August, September, October, November, December] | |
18 | abbr_month_names: [~, Jan, Feb, Mar, Apr, May, Jun, Jul, Aug, Sep, Oct, Nov, Dec] |
|
18 | abbr_month_names: [~, Jan, Feb, Mar, Apr, May, Jun, Jul, Aug, Sep, Oct, Nov, Dec] | |
19 | # Used in date_select and datime_select. |
|
19 | # Used in date_select and datime_select. | |
20 | order: |
|
20 | order: | |
21 | - :year |
|
21 | - :year | |
22 | - :month |
|
22 | - :month | |
23 | - :day |
|
23 | - :day | |
24 |
|
24 | |||
25 | time: |
|
25 | time: | |
26 | formats: |
|
26 | formats: | |
27 | default: "%m/%d/%Y %I:%M %p" |
|
27 | default: "%m/%d/%Y %I:%M %p" | |
28 | time: "%I:%M %p" |
|
28 | time: "%I:%M %p" | |
29 | short: "%d %b %H:%M" |
|
29 | short: "%d %b %H:%M" | |
30 | long: "%B %d, %Y %H:%M" |
|
30 | long: "%B %d, %Y %H:%M" | |
31 | am: "am" |
|
31 | am: "am" | |
32 | pm: "pm" |
|
32 | pm: "pm" | |
33 |
|
33 | |||
34 | datetime: |
|
34 | datetime: | |
35 | distance_in_words: |
|
35 | distance_in_words: | |
36 | half_a_minute: "half a minute" |
|
36 | half_a_minute: "half a minute" | |
37 | less_than_x_seconds: |
|
37 | less_than_x_seconds: | |
38 | one: "less than 1 second" |
|
38 | one: "less than 1 second" | |
39 | other: "less than %{count} seconds" |
|
39 | other: "less than %{count} seconds" | |
40 | x_seconds: |
|
40 | x_seconds: | |
41 | one: "1 second" |
|
41 | one: "1 second" | |
42 | other: "%{count} seconds" |
|
42 | other: "%{count} seconds" | |
43 | less_than_x_minutes: |
|
43 | less_than_x_minutes: | |
44 | one: "less than a minute" |
|
44 | one: "less than a minute" | |
45 | other: "less than %{count} minutes" |
|
45 | other: "less than %{count} minutes" | |
46 | x_minutes: |
|
46 | x_minutes: | |
47 | one: "1 minute" |
|
47 | one: "1 minute" | |
48 | other: "%{count} minutes" |
|
48 | other: "%{count} minutes" | |
49 | about_x_hours: |
|
49 | about_x_hours: | |
50 | one: "about 1 hour" |
|
50 | one: "about 1 hour" | |
51 | other: "about %{count} hours" |
|
51 | other: "about %{count} hours" | |
52 | x_hours: |
|
52 | x_hours: | |
53 | one: "1 hour" |
|
53 | one: "1 hour" | |
54 | other: "%{count} hours" |
|
54 | other: "%{count} hours" | |
55 | x_days: |
|
55 | x_days: | |
56 | one: "1 day" |
|
56 | one: "1 day" | |
57 | other: "%{count} days" |
|
57 | other: "%{count} days" | |
58 | about_x_months: |
|
58 | about_x_months: | |
59 | one: "about 1 month" |
|
59 | one: "about 1 month" | |
60 | other: "about %{count} months" |
|
60 | other: "about %{count} months" | |
61 | x_months: |
|
61 | x_months: | |
62 | one: "1 month" |
|
62 | one: "1 month" | |
63 | other: "%{count} months" |
|
63 | other: "%{count} months" | |
64 | about_x_years: |
|
64 | about_x_years: | |
65 | one: "about 1 year" |
|
65 | one: "about 1 year" | |
66 | other: "about %{count} years" |
|
66 | other: "about %{count} years" | |
67 | over_x_years: |
|
67 | over_x_years: | |
68 | one: "over 1 year" |
|
68 | one: "over 1 year" | |
69 | other: "over %{count} years" |
|
69 | other: "over %{count} years" | |
70 | almost_x_years: |
|
70 | almost_x_years: | |
71 | one: "almost 1 year" |
|
71 | one: "almost 1 year" | |
72 | other: "almost %{count} years" |
|
72 | other: "almost %{count} years" | |
73 |
|
73 | |||
74 | number: |
|
74 | number: | |
75 | format: |
|
75 | format: | |
76 | separator: "." |
|
76 | separator: "." | |
77 | delimiter: "" |
|
77 | delimiter: "" | |
78 | precision: 3 |
|
78 | precision: 3 | |
79 |
|
79 | |||
80 | human: |
|
80 | human: | |
81 | format: |
|
81 | format: | |
82 | delimiter: "" |
|
82 | delimiter: "" | |
83 | precision: 3 |
|
83 | precision: 3 | |
84 | storage_units: |
|
84 | storage_units: | |
85 | format: "%n %u" |
|
85 | format: "%n %u" | |
86 | units: |
|
86 | units: | |
87 | byte: |
|
87 | byte: | |
88 | one: "Byte" |
|
88 | one: "Byte" | |
89 | other: "Bytes" |
|
89 | other: "Bytes" | |
90 | kb: "KB" |
|
90 | kb: "KB" | |
91 | mb: "MB" |
|
91 | mb: "MB" | |
92 | gb: "GB" |
|
92 | gb: "GB" | |
93 | tb: "TB" |
|
93 | tb: "TB" | |
94 |
|
94 | |||
95 | # Used in array.to_sentence. |
|
95 | # Used in array.to_sentence. | |
96 | support: |
|
96 | support: | |
97 | array: |
|
97 | array: | |
98 | sentence_connector: "and" |
|
98 | sentence_connector: "and" | |
99 | skip_last_comma: false |
|
99 | skip_last_comma: false | |
100 |
|
100 | |||
101 | activerecord: |
|
101 | activerecord: | |
102 | errors: |
|
102 | errors: | |
103 | template: |
|
103 | template: | |
104 | header: |
|
104 | header: | |
105 | one: "1 error prohibited this %{model} from being saved" |
|
105 | one: "1 error prohibited this %{model} from being saved" | |
106 | other: "%{count} errors prohibited this %{model} from being saved" |
|
106 | other: "%{count} errors prohibited this %{model} from being saved" | |
107 | messages: |
|
107 | messages: | |
108 | inclusion: "is not included in the list" |
|
108 | inclusion: "is not included in the list" | |
109 | exclusion: "is reserved" |
|
109 | exclusion: "is reserved" | |
110 | invalid: "is invalid" |
|
110 | invalid: "is invalid" | |
111 | confirmation: "doesn't match confirmation" |
|
111 | confirmation: "doesn't match confirmation" | |
112 | accepted: "must be accepted" |
|
112 | accepted: "must be accepted" | |
113 | empty: "cannot be empty" |
|
113 | empty: "cannot be empty" | |
114 | blank: "cannot be blank" |
|
114 | blank: "cannot be blank" | |
115 | too_long: "is too long (maximum is %{count} characters)" |
|
115 | too_long: "is too long (maximum is %{count} characters)" | |
116 | too_short: "is too short (minimum is %{count} characters)" |
|
116 | too_short: "is too short (minimum is %{count} characters)" | |
117 | wrong_length: "is the wrong length (should be %{count} characters)" |
|
117 | wrong_length: "is the wrong length (should be %{count} characters)" | |
118 | taken: "has already been taken" |
|
118 | taken: "has already been taken" | |
119 | not_a_number: "is not a number" |
|
119 | not_a_number: "is not a number" | |
120 | not_a_date: "is not a valid date" |
|
120 | not_a_date: "is not a valid date" | |
121 | greater_than: "must be greater than %{count}" |
|
121 | greater_than: "must be greater than %{count}" | |
122 | greater_than_or_equal_to: "must be greater than or equal to %{count}" |
|
122 | greater_than_or_equal_to: "must be greater than or equal to %{count}" | |
123 | equal_to: "must be equal to %{count}" |
|
123 | equal_to: "must be equal to %{count}" | |
124 | less_than: "must be less than %{count}" |
|
124 | less_than: "must be less than %{count}" | |
125 | less_than_or_equal_to: "must be less than or equal to %{count}" |
|
125 | less_than_or_equal_to: "must be less than or equal to %{count}" | |
126 | odd: "must be odd" |
|
126 | odd: "must be odd" | |
127 | even: "must be even" |
|
127 | even: "must be even" | |
128 | greater_than_start_date: "must be greater than start date" |
|
128 | greater_than_start_date: "must be greater than start date" | |
129 | not_same_project: "doesn't belong to the same project" |
|
129 | not_same_project: "doesn't belong to the same project" | |
130 | circular_dependency: "This relation would create a circular dependency" |
|
130 | circular_dependency: "This relation would create a circular dependency" | |
131 | cant_link_an_issue_with_a_descendant: "An issue cannot be linked to one of its subtasks" |
|
131 | cant_link_an_issue_with_a_descendant: "An issue cannot be linked to one of its subtasks" | |
132 | earlier_than_minimum_start_date: "cannot be earlier than %{date} because of preceding issues" |
|
132 | earlier_than_minimum_start_date: "cannot be earlier than %{date} because of preceding issues" | |
133 |
|
133 | |||
134 | actionview_instancetag_blank_option: Please select |
|
134 | actionview_instancetag_blank_option: Please select | |
135 |
|
135 | |||
136 | general_text_No: 'No' |
|
136 | general_text_No: 'No' | |
137 | general_text_Yes: 'Yes' |
|
137 | general_text_Yes: 'Yes' | |
138 | general_text_no: 'no' |
|
138 | general_text_no: 'no' | |
139 | general_text_yes: 'yes' |
|
139 | general_text_yes: 'yes' | |
140 | general_lang_name: 'English' |
|
140 | general_lang_name: 'English' | |
141 | general_csv_separator: ',' |
|
141 | general_csv_separator: ',' | |
142 | general_csv_decimal_separator: '.' |
|
142 | general_csv_decimal_separator: '.' | |
143 | general_csv_encoding: ISO-8859-1 |
|
143 | general_csv_encoding: ISO-8859-1 | |
144 | general_pdf_fontname: freesans |
|
144 | general_pdf_fontname: freesans | |
145 | general_first_day_of_week: '7' |
|
145 | general_first_day_of_week: '7' | |
146 |
|
146 | |||
147 | notice_account_updated: Account was successfully updated. |
|
147 | notice_account_updated: Account was successfully updated. | |
148 | notice_account_invalid_creditentials: Invalid user or password |
|
148 | notice_account_invalid_creditentials: Invalid user or password | |
149 | notice_account_password_updated: Password was successfully updated. |
|
149 | notice_account_password_updated: Password was successfully updated. | |
150 | notice_account_wrong_password: Wrong password |
|
150 | notice_account_wrong_password: Wrong password | |
151 | notice_account_register_done: Account was successfully created. An email containing the instructions to activate your account was sent to %{email}. |
|
151 | notice_account_register_done: Account was successfully created. An email containing the instructions to activate your account was sent to %{email}. | |
152 | notice_account_unknown_email: Unknown user. |
|
152 | notice_account_unknown_email: Unknown user. | |
153 | notice_account_not_activated_yet: You haven't activated your account yet. If you want to receive a new activation email, please <a href="%{url}">click this link</a>. |
|
153 | notice_account_not_activated_yet: You haven't activated your account yet. If you want to receive a new activation email, please <a href="%{url}">click this link</a>. | |
154 | notice_account_locked: Your account is locked. |
|
154 | notice_account_locked: Your account is locked. | |
155 | notice_can_t_change_password: This account uses an external authentication source. Impossible to change the password. |
|
155 | notice_can_t_change_password: This account uses an external authentication source. Impossible to change the password. | |
156 | notice_account_lost_email_sent: An email with instructions to choose a new password has been sent to you. |
|
156 | notice_account_lost_email_sent: An email with instructions to choose a new password has been sent to you. | |
157 | notice_account_activated: Your account has been activated. You can now log in. |
|
157 | notice_account_activated: Your account has been activated. You can now log in. | |
158 | notice_successful_create: Successful creation. |
|
158 | notice_successful_create: Successful creation. | |
159 | notice_successful_update: Successful update. |
|
159 | notice_successful_update: Successful update. | |
160 | notice_successful_delete: Successful deletion. |
|
160 | notice_successful_delete: Successful deletion. | |
161 | notice_successful_connection: Successful connection. |
|
161 | notice_successful_connection: Successful connection. | |
162 | notice_file_not_found: The page you were trying to access doesn't exist or has been removed. |
|
162 | notice_file_not_found: The page you were trying to access doesn't exist or has been removed. | |
163 | notice_locking_conflict: Data has been updated by another user. |
|
163 | notice_locking_conflict: Data has been updated by another user. | |
164 | notice_not_authorized: You are not authorized to access this page. |
|
164 | notice_not_authorized: You are not authorized to access this page. | |
165 | notice_not_authorized_archived_project: The project you're trying to access has been archived. |
|
165 | notice_not_authorized_archived_project: The project you're trying to access has been archived. | |
166 | notice_email_sent: "An email was sent to %{value}" |
|
166 | notice_email_sent: "An email was sent to %{value}" | |
167 | notice_email_error: "An error occurred while sending mail (%{value})" |
|
167 | notice_email_error: "An error occurred while sending mail (%{value})" | |
168 | notice_feeds_access_key_reseted: Your Atom access key was reset. |
|
168 | notice_feeds_access_key_reseted: Your Atom access key was reset. | |
169 | notice_api_access_key_reseted: Your API access key was reset. |
|
169 | notice_api_access_key_reseted: Your API access key was reset. | |
170 | notice_failed_to_save_issues: "Failed to save %{count} issue(s) on %{total} selected: %{ids}." |
|
170 | notice_failed_to_save_issues: "Failed to save %{count} issue(s) on %{total} selected: %{ids}." | |
171 | notice_failed_to_save_time_entries: "Failed to save %{count} time entrie(s) on %{total} selected: %{ids}." |
|
171 | notice_failed_to_save_time_entries: "Failed to save %{count} time entrie(s) on %{total} selected: %{ids}." | |
172 | notice_failed_to_save_members: "Failed to save member(s): %{errors}." |
|
172 | notice_failed_to_save_members: "Failed to save member(s): %{errors}." | |
173 | notice_no_issue_selected: "No issue is selected! Please, check the issues you want to edit." |
|
173 | notice_no_issue_selected: "No issue is selected! Please, check the issues you want to edit." | |
174 | notice_account_pending: "Your account was created and is now pending administrator approval." |
|
174 | notice_account_pending: "Your account was created and is now pending administrator approval." | |
175 | notice_default_data_loaded: Default configuration successfully loaded. |
|
175 | notice_default_data_loaded: Default configuration successfully loaded. | |
176 | notice_unable_delete_version: Unable to delete version. |
|
176 | notice_unable_delete_version: Unable to delete version. | |
177 | notice_unable_delete_time_entry: Unable to delete time log entry. |
|
177 | notice_unable_delete_time_entry: Unable to delete time log entry. | |
178 | notice_issue_done_ratios_updated: Issue done ratios updated. |
|
178 | notice_issue_done_ratios_updated: Issue done ratios updated. | |
179 | notice_gantt_chart_truncated: "The chart was truncated because it exceeds the maximum number of items that can be displayed (%{max})" |
|
179 | notice_gantt_chart_truncated: "The chart was truncated because it exceeds the maximum number of items that can be displayed (%{max})" | |
180 | notice_issue_successful_create: "Issue %{id} created." |
|
180 | notice_issue_successful_create: "Issue %{id} created." | |
181 | notice_issue_update_conflict: "The issue has been updated by an other user while you were editing it." |
|
181 | notice_issue_update_conflict: "The issue has been updated by an other user while you were editing it." | |
182 | notice_account_deleted: "Your account has been permanently deleted." |
|
182 | notice_account_deleted: "Your account has been permanently deleted." | |
183 | notice_user_successful_create: "User %{id} created." |
|
183 | notice_user_successful_create: "User %{id} created." | |
184 | notice_new_password_must_be_different: The new password must be different from the current password |
|
184 | notice_new_password_must_be_different: The new password must be different from the current password | |
185 |
|
185 | |||
186 | error_can_t_load_default_data: "Default configuration could not be loaded: %{value}" |
|
186 | error_can_t_load_default_data: "Default configuration could not be loaded: %{value}" | |
187 | error_scm_not_found: "The entry or revision was not found in the repository." |
|
187 | error_scm_not_found: "The entry or revision was not found in the repository." | |
188 | error_scm_command_failed: "An error occurred when trying to access the repository: %{value}" |
|
188 | error_scm_command_failed: "An error occurred when trying to access the repository: %{value}" | |
189 | error_scm_annotate: "The entry does not exist or cannot be annotated." |
|
189 | error_scm_annotate: "The entry does not exist or cannot be annotated." | |
190 | error_scm_annotate_big_text_file: "The entry cannot be annotated, as it exceeds the maximum text file size." |
|
190 | error_scm_annotate_big_text_file: "The entry cannot be annotated, as it exceeds the maximum text file size." | |
191 | error_issue_not_found_in_project: 'The issue was not found or does not belong to this project' |
|
191 | error_issue_not_found_in_project: 'The issue was not found or does not belong to this project' | |
192 | error_no_tracker_in_project: 'No tracker is associated to this project. Please check the Project settings.' |
|
192 | error_no_tracker_in_project: 'No tracker is associated to this project. Please check the Project settings.' | |
193 | error_no_default_issue_status: 'No default issue status is defined. Please check your configuration (Go to "Administration -> Issue statuses").' |
|
193 | error_no_default_issue_status: 'No default issue status is defined. Please check your configuration (Go to "Administration -> Issue statuses").' | |
194 | error_can_not_delete_custom_field: Unable to delete custom field |
|
194 | error_can_not_delete_custom_field: Unable to delete custom field | |
195 | error_can_not_delete_tracker: "This tracker contains issues and cannot be deleted." |
|
195 | error_can_not_delete_tracker: "This tracker contains issues and cannot be deleted." | |
196 | error_can_not_remove_role: "This role is in use and cannot be deleted." |
|
196 | error_can_not_remove_role: "This role is in use and cannot be deleted." | |
197 | error_can_not_reopen_issue_on_closed_version: 'An issue assigned to a closed version cannot be reopened' |
|
197 | error_can_not_reopen_issue_on_closed_version: 'An issue assigned to a closed version cannot be reopened' | |
198 | error_can_not_archive_project: This project cannot be archived |
|
198 | error_can_not_archive_project: This project cannot be archived | |
199 | error_issue_done_ratios_not_updated: "Issue done ratios not updated." |
|
199 | error_issue_done_ratios_not_updated: "Issue done ratios not updated." | |
200 | error_workflow_copy_source: 'Please select a source tracker or role' |
|
200 | error_workflow_copy_source: 'Please select a source tracker or role' | |
201 | error_workflow_copy_target: 'Please select target tracker(s) and role(s)' |
|
201 | error_workflow_copy_target: 'Please select target tracker(s) and role(s)' | |
202 | error_unable_delete_issue_status: 'Unable to delete issue status' |
|
202 | error_unable_delete_issue_status: 'Unable to delete issue status' | |
203 | error_unable_to_connect: "Unable to connect (%{value})" |
|
203 | error_unable_to_connect: "Unable to connect (%{value})" | |
204 | error_attachment_too_big: "This file cannot be uploaded because it exceeds the maximum allowed file size (%{max_size})" |
|
204 | error_attachment_too_big: "This file cannot be uploaded because it exceeds the maximum allowed file size (%{max_size})" | |
205 | error_session_expired: "Your session has expired. Please login again." |
|
205 | error_session_expired: "Your session has expired. Please login again." | |
206 | warning_attachments_not_saved: "%{count} file(s) could not be saved." |
|
206 | warning_attachments_not_saved: "%{count} file(s) could not be saved." | |
|
207 | error_password_expired: "Your password has expired or the administrator requires you to change it." | |||
207 |
|
208 | |||
208 | mail_subject_lost_password: "Your %{value} password" |
|
209 | mail_subject_lost_password: "Your %{value} password" | |
209 | mail_body_lost_password: 'To change your password, click on the following link:' |
|
210 | mail_body_lost_password: 'To change your password, click on the following link:' | |
210 | mail_subject_register: "Your %{value} account activation" |
|
211 | mail_subject_register: "Your %{value} account activation" | |
211 | mail_body_register: 'To activate your account, click on the following link:' |
|
212 | mail_body_register: 'To activate your account, click on the following link:' | |
212 | mail_body_account_information_external: "You can use your %{value} account to log in." |
|
213 | mail_body_account_information_external: "You can use your %{value} account to log in." | |
213 | mail_body_account_information: Your account information |
|
214 | mail_body_account_information: Your account information | |
214 | mail_subject_account_activation_request: "%{value} account activation request" |
|
215 | mail_subject_account_activation_request: "%{value} account activation request" | |
215 | mail_body_account_activation_request: "A new user (%{value}) has registered. The account is pending your approval:" |
|
216 | mail_body_account_activation_request: "A new user (%{value}) has registered. The account is pending your approval:" | |
216 | mail_subject_reminder: "%{count} issue(s) due in the next %{days} days" |
|
217 | mail_subject_reminder: "%{count} issue(s) due in the next %{days} days" | |
217 | mail_body_reminder: "%{count} issue(s) that are assigned to you are due in the next %{days} days:" |
|
218 | mail_body_reminder: "%{count} issue(s) that are assigned to you are due in the next %{days} days:" | |
218 | mail_subject_wiki_content_added: "'%{id}' wiki page has been added" |
|
219 | mail_subject_wiki_content_added: "'%{id}' wiki page has been added" | |
219 | mail_body_wiki_content_added: "The '%{id}' wiki page has been added by %{author}." |
|
220 | mail_body_wiki_content_added: "The '%{id}' wiki page has been added by %{author}." | |
220 | mail_subject_wiki_content_updated: "'%{id}' wiki page has been updated" |
|
221 | mail_subject_wiki_content_updated: "'%{id}' wiki page has been updated" | |
221 | mail_body_wiki_content_updated: "The '%{id}' wiki page has been updated by %{author}." |
|
222 | mail_body_wiki_content_updated: "The '%{id}' wiki page has been updated by %{author}." | |
222 |
|
223 | |||
223 | field_name: Name |
|
224 | field_name: Name | |
224 | field_description: Description |
|
225 | field_description: Description | |
225 | field_summary: Summary |
|
226 | field_summary: Summary | |
226 | field_is_required: Required |
|
227 | field_is_required: Required | |
227 | field_firstname: First name |
|
228 | field_firstname: First name | |
228 | field_lastname: Last name |
|
229 | field_lastname: Last name | |
229 | field_mail: Email |
|
230 | field_mail: Email | |
230 | field_address: Email |
|
231 | field_address: Email | |
231 | field_filename: File |
|
232 | field_filename: File | |
232 | field_filesize: Size |
|
233 | field_filesize: Size | |
233 | field_downloads: Downloads |
|
234 | field_downloads: Downloads | |
234 | field_author: Author |
|
235 | field_author: Author | |
235 | field_created_on: Created |
|
236 | field_created_on: Created | |
236 | field_updated_on: Updated |
|
237 | field_updated_on: Updated | |
237 | field_closed_on: Closed |
|
238 | field_closed_on: Closed | |
238 | field_field_format: Format |
|
239 | field_field_format: Format | |
239 | field_is_for_all: For all projects |
|
240 | field_is_for_all: For all projects | |
240 | field_possible_values: Possible values |
|
241 | field_possible_values: Possible values | |
241 | field_regexp: Regular expression |
|
242 | field_regexp: Regular expression | |
242 | field_min_length: Minimum length |
|
243 | field_min_length: Minimum length | |
243 | field_max_length: Maximum length |
|
244 | field_max_length: Maximum length | |
244 | field_value: Value |
|
245 | field_value: Value | |
245 | field_category: Category |
|
246 | field_category: Category | |
246 | field_title: Title |
|
247 | field_title: Title | |
247 | field_project: Project |
|
248 | field_project: Project | |
248 | field_issue: Issue |
|
249 | field_issue: Issue | |
249 | field_status: Status |
|
250 | field_status: Status | |
250 | field_notes: Notes |
|
251 | field_notes: Notes | |
251 | field_is_closed: Issue closed |
|
252 | field_is_closed: Issue closed | |
252 | field_is_default: Default value |
|
253 | field_is_default: Default value | |
253 | field_tracker: Tracker |
|
254 | field_tracker: Tracker | |
254 | field_subject: Subject |
|
255 | field_subject: Subject | |
255 | field_due_date: Due date |
|
256 | field_due_date: Due date | |
256 | field_assigned_to: Assignee |
|
257 | field_assigned_to: Assignee | |
257 | field_priority: Priority |
|
258 | field_priority: Priority | |
258 | field_fixed_version: Target version |
|
259 | field_fixed_version: Target version | |
259 | field_user: User |
|
260 | field_user: User | |
260 | field_principal: Principal |
|
261 | field_principal: Principal | |
261 | field_role: Role |
|
262 | field_role: Role | |
262 | field_homepage: Homepage |
|
263 | field_homepage: Homepage | |
263 | field_is_public: Public |
|
264 | field_is_public: Public | |
264 | field_parent: Subproject of |
|
265 | field_parent: Subproject of | |
265 | field_is_in_roadmap: Issues displayed in roadmap |
|
266 | field_is_in_roadmap: Issues displayed in roadmap | |
266 | field_login: Login |
|
267 | field_login: Login | |
267 | field_mail_notification: Email notifications |
|
268 | field_mail_notification: Email notifications | |
268 | field_admin: Administrator |
|
269 | field_admin: Administrator | |
269 | field_last_login_on: Last connection |
|
270 | field_last_login_on: Last connection | |
270 | field_language: Language |
|
271 | field_language: Language | |
271 | field_effective_date: Date |
|
272 | field_effective_date: Date | |
272 | field_password: Password |
|
273 | field_password: Password | |
273 | field_new_password: New password |
|
274 | field_new_password: New password | |
274 | field_password_confirmation: Confirmation |
|
275 | field_password_confirmation: Confirmation | |
275 | field_version: Version |
|
276 | field_version: Version | |
276 | field_type: Type |
|
277 | field_type: Type | |
277 | field_host: Host |
|
278 | field_host: Host | |
278 | field_port: Port |
|
279 | field_port: Port | |
279 | field_account: Account |
|
280 | field_account: Account | |
280 | field_base_dn: Base DN |
|
281 | field_base_dn: Base DN | |
281 | field_attr_login: Login attribute |
|
282 | field_attr_login: Login attribute | |
282 | field_attr_firstname: Firstname attribute |
|
283 | field_attr_firstname: Firstname attribute | |
283 | field_attr_lastname: Lastname attribute |
|
284 | field_attr_lastname: Lastname attribute | |
284 | field_attr_mail: Email attribute |
|
285 | field_attr_mail: Email attribute | |
285 | field_onthefly: On-the-fly user creation |
|
286 | field_onthefly: On-the-fly user creation | |
286 | field_start_date: Start date |
|
287 | field_start_date: Start date | |
287 | field_done_ratio: "% Done" |
|
288 | field_done_ratio: "% Done" | |
288 | field_auth_source: Authentication mode |
|
289 | field_auth_source: Authentication mode | |
289 | field_hide_mail: Hide my email address |
|
290 | field_hide_mail: Hide my email address | |
290 | field_comments: Comment |
|
291 | field_comments: Comment | |
291 | field_url: URL |
|
292 | field_url: URL | |
292 | field_start_page: Start page |
|
293 | field_start_page: Start page | |
293 | field_subproject: Subproject |
|
294 | field_subproject: Subproject | |
294 | field_hours: Hours |
|
295 | field_hours: Hours | |
295 | field_activity: Activity |
|
296 | field_activity: Activity | |
296 | field_spent_on: Date |
|
297 | field_spent_on: Date | |
297 | field_identifier: Identifier |
|
298 | field_identifier: Identifier | |
298 | field_is_filter: Used as a filter |
|
299 | field_is_filter: Used as a filter | |
299 | field_issue_to: Related issue |
|
300 | field_issue_to: Related issue | |
300 | field_delay: Delay |
|
301 | field_delay: Delay | |
301 | field_assignable: Issues can be assigned to this role |
|
302 | field_assignable: Issues can be assigned to this role | |
302 | field_redirect_existing_links: Redirect existing links |
|
303 | field_redirect_existing_links: Redirect existing links | |
303 | field_estimated_hours: Estimated time |
|
304 | field_estimated_hours: Estimated time | |
304 | field_column_names: Columns |
|
305 | field_column_names: Columns | |
305 | field_time_entries: Log time |
|
306 | field_time_entries: Log time | |
306 | field_time_zone: Time zone |
|
307 | field_time_zone: Time zone | |
307 | field_searchable: Searchable |
|
308 | field_searchable: Searchable | |
308 | field_default_value: Default value |
|
309 | field_default_value: Default value | |
309 | field_comments_sorting: Display comments |
|
310 | field_comments_sorting: Display comments | |
310 | field_parent_title: Parent page |
|
311 | field_parent_title: Parent page | |
311 | field_editable: Editable |
|
312 | field_editable: Editable | |
312 | field_watcher: Watcher |
|
313 | field_watcher: Watcher | |
313 | field_identity_url: OpenID URL |
|
314 | field_identity_url: OpenID URL | |
314 | field_content: Content |
|
315 | field_content: Content | |
315 | field_group_by: Group results by |
|
316 | field_group_by: Group results by | |
316 | field_sharing: Sharing |
|
317 | field_sharing: Sharing | |
317 | field_parent_issue: Parent task |
|
318 | field_parent_issue: Parent task | |
318 | field_member_of_group: "Assignee's group" |
|
319 | field_member_of_group: "Assignee's group" | |
319 | field_assigned_to_role: "Assignee's role" |
|
320 | field_assigned_to_role: "Assignee's role" | |
320 | field_text: Text field |
|
321 | field_text: Text field | |
321 | field_visible: Visible |
|
322 | field_visible: Visible | |
322 | field_warn_on_leaving_unsaved: "Warn me when leaving a page with unsaved text" |
|
323 | field_warn_on_leaving_unsaved: "Warn me when leaving a page with unsaved text" | |
323 | field_issues_visibility: Issues visibility |
|
324 | field_issues_visibility: Issues visibility | |
324 | field_is_private: Private |
|
325 | field_is_private: Private | |
325 | field_commit_logs_encoding: Commit messages encoding |
|
326 | field_commit_logs_encoding: Commit messages encoding | |
326 | field_scm_path_encoding: Path encoding |
|
327 | field_scm_path_encoding: Path encoding | |
327 | field_path_to_repository: Path to repository |
|
328 | field_path_to_repository: Path to repository | |
328 | field_root_directory: Root directory |
|
329 | field_root_directory: Root directory | |
329 | field_cvsroot: CVSROOT |
|
330 | field_cvsroot: CVSROOT | |
330 | field_cvs_module: Module |
|
331 | field_cvs_module: Module | |
331 | field_repository_is_default: Main repository |
|
332 | field_repository_is_default: Main repository | |
332 | field_multiple: Multiple values |
|
333 | field_multiple: Multiple values | |
333 | field_auth_source_ldap_filter: LDAP filter |
|
334 | field_auth_source_ldap_filter: LDAP filter | |
334 | field_core_fields: Standard fields |
|
335 | field_core_fields: Standard fields | |
335 | field_timeout: "Timeout (in seconds)" |
|
336 | field_timeout: "Timeout (in seconds)" | |
336 | field_board_parent: Parent forum |
|
337 | field_board_parent: Parent forum | |
337 | field_private_notes: Private notes |
|
338 | field_private_notes: Private notes | |
338 | field_inherit_members: Inherit members |
|
339 | field_inherit_members: Inherit members | |
339 | field_generate_password: Generate password |
|
340 | field_generate_password: Generate password | |
340 | field_must_change_passwd: Must change password at next logon |
|
341 | field_must_change_passwd: Must change password at next logon | |
341 | field_default_status: Default status |
|
342 | field_default_status: Default status | |
342 | field_users_visibility: Users visibility |
|
343 | field_users_visibility: Users visibility | |
343 |
|
344 | |||
344 | setting_app_title: Application title |
|
345 | setting_app_title: Application title | |
345 | setting_app_subtitle: Application subtitle |
|
346 | setting_app_subtitle: Application subtitle | |
346 | setting_welcome_text: Welcome text |
|
347 | setting_welcome_text: Welcome text | |
347 | setting_default_language: Default language |
|
348 | setting_default_language: Default language | |
348 | setting_login_required: Authentication required |
|
349 | setting_login_required: Authentication required | |
349 | setting_self_registration: Self-registration |
|
350 | setting_self_registration: Self-registration | |
350 | setting_attachment_max_size: Maximum attachment size |
|
351 | setting_attachment_max_size: Maximum attachment size | |
351 | setting_issues_export_limit: Issues export limit |
|
352 | setting_issues_export_limit: Issues export limit | |
352 | setting_mail_from: Emission email address |
|
353 | setting_mail_from: Emission email address | |
353 | setting_bcc_recipients: Blind carbon copy recipients (bcc) |
|
354 | setting_bcc_recipients: Blind carbon copy recipients (bcc) | |
354 | setting_plain_text_mail: Plain text mail (no HTML) |
|
355 | setting_plain_text_mail: Plain text mail (no HTML) | |
355 | setting_host_name: Host name and path |
|
356 | setting_host_name: Host name and path | |
356 | setting_text_formatting: Text formatting |
|
357 | setting_text_formatting: Text formatting | |
357 | setting_wiki_compression: Wiki history compression |
|
358 | setting_wiki_compression: Wiki history compression | |
358 | setting_feeds_limit: Maximum number of items in Atom feeds |
|
359 | setting_feeds_limit: Maximum number of items in Atom feeds | |
359 | setting_default_projects_public: New projects are public by default |
|
360 | setting_default_projects_public: New projects are public by default | |
360 | setting_autofetch_changesets: Fetch commits automatically |
|
361 | setting_autofetch_changesets: Fetch commits automatically | |
361 | setting_sys_api_enabled: Enable WS for repository management |
|
362 | setting_sys_api_enabled: Enable WS for repository management | |
362 | setting_commit_ref_keywords: Referencing keywords |
|
363 | setting_commit_ref_keywords: Referencing keywords | |
363 | setting_commit_fix_keywords: Fixing keywords |
|
364 | setting_commit_fix_keywords: Fixing keywords | |
364 | setting_autologin: Autologin |
|
365 | setting_autologin: Autologin | |
365 | setting_date_format: Date format |
|
366 | setting_date_format: Date format | |
366 | setting_time_format: Time format |
|
367 | setting_time_format: Time format | |
367 | setting_cross_project_issue_relations: Allow cross-project issue relations |
|
368 | setting_cross_project_issue_relations: Allow cross-project issue relations | |
368 | setting_cross_project_subtasks: Allow cross-project subtasks |
|
369 | setting_cross_project_subtasks: Allow cross-project subtasks | |
369 | setting_issue_list_default_columns: Default columns displayed on the issue list |
|
370 | setting_issue_list_default_columns: Default columns displayed on the issue list | |
370 | setting_repositories_encodings: Attachments and repositories encodings |
|
371 | setting_repositories_encodings: Attachments and repositories encodings | |
371 | setting_emails_header: Email header |
|
372 | setting_emails_header: Email header | |
372 | setting_emails_footer: Email footer |
|
373 | setting_emails_footer: Email footer | |
373 | setting_protocol: Protocol |
|
374 | setting_protocol: Protocol | |
374 | setting_per_page_options: Objects per page options |
|
375 | setting_per_page_options: Objects per page options | |
375 | setting_user_format: Users display format |
|
376 | setting_user_format: Users display format | |
376 | setting_activity_days_default: Days displayed on project activity |
|
377 | setting_activity_days_default: Days displayed on project activity | |
377 | setting_display_subprojects_issues: Display subprojects issues on main projects by default |
|
378 | setting_display_subprojects_issues: Display subprojects issues on main projects by default | |
378 | setting_enabled_scm: Enabled SCM |
|
379 | setting_enabled_scm: Enabled SCM | |
379 | setting_mail_handler_body_delimiters: "Truncate emails after one of these lines" |
|
380 | setting_mail_handler_body_delimiters: "Truncate emails after one of these lines" | |
380 | setting_mail_handler_api_enabled: Enable WS for incoming emails |
|
381 | setting_mail_handler_api_enabled: Enable WS for incoming emails | |
381 | setting_mail_handler_api_key: API key |
|
382 | setting_mail_handler_api_key: API key | |
382 | setting_sequential_project_identifiers: Generate sequential project identifiers |
|
383 | setting_sequential_project_identifiers: Generate sequential project identifiers | |
383 | setting_gravatar_enabled: Use Gravatar user icons |
|
384 | setting_gravatar_enabled: Use Gravatar user icons | |
384 | setting_gravatar_default: Default Gravatar image |
|
385 | setting_gravatar_default: Default Gravatar image | |
385 | setting_diff_max_lines_displayed: Maximum number of diff lines displayed |
|
386 | setting_diff_max_lines_displayed: Maximum number of diff lines displayed | |
386 | setting_file_max_size_displayed: Maximum size of text files displayed inline |
|
387 | setting_file_max_size_displayed: Maximum size of text files displayed inline | |
387 | setting_repository_log_display_limit: Maximum number of revisions displayed on file log |
|
388 | setting_repository_log_display_limit: Maximum number of revisions displayed on file log | |
388 | setting_openid: Allow OpenID login and registration |
|
389 | setting_openid: Allow OpenID login and registration | |
|
390 | setting_password_max_age: Require password change after | |||
389 | setting_password_min_length: Minimum password length |
|
391 | setting_password_min_length: Minimum password length | |
390 | setting_new_project_user_role_id: Role given to a non-admin user who creates a project |
|
392 | setting_new_project_user_role_id: Role given to a non-admin user who creates a project | |
391 | setting_default_projects_modules: Default enabled modules for new projects |
|
393 | setting_default_projects_modules: Default enabled modules for new projects | |
392 | setting_issue_done_ratio: Calculate the issue done ratio with |
|
394 | setting_issue_done_ratio: Calculate the issue done ratio with | |
393 | setting_issue_done_ratio_issue_field: Use the issue field |
|
395 | setting_issue_done_ratio_issue_field: Use the issue field | |
394 | setting_issue_done_ratio_issue_status: Use the issue status |
|
396 | setting_issue_done_ratio_issue_status: Use the issue status | |
395 | setting_start_of_week: Start calendars on |
|
397 | setting_start_of_week: Start calendars on | |
396 | setting_rest_api_enabled: Enable REST web service |
|
398 | setting_rest_api_enabled: Enable REST web service | |
397 | setting_cache_formatted_text: Cache formatted text |
|
399 | setting_cache_formatted_text: Cache formatted text | |
398 | setting_default_notification_option: Default notification option |
|
400 | setting_default_notification_option: Default notification option | |
399 | setting_commit_logtime_enabled: Enable time logging |
|
401 | setting_commit_logtime_enabled: Enable time logging | |
400 | setting_commit_logtime_activity_id: Activity for logged time |
|
402 | setting_commit_logtime_activity_id: Activity for logged time | |
401 | setting_gantt_items_limit: Maximum number of items displayed on the gantt chart |
|
403 | setting_gantt_items_limit: Maximum number of items displayed on the gantt chart | |
402 | setting_issue_group_assignment: Allow issue assignment to groups |
|
404 | setting_issue_group_assignment: Allow issue assignment to groups | |
403 | setting_default_issue_start_date_to_creation_date: Use current date as start date for new issues |
|
405 | setting_default_issue_start_date_to_creation_date: Use current date as start date for new issues | |
404 | setting_commit_cross_project_ref: Allow issues of all the other projects to be referenced and fixed |
|
406 | setting_commit_cross_project_ref: Allow issues of all the other projects to be referenced and fixed | |
405 | setting_unsubscribe: Allow users to delete their own account |
|
407 | setting_unsubscribe: Allow users to delete their own account | |
406 | setting_session_lifetime: Session maximum lifetime |
|
408 | setting_session_lifetime: Session maximum lifetime | |
407 | setting_session_timeout: Session inactivity timeout |
|
409 | setting_session_timeout: Session inactivity timeout | |
408 | setting_thumbnails_enabled: Display attachment thumbnails |
|
410 | setting_thumbnails_enabled: Display attachment thumbnails | |
409 | setting_thumbnails_size: Thumbnails size (in pixels) |
|
411 | setting_thumbnails_size: Thumbnails size (in pixels) | |
410 | setting_non_working_week_days: Non-working days |
|
412 | setting_non_working_week_days: Non-working days | |
411 | setting_jsonp_enabled: Enable JSONP support |
|
413 | setting_jsonp_enabled: Enable JSONP support | |
412 | setting_default_projects_tracker_ids: Default trackers for new projects |
|
414 | setting_default_projects_tracker_ids: Default trackers for new projects | |
413 | setting_mail_handler_excluded_filenames: Exclude attachments by name |
|
415 | setting_mail_handler_excluded_filenames: Exclude attachments by name | |
414 | setting_force_default_language_for_anonymous: Force default language for anonymous users |
|
416 | setting_force_default_language_for_anonymous: Force default language for anonymous users | |
415 | setting_force_default_language_for_loggedin: Force default language for logged-in users |
|
417 | setting_force_default_language_for_loggedin: Force default language for logged-in users | |
416 | setting_link_copied_issue: Link issues on copy |
|
418 | setting_link_copied_issue: Link issues on copy | |
417 | setting_max_additional_emails: Maximum number of additional email addresses |
|
419 | setting_max_additional_emails: Maximum number of additional email addresses | |
418 | setting_search_results_per_page: Search results per page |
|
420 | setting_search_results_per_page: Search results per page | |
419 |
|
421 | |||
420 | permission_add_project: Create project |
|
422 | permission_add_project: Create project | |
421 | permission_add_subprojects: Create subprojects |
|
423 | permission_add_subprojects: Create subprojects | |
422 | permission_edit_project: Edit project |
|
424 | permission_edit_project: Edit project | |
423 | permission_close_project: Close / reopen the project |
|
425 | permission_close_project: Close / reopen the project | |
424 | permission_select_project_modules: Select project modules |
|
426 | permission_select_project_modules: Select project modules | |
425 | permission_manage_members: Manage members |
|
427 | permission_manage_members: Manage members | |
426 | permission_manage_project_activities: Manage project activities |
|
428 | permission_manage_project_activities: Manage project activities | |
427 | permission_manage_versions: Manage versions |
|
429 | permission_manage_versions: Manage versions | |
428 | permission_manage_categories: Manage issue categories |
|
430 | permission_manage_categories: Manage issue categories | |
429 | permission_view_issues: View Issues |
|
431 | permission_view_issues: View Issues | |
430 | permission_add_issues: Add issues |
|
432 | permission_add_issues: Add issues | |
431 | permission_edit_issues: Edit issues |
|
433 | permission_edit_issues: Edit issues | |
432 | permission_copy_issues: Copy issues |
|
434 | permission_copy_issues: Copy issues | |
433 | permission_manage_issue_relations: Manage issue relations |
|
435 | permission_manage_issue_relations: Manage issue relations | |
434 | permission_set_issues_private: Set issues public or private |
|
436 | permission_set_issues_private: Set issues public or private | |
435 | permission_set_own_issues_private: Set own issues public or private |
|
437 | permission_set_own_issues_private: Set own issues public or private | |
436 | permission_add_issue_notes: Add notes |
|
438 | permission_add_issue_notes: Add notes | |
437 | permission_edit_issue_notes: Edit notes |
|
439 | permission_edit_issue_notes: Edit notes | |
438 | permission_edit_own_issue_notes: Edit own notes |
|
440 | permission_edit_own_issue_notes: Edit own notes | |
439 | permission_view_private_notes: View private notes |
|
441 | permission_view_private_notes: View private notes | |
440 | permission_set_notes_private: Set notes as private |
|
442 | permission_set_notes_private: Set notes as private | |
441 | permission_move_issues: Move issues |
|
443 | permission_move_issues: Move issues | |
442 | permission_delete_issues: Delete issues |
|
444 | permission_delete_issues: Delete issues | |
443 | permission_manage_public_queries: Manage public queries |
|
445 | permission_manage_public_queries: Manage public queries | |
444 | permission_save_queries: Save queries |
|
446 | permission_save_queries: Save queries | |
445 | permission_view_gantt: View gantt chart |
|
447 | permission_view_gantt: View gantt chart | |
446 | permission_view_calendar: View calendar |
|
448 | permission_view_calendar: View calendar | |
447 | permission_view_issue_watchers: View watchers list |
|
449 | permission_view_issue_watchers: View watchers list | |
448 | permission_add_issue_watchers: Add watchers |
|
450 | permission_add_issue_watchers: Add watchers | |
449 | permission_delete_issue_watchers: Delete watchers |
|
451 | permission_delete_issue_watchers: Delete watchers | |
450 | permission_log_time: Log spent time |
|
452 | permission_log_time: Log spent time | |
451 | permission_view_time_entries: View spent time |
|
453 | permission_view_time_entries: View spent time | |
452 | permission_edit_time_entries: Edit time logs |
|
454 | permission_edit_time_entries: Edit time logs | |
453 | permission_edit_own_time_entries: Edit own time logs |
|
455 | permission_edit_own_time_entries: Edit own time logs | |
454 | permission_manage_news: Manage news |
|
456 | permission_manage_news: Manage news | |
455 | permission_comment_news: Comment news |
|
457 | permission_comment_news: Comment news | |
456 | permission_view_documents: View documents |
|
458 | permission_view_documents: View documents | |
457 | permission_add_documents: Add documents |
|
459 | permission_add_documents: Add documents | |
458 | permission_edit_documents: Edit documents |
|
460 | permission_edit_documents: Edit documents | |
459 | permission_delete_documents: Delete documents |
|
461 | permission_delete_documents: Delete documents | |
460 | permission_manage_files: Manage files |
|
462 | permission_manage_files: Manage files | |
461 | permission_view_files: View files |
|
463 | permission_view_files: View files | |
462 | permission_manage_wiki: Manage wiki |
|
464 | permission_manage_wiki: Manage wiki | |
463 | permission_rename_wiki_pages: Rename wiki pages |
|
465 | permission_rename_wiki_pages: Rename wiki pages | |
464 | permission_delete_wiki_pages: Delete wiki pages |
|
466 | permission_delete_wiki_pages: Delete wiki pages | |
465 | permission_view_wiki_pages: View wiki |
|
467 | permission_view_wiki_pages: View wiki | |
466 | permission_view_wiki_edits: View wiki history |
|
468 | permission_view_wiki_edits: View wiki history | |
467 | permission_edit_wiki_pages: Edit wiki pages |
|
469 | permission_edit_wiki_pages: Edit wiki pages | |
468 | permission_delete_wiki_pages_attachments: Delete attachments |
|
470 | permission_delete_wiki_pages_attachments: Delete attachments | |
469 | permission_protect_wiki_pages: Protect wiki pages |
|
471 | permission_protect_wiki_pages: Protect wiki pages | |
470 | permission_manage_repository: Manage repository |
|
472 | permission_manage_repository: Manage repository | |
471 | permission_browse_repository: Browse repository |
|
473 | permission_browse_repository: Browse repository | |
472 | permission_view_changesets: View changesets |
|
474 | permission_view_changesets: View changesets | |
473 | permission_commit_access: Commit access |
|
475 | permission_commit_access: Commit access | |
474 | permission_manage_boards: Manage forums |
|
476 | permission_manage_boards: Manage forums | |
475 | permission_view_messages: View messages |
|
477 | permission_view_messages: View messages | |
476 | permission_add_messages: Post messages |
|
478 | permission_add_messages: Post messages | |
477 | permission_edit_messages: Edit messages |
|
479 | permission_edit_messages: Edit messages | |
478 | permission_edit_own_messages: Edit own messages |
|
480 | permission_edit_own_messages: Edit own messages | |
479 | permission_delete_messages: Delete messages |
|
481 | permission_delete_messages: Delete messages | |
480 | permission_delete_own_messages: Delete own messages |
|
482 | permission_delete_own_messages: Delete own messages | |
481 | permission_export_wiki_pages: Export wiki pages |
|
483 | permission_export_wiki_pages: Export wiki pages | |
482 | permission_manage_subtasks: Manage subtasks |
|
484 | permission_manage_subtasks: Manage subtasks | |
483 | permission_manage_related_issues: Manage related issues |
|
485 | permission_manage_related_issues: Manage related issues | |
484 |
|
486 | |||
485 | project_module_issue_tracking: Issue tracking |
|
487 | project_module_issue_tracking: Issue tracking | |
486 | project_module_time_tracking: Time tracking |
|
488 | project_module_time_tracking: Time tracking | |
487 | project_module_news: News |
|
489 | project_module_news: News | |
488 | project_module_documents: Documents |
|
490 | project_module_documents: Documents | |
489 | project_module_files: Files |
|
491 | project_module_files: Files | |
490 | project_module_wiki: Wiki |
|
492 | project_module_wiki: Wiki | |
491 | project_module_repository: Repository |
|
493 | project_module_repository: Repository | |
492 | project_module_boards: Forums |
|
494 | project_module_boards: Forums | |
493 | project_module_calendar: Calendar |
|
495 | project_module_calendar: Calendar | |
494 | project_module_gantt: Gantt |
|
496 | project_module_gantt: Gantt | |
495 |
|
497 | |||
496 | label_user: User |
|
498 | label_user: User | |
497 | label_user_plural: Users |
|
499 | label_user_plural: Users | |
498 | label_user_new: New user |
|
500 | label_user_new: New user | |
499 | label_user_anonymous: Anonymous |
|
501 | label_user_anonymous: Anonymous | |
500 | label_project: Project |
|
502 | label_project: Project | |
501 | label_project_new: New project |
|
503 | label_project_new: New project | |
502 | label_project_plural: Projects |
|
504 | label_project_plural: Projects | |
503 | label_x_projects: |
|
505 | label_x_projects: | |
504 | zero: no projects |
|
506 | zero: no projects | |
505 | one: 1 project |
|
507 | one: 1 project | |
506 | other: "%{count} projects" |
|
508 | other: "%{count} projects" | |
507 | label_project_all: All Projects |
|
509 | label_project_all: All Projects | |
508 | label_project_latest: Latest projects |
|
510 | label_project_latest: Latest projects | |
509 | label_issue: Issue |
|
511 | label_issue: Issue | |
510 | label_issue_new: New issue |
|
512 | label_issue_new: New issue | |
511 | label_issue_plural: Issues |
|
513 | label_issue_plural: Issues | |
512 | label_issue_view_all: View all issues |
|
514 | label_issue_view_all: View all issues | |
513 | label_issues_by: "Issues by %{value}" |
|
515 | label_issues_by: "Issues by %{value}" | |
514 | label_issue_added: Issue added |
|
516 | label_issue_added: Issue added | |
515 | label_issue_updated: Issue updated |
|
517 | label_issue_updated: Issue updated | |
516 | label_issue_note_added: Note added |
|
518 | label_issue_note_added: Note added | |
517 | label_issue_status_updated: Status updated |
|
519 | label_issue_status_updated: Status updated | |
518 | label_issue_assigned_to_updated: Assignee updated |
|
520 | label_issue_assigned_to_updated: Assignee updated | |
519 | label_issue_priority_updated: Priority updated |
|
521 | label_issue_priority_updated: Priority updated | |
520 | label_document: Document |
|
522 | label_document: Document | |
521 | label_document_new: New document |
|
523 | label_document_new: New document | |
522 | label_document_plural: Documents |
|
524 | label_document_plural: Documents | |
523 | label_document_added: Document added |
|
525 | label_document_added: Document added | |
524 | label_role: Role |
|
526 | label_role: Role | |
525 | label_role_plural: Roles |
|
527 | label_role_plural: Roles | |
526 | label_role_new: New role |
|
528 | label_role_new: New role | |
527 | label_role_and_permissions: Roles and permissions |
|
529 | label_role_and_permissions: Roles and permissions | |
528 | label_role_anonymous: Anonymous |
|
530 | label_role_anonymous: Anonymous | |
529 | label_role_non_member: Non member |
|
531 | label_role_non_member: Non member | |
530 | label_member: Member |
|
532 | label_member: Member | |
531 | label_member_new: New member |
|
533 | label_member_new: New member | |
532 | label_member_plural: Members |
|
534 | label_member_plural: Members | |
533 | label_tracker: Tracker |
|
535 | label_tracker: Tracker | |
534 | label_tracker_plural: Trackers |
|
536 | label_tracker_plural: Trackers | |
535 | label_tracker_new: New tracker |
|
537 | label_tracker_new: New tracker | |
536 | label_workflow: Workflow |
|
538 | label_workflow: Workflow | |
537 | label_issue_status: Issue status |
|
539 | label_issue_status: Issue status | |
538 | label_issue_status_plural: Issue statuses |
|
540 | label_issue_status_plural: Issue statuses | |
539 | label_issue_status_new: New status |
|
541 | label_issue_status_new: New status | |
540 | label_issue_category: Issue category |
|
542 | label_issue_category: Issue category | |
541 | label_issue_category_plural: Issue categories |
|
543 | label_issue_category_plural: Issue categories | |
542 | label_issue_category_new: New category |
|
544 | label_issue_category_new: New category | |
543 | label_custom_field: Custom field |
|
545 | label_custom_field: Custom field | |
544 | label_custom_field_plural: Custom fields |
|
546 | label_custom_field_plural: Custom fields | |
545 | label_custom_field_new: New custom field |
|
547 | label_custom_field_new: New custom field | |
546 | label_enumerations: Enumerations |
|
548 | label_enumerations: Enumerations | |
547 | label_enumeration_new: New value |
|
549 | label_enumeration_new: New value | |
548 | label_information: Information |
|
550 | label_information: Information | |
549 | label_information_plural: Information |
|
551 | label_information_plural: Information | |
550 | label_please_login: Please log in |
|
552 | label_please_login: Please log in | |
551 | label_register: Register |
|
553 | label_register: Register | |
552 | label_login_with_open_id_option: or login with OpenID |
|
554 | label_login_with_open_id_option: or login with OpenID | |
553 | label_password_lost: Lost password |
|
555 | label_password_lost: Lost password | |
554 | label_home: Home |
|
556 | label_home: Home | |
555 | label_my_page: My page |
|
557 | label_my_page: My page | |
556 | label_my_account: My account |
|
558 | label_my_account: My account | |
557 | label_my_projects: My projects |
|
559 | label_my_projects: My projects | |
558 | label_my_page_block: My page block |
|
560 | label_my_page_block: My page block | |
559 | label_administration: Administration |
|
561 | label_administration: Administration | |
560 | label_login: Sign in |
|
562 | label_login: Sign in | |
561 | label_logout: Sign out |
|
563 | label_logout: Sign out | |
562 | label_help: Help |
|
564 | label_help: Help | |
563 | label_reported_issues: Reported issues |
|
565 | label_reported_issues: Reported issues | |
564 | label_assigned_to_me_issues: Issues assigned to me |
|
566 | label_assigned_to_me_issues: Issues assigned to me | |
565 | label_last_login: Last connection |
|
567 | label_last_login: Last connection | |
566 | label_registered_on: Registered on |
|
568 | label_registered_on: Registered on | |
567 | label_activity: Activity |
|
569 | label_activity: Activity | |
568 | label_overall_activity: Overall activity |
|
570 | label_overall_activity: Overall activity | |
569 | label_user_activity: "%{value}'s activity" |
|
571 | label_user_activity: "%{value}'s activity" | |
570 | label_new: New |
|
572 | label_new: New | |
571 | label_logged_as: Logged in as |
|
573 | label_logged_as: Logged in as | |
572 | label_environment: Environment |
|
574 | label_environment: Environment | |
573 | label_authentication: Authentication |
|
575 | label_authentication: Authentication | |
574 | label_auth_source: Authentication mode |
|
576 | label_auth_source: Authentication mode | |
575 | label_auth_source_new: New authentication mode |
|
577 | label_auth_source_new: New authentication mode | |
576 | label_auth_source_plural: Authentication modes |
|
578 | label_auth_source_plural: Authentication modes | |
577 | label_subproject_plural: Subprojects |
|
579 | label_subproject_plural: Subprojects | |
578 | label_subproject_new: New subproject |
|
580 | label_subproject_new: New subproject | |
579 | label_and_its_subprojects: "%{value} and its subprojects" |
|
581 | label_and_its_subprojects: "%{value} and its subprojects" | |
580 | label_min_max_length: Min - Max length |
|
582 | label_min_max_length: Min - Max length | |
581 | label_list: List |
|
583 | label_list: List | |
582 | label_date: Date |
|
584 | label_date: Date | |
583 | label_integer: Integer |
|
585 | label_integer: Integer | |
584 | label_float: Float |
|
586 | label_float: Float | |
585 | label_boolean: Boolean |
|
587 | label_boolean: Boolean | |
586 | label_string: Text |
|
588 | label_string: Text | |
587 | label_text: Long text |
|
589 | label_text: Long text | |
588 | label_attribute: Attribute |
|
590 | label_attribute: Attribute | |
589 | label_attribute_plural: Attributes |
|
591 | label_attribute_plural: Attributes | |
590 | label_no_data: No data to display |
|
592 | label_no_data: No data to display | |
591 | label_change_status: Change status |
|
593 | label_change_status: Change status | |
592 | label_history: History |
|
594 | label_history: History | |
593 | label_attachment: File |
|
595 | label_attachment: File | |
594 | label_attachment_new: New file |
|
596 | label_attachment_new: New file | |
595 | label_attachment_delete: Delete file |
|
597 | label_attachment_delete: Delete file | |
596 | label_attachment_plural: Files |
|
598 | label_attachment_plural: Files | |
597 | label_file_added: File added |
|
599 | label_file_added: File added | |
598 | label_report: Report |
|
600 | label_report: Report | |
599 | label_report_plural: Reports |
|
601 | label_report_plural: Reports | |
600 | label_news: News |
|
602 | label_news: News | |
601 | label_news_new: Add news |
|
603 | label_news_new: Add news | |
602 | label_news_plural: News |
|
604 | label_news_plural: News | |
603 | label_news_latest: Latest news |
|
605 | label_news_latest: Latest news | |
604 | label_news_view_all: View all news |
|
606 | label_news_view_all: View all news | |
605 | label_news_added: News added |
|
607 | label_news_added: News added | |
606 | label_news_comment_added: Comment added to a news |
|
608 | label_news_comment_added: Comment added to a news | |
607 | label_settings: Settings |
|
609 | label_settings: Settings | |
608 | label_overview: Overview |
|
610 | label_overview: Overview | |
609 | label_version: Version |
|
611 | label_version: Version | |
610 | label_version_new: New version |
|
612 | label_version_new: New version | |
611 | label_version_plural: Versions |
|
613 | label_version_plural: Versions | |
612 | label_close_versions: Close completed versions |
|
614 | label_close_versions: Close completed versions | |
613 | label_confirmation: Confirmation |
|
615 | label_confirmation: Confirmation | |
614 | label_export_to: 'Also available in:' |
|
616 | label_export_to: 'Also available in:' | |
615 | label_read: Read... |
|
617 | label_read: Read... | |
616 | label_public_projects: Public projects |
|
618 | label_public_projects: Public projects | |
617 | label_open_issues: open |
|
619 | label_open_issues: open | |
618 | label_open_issues_plural: open |
|
620 | label_open_issues_plural: open | |
619 | label_closed_issues: closed |
|
621 | label_closed_issues: closed | |
620 | label_closed_issues_plural: closed |
|
622 | label_closed_issues_plural: closed | |
621 | label_x_open_issues_abbr_on_total: |
|
623 | label_x_open_issues_abbr_on_total: | |
622 | zero: 0 open / %{total} |
|
624 | zero: 0 open / %{total} | |
623 | one: 1 open / %{total} |
|
625 | one: 1 open / %{total} | |
624 | other: "%{count} open / %{total}" |
|
626 | other: "%{count} open / %{total}" | |
625 | label_x_open_issues_abbr: |
|
627 | label_x_open_issues_abbr: | |
626 | zero: 0 open |
|
628 | zero: 0 open | |
627 | one: 1 open |
|
629 | one: 1 open | |
628 | other: "%{count} open" |
|
630 | other: "%{count} open" | |
629 | label_x_closed_issues_abbr: |
|
631 | label_x_closed_issues_abbr: | |
630 | zero: 0 closed |
|
632 | zero: 0 closed | |
631 | one: 1 closed |
|
633 | one: 1 closed | |
632 | other: "%{count} closed" |
|
634 | other: "%{count} closed" | |
633 | label_x_issues: |
|
635 | label_x_issues: | |
634 | zero: 0 issues |
|
636 | zero: 0 issues | |
635 | one: 1 issue |
|
637 | one: 1 issue | |
636 | other: "%{count} issues" |
|
638 | other: "%{count} issues" | |
637 | label_total: Total |
|
639 | label_total: Total | |
638 | label_total_time: Total time |
|
640 | label_total_time: Total time | |
639 | label_permissions: Permissions |
|
641 | label_permissions: Permissions | |
640 | label_current_status: Current status |
|
642 | label_current_status: Current status | |
641 | label_new_statuses_allowed: New statuses allowed |
|
643 | label_new_statuses_allowed: New statuses allowed | |
642 | label_all: all |
|
644 | label_all: all | |
643 | label_any: any |
|
645 | label_any: any | |
644 | label_none: none |
|
646 | label_none: none | |
645 | label_nobody: nobody |
|
647 | label_nobody: nobody | |
646 | label_next: Next |
|
648 | label_next: Next | |
647 | label_previous: Previous |
|
649 | label_previous: Previous | |
648 | label_used_by: Used by |
|
650 | label_used_by: Used by | |
649 | label_details: Details |
|
651 | label_details: Details | |
650 | label_add_note: Add a note |
|
652 | label_add_note: Add a note | |
651 | label_calendar: Calendar |
|
653 | label_calendar: Calendar | |
652 | label_months_from: months from |
|
654 | label_months_from: months from | |
653 | label_gantt: Gantt |
|
655 | label_gantt: Gantt | |
654 | label_internal: Internal |
|
656 | label_internal: Internal | |
655 | label_last_changes: "last %{count} changes" |
|
657 | label_last_changes: "last %{count} changes" | |
656 | label_change_view_all: View all changes |
|
658 | label_change_view_all: View all changes | |
657 | label_personalize_page: Personalize this page |
|
659 | label_personalize_page: Personalize this page | |
658 | label_comment: Comment |
|
660 | label_comment: Comment | |
659 | label_comment_plural: Comments |
|
661 | label_comment_plural: Comments | |
660 | label_x_comments: |
|
662 | label_x_comments: | |
661 | zero: no comments |
|
663 | zero: no comments | |
662 | one: 1 comment |
|
664 | one: 1 comment | |
663 | other: "%{count} comments" |
|
665 | other: "%{count} comments" | |
664 | label_comment_add: Add a comment |
|
666 | label_comment_add: Add a comment | |
665 | label_comment_added: Comment added |
|
667 | label_comment_added: Comment added | |
666 | label_comment_delete: Delete comments |
|
668 | label_comment_delete: Delete comments | |
667 | label_query: Custom query |
|
669 | label_query: Custom query | |
668 | label_query_plural: Custom queries |
|
670 | label_query_plural: Custom queries | |
669 | label_query_new: New query |
|
671 | label_query_new: New query | |
670 | label_my_queries: My custom queries |
|
672 | label_my_queries: My custom queries | |
671 | label_filter_add: Add filter |
|
673 | label_filter_add: Add filter | |
672 | label_filter_plural: Filters |
|
674 | label_filter_plural: Filters | |
673 | label_equals: is |
|
675 | label_equals: is | |
674 | label_not_equals: is not |
|
676 | label_not_equals: is not | |
675 | label_in_less_than: in less than |
|
677 | label_in_less_than: in less than | |
676 | label_in_more_than: in more than |
|
678 | label_in_more_than: in more than | |
677 | label_in_the_next_days: in the next |
|
679 | label_in_the_next_days: in the next | |
678 | label_in_the_past_days: in the past |
|
680 | label_in_the_past_days: in the past | |
679 | label_greater_or_equal: '>=' |
|
681 | label_greater_or_equal: '>=' | |
680 | label_less_or_equal: '<=' |
|
682 | label_less_or_equal: '<=' | |
681 | label_between: between |
|
683 | label_between: between | |
682 | label_in: in |
|
684 | label_in: in | |
683 | label_today: today |
|
685 | label_today: today | |
684 | label_all_time: all time |
|
686 | label_all_time: all time | |
685 | label_yesterday: yesterday |
|
687 | label_yesterday: yesterday | |
686 | label_this_week: this week |
|
688 | label_this_week: this week | |
687 | label_last_week: last week |
|
689 | label_last_week: last week | |
688 | label_last_n_weeks: "last %{count} weeks" |
|
690 | label_last_n_weeks: "last %{count} weeks" | |
689 | label_last_n_days: "last %{count} days" |
|
691 | label_last_n_days: "last %{count} days" | |
690 | label_this_month: this month |
|
692 | label_this_month: this month | |
691 | label_last_month: last month |
|
693 | label_last_month: last month | |
692 | label_this_year: this year |
|
694 | label_this_year: this year | |
693 | label_date_range: Date range |
|
695 | label_date_range: Date range | |
694 | label_less_than_ago: less than days ago |
|
696 | label_less_than_ago: less than days ago | |
695 | label_more_than_ago: more than days ago |
|
697 | label_more_than_ago: more than days ago | |
696 | label_ago: days ago |
|
698 | label_ago: days ago | |
697 | label_contains: contains |
|
699 | label_contains: contains | |
698 | label_not_contains: doesn't contain |
|
700 | label_not_contains: doesn't contain | |
699 | label_any_issues_in_project: any issues in project |
|
701 | label_any_issues_in_project: any issues in project | |
700 | label_any_issues_not_in_project: any issues not in project |
|
702 | label_any_issues_not_in_project: any issues not in project | |
701 | label_no_issues_in_project: no issues in project |
|
703 | label_no_issues_in_project: no issues in project | |
702 | label_day_plural: days |
|
704 | label_day_plural: days | |
703 | label_repository: Repository |
|
705 | label_repository: Repository | |
704 | label_repository_new: New repository |
|
706 | label_repository_new: New repository | |
705 | label_repository_plural: Repositories |
|
707 | label_repository_plural: Repositories | |
706 | label_browse: Browse |
|
708 | label_browse: Browse | |
707 | label_branch: Branch |
|
709 | label_branch: Branch | |
708 | label_tag: Tag |
|
710 | label_tag: Tag | |
709 | label_revision: Revision |
|
711 | label_revision: Revision | |
710 | label_revision_plural: Revisions |
|
712 | label_revision_plural: Revisions | |
711 | label_revision_id: "Revision %{value}" |
|
713 | label_revision_id: "Revision %{value}" | |
712 | label_associated_revisions: Associated revisions |
|
714 | label_associated_revisions: Associated revisions | |
713 | label_added: added |
|
715 | label_added: added | |
714 | label_modified: modified |
|
716 | label_modified: modified | |
715 | label_copied: copied |
|
717 | label_copied: copied | |
716 | label_renamed: renamed |
|
718 | label_renamed: renamed | |
717 | label_deleted: deleted |
|
719 | label_deleted: deleted | |
718 | label_latest_revision: Latest revision |
|
720 | label_latest_revision: Latest revision | |
719 | label_latest_revision_plural: Latest revisions |
|
721 | label_latest_revision_plural: Latest revisions | |
720 | label_view_revisions: View revisions |
|
722 | label_view_revisions: View revisions | |
721 | label_view_all_revisions: View all revisions |
|
723 | label_view_all_revisions: View all revisions | |
722 | label_max_size: Maximum size |
|
724 | label_max_size: Maximum size | |
723 | label_sort_highest: Move to top |
|
725 | label_sort_highest: Move to top | |
724 | label_sort_higher: Move up |
|
726 | label_sort_higher: Move up | |
725 | label_sort_lower: Move down |
|
727 | label_sort_lower: Move down | |
726 | label_sort_lowest: Move to bottom |
|
728 | label_sort_lowest: Move to bottom | |
727 | label_roadmap: Roadmap |
|
729 | label_roadmap: Roadmap | |
728 | label_roadmap_due_in: "Due in %{value}" |
|
730 | label_roadmap_due_in: "Due in %{value}" | |
729 | label_roadmap_overdue: "%{value} late" |
|
731 | label_roadmap_overdue: "%{value} late" | |
730 | label_roadmap_no_issues: No issues for this version |
|
732 | label_roadmap_no_issues: No issues for this version | |
731 | label_search: Search |
|
733 | label_search: Search | |
732 | label_result_plural: Results |
|
734 | label_result_plural: Results | |
733 | label_all_words: All words |
|
735 | label_all_words: All words | |
734 | label_wiki: Wiki |
|
736 | label_wiki: Wiki | |
735 | label_wiki_edit: Wiki edit |
|
737 | label_wiki_edit: Wiki edit | |
736 | label_wiki_edit_plural: Wiki edits |
|
738 | label_wiki_edit_plural: Wiki edits | |
737 | label_wiki_page: Wiki page |
|
739 | label_wiki_page: Wiki page | |
738 | label_wiki_page_plural: Wiki pages |
|
740 | label_wiki_page_plural: Wiki pages | |
739 | label_index_by_title: Index by title |
|
741 | label_index_by_title: Index by title | |
740 | label_index_by_date: Index by date |
|
742 | label_index_by_date: Index by date | |
741 | label_current_version: Current version |
|
743 | label_current_version: Current version | |
742 | label_preview: Preview |
|
744 | label_preview: Preview | |
743 | label_feed_plural: Feeds |
|
745 | label_feed_plural: Feeds | |
744 | label_changes_details: Details of all changes |
|
746 | label_changes_details: Details of all changes | |
745 | label_issue_tracking: Issue tracking |
|
747 | label_issue_tracking: Issue tracking | |
746 | label_spent_time: Spent time |
|
748 | label_spent_time: Spent time | |
747 | label_overall_spent_time: Overall spent time |
|
749 | label_overall_spent_time: Overall spent time | |
748 | label_f_hour: "%{value} hour" |
|
750 | label_f_hour: "%{value} hour" | |
749 | label_f_hour_plural: "%{value} hours" |
|
751 | label_f_hour_plural: "%{value} hours" | |
750 | label_time_tracking: Time tracking |
|
752 | label_time_tracking: Time tracking | |
751 | label_change_plural: Changes |
|
753 | label_change_plural: Changes | |
752 | label_statistics: Statistics |
|
754 | label_statistics: Statistics | |
753 | label_commits_per_month: Commits per month |
|
755 | label_commits_per_month: Commits per month | |
754 | label_commits_per_author: Commits per author |
|
756 | label_commits_per_author: Commits per author | |
755 | label_diff: diff |
|
757 | label_diff: diff | |
756 | label_view_diff: View differences |
|
758 | label_view_diff: View differences | |
757 | label_diff_inline: inline |
|
759 | label_diff_inline: inline | |
758 | label_diff_side_by_side: side by side |
|
760 | label_diff_side_by_side: side by side | |
759 | label_options: Options |
|
761 | label_options: Options | |
760 | label_copy_workflow_from: Copy workflow from |
|
762 | label_copy_workflow_from: Copy workflow from | |
761 | label_permissions_report: Permissions report |
|
763 | label_permissions_report: Permissions report | |
762 | label_watched_issues: Watched issues |
|
764 | label_watched_issues: Watched issues | |
763 | label_related_issues: Related issues |
|
765 | label_related_issues: Related issues | |
764 | label_applied_status: Applied status |
|
766 | label_applied_status: Applied status | |
765 | label_loading: Loading... |
|
767 | label_loading: Loading... | |
766 | label_relation_new: New relation |
|
768 | label_relation_new: New relation | |
767 | label_relation_delete: Delete relation |
|
769 | label_relation_delete: Delete relation | |
768 | label_relates_to: Related to |
|
770 | label_relates_to: Related to | |
769 | label_duplicates: Duplicates |
|
771 | label_duplicates: Duplicates | |
770 | label_duplicated_by: Duplicated by |
|
772 | label_duplicated_by: Duplicated by | |
771 | label_blocks: Blocks |
|
773 | label_blocks: Blocks | |
772 | label_blocked_by: Blocked by |
|
774 | label_blocked_by: Blocked by | |
773 | label_precedes: Precedes |
|
775 | label_precedes: Precedes | |
774 | label_follows: Follows |
|
776 | label_follows: Follows | |
775 | label_copied_to: Copied to |
|
777 | label_copied_to: Copied to | |
776 | label_copied_from: Copied from |
|
778 | label_copied_from: Copied from | |
777 | label_end_to_start: end to start |
|
779 | label_end_to_start: end to start | |
778 | label_end_to_end: end to end |
|
780 | label_end_to_end: end to end | |
779 | label_start_to_start: start to start |
|
781 | label_start_to_start: start to start | |
780 | label_start_to_end: start to end |
|
782 | label_start_to_end: start to end | |
781 | label_stay_logged_in: Stay logged in |
|
783 | label_stay_logged_in: Stay logged in | |
782 | label_disabled: disabled |
|
784 | label_disabled: disabled | |
783 | label_show_completed_versions: Show completed versions |
|
785 | label_show_completed_versions: Show completed versions | |
784 | label_me: me |
|
786 | label_me: me | |
785 | label_board: Forum |
|
787 | label_board: Forum | |
786 | label_board_new: New forum |
|
788 | label_board_new: New forum | |
787 | label_board_plural: Forums |
|
789 | label_board_plural: Forums | |
788 | label_board_locked: Locked |
|
790 | label_board_locked: Locked | |
789 | label_board_sticky: Sticky |
|
791 | label_board_sticky: Sticky | |
790 | label_topic_plural: Topics |
|
792 | label_topic_plural: Topics | |
791 | label_message_plural: Messages |
|
793 | label_message_plural: Messages | |
792 | label_message_last: Last message |
|
794 | label_message_last: Last message | |
793 | label_message_new: New message |
|
795 | label_message_new: New message | |
794 | label_message_posted: Message added |
|
796 | label_message_posted: Message added | |
795 | label_reply_plural: Replies |
|
797 | label_reply_plural: Replies | |
796 | label_send_information: Send account information to the user |
|
798 | label_send_information: Send account information to the user | |
797 | label_year: Year |
|
799 | label_year: Year | |
798 | label_month: Month |
|
800 | label_month: Month | |
799 | label_week: Week |
|
801 | label_week: Week | |
800 | label_date_from: From |
|
802 | label_date_from: From | |
801 | label_date_to: To |
|
803 | label_date_to: To | |
802 | label_language_based: Based on user's language |
|
804 | label_language_based: Based on user's language | |
803 | label_sort_by: "Sort by %{value}" |
|
805 | label_sort_by: "Sort by %{value}" | |
804 | label_send_test_email: Send a test email |
|
806 | label_send_test_email: Send a test email | |
805 | label_feeds_access_key: Atom access key |
|
807 | label_feeds_access_key: Atom access key | |
806 | label_missing_feeds_access_key: Missing a Atom access key |
|
808 | label_missing_feeds_access_key: Missing a Atom access key | |
807 | label_feeds_access_key_created_on: "Atom access key created %{value} ago" |
|
809 | label_feeds_access_key_created_on: "Atom access key created %{value} ago" | |
808 | label_module_plural: Modules |
|
810 | label_module_plural: Modules | |
809 | label_added_time_by: "Added by %{author} %{age} ago" |
|
811 | label_added_time_by: "Added by %{author} %{age} ago" | |
810 | label_updated_time_by: "Updated by %{author} %{age} ago" |
|
812 | label_updated_time_by: "Updated by %{author} %{age} ago" | |
811 | label_updated_time: "Updated %{value} ago" |
|
813 | label_updated_time: "Updated %{value} ago" | |
812 | label_jump_to_a_project: Jump to a project... |
|
814 | label_jump_to_a_project: Jump to a project... | |
813 | label_file_plural: Files |
|
815 | label_file_plural: Files | |
814 | label_changeset_plural: Changesets |
|
816 | label_changeset_plural: Changesets | |
815 | label_default_columns: Default columns |
|
817 | label_default_columns: Default columns | |
816 | label_no_change_option: (No change) |
|
818 | label_no_change_option: (No change) | |
817 | label_bulk_edit_selected_issues: Bulk edit selected issues |
|
819 | label_bulk_edit_selected_issues: Bulk edit selected issues | |
818 | label_bulk_edit_selected_time_entries: Bulk edit selected time entries |
|
820 | label_bulk_edit_selected_time_entries: Bulk edit selected time entries | |
819 | label_theme: Theme |
|
821 | label_theme: Theme | |
820 | label_default: Default |
|
822 | label_default: Default | |
821 | label_search_titles_only: Search titles only |
|
823 | label_search_titles_only: Search titles only | |
822 | label_user_mail_option_all: "For any event on all my projects" |
|
824 | label_user_mail_option_all: "For any event on all my projects" | |
823 | label_user_mail_option_selected: "For any event on the selected projects only..." |
|
825 | label_user_mail_option_selected: "For any event on the selected projects only..." | |
824 | label_user_mail_option_none: "No events" |
|
826 | label_user_mail_option_none: "No events" | |
825 | label_user_mail_option_only_my_events: "Only for things I watch or I'm involved in" |
|
827 | label_user_mail_option_only_my_events: "Only for things I watch or I'm involved in" | |
826 | label_user_mail_option_only_assigned: "Only for things I am assigned to" |
|
828 | label_user_mail_option_only_assigned: "Only for things I am assigned to" | |
827 | label_user_mail_option_only_owner: "Only for things I am the owner of" |
|
829 | label_user_mail_option_only_owner: "Only for things I am the owner of" | |
828 | label_user_mail_no_self_notified: "I don't want to be notified of changes that I make myself" |
|
830 | label_user_mail_no_self_notified: "I don't want to be notified of changes that I make myself" | |
829 | label_registration_activation_by_email: account activation by email |
|
831 | label_registration_activation_by_email: account activation by email | |
830 | label_registration_manual_activation: manual account activation |
|
832 | label_registration_manual_activation: manual account activation | |
831 | label_registration_automatic_activation: automatic account activation |
|
833 | label_registration_automatic_activation: automatic account activation | |
832 | label_display_per_page: "Per page: %{value}" |
|
834 | label_display_per_page: "Per page: %{value}" | |
833 | label_age: Age |
|
835 | label_age: Age | |
834 | label_change_properties: Change properties |
|
836 | label_change_properties: Change properties | |
835 | label_general: General |
|
837 | label_general: General | |
836 | label_more: More |
|
838 | label_more: More | |
837 | label_scm: SCM |
|
839 | label_scm: SCM | |
838 | label_plugins: Plugins |
|
840 | label_plugins: Plugins | |
839 | label_ldap_authentication: LDAP authentication |
|
841 | label_ldap_authentication: LDAP authentication | |
840 | label_downloads_abbr: D/L |
|
842 | label_downloads_abbr: D/L | |
841 | label_optional_description: Optional description |
|
843 | label_optional_description: Optional description | |
842 | label_add_another_file: Add another file |
|
844 | label_add_another_file: Add another file | |
843 | label_preferences: Preferences |
|
845 | label_preferences: Preferences | |
844 | label_chronological_order: In chronological order |
|
846 | label_chronological_order: In chronological order | |
845 | label_reverse_chronological_order: In reverse chronological order |
|
847 | label_reverse_chronological_order: In reverse chronological order | |
846 | label_planning: Planning |
|
848 | label_planning: Planning | |
847 | label_incoming_emails: Incoming emails |
|
849 | label_incoming_emails: Incoming emails | |
848 | label_generate_key: Generate a key |
|
850 | label_generate_key: Generate a key | |
849 | label_issue_watchers: Watchers |
|
851 | label_issue_watchers: Watchers | |
850 | label_example: Example |
|
852 | label_example: Example | |
851 | label_display: Display |
|
853 | label_display: Display | |
852 | label_sort: Sort |
|
854 | label_sort: Sort | |
853 | label_ascending: Ascending |
|
855 | label_ascending: Ascending | |
854 | label_descending: Descending |
|
856 | label_descending: Descending | |
855 | label_date_from_to: From %{start} to %{end} |
|
857 | label_date_from_to: From %{start} to %{end} | |
856 | label_wiki_content_added: Wiki page added |
|
858 | label_wiki_content_added: Wiki page added | |
857 | label_wiki_content_updated: Wiki page updated |
|
859 | label_wiki_content_updated: Wiki page updated | |
858 | label_group: Group |
|
860 | label_group: Group | |
859 | label_group_plural: Groups |
|
861 | label_group_plural: Groups | |
860 | label_group_new: New group |
|
862 | label_group_new: New group | |
861 | label_group_anonymous: Anonymous users |
|
863 | label_group_anonymous: Anonymous users | |
862 | label_group_non_member: Non member users |
|
864 | label_group_non_member: Non member users | |
863 | label_time_entry_plural: Spent time |
|
865 | label_time_entry_plural: Spent time | |
864 | label_version_sharing_none: Not shared |
|
866 | label_version_sharing_none: Not shared | |
865 | label_version_sharing_descendants: With subprojects |
|
867 | label_version_sharing_descendants: With subprojects | |
866 | label_version_sharing_hierarchy: With project hierarchy |
|
868 | label_version_sharing_hierarchy: With project hierarchy | |
867 | label_version_sharing_tree: With project tree |
|
869 | label_version_sharing_tree: With project tree | |
868 | label_version_sharing_system: With all projects |
|
870 | label_version_sharing_system: With all projects | |
869 | label_update_issue_done_ratios: Update issue done ratios |
|
871 | label_update_issue_done_ratios: Update issue done ratios | |
870 | label_copy_source: Source |
|
872 | label_copy_source: Source | |
871 | label_copy_target: Target |
|
873 | label_copy_target: Target | |
872 | label_copy_same_as_target: Same as target |
|
874 | label_copy_same_as_target: Same as target | |
873 | label_display_used_statuses_only: Only display statuses that are used by this tracker |
|
875 | label_display_used_statuses_only: Only display statuses that are used by this tracker | |
874 | label_api_access_key: API access key |
|
876 | label_api_access_key: API access key | |
875 | label_missing_api_access_key: Missing an API access key |
|
877 | label_missing_api_access_key: Missing an API access key | |
876 | label_api_access_key_created_on: "API access key created %{value} ago" |
|
878 | label_api_access_key_created_on: "API access key created %{value} ago" | |
877 | label_profile: Profile |
|
879 | label_profile: Profile | |
878 | label_subtask_plural: Subtasks |
|
880 | label_subtask_plural: Subtasks | |
879 | label_project_copy_notifications: Send email notifications during the project copy |
|
881 | label_project_copy_notifications: Send email notifications during the project copy | |
880 | label_principal_search: "Search for user or group:" |
|
882 | label_principal_search: "Search for user or group:" | |
881 | label_user_search: "Search for user:" |
|
883 | label_user_search: "Search for user:" | |
882 | label_additional_workflow_transitions_for_author: Additional transitions allowed when the user is the author |
|
884 | label_additional_workflow_transitions_for_author: Additional transitions allowed when the user is the author | |
883 | label_additional_workflow_transitions_for_assignee: Additional transitions allowed when the user is the assignee |
|
885 | label_additional_workflow_transitions_for_assignee: Additional transitions allowed when the user is the assignee | |
884 | label_issues_visibility_all: All issues |
|
886 | label_issues_visibility_all: All issues | |
885 | label_issues_visibility_public: All non private issues |
|
887 | label_issues_visibility_public: All non private issues | |
886 | label_issues_visibility_own: Issues created by or assigned to the user |
|
888 | label_issues_visibility_own: Issues created by or assigned to the user | |
887 | label_git_report_last_commit: Report last commit for files and directories |
|
889 | label_git_report_last_commit: Report last commit for files and directories | |
888 | label_parent_revision: Parent |
|
890 | label_parent_revision: Parent | |
889 | label_child_revision: Child |
|
891 | label_child_revision: Child | |
890 | label_export_options: "%{export_format} export options" |
|
892 | label_export_options: "%{export_format} export options" | |
891 | label_copy_attachments: Copy attachments |
|
893 | label_copy_attachments: Copy attachments | |
892 | label_copy_subtasks: Copy subtasks |
|
894 | label_copy_subtasks: Copy subtasks | |
893 | label_item_position: "%{position} of %{count}" |
|
895 | label_item_position: "%{position} of %{count}" | |
894 | label_completed_versions: Completed versions |
|
896 | label_completed_versions: Completed versions | |
895 | label_search_for_watchers: Search for watchers to add |
|
897 | label_search_for_watchers: Search for watchers to add | |
896 | label_session_expiration: Session expiration |
|
898 | label_session_expiration: Session expiration | |
897 | label_show_closed_projects: View closed projects |
|
899 | label_show_closed_projects: View closed projects | |
898 | label_status_transitions: Status transitions |
|
900 | label_status_transitions: Status transitions | |
899 | label_fields_permissions: Fields permissions |
|
901 | label_fields_permissions: Fields permissions | |
900 | label_readonly: Read-only |
|
902 | label_readonly: Read-only | |
901 | label_required: Required |
|
903 | label_required: Required | |
902 | label_hidden: Hidden |
|
904 | label_hidden: Hidden | |
903 | label_attribute_of_project: "Project's %{name}" |
|
905 | label_attribute_of_project: "Project's %{name}" | |
904 | label_attribute_of_issue: "Issue's %{name}" |
|
906 | label_attribute_of_issue: "Issue's %{name}" | |
905 | label_attribute_of_author: "Author's %{name}" |
|
907 | label_attribute_of_author: "Author's %{name}" | |
906 | label_attribute_of_assigned_to: "Assignee's %{name}" |
|
908 | label_attribute_of_assigned_to: "Assignee's %{name}" | |
907 | label_attribute_of_user: "User's %{name}" |
|
909 | label_attribute_of_user: "User's %{name}" | |
908 | label_attribute_of_fixed_version: "Target version's %{name}" |
|
910 | label_attribute_of_fixed_version: "Target version's %{name}" | |
909 | label_cross_project_descendants: With subprojects |
|
911 | label_cross_project_descendants: With subprojects | |
910 | label_cross_project_tree: With project tree |
|
912 | label_cross_project_tree: With project tree | |
911 | label_cross_project_hierarchy: With project hierarchy |
|
913 | label_cross_project_hierarchy: With project hierarchy | |
912 | label_cross_project_system: With all projects |
|
914 | label_cross_project_system: With all projects | |
913 | label_gantt_progress_line: Progress line |
|
915 | label_gantt_progress_line: Progress line | |
914 | label_visibility_private: to me only |
|
916 | label_visibility_private: to me only | |
915 | label_visibility_roles: to these roles only |
|
917 | label_visibility_roles: to these roles only | |
916 | label_visibility_public: to any users |
|
918 | label_visibility_public: to any users | |
917 | label_link: Link |
|
919 | label_link: Link | |
918 | label_only: only |
|
920 | label_only: only | |
919 | label_drop_down_list: drop-down list |
|
921 | label_drop_down_list: drop-down list | |
920 | label_checkboxes: checkboxes |
|
922 | label_checkboxes: checkboxes | |
921 | label_radio_buttons: radio buttons |
|
923 | label_radio_buttons: radio buttons | |
922 | label_link_values_to: Link values to URL |
|
924 | label_link_values_to: Link values to URL | |
923 | label_custom_field_select_type: Select the type of object to which the custom field is to be attached |
|
925 | label_custom_field_select_type: Select the type of object to which the custom field is to be attached | |
924 | label_check_for_updates: Check for updates |
|
926 | label_check_for_updates: Check for updates | |
925 | label_latest_compatible_version: Latest compatible version |
|
927 | label_latest_compatible_version: Latest compatible version | |
926 | label_unknown_plugin: Unknown plugin |
|
928 | label_unknown_plugin: Unknown plugin | |
927 | label_add_projects: Add projects |
|
929 | label_add_projects: Add projects | |
928 | label_users_visibility_all: All active users |
|
930 | label_users_visibility_all: All active users | |
929 | label_users_visibility_members_of_visible_projects: Members of visible projects |
|
931 | label_users_visibility_members_of_visible_projects: Members of visible projects | |
930 | label_edit_attachments: Edit attached files |
|
932 | label_edit_attachments: Edit attached files | |
931 | label_link_copied_issue: Link copied issue |
|
933 | label_link_copied_issue: Link copied issue | |
932 | label_ask: Ask |
|
934 | label_ask: Ask | |
933 | label_search_attachments_yes: Search attachment filenames and descriptions |
|
935 | label_search_attachments_yes: Search attachment filenames and descriptions | |
934 | label_search_attachments_no: Do not search attachments |
|
936 | label_search_attachments_no: Do not search attachments | |
935 | label_search_attachments_only: Search attachments only |
|
937 | label_search_attachments_only: Search attachments only | |
936 | label_search_open_issues_only: Open issues only |
|
938 | label_search_open_issues_only: Open issues only | |
937 | label_email_address_plural: Emails |
|
939 | label_email_address_plural: Emails | |
938 | label_email_address_add: Add email address |
|
940 | label_email_address_add: Add email address | |
939 | label_enable_notifications: Enable notifications |
|
941 | label_enable_notifications: Enable notifications | |
940 | label_disable_notifications: Disable notifications |
|
942 | label_disable_notifications: Disable notifications | |
941 | label_blank_value: blank |
|
943 | label_blank_value: blank | |
942 |
|
944 | |||
943 | button_login: Login |
|
945 | button_login: Login | |
944 | button_submit: Submit |
|
946 | button_submit: Submit | |
945 | button_save: Save |
|
947 | button_save: Save | |
946 | button_check_all: Check all |
|
948 | button_check_all: Check all | |
947 | button_uncheck_all: Uncheck all |
|
949 | button_uncheck_all: Uncheck all | |
948 | button_collapse_all: Collapse all |
|
950 | button_collapse_all: Collapse all | |
949 | button_expand_all: Expand all |
|
951 | button_expand_all: Expand all | |
950 | button_delete: Delete |
|
952 | button_delete: Delete | |
951 | button_create: Create |
|
953 | button_create: Create | |
952 | button_create_and_continue: Create and continue |
|
954 | button_create_and_continue: Create and continue | |
953 | button_test: Test |
|
955 | button_test: Test | |
954 | button_edit: Edit |
|
956 | button_edit: Edit | |
955 | button_edit_associated_wikipage: "Edit associated Wiki page: %{page_title}" |
|
957 | button_edit_associated_wikipage: "Edit associated Wiki page: %{page_title}" | |
956 | button_add: Add |
|
958 | button_add: Add | |
957 | button_change: Change |
|
959 | button_change: Change | |
958 | button_apply: Apply |
|
960 | button_apply: Apply | |
959 | button_clear: Clear |
|
961 | button_clear: Clear | |
960 | button_lock: Lock |
|
962 | button_lock: Lock | |
961 | button_unlock: Unlock |
|
963 | button_unlock: Unlock | |
962 | button_download: Download |
|
964 | button_download: Download | |
963 | button_list: List |
|
965 | button_list: List | |
964 | button_view: View |
|
966 | button_view: View | |
965 | button_move: Move |
|
967 | button_move: Move | |
966 | button_move_and_follow: Move and follow |
|
968 | button_move_and_follow: Move and follow | |
967 | button_back: Back |
|
969 | button_back: Back | |
968 | button_cancel: Cancel |
|
970 | button_cancel: Cancel | |
969 | button_activate: Activate |
|
971 | button_activate: Activate | |
970 | button_sort: Sort |
|
972 | button_sort: Sort | |
971 | button_log_time: Log time |
|
973 | button_log_time: Log time | |
972 | button_rollback: Rollback to this version |
|
974 | button_rollback: Rollback to this version | |
973 | button_watch: Watch |
|
975 | button_watch: Watch | |
974 | button_unwatch: Unwatch |
|
976 | button_unwatch: Unwatch | |
975 | button_reply: Reply |
|
977 | button_reply: Reply | |
976 | button_archive: Archive |
|
978 | button_archive: Archive | |
977 | button_unarchive: Unarchive |
|
979 | button_unarchive: Unarchive | |
978 | button_reset: Reset |
|
980 | button_reset: Reset | |
979 | button_rename: Rename |
|
981 | button_rename: Rename | |
980 | button_change_password: Change password |
|
982 | button_change_password: Change password | |
981 | button_copy: Copy |
|
983 | button_copy: Copy | |
982 | button_copy_and_follow: Copy and follow |
|
984 | button_copy_and_follow: Copy and follow | |
983 | button_annotate: Annotate |
|
985 | button_annotate: Annotate | |
984 | button_update: Update |
|
986 | button_update: Update | |
985 | button_configure: Configure |
|
987 | button_configure: Configure | |
986 | button_quote: Quote |
|
988 | button_quote: Quote | |
987 | button_duplicate: Duplicate |
|
989 | button_duplicate: Duplicate | |
988 | button_show: Show |
|
990 | button_show: Show | |
989 | button_hide: Hide |
|
991 | button_hide: Hide | |
990 | button_edit_section: Edit this section |
|
992 | button_edit_section: Edit this section | |
991 | button_export: Export |
|
993 | button_export: Export | |
992 | button_delete_my_account: Delete my account |
|
994 | button_delete_my_account: Delete my account | |
993 | button_close: Close |
|
995 | button_close: Close | |
994 | button_reopen: Reopen |
|
996 | button_reopen: Reopen | |
995 |
|
997 | |||
996 | status_active: active |
|
998 | status_active: active | |
997 | status_registered: registered |
|
999 | status_registered: registered | |
998 | status_locked: locked |
|
1000 | status_locked: locked | |
999 |
|
1001 | |||
1000 | project_status_active: active |
|
1002 | project_status_active: active | |
1001 | project_status_closed: closed |
|
1003 | project_status_closed: closed | |
1002 | project_status_archived: archived |
|
1004 | project_status_archived: archived | |
1003 |
|
1005 | |||
1004 | version_status_open: open |
|
1006 | version_status_open: open | |
1005 | version_status_locked: locked |
|
1007 | version_status_locked: locked | |
1006 | version_status_closed: closed |
|
1008 | version_status_closed: closed | |
1007 |
|
1009 | |||
1008 | field_active: Active |
|
1010 | field_active: Active | |
1009 |
|
1011 | |||
1010 | text_select_mail_notifications: Select actions for which email notifications should be sent. |
|
1012 | text_select_mail_notifications: Select actions for which email notifications should be sent. | |
1011 | text_regexp_info: eg. ^[A-Z0-9]+$ |
|
1013 | text_regexp_info: eg. ^[A-Z0-9]+$ | |
1012 | text_min_max_length_info: 0 means no restriction |
|
1014 | text_min_max_length_info: 0 means no restriction | |
1013 | text_project_destroy_confirmation: Are you sure you want to delete this project and related data? |
|
1015 | text_project_destroy_confirmation: Are you sure you want to delete this project and related data? | |
1014 | text_subprojects_destroy_warning: "Its subproject(s): %{value} will be also deleted." |
|
1016 | text_subprojects_destroy_warning: "Its subproject(s): %{value} will be also deleted." | |
1015 | text_workflow_edit: Select a role and a tracker to edit the workflow |
|
1017 | text_workflow_edit: Select a role and a tracker to edit the workflow | |
1016 | text_are_you_sure: Are you sure? |
|
1018 | text_are_you_sure: Are you sure? | |
1017 | text_journal_changed: "%{label} changed from %{old} to %{new}" |
|
1019 | text_journal_changed: "%{label} changed from %{old} to %{new}" | |
1018 | text_journal_changed_no_detail: "%{label} updated" |
|
1020 | text_journal_changed_no_detail: "%{label} updated" | |
1019 | text_journal_set_to: "%{label} set to %{value}" |
|
1021 | text_journal_set_to: "%{label} set to %{value}" | |
1020 | text_journal_deleted: "%{label} deleted (%{old})" |
|
1022 | text_journal_deleted: "%{label} deleted (%{old})" | |
1021 | text_journal_added: "%{label} %{value} added" |
|
1023 | text_journal_added: "%{label} %{value} added" | |
1022 | text_tip_issue_begin_day: issue beginning this day |
|
1024 | text_tip_issue_begin_day: issue beginning this day | |
1023 | text_tip_issue_end_day: issue ending this day |
|
1025 | text_tip_issue_end_day: issue ending this day | |
1024 | text_tip_issue_begin_end_day: issue beginning and ending this day |
|
1026 | text_tip_issue_begin_end_day: issue beginning and ending this day | |
1025 | text_project_identifier_info: 'Only lower case letters (a-z), numbers, dashes and underscores are allowed, must start with a lower case letter.<br />Once saved, the identifier cannot be changed.' |
|
1027 | text_project_identifier_info: 'Only lower case letters (a-z), numbers, dashes and underscores are allowed, must start with a lower case letter.<br />Once saved, the identifier cannot be changed.' | |
1026 | text_caracters_maximum: "%{count} characters maximum." |
|
1028 | text_caracters_maximum: "%{count} characters maximum." | |
1027 | text_caracters_minimum: "Must be at least %{count} characters long." |
|
1029 | text_caracters_minimum: "Must be at least %{count} characters long." | |
1028 | text_length_between: "Length between %{min} and %{max} characters." |
|
1030 | text_length_between: "Length between %{min} and %{max} characters." | |
1029 | text_tracker_no_workflow: No workflow defined for this tracker |
|
1031 | text_tracker_no_workflow: No workflow defined for this tracker | |
1030 | text_unallowed_characters: Unallowed characters |
|
1032 | text_unallowed_characters: Unallowed characters | |
1031 | text_comma_separated: Multiple values allowed (comma separated). |
|
1033 | text_comma_separated: Multiple values allowed (comma separated). | |
1032 | text_line_separated: Multiple values allowed (one line for each value). |
|
1034 | text_line_separated: Multiple values allowed (one line for each value). | |
1033 | text_issues_ref_in_commit_messages: Referencing and fixing issues in commit messages |
|
1035 | text_issues_ref_in_commit_messages: Referencing and fixing issues in commit messages | |
1034 | text_issue_added: "Issue %{id} has been reported by %{author}." |
|
1036 | text_issue_added: "Issue %{id} has been reported by %{author}." | |
1035 | text_issue_updated: "Issue %{id} has been updated by %{author}." |
|
1037 | text_issue_updated: "Issue %{id} has been updated by %{author}." | |
1036 | text_wiki_destroy_confirmation: Are you sure you want to delete this wiki and all its content? |
|
1038 | text_wiki_destroy_confirmation: Are you sure you want to delete this wiki and all its content? | |
1037 | text_issue_category_destroy_question: "Some issues (%{count}) are assigned to this category. What do you want to do?" |
|
1039 | text_issue_category_destroy_question: "Some issues (%{count}) are assigned to this category. What do you want to do?" | |
1038 | text_issue_category_destroy_assignments: Remove category assignments |
|
1040 | text_issue_category_destroy_assignments: Remove category assignments | |
1039 | text_issue_category_reassign_to: Reassign issues to this category |
|
1041 | text_issue_category_reassign_to: Reassign issues to this category | |
1040 | 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)." |
|
1042 | 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)." | |
1041 | 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." |
|
1043 | 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." | |
1042 | text_load_default_configuration: Load the default configuration |
|
1044 | text_load_default_configuration: Load the default configuration | |
1043 | text_status_changed_by_changeset: "Applied in changeset %{value}." |
|
1045 | text_status_changed_by_changeset: "Applied in changeset %{value}." | |
1044 | text_time_logged_by_changeset: "Applied in changeset %{value}." |
|
1046 | text_time_logged_by_changeset: "Applied in changeset %{value}." | |
1045 | text_issues_destroy_confirmation: 'Are you sure you want to delete the selected issue(s)?' |
|
1047 | text_issues_destroy_confirmation: 'Are you sure you want to delete the selected issue(s)?' | |
1046 | text_issues_destroy_descendants_confirmation: "This will also delete %{count} subtask(s)." |
|
1048 | text_issues_destroy_descendants_confirmation: "This will also delete %{count} subtask(s)." | |
1047 | text_time_entries_destroy_confirmation: 'Are you sure you want to delete the selected time entr(y/ies)?' |
|
1049 | text_time_entries_destroy_confirmation: 'Are you sure you want to delete the selected time entr(y/ies)?' | |
1048 | text_select_project_modules: 'Select modules to enable for this project:' |
|
1050 | text_select_project_modules: 'Select modules to enable for this project:' | |
1049 | text_default_administrator_account_changed: Default administrator account changed |
|
1051 | text_default_administrator_account_changed: Default administrator account changed | |
1050 | text_file_repository_writable: Attachments directory writable |
|
1052 | text_file_repository_writable: Attachments directory writable | |
1051 | text_plugin_assets_writable: Plugin assets directory writable |
|
1053 | text_plugin_assets_writable: Plugin assets directory writable | |
1052 | text_rmagick_available: RMagick available (optional) |
|
1054 | text_rmagick_available: RMagick available (optional) | |
1053 | text_convert_available: ImageMagick convert available (optional) |
|
1055 | text_convert_available: ImageMagick convert available (optional) | |
1054 | text_destroy_time_entries_question: "%{hours} hours were reported on the issues you are about to delete. What do you want to do?" |
|
1056 | text_destroy_time_entries_question: "%{hours} hours were reported on the issues you are about to delete. What do you want to do?" | |
1055 | text_destroy_time_entries: Delete reported hours |
|
1057 | text_destroy_time_entries: Delete reported hours | |
1056 | text_assign_time_entries_to_project: Assign reported hours to the project |
|
1058 | text_assign_time_entries_to_project: Assign reported hours to the project | |
1057 | text_reassign_time_entries: 'Reassign reported hours to this issue:' |
|
1059 | text_reassign_time_entries: 'Reassign reported hours to this issue:' | |
1058 | text_user_wrote: "%{value} wrote:" |
|
1060 | text_user_wrote: "%{value} wrote:" | |
1059 | text_enumeration_destroy_question: "%{count} objects are assigned to this value." |
|
1061 | text_enumeration_destroy_question: "%{count} objects are assigned to this value." | |
1060 | text_enumeration_category_reassign_to: 'Reassign them to this value:' |
|
1062 | text_enumeration_category_reassign_to: 'Reassign them to this value:' | |
1061 | text_email_delivery_not_configured: "Email delivery is not configured, and notifications are disabled.\nConfigure your SMTP server in config/configuration.yml and restart the application to enable them." |
|
1063 | text_email_delivery_not_configured: "Email delivery is not configured, and notifications are disabled.\nConfigure your SMTP server in config/configuration.yml and restart the application to enable them." | |
1062 | 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." |
|
1064 | 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." | |
1063 | text_diff_truncated: '... This diff was truncated because it exceeds the maximum size that can be displayed.' |
|
1065 | text_diff_truncated: '... This diff was truncated because it exceeds the maximum size that can be displayed.' | |
1064 | text_custom_field_possible_values_info: 'One line for each value' |
|
1066 | text_custom_field_possible_values_info: 'One line for each value' | |
1065 | text_wiki_page_destroy_question: "This page has %{descendants} child page(s) and descendant(s). What do you want to do?" |
|
1067 | text_wiki_page_destroy_question: "This page has %{descendants} child page(s) and descendant(s). What do you want to do?" | |
1066 | text_wiki_page_nullify_children: "Keep child pages as root pages" |
|
1068 | text_wiki_page_nullify_children: "Keep child pages as root pages" | |
1067 | text_wiki_page_destroy_children: "Delete child pages and all their descendants" |
|
1069 | text_wiki_page_destroy_children: "Delete child pages and all their descendants" | |
1068 | text_wiki_page_reassign_children: "Reassign child pages to this parent page" |
|
1070 | text_wiki_page_reassign_children: "Reassign child pages to this parent page" | |
1069 | text_own_membership_delete_confirmation: "You are about to remove some or all of your permissions and may no longer be able to edit this project after that.\nAre you sure you want to continue?" |
|
1071 | text_own_membership_delete_confirmation: "You are about to remove some or all of your permissions and may no longer be able to edit this project after that.\nAre you sure you want to continue?" | |
1070 | text_zoom_in: Zoom in |
|
1072 | text_zoom_in: Zoom in | |
1071 | text_zoom_out: Zoom out |
|
1073 | text_zoom_out: Zoom out | |
1072 | text_warn_on_leaving_unsaved: "The current page contains unsaved text that will be lost if you leave this page." |
|
1074 | text_warn_on_leaving_unsaved: "The current page contains unsaved text that will be lost if you leave this page." | |
1073 | text_scm_path_encoding_note: "Default: UTF-8" |
|
1075 | text_scm_path_encoding_note: "Default: UTF-8" | |
1074 | text_subversion_repository_note: "Examples: file:///, http://, https://, svn://, svn+[tunnelscheme]://" |
|
1076 | text_subversion_repository_note: "Examples: file:///, http://, https://, svn://, svn+[tunnelscheme]://" | |
1075 | text_git_repository_note: Repository is bare and local (e.g. /gitrepo, c:\gitrepo) |
|
1077 | text_git_repository_note: Repository is bare and local (e.g. /gitrepo, c:\gitrepo) | |
1076 | text_mercurial_repository_note: Local repository (e.g. /hgrepo, c:\hgrepo) |
|
1078 | text_mercurial_repository_note: Local repository (e.g. /hgrepo, c:\hgrepo) | |
1077 | text_scm_command: Command |
|
1079 | text_scm_command: Command | |
1078 | text_scm_command_version: Version |
|
1080 | text_scm_command_version: Version | |
1079 | text_scm_config: You can configure your SCM commands in config/configuration.yml. Please restart the application after editing it. |
|
1081 | text_scm_config: You can configure your SCM commands in config/configuration.yml. Please restart the application after editing it. | |
1080 | text_scm_command_not_available: SCM command is not available. Please check settings on the administration panel. |
|
1082 | text_scm_command_not_available: SCM command is not available. Please check settings on the administration panel. | |
1081 | text_issue_conflict_resolution_overwrite: "Apply my changes anyway (previous notes will be kept but some changes may be overwritten)" |
|
1083 | text_issue_conflict_resolution_overwrite: "Apply my changes anyway (previous notes will be kept but some changes may be overwritten)" | |
1082 | text_issue_conflict_resolution_add_notes: "Add my notes and discard my other changes" |
|
1084 | text_issue_conflict_resolution_add_notes: "Add my notes and discard my other changes" | |
1083 | text_issue_conflict_resolution_cancel: "Discard all my changes and redisplay %{link}" |
|
1085 | text_issue_conflict_resolution_cancel: "Discard all my changes and redisplay %{link}" | |
1084 | text_account_destroy_confirmation: "Are you sure you want to proceed?\nYour account will be permanently deleted, with no way to reactivate it." |
|
1086 | text_account_destroy_confirmation: "Are you sure you want to proceed?\nYour account will be permanently deleted, with no way to reactivate it." | |
1085 | text_session_expiration_settings: "Warning: changing these settings may expire the current sessions including yours." |
|
1087 | text_session_expiration_settings: "Warning: changing these settings may expire the current sessions including yours." | |
1086 | text_project_closed: This project is closed and read-only. |
|
1088 | text_project_closed: This project is closed and read-only. | |
1087 | text_turning_multiple_off: "If you disable multiple values, multiple values will be removed in order to preserve only one value per item." |
|
1089 | text_turning_multiple_off: "If you disable multiple values, multiple values will be removed in order to preserve only one value per item." | |
1088 |
|
1090 | |||
1089 | default_role_manager: Manager |
|
1091 | default_role_manager: Manager | |
1090 | default_role_developer: Developer |
|
1092 | default_role_developer: Developer | |
1091 | default_role_reporter: Reporter |
|
1093 | default_role_reporter: Reporter | |
1092 | default_tracker_bug: Bug |
|
1094 | default_tracker_bug: Bug | |
1093 | default_tracker_feature: Feature |
|
1095 | default_tracker_feature: Feature | |
1094 | default_tracker_support: Support |
|
1096 | default_tracker_support: Support | |
1095 | default_issue_status_new: New |
|
1097 | default_issue_status_new: New | |
1096 | default_issue_status_in_progress: In Progress |
|
1098 | default_issue_status_in_progress: In Progress | |
1097 | default_issue_status_resolved: Resolved |
|
1099 | default_issue_status_resolved: Resolved | |
1098 | default_issue_status_feedback: Feedback |
|
1100 | default_issue_status_feedback: Feedback | |
1099 | default_issue_status_closed: Closed |
|
1101 | default_issue_status_closed: Closed | |
1100 | default_issue_status_rejected: Rejected |
|
1102 | default_issue_status_rejected: Rejected | |
1101 | default_doc_category_user: User documentation |
|
1103 | default_doc_category_user: User documentation | |
1102 | default_doc_category_tech: Technical documentation |
|
1104 | default_doc_category_tech: Technical documentation | |
1103 | default_priority_low: Low |
|
1105 | default_priority_low: Low | |
1104 | default_priority_normal: Normal |
|
1106 | default_priority_normal: Normal | |
1105 | default_priority_high: High |
|
1107 | default_priority_high: High | |
1106 | default_priority_urgent: Urgent |
|
1108 | default_priority_urgent: Urgent | |
1107 | default_priority_immediate: Immediate |
|
1109 | default_priority_immediate: Immediate | |
1108 | default_activity_design: Design |
|
1110 | default_activity_design: Design | |
1109 | default_activity_development: Development |
|
1111 | default_activity_development: Development | |
1110 |
|
1112 | |||
1111 | enumeration_issue_priorities: Issue priorities |
|
1113 | enumeration_issue_priorities: Issue priorities | |
1112 | enumeration_doc_categories: Document categories |
|
1114 | enumeration_doc_categories: Document categories | |
1113 | enumeration_activities: Activities (time tracking) |
|
1115 | enumeration_activities: Activities (time tracking) | |
1114 | enumeration_system_activity: System Activity |
|
1116 | enumeration_system_activity: System Activity | |
1115 | description_filter: Filter |
|
1117 | description_filter: Filter | |
1116 | description_search: Searchfield |
|
1118 | description_search: Searchfield | |
1117 | description_choose_project: Projects |
|
1119 | description_choose_project: Projects | |
1118 | description_project_scope: Search scope |
|
1120 | description_project_scope: Search scope | |
1119 | description_notes: Notes |
|
1121 | description_notes: Notes | |
1120 | description_message_content: Message content |
|
1122 | description_message_content: Message content | |
1121 | description_query_sort_criteria_attribute: Sort attribute |
|
1123 | description_query_sort_criteria_attribute: Sort attribute | |
1122 | description_query_sort_criteria_direction: Sort direction |
|
1124 | description_query_sort_criteria_direction: Sort direction | |
1123 | description_user_mail_notification: Mail notification settings |
|
1125 | description_user_mail_notification: Mail notification settings | |
1124 | description_available_columns: Available Columns |
|
1126 | description_available_columns: Available Columns | |
1125 | description_selected_columns: Selected Columns |
|
1127 | description_selected_columns: Selected Columns | |
1126 | description_all_columns: All Columns |
|
1128 | description_all_columns: All Columns | |
1127 | description_issue_category_reassign: Choose issue category |
|
1129 | description_issue_category_reassign: Choose issue category | |
1128 | description_wiki_subpages_reassign: Choose new parent page |
|
1130 | description_wiki_subpages_reassign: Choose new parent page | |
1129 | description_date_range_list: Choose range from list |
|
1131 | description_date_range_list: Choose range from list | |
1130 | description_date_range_interval: Choose range by selecting start and end date |
|
1132 | description_date_range_interval: Choose range by selecting start and end date | |
1131 | description_date_from: Enter start date |
|
1133 | description_date_from: Enter start date | |
1132 | description_date_to: Enter end date |
|
1134 | description_date_to: Enter end date | |
1133 | text_repository_identifier_info: 'Only lower case letters (a-z), numbers, dashes and underscores are allowed.<br />Once saved, the identifier cannot be changed.' |
|
1135 | text_repository_identifier_info: 'Only lower case letters (a-z), numbers, dashes and underscores are allowed.<br />Once saved, the identifier cannot be changed.' |
@@ -1,1153 +1,1155 | |||||
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 | # contributor: Thibaut Cuvelier - Developpez.com |
|
4 | # contributor: Thibaut Cuvelier - Developpez.com | |
5 |
|
5 | |||
6 | fr: |
|
6 | fr: | |
7 | direction: ltr |
|
7 | direction: ltr | |
8 | date: |
|
8 | date: | |
9 | formats: |
|
9 | formats: | |
10 | default: "%d/%m/%Y" |
|
10 | default: "%d/%m/%Y" | |
11 | short: "%e %b" |
|
11 | short: "%e %b" | |
12 | long: "%e %B %Y" |
|
12 | long: "%e %B %Y" | |
13 | long_ordinal: "%e %B %Y" |
|
13 | long_ordinal: "%e %B %Y" | |
14 | only_day: "%e" |
|
14 | only_day: "%e" | |
15 |
|
15 | |||
16 | day_names: [dimanche, lundi, mardi, mercredi, jeudi, vendredi, samedi] |
|
16 | day_names: [dimanche, lundi, mardi, mercredi, jeudi, vendredi, samedi] | |
17 | abbr_day_names: [dim, lun, mar, mer, jeu, ven, sam] |
|
17 | abbr_day_names: [dim, lun, mar, mer, jeu, ven, sam] | |
18 |
|
18 | |||
19 | # Don't forget the nil at the beginning; there's no such thing as a 0th month |
|
19 | # Don't forget the nil at the beginning; there's no such thing as a 0th month | |
20 | month_names: [~, janvier, fΓ©vrier, mars, avril, mai, juin, juillet, aoΓ»t, septembre, octobre, novembre, dΓ©cembre] |
|
20 | month_names: [~, janvier, fΓ©vrier, mars, avril, mai, juin, juillet, aoΓ»t, septembre, octobre, novembre, dΓ©cembre] | |
21 | abbr_month_names: [~, jan., fΓ©v., mar., avr., mai, juin, juil., aoΓ»t, sept., oct., nov., dΓ©c.] |
|
21 | abbr_month_names: [~, jan., fΓ©v., mar., avr., mai, juin, juil., aoΓ»t, sept., oct., nov., dΓ©c.] | |
22 | # Used in date_select and datime_select. |
|
22 | # Used in date_select and datime_select. | |
23 | order: |
|
23 | order: | |
24 | - :day |
|
24 | - :day | |
25 | - :month |
|
25 | - :month | |
26 | - :year |
|
26 | - :year | |
27 |
|
27 | |||
28 | time: |
|
28 | time: | |
29 | formats: |
|
29 | formats: | |
30 | default: "%d/%m/%Y %H:%M" |
|
30 | default: "%d/%m/%Y %H:%M" | |
31 | time: "%H:%M" |
|
31 | time: "%H:%M" | |
32 | short: "%d %b %H:%M" |
|
32 | short: "%d %b %H:%M" | |
33 | long: "%A %d %B %Y %H:%M:%S %Z" |
|
33 | long: "%A %d %B %Y %H:%M:%S %Z" | |
34 | long_ordinal: "%A %d %B %Y %H:%M:%S %Z" |
|
34 | long_ordinal: "%A %d %B %Y %H:%M:%S %Z" | |
35 | only_second: "%S" |
|
35 | only_second: "%S" | |
36 | am: 'am' |
|
36 | am: 'am' | |
37 | pm: 'pm' |
|
37 | pm: 'pm' | |
38 |
|
38 | |||
39 | datetime: |
|
39 | datetime: | |
40 | distance_in_words: |
|
40 | distance_in_words: | |
41 | half_a_minute: "30 secondes" |
|
41 | half_a_minute: "30 secondes" | |
42 | less_than_x_seconds: |
|
42 | less_than_x_seconds: | |
43 | zero: "moins d'une seconde" |
|
43 | zero: "moins d'une seconde" | |
44 | one: "moins d'uneΒ seconde" |
|
44 | one: "moins d'uneΒ seconde" | |
45 | other: "moins de %{count}Β secondes" |
|
45 | other: "moins de %{count}Β secondes" | |
46 | x_seconds: |
|
46 | x_seconds: | |
47 | one: "1Β seconde" |
|
47 | one: "1Β seconde" | |
48 | other: "%{count}Β secondes" |
|
48 | other: "%{count}Β secondes" | |
49 | less_than_x_minutes: |
|
49 | less_than_x_minutes: | |
50 | zero: "moins d'une minute" |
|
50 | zero: "moins d'une minute" | |
51 | one: "moins d'uneΒ minute" |
|
51 | one: "moins d'uneΒ minute" | |
52 | other: "moins de %{count}Β minutes" |
|
52 | other: "moins de %{count}Β minutes" | |
53 | x_minutes: |
|
53 | x_minutes: | |
54 | one: "1Β minute" |
|
54 | one: "1Β minute" | |
55 | other: "%{count}Β minutes" |
|
55 | other: "%{count}Β minutes" | |
56 | about_x_hours: |
|
56 | about_x_hours: | |
57 | one: "environ une heure" |
|
57 | one: "environ une heure" | |
58 | other: "environ %{count}Β heures" |
|
58 | other: "environ %{count}Β heures" | |
59 | x_hours: |
|
59 | x_hours: | |
60 | one: "une heure" |
|
60 | one: "une heure" | |
61 | other: "%{count}Β heures" |
|
61 | other: "%{count}Β heures" | |
62 | x_days: |
|
62 | x_days: | |
63 | one: "unΒ jour" |
|
63 | one: "unΒ jour" | |
64 | other: "%{count}Β jours" |
|
64 | other: "%{count}Β jours" | |
65 | about_x_months: |
|
65 | about_x_months: | |
66 | one: "environ un mois" |
|
66 | one: "environ un mois" | |
67 | other: "environ %{count}Β mois" |
|
67 | other: "environ %{count}Β mois" | |
68 | x_months: |
|
68 | x_months: | |
69 | one: "unΒ mois" |
|
69 | one: "unΒ mois" | |
70 | other: "%{count}Β mois" |
|
70 | other: "%{count}Β mois" | |
71 | about_x_years: |
|
71 | about_x_years: | |
72 | one: "environ un an" |
|
72 | one: "environ un an" | |
73 | other: "environ %{count}Β ans" |
|
73 | other: "environ %{count}Β ans" | |
74 | over_x_years: |
|
74 | over_x_years: | |
75 | one: "plus d'un an" |
|
75 | one: "plus d'un an" | |
76 | other: "plus de %{count}Β ans" |
|
76 | other: "plus de %{count}Β ans" | |
77 | almost_x_years: |
|
77 | almost_x_years: | |
78 | one: "presqu'un an" |
|
78 | one: "presqu'un an" | |
79 | other: "presque %{count} ans" |
|
79 | other: "presque %{count} ans" | |
80 | prompts: |
|
80 | prompts: | |
81 | year: "AnnΓ©e" |
|
81 | year: "AnnΓ©e" | |
82 | month: "Mois" |
|
82 | month: "Mois" | |
83 | day: "Jour" |
|
83 | day: "Jour" | |
84 | hour: "Heure" |
|
84 | hour: "Heure" | |
85 | minute: "Minute" |
|
85 | minute: "Minute" | |
86 | second: "Seconde" |
|
86 | second: "Seconde" | |
87 |
|
87 | |||
88 | number: |
|
88 | number: | |
89 | format: |
|
89 | format: | |
90 | precision: 3 |
|
90 | precision: 3 | |
91 | separator: ',' |
|
91 | separator: ',' | |
92 | delimiter: 'Β ' |
|
92 | delimiter: 'Β ' | |
93 | currency: |
|
93 | currency: | |
94 | format: |
|
94 | format: | |
95 | unit: 'β¬' |
|
95 | unit: 'β¬' | |
96 | precision: 2 |
|
96 | precision: 2 | |
97 | format: '%nΒ %u' |
|
97 | format: '%nΒ %u' | |
98 | human: |
|
98 | human: | |
99 | format: |
|
99 | format: | |
100 | precision: 3 |
|
100 | precision: 3 | |
101 | storage_units: |
|
101 | storage_units: | |
102 | format: "%n %u" |
|
102 | format: "%n %u" | |
103 | units: |
|
103 | units: | |
104 | byte: |
|
104 | byte: | |
105 | one: "octet" |
|
105 | one: "octet" | |
106 | other: "octets" |
|
106 | other: "octets" | |
107 | kb: "ko" |
|
107 | kb: "ko" | |
108 | mb: "Mo" |
|
108 | mb: "Mo" | |
109 | gb: "Go" |
|
109 | gb: "Go" | |
110 | tb: "To" |
|
110 | tb: "To" | |
111 |
|
111 | |||
112 | support: |
|
112 | support: | |
113 | array: |
|
113 | array: | |
114 | sentence_connector: 'et' |
|
114 | sentence_connector: 'et' | |
115 | skip_last_comma: true |
|
115 | skip_last_comma: true | |
116 | word_connector: ", " |
|
116 | word_connector: ", " | |
117 | two_words_connector: " et " |
|
117 | two_words_connector: " et " | |
118 | last_word_connector: " et " |
|
118 | last_word_connector: " et " | |
119 |
|
119 | |||
120 | activerecord: |
|
120 | activerecord: | |
121 | errors: |
|
121 | errors: | |
122 | template: |
|
122 | template: | |
123 | header: |
|
123 | header: | |
124 | one: "Impossible d'enregistrer %{model} : une erreur" |
|
124 | one: "Impossible d'enregistrer %{model} : une erreur" | |
125 | other: "Impossible d'enregistrer %{model} : %{count} erreurs." |
|
125 | other: "Impossible d'enregistrer %{model} : %{count} erreurs." | |
126 | body: "Veuillez vΓ©rifier les champs suivantsΒ :" |
|
126 | body: "Veuillez vΓ©rifier les champs suivantsΒ :" | |
127 | messages: |
|
127 | messages: | |
128 | inclusion: "n'est pas inclus(e) dans la liste" |
|
128 | inclusion: "n'est pas inclus(e) dans la liste" | |
129 | exclusion: "n'est pas disponible" |
|
129 | exclusion: "n'est pas disponible" | |
130 | invalid: "n'est pas valide" |
|
130 | invalid: "n'est pas valide" | |
131 | confirmation: "ne concorde pas avec la confirmation" |
|
131 | confirmation: "ne concorde pas avec la confirmation" | |
132 | accepted: "doit Γͺtre acceptΓ©(e)" |
|
132 | accepted: "doit Γͺtre acceptΓ©(e)" | |
133 | empty: "doit Γͺtre renseignΓ©(e)" |
|
133 | empty: "doit Γͺtre renseignΓ©(e)" | |
134 | blank: "doit Γͺtre renseignΓ©(e)" |
|
134 | blank: "doit Γͺtre renseignΓ©(e)" | |
135 | too_long: "est trop long (pas plus de %{count} caractères)" |
|
135 | too_long: "est trop long (pas plus de %{count} caractères)" | |
136 | too_short: "est trop court (au moins %{count} caractères)" |
|
136 | too_short: "est trop court (au moins %{count} caractères)" | |
137 | wrong_length: "ne fait pas la bonne longueur (doit comporter %{count} caractères)" |
|
137 | wrong_length: "ne fait pas la bonne longueur (doit comporter %{count} caractères)" | |
138 | taken: "est dΓ©jΓ utilisΓ©" |
|
138 | taken: "est dΓ©jΓ utilisΓ©" | |
139 | not_a_number: "n'est pas un nombre" |
|
139 | not_a_number: "n'est pas un nombre" | |
140 | not_a_date: "n'est pas une date valide" |
|
140 | not_a_date: "n'est pas une date valide" | |
141 | greater_than: "doit Γͺtre supΓ©rieur Γ %{count}" |
|
141 | greater_than: "doit Γͺtre supΓ©rieur Γ %{count}" | |
142 | greater_than_or_equal_to: "doit Γͺtre supΓ©rieur ou Γ©gal Γ %{count}" |
|
142 | greater_than_or_equal_to: "doit Γͺtre supΓ©rieur ou Γ©gal Γ %{count}" | |
143 | equal_to: "doit Γͺtre Γ©gal Γ %{count}" |
|
143 | equal_to: "doit Γͺtre Γ©gal Γ %{count}" | |
144 | less_than: "doit Γͺtre infΓ©rieur Γ %{count}" |
|
144 | less_than: "doit Γͺtre infΓ©rieur Γ %{count}" | |
145 | less_than_or_equal_to: "doit Γͺtre infΓ©rieur ou Γ©gal Γ %{count}" |
|
145 | less_than_or_equal_to: "doit Γͺtre infΓ©rieur ou Γ©gal Γ %{count}" | |
146 | odd: "doit Γͺtre impair" |
|
146 | odd: "doit Γͺtre impair" | |
147 | even: "doit Γͺtre pair" |
|
147 | even: "doit Γͺtre pair" | |
148 | greater_than_start_date: "doit Γͺtre postΓ©rieure Γ la date de dΓ©but" |
|
148 | greater_than_start_date: "doit Γͺtre postΓ©rieure Γ la date de dΓ©but" | |
149 | not_same_project: "n'appartient pas au mΓͺme projet" |
|
149 | not_same_project: "n'appartient pas au mΓͺme projet" | |
150 | circular_dependency: "Cette relation crΓ©erait une dΓ©pendance circulaire" |
|
150 | circular_dependency: "Cette relation crΓ©erait une dΓ©pendance circulaire" | |
151 | cant_link_an_issue_with_a_descendant: "Une demande ne peut pas Γͺtre liΓ©e Γ l'une de ses sous-tΓ’ches" |
|
151 | cant_link_an_issue_with_a_descendant: "Une demande ne peut pas Γͺtre liΓ©e Γ l'une de ses sous-tΓ’ches" | |
152 | earlier_than_minimum_start_date: "ne peut pas Γͺtre antΓ©rieure au %{date} Γ cause des demandes qui prΓ©cΓ¨dent" |
|
152 | earlier_than_minimum_start_date: "ne peut pas Γͺtre antΓ©rieure au %{date} Γ cause des demandes qui prΓ©cΓ¨dent" | |
153 |
|
153 | |||
154 | actionview_instancetag_blank_option: Choisir |
|
154 | actionview_instancetag_blank_option: Choisir | |
155 |
|
155 | |||
156 | general_text_No: 'Non' |
|
156 | general_text_No: 'Non' | |
157 | general_text_Yes: 'Oui' |
|
157 | general_text_Yes: 'Oui' | |
158 | general_text_no: 'non' |
|
158 | general_text_no: 'non' | |
159 | general_text_yes: 'oui' |
|
159 | general_text_yes: 'oui' | |
160 | general_lang_name: 'French (FranΓ§ais)' |
|
160 | general_lang_name: 'French (FranΓ§ais)' | |
161 | general_csv_separator: ';' |
|
161 | general_csv_separator: ';' | |
162 | general_csv_decimal_separator: ',' |
|
162 | general_csv_decimal_separator: ',' | |
163 | general_csv_encoding: ISO-8859-1 |
|
163 | general_csv_encoding: ISO-8859-1 | |
164 | general_pdf_fontname: freesans |
|
164 | general_pdf_fontname: freesans | |
165 | general_first_day_of_week: '1' |
|
165 | general_first_day_of_week: '1' | |
166 |
|
166 | |||
167 | notice_account_updated: Le compte a été mis à jour avec succès. |
|
167 | notice_account_updated: Le compte a été mis à jour avec succès. | |
168 | notice_account_invalid_creditentials: Identifiant ou mot de passe invalide. |
|
168 | notice_account_invalid_creditentials: Identifiant ou mot de passe invalide. | |
169 | notice_account_password_updated: Mot de passe mis à jour avec succès. |
|
169 | notice_account_password_updated: Mot de passe mis à jour avec succès. | |
170 | notice_account_wrong_password: Mot de passe incorrect |
|
170 | notice_account_wrong_password: Mot de passe incorrect | |
171 | notice_account_register_done: Un message contenant les instructions pour activer votre compte vous a Γ©tΓ© envoyΓ© Γ l'adresse %{email}. |
|
171 | notice_account_register_done: Un message contenant les instructions pour activer votre compte vous a Γ©tΓ© envoyΓ© Γ l'adresse %{email}. | |
172 | notice_account_unknown_email: Aucun compte ne correspond Γ cette adresse. |
|
172 | notice_account_unknown_email: Aucun compte ne correspond Γ cette adresse. | |
173 | notice_account_not_activated_yet: Vous n'avez pas encore activΓ© votre compte. Si vous voulez recevoir un nouveau message d'activation, veuillez <a href="%{url}">cliquer sur ce lien</a>. |
|
173 | notice_account_not_activated_yet: Vous n'avez pas encore activΓ© votre compte. Si vous voulez recevoir un nouveau message d'activation, veuillez <a href="%{url}">cliquer sur ce lien</a>. | |
174 | notice_account_locked: Votre compte est verrouillΓ©. |
|
174 | notice_account_locked: Votre compte est verrouillΓ©. | |
175 | notice_can_t_change_password: Ce compte utilise une authentification externe. Impossible de changer le mot de passe. |
|
175 | notice_can_t_change_password: Ce compte utilise une authentification externe. Impossible de changer le mot de passe. | |
176 | notice_account_lost_email_sent: Un message contenant les instructions pour choisir un nouveau mot de passe vous a Γ©tΓ© envoyΓ©. |
|
176 | notice_account_lost_email_sent: Un message contenant les instructions pour choisir un nouveau mot de passe vous a Γ©tΓ© envoyΓ©. | |
177 | notice_account_activated: Votre compte a Γ©tΓ© activΓ©. Vous pouvez Γ prΓ©sent vous connecter. |
|
177 | notice_account_activated: Votre compte a Γ©tΓ© activΓ©. Vous pouvez Γ prΓ©sent vous connecter. | |
178 | notice_successful_create: Création effectuée avec succès. |
|
178 | notice_successful_create: Création effectuée avec succès. | |
179 | notice_successful_update: Mise à jour effectuée avec succès. |
|
179 | notice_successful_update: Mise à jour effectuée avec succès. | |
180 | notice_successful_delete: Suppression effectuée avec succès. |
|
180 | notice_successful_delete: Suppression effectuée avec succès. | |
181 | notice_successful_connection: Connexion rΓ©ussie. |
|
181 | notice_successful_connection: Connexion rΓ©ussie. | |
182 | notice_file_not_found: "La page Γ laquelle vous souhaitez accΓ©der n'existe pas ou a Γ©tΓ© supprimΓ©e." |
|
182 | notice_file_not_found: "La page Γ laquelle vous souhaitez accΓ©der n'existe pas ou a Γ©tΓ© supprimΓ©e." | |
183 | notice_locking_conflict: Les donnΓ©es ont Γ©tΓ© mises Γ jour par un autre utilisateur. Mise Γ jour impossible. |
|
183 | notice_locking_conflict: Les donnΓ©es ont Γ©tΓ© mises Γ jour par un autre utilisateur. Mise Γ jour impossible. | |
184 | notice_not_authorized: "Vous n'Γͺtes pas autorisΓ© Γ accΓ©der Γ cette page." |
|
184 | notice_not_authorized: "Vous n'Γͺtes pas autorisΓ© Γ accΓ©der Γ cette page." | |
185 | notice_not_authorized_archived_project: Le projet auquel vous tentez d'accΓ©der a Γ©tΓ© archivΓ©. |
|
185 | notice_not_authorized_archived_project: Le projet auquel vous tentez d'accΓ©der a Γ©tΓ© archivΓ©. | |
186 | notice_email_sent: "Un email a Γ©tΓ© envoyΓ© Γ %{value}" |
|
186 | notice_email_sent: "Un email a Γ©tΓ© envoyΓ© Γ %{value}" | |
187 | notice_email_error: "Erreur lors de l'envoi de l'email (%{value})" |
|
187 | notice_email_error: "Erreur lors de l'envoi de l'email (%{value})" | |
188 | notice_feeds_access_key_reseted: "Votre clé d'accès aux flux Atom a été réinitialisée." |
|
188 | notice_feeds_access_key_reseted: "Votre clé d'accès aux flux Atom a été réinitialisée." | |
189 | notice_api_access_key_reseted: Votre clé d'accès API a été réinitialisée. |
|
189 | notice_api_access_key_reseted: Votre clé d'accès API a été réinitialisée. | |
190 | notice_failed_to_save_issues: "%{count} demande(s) sur les %{total} sΓ©lectionnΓ©es n'ont pas pu Γͺtre mise(s) Γ jour : %{ids}." |
|
190 | notice_failed_to_save_issues: "%{count} demande(s) sur les %{total} sΓ©lectionnΓ©es n'ont pas pu Γͺtre mise(s) Γ jour : %{ids}." | |
191 | notice_failed_to_save_time_entries: "%{count} temps passΓ©(s) sur les %{total} sΓ©lectionnΓ©s n'ont pas pu Γͺtre mis Γ jour: %{ids}." |
|
191 | notice_failed_to_save_time_entries: "%{count} temps passΓ©(s) sur les %{total} sΓ©lectionnΓ©s n'ont pas pu Γͺtre mis Γ jour: %{ids}." | |
192 | notice_failed_to_save_members: "Erreur lors de la sauvegarde des membres: %{errors}." |
|
192 | notice_failed_to_save_members: "Erreur lors de la sauvegarde des membres: %{errors}." | |
193 | notice_no_issue_selected: "Aucune demande sΓ©lectionnΓ©e ! Cochez les demandes que vous voulez mettre Γ jour." |
|
193 | notice_no_issue_selected: "Aucune demande sΓ©lectionnΓ©e ! Cochez les demandes que vous voulez mettre Γ jour." | |
194 | notice_account_pending: "Votre compte a été créé et attend l'approbation de l'administrateur." |
|
194 | notice_account_pending: "Votre compte a été créé et attend l'approbation de l'administrateur." | |
195 | notice_default_data_loaded: Paramétrage par défaut chargé avec succès. |
|
195 | notice_default_data_loaded: Paramétrage par défaut chargé avec succès. | |
196 | notice_unable_delete_version: Impossible de supprimer cette version. |
|
196 | notice_unable_delete_version: Impossible de supprimer cette version. | |
197 | notice_unable_delete_time_entry: Impossible de supprimer le temps passΓ©. |
|
197 | notice_unable_delete_time_entry: Impossible de supprimer le temps passΓ©. | |
198 | notice_issue_done_ratios_updated: L'avancement des demandes a Γ©tΓ© mis Γ jour. |
|
198 | notice_issue_done_ratios_updated: L'avancement des demandes a Γ©tΓ© mis Γ jour. | |
199 | notice_gantt_chart_truncated: "Le diagramme a Γ©tΓ© tronquΓ© car il excΓ¨de le nombre maximal d'Γ©lΓ©ments pouvant Γͺtre affichΓ©s (%{max})" |
|
199 | notice_gantt_chart_truncated: "Le diagramme a Γ©tΓ© tronquΓ© car il excΓ¨de le nombre maximal d'Γ©lΓ©ments pouvant Γͺtre affichΓ©s (%{max})" | |
200 | notice_issue_successful_create: "Demande %{id} créée." |
|
200 | notice_issue_successful_create: "Demande %{id} créée." | |
201 | notice_issue_update_conflict: "La demande a Γ©tΓ© mise Γ jour par un autre utilisateur pendant que vous la modifiez." |
|
201 | notice_issue_update_conflict: "La demande a Γ©tΓ© mise Γ jour par un autre utilisateur pendant que vous la modifiez." | |
202 | notice_account_deleted: "Votre compte a Γ©tΓ© dΓ©finitivement supprimΓ©." |
|
202 | notice_account_deleted: "Votre compte a Γ©tΓ© dΓ©finitivement supprimΓ©." | |
203 | notice_user_successful_create: "Utilisateur %{id} créé." |
|
203 | notice_user_successful_create: "Utilisateur %{id} créé." | |
204 | notice_new_password_must_be_different: Votre nouveau mot de passe doit Γͺtre diffΓ©rent de votre mot de passe actuel |
|
204 | notice_new_password_must_be_different: Votre nouveau mot de passe doit Γͺtre diffΓ©rent de votre mot de passe actuel | |
205 |
|
205 | |||
206 | error_can_t_load_default_data: "Une erreur s'est produite lors du chargement du paramΓ©trage : %{value}" |
|
206 | error_can_t_load_default_data: "Une erreur s'est produite lors du chargement du paramΓ©trage : %{value}" | |
207 | error_scm_not_found: "L'entrΓ©e et/ou la rΓ©vision demandΓ©e n'existe pas dans le dΓ©pΓ΄t." |
|
207 | error_scm_not_found: "L'entrΓ©e et/ou la rΓ©vision demandΓ©e n'existe pas dans le dΓ©pΓ΄t." | |
208 | error_scm_command_failed: "Une erreur s'est produite lors de l'accès au dépôt : %{value}" |
|
208 | error_scm_command_failed: "Une erreur s'est produite lors de l'accès au dépôt : %{value}" | |
209 | error_scm_annotate: "L'entrΓ©e n'existe pas ou ne peut pas Γͺtre annotΓ©e." |
|
209 | error_scm_annotate: "L'entrΓ©e n'existe pas ou ne peut pas Γͺtre annotΓ©e." | |
210 | error_scm_annotate_big_text_file: Cette entrΓ©e ne peut pas Γͺtre annotΓ©e car elle excΓ¨de la taille maximale. |
|
210 | error_scm_annotate_big_text_file: Cette entrΓ©e ne peut pas Γͺtre annotΓ©e car elle excΓ¨de la taille maximale. | |
211 | error_issue_not_found_in_project: "La demande n'existe pas ou n'appartient pas Γ ce projet" |
|
211 | error_issue_not_found_in_project: "La demande n'existe pas ou n'appartient pas Γ ce projet" | |
212 | error_no_tracker_in_project: "Aucun tracker n'est associΓ© Γ ce projet. VΓ©rifier la configuration du projet." |
|
212 | error_no_tracker_in_project: "Aucun tracker n'est associΓ© Γ ce projet. VΓ©rifier la configuration du projet." | |
213 | error_no_default_issue_status: "Aucun statut de demande n'est dΓ©fini par dΓ©faut. VΓ©rifier votre configuration (Administration -> Statuts de demandes)." |
|
213 | error_no_default_issue_status: "Aucun statut de demande n'est dΓ©fini par dΓ©faut. VΓ©rifier votre configuration (Administration -> Statuts de demandes)." | |
214 | error_can_not_delete_custom_field: Impossible de supprimer le champ personnalisΓ© |
|
214 | error_can_not_delete_custom_field: Impossible de supprimer le champ personnalisΓ© | |
215 | error_can_not_delete_tracker: Ce tracker contient des demandes et ne peut pas Γͺtre supprimΓ©. |
|
215 | error_can_not_delete_tracker: Ce tracker contient des demandes et ne peut pas Γͺtre supprimΓ©. | |
216 | error_can_not_remove_role: Ce rΓ΄le est utilisΓ© et ne peut pas Γͺtre supprimΓ©. |
|
216 | error_can_not_remove_role: Ce rΓ΄le est utilisΓ© et ne peut pas Γͺtre supprimΓ©. | |
217 | error_can_not_reopen_issue_on_closed_version: 'Une demande assignΓ©e Γ une version fermΓ©e ne peut pas Γͺtre rΓ©ouverte' |
|
217 | error_can_not_reopen_issue_on_closed_version: 'Une demande assignΓ©e Γ une version fermΓ©e ne peut pas Γͺtre rΓ©ouverte' | |
218 | error_can_not_archive_project: "Ce projet ne peut pas Γͺtre archivΓ©" |
|
218 | error_can_not_archive_project: "Ce projet ne peut pas Γͺtre archivΓ©" | |
219 | error_issue_done_ratios_not_updated: L'avancement des demandes n'a pas pu Γͺtre mis Γ jour. |
|
219 | error_issue_done_ratios_not_updated: L'avancement des demandes n'a pas pu Γͺtre mis Γ jour. | |
220 | error_workflow_copy_source: 'Veuillez sΓ©lectionner un tracker et/ou un rΓ΄le source' |
|
220 | error_workflow_copy_source: 'Veuillez sΓ©lectionner un tracker et/ou un rΓ΄le source' | |
221 | error_workflow_copy_target: 'Veuillez sΓ©lectionner les trackers et rΓ΄les cibles' |
|
221 | error_workflow_copy_target: 'Veuillez sΓ©lectionner les trackers et rΓ΄les cibles' | |
222 | error_unable_delete_issue_status: Impossible de supprimer le statut de demande |
|
222 | error_unable_delete_issue_status: Impossible de supprimer le statut de demande | |
223 | error_unable_to_connect: Connexion impossible (%{value}) |
|
223 | error_unable_to_connect: Connexion impossible (%{value}) | |
224 | error_attachment_too_big: Ce fichier ne peut pas Γͺtre attachΓ© car il excΓ¨de la taille maximale autorisΓ©e (%{max_size}) |
|
224 | error_attachment_too_big: Ce fichier ne peut pas Γͺtre attachΓ© car il excΓ¨de la taille maximale autorisΓ©e (%{max_size}) | |
225 | error_session_expired: "Votre session a expirΓ©. Veuillez vous reconnecter." |
|
225 | error_session_expired: "Votre session a expirΓ©. Veuillez vous reconnecter." | |
226 | warning_attachments_not_saved: "%{count} fichier(s) n'ont pas pu Γͺtre sauvegardΓ©s." |
|
226 | warning_attachments_not_saved: "%{count} fichier(s) n'ont pas pu Γͺtre sauvegardΓ©s." | |
|
227 | error_password_expired: "Votre mot de passe a expirΓ© ou nΓ©cessite d'Γͺtre changΓ©." | |||
227 |
|
228 | |||
228 | mail_subject_lost_password: "Votre mot de passe %{value}" |
|
229 | mail_subject_lost_password: "Votre mot de passe %{value}" | |
229 | mail_body_lost_password: 'Pour changer votre mot de passe, cliquez sur le lien suivant :' |
|
230 | mail_body_lost_password: 'Pour changer votre mot de passe, cliquez sur le lien suivant :' | |
230 | mail_subject_register: "Activation de votre compte %{value}" |
|
231 | mail_subject_register: "Activation de votre compte %{value}" | |
231 | mail_body_register: 'Pour activer votre compte, cliquez sur le lien suivant :' |
|
232 | mail_body_register: 'Pour activer votre compte, cliquez sur le lien suivant :' | |
232 | mail_body_account_information_external: "Vous pouvez utiliser votre compte %{value} pour vous connecter." |
|
233 | mail_body_account_information_external: "Vous pouvez utiliser votre compte %{value} pour vous connecter." | |
233 | mail_body_account_information: Paramètres de connexion de votre compte |
|
234 | mail_body_account_information: Paramètres de connexion de votre compte | |
234 | mail_subject_account_activation_request: "Demande d'activation d'un compte %{value}" |
|
235 | mail_subject_account_activation_request: "Demande d'activation d'un compte %{value}" | |
235 | mail_body_account_activation_request: "Un nouvel utilisateur (%{value}) s'est inscrit. Son compte nΓ©cessite votre approbation :" |
|
236 | mail_body_account_activation_request: "Un nouvel utilisateur (%{value}) s'est inscrit. Son compte nΓ©cessite votre approbation :" | |
236 | mail_subject_reminder: "%{count} demande(s) arrivent Γ Γ©chΓ©ance (%{days})" |
|
237 | mail_subject_reminder: "%{count} demande(s) arrivent Γ Γ©chΓ©ance (%{days})" | |
237 | mail_body_reminder: "%{count} demande(s) qui vous sont assignΓ©es arrivent Γ Γ©chΓ©ance dans les %{days} prochains jours :" |
|
238 | mail_body_reminder: "%{count} demande(s) qui vous sont assignΓ©es arrivent Γ Γ©chΓ©ance dans les %{days} prochains jours :" | |
238 | mail_subject_wiki_content_added: "Page wiki '%{id}' ajoutΓ©e" |
|
239 | mail_subject_wiki_content_added: "Page wiki '%{id}' ajoutΓ©e" | |
239 | mail_body_wiki_content_added: "La page wiki '%{id}' a Γ©tΓ© ajoutΓ©e par %{author}." |
|
240 | mail_body_wiki_content_added: "La page wiki '%{id}' a Γ©tΓ© ajoutΓ©e par %{author}." | |
240 | mail_subject_wiki_content_updated: "Page wiki '%{id}' mise Γ jour" |
|
241 | mail_subject_wiki_content_updated: "Page wiki '%{id}' mise Γ jour" | |
241 | mail_body_wiki_content_updated: "La page wiki '%{id}' a Γ©tΓ© mise Γ jour par %{author}." |
|
242 | mail_body_wiki_content_updated: "La page wiki '%{id}' a Γ©tΓ© mise Γ jour par %{author}." | |
242 |
|
243 | |||
243 | field_name: Nom |
|
244 | field_name: Nom | |
244 | field_description: Description |
|
245 | field_description: Description | |
245 | field_summary: RΓ©sumΓ© |
|
246 | field_summary: RΓ©sumΓ© | |
246 | field_is_required: Obligatoire |
|
247 | field_is_required: Obligatoire | |
247 | field_firstname: PrΓ©nom |
|
248 | field_firstname: PrΓ©nom | |
248 | field_lastname: Nom |
|
249 | field_lastname: Nom | |
249 | field_mail: Email |
|
250 | field_mail: Email | |
250 | field_address: Email |
|
251 | field_address: Email | |
251 | field_filename: Fichier |
|
252 | field_filename: Fichier | |
252 | field_filesize: Taille |
|
253 | field_filesize: Taille | |
253 | field_downloads: TΓ©lΓ©chargements |
|
254 | field_downloads: TΓ©lΓ©chargements | |
254 | field_author: Auteur |
|
255 | field_author: Auteur | |
255 | field_created_on: Créé |
|
256 | field_created_on: Créé | |
256 | field_updated_on: Mis-Γ -jour |
|
257 | field_updated_on: Mis-Γ -jour | |
257 | field_closed_on: FermΓ© |
|
258 | field_closed_on: FermΓ© | |
258 | field_field_format: Format |
|
259 | field_field_format: Format | |
259 | field_is_for_all: Pour tous les projets |
|
260 | field_is_for_all: Pour tous les projets | |
260 | field_possible_values: Valeurs possibles |
|
261 | field_possible_values: Valeurs possibles | |
261 | field_regexp: Expression régulière |
|
262 | field_regexp: Expression régulière | |
262 | field_min_length: Longueur minimum |
|
263 | field_min_length: Longueur minimum | |
263 | field_max_length: Longueur maximum |
|
264 | field_max_length: Longueur maximum | |
264 | field_value: Valeur |
|
265 | field_value: Valeur | |
265 | field_category: CatΓ©gorie |
|
266 | field_category: CatΓ©gorie | |
266 | field_title: Titre |
|
267 | field_title: Titre | |
267 | field_project: Projet |
|
268 | field_project: Projet | |
268 | field_issue: Demande |
|
269 | field_issue: Demande | |
269 | field_status: Statut |
|
270 | field_status: Statut | |
270 | field_notes: Notes |
|
271 | field_notes: Notes | |
271 | field_is_closed: Demande fermΓ©e |
|
272 | field_is_closed: Demande fermΓ©e | |
272 | field_is_default: Valeur par dΓ©faut |
|
273 | field_is_default: Valeur par dΓ©faut | |
273 | field_tracker: Tracker |
|
274 | field_tracker: Tracker | |
274 | field_subject: Sujet |
|
275 | field_subject: Sujet | |
275 | field_due_date: EchΓ©ance |
|
276 | field_due_date: EchΓ©ance | |
276 | field_assigned_to: AssignΓ© Γ |
|
277 | field_assigned_to: AssignΓ© Γ | |
277 | field_priority: PrioritΓ© |
|
278 | field_priority: PrioritΓ© | |
278 | field_fixed_version: Version cible |
|
279 | field_fixed_version: Version cible | |
279 | field_user: Utilisateur |
|
280 | field_user: Utilisateur | |
280 | field_principal: Principal |
|
281 | field_principal: Principal | |
281 | field_role: RΓ΄le |
|
282 | field_role: RΓ΄le | |
282 | field_homepage: Site web |
|
283 | field_homepage: Site web | |
283 | field_is_public: Public |
|
284 | field_is_public: Public | |
284 | field_parent: Sous-projet de |
|
285 | field_parent: Sous-projet de | |
285 | field_is_in_roadmap: Demandes affichΓ©es dans la roadmap |
|
286 | field_is_in_roadmap: Demandes affichΓ©es dans la roadmap | |
286 | field_login: Identifiant |
|
287 | field_login: Identifiant | |
287 | field_mail_notification: Notifications par mail |
|
288 | field_mail_notification: Notifications par mail | |
288 | field_admin: Administrateur |
|
289 | field_admin: Administrateur | |
289 | field_last_login_on: Dernière connexion |
|
290 | field_last_login_on: Dernière connexion | |
290 | field_language: Langue |
|
291 | field_language: Langue | |
291 | field_effective_date: Date |
|
292 | field_effective_date: Date | |
292 | field_password: Mot de passe |
|
293 | field_password: Mot de passe | |
293 | field_new_password: Nouveau mot de passe |
|
294 | field_new_password: Nouveau mot de passe | |
294 | field_password_confirmation: Confirmation |
|
295 | field_password_confirmation: Confirmation | |
295 | field_version: Version |
|
296 | field_version: Version | |
296 | field_type: Type |
|
297 | field_type: Type | |
297 | field_host: HΓ΄te |
|
298 | field_host: HΓ΄te | |
298 | field_port: Port |
|
299 | field_port: Port | |
299 | field_account: Compte |
|
300 | field_account: Compte | |
300 | field_base_dn: Base DN |
|
301 | field_base_dn: Base DN | |
301 | field_attr_login: Attribut Identifiant |
|
302 | field_attr_login: Attribut Identifiant | |
302 | field_attr_firstname: Attribut PrΓ©nom |
|
303 | field_attr_firstname: Attribut PrΓ©nom | |
303 | field_attr_lastname: Attribut Nom |
|
304 | field_attr_lastname: Attribut Nom | |
304 | field_attr_mail: Attribut Email |
|
305 | field_attr_mail: Attribut Email | |
305 | field_onthefly: CrΓ©ation des utilisateurs Γ la volΓ©e |
|
306 | field_onthefly: CrΓ©ation des utilisateurs Γ la volΓ©e | |
306 | field_start_date: DΓ©but |
|
307 | field_start_date: DΓ©but | |
307 | field_done_ratio: "% rΓ©alisΓ©" |
|
308 | field_done_ratio: "% rΓ©alisΓ©" | |
308 | field_auth_source: Mode d'authentification |
|
309 | field_auth_source: Mode d'authentification | |
309 | field_hide_mail: Cacher mon adresse mail |
|
310 | field_hide_mail: Cacher mon adresse mail | |
310 | field_comments: Commentaire |
|
311 | field_comments: Commentaire | |
311 | field_url: URL |
|
312 | field_url: URL | |
312 | field_start_page: Page de dΓ©marrage |
|
313 | field_start_page: Page de dΓ©marrage | |
313 | field_subproject: Sous-projet |
|
314 | field_subproject: Sous-projet | |
314 | field_hours: Heures |
|
315 | field_hours: Heures | |
315 | field_activity: ActivitΓ© |
|
316 | field_activity: ActivitΓ© | |
316 | field_spent_on: Date |
|
317 | field_spent_on: Date | |
317 | field_identifier: Identifiant |
|
318 | field_identifier: Identifiant | |
318 | field_is_filter: UtilisΓ© comme filtre |
|
319 | field_is_filter: UtilisΓ© comme filtre | |
319 | field_issue_to: Demande liΓ©e |
|
320 | field_issue_to: Demande liΓ©e | |
320 | field_delay: Retard |
|
321 | field_delay: Retard | |
321 | field_assignable: Demandes assignables Γ ce rΓ΄le |
|
322 | field_assignable: Demandes assignables Γ ce rΓ΄le | |
322 | field_redirect_existing_links: Rediriger les liens existants |
|
323 | field_redirect_existing_links: Rediriger les liens existants | |
323 | field_estimated_hours: Temps estimΓ© |
|
324 | field_estimated_hours: Temps estimΓ© | |
324 | field_column_names: Colonnes |
|
325 | field_column_names: Colonnes | |
325 | field_time_entries: Temps passΓ© |
|
326 | field_time_entries: Temps passΓ© | |
326 | field_time_zone: Fuseau horaire |
|
327 | field_time_zone: Fuseau horaire | |
327 | field_searchable: UtilisΓ© pour les recherches |
|
328 | field_searchable: UtilisΓ© pour les recherches | |
328 | field_default_value: Valeur par dΓ©faut |
|
329 | field_default_value: Valeur par dΓ©faut | |
329 | field_comments_sorting: Afficher les commentaires |
|
330 | field_comments_sorting: Afficher les commentaires | |
330 | field_parent_title: Page parent |
|
331 | field_parent_title: Page parent | |
331 | field_editable: Modifiable |
|
332 | field_editable: Modifiable | |
332 | field_watcher: Observateur |
|
333 | field_watcher: Observateur | |
333 | field_identity_url: URL OpenID |
|
334 | field_identity_url: URL OpenID | |
334 | field_content: Contenu |
|
335 | field_content: Contenu | |
335 | field_group_by: Grouper par |
|
336 | field_group_by: Grouper par | |
336 | field_sharing: Partage |
|
337 | field_sharing: Partage | |
337 | field_parent_issue: TΓ’che parente |
|
338 | field_parent_issue: TΓ’che parente | |
338 | field_member_of_group: Groupe de l'assignΓ© |
|
339 | field_member_of_group: Groupe de l'assignΓ© | |
339 | field_assigned_to_role: RΓ΄le de l'assignΓ© |
|
340 | field_assigned_to_role: RΓ΄le de l'assignΓ© | |
340 | field_text: Champ texte |
|
341 | field_text: Champ texte | |
341 | field_visible: Visible |
|
342 | field_visible: Visible | |
342 | field_warn_on_leaving_unsaved: "M'avertir lorsque je quitte une page contenant du texte non sauvegardΓ©" |
|
343 | field_warn_on_leaving_unsaved: "M'avertir lorsque je quitte une page contenant du texte non sauvegardΓ©" | |
343 | field_issues_visibility: VisibilitΓ© des demandes |
|
344 | field_issues_visibility: VisibilitΓ© des demandes | |
344 | field_is_private: PrivΓ©e |
|
345 | field_is_private: PrivΓ©e | |
345 | field_commit_logs_encoding: Encodage des messages de commit |
|
346 | field_commit_logs_encoding: Encodage des messages de commit | |
346 | field_scm_path_encoding: Encodage des chemins |
|
347 | field_scm_path_encoding: Encodage des chemins | |
347 | field_path_to_repository: Chemin du dΓ©pΓ΄t |
|
348 | field_path_to_repository: Chemin du dΓ©pΓ΄t | |
348 | field_root_directory: RΓ©pertoire racine |
|
349 | field_root_directory: RΓ©pertoire racine | |
349 | field_cvsroot: CVSROOT |
|
350 | field_cvsroot: CVSROOT | |
350 | field_cvs_module: Module |
|
351 | field_cvs_module: Module | |
351 | field_repository_is_default: DΓ©pΓ΄t principal |
|
352 | field_repository_is_default: DΓ©pΓ΄t principal | |
352 | field_multiple: Valeurs multiples |
|
353 | field_multiple: Valeurs multiples | |
353 | field_auth_source_ldap_filter: Filtre LDAP |
|
354 | field_auth_source_ldap_filter: Filtre LDAP | |
354 | field_core_fields: Champs standards |
|
355 | field_core_fields: Champs standards | |
355 | field_timeout: "Timeout (en secondes)" |
|
356 | field_timeout: "Timeout (en secondes)" | |
356 | field_board_parent: Forum parent |
|
357 | field_board_parent: Forum parent | |
357 | field_private_notes: Notes privΓ©es |
|
358 | field_private_notes: Notes privΓ©es | |
358 | field_inherit_members: HΓ©riter les membres |
|
359 | field_inherit_members: HΓ©riter les membres | |
359 | field_generate_password: GΓ©nΓ©rer un mot de passe |
|
360 | field_generate_password: GΓ©nΓ©rer un mot de passe | |
360 | field_must_change_passwd: Doit changer de mot de passe Γ la prochaine connexion |
|
361 | field_must_change_passwd: Doit changer de mot de passe Γ la prochaine connexion | |
361 | field_default_status: Statut par dΓ©faut |
|
362 | field_default_status: Statut par dΓ©faut | |
362 | field_users_visibility: VisibilitΓ© des utilisateurs |
|
363 | field_users_visibility: VisibilitΓ© des utilisateurs | |
363 |
|
364 | |||
364 | setting_app_title: Titre de l'application |
|
365 | setting_app_title: Titre de l'application | |
365 | setting_app_subtitle: Sous-titre de l'application |
|
366 | setting_app_subtitle: Sous-titre de l'application | |
366 | setting_welcome_text: Texte d'accueil |
|
367 | setting_welcome_text: Texte d'accueil | |
367 | setting_default_language: Langue par dΓ©faut |
|
368 | setting_default_language: Langue par dΓ©faut | |
368 | setting_login_required: Authentification obligatoire |
|
369 | setting_login_required: Authentification obligatoire | |
369 | setting_self_registration: Inscription des nouveaux utilisateurs |
|
370 | setting_self_registration: Inscription des nouveaux utilisateurs | |
370 | setting_attachment_max_size: Taille maximale des fichiers |
|
371 | setting_attachment_max_size: Taille maximale des fichiers | |
371 | setting_issues_export_limit: Limite d'exportation des demandes |
|
372 | setting_issues_export_limit: Limite d'exportation des demandes | |
372 | setting_mail_from: Adresse d'Γ©mission |
|
373 | setting_mail_from: Adresse d'Γ©mission | |
373 | setting_bcc_recipients: Destinataires en copie cachΓ©e (cci) |
|
374 | setting_bcc_recipients: Destinataires en copie cachΓ©e (cci) | |
374 | setting_plain_text_mail: Mail en texte brut (non HTML) |
|
375 | setting_plain_text_mail: Mail en texte brut (non HTML) | |
375 | setting_host_name: Nom d'hΓ΄te et chemin |
|
376 | setting_host_name: Nom d'hΓ΄te et chemin | |
376 | setting_text_formatting: Formatage du texte |
|
377 | setting_text_formatting: Formatage du texte | |
377 | setting_wiki_compression: Compression de l'historique des pages wiki |
|
378 | setting_wiki_compression: Compression de l'historique des pages wiki | |
378 | setting_feeds_limit: Nombre maximal d'Γ©lΓ©ments dans les flux Atom |
|
379 | setting_feeds_limit: Nombre maximal d'Γ©lΓ©ments dans les flux Atom | |
379 | setting_default_projects_public: DΓ©finir les nouveaux projets comme publics par dΓ©faut |
|
380 | setting_default_projects_public: DΓ©finir les nouveaux projets comme publics par dΓ©faut | |
380 | setting_autofetch_changesets: RΓ©cupΓ©ration automatique des commits |
|
381 | setting_autofetch_changesets: RΓ©cupΓ©ration automatique des commits | |
381 | setting_sys_api_enabled: Activer les WS pour la gestion des dΓ©pΓ΄ts |
|
382 | setting_sys_api_enabled: Activer les WS pour la gestion des dΓ©pΓ΄ts | |
382 | setting_commit_ref_keywords: Mots-clΓ©s de rΓ©fΓ©rencement |
|
383 | setting_commit_ref_keywords: Mots-clΓ©s de rΓ©fΓ©rencement | |
383 | setting_commit_fix_keywords: Mots-clΓ©s de rΓ©solution |
|
384 | setting_commit_fix_keywords: Mots-clΓ©s de rΓ©solution | |
384 | setting_autologin: DurΓ©e maximale de connexion automatique |
|
385 | setting_autologin: DurΓ©e maximale de connexion automatique | |
385 | setting_date_format: Format de date |
|
386 | setting_date_format: Format de date | |
386 | setting_time_format: Format d'heure |
|
387 | setting_time_format: Format d'heure | |
387 | setting_cross_project_issue_relations: Autoriser les relations entre demandes de diffΓ©rents projets |
|
388 | setting_cross_project_issue_relations: Autoriser les relations entre demandes de diffΓ©rents projets | |
388 | setting_cross_project_subtasks: Autoriser les sous-tΓ’ches dans des projets diffΓ©rents |
|
389 | setting_cross_project_subtasks: Autoriser les sous-tΓ’ches dans des projets diffΓ©rents | |
389 | setting_issue_list_default_columns: Colonnes affichΓ©es par dΓ©faut sur la liste des demandes |
|
390 | setting_issue_list_default_columns: Colonnes affichΓ©es par dΓ©faut sur la liste des demandes | |
390 | setting_repositories_encodings: Encodages des fichiers et des dΓ©pΓ΄ts |
|
391 | setting_repositories_encodings: Encodages des fichiers et des dΓ©pΓ΄ts | |
391 | setting_emails_header: En-tΓͺte des emails |
|
392 | setting_emails_header: En-tΓͺte des emails | |
392 | setting_emails_footer: Pied-de-page des emails |
|
393 | setting_emails_footer: Pied-de-page des emails | |
393 | setting_protocol: Protocole |
|
394 | setting_protocol: Protocole | |
394 | setting_per_page_options: Options d'objets affichΓ©s par page |
|
395 | setting_per_page_options: Options d'objets affichΓ©s par page | |
395 | setting_user_format: Format d'affichage des utilisateurs |
|
396 | setting_user_format: Format d'affichage des utilisateurs | |
396 | setting_activity_days_default: Nombre de jours affichΓ©s sur l'activitΓ© des projets |
|
397 | setting_activity_days_default: Nombre de jours affichΓ©s sur l'activitΓ© des projets | |
397 | setting_display_subprojects_issues: Afficher par dΓ©faut les demandes des sous-projets sur les projets principaux |
|
398 | setting_display_subprojects_issues: Afficher par dΓ©faut les demandes des sous-projets sur les projets principaux | |
398 | setting_enabled_scm: SCM activΓ©s |
|
399 | setting_enabled_scm: SCM activΓ©s | |
399 | setting_mail_handler_body_delimiters: "Tronquer les emails après l'une de ces lignes" |
|
400 | setting_mail_handler_body_delimiters: "Tronquer les emails après l'une de ces lignes" | |
400 | setting_mail_handler_api_enabled: "Activer le WS pour la rΓ©ception d'emails" |
|
401 | setting_mail_handler_api_enabled: "Activer le WS pour la rΓ©ception d'emails" | |
401 | setting_mail_handler_api_key: ClΓ© de protection de l'API |
|
402 | setting_mail_handler_api_key: ClΓ© de protection de l'API | |
402 | setting_sequential_project_identifiers: GΓ©nΓ©rer des identifiants de projet sΓ©quentiels |
|
403 | setting_sequential_project_identifiers: GΓ©nΓ©rer des identifiants de projet sΓ©quentiels | |
403 | setting_gravatar_enabled: Afficher les Gravatar des utilisateurs |
|
404 | setting_gravatar_enabled: Afficher les Gravatar des utilisateurs | |
404 | setting_gravatar_default: Image Gravatar par dΓ©faut |
|
405 | setting_gravatar_default: Image Gravatar par dΓ©faut | |
405 | setting_diff_max_lines_displayed: Nombre maximum de lignes de diff affichΓ©es |
|
406 | setting_diff_max_lines_displayed: Nombre maximum de lignes de diff affichΓ©es | |
406 | setting_file_max_size_displayed: Taille maximum des fichiers texte affichΓ©s en ligne |
|
407 | setting_file_max_size_displayed: Taille maximum des fichiers texte affichΓ©s en ligne | |
407 | setting_repository_log_display_limit: "Nombre maximum de rΓ©visions affichΓ©es sur l'historique d'un fichier" |
|
408 | setting_repository_log_display_limit: "Nombre maximum de rΓ©visions affichΓ©es sur l'historique d'un fichier" | |
408 | setting_openid: "Autoriser l'authentification et l'enregistrement OpenID" |
|
409 | setting_openid: "Autoriser l'authentification et l'enregistrement OpenID" | |
|
410 | setting_password_max_age: Expiration des mots de passe après | |||
409 | setting_password_min_length: Longueur minimum des mots de passe |
|
411 | setting_password_min_length: Longueur minimum des mots de passe | |
410 | setting_new_project_user_role_id: RΓ΄le donnΓ© Γ un utilisateur non-administrateur qui crΓ©e un projet |
|
412 | setting_new_project_user_role_id: RΓ΄le donnΓ© Γ un utilisateur non-administrateur qui crΓ©e un projet | |
411 | setting_default_projects_modules: Modules activΓ©s par dΓ©faut pour les nouveaux projets |
|
413 | setting_default_projects_modules: Modules activΓ©s par dΓ©faut pour les nouveaux projets | |
412 | setting_issue_done_ratio: Calcul de l'avancement des demandes |
|
414 | setting_issue_done_ratio: Calcul de l'avancement des demandes | |
413 | setting_issue_done_ratio_issue_field: 'Utiliser le champ % effectuΓ©' |
|
415 | setting_issue_done_ratio_issue_field: 'Utiliser le champ % effectuΓ©' | |
414 | setting_issue_done_ratio_issue_status: Utiliser le statut |
|
416 | setting_issue_done_ratio_issue_status: Utiliser le statut | |
415 | setting_start_of_week: Jour de dΓ©but des calendriers |
|
417 | setting_start_of_week: Jour de dΓ©but des calendriers | |
416 | setting_rest_api_enabled: Activer l'API REST |
|
418 | setting_rest_api_enabled: Activer l'API REST | |
417 | setting_cache_formatted_text: Mettre en cache le texte formatΓ© |
|
419 | setting_cache_formatted_text: Mettre en cache le texte formatΓ© | |
418 | setting_default_notification_option: Option de notification par dΓ©faut |
|
420 | setting_default_notification_option: Option de notification par dΓ©faut | |
419 | setting_commit_logtime_enabled: Permettre la saisie de temps |
|
421 | setting_commit_logtime_enabled: Permettre la saisie de temps | |
420 | setting_commit_logtime_activity_id: ActivitΓ© pour le temps saisi |
|
422 | setting_commit_logtime_activity_id: ActivitΓ© pour le temps saisi | |
421 | setting_gantt_items_limit: Nombre maximum d'Γ©lΓ©ments affichΓ©s sur le gantt |
|
423 | setting_gantt_items_limit: Nombre maximum d'Γ©lΓ©ments affichΓ©s sur le gantt | |
422 | setting_issue_group_assignment: Permettre l'assignement des demandes aux groupes |
|
424 | setting_issue_group_assignment: Permettre l'assignement des demandes aux groupes | |
423 | setting_default_issue_start_date_to_creation_date: Donner Γ la date de dΓ©but d'une nouvelle demande la valeur de la date du jour |
|
425 | setting_default_issue_start_date_to_creation_date: Donner Γ la date de dΓ©but d'une nouvelle demande la valeur de la date du jour | |
424 | setting_commit_cross_project_ref: Permettre le rΓ©fΓ©rencement et la rΓ©solution des demandes de tous les autres projets |
|
426 | setting_commit_cross_project_ref: Permettre le rΓ©fΓ©rencement et la rΓ©solution des demandes de tous les autres projets | |
425 | setting_unsubscribe: Permettre aux utilisateurs de supprimer leur propre compte |
|
427 | setting_unsubscribe: Permettre aux utilisateurs de supprimer leur propre compte | |
426 | setting_session_lifetime: DurΓ©e de vie maximale des sessions |
|
428 | setting_session_lifetime: DurΓ©e de vie maximale des sessions | |
427 | setting_session_timeout: DurΓ©e maximale d'inactivitΓ© |
|
429 | setting_session_timeout: DurΓ©e maximale d'inactivitΓ© | |
428 | setting_thumbnails_enabled: Afficher les vignettes des images |
|
430 | setting_thumbnails_enabled: Afficher les vignettes des images | |
429 | setting_thumbnails_size: Taille des vignettes (en pixels) |
|
431 | setting_thumbnails_size: Taille des vignettes (en pixels) | |
430 | setting_non_working_week_days: Jours non travaillΓ©s |
|
432 | setting_non_working_week_days: Jours non travaillΓ©s | |
431 | setting_jsonp_enabled: Activer le support JSONP |
|
433 | setting_jsonp_enabled: Activer le support JSONP | |
432 | setting_default_projects_tracker_ids: Trackers par dΓ©faut pour les nouveaux projets |
|
434 | setting_default_projects_tracker_ids: Trackers par dΓ©faut pour les nouveaux projets | |
433 | setting_mail_handler_excluded_filenames: Exclure les fichiers attachΓ©s par leur nom |
|
435 | setting_mail_handler_excluded_filenames: Exclure les fichiers attachΓ©s par leur nom | |
434 | setting_force_default_language_for_anonymous: Forcer la langue par dΓ©fault pour les utilisateurs anonymes |
|
436 | setting_force_default_language_for_anonymous: Forcer la langue par dΓ©fault pour les utilisateurs anonymes | |
435 | setting_force_default_language_for_loggedin: Forcer la langue par dΓ©fault pour les utilisateurs identifiΓ©s |
|
437 | setting_force_default_language_for_loggedin: Forcer la langue par dΓ©fault pour les utilisateurs identifiΓ©s | |
436 | setting_link_copied_issue: Lier les demandes lors de la copie |
|
438 | setting_link_copied_issue: Lier les demandes lors de la copie | |
437 | setting_max_additional_emails: Nombre maximal d'adresses email additionnelles |
|
439 | setting_max_additional_emails: Nombre maximal d'adresses email additionnelles | |
438 | setting_search_results_per_page: RΓ©sultats de recherche affichΓ©s par page |
|
440 | setting_search_results_per_page: RΓ©sultats de recherche affichΓ©s par page | |
439 |
|
441 | |||
440 | permission_add_project: CrΓ©er un projet |
|
442 | permission_add_project: CrΓ©er un projet | |
441 | permission_add_subprojects: CrΓ©er des sous-projets |
|
443 | permission_add_subprojects: CrΓ©er des sous-projets | |
442 | permission_edit_project: Modifier le projet |
|
444 | permission_edit_project: Modifier le projet | |
443 | permission_close_project: Fermer / rΓ©ouvrir le projet |
|
445 | permission_close_project: Fermer / rΓ©ouvrir le projet | |
444 | permission_select_project_modules: Choisir les modules |
|
446 | permission_select_project_modules: Choisir les modules | |
445 | permission_manage_members: GΓ©rer les membres |
|
447 | permission_manage_members: GΓ©rer les membres | |
446 | permission_manage_project_activities: GΓ©rer les activitΓ©s |
|
448 | permission_manage_project_activities: GΓ©rer les activitΓ©s | |
447 | permission_manage_versions: GΓ©rer les versions |
|
449 | permission_manage_versions: GΓ©rer les versions | |
448 | permission_manage_categories: GΓ©rer les catΓ©gories de demandes |
|
450 | permission_manage_categories: GΓ©rer les catΓ©gories de demandes | |
449 | permission_view_issues: Voir les demandes |
|
451 | permission_view_issues: Voir les demandes | |
450 | permission_add_issues: CrΓ©er des demandes |
|
452 | permission_add_issues: CrΓ©er des demandes | |
451 | permission_edit_issues: Modifier les demandes |
|
453 | permission_edit_issues: Modifier les demandes | |
452 | permission_copy_issues: Copier les demandes |
|
454 | permission_copy_issues: Copier les demandes | |
453 | permission_manage_issue_relations: GΓ©rer les relations |
|
455 | permission_manage_issue_relations: GΓ©rer les relations | |
454 | permission_set_issues_private: Rendre les demandes publiques ou privΓ©es |
|
456 | permission_set_issues_private: Rendre les demandes publiques ou privΓ©es | |
455 | permission_set_own_issues_private: Rendre ses propres demandes publiques ou privΓ©es |
|
457 | permission_set_own_issues_private: Rendre ses propres demandes publiques ou privΓ©es | |
456 | permission_add_issue_notes: Ajouter des notes |
|
458 | permission_add_issue_notes: Ajouter des notes | |
457 | permission_edit_issue_notes: Modifier les notes |
|
459 | permission_edit_issue_notes: Modifier les notes | |
458 | permission_edit_own_issue_notes: Modifier ses propres notes |
|
460 | permission_edit_own_issue_notes: Modifier ses propres notes | |
459 | permission_view_private_notes: Voir les notes privΓ©es |
|
461 | permission_view_private_notes: Voir les notes privΓ©es | |
460 | permission_set_notes_private: Rendre les notes privΓ©es |
|
462 | permission_set_notes_private: Rendre les notes privΓ©es | |
461 | permission_move_issues: DΓ©placer les demandes |
|
463 | permission_move_issues: DΓ©placer les demandes | |
462 | permission_delete_issues: Supprimer les demandes |
|
464 | permission_delete_issues: Supprimer les demandes | |
463 | permission_manage_public_queries: GΓ©rer les requΓͺtes publiques |
|
465 | permission_manage_public_queries: GΓ©rer les requΓͺtes publiques | |
464 | permission_save_queries: Sauvegarder les requΓͺtes |
|
466 | permission_save_queries: Sauvegarder les requΓͺtes | |
465 | permission_view_gantt: Voir le gantt |
|
467 | permission_view_gantt: Voir le gantt | |
466 | permission_view_calendar: Voir le calendrier |
|
468 | permission_view_calendar: Voir le calendrier | |
467 | permission_view_issue_watchers: Voir la liste des observateurs |
|
469 | permission_view_issue_watchers: Voir la liste des observateurs | |
468 | permission_add_issue_watchers: Ajouter des observateurs |
|
470 | permission_add_issue_watchers: Ajouter des observateurs | |
469 | permission_delete_issue_watchers: Supprimer des observateurs |
|
471 | permission_delete_issue_watchers: Supprimer des observateurs | |
470 | permission_log_time: Saisir le temps passΓ© |
|
472 | permission_log_time: Saisir le temps passΓ© | |
471 | permission_view_time_entries: Voir le temps passΓ© |
|
473 | permission_view_time_entries: Voir le temps passΓ© | |
472 | permission_edit_time_entries: Modifier les temps passΓ©s |
|
474 | permission_edit_time_entries: Modifier les temps passΓ©s | |
473 | permission_edit_own_time_entries: Modifier son propre temps passΓ© |
|
475 | permission_edit_own_time_entries: Modifier son propre temps passΓ© | |
474 | permission_manage_news: GΓ©rer les annonces |
|
476 | permission_manage_news: GΓ©rer les annonces | |
475 | permission_comment_news: Commenter les annonces |
|
477 | permission_comment_news: Commenter les annonces | |
476 | permission_view_documents: Voir les documents |
|
478 | permission_view_documents: Voir les documents | |
477 | permission_add_documents: Ajouter des documents |
|
479 | permission_add_documents: Ajouter des documents | |
478 | permission_edit_documents: Modifier les documents |
|
480 | permission_edit_documents: Modifier les documents | |
479 | permission_delete_documents: Supprimer les documents |
|
481 | permission_delete_documents: Supprimer les documents | |
480 | permission_manage_files: GΓ©rer les fichiers |
|
482 | permission_manage_files: GΓ©rer les fichiers | |
481 | permission_view_files: Voir les fichiers |
|
483 | permission_view_files: Voir les fichiers | |
482 | permission_manage_wiki: GΓ©rer le wiki |
|
484 | permission_manage_wiki: GΓ©rer le wiki | |
483 | permission_rename_wiki_pages: Renommer les pages |
|
485 | permission_rename_wiki_pages: Renommer les pages | |
484 | permission_delete_wiki_pages: Supprimer les pages |
|
486 | permission_delete_wiki_pages: Supprimer les pages | |
485 | permission_view_wiki_pages: Voir le wiki |
|
487 | permission_view_wiki_pages: Voir le wiki | |
486 | permission_view_wiki_edits: "Voir l'historique des modifications" |
|
488 | permission_view_wiki_edits: "Voir l'historique des modifications" | |
487 | permission_edit_wiki_pages: Modifier les pages |
|
489 | permission_edit_wiki_pages: Modifier les pages | |
488 | permission_delete_wiki_pages_attachments: Supprimer les fichiers joints |
|
490 | permission_delete_wiki_pages_attachments: Supprimer les fichiers joints | |
489 | permission_protect_wiki_pages: ProtΓ©ger les pages |
|
491 | permission_protect_wiki_pages: ProtΓ©ger les pages | |
490 | permission_manage_repository: GΓ©rer le dΓ©pΓ΄t de sources |
|
492 | permission_manage_repository: GΓ©rer le dΓ©pΓ΄t de sources | |
491 | permission_browse_repository: Parcourir les sources |
|
493 | permission_browse_repository: Parcourir les sources | |
492 | permission_view_changesets: Voir les rΓ©visions |
|
494 | permission_view_changesets: Voir les rΓ©visions | |
493 | permission_commit_access: Droit de commit |
|
495 | permission_commit_access: Droit de commit | |
494 | permission_manage_boards: GΓ©rer les forums |
|
496 | permission_manage_boards: GΓ©rer les forums | |
495 | permission_view_messages: Voir les messages |
|
497 | permission_view_messages: Voir les messages | |
496 | permission_add_messages: Poster un message |
|
498 | permission_add_messages: Poster un message | |
497 | permission_edit_messages: Modifier les messages |
|
499 | permission_edit_messages: Modifier les messages | |
498 | permission_edit_own_messages: Modifier ses propres messages |
|
500 | permission_edit_own_messages: Modifier ses propres messages | |
499 | permission_delete_messages: Supprimer les messages |
|
501 | permission_delete_messages: Supprimer les messages | |
500 | permission_delete_own_messages: Supprimer ses propres messages |
|
502 | permission_delete_own_messages: Supprimer ses propres messages | |
501 | permission_export_wiki_pages: Exporter les pages |
|
503 | permission_export_wiki_pages: Exporter les pages | |
502 | permission_manage_subtasks: GΓ©rer les sous-tΓ’ches |
|
504 | permission_manage_subtasks: GΓ©rer les sous-tΓ’ches | |
503 | permission_manage_related_issues: GΓ©rer les demandes associΓ©es |
|
505 | permission_manage_related_issues: GΓ©rer les demandes associΓ©es | |
504 |
|
506 | |||
505 | project_module_issue_tracking: Suivi des demandes |
|
507 | project_module_issue_tracking: Suivi des demandes | |
506 | project_module_time_tracking: Suivi du temps passΓ© |
|
508 | project_module_time_tracking: Suivi du temps passΓ© | |
507 | project_module_news: Publication d'annonces |
|
509 | project_module_news: Publication d'annonces | |
508 | project_module_documents: Publication de documents |
|
510 | project_module_documents: Publication de documents | |
509 | project_module_files: Publication de fichiers |
|
511 | project_module_files: Publication de fichiers | |
510 | project_module_wiki: Wiki |
|
512 | project_module_wiki: Wiki | |
511 | project_module_repository: DΓ©pΓ΄t de sources |
|
513 | project_module_repository: DΓ©pΓ΄t de sources | |
512 | project_module_boards: Forums de discussion |
|
514 | project_module_boards: Forums de discussion | |
513 | project_module_calendar: Calendrier |
|
515 | project_module_calendar: Calendrier | |
514 | project_module_gantt: Gantt |
|
516 | project_module_gantt: Gantt | |
515 |
|
517 | |||
516 | label_user: Utilisateur |
|
518 | label_user: Utilisateur | |
517 | label_user_plural: Utilisateurs |
|
519 | label_user_plural: Utilisateurs | |
518 | label_user_new: Nouvel utilisateur |
|
520 | label_user_new: Nouvel utilisateur | |
519 | label_user_anonymous: Anonyme |
|
521 | label_user_anonymous: Anonyme | |
520 | label_project: Projet |
|
522 | label_project: Projet | |
521 | label_project_new: Nouveau projet |
|
523 | label_project_new: Nouveau projet | |
522 | label_project_plural: Projets |
|
524 | label_project_plural: Projets | |
523 | label_x_projects: |
|
525 | label_x_projects: | |
524 | zero: aucun projet |
|
526 | zero: aucun projet | |
525 | one: un projet |
|
527 | one: un projet | |
526 | other: "%{count} projets" |
|
528 | other: "%{count} projets" | |
527 | label_project_all: Tous les projets |
|
529 | label_project_all: Tous les projets | |
528 | label_project_latest: Derniers projets |
|
530 | label_project_latest: Derniers projets | |
529 | label_issue: Demande |
|
531 | label_issue: Demande | |
530 | label_issue_new: Nouvelle demande |
|
532 | label_issue_new: Nouvelle demande | |
531 | label_issue_plural: Demandes |
|
533 | label_issue_plural: Demandes | |
532 | label_issue_view_all: Voir toutes les demandes |
|
534 | label_issue_view_all: Voir toutes les demandes | |
533 | label_issues_by: "Demandes par %{value}" |
|
535 | label_issues_by: "Demandes par %{value}" | |
534 | label_issue_added: Demande ajoutΓ©e |
|
536 | label_issue_added: Demande ajoutΓ©e | |
535 | label_issue_updated: Demande mise Γ jour |
|
537 | label_issue_updated: Demande mise Γ jour | |
536 | label_issue_note_added: Note ajoutΓ©e |
|
538 | label_issue_note_added: Note ajoutΓ©e | |
537 | label_issue_status_updated: Statut changΓ© |
|
539 | label_issue_status_updated: Statut changΓ© | |
538 | label_issue_assigned_to_updated: AssignΓ© changΓ© |
|
540 | label_issue_assigned_to_updated: AssignΓ© changΓ© | |
539 | label_issue_priority_updated: PrioritΓ© changΓ©e |
|
541 | label_issue_priority_updated: PrioritΓ© changΓ©e | |
540 | label_document: Document |
|
542 | label_document: Document | |
541 | label_document_new: Nouveau document |
|
543 | label_document_new: Nouveau document | |
542 | label_document_plural: Documents |
|
544 | label_document_plural: Documents | |
543 | label_document_added: Document ajoutΓ© |
|
545 | label_document_added: Document ajoutΓ© | |
544 | label_role: RΓ΄le |
|
546 | label_role: RΓ΄le | |
545 | label_role_plural: RΓ΄les |
|
547 | label_role_plural: RΓ΄les | |
546 | label_role_new: Nouveau rΓ΄le |
|
548 | label_role_new: Nouveau rΓ΄le | |
547 | label_role_and_permissions: RΓ΄les et permissions |
|
549 | label_role_and_permissions: RΓ΄les et permissions | |
548 | label_role_anonymous: Anonyme |
|
550 | label_role_anonymous: Anonyme | |
549 | label_role_non_member: Non membre |
|
551 | label_role_non_member: Non membre | |
550 | label_member: Membre |
|
552 | label_member: Membre | |
551 | label_member_new: Nouveau membre |
|
553 | label_member_new: Nouveau membre | |
552 | label_member_plural: Membres |
|
554 | label_member_plural: Membres | |
553 | label_tracker: Tracker |
|
555 | label_tracker: Tracker | |
554 | label_tracker_plural: Trackers |
|
556 | label_tracker_plural: Trackers | |
555 | label_tracker_new: Nouveau tracker |
|
557 | label_tracker_new: Nouveau tracker | |
556 | label_workflow: Workflow |
|
558 | label_workflow: Workflow | |
557 | label_issue_status: Statut de demandes |
|
559 | label_issue_status: Statut de demandes | |
558 | label_issue_status_plural: Statuts de demandes |
|
560 | label_issue_status_plural: Statuts de demandes | |
559 | label_issue_status_new: Nouveau statut |
|
561 | label_issue_status_new: Nouveau statut | |
560 | label_issue_category: CatΓ©gorie de demandes |
|
562 | label_issue_category: CatΓ©gorie de demandes | |
561 | label_issue_category_plural: CatΓ©gories de demandes |
|
563 | label_issue_category_plural: CatΓ©gories de demandes | |
562 | label_issue_category_new: Nouvelle catΓ©gorie |
|
564 | label_issue_category_new: Nouvelle catΓ©gorie | |
563 | label_custom_field: Champ personnalisΓ© |
|
565 | label_custom_field: Champ personnalisΓ© | |
564 | label_custom_field_plural: Champs personnalisΓ©s |
|
566 | label_custom_field_plural: Champs personnalisΓ©s | |
565 | label_custom_field_new: Nouveau champ personnalisΓ© |
|
567 | label_custom_field_new: Nouveau champ personnalisΓ© | |
566 | label_enumerations: Listes de valeurs |
|
568 | label_enumerations: Listes de valeurs | |
567 | label_enumeration_new: Nouvelle valeur |
|
569 | label_enumeration_new: Nouvelle valeur | |
568 | label_information: Information |
|
570 | label_information: Information | |
569 | label_information_plural: Informations |
|
571 | label_information_plural: Informations | |
570 | label_please_login: Identification |
|
572 | label_please_login: Identification | |
571 | label_register: S'enregistrer |
|
573 | label_register: S'enregistrer | |
572 | label_login_with_open_id_option: S'authentifier avec OpenID |
|
574 | label_login_with_open_id_option: S'authentifier avec OpenID | |
573 | label_password_lost: Mot de passe perdu |
|
575 | label_password_lost: Mot de passe perdu | |
574 | label_home: Accueil |
|
576 | label_home: Accueil | |
575 | label_my_page: Ma page |
|
577 | label_my_page: Ma page | |
576 | label_my_account: Mon compte |
|
578 | label_my_account: Mon compte | |
577 | label_my_projects: Mes projets |
|
579 | label_my_projects: Mes projets | |
578 | label_my_page_block: Blocs disponibles |
|
580 | label_my_page_block: Blocs disponibles | |
579 | label_administration: Administration |
|
581 | label_administration: Administration | |
580 | label_login: Connexion |
|
582 | label_login: Connexion | |
581 | label_logout: DΓ©connexion |
|
583 | label_logout: DΓ©connexion | |
582 | label_help: Aide |
|
584 | label_help: Aide | |
583 | label_reported_issues: Demandes soumises |
|
585 | label_reported_issues: Demandes soumises | |
584 | label_assigned_to_me_issues: Demandes qui me sont assignΓ©es |
|
586 | label_assigned_to_me_issues: Demandes qui me sont assignΓ©es | |
585 | label_last_login: Dernière connexion |
|
587 | label_last_login: Dernière connexion | |
586 | label_registered_on: Inscrit le |
|
588 | label_registered_on: Inscrit le | |
587 | label_activity: ActivitΓ© |
|
589 | label_activity: ActivitΓ© | |
588 | label_overall_activity: ActivitΓ© globale |
|
590 | label_overall_activity: ActivitΓ© globale | |
589 | label_user_activity: "ActivitΓ© de %{value}" |
|
591 | label_user_activity: "ActivitΓ© de %{value}" | |
590 | label_new: Nouveau |
|
592 | label_new: Nouveau | |
591 | label_logged_as: ConnectΓ© en tant que |
|
593 | label_logged_as: ConnectΓ© en tant que | |
592 | label_environment: Environnement |
|
594 | label_environment: Environnement | |
593 | label_authentication: Authentification |
|
595 | label_authentication: Authentification | |
594 | label_auth_source: Mode d'authentification |
|
596 | label_auth_source: Mode d'authentification | |
595 | label_auth_source_new: Nouveau mode d'authentification |
|
597 | label_auth_source_new: Nouveau mode d'authentification | |
596 | label_auth_source_plural: Modes d'authentification |
|
598 | label_auth_source_plural: Modes d'authentification | |
597 | label_subproject_plural: Sous-projets |
|
599 | label_subproject_plural: Sous-projets | |
598 | label_subproject_new: Nouveau sous-projet |
|
600 | label_subproject_new: Nouveau sous-projet | |
599 | label_and_its_subprojects: "%{value} et ses sous-projets" |
|
601 | label_and_its_subprojects: "%{value} et ses sous-projets" | |
600 | label_min_max_length: Longueurs mini - maxi |
|
602 | label_min_max_length: Longueurs mini - maxi | |
601 | label_list: Liste |
|
603 | label_list: Liste | |
602 | label_date: Date |
|
604 | label_date: Date | |
603 | label_integer: Entier |
|
605 | label_integer: Entier | |
604 | label_float: Nombre dΓ©cimal |
|
606 | label_float: Nombre dΓ©cimal | |
605 | label_boolean: BoolΓ©en |
|
607 | label_boolean: BoolΓ©en | |
606 | label_string: Texte |
|
608 | label_string: Texte | |
607 | label_text: Texte long |
|
609 | label_text: Texte long | |
608 | label_attribute: Attribut |
|
610 | label_attribute: Attribut | |
609 | label_attribute_plural: Attributs |
|
611 | label_attribute_plural: Attributs | |
610 | label_no_data: Aucune donnΓ©e Γ afficher |
|
612 | label_no_data: Aucune donnΓ©e Γ afficher | |
611 | label_change_status: Changer le statut |
|
613 | label_change_status: Changer le statut | |
612 | label_history: Historique |
|
614 | label_history: Historique | |
613 | label_attachment: Fichier |
|
615 | label_attachment: Fichier | |
614 | label_attachment_new: Nouveau fichier |
|
616 | label_attachment_new: Nouveau fichier | |
615 | label_attachment_delete: Supprimer le fichier |
|
617 | label_attachment_delete: Supprimer le fichier | |
616 | label_attachment_plural: Fichiers |
|
618 | label_attachment_plural: Fichiers | |
617 | label_file_added: Fichier ajoutΓ© |
|
619 | label_file_added: Fichier ajoutΓ© | |
618 | label_report: Rapport |
|
620 | label_report: Rapport | |
619 | label_report_plural: Rapports |
|
621 | label_report_plural: Rapports | |
620 | label_news: Annonce |
|
622 | label_news: Annonce | |
621 | label_news_new: Nouvelle annonce |
|
623 | label_news_new: Nouvelle annonce | |
622 | label_news_plural: Annonces |
|
624 | label_news_plural: Annonces | |
623 | label_news_latest: Dernières annonces |
|
625 | label_news_latest: Dernières annonces | |
624 | label_news_view_all: Voir toutes les annonces |
|
626 | label_news_view_all: Voir toutes les annonces | |
625 | label_news_added: Annonce ajoutΓ©e |
|
627 | label_news_added: Annonce ajoutΓ©e | |
626 | label_news_comment_added: Commentaire ajoutΓ© Γ une annonce |
|
628 | label_news_comment_added: Commentaire ajoutΓ© Γ une annonce | |
627 | label_settings: Configuration |
|
629 | label_settings: Configuration | |
628 | label_overview: AperΓ§u |
|
630 | label_overview: AperΓ§u | |
629 | label_version: Version |
|
631 | label_version: Version | |
630 | label_version_new: Nouvelle version |
|
632 | label_version_new: Nouvelle version | |
631 | label_version_plural: Versions |
|
633 | label_version_plural: Versions | |
632 | label_close_versions: Fermer les versions terminΓ©es |
|
634 | label_close_versions: Fermer les versions terminΓ©es | |
633 | label_confirmation: Confirmation |
|
635 | label_confirmation: Confirmation | |
634 | label_export_to: 'Formats disponibles :' |
|
636 | label_export_to: 'Formats disponibles :' | |
635 | label_read: Lire... |
|
637 | label_read: Lire... | |
636 | label_public_projects: Projets publics |
|
638 | label_public_projects: Projets publics | |
637 | label_open_issues: ouvert |
|
639 | label_open_issues: ouvert | |
638 | label_open_issues_plural: ouverts |
|
640 | label_open_issues_plural: ouverts | |
639 | label_closed_issues: fermΓ© |
|
641 | label_closed_issues: fermΓ© | |
640 | label_closed_issues_plural: fermΓ©s |
|
642 | label_closed_issues_plural: fermΓ©s | |
641 | label_x_open_issues_abbr_on_total: |
|
643 | label_x_open_issues_abbr_on_total: | |
642 | zero: 0 ouverte sur %{total} |
|
644 | zero: 0 ouverte sur %{total} | |
643 | one: 1 ouverte sur %{total} |
|
645 | one: 1 ouverte sur %{total} | |
644 | other: "%{count} ouvertes sur %{total}" |
|
646 | other: "%{count} ouvertes sur %{total}" | |
645 | label_x_open_issues_abbr: |
|
647 | label_x_open_issues_abbr: | |
646 | zero: 0 ouverte |
|
648 | zero: 0 ouverte | |
647 | one: 1 ouverte |
|
649 | one: 1 ouverte | |
648 | other: "%{count} ouvertes" |
|
650 | other: "%{count} ouvertes" | |
649 | label_x_closed_issues_abbr: |
|
651 | label_x_closed_issues_abbr: | |
650 | zero: 0 fermΓ©e |
|
652 | zero: 0 fermΓ©e | |
651 | one: 1 fermΓ©e |
|
653 | one: 1 fermΓ©e | |
652 | other: "%{count} fermΓ©es" |
|
654 | other: "%{count} fermΓ©es" | |
653 | label_x_issues: |
|
655 | label_x_issues: | |
654 | zero: 0 demande |
|
656 | zero: 0 demande | |
655 | one: 1 demande |
|
657 | one: 1 demande | |
656 | other: "%{count} demandes" |
|
658 | other: "%{count} demandes" | |
657 | label_total: Total |
|
659 | label_total: Total | |
658 | label_total_time: Temps total |
|
660 | label_total_time: Temps total | |
659 | label_permissions: Permissions |
|
661 | label_permissions: Permissions | |
660 | label_current_status: Statut actuel |
|
662 | label_current_status: Statut actuel | |
661 | label_new_statuses_allowed: Nouveaux statuts autorisΓ©s |
|
663 | label_new_statuses_allowed: Nouveaux statuts autorisΓ©s | |
662 | label_all: tous |
|
664 | label_all: tous | |
663 | label_any: tous |
|
665 | label_any: tous | |
664 | label_none: aucun |
|
666 | label_none: aucun | |
665 | label_nobody: personne |
|
667 | label_nobody: personne | |
666 | label_next: Suivant |
|
668 | label_next: Suivant | |
667 | label_previous: PrΓ©cΓ©dent |
|
669 | label_previous: PrΓ©cΓ©dent | |
668 | label_used_by: UtilisΓ© par |
|
670 | label_used_by: UtilisΓ© par | |
669 | label_details: DΓ©tails |
|
671 | label_details: DΓ©tails | |
670 | label_add_note: Ajouter une note |
|
672 | label_add_note: Ajouter une note | |
671 | label_calendar: Calendrier |
|
673 | label_calendar: Calendrier | |
672 | label_months_from: mois depuis |
|
674 | label_months_from: mois depuis | |
673 | label_gantt: Gantt |
|
675 | label_gantt: Gantt | |
674 | label_internal: Interne |
|
676 | label_internal: Interne | |
675 | label_last_changes: "%{count} derniers changements" |
|
677 | label_last_changes: "%{count} derniers changements" | |
676 | label_change_view_all: Voir tous les changements |
|
678 | label_change_view_all: Voir tous les changements | |
677 | label_personalize_page: Personnaliser cette page |
|
679 | label_personalize_page: Personnaliser cette page | |
678 | label_comment: Commentaire |
|
680 | label_comment: Commentaire | |
679 | label_comment_plural: Commentaires |
|
681 | label_comment_plural: Commentaires | |
680 | label_x_comments: |
|
682 | label_x_comments: | |
681 | zero: aucun commentaire |
|
683 | zero: aucun commentaire | |
682 | one: un commentaire |
|
684 | one: un commentaire | |
683 | other: "%{count} commentaires" |
|
685 | other: "%{count} commentaires" | |
684 | label_comment_add: Ajouter un commentaire |
|
686 | label_comment_add: Ajouter un commentaire | |
685 | label_comment_added: Commentaire ajoutΓ© |
|
687 | label_comment_added: Commentaire ajoutΓ© | |
686 | label_comment_delete: Supprimer les commentaires |
|
688 | label_comment_delete: Supprimer les commentaires | |
687 | label_query: Rapport personnalisΓ© |
|
689 | label_query: Rapport personnalisΓ© | |
688 | label_query_plural: Rapports personnalisΓ©s |
|
690 | label_query_plural: Rapports personnalisΓ©s | |
689 | label_query_new: Nouveau rapport |
|
691 | label_query_new: Nouveau rapport | |
690 | label_my_queries: Mes rapports personnalisΓ©s |
|
692 | label_my_queries: Mes rapports personnalisΓ©s | |
691 | label_filter_add: Ajouter le filtre |
|
693 | label_filter_add: Ajouter le filtre | |
692 | label_filter_plural: Filtres |
|
694 | label_filter_plural: Filtres | |
693 | label_equals: Γ©gal |
|
695 | label_equals: Γ©gal | |
694 | label_not_equals: diffΓ©rent |
|
696 | label_not_equals: diffΓ©rent | |
695 | label_in_less_than: dans moins de |
|
697 | label_in_less_than: dans moins de | |
696 | label_in_more_than: dans plus de |
|
698 | label_in_more_than: dans plus de | |
697 | label_in_the_next_days: dans les prochains jours |
|
699 | label_in_the_next_days: dans les prochains jours | |
698 | label_in_the_past_days: dans les derniers jours |
|
700 | label_in_the_past_days: dans les derniers jours | |
699 | label_greater_or_equal: '>=' |
|
701 | label_greater_or_equal: '>=' | |
700 | label_less_or_equal: '<=' |
|
702 | label_less_or_equal: '<=' | |
701 | label_between: entre |
|
703 | label_between: entre | |
702 | label_in: dans |
|
704 | label_in: dans | |
703 | label_today: aujourd'hui |
|
705 | label_today: aujourd'hui | |
704 | label_all_time: toute la pΓ©riode |
|
706 | label_all_time: toute la pΓ©riode | |
705 | label_yesterday: hier |
|
707 | label_yesterday: hier | |
706 | label_this_week: cette semaine |
|
708 | label_this_week: cette semaine | |
707 | label_last_week: la semaine dernière |
|
709 | label_last_week: la semaine dernière | |
708 | label_last_n_weeks: "les %{count} dernières semaines" |
|
710 | label_last_n_weeks: "les %{count} dernières semaines" | |
709 | label_last_n_days: "les %{count} derniers jours" |
|
711 | label_last_n_days: "les %{count} derniers jours" | |
710 | label_this_month: ce mois-ci |
|
712 | label_this_month: ce mois-ci | |
711 | label_last_month: le mois dernier |
|
713 | label_last_month: le mois dernier | |
712 | label_this_year: cette annΓ©e |
|
714 | label_this_year: cette annΓ©e | |
713 | label_date_range: PΓ©riode |
|
715 | label_date_range: PΓ©riode | |
714 | label_less_than_ago: il y a moins de |
|
716 | label_less_than_ago: il y a moins de | |
715 | label_more_than_ago: il y a plus de |
|
717 | label_more_than_ago: il y a plus de | |
716 | label_ago: il y a |
|
718 | label_ago: il y a | |
717 | label_contains: contient |
|
719 | label_contains: contient | |
718 | label_not_contains: ne contient pas |
|
720 | label_not_contains: ne contient pas | |
719 | label_any_issues_in_project: une demande du projet |
|
721 | label_any_issues_in_project: une demande du projet | |
720 | label_any_issues_not_in_project: une demande hors du projet |
|
722 | label_any_issues_not_in_project: une demande hors du projet | |
721 | label_no_issues_in_project: aucune demande du projet |
|
723 | label_no_issues_in_project: aucune demande du projet | |
722 | label_day_plural: jours |
|
724 | label_day_plural: jours | |
723 | label_repository: DΓ©pΓ΄t |
|
725 | label_repository: DΓ©pΓ΄t | |
724 | label_repository_new: Nouveau dΓ©pΓ΄t |
|
726 | label_repository_new: Nouveau dΓ©pΓ΄t | |
725 | label_repository_plural: DΓ©pΓ΄ts |
|
727 | label_repository_plural: DΓ©pΓ΄ts | |
726 | label_browse: Parcourir |
|
728 | label_browse: Parcourir | |
727 | label_branch: Branche |
|
729 | label_branch: Branche | |
728 | label_tag: Tag |
|
730 | label_tag: Tag | |
729 | label_revision: RΓ©vision |
|
731 | label_revision: RΓ©vision | |
730 | label_revision_plural: RΓ©visions |
|
732 | label_revision_plural: RΓ©visions | |
731 | label_revision_id: "RΓ©vision %{value}" |
|
733 | label_revision_id: "RΓ©vision %{value}" | |
732 | label_associated_revisions: RΓ©visions associΓ©es |
|
734 | label_associated_revisions: RΓ©visions associΓ©es | |
733 | label_added: ajoutΓ© |
|
735 | label_added: ajoutΓ© | |
734 | label_modified: modifiΓ© |
|
736 | label_modified: modifiΓ© | |
735 | label_copied: copiΓ© |
|
737 | label_copied: copiΓ© | |
736 | label_renamed: renommΓ© |
|
738 | label_renamed: renommΓ© | |
737 | label_deleted: supprimΓ© |
|
739 | label_deleted: supprimΓ© | |
738 | label_latest_revision: Dernière révision |
|
740 | label_latest_revision: Dernière révision | |
739 | label_latest_revision_plural: Dernières révisions |
|
741 | label_latest_revision_plural: Dernières révisions | |
740 | label_view_revisions: Voir les rΓ©visions |
|
742 | label_view_revisions: Voir les rΓ©visions | |
741 | label_view_all_revisions: Voir toutes les rΓ©visions |
|
743 | label_view_all_revisions: Voir toutes les rΓ©visions | |
742 | label_max_size: Taille maximale |
|
744 | label_max_size: Taille maximale | |
743 | label_sort_highest: Remonter en premier |
|
745 | label_sort_highest: Remonter en premier | |
744 | label_sort_higher: Remonter |
|
746 | label_sort_higher: Remonter | |
745 | label_sort_lower: Descendre |
|
747 | label_sort_lower: Descendre | |
746 | label_sort_lowest: Descendre en dernier |
|
748 | label_sort_lowest: Descendre en dernier | |
747 | label_roadmap: Roadmap |
|
749 | label_roadmap: Roadmap | |
748 | label_roadmap_due_in: "ΓchΓ©ance dans %{value}" |
|
750 | label_roadmap_due_in: "ΓchΓ©ance dans %{value}" | |
749 | label_roadmap_overdue: "En retard de %{value}" |
|
751 | label_roadmap_overdue: "En retard de %{value}" | |
750 | label_roadmap_no_issues: Aucune demande pour cette version |
|
752 | label_roadmap_no_issues: Aucune demande pour cette version | |
751 | label_search: Recherche |
|
753 | label_search: Recherche | |
752 | label_result_plural: RΓ©sultats |
|
754 | label_result_plural: RΓ©sultats | |
753 | label_all_words: Tous les mots |
|
755 | label_all_words: Tous les mots | |
754 | label_wiki: Wiki |
|
756 | label_wiki: Wiki | |
755 | label_wiki_edit: RΓ©vision wiki |
|
757 | label_wiki_edit: RΓ©vision wiki | |
756 | label_wiki_edit_plural: RΓ©visions wiki |
|
758 | label_wiki_edit_plural: RΓ©visions wiki | |
757 | label_wiki_page: Page wiki |
|
759 | label_wiki_page: Page wiki | |
758 | label_wiki_page_plural: Pages wiki |
|
760 | label_wiki_page_plural: Pages wiki | |
759 | label_index_by_title: Index par titre |
|
761 | label_index_by_title: Index par titre | |
760 | label_index_by_date: Index par date |
|
762 | label_index_by_date: Index par date | |
761 | label_current_version: Version actuelle |
|
763 | label_current_version: Version actuelle | |
762 | label_preview: PrΓ©visualisation |
|
764 | label_preview: PrΓ©visualisation | |
763 | label_feed_plural: Flux Atom |
|
765 | label_feed_plural: Flux Atom | |
764 | label_changes_details: DΓ©tails de tous les changements |
|
766 | label_changes_details: DΓ©tails de tous les changements | |
765 | label_issue_tracking: Suivi des demandes |
|
767 | label_issue_tracking: Suivi des demandes | |
766 | label_spent_time: Temps passΓ© |
|
768 | label_spent_time: Temps passΓ© | |
767 | label_overall_spent_time: Temps passΓ© global |
|
769 | label_overall_spent_time: Temps passΓ© global | |
768 | label_f_hour: "%{value} heure" |
|
770 | label_f_hour: "%{value} heure" | |
769 | label_f_hour_plural: "%{value} heures" |
|
771 | label_f_hour_plural: "%{value} heures" | |
770 | label_time_tracking: Suivi du temps |
|
772 | label_time_tracking: Suivi du temps | |
771 | label_change_plural: Changements |
|
773 | label_change_plural: Changements | |
772 | label_statistics: Statistiques |
|
774 | label_statistics: Statistiques | |
773 | label_commits_per_month: Commits par mois |
|
775 | label_commits_per_month: Commits par mois | |
774 | label_commits_per_author: Commits par auteur |
|
776 | label_commits_per_author: Commits par auteur | |
775 | label_diff: diff |
|
777 | label_diff: diff | |
776 | label_view_diff: Voir les diffΓ©rences |
|
778 | label_view_diff: Voir les diffΓ©rences | |
777 | label_diff_inline: en ligne |
|
779 | label_diff_inline: en ligne | |
778 | label_diff_side_by_side: cΓ΄te Γ cΓ΄te |
|
780 | label_diff_side_by_side: cΓ΄te Γ cΓ΄te | |
779 | label_options: Options |
|
781 | label_options: Options | |
780 | label_copy_workflow_from: Copier le workflow de |
|
782 | label_copy_workflow_from: Copier le workflow de | |
781 | label_permissions_report: Synthèse des permissions |
|
783 | label_permissions_report: Synthèse des permissions | |
782 | label_watched_issues: Demandes surveillΓ©es |
|
784 | label_watched_issues: Demandes surveillΓ©es | |
783 | label_related_issues: Demandes liΓ©es |
|
785 | label_related_issues: Demandes liΓ©es | |
784 | label_applied_status: Statut appliquΓ© |
|
786 | label_applied_status: Statut appliquΓ© | |
785 | label_loading: Chargement... |
|
787 | label_loading: Chargement... | |
786 | label_relation_new: Nouvelle relation |
|
788 | label_relation_new: Nouvelle relation | |
787 | label_relation_delete: Supprimer la relation |
|
789 | label_relation_delete: Supprimer la relation | |
788 | label_relates_to: LiΓ© Γ |
|
790 | label_relates_to: LiΓ© Γ | |
789 | label_duplicates: Duplique |
|
791 | label_duplicates: Duplique | |
790 | label_duplicated_by: DupliquΓ© par |
|
792 | label_duplicated_by: DupliquΓ© par | |
791 | label_blocks: Bloque |
|
793 | label_blocks: Bloque | |
792 | label_blocked_by: BloquΓ© par |
|
794 | label_blocked_by: BloquΓ© par | |
793 | label_precedes: Précède |
|
795 | label_precedes: Précède | |
794 | label_follows: Suit |
|
796 | label_follows: Suit | |
795 | label_copied_to: CopiΓ© vers |
|
797 | label_copied_to: CopiΓ© vers | |
796 | label_copied_from: CopiΓ© depuis |
|
798 | label_copied_from: CopiΓ© depuis | |
797 | label_end_to_start: fin Γ dΓ©but |
|
799 | label_end_to_start: fin Γ dΓ©but | |
798 | label_end_to_end: fin Γ fin |
|
800 | label_end_to_end: fin Γ fin | |
799 | label_start_to_start: dΓ©but Γ dΓ©but |
|
801 | label_start_to_start: dΓ©but Γ dΓ©but | |
800 | label_start_to_end: dΓ©but Γ fin |
|
802 | label_start_to_end: dΓ©but Γ fin | |
801 | label_stay_logged_in: Rester connectΓ© |
|
803 | label_stay_logged_in: Rester connectΓ© | |
802 | label_disabled: dΓ©sactivΓ© |
|
804 | label_disabled: dΓ©sactivΓ© | |
803 | label_show_completed_versions: Voir les versions passΓ©es |
|
805 | label_show_completed_versions: Voir les versions passΓ©es | |
804 | label_me: moi |
|
806 | label_me: moi | |
805 | label_board: Forum |
|
807 | label_board: Forum | |
806 | label_board_new: Nouveau forum |
|
808 | label_board_new: Nouveau forum | |
807 | label_board_plural: Forums |
|
809 | label_board_plural: Forums | |
808 | label_board_locked: VerrouillΓ© |
|
810 | label_board_locked: VerrouillΓ© | |
809 | label_board_sticky: Sticky |
|
811 | label_board_sticky: Sticky | |
810 | label_topic_plural: Discussions |
|
812 | label_topic_plural: Discussions | |
811 | label_message_plural: Messages |
|
813 | label_message_plural: Messages | |
812 | label_message_last: Dernier message |
|
814 | label_message_last: Dernier message | |
813 | label_message_new: Nouveau message |
|
815 | label_message_new: Nouveau message | |
814 | label_message_posted: Message ajoutΓ© |
|
816 | label_message_posted: Message ajoutΓ© | |
815 | label_reply_plural: RΓ©ponses |
|
817 | label_reply_plural: RΓ©ponses | |
816 | label_send_information: Envoyer les informations Γ l'utilisateur |
|
818 | label_send_information: Envoyer les informations Γ l'utilisateur | |
817 | label_year: AnnΓ©e |
|
819 | label_year: AnnΓ©e | |
818 | label_month: Mois |
|
820 | label_month: Mois | |
819 | label_week: Semaine |
|
821 | label_week: Semaine | |
820 | label_date_from: Du |
|
822 | label_date_from: Du | |
821 | label_date_to: Au |
|
823 | label_date_to: Au | |
822 | label_language_based: BasΓ© sur la langue de l'utilisateur |
|
824 | label_language_based: BasΓ© sur la langue de l'utilisateur | |
823 | label_sort_by: "Trier par %{value}" |
|
825 | label_sort_by: "Trier par %{value}" | |
824 | label_send_test_email: Envoyer un email de test |
|
826 | label_send_test_email: Envoyer un email de test | |
825 | label_feeds_access_key: Clé d'accès Atom |
|
827 | label_feeds_access_key: Clé d'accès Atom | |
826 | label_missing_feeds_access_key: Clé d'accès Atom manquante |
|
828 | label_missing_feeds_access_key: Clé d'accès Atom manquante | |
827 | label_feeds_access_key_created_on: "Clé d'accès Atom créée il y a %{value}" |
|
829 | label_feeds_access_key_created_on: "Clé d'accès Atom créée il y a %{value}" | |
828 | label_module_plural: Modules |
|
830 | label_module_plural: Modules | |
829 | label_added_time_by: "AjoutΓ© par %{author} il y a %{age}" |
|
831 | label_added_time_by: "AjoutΓ© par %{author} il y a %{age}" | |
830 | label_updated_time_by: "Mis Γ jour par %{author} il y a %{age}" |
|
832 | label_updated_time_by: "Mis Γ jour par %{author} il y a %{age}" | |
831 | label_updated_time: "Mis Γ jour il y a %{value}" |
|
833 | label_updated_time: "Mis Γ jour il y a %{value}" | |
832 | label_jump_to_a_project: Aller Γ un projet... |
|
834 | label_jump_to_a_project: Aller Γ un projet... | |
833 | label_file_plural: Fichiers |
|
835 | label_file_plural: Fichiers | |
834 | label_changeset_plural: RΓ©visions |
|
836 | label_changeset_plural: RΓ©visions | |
835 | label_default_columns: Colonnes par dΓ©faut |
|
837 | label_default_columns: Colonnes par dΓ©faut | |
836 | label_no_change_option: (Pas de changement) |
|
838 | label_no_change_option: (Pas de changement) | |
837 | label_bulk_edit_selected_issues: Modifier les demandes sΓ©lectionnΓ©es |
|
839 | label_bulk_edit_selected_issues: Modifier les demandes sΓ©lectionnΓ©es | |
838 | label_bulk_edit_selected_time_entries: Modifier les temps passΓ©s sΓ©lectionnΓ©s |
|
840 | label_bulk_edit_selected_time_entries: Modifier les temps passΓ©s sΓ©lectionnΓ©s | |
839 | label_theme: Thème |
|
841 | label_theme: Thème | |
840 | label_default: DΓ©faut |
|
842 | label_default: DΓ©faut | |
841 | label_search_titles_only: Uniquement dans les titres |
|
843 | label_search_titles_only: Uniquement dans les titres | |
842 | label_user_mail_option_all: "Pour tous les Γ©vΓ©nements de tous mes projets" |
|
844 | label_user_mail_option_all: "Pour tous les Γ©vΓ©nements de tous mes projets" | |
843 | label_user_mail_option_selected: "Pour tous les Γ©vΓ©nements des projets sΓ©lectionnΓ©s..." |
|
845 | label_user_mail_option_selected: "Pour tous les Γ©vΓ©nements des projets sΓ©lectionnΓ©s..." | |
844 | label_user_mail_option_none: Aucune notification |
|
846 | label_user_mail_option_none: Aucune notification | |
845 | label_user_mail_option_only_my_events: Seulement pour ce que je surveille |
|
847 | label_user_mail_option_only_my_events: Seulement pour ce que je surveille | |
846 | label_user_mail_option_only_assigned: Seulement pour ce qui m'est assignΓ© |
|
848 | label_user_mail_option_only_assigned: Seulement pour ce qui m'est assignΓ© | |
847 | label_user_mail_option_only_owner: Seulement pour ce que j'ai créé |
|
849 | label_user_mail_option_only_owner: Seulement pour ce que j'ai créé | |
848 | label_user_mail_no_self_notified: "Je ne veux pas Γͺtre notifiΓ© des changements que j'effectue" |
|
850 | label_user_mail_no_self_notified: "Je ne veux pas Γͺtre notifiΓ© des changements que j'effectue" | |
849 | label_registration_activation_by_email: activation du compte par email |
|
851 | label_registration_activation_by_email: activation du compte par email | |
850 | label_registration_manual_activation: activation manuelle du compte |
|
852 | label_registration_manual_activation: activation manuelle du compte | |
851 | label_registration_automatic_activation: activation automatique du compte |
|
853 | label_registration_automatic_activation: activation automatique du compte | |
852 | label_display_per_page: "Par page : %{value}" |
|
854 | label_display_per_page: "Par page : %{value}" | |
853 | label_age: Γge |
|
855 | label_age: Γge | |
854 | label_change_properties: Changer les propriΓ©tΓ©s |
|
856 | label_change_properties: Changer les propriΓ©tΓ©s | |
855 | label_general: GΓ©nΓ©ral |
|
857 | label_general: GΓ©nΓ©ral | |
856 | label_more: Plus |
|
858 | label_more: Plus | |
857 | label_scm: SCM |
|
859 | label_scm: SCM | |
858 | label_plugins: Plugins |
|
860 | label_plugins: Plugins | |
859 | label_ldap_authentication: Authentification LDAP |
|
861 | label_ldap_authentication: Authentification LDAP | |
860 | label_downloads_abbr: D/L |
|
862 | label_downloads_abbr: D/L | |
861 | label_optional_description: Description facultative |
|
863 | label_optional_description: Description facultative | |
862 | label_add_another_file: Ajouter un autre fichier |
|
864 | label_add_another_file: Ajouter un autre fichier | |
863 | label_preferences: PrΓ©fΓ©rences |
|
865 | label_preferences: PrΓ©fΓ©rences | |
864 | label_chronological_order: Dans l'ordre chronologique |
|
866 | label_chronological_order: Dans l'ordre chronologique | |
865 | label_reverse_chronological_order: Dans l'ordre chronologique inverse |
|
867 | label_reverse_chronological_order: Dans l'ordre chronologique inverse | |
866 | label_planning: Planning |
|
868 | label_planning: Planning | |
867 | label_incoming_emails: Emails entrants |
|
869 | label_incoming_emails: Emails entrants | |
868 | label_generate_key: GΓ©nΓ©rer une clΓ© |
|
870 | label_generate_key: GΓ©nΓ©rer une clΓ© | |
869 | label_issue_watchers: Observateurs |
|
871 | label_issue_watchers: Observateurs | |
870 | label_example: Exemple |
|
872 | label_example: Exemple | |
871 | label_display: Affichage |
|
873 | label_display: Affichage | |
872 | label_sort: Tri |
|
874 | label_sort: Tri | |
873 | label_ascending: Croissant |
|
875 | label_ascending: Croissant | |
874 | label_descending: DΓ©croissant |
|
876 | label_descending: DΓ©croissant | |
875 | label_date_from_to: Du %{start} au %{end} |
|
877 | label_date_from_to: Du %{start} au %{end} | |
876 | label_wiki_content_added: Page wiki ajoutΓ©e |
|
878 | label_wiki_content_added: Page wiki ajoutΓ©e | |
877 | label_wiki_content_updated: Page wiki mise Γ jour |
|
879 | label_wiki_content_updated: Page wiki mise Γ jour | |
878 | label_group: Groupe |
|
880 | label_group: Groupe | |
879 | label_group_plural: Groupes |
|
881 | label_group_plural: Groupes | |
880 | label_group_new: Nouveau groupe |
|
882 | label_group_new: Nouveau groupe | |
881 | label_group_anonymous: Utilisateurs anonymes |
|
883 | label_group_anonymous: Utilisateurs anonymes | |
882 | label_group_non_member: Utilisateurs non membres |
|
884 | label_group_non_member: Utilisateurs non membres | |
883 | label_time_entry_plural: Temps passΓ© |
|
885 | label_time_entry_plural: Temps passΓ© | |
884 | label_version_sharing_none: Non partagΓ© |
|
886 | label_version_sharing_none: Non partagΓ© | |
885 | label_version_sharing_descendants: Avec les sous-projets |
|
887 | label_version_sharing_descendants: Avec les sous-projets | |
886 | label_version_sharing_hierarchy: Avec toute la hiΓ©rarchie |
|
888 | label_version_sharing_hierarchy: Avec toute la hiΓ©rarchie | |
887 | label_version_sharing_tree: Avec tout l'arbre |
|
889 | label_version_sharing_tree: Avec tout l'arbre | |
888 | label_version_sharing_system: Avec tous les projets |
|
890 | label_version_sharing_system: Avec tous les projets | |
889 | label_update_issue_done_ratios: Mettre Γ jour l'avancement des demandes |
|
891 | label_update_issue_done_ratios: Mettre Γ jour l'avancement des demandes | |
890 | label_copy_source: Source |
|
892 | label_copy_source: Source | |
891 | label_copy_target: Cible |
|
893 | label_copy_target: Cible | |
892 | label_copy_same_as_target: Comme la cible |
|
894 | label_copy_same_as_target: Comme la cible | |
893 | label_display_used_statuses_only: N'afficher que les statuts utilisΓ©s dans ce tracker |
|
895 | label_display_used_statuses_only: N'afficher que les statuts utilisΓ©s dans ce tracker | |
894 | label_api_access_key: Clé d'accès API |
|
896 | label_api_access_key: Clé d'accès API | |
895 | label_missing_api_access_key: Clé d'accès API manquante |
|
897 | label_missing_api_access_key: Clé d'accès API manquante | |
896 | label_api_access_key_created_on: Clé d'accès API créée il y a %{value} |
|
898 | label_api_access_key_created_on: Clé d'accès API créée il y a %{value} | |
897 | label_profile: Profil |
|
899 | label_profile: Profil | |
898 | label_subtask_plural: Sous-tΓ’ches |
|
900 | label_subtask_plural: Sous-tΓ’ches | |
899 | label_project_copy_notifications: Envoyer les notifications durant la copie du projet |
|
901 | label_project_copy_notifications: Envoyer les notifications durant la copie du projet | |
900 | label_principal_search: "Rechercher un utilisateur ou un groupe :" |
|
902 | label_principal_search: "Rechercher un utilisateur ou un groupe :" | |
901 | label_user_search: "Rechercher un utilisateur :" |
|
903 | label_user_search: "Rechercher un utilisateur :" | |
902 | label_additional_workflow_transitions_for_author: Autorisations supplémentaires lorsque l'utilisateur a créé la demande |
|
904 | label_additional_workflow_transitions_for_author: Autorisations supplémentaires lorsque l'utilisateur a créé la demande | |
903 | label_additional_workflow_transitions_for_assignee: Autorisations supplΓ©mentaires lorsque la demande est assignΓ©e Γ l'utilisateur |
|
905 | label_additional_workflow_transitions_for_assignee: Autorisations supplΓ©mentaires lorsque la demande est assignΓ©e Γ l'utilisateur | |
904 | label_issues_visibility_all: Toutes les demandes |
|
906 | label_issues_visibility_all: Toutes les demandes | |
905 | label_issues_visibility_public: Toutes les demandes non privΓ©es |
|
907 | label_issues_visibility_public: Toutes les demandes non privΓ©es | |
906 | label_issues_visibility_own: Demandes créées par ou assignées à l'utilisateur |
|
908 | label_issues_visibility_own: Demandes créées par ou assignées à l'utilisateur | |
907 | label_git_report_last_commit: Afficher le dernier commit des fichiers et rΓ©pertoires |
|
909 | label_git_report_last_commit: Afficher le dernier commit des fichiers et rΓ©pertoires | |
908 | label_parent_revision: Parent |
|
910 | label_parent_revision: Parent | |
909 | label_child_revision: Enfant |
|
911 | label_child_revision: Enfant | |
910 | label_export_options: Options d'exportation %{export_format} |
|
912 | label_export_options: Options d'exportation %{export_format} | |
911 | label_copy_attachments: Copier les fichiers |
|
913 | label_copy_attachments: Copier les fichiers | |
912 | label_copy_subtasks: Copier les sous-tΓ’ches |
|
914 | label_copy_subtasks: Copier les sous-tΓ’ches | |
913 | label_item_position: "%{position} sur %{count}" |
|
915 | label_item_position: "%{position} sur %{count}" | |
914 | label_completed_versions: Versions passΓ©es |
|
916 | label_completed_versions: Versions passΓ©es | |
915 | label_search_for_watchers: Rechercher des observateurs |
|
917 | label_search_for_watchers: Rechercher des observateurs | |
916 | label_session_expiration: Expiration des sessions |
|
918 | label_session_expiration: Expiration des sessions | |
917 | label_show_closed_projects: Voir les projets fermΓ©s |
|
919 | label_show_closed_projects: Voir les projets fermΓ©s | |
918 | label_status_transitions: Changements de statut |
|
920 | label_status_transitions: Changements de statut | |
919 | label_fields_permissions: Permissions sur les champs |
|
921 | label_fields_permissions: Permissions sur les champs | |
920 | label_readonly: Lecture |
|
922 | label_readonly: Lecture | |
921 | label_required: Obligatoire |
|
923 | label_required: Obligatoire | |
922 | label_hidden: CachΓ© |
|
924 | label_hidden: CachΓ© | |
923 | label_attribute_of_project: "%{name} du projet" |
|
925 | label_attribute_of_project: "%{name} du projet" | |
924 | label_attribute_of_issue: "%{name} de la demande" |
|
926 | label_attribute_of_issue: "%{name} de la demande" | |
925 | label_attribute_of_author: "%{name} de l'auteur" |
|
927 | label_attribute_of_author: "%{name} de l'auteur" | |
926 | label_attribute_of_assigned_to: "%{name} de l'assignΓ©" |
|
928 | label_attribute_of_assigned_to: "%{name} de l'assignΓ©" | |
927 | label_attribute_of_user: "%{name} de l'utilisateur" |
|
929 | label_attribute_of_user: "%{name} de l'utilisateur" | |
928 | label_attribute_of_fixed_version: "%{name} de la version cible" |
|
930 | label_attribute_of_fixed_version: "%{name} de la version cible" | |
929 | label_cross_project_descendants: Avec les sous-projets |
|
931 | label_cross_project_descendants: Avec les sous-projets | |
930 | label_cross_project_tree: Avec tout l'arbre |
|
932 | label_cross_project_tree: Avec tout l'arbre | |
931 | label_cross_project_hierarchy: Avec toute la hiΓ©rarchie |
|
933 | label_cross_project_hierarchy: Avec toute la hiΓ©rarchie | |
932 | label_cross_project_system: Avec tous les projets |
|
934 | label_cross_project_system: Avec tous les projets | |
933 | label_gantt_progress_line: Ligne de progression |
|
935 | label_gantt_progress_line: Ligne de progression | |
934 | label_visibility_private: par moi uniquement |
|
936 | label_visibility_private: par moi uniquement | |
935 | label_visibility_roles: par ces rΓ΄les uniquement |
|
937 | label_visibility_roles: par ces rΓ΄les uniquement | |
936 | label_visibility_public: par tout le monde |
|
938 | label_visibility_public: par tout le monde | |
937 | label_link: Lien |
|
939 | label_link: Lien | |
938 | label_only: seulement |
|
940 | label_only: seulement | |
939 | label_drop_down_list: liste dΓ©roulante |
|
941 | label_drop_down_list: liste dΓ©roulante | |
940 | label_checkboxes: cases Γ cocher |
|
942 | label_checkboxes: cases Γ cocher | |
941 | label_radio_buttons: boutons radio |
|
943 | label_radio_buttons: boutons radio | |
942 | label_link_values_to: Lier les valeurs vers l'URL |
|
944 | label_link_values_to: Lier les valeurs vers l'URL | |
943 | label_custom_field_select_type: Selectionner le type d'objet auquel attacher le champ personnalisΓ© |
|
945 | label_custom_field_select_type: Selectionner le type d'objet auquel attacher le champ personnalisΓ© | |
944 | label_check_for_updates: VΓ©rifier les mises Γ jour |
|
946 | label_check_for_updates: VΓ©rifier les mises Γ jour | |
945 | label_latest_compatible_version: Dernière version compatible |
|
947 | label_latest_compatible_version: Dernière version compatible | |
946 | label_unknown_plugin: Plugin inconnu |
|
948 | label_unknown_plugin: Plugin inconnu | |
947 | label_add_projects: Ajouter des projets |
|
949 | label_add_projects: Ajouter des projets | |
948 | label_users_visibility_all: Tous les utilisateurs actifs |
|
950 | label_users_visibility_all: Tous les utilisateurs actifs | |
949 | label_users_visibility_members_of_visible_projects: Membres des projets visibles |
|
951 | label_users_visibility_members_of_visible_projects: Membres des projets visibles | |
950 | label_edit_attachments: Modifier les fichiers attachΓ©s |
|
952 | label_edit_attachments: Modifier les fichiers attachΓ©s | |
951 | label_link_copied_issue: Lier la demande copiΓ©e |
|
953 | label_link_copied_issue: Lier la demande copiΓ©e | |
952 | label_ask: Demander |
|
954 | label_ask: Demander | |
953 | label_search_attachments_yes: Rechercher les noms et descriptions de fichiers |
|
955 | label_search_attachments_yes: Rechercher les noms et descriptions de fichiers | |
954 | label_search_attachments_no: Ne pas rechercher les fichiers |
|
956 | label_search_attachments_no: Ne pas rechercher les fichiers | |
955 | label_search_attachments_only: Rechercher les fichiers uniquement |
|
957 | label_search_attachments_only: Rechercher les fichiers uniquement | |
956 | label_search_open_issues_only: Demandes ouvertes uniquement |
|
958 | label_search_open_issues_only: Demandes ouvertes uniquement | |
957 | label_email_address_plural: Emails |
|
959 | label_email_address_plural: Emails | |
958 | label_email_address_add: Ajouter une adresse email |
|
960 | label_email_address_add: Ajouter une adresse email | |
959 | label_enable_notifications: Activer les notifications |
|
961 | label_enable_notifications: Activer les notifications | |
960 | label_disable_notifications: DΓ©sactiver les notifications |
|
962 | label_disable_notifications: DΓ©sactiver les notifications | |
961 | label_blank_value: non renseignΓ© |
|
963 | label_blank_value: non renseignΓ© | |
962 |
|
964 | |||
963 | button_login: Connexion |
|
965 | button_login: Connexion | |
964 | button_submit: Soumettre |
|
966 | button_submit: Soumettre | |
965 | button_save: Sauvegarder |
|
967 | button_save: Sauvegarder | |
966 | button_check_all: Tout cocher |
|
968 | button_check_all: Tout cocher | |
967 | button_uncheck_all: Tout dΓ©cocher |
|
969 | button_uncheck_all: Tout dΓ©cocher | |
968 | button_collapse_all: Plier tout |
|
970 | button_collapse_all: Plier tout | |
969 | button_expand_all: DΓ©plier tout |
|
971 | button_expand_all: DΓ©plier tout | |
970 | button_delete: Supprimer |
|
972 | button_delete: Supprimer | |
971 | button_create: CrΓ©er |
|
973 | button_create: CrΓ©er | |
972 | button_create_and_continue: CrΓ©er et continuer |
|
974 | button_create_and_continue: CrΓ©er et continuer | |
973 | button_test: Tester |
|
975 | button_test: Tester | |
974 | button_edit: Modifier |
|
976 | button_edit: Modifier | |
975 | button_edit_associated_wikipage: "Modifier la page wiki associΓ©e: %{page_title}" |
|
977 | button_edit_associated_wikipage: "Modifier la page wiki associΓ©e: %{page_title}" | |
976 | button_add: Ajouter |
|
978 | button_add: Ajouter | |
977 | button_change: Changer |
|
979 | button_change: Changer | |
978 | button_apply: Appliquer |
|
980 | button_apply: Appliquer | |
979 | button_clear: Effacer |
|
981 | button_clear: Effacer | |
980 | button_lock: Verrouiller |
|
982 | button_lock: Verrouiller | |
981 | button_unlock: DΓ©verrouiller |
|
983 | button_unlock: DΓ©verrouiller | |
982 | button_download: TΓ©lΓ©charger |
|
984 | button_download: TΓ©lΓ©charger | |
983 | button_list: Lister |
|
985 | button_list: Lister | |
984 | button_view: Voir |
|
986 | button_view: Voir | |
985 | button_move: DΓ©placer |
|
987 | button_move: DΓ©placer | |
986 | button_move_and_follow: DΓ©placer et suivre |
|
988 | button_move_and_follow: DΓ©placer et suivre | |
987 | button_back: Retour |
|
989 | button_back: Retour | |
988 | button_cancel: Annuler |
|
990 | button_cancel: Annuler | |
989 | button_activate: Activer |
|
991 | button_activate: Activer | |
990 | button_sort: Trier |
|
992 | button_sort: Trier | |
991 | button_log_time: Saisir temps |
|
993 | button_log_time: Saisir temps | |
992 | button_rollback: Revenir Γ cette version |
|
994 | button_rollback: Revenir Γ cette version | |
993 | button_watch: Surveiller |
|
995 | button_watch: Surveiller | |
994 | button_unwatch: Ne plus surveiller |
|
996 | button_unwatch: Ne plus surveiller | |
995 | button_reply: RΓ©pondre |
|
997 | button_reply: RΓ©pondre | |
996 | button_archive: Archiver |
|
998 | button_archive: Archiver | |
997 | button_unarchive: DΓ©sarchiver |
|
999 | button_unarchive: DΓ©sarchiver | |
998 | button_reset: RΓ©initialiser |
|
1000 | button_reset: RΓ©initialiser | |
999 | button_rename: Renommer |
|
1001 | button_rename: Renommer | |
1000 | button_change_password: Changer de mot de passe |
|
1002 | button_change_password: Changer de mot de passe | |
1001 | button_copy: Copier |
|
1003 | button_copy: Copier | |
1002 | button_copy_and_follow: Copier et suivre |
|
1004 | button_copy_and_follow: Copier et suivre | |
1003 | button_annotate: Annoter |
|
1005 | button_annotate: Annoter | |
1004 | button_update: Mettre Γ jour |
|
1006 | button_update: Mettre Γ jour | |
1005 | button_configure: Configurer |
|
1007 | button_configure: Configurer | |
1006 | button_quote: Citer |
|
1008 | button_quote: Citer | |
1007 | button_duplicate: Dupliquer |
|
1009 | button_duplicate: Dupliquer | |
1008 | button_show: Afficher |
|
1010 | button_show: Afficher | |
1009 | button_hide: Cacher |
|
1011 | button_hide: Cacher | |
1010 | button_edit_section: Modifier cette section |
|
1012 | button_edit_section: Modifier cette section | |
1011 | button_export: Exporter |
|
1013 | button_export: Exporter | |
1012 | button_delete_my_account: Supprimer mon compte |
|
1014 | button_delete_my_account: Supprimer mon compte | |
1013 | button_close: Fermer |
|
1015 | button_close: Fermer | |
1014 | button_reopen: RΓ©ouvrir |
|
1016 | button_reopen: RΓ©ouvrir | |
1015 |
|
1017 | |||
1016 | status_active: actif |
|
1018 | status_active: actif | |
1017 | status_registered: enregistrΓ© |
|
1019 | status_registered: enregistrΓ© | |
1018 | status_locked: verrouillΓ© |
|
1020 | status_locked: verrouillΓ© | |
1019 |
|
1021 | |||
1020 | project_status_active: actif |
|
1022 | project_status_active: actif | |
1021 | project_status_closed: fermΓ© |
|
1023 | project_status_closed: fermΓ© | |
1022 | project_status_archived: archivΓ© |
|
1024 | project_status_archived: archivΓ© | |
1023 |
|
1025 | |||
1024 | version_status_open: ouvert |
|
1026 | version_status_open: ouvert | |
1025 | version_status_locked: verrouillΓ© |
|
1027 | version_status_locked: verrouillΓ© | |
1026 | version_status_closed: fermΓ© |
|
1028 | version_status_closed: fermΓ© | |
1027 |
|
1029 | |||
1028 | field_active: Actif |
|
1030 | field_active: Actif | |
1029 |
|
1031 | |||
1030 | text_select_mail_notifications: Actions pour lesquelles une notification par e-mail est envoyΓ©e |
|
1032 | text_select_mail_notifications: Actions pour lesquelles une notification par e-mail est envoyΓ©e | |
1031 | text_regexp_info: ex. ^[A-Z0-9]+$ |
|
1033 | text_regexp_info: ex. ^[A-Z0-9]+$ | |
1032 | text_min_max_length_info: 0 pour aucune restriction |
|
1034 | text_min_max_length_info: 0 pour aucune restriction | |
1033 | text_project_destroy_confirmation: Γtes-vous sΓ»r de vouloir supprimer ce projet et toutes ses donnΓ©es ? |
|
1035 | text_project_destroy_confirmation: Γtes-vous sΓ»r de vouloir supprimer ce projet et toutes ses donnΓ©es ? | |
1034 | text_subprojects_destroy_warning: "Ses sous-projets : %{value} seront Γ©galement supprimΓ©s." |
|
1036 | text_subprojects_destroy_warning: "Ses sous-projets : %{value} seront Γ©galement supprimΓ©s." | |
1035 | text_workflow_edit: SΓ©lectionner un tracker et un rΓ΄le pour Γ©diter le workflow |
|
1037 | text_workflow_edit: SΓ©lectionner un tracker et un rΓ΄le pour Γ©diter le workflow | |
1036 | text_are_you_sure: Γtes-vous sΓ»r ? |
|
1038 | text_are_you_sure: Γtes-vous sΓ»r ? | |
1037 | text_journal_changed: "%{label} changΓ© de %{old} Γ %{new}" |
|
1039 | text_journal_changed: "%{label} changΓ© de %{old} Γ %{new}" | |
1038 | text_journal_changed_no_detail: "%{label} mis Γ jour" |
|
1040 | text_journal_changed_no_detail: "%{label} mis Γ jour" | |
1039 | text_journal_set_to: "%{label} mis Γ %{value}" |
|
1041 | text_journal_set_to: "%{label} mis Γ %{value}" | |
1040 | text_journal_deleted: "%{label} %{old} supprimΓ©" |
|
1042 | text_journal_deleted: "%{label} %{old} supprimΓ©" | |
1041 | text_journal_added: "%{label} %{value} ajoutΓ©" |
|
1043 | text_journal_added: "%{label} %{value} ajoutΓ©" | |
1042 | text_tip_issue_begin_day: tΓ’che commenΓ§ant ce jour |
|
1044 | text_tip_issue_begin_day: tΓ’che commenΓ§ant ce jour | |
1043 | text_tip_issue_end_day: tΓ’che finissant ce jour |
|
1045 | text_tip_issue_end_day: tΓ’che finissant ce jour | |
1044 | text_tip_issue_begin_end_day: tΓ’che commenΓ§ant et finissant ce jour |
|
1046 | text_tip_issue_begin_end_day: tΓ’che commenΓ§ant et finissant ce jour | |
1045 | text_project_identifier_info: 'Seuls les lettres minuscules (a-z), chiffres, tirets et tirets bas sont autorisΓ©s, doit commencer par une minuscule.<br />Un fois sauvegardΓ©, l''identifiant ne pourra plus Γͺtre modifiΓ©.' |
|
1047 | text_project_identifier_info: 'Seuls les lettres minuscules (a-z), chiffres, tirets et tirets bas sont autorisΓ©s, doit commencer par une minuscule.<br />Un fois sauvegardΓ©, l''identifiant ne pourra plus Γͺtre modifiΓ©.' | |
1046 | text_caracters_maximum: "%{count} caractères maximum." |
|
1048 | text_caracters_maximum: "%{count} caractères maximum." | |
1047 | text_caracters_minimum: "%{count} caractères minimum." |
|
1049 | text_caracters_minimum: "%{count} caractères minimum." | |
1048 | text_length_between: "Longueur comprise entre %{min} et %{max} caractères." |
|
1050 | text_length_between: "Longueur comprise entre %{min} et %{max} caractères." | |
1049 | text_tracker_no_workflow: Aucun worflow n'est dΓ©fini pour ce tracker |
|
1051 | text_tracker_no_workflow: Aucun worflow n'est dΓ©fini pour ce tracker | |
1050 | text_unallowed_characters: Caractères non autorisés |
|
1052 | text_unallowed_characters: Caractères non autorisés | |
1051 | text_comma_separated: Plusieurs valeurs possibles (sΓ©parΓ©es par des virgules). |
|
1053 | text_comma_separated: Plusieurs valeurs possibles (sΓ©parΓ©es par des virgules). | |
1052 | text_line_separated: Plusieurs valeurs possibles (une valeur par ligne). |
|
1054 | text_line_separated: Plusieurs valeurs possibles (une valeur par ligne). | |
1053 | text_issues_ref_in_commit_messages: RΓ©fΓ©rencement et rΓ©solution des demandes dans les commentaires de commits |
|
1055 | text_issues_ref_in_commit_messages: RΓ©fΓ©rencement et rΓ©solution des demandes dans les commentaires de commits | |
1054 | text_issue_added: "La demande %{id} a Γ©tΓ© soumise par %{author}." |
|
1056 | text_issue_added: "La demande %{id} a Γ©tΓ© soumise par %{author}." | |
1055 | text_issue_updated: "La demande %{id} a Γ©tΓ© mise Γ jour par %{author}." |
|
1057 | text_issue_updated: "La demande %{id} a Γ©tΓ© mise Γ jour par %{author}." | |
1056 | text_wiki_destroy_confirmation: Etes-vous sΓ»r de vouloir supprimer ce wiki et tout son contenu ? |
|
1058 | text_wiki_destroy_confirmation: Etes-vous sΓ»r de vouloir supprimer ce wiki et tout son contenu ? | |
1057 | text_issue_category_destroy_question: "%{count} demandes sont affectΓ©es Γ cette catΓ©gorie. Que voulez-vous faire ?" |
|
1059 | text_issue_category_destroy_question: "%{count} demandes sont affectΓ©es Γ cette catΓ©gorie. Que voulez-vous faire ?" | |
1058 | text_issue_category_destroy_assignments: N'affecter les demandes Γ aucune autre catΓ©gorie |
|
1060 | text_issue_category_destroy_assignments: N'affecter les demandes Γ aucune autre catΓ©gorie | |
1059 | text_issue_category_reassign_to: RΓ©affecter les demandes Γ cette catΓ©gorie |
|
1061 | text_issue_category_reassign_to: RΓ©affecter les demandes Γ cette catΓ©gorie | |
1060 | 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)." |
|
1062 | 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)." | |
1061 | 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Γ©." |
|
1063 | 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Γ©." | |
1062 | text_load_default_configuration: Charger le paramΓ©trage par dΓ©faut |
|
1064 | text_load_default_configuration: Charger le paramΓ©trage par dΓ©faut | |
1063 | text_status_changed_by_changeset: "AppliquΓ© par commit %{value}." |
|
1065 | text_status_changed_by_changeset: "AppliquΓ© par commit %{value}." | |
1064 | text_time_logged_by_changeset: "AppliquΓ© par commit %{value}" |
|
1066 | text_time_logged_by_changeset: "AppliquΓ© par commit %{value}" | |
1065 | text_issues_destroy_confirmation: 'Γtes-vous sΓ»r de vouloir supprimer la ou les demandes(s) selectionnΓ©e(s) ?' |
|
1067 | text_issues_destroy_confirmation: 'Γtes-vous sΓ»r de vouloir supprimer la ou les demandes(s) selectionnΓ©e(s) ?' | |
1066 | text_issues_destroy_descendants_confirmation: "Cela entrainera Γ©galement la suppression de %{count} sous-tΓ’che(s)." |
|
1068 | text_issues_destroy_descendants_confirmation: "Cela entrainera Γ©galement la suppression de %{count} sous-tΓ’che(s)." | |
1067 | text_time_entries_destroy_confirmation: "Etes-vous sΓ»r de vouloir supprimer les temps passΓ©s sΓ©lectionnΓ©s ?" |
|
1069 | text_time_entries_destroy_confirmation: "Etes-vous sΓ»r de vouloir supprimer les temps passΓ©s sΓ©lectionnΓ©s ?" | |
1068 | text_select_project_modules: 'SΓ©lectionner les modules Γ activer pour ce projet :' |
|
1070 | text_select_project_modules: 'SΓ©lectionner les modules Γ activer pour ce projet :' | |
1069 | text_default_administrator_account_changed: Compte administrateur par dΓ©faut changΓ© |
|
1071 | text_default_administrator_account_changed: Compte administrateur par dΓ©faut changΓ© | |
1070 | text_file_repository_writable: RΓ©pertoire de stockage des fichiers accessible en Γ©criture |
|
1072 | text_file_repository_writable: RΓ©pertoire de stockage des fichiers accessible en Γ©criture | |
1071 | text_plugin_assets_writable: RΓ©pertoire public des plugins accessible en Γ©criture |
|
1073 | text_plugin_assets_writable: RΓ©pertoire public des plugins accessible en Γ©criture | |
1072 | text_rmagick_available: Bibliothèque RMagick présente (optionnelle) |
|
1074 | text_rmagick_available: Bibliothèque RMagick présente (optionnelle) | |
1073 | text_convert_available: Binaire convert de ImageMagick prΓ©sent (optionel) |
|
1075 | text_convert_available: Binaire convert de ImageMagick prΓ©sent (optionel) | |
1074 | text_destroy_time_entries_question: "%{hours} heures ont Γ©tΓ© enregistrΓ©es sur les demandes Γ supprimer. Que voulez-vous faire ?" |
|
1076 | text_destroy_time_entries_question: "%{hours} heures ont Γ©tΓ© enregistrΓ©es sur les demandes Γ supprimer. Que voulez-vous faire ?" | |
1075 | text_destroy_time_entries: Supprimer les heures |
|
1077 | text_destroy_time_entries: Supprimer les heures | |
1076 | text_assign_time_entries_to_project: Reporter les heures sur le projet |
|
1078 | text_assign_time_entries_to_project: Reporter les heures sur le projet | |
1077 | text_reassign_time_entries: 'Reporter les heures sur cette demande:' |
|
1079 | text_reassign_time_entries: 'Reporter les heures sur cette demande:' | |
1078 | text_user_wrote: "%{value} a Γ©crit :" |
|
1080 | text_user_wrote: "%{value} a Γ©crit :" | |
1079 | text_enumeration_destroy_question: "Cette valeur est affectΓ©e Γ %{count} objets." |
|
1081 | text_enumeration_destroy_question: "Cette valeur est affectΓ©e Γ %{count} objets." | |
1080 | text_enumeration_category_reassign_to: 'RΓ©affecter les objets Γ cette valeur:' |
|
1082 | text_enumeration_category_reassign_to: 'RΓ©affecter les objets Γ cette valeur:' | |
1081 | 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/configuration.yml et redΓ©marrez l'application pour les activer." |
|
1083 | 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/configuration.yml et redΓ©marrez l'application pour les activer." | |
1082 | 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." |
|
1084 | 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." | |
1083 | text_diff_truncated: '... Ce diffΓ©rentiel a Γ©tΓ© tronquΓ© car il excΓ¨de la taille maximale pouvant Γͺtre affichΓ©e.' |
|
1085 | text_diff_truncated: '... Ce diffΓ©rentiel a Γ©tΓ© tronquΓ© car il excΓ¨de la taille maximale pouvant Γͺtre affichΓ©e.' | |
1084 | text_custom_field_possible_values_info: 'Une ligne par valeur' |
|
1086 | text_custom_field_possible_values_info: 'Une ligne par valeur' | |
1085 | text_wiki_page_destroy_question: "Cette page possède %{descendants} sous-page(s) et descendante(s). Que voulez-vous faire ?" |
|
1087 | text_wiki_page_destroy_question: "Cette page possède %{descendants} sous-page(s) et descendante(s). Que voulez-vous faire ?" | |
1086 | text_wiki_page_nullify_children: "Conserver les sous-pages en tant que pages racines" |
|
1088 | text_wiki_page_nullify_children: "Conserver les sous-pages en tant que pages racines" | |
1087 | text_wiki_page_destroy_children: "Supprimer les sous-pages et toutes leurs descedantes" |
|
1089 | text_wiki_page_destroy_children: "Supprimer les sous-pages et toutes leurs descedantes" | |
1088 | text_wiki_page_reassign_children: "RΓ©affecter les sous-pages Γ cette page" |
|
1090 | text_wiki_page_reassign_children: "RΓ©affecter les sous-pages Γ cette page" | |
1089 | text_own_membership_delete_confirmation: "Vous allez supprimer tout ou partie de vos permissions sur ce projet et ne serez peut-Γͺtre plus autorisΓ© Γ modifier ce projet.\nEtes-vous sΓ»r de vouloir continuer ?" |
|
1091 | text_own_membership_delete_confirmation: "Vous allez supprimer tout ou partie de vos permissions sur ce projet et ne serez peut-Γͺtre plus autorisΓ© Γ modifier ce projet.\nEtes-vous sΓ»r de vouloir continuer ?" | |
1090 | text_zoom_in: Zoom avant |
|
1092 | text_zoom_in: Zoom avant | |
1091 | text_zoom_out: Zoom arrière |
|
1093 | text_zoom_out: Zoom arrière | |
1092 | text_warn_on_leaving_unsaved: "Cette page contient du texte non sauvegardΓ© qui sera perdu si vous quittez la page." |
|
1094 | text_warn_on_leaving_unsaved: "Cette page contient du texte non sauvegardΓ© qui sera perdu si vous quittez la page." | |
1093 | text_scm_path_encoding_note: "DΓ©faut : UTF-8" |
|
1095 | text_scm_path_encoding_note: "DΓ©faut : UTF-8" | |
1094 | text_subversion_repository_note: "Exemples (en fonction des protocoles supportΓ©s) : file:///, http://, https://, svn://, svn+[tunnelscheme]://" |
|
1096 | text_subversion_repository_note: "Exemples (en fonction des protocoles supportΓ©s) : file:///, http://, https://, svn://, svn+[tunnelscheme]://" | |
1095 | text_git_repository_note: "Chemin vers un dΓ©pΓ΄t vide et local (exemples : /gitrepo, c:\\gitrepo)" |
|
1097 | text_git_repository_note: "Chemin vers un dΓ©pΓ΄t vide et local (exemples : /gitrepo, c:\\gitrepo)" | |
1096 | text_mercurial_repository_note: "Chemin vers un dΓ©pΓ΄t local (exemples : /hgrepo, c:\\hgrepo)" |
|
1098 | text_mercurial_repository_note: "Chemin vers un dΓ©pΓ΄t local (exemples : /hgrepo, c:\\hgrepo)" | |
1097 | text_scm_command: Commande |
|
1099 | text_scm_command: Commande | |
1098 | text_scm_command_version: Version |
|
1100 | text_scm_command_version: Version | |
1099 | text_scm_config: Vous pouvez configurer les commandes des SCM dans config/configuration.yml. Redémarrer l'application après modification. |
|
1101 | text_scm_config: Vous pouvez configurer les commandes des SCM dans config/configuration.yml. Redémarrer l'application après modification. | |
1100 | text_scm_command_not_available: Ce SCM n'est pas disponible. Vérifier les paramètres dans la section administration. |
|
1102 | text_scm_command_not_available: Ce SCM n'est pas disponible. Vérifier les paramètres dans la section administration. | |
1101 | text_issue_conflict_resolution_overwrite: "Appliquer quand mΓͺme ma mise Γ jour (les notes prΓ©cΓ©dentes seront conservΓ©es mais des changements pourront Γͺtre Γ©crasΓ©s)" |
|
1103 | text_issue_conflict_resolution_overwrite: "Appliquer quand mΓͺme ma mise Γ jour (les notes prΓ©cΓ©dentes seront conservΓ©es mais des changements pourront Γͺtre Γ©crasΓ©s)" | |
1102 | text_issue_conflict_resolution_add_notes: "Ajouter mes notes et ignorer mes autres changements" |
|
1104 | text_issue_conflict_resolution_add_notes: "Ajouter mes notes et ignorer mes autres changements" | |
1103 | text_issue_conflict_resolution_cancel: "Annuler ma mise Γ jour et rΓ©afficher %{link}" |
|
1105 | text_issue_conflict_resolution_cancel: "Annuler ma mise Γ jour et rΓ©afficher %{link}" | |
1104 | text_account_destroy_confirmation: "Γtes-vous sΓ»r de vouloir continuer ?\nVotre compte sera dΓ©finitivement supprimΓ©, sans aucune possibilitΓ© de le rΓ©activer." |
|
1106 | text_account_destroy_confirmation: "Γtes-vous sΓ»r de vouloir continuer ?\nVotre compte sera dΓ©finitivement supprimΓ©, sans aucune possibilitΓ© de le rΓ©activer." | |
1105 | text_session_expiration_settings: "Attention : le changement de ces paramètres peut entrainer l'expiration des sessions utilisateurs en cours, y compris la vôtre." |
|
1107 | text_session_expiration_settings: "Attention : le changement de ces paramètres peut entrainer l'expiration des sessions utilisateurs en cours, y compris la vôtre." | |
1106 | text_project_closed: Ce projet est fermΓ© et accessible en lecture seule. |
|
1108 | text_project_closed: Ce projet est fermΓ© et accessible en lecture seule. | |
1107 | text_turning_multiple_off: "Si vous dΓ©sactivez les valeurs multiples, les valeurs multiples seront supprimΓ©es pour n'en conserver qu'une par objet." |
|
1109 | text_turning_multiple_off: "Si vous dΓ©sactivez les valeurs multiples, les valeurs multiples seront supprimΓ©es pour n'en conserver qu'une par objet." | |
1108 |
|
1110 | |||
1109 | default_role_manager: Manager |
|
1111 | default_role_manager: Manager | |
1110 | default_role_developer: DΓ©veloppeur |
|
1112 | default_role_developer: DΓ©veloppeur | |
1111 | default_role_reporter: Rapporteur |
|
1113 | default_role_reporter: Rapporteur | |
1112 | default_tracker_bug: Anomalie |
|
1114 | default_tracker_bug: Anomalie | |
1113 | default_tracker_feature: Evolution |
|
1115 | default_tracker_feature: Evolution | |
1114 | default_tracker_support: Assistance |
|
1116 | default_tracker_support: Assistance | |
1115 | default_issue_status_new: Nouveau |
|
1117 | default_issue_status_new: Nouveau | |
1116 | default_issue_status_in_progress: En cours |
|
1118 | default_issue_status_in_progress: En cours | |
1117 | default_issue_status_resolved: RΓ©solu |
|
1119 | default_issue_status_resolved: RΓ©solu | |
1118 | default_issue_status_feedback: Commentaire |
|
1120 | default_issue_status_feedback: Commentaire | |
1119 | default_issue_status_closed: FermΓ© |
|
1121 | default_issue_status_closed: FermΓ© | |
1120 | default_issue_status_rejected: RejetΓ© |
|
1122 | default_issue_status_rejected: RejetΓ© | |
1121 | default_doc_category_user: Documentation utilisateur |
|
1123 | default_doc_category_user: Documentation utilisateur | |
1122 | default_doc_category_tech: Documentation technique |
|
1124 | default_doc_category_tech: Documentation technique | |
1123 | default_priority_low: Bas |
|
1125 | default_priority_low: Bas | |
1124 | default_priority_normal: Normal |
|
1126 | default_priority_normal: Normal | |
1125 | default_priority_high: Haut |
|
1127 | default_priority_high: Haut | |
1126 | default_priority_urgent: Urgent |
|
1128 | default_priority_urgent: Urgent | |
1127 | default_priority_immediate: ImmΓ©diat |
|
1129 | default_priority_immediate: ImmΓ©diat | |
1128 | default_activity_design: Conception |
|
1130 | default_activity_design: Conception | |
1129 | default_activity_development: DΓ©veloppement |
|
1131 | default_activity_development: DΓ©veloppement | |
1130 |
|
1132 | |||
1131 | enumeration_issue_priorities: PrioritΓ©s des demandes |
|
1133 | enumeration_issue_priorities: PrioritΓ©s des demandes | |
1132 | enumeration_doc_categories: CatΓ©gories des documents |
|
1134 | enumeration_doc_categories: CatΓ©gories des documents | |
1133 | enumeration_activities: ActivitΓ©s (suivi du temps) |
|
1135 | enumeration_activities: ActivitΓ©s (suivi du temps) | |
1134 | enumeration_system_activity: Activité système |
|
1136 | enumeration_system_activity: Activité système | |
1135 | description_filter: Filtre |
|
1137 | description_filter: Filtre | |
1136 | description_search: Champ de recherche |
|
1138 | description_search: Champ de recherche | |
1137 | description_choose_project: Projets |
|
1139 | description_choose_project: Projets | |
1138 | description_project_scope: Périmètre de recherche |
|
1140 | description_project_scope: Périmètre de recherche | |
1139 | description_notes: Notes |
|
1141 | description_notes: Notes | |
1140 | description_message_content: Contenu du message |
|
1142 | description_message_content: Contenu du message | |
1141 | description_query_sort_criteria_attribute: Critère de tri |
|
1143 | description_query_sort_criteria_attribute: Critère de tri | |
1142 | description_query_sort_criteria_direction: Ordre de tri |
|
1144 | description_query_sort_criteria_direction: Ordre de tri | |
1143 | description_user_mail_notification: Option de notification |
|
1145 | description_user_mail_notification: Option de notification | |
1144 | description_available_columns: Colonnes disponibles |
|
1146 | description_available_columns: Colonnes disponibles | |
1145 | description_selected_columns: Colonnes sΓ©lectionnΓ©es |
|
1147 | description_selected_columns: Colonnes sΓ©lectionnΓ©es | |
1146 | description_all_columns: Toutes les colonnes |
|
1148 | description_all_columns: Toutes les colonnes | |
1147 | description_issue_category_reassign: Choisir une catΓ©gorie |
|
1149 | description_issue_category_reassign: Choisir une catΓ©gorie | |
1148 | description_wiki_subpages_reassign: Choisir une nouvelle page parent |
|
1150 | description_wiki_subpages_reassign: Choisir une nouvelle page parent | |
1149 | description_date_range_list: Choisir une pΓ©riode prΓ©dΓ©finie |
|
1151 | description_date_range_list: Choisir une pΓ©riode prΓ©dΓ©finie | |
1150 | description_date_range_interval: Choisir une pΓ©riode |
|
1152 | description_date_range_interval: Choisir une pΓ©riode | |
1151 | description_date_from: Date de dΓ©but |
|
1153 | description_date_from: Date de dΓ©but | |
1152 | description_date_to: Date de fin |
|
1154 | description_date_to: Date de fin | |
1153 | text_repository_identifier_info: 'Seuls les lettres minuscules (a-z), chiffres, tirets et tirets bas sont autorisΓ©s.<br />Un fois sauvegardΓ©, l''identifiant ne pourra plus Γͺtre modifiΓ©.' |
|
1155 | text_repository_identifier_info: 'Seuls les lettres minuscules (a-z), chiffres, tirets et tirets bas sont autorisΓ©s.<br />Un fois sauvegardΓ©, l''identifiant ne pourra plus Γͺtre modifiΓ©.' |
@@ -1,242 +1,246 | |||||
1 | # Redmine - project management software |
|
1 | # Redmine - project management software | |
2 | # Copyright (C) 2006-2015 Jean-Philippe Lang |
|
2 | # Copyright (C) 2006-2015 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 |
|
18 | |||
19 | # DO NOT MODIFY THIS FILE !!! |
|
19 | # DO NOT MODIFY THIS FILE !!! | |
20 | # Settings can be defined through the application in Admin -> Settings |
|
20 | # Settings can be defined through the application in Admin -> Settings | |
21 |
|
21 | |||
22 | app_title: |
|
22 | app_title: | |
23 | default: Redmine |
|
23 | default: Redmine | |
24 | app_subtitle: |
|
24 | app_subtitle: | |
25 | default: Project management |
|
25 | default: Project management | |
26 | welcome_text: |
|
26 | welcome_text: | |
27 | default: |
|
27 | default: | |
28 | login_required: |
|
28 | login_required: | |
29 | default: 0 |
|
29 | default: 0 | |
30 | self_registration: |
|
30 | self_registration: | |
31 | default: '2' |
|
31 | default: '2' | |
32 | lost_password: |
|
32 | lost_password: | |
33 | default: 1 |
|
33 | default: 1 | |
34 | unsubscribe: |
|
34 | unsubscribe: | |
35 | default: 1 |
|
35 | default: 1 | |
36 | password_min_length: |
|
36 | password_min_length: | |
37 | format: int |
|
37 | format: int | |
38 | default: 8 |
|
38 | default: 8 | |
|
39 | # Maximum password age in days | |||
|
40 | password_max_age: | |||
|
41 | format: int | |||
|
42 | default: 0 | |||
39 | # Maximum number of additional email addresses per user |
|
43 | # Maximum number of additional email addresses per user | |
40 | max_additional_emails: |
|
44 | max_additional_emails: | |
41 | format: int |
|
45 | format: int | |
42 | default: 5 |
|
46 | default: 5 | |
43 | # Maximum lifetime of user sessions in minutes |
|
47 | # Maximum lifetime of user sessions in minutes | |
44 | session_lifetime: |
|
48 | session_lifetime: | |
45 | format: int |
|
49 | format: int | |
46 | default: 0 |
|
50 | default: 0 | |
47 | # User session timeout in minutes |
|
51 | # User session timeout in minutes | |
48 | session_timeout: |
|
52 | session_timeout: | |
49 | format: int |
|
53 | format: int | |
50 | default: 0 |
|
54 | default: 0 | |
51 | attachment_max_size: |
|
55 | attachment_max_size: | |
52 | format: int |
|
56 | format: int | |
53 | default: 5120 |
|
57 | default: 5120 | |
54 | issues_export_limit: |
|
58 | issues_export_limit: | |
55 | format: int |
|
59 | format: int | |
56 | default: 500 |
|
60 | default: 500 | |
57 | activity_days_default: |
|
61 | activity_days_default: | |
58 | format: int |
|
62 | format: int | |
59 | default: 30 |
|
63 | default: 30 | |
60 | per_page_options: |
|
64 | per_page_options: | |
61 | default: '25,50,100' |
|
65 | default: '25,50,100' | |
62 | search_results_per_page: |
|
66 | search_results_per_page: | |
63 | default: 10 |
|
67 | default: 10 | |
64 | mail_from: |
|
68 | mail_from: | |
65 | default: redmine@example.net |
|
69 | default: redmine@example.net | |
66 | bcc_recipients: |
|
70 | bcc_recipients: | |
67 | default: 1 |
|
71 | default: 1 | |
68 | plain_text_mail: |
|
72 | plain_text_mail: | |
69 | default: 0 |
|
73 | default: 0 | |
70 | text_formatting: |
|
74 | text_formatting: | |
71 | default: textile |
|
75 | default: textile | |
72 | cache_formatted_text: |
|
76 | cache_formatted_text: | |
73 | default: 0 |
|
77 | default: 0 | |
74 | wiki_compression: |
|
78 | wiki_compression: | |
75 | default: "" |
|
79 | default: "" | |
76 | default_language: |
|
80 | default_language: | |
77 | default: en |
|
81 | default: en | |
78 | force_default_language_for_anonymous: |
|
82 | force_default_language_for_anonymous: | |
79 | default: 0 |
|
83 | default: 0 | |
80 | force_default_language_for_loggedin: |
|
84 | force_default_language_for_loggedin: | |
81 | default: 0 |
|
85 | default: 0 | |
82 | host_name: |
|
86 | host_name: | |
83 | default: localhost:3000 |
|
87 | default: localhost:3000 | |
84 | protocol: |
|
88 | protocol: | |
85 | default: http |
|
89 | default: http | |
86 | feeds_limit: |
|
90 | feeds_limit: | |
87 | format: int |
|
91 | format: int | |
88 | default: 15 |
|
92 | default: 15 | |
89 | gantt_items_limit: |
|
93 | gantt_items_limit: | |
90 | format: int |
|
94 | format: int | |
91 | default: 500 |
|
95 | default: 500 | |
92 | # Maximum size of files that can be displayed |
|
96 | # Maximum size of files that can be displayed | |
93 | # inline through the file viewer (in KB) |
|
97 | # inline through the file viewer (in KB) | |
94 | file_max_size_displayed: |
|
98 | file_max_size_displayed: | |
95 | format: int |
|
99 | format: int | |
96 | default: 512 |
|
100 | default: 512 | |
97 | diff_max_lines_displayed: |
|
101 | diff_max_lines_displayed: | |
98 | format: int |
|
102 | format: int | |
99 | default: 1500 |
|
103 | default: 1500 | |
100 | enabled_scm: |
|
104 | enabled_scm: | |
101 | serialized: true |
|
105 | serialized: true | |
102 | default: |
|
106 | default: | |
103 | - Subversion |
|
107 | - Subversion | |
104 | - Darcs |
|
108 | - Darcs | |
105 | - Mercurial |
|
109 | - Mercurial | |
106 | - Cvs |
|
110 | - Cvs | |
107 | - Bazaar |
|
111 | - Bazaar | |
108 | - Git |
|
112 | - Git | |
109 | autofetch_changesets: |
|
113 | autofetch_changesets: | |
110 | default: 1 |
|
114 | default: 1 | |
111 | sys_api_enabled: |
|
115 | sys_api_enabled: | |
112 | default: 0 |
|
116 | default: 0 | |
113 | sys_api_key: |
|
117 | sys_api_key: | |
114 | default: '' |
|
118 | default: '' | |
115 | commit_cross_project_ref: |
|
119 | commit_cross_project_ref: | |
116 | default: 0 |
|
120 | default: 0 | |
117 | commit_ref_keywords: |
|
121 | commit_ref_keywords: | |
118 | default: 'refs,references,IssueID' |
|
122 | default: 'refs,references,IssueID' | |
119 | commit_update_keywords: |
|
123 | commit_update_keywords: | |
120 | serialized: true |
|
124 | serialized: true | |
121 | default: [] |
|
125 | default: [] | |
122 | commit_logtime_enabled: |
|
126 | commit_logtime_enabled: | |
123 | default: 0 |
|
127 | default: 0 | |
124 | commit_logtime_activity_id: |
|
128 | commit_logtime_activity_id: | |
125 | format: int |
|
129 | format: int | |
126 | default: 0 |
|
130 | default: 0 | |
127 | # autologin duration in days |
|
131 | # autologin duration in days | |
128 | # 0 means autologin is disabled |
|
132 | # 0 means autologin is disabled | |
129 | autologin: |
|
133 | autologin: | |
130 | format: int |
|
134 | format: int | |
131 | default: 0 |
|
135 | default: 0 | |
132 | # date format |
|
136 | # date format | |
133 | date_format: |
|
137 | date_format: | |
134 | default: '' |
|
138 | default: '' | |
135 | time_format: |
|
139 | time_format: | |
136 | default: '' |
|
140 | default: '' | |
137 | user_format: |
|
141 | user_format: | |
138 | default: :firstname_lastname |
|
142 | default: :firstname_lastname | |
139 | format: symbol |
|
143 | format: symbol | |
140 | cross_project_issue_relations: |
|
144 | cross_project_issue_relations: | |
141 | default: 0 |
|
145 | default: 0 | |
142 | # Enables subtasks to be in other projects |
|
146 | # Enables subtasks to be in other projects | |
143 | cross_project_subtasks: |
|
147 | cross_project_subtasks: | |
144 | default: 'tree' |
|
148 | default: 'tree' | |
145 | link_copied_issue: |
|
149 | link_copied_issue: | |
146 | default: 'ask' |
|
150 | default: 'ask' | |
147 | issue_group_assignment: |
|
151 | issue_group_assignment: | |
148 | default: 0 |
|
152 | default: 0 | |
149 | default_issue_start_date_to_creation_date: |
|
153 | default_issue_start_date_to_creation_date: | |
150 | default: 1 |
|
154 | default: 1 | |
151 | notified_events: |
|
155 | notified_events: | |
152 | serialized: true |
|
156 | serialized: true | |
153 | default: |
|
157 | default: | |
154 | - issue_added |
|
158 | - issue_added | |
155 | - issue_updated |
|
159 | - issue_updated | |
156 | mail_handler_body_delimiters: |
|
160 | mail_handler_body_delimiters: | |
157 | default: '' |
|
161 | default: '' | |
158 | mail_handler_excluded_filenames: |
|
162 | mail_handler_excluded_filenames: | |
159 | default: '' |
|
163 | default: '' | |
160 | mail_handler_api_enabled: |
|
164 | mail_handler_api_enabled: | |
161 | default: 0 |
|
165 | default: 0 | |
162 | mail_handler_api_key: |
|
166 | mail_handler_api_key: | |
163 | default: |
|
167 | default: | |
164 | issue_list_default_columns: |
|
168 | issue_list_default_columns: | |
165 | serialized: true |
|
169 | serialized: true | |
166 | default: |
|
170 | default: | |
167 | - tracker |
|
171 | - tracker | |
168 | - status |
|
172 | - status | |
169 | - priority |
|
173 | - priority | |
170 | - subject |
|
174 | - subject | |
171 | - assigned_to |
|
175 | - assigned_to | |
172 | - updated_on |
|
176 | - updated_on | |
173 | display_subprojects_issues: |
|
177 | display_subprojects_issues: | |
174 | default: 1 |
|
178 | default: 1 | |
175 | issue_done_ratio: |
|
179 | issue_done_ratio: | |
176 | default: 'issue_field' |
|
180 | default: 'issue_field' | |
177 | default_projects_public: |
|
181 | default_projects_public: | |
178 | default: 1 |
|
182 | default: 1 | |
179 | default_projects_modules: |
|
183 | default_projects_modules: | |
180 | serialized: true |
|
184 | serialized: true | |
181 | default: |
|
185 | default: | |
182 | - issue_tracking |
|
186 | - issue_tracking | |
183 | - time_tracking |
|
187 | - time_tracking | |
184 | - news |
|
188 | - news | |
185 | - documents |
|
189 | - documents | |
186 | - files |
|
190 | - files | |
187 | - wiki |
|
191 | - wiki | |
188 | - repository |
|
192 | - repository | |
189 | - boards |
|
193 | - boards | |
190 | - calendar |
|
194 | - calendar | |
191 | - gantt |
|
195 | - gantt | |
192 | default_projects_tracker_ids: |
|
196 | default_projects_tracker_ids: | |
193 | serialized: true |
|
197 | serialized: true | |
194 | default: |
|
198 | default: | |
195 | # Role given to a non-admin user who creates a project |
|
199 | # Role given to a non-admin user who creates a project | |
196 | new_project_user_role_id: |
|
200 | new_project_user_role_id: | |
197 | format: int |
|
201 | format: int | |
198 | default: '' |
|
202 | default: '' | |
199 | sequential_project_identifiers: |
|
203 | sequential_project_identifiers: | |
200 | default: 0 |
|
204 | default: 0 | |
201 | # encodings used to convert repository files content to UTF-8 |
|
205 | # encodings used to convert repository files content to UTF-8 | |
202 | # multiple values accepted, comma separated |
|
206 | # multiple values accepted, comma separated | |
203 | repositories_encodings: |
|
207 | repositories_encodings: | |
204 | default: '' |
|
208 | default: '' | |
205 | # encoding used to convert commit logs to UTF-8 |
|
209 | # encoding used to convert commit logs to UTF-8 | |
206 | commit_logs_encoding: |
|
210 | commit_logs_encoding: | |
207 | default: 'UTF-8' |
|
211 | default: 'UTF-8' | |
208 | repository_log_display_limit: |
|
212 | repository_log_display_limit: | |
209 | format: int |
|
213 | format: int | |
210 | default: 100 |
|
214 | default: 100 | |
211 | ui_theme: |
|
215 | ui_theme: | |
212 | default: '' |
|
216 | default: '' | |
213 | emails_footer: |
|
217 | emails_footer: | |
214 | default: |- |
|
218 | default: |- | |
215 | You have received this notification because you have either subscribed to it, or are involved in it. |
|
219 | You have received this notification because you have either subscribed to it, or are involved in it. | |
216 | To change your notification preferences, please click here: http://hostname/my/account |
|
220 | To change your notification preferences, please click here: http://hostname/my/account | |
217 | gravatar_enabled: |
|
221 | gravatar_enabled: | |
218 | default: 0 |
|
222 | default: 0 | |
219 | openid: |
|
223 | openid: | |
220 | default: 0 |
|
224 | default: 0 | |
221 | gravatar_default: |
|
225 | gravatar_default: | |
222 | default: '' |
|
226 | default: '' | |
223 | start_of_week: |
|
227 | start_of_week: | |
224 | default: '' |
|
228 | default: '' | |
225 | rest_api_enabled: |
|
229 | rest_api_enabled: | |
226 | default: 0 |
|
230 | default: 0 | |
227 | jsonp_enabled: |
|
231 | jsonp_enabled: | |
228 | default: 0 |
|
232 | default: 0 | |
229 | default_notification_option: |
|
233 | default_notification_option: | |
230 | default: 'only_my_events' |
|
234 | default: 'only_my_events' | |
231 | emails_header: |
|
235 | emails_header: | |
232 | default: '' |
|
236 | default: '' | |
233 | thumbnails_enabled: |
|
237 | thumbnails_enabled: | |
234 | default: 0 |
|
238 | default: 0 | |
235 | thumbnails_size: |
|
239 | thumbnails_size: | |
236 | format: int |
|
240 | format: int | |
237 | default: 100 |
|
241 | default: 100 | |
238 | non_working_week_days: |
|
242 | non_working_week_days: | |
239 | serialized: true |
|
243 | serialized: true | |
240 | default: |
|
244 | default: | |
241 | - '6' |
|
245 | - '6' | |
242 | - '7' |
|
246 | - '7' |
@@ -1,291 +1,325 | |||||
1 | # Redmine - project management software |
|
1 | # Redmine - project management software | |
2 | # Copyright (C) 2006-2015 Jean-Philippe Lang |
|
2 | # Copyright (C) 2006-2015 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.expand_path('../../test_helper', __FILE__) |
|
18 | require File.expand_path('../../test_helper', __FILE__) | |
19 |
|
19 | |||
20 | class AccountTest < Redmine::IntegrationTest |
|
20 | class AccountTest < Redmine::IntegrationTest | |
21 | fixtures :users, :email_addresses, :roles |
|
21 | fixtures :users, :email_addresses, :roles | |
22 |
|
22 | |||
23 | def test_login |
|
23 | def test_login | |
24 | get "/my/page" |
|
24 | get "/my/page" | |
25 | assert_redirected_to "/login?back_url=http%3A%2F%2Fwww.example.com%2Fmy%2Fpage" |
|
25 | assert_redirected_to "/login?back_url=http%3A%2F%2Fwww.example.com%2Fmy%2Fpage" | |
26 | log_user('jsmith', 'jsmith') |
|
26 | log_user('jsmith', 'jsmith') | |
27 |
|
27 | |||
28 | get "/my/account" |
|
28 | get "/my/account" | |
29 | assert_response :success |
|
29 | assert_response :success | |
30 | assert_template "my/account" |
|
30 | assert_template "my/account" | |
31 | end |
|
31 | end | |
32 |
|
32 | |||
33 | def test_autologin |
|
33 | def test_autologin | |
34 | user = User.find(1) |
|
34 | user = User.find(1) | |
35 | Setting.autologin = "7" |
|
35 | Setting.autologin = "7" | |
36 | Token.delete_all |
|
36 | Token.delete_all | |
37 |
|
37 | |||
38 | # User logs in with 'autologin' checked |
|
38 | # User logs in with 'autologin' checked | |
39 | post '/login', :username => user.login, :password => 'admin', :autologin => 1 |
|
39 | post '/login', :username => user.login, :password => 'admin', :autologin => 1 | |
40 | assert_redirected_to '/my/page' |
|
40 | assert_redirected_to '/my/page' | |
41 | token = Token.first |
|
41 | token = Token.first | |
42 | assert_not_nil token |
|
42 | assert_not_nil token | |
43 | assert_equal user, token.user |
|
43 | assert_equal user, token.user | |
44 | assert_equal 'autologin', token.action |
|
44 | assert_equal 'autologin', token.action | |
45 | assert_equal user.id, session[:user_id] |
|
45 | assert_equal user.id, session[:user_id] | |
46 | assert_equal token.value, cookies['autologin'] |
|
46 | assert_equal token.value, cookies['autologin'] | |
47 |
|
47 | |||
48 | # Session is cleared |
|
48 | # Session is cleared | |
49 | reset! |
|
49 | reset! | |
50 | User.current = nil |
|
50 | User.current = nil | |
51 | # Clears user's last login timestamp |
|
51 | # Clears user's last login timestamp | |
52 | user.update_attribute :last_login_on, nil |
|
52 | user.update_attribute :last_login_on, nil | |
53 | assert_nil user.reload.last_login_on |
|
53 | assert_nil user.reload.last_login_on | |
54 |
|
54 | |||
55 | # User comes back with user's autologin cookie |
|
55 | # User comes back with user's autologin cookie | |
56 | cookies[:autologin] = token.value |
|
56 | cookies[:autologin] = token.value | |
57 | get '/my/page' |
|
57 | get '/my/page' | |
58 | assert_response :success |
|
58 | assert_response :success | |
59 | assert_template 'my/page' |
|
59 | assert_template 'my/page' | |
60 | assert_equal user.id, session[:user_id] |
|
60 | assert_equal user.id, session[:user_id] | |
61 | assert_not_nil user.reload.last_login_on |
|
61 | assert_not_nil user.reload.last_login_on | |
62 | end |
|
62 | end | |
63 |
|
63 | |||
64 | def test_autologin_should_use_autologin_cookie_name |
|
64 | def test_autologin_should_use_autologin_cookie_name | |
65 | Token.delete_all |
|
65 | Token.delete_all | |
66 | Redmine::Configuration.stubs(:[]).with('autologin_cookie_name').returns('custom_autologin') |
|
66 | Redmine::Configuration.stubs(:[]).with('autologin_cookie_name').returns('custom_autologin') | |
67 | Redmine::Configuration.stubs(:[]).with('autologin_cookie_path').returns('/') |
|
67 | Redmine::Configuration.stubs(:[]).with('autologin_cookie_path').returns('/') | |
68 | Redmine::Configuration.stubs(:[]).with('autologin_cookie_secure').returns(false) |
|
68 | Redmine::Configuration.stubs(:[]).with('autologin_cookie_secure').returns(false) | |
69 |
|
69 | |||
70 | with_settings :autologin => '7' do |
|
70 | with_settings :autologin => '7' do | |
71 | assert_difference 'Token.count' do |
|
71 | assert_difference 'Token.count' do | |
72 | post '/login', :username => 'admin', :password => 'admin', :autologin => 1 |
|
72 | post '/login', :username => 'admin', :password => 'admin', :autologin => 1 | |
73 | end |
|
73 | end | |
74 | assert_response 302 |
|
74 | assert_response 302 | |
75 | assert cookies['custom_autologin'].present? |
|
75 | assert cookies['custom_autologin'].present? | |
76 | token = cookies['custom_autologin'] |
|
76 | token = cookies['custom_autologin'] | |
77 |
|
77 | |||
78 | # Session is cleared |
|
78 | # Session is cleared | |
79 | reset! |
|
79 | reset! | |
80 | cookies['custom_autologin'] = token |
|
80 | cookies['custom_autologin'] = token | |
81 | get '/my/page' |
|
81 | get '/my/page' | |
82 | assert_response :success |
|
82 | assert_response :success | |
83 |
|
83 | |||
84 | assert_difference 'Token.count', -1 do |
|
84 | assert_difference 'Token.count', -1 do | |
85 | post '/logout' |
|
85 | post '/logout' | |
86 | end |
|
86 | end | |
87 | assert cookies['custom_autologin'].blank? |
|
87 | assert cookies['custom_autologin'].blank? | |
88 | end |
|
88 | end | |
89 | end |
|
89 | end | |
90 |
|
90 | |||
91 | def test_lost_password |
|
91 | def test_lost_password | |
92 | Token.delete_all |
|
92 | Token.delete_all | |
93 |
|
93 | |||
94 | get "/account/lost_password" |
|
94 | get "/account/lost_password" | |
95 | assert_response :success |
|
95 | assert_response :success | |
96 | assert_template "account/lost_password" |
|
96 | assert_template "account/lost_password" | |
97 | assert_select 'input[name=mail]' |
|
97 | assert_select 'input[name=mail]' | |
98 |
|
98 | |||
99 | post "/account/lost_password", :mail => 'jSmith@somenet.foo' |
|
99 | post "/account/lost_password", :mail => 'jSmith@somenet.foo' | |
100 | assert_redirected_to "/login" |
|
100 | assert_redirected_to "/login" | |
101 |
|
101 | |||
102 | token = Token.first |
|
102 | token = Token.first | |
103 | assert_equal 'recovery', token.action |
|
103 | assert_equal 'recovery', token.action | |
104 | assert_equal 'jsmith@somenet.foo', token.user.mail |
|
104 | assert_equal 'jsmith@somenet.foo', token.user.mail | |
105 | assert !token.expired? |
|
105 | assert !token.expired? | |
106 |
|
106 | |||
107 | get "/account/lost_password", :token => token.value |
|
107 | get "/account/lost_password", :token => token.value | |
108 | assert_response :success |
|
108 | assert_response :success | |
109 | assert_template "account/password_recovery" |
|
109 | assert_template "account/password_recovery" | |
110 | assert_select 'input[type=hidden][name=token][value=?]', token.value |
|
110 | assert_select 'input[type=hidden][name=token][value=?]', token.value | |
111 | assert_select 'input[name=new_password]' |
|
111 | assert_select 'input[name=new_password]' | |
112 | assert_select 'input[name=new_password_confirmation]' |
|
112 | assert_select 'input[name=new_password_confirmation]' | |
113 |
|
113 | |||
114 | post "/account/lost_password", |
|
114 | post "/account/lost_password", | |
115 | :token => token.value, :new_password => 'newpass123', |
|
115 | :token => token.value, :new_password => 'newpass123', | |
116 | :new_password_confirmation => 'newpass123' |
|
116 | :new_password_confirmation => 'newpass123' | |
117 | assert_redirected_to "/login" |
|
117 | assert_redirected_to "/login" | |
118 | assert_equal 'Password was successfully updated.', flash[:notice] |
|
118 | assert_equal 'Password was successfully updated.', flash[:notice] | |
119 |
|
119 | |||
120 | log_user('jsmith', 'newpass123') |
|
120 | log_user('jsmith', 'newpass123') | |
121 | assert_equal 0, Token.count |
|
121 | assert_equal 0, Token.count | |
122 | end |
|
122 | end | |
123 |
|
123 | |||
124 | def test_user_with_must_change_passwd_should_be_forced_to_change_its_password |
|
124 | def test_user_with_must_change_passwd_should_be_forced_to_change_its_password | |
125 | User.find_by_login('jsmith').update_attribute :must_change_passwd, true |
|
125 | User.find_by_login('jsmith').update_attribute :must_change_passwd, true | |
126 |
|
126 | |||
127 | post '/login', :username => 'jsmith', :password => 'jsmith' |
|
127 | post '/login', :username => 'jsmith', :password => 'jsmith' | |
128 | assert_redirected_to '/my/page' |
|
128 | assert_redirected_to '/my/page' | |
129 | follow_redirect! |
|
129 | follow_redirect! | |
130 | assert_redirected_to '/my/password' |
|
130 | assert_redirected_to '/my/password' | |
131 |
|
131 | |||
132 | get '/issues' |
|
132 | get '/issues' | |
133 | assert_redirected_to '/my/password' |
|
133 | assert_redirected_to '/my/password' | |
134 | end |
|
134 | end | |
135 |
|
135 | |||
136 | def test_user_with_must_change_passwd_should_be_able_to_change_its_password |
|
136 | def test_user_with_must_change_passwd_should_be_able_to_change_its_password | |
137 | User.find_by_login('jsmith').update_attribute :must_change_passwd, true |
|
137 | User.find_by_login('jsmith').update_attribute :must_change_passwd, true | |
138 |
|
138 | |||
139 | post '/login', :username => 'jsmith', :password => 'jsmith' |
|
139 | post '/login', :username => 'jsmith', :password => 'jsmith' | |
140 | assert_redirected_to '/my/page' |
|
140 | assert_redirected_to '/my/page' | |
141 | follow_redirect! |
|
141 | follow_redirect! | |
142 | assert_redirected_to '/my/password' |
|
142 | assert_redirected_to '/my/password' | |
143 | follow_redirect! |
|
143 | follow_redirect! | |
144 | assert_response :success |
|
144 | assert_response :success | |
145 | post '/my/password', :password => 'jsmith', :new_password => 'newpassword', :new_password_confirmation => 'newpassword' |
|
145 | post '/my/password', :password => 'jsmith', :new_password => 'newpassword', :new_password_confirmation => 'newpassword' | |
146 | assert_redirected_to '/my/account' |
|
146 | assert_redirected_to '/my/account' | |
147 | follow_redirect! |
|
147 | follow_redirect! | |
148 | assert_response :success |
|
148 | assert_response :success | |
149 |
|
149 | |||
150 | assert_equal false, User.find_by_login('jsmith').must_change_passwd? |
|
150 | assert_equal false, User.find_by_login('jsmith').must_change_passwd? | |
151 | end |
|
151 | end | |
152 |
|
152 | |||
|
153 | def test_user_with_expired_password_should_be_forced_to_change_its_password | |||
|
154 | User.find_by_login('jsmith').update_attribute :passwd_changed_on, 14.days.ago | |||
|
155 | ||||
|
156 | with_settings :password_max_age => 7 do | |||
|
157 | post '/login', :username => 'jsmith', :password => 'jsmith' | |||
|
158 | assert_redirected_to '/my/page' | |||
|
159 | follow_redirect! | |||
|
160 | assert_redirected_to '/my/password' | |||
|
161 | ||||
|
162 | get '/issues' | |||
|
163 | assert_redirected_to '/my/password' | |||
|
164 | end | |||
|
165 | end | |||
|
166 | ||||
|
167 | def test_user_with_expired_password_should_be_able_to_change_its_password | |||
|
168 | User.find_by_login('jsmith').update_attribute :passwd_changed_on, 14.days.ago | |||
|
169 | ||||
|
170 | with_settings :password_max_age => 7 do | |||
|
171 | post '/login', :username => 'jsmith', :password => 'jsmith' | |||
|
172 | assert_redirected_to '/my/page' | |||
|
173 | follow_redirect! | |||
|
174 | assert_redirected_to '/my/password' | |||
|
175 | follow_redirect! | |||
|
176 | assert_response :success | |||
|
177 | post '/my/password', :password => 'jsmith', :new_password => 'newpassword', :new_password_confirmation => 'newpassword' | |||
|
178 | assert_redirected_to '/my/account' | |||
|
179 | follow_redirect! | |||
|
180 | assert_response :success | |||
|
181 | ||||
|
182 | assert_equal false, User.find_by_login('jsmith').must_change_passwd? | |||
|
183 | end | |||
|
184 | ||||
|
185 | end | |||
|
186 | ||||
153 | def test_register_with_automatic_activation |
|
187 | def test_register_with_automatic_activation | |
154 | Setting.self_registration = '3' |
|
188 | Setting.self_registration = '3' | |
155 |
|
189 | |||
156 | get '/account/register' |
|
190 | get '/account/register' | |
157 | assert_response :success |
|
191 | assert_response :success | |
158 | assert_template 'account/register' |
|
192 | assert_template 'account/register' | |
159 |
|
193 | |||
160 | post '/account/register', |
|
194 | post '/account/register', | |
161 | :user => {:login => "newuser", :language => "en", |
|
195 | :user => {:login => "newuser", :language => "en", | |
162 | :firstname => "New", :lastname => "User", :mail => "newuser@foo.bar", |
|
196 | :firstname => "New", :lastname => "User", :mail => "newuser@foo.bar", | |
163 | :password => "newpass123", :password_confirmation => "newpass123"} |
|
197 | :password => "newpass123", :password_confirmation => "newpass123"} | |
164 | assert_redirected_to '/my/account' |
|
198 | assert_redirected_to '/my/account' | |
165 | follow_redirect! |
|
199 | follow_redirect! | |
166 | assert_response :success |
|
200 | assert_response :success | |
167 | assert_template 'my/account' |
|
201 | assert_template 'my/account' | |
168 |
|
202 | |||
169 | user = User.find_by_login('newuser') |
|
203 | user = User.find_by_login('newuser') | |
170 | assert_not_nil user |
|
204 | assert_not_nil user | |
171 | assert user.active? |
|
205 | assert user.active? | |
172 | assert_not_nil user.last_login_on |
|
206 | assert_not_nil user.last_login_on | |
173 | end |
|
207 | end | |
174 |
|
208 | |||
175 | def test_register_with_manual_activation |
|
209 | def test_register_with_manual_activation | |
176 | Setting.self_registration = '2' |
|
210 | Setting.self_registration = '2' | |
177 |
|
211 | |||
178 | post '/account/register', |
|
212 | post '/account/register', | |
179 | :user => {:login => "newuser", :language => "en", |
|
213 | :user => {:login => "newuser", :language => "en", | |
180 | :firstname => "New", :lastname => "User", :mail => "newuser@foo.bar", |
|
214 | :firstname => "New", :lastname => "User", :mail => "newuser@foo.bar", | |
181 | :password => "newpass123", :password_confirmation => "newpass123"} |
|
215 | :password => "newpass123", :password_confirmation => "newpass123"} | |
182 | assert_redirected_to '/login' |
|
216 | assert_redirected_to '/login' | |
183 | assert !User.find_by_login('newuser').active? |
|
217 | assert !User.find_by_login('newuser').active? | |
184 | end |
|
218 | end | |
185 |
|
219 | |||
186 | def test_register_with_email_activation |
|
220 | def test_register_with_email_activation | |
187 | Setting.self_registration = '1' |
|
221 | Setting.self_registration = '1' | |
188 | Token.delete_all |
|
222 | Token.delete_all | |
189 |
|
223 | |||
190 | post '/account/register', |
|
224 | post '/account/register', | |
191 | :user => {:login => "newuser", :language => "en", |
|
225 | :user => {:login => "newuser", :language => "en", | |
192 | :firstname => "New", :lastname => "User", :mail => "newuser@foo.bar", |
|
226 | :firstname => "New", :lastname => "User", :mail => "newuser@foo.bar", | |
193 | :password => "newpass123", :password_confirmation => "newpass123"} |
|
227 | :password => "newpass123", :password_confirmation => "newpass123"} | |
194 | assert_redirected_to '/login' |
|
228 | assert_redirected_to '/login' | |
195 | assert !User.find_by_login('newuser').active? |
|
229 | assert !User.find_by_login('newuser').active? | |
196 |
|
230 | |||
197 | token = Token.first |
|
231 | token = Token.first | |
198 | assert_equal 'register', token.action |
|
232 | assert_equal 'register', token.action | |
199 | assert_equal 'newuser@foo.bar', token.user.mail |
|
233 | assert_equal 'newuser@foo.bar', token.user.mail | |
200 | assert !token.expired? |
|
234 | assert !token.expired? | |
201 |
|
235 | |||
202 | get '/account/activate', :token => token.value |
|
236 | get '/account/activate', :token => token.value | |
203 | assert_redirected_to '/login' |
|
237 | assert_redirected_to '/login' | |
204 | log_user('newuser', 'newpass123') |
|
238 | log_user('newuser', 'newpass123') | |
205 | end |
|
239 | end | |
206 |
|
240 | |||
207 | def test_onthefly_registration |
|
241 | def test_onthefly_registration | |
208 | # disable registration |
|
242 | # disable registration | |
209 | Setting.self_registration = '0' |
|
243 | Setting.self_registration = '0' | |
210 | AuthSource.expects(:authenticate).returns( |
|
244 | AuthSource.expects(:authenticate).returns( | |
211 | {:login => 'foo', :firstname => 'Foo', :lastname => 'Smith', |
|
245 | {:login => 'foo', :firstname => 'Foo', :lastname => 'Smith', | |
212 | :mail => 'foo@bar.com', :auth_source_id => 66}) |
|
246 | :mail => 'foo@bar.com', :auth_source_id => 66}) | |
213 |
|
247 | |||
214 | post '/login', :username => 'foo', :password => 'bar' |
|
248 | post '/login', :username => 'foo', :password => 'bar' | |
215 | assert_redirected_to '/my/page' |
|
249 | assert_redirected_to '/my/page' | |
216 |
|
250 | |||
217 | user = User.find_by_login('foo') |
|
251 | user = User.find_by_login('foo') | |
218 | assert user.is_a?(User) |
|
252 | assert user.is_a?(User) | |
219 | assert_equal 66, user.auth_source_id |
|
253 | assert_equal 66, user.auth_source_id | |
220 | assert user.hashed_password.blank? |
|
254 | assert user.hashed_password.blank? | |
221 | end |
|
255 | end | |
222 |
|
256 | |||
223 | def test_onthefly_registration_with_invalid_attributes |
|
257 | def test_onthefly_registration_with_invalid_attributes | |
224 | # disable registration |
|
258 | # disable registration | |
225 | Setting.self_registration = '0' |
|
259 | Setting.self_registration = '0' | |
226 | AuthSource.expects(:authenticate).returns( |
|
260 | AuthSource.expects(:authenticate).returns( | |
227 | {:login => 'foo', :lastname => 'Smith', :auth_source_id => 66}) |
|
261 | {:login => 'foo', :lastname => 'Smith', :auth_source_id => 66}) | |
228 |
|
262 | |||
229 | post '/login', :username => 'foo', :password => 'bar' |
|
263 | post '/login', :username => 'foo', :password => 'bar' | |
230 | assert_response :success |
|
264 | assert_response :success | |
231 | assert_template 'account/register' |
|
265 | assert_template 'account/register' | |
232 | assert_select 'input[name=?][value=""]', 'user[firstname]' |
|
266 | assert_select 'input[name=?][value=""]', 'user[firstname]' | |
233 | assert_select 'input[name=?][value=Smith]', 'user[lastname]' |
|
267 | assert_select 'input[name=?][value=Smith]', 'user[lastname]' | |
234 | assert_select 'input[name=?]', 'user[login]', 0 |
|
268 | assert_select 'input[name=?]', 'user[login]', 0 | |
235 | assert_select 'input[name=?]', 'user[password]', 0 |
|
269 | assert_select 'input[name=?]', 'user[password]', 0 | |
236 |
|
270 | |||
237 | post '/account/register', |
|
271 | post '/account/register', | |
238 | :user => {:firstname => 'Foo', :lastname => 'Smith', :mail => 'foo@bar.com'} |
|
272 | :user => {:firstname => 'Foo', :lastname => 'Smith', :mail => 'foo@bar.com'} | |
239 | assert_redirected_to '/my/account' |
|
273 | assert_redirected_to '/my/account' | |
240 |
|
274 | |||
241 | user = User.find_by_login('foo') |
|
275 | user = User.find_by_login('foo') | |
242 | assert user.is_a?(User) |
|
276 | assert user.is_a?(User) | |
243 | assert_equal 66, user.auth_source_id |
|
277 | assert_equal 66, user.auth_source_id | |
244 | assert user.hashed_password.blank? |
|
278 | assert user.hashed_password.blank? | |
245 | end |
|
279 | end | |
246 |
|
280 | |||
247 | def test_registered_user_should_be_able_to_get_a_new_activation_email |
|
281 | def test_registered_user_should_be_able_to_get_a_new_activation_email | |
248 | Token.delete_all |
|
282 | Token.delete_all | |
249 |
|
283 | |||
250 | with_settings :self_registration => '1', :default_language => 'en' do |
|
284 | with_settings :self_registration => '1', :default_language => 'en' do | |
251 | # register a new account |
|
285 | # register a new account | |
252 | assert_difference 'User.count' do |
|
286 | assert_difference 'User.count' do | |
253 | assert_difference 'Token.count' do |
|
287 | assert_difference 'Token.count' do | |
254 | post '/account/register', |
|
288 | post '/account/register', | |
255 | :user => {:login => "newuser", :language => "en", |
|
289 | :user => {:login => "newuser", :language => "en", | |
256 | :firstname => "New", :lastname => "User", :mail => "newuser@foo.bar", |
|
290 | :firstname => "New", :lastname => "User", :mail => "newuser@foo.bar", | |
257 | :password => "newpass123", :password_confirmation => "newpass123"} |
|
291 | :password => "newpass123", :password_confirmation => "newpass123"} | |
258 | end |
|
292 | end | |
259 | end |
|
293 | end | |
260 | user = User.order('id desc').first |
|
294 | user = User.order('id desc').first | |
261 | assert_equal User::STATUS_REGISTERED, user.status |
|
295 | assert_equal User::STATUS_REGISTERED, user.status | |
262 | reset! |
|
296 | reset! | |
263 |
|
297 | |||
264 | # try to use "lost password" |
|
298 | # try to use "lost password" | |
265 | assert_no_difference 'ActionMailer::Base.deliveries.size' do |
|
299 | assert_no_difference 'ActionMailer::Base.deliveries.size' do | |
266 | post '/account/lost_password', :mail => 'newuser@foo.bar' |
|
300 | post '/account/lost_password', :mail => 'newuser@foo.bar' | |
267 | end |
|
301 | end | |
268 | assert_redirected_to '/account/lost_password' |
|
302 | assert_redirected_to '/account/lost_password' | |
269 | follow_redirect! |
|
303 | follow_redirect! | |
270 | assert_response :success |
|
304 | assert_response :success | |
271 | assert_select 'div.flash', :text => /new activation email/ |
|
305 | assert_select 'div.flash', :text => /new activation email/ | |
272 | assert_select 'div.flash a[href="/account/activation_email"]' |
|
306 | assert_select 'div.flash a[href="/account/activation_email"]' | |
273 |
|
307 | |||
274 | # request a new action activation email |
|
308 | # request a new action activation email | |
275 | assert_difference 'ActionMailer::Base.deliveries.size' do |
|
309 | assert_difference 'ActionMailer::Base.deliveries.size' do | |
276 | get '/account/activation_email' |
|
310 | get '/account/activation_email' | |
277 | end |
|
311 | end | |
278 | assert_redirected_to '/login' |
|
312 | assert_redirected_to '/login' | |
279 | token = Token.order('id desc').first |
|
313 | token = Token.order('id desc').first | |
280 | activation_path = "/account/activate?token=#{token.value}" |
|
314 | activation_path = "/account/activate?token=#{token.value}" | |
281 | assert_include activation_path, mail_body(ActionMailer::Base.deliveries.last) |
|
315 | assert_include activation_path, mail_body(ActionMailer::Base.deliveries.last) | |
282 |
|
316 | |||
283 | # activate the account |
|
317 | # activate the account | |
284 | get activation_path |
|
318 | get activation_path | |
285 | assert_redirected_to '/login' |
|
319 | assert_redirected_to '/login' | |
286 |
|
320 | |||
287 | post '/login', :username => 'newuser', :password => 'newpass123' |
|
321 | post '/login', :username => 'newuser', :password => 'newpass123' | |
288 | assert_redirected_to '/my/page' |
|
322 | assert_redirected_to '/my/page' | |
289 | end |
|
323 | end | |
290 | end |
|
324 | end | |
291 | end |
|
325 | end |
General Comments 0
You need to be logged in to leave comments.
Login now