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