Compare commits
92 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
43eb3ed51c | ||
|
|
a146c2d03f | ||
|
|
a62ff0841f | ||
|
|
d7ec02691f | ||
|
|
e7790bb6b5 | ||
|
|
34f73b005b | ||
|
|
ba42e1e2ff | ||
|
|
14074da8b1 | ||
|
|
44851d079f | ||
|
|
e6d053c3fd | ||
|
|
f17924c60d | ||
|
|
90e23e4d5d | ||
|
|
88a2792778 | ||
|
|
4c881d54a7 | ||
|
|
a6d45cc68f | ||
|
|
f58f7e0e41 | ||
|
|
473366f887 | ||
|
|
f6d2a4c29f | ||
|
|
b26d0fe041 | ||
|
|
98f3e98d82 | ||
|
|
7b27280c9b | ||
|
|
d287436627 | ||
|
|
666d3d6472 | ||
|
|
36063f16ee | ||
|
|
4a295e723e | ||
|
|
6e67d76194 | ||
|
|
eb55efd604 | ||
|
|
390eb7849c | ||
|
|
1588f3f6dc | ||
|
|
5ef8e8d45f | ||
|
|
cd15eb77d9 | ||
|
|
3b699806d9 | ||
|
|
d2367ccf53 | ||
|
|
9c00b8aa21 | ||
|
|
bbb00b0bc4 | ||
|
|
feac751318 | ||
|
|
eb4a7f9f2e | ||
|
|
7ce9ba9e28 | ||
|
|
53880a4e08 | ||
|
|
f92aa00705 | ||
|
|
b240da3833 | ||
|
|
da8624f7c7 | ||
|
|
46be83cd5e | ||
|
|
667f7927a7 | ||
|
|
3e6f42e46d | ||
|
|
30c45a6187 | ||
|
|
32288ed5d7 | ||
|
|
beb89eb8bb | ||
|
|
62d8016c4f | ||
|
|
5a7a3b2392 | ||
|
|
a2ad66a5c0 | ||
|
|
bfd9164c0a | ||
|
|
d80fb751fd | ||
|
|
aacabbe645 | ||
|
|
8eafcbede9 | ||
|
|
43c1481998 | ||
|
|
17f60af490 | ||
|
|
e5e5ad6b7a | ||
|
|
13fb739b56 | ||
|
|
73e849be58 | ||
|
|
0b7d4e818a | ||
|
|
40a4b111fa | ||
|
|
7d913f93c3 | ||
|
|
864fd9c6a1 | ||
|
|
57dcbd7376 | ||
|
|
0ef11ef4fe | ||
|
|
b5ee8c08ca | ||
|
|
9487d8dd80 | ||
|
|
f3bf588c82 | ||
|
|
bd38623cca | ||
|
|
bae86dc558 | ||
|
|
884c5be200 | ||
|
|
ad24563b1e | ||
|
|
cb8933ae55 | ||
|
|
5d75879046 | ||
|
|
69e5d91a2d | ||
|
|
7c1e877209 | ||
|
|
76d9d01db0 | ||
|
|
27fa40d283 | ||
|
|
20a6d7eb86 | ||
|
|
b87cf0c91c | ||
|
|
14ee72def2 | ||
|
|
a843cfff36 | ||
|
|
3d7cb0f40e | ||
|
|
92b267a608 | ||
|
|
c1be8bcf9f | ||
|
|
ff9aa9db59 | ||
|
|
65ee523852 | ||
|
|
1f5d95b027 | ||
|
|
c5a59aff5b | ||
|
|
f60881518a | ||
|
|
1efb25a433 |
@@ -25,8 +25,7 @@ class AccountController < ApplicationController
|
||||
# Login request and validation
|
||||
def login
|
||||
if request.get?
|
||||
# Logout user
|
||||
self.logged_user = nil
|
||||
logout_user
|
||||
else
|
||||
# Authenticate user
|
||||
if Setting.openid? && using_open_id?
|
||||
@@ -39,9 +38,7 @@ class AccountController < ApplicationController
|
||||
|
||||
# Log out current user and redirect to welcome page
|
||||
def logout
|
||||
cookies.delete :autologin
|
||||
Token.delete_all(["user_id = ? AND action = ?", User.current.id, 'autologin']) if User.current.logged?
|
||||
self.logged_user = nil
|
||||
logout_user
|
||||
redirect_to home_url
|
||||
end
|
||||
|
||||
@@ -134,7 +131,15 @@ class AccountController < ApplicationController
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
|
||||
def logout_user
|
||||
if User.current.logged?
|
||||
cookies.delete :autologin
|
||||
Token.delete_all(["user_id = ? AND action = ?", User.current.id, 'autologin'])
|
||||
self.logged_user = nil
|
||||
end
|
||||
end
|
||||
|
||||
def password_authentication
|
||||
user = User.try_to_login(params[:username], params[:password])
|
||||
|
||||
|
||||
@@ -107,8 +107,9 @@ class ApplicationController < ActionController::Base
|
||||
lang = find_language(User.current.language)
|
||||
end
|
||||
if lang.nil? && request.env['HTTP_ACCEPT_LANGUAGE']
|
||||
accept_lang = parse_qvalues(request.env['HTTP_ACCEPT_LANGUAGE']).first.downcase
|
||||
accept_lang = parse_qvalues(request.env['HTTP_ACCEPT_LANGUAGE']).first
|
||||
if !accept_lang.blank?
|
||||
accept_lang = accept_lang.downcase
|
||||
lang = find_language(accept_lang) || find_language(accept_lang.split('-').first)
|
||||
end
|
||||
end
|
||||
|
||||
@@ -76,12 +76,12 @@ class EnumerationsController < ApplicationController
|
||||
@enumeration.destroy
|
||||
redirect_to :action => 'index'
|
||||
elsif params[:reassign_to_id]
|
||||
if reassign_to = Enumeration.find_by_type_and_id(@enumeration.type, params[:reassign_to_id])
|
||||
if reassign_to = @enumeration.class.find_by_id(params[:reassign_to_id])
|
||||
@enumeration.destroy(reassign_to)
|
||||
redirect_to :action => 'index'
|
||||
end
|
||||
end
|
||||
@enumerations = Enumeration.find(:all, :conditions => ['type = (?)', @enumeration.type]) - [@enumeration]
|
||||
@enumerations = @enumeration.class.find(:all) - [@enumeration]
|
||||
#rescue
|
||||
# flash[:error] = 'Unable to delete enumeration'
|
||||
# redirect_to :action => 'index'
|
||||
|
||||
@@ -21,8 +21,8 @@ class IssueRelationsController < ApplicationController
|
||||
def new
|
||||
@relation = IssueRelation.new(params[:relation])
|
||||
@relation.issue_from = @issue
|
||||
if params[:relation] && !params[:relation][:issue_to_id].blank?
|
||||
@relation.issue_to = Issue.visible.find_by_id(params[:relation][:issue_to_id])
|
||||
if params[:relation] && m = params[:relation][:issue_to_id].to_s.match(/^#?(\d+)$/)
|
||||
@relation.issue_to = Issue.visible.find_by_id(m[1].to_i)
|
||||
end
|
||||
@relation.save if request.post?
|
||||
respond_to do |format|
|
||||
|
||||
@@ -40,6 +40,7 @@ class IssuesController < ApplicationController
|
||||
helper :attachments
|
||||
include AttachmentsHelper
|
||||
helper :queries
|
||||
include QueriesHelper
|
||||
helper :sort
|
||||
include SortHelper
|
||||
include IssuesHelper
|
||||
@@ -56,12 +57,13 @@ class IssuesController < ApplicationController
|
||||
sort_update({'id' => "#{Issue.table_name}.id"}.merge(@query.available_columns.inject({}) {|h, c| h[c.name.to_s] = c.sortable; h}))
|
||||
|
||||
if @query.valid?
|
||||
limit = per_page_option
|
||||
respond_to do |format|
|
||||
format.html { }
|
||||
format.atom { limit = Setting.feeds_limit.to_i }
|
||||
format.csv { limit = Setting.issues_export_limit.to_i }
|
||||
format.pdf { limit = Setting.issues_export_limit.to_i }
|
||||
limit = case params[:format]
|
||||
when 'csv', 'pdf'
|
||||
Setting.issues_export_limit.to_i
|
||||
when 'atom'
|
||||
Setting.feeds_limit.to_i
|
||||
else
|
||||
per_page_option
|
||||
end
|
||||
|
||||
@issue_count = @query.issue_count
|
||||
@@ -105,7 +107,7 @@ class IssuesController < ApplicationController
|
||||
@journals = @issue.journals.find(:all, :include => [:user, :details], :order => "#{Journal.table_name}.created_on ASC")
|
||||
@journals.each_with_index {|j,i| j.indice = i+1}
|
||||
@journals.reverse! if User.current.wants_comments_in_reverse_order?
|
||||
@changesets = @issue.changesets
|
||||
@changesets = @issue.changesets.visible.all
|
||||
@changesets.reverse! if User.current.wants_comments_in_reverse_order?
|
||||
@allowed_statuses = @issue.new_statuses_allowed_to(User.current)
|
||||
@edit_allowed = User.current.allowed_to?(:edit_issues, @project)
|
||||
@@ -147,7 +149,7 @@ class IssuesController < ApplicationController
|
||||
if request.get? || request.xhr?
|
||||
@issue.start_date ||= Date.today
|
||||
else
|
||||
requested_status = IssueStatus.find_by_id(params[:issue][:status_id])
|
||||
requested_status = IssueStatus.find_by_id(params[:issue][:status_id]) if params[:issue]
|
||||
# Check that the user is allowed to apply the requested status
|
||||
@issue.status = (@allowed_statuses.include? requested_status) ? requested_status : default_status
|
||||
call_hook(:controller_issues_new_before_save, { :params => params, :issue => @issue })
|
||||
@@ -187,22 +189,22 @@ class IssuesController < ApplicationController
|
||||
if request.post?
|
||||
@time_entry = TimeEntry.new(:project => @project, :issue => @issue, :user => User.current, :spent_on => Date.today)
|
||||
@time_entry.attributes = params[:time_entry]
|
||||
attachments = attach_files(@issue, params[:attachments])
|
||||
attachments.each {|a| journal.details << JournalDetail.new(:property => 'attachment', :prop_key => a.id, :value => a.filename)}
|
||||
|
||||
call_hook(:controller_issues_edit_before_save, { :params => params, :issue => @issue, :time_entry => @time_entry, :journal => journal})
|
||||
|
||||
if (@time_entry.hours.nil? || @time_entry.valid?) && @issue.save
|
||||
# Log spend time
|
||||
if User.current.allowed_to?(:log_time, @project)
|
||||
@time_entry.save
|
||||
if (@time_entry.hours.nil? || @time_entry.valid?) && @issue.valid?
|
||||
attachments = attach_files(@issue, params[:attachments])
|
||||
attachments.each {|a| journal.details << JournalDetail.new(:property => 'attachment', :prop_key => a.id, :value => a.filename)}
|
||||
call_hook(:controller_issues_edit_before_save, { :params => params, :issue => @issue, :time_entry => @time_entry, :journal => journal})
|
||||
if @issue.save
|
||||
# Log spend time
|
||||
if User.current.allowed_to?(:log_time, @project)
|
||||
@time_entry.save
|
||||
end
|
||||
if !journal.new_record?
|
||||
# Only send notification if something was actually changed
|
||||
flash[:notice] = l(:notice_successful_update)
|
||||
end
|
||||
call_hook(:controller_issues_edit_after_save, { :params => params, :issue => @issue, :time_entry => @time_entry, :journal => journal})
|
||||
redirect_back_or_default({:action => 'show', :id => @issue})
|
||||
end
|
||||
if !journal.new_record?
|
||||
# Only send notification if something was actually changed
|
||||
flash[:notice] = l(:notice_successful_update)
|
||||
end
|
||||
call_hook(:controller_issues_edit_after_save, { :params => params, :issue => @issue, :time_entry => @time_entry, :journal => journal})
|
||||
redirect_to(params[:back_to] || {:action => 'show', :id => @issue})
|
||||
end
|
||||
end
|
||||
rescue ActiveRecord::StaleObjectError
|
||||
@@ -221,10 +223,13 @@ class IssuesController < ApplicationController
|
||||
user = @issue.author
|
||||
text = @issue.description
|
||||
end
|
||||
content = "#{ll(Setting.default_language, :text_user_wrote, user)}\\n> "
|
||||
content << text.to_s.strip.gsub(%r{<pre>((.|\s)*?)</pre>}m, '[...]').gsub('"', '\"').gsub(/(\r?\n|\r\n?)/, "\\n> ") + "\\n\\n"
|
||||
# Replaces pre blocks with [...]
|
||||
text = text.to_s.strip.gsub(%r{<pre>((.|\s)*?)</pre>}m, '[...]')
|
||||
content = "#{ll(Setting.default_language, :text_user_wrote, user)}\n> "
|
||||
content << text.gsub(/(\r?\n|\r\n?)/, "\n> ") + "\n\n"
|
||||
|
||||
render(:update) { |page|
|
||||
page.<< "$('notes').value = \"#{content}\";"
|
||||
page.<< "$('notes').value = \"#{escape_javascript content}\";"
|
||||
page.show 'update'
|
||||
page << "Form.Element.focus('notes');"
|
||||
page << "Element.scrollTo('update');"
|
||||
@@ -269,7 +274,7 @@ class IssuesController < ApplicationController
|
||||
:total => @issues.size,
|
||||
:ids => '#' + unsaved_issue_ids.join(', #'))
|
||||
end
|
||||
redirect_to(params[:back_to] || {:controller => 'issues', :action => 'index', :project_id => @project})
|
||||
redirect_back_or_default({:controller => 'issues', :action => 'index', :project_id => @project})
|
||||
return
|
||||
end
|
||||
@available_statuses = Workflow.available_statuses(@project)
|
||||
@@ -278,14 +283,7 @@ class IssuesController < ApplicationController
|
||||
|
||||
def move
|
||||
@copy = params[:copy_options] && params[:copy_options][:copy]
|
||||
@allowed_projects = []
|
||||
# find projects to which the user is allowed to move the issue
|
||||
if User.current.admin?
|
||||
# admin is allowed to move issues to any active (visible) project
|
||||
@allowed_projects = Project.find(:all, :conditions => Project.visible_by(User.current))
|
||||
else
|
||||
User.current.memberships.each {|m| @allowed_projects << m.project if m.roles.detect {|r| r.allowed_to?(:move_issues)}}
|
||||
end
|
||||
@allowed_projects = Issue.allowed_target_projects_on_move
|
||||
@target_project = @allowed_projects.detect {|p| p.id.to_s == params[:new_project_id]} if params[:new_project_id]
|
||||
@target_project ||= @project
|
||||
@trackers = @target_project.trackers
|
||||
@@ -357,6 +355,7 @@ class IssuesController < ApplicationController
|
||||
def gantt
|
||||
@gantt = Redmine::Helpers::Gantt.new(params)
|
||||
retrieve_query
|
||||
@query.group_by = nil
|
||||
if @query.valid?
|
||||
events = []
|
||||
# Issues that have start and due dates
|
||||
@@ -396,6 +395,7 @@ class IssuesController < ApplicationController
|
||||
|
||||
@calendar = Redmine::Helpers::Calendar.new(Date.civil(@year, @month, 1), current_language, :month)
|
||||
retrieve_query
|
||||
@query.group_by = nil
|
||||
if @query.valid?
|
||||
events = []
|
||||
events += @query.issues(:include => [:tracker, :assigned_to, :priority],
|
||||
|
||||
@@ -38,6 +38,7 @@ class MembersController < ApplicationController
|
||||
format.js {
|
||||
render(:update) {|page|
|
||||
page.replace_html "tab-content-members", :partial => 'projects/settings/members'
|
||||
page << 'hideOnLoad()'
|
||||
members.each {|member| page.visual_effect(:highlight, "member-#{member.id}") }
|
||||
}
|
||||
}
|
||||
@@ -51,6 +52,7 @@ class MembersController < ApplicationController
|
||||
format.js {
|
||||
render(:update) {|page|
|
||||
page.replace_html "tab-content-members", :partial => 'projects/settings/members'
|
||||
page << 'hideOnLoad()'
|
||||
page.visual_effect(:highlight, "member-#{@member.id}")
|
||||
}
|
||||
}
|
||||
@@ -64,7 +66,11 @@ class MembersController < ApplicationController
|
||||
end
|
||||
respond_to do |format|
|
||||
format.html { redirect_to :controller => 'projects', :action => 'settings', :tab => 'members', :id => @project }
|
||||
format.js { render(:update) {|page| page.replace_html "tab-content-members", :partial => 'projects/settings/members'} }
|
||||
format.js { render(:update) {|page|
|
||||
page.replace_html "tab-content-members", :partial => 'projects/settings/members'
|
||||
page << 'hideOnLoad()'
|
||||
}
|
||||
}
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
@@ -27,7 +27,7 @@ class ProjectsController < ApplicationController
|
||||
before_filter :authorize, :except => [ :index, :list, :add, :copy, :archive, :unarchive, :destroy, :activity ]
|
||||
before_filter :authorize_global, :only => :add
|
||||
before_filter :require_admin, :only => [ :copy, :archive, :unarchive, :destroy ]
|
||||
accept_key_auth :activity
|
||||
accept_key_auth :activity, :index
|
||||
|
||||
after_filter :only => [:add, :edit, :archive, :unarchive, :destroy] do |controller|
|
||||
if controller.request.post?
|
||||
@@ -102,18 +102,20 @@ class ProjectsController < ApplicationController
|
||||
redirect_to :controller => 'admin', :action => 'projects'
|
||||
end
|
||||
else
|
||||
@project = Project.new(params[:project])
|
||||
@project.enabled_module_names = params[:enabled_modules]
|
||||
if validate_parent_id && @project.copy(@source_project, :only => params[:only])
|
||||
@project.set_allowed_parent!(params[:project]['parent_id']) if params[:project].has_key?('parent_id')
|
||||
flash[:notice] = l(:notice_successful_create)
|
||||
redirect_to :controller => 'admin', :action => 'projects'
|
||||
elsif !@project.new_record?
|
||||
# Project was created
|
||||
# But some objects were not copied due to validation failures
|
||||
# (eg. issues from disabled trackers)
|
||||
# TODO: inform about that
|
||||
redirect_to :controller => 'admin', :action => 'projects'
|
||||
Mailer.with_deliveries(params[:notifications] == '1') do
|
||||
@project = Project.new(params[:project])
|
||||
@project.enabled_module_names = params[:enabled_modules]
|
||||
if validate_parent_id && @project.copy(@source_project, :only => params[:only])
|
||||
@project.set_allowed_parent!(params[:project]['parent_id']) if params[:project].has_key?('parent_id')
|
||||
flash[:notice] = l(:notice_successful_create)
|
||||
redirect_to :controller => 'admin', :action => 'projects'
|
||||
elsif !@project.new_record?
|
||||
# Project was created
|
||||
# But some objects were not copied due to validation failures
|
||||
# (eg. issues from disabled trackers)
|
||||
# TODO: inform about that
|
||||
redirect_to :controller => 'admin', :action => 'projects'
|
||||
end
|
||||
end
|
||||
end
|
||||
rescue ActiveRecord::RecordNotFound
|
||||
@@ -320,13 +322,9 @@ class ProjectsController < ApplicationController
|
||||
@issues_by_version = {}
|
||||
unless @selected_tracker_ids.empty?
|
||||
@versions.each do |version|
|
||||
conditions = {:tracker_id => @selected_tracker_ids}
|
||||
if !@project.versions.include?(version)
|
||||
conditions.merge!(:project_id => project_ids)
|
||||
end
|
||||
issues = version.fixed_issues.visible.find(:all,
|
||||
:include => [:project, :status, :tracker, :priority],
|
||||
:conditions => conditions,
|
||||
:conditions => {:tracker_id => @selected_tracker_ids, :project_id => project_ids},
|
||||
:order => "#{Project.table_name}.lft, #{Tracker.table_name}.position, #{Issue.table_name}.id")
|
||||
@issues_by_version[version] = issues
|
||||
end
|
||||
|
||||
@@ -74,7 +74,7 @@ private
|
||||
|
||||
def find_optional_project
|
||||
@project = Project.find(params[:project_id]) if params[:project_id]
|
||||
User.current.allowed_to?(:save_queries, @project, :global => true)
|
||||
render_403 unless User.current.allowed_to?(:save_queries, @project, :global => true)
|
||||
rescue ActiveRecord::RecordNotFound
|
||||
render_404
|
||||
end
|
||||
|
||||
@@ -49,19 +49,19 @@ class ReportsController < ApplicationController
|
||||
render :template => "reports/issue_report_details"
|
||||
when "assigned_to"
|
||||
@field = "assigned_to_id"
|
||||
@rows = @project.members.collect { |m| m.user }
|
||||
@rows = @project.members.collect { |m| m.user }.sort
|
||||
@data = issues_by_assigned_to
|
||||
@report_title = l(:field_assigned_to)
|
||||
render :template => "reports/issue_report_details"
|
||||
when "author"
|
||||
@field = "author_id"
|
||||
@rows = @project.members.collect { |m| m.user }
|
||||
@rows = @project.members.collect { |m| m.user }.sort
|
||||
@data = issues_by_author
|
||||
@report_title = l(:field_author)
|
||||
render :template => "reports/issue_report_details"
|
||||
when "subproject"
|
||||
@field = "project_id"
|
||||
@rows = @project.descendants.active
|
||||
@rows = @project.descendants.visible
|
||||
@data = issues_by_subproject
|
||||
@report_title = l(:field_subproject)
|
||||
render :template => "reports/issue_report_details"
|
||||
@@ -70,9 +70,9 @@ class ReportsController < ApplicationController
|
||||
@versions = @project.shared_versions.sort
|
||||
@priorities = IssuePriority.all
|
||||
@categories = @project.issue_categories
|
||||
@assignees = @project.members.collect { |m| m.user }
|
||||
@authors = @project.members.collect { |m| m.user }
|
||||
@subprojects = @project.descendants.active
|
||||
@assignees = @project.members.collect { |m| m.user }.sort
|
||||
@authors = @project.members.collect { |m| m.user }.sort
|
||||
@subprojects = @project.descendants.visible
|
||||
issues_by_tracker
|
||||
issues_by_version
|
||||
issues_by_priority
|
||||
|
||||
@@ -62,8 +62,8 @@ class SearchController < ApplicationController
|
||||
# extract tokens from the question
|
||||
# eg. hello "bye bye" => ["hello", "bye bye"]
|
||||
@tokens = @question.scan(%r{((\s|^)"[\s\w]+"(\s|$)|\S+)}).collect {|m| m.first.gsub(%r{(^\s*"\s*|\s*"\s*$)}, '')}
|
||||
# tokens must be at least 3 character long
|
||||
@tokens = @tokens.uniq.select {|w| w.length > 2 }
|
||||
# tokens must be at least 2 characters long
|
||||
@tokens = @tokens.uniq.select {|w| w.length > 1 }
|
||||
|
||||
if !@tokens.empty?
|
||||
# no more than 5 tokens to search for
|
||||
|
||||
@@ -46,11 +46,13 @@ class VersionsController < ApplicationController
|
||||
end
|
||||
|
||||
def destroy
|
||||
@version.destroy
|
||||
redirect_to :controller => 'projects', :action => 'settings', :tab => 'versions', :id => @project
|
||||
rescue
|
||||
flash[:error] = l(:notice_unable_delete_version)
|
||||
redirect_to :controller => 'projects', :action => 'settings', :tab => 'versions', :id => @project
|
||||
if @version.fixed_issues.empty?
|
||||
@version.destroy
|
||||
redirect_to :controller => 'projects', :action => 'settings', :tab => 'versions', :id => @project
|
||||
else
|
||||
flash[:error] = l(:notice_unable_delete_version)
|
||||
redirect_to :controller => 'projects', :action => 'settings', :tab => 'versions', :id => @project
|
||||
end
|
||||
end
|
||||
|
||||
def status_by
|
||||
|
||||
@@ -506,17 +506,17 @@ module ApplicationHelper
|
||||
# Forum messages:
|
||||
# message#1218 -> Link to message with id 1218
|
||||
text = text.gsub(%r{([\s\(,\-\>]|^)(!)?(attachment|document|version|commit|source|export|message)?((#|r)(\d+)|(:)([^"\s<>][^\s<>]*?|"[^"]+?"))(?=(?=[[:punct:]]\W)|,|\s|<|$)}) do |m|
|
||||
leading, esc, prefix, sep, oid = $1, $2, $3, $5 || $7, $6 || $8
|
||||
leading, esc, prefix, sep, identifier = $1, $2, $3, $5 || $7, $6 || $8
|
||||
link = nil
|
||||
if esc.nil?
|
||||
if prefix.nil? && sep == 'r'
|
||||
if project && (changeset = project.changesets.find_by_revision(oid))
|
||||
link = link_to("r#{oid}", {:only_path => only_path, :controller => 'repositories', :action => 'revision', :id => project, :rev => oid},
|
||||
if project && (changeset = project.changesets.find_by_revision(identifier))
|
||||
link = link_to("r#{identifier}", {:only_path => only_path, :controller => 'repositories', :action => 'revision', :id => project, :rev => changeset.revision},
|
||||
:class => 'changeset',
|
||||
:title => truncate_single_line(changeset.comments, :length => 100))
|
||||
end
|
||||
elsif sep == '#'
|
||||
oid = oid.to_i
|
||||
oid = identifier.to_i
|
||||
case prefix
|
||||
when nil
|
||||
if issue = Issue.visible.find_by_id(oid, :include => :status)
|
||||
@@ -547,7 +547,7 @@ module ApplicationHelper
|
||||
end
|
||||
elsif sep == ':'
|
||||
# removes the double quotes if any
|
||||
name = oid.gsub(%r{^"(.*)"$}, "\\1")
|
||||
name = identifier.gsub(%r{^"(.*)"$}, "\\1")
|
||||
case prefix
|
||||
when 'document'
|
||||
if project && document = project.documents.find_by_title(name)
|
||||
@@ -584,7 +584,7 @@ module ApplicationHelper
|
||||
end
|
||||
end
|
||||
end
|
||||
leading + (link || "#{prefix}#{sep}#{oid}")
|
||||
leading + (link || "#{prefix}#{sep}#{identifier}")
|
||||
end
|
||||
|
||||
text
|
||||
|
||||
@@ -91,8 +91,8 @@ module IssuesHelper
|
||||
c = IssueCategory.find_by_id(detail.value) and value = c.name if detail.value
|
||||
c = IssueCategory.find_by_id(detail.old_value) and old_value = c.name if detail.old_value
|
||||
when 'fixed_version_id'
|
||||
v = Version.find_by_id(detail.value) and value = format_version_name(v) if detail.value
|
||||
v = Version.find_by_id(detail.old_value) and old_value = format_version_name(v) if detail.old_value
|
||||
v = Version.find_by_id(detail.value) and value = v.name if detail.value
|
||||
v = Version.find_by_id(detail.old_value) and old_value = v.name if detail.old_value
|
||||
when 'estimated_hours'
|
||||
value = "%0.02f" % detail.value.to_f unless detail.value.blank?
|
||||
old_value = "%0.02f" % detail.old_value.to_f unless detail.old_value.blank?
|
||||
|
||||
@@ -52,17 +52,19 @@ module RepositoriesHelper
|
||||
else
|
||||
change
|
||||
end
|
||||
end.compact
|
||||
end.compact
|
||||
|
||||
tree = { }
|
||||
changes.each do |change|
|
||||
p = tree
|
||||
dirs = change.path.to_s.split('/').select {|d| !d.blank?}
|
||||
path = ''
|
||||
dirs.each do |dir|
|
||||
path += '/' + dir
|
||||
p[:s] ||= {}
|
||||
p = p[:s]
|
||||
p[dir] ||= {}
|
||||
p = p[dir]
|
||||
p[path] ||= {}
|
||||
p = p[path]
|
||||
end
|
||||
p[:c] = change
|
||||
end
|
||||
@@ -76,21 +78,26 @@ module RepositoriesHelper
|
||||
output = ''
|
||||
output << '<ul>'
|
||||
tree.keys.sort.each do |file|
|
||||
s = !tree[file][:s].nil?
|
||||
c = tree[file][:c]
|
||||
|
||||
style = 'change'
|
||||
style << ' folder' if s
|
||||
style << " change-#{c.action}" if c
|
||||
|
||||
text = h(file)
|
||||
unless c.nil?
|
||||
text = File.basename(h(file))
|
||||
if s = tree[file][:s]
|
||||
style << ' folder'
|
||||
path_param = to_path_param(@repository.relative_path(file))
|
||||
text = link_to(text, :controller => 'repositories',
|
||||
:action => 'show',
|
||||
:id => @project,
|
||||
:path => path_param,
|
||||
:rev => @changeset.revision)
|
||||
output << "<li class='#{style}'>#{text}</li>"
|
||||
output << render_changes_tree(s)
|
||||
elsif c = tree[file][:c]
|
||||
style << " change-#{c.action}"
|
||||
path_param = to_path_param(@repository.relative_path(c.path))
|
||||
text = link_to(text, :controller => 'repositories',
|
||||
:action => 'entry',
|
||||
:id => @project,
|
||||
:path => path_param,
|
||||
:rev => @changeset.revision) unless s || c.action == 'D'
|
||||
:rev => @changeset.revision) unless c.action == 'D'
|
||||
text << " - #{c.revision}" unless c.revision.blank?
|
||||
text << ' (' + link_to('diff', :controller => 'repositories',
|
||||
:action => 'diff',
|
||||
@@ -98,9 +105,8 @@ module RepositoriesHelper
|
||||
:path => path_param,
|
||||
:rev => @changeset.revision) + ') ' if c.action == 'M'
|
||||
text << ' ' + content_tag('span', c.from_path, :class => 'copied-from') unless c.from_path.blank?
|
||||
output << "<li class='#{style}'>#{text}</li>"
|
||||
end
|
||||
output << "<li class='#{style}'>#{text}</li>"
|
||||
output << render_changes_tree(tree[file][:s]) if s
|
||||
end
|
||||
output << '</ul>'
|
||||
output
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
# Redmine - project management software
|
||||
# Copyright (C) 2006-2008 Jean-Philippe Lang
|
||||
# Copyright (C) 2006-2010 Jean-Philippe Lang
|
||||
#
|
||||
# This program is free software; you can redistribute it and/or
|
||||
# modify it under the terms of the GNU General Public License
|
||||
@@ -41,6 +41,9 @@ class Changeset < ActiveRecord::Base
|
||||
validates_uniqueness_of :revision, :scope => :repository_id
|
||||
validates_uniqueness_of :scmid, :scope => :repository_id, :allow_nil => true
|
||||
|
||||
named_scope :visible, lambda {|*args| { :include => {:repository => :project},
|
||||
:conditions => Project.allowed_to_condition(args.first || User.current, :view_changesets) } }
|
||||
|
||||
def revision=(r)
|
||||
write_attribute :revision, (r.nil? ? nil : r.to_s)
|
||||
end
|
||||
@@ -54,6 +57,10 @@ class Changeset < ActiveRecord::Base
|
||||
super
|
||||
end
|
||||
|
||||
def committer=(arg)
|
||||
write_attribute(:committer, self.class.to_utf8(arg.to_s))
|
||||
end
|
||||
|
||||
def project
|
||||
repository.project
|
||||
end
|
||||
@@ -77,9 +84,6 @@ class Changeset < ActiveRecord::Base
|
||||
ref_keywords = Setting.commit_ref_keywords.downcase.split(",").collect(&:strip)
|
||||
# keywords used to fix issues
|
||||
fix_keywords = Setting.commit_fix_keywords.downcase.split(",").collect(&:strip)
|
||||
# status and optional done ratio applied
|
||||
fix_status = IssueStatus.find_by_id(Setting.commit_fix_status_id)
|
||||
done_ratio = Setting.commit_fix_done_ratio.blank? ? nil : Setting.commit_fix_done_ratio.to_i
|
||||
|
||||
kw_regexp = (ref_keywords + fix_keywords).collect{|kw| Regexp.escape(kw)}.join("|")
|
||||
return if kw_regexp.blank?
|
||||
@@ -90,14 +94,14 @@ class Changeset < ActiveRecord::Base
|
||||
# find any issue ID in the comments
|
||||
target_issue_ids = []
|
||||
comments.scan(%r{([\s\(\[,-]|^)#(\d+)(?=[[:punct:]]|\s|<|$)}).each { |m| target_issue_ids << m[1] }
|
||||
referenced_issues += repository.project.issues.find_all_by_id(target_issue_ids)
|
||||
referenced_issues += find_referenced_issues_by_id(target_issue_ids)
|
||||
end
|
||||
|
||||
comments.scan(Regexp.new("(#{kw_regexp})[\s:]+(([\s,;&]*#?\\d+)+)", Regexp::IGNORECASE)).each do |match|
|
||||
action = match[0]
|
||||
target_issue_ids = match[1].scan(/\d+/)
|
||||
target_issues = repository.project.issues.find_all_by_id(target_issue_ids)
|
||||
if fix_status && fix_keywords.include?(action.downcase)
|
||||
target_issues = find_referenced_issues_by_id(target_issue_ids)
|
||||
if fix_keywords.include?(action.downcase) && fix_status = IssueStatus.find_by_id(Setting.commit_fix_status_id)
|
||||
# update status of issues
|
||||
logger.debug "Issues fixed by changeset #{self.revision}: #{issue_ids.join(', ')}." if logger && logger.debug?
|
||||
target_issues.each do |issue|
|
||||
@@ -111,7 +115,9 @@ class Changeset < ActiveRecord::Base
|
||||
end
|
||||
journal = issue.init_journal(user || User.anonymous, ll(Setting.default_language, :text_status_changed_by_changeset, csettext))
|
||||
issue.status = fix_status
|
||||
issue.done_ratio = done_ratio if done_ratio
|
||||
unless Setting.commit_fix_done_ratio.blank?
|
||||
issue.done_ratio = Setting.commit_fix_done_ratio.to_i
|
||||
end
|
||||
Redmine::Hook.call_hook(:model_changeset_scan_commit_for_issue_ids_pre_issue_update,
|
||||
{ :changeset => self, :issue => issue })
|
||||
issue.save
|
||||
@@ -120,7 +126,8 @@ class Changeset < ActiveRecord::Base
|
||||
referenced_issues += target_issues
|
||||
end
|
||||
|
||||
self.issues = referenced_issues.uniq
|
||||
referenced_issues.uniq!
|
||||
self.issues = referenced_issues unless referenced_issues.empty?
|
||||
end
|
||||
|
||||
def short_comments
|
||||
@@ -148,6 +155,15 @@ class Changeset < ActiveRecord::Base
|
||||
|
||||
private
|
||||
|
||||
# Finds issues that can be referenced by the commit message
|
||||
# i.e. issues that belong to the repository project, a subproject or a parent project
|
||||
def find_referenced_issues_by_id(ids)
|
||||
return [] if ids.compact.empty?
|
||||
Issue.find_all_by_id(ids, :include => :project).select {|issue|
|
||||
project == issue.project || project.is_ancestor_of?(issue.project) || project.is_descendant_of?(issue.project)
|
||||
}
|
||||
end
|
||||
|
||||
def split_comments
|
||||
comments =~ /\A(.+?)\r?\n(.*)$/m
|
||||
@short_comments = $1 || comments
|
||||
@@ -160,11 +176,17 @@ class Changeset < ActiveRecord::Base
|
||||
encoding = Setting.commit_logs_encoding.to_s.strip
|
||||
unless encoding.blank? || encoding == 'UTF-8'
|
||||
begin
|
||||
return Iconv.conv('UTF-8', encoding, str)
|
||||
str = Iconv.conv('UTF-8', encoding, str)
|
||||
rescue Iconv::Failure
|
||||
# do nothing here
|
||||
end
|
||||
end
|
||||
str
|
||||
# removes invalid UTF8 sequences
|
||||
begin
|
||||
Iconv.conv('UTF-8//IGNORE', 'UTF-8', str + ' ')[0..-3]
|
||||
rescue Iconv::InvalidEncoding
|
||||
# "UTF-8//IGNORE" is not supported on some OS
|
||||
str
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
@@ -80,7 +80,7 @@ class Issue < ActiveRecord::Base
|
||||
end
|
||||
|
||||
def copy_from(arg)
|
||||
issue = arg.is_a?(Issue) ? arg : Issue.find(arg)
|
||||
issue = arg.is_a?(Issue) ? arg : Issue.visible.find(arg)
|
||||
self.attributes = issue.attributes.dup.except("id", "created_on", "updated_on")
|
||||
self.custom_values = issue.custom_values.collect {|v| v.clone}
|
||||
self.status = issue.status
|
||||
@@ -92,7 +92,7 @@ class Issue < ActiveRecord::Base
|
||||
def move_to(new_project, new_tracker = nil, options = {})
|
||||
options ||= {}
|
||||
issue = options[:copy] ? self.clone : self
|
||||
transaction do
|
||||
ret = Issue.transaction do
|
||||
if new_project && issue.project_id != new_project.id
|
||||
# delete issue relations
|
||||
unless Setting.cross_project_issue_relations?
|
||||
@@ -129,12 +129,12 @@ class Issue < ActiveRecord::Base
|
||||
# Manually update project_id on related time entries
|
||||
TimeEntry.update_all("project_id = #{new_project.id}", {:issue_id => id})
|
||||
end
|
||||
true
|
||||
else
|
||||
Issue.connection.rollback_db_transaction
|
||||
return false
|
||||
raise ActiveRecord::Rollback
|
||||
end
|
||||
end
|
||||
return issue
|
||||
ret ? issue : false
|
||||
end
|
||||
|
||||
def priority_id=(pid)
|
||||
@@ -159,7 +159,8 @@ class Issue < ActiveRecord::Base
|
||||
end
|
||||
send :attributes_without_tracker_first=, new_attributes, *args
|
||||
end
|
||||
alias_method_chain :attributes=, :tracker_first
|
||||
# Do not redefine alias chain on reload (see #4838)
|
||||
alias_method_chain(:attributes=, :tracker_first) unless method_defined?(:attributes_without_tracker_first=)
|
||||
|
||||
def estimated_hours=(h)
|
||||
write_attribute :estimated_hours, (h.is_a?(String) ? h.to_hours : h)
|
||||
@@ -388,6 +389,22 @@ class Issue < ActiveRecord::Base
|
||||
Issue.update_versions(["#{Version.table_name}.project_id IN (?) OR #{Issue.table_name}.project_id IN (?)", moved_project_ids, moved_project_ids])
|
||||
end
|
||||
|
||||
# Returns an array of projects that current user can move issues to
|
||||
def self.allowed_target_projects_on_move
|
||||
projects = []
|
||||
if User.current.admin?
|
||||
# admin is allowed to move issues to any active (visible) project
|
||||
projects = Project.visible.all
|
||||
elsif User.current.logged?
|
||||
if Role.non_member.allowed_to?(:move_issues)
|
||||
projects = Project.visible.all
|
||||
else
|
||||
User.current.memberships.each {|m| projects << m.project if m.roles.detect {|r| r.allowed_to?(:move_issues)}}
|
||||
end
|
||||
end
|
||||
projects
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
# Update issues so their versions are not pointing to a
|
||||
|
||||
@@ -49,7 +49,7 @@ class MailHandler < ActionMailer::Base
|
||||
logger.info "MailHandler: ignoring email from Redmine emission address [#{sender_email}]" if logger && logger.info
|
||||
return false
|
||||
end
|
||||
@user = User.find_by_mail(sender_email)
|
||||
@user = User.find_by_mail(sender_email) if sender_email.present?
|
||||
if @user && !@user.active?
|
||||
logger.info "MailHandler: ignoring email from non-active user [#{@user.login}]" if logger && logger.info
|
||||
return false
|
||||
|
||||
@@ -114,11 +114,11 @@ class Mailer < ActionMailer::Base
|
||||
when 'Project'
|
||||
added_to_url = url_for(:controller => 'projects', :action => 'list_files', :id => container)
|
||||
added_to = "#{l(:label_project)}: #{container}"
|
||||
recipients container.project.notified_users.select {|user| user.allowed_to?(:view_files, container.project)}
|
||||
recipients container.project.notified_users.select {|user| user.allowed_to?(:view_files, container.project)}.collect {|u| u.mail}
|
||||
when 'Version'
|
||||
added_to_url = url_for(:controller => 'projects', :action => 'list_files', :id => container.project_id)
|
||||
added_to = "#{l(:label_version)}: #{container.name}"
|
||||
recipients container.project.notified_users.select {|user| user.allowed_to?(:view_files, container.project)}
|
||||
recipients container.project.notified_users.select {|user| user.allowed_to?(:view_files, container.project)}.collect {|u| u.mail}
|
||||
when 'Document'
|
||||
added_to_url = url_for(:controller => 'documents', :action => 'show', :id => container.id)
|
||||
added_to = "#{l(:label_document)}: #{container.title}"
|
||||
@@ -272,6 +272,7 @@ class Mailer < ActionMailer::Base
|
||||
# Overrides default deliver! method to prevent from sending an email
|
||||
# with no recipient, cc or bcc
|
||||
def deliver!(mail = @mail)
|
||||
set_language_if_valid @initial_language
|
||||
return false if (recipients.nil? || recipients.empty?) &&
|
||||
(cc.nil? || cc.empty?) &&
|
||||
(bcc.nil? || bcc.empty?)
|
||||
@@ -309,10 +310,20 @@ class Mailer < ActionMailer::Base
|
||||
deliver_reminder(assignee, issues, days) unless assignee.nil?
|
||||
end
|
||||
end
|
||||
|
||||
# Activates/desactivates email deliveries during +block+
|
||||
def self.with_deliveries(enabled = true, &block)
|
||||
was_enabled = ActionMailer::Base.perform_deliveries
|
||||
ActionMailer::Base.perform_deliveries = !!enabled
|
||||
yield
|
||||
ensure
|
||||
ActionMailer::Base.perform_deliveries = was_enabled
|
||||
end
|
||||
|
||||
private
|
||||
def initialize_defaults(method_name)
|
||||
super
|
||||
@initial_language = current_language
|
||||
set_language_if_valid Setting.default_language
|
||||
from Setting.mail_from
|
||||
|
||||
|
||||
@@ -16,7 +16,7 @@
|
||||
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||
|
||||
class Principal < ActiveRecord::Base
|
||||
set_table_name 'users'
|
||||
set_table_name "#{table_name_prefix}users#{table_name_suffix}"
|
||||
|
||||
has_many :members, :foreign_key => 'user_id', :dependent => :destroy
|
||||
has_many :memberships, :class_name => 'Member', :foreign_key => 'user_id', :include => [ :project, :roles ], :conditions => "#{Project.table_name}.status=#{Project::STATUS_ACTIVE}", :order => "#{Project.table_name}.name"
|
||||
@@ -32,6 +32,8 @@ class Principal < ActiveRecord::Base
|
||||
}
|
||||
}
|
||||
|
||||
before_create :set_default_empty_values
|
||||
|
||||
def <=>(principal)
|
||||
if self.class.name == principal.class.name
|
||||
self.to_s.downcase <=> principal.to_s.downcase
|
||||
@@ -40,4 +42,16 @@ class Principal < ActiveRecord::Base
|
||||
principal.class.name <=> self.class.name
|
||||
end
|
||||
end
|
||||
|
||||
protected
|
||||
|
||||
# Make sure we don't try to insert NULL values (see #4632)
|
||||
def set_default_empty_values
|
||||
self.login ||= ''
|
||||
self.hashed_password ||= ''
|
||||
self.firstname ||= ''
|
||||
self.lastname ||= ''
|
||||
self.mail ||= ''
|
||||
true
|
||||
end
|
||||
end
|
||||
|
||||
@@ -51,12 +51,12 @@ class Project < ActiveRecord::Base
|
||||
:join_table => "#{table_name_prefix}custom_fields_projects#{table_name_suffix}",
|
||||
:association_foreign_key => 'custom_field_id'
|
||||
|
||||
acts_as_nested_set :order => 'name', :dependent => :destroy
|
||||
acts_as_nested_set :order => 'name'
|
||||
acts_as_attachable :view_permission => :view_files,
|
||||
:delete_permission => :manage_files
|
||||
|
||||
acts_as_customizable
|
||||
acts_as_searchable :columns => ['name', 'description'], :project_key => 'id', :permission => nil
|
||||
acts_as_searchable :columns => ['name', 'identifier', 'description'], :project_key => 'id', :permission => nil
|
||||
acts_as_event :title => Proc.new {|o| "#{l(:label_project)}: #{o.name}"},
|
||||
:url => Proc.new {|o| {:controller => 'projects', :action => 'show', :id => o.id}},
|
||||
:author => nil
|
||||
@@ -74,7 +74,7 @@ class Project < ActiveRecord::Base
|
||||
# reserved words
|
||||
validates_exclusion_of :identifier, :in => %w( new )
|
||||
|
||||
before_destroy :delete_all_members
|
||||
before_destroy :delete_all_members, :destroy_children
|
||||
|
||||
named_scope :has_module, lambda { |mod| { :conditions => ["#{Project.table_name}.id IN (SELECT em.project_id FROM #{EnabledModule.table_name} em WHERE em.name=?)", mod.to_s] } }
|
||||
named_scope :active, { :conditions => "#{Project.table_name}.status = #{STATUS_ACTIVE}"}
|
||||
@@ -249,7 +249,7 @@ class Project < ActiveRecord::Base
|
||||
return @allowed_parents if @allowed_parents
|
||||
@allowed_parents = Project.find(:all, :conditions => Project.allowed_to_condition(User.current, :add_subprojects))
|
||||
@allowed_parents = @allowed_parents - self_and_descendants
|
||||
if User.current.allowed_to?(:add_project, nil, :global => true)
|
||||
if User.current.allowed_to?(:add_project, nil, :global => true) || (!new_record? && parent.nil?)
|
||||
@allowed_parents << nil
|
||||
end
|
||||
unless parent.nil? || @allowed_parents.empty? || @allowed_parents.include?(parent)
|
||||
@@ -499,17 +499,36 @@ class Project < ActiveRecord::Base
|
||||
|
||||
private
|
||||
|
||||
# Destroys children before destroying self
|
||||
def destroy_children
|
||||
children.each do |child|
|
||||
child.destroy
|
||||
end
|
||||
end
|
||||
|
||||
# Copies wiki from +project+
|
||||
def copy_wiki(project)
|
||||
# Check that the source project has a wiki first
|
||||
unless project.wiki.nil?
|
||||
self.wiki ||= Wiki.new
|
||||
wiki.attributes = project.wiki.attributes.dup.except("id", "project_id")
|
||||
wiki_pages_map = {}
|
||||
project.wiki.pages.each do |page|
|
||||
# Skip pages without content
|
||||
next if page.content.nil?
|
||||
new_wiki_content = WikiContent.new(page.content.attributes.dup.except("id", "page_id", "updated_on"))
|
||||
new_wiki_page = WikiPage.new(page.attributes.dup.except("id", "wiki_id", "created_on", "parent_id"))
|
||||
new_wiki_page.content = new_wiki_content
|
||||
wiki.pages << new_wiki_page
|
||||
wiki_pages_map[page.id] = new_wiki_page
|
||||
end
|
||||
wiki.save
|
||||
# Reproduce page hierarchy
|
||||
project.wiki.pages.each do |page|
|
||||
if page.parent_id && wiki_pages_map[page.id]
|
||||
wiki_pages_map[page.id].parent = wiki_pages_map[page.parent_id]
|
||||
wiki_pages_map[page.id].save
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
@@ -210,6 +210,10 @@ class Query < ActiveRecord::Base
|
||||
add_custom_fields_filters(@project.all_issue_custom_fields)
|
||||
else
|
||||
# global filters for cross project issue list
|
||||
system_shared_versions = Version.visible.find_all_by_sharing('system')
|
||||
unless system_shared_versions.empty?
|
||||
@available_filters["fixed_version_id"] = { :type => :list_optional, :order => 7, :values => system_shared_versions.sort.collect{|s| ["#{s.project.name} - #{s.name}", s.id.to_s] } }
|
||||
end
|
||||
add_custom_fields_filters(IssueCustomField.find(:all, :conditions => {:is_filter => true, :is_for_all => true}))
|
||||
end
|
||||
@available_filters
|
||||
|
||||
@@ -136,6 +136,7 @@ class Repository < ActiveRecord::Base
|
||||
end
|
||||
end
|
||||
@committers = nil
|
||||
@found_committer_users = nil
|
||||
true
|
||||
else
|
||||
false
|
||||
@@ -146,24 +147,34 @@ class Repository < ActiveRecord::Base
|
||||
# It will return nil if the committer is not yet mapped and if no User
|
||||
# with the same username or email was found
|
||||
def find_committer_user(committer)
|
||||
if committer
|
||||
unless committer.blank?
|
||||
@found_committer_users ||= {}
|
||||
return @found_committer_users[committer] if @found_committer_users.has_key?(committer)
|
||||
|
||||
user = nil
|
||||
c = changesets.find(:first, :conditions => {:committer => committer}, :include => :user)
|
||||
if c && c.user
|
||||
c.user
|
||||
user = c.user
|
||||
elsif committer.strip =~ /^([^<]+)(<(.*)>)?$/
|
||||
username, email = $1.strip, $3
|
||||
u = User.find_by_login(username)
|
||||
u ||= User.find_by_mail(email) unless email.blank?
|
||||
u
|
||||
user = u
|
||||
end
|
||||
@found_committer_users[committer] = user
|
||||
user
|
||||
end
|
||||
end
|
||||
|
||||
# fetch new changesets for all repositories
|
||||
# can be called periodically by an external script
|
||||
# Fetches new changesets for all repositories of active projects
|
||||
# Can be called periodically by an external script
|
||||
# eg. ruby script/runner "Repository.fetch_changesets"
|
||||
def self.fetch_changesets
|
||||
find(:all).each(&:fetch_changesets)
|
||||
Project.active.has_module(:repository).find(:all, :include => :repository).each do |project|
|
||||
if project.repository
|
||||
project.repository.fetch_changesets
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
# scan changeset comments to find related and fixed issues for all repositories
|
||||
|
||||
@@ -40,23 +40,26 @@ class Repository::Git < Repository
|
||||
# With SCM's that have a sequential commit numbering, redmine is able to be
|
||||
# clever and only fetch changesets going forward from the most recent one
|
||||
# it knows about. However, with git, you never know if people have merged
|
||||
# commits into the middle of the repository history, so we always have to
|
||||
# parse the entire log.
|
||||
# commits into the middle of the repository history, so we should parse
|
||||
# the entire log. Since it's way too slow for large repositories, we only
|
||||
# parse 1 week before the last known commit.
|
||||
# The repository can still be fully reloaded by calling #clear_changesets
|
||||
# before fetching changesets (eg. for offline resync)
|
||||
def fetch_changesets
|
||||
# Save ourselves an expensive operation if we're already up to date
|
||||
return if scm.num_revisions == changesets.count
|
||||
c = changesets.find(:first, :order => 'committed_on DESC')
|
||||
since = (c ? c.committed_on - 7.days : nil)
|
||||
|
||||
revisions = scm.revisions('', nil, nil, :all => true)
|
||||
revisions = scm.revisions('', nil, nil, :all => true, :since => since)
|
||||
return if revisions.nil? || revisions.empty?
|
||||
|
||||
# Find revisions that redmine knows about already
|
||||
existing_revisions = changesets.find(:all).map!{|c| c.scmid}
|
||||
recent_changesets = changesets.find(:all, :conditions => ['committed_on >= ?', since])
|
||||
|
||||
# Clean out revisions that are no longer in git
|
||||
Changeset.delete_all(["scmid NOT IN (?) AND repository_id = (?)", revisions.map{|r| r.scmid}, self.id])
|
||||
recent_changesets.each {|c| c.destroy unless revisions.detect {|r| r.scmid.to_s == c.scmid.to_s }}
|
||||
|
||||
# Subtract revisions that redmine already knows about
|
||||
revisions.reject!{|r| existing_revisions.include?(r.scmid)}
|
||||
recent_revisions = recent_changesets.map{|c| c.scmid}
|
||||
revisions.reject!{|r| recent_revisions.include?(r.scmid)}
|
||||
|
||||
# Save the remaining ones to the database
|
||||
revisions.each{|r| r.save(self)} unless revisions.nil?
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
# redMine - project management software
|
||||
# Copyright (C) 2006 Jean-Philippe Lang
|
||||
# Redmine - project management software
|
||||
# Copyright (C) 2006-2010 Jean-Philippe Lang
|
||||
#
|
||||
# This program is free software; you can redistribute it and/or
|
||||
# modify it under the terms of the GNU General Public License
|
||||
@@ -16,10 +16,9 @@
|
||||
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||
|
||||
class Version < ActiveRecord::Base
|
||||
before_destroy :check_integrity
|
||||
after_update :update_issues_from_sharing_change
|
||||
belongs_to :project
|
||||
has_many :fixed_issues, :class_name => 'Issue', :foreign_key => 'fixed_version_id'
|
||||
has_many :fixed_issues, :class_name => 'Issue', :foreign_key => 'fixed_version_id', :dependent => :nullify
|
||||
acts_as_customizable
|
||||
acts_as_attachable :view_permission => :view_files,
|
||||
:delete_permission => :manage_files
|
||||
@@ -155,10 +154,7 @@ class Version < ActiveRecord::Base
|
||||
end
|
||||
end
|
||||
|
||||
private
|
||||
def check_integrity
|
||||
raise "Can't delete version" if self.fixed_issues.find(:first)
|
||||
end
|
||||
private
|
||||
|
||||
# Update the issue's fixed versions. Used if a version's sharing changes.
|
||||
def update_issues_from_sharing_change
|
||||
|
||||
@@ -1,3 +1,4 @@
|
||||
<%= call_hook :view_account_login_top %>
|
||||
<div id="login-form">
|
||||
<% form_tag({:action=> "login"}) do %>
|
||||
<%= back_url_hidden_field_tag %>
|
||||
@@ -38,3 +39,4 @@
|
||||
<%= javascript_tag "Form.Element.focus('username');" %>
|
||||
<% end %>
|
||||
</div>
|
||||
<%= call_hook :view_account_login_bottom %>
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
<div class="box tabular">
|
||||
<p><label for="new_password"><%=l(:field_new_password)%> <span class="required">*</span></label>
|
||||
<%= password_field_tag 'new_password', nil, :size => 25 %><br />
|
||||
<em><%= l(:text_caracters_minimum, 4) %></em></p>
|
||||
<em><%= l(:text_caracters_minimum, :count => Setting.password_min_length) %></em></p>
|
||||
|
||||
<p><label for="new_password_confirmation"><%=l(:field_password_confirmation)%> <span class="required">*</span></label>
|
||||
<%= password_field_tag 'new_password_confirmation', nil, :size => 25 %></p>
|
||||
|
||||
@@ -15,6 +15,7 @@
|
||||
<% end %>
|
||||
|
||||
|
||||
<div class="autoscroll">
|
||||
<table class="list">
|
||||
<thead><tr>
|
||||
<th><%=l(:label_project)%></th>
|
||||
@@ -40,5 +41,6 @@
|
||||
<% end %>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
|
||||
<% html_title(l(:label_project_plural)) -%>
|
||||
|
||||
@@ -26,3 +26,7 @@
|
||||
<% end %>
|
||||
|
||||
<% html_title @document.title -%>
|
||||
|
||||
<% content_for :header_tags do %>
|
||||
<%= stylesheet_link_tag 'scm' %>
|
||||
<% end %>
|
||||
|
||||
@@ -29,7 +29,7 @@
|
||||
<% remote_form_for(:group, @group, :url => {:controller => 'groups', :action => 'add_users', :id => @group}, :method => :post) do |f| %>
|
||||
<fieldset><legend><%=l(:label_user_new)%></legend>
|
||||
|
||||
<p><%= text_field_tag 'user_search', nil, :size => "40" %></p>
|
||||
<p><%= text_field_tag 'user_search', nil %></p>
|
||||
<%= observe_field(:user_search,
|
||||
:frequency => 0.5,
|
||||
:update => :users,
|
||||
|
||||
@@ -1,7 +1,5 @@
|
||||
<h2><%= link_to l(:label_group_plural), groups_path %> » <%= l(:label_group_new) %></h2>
|
||||
|
||||
<%= error_messages_for :group %>
|
||||
|
||||
<% form_for(@group, :builder => TabularFormBuilder, :lang => current_language) do |f| %>
|
||||
<%= render :partial => 'form', :locals => { :f => f } %>
|
||||
<p><%= f.submit l(:button_create) %></p>
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
<% form_tag({}) do -%>
|
||||
<%= hidden_field_tag 'back_url', url_for(params) %>
|
||||
<div class="autoscroll">
|
||||
<table class="list issues">
|
||||
<thead><tr>
|
||||
<th><%= link_to image_tag('toggle_check.png'), {}, :onclick => 'toggleIssuesSelection(Element.up(this, "form")); return false;',
|
||||
@@ -25,10 +26,11 @@
|
||||
<% end %>
|
||||
<tr id="issue-<%= issue.id %>" class="hascontextmenu <%= cycle('odd', 'even') %> <%= issue.css_classes %>">
|
||||
<td class="checkbox"><%= check_box_tag("ids[]", issue.id, false, :id => nil) %></td>
|
||||
<td><%= link_to issue.id, :controller => 'issues', :action => 'show', :id => issue %></td>
|
||||
<td class="id"><%= link_to issue.id, :controller => 'issues', :action => 'show', :id => issue %></td>
|
||||
<% query.columns.each do |column| %><%= content_tag 'td', column_content(column, issue), :class => column.name %><% end %>
|
||||
</tr>
|
||||
<% end -%>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
<% end -%>
|
||||
|
||||
@@ -8,7 +8,7 @@
|
||||
<a href="#" class="submenu" onclick="return false;"><%= l(:field_status) %></a>
|
||||
<ul>
|
||||
<% @statuses.each do |s| -%>
|
||||
<li><%= context_menu_link s.name, {:controller => 'issues', :action => 'edit', :id => @issue, :issue => {:status_id => s}, :back_to => @back}, :method => :post,
|
||||
<li><%= context_menu_link s.name, {:controller => 'issues', :action => 'edit', :id => @issue, :issue => {:status_id => s}, :back_url => @back}, :method => :post,
|
||||
:selected => (s == @issue.status), :disabled => !(@can[:update] && @allowed_statuses.include?(s)) %></li>
|
||||
<% end -%>
|
||||
</ul>
|
||||
@@ -23,7 +23,7 @@
|
||||
<a href="#" class="submenu"><%= l(:field_tracker) %></a>
|
||||
<ul>
|
||||
<% @trackers.each do |t| -%>
|
||||
<li><%= context_menu_link t.name, {:controller => 'issues', :action => 'bulk_edit', :ids => @issues.collect(&:id), 'tracker_id' => t, :back_to => @back}, :method => :post,
|
||||
<li><%= context_menu_link t.name, {:controller => 'issues', :action => 'bulk_edit', :ids => @issues.collect(&:id), 'tracker_id' => t, :back_url => @back}, :method => :post,
|
||||
:selected => (@issue && t == @issue.tracker), :disabled => !@can[:edit] %></li>
|
||||
<% end -%>
|
||||
</ul>
|
||||
@@ -33,7 +33,7 @@
|
||||
<a href="#" class="submenu"><%= l(:field_priority) %></a>
|
||||
<ul>
|
||||
<% @priorities.each do |p| -%>
|
||||
<li><%= context_menu_link p.name, {:controller => 'issues', :action => 'bulk_edit', :ids => @issues.collect(&:id), 'priority_id' => p, :back_to => @back}, :method => :post,
|
||||
<li><%= context_menu_link p.name, {:controller => 'issues', :action => 'bulk_edit', :ids => @issues.collect(&:id), 'priority_id' => p, :back_url => @back}, :method => :post,
|
||||
:selected => (@issue && p == @issue.priority), :disabled => !@can[:edit] %></li>
|
||||
<% end -%>
|
||||
</ul>
|
||||
@@ -43,10 +43,10 @@
|
||||
<a href="#" class="submenu"><%= l(:field_fixed_version) %></a>
|
||||
<ul>
|
||||
<% @project.shared_versions.open.sort.each do |v| -%>
|
||||
<li><%= context_menu_link format_version_name(v), {:controller => 'issues', :action => 'bulk_edit', :ids => @issues.collect(&:id), 'fixed_version_id' => v, :back_to => @back}, :method => :post,
|
||||
<li><%= context_menu_link format_version_name(v), {:controller => 'issues', :action => 'bulk_edit', :ids => @issues.collect(&:id), 'fixed_version_id' => v, :back_url => @back}, :method => :post,
|
||||
:selected => (@issue && v == @issue.fixed_version), :disabled => !@can[:update] %></li>
|
||||
<% end -%>
|
||||
<li><%= context_menu_link l(:label_none), {:controller => 'issues', :action => 'bulk_edit', :ids => @issues.collect(&:id), 'fixed_version_id' => 'none', :back_to => @back}, :method => :post,
|
||||
<li><%= context_menu_link l(:label_none), {:controller => 'issues', :action => 'bulk_edit', :ids => @issues.collect(&:id), 'fixed_version_id' => 'none', :back_url => @back}, :method => :post,
|
||||
:selected => (@issue && @issue.fixed_version.nil?), :disabled => !@can[:update] %></li>
|
||||
</ul>
|
||||
</li>
|
||||
@@ -56,10 +56,10 @@
|
||||
<a href="#" class="submenu"><%= l(:field_assigned_to) %></a>
|
||||
<ul>
|
||||
<% @assignables.each do |u| -%>
|
||||
<li><%= context_menu_link u.name, {:controller => 'issues', :action => 'bulk_edit', :ids => @issues.collect(&:id), 'assigned_to_id' => u, :back_to => @back}, :method => :post,
|
||||
<li><%= context_menu_link u.name, {:controller => 'issues', :action => 'bulk_edit', :ids => @issues.collect(&:id), 'assigned_to_id' => u, :back_url => @back}, :method => :post,
|
||||
:selected => (@issue && u == @issue.assigned_to), :disabled => !@can[:update] %></li>
|
||||
<% end -%>
|
||||
<li><%= context_menu_link l(:label_nobody), {:controller => 'issues', :action => 'bulk_edit', :ids => @issues.collect(&:id), 'assigned_to_id' => 'none', :back_to => @back}, :method => :post,
|
||||
<li><%= context_menu_link l(:label_nobody), {:controller => 'issues', :action => 'bulk_edit', :ids => @issues.collect(&:id), 'assigned_to_id' => 'none', :back_url => @back}, :method => :post,
|
||||
:selected => (@issue && @issue.assigned_to.nil?), :disabled => !@can[:update] %></li>
|
||||
</ul>
|
||||
</li>
|
||||
@@ -69,10 +69,10 @@
|
||||
<a href="#" class="submenu"><%= l(:field_category) %></a>
|
||||
<ul>
|
||||
<% @project.issue_categories.each do |u| -%>
|
||||
<li><%= context_menu_link u.name, {:controller => 'issues', :action => 'bulk_edit', :ids => @issues.collect(&:id), 'category_id' => u, :back_to => @back}, :method => :post,
|
||||
<li><%= context_menu_link u.name, {:controller => 'issues', :action => 'bulk_edit', :ids => @issues.collect(&:id), 'category_id' => u, :back_url => @back}, :method => :post,
|
||||
:selected => (@issue && u == @issue.category), :disabled => !@can[:update] %></li>
|
||||
<% end -%>
|
||||
<li><%= context_menu_link l(:label_none), {:controller => 'issues', :action => 'bulk_edit', :ids => @issues.collect(&:id), 'category_id' => 'none', :back_to => @back}, :method => :post,
|
||||
<li><%= context_menu_link l(:label_none), {:controller => 'issues', :action => 'bulk_edit', :ids => @issues.collect(&:id), 'category_id' => 'none', :back_url => @back}, :method => :post,
|
||||
:selected => (@issue && @issue.category.nil?), :disabled => !@can[:update] %></li>
|
||||
</ul>
|
||||
</li>
|
||||
@@ -82,7 +82,7 @@
|
||||
<a href="#" class="submenu"><%= l(:field_done_ratio) %></a>
|
||||
<ul>
|
||||
<% (0..10).map{|x|x*10}.each do |p| -%>
|
||||
<li><%= context_menu_link "#{p}%", {:controller => 'issues', :action => 'bulk_edit', :ids => @issues.collect(&:id), 'done_ratio' => p, :back_to => @back}, :method => :post,
|
||||
<li><%= context_menu_link "#{p}%", {:controller => 'issues', :action => 'bulk_edit', :ids => @issues.collect(&:id), 'done_ratio' => p, :back_url => @back}, :method => :post,
|
||||
:selected => (@issue && p == @issue.done_ratio), :disabled => !@can[:edit] %></li>
|
||||
<% end -%>
|
||||
</ul>
|
||||
|
||||
@@ -86,7 +86,6 @@ top = headers_height + 8
|
||||
<%= link_to_issue i %>
|
||||
<% else %>
|
||||
<span class="icon icon-package">
|
||||
<%= h("#{i.project} -") unless @project && @project == i.project %>
|
||||
<%= link_to_version i %>
|
||||
</span>
|
||||
<% end %>
|
||||
@@ -211,8 +210,7 @@ top = headers_height + 10
|
||||
%>
|
||||
<div style="top:<%= top %>px;left:<%= i_left %>px;width:15px;" class="task milestone"> </div>
|
||||
<div style="top:<%= top %>px;left:<%= i_left + 12 %>px;background:#fff;" class="task">
|
||||
<%= h("#{i.project} -") unless @project && @project == i.project %>
|
||||
<strong><%=h i %></strong>
|
||||
<strong><%= format_version_name i %></strong>
|
||||
</div>
|
||||
<% end %>
|
||||
<% top = top + 20
|
||||
|
||||
@@ -10,10 +10,10 @@
|
||||
|
||||
<% form_tag({ :controller => 'queries', :action => 'new' }, :id => 'query_form') do %>
|
||||
<%= hidden_field_tag('project_id', @project.to_param) if @project %>
|
||||
<div id="query_form_content">
|
||||
<fieldset id="filters" class="collapsible">
|
||||
<div id="query_form_content" class="hide-when-print">
|
||||
<fieldset id="filters" class="collapsible <%= @query.new_record? ? "" : "collapsed" %>">
|
||||
<legend onclick="toggleFieldset(this);"><%= l(:label_filter_plural) %></legend>
|
||||
<div>
|
||||
<div style="<%= @query.new_record? ? "" : "display: none;" %>">
|
||||
<%= render :partial => 'queries/filters', :locals => {:query => @query} %>
|
||||
</div>
|
||||
</fieldset>
|
||||
@@ -33,7 +33,7 @@
|
||||
</div>
|
||||
</fieldset>
|
||||
</div>
|
||||
<p class="buttons">
|
||||
<p class="buttons hide-when-print">
|
||||
|
||||
<%= link_to_remote l(:button_apply),
|
||||
{ :url => { :set_filter => 1 },
|
||||
|
||||
@@ -73,7 +73,7 @@
|
||||
|
||||
</div>
|
||||
|
||||
<% if @changesets.any? && User.current.allowed_to?(:view_changesets, @project) %>
|
||||
<% if @changesets.any? %>
|
||||
<div id="issue-changesets">
|
||||
<h3><%=l(:label_associated_revisions)%></h3>
|
||||
<%= render :partial => 'changesets', :locals => { :changesets => @changesets} %>
|
||||
|
||||
@@ -40,9 +40,11 @@
|
||||
|
||||
<h1><%= page_header_title %></h1>
|
||||
|
||||
<% if display_main_menu?(@project) %>
|
||||
<div id="main-menu">
|
||||
<%= render_main_menu(@project) %>
|
||||
</div>
|
||||
<% end %>
|
||||
</div>
|
||||
|
||||
<%= tag('div', {:id => 'main', :class => (has_content?(:sidebar) ? '' : 'nosidebar')}, true) %>
|
||||
@@ -62,7 +64,7 @@
|
||||
<div id="ajax-indicator" style="display:none;"><span><%= l(:label_loading) %></span></div>
|
||||
|
||||
<div id="footer">
|
||||
Powered by <%= link_to Redmine::Info.app_name, Redmine::Info.url %> © 2006-2009 Jean-Philippe Lang
|
||||
Powered by <%= link_to Redmine::Info.app_name, Redmine::Info.url %> © 2006-2010 Jean-Philippe Lang
|
||||
</div>
|
||||
</div>
|
||||
<%= call_hook :view_layouts_base_body_bottom %>
|
||||
|
||||
@@ -1,14 +1,14 @@
|
||||
<h1><%= link_to "#{issue.tracker.name} ##{issue.id}: #{issue.subject}", issue_url %></h1>
|
||||
<h1><%= link_to(h("#{issue.tracker.name} ##{issue.id}: #{issue.subject}"), issue_url) %></h1>
|
||||
|
||||
<ul>
|
||||
<li><%=l(:field_author)%>: <%= issue.author %></li>
|
||||
<li><%=l(:field_status)%>: <%= issue.status %></li>
|
||||
<li><%=l(:field_priority)%>: <%= issue.priority %></li>
|
||||
<li><%=l(:field_assigned_to)%>: <%= issue.assigned_to %></li>
|
||||
<li><%=l(:field_category)%>: <%= issue.category %></li>
|
||||
<li><%=l(:field_fixed_version)%>: <%= issue.fixed_version %></li>
|
||||
<li><%=l(:field_author)%>: <%=h issue.author %></li>
|
||||
<li><%=l(:field_status)%>: <%=h issue.status %></li>
|
||||
<li><%=l(:field_priority)%>: <%=h issue.priority %></li>
|
||||
<li><%=l(:field_assigned_to)%>: <%=h issue.assigned_to %></li>
|
||||
<li><%=l(:field_category)%>: <%=h issue.category %></li>
|
||||
<li><%=l(:field_fixed_version)%>: <%=h issue.fixed_version %></li>
|
||||
<% issue.custom_values.each do |c| %>
|
||||
<li><%= c.custom_field.name %>: <%= show_value(c) %></li>
|
||||
<li><%=h c.custom_field.name %>: <%=h show_value(c) %></li>
|
||||
<% end %>
|
||||
</ul>
|
||||
|
||||
|
||||
@@ -1,2 +1,2 @@
|
||||
<p><%= l(:mail_body_account_activation_request, @user.login) %></p>
|
||||
<p><%= l(:mail_body_account_activation_request, h(@user.login)) %></p>
|
||||
<p><%= link_to @url, @url %></p>
|
||||
|
||||
@@ -1,10 +1,10 @@
|
||||
<% if @user.auth_source %>
|
||||
<p><%= l(:mail_body_account_information_external, @user.auth_source.name) %></p>
|
||||
<p><%= l(:mail_body_account_information_external, h(@user.auth_source.name)) %></p>
|
||||
<% else %>
|
||||
<p><%= l(:mail_body_account_information) %>:</p>
|
||||
<ul>
|
||||
<li><%= l(:field_login) %>: <%= @user.login %></li>
|
||||
<li><%= l(:field_password) %>: <%= @password %></li>
|
||||
<li><%= l(:field_login) %>: <%=h @user.login %></li>
|
||||
<li><%= l(:field_password) %>: <%=h @password %></li>
|
||||
</ul>
|
||||
<% end %>
|
||||
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
<%= link_to @added_to, @added_to_url %><br />
|
||||
|
||||
<ul><% @attachments.each do |attachment | %>
|
||||
<li><%= attachment.filename %></li>
|
||||
<li><%=h attachment.filename %></li>
|
||||
<% end %></ul>
|
||||
|
||||
@@ -1,3 +1,3 @@
|
||||
<%= link_to @document.title, @document_url %> (<%= @document.category.name %>)<br />
|
||||
<%= link_to(h(@document.title), @document_url) %> (<%=h @document.category.name %>)<br />
|
||||
<br />
|
||||
<%= textilizable(@document, :description, :only_path => false) %>
|
||||
|
||||
@@ -1,3 +1,3 @@
|
||||
<%= l(:text_issue_added, :id => "##{@issue.id}", :author => @issue.author) %>
|
||||
<%= l(:text_issue_added, :id => "##{@issue.id}", :author => h(@issue.author)) %>
|
||||
<hr />
|
||||
<%= render :partial => "issue_text_html", :locals => { :issue => @issue, :issue_url => @issue_url } %>
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
<%= l(:text_issue_updated, :id => "##{@issue.id}", :author => @journal.user) %>
|
||||
<%= l(:text_issue_updated, :id => "##{@issue.id}", :author => h(@journal.user)) %>
|
||||
|
||||
<ul>
|
||||
<% for detail in @journal.details %>
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
<p><%= l(:mail_body_lost_password) %><br />
|
||||
<%= auto_link(@url) %></p>
|
||||
|
||||
<p><%= l(:field_login) %>: <b><%= @token.user.login %></b></p>
|
||||
<p><%= l(:field_login) %>: <b><%=h @token.user.login %></b></p>
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
<h1><%=h @message.board.project.name %> - <%=h @message.board.name %>: <%= link_to @message.subject, @message_url %></h1>
|
||||
<em><%= @message.author %></em>
|
||||
<h1><%=h @message.board.project.name %> - <%=h @message.board.name %>: <%= link_to(h(@message.subject), @message_url) %></h1>
|
||||
<em><%=h @message.author %></em>
|
||||
|
||||
<%= textilizable(@message, :content, :only_path => false) %>
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
<h1><%= link_to @news.title, @news_url %></h1>
|
||||
<em><%= @news.author.name %></em>
|
||||
<h1><%= link_to(h(@news.title), @news_url) %></h1>
|
||||
<em><%=h @news.author.name %></em>
|
||||
|
||||
<%= textilizable(@news, :description, :only_path => false) %>
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
|
||||
<div class="contextual">
|
||||
<%= watcher_tag(@topic, User.current) %>
|
||||
<%= link_to_remote_if_authorized l(:button_quote), { :url => {:action => 'quote', :id => @topic} }, :class => 'icon icon-comment' %>
|
||||
<%= link_to_remote_if_authorized(l(:button_quote), { :url => {:action => 'quote', :id => @topic} }, :class => 'icon icon-comment') unless @topic.locked? %>
|
||||
<%= link_to(l(:button_edit), {:action => 'edit', :id => @topic}, :class => 'icon icon-edit') if @message.editable_by?(User.current) %>
|
||||
<%= link_to(l(:button_delete), {:action => 'destroy', :id => @topic}, :method => :post, :confirm => l(:text_are_you_sure), :class => 'icon icon-del') if @message.destroyable_by?(User.current) %>
|
||||
</div>
|
||||
@@ -24,7 +24,7 @@
|
||||
<% @replies.each do |message| %>
|
||||
<div class="message reply" id="<%= "message-#{message.id}" %>">
|
||||
<div class="contextual">
|
||||
<%= link_to_remote_if_authorized image_tag('comment.png'), { :url => {:action => 'quote', :id => message} }, :title => l(:button_quote) %>
|
||||
<%= link_to_remote_if_authorized(image_tag('comment.png'), { :url => {:action => 'quote', :id => message} }, :title => l(:button_quote)) unless @topic.locked? %>
|
||||
<%= link_to(image_tag('edit.png'), {:action => 'edit', :id => message}, :title => l(:button_edit)) if message.editable_by?(User.current) %>
|
||||
<%= link_to(image_tag('delete.png'), {:action => 'destroy', :id => message}, :method => :post, :confirm => l(:text_are_you_sure), :title => l(:button_delete)) if message.destroyable_by?(User.current) %>
|
||||
</div>
|
||||
|
||||
@@ -17,10 +17,10 @@
|
||||
|
||||
<% if Setting.rest_api_enabled? %>
|
||||
<h4><%= l(:label_api_access_key) %></h4>
|
||||
<p>
|
||||
<div>
|
||||
<%= link_to_function(l(:button_show), "$('api-access-key').toggle();")%>
|
||||
<pre id='api-access-key' class='autoscroll'><%= @user.api_key %></pre>
|
||||
</p>
|
||||
</div>
|
||||
<%= javascript_tag("$('api-access-key').hide();") %>
|
||||
<p>
|
||||
<% if @user.api_token %>
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
<h3><%= l(:label_calendar) %></h3>
|
||||
|
||||
<% calendar = Redmine::Helpers::Calendar.new(Date.today, current_language, :week)
|
||||
calendar.events = Issue.find :all,
|
||||
calendar.events = Issue.visible.find :all,
|
||||
:conditions => ["#{Issue.table_name}.project_id in (#{@user.projects.collect{|m| m.id}.join(',')}) AND ((start_date>=? and start_date<=?) or (due_date>=? and due_date<=?))", calendar.startdt, calendar.enddt, calendar.startdt, calendar.enddt],
|
||||
:include => [:project, :tracker, :priority, :assigned_to] unless @user.projects.empty? %>
|
||||
|
||||
|
||||
@@ -21,6 +21,8 @@
|
||||
<label class="block"><%= check_box_tag 'only[]', 'boards', true %> <%= l(:label_board_plural) %> (<%= @source_project.boards.count %>)</label>
|
||||
<label class="block"><%= check_box_tag 'only[]', 'wiki', true %> <%= l(:label_wiki_page_plural) %> (<%= @source_project.wiki.nil? ? 0 : @source_project.wiki.pages.count %>)</label>
|
||||
<%= hidden_field_tag 'only[]', '' %>
|
||||
<br />
|
||||
<label class="block"><%= check_box_tag 'notifications', 1, params[:notifications] %> <%= l(:label_project_copy_notifications) %></label>
|
||||
</fieldset>
|
||||
|
||||
<%= submit_tag l(:button_copy) %>
|
||||
|
||||
@@ -1,3 +1,7 @@
|
||||
<% content_for :header_tags do %>
|
||||
<%= auto_discovery_link_tag(:atom, {:action => 'index', :format => 'atom', :key => User.current.rss_key}) %>
|
||||
<% end %>
|
||||
|
||||
<div class="contextual">
|
||||
<%= link_to(l(:label_project_new), {:controller => 'projects', :action => 'add'}, :class => 'icon icon-add') + ' |' if User.current.allowed_to?(:add_project, nil, :global => true) %>
|
||||
<%= link_to(l(:label_issue_view_all), { :controller => 'issues' }) + ' |' if User.current.allowed_to?(:view_issues, nil, :global => true) %>
|
||||
|
||||
@@ -58,7 +58,7 @@
|
||||
<% remote_form_for(:member, @member, :url => {:controller => 'members', :action => 'new', :id => @project}, :method => :post) do |f| %>
|
||||
<fieldset><legend><%=l(:label_member_new)%></legend>
|
||||
|
||||
<p><%= text_field_tag 'principal_search', nil, :size => "40" %></p>
|
||||
<p><%= text_field_tag 'principal_search', nil %></p>
|
||||
<%= observe_field(:principal_search,
|
||||
:frequency => 0.5,
|
||||
:update => :principals,
|
||||
|
||||
@@ -7,9 +7,11 @@
|
||||
<h2><%=l(:label_overview)%></h2>
|
||||
|
||||
<div class="splitcontentleft">
|
||||
<%= textilizable @project.description %>
|
||||
<div class="wiki">
|
||||
<%= textilizable @project.description %>
|
||||
</div>
|
||||
<ul>
|
||||
<% unless @project.homepage.blank? %><li><%=l(:field_homepage)%>: <%= link_to(h(@project.homepage), @project.homepage) %></li><% end %>
|
||||
<% unless @project.homepage.blank? %><li><%=l(:field_homepage)%>: <%= auto_link(h(@project.homepage)) %></li><% end %>
|
||||
<% if @subprojects.any? %>
|
||||
<li><%=l(:label_subproject_plural)%>:
|
||||
<%= @subprojects.collect{|p| link_to(h(p), :action => 'show', :id => p)}.join(", ") %></li>
|
||||
|
||||
@@ -16,6 +16,6 @@ dirs.each do |dir|
|
||||
/ <%= link_to h(filename), :action => 'changes', :id => @project, :path => to_path_param("#{link_path}/#{filename}"), :rev => @rev %>
|
||||
<% end %>
|
||||
|
||||
<%= "@ #{revision}" if revision %>
|
||||
<%= "@ #{h revision}" if revision %>
|
||||
|
||||
<% html_title(with_leading_slash(path)) -%>
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
<% @entries.each do |entry| %>
|
||||
<% tr_id = Digest::MD5.hexdigest(entry.path)
|
||||
depth = params[:depth].to_i %>
|
||||
<tr id="<%= tr_id %>" class="<%= params[:parent_id] %> entry <%= entry.kind %>">
|
||||
<tr id="<%= tr_id %>" class="<%= h params[:parent_id] %> entry <%= entry.kind %>">
|
||||
<td style="padding-left: <%=18 * depth%>px;" class="filename">
|
||||
<% if entry.is_dir? %>
|
||||
<span class="expander" onclick="<%= remote_function :url => {:action => 'show', :id => @project, :path => to_path_param(entry.path), :rev => @rev, :depth => (depth + 1), :parent_id => tr_id},
|
||||
|
||||
@@ -15,6 +15,7 @@
|
||||
<% end %>
|
||||
|
||||
|
||||
<div class="autoscroll">
|
||||
<table class="list">
|
||||
<thead><tr>
|
||||
<%= sort_header_tag('login', :caption => l(:field_login)) %>
|
||||
@@ -41,7 +42,7 @@
|
||||
<% end -%>
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
</div>
|
||||
<p class="pagination"><%= pagination_links_full @user_pages, @user_count %></p>
|
||||
|
||||
<% html_title(l(:label_user_plural)) -%>
|
||||
|
||||
@@ -25,6 +25,7 @@
|
||||
<% form_tag({}, :id => 'workflow_form' ) do %>
|
||||
<%= hidden_field_tag 'tracker_id', @tracker.id %>
|
||||
<%= hidden_field_tag 'role_id', @role.id %>
|
||||
<div class="autoscroll">
|
||||
<table class="list">
|
||||
<thead>
|
||||
<tr>
|
||||
@@ -52,6 +53,7 @@
|
||||
<% end %>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
<p><%= check_all_links 'workflow_form' %></p>
|
||||
|
||||
<%= submit_tag l(:button_save) %>
|
||||
|
||||
@@ -1,4 +1,70 @@
|
||||
# Outgoing email settings
|
||||
# = Outgoing email settings
|
||||
#
|
||||
# Each environment has it's own configuration options. If you are only
|
||||
# running in production, only the production block needs to be configured.
|
||||
#
|
||||
# == Common configurations
|
||||
#
|
||||
# === Sendmail command
|
||||
#
|
||||
# production:
|
||||
# delivery_method: :sendmail
|
||||
#
|
||||
# === Simple SMTP server at localhost
|
||||
#
|
||||
# production:
|
||||
# delivery_method: :smtp
|
||||
# smtp_settings:
|
||||
# address: "localhost"
|
||||
# port: 25
|
||||
#
|
||||
# === SMTP server at example.com using LOGIN authentication and checking HELO for foo.com
|
||||
#
|
||||
# production:
|
||||
# delivery_method: :smtp
|
||||
# smtp_settings:
|
||||
# address: "example.com"
|
||||
# port: 25
|
||||
# authentication: :login
|
||||
# domain: 'foo.com'
|
||||
# user_name: 'myaccount'
|
||||
# password: 'password'
|
||||
#
|
||||
# === SMTP server at example.com using PLAIN authentication
|
||||
#
|
||||
# production:
|
||||
# delivery_method: :smtp
|
||||
# smtp_settings:
|
||||
# address: "example.com"
|
||||
# port: 25
|
||||
# authentication: :plain
|
||||
# domain: 'example.com'
|
||||
# user_name: 'myaccount'
|
||||
# password: 'password'
|
||||
#
|
||||
# === SMTP server at using TLS (GMail)
|
||||
#
|
||||
# This requires some additional configuration. See the article at:
|
||||
# http://redmineblog.com/articles/setup-redmine-to-send-email-using-gmail/
|
||||
#
|
||||
# production:
|
||||
# delivery_method: :smtp
|
||||
# smtp_settings:
|
||||
# tls: true
|
||||
# address: "smtp.gmail.com"
|
||||
# port: 587
|
||||
# domain: "smtp.gmail.com" # 'your.domain.com' for GoogleApps
|
||||
# authentication: :plain
|
||||
# user_name: "your_email@gmail.com"
|
||||
# password: "your_password"
|
||||
#
|
||||
#
|
||||
# == More configuration options
|
||||
#
|
||||
# See the "Configuration options" at the following website for a list of the
|
||||
# full options allowed:
|
||||
#
|
||||
# http://wiki.rubyonrails.org/rails/pages/HowToSendEmailsWithActionMailer
|
||||
|
||||
production:
|
||||
delivery_method: :smtp
|
||||
|
||||
@@ -25,5 +25,5 @@ config.action_controller.session = {
|
||||
config.action_controller.allow_forgery_protection = false
|
||||
|
||||
config.gem "thoughtbot-shoulda", :lib => "shoulda", :source => "http://gems.github.com"
|
||||
config.gem "nofxx-object_daddy", :lib => "object_daddy", :source => "http://gems.github.com"
|
||||
config.gem "edavis10-object_daddy", :lib => "object_daddy"
|
||||
config.gem "mocha"
|
||||
|
||||
@@ -1,29 +1 @@
|
||||
# Settings specified here will take precedence over those in config/environment.rb
|
||||
|
||||
# The test environment is used exclusively to run your application's
|
||||
# test suite. You never need to work with it otherwise. Remember that
|
||||
# your test database is "scratch space" for the test suite and is wiped
|
||||
# and recreated between test runs. Don't rely on the data there!
|
||||
config.cache_classes = true
|
||||
|
||||
# Log error messages when you accidentally call methods on nil.
|
||||
config.whiny_nils = true
|
||||
|
||||
# Show full error reports and disable caching
|
||||
config.action_controller.consider_all_requests_local = true
|
||||
config.action_controller.perform_caching = false
|
||||
|
||||
config.action_mailer.perform_deliveries = true
|
||||
config.action_mailer.delivery_method = :test
|
||||
|
||||
config.action_controller.session = {
|
||||
:session_key => "_test_session",
|
||||
:secret => "some secret phrase for the tests."
|
||||
}
|
||||
|
||||
# Skip protect_from_forgery in requests http://m.onkey.org/2007/9/28/csrf-protection-for-your-existing-rails-application
|
||||
config.action_controller.allow_forgery_protection = false
|
||||
|
||||
config.gem "thoughtbot-shoulda", :lib => "shoulda", :source => "http://gems.github.com"
|
||||
config.gem "nofxx-object_daddy", :lib => "object_daddy", :source => "http://gems.github.com"
|
||||
config.gem "mocha"
|
||||
instance_eval File.read(File.join(File.dirname(__FILE__), 'test.rb'))
|
||||
|
||||
@@ -1,29 +1 @@
|
||||
# Settings specified here will take precedence over those in config/environment.rb
|
||||
|
||||
# The test environment is used exclusively to run your application's
|
||||
# test suite. You never need to work with it otherwise. Remember that
|
||||
# your test database is "scratch space" for the test suite and is wiped
|
||||
# and recreated between test runs. Don't rely on the data there!
|
||||
config.cache_classes = true
|
||||
|
||||
# Log error messages when you accidentally call methods on nil.
|
||||
config.whiny_nils = true
|
||||
|
||||
# Show full error reports and disable caching
|
||||
config.action_controller.consider_all_requests_local = true
|
||||
config.action_controller.perform_caching = false
|
||||
|
||||
config.action_mailer.perform_deliveries = true
|
||||
config.action_mailer.delivery_method = :test
|
||||
|
||||
config.action_controller.session = {
|
||||
:session_key => "_test_session",
|
||||
:secret => "some secret phrase for the tests."
|
||||
}
|
||||
|
||||
# Skip protect_from_forgery in requests http://m.onkey.org/2007/9/28/csrf-protection-for-your-existing-rails-application
|
||||
config.action_controller.allow_forgery_protection = false
|
||||
|
||||
config.gem "thoughtbot-shoulda", :lib => "shoulda", :source => "http://gems.github.com"
|
||||
config.gem "nofxx-object_daddy", :lib => "object_daddy", :source => "http://gems.github.com"
|
||||
config.gem "mocha"
|
||||
instance_eval File.read(File.join(File.dirname(__FILE__), 'test.rb'))
|
||||
|
||||
@@ -876,3 +876,9 @@ bg:
|
||||
You are about to remove some or all of your permissions and may no longer be able to edit this project after that.
|
||||
Are you sure you want to continue?
|
||||
label_close_versions: Close completed versions
|
||||
label_board_sticky: Sticky
|
||||
label_board_locked: Locked
|
||||
permission_export_wiki_pages: Export wiki pages
|
||||
setting_cache_formatted_text: Cache formatted text
|
||||
permission_manage_project_activities: Manage project activities
|
||||
label_project_copy_notifications: Send email notifications during the project copy
|
||||
|
||||
@@ -900,3 +900,9 @@ bs:
|
||||
You are about to remove some or all of your permissions and may no longer be able to edit this project after that.
|
||||
Are you sure you want to continue?
|
||||
label_close_versions: Close completed versions
|
||||
label_board_sticky: Sticky
|
||||
label_board_locked: Locked
|
||||
permission_export_wiki_pages: Export wiki pages
|
||||
setting_cache_formatted_text: Cache formatted text
|
||||
permission_manage_project_activities: Manage project activities
|
||||
label_project_copy_notifications: Send email notifications during the project copy
|
||||
|
||||
@@ -879,3 +879,9 @@ ca:
|
||||
You are about to remove some or all of your permissions and may no longer be able to edit this project after that.
|
||||
Are you sure you want to continue?
|
||||
label_close_versions: Close completed versions
|
||||
label_board_sticky: Sticky
|
||||
label_board_locked: Locked
|
||||
permission_export_wiki_pages: Export wiki pages
|
||||
setting_cache_formatted_text: Cache formatted text
|
||||
permission_manage_project_activities: Manage project activities
|
||||
label_project_copy_notifications: Send email notifications during the project copy
|
||||
|
||||
@@ -882,3 +882,9 @@ cs:
|
||||
You are about to remove some or all of your permissions and may no longer be able to edit this project after that.
|
||||
Are you sure you want to continue?
|
||||
label_close_versions: Close completed versions
|
||||
label_board_sticky: Sticky
|
||||
label_board_locked: Locked
|
||||
permission_export_wiki_pages: Export wiki pages
|
||||
setting_cache_formatted_text: Cache formatted text
|
||||
permission_manage_project_activities: Manage project activities
|
||||
label_project_copy_notifications: Send email notifications during the project copy
|
||||
|
||||
@@ -902,3 +902,9 @@ da:
|
||||
You are about to remove some or all of your permissions and may no longer be able to edit this project after that.
|
||||
Are you sure you want to continue?
|
||||
label_close_versions: Close completed versions
|
||||
label_board_sticky: Sticky
|
||||
label_board_locked: Locked
|
||||
permission_export_wiki_pages: Export wiki pages
|
||||
setting_cache_formatted_text: Cache formatted text
|
||||
permission_manage_project_activities: Manage project activities
|
||||
label_project_copy_notifications: Send email notifications during the project copy
|
||||
|
||||
@@ -902,3 +902,9 @@ de:
|
||||
Sie sind dabei, einige oder alle ihre Berechtigungen zu entfernen. Es ist möglich, dass Sie danach das Projekt nicht mehr sehen oder editieren dürfen.
|
||||
Sind Sie wirklich sicher, dass Sie dies tun möchten?
|
||||
label_close_versions: Vollständige Versionen schließen
|
||||
label_board_sticky: Sticky
|
||||
label_board_locked: Locked
|
||||
permission_export_wiki_pages: Export wiki pages
|
||||
setting_cache_formatted_text: Cache formatted text
|
||||
permission_manage_project_activities: Manage project activities
|
||||
label_project_copy_notifications: Send email notifications during the project copy
|
||||
|
||||
@@ -882,3 +882,9 @@ el:
|
||||
You are about to remove some or all of your permissions and may no longer be able to edit this project after that.
|
||||
Are you sure you want to continue?
|
||||
label_close_versions: Close completed versions
|
||||
label_board_sticky: Sticky
|
||||
label_board_locked: Locked
|
||||
permission_export_wiki_pages: Export wiki pages
|
||||
setting_cache_formatted_text: Cache formatted text
|
||||
permission_manage_project_activities: Manage project activities
|
||||
label_project_copy_notifications: Send email notifications during the project copy
|
||||
|
||||
@@ -329,12 +329,14 @@ en:
|
||||
setting_issue_done_ratio_issue_status: Use the issue status
|
||||
setting_start_of_week: Start calendars on
|
||||
setting_rest_api_enabled: Enable REST web service
|
||||
setting_cache_formatted_text: Cache formatted text
|
||||
|
||||
permission_add_project: Create project
|
||||
permission_add_subprojects: Create subprojects
|
||||
permission_edit_project: Edit project
|
||||
permission_select_project_modules: Select project modules
|
||||
permission_manage_members: Manage members
|
||||
permission_manage_project_activities: Manage project activities
|
||||
permission_manage_versions: Manage versions
|
||||
permission_manage_categories: Manage issue categories
|
||||
permission_view_issues: View Issues
|
||||
@@ -382,6 +384,7 @@ en:
|
||||
permission_edit_own_messages: Edit own messages
|
||||
permission_delete_messages: Delete messages
|
||||
permission_delete_own_messages: Delete own messages
|
||||
permission_export_wiki_pages: Export wiki pages
|
||||
|
||||
project_module_issue_tracking: Issue tracking
|
||||
project_module_time_tracking: Time tracking
|
||||
@@ -662,6 +665,8 @@ en:
|
||||
label_board: Forum
|
||||
label_board_new: New forum
|
||||
label_board_plural: Forums
|
||||
label_board_locked: Locked
|
||||
label_board_sticky: Sticky
|
||||
label_topic_plural: Topics
|
||||
label_message_plural: Messages
|
||||
label_message_last: Last message
|
||||
@@ -743,6 +748,7 @@ en:
|
||||
label_api_access_key: API access key
|
||||
label_missing_api_access_key: Missing an API access key
|
||||
label_api_access_key_created_on: "API access key created {{value}} ago"
|
||||
label_project_copy_notifications: Send email notifications during the project copy
|
||||
|
||||
button_login: Login
|
||||
button_submit: Submit
|
||||
@@ -880,3 +886,4 @@ en:
|
||||
enumeration_doc_categories: Document categories
|
||||
enumeration_activities: Activities (time tracking)
|
||||
enumeration_system_activity: System Activity
|
||||
|
||||
|
||||
@@ -95,8 +95,8 @@ es:
|
||||
one: "más de 1 año"
|
||||
other: "más de {{count}} años"
|
||||
almost_x_years:
|
||||
one: "almost 1 year"
|
||||
other: "almost {{count}} years"
|
||||
one: "casi 1 año"
|
||||
other: "casi {{count}} años"
|
||||
|
||||
activerecord:
|
||||
errors:
|
||||
@@ -920,9 +920,15 @@ es:
|
||||
button_show: Mostrar
|
||||
text_line_separated: Múltiples valores permitidos (un valor en cada línea).
|
||||
setting_mail_handler_body_delimiters: Truncar correos tras una de estas líneas
|
||||
permission_add_subprojects: Create subprojects
|
||||
label_subproject_new: New subproject
|
||||
permission_add_subprojects: Crear subproyectos
|
||||
label_subproject_new: Nuevo subproyecto
|
||||
text_own_membership_delete_confirmation: |-
|
||||
You are about to remove some or all of your permissions and may no longer be able to edit this project after that.
|
||||
Are you sure you want to continue?
|
||||
label_close_versions: Close completed versions
|
||||
Está a punto de eliminar algún o todos sus permisos y podría perder la posibilidad de modificar este proyecto tras hacerlo.
|
||||
¿Está seguro de querer continuar?
|
||||
label_close_versions: Cerrar versiones completadas
|
||||
label_board_sticky: Sticky
|
||||
label_board_locked: Locked
|
||||
permission_export_wiki_pages: Export wiki pages
|
||||
setting_cache_formatted_text: Cache formatted text
|
||||
permission_manage_project_activities: Manage project activities
|
||||
label_project_copy_notifications: Send email notifications during the project copy
|
||||
|
||||
@@ -912,3 +912,9 @@ fi:
|
||||
You are about to remove some or all of your permissions and may no longer be able to edit this project after that.
|
||||
Are you sure you want to continue?
|
||||
label_close_versions: Close completed versions
|
||||
label_board_sticky: Sticky
|
||||
label_board_locked: Locked
|
||||
permission_export_wiki_pages: Export wiki pages
|
||||
setting_cache_formatted_text: Cache formatted text
|
||||
permission_manage_project_activities: Manage project activities
|
||||
label_project_copy_notifications: Send email notifications during the project copy
|
||||
|
||||
@@ -352,6 +352,7 @@ fr:
|
||||
setting_rest_api_enabled: Activer l'API REST
|
||||
setting_gravatar_default: Image Gravatar par défaut
|
||||
setting_start_of_week: Jour de début des calendriers
|
||||
setting_cache_formatted_text: Mettre en cache le texte formaté
|
||||
|
||||
permission_add_project: Créer un projet
|
||||
permission_add_subprojects: Créer des sous-projets
|
||||
@@ -405,6 +406,8 @@ fr:
|
||||
permission_edit_own_messages: Modifier ses propres messages
|
||||
permission_delete_messages: Supprimer les messages
|
||||
permission_delete_own_messages: Supprimer ses propres messages
|
||||
permission_export_wiki_pages: Exporter les pages
|
||||
permission_manage_project_activities: Gérer les activités
|
||||
|
||||
project_module_issue_tracking: Suivi des demandes
|
||||
project_module_time_tracking: Suivi du temps passé
|
||||
@@ -761,6 +764,7 @@ fr:
|
||||
label_missing_feeds_access_key: Clé d'accès RSS manquante
|
||||
label_close_versions: Fermer les versions terminées
|
||||
label_revision_id: Revision {{value}}
|
||||
label_project_copy_notifications: Envoyer les notifications durant la copie du projet
|
||||
|
||||
button_login: Connexion
|
||||
button_submit: Soumettre
|
||||
@@ -808,10 +812,10 @@ fr:
|
||||
|
||||
status_active: actif
|
||||
status_registered: enregistré
|
||||
status_locked: vérouillé
|
||||
status_locked: verrouillé
|
||||
|
||||
version_status_open: ouvert
|
||||
version_status_locked: vérouillé
|
||||
version_status_locked: verrouillé
|
||||
version_status_closed: fermé
|
||||
|
||||
text_select_mail_notifications: Actions pour lesquelles une notification par e-mail est envoyée
|
||||
@@ -903,3 +907,5 @@ fr:
|
||||
text_journal_deleted: "{{label}} {{old}} supprimé"
|
||||
text_journal_added: "{{label}} {{value}} ajouté"
|
||||
enumeration_system_activity: Activité système
|
||||
label_board_sticky: Sticky
|
||||
label_board_locked: Verrouillé
|
||||
|
||||
@@ -902,3 +902,9 @@ gl:
|
||||
You are about to remove some or all of your permissions and may no longer be able to edit this project after that.
|
||||
Are you sure you want to continue?
|
||||
label_close_versions: Close completed versions
|
||||
label_board_sticky: Sticky
|
||||
label_board_locked: Locked
|
||||
permission_export_wiki_pages: Export wiki pages
|
||||
setting_cache_formatted_text: Cache formatted text
|
||||
permission_manage_project_activities: Manage project activities
|
||||
label_project_copy_notifications: Send email notifications during the project copy
|
||||
|
||||
@@ -886,3 +886,9 @@ he:
|
||||
You are about to remove some or all of your permissions and may no longer be able to edit this project after that.
|
||||
Are you sure you want to continue?
|
||||
label_close_versions: Close completed versions
|
||||
label_board_sticky: Sticky
|
||||
label_board_locked: Locked
|
||||
permission_export_wiki_pages: Export wiki pages
|
||||
setting_cache_formatted_text: Cache formatted text
|
||||
permission_manage_project_activities: Manage project activities
|
||||
label_project_copy_notifications: Send email notifications during the project copy
|
||||
|
||||
897
config/locales/hr.yml
Normal file
897
config/locales/hr.yml
Normal file
@@ -0,0 +1,897 @@
|
||||
# Croatian translations for Ruby on Rails
|
||||
# by Helix d.o.o. (info@helix.hr)
|
||||
|
||||
hr:
|
||||
date:
|
||||
formats:
|
||||
# Use the strftime parameters for formats.
|
||||
# When no format has been given, it uses default.
|
||||
# You can provide other formats here if you like!
|
||||
default: "%m/%d/%Y"
|
||||
short: "%b %d"
|
||||
long: "%B %d, %Y"
|
||||
|
||||
day_names: [Ponedjeljak, Utorak, Srijeda, Četvrtak, Petak, Subota, Nedjelja]
|
||||
abbr_day_names: [Ned, Pon, Uto, Sri, Čet, Pet, Sub]
|
||||
|
||||
# Don't forget the nil at the beginning; there's no such thing as a 0th month
|
||||
month_names: [~, Sijecanj, Veljaca, Ožujak, Travanj, Svibanj, Lipanj, Srpanj, Kolovoz, Rujan, Listopad, Studeni, Prosinac]
|
||||
abbr_month_names: [~, Sij, Velj, Ožu, Tra, Svi, Lip, Srp, Kol, Ruj, List, Stu, Pro]
|
||||
# Used in date_select and datime_select.
|
||||
order: [ :year, :month, :day ]
|
||||
|
||||
time:
|
||||
formats:
|
||||
default: "%m/%d/%Y %I:%M %p"
|
||||
time: "%I:%M %p"
|
||||
short: "%d %b %H:%M"
|
||||
long: "%B %d, %Y %H:%M"
|
||||
am: "am"
|
||||
pm: "pm"
|
||||
|
||||
datetime:
|
||||
distance_in_words:
|
||||
half_a_minute: "pola minute"
|
||||
less_than_x_seconds:
|
||||
one: "manje od sekunde"
|
||||
other: "manje od {{count}} sekundi"
|
||||
x_seconds:
|
||||
one: "1 sekunda"
|
||||
other: "{{count}} sekundi"
|
||||
less_than_x_minutes:
|
||||
one: "manje od minute"
|
||||
other: "manje od {{count}} minuta"
|
||||
x_minutes:
|
||||
one: "1 minuta"
|
||||
other: "{{count}} minuta"
|
||||
about_x_hours:
|
||||
one: "oko sat vremena"
|
||||
other: "oko {{count}} sati"
|
||||
x_days:
|
||||
one: "1 dan"
|
||||
other: "{{count}} dana"
|
||||
about_x_months:
|
||||
one: "oko 1 mjesec"
|
||||
other: "oko {{count}} mjeseci"
|
||||
x_months:
|
||||
one: "mjesec"
|
||||
other: "{{count}} mjeseci"
|
||||
about_x_years:
|
||||
one: "1 godina"
|
||||
other: "{{count}} godina"
|
||||
over_x_years:
|
||||
one: "preko 1 godine"
|
||||
other: "preko {{count}} godina"
|
||||
|
||||
number:
|
||||
human:
|
||||
format:
|
||||
delimiter: ""
|
||||
precision: 1
|
||||
storage_units:
|
||||
format: "%n %u"
|
||||
units:
|
||||
byte:
|
||||
one: "Byte"
|
||||
other: "Bytes"
|
||||
kb: "KB"
|
||||
mb: "MB"
|
||||
gb: "GB"
|
||||
tb: "TB"
|
||||
|
||||
|
||||
# Used in array.to_sentence.
|
||||
support:
|
||||
array:
|
||||
sentence_connector: "i"
|
||||
skip_last_comma: false
|
||||
|
||||
activerecord:
|
||||
errors:
|
||||
messages:
|
||||
inclusion: "nije ukljuceno u listu"
|
||||
exclusion: "je rezervirano"
|
||||
invalid: "nije ispravno"
|
||||
confirmation: "ne odgovara za potvrdu"
|
||||
accepted: "mora biti prihvaćen"
|
||||
empty: "ne može biti prazno"
|
||||
blank: "ne može biti razmaka"
|
||||
too_long: "je predug (maximum is {{count}} characters)"
|
||||
too_short: "je prekratak (minimum is {{count}} characters)"
|
||||
wrong_length: "je pogrešne dužine (should be {{count}} characters)"
|
||||
taken: "već je zauzeto"
|
||||
not_a_number: "nije broj"
|
||||
not_a_date: "nije ispravan datum"
|
||||
greater_than: "mora biti veći od {{count}}"
|
||||
greater_than_or_equal_to: "mora biti veći ili jednak {{count}}"
|
||||
equal_to: "mora biti jednak {{count}}"
|
||||
less_than: "mora biti manji od {{count}}"
|
||||
less_than_or_equal_to: "mora bit manji ili jednak{{count}}"
|
||||
odd: "mora biti neparan"
|
||||
even: "mora biti paran"
|
||||
greater_than_start_date: "mora biti veci nego pocetni datum"
|
||||
not_same_project: "ne pripada istom projektu"
|
||||
circular_dependency: "Ovaj relacija stvara kružnu ovisnost"
|
||||
|
||||
actionview_instancetag_blank_option: Molimo odaberite
|
||||
|
||||
general_text_No: 'Ne'
|
||||
general_text_Yes: 'Da'
|
||||
general_text_no: 'ne'
|
||||
general_text_yes: 'da'
|
||||
general_lang_name: 'Hrvatski'
|
||||
general_csv_separator: ','
|
||||
general_csv_decimal_separator: '.'
|
||||
general_csv_encoding: utf8
|
||||
general_pdf_encoding: utf8
|
||||
general_first_day_of_week: '7'
|
||||
|
||||
notice_account_updated: Vaš profil je uspješno promijenjen.
|
||||
notice_account_invalid_creditentials: Neispravno korisničko ime ili zaporka.
|
||||
notice_account_password_updated: Zaporka je uspješno promijenjena.
|
||||
notice_account_wrong_password: Pogrešna zaporka
|
||||
notice_account_register_done: Racun je uspješno napravljen. Da biste aktivirali svoj račun, kliknite na link koji vam je poslan na e-mail.
|
||||
notice_account_unknown_email: Nepoznati korisnik.
|
||||
notice_can_t_change_password: Ovaj račun koristi eksterni izvor prijavljivanja. Nemoguće je promijeniti zaporku.
|
||||
notice_account_lost_email_sent: E-mail s uputama kako bi odabrali novu zaporku je poslan na na vašu e-mail adresu.
|
||||
notice_account_activated: Vaš racun je aktiviran. Možete se prijaviti.
|
||||
notice_successful_create: Uspješno napravljeno.
|
||||
notice_successful_update: Uspješna promjena.
|
||||
notice_successful_delete: Uspješno brisanje.
|
||||
notice_successful_connection: Uspješna veza.
|
||||
notice_file_not_found: Stranica kojoj ste pokušali pristupiti ne postoji ili je uklonjena.
|
||||
notice_locking_conflict: Podataci su ažurirani od strane drugog korisnika.
|
||||
notice_not_authorized: Niste ovlašteni za pristup ovoj stranici.
|
||||
notice_email_sent: E-mail je poslan {{value}}"
|
||||
notice_email_error: Dogodila se pogreška tijekom slanja E-maila ({{value}})"
|
||||
notice_feeds_access_key_reseted: Vaš RSS pristup je resetovan.
|
||||
notice_api_access_key_reseted: Vaš API pristup je resetovan.
|
||||
notice_failed_to_save_issues: "Neuspjelo spremanje {{count}} predmeta na {{total}} odabrane: {{ids}}."
|
||||
notice_no_issue_selected: "Niti jedan predmet nije odabran! Molim, odaberite predmete koje želite urediti."
|
||||
notice_account_pending: "Vaš korisnicki račun je otvoren, čeka odobrenje administratora."
|
||||
notice_default_data_loaded: Konfiguracija je uspješno učitana.
|
||||
notice_unable_delete_version: Nije moguće izbrisati verziju.
|
||||
notice_issue_done_ratios_updated: Issue done ratios updated.
|
||||
|
||||
error_can_t_load_default_data: "Zadanu konfiguracija nije učitana: {{value}}"
|
||||
error_scm_not_found: "Unos i/ili revizija nije pronađen."
|
||||
error_scm_command_failed: "Dogodila se pogreška prilikom pokušaja pristupa: {{value}}"
|
||||
error_scm_annotate: "Ne postoji ili ne može biti obilježen."
|
||||
error_issue_not_found_in_project: 'Nije pronađen ili ne pripada u ovaj projekt'
|
||||
error_no_tracker_in_project: 'No tracker is associated to this project. Please check the Project settings.'
|
||||
error_no_default_issue_status: 'No default issue status is defined. Please check your configuration (Go to "Administration -> Issue statuses").'
|
||||
error_can_not_reopen_issue_on_closed_version: 'An issue assigned to a closed version can not be reopened'
|
||||
error_can_not_archive_project: This project can not be archived
|
||||
error_issue_done_ratios_not_updated: "Issue done ratios not updated."
|
||||
error_workflow_copy_source: 'Please select a source tracker or role'
|
||||
error_workflow_copy_target: 'Please select target tracker(s) and role(s)'
|
||||
|
||||
warning_attachments_not_saved: "{{count}} Datoteka/e nije mogla biti spremljena."
|
||||
|
||||
mail_subject_lost_password: "Vaša {{value}} zaporka"
|
||||
mail_body_lost_password: 'Kako biste promijenili Vašu zaporku slijedite poveznicu:'
|
||||
mail_subject_register: "Aktivacija korisničog računa {{value}}"
|
||||
mail_body_register: 'Da biste aktivirali svoj račun, kliknite na sljedeci link:'
|
||||
mail_body_account_information_external: "Možete koristiti vaš račun {{value}} za prijavu."
|
||||
mail_body_account_information: Vaši korisnički podaci
|
||||
mail_subject_account_activation_request: "{{value}} predmet za aktivaciju korisničkog računa"
|
||||
mail_body_account_activation_request: "Novi korisnik ({{value}}) je registriran. Njegov korisnički račun čeka vaše odobrenje:"
|
||||
mail_subject_reminder: "{{count}} predmet(a) dospijeva sljedećih dana"
|
||||
mail_body_reminder: "{{count}} vama dodijeljen(ih) predmet(a) dospijeva u sljedećih {{days}} dana:"
|
||||
mail_subject_wiki_content_added: "'{{page}}' wiki page has been added"
|
||||
mail_body_wiki_content_added: "The '{{page}}' wiki page has been added by {{author}}."
|
||||
mail_subject_wiki_content_updated: "'{{page}}' wiki page has been updated"
|
||||
mail_body_wiki_content_updated: "The '{{page}}' wiki page has been updated by {{author}}."
|
||||
|
||||
gui_validation_error: 1 pogreška
|
||||
gui_validation_error_plural: "{{count}} pogrešaka"
|
||||
|
||||
field_name: Ime
|
||||
field_description: Opis
|
||||
field_summary: Sažetak
|
||||
field_is_required: Obavezno
|
||||
field_firstname: Ime
|
||||
field_lastname: Prezime
|
||||
field_mail: E-pošta
|
||||
field_filename: Datoteka
|
||||
field_filesize: Veličina
|
||||
field_downloads: Preuzimanja
|
||||
field_author: Autor
|
||||
field_created_on: Napravljen
|
||||
field_updated_on: Promijenjen
|
||||
field_field_format: Format
|
||||
field_is_for_all: Za sve projekte
|
||||
field_possible_values: Moguće vrijednosti
|
||||
field_regexp: Regularni izraz
|
||||
field_min_length: Minimalna dužina
|
||||
field_max_length: Maksimalna dužina
|
||||
field_value: Vrijednost
|
||||
field_category: Kategorija
|
||||
field_title: Naslov
|
||||
field_project: Projekt
|
||||
field_issue: Predmet
|
||||
field_status: Status
|
||||
field_notes: Napomene
|
||||
field_is_closed: Predmet je zatvoren
|
||||
field_is_default: Zadana vrijednost
|
||||
field_tracker: Tracker
|
||||
field_subject: Predmet
|
||||
field_due_date: Do datuma
|
||||
field_assigned_to: Dodijeljeno
|
||||
field_priority: Prioritet
|
||||
field_fixed_version: Verzija
|
||||
field_user: Korisnik
|
||||
field_role: Uloga
|
||||
field_homepage: Naslovnica
|
||||
field_is_public: Javni projekt
|
||||
field_parent: Potprojekt od
|
||||
field_is_in_chlog: Predmeti se prikazuju u dnevniku promjena
|
||||
field_is_in_roadmap: Predmeti se prikazuju u Putokazu
|
||||
field_login: Korisničko ime
|
||||
field_mail_notification: Obavijest putem e-pošte
|
||||
field_admin: Administrator
|
||||
field_last_login_on: Zadnja prijava
|
||||
field_language: Primarni jezik
|
||||
field_effective_date: Datum
|
||||
field_password: Zaporka
|
||||
field_new_password: Nova zaporka
|
||||
field_password_confirmation: Potvrda zaporke
|
||||
field_version: Verzija
|
||||
field_type: Tip
|
||||
field_host: Host
|
||||
field_port: Port
|
||||
field_account: Racun
|
||||
field_base_dn: Osnovni DN
|
||||
field_attr_login: Login atribut
|
||||
field_attr_firstname: Atribut imena
|
||||
field_attr_lastname: Atribut prezimena
|
||||
field_attr_mail: Atribut e-pošte
|
||||
field_onthefly: "Izrada korisnika \"u hodu\""
|
||||
field_start_date: Pocetak
|
||||
field_done_ratio: % Učinjeno
|
||||
field_auth_source: Vrsta prijavljivanja
|
||||
field_hide_mail: Sakrij moju adresu e-pošte
|
||||
field_comments: Komentar
|
||||
field_url: URL
|
||||
field_start_page: Početna stranica
|
||||
field_subproject: Potprojekt
|
||||
field_hours: Sati
|
||||
field_activity: Aktivnost
|
||||
field_spent_on: Datum
|
||||
field_identifier: Identifikator
|
||||
field_is_filter: Korišteno kao filtar
|
||||
field_issue_to_id: Povezano s predmetom
|
||||
field_delay: Odgodeno
|
||||
field_assignable: Predmeti mogu biti dodijeljeni ovoj ulozi
|
||||
field_redirect_existing_links: Preusmjeravanje postojećih linkova
|
||||
field_estimated_hours: Procijenjeno vrijeme
|
||||
field_column_names: Stupci
|
||||
field_time_zone: Vremenska zona
|
||||
field_searchable: Pretraživo
|
||||
field_default_value: Zadana vrijednost
|
||||
field_comments_sorting: Prikaz komentara
|
||||
field_parent_title: Parent page
|
||||
field_editable: Editable
|
||||
field_watcher: Watcher
|
||||
field_identity_url: OpenID URL
|
||||
field_content: Content
|
||||
field_group_by: Group results by
|
||||
|
||||
setting_app_title: Naziv aplikacije
|
||||
setting_app_subtitle: Podnaslov aplikacije
|
||||
setting_welcome_text: Tekst dobrodošlice
|
||||
setting_default_language: Zadani jezik
|
||||
setting_login_required: Potrebna je prijava
|
||||
setting_self_registration: Samoregistracija je dozvoljena
|
||||
setting_attachment_max_size: Maksimalna veličina privitka
|
||||
setting_issues_export_limit: Ograničenje izvoza predmeta
|
||||
setting_mail_from: Izvorna adresa e-pošte
|
||||
setting_bcc_recipients: Blind carbon copy primatelja (bcc)
|
||||
setting_plain_text_mail: obični tekst pošte (bez HTML-a)
|
||||
setting_host_name: Naziv domaćina (host)
|
||||
setting_text_formatting: Oblikovanje teksta
|
||||
setting_wiki_compression: Sažimanje
|
||||
setting_feeds_limit: Ogranicenje unosa sadržaja
|
||||
setting_default_projects_public: Novi projekti su javni po defaultu
|
||||
setting_autofetch_changesets: Autofetch commits
|
||||
setting_sys_api_enabled: Omogući WS za upravljanje skladištem
|
||||
setting_commit_ref_keywords: Referentne ključne riječi
|
||||
setting_commit_fix_keywords: Fiksne ključne riječi
|
||||
setting_autologin: Automatska prijava
|
||||
setting_date_format: Format datuma
|
||||
setting_time_format: Format vremena
|
||||
setting_cross_project_issue_relations: Dozvoli povezivanje predmeta izmedu različitih projekata
|
||||
setting_issue_list_default_columns: Stupci prikazani na listi predmeta
|
||||
setting_repositories_encodings: Kodna stranica
|
||||
setting_commit_logs_encoding: Commit messages encoding
|
||||
setting_emails_footer: Zaglavlje e-pošte
|
||||
setting_protocol: Protokol
|
||||
setting_per_page_options: Objekata po stranici opcija
|
||||
setting_user_format: Oblik prikaza korisnika
|
||||
setting_activity_days_default: Dani prikazane aktivnosti na projektu
|
||||
setting_display_subprojects_issues: Prikaz predmeta potprojekta na glavnom projektu po defaultu
|
||||
setting_enabled_scm: Omogućen SCM
|
||||
setting_mail_handler_body_delimiters: "Truncate emails after one of these lines"
|
||||
setting_mail_handler_api_enabled: Omoguci WS za dolaznu e-poštu
|
||||
setting_mail_handler_api_key: API ključ
|
||||
setting_sequential_project_identifiers: Generiraj slijedne identifikatore projekta
|
||||
setting_gravatar_enabled: Koristi Gravatar korisničke ikone
|
||||
setting_gravatar_default: Default Gravatar image
|
||||
setting_diff_max_lines_displayed: Maksimalni broj diff linija za prikazati
|
||||
setting_file_max_size_displayed: Max size of text files displayed inline
|
||||
setting_repository_log_display_limit: Maximum number of revisions displayed on file log
|
||||
setting_openid: Allow OpenID login and registration
|
||||
setting_password_min_length: Minimum password length
|
||||
setting_new_project_user_role_id: Role given to a non-admin user who creates a project
|
||||
setting_default_projects_modules: Default enabled modules for new projects
|
||||
setting_issue_done_ratio: Calculate the issue done ratio with
|
||||
setting_issue_done_ratio_issue_field: Use the issue field
|
||||
setting_issue_done_ratio_issue_status: Use the issue status
|
||||
setting_start_of_week: Start calendars on
|
||||
setting_rest_api_enabled: Enable REST web service
|
||||
|
||||
permission_add_project: Dodaj projekt
|
||||
permission_add_subprojects: Dodaj potprojekt
|
||||
permission_edit_project: Uredi projekt
|
||||
permission_select_project_modules: Odaberi projektne module
|
||||
permission_manage_members: Upravljaj članovima
|
||||
permission_manage_versions: Upravljaj verzijama
|
||||
permission_manage_categories: Upravljaj kategorijama predmeta
|
||||
permission_view_issues: Pregledaj zahtjeve
|
||||
permission_add_issues: Dodaj predmete
|
||||
permission_edit_issues: Uredi predmete
|
||||
permission_manage_issue_relations: Upravljaj relacijama predmeta
|
||||
permission_add_issue_notes: Dodaj bilješke
|
||||
permission_edit_issue_notes: Uredi bilješke
|
||||
permission_edit_own_issue_notes: Uredi vlastite bilješke
|
||||
permission_move_issues: Premjesti predmete
|
||||
permission_delete_issues: Brisanje predmeta
|
||||
permission_manage_public_queries: Upravljaj javnim upitima
|
||||
permission_save_queries: Spremi upite
|
||||
permission_view_gantt: Pregledaj gantt grafikon
|
||||
permission_view_calendar: Pregledaj kalendar
|
||||
permission_view_issue_watchers: Pregledaj listu promatraca
|
||||
permission_add_issue_watchers: Dodaj promatrača
|
||||
permission_delete_issue_watchers: Delete watchers
|
||||
permission_log_time: Dnevnik utrošenog vremena
|
||||
permission_view_time_entries: Pregledaj utrošeno vrijeme
|
||||
permission_edit_time_entries: Uredi vremenske dnevnike
|
||||
permission_edit_own_time_entries: Edit own time logs
|
||||
permission_manage_news: Upravljaj novostima
|
||||
permission_comment_news: Komentiraj novosti
|
||||
permission_manage_documents: Upravljaj dokumentima
|
||||
permission_view_documents: Pregledaj dokumente
|
||||
permission_manage_files: Upravljaj datotekama
|
||||
permission_view_files: Pregledaj datoteke
|
||||
permission_manage_wiki: Upravljaj wikijem
|
||||
permission_rename_wiki_pages: Promijeni ime wiki stranicama
|
||||
permission_delete_wiki_pages: Obriši wiki stranice
|
||||
permission_view_wiki_pages: Pregledaj wiki
|
||||
permission_view_wiki_edits: Pregledaj povijest wikija
|
||||
permission_edit_wiki_pages: Uredi wiki stranice
|
||||
permission_delete_wiki_pages_attachments: Obriši privitke
|
||||
permission_protect_wiki_pages: Zaštiti wiki stranice
|
||||
permission_manage_repository: Upravljaj skladištem
|
||||
permission_browse_repository: Browse repository
|
||||
permission_view_changesets: View changesets
|
||||
permission_commit_access: Mogućnost pohranjivanja
|
||||
permission_manage_boards: Manage boards
|
||||
permission_view_messages: Pregledaj poruke
|
||||
permission_add_messages: Objavi poruke
|
||||
permission_edit_messages: Uredi poruke
|
||||
permission_edit_own_messages: Uredi vlastite poruke
|
||||
permission_delete_messages: Obriši poruke
|
||||
permission_delete_own_messages: Obriši vlastite poruke
|
||||
|
||||
project_module_issue_tracking: Praćenje predmeta
|
||||
project_module_time_tracking: Praćenje vremena
|
||||
project_module_news: Novosti
|
||||
project_module_documents: Dokumenti
|
||||
project_module_files: Datoteke
|
||||
project_module_wiki: Wiki
|
||||
project_module_repository: Skladište
|
||||
project_module_boards: Boards
|
||||
|
||||
label_user: Korisnik
|
||||
label_user_plural: Korisnici
|
||||
label_user_new: Novi korisnik
|
||||
label_user_anonymous: Anonymous
|
||||
label_project: Projekt
|
||||
label_project_new: Novi projekt
|
||||
label_project_plural: Projekti
|
||||
label_x_projects:
|
||||
zero: no projects
|
||||
one: 1 project
|
||||
other: "{{count}} projects"
|
||||
label_project_all: Svi Projekti
|
||||
label_project_latest: Najnoviji projekt
|
||||
label_issue: Predmet
|
||||
label_issue_new: Novi predmet
|
||||
label_issue_plural: Predmeti
|
||||
label_issue_view_all: Pregled svih predmeta
|
||||
label_issues_by: "Predmeti od {{value}}"
|
||||
label_issue_added: Predmet dodan
|
||||
label_issue_updated: Predmet promijenjen
|
||||
label_document: Dokument
|
||||
label_document_new: Novi dokument
|
||||
label_document_plural: Dokumenti
|
||||
label_document_added: Dokument dodan
|
||||
label_role: Uloga
|
||||
label_role_plural: Uloge
|
||||
label_role_new: Nova uloga
|
||||
label_role_and_permissions: Uloge i ovlasti
|
||||
label_member: Član
|
||||
label_member_new: Novi član
|
||||
label_member_plural: Članovi
|
||||
label_tracker: Vrsta
|
||||
label_tracker_plural: Vrste predmeta
|
||||
label_tracker_new: Nova vrsta
|
||||
label_workflow: Tijek rada
|
||||
label_issue_status: Status predmeta
|
||||
label_issue_status_plural: Status predmeta
|
||||
label_issue_status_new: Novi status
|
||||
label_issue_category: Kategorija predmeta
|
||||
label_issue_category_plural: Kategorije predmeta
|
||||
label_issue_category_new: Nova kategorija
|
||||
label_custom_field: Korisnički definirano polje
|
||||
label_custom_field_plural: Korisnički definirana polja
|
||||
label_custom_field_new: Novo korisnički definirano polje
|
||||
label_enumerations: Pobrojenice
|
||||
label_enumeration_new: Nova vrijednost
|
||||
label_information: Informacija
|
||||
label_information_plural: Informacije
|
||||
label_please_login: Molim prijavite se
|
||||
label_register: Registracija
|
||||
label_login_with_open_id_option: or login with OpenID
|
||||
label_password_lost: Izgubljena zaporka
|
||||
label_home: Početna stranica
|
||||
label_my_page: Moja stranica
|
||||
label_my_account: Moj profil
|
||||
label_my_projects: Moji projekti
|
||||
label_administration: Administracija
|
||||
label_login: Korisnik
|
||||
label_logout: Odjava
|
||||
label_help: Pomoć
|
||||
label_reported_issues: Prijavljeni predmeti
|
||||
label_assigned_to_me_issues: Moji predmeti
|
||||
label_last_login: Last connection
|
||||
label_registered_on: Registrirano
|
||||
label_activity: Aktivnosti
|
||||
label_overall_activity: Aktivnosti
|
||||
label_user_activity: "{{value}} ova/ina aktivnost"
|
||||
label_new: Novi
|
||||
label_logged_as: Prijavljeni ste kao
|
||||
label_environment: Okolina
|
||||
label_authentication: Autentikacija
|
||||
label_auth_source: Način prijavljivanja
|
||||
label_auth_source_new: Novi način prijavljivanja
|
||||
label_auth_source_plural: Načini prijavljivanja
|
||||
label_subproject_plural: Potprojekti
|
||||
label_subproject_new: Novi potprojekt
|
||||
label_and_its_subprojects: "{{value}} i njegovi potprojekti"
|
||||
label_min_max_length: Min - Maks veličina
|
||||
label_list: Liste
|
||||
label_date: Datum
|
||||
label_integer: Integer
|
||||
label_float: Float
|
||||
label_boolean: Boolean
|
||||
label_string: Text
|
||||
label_text: Long text
|
||||
label_attribute: Atribut
|
||||
label_attribute_plural: Atributi
|
||||
label_download: "{{count}} Download"
|
||||
label_download_plural: "{{count}} Downloads"
|
||||
label_no_data: Nema podataka za prikaz
|
||||
label_change_status: Promjena statusa
|
||||
label_history: Povijest
|
||||
label_attachment: Datoteka
|
||||
label_attachment_new: Nova datoteka
|
||||
label_attachment_delete: Brisanje datoteke
|
||||
label_attachment_plural: Datoteke
|
||||
label_file_added: Datoteka dodana
|
||||
label_report: Izvješće
|
||||
label_report_plural: Izvješća
|
||||
label_news: Novosti
|
||||
label_news_new: Dodaj novost
|
||||
label_news_plural: Novosti
|
||||
label_news_latest: Novosti
|
||||
label_news_view_all: Pregled svih novosti
|
||||
label_news_added: Novosti dodane
|
||||
label_change_log: Dnevnik promjena
|
||||
label_settings: Postavke
|
||||
label_overview: Pregled
|
||||
label_version: Verzija
|
||||
label_version_new: Nova verzija
|
||||
label_version_plural: Verzije
|
||||
label_confirmation: Potvrda
|
||||
label_export_to: 'Izvoz u:'
|
||||
label_read: Čitaj...
|
||||
label_public_projects: Javni projekti
|
||||
label_open_issues: Otvoren
|
||||
label_open_issues_plural: Otvoreno
|
||||
label_closed_issues: Zatvoren
|
||||
label_closed_issues_plural: Zatvoreno
|
||||
label_x_open_issues_abbr_on_total:
|
||||
zero: 0 open / {{total}}
|
||||
one: 1 open / {{total}}
|
||||
other: "{{count}} open / {{total}}"
|
||||
label_x_open_issues_abbr:
|
||||
zero: 0 open
|
||||
one: 1 open
|
||||
other: "{{count}} open"
|
||||
label_x_closed_issues_abbr:
|
||||
zero: 0 closed
|
||||
one: 1 closed
|
||||
other: "{{count}} closed"
|
||||
label_total: Ukupno
|
||||
label_permissions: Dozvole
|
||||
label_current_status: Trenutni status
|
||||
label_new_statuses_allowed: Novi status je dozvoljen
|
||||
label_all: Svi
|
||||
label_none: nema
|
||||
label_nobody: nitko
|
||||
label_next: Naredni
|
||||
label_previous: Prethodni
|
||||
label_used_by: Korišten od
|
||||
label_details: Detalji
|
||||
label_add_note: Dodaj napomenu
|
||||
label_per_page: Po stranici
|
||||
label_calendar: Kalendar
|
||||
label_months_from: Mjeseci od
|
||||
label_gantt: Gantt
|
||||
label_internal: Interno
|
||||
label_last_changes: "Posljednjih {{count}} promjena"
|
||||
label_change_view_all: Prikaz svih promjena
|
||||
label_personalize_page: Prilagodite ovu stranicu
|
||||
label_comment: Komentar
|
||||
label_comment_plural: Komentari
|
||||
label_x_comments:
|
||||
zero: no comments
|
||||
one: 1 comment
|
||||
other: "{{count}} comments"
|
||||
label_comment_add: Dodaj komentar
|
||||
label_comment_added: Komentar dodan
|
||||
label_comment_delete: Brisanje komentara
|
||||
label_query: Korisnički upit
|
||||
label_query_plural: Korisnički upiti
|
||||
label_query_new: Novi upit
|
||||
label_filter_add: Dodaj filtar
|
||||
label_filter_plural: Filtri
|
||||
label_equals: je
|
||||
label_not_equals: nije
|
||||
label_in_less_than: za manje od
|
||||
label_in_more_than: za više od
|
||||
label_greater_or_equal: '>='
|
||||
label_less_or_equal: '<='
|
||||
label_in: za točno
|
||||
label_today: danas
|
||||
label_all_time: sva vremena
|
||||
label_yesterday: jučer
|
||||
label_this_week: ovog tjedna
|
||||
label_last_week: prošlog tjedna
|
||||
label_last_n_days: "zadnjih {{count}} dana"
|
||||
label_this_month: ovog mjeseca
|
||||
label_last_month: prošlog mjeseca
|
||||
label_this_year: ove godine
|
||||
label_date_range: vremenski raspon
|
||||
label_less_than_ago: manje od
|
||||
label_more_than_ago: više od
|
||||
label_ago: prije
|
||||
label_contains: Sadrži
|
||||
label_not_contains: ne sadrži
|
||||
label_day_plural: dana
|
||||
label_repository: Skladište
|
||||
label_repository_plural: Skladišta
|
||||
label_browse: Pregled
|
||||
label_modification: "{{count}} promjena"
|
||||
label_modification_plural: "{{count}} promjena"
|
||||
label_branch: Branch
|
||||
label_tag: Tag
|
||||
label_revision: Revizija
|
||||
label_revision_plural: Revizije
|
||||
label_revision_id: "Revision {{value}}"
|
||||
label_associated_revisions: Dodijeljene revizije
|
||||
label_added: dodano
|
||||
label_modified: promijenjen
|
||||
label_copied: kopirano
|
||||
label_renamed: preimenovano
|
||||
label_deleted: obrisano
|
||||
label_latest_revision: Posljednja revizija
|
||||
label_latest_revision_plural: Posljednje revizije
|
||||
label_view_revisions: Pregled revizija
|
||||
label_view_all_revisions: View all revisions
|
||||
label_max_size: Maksimalna veličina
|
||||
label_sort_highest: Premjesti na vrh
|
||||
label_sort_higher: Premjesti prema gore
|
||||
label_sort_lower: Premjesti prema dolje
|
||||
label_sort_lowest: Premjesti na dno
|
||||
label_roadmap: Putokaz
|
||||
label_roadmap_due_in: "Završava se za {{value}}"
|
||||
label_roadmap_overdue: "{{value}} kasni"
|
||||
label_roadmap_no_issues: Nema predmeta za ovu verziju
|
||||
label_search: Traži
|
||||
label_result_plural: Rezultati
|
||||
label_all_words: Sve riječi
|
||||
label_wiki: Wiki
|
||||
label_wiki_edit: Wiki promjena
|
||||
label_wiki_edit_plural: Wiki promjene
|
||||
label_wiki_page: Wiki stranica
|
||||
label_wiki_page_plural: Wiki stranice
|
||||
label_index_by_title: Indeks po naslovima
|
||||
label_index_by_date: Indeks po datumu
|
||||
label_current_version: Trenutna verzija
|
||||
label_preview: Brzi pregled
|
||||
label_feed_plural: Feeds
|
||||
label_changes_details: Detalji svih promjena
|
||||
label_issue_tracking: Praćenje predmeta
|
||||
label_spent_time: Utrošeno vrijeme
|
||||
label_f_hour: "{{value}} sata"
|
||||
label_f_hour_plural: "{{value}} sati"
|
||||
label_time_tracking: Praćenje vremena
|
||||
label_change_plural: Promjene
|
||||
label_statistics: Statistika
|
||||
label_commits_per_month: Pohrana po mjesecu
|
||||
label_commits_per_author: Pohrana po autoru
|
||||
label_view_diff: Pregled razlika
|
||||
label_diff_inline: uvučeno
|
||||
label_diff_side_by_side: paralelno
|
||||
label_options: Opcije
|
||||
label_copy_workflow_from: Kopiraj tijek rada od
|
||||
label_permissions_report: Izvješće o dozvolama
|
||||
label_watched_issues: Praćeni predmeti
|
||||
label_related_issues: Povezani predmeti
|
||||
label_applied_status: Primijenjen status
|
||||
label_loading: Učitavam...
|
||||
label_relation_new: Nova relacija
|
||||
label_relation_delete: Brisanje relacije
|
||||
label_relates_to: u relaciji sa
|
||||
label_duplicates: Duplira
|
||||
label_duplicated_by: ponovljen kao
|
||||
label_blocks: blokira
|
||||
label_blocked_by: blokiran od strane
|
||||
label_precedes: prethodi
|
||||
label_follows: slijedi
|
||||
label_end_to_start: od kraja do početka
|
||||
label_end_to_end: od kraja do kraja
|
||||
label_end_to_start: od kraja do početka
|
||||
label_end_to_end: od kraja do kraja
|
||||
label_stay_logged_in: Ostanite prijavljeni
|
||||
label_disabled: Isključen
|
||||
label_show_completed_versions: Prikaži završene verzije
|
||||
label_me: ja
|
||||
label_board: Forum
|
||||
label_board_new: Novi forum
|
||||
label_board_plural: Forumi
|
||||
label_topic_plural: Teme
|
||||
label_message_plural: Poruke
|
||||
label_message_last: Posljednja poruka
|
||||
label_message_new: Nova poruka
|
||||
label_message_posted: Poruka dodana
|
||||
label_reply_plural: Odgovori
|
||||
label_send_information: Pošalji korisniku informaciju o profilu
|
||||
label_year: Godina
|
||||
label_month: Mjesec
|
||||
label_week: Tjedan
|
||||
label_date_from: Od
|
||||
label_date_to: Do
|
||||
label_language_based: Zasnovano na jeziku
|
||||
label_sort_by: "Uredi po {{value}}"
|
||||
label_send_test_email: Pošalji testno E-pismo
|
||||
label_feeds_access_key: RSS access key
|
||||
label_missing_feeds_access_key: Missing a RSS access key
|
||||
label_feeds_access_key_created_on: "RSS kljuc za pristup je napravljen prije {{value}}"
|
||||
label_module_plural: Moduli
|
||||
label_added_time_by: "Promijenio {{author}} prije {{age}}"
|
||||
label_updated_time_by: "Dodao/la {{author}} prije {{age}}"
|
||||
label_updated_time: "Promijenjeno prije {{value}}"
|
||||
label_jump_to_a_project: Prebaci se na projekt...
|
||||
label_file_plural: Datoteke
|
||||
label_changeset_plural: Promjene
|
||||
label_default_columns: Zadani stupci
|
||||
label_no_change_option: (Bez promjene)
|
||||
label_bulk_edit_selected_issues: Zajednička promjena izabranih predmeta
|
||||
label_theme: Tema
|
||||
label_default: Zadana
|
||||
label_search_titles_only: Pretraživanje samo naslova
|
||||
label_user_mail_option_all: "Za bilo koji događaj na svim mojim projektima"
|
||||
label_user_mail_option_selected: "Za bilo koji događaj samo za izabrane projekte..."
|
||||
label_user_mail_option_none: "Samo za stvari koje pratim ili u kojima sudjelujem"
|
||||
label_user_mail_no_self_notified: "Ne želim primati obavijesti o promjenama koje sam napravim"
|
||||
label_registration_activation_by_email: aktivacija putem e-pošte
|
||||
label_registration_manual_activation: ručna aktivacija
|
||||
label_registration_automatic_activation: automatska aktivacija
|
||||
label_display_per_page: "Po stranici: {{value}}"
|
||||
label_age: Starost
|
||||
label_change_properties: Promijeni svojstva
|
||||
label_general: Općenito
|
||||
label_more: Još
|
||||
label_scm: SCM
|
||||
label_plugins: Plugins
|
||||
label_ldap_authentication: LDAP autentikacija
|
||||
label_downloads_abbr: D/L
|
||||
label_optional_description: Opcije
|
||||
label_add_another_file: Dodaj još jednu datoteku
|
||||
label_preferences: Preferences
|
||||
label_chronological_order: U kronološkom redoslijedu
|
||||
label_reverse_chronological_order: U obrnutom kronološkom redoslijedu
|
||||
label_planning: Planiranje
|
||||
label_incoming_emails: Dolazne poruke e-pošte
|
||||
label_generate_key: Generiraj ključ
|
||||
label_issue_watchers: Promatrači
|
||||
label_example: Primjer
|
||||
label_display: Display
|
||||
label_sort: Sort
|
||||
label_ascending: Ascending
|
||||
label_descending: Descending
|
||||
label_date_from_to: From {{start}} to {{end}}
|
||||
label_wiki_content_added: Wiki page added
|
||||
label_wiki_content_updated: Wiki page updated
|
||||
label_group: Group
|
||||
label_group_plural: Grupe
|
||||
label_group_new: Nova grupa
|
||||
label_time_entry_plural: Spent time
|
||||
label_version_sharing_none: Not shared
|
||||
label_version_sharing_descendants: With subprojects
|
||||
label_version_sharing_hierarchy: With project hierarchy
|
||||
label_version_sharing_tree: With project tree
|
||||
label_version_sharing_system: With all projects
|
||||
label_update_issue_done_ratios: Update issue done ratios
|
||||
label_copy_source: Source
|
||||
label_copy_target: Target
|
||||
label_copy_same_as_target: Same as target
|
||||
label_display_used_statuses_only: Only display statuses that are used by this tracker
|
||||
label_api_access_key: API access key
|
||||
label_missing_api_access_key: Missing an API access key
|
||||
label_api_access_key_created_on: "API access key created {{value}} ago"
|
||||
|
||||
button_login: Prijavi
|
||||
button_submit: Pošalji
|
||||
button_save: Spremi
|
||||
button_check_all: Označi sve
|
||||
button_uncheck_all: Isključi sve
|
||||
button_delete: Obriši
|
||||
button_create: Napravi
|
||||
button_create_and_continue: Napravi i nastavi
|
||||
button_test: Test
|
||||
button_edit: Uredi
|
||||
button_add: Dodaj
|
||||
button_change: Promijeni
|
||||
button_apply: Primijeni
|
||||
button_clear: Ukloni
|
||||
button_lock: Zaključaj
|
||||
button_unlock: Otključaj
|
||||
button_download: Preuzmi
|
||||
button_list: Spisak
|
||||
button_view: Pregled
|
||||
button_move: Premjesti
|
||||
button_move_and_follow: Move and follow
|
||||
button_back: Nazad
|
||||
button_cancel: Odustani
|
||||
button_activate: Aktiviraj
|
||||
button_sort: Redoslijed
|
||||
button_log_time: Zapiši vrijeme
|
||||
button_rollback: Izvrši rollback na ovu verziju
|
||||
button_watch: Prati
|
||||
button_unwatch: Prekini pracenje
|
||||
button_reply: Odgovori
|
||||
button_archive: Arhiviraj
|
||||
button_rollback: Dearhiviraj
|
||||
button_reset: Poništi
|
||||
button_rename: Promijeni ime
|
||||
button_change_password: Promjena zaporke
|
||||
button_copy: Kopiraj
|
||||
button_copy_and_follow: Copy and follow
|
||||
button_annotate: Annotate
|
||||
button_update: Promijeni
|
||||
button_configure: Konfiguracija
|
||||
button_quote: Navod
|
||||
button_duplicate: Duplicate
|
||||
button_show: Show
|
||||
|
||||
status_active: aktivan
|
||||
status_registered: Registriran
|
||||
status_locked: zaključan
|
||||
|
||||
version_status_open: open
|
||||
version_status_locked: locked
|
||||
version_status_closed: closed
|
||||
|
||||
field_active: Active
|
||||
|
||||
text_select_mail_notifications: Izbor akcija za koje će biti poslana obavijest e-poštom.
|
||||
text_regexp_info: eg. ^[A-Z0-9]+$
|
||||
text_min_max_length_info: 0 znači bez ograničenja
|
||||
text_project_destroy_confirmation: Da li ste sigurni da želite izbrisati ovaj projekt i sve njegove podatke?
|
||||
text_subprojects_destroy_warning: "Njegov(i) potprojekt(i): {{value}} će također biti obrisan."
|
||||
text_workflow_edit: Select a role and a tracker to edit the workflow
|
||||
text_are_you_sure: Da li ste sigurni?
|
||||
text_journal_changed: "{{label}} promijenjen iz {{old}} u {{new}}"
|
||||
text_journal_set_to: "{{label}} postavi na {{value}}"
|
||||
text_journal_deleted: "{{label}} izbrisano ({{old}})"
|
||||
text_journal_added: "{{label}} {{value}} added"
|
||||
text_tip_task_begin_day: Zadaci koji počinju ovog dana
|
||||
text_tip_task_end_day: zadaci koji se završavaju ovog dana
|
||||
text_tip_task_begin_end_day: Zadaci koji počinju i završavaju se ovog dana
|
||||
text_project_identifier_info: 'mala slova (a-z), brojevi i crtice su dozvoljeni.<br />Jednom snimljen identifikator se ne može mijenjati!'
|
||||
text_caracters_maximum: "Najviše {{count}} znakova."
|
||||
text_caracters_minimum: "Mora biti dugačko najmanje {{count}} znakova."
|
||||
text_length_between: "Dužina izmedu {{min}} i {{max}} znakova."
|
||||
text_tracker_no_workflow: Tijek rada nije definiran za ovaj tracker
|
||||
text_unallowed_characters: Nedozvoljeni znakovi
|
||||
text_comma_separated: Višestruke vrijednosti su dozvoljene (razdvojene zarezom).
|
||||
text_issues_ref_in_commit_messages: Referencing and fixing issues in commit messages
|
||||
text_tracker_no_workflow: No workflow defined for this tracker
|
||||
text_issues_ref_in_commit_messages: Referencing and fixing issues in commit messages
|
||||
text_issue_added: "Predmet {{id}} je prijavljen (prijavio {{author}})."
|
||||
text_issue_updated: "Predmet {{id}} je promijenjen {{author}})."
|
||||
text_wiki_destroy_confirmation: Da li ste sigurni da želite izbrisati ovaj wiki i njegov sadržaj?
|
||||
text_issue_category_destroy_question: "Neke predmeti ({{count}}) su dodijeljeni ovoj kategoriji. Što želite uraditi?"
|
||||
text_issue_category_destroy_assignments: Ukloni dodjeljivanje kategorija
|
||||
text_issue_category_reassign_to: Ponovo dodijeli predmete ovoj kategoriji
|
||||
text_user_mail_option: "Za neizabrane projekte, primit ćete obavjesti samo o stvarima koje pratite ili u kojima sudjelujete (npr. predmete koje ste vi napravili ili koje su vama dodjeljeni)."
|
||||
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."
|
||||
text_load_default_configuration: Učitaj početnu konfiguraciju
|
||||
text_status_changed_by_changeset: "Applied in changeset {{value}}."
|
||||
text_issues_destroy_confirmation: 'Jeste li sigurni da želite obrisati izabrani/e predmet(e)?'
|
||||
text_select_project_modules: 'Odaberite module koji će biti omogućeni za ovaj projekt:'
|
||||
text_default_administrator_account_changed: Default administrator account changed
|
||||
text_file_repository_writable: Dozvoljeno pisanje u direktorij za privitke
|
||||
text_plugin_assets_writable: Plugin assets directory writable
|
||||
text_rmagick_available: RMagick dostupan (nije obavezno)
|
||||
text_destroy_time_entries_question: "{{hours}} sati je prijavljeno za predmete koje želite obrisati. Što ćete učiniti?"
|
||||
text_destroy_time_entries: Obriši prijavljene sate
|
||||
text_assign_time_entries_to_project: Pridruži prijavljene sate projektu
|
||||
text_reassign_time_entries: 'Premjesti prijavljene sate ovom predmetu:'
|
||||
text_user_wrote: "{{value}} je napisao/la:"
|
||||
text_enumeration_destroy_question: "{{count}} objekata je pridruženo toj vrijednosti."
|
||||
text_enumeration_category_reassign_to: 'Premjesti ih ovoj vrijednosti:'
|
||||
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."
|
||||
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."
|
||||
text_diff_truncated: '... Ovaj diff je odrezan zato što prelazi maksimalnu veličinu koja može biti prikazana.'
|
||||
text_custom_field_possible_values_info: 'One line for each value'
|
||||
text_wiki_page_destroy_question: "This page has {{descendants}} child page(s) and descendant(s). What do you want to do?"
|
||||
text_wiki_page_nullify_children: "Keep child pages as root pages"
|
||||
text_wiki_page_destroy_children: "Delete child pages and all their descendants"
|
||||
text_wiki_page_reassign_children: "Reassign child pages to this parent page"
|
||||
default_role_manager: Upravitelj
|
||||
default_role_developper: Razvojni inženjer
|
||||
default_role_reporter: Korisnik
|
||||
default_tracker_bug: Pogreška
|
||||
default_tracker_feature: Funkcionalnost
|
||||
default_tracker_support: Podrška
|
||||
default_issue_status_new: Novo
|
||||
default_issue_status_assigned: Dodijeljeno
|
||||
default_issue_status_resolved: Riješeno
|
||||
default_issue_status_feedback: Povratna informacija
|
||||
default_issue_status_closed: Zatvoreno
|
||||
default_issue_status_rejected: Odbaceno
|
||||
default_doc_category_user: Korisnička dokumentacija
|
||||
default_doc_category_tech: Tehnička dokumentacija
|
||||
default_priority_low: Nizak
|
||||
default_priority_normal: Redovan
|
||||
default_priority_high: Visok
|
||||
default_priority_urgent: Hitan
|
||||
default_priority_immediate: Odmah
|
||||
default_activity_design: Dizajn
|
||||
default_activity_development: Razvoj
|
||||
enumeration_issue_priorities: Prioriteti predmeta
|
||||
enumeration_doc_categories: Kategorija dokumenata
|
||||
enumeration_activities: Aktivnosti (po vremenu)
|
||||
enumeration_system_activity: System Activity
|
||||
field_sharing: Sharing
|
||||
text_line_separated: Multiple values allowed (one line for each value).
|
||||
label_close_versions: Close completed versions
|
||||
button_unarchive: Unarchive
|
||||
label_start_to_end: start to end
|
||||
label_start_to_start: start to start
|
||||
field_issue_to: Related issue
|
||||
default_issue_status_in_progress: In Progress
|
||||
text_own_membership_delete_confirmation: |-
|
||||
You are about to remove some or all of your permissions and may no longer be able to edit this project after that.
|
||||
Are you sure you want to continue?
|
||||
label_board_sticky: Sticky
|
||||
label_board_locked: Locked
|
||||
permission_export_wiki_pages: Export wiki pages
|
||||
setting_cache_formatted_text: Cache formatted text
|
||||
permission_manage_project_activities: Manage project activities
|
||||
label_project_copy_notifications: Send email notifications during the project copy
|
||||
@@ -907,3 +907,9 @@
|
||||
You are about to remove some or all of your permissions and may no longer be able to edit this project after that.
|
||||
Are you sure you want to continue?
|
||||
label_close_versions: Close completed versions
|
||||
label_board_sticky: Sticky
|
||||
label_board_locked: Locked
|
||||
permission_export_wiki_pages: Export wiki pages
|
||||
setting_cache_formatted_text: Cache formatted text
|
||||
permission_manage_project_activities: Manage project activities
|
||||
label_project_copy_notifications: Send email notifications during the project copy
|
||||
|
||||
@@ -894,3 +894,9 @@ id:
|
||||
You are about to remove some or all of your permissions and may no longer be able to edit this project after that.
|
||||
Are you sure you want to continue?
|
||||
label_close_versions: Close completed versions
|
||||
label_board_sticky: Sticky
|
||||
label_board_locked: Locked
|
||||
permission_export_wiki_pages: Export wiki pages
|
||||
setting_cache_formatted_text: Cache formatted text
|
||||
permission_manage_project_activities: Manage project activities
|
||||
label_project_copy_notifications: Send email notifications during the project copy
|
||||
|
||||
@@ -889,3 +889,9 @@ it:
|
||||
You are about to remove some or all of your permissions and may no longer be able to edit this project after that.
|
||||
Are you sure you want to continue?
|
||||
label_close_versions: Close completed versions
|
||||
label_board_sticky: Sticky
|
||||
label_board_locked: Locked
|
||||
permission_export_wiki_pages: Export wiki pages
|
||||
setting_cache_formatted_text: Cache formatted text
|
||||
permission_manage_project_activities: Manage project activities
|
||||
label_project_copy_notifications: Send email notifications during the project copy
|
||||
|
||||
@@ -64,8 +64,8 @@ ja:
|
||||
one: "1年以上"
|
||||
other: "{{count}}年以上"
|
||||
almost_x_years:
|
||||
one: "almost 1 year"
|
||||
other: "almost {{count}} years"
|
||||
one: "ほぼ1年"
|
||||
other: "ほぼ{{count}}年"
|
||||
|
||||
number:
|
||||
format:
|
||||
@@ -321,6 +321,7 @@ ja:
|
||||
setting_plain_text_mail: プレインテキストのみ(HTMLなし)
|
||||
setting_host_name: ホスト名
|
||||
setting_text_formatting: テキストの書式
|
||||
setting_cache_formatted_text: 書式化されたテキストをキャッシュする
|
||||
setting_wiki_compression: Wiki履歴を圧縮する
|
||||
setting_feeds_limit: フィード内容の上限
|
||||
setting_default_projects_public: デフォルトで新しいプロジェクトは公開にする
|
||||
@@ -398,6 +399,7 @@ ja:
|
||||
permission_rename_wiki_pages: Wikiページ名の変更
|
||||
permission_delete_wiki_pages: Wikiページの削除
|
||||
permission_view_wiki_pages: Wikiの閲覧
|
||||
permission_export_wiki_pages: Wikiページを他の形式に出力
|
||||
permission_view_wiki_edits: Wiki履歴の閲覧
|
||||
permission_edit_wiki_pages: Wikiページの編集
|
||||
permission_delete_wiki_pages_attachments: 添付ファイルの削除
|
||||
@@ -534,6 +536,7 @@ ja:
|
||||
label_version_new: 新しいバージョン
|
||||
label_version_plural: バージョン
|
||||
label_confirmation: 確認
|
||||
label_close_versions: 完了したバージョンを終了にする
|
||||
label_export_to: '他の形式に出力:'
|
||||
label_read: 読む...
|
||||
label_public_projects: 公開プロジェクト
|
||||
@@ -587,8 +590,8 @@ ja:
|
||||
label_query_new: 新しいクエリ
|
||||
label_filter_add: フィルタ追加
|
||||
label_filter_plural: フィルタ
|
||||
label_equals: 含む
|
||||
label_not_equals: 含まない
|
||||
label_equals: 等しい
|
||||
label_not_equals: 等しくない
|
||||
label_in_less_than: が今日から○日後以前
|
||||
label_in_more_than: が今日から○日後以降
|
||||
label_greater_or_equal: 以上
|
||||
@@ -692,6 +695,8 @@ ja:
|
||||
label_board: フォーラム
|
||||
label_board_new: 新しいフォーラム
|
||||
label_board_plural: フォーラム
|
||||
label_board_sticky: スティッキー
|
||||
label_board_locked: ロック
|
||||
label_topic_plural: トピック
|
||||
label_message_plural: メッセージ
|
||||
label_message_last: 最新のメッセージ
|
||||
@@ -910,4 +915,5 @@ ja:
|
||||
enumeration_doc_categories: 文書カテゴリ
|
||||
enumeration_activities: 作業分類 (時間トラッキング)
|
||||
enumeration_system_activity: システム作業分類
|
||||
label_close_versions: Close completed versions
|
||||
permission_manage_project_activities: Manage project activities
|
||||
label_project_copy_notifications: Send email notifications during the project copy
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
# by Kihyun Yoon(ddumbugie@gmail.com),http://plenum.textcube.com/
|
||||
# by John Hwang (jhwang@tavon.org),http://github.com/tavon
|
||||
# by Yonghwan SO(please insert your email), last update at 2009-09-11
|
||||
# last update at 2009-09-11 by Kihyun Yoon
|
||||
# last update at 2010-01-23 by Kihyun Yoon
|
||||
ko:
|
||||
date:
|
||||
formats:
|
||||
@@ -65,8 +65,8 @@ ko:
|
||||
one: "일년 이상"
|
||||
other: "{{count}}년 이상"
|
||||
almost_x_years:
|
||||
one: "almost 1 year"
|
||||
other: "almost {{count}} years"
|
||||
one: "약 1년"
|
||||
other: "약 {{count}}년"
|
||||
prompts:
|
||||
year: "년"
|
||||
month: "월"
|
||||
@@ -182,8 +182,8 @@ ko:
|
||||
general_lang_name: '한국어(Korean)'
|
||||
general_csv_separator: ','
|
||||
general_csv_decimal_separator: '.'
|
||||
general_csv_encoding: UTF-8
|
||||
general_pdf_encoding: UTF-8
|
||||
general_csv_encoding: CP949
|
||||
general_pdf_encoding: CP949
|
||||
general_first_day_of_week: '7'
|
||||
|
||||
notice_account_updated: 계정이 성공적으로 변경되었습니다.
|
||||
@@ -709,7 +709,7 @@ ko:
|
||||
label_language_based: 언어설정에 따름
|
||||
label_sort_by: "{{value}}(으)로 정렬"
|
||||
label_send_test_email: 테스트 메일 보내기
|
||||
label_feeds_access_key_created_on: "피드 접근 키가 {{value}} 이전에 생성됨 "
|
||||
label_feeds_access_key_created_on: "피드 접근 키가 {{value}} 이전에 생성되었습니다."
|
||||
label_module_plural: 모듈
|
||||
label_added_time_by: "{{author}}이(가) {{age}} 전에 추가함"
|
||||
label_updated_time_by: "{{author}}이(가) {{age}} 전에 변경"
|
||||
@@ -925,20 +925,26 @@ ko:
|
||||
setting_start_of_week: 달력 시작 요일
|
||||
permission_view_issues: 일감 보기
|
||||
label_display_used_statuses_only: 이 일감유형에서 사용되는 상태만 보여주기
|
||||
label_revision_id: Revision {{value}}
|
||||
label_api_access_key: API access key
|
||||
label_api_access_key_created_on: API access key created {{value}} ago
|
||||
label_feeds_access_key: RSS access key
|
||||
notice_api_access_key_reseted: Your API access key was reset.
|
||||
setting_rest_api_enabled: Enable REST web service
|
||||
label_missing_api_access_key: Missing an API access key
|
||||
label_missing_feeds_access_key: Missing a RSS access key
|
||||
button_show: Show
|
||||
text_line_separated: Multiple values allowed (one line for each value).
|
||||
setting_mail_handler_body_delimiters: Truncate emails after one of these lines
|
||||
permission_add_subprojects: Create subprojects
|
||||
label_subproject_new: New subproject
|
||||
label_revision_id: 개정판 {{value}}
|
||||
label_api_access_key: API 접근키
|
||||
label_api_access_key_created_on: API 접근키가 {{value}} 전에 생성되었습니다.
|
||||
label_feeds_access_key: RSS 접근키
|
||||
notice_api_access_key_reseted: API 접근키가 초기화되었습니다.
|
||||
setting_rest_api_enabled: REST 웹서비스 활성화
|
||||
label_missing_api_access_key: API 접근키가 없습니다.
|
||||
label_missing_feeds_access_key: RSS 접근키가 없습니다.
|
||||
button_show: 보기
|
||||
text_line_separated: 여러 값이 허용됨(값 마다 한 줄씩)
|
||||
setting_mail_handler_body_delimiters: 메일 본문 구분자
|
||||
permission_add_subprojects: 하위 프로젝트 만들기
|
||||
label_subproject_new: 새 하위 프로젝트
|
||||
text_own_membership_delete_confirmation: |-
|
||||
You are about to remove some or all of your permissions and may no longer be able to edit this project after that.
|
||||
Are you sure you want to continue?
|
||||
label_close_versions: Close completed versions
|
||||
권한들 일부 또는 전부를 막 삭제하려고 하고 있습니다. 그렇게 되면 이 프로젝트를 더이상 수정할 수 없게 됩니다.
|
||||
계속하시겠습니까?
|
||||
label_close_versions: 완료된 버전 닫기
|
||||
label_board_sticky: Sticky
|
||||
label_board_locked: Locked
|
||||
permission_export_wiki_pages: Export wiki pages
|
||||
setting_cache_formatted_text: Cache formatted text
|
||||
permission_manage_project_activities: Manage project activities
|
||||
label_project_copy_notifications: Send email notifications during the project copy
|
||||
|
||||
@@ -950,3 +950,9 @@ lt:
|
||||
You are about to remove some or all of your permissions and may no longer be able to edit this project after that.
|
||||
Are you sure you want to continue?
|
||||
label_close_versions: Close completed versions
|
||||
label_board_sticky: Sticky
|
||||
label_board_locked: Locked
|
||||
permission_export_wiki_pages: Export wiki pages
|
||||
setting_cache_formatted_text: Cache formatted text
|
||||
permission_manage_project_activities: Manage project activities
|
||||
label_project_copy_notifications: Send email notifications during the project copy
|
||||
|
||||
@@ -864,3 +864,9 @@ nl:
|
||||
You are about to remove some or all of your permissions and may no longer be able to edit this project after that.
|
||||
Are you sure you want to continue?
|
||||
label_close_versions: Close completed versions
|
||||
label_board_sticky: Sticky
|
||||
label_board_locked: Locked
|
||||
permission_export_wiki_pages: Export wiki pages
|
||||
setting_cache_formatted_text: Cache formatted text
|
||||
permission_manage_project_activities: Manage project activities
|
||||
label_project_copy_notifications: Send email notifications during the project copy
|
||||
|
||||
@@ -877,3 +877,9 @@
|
||||
You are about to remove some or all of your permissions and may no longer be able to edit this project after that.
|
||||
Are you sure you want to continue?
|
||||
label_close_versions: Close completed versions
|
||||
label_board_sticky: Sticky
|
||||
label_board_locked: Locked
|
||||
permission_export_wiki_pages: Export wiki pages
|
||||
setting_cache_formatted_text: Cache formatted text
|
||||
permission_manage_project_activities: Manage project activities
|
||||
label_project_copy_notifications: Send email notifications during the project copy
|
||||
|
||||
@@ -907,3 +907,9 @@ pl:
|
||||
version_status_locked: zablokowana
|
||||
version_status_open: otwarta
|
||||
|
||||
label_board_sticky: Przyklejona
|
||||
label_board_locked: Zamknięta
|
||||
permission_export_wiki_pages: Eksport stron wiki
|
||||
permission_manage_project_activities: Zarządzanie aktywnościami projektu
|
||||
setting_cache_formatted_text: Cache formatted text
|
||||
label_project_copy_notifications: Send email notifications during the project copy
|
||||
|
||||
@@ -901,11 +901,18 @@ pt-BR:
|
||||
setting_rest_api_enabled: Habilitdar REST web service
|
||||
label_missing_api_access_key: Chave de acesso a API faltando
|
||||
label_missing_feeds_access_key: Chave de acesso ao RSS faltando
|
||||
text_line_separated: Multiple values allowed (one line for each value).
|
||||
setting_mail_handler_body_delimiters: Truncate emails after one of these lines
|
||||
permission_add_subprojects: Create subprojects
|
||||
label_subproject_new: New subproject
|
||||
text_line_separated: Múltiplos valores permitidos (uma linha para cada valor).
|
||||
setting_mail_handler_body_delimiters: Truncar e-mails após uma destas linhas
|
||||
permission_add_subprojects: Criar subprojetos
|
||||
label_subproject_new: Novo subprojeto
|
||||
text_own_membership_delete_confirmation: |-
|
||||
You are about to remove some or all of your permissions and may no longer be able to edit this project after that.
|
||||
Are you sure you want to continue?
|
||||
label_close_versions: Close completed versions
|
||||
Você está para remover algumas de suas próprias permissões e pode não mais estar apto a editar este projeto após esta operação.
|
||||
Você tem certeza que deseja continuar?
|
||||
label_close_versions: Fechar versões concluídas
|
||||
label_board_sticky: Marcado
|
||||
label_board_locked: Travado
|
||||
label_change_log: Registro de alterações
|
||||
permission_export_wiki_pages: Export wiki pages
|
||||
setting_cache_formatted_text: Cache formatted text
|
||||
permission_manage_project_activities: Manage project activities
|
||||
label_project_copy_notifications: Send email notifications during the project copy
|
||||
|
||||
@@ -894,3 +894,9 @@ pt:
|
||||
You are about to remove some or all of your permissions and may no longer be able to edit this project after that.
|
||||
Are you sure you want to continue?
|
||||
label_close_versions: Close completed versions
|
||||
label_board_sticky: Sticky
|
||||
label_board_locked: Locked
|
||||
permission_export_wiki_pages: Export wiki pages
|
||||
setting_cache_formatted_text: Cache formatted text
|
||||
permission_manage_project_activities: Manage project activities
|
||||
label_project_copy_notifications: Send email notifications during the project copy
|
||||
|
||||
@@ -879,3 +879,9 @@ ro:
|
||||
You are about to remove some or all of your permissions and may no longer be able to edit this project after that.
|
||||
Are you sure you want to continue?
|
||||
label_close_versions: Close completed versions
|
||||
label_board_sticky: Sticky
|
||||
label_board_locked: Locked
|
||||
permission_export_wiki_pages: Export wiki pages
|
||||
setting_cache_formatted_text: Cache formatted text
|
||||
permission_manage_project_activities: Manage project activities
|
||||
label_project_copy_notifications: Send email notifications during the project copy
|
||||
|
||||
@@ -650,7 +650,7 @@ ru:
|
||||
label_send_information: Отправить пользователю информацию по учетной записи
|
||||
label_send_test_email: Послать email для проверки
|
||||
label_settings: Настройки
|
||||
label_show_completed_versions: Показать завершенную версию
|
||||
label_show_completed_versions: Показывать завершенные версии
|
||||
label_sort: Сортировать
|
||||
label_sort_by: "Сортировать по {{value}}"
|
||||
label_sort_higher: Вверх
|
||||
@@ -941,7 +941,7 @@ ru:
|
||||
text_journal_added: "{{label}} {{value}} добавлен"
|
||||
field_active: Активно
|
||||
enumeration_system_activity: Системная активность
|
||||
permission_delete_issue_watchers: Удалить наблюдателей
|
||||
permission_delete_issue_watchers: Удаление наблюдателей
|
||||
version_status_closed: закрыт
|
||||
version_status_locked: заблокирован
|
||||
version_status_open: открыт
|
||||
@@ -974,7 +974,7 @@ ru:
|
||||
label_api_access_key: Ключ доступа к API
|
||||
text_line_separated: Разрешено несколько значений (по одному значению в строку).
|
||||
label_revision_id: Ревизия {{value}}
|
||||
permission_view_issues: Показать проблемы
|
||||
permission_view_issues: Просмотр задач
|
||||
label_display_used_statuses_only: Отображать только те статусы, которые используются в этом трекере
|
||||
label_api_access_key_created_on: Ключ доступ к API был создан {{value}} назад
|
||||
label_feeds_access_key: Ключ доступа к RSS
|
||||
@@ -984,9 +984,15 @@ ru:
|
||||
label_missing_api_access_key: Отсутствует ключ доступа к API
|
||||
label_missing_feeds_access_key: Отсутствует ключ доступа к RSS
|
||||
setting_mail_handler_body_delimiters: Урезать письмо после одной из этих строк
|
||||
permission_add_subprojects: Создать подпроекты
|
||||
permission_add_subprojects: Создание подпроектов
|
||||
label_subproject_new: Новый подпроект
|
||||
text_own_membership_delete_confirmation: |-
|
||||
Вы собираетесь удалить некоторые или все права, из-за чего могут пропасть права на редактирование этого проекта.
|
||||
Продолжить?
|
||||
label_close_versions: Закрыть завершенные версии
|
||||
label_board_sticky: Прикреплена
|
||||
label_board_locked: Заблокирована
|
||||
permission_export_wiki_pages: Export wiki pages
|
||||
setting_cache_formatted_text: Cache formatted text
|
||||
permission_manage_project_activities: Manage project activities
|
||||
label_project_copy_notifications: Send email notifications during the project copy
|
||||
|
||||
@@ -881,3 +881,9 @@ sk:
|
||||
You are about to remove some or all of your permissions and may no longer be able to edit this project after that.
|
||||
Are you sure you want to continue?
|
||||
label_close_versions: Close completed versions
|
||||
label_board_sticky: Sticky
|
||||
label_board_locked: Locked
|
||||
permission_export_wiki_pages: Export wiki pages
|
||||
setting_cache_formatted_text: Cache formatted text
|
||||
permission_manage_project_activities: Manage project activities
|
||||
label_project_copy_notifications: Send email notifications during the project copy
|
||||
|
||||
@@ -878,3 +878,9 @@ sl:
|
||||
You are about to remove some or all of your permissions and may no longer be able to edit this project after that.
|
||||
Are you sure you want to continue?
|
||||
label_close_versions: Close completed versions
|
||||
label_board_sticky: Sticky
|
||||
label_board_locked: Locked
|
||||
permission_export_wiki_pages: Export wiki pages
|
||||
setting_cache_formatted_text: Cache formatted text
|
||||
permission_manage_project_activities: Manage project activities
|
||||
label_project_copy_notifications: Send email notifications during the project copy
|
||||
|
||||
@@ -897,3 +897,9 @@
|
||||
You are about to remove some or all of your permissions and may no longer be able to edit this project after that.
|
||||
Are you sure you want to continue?
|
||||
label_close_versions: Close completed versions
|
||||
label_board_sticky: Sticky
|
||||
label_board_locked: Locked
|
||||
permission_export_wiki_pages: Export wiki pages
|
||||
setting_cache_formatted_text: Cache formatted text
|
||||
permission_manage_project_activities: Manage project activities
|
||||
label_project_copy_notifications: Send email notifications during the project copy
|
||||
|
||||
@@ -713,6 +713,8 @@ sv:
|
||||
label_board: Forum
|
||||
label_board_new: Nytt forum
|
||||
label_board_plural: Forum
|
||||
label_board_locked: Låst
|
||||
label_board_sticky: Sticky
|
||||
label_topic_plural: Ämnen
|
||||
label_message_plural: Meddelanden
|
||||
label_message_last: Senaste meddelande
|
||||
@@ -931,3 +933,7 @@ sv:
|
||||
enumeration_doc_categories: Dokumentkategorier
|
||||
enumeration_activities: Aktiviteter (tidsuppföljning)
|
||||
enumeration_system_activity: Systemaktivitet
|
||||
permission_export_wiki_pages: Export wiki pages
|
||||
setting_cache_formatted_text: Cache formatted text
|
||||
permission_manage_project_activities: Manage project activities
|
||||
label_project_copy_notifications: Send email notifications during the project copy
|
||||
|
||||
@@ -879,3 +879,9 @@ th:
|
||||
You are about to remove some or all of your permissions and may no longer be able to edit this project after that.
|
||||
Are you sure you want to continue?
|
||||
label_close_versions: Close completed versions
|
||||
label_board_sticky: Sticky
|
||||
label_board_locked: Locked
|
||||
permission_export_wiki_pages: Export wiki pages
|
||||
setting_cache_formatted_text: Cache formatted text
|
||||
permission_manage_project_activities: Manage project activities
|
||||
label_project_copy_notifications: Send email notifications during the project copy
|
||||
|
||||
@@ -909,3 +909,9 @@ tr:
|
||||
You are about to remove some or all of your permissions and may no longer be able to edit this project after that.
|
||||
Are you sure you want to continue?
|
||||
label_close_versions: Close completed versions
|
||||
label_board_sticky: Sticky
|
||||
label_board_locked: Locked
|
||||
permission_export_wiki_pages: Export wiki pages
|
||||
setting_cache_formatted_text: Cache formatted text
|
||||
permission_manage_project_activities: Manage project activities
|
||||
label_project_copy_notifications: Send email notifications during the project copy
|
||||
|
||||
@@ -878,3 +878,9 @@ uk:
|
||||
You are about to remove some or all of your permissions and may no longer be able to edit this project after that.
|
||||
Are you sure you want to continue?
|
||||
label_close_versions: Close completed versions
|
||||
label_board_sticky: Sticky
|
||||
label_board_locked: Locked
|
||||
permission_export_wiki_pages: Export wiki pages
|
||||
setting_cache_formatted_text: Cache formatted text
|
||||
permission_manage_project_activities: Manage project activities
|
||||
label_project_copy_notifications: Send email notifications during the project copy
|
||||
|
||||
@@ -941,3 +941,9 @@ vi:
|
||||
You are about to remove some or all of your permissions and may no longer be able to edit this project after that.
|
||||
Are you sure you want to continue?
|
||||
label_close_versions: Close completed versions
|
||||
label_board_sticky: Sticky
|
||||
label_board_locked: Locked
|
||||
permission_export_wiki_pages: Export wiki pages
|
||||
setting_cache_formatted_text: Cache formatted text
|
||||
permission_manage_project_activities: Manage project activities
|
||||
label_project_copy_notifications: Send email notifications during the project copy
|
||||
|
||||
@@ -755,6 +755,8 @@
|
||||
label_board: 論壇
|
||||
label_board_new: 建立新論壇
|
||||
label_board_plural: 論壇
|
||||
label_board_locked: 鎖定
|
||||
label_board_sticky: 置頂
|
||||
label_topic_plural: 討論主題
|
||||
label_message_plural: 訊息
|
||||
label_message_last: 上一封訊息
|
||||
@@ -973,3 +975,7 @@
|
||||
enumeration_doc_categories: 文件分類
|
||||
enumeration_activities: 活動 (時間追蹤)
|
||||
enumeration_system_activity: 系統活動
|
||||
permission_export_wiki_pages: Export wiki pages
|
||||
setting_cache_formatted_text: Cache formatted text
|
||||
permission_manage_project_activities: Manage project activities
|
||||
label_project_copy_notifications: Send email notifications during the project copy
|
||||
|
||||
@@ -355,6 +355,7 @@ zh:
|
||||
setting_rest_api_enabled: 启用REST web service
|
||||
|
||||
permission_add_project: 新建项目
|
||||
permission_add_subprojects: 新建子项目
|
||||
permission_edit_project: 编辑项目
|
||||
permission_select_project_modules: 选择项目模块
|
||||
permission_manage_members: 管理成员
|
||||
@@ -490,6 +491,7 @@ zh:
|
||||
label_auth_source_new: 新建认证模式
|
||||
label_auth_source_plural: 认证模式
|
||||
label_subproject_plural: 子项目
|
||||
label_subproject_new: 新建子项目
|
||||
label_and_its_subprojects: "{{value}} 及其子项目"
|
||||
label_min_max_length: 最小 - 最大 长度
|
||||
label_list: 列表
|
||||
@@ -524,6 +526,7 @@ zh:
|
||||
label_version: 版本
|
||||
label_version_new: 新建版本
|
||||
label_version_plural: 版本
|
||||
label_close_versions: 关闭已完成的版本
|
||||
label_confirmation: 确认
|
||||
label_export_to: 导出
|
||||
label_read: 读取...
|
||||
@@ -873,6 +876,7 @@ zh:
|
||||
text_wiki_page_reassign_children: 将子页面的上级页面设置为
|
||||
text_wiki_page_nullify_children: 将子页面保留为根页面
|
||||
text_wiki_page_destroy_children: 删除子页面及其所有下级页面
|
||||
text_own_membership_delete_confirmation: 你正在删除你现有的某些或全部权限,如果这样做了你可能将会再也无法编辑该项目了。你确定要继续吗?
|
||||
|
||||
default_role_manager: 管理人员
|
||||
default_role_developper: 开发人员
|
||||
@@ -900,9 +904,9 @@ zh:
|
||||
enumeration_doc_categories: 文档类别
|
||||
enumeration_activities: 活动(时间跟踪)
|
||||
enumeration_system_activity: 系统活动
|
||||
permission_add_subprojects: Create subprojects
|
||||
label_subproject_new: New subproject
|
||||
text_own_membership_delete_confirmation: |-
|
||||
You are about to remove some or all of your permissions and may no longer be able to edit this project after that.
|
||||
Are you sure you want to continue?
|
||||
label_close_versions: Close completed versions
|
||||
label_board_sticky: Sticky
|
||||
label_board_locked: Locked
|
||||
permission_export_wiki_pages: Export wiki pages
|
||||
setting_cache_formatted_text: Cache formatted text
|
||||
permission_manage_project_activities: Manage project activities
|
||||
label_project_copy_notifications: Send email notifications during the project copy
|
||||
|
||||
@@ -0,0 +1,9 @@
|
||||
class AddIndexOnChangesetsScmid < ActiveRecord::Migration
|
||||
def self.up
|
||||
add_index :changesets, [:repository_id, :scmid], :name => :changesets_repos_scmid
|
||||
end
|
||||
|
||||
def self.down
|
||||
remove_index :changesets, :name => :changesets_repos_scmid
|
||||
end
|
||||
end
|
||||
102
doc/CHANGELOG
102
doc/CHANGELOG
@@ -4,6 +4,108 @@ Redmine - project management software
|
||||
Copyright (C) 2006-2010 Jean-Philippe Lang
|
||||
http://www.redmine.org/
|
||||
|
||||
== v1.0.0
|
||||
|
||||
Adds context menu to the roadmap issue lists
|
||||
|
||||
== 2010-06-24 v0.9.5
|
||||
Linkify folder names on revision view
|
||||
"fiters" and "options" should be hidden in print view via css
|
||||
Fixed: NoMethodError when no issue params are submitted
|
||||
Fixed: projects.atom with required authentication
|
||||
Fixed: External links not correctly displayed in Wiki TOC
|
||||
Fixed: Member role forms in project settings are not hidden after member added
|
||||
Fixed: pre can't be inside p
|
||||
Fixed: session cookie path does not respect RAILS_RELATIVE_URL_ROOT
|
||||
Fixed: mail handler fails when the from address is empty
|
||||
|
||||
|
||||
== 2010-05-01 v0.9.4
|
||||
|
||||
Filters collapsed by default on issues index page for a saved query
|
||||
Fixed: When categories list is too big the popup menu doesn't adjust (ex. in the issue list)
|
||||
Fixed: remove "main-menu" div when the menu is empty
|
||||
Fixed: Code syntax highlighting not working in Document page
|
||||
Fixed: Git blame/annotate fails on moved files
|
||||
Fixed: Failing test in test_show_atom
|
||||
Fixed: Migrate from trac - not displayed Wikis
|
||||
Fixed: Email notifications on file upload sent to empty recipient list
|
||||
Fixed: Migrating from trac is not possible, fails to allocate memory
|
||||
Fixed: Lost password no longer flashes a confirmation message
|
||||
Fixed: Crash while deleting in-use enumeration
|
||||
Fixed: Hard coded English string at the selection of issue watchers
|
||||
Fixed: Bazaar v2.1.0 changed behaviour
|
||||
Fixed: Roadmap display can raise an exception if no trackers are selected
|
||||
Fixed: Gravatar breaks layout of "logged in" page
|
||||
Fixed: Reposman.rb on Windows
|
||||
Fixed: Possible error 500 while moving an issue to another project with SQLite
|
||||
Fixed: backslashes in issue description/note should be escaped when quoted
|
||||
Fixed: Long text in <pre> disrupts Associated revisions
|
||||
Fixed: Links to missing wiki pages not red on project overview page
|
||||
Fixed: Cannot delete a project with subprojects that shares versions
|
||||
Fixed: Update of Subversion changesets broken under Solaris
|
||||
Fixed: "Move issues" permission not working for Non member
|
||||
Fixed: Sidebar overlap on Users tab of Group editor
|
||||
Fixed: Error on db:migrate with table prefix set (hardcoded name in principal.rb)
|
||||
Fixed: Report shows sub-projects for non-members
|
||||
Fixed: 500 internal error when browsing any Redmine page in epiphany
|
||||
Fixed: Watchers selection lost when issue creation fails
|
||||
Fixed: When copying projects, redmine should not generate an email to people who created issues
|
||||
Fixed: Issue "#" table cells should have a class attribute to enable fine-grained CSS theme
|
||||
Fixed: Plugin generators should display help if no parameter is given
|
||||
|
||||
|
||||
== 2010-02-28 v0.9.3
|
||||
|
||||
Adds filter for system shared versions on the cross project issue list
|
||||
Makes project identifiers searchable
|
||||
Remove invalid utf8 sequences from commit comments and author name
|
||||
Fixed: Wrong link when "http" not included in project "Homepage" link
|
||||
Fixed: Escaping in html email templates
|
||||
Fixed: Pound (#) followed by number with leading zero (0) removes leading zero when rendered in wiki
|
||||
Fixed: Deselecting textile text formatting causes interning empty string errors
|
||||
Fixed: error with postgres when entering a non-numeric id for an issue relation
|
||||
Fixed: div.task incorrectly wrapping on Gantt Chart
|
||||
Fixed: Project copy loses wiki pages hierarchy
|
||||
Fixed: parent project field doesn't include blank value when a member with 'add subproject' permission edits a child project
|
||||
Fixed: Repository.fetch_changesets tries to fetch changesets for archived projects
|
||||
Fixed: Duplicated project name for subproject version on gantt chart
|
||||
Fixed: roadmap shows subprojects issues even if subprojects is unchecked
|
||||
Fixed: IndexError if all the :last menu items are deleted from a menu
|
||||
Fixed: Very high CPU usage for a long time when fetching commits from a large Git repository
|
||||
|
||||
|
||||
== 2010-02-07 v0.9.2
|
||||
|
||||
* Fixed: Sub-project repository commits not displayed on parent project issues
|
||||
* Fixed: Potential security leak on my page calendar
|
||||
* Fixed: Project tree structure is broken by deleting the project with the subproject
|
||||
* Fixed: Error message shown duplicated when creating a new group
|
||||
* Fixed: Firefox cuts off large pages
|
||||
* Fixed: Invalid format parameter returns a DoubleRenderError on issues index
|
||||
* Fixed: Unnecessary Quote button on locked forum message
|
||||
* Fixed: Error raised when trying to view the gantt or calendar with a grouped query
|
||||
* Fixed: PDF support for Korean locale
|
||||
* Fixed: Deprecation warning in extra/svn/reposman.rb
|
||||
|
||||
|
||||
== 2010-01-30 v0.9.1
|
||||
|
||||
* Vertical alignment for inline images in formatted text set to 'middle'
|
||||
* Fixed: Redmine.pm error "closing dbh with active statement handles at /usr/lib/perl5/Apache/Redmine.pm"
|
||||
* Fixed: copyright year in footer set to 2010
|
||||
* Fixed: Trac migration script may not output query lines
|
||||
* Fixed: Email notifications may affect language of notice messages on the UI
|
||||
* Fixed: Can not search for 2 letters word
|
||||
* Fixed: Attachments get saved on issue update even if validation fails
|
||||
* Fixed: Tab's 'border-bottom' not absent when selected
|
||||
* Fixed: Issue summary tables that list by user are not sorted
|
||||
* Fixed: Issue pdf export fails if target version is set
|
||||
* Fixed: Issue list export to PDF breaks when issues are sorted by a custom field
|
||||
* Fixed: SQL error when adding a group
|
||||
* Fixes: Min password length during password reset always displays as 4 chars
|
||||
|
||||
|
||||
== 2010-01-09 v0.9.0 (Release candidate)
|
||||
|
||||
* Unlimited subproject nesting
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user