Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
e5ac5000e5 | ||
|
|
56318aab53 | ||
|
|
babb14dd94 | ||
|
|
3b90141543 | ||
|
|
bce764d9bc | ||
|
|
b65d546245 | ||
|
|
9f12151ac0 | ||
|
|
78cac6f02b | ||
|
|
16b85bda32 | ||
|
|
733987fbb6 | ||
|
|
7389b4bed0 | ||
|
|
4570fcb7a2 | ||
|
|
0a709660d2 | ||
|
|
633e026e44 | ||
|
|
618ab6004e | ||
|
|
644f03b834 | ||
|
|
1154141ee7 | ||
|
|
bf42d9b706 |
@@ -27,7 +27,7 @@ class AdminController < ApplicationController
|
|||||||
|
|
||||||
def projects
|
def projects
|
||||||
sort_init 'name', 'asc'
|
sort_init 'name', 'asc'
|
||||||
sort_update
|
sort_update %w(name is_public created_on)
|
||||||
|
|
||||||
@status = params[:status] ? params[:status].to_i : 1
|
@status = params[:status] ? params[:status].to_i : 1
|
||||||
c = ARCondition.new(@status == 0 ? "status <> 0" : ["status = ?", @status])
|
c = ARCondition.new(@status == 0 ? "status <> 0" : ["status = ?", @status])
|
||||||
|
|||||||
@@ -126,10 +126,14 @@ class ApplicationController < ActionController::Base
|
|||||||
def redirect_back_or_default(default)
|
def redirect_back_or_default(default)
|
||||||
back_url = CGI.unescape(params[:back_url].to_s)
|
back_url = CGI.unescape(params[:back_url].to_s)
|
||||||
if !back_url.blank?
|
if !back_url.blank?
|
||||||
uri = URI.parse(back_url)
|
begin
|
||||||
# do not redirect user to another host or to the login or register page
|
uri = URI.parse(back_url)
|
||||||
if (uri.relative? || (uri.host == request.host)) && !uri.path.match(%r{/(login|account/register)})
|
# do not redirect user to another host or to the login or register page
|
||||||
redirect_to(back_url) and return
|
if (uri.relative? || (uri.host == request.host)) && !uri.path.match(%r{/(login|account/register)})
|
||||||
|
redirect_to(back_url) and return
|
||||||
|
end
|
||||||
|
rescue URI::InvalidURIError
|
||||||
|
# redirect to default
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
redirect_to default
|
redirect_to default
|
||||||
|
|||||||
@@ -35,12 +35,14 @@ class BoardsController < ApplicationController
|
|||||||
end
|
end
|
||||||
|
|
||||||
def show
|
def show
|
||||||
sort_init "#{Message.table_name}.updated_on", "desc"
|
sort_init 'updated_on', 'desc'
|
||||||
sort_update
|
sort_update 'created_on' => "#{Message.table_name}.created_on",
|
||||||
|
'replies' => "#{Message.table_name}.replies_count",
|
||||||
|
'updated_on' => "#{Message.table_name}.updated_on"
|
||||||
|
|
||||||
@topic_count = @board.topics.count
|
@topic_count = @board.topics.count
|
||||||
@topic_pages = Paginator.new self, @topic_count, per_page_option, params['page']
|
@topic_pages = Paginator.new self, @topic_count, per_page_option, params['page']
|
||||||
@topics = @board.topics.find :all, :order => "#{Message.table_name}.sticky DESC, #{sort_clause}",
|
@topics = @board.topics.find :all, :order => ["#{Message.table_name}.sticky DESC", sort_clause].compact.join(', '),
|
||||||
:include => [:author, {:last_reply => :author}],
|
:include => [:author, {:last_reply => :author}],
|
||||||
:limit => @topic_pages.items_per_page,
|
:limit => @topic_pages.items_per_page,
|
||||||
:offset => @topic_pages.current.offset
|
:offset => @topic_pages.current.offset
|
||||||
|
|||||||
@@ -35,6 +35,7 @@ class DocumentsController < ApplicationController
|
|||||||
else
|
else
|
||||||
@grouped = documents.group_by(&:category)
|
@grouped = documents.group_by(&:category)
|
||||||
end
|
end
|
||||||
|
@document = @project.documents.build
|
||||||
render :layout => false if request.xhr?
|
render :layout => false if request.xhr?
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|||||||
@@ -45,9 +45,10 @@ class IssuesController < ApplicationController
|
|||||||
helper :timelog
|
helper :timelog
|
||||||
|
|
||||||
def index
|
def index
|
||||||
sort_init "#{Issue.table_name}.id", "desc"
|
|
||||||
sort_update
|
|
||||||
retrieve_query
|
retrieve_query
|
||||||
|
sort_init 'id', 'desc'
|
||||||
|
sort_update({'id' => "#{Issue.table_name}.id"}.merge(@query.columns.inject({}) {|h, c| h[c.name.to_s] = c.sortable; h}))
|
||||||
|
|
||||||
if @query.valid?
|
if @query.valid?
|
||||||
limit = per_page_option
|
limit = per_page_option
|
||||||
respond_to do |format|
|
respond_to do |format|
|
||||||
@@ -78,9 +79,10 @@ class IssuesController < ApplicationController
|
|||||||
end
|
end
|
||||||
|
|
||||||
def changes
|
def changes
|
||||||
sort_init "#{Issue.table_name}.id", "desc"
|
|
||||||
sort_update
|
|
||||||
retrieve_query
|
retrieve_query
|
||||||
|
sort_init 'id', 'desc'
|
||||||
|
sort_update({'id' => "#{Issue.table_name}.id"}.merge(@query.columns.inject({}) {|h, c| h[c.name.to_s] = c.sortable; h}))
|
||||||
|
|
||||||
if @query.valid?
|
if @query.valid?
|
||||||
@journals = Journal.find :all, :include => [ :details, :user, {:issue => [:project, :author, :tracker, :status]} ],
|
@journals = Journal.find :all, :include => [ :details, :user, {:issue => [:project, :author, :tracker, :status]} ],
|
||||||
:conditions => @query.statement,
|
:conditions => @query.statement,
|
||||||
|
|||||||
@@ -22,6 +22,7 @@ class JournalsController < ApplicationController
|
|||||||
if request.post?
|
if request.post?
|
||||||
@journal.update_attributes(:notes => params[:notes]) if params[:notes]
|
@journal.update_attributes(:notes => params[:notes]) if params[:notes]
|
||||||
@journal.destroy if @journal.details.empty? && @journal.notes.blank?
|
@journal.destroy if @journal.details.empty? && @journal.notes.blank?
|
||||||
|
call_hook(:controller_journals_edit_post, { :journal => @journal, :params => params})
|
||||||
respond_to do |format|
|
respond_to do |format|
|
||||||
format.html { redirect_to :controller => 'issues', :action => 'show', :id => @journal.journalized_id }
|
format.html { redirect_to :controller => 'issues', :action => 'show', :id => @journal.journalized_id }
|
||||||
format.js { render :action => 'update' }
|
format.js { render :action => 'update' }
|
||||||
|
|||||||
@@ -197,8 +197,12 @@ class ProjectsController < ApplicationController
|
|||||||
end
|
end
|
||||||
|
|
||||||
def list_files
|
def list_files
|
||||||
sort_init "#{Attachment.table_name}.filename", "asc"
|
sort_init 'filename', 'asc'
|
||||||
sort_update
|
sort_update 'filename' => "#{Attachment.table_name}.filename",
|
||||||
|
'created_on' => "#{Attachment.table_name}.created_on",
|
||||||
|
'size' => "#{Attachment.table_name}.filesize",
|
||||||
|
'downloads' => "#{Attachment.table_name}.downloads"
|
||||||
|
|
||||||
@versions = @project.versions.find(:all, :include => :attachments, :order => sort_clause).sort.reverse
|
@versions = @project.versions.find(:all, :include => :attachments, :order => sort_clause).sort.reverse
|
||||||
render :layout => !request.xhr?
|
render :layout => !request.xhr?
|
||||||
end
|
end
|
||||||
|
|||||||
@@ -51,8 +51,9 @@ class RepositoriesController < ApplicationController
|
|||||||
@users += User.find_all_by_id(additional_user_ids) unless additional_user_ids.empty?
|
@users += User.find_all_by_id(additional_user_ids) unless additional_user_ids.empty?
|
||||||
@users.compact!
|
@users.compact!
|
||||||
@users.sort!
|
@users.sort!
|
||||||
if request.post?
|
if request.post? && params[:committers].is_a?(Hash)
|
||||||
@repository.committer_ids = params[:committers]
|
# Build a hash with repository usernames as keys and corresponding user ids as values
|
||||||
|
@repository.committer_ids = params[:committers].values.inject({}) {|h, c| h[c.first] = c.last; h}
|
||||||
flash[:notice] = l(:notice_successful_update)
|
flash[:notice] = l(:notice_successful_update)
|
||||||
redirect_to :action => 'committers', :id => @project
|
redirect_to :action => 'committers', :id => @project
|
||||||
end
|
end
|
||||||
|
|||||||
@@ -138,7 +138,12 @@ class TimelogController < ApplicationController
|
|||||||
|
|
||||||
def details
|
def details
|
||||||
sort_init 'spent_on', 'desc'
|
sort_init 'spent_on', 'desc'
|
||||||
sort_update
|
sort_update 'spent_on' => 'spent_on',
|
||||||
|
'user' => 'user_id',
|
||||||
|
'activity' => 'activity_id',
|
||||||
|
'project' => "#{Project.table_name}.name",
|
||||||
|
'issue' => 'issue_id',
|
||||||
|
'hours' => 'hours'
|
||||||
|
|
||||||
cond = ARCondition.new
|
cond = ARCondition.new
|
||||||
if @project.nil?
|
if @project.nil?
|
||||||
|
|||||||
@@ -30,7 +30,7 @@ class UsersController < ApplicationController
|
|||||||
|
|
||||||
def list
|
def list
|
||||||
sort_init 'login', 'asc'
|
sort_init 'login', 'asc'
|
||||||
sort_update
|
sort_update %w(login firstname lastname mail admin created_on last_login_on)
|
||||||
|
|
||||||
@status = params[:status] ? params[:status].to_i : 1
|
@status = params[:status] ? params[:status].to_i : 1
|
||||||
c = ARCondition.new(@status == 0 ? "status <> 0" : ["status = ?", @status])
|
c = ARCondition.new(@status == 0 ? "status <> 0" : ["status = ?", @status])
|
||||||
|
|||||||
@@ -19,6 +19,7 @@ require 'diff'
|
|||||||
|
|
||||||
class WikiController < ApplicationController
|
class WikiController < ApplicationController
|
||||||
before_filter :find_wiki, :authorize
|
before_filter :find_wiki, :authorize
|
||||||
|
before_filter :find_existing_page, :only => [:rename, :protect, :history, :diff, :annotate, :add_attachment, :destroy]
|
||||||
|
|
||||||
verify :method => :post, :only => [:destroy, :destroy_attachment, :protect], :redirect_to => { :action => :index }
|
verify :method => :post, :only => [:destroy, :destroy_attachment, :protect], :redirect_to => { :action => :index }
|
||||||
|
|
||||||
@@ -91,8 +92,7 @@ class WikiController < ApplicationController
|
|||||||
|
|
||||||
# rename a page
|
# rename a page
|
||||||
def rename
|
def rename
|
||||||
@page = @wiki.find_page(params[:page])
|
return render_403 unless editable?
|
||||||
return render_403 unless editable?
|
|
||||||
@page.redirect_existing_links = true
|
@page.redirect_existing_links = true
|
||||||
# used to display the *original* title if some AR validation errors occur
|
# used to display the *original* title if some AR validation errors occur
|
||||||
@original_title = @page.pretty_title
|
@original_title = @page.pretty_title
|
||||||
@@ -103,15 +103,12 @@ class WikiController < ApplicationController
|
|||||||
end
|
end
|
||||||
|
|
||||||
def protect
|
def protect
|
||||||
page = @wiki.find_page(params[:page])
|
@page.update_attribute :protected, params[:protected]
|
||||||
page.update_attribute :protected, params[:protected]
|
redirect_to :action => 'index', :id => @project, :page => @page.title
|
||||||
redirect_to :action => 'index', :id => @project, :page => page.title
|
|
||||||
end
|
end
|
||||||
|
|
||||||
# show page history
|
# show page history
|
||||||
def history
|
def history
|
||||||
@page = @wiki.find_page(params[:page])
|
|
||||||
|
|
||||||
@version_count = @page.content.versions.count
|
@version_count = @page.content.versions.count
|
||||||
@version_pages = Paginator.new self, @version_count, per_page_option, params['p']
|
@version_pages = Paginator.new self, @version_count, per_page_option, params['p']
|
||||||
# don't load text
|
# don't load text
|
||||||
@@ -125,21 +122,19 @@ class WikiController < ApplicationController
|
|||||||
end
|
end
|
||||||
|
|
||||||
def diff
|
def diff
|
||||||
@page = @wiki.find_page(params[:page])
|
|
||||||
@diff = @page.diff(params[:version], params[:version_from])
|
@diff = @page.diff(params[:version], params[:version_from])
|
||||||
render_404 unless @diff
|
render_404 unless @diff
|
||||||
end
|
end
|
||||||
|
|
||||||
def annotate
|
def annotate
|
||||||
@page = @wiki.find_page(params[:page])
|
|
||||||
@annotate = @page.annotate(params[:version])
|
@annotate = @page.annotate(params[:version])
|
||||||
|
render_404 unless @annotate
|
||||||
end
|
end
|
||||||
|
|
||||||
# remove a wiki page and its history
|
# remove a wiki page and its history
|
||||||
def destroy
|
def destroy
|
||||||
@page = @wiki.find_page(params[:page])
|
return render_403 unless editable?
|
||||||
return render_403 unless editable?
|
@page.destroy
|
||||||
@page.destroy if @page
|
|
||||||
redirect_to :action => 'special', :id => @project, :page => 'Page_index'
|
redirect_to :action => 'special', :id => @project, :page => 'Page_index'
|
||||||
end
|
end
|
||||||
|
|
||||||
@@ -181,7 +176,6 @@ class WikiController < ApplicationController
|
|||||||
end
|
end
|
||||||
|
|
||||||
def add_attachment
|
def add_attachment
|
||||||
@page = @wiki.find_page(params[:page])
|
|
||||||
return render_403 unless editable?
|
return render_403 unless editable?
|
||||||
attach_files(@page, params[:attachments])
|
attach_files(@page, params[:attachments])
|
||||||
redirect_to :action => 'index', :page => @page.title
|
redirect_to :action => 'index', :page => @page.title
|
||||||
@@ -204,6 +198,12 @@ private
|
|||||||
render_404
|
render_404
|
||||||
end
|
end
|
||||||
|
|
||||||
|
# Finds the requested page and returns a 404 error if it doesn't exist
|
||||||
|
def find_existing_page
|
||||||
|
@page = @wiki.find_page(params[:page])
|
||||||
|
render_404 if @page.nil?
|
||||||
|
end
|
||||||
|
|
||||||
# Returns true if the current user is allowed to edit the page, otherwise false
|
# Returns true if the current user is allowed to edit the page, otherwise false
|
||||||
def editable?(page = @page)
|
def editable?(page = @page)
|
||||||
page.editable_by?(User.current)
|
page.editable_by?(User.current)
|
||||||
|
|||||||
@@ -18,6 +18,7 @@
|
|||||||
require 'coderay'
|
require 'coderay'
|
||||||
require 'coderay/helpers/file_type'
|
require 'coderay/helpers/file_type'
|
||||||
require 'forwardable'
|
require 'forwardable'
|
||||||
|
require 'cgi'
|
||||||
|
|
||||||
module ApplicationHelper
|
module ApplicationHelper
|
||||||
include Redmine::WikiFormatting::Macros::Definitions
|
include Redmine::WikiFormatting::Macros::Definitions
|
||||||
@@ -47,8 +48,8 @@ module ApplicationHelper
|
|||||||
end
|
end
|
||||||
|
|
||||||
# Display a link to user's account page
|
# Display a link to user's account page
|
||||||
def link_to_user(user)
|
def link_to_user(user, options={})
|
||||||
(user && !user.anonymous?) ? link_to(user, :controller => 'account', :action => 'show', :id => user) : 'Anonymous'
|
(user && !user.anonymous?) ? link_to(user.name(options[:format]), :controller => 'account', :action => 'show', :id => user) : 'Anonymous'
|
||||||
end
|
end
|
||||||
|
|
||||||
def link_to_issue(issue, options={})
|
def link_to_issue(issue, options={})
|
||||||
@@ -525,7 +526,7 @@ module ApplicationHelper
|
|||||||
|
|
||||||
def back_url_hidden_field_tag
|
def back_url_hidden_field_tag
|
||||||
back_url = params[:back_url] || request.env['HTTP_REFERER']
|
back_url = params[:back_url] || request.env['HTTP_REFERER']
|
||||||
hidden_field_tag('back_url', back_url) unless back_url.blank?
|
hidden_field_tag('back_url', CGI.escape(back_url)) unless back_url.blank?
|
||||||
end
|
end
|
||||||
|
|
||||||
def check_all_links(form_name)
|
def check_all_links(form_name)
|
||||||
|
|||||||
@@ -33,6 +33,13 @@ module IssuesHelper
|
|||||||
"<strong>#{@cached_label_priority}</strong>: #{issue.priority.name}"
|
"<strong>#{@cached_label_priority}</strong>: #{issue.priority.name}"
|
||||||
end
|
end
|
||||||
|
|
||||||
|
# Returns a string of css classes that apply to the given issue
|
||||||
|
def css_issue_classes(issue)
|
||||||
|
s = "issue status-#{issue.status.position} priority-#{issue.priority.position}"
|
||||||
|
s << ' overdue' if issue.overdue?
|
||||||
|
s
|
||||||
|
end
|
||||||
|
|
||||||
def sidebar_queries
|
def sidebar_queries
|
||||||
unless @sidebar_queries
|
unless @sidebar_queries
|
||||||
# User can see public queries and his own queries
|
# User can see public queries and his own queries
|
||||||
|
|||||||
@@ -22,8 +22,8 @@ module QueriesHelper
|
|||||||
end
|
end
|
||||||
|
|
||||||
def column_header(column)
|
def column_header(column)
|
||||||
column.sortable ? sort_header_tag(column.sortable, :caption => column.caption,
|
column.sortable ? sort_header_tag(column.name.to_s, :caption => column.caption,
|
||||||
:default_order => column.default_order) :
|
:default_order => column.default_order) :
|
||||||
content_tag('th', column.caption)
|
content_tag('th', column.caption)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|||||||
@@ -67,23 +67,31 @@ module SortHelper
|
|||||||
|
|
||||||
# Updates the sort state. Call this in the controller prior to calling
|
# Updates the sort state. Call this in the controller prior to calling
|
||||||
# sort_clause.
|
# sort_clause.
|
||||||
#
|
# sort_keys can be either an array or a hash of allowed keys
|
||||||
def sort_update()
|
def sort_update(sort_keys)
|
||||||
if params[:sort_key]
|
sort_key = params[:sort_key]
|
||||||
sort = {:key => params[:sort_key], :order => params[:sort_order]}
|
sort_key = nil unless (sort_keys.is_a?(Array) ? sort_keys.include?(sort_key) : sort_keys[sort_key])
|
||||||
|
|
||||||
|
sort_order = (params[:sort_order] == 'desc' ? 'DESC' : 'ASC')
|
||||||
|
|
||||||
|
if sort_key
|
||||||
|
sort = {:key => sort_key, :order => sort_order}
|
||||||
elsif session[@sort_name]
|
elsif session[@sort_name]
|
||||||
sort = session[@sort_name] # Previous sort.
|
sort = session[@sort_name] # Previous sort.
|
||||||
else
|
else
|
||||||
sort = @sort_default
|
sort = @sort_default
|
||||||
end
|
end
|
||||||
session[@sort_name] = sort
|
session[@sort_name] = sort
|
||||||
|
|
||||||
|
sort_column = (sort_keys.is_a?(Hash) ? sort_keys[sort[:key]] : sort[:key])
|
||||||
|
@sort_clause = (sort_column.blank? ? nil : "#{sort_column} #{sort[:order]}")
|
||||||
end
|
end
|
||||||
|
|
||||||
# Returns an SQL sort clause corresponding to the current sort state.
|
# Returns an SQL sort clause corresponding to the current sort state.
|
||||||
# Use this to sort the controller's table items collection.
|
# Use this to sort the controller's table items collection.
|
||||||
#
|
#
|
||||||
def sort_clause()
|
def sort_clause()
|
||||||
session[@sort_name][:key] + ' ' + (session[@sort_name][:order] || 'ASC')
|
@sort_clause
|
||||||
end
|
end
|
||||||
|
|
||||||
# Returns a link which sorts by the named column.
|
# Returns a link which sorts by the named column.
|
||||||
|
|||||||
@@ -28,4 +28,10 @@ class Document < ActiveRecord::Base
|
|||||||
|
|
||||||
validates_presence_of :project, :title, :category
|
validates_presence_of :project, :title, :category
|
||||||
validates_length_of :title, :maximum => 60
|
validates_length_of :title, :maximum => 60
|
||||||
|
|
||||||
|
def after_initialize
|
||||||
|
if new_record?
|
||||||
|
self.category ||= Enumeration.default('DCAT')
|
||||||
|
end
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|||||||
@@ -44,7 +44,9 @@ class Enumeration < ActiveRecord::Base
|
|||||||
end
|
end
|
||||||
|
|
||||||
def before_save
|
def before_save
|
||||||
Enumeration.update_all("is_default = #{connection.quoted_false}", {:opt => opt}) if is_default?
|
if is_default? && is_default_changed?
|
||||||
|
Enumeration.update_all("is_default = #{connection.quoted_false}", {:opt => opt})
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
def objects_count
|
def objects_count
|
||||||
|
|||||||
@@ -195,6 +195,11 @@ class Issue < ActiveRecord::Base
|
|||||||
self.status.is_closed?
|
self.status.is_closed?
|
||||||
end
|
end
|
||||||
|
|
||||||
|
# Returns true if the issue is overdue
|
||||||
|
def overdue?
|
||||||
|
!due_date.nil? && (due_date < Date.today)
|
||||||
|
end
|
||||||
|
|
||||||
# Users the issue can be assigned to
|
# Users the issue can be assigned to
|
||||||
def assignable_users
|
def assignable_users
|
||||||
project.assignable_users
|
project.assignable_users
|
||||||
|
|||||||
+23
-14
@@ -16,6 +16,7 @@
|
|||||||
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||||
|
|
||||||
class MailHandler < ActionMailer::Base
|
class MailHandler < ActionMailer::Base
|
||||||
|
include ActionView::Helpers::SanitizeHelper
|
||||||
|
|
||||||
class UnauthorizedAction < StandardError; end
|
class UnauthorizedAction < StandardError; end
|
||||||
class MissingInformation < StandardError; end
|
class MissingInformation < StandardError; end
|
||||||
@@ -88,15 +89,14 @@ class MailHandler < ActionMailer::Base
|
|||||||
issue.status = status
|
issue.status = status
|
||||||
end
|
end
|
||||||
issue.subject = email.subject.chomp.toutf8
|
issue.subject = email.subject.chomp.toutf8
|
||||||
issue.description = email.plain_text_body.chomp
|
issue.description = plain_text_body
|
||||||
issue.save!
|
issue.save!
|
||||||
add_attachments(issue)
|
add_attachments(issue)
|
||||||
logger.info "MailHandler: issue ##{issue.id} created by #{user}" if logger && logger.info
|
logger.info "MailHandler: issue ##{issue.id} created by #{user}" if logger && logger.info
|
||||||
# send notification before adding watchers since they were cc'ed
|
|
||||||
Mailer.deliver_issue_add(issue) if Setting.notified_events.include?('issue_added')
|
|
||||||
# add To and Cc as watchers
|
# add To and Cc as watchers
|
||||||
add_watchers(issue)
|
add_watchers(issue)
|
||||||
|
# send notification after adding watchers so that they can reply to Redmine
|
||||||
|
Mailer.deliver_issue_add(issue) if Setting.notified_events.include?('issue_added')
|
||||||
issue
|
issue
|
||||||
end
|
end
|
||||||
|
|
||||||
@@ -120,7 +120,7 @@ class MailHandler < ActionMailer::Base
|
|||||||
raise UnauthorizedAction unless status.nil? || user.allowed_to?(:edit_issues, issue.project)
|
raise UnauthorizedAction unless status.nil? || user.allowed_to?(:edit_issues, issue.project)
|
||||||
|
|
||||||
# add the note
|
# add the note
|
||||||
journal = issue.init_journal(user, email.plain_text_body.chomp)
|
journal = issue.init_journal(user, plain_text_body)
|
||||||
add_attachments(issue)
|
add_attachments(issue)
|
||||||
# check workflow
|
# check workflow
|
||||||
if status && issue.new_statuses_allowed_to(user).include?(status)
|
if status && issue.new_statuses_allowed_to(user).include?(status)
|
||||||
@@ -156,21 +156,30 @@ class MailHandler < ActionMailer::Base
|
|||||||
end
|
end
|
||||||
|
|
||||||
def get_keyword(attr)
|
def get_keyword(attr)
|
||||||
if @@handler_options[:allow_override].include?(attr.to_s) && email.plain_text_body =~ /^#{attr}:[ \t]*(.+)$/i
|
if @@handler_options[:allow_override].include?(attr.to_s) && plain_text_body =~ /^#{attr}:[ \t]*(.+)$/i
|
||||||
$1.strip
|
$1.strip
|
||||||
elsif !@@handler_options[:issue][attr].blank?
|
elsif !@@handler_options[:issue][attr].blank?
|
||||||
@@handler_options[:issue][attr]
|
@@handler_options[:issue][attr]
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
|
||||||
|
# Returns the text/plain part of the email
|
||||||
class TMail::Mail
|
# If not found (eg. HTML-only email), returns the body with tags removed
|
||||||
# Returns body of the first plain text part found if any
|
|
||||||
def plain_text_body
|
def plain_text_body
|
||||||
return @plain_text_body unless @plain_text_body.nil?
|
return @plain_text_body unless @plain_text_body.nil?
|
||||||
p = self.parts.collect {|c| (c.respond_to?(:parts) && !c.parts.empty?) ? c.parts : c}.flatten
|
parts = @email.parts.collect {|c| (c.respond_to?(:parts) && !c.parts.empty?) ? c.parts : c}.flatten
|
||||||
plain = p.detect {|c| c.content_type == 'text/plain'}
|
if parts.empty?
|
||||||
@plain_text_body = plain.nil? ? self.body : plain.body
|
parts << @email
|
||||||
|
end
|
||||||
|
plain_text_part = parts.detect {|p| p.content_type == 'text/plain'}
|
||||||
|
if plain_text_part.nil?
|
||||||
|
# no text/plain part found, assuming html-only email
|
||||||
|
# strip html tags and remove doctype directive
|
||||||
|
@plain_text_body = strip_tags(@email.body.to_s)
|
||||||
|
@plain_text_body.gsub! %r{^<!DOCTYPE .*$}, ''
|
||||||
|
else
|
||||||
|
@plain_text_body = plain_text_part.body.to_s
|
||||||
|
end
|
||||||
|
@plain_text_body.strip!
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|||||||
@@ -57,7 +57,7 @@ class Mailer < ActionMailer::Base
|
|||||||
subject l(:mail_subject_reminder, issues.size)
|
subject l(:mail_subject_reminder, issues.size)
|
||||||
body :issues => issues,
|
body :issues => issues,
|
||||||
:days => days,
|
:days => days,
|
||||||
:issues_url => url_for(:controller => 'issues', :action => 'index', :set_filter => 1, :assigned_to_id => user.id, :sort_key => 'issues.due_date', :sort_order => 'asc')
|
:issues_url => url_for(:controller => 'issues', :action => 'index', :set_filter => 1, :assigned_to_id => user.id, :sort_key => 'due_date', :sort_order => 'asc')
|
||||||
end
|
end
|
||||||
|
|
||||||
def document_added(document)
|
def document_added(document)
|
||||||
|
|||||||
+6
-1
@@ -144,7 +144,7 @@ class User < ActiveRecord::Base
|
|||||||
end
|
end
|
||||||
|
|
||||||
def time_zone
|
def time_zone
|
||||||
@time_zone ||= (self.pref.time_zone.blank? ? nil : TimeZone[self.pref.time_zone])
|
@time_zone ||= (self.pref.time_zone.blank? ? nil : ActiveSupport::TimeZone[self.pref.time_zone])
|
||||||
end
|
end
|
||||||
|
|
||||||
def wants_comments_in_reverse_order?
|
def wants_comments_in_reverse_order?
|
||||||
@@ -178,6 +178,11 @@ class User < ActiveRecord::Base
|
|||||||
token = Token.find_by_action_and_value('autologin', key)
|
token = Token.find_by_action_and_value('autologin', key)
|
||||||
token && (token.created_on > Setting.autologin.to_i.day.ago) && token.user.active? ? token.user : nil
|
token && (token.created_on > Setting.autologin.to_i.day.ago) && token.user.active? ? token.user : nil
|
||||||
end
|
end
|
||||||
|
|
||||||
|
# Makes find_by_mail case-insensitive
|
||||||
|
def self.find_by_mail(mail)
|
||||||
|
find(:first, :conditions => ["LOWER(mail) = ?", mail.to_s.downcase])
|
||||||
|
end
|
||||||
|
|
||||||
# Sort users by their display names
|
# Sort users by their display names
|
||||||
def <=>(user)
|
def <=>(user)
|
||||||
|
|||||||
@@ -33,9 +33,9 @@
|
|||||||
<thead><tr>
|
<thead><tr>
|
||||||
<th><%= l(:field_subject) %></th>
|
<th><%= l(:field_subject) %></th>
|
||||||
<th><%= l(:field_author) %></th>
|
<th><%= l(:field_author) %></th>
|
||||||
<%= sort_header_tag("#{Message.table_name}.created_on", :caption => l(:field_created_on)) %>
|
<%= sort_header_tag('created_on', :caption => l(:field_created_on)) %>
|
||||||
<%= sort_header_tag("#{Message.table_name}.replies_count", :caption => l(:label_reply_plural)) %>
|
<%= sort_header_tag('replies', :caption => l(:label_reply_plural)) %>
|
||||||
<%= sort_header_tag("#{Message.table_name}.updated_on", :caption => l(:label_message_last)) %>
|
<%= sort_header_tag('updated_on', :caption => l(:label_message_last)) %>
|
||||||
</tr></thead>
|
</tr></thead>
|
||||||
<tbody>
|
<tbody>
|
||||||
<% @topics.each do |topic| %>
|
<% @topics.each do |topic| %>
|
||||||
|
|||||||
@@ -1,4 +1,5 @@
|
|||||||
<% Redmine::UnifiedDiff.new(diff, diff_type).each do |table_file| -%>
|
<% diff = Redmine::UnifiedDiff.new(diff, :type => diff_type, :max_lines => Setting.diff_max_lines_displayed.to_i) -%>
|
||||||
|
<% diff.each do |table_file| -%>
|
||||||
<div class="autoscroll">
|
<div class="autoscroll">
|
||||||
<% if diff_type == 'sbs' -%>
|
<% if diff_type == 'sbs' -%>
|
||||||
<table class="filecontent CodeRay">
|
<table class="filecontent CodeRay">
|
||||||
@@ -62,3 +63,5 @@
|
|||||||
|
|
||||||
</div>
|
</div>
|
||||||
<% end -%>
|
<% end -%>
|
||||||
|
|
||||||
|
<%= l(:text_diff_truncated) if diff.truncated? %>
|
||||||
|
|||||||
@@ -4,14 +4,14 @@
|
|||||||
<th><%= link_to image_tag('toggle_check.png'), {}, :onclick => 'toggleIssuesSelection(Element.up(this, "form")); return false;',
|
<th><%= link_to image_tag('toggle_check.png'), {}, :onclick => 'toggleIssuesSelection(Element.up(this, "form")); return false;',
|
||||||
:title => "#{l(:button_check_all)}/#{l(:button_uncheck_all)}" %>
|
:title => "#{l(:button_check_all)}/#{l(:button_uncheck_all)}" %>
|
||||||
</th>
|
</th>
|
||||||
<%= sort_header_tag("#{Issue.table_name}.id", :caption => '#', :default_order => 'desc') %>
|
<%= sort_header_tag('id', :caption => '#', :default_order => 'desc') %>
|
||||||
<% query.columns.each do |column| %>
|
<% query.columns.each do |column| %>
|
||||||
<%= column_header(column) %>
|
<%= column_header(column) %>
|
||||||
<% end %>
|
<% end %>
|
||||||
</tr></thead>
|
</tr></thead>
|
||||||
<tbody>
|
<tbody>
|
||||||
<% issues.each do |issue| -%>
|
<% issues.each do |issue| -%>
|
||||||
<tr id="issue-<%= issue.id %>" class="issue hascontextmenu <%= cycle('odd', 'even') %> <%= "status-#{issue.status.position} priority-#{issue.priority.position}" %>">
|
<tr id="issue-<%= issue.id %>" class="hascontextmenu <%= cycle('odd', 'even') %> <%= css_issue_classes(issue) %>">
|
||||||
<td class="checkbox"><%= check_box_tag("ids[]", issue.id, false, :id => nil) %></td>
|
<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><%= 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 %>
|
<% query.columns.each do |column| %><%= content_tag 'td', column_content(column, issue), :class => column.name %><% end %>
|
||||||
|
|||||||
@@ -8,7 +8,7 @@
|
|||||||
</tr></thead>
|
</tr></thead>
|
||||||
<tbody>
|
<tbody>
|
||||||
<% for issue in issues %>
|
<% for issue in issues %>
|
||||||
<tr id="issue-<%= issue.id %>" class="issue hascontextmenu <%= cycle('odd', 'even') %> <%= "status-#{issue.status.position} priority-#{issue.priority.position}" %>">
|
<tr id="issue-<%= issue.id %>" class="hascontextmenu <%= cycle('odd', 'even') %> <%= css_issue_classes(issue) %>">
|
||||||
<td class="id">
|
<td class="id">
|
||||||
<%= check_box_tag("ids[]", issue.id, false, :style => 'display:none;') %>
|
<%= check_box_tag("ids[]", issue.id, false, :style => 'display:none;') %>
|
||||||
<%= link_to issue.id, :controller => 'issues', :action => 'show', :id => issue %>
|
<%= link_to issue.id, :controller => 'issues', :action => 'show', :id => issue %>
|
||||||
|
|||||||
@@ -10,7 +10,8 @@
|
|||||||
<table style="width:100%">
|
<table style="width:100%">
|
||||||
<% @issue.relations.each do |relation| %>
|
<% @issue.relations.each do |relation| %>
|
||||||
<tr>
|
<tr>
|
||||||
<td><%= l(relation.label_for(@issue)) %> <%= "(#{lwr(:actionview_datehelper_time_in_words_day, relation.delay)})" if relation.delay && relation.delay != 0 %> <%= link_to_issue relation.other_issue(@issue) %></td>
|
<td><%= l(relation.label_for(@issue)) %> <%= "(#{lwr(:actionview_datehelper_time_in_words_day, relation.delay)})" if relation.delay && relation.delay != 0 %>
|
||||||
|
<%= h(relation.other_issue(@issue).project) + ' - ' if Setting.cross_project_issue_relations? %> <%= link_to_issue relation.other_issue(@issue) %></td>
|
||||||
<td><%=h relation.other_issue(@issue).subject %></td>
|
<td><%=h relation.other_issue(@issue).subject %></td>
|
||||||
<td><%= relation.other_issue(@issue).status.name %></td>
|
<td><%= relation.other_issue(@issue).status.name %></td>
|
||||||
<td><%= format_date(relation.other_issue(@issue).start_date) %></td>
|
<td><%= format_date(relation.other_issue(@issue).start_date) %></td>
|
||||||
|
|||||||
@@ -20,7 +20,7 @@
|
|||||||
<h3><%= l(:label_query_plural) %></h3>
|
<h3><%= l(:label_query_plural) %></h3>
|
||||||
|
|
||||||
<% sidebar_queries.each do |query| -%>
|
<% sidebar_queries.each do |query| -%>
|
||||||
<%= link_to query.name, :controller => 'issues', :action => 'index', :project_id => @project, :query_id => query %><br />
|
<%= link_to(h(query.name), :controller => 'issues', :action => 'index', :project_id => @project, :query_id => query) %><br />
|
||||||
<% end -%>
|
<% end -%>
|
||||||
<%= call_hook(:view_issues_sidebar_queries_bottom) %>
|
<%= call_hook(:view_issues_sidebar_queries_bottom) %>
|
||||||
<% end -%>
|
<% end -%>
|
||||||
|
|||||||
@@ -9,7 +9,7 @@
|
|||||||
|
|
||||||
<h2><%= @issue.tracker.name %> #<%= @issue.id %></h2>
|
<h2><%= @issue.tracker.name %> #<%= @issue.id %></h2>
|
||||||
|
|
||||||
<div class="issue <%= "status-#{@issue.status.position} priority-#{@issue.priority.position}" %>">
|
<div class="<%= css_issue_classes(@issue) %>">
|
||||||
<%= avatar(@issue.author, :size => "64") %>
|
<%= avatar(@issue.author, :size => "64") %>
|
||||||
<h3><%=h @issue.subject %></h3>
|
<h3><%=h @issue.subject %></h3>
|
||||||
<p class="author">
|
<p class="author">
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
<% form_remote_tag(:url => {}, :html => { :id => "journal-#{@journal.id}-form" }) do %>
|
<% form_remote_tag(:url => {}, :html => { :id => "journal-#{@journal.id}-form" }) do %>
|
||||||
<%= text_area_tag :notes, @journal.notes, :class => 'wiki-edit',
|
<%= text_area_tag :notes, h(@journal.notes), :class => 'wiki-edit',
|
||||||
:rows => (@journal.notes.blank? ? 10 : [[10, @journal.notes.length / 50].max, 100].min) %>
|
:rows => (@journal.notes.blank? ? 10 : [[10, @journal.notes.length / 50].max, 100].min) %>
|
||||||
|
<%= call_hook(:view_journals_notes_form_after_notes, { :journal => @journal}) %>
|
||||||
<p><%= submit_tag l(:button_save) %>
|
<p><%= submit_tag l(:button_save) %>
|
||||||
<%= link_to l(:button_cancel), '#', :onclick => "Element.remove('journal-#{@journal.id}-form'); " +
|
<%= link_to l(:button_cancel), '#', :onclick => "Element.remove('journal-#{@journal.id}-form'); " +
|
||||||
"Element.show('journal-#{@journal.id}-notes'); return false;" %></p>
|
"Element.show('journal-#{@journal.id}-notes'); return false;" %></p>
|
||||||
|
|||||||
@@ -6,3 +6,5 @@ else
|
|||||||
page.show "journal-#{@journal.id}-notes"
|
page.show "journal-#{@journal.id}-notes"
|
||||||
page.remove "journal-#{@journal.id}-form"
|
page.remove "journal-#{@journal.id}-form"
|
||||||
end
|
end
|
||||||
|
|
||||||
|
call_hook(:view_journals_update_rjs_bottom, { :page => page, :journal => @journal })
|
||||||
|
|||||||
@@ -24,7 +24,7 @@
|
|||||||
<div id="account">
|
<div id="account">
|
||||||
<%= render_menu :account_menu -%>
|
<%= render_menu :account_menu -%>
|
||||||
</div>
|
</div>
|
||||||
<%= content_tag('div', "#{l(:label_logged_as)} #{User.current.login}", :id => 'loggedas') if User.current.logged? %>
|
<%= content_tag('div', "#{l(:label_logged_as)} #{link_to_user(User.current, :format => :username)}", :id => 'loggedas') if User.current.logged? %>
|
||||||
<%= render_menu :top_menu -%>
|
<%= render_menu :top_menu -%>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|||||||
@@ -38,7 +38,7 @@
|
|||||||
<div class="box tabular">
|
<div class="box tabular">
|
||||||
<% fields_for :pref, @user.pref, :builder => TabularFormBuilder, :lang => current_language do |pref_fields| %>
|
<% fields_for :pref, @user.pref, :builder => TabularFormBuilder, :lang => current_language do |pref_fields| %>
|
||||||
<p><%= pref_fields.check_box :hide_mail %></p>
|
<p><%= pref_fields.check_box :hide_mail %></p>
|
||||||
<p><%= pref_fields.select :time_zone, TimeZone.all.collect {|z| [ z.to_s, z.name ]}, :include_blank => true %></p>
|
<p><%= pref_fields.select :time_zone, ActiveSupport::TimeZone.all.collect {|z| [ z.to_s, z.name ]}, :include_blank => true %></p>
|
||||||
<p><%= pref_fields.select :comments_sorting, [[l(:label_chronological_order), 'asc'], [l(:label_reverse_chronological_order), 'desc']] %></p>
|
<p><%= pref_fields.select :comments_sorting, [[l(:label_chronological_order), 'asc'], [l(:label_reverse_chronological_order), 'desc']] %></p>
|
||||||
<% end %>
|
<% end %>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -9,10 +9,10 @@
|
|||||||
<table class="list">
|
<table class="list">
|
||||||
<thead><tr>
|
<thead><tr>
|
||||||
<th><%=l(:field_version)%></th>
|
<th><%=l(:field_version)%></th>
|
||||||
<%= sort_header_tag("#{Attachment.table_name}.filename", :caption => l(:field_filename)) %>
|
<%= sort_header_tag('filename', :caption => l(:field_filename)) %>
|
||||||
<%= sort_header_tag("#{Attachment.table_name}.created_on", :caption => l(:label_date), :default_order => 'desc') %>
|
<%= sort_header_tag('created_on', :caption => l(:label_date), :default_order => 'desc') %>
|
||||||
<%= sort_header_tag("#{Attachment.table_name}.filesize", :caption => l(:field_filesize), :default_order => 'desc') %>
|
<%= sort_header_tag('size', :caption => l(:field_filesize), :default_order => 'desc') %>
|
||||||
<%= sort_header_tag("#{Attachment.table_name}.downloads", :caption => l(:label_downloads_abbr), :default_order => 'desc') %>
|
<%= sort_header_tag('downloads', :caption => l(:label_downloads_abbr), :default_order => 'desc') %>
|
||||||
<th>MD5</th>
|
<th>MD5</th>
|
||||||
<% if delete_allowed %><th></th><% end %>
|
<% if delete_allowed %><th></th><% end %>
|
||||||
</tr></thead>
|
</tr></thead>
|
||||||
|
|||||||
@@ -15,11 +15,16 @@
|
|||||||
</tr>
|
</tr>
|
||||||
</thead>
|
</thead>
|
||||||
<tbody>
|
<tbody>
|
||||||
|
<% i = 0 -%>
|
||||||
<% @committers.each do |committer, user_id| -%>
|
<% @committers.each do |committer, user_id| -%>
|
||||||
<tr class="<%= cycle 'odd', 'even' %>">
|
<tr class="<%= cycle 'odd', 'even' %>">
|
||||||
<td><%=h committer %></td>
|
<td><%=h committer %></td>
|
||||||
<td><%= select_tag "committers[#{committer}]", content_tag('option', "-- #{l :actionview_instancetag_blank_option} --", :value => '') + options_from_collection_for_select(@users, 'id', 'name', user_id.to_i) %></td>
|
<td>
|
||||||
|
<%= hidden_field_tag "committers[#{i}][]", committer %>
|
||||||
|
<%= select_tag "committers[#{i}][]", content_tag('option', "-- #{l :actionview_instancetag_blank_option} --", :value => '') + options_from_collection_for_select(@users, 'id', 'name', user_id.to_i) %>
|
||||||
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
|
<% i += 1 -%>
|
||||||
<% end -%>
|
<% end -%>
|
||||||
</tbody>
|
</tbody>
|
||||||
</table>
|
</table>
|
||||||
|
|||||||
@@ -48,6 +48,9 @@
|
|||||||
<p><label><%= l(:setting_feeds_limit) %></label>
|
<p><label><%= l(:setting_feeds_limit) %></label>
|
||||||
<%= text_field_tag 'settings[feeds_limit]', Setting.feeds_limit, :size => 6 %></p>
|
<%= text_field_tag 'settings[feeds_limit]', Setting.feeds_limit, :size => 6 %></p>
|
||||||
|
|
||||||
|
<p><label><%= l(:setting_diff_max_lines_displayed) %></label>
|
||||||
|
<%= text_field_tag 'settings[diff_max_lines_displayed]', Setting.diff_max_lines_displayed, :size => 6 %></p>
|
||||||
|
|
||||||
<p><label><%= l(:setting_gravatar_enabled) %></label>
|
<p><label><%= l(:setting_gravatar_enabled) %></label>
|
||||||
<%= check_box_tag 'settings[gravatar_enabled]', 1, Setting.gravatar_enabled? %><%= hidden_field_tag 'settings[gravatar_enabled]', 0 %></p>
|
<%= check_box_tag 'settings[gravatar_enabled]', 1, Setting.gravatar_enabled? %><%= hidden_field_tag 'settings[gravatar_enabled]', 0 %></p>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -2,10 +2,10 @@
|
|||||||
<thead>
|
<thead>
|
||||||
<tr>
|
<tr>
|
||||||
<%= sort_header_tag('spent_on', :caption => l(:label_date), :default_order => 'desc') %>
|
<%= sort_header_tag('spent_on', :caption => l(:label_date), :default_order => 'desc') %>
|
||||||
<%= sort_header_tag('user_id', :caption => l(:label_member)) %>
|
<%= sort_header_tag('user', :caption => l(:label_member)) %>
|
||||||
<%= sort_header_tag('activity_id', :caption => l(:label_activity)) %>
|
<%= sort_header_tag('activity', :caption => l(:label_activity)) %>
|
||||||
<%= sort_header_tag("#{Project.table_name}.name", :caption => l(:label_project)) %>
|
<%= sort_header_tag('project', :caption => l(:label_project)) %>
|
||||||
<%= sort_header_tag('issue_id', :caption => l(:label_issue), :default_order => 'desc') %>
|
<%= sort_header_tag('issue', :caption => l(:label_issue), :default_order => 'desc') %>
|
||||||
<th><%= l(:field_comments) %></th>
|
<th><%= l(:field_comments) %></th>
|
||||||
<%= sort_header_tag('hours', :caption => l(:field_hours)) %>
|
<%= sort_header_tag('hours', :caption => l(:field_hours)) %>
|
||||||
<th></th>
|
<th></th>
|
||||||
|
|||||||
@@ -20,7 +20,7 @@
|
|||||||
<th class="line-num"><%= line_num %></th>
|
<th class="line-num"><%= line_num %></th>
|
||||||
<td class="revision"><%= link_to line[0], :controller => 'wiki', :action => 'index', :id => @project, :page => @page.title, :version => line[0] %></td>
|
<td class="revision"><%= link_to line[0], :controller => 'wiki', :action => 'index', :id => @project, :page => @page.title, :version => line[0] %></td>
|
||||||
<td class="author"><%= h(line[1]) %></td>
|
<td class="author"><%= h(line[1]) %></td>
|
||||||
<td class="line-code"><pre><%= line[2] %></pre></td>
|
<td class="line-code"><pre><%=h line[2] %></pre></td>
|
||||||
</tr>
|
</tr>
|
||||||
<% line_num += 1 %>
|
<% line_num += 1 %>
|
||||||
<% end -%>
|
<% end -%>
|
||||||
|
|||||||
@@ -5,7 +5,7 @@
|
|||||||
# ENV['RAILS_ENV'] ||= 'production'
|
# ENV['RAILS_ENV'] ||= 'production'
|
||||||
|
|
||||||
# Specifies gem version of Rails to use when vendor/rails is not present
|
# Specifies gem version of Rails to use when vendor/rails is not present
|
||||||
RAILS_GEM_VERSION = '2.1.0' unless defined? RAILS_GEM_VERSION
|
RAILS_GEM_VERSION = '2.1.2' unless defined? RAILS_GEM_VERSION
|
||||||
|
|
||||||
# Bootstrap the Rails environment, frameworks, and default configuration
|
# Bootstrap the Rails environment, frameworks, and default configuration
|
||||||
require File.join(File.dirname(__FILE__), 'boot')
|
require File.join(File.dirname(__FILE__), 'boot')
|
||||||
|
|||||||
@@ -61,6 +61,9 @@ protocol:
|
|||||||
feeds_limit:
|
feeds_limit:
|
||||||
format: int
|
format: int
|
||||||
default: 15
|
default: 15
|
||||||
|
diff_max_lines_displayed:
|
||||||
|
format: int
|
||||||
|
default: 1500
|
||||||
enabled_scm:
|
enabled_scm:
|
||||||
serialized: true
|
serialized: true
|
||||||
default:
|
default:
|
||||||
|
|||||||
+190
@@ -5,6 +5,196 @@ Copyright (C) 2006-2008 Jean-Philippe Lang
|
|||||||
http://www.redmine.org/
|
http://www.redmine.org/
|
||||||
|
|
||||||
|
|
||||||
|
== 2008-12-30 v0.8.0
|
||||||
|
|
||||||
|
* Setting added in order to limit the number of diff lines that should be displayed
|
||||||
|
* Makes logged-in username in topbar linking to
|
||||||
|
* Mail handler: strip tags when receiving a html-only email
|
||||||
|
* Mail handler: add watchers before sending notification
|
||||||
|
* Adds a css class (overdue) to overdue issues on issue lists and detail views
|
||||||
|
* Fixed: project activity truncated after viewing user's activity
|
||||||
|
* Fixed: email address entered for password recovery shouldn't be case-sensitive
|
||||||
|
* Fixed: default flag removed when editing a default enumeration
|
||||||
|
* Fixed: default category ignored when adding a document
|
||||||
|
* Fixed: error on repository user mapping when a repository username is blank
|
||||||
|
* Fixed: Firefox cuts off large diffs
|
||||||
|
* Fixed: CVS browser should not show dead revisions (deleted files)
|
||||||
|
* Fixed: escape double-quotes in image titles
|
||||||
|
* Fixed: escape textarea content when editing a issue note
|
||||||
|
* Fixed: JS error on context menu with IE
|
||||||
|
* Fixed: bold syntax around single character in series doesn't work
|
||||||
|
* Fixed several XSS vulnerabilities
|
||||||
|
* Fixed a SQL injection vulnerability
|
||||||
|
|
||||||
|
|
||||||
|
== 2008-12-07 v0.8.0-rc1
|
||||||
|
|
||||||
|
* Wiki page protection
|
||||||
|
* Wiki page hierarchy. Parent page can be assigned on the Rename screen
|
||||||
|
* Adds support for issue creation via email
|
||||||
|
* Adds support for free ticket filtering and custom queries on Gantt chart and calendar
|
||||||
|
* Cross-project search
|
||||||
|
* Ability to search a project and its subprojects
|
||||||
|
* Ability to search the projects the user belongs to
|
||||||
|
* Adds custom fields on time entries
|
||||||
|
* Adds boolean and list custom fields for time entries as criteria on time report
|
||||||
|
* Cross-project time reports
|
||||||
|
* Display latest user's activity on account/show view
|
||||||
|
* Show last connexion time on user's page
|
||||||
|
* Obfuscates email address on user's account page using javascript
|
||||||
|
* wiki TOC rendered as an unordered list
|
||||||
|
* Adds the ability to search for a user on the administration users list
|
||||||
|
* Adds the ability to search for a project name or identifier on the administration projects list
|
||||||
|
* Redirect user to the previous page after logging in
|
||||||
|
* Adds a permission 'view wiki edits' so that wiki history can be hidden to certain users
|
||||||
|
* Adds permissions for viewing the watcher list and adding new watchers on the issue detail view
|
||||||
|
* Adds permissions to let users edit and/or delete their messages
|
||||||
|
* Link to activity view when displaying dates
|
||||||
|
* Hide Redmine version in atom feeds and pdf properties
|
||||||
|
* Maps repository users to Redmine users. Users with same username or email are automatically mapped. Mapping can be manually adjusted in repository settings. Multiple usernames can be mapped to the same Redmine user.
|
||||||
|
* Sort users by their display names so that user dropdown lists are sorted alphabetically
|
||||||
|
* Adds estimated hours to issue filters
|
||||||
|
* Switch order of current and previous revisions in side-by-side diff
|
||||||
|
* Render the commit changes list as a tree
|
||||||
|
* Adds watch/unwatch functionality at forum topic level
|
||||||
|
* When moving an issue to another project, reassign it to the category with same name if any
|
||||||
|
* Adds child_pages macro for wiki pages
|
||||||
|
* Use GET instead of POST on roadmap (#718), gantt and calendar forms
|
||||||
|
* Search engine: display total results count and count by result type
|
||||||
|
* Email delivery configuration moved to an unversioned YAML file (config/email.yml, see the sample file)
|
||||||
|
* Adds icons on search results
|
||||||
|
* Adds 'Edit' link on account/show for admin users
|
||||||
|
* Adds Lock/Unlock/Activate link on user edit screen
|
||||||
|
* Adds user count in status drop down on admin user list
|
||||||
|
* Adds multi-levels blockquotes support by using > at the beginning of lines
|
||||||
|
* Adds a Reply link to each issue note
|
||||||
|
* Adds plain text only option for mail notifications
|
||||||
|
* Gravatar support for issue detail, user grid, and activity stream (disabled by default)
|
||||||
|
* Adds 'Delete wiki pages attachments' permission
|
||||||
|
* Show the most recent file when displaying an inline image
|
||||||
|
* Makes permission screens localized
|
||||||
|
* AuthSource list: display associated users count and disable 'Delete' buton if any
|
||||||
|
* Make the 'duplicates of' relation asymmetric
|
||||||
|
* Adds username to the password reminder email
|
||||||
|
* Adds links to forum messages using message#id syntax
|
||||||
|
* Allow same name for custom fields on different object types
|
||||||
|
* One-click bulk edition using the issue list context menu within the same project
|
||||||
|
* Adds support for commit logs reencoding to UTF-8 before insertion in the database. Source encoding of commit logs can be selected in Application settings -> Repositories.
|
||||||
|
* Adds checkboxes toggle links on permissions report
|
||||||
|
* Adds Trac-Like anchors on wiki headings
|
||||||
|
* Adds support for wiki links with anchor
|
||||||
|
* Adds category to the issue context menu
|
||||||
|
* Adds a workflow overview screen
|
||||||
|
* Appends the filename to the attachment url so that clients that ignore content-disposition http header get the real filename
|
||||||
|
* Dots allowed in custom field name
|
||||||
|
* Adds posts quoting functionality
|
||||||
|
* Adds an option to generate sequential project identifiers
|
||||||
|
* Adds mailto link on the user administration list
|
||||||
|
* Ability to remove enumerations (activities, priorities, document categories) that are in use. Associated objects can be reassigned to another value
|
||||||
|
* Gantt chart: display issues that don't have a due date if they are assigned to a version with a date
|
||||||
|
* Change projects homepage limit to 255 chars
|
||||||
|
* Improved on-the-fly account creation. If some attributes are missing (eg. not present in the LDAP) or are invalid, the registration form is displayed so that the user is able to fill or fix these attributes
|
||||||
|
* Adds "please select" to activity select box if no activity is set as default
|
||||||
|
* Do not silently ignore timelog validation failure on issue edit
|
||||||
|
* Adds a rake task to send reminder emails
|
||||||
|
* Allow empty cells in wiki tables
|
||||||
|
* Makes wiki text formatter pluggable
|
||||||
|
* Adds back textile acronyms support
|
||||||
|
* Remove pre tag attributes
|
||||||
|
* Plugin hooks
|
||||||
|
* Pluggable admin menu
|
||||||
|
* Plugins can provide activity content
|
||||||
|
* Moves plugin list to its own administration menu item
|
||||||
|
* Adds url and author_url plugin attributes
|
||||||
|
* Adds Plugin#requires_redmine method so that plugin compatibility can be checked against current Redmine version
|
||||||
|
* Adds atom feed on time entries details
|
||||||
|
* Adds project name to issues feed title
|
||||||
|
* Adds a css class on menu items in order to apply item specific styles (eg. icons)
|
||||||
|
* Adds a Redmine plugin generators
|
||||||
|
* Adds timelog link to the issue context menu
|
||||||
|
* Adds links to the user page on various views
|
||||||
|
* Turkish translation by Ismail Sezen
|
||||||
|
* Catalan translation
|
||||||
|
* Vietnamese translation
|
||||||
|
* Slovak translation
|
||||||
|
* Better naming of activity feed if only one kind of event is displayed
|
||||||
|
* Enable syntax highlight on issues, messages and news
|
||||||
|
* Add target version to the issue list context menu
|
||||||
|
* Hide 'Target version' filter if no version is defined
|
||||||
|
* Add filters on cross-project issue list for custom fields marked as 'For all projects'
|
||||||
|
* Turn ftp urls into links
|
||||||
|
* Hiding the View Differences button when a wiki page's history only has one version
|
||||||
|
* Messages on a Board can now be sorted by the number of replies
|
||||||
|
* Adds a class ('me') to events of the activity view created by current user
|
||||||
|
* Strip pre/code tags content from activity view events
|
||||||
|
* Display issue notes in the activity view
|
||||||
|
* Adds links to changesets atom feed on repository browser
|
||||||
|
* Track project and tracker changes in issue history
|
||||||
|
* Adds anchor to atom feed messages links
|
||||||
|
* Adds a key in lang files to set the decimal separator (point or comma) in csv exports
|
||||||
|
* Makes importer work with Trac 0.8.x
|
||||||
|
* Upgraded to Prototype 1.6.0.1
|
||||||
|
* File viewer for attached text files
|
||||||
|
* Menu mapper: add support for :before, :after and :last options to #push method and add #delete method
|
||||||
|
* Removed inconsistent revision numbers on diff view
|
||||||
|
* CVS: add support for modules names with spaces
|
||||||
|
* Log the user in after registration if account activation is not needed
|
||||||
|
* Mercurial adapter improvements
|
||||||
|
* Trac importer: read session_attribute table to find user's email and real name
|
||||||
|
* Ability to disable unused SCM adapters in application settings
|
||||||
|
* Adds Filesystem adapter
|
||||||
|
* Clear changesets and changes with raw sql when deleting a repository for performance
|
||||||
|
* Redmine.pm now uses the 'commit access' permission defined in Redmine
|
||||||
|
* Reposman can create any type of scm (--scm option)
|
||||||
|
* Reposman creates a repository if the 'repository' module is enabled at project level only
|
||||||
|
* Display svn properties in the browser, svn >= 1.5.0 only
|
||||||
|
* Reduces memory usage when importing large git repositories
|
||||||
|
* Wider SVG graphs in repository stats
|
||||||
|
* SubversionAdapter#entries performance improvement
|
||||||
|
* SCM browser: ability to download raw unified diffs
|
||||||
|
* More detailed error message in log when scm command fails
|
||||||
|
* Adds support for file viewing with Darcs 2.0+
|
||||||
|
* Check that git changeset is not in the database before creating it
|
||||||
|
* Unified diff viewer for attached files with .patch or .diff extension
|
||||||
|
* File size display with Bazaar repositories
|
||||||
|
* Git adapter: use commit time instead of author time
|
||||||
|
* Prettier url for changesets
|
||||||
|
* Makes changes link to entries on the revision view
|
||||||
|
* Adds a field on the repository view to browse at specific revision
|
||||||
|
* Adds new projects atom feed
|
||||||
|
* Added rake tasks to generate rcov code coverage reports
|
||||||
|
* Add Redcloth's :block_markdown_rule to allow horizontal rules in wiki
|
||||||
|
* Show the project hierarchy in the drop down list for new membership on user administration screen
|
||||||
|
* Split user edit screen into tabs
|
||||||
|
* Renames bundled RedCloth to RedCloth3 to avoid RedCloth 4 to be loaded instead
|
||||||
|
* Fixed: Roadmap crashes when a version has a due date > 2037
|
||||||
|
* Fixed: invalid effective date (eg. 99999-01-01) causes an error on version edition screen
|
||||||
|
* Fixed: login filter providing incorrect back_url for Redmine installed in sub-directory
|
||||||
|
* Fixed: logtime entry duplicated when edited from parent project
|
||||||
|
* Fixed: wrong digest for text files under Windows
|
||||||
|
* Fixed: associated revisions are displayed in wrong order on issue view
|
||||||
|
* Fixed: Git Adapter date parsing ignores timezone
|
||||||
|
* Fixed: Printing long roadmap doesn't split across pages
|
||||||
|
* Fixes custom fields display order at several places
|
||||||
|
* Fixed: urls containing @ are parsed as email adress by the wiki formatter
|
||||||
|
* Fixed date filters accuracy with SQLite
|
||||||
|
* Fixed: tokens not escaped in highlight_tokens regexp
|
||||||
|
* Fixed Bazaar shared repository browsing
|
||||||
|
* Fixes platform determination under JRuby
|
||||||
|
* Fixed: Estimated time in issue's journal should be rounded to two decimals
|
||||||
|
* Fixed: 'search titles only' box ignored after one search is done on titles only
|
||||||
|
* Fixed: non-ASCII subversion path can't be displayed
|
||||||
|
* Fixed: Inline images don't work if file name has upper case letters or if image is in BMP format
|
||||||
|
* Fixed: document listing shows on "my page" when viewing documents is disabled for the role
|
||||||
|
* Fixed: Latest news appear on the homepage for projects with the News module disabled
|
||||||
|
* Fixed: cross-project issue list should not show issues of projects for which the issue tracking module was disabled
|
||||||
|
* Fixed: the default status is lost when reordering issue statuses
|
||||||
|
* Fixes error with Postgresql and non-UTF8 commit logs
|
||||||
|
* Fixed: textile footnotes no longer work
|
||||||
|
* Fixed: http links containing parentheses fail to reder correctly
|
||||||
|
* Fixed: GitAdapter#get_rev should use current branch instead of hardwiring master
|
||||||
|
|
||||||
|
|
||||||
== 2008-07-06 v0.7.3
|
== 2008-07-06 v0.7.3
|
||||||
|
|
||||||
* Allow dot in firstnames and lastnames
|
* Allow dot in firstnames and lastnames
|
||||||
|
|||||||
+1
-1
@@ -7,7 +7,7 @@ http://www.redmine.org/
|
|||||||
|
|
||||||
== Requirements
|
== Requirements
|
||||||
|
|
||||||
* Ruby on Rails 2.1
|
* Ruby on Rails 2.1.2
|
||||||
* A database:
|
* A database:
|
||||||
* MySQL (tested with MySQL 5)
|
* MySQL (tested with MySQL 5)
|
||||||
* PostgreSQL (tested with PostgreSQL 8.1)
|
* PostgreSQL (tested with PostgreSQL 8.1)
|
||||||
|
|||||||
+1
-1
@@ -22,7 +22,7 @@ http://www.redmine.org/
|
|||||||
|
|
||||||
== Notes
|
== Notes
|
||||||
|
|
||||||
1. Rails 2.0.2 is required for version 0.7 and later.
|
1. Rails 2.1.2 is required for version 0.8.
|
||||||
|
|
||||||
2. When upgrading your code with svn update, don't forget to clear
|
2. When upgrading your code with svn update, don't forget to clear
|
||||||
the application cache (RAILS_ROOT/tmp/cache) before restarting.
|
the application cache (RAILS_ROOT/tmp/cache) before restarting.
|
||||||
|
|||||||
@@ -694,3 +694,5 @@ permission_edit_own_messages: Edit own messages
|
|||||||
permission_delete_own_messages: Delete own messages
|
permission_delete_own_messages: Delete own messages
|
||||||
label_user_activity: "%s's activity"
|
label_user_activity: "%s's activity"
|
||||||
label_updated_time_by: Updated by %s %s ago
|
label_updated_time_by: Updated by %s %s ago
|
||||||
|
text_diff_truncated: '... This diff was truncated because it exceeds the maximum size that can be displayed.'
|
||||||
|
setting_diff_max_lines_displayed: Max number of diff lines displayed
|
||||||
|
|||||||
@@ -695,3 +695,5 @@ permission_edit_own_messages: Edit own messages
|
|||||||
permission_delete_own_messages: Delete own messages
|
permission_delete_own_messages: Delete own messages
|
||||||
label_user_activity: "%s's activity"
|
label_user_activity: "%s's activity"
|
||||||
label_updated_time_by: Updated by %s %s ago
|
label_updated_time_by: Updated by %s %s ago
|
||||||
|
text_diff_truncated: '... This diff was truncated because it exceeds the maximum size that can be displayed.'
|
||||||
|
setting_diff_max_lines_displayed: Max number of diff lines displayed
|
||||||
|
|||||||
@@ -699,3 +699,5 @@ permission_edit_own_messages: Edit own messages
|
|||||||
permission_delete_own_messages: Delete own messages
|
permission_delete_own_messages: Delete own messages
|
||||||
label_user_activity: "%s's activity"
|
label_user_activity: "%s's activity"
|
||||||
label_updated_time_by: Updated by %s %s ago
|
label_updated_time_by: Updated by %s %s ago
|
||||||
|
text_diff_truncated: '... This diff was truncated because it exceeds the maximum size that can be displayed.'
|
||||||
|
setting_diff_max_lines_displayed: Max number of diff lines displayed
|
||||||
|
|||||||
@@ -695,3 +695,5 @@ permission_edit_own_messages: Edit own messages
|
|||||||
permission_delete_own_messages: Delete own messages
|
permission_delete_own_messages: Delete own messages
|
||||||
label_user_activity: "%s's activity"
|
label_user_activity: "%s's activity"
|
||||||
label_updated_time_by: Updated by %s %s ago
|
label_updated_time_by: Updated by %s %s ago
|
||||||
|
text_diff_truncated: '... This diff was truncated because it exceeds the maximum size that can be displayed.'
|
||||||
|
setting_diff_max_lines_displayed: Max number of diff lines displayed
|
||||||
|
|||||||
+4
-2
@@ -223,6 +223,7 @@ setting_mail_handler_api_enabled: Abruf eingehender E-Mails aktivieren
|
|||||||
setting_mail_handler_api_key: API-Schlüssel
|
setting_mail_handler_api_key: API-Schlüssel
|
||||||
setting_sequential_project_identifiers: Fortlaufende Projektkennungen generieren
|
setting_sequential_project_identifiers: Fortlaufende Projektkennungen generieren
|
||||||
setting_gravatar_enabled: Gravatar Benutzerbilder benutzen
|
setting_gravatar_enabled: Gravatar Benutzerbilder benutzen
|
||||||
|
setting_diff_max_lines_displayed: Maximale Anzahl anzuzeigender Diff-Zeilen
|
||||||
|
|
||||||
permission_edit_project: Projekt bearbeiten
|
permission_edit_project: Projekt bearbeiten
|
||||||
permission_select_project_modules: Projektmodule auswählen
|
permission_select_project_modules: Projektmodule auswählen
|
||||||
@@ -344,6 +345,7 @@ label_last_updates_plural: %d zuletzt aktualisierten
|
|||||||
label_registered_on: Angemeldet am
|
label_registered_on: Angemeldet am
|
||||||
label_activity: Aktivität
|
label_activity: Aktivität
|
||||||
label_overall_activity: Aktivität aller Projekte anzeigen
|
label_overall_activity: Aktivität aller Projekte anzeigen
|
||||||
|
label_user_activity: "Aktivität von %s"
|
||||||
label_new: Neu
|
label_new: Neu
|
||||||
label_logged_as: Angemeldet als
|
label_logged_as: Angemeldet als
|
||||||
label_environment: Environment
|
label_environment: Environment
|
||||||
@@ -543,6 +545,7 @@ label_send_test_email: Test-E-Mail senden
|
|||||||
label_feeds_access_key_created_on: Atom-Zugriffsschlüssel vor %s erstellt
|
label_feeds_access_key_created_on: Atom-Zugriffsschlüssel vor %s erstellt
|
||||||
label_module_plural: Module
|
label_module_plural: Module
|
||||||
label_added_time_by: Von %s vor %s hinzugefügt
|
label_added_time_by: Von %s vor %s hinzugefügt
|
||||||
|
label_updated_time_by: Von %s vor %s aktualisiert
|
||||||
label_updated_time: Vor %s aktualisiert
|
label_updated_time: Vor %s aktualisiert
|
||||||
label_jump_to_a_project: Zu einem Projekt springen...
|
label_jump_to_a_project: Zu einem Projekt springen...
|
||||||
label_file_plural: Dateien
|
label_file_plural: Dateien
|
||||||
@@ -668,6 +671,7 @@ text_enumeration_destroy_question: '%d Objekte sind diesem Wert zugeordnet.'
|
|||||||
text_enumeration_category_reassign_to: 'Die Objekte stattdessen diesem Wert zuordnen:'
|
text_enumeration_category_reassign_to: 'Die Objekte stattdessen diesem Wert zuordnen:'
|
||||||
text_email_delivery_not_configured: "Der SMTP-Server ist nicht konfiguriert und Mailbenachrichtigungen sind ausgeschaltet.\nNehmen Sie die Einstellungen für Ihren SMTP-Server in config/email.yml vor und starten Sie die Applikation neu."
|
text_email_delivery_not_configured: "Der SMTP-Server ist nicht konfiguriert und Mailbenachrichtigungen sind ausgeschaltet.\nNehmen Sie die Einstellungen für Ihren SMTP-Server in config/email.yml vor und starten Sie die Applikation neu."
|
||||||
text_repository_usernames_mapping: "Bitte legen Sie die Zuordnung der Redmine-Benutzer zu den Benutzernamen der Commit-Log-Meldungen des Projektarchivs fest.\nBenutzer mit identischen Redmine- und Projektarchiv-Benutzernamen oder -E-Mail-Adressen werden automatisch zugeordnet."
|
text_repository_usernames_mapping: "Bitte legen Sie die Zuordnung der Redmine-Benutzer zu den Benutzernamen der Commit-Log-Meldungen des Projektarchivs fest.\nBenutzer mit identischen Redmine- und Projektarchiv-Benutzernamen oder -E-Mail-Adressen werden automatisch zugeordnet."
|
||||||
|
text_diff_truncated: '... Dieser Diff wurde abgeschnitten, weil er die maximale Anzahl anzuzeigender Zeilen überschreitet.'
|
||||||
|
|
||||||
default_role_manager: Manager
|
default_role_manager: Manager
|
||||||
default_role_developper: Entwickler
|
default_role_developper: Entwickler
|
||||||
@@ -694,5 +698,3 @@ default_activity_development: Entwicklung
|
|||||||
enumeration_issue_priorities: Ticket-Prioritäten
|
enumeration_issue_priorities: Ticket-Prioritäten
|
||||||
enumeration_doc_categories: Dokumentenkategorien
|
enumeration_doc_categories: Dokumentenkategorien
|
||||||
enumeration_activities: Aktivitäten (Zeiterfassung)
|
enumeration_activities: Aktivitäten (Zeiterfassung)
|
||||||
label_user_activity: "%s's activity"
|
|
||||||
label_updated_time_by: Updated by %s %s ago
|
|
||||||
|
|||||||
@@ -223,6 +223,7 @@ setting_mail_handler_api_enabled: Enable WS for incoming emails
|
|||||||
setting_mail_handler_api_key: API key
|
setting_mail_handler_api_key: API key
|
||||||
setting_sequential_project_identifiers: Generate sequential project identifiers
|
setting_sequential_project_identifiers: Generate sequential project identifiers
|
||||||
setting_gravatar_enabled: Use Gravatar user icons
|
setting_gravatar_enabled: Use Gravatar user icons
|
||||||
|
setting_diff_max_lines_displayed: Max number of diff lines displayed
|
||||||
|
|
||||||
permission_edit_project: Edit project
|
permission_edit_project: Edit project
|
||||||
permission_select_project_modules: Select project modules
|
permission_select_project_modules: Select project modules
|
||||||
@@ -670,6 +671,7 @@ text_enumeration_destroy_question: '%d objects are assigned to this value.'
|
|||||||
text_enumeration_category_reassign_to: 'Reassign them to this value:'
|
text_enumeration_category_reassign_to: 'Reassign them to this value:'
|
||||||
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_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_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: '... This diff was truncated because it exceeds the maximum size that can be displayed.'
|
||||||
|
|
||||||
default_role_manager: Manager
|
default_role_manager: Manager
|
||||||
default_role_developper: Developer
|
default_role_developper: Developer
|
||||||
|
|||||||
+42
-40
@@ -19,11 +19,11 @@ actionview_datehelper_time_in_words_second_less_than_plural: menos de %d segundo
|
|||||||
actionview_instancetag_blank_option: Por favor seleccione
|
actionview_instancetag_blank_option: Por favor seleccione
|
||||||
activerecord_error_accepted: debe ser aceptado
|
activerecord_error_accepted: debe ser aceptado
|
||||||
activerecord_error_blank: no puede estar en blanco
|
activerecord_error_blank: no puede estar en blanco
|
||||||
activerecord_error_circular_dependency: Esta relación podría crear una dependencia anidada
|
activerecord_error_circular_dependency: Esta relación podría crear una dependencia circular
|
||||||
activerecord_error_confirmation: la confirmación no coincide
|
activerecord_error_confirmation: la confirmación no coincide
|
||||||
activerecord_error_empty: no puede estar vacío
|
activerecord_error_empty: no puede estar vacío
|
||||||
activerecord_error_exclusion: está reservado
|
activerecord_error_exclusion: está reservado
|
||||||
activerecord_error_greater_than_start_date: debe ser la fecha mayor que del comienzo
|
activerecord_error_greater_than_start_date: debe ser posterior a la fecha de comienzo
|
||||||
activerecord_error_inclusion: no está incluído en la lista
|
activerecord_error_inclusion: no está incluído en la lista
|
||||||
activerecord_error_invalid: no es válido
|
activerecord_error_invalid: no es válido
|
||||||
activerecord_error_not_a_date: no es una fecha válida
|
activerecord_error_not_a_date: no es una fecha válida
|
||||||
@@ -140,11 +140,11 @@ field_is_default: Estado por defecto
|
|||||||
field_is_filter: Usado como filtro
|
field_is_filter: Usado como filtro
|
||||||
field_is_for_all: Para todos los proyectos
|
field_is_for_all: Para todos los proyectos
|
||||||
field_is_in_chlog: Consultar las peticiones en el histórico
|
field_is_in_chlog: Consultar las peticiones en el histórico
|
||||||
field_is_in_roadmap: Consultar las peticiones en el roadmap
|
field_is_in_roadmap: Consultar las peticiones en la planificación
|
||||||
field_is_public: Público
|
field_is_public: Público
|
||||||
field_is_required: Obligatorio
|
field_is_required: Obligatorio
|
||||||
field_issue: Petición
|
field_issue: Petición
|
||||||
field_issue_to_id: Petición Relacionada
|
field_issue_to_id: Petición relacionada
|
||||||
field_language: Idioma
|
field_language: Idioma
|
||||||
field_last_login_on: Última conexión
|
field_last_login_on: Última conexión
|
||||||
field_lastname: Apellido
|
field_lastname: Apellido
|
||||||
@@ -178,7 +178,7 @@ field_subproject: Proyecto secundario
|
|||||||
field_summary: Resumen
|
field_summary: Resumen
|
||||||
field_time_zone: Zona horaria
|
field_time_zone: Zona horaria
|
||||||
field_title: Título
|
field_title: Título
|
||||||
field_tracker: Tracker
|
field_tracker: Tipo
|
||||||
field_type: Tipo
|
field_type: Tipo
|
||||||
field_updated_on: Actualizado
|
field_updated_on: Actualizado
|
||||||
field_url: URL
|
field_url: URL
|
||||||
@@ -215,7 +215,7 @@ label_ago: hace
|
|||||||
label_all: todos
|
label_all: todos
|
||||||
label_all_time: todo el tiempo
|
label_all_time: todo el tiempo
|
||||||
label_all_words: Todas las palabras
|
label_all_words: Todas las palabras
|
||||||
label_and_its_subprojects: %s y sus subproyectos
|
label_and_its_subprojects: %s y proyectos secundarios
|
||||||
label_applied_status: Aplicar estado
|
label_applied_status: Aplicar estado
|
||||||
label_assigned_to_me_issues: Peticiones que me están asignadas
|
label_assigned_to_me_issues: Peticiones que me están asignadas
|
||||||
label_associated_revisions: Revisiones asociadas
|
label_associated_revisions: Revisiones asociadas
|
||||||
@@ -234,7 +234,7 @@ label_blocks: bloquea a
|
|||||||
label_board: Foro
|
label_board: Foro
|
||||||
label_board_new: Nuevo foro
|
label_board_new: Nuevo foro
|
||||||
label_board_plural: Foros
|
label_board_plural: Foros
|
||||||
label_boolean: Boleano
|
label_boolean: Booleano
|
||||||
label_browse: Hojear
|
label_browse: Hojear
|
||||||
label_bulk_edit_selected_issues: Editar las peticiones seleccionadas
|
label_bulk_edit_selected_issues: Editar las peticiones seleccionadas
|
||||||
label_calendar: Calendario
|
label_calendar: Calendario
|
||||||
@@ -293,7 +293,7 @@ label_enumerations: Listas de valores
|
|||||||
label_environment: Entorno
|
label_environment: Entorno
|
||||||
label_equals: igual
|
label_equals: igual
|
||||||
label_example: Ejemplo
|
label_example: Ejemplo
|
||||||
label_export_to: Exportar a
|
label_export_to: 'Exportar a:'
|
||||||
label_f_hour: %.2f hora
|
label_f_hour: %.2f hora
|
||||||
label_f_hour_plural: %.2f horas
|
label_f_hour_plural: %.2f horas
|
||||||
label_feed_plural: Feeds
|
label_feed_plural: Feeds
|
||||||
@@ -327,7 +327,7 @@ label_issue_category_new: Nueva categoría
|
|||||||
label_issue_category_plural: Categorías de las peticiones
|
label_issue_category_plural: Categorías de las peticiones
|
||||||
label_issue_new: Nueva petición
|
label_issue_new: Nueva petición
|
||||||
label_issue_plural: Peticiones
|
label_issue_plural: Peticiones
|
||||||
label_issue_status: Estado de petición
|
label_issue_status: Estado de la petición
|
||||||
label_issue_status_new: Nuevo estado
|
label_issue_status_new: Nuevo estado
|
||||||
label_issue_status_plural: Estados de las peticiones
|
label_issue_status_plural: Estados de las peticiones
|
||||||
label_issue_tracking: Peticiones
|
label_issue_tracking: Peticiones
|
||||||
@@ -337,7 +337,7 @@ label_issue_watchers: Seguidores
|
|||||||
label_issues_by: Peticiones por %s
|
label_issues_by: Peticiones por %s
|
||||||
label_jump_to_a_project: Ir al proyecto...
|
label_jump_to_a_project: Ir al proyecto...
|
||||||
label_language_based: Basado en el idioma
|
label_language_based: Basado en el idioma
|
||||||
label_last_changes: %d cambios del último
|
label_last_changes: últimos %d cambios
|
||||||
label_last_login: Última conexión
|
label_last_login: Última conexión
|
||||||
label_last_month: último mes
|
label_last_month: último mes
|
||||||
label_last_n_days: últimos %d días
|
label_last_n_days: últimos %d días
|
||||||
@@ -384,7 +384,7 @@ label_news_plural: Noticias
|
|||||||
label_news_view_all: Ver todas las noticias
|
label_news_view_all: Ver todas las noticias
|
||||||
label_next: Siguiente
|
label_next: Siguiente
|
||||||
label_no_change_option: (Sin cambios)
|
label_no_change_option: (Sin cambios)
|
||||||
label_no_data: Ningun dato a mostrar
|
label_no_data: Ningún dato a mostrar
|
||||||
label_nobody: nadie
|
label_nobody: nadie
|
||||||
label_none: ninguno
|
label_none: ninguno
|
||||||
label_not_contains: no contiene
|
label_not_contains: no contiene
|
||||||
@@ -397,7 +397,7 @@ label_options: Opciones
|
|||||||
label_overall_activity: Actividad global
|
label_overall_activity: Actividad global
|
||||||
label_overview: Vistazo
|
label_overview: Vistazo
|
||||||
label_password_lost: ¿Olvidaste la contraseña?
|
label_password_lost: ¿Olvidaste la contraseña?
|
||||||
label_per_page: Por la página
|
label_per_page: Por página
|
||||||
label_permissions: Permisos
|
label_permissions: Permisos
|
||||||
label_permissions_report: Informe de permisos
|
label_permissions_report: Informe de permisos
|
||||||
label_personalize_page: Personalizar esta página
|
label_personalize_page: Personalizar esta página
|
||||||
@@ -438,7 +438,7 @@ label_result_plural: Resultados
|
|||||||
label_reverse_chronological_order: En orden cronológico inverso
|
label_reverse_chronological_order: En orden cronológico inverso
|
||||||
label_revision: Revisión
|
label_revision: Revisión
|
||||||
label_revision_plural: Revisiones
|
label_revision_plural: Revisiones
|
||||||
label_roadmap: Roadmap
|
label_roadmap: Planificación
|
||||||
label_roadmap_due_in: Finaliza en %s
|
label_roadmap_due_in: Finaliza en %s
|
||||||
label_roadmap_no_issues: No hay peticiones para esta versión
|
label_roadmap_no_issues: No hay peticiones para esta versión
|
||||||
label_roadmap_overdue: %s tarde
|
label_roadmap_overdue: %s tarde
|
||||||
@@ -452,7 +452,7 @@ label_search_titles_only: Buscar sólo en títulos
|
|||||||
label_send_information: Enviar información de la cuenta al usuario
|
label_send_information: Enviar información de la cuenta al usuario
|
||||||
label_send_test_email: Enviar un correo de prueba
|
label_send_test_email: Enviar un correo de prueba
|
||||||
label_settings: Configuración
|
label_settings: Configuración
|
||||||
label_show_completed_versions: Muestra las versiones completas
|
label_show_completed_versions: Muestra las versiones terminadas
|
||||||
label_sort_by: Ordenar por %s
|
label_sort_by: Ordenar por %s
|
||||||
label_sort_higher: Subir
|
label_sort_higher: Subir
|
||||||
label_sort_highest: Primero
|
label_sort_highest: Primero
|
||||||
@@ -474,16 +474,18 @@ label_time_tracking: Control de tiempo
|
|||||||
label_today: hoy
|
label_today: hoy
|
||||||
label_topic_plural: Temas
|
label_topic_plural: Temas
|
||||||
label_total: Total
|
label_total: Total
|
||||||
label_tracker: Tracker
|
label_tracker: Tipo
|
||||||
label_tracker_new: Nuevo tracker
|
label_tracker_new: Nuevo tipo
|
||||||
label_tracker_plural: Trackers
|
label_tracker_plural: Tipos de peticiones
|
||||||
label_updated_time: Actualizado hace %s
|
label_updated_time: Actualizado hace %s
|
||||||
|
label_updated_time_by: Actualizado por %s hace %s
|
||||||
label_used_by: Utilizado por
|
label_used_by: Utilizado por
|
||||||
label_user: Usuario
|
label_user: Usuario
|
||||||
|
label_user_activity: "Actividad de %s"
|
||||||
label_user_mail_no_self_notified: "No quiero ser avisado de cambios hechos por mí"
|
label_user_mail_no_self_notified: "No quiero ser avisado de cambios hechos por mí"
|
||||||
label_user_mail_option_all: "Para cualquier evento en todos mis proyectos"
|
label_user_mail_option_all: "Para cualquier evento en todos mis proyectos"
|
||||||
label_user_mail_option_none: "Sólo para elementos monitorizados o relacionados conmigo"
|
label_user_mail_option_none: "Sólo para elementos monitorizados o relacionados conmigo"
|
||||||
label_user_mail_option_selected: "Para cualquier evento del proyecto seleccionado..."
|
label_user_mail_option_selected: "Para cualquier evento de los proyectos seleccionados..."
|
||||||
label_user_new: Nuevo usuario
|
label_user_new: Nuevo usuario
|
||||||
label_user_plural: Usuarios
|
label_user_plural: Usuarios
|
||||||
label_version: Versión
|
label_version: Versión
|
||||||
@@ -501,22 +503,22 @@ label_wiki_page_plural: Wiki páginas
|
|||||||
label_workflow: Flujo de trabajo
|
label_workflow: Flujo de trabajo
|
||||||
label_year: Año
|
label_year: Año
|
||||||
label_yesterday: ayer
|
label_yesterday: ayer
|
||||||
mail_body_account_activation_request: "Un nuevo usuario (%s) ha sido registrado. Esta cuenta está pendiende de aprobación"
|
mail_body_account_activation_request: 'Se ha inscrito un nuevo usuario (%s). La cuenta está pendiende de aprobación:'
|
||||||
mail_body_account_information: Información sobre su cuenta
|
mail_body_account_information: Información sobre su cuenta
|
||||||
mail_body_account_information_external: Puede usar su cuenta "%s" para conectarse.
|
mail_body_account_information_external: Puede usar su cuenta "%s" para conectarse.
|
||||||
mail_body_lost_password: 'Para cambiar su contraseña, haga click en el siguiente enlace:'
|
mail_body_lost_password: 'Para cambiar su contraseña, haga clic en el siguiente enlace:'
|
||||||
mail_body_register: 'Para activar su cuenta, haga click en el siguiente enlace:'
|
mail_body_register: 'Para activar su cuenta, haga clic en el siguiente enlace:'
|
||||||
mail_body_reminder: "%d peticion(es) asignadas a tí finalizan en los próximos %d días:"
|
mail_body_reminder: "%d peticion(es) asignadas a tí finalizan en los próximos %d días:"
|
||||||
mail_subject_account_activation_request: Petición de activación de cuenta %s
|
mail_subject_account_activation_request: Petición de activación de cuenta %s
|
||||||
mail_subject_lost_password: Tu contraseña del %s
|
mail_subject_lost_password: Tu contraseña del %s
|
||||||
mail_subject_register: Activación de la cuenta del %s
|
mail_subject_register: Activación de la cuenta del %s
|
||||||
mail_subject_reminder: "%d peticion(es) finalizan en los próximos días"
|
mail_subject_reminder: "%d peticion(es) finalizan en los próximos días"
|
||||||
notice_account_activated: Su cuenta ha sido activada. Ahora se encuentra conectado.
|
notice_account_activated: Su cuenta ha sido activada. Ya puede conectarse.
|
||||||
notice_account_invalid_creditentials: Usuario o contraseña inválido.
|
notice_account_invalid_creditentials: Usuario o contraseña inválido.
|
||||||
notice_account_lost_email_sent: Se le ha enviado un correo con instrucciones para elegir una nueva contraseña.
|
notice_account_lost_email_sent: Se le ha enviado un correo con instrucciones para elegir una nueva contraseña.
|
||||||
notice_account_password_updated: Contraseña modificada correctamente.
|
notice_account_password_updated: Contraseña modificada correctamente.
|
||||||
notice_account_pending: "Su cuenta ha sido creada y está pendiende de la aprobación por parte de administrador"
|
notice_account_pending: "Su cuenta ha sido creada y está pendiende de la aprobación por parte del administrador."
|
||||||
notice_account_register_done: Cuenta creada correctamente.
|
notice_account_register_done: Cuenta creada correctamente. Para activarla, haga clic sobre el enlace que le ha sido enviado por correo.
|
||||||
notice_account_unknown_email: Usuario desconocido.
|
notice_account_unknown_email: Usuario desconocido.
|
||||||
notice_account_updated: Cuenta actualizada correctamente.
|
notice_account_updated: Cuenta actualizada correctamente.
|
||||||
notice_account_wrong_password: Contraseña incorrecta.
|
notice_account_wrong_password: Contraseña incorrecta.
|
||||||
@@ -524,9 +526,9 @@ notice_can_t_change_password: Esta cuenta utiliza una fuente de autenticación e
|
|||||||
notice_default_data_loaded: Configuración por defecto cargada correctamente.
|
notice_default_data_loaded: Configuración por defecto cargada correctamente.
|
||||||
notice_email_error: Ha ocurrido un error mientras enviando el correo (%s)
|
notice_email_error: Ha ocurrido un error mientras enviando el correo (%s)
|
||||||
notice_email_sent: Se ha enviado un correo a %s
|
notice_email_sent: Se ha enviado un correo a %s
|
||||||
notice_failed_to_save_issues: "Imposible salvar %s peticion(es) en %d seleccionado: %s."
|
notice_failed_to_save_issues: "Imposible grabar %s peticion(es) en %d seleccionado: %s."
|
||||||
notice_feeds_access_key_reseted: Su clave de acceso para RSS ha sido reiniciada
|
notice_feeds_access_key_reseted: Su clave de acceso para RSS ha sido reiniciada.
|
||||||
notice_file_not_found: La página a la que intentas acceder no existe.
|
notice_file_not_found: La página a la que intenta acceder no existe.
|
||||||
notice_locking_conflict: Los datos han sido modificados por otro usuario.
|
notice_locking_conflict: Los datos han sido modificados por otro usuario.
|
||||||
notice_no_issue_selected: "Ninguna petición seleccionada. Por favor, compruebe la petición que quiere modificar"
|
notice_no_issue_selected: "Ninguna petición seleccionada. Por favor, compruebe la petición que quiere modificar"
|
||||||
notice_not_authorized: No tiene autorización para acceder a esta página.
|
notice_not_authorized: No tiene autorización para acceder a esta página.
|
||||||
@@ -544,9 +546,9 @@ permission_comment_news: Comentar noticias
|
|||||||
permission_commit_access: Acceso de escritura
|
permission_commit_access: Acceso de escritura
|
||||||
permission_delete_issues: Borrar peticiones
|
permission_delete_issues: Borrar peticiones
|
||||||
permission_delete_messages: Borrar mensajes
|
permission_delete_messages: Borrar mensajes
|
||||||
|
permission_delete_own_messages: Borrar mensajes propios
|
||||||
permission_delete_wiki_pages: Borrar páginas wiki
|
permission_delete_wiki_pages: Borrar páginas wiki
|
||||||
permission_delete_wiki_pages_attachments: Borrar ficheros
|
permission_delete_wiki_pages_attachments: Borrar ficheros
|
||||||
permission_delete_own_messages: Borrar mensajes propios
|
|
||||||
permission_edit_issue_notes: Modificar notas
|
permission_edit_issue_notes: Modificar notas
|
||||||
permission_edit_issues: Modificar peticiones
|
permission_edit_issues: Modificar peticiones
|
||||||
permission_edit_messages: Modificar mensajes
|
permission_edit_messages: Modificar mensajes
|
||||||
@@ -602,15 +604,16 @@ setting_commit_fix_keywords: Palabras clave para la corrección
|
|||||||
setting_commit_logs_encoding: Codificación de los mensajes de commit
|
setting_commit_logs_encoding: Codificación de los mensajes de commit
|
||||||
setting_commit_ref_keywords: Palabras clave para la referencia
|
setting_commit_ref_keywords: Palabras clave para la referencia
|
||||||
setting_cross_project_issue_relations: Permitir relacionar peticiones de distintos proyectos
|
setting_cross_project_issue_relations: Permitir relacionar peticiones de distintos proyectos
|
||||||
setting_date_format: Formato de la fecha
|
setting_date_format: Formato de fecha
|
||||||
setting_default_language: Idioma por defecto
|
setting_default_language: Idioma por defecto
|
||||||
setting_default_projects_public: Los proyectos nuevos son públicos por defecto
|
setting_default_projects_public: Los proyectos nuevos son públicos por defecto
|
||||||
setting_display_subprojects_issues: Mostrar peticiones de un subproyecto en el proyecto padre por defecto
|
setting_diff_max_lines_displayed: Número máximo de diferencias mostradas
|
||||||
|
setting_display_subprojects_issues: Mostrar por defecto peticiones de proy. secundarios en el principal
|
||||||
setting_emails_footer: Pie de mensajes
|
setting_emails_footer: Pie de mensajes
|
||||||
setting_enabled_scm: Activar SCM
|
setting_enabled_scm: Activar SCM
|
||||||
setting_feeds_limit: Límite de contenido para sindicación
|
setting_feeds_limit: Límite de contenido para sindicación
|
||||||
setting_gravatar_enabled: Usar iconos de usuario (Gravatar)
|
setting_gravatar_enabled: Usar iconos de usuario (Gravatar)
|
||||||
setting_host_name: Nombre de host
|
setting_host_name: Nombre y ruta del servidor
|
||||||
setting_issue_list_default_columns: Columnas por defecto para la lista de peticiones
|
setting_issue_list_default_columns: Columnas por defecto para la lista de peticiones
|
||||||
setting_issues_export_limit: Límite de exportación de peticiones
|
setting_issues_export_limit: Límite de exportación de peticiones
|
||||||
setting_login_required: Se requiere identificación
|
setting_login_required: Se requiere identificación
|
||||||
@@ -632,7 +635,7 @@ setting_wiki_compression: Compresión del historial del Wiki
|
|||||||
status_active: activo
|
status_active: activo
|
||||||
status_locked: bloqueado
|
status_locked: bloqueado
|
||||||
status_registered: registrado
|
status_registered: registrado
|
||||||
text_are_you_sure: ¿ Estás seguro ?
|
text_are_you_sure: ¿Está seguro?
|
||||||
text_assign_time_entries_to_project: Asignar las horas al proyecto
|
text_assign_time_entries_to_project: Asignar las horas al proyecto
|
||||||
text_caracters_maximum: %d caracteres como máximo.
|
text_caracters_maximum: %d caracteres como máximo.
|
||||||
text_caracters_minimum: %d caracteres como mínimo
|
text_caracters_minimum: %d caracteres como mínimo
|
||||||
@@ -640,11 +643,12 @@ text_comma_separated: Múltiples valores permitidos (separados por coma).
|
|||||||
text_default_administrator_account_changed: Cuenta de administrador por defecto modificada
|
text_default_administrator_account_changed: Cuenta de administrador por defecto modificada
|
||||||
text_destroy_time_entries: Borrar las horas
|
text_destroy_time_entries: Borrar las horas
|
||||||
text_destroy_time_entries_question: Existen %.02f horas asignadas a la petición que quiere borrar. ¿Qué quiere hacer ?
|
text_destroy_time_entries_question: Existen %.02f horas asignadas a la petición que quiere borrar. ¿Qué quiere hacer ?
|
||||||
|
text_diff_truncated: '... Diferencia truncada por exceder el máximo tamaño visualizable.'
|
||||||
text_email_delivery_not_configured: "El envío de correos no está configurado, y las notificaciones se han desactivado. \n Configure el servidor de SMTP en config/email.yml y reinicie la aplicación para activar los cambios."
|
text_email_delivery_not_configured: "El envío de correos no está configurado, y las notificaciones se han desactivado. \n Configure el servidor de SMTP en config/email.yml y reinicie la aplicación para activar los cambios."
|
||||||
text_enumeration_category_reassign_to: 'Reasignar al siguiente valor:'
|
text_enumeration_category_reassign_to: 'Reasignar al siguiente valor:'
|
||||||
text_enumeration_destroy_question: '%d objetos con este valor asignado.'
|
text_enumeration_destroy_question: '%d objetos con este valor asignado.'
|
||||||
text_file_repository_writable: Se puede escribir en el repositorio
|
text_file_repository_writable: Se puede escribir en el repositorio
|
||||||
text_issue_added: Petición añadida por %s.
|
text_issue_added: Petición %s añadida por %s.
|
||||||
text_issue_category_destroy_assignments: Dejar las peticiones sin categoría
|
text_issue_category_destroy_assignments: Dejar las peticiones sin categoría
|
||||||
text_issue_category_destroy_question: Algunas peticiones (%d) están asignadas a esta categoría. ¿Qué desea hacer?
|
text_issue_category_destroy_question: Algunas peticiones (%d) están asignadas a esta categoría. ¿Qué desea hacer?
|
||||||
text_issue_category_reassign_to: Reasignar las peticiones a la categoría
|
text_issue_category_reassign_to: Reasignar las peticiones a la categoría
|
||||||
@@ -657,25 +661,23 @@ text_journal_set_to: fijado a %s
|
|||||||
text_length_between: Longitud entre %d y %d caracteres.
|
text_length_between: Longitud entre %d y %d caracteres.
|
||||||
text_load_default_configuration: Cargar la configuración por defecto
|
text_load_default_configuration: Cargar la configuración por defecto
|
||||||
text_min_max_length_info: 0 para ninguna restricción
|
text_min_max_length_info: 0 para ninguna restricción
|
||||||
text_no_configuration_data: "Todavía no se han configurado roles, ni trackers, ni estados y flujo de trabajo asociado a peticiones. Se recomiendo encarecidamente cargar la configuración por defecto. Una vez cargada, podrá modificarla."
|
text_no_configuration_data: "Todavía no se han configurado perfiles, ni tipos, estados y flujo de trabajo asociado a peticiones. Se recomiendo encarecidamente cargar la configuración por defecto. Una vez cargada, podrá modificarla."
|
||||||
text_project_destroy_confirmation: ¿Estás seguro de querer eliminar el proyecto?
|
text_project_destroy_confirmation: ¿Estás seguro de querer eliminar el proyecto?
|
||||||
text_project_identifier_info: 'Letras minúsculas (a-z), números y signos de puntuación permitidos.<br />Una vez guardado, el identificador no puede modificarse.'
|
text_project_identifier_info: 'Letras minúsculas (a-z), números y signos de puntuación permitidos.<br />Una vez guardado, el identificador no puede modificarse.'
|
||||||
text_reassign_time_entries: 'Reasignar las horas a esta petición:'
|
text_reassign_time_entries: 'Reasignar las horas a esta petición:'
|
||||||
text_regexp_info: ej. ^[A-Z0-9]+$
|
text_regexp_info: ej. ^[A-Z0-9]+$
|
||||||
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_repository_usernames_mapping: "Establezca la correspondencia entre los usuarios de Redmine y los presentes en el log del repositorio.\nLos usuarios con el mismo nombre o correo en Redmine y en el repositorio serán asociados automáticamente."
|
||||||
text_rmagick_available: RMagick disponible (opcional)
|
text_rmagick_available: RMagick disponible (opcional)
|
||||||
text_select_mail_notifications: Seleccionar los eventos a notificar
|
text_select_mail_notifications: Seleccionar los eventos a notificar
|
||||||
text_select_project_modules: 'Seleccione los módulos a activar para este proyecto:'
|
text_select_project_modules: 'Seleccione los módulos a activar para este proyecto:'
|
||||||
text_status_changed_by_changeset: Aplicado en los cambios %s
|
text_status_changed_by_changeset: Aplicado en los cambios %s
|
||||||
text_subprojects_destroy_warning: 'Los subproyectos: %s también se eliminarán'
|
text_subprojects_destroy_warning: 'Los proyectos secundarios: %s también se eliminarán'
|
||||||
text_tip_task_begin_day: tarea que comienza este día
|
text_tip_task_begin_day: tarea que comienza este día
|
||||||
text_tip_task_begin_end_day: tarea que comienza y termina este día
|
text_tip_task_begin_end_day: tarea que comienza y termina este día
|
||||||
text_tip_task_end_day: tarea que termina este día
|
text_tip_task_end_day: tarea que termina este día
|
||||||
text_tracker_no_workflow: No hay ningún flujo de trabajo definido para este tracker
|
text_tracker_no_workflow: No hay ningún flujo de trabajo definido para este tipo de petición
|
||||||
text_unallowed_characters: Caracteres no permitidos
|
text_unallowed_characters: Caracteres no permitidos
|
||||||
text_user_mail_option: "En los proyectos no seleccionados, sólo recibirá notificaciones sobre elementos monitorizados o elementos en los que esté involucrado (por ejemplo, peticiones de las que usted sea autor o asignadas a usted)."
|
text_user_mail_option: "De los proyectos no seleccionados, sólo recibirá notificaciones sobre elementos monitorizados o elementos en los que esté involucrado (por ejemplo, peticiones de las que usted sea autor o asignadas a usted)."
|
||||||
text_user_wrote: '%s escribió:'
|
text_user_wrote: '%s escribió:'
|
||||||
text_wiki_destroy_confirmation: ¿Seguro que quiere borrar el wiki y todo su contenido?
|
text_wiki_destroy_confirmation: ¿Seguro que quiere borrar el wiki y todo su contenido?
|
||||||
text_workflow_edit: Seleccionar un flujo de trabajo para actualizar
|
text_workflow_edit: Seleccionar un flujo de trabajo para actualizar
|
||||||
label_user_activity: "%s's activity"
|
|
||||||
label_updated_time_by: Updated by %s %s ago
|
|
||||||
|
|||||||
@@ -694,3 +694,5 @@ permission_edit_own_messages: Muokkaa omia viestejä
|
|||||||
permission_delete_own_messages: Poista omia viestejä
|
permission_delete_own_messages: Poista omia viestejä
|
||||||
label_user_activity: "Käyttäjän %s historia"
|
label_user_activity: "Käyttäjän %s historia"
|
||||||
label_updated_time_by: Updated by %s %s ago
|
label_updated_time_by: Updated by %s %s ago
|
||||||
|
text_diff_truncated: '... This diff was truncated because it exceeds the maximum size that can be displayed.'
|
||||||
|
setting_diff_max_lines_displayed: Max number of diff lines displayed
|
||||||
|
|||||||
@@ -223,6 +223,7 @@ setting_mail_handler_api_enabled: "Activer le WS pour la réception d'emails"
|
|||||||
setting_mail_handler_api_key: Clé de protection de l'API
|
setting_mail_handler_api_key: Clé de protection de l'API
|
||||||
setting_sequential_project_identifiers: Générer des identifiants de projet séquentiels
|
setting_sequential_project_identifiers: Générer des identifiants de projet séquentiels
|
||||||
setting_gravatar_enabled: Afficher les Gravatar des utilisateurs
|
setting_gravatar_enabled: Afficher les Gravatar des utilisateurs
|
||||||
|
setting_diff_max_lines_displayed: Nombre maximum de lignes de diff affichées
|
||||||
|
|
||||||
permission_edit_project: Modifier le projet
|
permission_edit_project: Modifier le projet
|
||||||
permission_select_project_modules: Choisir les modules
|
permission_select_project_modules: Choisir les modules
|
||||||
@@ -670,6 +671,7 @@ text_enumeration_destroy_question: 'Cette valeur est affectée à %d objets.'
|
|||||||
text_enumeration_category_reassign_to: 'Réaffecter les objets à cette valeur:'
|
text_enumeration_category_reassign_to: 'Réaffecter les objets à cette valeur:'
|
||||||
text_email_delivery_not_configured: "L'envoi de mail n'est pas configuré, les notifications sont désactivées.\nConfigurez votre serveur SMTP dans config/email.yml et redémarrez l'application pour les activer."
|
text_email_delivery_not_configured: "L'envoi de mail n'est pas configuré, les notifications sont désactivées.\nConfigurez votre serveur SMTP dans config/email.yml et redémarrez l'application pour les activer."
|
||||||
text_repository_usernames_mapping: "Vous pouvez sélectionner ou modifier l'utilisateur Redmine associé à chaque nom d'utilisateur figurant dans l'historique du dépôt.\nLes utilisateurs avec le même identifiant ou la même adresse mail seront automatiquement associés."
|
text_repository_usernames_mapping: "Vous pouvez sélectionner ou modifier l'utilisateur Redmine associé à chaque nom d'utilisateur figurant dans l'historique du dépôt.\nLes utilisateurs avec le même identifiant ou la même adresse mail seront automatiquement associés."
|
||||||
|
text_diff_truncated: '... Ce différentiel a été tronqué car il excède la taille maximale pouvant être affichée.'
|
||||||
|
|
||||||
default_role_manager: Manager
|
default_role_manager: Manager
|
||||||
default_role_developper: Développeur
|
default_role_developper: Développeur
|
||||||
|
|||||||
+74
-74
@@ -236,7 +236,7 @@ label_register: הרשמה
|
|||||||
label_password_lost: אבדה הסיסמה?
|
label_password_lost: אבדה הסיסמה?
|
||||||
label_home: דף הבית
|
label_home: דף הבית
|
||||||
label_my_page: הדף שלי
|
label_my_page: הדף שלי
|
||||||
label_my_account: השבון שלי
|
label_my_account: החשבון שלי
|
||||||
label_my_projects: הפרויקטים שלי
|
label_my_projects: הפרויקטים שלי
|
||||||
label_administration: אדמיניסטרציה
|
label_administration: אדמיניסטרציה
|
||||||
label_login: התחבר
|
label_login: התחבר
|
||||||
@@ -292,7 +292,7 @@ label_confirmation: אישור
|
|||||||
label_export_to: יצא ל
|
label_export_to: יצא ל
|
||||||
label_read: קרא...
|
label_read: קרא...
|
||||||
label_public_projects: פרויקטים פומביים
|
label_public_projects: פרויקטים פומביים
|
||||||
label_open_issues: פותח
|
label_open_issues: פתוח
|
||||||
label_open_issues_plural: פתוחים
|
label_open_issues_plural: פתוחים
|
||||||
label_closed_issues: סגור
|
label_closed_issues: סגור
|
||||||
label_closed_issues_plural: סגורים
|
label_closed_issues_plural: סגורים
|
||||||
@@ -308,7 +308,7 @@ label_used_by: בשימוש ע"י
|
|||||||
label_details: פרטים
|
label_details: פרטים
|
||||||
label_add_note: הוסף הערה
|
label_add_note: הוסף הערה
|
||||||
label_per_page: לכל דף
|
label_per_page: לכל דף
|
||||||
label_calendar: לו"ח שנה
|
label_calendar: לוח שנה
|
||||||
label_months_from: חודשים מ
|
label_months_from: חודשים מ
|
||||||
label_gantt: גאנט
|
label_gantt: גאנט
|
||||||
label_internal: פנימי
|
label_internal: פנימי
|
||||||
@@ -357,7 +357,7 @@ label_sort_higher: הזז למעלה
|
|||||||
label_sort_lower: הזז למטה
|
label_sort_lower: הזז למטה
|
||||||
label_sort_lowest: הזז לתחתית
|
label_sort_lowest: הזז לתחתית
|
||||||
label_roadmap: מפת הדרכים
|
label_roadmap: מפת הדרכים
|
||||||
label_roadmap_due_in: %s נגמר בעוד
|
label_roadmap_due_in: נגמר בעוד %s
|
||||||
label_roadmap_overdue: %s מאחר
|
label_roadmap_overdue: %s מאחר
|
||||||
label_roadmap_no_issues: אין נושאים לגירסא זו
|
label_roadmap_no_issues: אין נושאים לגירסא זו
|
||||||
label_search: חפש
|
label_search: חפש
|
||||||
@@ -421,8 +421,8 @@ label_send_information: שלח מידע על חשבון למשתמש
|
|||||||
label_year: שנה
|
label_year: שנה
|
||||||
label_month: חודש
|
label_month: חודש
|
||||||
label_week: שבוע
|
label_week: שבוע
|
||||||
label_date_from: מאת
|
label_date_from: מתאריך
|
||||||
label_date_to: אל
|
label_date_to: עד
|
||||||
label_language_based: מבוסס שפה
|
label_language_based: מבוסס שפה
|
||||||
label_sort_by: מין לפי %s
|
label_sort_by: מין לפי %s
|
||||||
label_send_test_email: שלח דו"ל בדיקה
|
label_send_test_email: שלח דו"ל בדיקה
|
||||||
@@ -487,7 +487,7 @@ text_journal_set_to: שונה ל %s
|
|||||||
text_journal_deleted: נמחק
|
text_journal_deleted: נמחק
|
||||||
text_tip_task_begin_day: מטלה המתחילה היום
|
text_tip_task_begin_day: מטלה המתחילה היום
|
||||||
text_tip_task_end_day: מטלה המסתיימת היום
|
text_tip_task_end_day: מטלה המסתיימת היום
|
||||||
text_tip_task_begin_end_day: מתלה המתחילה ומסתיימת היום
|
text_tip_task_begin_end_day: מטלה המתחילה ומסתיימת היום
|
||||||
text_project_identifier_info: 'אותיות לטיניות (a-z), מספרים ומקפים.<br />ברגע שנשמר, לא ניתן לשנות את המזהה.'
|
text_project_identifier_info: 'אותיות לטיניות (a-z), מספרים ומקפים.<br />ברגע שנשמר, לא ניתן לשנות את המזהה.'
|
||||||
text_caracters_maximum: מקסימום %d תווים.
|
text_caracters_maximum: מקסימום %d תווים.
|
||||||
text_length_between: אורך בין %d ל %d תווים.
|
text_length_between: אורך בין %d ל %d תווים.
|
||||||
@@ -618,79 +618,79 @@ label_overall_activity: פעילות כוללת
|
|||||||
setting_default_projects_public: פרויקטים חדשים הינם פומביים כברירת מחדל
|
setting_default_projects_public: פרויקטים חדשים הינם פומביים כברירת מחדל
|
||||||
error_scm_annotate: "הכניסה לא קיימת או שלא ניתן לתאר אותה."
|
error_scm_annotate: "הכניסה לא קיימת או שלא ניתן לתאר אותה."
|
||||||
label_planning: תכנון
|
label_planning: תכנון
|
||||||
text_subprojects_destroy_warning: 'Its subproject(s): %s will be also deleted.'
|
text_subprojects_destroy_warning: 'תת הפרויקט\ים: %s ימחקו גם כן.'
|
||||||
label_and_its_subprojects: %s and its subprojects
|
label_and_its_subprojects: %s וכל תת הפרויקטים שלו
|
||||||
mail_body_reminder: "%d issue(s) that are assigned to you are due in the next %d days:"
|
mail_body_reminder: "%d נושאים שמיועדים אליך מיועדים להגשה בתוך %d ימים:"
|
||||||
mail_subject_reminder: "%d issue(s) due in the next days"
|
mail_subject_reminder: "%d נושאים מיעדים להגשה בימים הקרובים"
|
||||||
text_user_wrote: '%s wrote:'
|
text_user_wrote: '%s כתב:'
|
||||||
label_duplicated_by: duplicated by
|
label_duplicated_by: שוכפל ע"י
|
||||||
setting_enabled_scm: Enabled SCM
|
setting_enabled_scm: אפשר SCM
|
||||||
text_enumeration_category_reassign_to: 'Reassign them to this value:'
|
text_enumeration_category_reassign_to: 'הצב מחדש לערך הזה:'
|
||||||
text_enumeration_destroy_question: '%d objects are assigned to this value.'
|
text_enumeration_destroy_question: '%d אוביקטים מוצבים לערך זה.'
|
||||||
label_incoming_emails: Incoming emails
|
label_incoming_emails: דוא"ל נכנס
|
||||||
label_generate_key: Generate a key
|
label_generate_key: יצר מפתח
|
||||||
setting_mail_handler_api_enabled: Enable WS for incoming emails
|
setting_mail_handler_api_enabled: Enable WS for incoming emails
|
||||||
setting_mail_handler_api_key: API key
|
setting_mail_handler_api_key: מפתח API
|
||||||
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_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."
|
||||||
field_parent_title: Parent page
|
field_parent_title: דף אב
|
||||||
label_issue_watchers: Watchers
|
label_issue_watchers: צופים
|
||||||
setting_commit_logs_encoding: Commit messages encoding
|
setting_commit_logs_encoding: Commit messages encoding
|
||||||
button_quote: Quote
|
button_quote: צטט
|
||||||
setting_sequential_project_identifiers: Generate sequential project identifiers
|
setting_sequential_project_identifiers: Generate sequential project identifiers
|
||||||
notice_unable_delete_version: Unable to delete version
|
notice_unable_delete_version: לא ניתן למחוק גירסא
|
||||||
label_renamed: renamed
|
label_renamed: השם שונה
|
||||||
label_copied: copied
|
label_copied: הועתק
|
||||||
setting_plain_text_mail: plain text only (no HTML)
|
setting_plain_text_mail: טקסט פשוט בלבד (ללא HTML)
|
||||||
permission_view_files: View files
|
permission_view_files: צפה בקבצים
|
||||||
permission_edit_issues: Edit issues
|
permission_edit_issues: ערוך נושאים
|
||||||
permission_edit_own_time_entries: Edit own time logs
|
permission_edit_own_time_entries: ערוך את לוג הזמן של עצמך
|
||||||
permission_manage_public_queries: Manage public queries
|
permission_manage_public_queries: נהל שאילתות פומביות
|
||||||
permission_add_issues: Add issues
|
permission_add_issues: הוסף נושא
|
||||||
permission_log_time: Log spent time
|
permission_log_time: תעד זמן שבוזבז
|
||||||
permission_view_changesets: View changesets
|
permission_view_changesets: צפה בקבוצות שינויים
|
||||||
permission_view_time_entries: View spent time
|
permission_view_time_entries: צפה בזמן שבוזבז
|
||||||
permission_manage_versions: Manage versions
|
permission_manage_versions: נהל גירסאות
|
||||||
permission_manage_wiki: Manage wiki
|
permission_manage_wiki: נהל wiki
|
||||||
permission_manage_categories: Manage issue categories
|
permission_manage_categories: נהל קטגוריות נושאים
|
||||||
permission_protect_wiki_pages: Protect wiki pages
|
permission_protect_wiki_pages: הגן כל דפי wiki
|
||||||
permission_comment_news: Comment news
|
permission_comment_news: הגב על החדשות
|
||||||
permission_delete_messages: Delete messages
|
permission_delete_messages: מחק הודעות
|
||||||
permission_select_project_modules: Select project modules
|
permission_select_project_modules: בחר מודולי פרויקט
|
||||||
permission_manage_documents: Manage documents
|
permission_manage_documents: נהל מסמכים
|
||||||
permission_edit_wiki_pages: Edit wiki pages
|
permission_edit_wiki_pages: ערוך דפי wiki
|
||||||
permission_add_issue_watchers: Add watchers
|
permission_add_issue_watchers: הוסף צופים
|
||||||
permission_view_gantt: View gantt chart
|
permission_view_gantt: צפה בגאנט
|
||||||
permission_move_issues: Move issues
|
permission_move_issues: הזז נושאים
|
||||||
permission_manage_issue_relations: Manage issue relations
|
permission_manage_issue_relations: נהל יחס בין נושאים
|
||||||
permission_delete_wiki_pages: Delete wiki pages
|
permission_delete_wiki_pages: מחק דפי wiki
|
||||||
permission_manage_boards: Manage boards
|
permission_manage_boards: נהל לוחות
|
||||||
permission_delete_wiki_pages_attachments: Delete attachments
|
permission_delete_wiki_pages_attachments: מחק דבוקות
|
||||||
permission_view_wiki_edits: View wiki history
|
permission_view_wiki_edits: צפה בהיסטורית wiki
|
||||||
permission_add_messages: Post messages
|
permission_add_messages: הצב הודעות
|
||||||
permission_view_messages: View messages
|
permission_view_messages: צפה בהודעות
|
||||||
permission_manage_files: Manage files
|
permission_manage_files: נהל קבצים
|
||||||
permission_edit_issue_notes: Edit notes
|
permission_edit_issue_notes: ערוך רשימות
|
||||||
permission_manage_news: Manage news
|
permission_manage_news: נהל חדשות
|
||||||
permission_view_calendar: View calendrier
|
permission_view_calendar: צפה בלוח השנה
|
||||||
permission_manage_members: Manage members
|
permission_manage_members: נהל חברים
|
||||||
permission_edit_messages: Edit messages
|
permission_edit_messages: ערוך הודעות
|
||||||
permission_delete_issues: Delete issues
|
permission_delete_issues: מחק נושאים
|
||||||
permission_view_issue_watchers: View watchers list
|
permission_view_issue_watchers: צפה ברשימה צופים
|
||||||
permission_manage_repository: Manage repository
|
permission_manage_repository: נהל מאגר
|
||||||
permission_commit_access: Commit access
|
permission_commit_access: Commit access
|
||||||
permission_browse_repository: Browse repository
|
permission_browse_repository: סייר במאגר
|
||||||
permission_view_documents: View documents
|
permission_view_documents: צפה במסמכים
|
||||||
permission_edit_project: Edit project
|
permission_edit_project: ערוך פרויקט
|
||||||
permission_add_issue_notes: Add notes
|
permission_add_issue_notes: Add notes
|
||||||
permission_save_queries: Save queries
|
permission_save_queries: שמור שאילתות
|
||||||
permission_view_wiki_pages: View wiki
|
permission_view_wiki_pages: צפה ב-wiki
|
||||||
permission_rename_wiki_pages: Rename wiki pages
|
permission_rename_wiki_pages: שנה שם של דפי wiki
|
||||||
permission_edit_time_entries: Edit time logs
|
permission_edit_time_entries: ערוך רישום זמנים
|
||||||
permission_edit_own_issue_notes: Edit own notes
|
permission_edit_own_issue_notes: Edit own notes
|
||||||
setting_gravatar_enabled: Use Gravatar user icons
|
setting_gravatar_enabled: Use Gravatar user icons
|
||||||
label_example: Example
|
label_example: דוגמא
|
||||||
text_repository_usernames_mapping: "Select ou 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_repository_usernames_mapping: "Select ou 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."
|
||||||
permission_edit_own_messages: Edit own messages
|
permission_edit_own_messages: ערוך הודעות של עצמך
|
||||||
permission_delete_own_messages: Delete own messages
|
permission_delete_own_messages: מחק הודעות של עצמך
|
||||||
label_user_activity: "%s's activity"
|
label_user_activity: "הפעילות של %s"
|
||||||
label_updated_time_by: Updated by %s %s ago
|
label_updated_time_by: עודכן ע"י %s לפני %s
|
||||||
|
|||||||
+3
-1
@@ -694,4 +694,6 @@ text_repository_usernames_mapping: "Állítsd be a felhasználó összerendelés
|
|||||||
permission_edit_own_messages: Saját üzenetek szerkesztése
|
permission_edit_own_messages: Saját üzenetek szerkesztése
|
||||||
permission_delete_own_messages: Saját üzenetek törlése
|
permission_delete_own_messages: Saját üzenetek törlése
|
||||||
label_user_activity: "%s tevékenységei"
|
label_user_activity: "%s tevékenységei"
|
||||||
label_updated_time_by: Updated by %s %s ago
|
label_updated_time_by: "Módosította %s ennyivel ezelőtt: %s"
|
||||||
|
text_diff_truncated: '... A diff fájl vége nem jelenik meg, mert hosszab, mint a megjeleníthető sorok száma.'
|
||||||
|
setting_diff_max_lines_displayed: A megjelenítendő sorok száma (maximum) a diff fájloknál
|
||||||
|
|||||||
@@ -694,3 +694,5 @@ permission_edit_own_messages: Modifica propri messaggi
|
|||||||
permission_delete_own_messages: Elimina propri messaggi
|
permission_delete_own_messages: Elimina propri messaggi
|
||||||
label_user_activity: "%s's activity"
|
label_user_activity: "%s's activity"
|
||||||
label_updated_time_by: Updated by %s %s ago
|
label_updated_time_by: Updated by %s %s ago
|
||||||
|
text_diff_truncated: '... This diff was truncated because it exceeds the maximum size that can be displayed.'
|
||||||
|
setting_diff_max_lines_displayed: Max number of diff lines displayed
|
||||||
|
|||||||
@@ -695,3 +695,5 @@ permission_edit_own_messages: Edit own messages
|
|||||||
permission_delete_own_messages: Delete own messages
|
permission_delete_own_messages: Delete own messages
|
||||||
label_user_activity: "%s's activity"
|
label_user_activity: "%s's activity"
|
||||||
label_updated_time_by: Updated by %s %s ago
|
label_updated_time_by: Updated by %s %s ago
|
||||||
|
text_diff_truncated: '... This diff was truncated because it exceeds the maximum size that can be displayed.'
|
||||||
|
setting_diff_max_lines_displayed: Max number of diff lines displayed
|
||||||
|
|||||||
+36
-34
@@ -97,7 +97,7 @@ field_mail: 메일
|
|||||||
field_filename: 파일
|
field_filename: 파일
|
||||||
field_filesize: 크기
|
field_filesize: 크기
|
||||||
field_downloads: 다운로드
|
field_downloads: 다운로드
|
||||||
field_author: 보고자
|
field_author: 저자
|
||||||
field_created_on: 보고시간
|
field_created_on: 보고시간
|
||||||
field_updated_on: 변경시간
|
field_updated_on: 변경시간
|
||||||
field_field_format: 포맷
|
field_field_format: 포맷
|
||||||
@@ -120,18 +120,18 @@ field_subject: 제목
|
|||||||
field_due_date: 완료 기한
|
field_due_date: 완료 기한
|
||||||
field_assigned_to: 담당자
|
field_assigned_to: 담당자
|
||||||
field_priority: 우선순위
|
field_priority: 우선순위
|
||||||
field_fixed_version: 목표 버전
|
field_fixed_version: 목표버전
|
||||||
field_user: 사용자
|
field_user: 사용자
|
||||||
field_role: 역할
|
field_role: 역할
|
||||||
field_homepage: 홈페이지
|
field_homepage: 홈페이지
|
||||||
field_is_public: 공개
|
field_is_public: 공개
|
||||||
field_parent: 상위 프로젝트
|
field_parent: 상위 프로젝트
|
||||||
field_is_in_chlog: 변경이력(changelog)에서 보여지는 일감들
|
field_is_in_chlog: 변경이력(changelog)에서 표시할 일감들
|
||||||
field_is_in_roadmap: 로드맵에서 보여지는 일감들
|
field_is_in_roadmap: 로드맵에서표시할 일감들
|
||||||
field_login: 로그인
|
field_login: 로그인
|
||||||
field_mail_notification: 메일 알림
|
field_mail_notification: 메일 알림
|
||||||
field_admin: 관리자
|
field_admin: 관리자
|
||||||
field_last_login_on: 최종 접속
|
field_last_login_on: 마지막 로그인
|
||||||
field_language: 언어
|
field_language: 언어
|
||||||
field_effective_date: 일자
|
field_effective_date: 일자
|
||||||
field_password: 비밀번호
|
field_password: 비밀번호
|
||||||
@@ -188,7 +188,7 @@ setting_commit_ref_keywords: 일감 참조에 사용할 키워드들
|
|||||||
setting_commit_fix_keywords: 일감 해결에 사용할 키워드들
|
setting_commit_fix_keywords: 일감 해결에 사용할 키워드들
|
||||||
setting_autologin: 자동 로그인
|
setting_autologin: 자동 로그인
|
||||||
setting_date_format: 날짜 형식
|
setting_date_format: 날짜 형식
|
||||||
setting_cross_project_issue_relations: 프로젝트간 일감에 관련을 맺는 것을 허용
|
setting_cross_project_issue_relations: 프로젝트간 일감에 관계을 맺는 것을 허용
|
||||||
setting_issue_list_default_columns: 일감 목록에 보여줄 기본 컬럼들
|
setting_issue_list_default_columns: 일감 목록에 보여줄 기본 컬럼들
|
||||||
setting_repositories_encodings: 저장소 인코딩
|
setting_repositories_encodings: 저장소 인코딩
|
||||||
setting_emails_footer: 메일 꼬리
|
setting_emails_footer: 메일 꼬리
|
||||||
@@ -201,9 +201,9 @@ label_project_new: 새 프로젝트
|
|||||||
label_project_plural: 프로젝트
|
label_project_plural: 프로젝트
|
||||||
label_project_all: 모든 프로젝트
|
label_project_all: 모든 프로젝트
|
||||||
label_project_latest: 최근 프로젝트
|
label_project_latest: 최근 프로젝트
|
||||||
label_issue: 일감 보기
|
label_issue: 일감
|
||||||
label_issue_new: 새 일감만들기
|
label_issue_new: 새 일감만들기
|
||||||
label_issue_plural: 일감 보기
|
label_issue_plural: 일감
|
||||||
label_issue_view_all: 모든 일감 보기
|
label_issue_view_all: 모든 일감 보기
|
||||||
label_document: 문서
|
label_document: 문서
|
||||||
label_document_new: 새 문서
|
label_document_new: 새 문서
|
||||||
@@ -243,15 +243,15 @@ label_administration: 관리자
|
|||||||
label_login: 로그인
|
label_login: 로그인
|
||||||
label_logout: 로그아웃
|
label_logout: 로그아웃
|
||||||
label_help: 도움말
|
label_help: 도움말
|
||||||
label_reported_issues: 보고된 일감
|
label_reported_issues: 보고한 일감
|
||||||
label_assigned_to_me_issues: 나에게 할당된 일감
|
label_assigned_to_me_issues: 나에게 할당된 일감
|
||||||
label_last_login: 최종 접속
|
label_last_login: 최종 접속
|
||||||
label_last_updates: 최종 변경 내역
|
label_last_updates: 최종 변경 내역
|
||||||
label_last_updates_plural: 최종변경 %d
|
label_last_updates_plural: 최종변경 %d
|
||||||
label_registered_on: 등록시각
|
label_registered_on: 등록시각
|
||||||
label_activity: 진행중인 작업
|
label_activity: 작업내역
|
||||||
label_new: 신규
|
label_new: 새로 만들기
|
||||||
label_logged_as: ▶
|
label_logged_as: '로그인계정:'
|
||||||
label_environment: 환경
|
label_environment: 환경
|
||||||
label_authentication: 인증설정
|
label_authentication: 인증설정
|
||||||
label_auth_source: 인증 모드
|
label_auth_source: 인증 모드
|
||||||
@@ -280,7 +280,7 @@ label_attachment_plural: 관련파일
|
|||||||
label_report: 보고서
|
label_report: 보고서
|
||||||
label_report_plural: 보고서
|
label_report_plural: 보고서
|
||||||
label_news: 뉴스
|
label_news: 뉴스
|
||||||
label_news_new: 뉴스추가
|
label_news_new: 새 뉴스
|
||||||
label_news_plural: 뉴스
|
label_news_plural: 뉴스
|
||||||
label_news_latest: 최근 뉴스
|
label_news_latest: 최근 뉴스
|
||||||
label_news_view_all: 모든 뉴스
|
label_news_view_all: 모든 뉴스
|
||||||
@@ -298,7 +298,7 @@ label_open_issues: 진행중
|
|||||||
label_open_issues_plural: 진행중
|
label_open_issues_plural: 진행중
|
||||||
label_closed_issues: 완료됨
|
label_closed_issues: 완료됨
|
||||||
label_closed_issues_plural: 완료됨
|
label_closed_issues_plural: 완료됨
|
||||||
label_total: Total
|
label_total: 합계
|
||||||
label_permissions: 허가권한
|
label_permissions: 허가권한
|
||||||
label_current_status: 일감 상태
|
label_current_status: 일감 상태
|
||||||
label_new_statuses_allowed: 허용되는 일감 상태
|
label_new_statuses_allowed: 허용되는 일감 상태
|
||||||
@@ -307,7 +307,7 @@ label_none: 없음
|
|||||||
label_next: 다음
|
label_next: 다음
|
||||||
label_previous: 이전
|
label_previous: 이전
|
||||||
label_used_by: 사용됨
|
label_used_by: 사용됨
|
||||||
label_details: 상세
|
label_details: 자세히
|
||||||
label_add_note: 일감덧글 추가
|
label_add_note: 일감덧글 추가
|
||||||
label_per_page: 페이지별
|
label_per_page: 페이지별
|
||||||
label_calendar: 달력
|
label_calendar: 달력
|
||||||
@@ -316,7 +316,7 @@ label_gantt: Gantt 챠트
|
|||||||
label_internal: 내부
|
label_internal: 내부
|
||||||
label_last_changes: 지난 변경사항 %d 건
|
label_last_changes: 지난 변경사항 %d 건
|
||||||
label_change_view_all: 모든 변경 내역 보기
|
label_change_view_all: 모든 변경 내역 보기
|
||||||
label_personalize_page: 입맛대로 구성하기(Drag & Drop)
|
label_personalize_page: 입맛대로 구성하기
|
||||||
label_comment: 댓글
|
label_comment: 댓글
|
||||||
label_comment_plural: 댓글
|
label_comment_plural: 댓글
|
||||||
label_comment_add: 댓글 추가
|
label_comment_add: 댓글 추가
|
||||||
@@ -353,7 +353,7 @@ label_latest_revision: 최근 개정판
|
|||||||
label_latest_revision_plural: 최근 개정판
|
label_latest_revision_plural: 최근 개정판
|
||||||
label_view_revisions: 개정판 보기
|
label_view_revisions: 개정판 보기
|
||||||
label_max_size: 최대 크기
|
label_max_size: 최대 크기
|
||||||
label_on: 'on'
|
label_on: '전체: '
|
||||||
label_sort_highest: 최상단으로
|
label_sort_highest: 최상단으로
|
||||||
label_sort_higher: 위로
|
label_sort_higher: 위로
|
||||||
label_sort_lower: 아래로
|
label_sort_lower: 아래로
|
||||||
@@ -361,7 +361,7 @@ label_sort_lowest: 최하단으로
|
|||||||
label_roadmap: 로드맵
|
label_roadmap: 로드맵
|
||||||
label_roadmap_due_in: 기한 %s
|
label_roadmap_due_in: 기한 %s
|
||||||
label_roadmap_overdue: %s 지연
|
label_roadmap_overdue: %s 지연
|
||||||
label_roadmap_no_issues: 이버전에 해당하는 일감 없음
|
label_roadmap_no_issues: 이 버전에 해당하는 일감 없음
|
||||||
label_search: 검색
|
label_search: 검색
|
||||||
label_result_plural: 결과
|
label_result_plural: 결과
|
||||||
label_all_words: 모든 단어
|
label_all_words: 모든 단어
|
||||||
@@ -412,19 +412,19 @@ label_disabled: 비활성화
|
|||||||
label_show_completed_versions: 완료된 버전 보기
|
label_show_completed_versions: 완료된 버전 보기
|
||||||
label_me: 나
|
label_me: 나
|
||||||
label_board: 게시판
|
label_board: 게시판
|
||||||
label_board_new: 신규 게시판
|
label_board_new: 새 게시판
|
||||||
label_board_plural: 게시판
|
label_board_plural: 게시판
|
||||||
label_topic_plural: 주제
|
label_topic_plural: 주제
|
||||||
label_message_plural: 관련글
|
label_message_plural: 관련글
|
||||||
label_message_last: 최종 글
|
label_message_last: 마지막 글
|
||||||
label_message_new: 새글쓰기
|
label_message_new: 새글쓰기
|
||||||
label_reply_plural: 답글
|
label_reply_plural: 답글
|
||||||
label_send_information: 사용자에게 계정정보를 보냄
|
label_send_information: 사용자에게 계정정보를 보냄
|
||||||
label_year: 년
|
label_year: 년
|
||||||
label_month: 월
|
label_month: 월
|
||||||
label_week: 주
|
label_week: 주
|
||||||
label_date_from: 에서
|
label_date_from: '기간:'
|
||||||
label_date_to: (으)로
|
label_date_to: ' ~ '
|
||||||
label_language_based: 언어설정에 따름
|
label_language_based: 언어설정에 따름
|
||||||
label_sort_by: 정렬방법(%s)
|
label_sort_by: 정렬방법(%s)
|
||||||
label_send_test_email: 테스트 메일 보내기
|
label_send_test_email: 테스트 메일 보내기
|
||||||
@@ -533,7 +533,7 @@ default_activity_development: 개발
|
|||||||
|
|
||||||
enumeration_issue_priorities: 일감 우선순위
|
enumeration_issue_priorities: 일감 우선순위
|
||||||
enumeration_doc_categories: 문서 카테고리
|
enumeration_doc_categories: 문서 카테고리
|
||||||
enumeration_activities: 진행활동(시간 추적)
|
enumeration_activities: 작업분류(시간추적)
|
||||||
button_copy: 복사
|
button_copy: 복사
|
||||||
mail_body_account_information_external: 레드마인에 로그인할 때 "%s" 계정을 사용하실 수 있습니다.
|
mail_body_account_information_external: 레드마인에 로그인할 때 "%s" 계정을 사용하실 수 있습니다.
|
||||||
button_change_password: 비밀번호 변경
|
button_change_password: 비밀번호 변경
|
||||||
@@ -555,7 +555,7 @@ button_annotate: 주석달기(annotate)
|
|||||||
label_issues_by: 일감분류 방식 %s
|
label_issues_by: 일감분류 방식 %s
|
||||||
field_searchable: 검색가능
|
field_searchable: 검색가능
|
||||||
label_display_per_page: '페이지당: %s'
|
label_display_per_page: '페이지당: %s'
|
||||||
setting_per_page_options: 페이지당 표시할 객채 수
|
setting_per_page_options: 페이지당 표시할 객체 수
|
||||||
label_age: 마지막 수정일
|
label_age: 마지막 수정일
|
||||||
notice_default_data_loaded: 기본 설정을 성공적으로 로드하였습니다.
|
notice_default_data_loaded: 기본 설정을 성공적으로 로드하였습니다.
|
||||||
text_load_default_configuration: 기본 설정을 로딩하기
|
text_load_default_configuration: 기본 설정을 로딩하기
|
||||||
@@ -585,20 +585,20 @@ project_module_files: 관련파일
|
|||||||
project_module_documents: 문서
|
project_module_documents: 문서
|
||||||
project_module_repository: 저장소
|
project_module_repository: 저장소
|
||||||
project_module_news: 뉴스
|
project_module_news: 뉴스
|
||||||
project_module_time_tracking: 진행중인 작업
|
project_module_time_tracking: 시간추적
|
||||||
text_file_repository_writable: 파일 저장소 쓰기 가능
|
text_file_repository_writable: 파일 저장소 쓰기 가능
|
||||||
text_default_administrator_account_changed: 기본 관리자 계정이 변경되었습니다.
|
text_default_administrator_account_changed: 기본 관리자 계정이 변경되었습니다.
|
||||||
text_rmagick_available: RMagick available (optional)
|
text_rmagick_available: RMagick 사용가능(옵션)
|
||||||
button_configure: 설정
|
button_configure: 설정
|
||||||
label_plugins: 플러그인
|
label_plugins: 플러그인
|
||||||
label_ldap_authentication: LDAP 인증
|
label_ldap_authentication: LDAP 인증
|
||||||
label_downloads_abbr: D/L
|
label_downloads_abbr: D/L
|
||||||
label_add_another_file: 다른 파일 추가
|
label_add_another_file: 다른 파일 추가
|
||||||
label_this_month: 이번 달
|
label_this_month: 이번 달
|
||||||
text_destroy_time_entries_question: %.02f hours were reported on the issues you are about to delete. What do you want to do ?
|
text_destroy_time_entries_question: 삭제하려는 일감에 %.02f 시간이 보고되어 있습니다. 어떻게 하시겠습니까?
|
||||||
label_last_n_days: 지난 %d 일
|
label_last_n_days: 지난 %d 일
|
||||||
label_all_time: 모든 시간
|
label_all_time: 모든 시간
|
||||||
error_issue_not_found_in_project: 'The issue was not found or does not belong to this project'
|
error_issue_not_found_in_project: '일감이 없거나 이 프로젝트의 것이 아닙니다.'
|
||||||
label_this_year: 올해
|
label_this_year: 올해
|
||||||
text_assign_time_entries_to_project: 보고된 시간을 프로젝트에 할당하기
|
text_assign_time_entries_to_project: 보고된 시간을 프로젝트에 할당하기
|
||||||
label_date_range: 날짜 범위
|
label_date_range: 날짜 범위
|
||||||
@@ -608,15 +608,15 @@ label_optional_description: 부가적인 설명
|
|||||||
label_last_month: 지난 달
|
label_last_month: 지난 달
|
||||||
text_destroy_time_entries: 보고된 시간을 삭제하기
|
text_destroy_time_entries: 보고된 시간을 삭제하기
|
||||||
text_reassign_time_entries: '이 알림에 보고된 시간을 재할당하기:'
|
text_reassign_time_entries: '이 알림에 보고된 시간을 재할당하기:'
|
||||||
setting_activity_days_default: 프로젝트 활동에 보여질 날수
|
setting_activity_days_default: 프로젝트 작업내역에 보여줄 날수
|
||||||
label_chronological_order: 시간 순으로 정렬
|
label_chronological_order: 시간 순으로 정렬
|
||||||
field_comments_sorting: 히스토리 정렬 설정
|
field_comments_sorting: 히스토리 정렬 설정
|
||||||
label_reverse_chronological_order: 시간 역순으로 정렬
|
label_reverse_chronological_order: 시간 역순으로 정렬
|
||||||
label_preferences: Preferences
|
label_preferences: 설정
|
||||||
setting_display_subprojects_issues: 하위 프로젝트의 일감을 최상위 프로젝트에서 표시
|
setting_display_subprojects_issues: 하위 프로젝트의 일감을 최상위 프로젝트에서 표시
|
||||||
label_overall_activity: 전체 진행 상황
|
label_overall_activity: 전체 작업내역
|
||||||
setting_default_projects_public: 새 프로젝트를 공개로 설정
|
setting_default_projects_public: 새 프로젝트를 공개로 설정
|
||||||
error_scm_annotate: "The entry does not exist or can not be annotated."
|
error_scm_annotate: "항목이 없거나 주석을 달 수 없습니다."
|
||||||
label_planning: 프로젝트계획(Planning)
|
label_planning: 프로젝트계획(Planning)
|
||||||
text_subprojects_destroy_warning: '서브프로젝트(%s)가 자동으로 지워질 것입니다.'
|
text_subprojects_destroy_warning: '서브프로젝트(%s)가 자동으로 지워질 것입니다.'
|
||||||
label_and_its_subprojects: %s와 서브프로젝트들
|
label_and_its_subprojects: %s와 서브프로젝트들
|
||||||
@@ -692,5 +692,7 @@ label_example: 예
|
|||||||
text_repository_usernames_mapping: "저장소 로그에서 발견된 각 사용자에 레드마인 사용자를 업데이트할때 선택합니다.\n레드마인과 저장소의 이름이나 이메일이 같은 사용자가 자동으로 연결됩니다."
|
text_repository_usernames_mapping: "저장소 로그에서 발견된 각 사용자에 레드마인 사용자를 업데이트할때 선택합니다.\n레드마인과 저장소의 이름이나 이메일이 같은 사용자가 자동으로 연결됩니다."
|
||||||
permission_edit_own_messages: 자기 메시지 편집
|
permission_edit_own_messages: 자기 메시지 편집
|
||||||
permission_delete_own_messages: 자기 메시지 삭제
|
permission_delete_own_messages: 자기 메시지 삭제
|
||||||
label_user_activity: "%s의 활동"
|
label_user_activity: "%s의 작업내역"
|
||||||
label_updated_time_by: Updated by %s %s ago
|
label_updated_time_by: %s가 %s 전에 변경
|
||||||
|
text_diff_truncated: '... 이 차이점은 표시할 수 있는 최대 줄수를 초과해서 이 차이점은 잘렸습니다.'
|
||||||
|
setting_diff_max_lines_displayed: 차이점보기에 표시할 최대 줄수
|
||||||
|
|||||||
+569
-567
File diff suppressed because it is too large
Load Diff
@@ -696,3 +696,5 @@ permission_edit_own_messages: Edit own messages
|
|||||||
permission_delete_own_messages: Delete own messages
|
permission_delete_own_messages: Delete own messages
|
||||||
label_user_activity: "%s's activity"
|
label_user_activity: "%s's activity"
|
||||||
label_updated_time_by: Updated by %s %s ago
|
label_updated_time_by: Updated by %s %s ago
|
||||||
|
text_diff_truncated: '... This diff was truncated because it exceeds the maximum size that can be displayed.'
|
||||||
|
setting_diff_max_lines_displayed: Max number of diff lines displayed
|
||||||
|
|||||||
@@ -695,3 +695,5 @@ permission_edit_own_messages: Edit own messages
|
|||||||
permission_delete_own_messages: Delete own messages
|
permission_delete_own_messages: Delete own messages
|
||||||
label_user_activity: "%s's activity"
|
label_user_activity: "%s's activity"
|
||||||
label_updated_time_by: Updated by %s %s ago
|
label_updated_time_by: Updated by %s %s ago
|
||||||
|
text_diff_truncated: '... This diff was truncated because it exceeds the maximum size that can be displayed.'
|
||||||
|
setting_diff_max_lines_displayed: Max number of diff lines displayed
|
||||||
|
|||||||
+4
-2
@@ -632,7 +632,7 @@ setting_autofetch_changesets: Automatyczne pobieranie zmian
|
|||||||
setting_autologin: Auto logowanie
|
setting_autologin: Auto logowanie
|
||||||
setting_bcc_recipients: Odbiorcy kopii tajnej (kt/bcc)
|
setting_bcc_recipients: Odbiorcy kopii tajnej (kt/bcc)
|
||||||
setting_commit_fix_keywords: Słowa zmieniające status
|
setting_commit_fix_keywords: Słowa zmieniające status
|
||||||
setting_commit_logs_encoding: Zatwierdź kodowanie wiadomości
|
setting_commit_logs_encoding: Kodowanie komentarzy zatwierdzeń
|
||||||
setting_commit_ref_keywords: Słowa tworzące powiązania
|
setting_commit_ref_keywords: Słowa tworzące powiązania
|
||||||
setting_cross_project_issue_relations: Zezwól na powiązania zagadnień między projektami
|
setting_cross_project_issue_relations: Zezwól na powiązania zagadnień między projektami
|
||||||
setting_date_format: Format daty
|
setting_date_format: Format daty
|
||||||
@@ -712,4 +712,6 @@ text_wiki_destroy_confirmation: Jesteś pewien, że chcesz usunąć to wiki i ca
|
|||||||
text_workflow_edit: Zaznacz rolę i typ zagadnienia do edycji przepływu
|
text_workflow_edit: Zaznacz rolę i typ zagadnienia do edycji przepływu
|
||||||
|
|
||||||
label_user_activity: "Aktywność: %s"
|
label_user_activity: "Aktywność: %s"
|
||||||
label_updated_time_by: Updated by %s %s ago
|
label_updated_time_by: Uaktualnione przez %s %s temu
|
||||||
|
text_diff_truncated: '... Ten plik różnic został przycięty ponieważ jest zbyt długi.'
|
||||||
|
setting_diff_max_lines_displayed: Maksymalna liczba linii różnicy do pokazania
|
||||||
|
|||||||
@@ -695,3 +695,5 @@ permission_edit_own_messages: Editar próprias mensagens
|
|||||||
permission_delete_own_messages: Excluir próprias mensagens
|
permission_delete_own_messages: Excluir próprias mensagens
|
||||||
label_user_activity: "Atividade de %s"
|
label_user_activity: "Atividade de %s"
|
||||||
label_updated_time_by: Updated by %s %s ago
|
label_updated_time_by: Updated by %s %s ago
|
||||||
|
text_diff_truncated: '... This diff was truncated because it exceeds the maximum size that can be displayed.'
|
||||||
|
setting_diff_max_lines_displayed: Max number of diff lines displayed
|
||||||
|
|||||||
+64
-62
@@ -104,8 +104,8 @@ field_name: Nome
|
|||||||
field_description: Descrição
|
field_description: Descrição
|
||||||
field_summary: Sumário
|
field_summary: Sumário
|
||||||
field_is_required: Obrigatório
|
field_is_required: Obrigatório
|
||||||
field_firstname: Nome próprio
|
field_firstname: Nome
|
||||||
field_lastname: Último nome
|
field_lastname: Apelido
|
||||||
field_mail: E-mail
|
field_mail: E-mail
|
||||||
field_filename: Ficheiro
|
field_filename: Ficheiro
|
||||||
field_filesize: Tamanho
|
field_filesize: Tamanho
|
||||||
@@ -141,7 +141,7 @@ field_is_public: Público
|
|||||||
field_parent: Sub-projecto de
|
field_parent: Sub-projecto de
|
||||||
field_is_in_chlog: Tarefas mostradas no changelog
|
field_is_in_chlog: Tarefas mostradas no changelog
|
||||||
field_is_in_roadmap: Tarefas mostradas no roadmap
|
field_is_in_roadmap: Tarefas mostradas no roadmap
|
||||||
field_login: Login
|
field_login: Nome de utilizador
|
||||||
field_mail_notification: Notificações por e-mail
|
field_mail_notification: Notificações por e-mail
|
||||||
field_admin: Administrador
|
field_admin: Administrador
|
||||||
field_last_login_on: Última visita
|
field_last_login_on: Última visita
|
||||||
@@ -224,7 +224,7 @@ setting_mail_handler_api_key: Chave da API
|
|||||||
setting_sequential_project_identifiers: Gerar identificadores de projecto sequênciais
|
setting_sequential_project_identifiers: Gerar identificadores de projecto sequênciais
|
||||||
|
|
||||||
project_module_issue_tracking: Tarefas
|
project_module_issue_tracking: Tarefas
|
||||||
project_module_time_tracking: Contagem de tempo
|
project_module_time_tracking: Registo de tempo
|
||||||
project_module_news: Notícias
|
project_module_news: Notícias
|
||||||
project_module_documents: Documentos
|
project_module_documents: Documentos
|
||||||
project_module_files: Ficheiros
|
project_module_files: Ficheiros
|
||||||
@@ -440,7 +440,7 @@ label_issue_tracking: Tarefas
|
|||||||
label_spent_time: Tempo gasto
|
label_spent_time: Tempo gasto
|
||||||
label_f_hour: %.2f hora
|
label_f_hour: %.2f hora
|
||||||
label_f_hour_plural: %.2f horas
|
label_f_hour_plural: %.2f horas
|
||||||
label_time_tracking: Contagem de tempo
|
label_time_tracking: Registo de tempo
|
||||||
label_change_plural: Mudanças
|
label_change_plural: Mudanças
|
||||||
label_statistics: Estatísticas
|
label_statistics: Estatísticas
|
||||||
label_commits_per_month: Commits por mês
|
label_commits_per_month: Commits por mês
|
||||||
@@ -551,7 +551,7 @@ button_move: Mover
|
|||||||
button_back: Voltar
|
button_back: Voltar
|
||||||
button_cancel: Cancelar
|
button_cancel: Cancelar
|
||||||
button_activate: Activar
|
button_activate: Activar
|
||||||
button_sort: Ordernar
|
button_sort: Ordenar
|
||||||
button_log_time: Tempo de trabalho
|
button_log_time: Tempo de trabalho
|
||||||
button_rollback: Voltar para esta versão
|
button_rollback: Voltar para esta versão
|
||||||
button_watch: Observar
|
button_watch: Observar
|
||||||
@@ -588,7 +588,7 @@ text_tip_task_begin_end_day: tarefa a começar e acabar neste dia
|
|||||||
text_project_identifier_info: 'Apenas são permitidos letras minúsculas (a-z), números e hífens.<br />Uma vez guardado, o identificador não poderá ser alterado.'
|
text_project_identifier_info: 'Apenas são permitidos letras minúsculas (a-z), números e hífens.<br />Uma vez guardado, o identificador não poderá ser alterado.'
|
||||||
text_caracters_maximum: máximo %d caracteres.
|
text_caracters_maximum: máximo %d caracteres.
|
||||||
text_caracters_minimum: Deve ter pelo menos %d caracteres.
|
text_caracters_minimum: Deve ter pelo menos %d caracteres.
|
||||||
text_length_between: Deve ter entre %d and %d caracteres.
|
text_length_between: Deve ter entre %d e %d caracteres.
|
||||||
text_tracker_no_workflow: Sem workflow definido para este tipo de tarefa.
|
text_tracker_no_workflow: Sem workflow definido para este tipo de tarefa.
|
||||||
text_unallowed_characters: Caracteres não permitidos
|
text_unallowed_characters: Caracteres não permitidos
|
||||||
text_comma_separated: Permitidos múltiplos valores (separados por vírgula).
|
text_comma_separated: Permitidos múltiplos valores (separados por vírgula).
|
||||||
@@ -641,58 +641,60 @@ default_activity_development: Desenvolvimento
|
|||||||
|
|
||||||
enumeration_issue_priorities: Prioridade de tarefas
|
enumeration_issue_priorities: Prioridade de tarefas
|
||||||
enumeration_doc_categories: Categorias de documentos
|
enumeration_doc_categories: Categorias de documentos
|
||||||
enumeration_activities: Actividades (Contagem de tempo)
|
enumeration_activities: Actividades (Registo de tempo)
|
||||||
setting_plain_text_mail: plain text only (no HTML)
|
setting_plain_text_mail: Apenas texto simples (sem HTML)
|
||||||
permission_view_files: View files
|
permission_view_files: Ver ficheiros
|
||||||
permission_edit_issues: Edit issues
|
permission_edit_issues: Editar tarefas
|
||||||
permission_edit_own_time_entries: Edit own time logs
|
permission_edit_own_time_entries: Editar horas pessoais
|
||||||
permission_manage_public_queries: Manage public queries
|
permission_manage_public_queries: Gerir queries públicas
|
||||||
permission_add_issues: Add issues
|
permission_add_issues: Adicionar tarefas
|
||||||
permission_log_time: Log spent time
|
permission_log_time: Registar tempo gasto
|
||||||
permission_view_changesets: View changesets
|
permission_view_changesets: Ver changesets
|
||||||
permission_view_time_entries: View spent time
|
permission_view_time_entries: Ver tempo gasto
|
||||||
permission_manage_versions: Manage versions
|
permission_manage_versions: Gerir versões
|
||||||
permission_manage_wiki: Manage wiki
|
permission_manage_wiki: Gerir wiki
|
||||||
permission_manage_categories: Manage issue categories
|
permission_manage_categories: Gerir categorias de tarefas
|
||||||
permission_protect_wiki_pages: Protect wiki pages
|
permission_protect_wiki_pages: Proteger páginas de wiki
|
||||||
permission_comment_news: Comment news
|
permission_comment_news: Comentar notícias
|
||||||
permission_delete_messages: Delete messages
|
permission_delete_messages: Apagar mensagens
|
||||||
permission_select_project_modules: Select project modules
|
permission_select_project_modules: Seleccionar módulos do projecto
|
||||||
permission_manage_documents: Manage documents
|
permission_manage_documents: Gerir documentos
|
||||||
permission_edit_wiki_pages: Edit wiki pages
|
permission_edit_wiki_pages: Editar páginas de wiki
|
||||||
permission_add_issue_watchers: Add watchers
|
permission_add_issue_watchers: Adicionar observadores
|
||||||
permission_view_gantt: View gantt chart
|
permission_view_gantt: ver diagrama de Gantt
|
||||||
permission_move_issues: Move issues
|
permission_move_issues: Mover tarefas
|
||||||
permission_manage_issue_relations: Manage issue relations
|
permission_manage_issue_relations: Gerir relações de tarefas
|
||||||
permission_delete_wiki_pages: Delete wiki pages
|
permission_delete_wiki_pages: Apagar páginas de wiki
|
||||||
permission_manage_boards: Manage boards
|
permission_manage_boards: Gerir forums
|
||||||
permission_delete_wiki_pages_attachments: Delete attachments
|
permission_delete_wiki_pages_attachments: Apagar anexos
|
||||||
permission_view_wiki_edits: View wiki history
|
permission_view_wiki_edits: Ver histórico da wiki
|
||||||
permission_add_messages: Post messages
|
permission_add_messages: Submeter mensagens
|
||||||
permission_view_messages: View messages
|
permission_view_messages: Ver mensagens
|
||||||
permission_manage_files: Manage files
|
permission_manage_files: Gerir ficheiros
|
||||||
permission_edit_issue_notes: Edit notes
|
permission_edit_issue_notes: Editar notas de tarefas
|
||||||
permission_manage_news: Manage news
|
permission_manage_news: Gerir notícias
|
||||||
permission_view_calendar: View calendrier
|
permission_view_calendar: Ver calendário
|
||||||
permission_manage_members: Manage members
|
permission_manage_members: Gerir membros
|
||||||
permission_edit_messages: Edit messages
|
permission_edit_messages: Editar mensagens
|
||||||
permission_delete_issues: Delete issues
|
permission_delete_issues: Apagar tarefas
|
||||||
permission_view_issue_watchers: View watchers list
|
permission_view_issue_watchers: Ver lista de observadores
|
||||||
permission_manage_repository: Manage repository
|
permission_manage_repository: Gerir repositório
|
||||||
permission_commit_access: Commit access
|
permission_commit_access: Acesso a submissão
|
||||||
permission_browse_repository: Browse repository
|
permission_browse_repository: Navegar em repositório
|
||||||
permission_view_documents: View documents
|
permission_view_documents: Ver documentos
|
||||||
permission_edit_project: Edit project
|
permission_edit_project: Editar projecto
|
||||||
permission_add_issue_notes: Add notes
|
permission_add_issue_notes: Adicionar notas a tarefas
|
||||||
permission_save_queries: Save queries
|
permission_save_queries: Guardar queries
|
||||||
permission_view_wiki_pages: View wiki
|
permission_view_wiki_pages: Ver wiki
|
||||||
permission_rename_wiki_pages: Rename wiki pages
|
permission_rename_wiki_pages: Renomear páginas de wiki
|
||||||
permission_edit_time_entries: Edit time logs
|
permission_edit_time_entries: Editar entradas de tempo
|
||||||
permission_edit_own_issue_notes: Edit own notes
|
permission_edit_own_issue_notes: Editar as prórpias notas
|
||||||
setting_gravatar_enabled: Use Gravatar user icons
|
setting_gravatar_enabled: Utilizar icons Gravatar
|
||||||
label_example: Example
|
label_example: Exemplo
|
||||||
text_repository_usernames_mapping: "Select ou 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_repository_usernames_mapping: "Seleccionar ou actualizar o utilizador de Redmine mapeado a cada nome de utilizador encontrado no repositório.\nUtilizadores com o mesmo nome de utilizador ou email no Redmine e no repositório são mapeados automaticamente."
|
||||||
permission_edit_own_messages: Edit own messages
|
permission_edit_own_messages: Editar as próprias mensagens
|
||||||
permission_delete_own_messages: Delete own messages
|
permission_delete_own_messages: Apagar as próprias mensagens
|
||||||
label_user_activity: "%s's activity"
|
label_user_activity: "Actividade de %s"
|
||||||
label_updated_time_by: Updated by %s %s ago
|
label_updated_time_by: Actualizado por %s há %s
|
||||||
|
text_diff_truncated: '... Este diff foi truncado porque excede o tamanho máximo que pode ser mostrado.'
|
||||||
|
setting_diff_max_lines_displayed: Número máximo de linhas de diff mostradas
|
||||||
|
|||||||
@@ -694,3 +694,5 @@ permission_edit_own_messages: Edit own messages
|
|||||||
permission_delete_own_messages: Delete own messages
|
permission_delete_own_messages: Delete own messages
|
||||||
label_user_activity: "%s's activity"
|
label_user_activity: "%s's activity"
|
||||||
label_updated_time_by: Updated by %s %s ago
|
label_updated_time_by: Updated by %s %s ago
|
||||||
|
text_diff_truncated: '... This diff was truncated because it exceeds the maximum size that can be displayed.'
|
||||||
|
setting_diff_max_lines_displayed: Max number of diff lines displayed
|
||||||
|
|||||||
+4
-2
@@ -518,7 +518,8 @@ label_total: Всего
|
|||||||
label_tracker_new: Новый трекер
|
label_tracker_new: Новый трекер
|
||||||
label_tracker_plural: Трекеры
|
label_tracker_plural: Трекеры
|
||||||
label_tracker: Трекер
|
label_tracker: Трекер
|
||||||
label_updated_time: Обновлен %s назад
|
label_updated_time: Обновлено %s назад
|
||||||
|
label_updated_time_by: Обновлено %s %s назад
|
||||||
label_used_by: Используется
|
label_used_by: Используется
|
||||||
label_user_activity: "Активность пользователя %s"
|
label_user_activity: "Активность пользователя %s"
|
||||||
label_user_mail_no_self_notified: "Не извещать об изменениях, которые я сделал сам"
|
label_user_mail_no_self_notified: "Не извещать об изменениях, которые я сделал сам"
|
||||||
@@ -652,6 +653,7 @@ setting_cross_project_issue_relations: Разрешить пересечение
|
|||||||
setting_date_format: Формат даты
|
setting_date_format: Формат даты
|
||||||
setting_default_language: Язык по умолчанию
|
setting_default_language: Язык по умолчанию
|
||||||
setting_default_projects_public: Новые проекты являются общедоступными
|
setting_default_projects_public: Новые проекты являются общедоступными
|
||||||
|
setting_diff_max_lines_displayed: Максимальное число строк для diff
|
||||||
setting_display_subprojects_issues: Отображение подпроектов по умолчанию
|
setting_display_subprojects_issues: Отображение подпроектов по умолчанию
|
||||||
setting_emails_footer: Подстрочные примечания Email
|
setting_emails_footer: Подстрочные примечания Email
|
||||||
setting_enabled_scm: Разрешенные SCM
|
setting_enabled_scm: Разрешенные SCM
|
||||||
@@ -689,6 +691,7 @@ text_comma_separated: Допустимы несколько значений (ч
|
|||||||
text_default_administrator_account_changed: Учетная запись администратора по умолчанию изменена
|
text_default_administrator_account_changed: Учетная запись администратора по умолчанию изменена
|
||||||
text_destroy_time_entries_question: Вы собираетесь удалить %.02f часа(ов) прикрепленных за этой задачей.
|
text_destroy_time_entries_question: Вы собираетесь удалить %.02f часа(ов) прикрепленных за этой задачей.
|
||||||
text_destroy_time_entries: Удалить зарегистрированное время
|
text_destroy_time_entries: Удалить зарегистрированное время
|
||||||
|
text_diff_truncated: '... Этот diff ограничен, так как превышает максимальный отображаемый размер.'
|
||||||
text_email_delivery_not_configured: "Параметры работы с почтовым сервером не настроены и функция уведомления по email не активна.\nНастроить параметры для Вашего SMTP-сервера Вы можете в файле config/email.yml. Для применения изменений перезапустите приложение."
|
text_email_delivery_not_configured: "Параметры работы с почтовым сервером не настроены и функция уведомления по email не активна.\nНастроить параметры для Вашего SMTP-сервера Вы можете в файле config/email.yml. Для применения изменений перезапустите приложение."
|
||||||
text_enumeration_category_reassign_to: 'Назначить им следующее значение:'
|
text_enumeration_category_reassign_to: 'Назначить им следующее значение:'
|
||||||
text_enumeration_destroy_question: '%d объект(а,ов) связаны с этим значением.'
|
text_enumeration_destroy_question: '%d объект(а,ов) связаны с этим значением.'
|
||||||
@@ -727,4 +730,3 @@ text_user_wrote: '%s написал(а):'
|
|||||||
text_wiki_destroy_confirmation: Вы уверены, что хотите удалить данную Wiki и все ее содержимое?
|
text_wiki_destroy_confirmation: Вы уверены, что хотите удалить данную Wiki и все ее содержимое?
|
||||||
text_workflow_edit: Выберите роль и трекер для редактирования последовательности состояний
|
text_workflow_edit: Выберите роль и трекер для редактирования последовательности состояний
|
||||||
|
|
||||||
label_updated_time_by: Updated by %s %s ago
|
|
||||||
|
|||||||
@@ -700,3 +700,5 @@ permission_delete_own_messages: Delete own messages
|
|||||||
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_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."
|
||||||
label_user_activity: "%s's activity"
|
label_user_activity: "%s's activity"
|
||||||
label_updated_time_by: Updated by %s %s ago
|
label_updated_time_by: Updated by %s %s ago
|
||||||
|
text_diff_truncated: '... This diff was truncated because it exceeds the maximum size that can be displayed.'
|
||||||
|
setting_diff_max_lines_displayed: Max number of diff lines displayed
|
||||||
|
|||||||
@@ -695,3 +695,5 @@ permission_delete_own_messages: Delete own messages
|
|||||||
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_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."
|
||||||
label_user_activity: "%s's activity"
|
label_user_activity: "%s's activity"
|
||||||
label_updated_time_by: Updated by %s %s ago
|
label_updated_time_by: Updated by %s %s ago
|
||||||
|
text_diff_truncated: '... This diff was truncated because it exceeds the maximum size that can be displayed.'
|
||||||
|
setting_diff_max_lines_displayed: Max number of diff lines displayed
|
||||||
|
|||||||
+389
-387
File diff suppressed because it is too large
Load Diff
@@ -697,3 +697,5 @@ permission_edit_own_messages: Edit own messages
|
|||||||
permission_delete_own_messages: Delete own messages
|
permission_delete_own_messages: Delete own messages
|
||||||
label_user_activity: "%s's activity"
|
label_user_activity: "%s's activity"
|
||||||
label_updated_time_by: Updated by %s %s ago
|
label_updated_time_by: Updated by %s %s ago
|
||||||
|
text_diff_truncated: '... This diff was truncated because it exceeds the maximum size that can be displayed.'
|
||||||
|
setting_diff_max_lines_displayed: Max number of diff lines displayed
|
||||||
|
|||||||
@@ -695,3 +695,5 @@ permission_edit_own_messages: Edit own messages
|
|||||||
permission_delete_own_messages: Delete own messages
|
permission_delete_own_messages: Delete own messages
|
||||||
label_user_activity: "%s's activity"
|
label_user_activity: "%s's activity"
|
||||||
label_updated_time_by: Updated by %s %s ago
|
label_updated_time_by: Updated by %s %s ago
|
||||||
|
text_diff_truncated: '... This diff was truncated because it exceeds the maximum size that can be displayed.'
|
||||||
|
setting_diff_max_lines_displayed: Max number of diff lines displayed
|
||||||
|
|||||||
@@ -696,3 +696,5 @@ permission_edit_own_messages: Edit own messages
|
|||||||
permission_delete_own_messages: Delete own messages
|
permission_delete_own_messages: Delete own messages
|
||||||
label_user_activity: "%s's activity"
|
label_user_activity: "%s's activity"
|
||||||
label_updated_time_by: Updated by %s %s ago
|
label_updated_time_by: Updated by %s %s ago
|
||||||
|
text_diff_truncated: '... This diff was truncated because it exceeds the maximum size that can be displayed.'
|
||||||
|
setting_diff_max_lines_displayed: Max number of diff lines displayed
|
||||||
|
|||||||
@@ -697,3 +697,5 @@ text_repository_usernames_mapping: "Chọn hoặc cập nhật ánh xạ ngườ
|
|||||||
permission_delete_own_messages: Delete own messages
|
permission_delete_own_messages: Delete own messages
|
||||||
label_user_activity: "%s's activity"
|
label_user_activity: "%s's activity"
|
||||||
label_updated_time_by: Updated by %s %s ago
|
label_updated_time_by: Updated by %s %s ago
|
||||||
|
text_diff_truncated: '... This diff was truncated because it exceeds the maximum size that can be displayed.'
|
||||||
|
setting_diff_max_lines_displayed: Max number of diff lines displayed
|
||||||
|
|||||||
+3
-1
@@ -223,6 +223,7 @@ setting_mail_handler_api_enabled: 啟用處理傳入電子郵件的服務
|
|||||||
setting_mail_handler_api_key: API 金鑰
|
setting_mail_handler_api_key: API 金鑰
|
||||||
setting_sequential_project_identifiers: 循序產生專案識別碼
|
setting_sequential_project_identifiers: 循序產生專案識別碼
|
||||||
setting_gravatar_enabled: 啟用 Gravatar 全球認證大頭像
|
setting_gravatar_enabled: 啟用 Gravatar 全球認證大頭像
|
||||||
|
setting_diff_max_lines_displayed: 差異顯示行數之最大值
|
||||||
|
|
||||||
permission_edit_project: 編輯專案
|
permission_edit_project: 編輯專案
|
||||||
permission_select_project_modules: 選擇專案模組
|
permission_select_project_modules: 選擇專案模組
|
||||||
@@ -556,7 +557,7 @@ label_theme: 畫面主題
|
|||||||
label_default: 預設
|
label_default: 預設
|
||||||
label_search_titles_only: 僅搜尋標題
|
label_search_titles_only: 僅搜尋標題
|
||||||
label_user_mail_option_all: "提醒與我的專案有關的所有事件"
|
label_user_mail_option_all: "提醒與我的專案有關的所有事件"
|
||||||
label_user_mail_option_selected: "只停醒我所選擇專案中的事件..."
|
label_user_mail_option_selected: "只提醒我所選擇專案中的事件..."
|
||||||
label_user_mail_option_none: "只提醒我觀察中或參與中的事件"
|
label_user_mail_option_none: "只提醒我觀察中或參與中的事件"
|
||||||
label_user_mail_no_self_notified: "不提醒我自己所做的變更"
|
label_user_mail_no_self_notified: "不提醒我自己所做的變更"
|
||||||
label_registration_activation_by_email: 透過電子郵件啟用帳戶
|
label_registration_activation_by_email: 透過電子郵件啟用帳戶
|
||||||
@@ -670,6 +671,7 @@ text_enumeration_destroy_question: '目前有 %d 個物件使用此列舉值。'
|
|||||||
text_enumeration_category_reassign_to: '重新設定其列舉值為:'
|
text_enumeration_category_reassign_to: '重新設定其列舉值為:'
|
||||||
text_email_delivery_not_configured: "您尚未設定電子郵件傳送方式,因此提醒選項已被停用。\n請在 config/email.yml 中設定 SMTP 之後,重新啟動 Redmine,以啟用電子郵件提醒選項。"
|
text_email_delivery_not_configured: "您尚未設定電子郵件傳送方式,因此提醒選項已被停用。\n請在 config/email.yml 中設定 SMTP 之後,重新啟動 Redmine,以啟用電子郵件提醒選項。"
|
||||||
text_repository_usernames_mapping: "選擇或更新 Redmine 使用者與版本庫使用者之對應關係。\n版本庫中之使用者帳號或電子郵件信箱,與 Redmine 設定相同者,將自動產生對應關係。"
|
text_repository_usernames_mapping: "選擇或更新 Redmine 使用者與版本庫使用者之對應關係。\n版本庫中之使用者帳號或電子郵件信箱,與 Redmine 設定相同者,將自動產生對應關係。"
|
||||||
|
text_diff_truncated: '... 這份差異已被截短以符合顯示行數之最大值'
|
||||||
|
|
||||||
default_role_manager: 管理人員
|
default_role_manager: 管理人員
|
||||||
default_role_developper: 開發人員
|
default_role_developper: 開發人員
|
||||||
|
|||||||
+4
-2
@@ -223,6 +223,7 @@ setting_mail_handler_api_enabled: 启用用于接收邮件的服务
|
|||||||
setting_mail_handler_api_key: API key
|
setting_mail_handler_api_key: API key
|
||||||
setting_sequential_project_identifiers: 顺序产生项目标识
|
setting_sequential_project_identifiers: 顺序产生项目标识
|
||||||
setting_gravatar_enabled: 使用Gravatar用户头像
|
setting_gravatar_enabled: 使用Gravatar用户头像
|
||||||
|
setting_diff_max_lines_displayed: 查看差别页面上显示的最大行数
|
||||||
|
|
||||||
permission_edit_project: 编辑项目
|
permission_edit_project: 编辑项目
|
||||||
permission_select_project_modules: 选择项目模块
|
permission_select_project_modules: 选择项目模块
|
||||||
@@ -544,7 +545,8 @@ label_send_test_email: 发送测试邮件
|
|||||||
label_feeds_access_key_created_on: RSS 存取键是在 %s 之前建立的
|
label_feeds_access_key_created_on: RSS 存取键是在 %s 之前建立的
|
||||||
label_module_plural: 模块
|
label_module_plural: 模块
|
||||||
label_added_time_by: 由 %s 在 %s 之前添加
|
label_added_time_by: 由 %s 在 %s 之前添加
|
||||||
label_updated_time: 更新于 %s 前
|
label_updated_time: 更新于 %s 之前
|
||||||
|
label_updated_time_by: 由 %s 更新于 %s 之前
|
||||||
label_jump_to_a_project: 选择一个项目...
|
label_jump_to_a_project: 选择一个项目...
|
||||||
label_file_plural: 文件
|
label_file_plural: 文件
|
||||||
label_changeset_plural: 变更
|
label_changeset_plural: 变更
|
||||||
@@ -669,6 +671,7 @@ text_enumeration_category_reassign_to: '将它们关联到新的枚举值:'
|
|||||||
text_enumeration_destroy_question: '%d 个对象被关联到了这个枚举值。'
|
text_enumeration_destroy_question: '%d 个对象被关联到了这个枚举值。'
|
||||||
text_email_delivery_not_configured: "邮件参数尚未配置,因此邮件通知功能已被禁用。\n请在config/email.yml中配置您的SMTP服务器信息并重新启动以使其生效。"
|
text_email_delivery_not_configured: "邮件参数尚未配置,因此邮件通知功能已被禁用。\n请在config/email.yml中配置您的SMTP服务器信息并重新启动以使其生效。"
|
||||||
text_repository_usernames_mapping: "选择或更新与版本库中的用户名对应的Redmine用户。\n版本库中与Redmine中的同名用户将被自动对应。"
|
text_repository_usernames_mapping: "选择或更新与版本库中的用户名对应的Redmine用户。\n版本库中与Redmine中的同名用户将被自动对应。"
|
||||||
|
text_diff_truncated: '... 差别内容超过了可显示的最大行数并已被截断'
|
||||||
|
|
||||||
default_role_manager: 管理人员
|
default_role_manager: 管理人员
|
||||||
default_role_developper: 开发人员
|
default_role_developper: 开发人员
|
||||||
@@ -695,4 +698,3 @@ default_activity_development: 开发
|
|||||||
enumeration_issue_priorities: 问题优先级
|
enumeration_issue_priorities: 问题优先级
|
||||||
enumeration_doc_categories: 文档类别
|
enumeration_doc_categories: 文档类别
|
||||||
enumeration_activities: 活动(时间跟踪)
|
enumeration_activities: 活动(时间跟踪)
|
||||||
label_updated_time_by: Updated by %s %s ago
|
|
||||||
|
|||||||
+16
-10
@@ -382,14 +382,14 @@ class RedCloth3 < String
|
|||||||
(#{rcq})
|
(#{rcq})
|
||||||
(#{C})
|
(#{C})
|
||||||
(?::(\S+?))?
|
(?::(\S+?))?
|
||||||
([^\s\-].*?[^\s\-]|\w)
|
(\w|[^\s\-].*?[^\s\-])
|
||||||
#{rcq}
|
#{rcq}
|
||||||
(?=[[:punct:]]|\s|\)|$)/x
|
(?=[[:punct:]]|\s|\)|$)/x
|
||||||
else
|
else
|
||||||
/(#{rcq})
|
/(#{rcq})
|
||||||
(#{C})
|
(#{C})
|
||||||
(?::(\S+))?
|
(?::(\S+))?
|
||||||
([^\s\-].*?[^\s\-]|\w)
|
(\w|[^\s\-].*?[^\s\-])
|
||||||
#{rcq}/xm
|
#{rcq}/xm
|
||||||
end
|
end
|
||||||
[rc, ht, re, rtype]
|
[rc, ht, re, rtype]
|
||||||
@@ -408,7 +408,7 @@ class RedCloth3 < String
|
|||||||
# [ /"(?=[#{PUNCT_Q}]*[\s#{PUNCT_NOQ}])/, '”' ], # double closing
|
# [ /"(?=[#{PUNCT_Q}]*[\s#{PUNCT_NOQ}])/, '”' ], # double closing
|
||||||
# [ /"/, '“' ], # double opening
|
# [ /"/, '“' ], # double opening
|
||||||
# [ /\b( )?\.{3}/, '\1…' ], # ellipsis
|
# [ /\b( )?\.{3}/, '\1…' ], # ellipsis
|
||||||
[ /\b([A-Z][A-Z0-9]{2,})\b(?:[(]([^)]*)[)])/, '<acronym title="\2">\1</acronym>' ], # 3+ uppercase acronym
|
# [ /\b([A-Z][A-Z0-9]{2,})\b(?:[(]([^)]*)[)])/, '<acronym title="\2">\1</acronym>' ], # 3+ uppercase acronym
|
||||||
# [ /(^|[^"][>\s])([A-Z][A-Z0-9 ]+[A-Z0-9])([^<A-Za-z0-9]|$)/, '\1<span class="caps">\2</span>\3', :no_span_caps ], # 3+ uppercase caps
|
# [ /(^|[^"][>\s])([A-Z][A-Z0-9 ]+[A-Z0-9])([^<A-Za-z0-9]|$)/, '\1<span class="caps">\2</span>\3', :no_span_caps ], # 3+ uppercase caps
|
||||||
# [ /(\.\s)?\s?--\s?/, '\1—' ], # em dash
|
# [ /(\.\s)?\s?--\s?/, '\1—' ], # em dash
|
||||||
# [ /\s->\s/, ' → ' ], # right arrow
|
# [ /\s->\s/, ' → ' ], # right arrow
|
||||||
@@ -435,19 +435,25 @@ class RedCloth3 < String
|
|||||||
#
|
#
|
||||||
# Flexible HTML escaping
|
# Flexible HTML escaping
|
||||||
#
|
#
|
||||||
def htmlesc( str, mode )
|
def htmlesc( str, mode=:Quotes )
|
||||||
|
if str
|
||||||
str.gsub!( '&', '&' )
|
str.gsub!( '&', '&' )
|
||||||
str.gsub!( '"', '"' ) if mode != :NoQuotes
|
str.gsub!( '"', '"' ) if mode != :NoQuotes
|
||||||
str.gsub!( "'", ''' ) if mode == :Quotes
|
str.gsub!( "'", ''' ) if mode == :Quotes
|
||||||
str.gsub!( '<', '<')
|
str.gsub!( '<', '<')
|
||||||
str.gsub!( '>', '>')
|
str.gsub!( '>', '>')
|
||||||
|
end
|
||||||
|
str
|
||||||
end
|
end
|
||||||
|
|
||||||
# Search and replace for Textile glyphs (quotes, dashes, other symbols)
|
# Search and replace for Textile glyphs (quotes, dashes, other symbols)
|
||||||
def pgl( text )
|
def pgl( text )
|
||||||
GLYPHS.each do |re, resub, tog|
|
#GLYPHS.each do |re, resub, tog|
|
||||||
next if tog and method( tog ).call
|
# next if tog and method( tog ).call
|
||||||
text.gsub! re, resub
|
# text.gsub! re, resub
|
||||||
|
#end
|
||||||
|
text.gsub!(/\b([A-Z][A-Z0-9]{2,})\b(?:[(]([^)]*)[)])/) do |m|
|
||||||
|
"<acronym title=\"#{htmlesc $2}\">#{$1}</acronym>"
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
@@ -464,8 +470,7 @@ class RedCloth3 < String
|
|||||||
style << "vertical-align:#{ v_align( $& ) };" if text =~ A_VLGN
|
style << "vertical-align:#{ v_align( $& ) };" if text =~ A_VLGN
|
||||||
end
|
end
|
||||||
|
|
||||||
style << "#{ $1 };" if not filter_styles and
|
style << "#{ htmlesc $1 };" if text.sub!( /\{([^}]*)\}/, '' ) && !filter_styles
|
||||||
text.sub!( /\{([^}]*)\}/, '' )
|
|
||||||
|
|
||||||
lang = $1 if
|
lang = $1 if
|
||||||
text.sub!( /\[([^)]+?)\]/, '' )
|
text.sub!( /\[([^)]+?)\]/, '' )
|
||||||
@@ -807,7 +812,7 @@ class RedCloth3 < String
|
|||||||
end
|
end
|
||||||
atts = pba( atts )
|
atts = pba( atts )
|
||||||
atts = " href=\"#{ url }#{ slash }\"#{ atts }"
|
atts = " href=\"#{ url }#{ slash }\"#{ atts }"
|
||||||
atts << " title=\"#{ title }\"" if title
|
atts << " title=\"#{ htmlesc title }\"" if title
|
||||||
atts = shelve( atts ) if atts
|
atts = shelve( atts ) if atts
|
||||||
|
|
||||||
external = (url =~ /^https?:\/\//) ? ' class="external"' : ''
|
external = (url =~ /^https?:\/\//) ? ' class="external"' : ''
|
||||||
@@ -914,6 +919,7 @@ class RedCloth3 < String
|
|||||||
def inline_textile_image( text )
|
def inline_textile_image( text )
|
||||||
text.gsub!( IMAGE_RE ) do |m|
|
text.gsub!( IMAGE_RE ) do |m|
|
||||||
stln,algn,atts,url,title,href,href_a1,href_a2 = $~[1..8]
|
stln,algn,atts,url,title,href,href_a1,href_a2 = $~[1..8]
|
||||||
|
htmlesc title
|
||||||
atts = pba( atts )
|
atts = pba( atts )
|
||||||
atts = " src=\"#{ url }\"#{ atts }"
|
atts = " src=\"#{ url }\"#{ atts }"
|
||||||
atts << " title=\"#{ title }\"" if title
|
atts << " title=\"#{ title }\"" if title
|
||||||
|
|||||||
@@ -63,7 +63,7 @@ module Redmine
|
|||||||
logger.debug "<cvs> entries '#{path}' with identifier '#{identifier}'"
|
logger.debug "<cvs> entries '#{path}' with identifier '#{identifier}'"
|
||||||
path_with_project="#{url}#{with_leading_slash(path)}"
|
path_with_project="#{url}#{with_leading_slash(path)}"
|
||||||
entries = Entries.new
|
entries = Entries.new
|
||||||
cmd = "#{CVS_BIN} -d #{root_url} rls -ed"
|
cmd = "#{CVS_BIN} -d #{root_url} rls -e"
|
||||||
cmd << " -D \"#{time_to_cvstime(identifier)}\"" if identifier
|
cmd << " -D \"#{time_to_cvstime(identifier)}\"" if identifier
|
||||||
cmd << " #{shell_quote path_with_project}"
|
cmd << " #{shell_quote path_with_project}"
|
||||||
shellout(cmd) do |io|
|
shellout(cmd) do |io|
|
||||||
|
|||||||
@@ -18,18 +18,30 @@
|
|||||||
module Redmine
|
module Redmine
|
||||||
# Class used to parse unified diffs
|
# Class used to parse unified diffs
|
||||||
class UnifiedDiff < Array
|
class UnifiedDiff < Array
|
||||||
def initialize(diff, type="inline")
|
def initialize(diff, options={})
|
||||||
diff_table = DiffTable.new type
|
options.assert_valid_keys(:type, :max_lines)
|
||||||
|
diff_type = options[:type] || 'inline'
|
||||||
|
|
||||||
|
lines = 0
|
||||||
|
@truncated = false
|
||||||
|
diff_table = DiffTable.new(diff_type)
|
||||||
diff.each do |line|
|
diff.each do |line|
|
||||||
if line =~ /^(---|\+\+\+) (.*)$/
|
if line =~ /^(---|\+\+\+) (.*)$/
|
||||||
self << diff_table if diff_table.length > 1
|
self << diff_table if diff_table.length > 1
|
||||||
diff_table = DiffTable.new type
|
diff_table = DiffTable.new(diff_type)
|
||||||
|
end
|
||||||
|
diff_table.add_line line
|
||||||
|
lines += 1
|
||||||
|
if options[:max_lines] && lines > options[:max_lines]
|
||||||
|
@truncated = true
|
||||||
|
break
|
||||||
end
|
end
|
||||||
a = diff_table.add_line line
|
|
||||||
end
|
end
|
||||||
self << diff_table unless diff_table.empty?
|
self << diff_table unless diff_table.empty?
|
||||||
self
|
self
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def truncated?; @truncated; end
|
||||||
end
|
end
|
||||||
|
|
||||||
# Class that represents a file diff
|
# Class that represents a file diff
|
||||||
|
|||||||
@@ -3,14 +3,14 @@ require 'rexml/document'
|
|||||||
module Redmine
|
module Redmine
|
||||||
module VERSION #:nodoc:
|
module VERSION #:nodoc:
|
||||||
MAJOR = 0
|
MAJOR = 0
|
||||||
MINOR = 7
|
MINOR = 8
|
||||||
TINY = 3
|
TINY = 0
|
||||||
|
|
||||||
# Branch values:
|
# Branch values:
|
||||||
# * official release: nil
|
# * official release: nil
|
||||||
# * stable branch: stable
|
# * stable branch: stable
|
||||||
# * trunk: devel
|
# * trunk: devel
|
||||||
BRANCH = 'devel'
|
BRANCH = 'stable'
|
||||||
|
|
||||||
def self.revision
|
def self.revision
|
||||||
revision = nil
|
revision = nil
|
||||||
|
|||||||
@@ -30,6 +30,7 @@ module Redmine
|
|||||||
super
|
super
|
||||||
self.hard_breaks=true
|
self.hard_breaks=true
|
||||||
self.no_span_caps=true
|
self.no_span_caps=true
|
||||||
|
self.filter_styles=true
|
||||||
end
|
end
|
||||||
|
|
||||||
def to_html(*rules, &block)
|
def to_html(*rules, &block)
|
||||||
|
|||||||
@@ -79,23 +79,23 @@ Calendar._SMN = new Array
|
|||||||
|
|
||||||
// tooltips
|
// tooltips
|
||||||
Calendar._TT = {};
|
Calendar._TT = {};
|
||||||
Calendar._TT["INFO"] = "About the calendar";
|
Calendar._TT["INFO"] = "이 달력은 ... & 도움말";
|
||||||
|
|
||||||
Calendar._TT["ABOUT"] =
|
Calendar._TT["ABOUT"] =
|
||||||
"DHTML Date/Time Selector\n" +
|
"DHTML 날짜/시간 선택기\n" +
|
||||||
"(c) dynarch.com 2002-2005 / Author: Mihai Bazon\n" + // don't translate this this ;-)
|
"(c) dynarch.com 2002-2005 / Author: Mihai Bazon\n" + // don't translate this this ;-)
|
||||||
"For latest version visit: http://www.dynarch.com/projects/calendar/\n" +
|
"최신 버전을 구하려면 여기로: http://www.dynarch.com/projects/calendar/\n" +
|
||||||
"Distributed under GNU LGPL. See http://gnu.org/licenses/lgpl.html for details." +
|
"배포라이센스:GNU LGPL. 참조:http://gnu.org/licenses/lgpl.html for details." +
|
||||||
"\n\n" +
|
"\n\n" +
|
||||||
"Date selection:\n" +
|
"날짜 선택:\n" +
|
||||||
"- Use the \xab, \xbb buttons to select year\n" +
|
"- 해를 선택하려면 \xab, \xbb 버튼을 사용하세요.\n" +
|
||||||
"- Use the " + String.fromCharCode(0x2039) + ", " + String.fromCharCode(0x203a) + " buttons to select month\n" +
|
"- 달을 선택하려면 " + String.fromCharCode(0x2039) + ", " + String.fromCharCode(0x203a) + " 버튼을 사용하세요.\n" +
|
||||||
"- Hold mouse button on any of the above buttons for faster selection.";
|
"- 좀 더 빠르게 선택하려면 위의 버튼을 꾹 눌러주세요.";
|
||||||
Calendar._TT["ABOUT_TIME"] = "\n\n" +
|
Calendar._TT["ABOUT_TIME"] = "\n\n" +
|
||||||
"Time selection:\n" +
|
"시간 선택:\n" +
|
||||||
"- Click on any of the time parts to increase it\n" +
|
"- 시, 분을 더하려면 클릭하세요.\n" +
|
||||||
"- or Shift-click to decrease it\n" +
|
"- 시, 분을 빼려면 쉬프트 누르고 클릭하세요.\n" +
|
||||||
"- or click and drag for faster selection.";
|
"- 좀 더 빠르게 선택하려면 클릭하고 드래그하세요.";
|
||||||
|
|
||||||
Calendar._TT["PREV_YEAR"] = "이전 해";
|
Calendar._TT["PREV_YEAR"] = "이전 해";
|
||||||
Calendar._TT["PREV_MONTH"] = "이전 달";
|
Calendar._TT["PREV_MONTH"] = "이전 달";
|
||||||
@@ -117,11 +117,11 @@ Calendar._TT["WEEKEND"] = "0,6";
|
|||||||
|
|
||||||
Calendar._TT["CLOSE"] = "닫기";
|
Calendar._TT["CLOSE"] = "닫기";
|
||||||
Calendar._TT["TODAY"] = "오늘";
|
Calendar._TT["TODAY"] = "오늘";
|
||||||
Calendar._TT["TIME_PART"] = "(Shift-)클릭 or drag to change value";
|
Calendar._TT["TIME_PART"] = "클릭(+),쉬프트+클릭(-),드래그";
|
||||||
|
|
||||||
// date formats
|
// date formats
|
||||||
Calendar._TT["DEF_DATE_FORMAT"] = "%Y-%m-%d";
|
Calendar._TT["DEF_DATE_FORMAT"] = "%Y-%m-%d";
|
||||||
Calendar._TT["TT_DATE_FORMAT"] = "%a, %b %e";
|
Calendar._TT["TT_DATE_FORMAT"] = "%a, %b %e";
|
||||||
|
|
||||||
Calendar._TT["WK"] = "주";
|
Calendar._TT["WK"] = "주";
|
||||||
Calendar._TT["TIME"] = "Time:";
|
Calendar._TT["TIME"] = "시간:";
|
||||||
|
|||||||
@@ -48,7 +48,7 @@ ContextMenu.prototype = {
|
|||||||
if (window.opera && e.altKey) { return; }
|
if (window.opera && e.altKey) { return; }
|
||||||
if (Event.isLeftClick(e) || (navigator.appVersion.match(/\bMSIE\b/))) {
|
if (Event.isLeftClick(e) || (navigator.appVersion.match(/\bMSIE\b/))) {
|
||||||
var tr = Event.findElement(e, 'tr');
|
var tr = Event.findElement(e, 'tr');
|
||||||
if (tr!=document && tr.hasClassName('hascontextmenu')) {
|
if (tr!=null && tr!=document && tr.hasClassName('hascontextmenu')) {
|
||||||
// a row was clicked, check if the click was on checkbox
|
// a row was clicked, check if the click was on checkbox
|
||||||
var box = Event.findElement(e, 'input');
|
var box = Event.findElement(e, 'input');
|
||||||
if (box!=document && box!=undefined) {
|
if (box!=document && box!=undefined) {
|
||||||
|
|||||||
@@ -1,16 +1,16 @@
|
|||||||
jsToolBar.strings = {};
|
jsToolBar.strings = {};
|
||||||
jsToolBar.strings['Strong'] = 'Strong';
|
jsToolBar.strings['Strong'] = '굵게';
|
||||||
jsToolBar.strings['Italic'] = 'Italic';
|
jsToolBar.strings['Italic'] = '기울임';
|
||||||
jsToolBar.strings['Underline'] = 'Underline';
|
jsToolBar.strings['Underline'] = '밑줄';
|
||||||
jsToolBar.strings['Deleted'] = 'Deleted';
|
jsToolBar.strings['Deleted'] = '취소선';
|
||||||
jsToolBar.strings['Code'] = 'Inline Code';
|
jsToolBar.strings['Code'] = '코드';
|
||||||
jsToolBar.strings['Heading 1'] = 'Heading 1';
|
jsToolBar.strings['Heading 1'] = '제목 1';
|
||||||
jsToolBar.strings['Heading 2'] = 'Heading 2';
|
jsToolBar.strings['Heading 2'] = '제목 2';
|
||||||
jsToolBar.strings['Heading 3'] = 'Heading 3';
|
jsToolBar.strings['Heading 3'] = '제목 3';
|
||||||
jsToolBar.strings['Unordered list'] = 'Unordered list';
|
jsToolBar.strings['Unordered list'] = '글머리 기호';
|
||||||
jsToolBar.strings['Ordered list'] = 'Ordered list';
|
jsToolBar.strings['Ordered list'] = '번호 매기기';
|
||||||
jsToolBar.strings['Quote'] = 'Quote';
|
jsToolBar.strings['Quote'] = '인용';
|
||||||
jsToolBar.strings['Unquote'] = 'Remove Quote';
|
jsToolBar.strings['Unquote'] = '인용 취소';
|
||||||
jsToolBar.strings['Preformatted text'] = 'Preformatted text';
|
jsToolBar.strings['Preformatted text'] = '있는 그대로 표현 (Preformatted text)';
|
||||||
jsToolBar.strings['Wiki link'] = 'Link to a Wiki page';
|
jsToolBar.strings['Wiki link'] = 'Wiki 페이지에 연결';
|
||||||
jsToolBar.strings['Image'] = 'Image';
|
jsToolBar.strings['Image'] = '그림';
|
||||||
|
|||||||
@@ -55,9 +55,10 @@ h4, .wiki h3 {font-size: 13px;padding: 2px 10px 1px 0px;margin-bottom: 5px; bord
|
|||||||
#sidebar hr{ width: 100%; margin: 0 auto; height: 1px; background: #ccc; border: 0; }
|
#sidebar hr{ width: 100%; margin: 0 auto; height: 1px; background: #ccc; border: 0; }
|
||||||
* html #sidebar hr{ width: 95%; position: relative; left: -6px; color: #ccc; }
|
* html #sidebar hr{ width: 95%; position: relative; left: -6px; color: #ccc; }
|
||||||
|
|
||||||
#content { width: 80%; background-color: #fff; margin: 0px; border-right: 1px solid #ddd; padding: 6px 10px 10px 10px; z-index: 10; height:600px; min-height: 600px;}
|
#content { width: 80%; background-color: #fff; margin: 0px; border-right: 1px solid #ddd; padding: 6px 10px 10px 10px; z-index: 10; }
|
||||||
* html #content{ width: 80%; padding-left: 0; margin-top: 0px; padding: 6px 10px 10px 10px;}
|
* html #content{ width: 80%; padding-left: 0; margin-top: 0px; padding: 6px 10px 10px 10px;}
|
||||||
html>body #content { height: auto; min-height: 600px; overflow: auto; }
|
html>body #content { min-height: 600px; }
|
||||||
|
* html body #content { height: 600px; } /* IE */
|
||||||
|
|
||||||
#main.nosidebar #sidebar{ display: none; }
|
#main.nosidebar #sidebar{ display: none; }
|
||||||
#main.nosidebar #content{ width: auto; border-right: 0; }
|
#main.nosidebar #content{ width: auto; border-right: 0; }
|
||||||
|
|||||||
Vendored
+79
@@ -0,0 +1,79 @@
|
|||||||
|
Index: app/views/settings/_general.rhtml
|
||||||
|
===================================================================
|
||||||
|
--- app/views/settings/_general.rhtml (revision 2094)
|
||||||
|
+++ app/views/settings/_general.rhtml (working copy)
|
||||||
|
@@ -48,6 +48,9 @@
|
||||||
|
<p><label><%= l(:setting_feeds_limit) %></label>
|
||||||
|
<%= text_field_tag 'settings[feeds_limit]', Setting.feeds_limit, :size => 6 %></p>
|
||||||
|
|
||||||
|
+<p><label><%= l(:setting_diff_max_lines_displayed) %></label>
|
||||||
|
+<%= text_field_tag 'settings[diff_max_lines_displayed]', Setting.diff_max_lines_displayed, :size => 6 %></p>
|
||||||
|
+
|
||||||
|
<p><label><%= l(:setting_gravatar_enabled) %></label>
|
||||||
|
<%= check_box_tag 'settings[gravatar_enabled]', 1, Setting.gravatar_enabled? %><%= hidden_field_tag 'settings[gravatar_enabled]', 0 %></p>
|
||||||
|
</div>
|
||||||
|
Index: app/views/common/_diff.rhtml
|
||||||
|
===================================================================
|
||||||
|
--- app/views/common/_diff.rhtml (revision 2111)
|
||||||
|
+++ app/views/common/_diff.rhtml (working copy)
|
||||||
|
@@ -1,4 +1,5 @@
|
||||||
|
-<% Redmine::UnifiedDiff.new(diff, :type => diff_type).each do |table_file| -%>
|
||||||
|
+<% diff = Redmine::UnifiedDiff.new(diff, :type => diff_type, :max_lines => Setting.diff_max_lines_displayed.to_i) -%>
|
||||||
|
+<% diff.each do |table_file| -%>
|
||||||
|
<div class="autoscroll">
|
||||||
|
<% if diff_type == 'sbs' -%>
|
||||||
|
<table class="filecontent CodeRay">
|
||||||
|
@@ -62,3 +63,5 @@
|
||||||
|
|
||||||
|
</div>
|
||||||
|
<% end -%>
|
||||||
|
+
|
||||||
|
+<%= l(:text_diff_truncated) if diff.truncated? %>
|
||||||
|
Index: lang/lt.yml
|
||||||
|
===================================================================
|
||||||
|
--- config/settings.yml (revision 2094)
|
||||||
|
+++ config/settings.yml (working copy)
|
||||||
|
@@ -61,6 +61,9 @@
|
||||||
|
feeds_limit:
|
||||||
|
format: int
|
||||||
|
default: 15
|
||||||
|
+diff_max_lines_displayed:
|
||||||
|
+ format: int
|
||||||
|
+ default: 1500
|
||||||
|
enabled_scm:
|
||||||
|
serialized: true
|
||||||
|
default:
|
||||||
|
Index: lib/redmine/unified_diff.rb
|
||||||
|
===================================================================
|
||||||
|
--- lib/redmine/unified_diff.rb (revision 2110)
|
||||||
|
+++ lib/redmine/unified_diff.rb (working copy)
|
||||||
|
@@ -19,8 +19,11 @@
|
||||||
|
# Class used to parse unified diffs
|
||||||
|
class UnifiedDiff < Array
|
||||||
|
def initialize(diff, options={})
|
||||||
|
+ options.assert_valid_keys(:type, :max_lines)
|
||||||
|
diff_type = options[:type] || 'inline'
|
||||||
|
|
||||||
|
+ lines = 0
|
||||||
|
+ @truncated = false
|
||||||
|
diff_table = DiffTable.new(diff_type)
|
||||||
|
diff.each do |line|
|
||||||
|
if line =~ /^(---|\+\+\+) (.*)$/
|
||||||
|
@@ -28,10 +31,17 @@
|
||||||
|
diff_table = DiffTable.new(diff_type)
|
||||||
|
end
|
||||||
|
diff_table.add_line line
|
||||||
|
+ lines += 1
|
||||||
|
+ if options[:max_lines] && lines > options[:max_lines]
|
||||||
|
+ @truncated = true
|
||||||
|
+ break
|
||||||
|
+ end
|
||||||
|
end
|
||||||
|
self << diff_table unless diff_table.empty?
|
||||||
|
self
|
||||||
|
end
|
||||||
|
+
|
||||||
|
+ def truncated?; @truncated; end
|
||||||
|
end
|
||||||
|
|
||||||
|
# Class that represents a file diff
|
||||||
+22
@@ -0,0 +1,22 @@
|
|||||||
|
x-sender: <jsmith@somenet.foo>
|
||||||
|
x-receiver: <redmine@somenet.foo>
|
||||||
|
Received: from [127.0.0.1] ([127.0.0.1]) by somenet.foo with Quick 'n Easy Mail Server SMTP (1.0.0.0);
|
||||||
|
Sun, 14 Dec 2008 16:18:06 GMT
|
||||||
|
Message-ID: <494531B9.1070709@somenet.foo>
|
||||||
|
Date: Sun, 14 Dec 2008 17:18:01 +0100
|
||||||
|
From: "John Smith" <jsmith@somenet.foo>
|
||||||
|
User-Agent: Thunderbird 2.0.0.18 (Windows/20081105)
|
||||||
|
MIME-Version: 1.0
|
||||||
|
To: redmine@somenet.foo
|
||||||
|
Subject: HTML email
|
||||||
|
Content-Type: text/html; charset=ISO-8859-1
|
||||||
|
Content-Transfer-Encoding: 7bit
|
||||||
|
|
||||||
|
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
|
||||||
|
<html>
|
||||||
|
<head>
|
||||||
|
</head>
|
||||||
|
<body bgcolor="#ffffff" text="#000000">
|
||||||
|
This is a <b>html-only</b> email.<br>
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
@@ -32,10 +32,19 @@ class DocumentsControllerTest < Test::Unit::TestCase
|
|||||||
end
|
end
|
||||||
|
|
||||||
def test_index
|
def test_index
|
||||||
|
# Sets a default category
|
||||||
|
e = Enumeration.find_by_name('Technical documentation')
|
||||||
|
e.update_attributes(:is_default => true)
|
||||||
|
|
||||||
get :index, :project_id => 'ecookbook'
|
get :index, :project_id => 'ecookbook'
|
||||||
assert_response :success
|
assert_response :success
|
||||||
assert_template 'index'
|
assert_template 'index'
|
||||||
assert_not_nil assigns(:grouped)
|
assert_not_nil assigns(:grouped)
|
||||||
|
|
||||||
|
# Default category selected in the new document form
|
||||||
|
assert_tag :select, :attributes => {:name => 'document[category_id]'},
|
||||||
|
:child => {:tag => 'option', :attributes => {:selected => 'selected'},
|
||||||
|
:content => 'Technical documentation'}
|
||||||
end
|
end
|
||||||
|
|
||||||
def test_new_with_one_attachment
|
def test_new_with_one_attachment
|
||||||
|
|||||||
@@ -137,6 +137,16 @@ class IssuesControllerTest < Test::Unit::TestCase
|
|||||||
assert_not_nil assigns(:issues)
|
assert_not_nil assigns(:issues)
|
||||||
assert_equal 'application/pdf', @response.content_type
|
assert_equal 'application/pdf', @response.content_type
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def test_index_sort
|
||||||
|
get :index, :sort_key => 'tracker'
|
||||||
|
assert_response :success
|
||||||
|
|
||||||
|
sort_params = @request.session['issuesindex_sort']
|
||||||
|
assert sort_params.is_a?(Hash)
|
||||||
|
assert_equal 'tracker', sort_params[:key]
|
||||||
|
assert_equal 'ASC', sort_params[:order]
|
||||||
|
end
|
||||||
|
|
||||||
def test_gantt
|
def test_gantt
|
||||||
get :gantt, :project_id => 1
|
get :gantt, :project_id => 1
|
||||||
|
|||||||
@@ -73,12 +73,12 @@ class RepositoriesControllerTest < Test::Unit::TestCase
|
|||||||
|
|
||||||
assert_tag :td, :content => 'dlopper',
|
assert_tag :td, :content => 'dlopper',
|
||||||
:sibling => { :tag => 'td',
|
:sibling => { :tag => 'td',
|
||||||
:child => { :tag => 'select', :attributes => { :name => 'committers[dlopper]' },
|
:child => { :tag => 'select', :attributes => { :name => %r{^committers\[\d+\]\[\]$} },
|
||||||
:child => { :tag => 'option', :content => 'Dave Lopper',
|
:child => { :tag => 'option', :content => 'Dave Lopper',
|
||||||
:attributes => { :value => '3', :selected => 'selected' }}}}
|
:attributes => { :value => '3', :selected => 'selected' }}}}
|
||||||
assert_tag :td, :content => 'foo',
|
assert_tag :td, :content => 'foo',
|
||||||
:sibling => { :tag => 'td',
|
:sibling => { :tag => 'td',
|
||||||
:child => { :tag => 'select', :attributes => { :name => 'committers[foo]' }}}
|
:child => { :tag => 'select', :attributes => { :name => %r{^committers\[\d+\]\[\]$} }}}
|
||||||
assert_no_tag :td, :content => 'foo',
|
assert_no_tag :td, :content => 'foo',
|
||||||
:sibling => { :tag => 'td',
|
:sibling => { :tag => 'td',
|
||||||
:descendant => { :tag => 'option', :attributes => { :selected => 'selected' }}}
|
:descendant => { :tag => 'option', :attributes => { :selected => 'selected' }}}
|
||||||
@@ -90,7 +90,7 @@ class RepositoriesControllerTest < Test::Unit::TestCase
|
|||||||
c = Changeset.create!(:repository => Project.find(1).repository, :committer => 'foo', :committed_on => Time.now, :revision => 100, :comments => 'Committed by foo.')
|
c = Changeset.create!(:repository => Project.find(1).repository, :committer => 'foo', :committed_on => Time.now, :revision => 100, :comments => 'Committed by foo.')
|
||||||
|
|
||||||
assert_no_difference "Changeset.count(:conditions => 'user_id = 3')" do
|
assert_no_difference "Changeset.count(:conditions => 'user_id = 3')" do
|
||||||
post :committers, :id => 1, :committers => { 'foo' => '2', 'dlopper' => '3'}
|
post :committers, :id => 1, :committers => { '0' => ['foo', '2'], '1' => ['dlopper', '3']}
|
||||||
assert_redirected_to '/repositories/committers/ecookbook'
|
assert_redirected_to '/repositories/committers/ecookbook'
|
||||||
assert_equal User.find(2), c.reload.user
|
assert_equal User.find(2), c.reload.user
|
||||||
end
|
end
|
||||||
|
|||||||
@@ -258,4 +258,9 @@ class WikiControllerTest < Test::Unit::TestCase
|
|||||||
post :destroy_attachment, :id => 1, :page => 'Page_with_an_inline_image', :attachment_id => 3
|
post :destroy_attachment, :id => 1, :page => 'Page_with_an_inline_image', :attachment_id => 3
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def test_history_of_non_existing_page_should_return_404
|
||||||
|
get :history, :id => 1, :page => 'Unknown_page'
|
||||||
|
assert_response 404
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|||||||
@@ -44,7 +44,7 @@ class AccountTest < ActionController::IntegrationTest
|
|||||||
assert_response :success
|
assert_response :success
|
||||||
assert_template "account/lost_password"
|
assert_template "account/lost_password"
|
||||||
|
|
||||||
post "account/lost_password", :mail => 'jsmith@somenet.foo'
|
post "account/lost_password", :mail => 'jSmith@somenet.foo'
|
||||||
assert_redirected_to "account/login"
|
assert_redirected_to "account/login"
|
||||||
|
|
||||||
token = Token.find(:first)
|
token = Token.find(:first)
|
||||||
|
|||||||
@@ -0,0 +1,37 @@
|
|||||||
|
# Redmine - project management software
|
||||||
|
# Copyright (C) 2006-2008 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
|
||||||
|
# as published by the Free Software Foundation; either version 2
|
||||||
|
# of the License, or (at your option) any later version.
|
||||||
|
#
|
||||||
|
# This program is distributed in the hope that it will be useful,
|
||||||
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
# GNU General Public License for more details.
|
||||||
|
#
|
||||||
|
# You should have received a copy of the GNU General Public License
|
||||||
|
# along with this program; if not, write to the Free Software
|
||||||
|
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||||
|
|
||||||
|
require File.dirname(__FILE__) + '/../test_helper'
|
||||||
|
|
||||||
|
class DocumentTest < Test::Unit::TestCase
|
||||||
|
fixtures :projects, :enumerations, :documents
|
||||||
|
|
||||||
|
def test_create
|
||||||
|
doc = Document.new(:project => Project.find(1), :title => 'New document', :category => Enumeration.find_by_name('User documentation'))
|
||||||
|
assert doc.save
|
||||||
|
end
|
||||||
|
|
||||||
|
def test_create_with_default_category
|
||||||
|
# Sets a default category
|
||||||
|
e = Enumeration.find_by_name('Technical documentation')
|
||||||
|
e.update_attributes(:is_default => true)
|
||||||
|
|
||||||
|
doc = Document.new(:project => Project.find(1), :title => 'New document')
|
||||||
|
assert_equal e, doc.category
|
||||||
|
assert doc.save
|
||||||
|
end
|
||||||
|
end
|
||||||
@@ -37,6 +37,43 @@ class EnumerationTest < Test::Unit::TestCase
|
|||||||
assert !Enumeration.find(7).in_use?
|
assert !Enumeration.find(7).in_use?
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def test_default
|
||||||
|
e = Enumeration.default('IPRI')
|
||||||
|
assert e.is_a?(Enumeration)
|
||||||
|
assert e.is_default?
|
||||||
|
assert_equal 'Normal', e.name
|
||||||
|
end
|
||||||
|
|
||||||
|
def test_create
|
||||||
|
e = Enumeration.new(:opt => 'IPRI', :name => 'Very urgent', :is_default => false)
|
||||||
|
assert e.save
|
||||||
|
assert_equal 'Normal', Enumeration.default('IPRI').name
|
||||||
|
end
|
||||||
|
|
||||||
|
def test_create_as_default
|
||||||
|
e = Enumeration.new(:opt => 'IPRI', :name => 'Very urgent', :is_default => true)
|
||||||
|
assert e.save
|
||||||
|
assert_equal e, Enumeration.default('IPRI')
|
||||||
|
end
|
||||||
|
|
||||||
|
def test_update_default
|
||||||
|
e = Enumeration.default('IPRI')
|
||||||
|
e.update_attributes(:name => 'Changed', :is_default => true)
|
||||||
|
assert_equal e, Enumeration.default('IPRI')
|
||||||
|
end
|
||||||
|
|
||||||
|
def test_update_default_to_non_default
|
||||||
|
e = Enumeration.default('IPRI')
|
||||||
|
e.update_attributes(:name => 'Changed', :is_default => false)
|
||||||
|
assert_nil Enumeration.default('IPRI')
|
||||||
|
end
|
||||||
|
|
||||||
|
def test_change_default
|
||||||
|
e = Enumeration.find_by_name('Urgent')
|
||||||
|
e.update_attributes(:name => 'Urgent', :is_default => true)
|
||||||
|
assert_equal e, Enumeration.default('IPRI')
|
||||||
|
end
|
||||||
|
|
||||||
def test_destroy_with_reassign
|
def test_destroy_with_reassign
|
||||||
Enumeration.find(4).destroy(Enumeration.find(6))
|
Enumeration.find(4).destroy(Enumeration.find(6))
|
||||||
assert_nil Issue.find(:first, :conditions => {:priority_id => 4})
|
assert_nil Issue.find(:first, :conditions => {:priority_id => 4})
|
||||||
|
|||||||
@@ -69,11 +69,23 @@ class ApplicationHelperTest < HelperTestCase
|
|||||||
'!http://foo.bar/image.jpg!' => '<img src="http://foo.bar/image.jpg" alt="" />',
|
'!http://foo.bar/image.jpg!' => '<img src="http://foo.bar/image.jpg" alt="" />',
|
||||||
'floating !>http://foo.bar/image.jpg!' => 'floating <div style="float:right"><img src="http://foo.bar/image.jpg" alt="" /></div>',
|
'floating !>http://foo.bar/image.jpg!' => 'floating <div style="float:right"><img src="http://foo.bar/image.jpg" alt="" /></div>',
|
||||||
'with class !(some-class)http://foo.bar/image.jpg!' => 'with class <img src="http://foo.bar/image.jpg" class="some-class" alt="" />',
|
'with class !(some-class)http://foo.bar/image.jpg!' => 'with class <img src="http://foo.bar/image.jpg" class="some-class" alt="" />',
|
||||||
'with style !{width:100px;height100px}http://foo.bar/image.jpg!' => 'with style <img src="http://foo.bar/image.jpg" style="width:100px;height100px;" alt="" />',
|
# inline styles should be stripped
|
||||||
|
'with style !{width:100px;height100px}http://foo.bar/image.jpg!' => 'with style <img src="http://foo.bar/image.jpg" alt="" />',
|
||||||
|
'with title !http://foo.bar/image.jpg(This is a title)!' => 'with title <img src="http://foo.bar/image.jpg" title="This is a title" alt="This is a title" />',
|
||||||
|
'with title !http://foo.bar/image.jpg(This is a double-quoted "title")!' => 'with title <img src="http://foo.bar/image.jpg" title="This is a double-quoted "title"" alt="This is a double-quoted "title"" />',
|
||||||
}
|
}
|
||||||
to_test.each { |text, result| assert_equal "<p>#{result}</p>", textilizable(text) }
|
to_test.each { |text, result| assert_equal "<p>#{result}</p>", textilizable(text) }
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def test_acronyms
|
||||||
|
to_test = {
|
||||||
|
'this is an acronym: GPL(General Public License)' => 'this is an acronym: <acronym title="General Public License">GPL</acronym>',
|
||||||
|
'GPL(This is a double-quoted "title")' => '<acronym title="This is a double-quoted "title"">GPL</acronym>',
|
||||||
|
}
|
||||||
|
to_test.each { |text, result| assert_equal "<p>#{result}</p>", textilizable(text) }
|
||||||
|
|
||||||
|
end
|
||||||
|
|
||||||
def test_attached_images
|
def test_attached_images
|
||||||
to_test = {
|
to_test = {
|
||||||
'Inline image: !logo.gif!' => 'Inline image: <img src="/attachments/download/3" title="This is a logo" alt="This is a logo" />',
|
'Inline image: !logo.gif!' => 'Inline image: <img src="/attachments/download/3" title="This is a logo" alt="This is a logo" />',
|
||||||
@@ -88,6 +100,7 @@ class ApplicationHelperTest < HelperTestCase
|
|||||||
'This is a "link":http://foo.bar' => 'This is a <a href="http://foo.bar" class="external">link</a>',
|
'This is a "link":http://foo.bar' => 'This is a <a href="http://foo.bar" class="external">link</a>',
|
||||||
'This is an intern "link":/foo/bar' => 'This is an intern <a href="/foo/bar">link</a>',
|
'This is an intern "link":/foo/bar' => 'This is an intern <a href="/foo/bar">link</a>',
|
||||||
'"link (Link title)":http://foo.bar' => '<a href="http://foo.bar" title="Link title" class="external">link</a>',
|
'"link (Link title)":http://foo.bar' => '<a href="http://foo.bar" title="Link title" class="external">link</a>',
|
||||||
|
'"link (Link title with "double-quotes")":http://foo.bar' => '<a href="http://foo.bar" title="Link title with "double-quotes"" class="external">link</a>',
|
||||||
"This is not a \"Link\":\n\nAnother paragraph" => "This is not a \"Link\":</p>\n\n\n\t<p>Another paragraph",
|
"This is not a \"Link\":\n\nAnother paragraph" => "This is not a \"Link\":</p>\n\n\n\t<p>Another paragraph",
|
||||||
# no multiline link text
|
# no multiline link text
|
||||||
"This is a double quote \"on the first line\nand another on a second line\":test" => "This is a double quote \"on the first line<br />\nand another on a second line\":test"
|
"This is a double quote \"on the first line\nand another on a second line\":test" => "This is a double quote \"on the first line<br />\nand another on a second line\":test"
|
||||||
@@ -239,7 +252,10 @@ EXPECTED
|
|||||||
|
|
||||||
def test_text_formatting
|
def test_text_formatting
|
||||||
to_test = {'*_+bold, italic and underline+_*' => '<strong><em><ins>bold, italic and underline</ins></em></strong>',
|
to_test = {'*_+bold, italic and underline+_*' => '<strong><em><ins>bold, italic and underline</ins></em></strong>',
|
||||||
'(_text within parentheses_)' => '(<em>text within parentheses</em>)'
|
'(_text within parentheses_)' => '(<em>text within parentheses</em>)',
|
||||||
|
'a *Humane Web* Text Generator' => 'a <strong>Humane Web</strong> Text Generator',
|
||||||
|
'a H *umane* W *eb* T *ext* G *enerator*' => 'a H <strong>umane</strong> W <strong>eb</strong> T <strong>ext</strong> G <strong>enerator</strong>',
|
||||||
|
'a *H* umane *W* eb *T* ext *G* enerator' => 'a <strong>H</strong> umane <strong>W</strong> eb <strong>T</strong> ext <strong>G</strong> enerator',
|
||||||
}
|
}
|
||||||
to_test.each { |text, result| assert_equal "<p>#{result}</p>", textilizable(text) }
|
to_test.each { |text, result| assert_equal "<p>#{result}</p>", textilizable(text) }
|
||||||
end
|
end
|
||||||
|
|||||||
@@ -190,4 +190,11 @@ class IssueTest < Test::Unit::TestCase
|
|||||||
assert_nil Issue.find_by_id(1)
|
assert_nil Issue.find_by_id(1)
|
||||||
assert_nil TimeEntry.find_by_issue_id(1)
|
assert_nil TimeEntry.find_by_issue_id(1)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def test_overdue
|
||||||
|
assert Issue.new(:due_date => 1.day.ago.to_date).overdue?
|
||||||
|
assert !Issue.new(:due_date => Date.today).overdue?
|
||||||
|
assert !Issue.new(:due_date => 1.day.from_now.to_date).overdue?
|
||||||
|
assert !Issue.new(:due_date => nil).overdue?
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|||||||
@@ -0,0 +1,42 @@
|
|||||||
|
# Redmine - project management software
|
||||||
|
# Copyright (C) 2006-2008 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
|
||||||
|
# as published by the Free Software Foundation; either version 2
|
||||||
|
# of the License, or (at your option) any later version.
|
||||||
|
#
|
||||||
|
# This program is distributed in the hope that it will be useful,
|
||||||
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
# GNU General Public License for more details.
|
||||||
|
#
|
||||||
|
# You should have received a copy of the GNU General Public License
|
||||||
|
# along with this program; if not, write to the Free Software
|
||||||
|
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||||
|
|
||||||
|
require File.dirname(__FILE__) + '/../../../test_helper'
|
||||||
|
|
||||||
|
class Redmine::UnifiedDiffTest < Test::Unit::TestCase
|
||||||
|
|
||||||
|
def setup
|
||||||
|
end
|
||||||
|
|
||||||
|
def test_subversion_diff
|
||||||
|
diff = Redmine::UnifiedDiff.new(read_diff_fixture('subversion.diff'))
|
||||||
|
# number of files
|
||||||
|
assert_equal 4, diff.size
|
||||||
|
assert diff.detect {|file| file.file_name =~ %r{^config/settings.yml}}
|
||||||
|
end
|
||||||
|
|
||||||
|
def test_truncate_diff
|
||||||
|
diff = Redmine::UnifiedDiff.new(read_diff_fixture('subversion.diff'), :max_lines => 20)
|
||||||
|
assert_equal 2, diff.size
|
||||||
|
end
|
||||||
|
|
||||||
|
private
|
||||||
|
|
||||||
|
def read_diff_fixture(filename)
|
||||||
|
File.new(File.join(File.dirname(__FILE__), '/../../../fixtures/diffs', filename)).read
|
||||||
|
end
|
||||||
|
end
|
||||||
@@ -129,6 +129,15 @@ class MailHandlerTest < Test::Unit::TestCase
|
|||||||
assert_match /This is reply/, journal.notes
|
assert_match /This is reply/, journal.notes
|
||||||
assert_equal IssueStatus.find_by_name("Resolved"), issue.status
|
assert_equal IssueStatus.find_by_name("Resolved"), issue.status
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def test_should_strip_tags_of_html_only_emails
|
||||||
|
issue = submit_email('ticket_html_only.eml', :issue => {:project => 'ecookbook'})
|
||||||
|
assert issue.is_a?(Issue)
|
||||||
|
assert !issue.new_record?
|
||||||
|
issue.reload
|
||||||
|
assert_equal 'HTML email', issue.subject
|
||||||
|
assert_equal 'This is a html-only email.', issue.description
|
||||||
|
end
|
||||||
|
|
||||||
private
|
private
|
||||||
|
|
||||||
|
|||||||
@@ -53,6 +53,12 @@ class RepositoryCvsTest < Test::Unit::TestCase
|
|||||||
@repository.fetch_changesets
|
@repository.fetch_changesets
|
||||||
assert_equal 5, @repository.changesets.count
|
assert_equal 5, @repository.changesets.count
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def test_deleted_files_should_not_be_listed
|
||||||
|
entries = @repository.entries('sources')
|
||||||
|
assert entries.detect {|e| e.name == 'watchers_controller.rb'}
|
||||||
|
assert_nil entries.detect {|e| e.name == 'welcome_controller.rb'}
|
||||||
|
end
|
||||||
else
|
else
|
||||||
puts "CVS test repository NOT FOUND. Skipping unit tests !!!"
|
puts "CVS test repository NOT FOUND. Skipping unit tests !!!"
|
||||||
def test_fake; assert true end
|
def test_fake; assert true end
|
||||||
|
|||||||
@@ -158,4 +158,10 @@ class UserTest < Test::Unit::TestCase
|
|||||||
@jsmith.pref.comments_sorting = 'desc'
|
@jsmith.pref.comments_sorting = 'desc'
|
||||||
assert @jsmith.wants_comments_in_reverse_order?
|
assert @jsmith.wants_comments_in_reverse_order?
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def test_find_by_mail_should_be_case_insensitive
|
||||||
|
u = User.find_by_mail('JSmith@somenet.foo')
|
||||||
|
assert_not_nil u
|
||||||
|
assert_equal 'jsmith@somenet.foo', u.mail
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|||||||
+1
-1
@@ -1,7 +1,7 @@
|
|||||||
require 'action_web_service'
|
require 'action_web_service'
|
||||||
|
|
||||||
# These need to be in the load path for action_web_service to work
|
# These need to be in the load path for action_web_service to work
|
||||||
Dependencies.load_paths += ["#{RAILS_ROOT}/app/apis"]
|
ActiveSupport::Dependencies.load_paths += ["#{RAILS_ROOT}/app/apis"]
|
||||||
|
|
||||||
# AWS Test helpers
|
# AWS Test helpers
|
||||||
require 'action_web_service/test_invoke' if ENV['RAILS_ENV'] && ENV['RAILS_ENV'] =~ /^test/
|
require 'action_web_service/test_invoke' if ENV['RAILS_ENV'] && ENV['RAILS_ENV'] =~ /^test/
|
||||||
|
|||||||
@@ -73,7 +73,7 @@ module Redmine
|
|||||||
end
|
end
|
||||||
|
|
||||||
with_scope(:find => scope_options) do
|
with_scope(:find => scope_options) do
|
||||||
find(:all, provider_options[:find_options])
|
find(:all, provider_options[:find_options].dup)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|||||||
+2
-2
@@ -97,8 +97,8 @@ module ActionController
|
|||||||
"Unknown options: #{unknown_option_keys.join(', ')}" unless
|
"Unknown options: #{unknown_option_keys.join(', ')}" unless
|
||||||
unknown_option_keys.empty?
|
unknown_option_keys.empty?
|
||||||
|
|
||||||
options[:singular_name] ||= Inflector.singularize(collection_id.to_s)
|
options[:singular_name] ||= ActiveSupport::Inflector.singularize(collection_id.to_s)
|
||||||
options[:class_name] ||= Inflector.camelize(options[:singular_name])
|
options[:class_name] ||= ActiveSupport::Inflector.camelize(options[:singular_name])
|
||||||
end
|
end
|
||||||
|
|
||||||
# Returns a paginator and a collection of Active Record model instances
|
# Returns a paginator and a collection of Active Record model instances
|
||||||
|
|||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user