##// END OF EJS Templates
Added an Admin setting to enable/disable the REST web service. (#3920)...
Eric Davis -
r3106:bfcd5039f288
parent child
Show More
@@ -0,0 +1,8
1 <% form_tag({:action => 'edit', :tab => 'integration'}) do %>
2
3 <div class="box tabular settings">
4 <p><%= setting_check_box :rest_api_enabled %></p>
5 </div>
6
7 <%= submit_tag l(:button_save) %>
8 <% end %>
@@ -0,0 +1,110
1 require "#{File.dirname(__FILE__)}/../test_helper"
2
3 class DisabledRestApi < ActionController::IntegrationTest
4 fixtures :all
5
6 def setup
7 Setting.rest_api_enabled = '0'
8 Setting.login_required = '1'
9 end
10
11 def teardown
12 Setting.rest_api_enabled = '1'
13 Setting.login_required = '0'
14 end
15
16 # Using the NewsController because it's a simple API.
17 context "get /news with the API disabled" do
18
19 context "in :xml format" do
20 context "with a valid api token" do
21 setup do
22 @user = User.generate_with_protected!
23 @token = Token.generate!(:user => @user, :action => 'api')
24 get "/news.xml?key=#{@token.value}"
25 end
26
27 should_respond_with :unauthorized
28 should_respond_with_content_type :xml
29 should "not login as the user" do
30 assert_equal User.anonymous, User.current
31 end
32 end
33
34 context "with a valid HTTP authentication" do
35 setup do
36 @user = User.generate_with_protected!(:password => 'my_password', :password_confirmation => 'my_password')
37 @authorization = ActionController::HttpAuthentication::Basic.encode_credentials(@user.login, 'my_password')
38 get "/news.xml", nil, :authorization => @authorization
39 end
40
41 should_respond_with :unauthorized
42 should_respond_with_content_type :xml
43 should "not login as the user" do
44 assert_equal User.anonymous, User.current
45 end
46 end
47
48 context "with a valid HTTP authentication using the API token" do
49 setup do
50 @user = User.generate_with_protected!
51 @token = Token.generate!(:user => @user, :action => 'api')
52 @authorization = ActionController::HttpAuthentication::Basic.encode_credentials(@token.value, 'X')
53 get "/news.xml", nil, :authorization => @authorization
54 end
55
56 should_respond_with :unauthorized
57 should_respond_with_content_type :xml
58 should "not login as the user" do
59 assert_equal User.anonymous, User.current
60 end
61 end
62 end
63
64 context "in :json format" do
65 context "with a valid api token" do
66 setup do
67 @user = User.generate_with_protected!
68 @token = Token.generate!(:user => @user, :action => 'api')
69 get "/news.json?key=#{@token.value}"
70 end
71
72 should_respond_with :unauthorized
73 should_respond_with_content_type :json
74 should "not login as the user" do
75 assert_equal User.anonymous, User.current
76 end
77 end
78
79 context "with a valid HTTP authentication" do
80 setup do
81 @user = User.generate_with_protected!(:password => 'my_password', :password_confirmation => 'my_password')
82 @authorization = ActionController::HttpAuthentication::Basic.encode_credentials(@user.login, 'my_password')
83 get "/news.json", nil, :authorization => @authorization
84 end
85
86 should_respond_with :unauthorized
87 should_respond_with_content_type :json
88 should "not login as the user" do
89 assert_equal User.anonymous, User.current
90 end
91 end
92
93 context "with a valid HTTP authentication using the API token" do
94 setup do
95 @user = User.generate_with_protected!
96 @token = Token.generate!(:user => @user, :action => 'api')
97 @authorization = ActionController::HttpAuthentication::Basic.encode_credentials(@token.value, 'DoesNotMatter')
98 get "/news.json", nil, :authorization => @authorization
99 end
100
101 should_respond_with :unauthorized
102 should_respond_with_content_type :json
103 should "not login as the user" do
104 assert_equal User.anonymous, User.current
105 end
106 end
107
108 end
109 end
110 end
@@ -1,293 +1,293
1 1 # redMine - project management software
2 2 # Copyright (C) 2006-2007 Jean-Philippe Lang
3 3 #
4 4 # This program is free software; you can redistribute it and/or
5 5 # modify it under the terms of the GNU General Public License
6 6 # as published by the Free Software Foundation; either version 2
7 7 # of the License, or (at your option) any later version.
8 8 #
9 9 # This program is distributed in the hope that it will be useful,
10 10 # but WITHOUT ANY WARRANTY; without even the implied warranty of
11 11 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 12 # GNU General Public License for more details.
13 13 #
14 14 # You should have received a copy of the GNU General Public License
15 15 # along with this program; if not, write to the Free Software
16 16 # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
17 17
18 18 require 'uri'
19 19 require 'cgi'
20 20
21 21 class ApplicationController < ActionController::Base
22 22 include Redmine::I18n
23 23
24 24 layout 'base'
25 25
26 26 # Remove broken cookie after upgrade from 0.8.x (#4292)
27 27 # See https://rails.lighthouseapp.com/projects/8994/tickets/3360
28 28 # TODO: remove it when Rails is fixed
29 29 before_filter :delete_broken_cookies
30 30 def delete_broken_cookies
31 31 if cookies['_redmine_session'] && cookies['_redmine_session'] !~ /--/
32 32 cookies.delete '_redmine_session'
33 33 redirect_to home_path
34 34 return false
35 35 end
36 36 end
37 37
38 38 before_filter :user_setup, :check_if_login_required, :set_localization
39 39 filter_parameter_logging :password
40 40 protect_from_forgery
41 41
42 42 rescue_from ActionController::InvalidAuthenticityToken, :with => :invalid_authenticity_token
43 43
44 44 include Redmine::Search::Controller
45 45 include Redmine::MenuManager::MenuController
46 46 helper Redmine::MenuManager::MenuHelper
47 47
48 48 REDMINE_SUPPORTED_SCM.each do |scm|
49 49 require_dependency "repository/#{scm.underscore}"
50 50 end
51 51
52 52 def user_setup
53 53 # Check the settings cache for each request
54 54 Setting.check_cache
55 55 # Find the current user
56 56 User.current = find_current_user
57 57 end
58 58
59 59 # Returns the current user or nil if no user is logged in
60 60 # and starts a session if needed
61 61 def find_current_user
62 62 if session[:user_id]
63 63 # existing session
64 64 (User.active.find(session[:user_id]) rescue nil)
65 65 elsif cookies[:autologin] && Setting.autologin?
66 66 # auto-login feature starts a new session
67 67 user = User.try_to_autologin(cookies[:autologin])
68 68 session[:user_id] = user.id if user
69 69 user
70 70 elsif params[:format] == 'atom' && params[:key] && accept_key_auth_actions.include?(params[:action])
71 71 # RSS key authentication does not start a session
72 72 User.find_by_rss_key(params[:key])
73 elsif ['xml', 'json'].include?(params[:format]) && accept_key_auth_actions.include?(params[:action])
73 elsif Setting.rest_api_enabled? && ['xml', 'json'].include?(params[:format]) && accept_key_auth_actions.include?(params[:action])
74 74 if params[:key].present?
75 75 # Use API key
76 76 User.find_by_api_key(params[:key])
77 77 else
78 78 # HTTP Basic, either username/password or API key/random
79 79 authenticate_with_http_basic do |username, password|
80 80 User.try_to_login(username, password) || User.find_by_api_key(username)
81 81 end
82 82 end
83 83 end
84 84 end
85 85
86 86 # Sets the logged in user
87 87 def logged_user=(user)
88 88 reset_session
89 89 if user && user.is_a?(User)
90 90 User.current = user
91 91 session[:user_id] = user.id
92 92 else
93 93 User.current = User.anonymous
94 94 end
95 95 end
96 96
97 97 # check if login is globally required to access the application
98 98 def check_if_login_required
99 99 # no check needed if user is already logged in
100 100 return true if User.current.logged?
101 101 require_login if Setting.login_required?
102 102 end
103 103
104 104 def set_localization
105 105 lang = nil
106 106 if User.current.logged?
107 107 lang = find_language(User.current.language)
108 108 end
109 109 if lang.nil? && request.env['HTTP_ACCEPT_LANGUAGE']
110 110 accept_lang = parse_qvalues(request.env['HTTP_ACCEPT_LANGUAGE']).first.downcase
111 111 if !accept_lang.blank?
112 112 lang = find_language(accept_lang) || find_language(accept_lang.split('-').first)
113 113 end
114 114 end
115 115 lang ||= Setting.default_language
116 116 set_language_if_valid(lang)
117 117 end
118 118
119 119 def require_login
120 120 if !User.current.logged?
121 121 # Extract only the basic url parameters on non-GET requests
122 122 if request.get?
123 123 url = url_for(params)
124 124 else
125 125 url = url_for(:controller => params[:controller], :action => params[:action], :id => params[:id], :project_id => params[:project_id])
126 126 end
127 127 respond_to do |format|
128 128 format.html { redirect_to :controller => "account", :action => "login", :back_url => url }
129 129 format.atom { redirect_to :controller => "account", :action => "login", :back_url => url }
130 130 format.xml { head :unauthorized }
131 131 format.json { head :unauthorized }
132 132 end
133 133 return false
134 134 end
135 135 true
136 136 end
137 137
138 138 def require_admin
139 139 return unless require_login
140 140 if !User.current.admin?
141 141 render_403
142 142 return false
143 143 end
144 144 true
145 145 end
146 146
147 147 def deny_access
148 148 User.current.logged? ? render_403 : require_login
149 149 end
150 150
151 151 # Authorize the user for the requested action
152 152 def authorize(ctrl = params[:controller], action = params[:action], global = false)
153 153 allowed = User.current.allowed_to?({:controller => ctrl, :action => action}, @project, :global => global)
154 154 allowed ? true : deny_access
155 155 end
156 156
157 157 # Authorize the user for the requested action outside a project
158 158 def authorize_global(ctrl = params[:controller], action = params[:action], global = true)
159 159 authorize(ctrl, action, global)
160 160 end
161 161
162 162 # make sure that the user is a member of the project (or admin) if project is private
163 163 # used as a before_filter for actions that do not require any particular permission on the project
164 164 def check_project_privacy
165 165 if @project && @project.active?
166 166 if @project.is_public? || User.current.member_of?(@project) || User.current.admin?
167 167 true
168 168 else
169 169 User.current.logged? ? render_403 : require_login
170 170 end
171 171 else
172 172 @project = nil
173 173 render_404
174 174 false
175 175 end
176 176 end
177 177
178 178 def redirect_back_or_default(default)
179 179 back_url = CGI.unescape(params[:back_url].to_s)
180 180 if !back_url.blank?
181 181 begin
182 182 uri = URI.parse(back_url)
183 183 # do not redirect user to another host or to the login or register page
184 184 if (uri.relative? || (uri.host == request.host)) && !uri.path.match(%r{/(login|account/register)})
185 185 redirect_to(back_url)
186 186 return
187 187 end
188 188 rescue URI::InvalidURIError
189 189 # redirect to default
190 190 end
191 191 end
192 192 redirect_to default
193 193 end
194 194
195 195 def render_403
196 196 @project = nil
197 197 render :template => "common/403", :layout => (request.xhr? ? false : 'base'), :status => 403
198 198 return false
199 199 end
200 200
201 201 def render_404
202 202 render :template => "common/404", :layout => !request.xhr?, :status => 404
203 203 return false
204 204 end
205 205
206 206 def render_error(msg)
207 207 flash.now[:error] = msg
208 208 render :text => '', :layout => !request.xhr?, :status => 500
209 209 end
210 210
211 211 def invalid_authenticity_token
212 212 render_error "Invalid form authenticity token."
213 213 end
214 214
215 215 def render_feed(items, options={})
216 216 @items = items || []
217 217 @items.sort! {|x,y| y.event_datetime <=> x.event_datetime }
218 218 @items = @items.slice(0, Setting.feeds_limit.to_i)
219 219 @title = options[:title] || Setting.app_title
220 220 render :template => "common/feed.atom.rxml", :layout => false, :content_type => 'application/atom+xml'
221 221 end
222 222
223 223 def self.accept_key_auth(*actions)
224 224 actions = actions.flatten.map(&:to_s)
225 225 write_inheritable_attribute('accept_key_auth_actions', actions)
226 226 end
227 227
228 228 def accept_key_auth_actions
229 229 self.class.read_inheritable_attribute('accept_key_auth_actions') || []
230 230 end
231 231
232 232 # TODO: move to model
233 233 def attach_files(obj, attachments)
234 234 attached = []
235 235 unsaved = []
236 236 if attachments && attachments.is_a?(Hash)
237 237 attachments.each_value do |attachment|
238 238 file = attachment['file']
239 239 next unless file && file.size > 0
240 240 a = Attachment.create(:container => obj,
241 241 :file => file,
242 242 :description => attachment['description'].to_s.strip,
243 243 :author => User.current)
244 244 a.new_record? ? (unsaved << a) : (attached << a)
245 245 end
246 246 if unsaved.any?
247 247 flash[:warning] = l(:warning_attachments_not_saved, unsaved.size)
248 248 end
249 249 end
250 250 attached
251 251 end
252 252
253 253 # Returns the number of objects that should be displayed
254 254 # on the paginated list
255 255 def per_page_option
256 256 per_page = nil
257 257 if params[:per_page] && Setting.per_page_options_array.include?(params[:per_page].to_s.to_i)
258 258 per_page = params[:per_page].to_s.to_i
259 259 session[:per_page] = per_page
260 260 elsif session[:per_page]
261 261 per_page = session[:per_page]
262 262 else
263 263 per_page = Setting.per_page_options_array.first || 25
264 264 end
265 265 per_page
266 266 end
267 267
268 268 # qvalues http header parser
269 269 # code taken from webrick
270 270 def parse_qvalues(value)
271 271 tmp = []
272 272 if value
273 273 parts = value.split(/,\s*/)
274 274 parts.each {|part|
275 275 if m = %r{^([^\s,]+?)(?:;\s*q=(\d+(?:\.\d+)?))?$}.match(part)
276 276 val = m[1]
277 277 q = (m[2] or 1).to_f
278 278 tmp.push([val, q])
279 279 end
280 280 }
281 281 tmp = tmp.sort_by{|val, q| -q}
282 282 tmp.collect!{|val, q| val}
283 283 end
284 284 return tmp
285 285 rescue
286 286 nil
287 287 end
288 288
289 289 # Returns a string that can be used as filename value in Content-Disposition header
290 290 def filename_for_content_disposition(name)
291 291 request.env['HTTP_USER_AGENT'] =~ %r{MSIE} ? ERB::Util.url_encode(name) : name
292 292 end
293 293 end
@@ -1,74 +1,75
1 1 # Redmine - project management software
2 2 # Copyright (C) 2006-2009 Jean-Philippe Lang
3 3 #
4 4 # This program is free software; you can redistribute it and/or
5 5 # modify it under the terms of the GNU General Public License
6 6 # as published by the Free Software Foundation; either version 2
7 7 # of the License, or (at your option) any later version.
8 8 #
9 9 # This program is distributed in the hope that it will be useful,
10 10 # but WITHOUT ANY WARRANTY; without even the implied warranty of
11 11 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 12 # GNU General Public License for more details.
13 13 #
14 14 # You should have received a copy of the GNU General Public License
15 15 # along with this program; if not, write to the Free Software
16 16 # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
17 17
18 18 module SettingsHelper
19 19 def administration_settings_tabs
20 20 tabs = [{:name => 'general', :partial => 'settings/general', :label => :label_general},
21 21 {:name => 'display', :partial => 'settings/display', :label => :label_display},
22 22 {:name => 'authentication', :partial => 'settings/authentication', :label => :label_authentication},
23 23 {:name => 'projects', :partial => 'settings/projects', :label => :label_project_plural},
24 24 {:name => 'issues', :partial => 'settings/issues', :label => :label_issue_tracking},
25 25 {:name => 'notifications', :partial => 'settings/notifications', :label => :field_mail_notification},
26 26 {:name => 'mail_handler', :partial => 'settings/mail_handler', :label => :label_incoming_emails},
27 {:name => 'repositories', :partial => 'settings/repositories', :label => :label_repository_plural}
27 {:name => 'repositories', :partial => 'settings/repositories', :label => :label_repository_plural},
28 {:name => 'integration', :partial => 'settings/integration', :label => :label_integration}
28 29 ]
29 30 end
30 31
31 32 def setting_select(setting, choices, options={})
32 33 if blank_text = options.delete(:blank)
33 34 choices = [[blank_text.is_a?(Symbol) ? l(blank_text) : blank_text, '']] + choices
34 35 end
35 36 setting_label(setting, options) +
36 37 select_tag("settings[#{setting}]", options_for_select(choices, Setting.send(setting).to_s), options)
37 38 end
38 39
39 40 def setting_multiselect(setting, choices, options={})
40 41 setting_values = Setting.send(setting)
41 42 setting_values = [] unless setting_values.is_a?(Array)
42 43
43 44 setting_label(setting, options) +
44 45 hidden_field_tag("settings[#{setting}][]", '') +
45 46 choices.collect do |choice|
46 47 text, value = (choice.is_a?(Array) ? choice : [choice, choice])
47 48 content_tag('label',
48 49 check_box_tag("settings[#{setting}][]", value, Setting.send(setting).include?(value)) + text.to_s,
49 50 :class => 'block'
50 51 )
51 52 end.join
52 53 end
53 54
54 55 def setting_text_field(setting, options={})
55 56 setting_label(setting, options) +
56 57 text_field_tag("settings[#{setting}]", Setting.send(setting), options)
57 58 end
58 59
59 60 def setting_text_area(setting, options={})
60 61 setting_label(setting, options) +
61 62 text_area_tag("settings[#{setting}]", Setting.send(setting), options)
62 63 end
63 64
64 65 def setting_check_box(setting, options={})
65 66 setting_label(setting, options) +
66 67 hidden_field_tag("settings[#{setting}]", 0) +
67 68 check_box_tag("settings[#{setting}]", 1, Setting.send("#{setting}?"), options)
68 69 end
69 70
70 71 def setting_label(setting, options={})
71 72 label = options.delete(:label)
72 73 label != false ? content_tag("label", l(label || "setting_#{setting}")) : ''
73 74 end
74 75 end
@@ -1,872 +1,874
1 1 en:
2 2 date:
3 3 formats:
4 4 # Use the strftime parameters for formats.
5 5 # When no format has been given, it uses default.
6 6 # You can provide other formats here if you like!
7 7 default: "%m/%d/%Y"
8 8 short: "%b %d"
9 9 long: "%B %d, %Y"
10 10
11 11 day_names: [Sunday, Monday, Tuesday, Wednesday, Thursday, Friday, Saturday]
12 12 abbr_day_names: [Sun, Mon, Tue, Wed, Thu, Fri, Sat]
13 13
14 14 # Don't forget the nil at the beginning; there's no such thing as a 0th month
15 15 month_names: [~, January, February, March, April, May, June, July, August, September, October, November, December]
16 16 abbr_month_names: [~, Jan, Feb, Mar, Apr, May, Jun, Jul, Aug, Sep, Oct, Nov, Dec]
17 17 # Used in date_select and datime_select.
18 18 order: [ :year, :month, :day ]
19 19
20 20 time:
21 21 formats:
22 22 default: "%m/%d/%Y %I:%M %p"
23 23 time: "%I:%M %p"
24 24 short: "%d %b %H:%M"
25 25 long: "%B %d, %Y %H:%M"
26 26 am: "am"
27 27 pm: "pm"
28 28
29 29 datetime:
30 30 distance_in_words:
31 31 half_a_minute: "half a minute"
32 32 less_than_x_seconds:
33 33 one: "less than 1 second"
34 34 other: "less than {{count}} seconds"
35 35 x_seconds:
36 36 one: "1 second"
37 37 other: "{{count}} seconds"
38 38 less_than_x_minutes:
39 39 one: "less than a minute"
40 40 other: "less than {{count}} minutes"
41 41 x_minutes:
42 42 one: "1 minute"
43 43 other: "{{count}} minutes"
44 44 about_x_hours:
45 45 one: "about 1 hour"
46 46 other: "about {{count}} hours"
47 47 x_days:
48 48 one: "1 day"
49 49 other: "{{count}} days"
50 50 about_x_months:
51 51 one: "about 1 month"
52 52 other: "about {{count}} months"
53 53 x_months:
54 54 one: "1 month"
55 55 other: "{{count}} months"
56 56 about_x_years:
57 57 one: "about 1 year"
58 58 other: "about {{count}} years"
59 59 over_x_years:
60 60 one: "over 1 year"
61 61 other: "over {{count}} years"
62 62
63 63 number:
64 64 human:
65 65 format:
66 66 delimiter: ""
67 67 precision: 1
68 68 storage_units:
69 69 format: "%n %u"
70 70 units:
71 71 byte:
72 72 one: "Byte"
73 73 other: "Bytes"
74 74 kb: "KB"
75 75 mb: "MB"
76 76 gb: "GB"
77 77 tb: "TB"
78 78
79 79
80 80 # Used in array.to_sentence.
81 81 support:
82 82 array:
83 83 sentence_connector: "and"
84 84 skip_last_comma: false
85 85
86 86 activerecord:
87 87 errors:
88 88 messages:
89 89 inclusion: "is not included in the list"
90 90 exclusion: "is reserved"
91 91 invalid: "is invalid"
92 92 confirmation: "doesn't match confirmation"
93 93 accepted: "must be accepted"
94 94 empty: "can't be empty"
95 95 blank: "can't be blank"
96 96 too_long: "is too long (maximum is {{count}} characters)"
97 97 too_short: "is too short (minimum is {{count}} characters)"
98 98 wrong_length: "is the wrong length (should be {{count}} characters)"
99 99 taken: "has already been taken"
100 100 not_a_number: "is not a number"
101 101 not_a_date: "is not a valid date"
102 102 greater_than: "must be greater than {{count}}"
103 103 greater_than_or_equal_to: "must be greater than or equal to {{count}}"
104 104 equal_to: "must be equal to {{count}}"
105 105 less_than: "must be less than {{count}}"
106 106 less_than_or_equal_to: "must be less than or equal to {{count}}"
107 107 odd: "must be odd"
108 108 even: "must be even"
109 109 greater_than_start_date: "must be greater than start date"
110 110 not_same_project: "doesn't belong to the same project"
111 111 circular_dependency: "This relation would create a circular dependency"
112 112
113 113 actionview_instancetag_blank_option: Please select
114 114
115 115 general_text_No: 'No'
116 116 general_text_Yes: 'Yes'
117 117 general_text_no: 'no'
118 118 general_text_yes: 'yes'
119 119 general_lang_name: 'English'
120 120 general_csv_separator: ','
121 121 general_csv_decimal_separator: '.'
122 122 general_csv_encoding: ISO-8859-1
123 123 general_pdf_encoding: ISO-8859-1
124 124 general_first_day_of_week: '7'
125 125
126 126 notice_account_updated: Account was successfully updated.
127 127 notice_account_invalid_creditentials: Invalid user or password
128 128 notice_account_password_updated: Password was successfully updated.
129 129 notice_account_wrong_password: Wrong password
130 130 notice_account_register_done: Account was successfully created. To activate your account, click on the link that was emailed to you.
131 131 notice_account_unknown_email: Unknown user.
132 132 notice_can_t_change_password: This account uses an external authentication source. Impossible to change the password.
133 133 notice_account_lost_email_sent: An email with instructions to choose a new password has been sent to you.
134 134 notice_account_activated: Your account has been activated. You can now log in.
135 135 notice_successful_create: Successful creation.
136 136 notice_successful_update: Successful update.
137 137 notice_successful_delete: Successful deletion.
138 138 notice_successful_connection: Successful connection.
139 139 notice_file_not_found: The page you were trying to access doesn't exist or has been removed.
140 140 notice_locking_conflict: Data has been updated by another user.
141 141 notice_not_authorized: You are not authorized to access this page.
142 142 notice_email_sent: "An email was sent to {{value}}"
143 143 notice_email_error: "An error occurred while sending mail ({{value}})"
144 144 notice_feeds_access_key_reseted: Your RSS access key was reset.
145 145 notice_api_access_key_reseted: Your API access key was reset.
146 146 notice_failed_to_save_issues: "Failed to save {{count}} issue(s) on {{total}} selected: {{ids}}."
147 147 notice_no_issue_selected: "No issue is selected! Please, check the issues you want to edit."
148 148 notice_account_pending: "Your account was created and is now pending administrator approval."
149 149 notice_default_data_loaded: Default configuration successfully loaded.
150 150 notice_unable_delete_version: Unable to delete version.
151 151 notice_issue_done_ratios_updated: Issue done ratios updated.
152 152
153 153 error_can_t_load_default_data: "Default configuration could not be loaded: {{value}}"
154 154 error_scm_not_found: "The entry or revision was not found in the repository."
155 155 error_scm_command_failed: "An error occurred when trying to access the repository: {{value}}"
156 156 error_scm_annotate: "The entry does not exist or can not be annotated."
157 157 error_issue_not_found_in_project: 'The issue was not found or does not belong to this project'
158 158 error_no_tracker_in_project: 'No tracker is associated to this project. Please check the Project settings.'
159 159 error_no_default_issue_status: 'No default issue status is defined. Please check your configuration (Go to "Administration -> Issue statuses").'
160 160 error_can_not_reopen_issue_on_closed_version: 'An issue assigned to a closed version can not be reopened'
161 161 error_can_not_archive_project: This project can not be archived
162 162 error_issue_done_ratios_not_updated: "Issue done ratios not updated."
163 163 error_workflow_copy_source: 'Please select a source tracker or role'
164 164 error_workflow_copy_target: 'Please select target tracker(s) and role(s)'
165 165
166 166 warning_attachments_not_saved: "{{count}} file(s) could not be saved."
167 167
168 168 mail_subject_lost_password: "Your {{value}} password"
169 169 mail_body_lost_password: 'To change your password, click on the following link:'
170 170 mail_subject_register: "Your {{value}} account activation"
171 171 mail_body_register: 'To activate your account, click on the following link:'
172 172 mail_body_account_information_external: "You can use your {{value}} account to log in."
173 173 mail_body_account_information: Your account information
174 174 mail_subject_account_activation_request: "{{value}} account activation request"
175 175 mail_body_account_activation_request: "A new user ({{value}}) has registered. The account is pending your approval:"
176 176 mail_subject_reminder: "{{count}} issue(s) due in the next days"
177 177 mail_body_reminder: "{{count}} issue(s) that are assigned to you are due in the next {{days}} days:"
178 178 mail_subject_wiki_content_added: "'{{page}}' wiki page has been added"
179 179 mail_body_wiki_content_added: "The '{{page}}' wiki page has been added by {{author}}."
180 180 mail_subject_wiki_content_updated: "'{{page}}' wiki page has been updated"
181 181 mail_body_wiki_content_updated: "The '{{page}}' wiki page has been updated by {{author}}."
182 182
183 183 gui_validation_error: 1 error
184 184 gui_validation_error_plural: "{{count}} errors"
185 185
186 186 field_name: Name
187 187 field_description: Description
188 188 field_summary: Summary
189 189 field_is_required: Required
190 190 field_firstname: Firstname
191 191 field_lastname: Lastname
192 192 field_mail: Email
193 193 field_filename: File
194 194 field_filesize: Size
195 195 field_downloads: Downloads
196 196 field_author: Author
197 197 field_created_on: Created
198 198 field_updated_on: Updated
199 199 field_field_format: Format
200 200 field_is_for_all: For all projects
201 201 field_possible_values: Possible values
202 202 field_regexp: Regular expression
203 203 field_min_length: Minimum length
204 204 field_max_length: Maximum length
205 205 field_value: Value
206 206 field_category: Category
207 207 field_title: Title
208 208 field_project: Project
209 209 field_issue: Issue
210 210 field_status: Status
211 211 field_notes: Notes
212 212 field_is_closed: Issue closed
213 213 field_is_default: Default value
214 214 field_tracker: Tracker
215 215 field_subject: Subject
216 216 field_due_date: Due date
217 217 field_assigned_to: Assigned to
218 218 field_priority: Priority
219 219 field_fixed_version: Target version
220 220 field_user: User
221 221 field_role: Role
222 222 field_homepage: Homepage
223 223 field_is_public: Public
224 224 field_parent: Subproject of
225 225 field_is_in_roadmap: Issues displayed in roadmap
226 226 field_login: Login
227 227 field_mail_notification: Email notifications
228 228 field_admin: Administrator
229 229 field_last_login_on: Last connection
230 230 field_language: Language
231 231 field_effective_date: Date
232 232 field_password: Password
233 233 field_new_password: New password
234 234 field_password_confirmation: Confirmation
235 235 field_version: Version
236 236 field_type: Type
237 237 field_host: Host
238 238 field_port: Port
239 239 field_account: Account
240 240 field_base_dn: Base DN
241 241 field_attr_login: Login attribute
242 242 field_attr_firstname: Firstname attribute
243 243 field_attr_lastname: Lastname attribute
244 244 field_attr_mail: Email attribute
245 245 field_onthefly: On-the-fly user creation
246 246 field_start_date: Start
247 247 field_done_ratio: % Done
248 248 field_auth_source: Authentication mode
249 249 field_hide_mail: Hide my email address
250 250 field_comments: Comment
251 251 field_url: URL
252 252 field_start_page: Start page
253 253 field_subproject: Subproject
254 254 field_hours: Hours
255 255 field_activity: Activity
256 256 field_spent_on: Date
257 257 field_identifier: Identifier
258 258 field_is_filter: Used as a filter
259 259 field_issue_to: Related issue
260 260 field_delay: Delay
261 261 field_assignable: Issues can be assigned to this role
262 262 field_redirect_existing_links: Redirect existing links
263 263 field_estimated_hours: Estimated time
264 264 field_column_names: Columns
265 265 field_time_zone: Time zone
266 266 field_searchable: Searchable
267 267 field_default_value: Default value
268 268 field_comments_sorting: Display comments
269 269 field_parent_title: Parent page
270 270 field_editable: Editable
271 271 field_watcher: Watcher
272 272 field_identity_url: OpenID URL
273 273 field_content: Content
274 274 field_group_by: Group results by
275 275 field_sharing: Sharing
276 276
277 277 setting_app_title: Application title
278 278 setting_app_subtitle: Application subtitle
279 279 setting_welcome_text: Welcome text
280 280 setting_default_language: Default language
281 281 setting_login_required: Authentication required
282 282 setting_self_registration: Self-registration
283 283 setting_attachment_max_size: Attachment max. size
284 284 setting_issues_export_limit: Issues export limit
285 285 setting_mail_from: Emission email address
286 286 setting_bcc_recipients: Blind carbon copy recipients (bcc)
287 287 setting_plain_text_mail: Plain text mail (no HTML)
288 288 setting_host_name: Host name and path
289 289 setting_text_formatting: Text formatting
290 290 setting_wiki_compression: Wiki history compression
291 291 setting_feeds_limit: Feed content limit
292 292 setting_default_projects_public: New projects are public by default
293 293 setting_autofetch_changesets: Autofetch commits
294 294 setting_sys_api_enabled: Enable WS for repository management
295 295 setting_commit_ref_keywords: Referencing keywords
296 296 setting_commit_fix_keywords: Fixing keywords
297 297 setting_autologin: Autologin
298 298 setting_date_format: Date format
299 299 setting_time_format: Time format
300 300 setting_cross_project_issue_relations: Allow cross-project issue relations
301 301 setting_issue_list_default_columns: Default columns displayed on the issue list
302 302 setting_repositories_encodings: Repositories encodings
303 303 setting_commit_logs_encoding: Commit messages encoding
304 304 setting_emails_footer: Emails footer
305 305 setting_protocol: Protocol
306 306 setting_per_page_options: Objects per page options
307 307 setting_user_format: Users display format
308 308 setting_activity_days_default: Days displayed on project activity
309 309 setting_display_subprojects_issues: Display subprojects issues on main projects by default
310 310 setting_enabled_scm: Enabled SCM
311 311 setting_mail_handler_api_enabled: Enable WS for incoming emails
312 312 setting_mail_handler_api_key: API key
313 313 setting_sequential_project_identifiers: Generate sequential project identifiers
314 314 setting_gravatar_enabled: Use Gravatar user icons
315 315 setting_gravatar_default: Default Gravatar image
316 316 setting_diff_max_lines_displayed: Max number of diff lines displayed
317 317 setting_file_max_size_displayed: Max size of text files displayed inline
318 318 setting_repository_log_display_limit: Maximum number of revisions displayed on file log
319 319 setting_openid: Allow OpenID login and registration
320 320 setting_password_min_length: Minimum password length
321 321 setting_new_project_user_role_id: Role given to a non-admin user who creates a project
322 322 setting_default_projects_modules: Default enabled modules for new projects
323 323 setting_issue_done_ratio: Calculate the issue done ratio with
324 324 setting_issue_done_ratio_issue_field: Use the issue field
325 325 setting_issue_done_ratio_issue_status: Use the issue status
326 326 setting_start_of_week: Start calendars on
327 setting_rest_api_enabled: Enable REST web service
327 328
328 329 permission_add_project: Create project
329 330 permission_edit_project: Edit project
330 331 permission_select_project_modules: Select project modules
331 332 permission_manage_members: Manage members
332 333 permission_manage_versions: Manage versions
333 334 permission_manage_categories: Manage issue categories
334 335 permission_view_issues: View Issues
335 336 permission_add_issues: Add issues
336 337 permission_edit_issues: Edit issues
337 338 permission_manage_issue_relations: Manage issue relations
338 339 permission_add_issue_notes: Add notes
339 340 permission_edit_issue_notes: Edit notes
340 341 permission_edit_own_issue_notes: Edit own notes
341 342 permission_move_issues: Move issues
342 343 permission_delete_issues: Delete issues
343 344 permission_manage_public_queries: Manage public queries
344 345 permission_save_queries: Save queries
345 346 permission_view_gantt: View gantt chart
346 347 permission_view_calendar: View calendar
347 348 permission_view_issue_watchers: View watchers list
348 349 permission_add_issue_watchers: Add watchers
349 350 permission_delete_issue_watchers: Delete watchers
350 351 permission_log_time: Log spent time
351 352 permission_view_time_entries: View spent time
352 353 permission_edit_time_entries: Edit time logs
353 354 permission_edit_own_time_entries: Edit own time logs
354 355 permission_manage_news: Manage news
355 356 permission_comment_news: Comment news
356 357 permission_manage_documents: Manage documents
357 358 permission_view_documents: View documents
358 359 permission_manage_files: Manage files
359 360 permission_view_files: View files
360 361 permission_manage_wiki: Manage wiki
361 362 permission_rename_wiki_pages: Rename wiki pages
362 363 permission_delete_wiki_pages: Delete wiki pages
363 364 permission_view_wiki_pages: View wiki
364 365 permission_view_wiki_edits: View wiki history
365 366 permission_edit_wiki_pages: Edit wiki pages
366 367 permission_delete_wiki_pages_attachments: Delete attachments
367 368 permission_protect_wiki_pages: Protect wiki pages
368 369 permission_manage_repository: Manage repository
369 370 permission_browse_repository: Browse repository
370 371 permission_view_changesets: View changesets
371 372 permission_commit_access: Commit access
372 373 permission_manage_boards: Manage boards
373 374 permission_view_messages: View messages
374 375 permission_add_messages: Post messages
375 376 permission_edit_messages: Edit messages
376 377 permission_edit_own_messages: Edit own messages
377 378 permission_delete_messages: Delete messages
378 379 permission_delete_own_messages: Delete own messages
379 380
380 381 project_module_issue_tracking: Issue tracking
381 382 project_module_time_tracking: Time tracking
382 383 project_module_news: News
383 384 project_module_documents: Documents
384 385 project_module_files: Files
385 386 project_module_wiki: Wiki
386 387 project_module_repository: Repository
387 388 project_module_boards: Boards
388 389
389 390 label_user: User
390 391 label_user_plural: Users
391 392 label_user_new: New user
392 393 label_user_anonymous: Anonymous
393 394 label_project: Project
394 395 label_project_new: New project
395 396 label_project_plural: Projects
396 397 label_x_projects:
397 398 zero: no projects
398 399 one: 1 project
399 400 other: "{{count}} projects"
400 401 label_project_all: All Projects
401 402 label_project_latest: Latest projects
402 403 label_issue: Issue
403 404 label_issue_new: New issue
404 405 label_issue_plural: Issues
405 406 label_issue_view_all: View all issues
406 407 label_issues_by: "Issues by {{value}}"
407 408 label_issue_added: Issue added
408 409 label_issue_updated: Issue updated
409 410 label_document: Document
410 411 label_document_new: New document
411 412 label_document_plural: Documents
412 413 label_document_added: Document added
413 414 label_role: Role
414 415 label_role_plural: Roles
415 416 label_role_new: New role
416 417 label_role_and_permissions: Roles and permissions
417 418 label_member: Member
418 419 label_member_new: New member
419 420 label_member_plural: Members
420 421 label_tracker: Tracker
421 422 label_tracker_plural: Trackers
422 423 label_tracker_new: New tracker
423 424 label_workflow: Workflow
424 425 label_issue_status: Issue status
425 426 label_issue_status_plural: Issue statuses
426 427 label_issue_status_new: New status
427 428 label_issue_category: Issue category
428 429 label_issue_category_plural: Issue categories
429 430 label_issue_category_new: New category
430 431 label_custom_field: Custom field
431 432 label_custom_field_plural: Custom fields
432 433 label_custom_field_new: New custom field
433 434 label_enumerations: Enumerations
434 435 label_enumeration_new: New value
435 436 label_information: Information
436 437 label_information_plural: Information
437 438 label_please_login: Please log in
438 439 label_register: Register
439 440 label_login_with_open_id_option: or login with OpenID
440 441 label_password_lost: Lost password
441 442 label_home: Home
442 443 label_my_page: My page
443 444 label_my_account: My account
444 445 label_my_projects: My projects
445 446 label_administration: Administration
446 447 label_login: Sign in
447 448 label_logout: Sign out
448 449 label_help: Help
449 450 label_reported_issues: Reported issues
450 451 label_assigned_to_me_issues: Issues assigned to me
451 452 label_last_login: Last connection
452 453 label_registered_on: Registered on
453 454 label_activity: Activity
454 455 label_overall_activity: Overall activity
455 456 label_user_activity: "{{value}}'s activity"
456 457 label_new: New
457 458 label_logged_as: Logged in as
458 459 label_environment: Environment
459 460 label_authentication: Authentication
460 461 label_auth_source: Authentication mode
461 462 label_auth_source_new: New authentication mode
462 463 label_auth_source_plural: Authentication modes
463 464 label_subproject_plural: Subprojects
464 465 label_and_its_subprojects: "{{value}} and its subprojects"
465 466 label_min_max_length: Min - Max length
466 467 label_list: List
467 468 label_date: Date
468 469 label_integer: Integer
469 470 label_float: Float
470 471 label_boolean: Boolean
471 472 label_string: Text
472 473 label_text: Long text
473 474 label_attribute: Attribute
474 475 label_attribute_plural: Attributes
475 476 label_download: "{{count}} Download"
476 477 label_download_plural: "{{count}} Downloads"
477 478 label_no_data: No data to display
478 479 label_change_status: Change status
479 480 label_history: History
480 481 label_attachment: File
481 482 label_attachment_new: New file
482 483 label_attachment_delete: Delete file
483 484 label_attachment_plural: Files
484 485 label_file_added: File added
485 486 label_report: Report
486 487 label_report_plural: Reports
487 488 label_news: News
488 489 label_news_new: Add news
489 490 label_news_plural: News
490 491 label_news_latest: Latest news
491 492 label_news_view_all: View all news
492 493 label_news_added: News added
493 494 label_settings: Settings
494 495 label_overview: Overview
495 496 label_version: Version
496 497 label_version_new: New version
497 498 label_version_plural: Versions
498 499 label_confirmation: Confirmation
499 500 label_export_to: 'Also available in:'
500 501 label_read: Read...
501 502 label_public_projects: Public projects
502 503 label_open_issues: open
503 504 label_open_issues_plural: open
504 505 label_closed_issues: closed
505 506 label_closed_issues_plural: closed
506 507 label_x_open_issues_abbr_on_total:
507 508 zero: 0 open / {{total}}
508 509 one: 1 open / {{total}}
509 510 other: "{{count}} open / {{total}}"
510 511 label_x_open_issues_abbr:
511 512 zero: 0 open
512 513 one: 1 open
513 514 other: "{{count}} open"
514 515 label_x_closed_issues_abbr:
515 516 zero: 0 closed
516 517 one: 1 closed
517 518 other: "{{count}} closed"
518 519 label_total: Total
519 520 label_permissions: Permissions
520 521 label_current_status: Current status
521 522 label_new_statuses_allowed: New statuses allowed
522 523 label_all: all
523 524 label_none: none
524 525 label_nobody: nobody
525 526 label_next: Next
526 527 label_previous: Previous
527 528 label_used_by: Used by
528 529 label_details: Details
529 530 label_add_note: Add a note
530 531 label_per_page: Per page
531 532 label_calendar: Calendar
532 533 label_months_from: months from
533 534 label_gantt: Gantt
534 535 label_internal: Internal
535 536 label_last_changes: "last {{count}} changes"
536 537 label_change_view_all: View all changes
537 538 label_personalize_page: Personalize this page
538 539 label_comment: Comment
539 540 label_comment_plural: Comments
540 541 label_x_comments:
541 542 zero: no comments
542 543 one: 1 comment
543 544 other: "{{count}} comments"
544 545 label_comment_add: Add a comment
545 546 label_comment_added: Comment added
546 547 label_comment_delete: Delete comments
547 548 label_query: Custom query
548 549 label_query_plural: Custom queries
549 550 label_query_new: New query
550 551 label_filter_add: Add filter
551 552 label_filter_plural: Filters
552 553 label_equals: is
553 554 label_not_equals: is not
554 555 label_in_less_than: in less than
555 556 label_in_more_than: in more than
556 557 label_greater_or_equal: '>='
557 558 label_less_or_equal: '<='
558 559 label_in: in
559 560 label_today: today
560 561 label_all_time: all time
561 562 label_yesterday: yesterday
562 563 label_this_week: this week
563 564 label_last_week: last week
564 565 label_last_n_days: "last {{count}} days"
565 566 label_this_month: this month
566 567 label_last_month: last month
567 568 label_this_year: this year
568 569 label_date_range: Date range
569 570 label_less_than_ago: less than days ago
570 571 label_more_than_ago: more than days ago
571 572 label_ago: days ago
572 573 label_contains: contains
573 574 label_not_contains: doesn't contain
574 575 label_day_plural: days
575 576 label_repository: Repository
576 577 label_repository_plural: Repositories
577 578 label_browse: Browse
578 579 label_modification: "{{count}} change"
579 580 label_modification_plural: "{{count}} changes"
580 581 label_branch: Branch
581 582 label_tag: Tag
582 583 label_revision: Revision
583 584 label_revision_plural: Revisions
584 585 label_revision_id: "Revision {{value}}"
585 586 label_associated_revisions: Associated revisions
586 587 label_added: added
587 588 label_modified: modified
588 589 label_copied: copied
589 590 label_renamed: renamed
590 591 label_deleted: deleted
591 592 label_latest_revision: Latest revision
592 593 label_latest_revision_plural: Latest revisions
593 594 label_view_revisions: View revisions
594 595 label_view_all_revisions: View all revisions
595 596 label_max_size: Maximum size
596 597 label_sort_highest: Move to top
597 598 label_sort_higher: Move up
598 599 label_sort_lower: Move down
599 600 label_sort_lowest: Move to bottom
600 601 label_roadmap: Roadmap
601 602 label_roadmap_due_in: "Due in {{value}}"
602 603 label_roadmap_overdue: "{{value}} late"
603 604 label_roadmap_no_issues: No issues for this version
604 605 label_search: Search
605 606 label_result_plural: Results
606 607 label_all_words: All words
607 608 label_wiki: Wiki
608 609 label_wiki_edit: Wiki edit
609 610 label_wiki_edit_plural: Wiki edits
610 611 label_wiki_page: Wiki page
611 612 label_wiki_page_plural: Wiki pages
612 613 label_index_by_title: Index by title
613 614 label_index_by_date: Index by date
614 615 label_current_version: Current version
615 616 label_preview: Preview
616 617 label_feed_plural: Feeds
617 618 label_changes_details: Details of all changes
618 619 label_issue_tracking: Issue tracking
619 620 label_spent_time: Spent time
620 621 label_f_hour: "{{value}} hour"
621 622 label_f_hour_plural: "{{value}} hours"
622 623 label_time_tracking: Time tracking
623 624 label_change_plural: Changes
624 625 label_statistics: Statistics
625 626 label_commits_per_month: Commits per month
626 627 label_commits_per_author: Commits per author
627 628 label_view_diff: View differences
628 629 label_diff_inline: inline
629 630 label_diff_side_by_side: side by side
630 631 label_options: Options
631 632 label_copy_workflow_from: Copy workflow from
632 633 label_permissions_report: Permissions report
633 634 label_watched_issues: Watched issues
634 635 label_related_issues: Related issues
635 636 label_applied_status: Applied status
636 637 label_loading: Loading...
637 638 label_relation_new: New relation
638 639 label_relation_delete: Delete relation
639 640 label_relates_to: related to
640 641 label_duplicates: duplicates
641 642 label_duplicated_by: duplicated by
642 643 label_blocks: blocks
643 644 label_blocked_by: blocked by
644 645 label_precedes: precedes
645 646 label_follows: follows
646 647 label_end_to_start: end to start
647 648 label_end_to_end: end to end
648 649 label_start_to_start: start to start
649 650 label_start_to_end: start to end
650 651 label_stay_logged_in: Stay logged in
651 652 label_disabled: disabled
652 653 label_show_completed_versions: Show completed versions
653 654 label_me: me
654 655 label_board: Forum
655 656 label_board_new: New forum
656 657 label_board_plural: Forums
657 658 label_topic_plural: Topics
658 659 label_message_plural: Messages
659 660 label_message_last: Last message
660 661 label_message_new: New message
661 662 label_message_posted: Message added
662 663 label_reply_plural: Replies
663 664 label_send_information: Send account information to the user
664 665 label_year: Year
665 666 label_month: Month
666 667 label_week: Week
667 668 label_date_from: From
668 669 label_date_to: To
669 670 label_language_based: Based on user's language
670 671 label_sort_by: "Sort by {{value}}"
671 672 label_send_test_email: Send a test email
672 673 label_feeds_access_key: RSS access key
673 674 label_missing_feeds_access_key: Missing a RSS access key
674 675 label_feeds_access_key_created_on: "RSS access key created {{value}} ago"
675 676 label_module_plural: Modules
676 677 label_added_time_by: "Added by {{author}} {{age}} ago"
677 678 label_updated_time_by: "Updated by {{author}} {{age}} ago"
678 679 label_updated_time: "Updated {{value}} ago"
679 680 label_jump_to_a_project: Jump to a project...
680 681 label_file_plural: Files
681 682 label_changeset_plural: Changesets
682 683 label_default_columns: Default columns
683 684 label_no_change_option: (No change)
684 685 label_bulk_edit_selected_issues: Bulk edit selected issues
685 686 label_theme: Theme
686 687 label_default: Default
687 688 label_search_titles_only: Search titles only
688 689 label_user_mail_option_all: "For any event on all my projects"
689 690 label_user_mail_option_selected: "For any event on the selected projects only..."
690 691 label_user_mail_option_none: "Only for things I watch or I'm involved in"
691 692 label_user_mail_no_self_notified: "I don't want to be notified of changes that I make myself"
692 693 label_registration_activation_by_email: account activation by email
693 694 label_registration_manual_activation: manual account activation
694 695 label_registration_automatic_activation: automatic account activation
695 696 label_display_per_page: "Per page: {{value}}"
696 697 label_age: Age
697 698 label_change_properties: Change properties
698 699 label_general: General
699 700 label_more: More
700 701 label_scm: SCM
701 702 label_plugins: Plugins
702 703 label_ldap_authentication: LDAP authentication
703 704 label_downloads_abbr: D/L
704 705 label_optional_description: Optional description
705 706 label_add_another_file: Add another file
706 707 label_preferences: Preferences
707 708 label_chronological_order: In chronological order
708 709 label_reverse_chronological_order: In reverse chronological order
709 710 label_planning: Planning
710 711 label_incoming_emails: Incoming emails
711 712 label_generate_key: Generate a key
712 713 label_issue_watchers: Watchers
713 714 label_example: Example
714 715 label_display: Display
715 716 label_sort: Sort
716 717 label_ascending: Ascending
717 718 label_descending: Descending
718 719 label_date_from_to: From {{start}} to {{end}}
719 720 label_wiki_content_added: Wiki page added
720 721 label_wiki_content_updated: Wiki page updated
721 722 label_group: Group
722 723 label_group_plural: Groups
723 724 label_group_new: New group
724 725 label_time_entry_plural: Spent time
725 726 label_version_sharing_none: Not shared
726 727 label_version_sharing_descendants: With subprojects
727 728 label_version_sharing_hierarchy: With project hierarchy
728 729 label_version_sharing_tree: With project tree
729 730 label_version_sharing_system: With all projects
730 731 label_update_issue_done_ratios: Update issue done ratios
731 732 label_copy_source: Source
732 733 label_copy_target: Target
733 734 label_copy_same_as_target: Same as target
734 735 label_display_used_statuses_only: Only display statuses that are used by this tracker
735 736 label_api_access_key: API access key
736 737 label_missing_api_access_key: Missing an API access key
737 738 label_api_access_key_created_on: "API access key created {{value}} ago"
739 label_integration: Integration
738 740
739 741 button_login: Login
740 742 button_submit: Submit
741 743 button_save: Save
742 744 button_check_all: Check all
743 745 button_uncheck_all: Uncheck all
744 746 button_delete: Delete
745 747 button_create: Create
746 748 button_create_and_continue: Create and continue
747 749 button_test: Test
748 750 button_edit: Edit
749 751 button_add: Add
750 752 button_change: Change
751 753 button_apply: Apply
752 754 button_clear: Clear
753 755 button_lock: Lock
754 756 button_unlock: Unlock
755 757 button_download: Download
756 758 button_list: List
757 759 button_view: View
758 760 button_move: Move
759 761 button_move_and_follow: Move and follow
760 762 button_back: Back
761 763 button_cancel: Cancel
762 764 button_activate: Activate
763 765 button_sort: Sort
764 766 button_log_time: Log time
765 767 button_rollback: Rollback to this version
766 768 button_watch: Watch
767 769 button_unwatch: Unwatch
768 770 button_reply: Reply
769 771 button_archive: Archive
770 772 button_unarchive: Unarchive
771 773 button_reset: Reset
772 774 button_rename: Rename
773 775 button_change_password: Change password
774 776 button_copy: Copy
775 777 button_copy_and_follow: Copy and follow
776 778 button_annotate: Annotate
777 779 button_update: Update
778 780 button_configure: Configure
779 781 button_quote: Quote
780 782 button_duplicate: Duplicate
781 783
782 784 status_active: active
783 785 status_registered: registered
784 786 status_locked: locked
785 787
786 788 version_status_open: open
787 789 version_status_locked: locked
788 790 version_status_closed: closed
789 791
790 792 field_active: Active
791 793
792 794 text_select_mail_notifications: Select actions for which email notifications should be sent.
793 795 text_regexp_info: eg. ^[A-Z0-9]+$
794 796 text_min_max_length_info: 0 means no restriction
795 797 text_project_destroy_confirmation: Are you sure you want to delete this project and related data ?
796 798 text_subprojects_destroy_warning: "Its subproject(s): {{value}} will be also deleted."
797 799 text_workflow_edit: Select a role and a tracker to edit the workflow
798 800 text_are_you_sure: Are you sure ?
799 801 text_journal_changed: "{{label}} changed from {{old}} to {{new}}"
800 802 text_journal_set_to: "{{label}} set to {{value}}"
801 803 text_journal_deleted: "{{label}} deleted ({{old}})"
802 804 text_journal_added: "{{label}} {{value}} added"
803 805 text_tip_task_begin_day: task beginning this day
804 806 text_tip_task_end_day: task ending this day
805 807 text_tip_task_begin_end_day: task beginning and ending this day
806 808 text_project_identifier_info: 'Only lower case letters (a-z), numbers and dashes are allowed.<br />Once saved, the identifier can not be changed.'
807 809 text_caracters_maximum: "{{count}} characters maximum."
808 810 text_caracters_minimum: "Must be at least {{count}} characters long."
809 811 text_length_between: "Length between {{min}} and {{max}} characters."
810 812 text_tracker_no_workflow: No workflow defined for this tracker
811 813 text_unallowed_characters: Unallowed characters
812 814 text_comma_separated: Multiple values allowed (comma separated).
813 815 text_issues_ref_in_commit_messages: Referencing and fixing issues in commit messages
814 816 text_issue_added: "Issue {{id}} has been reported by {{author}}."
815 817 text_issue_updated: "Issue {{id}} has been updated by {{author}}."
816 818 text_wiki_destroy_confirmation: Are you sure you want to delete this wiki and all its content ?
817 819 text_issue_category_destroy_question: "Some issues ({{count}}) are assigned to this category. What do you want to do ?"
818 820 text_issue_category_destroy_assignments: Remove category assignments
819 821 text_issue_category_reassign_to: Reassign issues to this category
820 822 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)."
821 823 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."
822 824 text_load_default_configuration: Load the default configuration
823 825 text_status_changed_by_changeset: "Applied in changeset {{value}}."
824 826 text_issues_destroy_confirmation: 'Are you sure you want to delete the selected issue(s) ?'
825 827 text_select_project_modules: 'Select modules to enable for this project:'
826 828 text_default_administrator_account_changed: Default administrator account changed
827 829 text_file_repository_writable: Attachments directory writable
828 830 text_plugin_assets_writable: Plugin assets directory writable
829 831 text_rmagick_available: RMagick available (optional)
830 832 text_destroy_time_entries_question: "{{hours}} hours were reported on the issues you are about to delete. What do you want to do ?"
831 833 text_destroy_time_entries: Delete reported hours
832 834 text_assign_time_entries_to_project: Assign reported hours to the project
833 835 text_reassign_time_entries: 'Reassign reported hours to this issue:'
834 836 text_user_wrote: "{{value}} wrote:"
835 837 text_enumeration_destroy_question: "{{count}} objects are assigned to this value."
836 838 text_enumeration_category_reassign_to: 'Reassign them to this value:'
837 839 text_email_delivery_not_configured: "Email delivery is not configured, and notifications are disabled.\nConfigure your SMTP server in config/email.yml and restart the application to enable them."
838 840 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."
839 841 text_diff_truncated: '... This diff was truncated because it exceeds the maximum size that can be displayed.'
840 842 text_custom_field_possible_values_info: 'One line for each value'
841 843 text_wiki_page_destroy_question: "This page has {{descendants}} child page(s) and descendant(s). What do you want to do?"
842 844 text_wiki_page_nullify_children: "Keep child pages as root pages"
843 845 text_wiki_page_destroy_children: "Delete child pages and all their descendants"
844 846 text_wiki_page_reassign_children: "Reassign child pages to this parent page"
845 847 text_show: Show
846 848
847 849 default_role_manager: Manager
848 850 default_role_developper: Developer
849 851 default_role_reporter: Reporter
850 852 default_tracker_bug: Bug
851 853 default_tracker_feature: Feature
852 854 default_tracker_support: Support
853 855 default_issue_status_new: New
854 856 default_issue_status_in_progress: In Progress
855 857 default_issue_status_resolved: Resolved
856 858 default_issue_status_feedback: Feedback
857 859 default_issue_status_closed: Closed
858 860 default_issue_status_rejected: Rejected
859 861 default_doc_category_user: User documentation
860 862 default_doc_category_tech: Technical documentation
861 863 default_priority_low: Low
862 864 default_priority_normal: Normal
863 865 default_priority_high: High
864 866 default_priority_urgent: Urgent
865 867 default_priority_immediate: Immediate
866 868 default_activity_design: Design
867 869 default_activity_development: Development
868 870
869 871 enumeration_issue_priorities: Issue priorities
870 872 enumeration_doc_categories: Document categories
871 873 enumeration_activities: Activities (time tracking)
872 874 enumeration_system_activity: System Activity
@@ -1,178 +1,180
1 1 # redMine - project management software
2 2 # Copyright (C) 2006-2007 Jean-Philippe Lang
3 3 #
4 4 # This program is free software; you can redistribute it and/or
5 5 # modify it under the terms of the GNU General Public License
6 6 # as published by the Free Software Foundation; either version 2
7 7 # of the License, or (at your option) any later version.
8 8 #
9 9 # This program is distributed in the hope that it will be useful,
10 10 # but WITHOUT ANY WARRANTY; without even the implied warranty of
11 11 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 12 # GNU General Public License for more details.
13 13 #
14 14 # You should have received a copy of the GNU General Public License
15 15 # along with this program; if not, write to the Free Software
16 16 # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
17 17
18 18
19 19 # DO NOT MODIFY THIS FILE !!!
20 20 # Settings can be defined through the application in Admin -> Settings
21 21
22 22 app_title:
23 23 default: Redmine
24 24 app_subtitle:
25 25 default: Project management
26 26 welcome_text:
27 27 default:
28 28 login_required:
29 29 default: 0
30 30 self_registration:
31 31 default: '2'
32 32 lost_password:
33 33 default: 1
34 34 password_min_length:
35 35 format: int
36 36 default: 4
37 37 attachment_max_size:
38 38 format: int
39 39 default: 5120
40 40 issues_export_limit:
41 41 format: int
42 42 default: 500
43 43 activity_days_default:
44 44 format: int
45 45 default: 30
46 46 per_page_options:
47 47 default: '25,50,100'
48 48 mail_from:
49 49 default: redmine@example.net
50 50 bcc_recipients:
51 51 default: 1
52 52 plain_text_mail:
53 53 default: 0
54 54 text_formatting:
55 55 default: textile
56 56 wiki_compression:
57 57 default: ""
58 58 default_language:
59 59 default: en
60 60 host_name:
61 61 default: localhost:3000
62 62 protocol:
63 63 default: http
64 64 feeds_limit:
65 65 format: int
66 66 default: 15
67 67 # Maximum size of files that can be displayed
68 68 # inline through the file viewer (in KB)
69 69 file_max_size_displayed:
70 70 format: int
71 71 default: 512
72 72 diff_max_lines_displayed:
73 73 format: int
74 74 default: 1500
75 75 enabled_scm:
76 76 serialized: true
77 77 default:
78 78 - Subversion
79 79 - Darcs
80 80 - Mercurial
81 81 - Cvs
82 82 - Bazaar
83 83 - Git
84 84 autofetch_changesets:
85 85 default: 1
86 86 sys_api_enabled:
87 87 default: 0
88 88 sys_api_key:
89 89 default: ''
90 90 commit_ref_keywords:
91 91 default: 'refs,references,IssueID'
92 92 commit_fix_keywords:
93 93 default: 'fixes,closes'
94 94 commit_fix_status_id:
95 95 format: int
96 96 default: 0
97 97 commit_fix_done_ratio:
98 98 default: 100
99 99 # autologin duration in days
100 100 # 0 means autologin is disabled
101 101 autologin:
102 102 format: int
103 103 default: 0
104 104 # date format
105 105 date_format:
106 106 default: ''
107 107 time_format:
108 108 default: ''
109 109 user_format:
110 110 default: :firstname_lastname
111 111 format: symbol
112 112 cross_project_issue_relations:
113 113 default: 0
114 114 notified_events:
115 115 serialized: true
116 116 default:
117 117 - issue_added
118 118 - issue_updated
119 119 mail_handler_api_enabled:
120 120 default: 0
121 121 mail_handler_api_key:
122 122 default:
123 123 issue_list_default_columns:
124 124 serialized: true
125 125 default:
126 126 - tracker
127 127 - status
128 128 - priority
129 129 - subject
130 130 - assigned_to
131 131 - updated_on
132 132 display_subprojects_issues:
133 133 default: 1
134 134 issue_done_ratio:
135 135 default: 'issue_field'
136 136 default_projects_public:
137 137 default: 1
138 138 default_projects_modules:
139 139 serialized: true
140 140 default:
141 141 - issue_tracking
142 142 - time_tracking
143 143 - news
144 144 - documents
145 145 - files
146 146 - wiki
147 147 - repository
148 148 - boards
149 149 # Role given to a non-admin user who creates a project
150 150 new_project_user_role_id:
151 151 format: int
152 152 default: ''
153 153 sequential_project_identifiers:
154 154 default: 0
155 155 # encodings used to convert repository files content to UTF-8
156 156 # multiple values accepted, comma separated
157 157 repositories_encodings:
158 158 default: ''
159 159 # encoding used to convert commit logs to UTF-8
160 160 commit_logs_encoding:
161 161 default: 'UTF-8'
162 162 repository_log_display_limit:
163 163 format: int
164 164 default: 100
165 165 ui_theme:
166 166 default: ''
167 167 emails_footer:
168 168 default: |-
169 169 You have received this notification because you have either subscribed to it, or are involved in it.
170 170 To change your notification preferences, please click here: http://hostname/my/account
171 171 gravatar_enabled:
172 172 default: 0
173 173 openid:
174 174 default: 0
175 175 gravatar_default:
176 176 default: ''
177 177 start_of_week:
178 178 default: ''
179 rest_api_enabled:
180 default: 0
@@ -1,78 +1,80
1 1 require "#{File.dirname(__FILE__)}/../test_helper"
2 2
3 3 class ApiTokenLoginTest < ActionController::IntegrationTest
4 4 fixtures :all
5 5
6 6 def setup
7 Setting.rest_api_enabled = '1'
7 8 Setting.login_required = '1'
8 9 end
9 10
10 11 def teardown
12 Setting.rest_api_enabled = '0'
11 13 Setting.login_required = '0'
12 14 end
13 15
14 16 # Using the NewsController because it's a simple API.
15 17 context "get /news" do
16 18
17 19 context "in :xml format" do
18 20 context "with a valid api token" do
19 21 setup do
20 22 @user = User.generate_with_protected!
21 23 @token = Token.generate!(:user => @user, :action => 'api')
22 24 get "/news.xml?key=#{@token.value}"
23 25 end
24 26
25 27 should_respond_with :success
26 28 should_respond_with_content_type :xml
27 29 should "login as the user" do
28 30 assert_equal @user, User.current
29 31 end
30 32 end
31 33
32 34 context "with an invalid api token" do
33 35 setup do
34 36 @user = User.generate_with_protected!
35 37 @token = Token.generate!(:user => @user, :action => 'feeds')
36 38 get "/news.xml?key=#{@token.value}"
37 39 end
38 40
39 41 should_respond_with :unauthorized
40 42 should_respond_with_content_type :xml
41 43 should "not login as the user" do
42 44 assert_equal User.anonymous, User.current
43 45 end
44 46 end
45 47 end
46 48
47 49 context "in :json format" do
48 50 context "with a valid api token" do
49 51 setup do
50 52 @user = User.generate_with_protected!
51 53 @token = Token.generate!(:user => @user, :action => 'api')
52 54 get "/news.json?key=#{@token.value}"
53 55 end
54 56
55 57 should_respond_with :success
56 58 should_respond_with_content_type :json
57 59 should "login as the user" do
58 60 assert_equal @user, User.current
59 61 end
60 62 end
61 63
62 64 context "with an invalid api token" do
63 65 setup do
64 66 @user = User.generate_with_protected!
65 67 @token = Token.generate!(:user => @user, :action => 'feeds')
66 68 get "/news.json?key=#{@token.value}"
67 69 end
68 70
69 71 should_respond_with :unauthorized
70 72 should_respond_with_content_type :json
71 73 should "not login as the user" do
72 74 assert_equal User.anonymous, User.current
73 75 end
74 76 end
75 77 end
76 78
77 79 end
78 80 end
@@ -1,78 +1,80
1 1 require "#{File.dirname(__FILE__)}/../test_helper"
2 2
3 3 class HttpBasicLoginTest < ActionController::IntegrationTest
4 4 fixtures :all
5 5
6 6 def setup
7 Setting.rest_api_enabled = '1'
7 8 Setting.login_required = '1'
8 9 end
9 10
10 11 def teardown
12 Setting.rest_api_enabled = '0'
11 13 Setting.login_required = '0'
12 14 end
13 15
14 16 # Using the NewsController because it's a simple API.
15 17 context "get /news" do
16 18
17 19 context "in :xml format" do
18 20 context "with a valid HTTP authentication" do
19 21 setup do
20 22 @user = User.generate_with_protected!(:password => 'my_password', :password_confirmation => 'my_password')
21 23 @authorization = ActionController::HttpAuthentication::Basic.encode_credentials(@user.login, 'my_password')
22 24 get "/news.xml", nil, :authorization => @authorization
23 25 end
24 26
25 27 should_respond_with :success
26 28 should_respond_with_content_type :xml
27 29 should "login as the user" do
28 30 assert_equal @user, User.current
29 31 end
30 32 end
31 33
32 34 context "with an invalid HTTP authentication" do
33 35 setup do
34 36 @user = User.generate_with_protected!
35 37 @authorization = ActionController::HttpAuthentication::Basic.encode_credentials(@user.login, 'wrong_password')
36 38 get "/news.xml", nil, :authorization => @authorization
37 39 end
38 40
39 41 should_respond_with :unauthorized
40 42 should_respond_with_content_type :xml
41 43 should "not login as the user" do
42 44 assert_equal User.anonymous, User.current
43 45 end
44 46 end
45 47 end
46 48
47 49 context "in :json format" do
48 50 context "with a valid HTTP authentication" do
49 51 setup do
50 52 @user = User.generate_with_protected!(:password => 'my_password', :password_confirmation => 'my_password')
51 53 @authorization = ActionController::HttpAuthentication::Basic.encode_credentials(@user.login, 'my_password')
52 54 get "/news.json", nil, :authorization => @authorization
53 55 end
54 56
55 57 should_respond_with :success
56 58 should_respond_with_content_type :json
57 59 should "login as the user" do
58 60 assert_equal @user, User.current
59 61 end
60 62 end
61 63
62 64 context "with an invalid HTTP authentication" do
63 65 setup do
64 66 @user = User.generate_with_protected!
65 67 @authorization = ActionController::HttpAuthentication::Basic.encode_credentials(@user.login, 'wrong_password')
66 68 get "/news.json", nil, :authorization => @authorization
67 69 end
68 70
69 71 should_respond_with :unauthorized
70 72 should_respond_with_content_type :json
71 73 should "not login as the user" do
72 74 assert_equal User.anonymous, User.current
73 75 end
74 76 end
75 77 end
76 78
77 79 end
78 80 end
@@ -1,82 +1,84
1 1 require "#{File.dirname(__FILE__)}/../test_helper"
2 2
3 3 class HttpBasicLoginWithApiTokenTest < ActionController::IntegrationTest
4 4 fixtures :all
5 5
6 6 def setup
7 Setting.rest_api_enabled = '1'
7 8 Setting.login_required = '1'
8 9 end
9 10
10 11 def teardown
12 Setting.rest_api_enabled = '0'
11 13 Setting.login_required = '0'
12 14 end
13 15
14 16 # Using the NewsController because it's a simple API.
15 17 context "get /news" do
16 18
17 19 context "in :xml format" do
18 20 context "with a valid HTTP authentication using the API token" do
19 21 setup do
20 22 @user = User.generate_with_protected!
21 23 @token = Token.generate!(:user => @user, :action => 'api')
22 24 @authorization = ActionController::HttpAuthentication::Basic.encode_credentials(@token.value, 'X')
23 25 get "/news.xml", nil, :authorization => @authorization
24 26 end
25 27
26 28 should_respond_with :success
27 29 should_respond_with_content_type :xml
28 30 should "login as the user" do
29 31 assert_equal @user, User.current
30 32 end
31 33 end
32 34
33 35 context "with an invalid HTTP authentication" do
34 36 setup do
35 37 @user = User.generate_with_protected!
36 38 @token = Token.generate!(:user => @user, :action => 'feeds')
37 39 @authorization = ActionController::HttpAuthentication::Basic.encode_credentials(@token.value, 'X')
38 40 get "/news.xml", nil, :authorization => @authorization
39 41 end
40 42
41 43 should_respond_with :unauthorized
42 44 should_respond_with_content_type :xml
43 45 should "not login as the user" do
44 46 assert_equal User.anonymous, User.current
45 47 end
46 48 end
47 49 end
48 50
49 51 context "in :json format" do
50 52 context "with a valid HTTP authentication" do
51 53 setup do
52 54 @user = User.generate_with_protected!
53 55 @token = Token.generate!(:user => @user, :action => 'api')
54 56 @authorization = ActionController::HttpAuthentication::Basic.encode_credentials(@token.value, 'DoesNotMatter')
55 57 get "/news.json", nil, :authorization => @authorization
56 58 end
57 59
58 60 should_respond_with :success
59 61 should_respond_with_content_type :json
60 62 should "login as the user" do
61 63 assert_equal @user, User.current
62 64 end
63 65 end
64 66
65 67 context "with an invalid HTTP authentication" do
66 68 setup do
67 69 @user = User.generate_with_protected!
68 70 @token = Token.generate!(:user => @user, :action => 'feeds')
69 71 @authorization = ActionController::HttpAuthentication::Basic.encode_credentials(@token.value, 'DoesNotMatter')
70 72 get "/news.json", nil, :authorization => @authorization
71 73 end
72 74
73 75 should_respond_with :unauthorized
74 76 should_respond_with_content_type :json
75 77 should "not login as the user" do
76 78 assert_equal User.anonymous, User.current
77 79 end
78 80 end
79 81 end
80 82
81 83 end
82 84 end
General Comments 0
You need to be logged in to leave comments. Login now