Merge branch 'ticket/master/30-upstream-code-review-cherry-pick' into ticket/master/30-upstream-code-review

This commit is contained in:
Eric Davis 2011-02-09 16:53:07 -08:00
commit 8e60c5bf1c
183 changed files with 10882 additions and 734 deletions

1
.gitignore vendored
View File

@ -1,4 +1,5 @@
/config/additional_environment.rb
/config/configuration.yml
/config/database.yml
/config/email.yml
/config/initializers/session_store.rb

View File

@ -1,6 +1,7 @@
syntax: glob
config/additional_environment.rb
config/configuration.yml
config/database.yml
config/email.yml
config/initializers/session_store.rb

View File

@ -203,13 +203,25 @@ class AccountController < ApplicationController
self.logged_user = user
# generate a key and set cookie if autologin
if params[:autologin] && Setting.autologin?
token = Token.create(:user => user, :action => 'autologin')
cookies[:autologin] = { :value => token.value, :expires => 1.year.from_now }
set_autologin_cookie(user)
end
call_hook(:controller_account_success_authentication_after, {:user => user })
redirect_back_or_default :controller => 'my', :action => 'page'
end
def set_autologin_cookie(user)
token = Token.create(:user => user, :action => 'autologin')
cookie_name = Redmine::Configuration['autologin_cookie_name'] || 'autologin'
cookie_options = {
:value => token.value,
:expires => 1.year.from_now,
:path => (Redmine::Configuration['autologin_cookie_path'] || '/'),
:secure => (Redmine::Configuration['autologin_cookie_secure'] ? true : false),
:httponly => true
}
cookies[cookie_name] = cookie_options
end
# Onthefly creation failed, display the registration form to fill/fix attributes
def onthefly_creation_failed(user, auth_source_options = { })
@user = user

View File

@ -28,6 +28,7 @@ class IssueRelationsController < ApplicationController
respond_to do |format|
format.html { redirect_to :controller => 'issues', :action => 'show', :id => @issue }
format.js do
@relations = @issue.relations.select {|r| r.other_issue(@issue) && r.other_issue(@issue).visible? }
render :update do |page|
page.replace_html "relations", :partial => 'issues/relations'
if @relation.errors.empty?
@ -47,7 +48,10 @@ class IssueRelationsController < ApplicationController
end
respond_to do |format|
format.html { redirect_to :controller => 'issues', :action => 'show', :id => @issue }
format.js { render(:update) {|page| page.replace_html "relations", :partial => 'issues/relations'} }
format.js {
@relations = @issue.relations.select {|r| r.other_issue(@issue) && r.other_issue(@issue).visible? }
render(:update) {|page| page.replace_html "relations", :partial => 'issues/relations'}
}
end
end

View File

@ -108,6 +108,7 @@ class IssuesController < ApplicationController
@journals.reverse! if User.current.wants_comments_in_reverse_order?
@changesets = @issue.changesets.visible.all
@changesets.reverse! if User.current.wants_comments_in_reverse_order?
@relations = @issue.relations.select {|r| r.other_issue(@issue) && r.other_issue(@issue).visible? }
@allowed_statuses = @issue.new_statuses_allowed_to(User.current)
@edit_allowed = User.current.allowed_to?(:edit_issues, @project)
@priorities = IssuePriority.all

View File

@ -94,6 +94,7 @@ class RepositoriesController < ApplicationController
(show_error_not_found; return) unless @entry
@changesets = @repository.latest_changesets(@path, @rev, Setting.repository_log_display_limit.to_i)
@properties = @repository.properties(@path, @rev)
@changeset = @repository.find_changeset_by_name(@rev)
end
def revisions
@ -127,6 +128,7 @@ class RepositoriesController < ApplicationController
else
# Prevent empty lines when displaying a file with Windows style eol
@content.gsub!("\r\n", "\n")
@changeset = @repository.find_changeset_by_name(@rev)
end
end
@ -136,6 +138,7 @@ class RepositoriesController < ApplicationController
@annotate = @repository.scm.annotate(@path, @rev)
(render_error l(:error_scm_annotate); return) if @annotate.nil? || @annotate.empty?
@changeset = @repository.find_changeset_by_name(@rev)
end
def revision

View File

@ -110,6 +110,20 @@ module ApplicationHelper
:title => l(:label_revision_id, format_revision(revision)))
end
# Generates a link to a message
def link_to_message(message, options={}, html_options = nil)
link_to(
h(truncate(message.subject, :length => 60)),
{ :controller => 'messages', :action => 'show',
:board_id => message.board_id,
:id => message.root,
:r => (message.parent_id && message.id),
:anchor => (message.parent_id ? "message-#{message.id}" : nil)
}.merge(options),
html_options
)
end
# Generates a link to a project if active
# Examples:
#
@ -588,16 +602,26 @@ module ApplicationHelper
# source:some/file#L120 -> Link to line 120 of the file
# source:some/file@52#L120 -> Link to line 120 of the file's revision 52
# export:some/file -> Force the download of the file
# Forum messages:
# Forum messages:
# message#1218 -> Link to message with id 1218
#
# Links can refer other objects from other projects, using project identifier:
# identifier:r52
# identifier:document:"Some document"
# identifier:version:1.0.0
# identifier:source:some/file
def parse_redmine_links(text, project, obj, attr, only_path, options)
text.gsub!(%r{([\s\(,\-\[\>]|^)(!)?(attachment|document|version|commit|source|export|message|project)?((#|r)(\d+)|(:)([^"\s<>][^\s<>]*?|"[^"]+?"))(?=(?=[[:punct:]]\W)|,|\s|\]|<|$)}) do |m|
leading, esc, prefix, sep, identifier = $1, $2, $3, $5 || $7, $6 || $8
text.gsub!(%r{([\s\(,\-\[\>]|^)(!)?(([a-z0-9\-]+):)?(attachment|document|version|commit|source|export|message|project)?((#|r)(\d+)|(:)([^"\s<>][^\s<>]*?|"[^"]+?"))(?=(?=[[:punct:]]\W)|,|\s|\]|<|$)}) do |m|
leading, esc, project_prefix, project_identifier, prefix, sep, identifier = $1, $2, $3, $4, $5, $7 || $9, $8 || $10
link = nil
if project_identifier
project = Project.visible.find_by_identifier(project_identifier)
end
if esc.nil?
if prefix.nil? && sep == 'r'
if project && (changeset = project.changesets.find_by_revision(identifier))
link = link_to("r#{identifier}", {:only_path => only_path, :controller => 'repositories', :action => 'revision', :id => project, :rev => changeset.revision},
# project.changesets.visible raises an SQL error because of a double join on repositories
if project && project.repository && (changeset = Changeset.visible.find_by_repository_id_and_revision(project.repository.id, identifier))
link = link_to("#{project_prefix}r#{identifier}", {:only_path => only_path, :controller => 'repositories', :action => 'revision', :id => project, :rev => changeset.revision},
:class => 'changeset',
:title => truncate_single_line(changeset.comments, :length => 100))
end
@ -611,24 +635,18 @@ module ApplicationHelper
:title => "#{truncate(issue.subject, :length => 100)} (#{issue.status.name})")
end
when 'document'
if document = Document.find_by_id(oid, :include => [:project], :conditions => Project.visible_by(User.current))
if document = Document.visible.find_by_id(oid)
link = link_to h(document.title), {:only_path => only_path, :controller => 'documents', :action => 'show', :id => document},
:class => 'document'
end
when 'version'
if version = Version.find_by_id(oid, :include => [:project], :conditions => Project.visible_by(User.current))
if version = Version.visible.find_by_id(oid)
link = link_to h(version.name), {:only_path => only_path, :controller => 'versions', :action => 'show', :id => version},
:class => 'version'
end
when 'message'
if message = Message.find_by_id(oid, :include => [:parent, {:board => :project}], :conditions => Project.visible_by(User.current))
link = link_to h(truncate(message.subject, :length => 60)), {:only_path => only_path,
:controller => 'messages',
:action => 'show',
:board_id => message.board,
:id => message.root,
:anchor => (message.parent ? "message-#{message.id}" : nil)},
:class => 'message'
if message = Message.visible.find_by_id(oid, :include => :parent)
link = link_to_message(message, {:only_path => only_path}, :class => 'message')
end
when 'project'
if p = Project.visible.find_by_id(oid)
@ -640,26 +658,26 @@ module ApplicationHelper
name = identifier.gsub(%r{^"(.*)"$}, "\\1")
case prefix
when 'document'
if project && document = project.documents.find_by_title(name)
if project && document = project.documents.visible.find_by_title(name)
link = link_to h(document.title), {:only_path => only_path, :controller => 'documents', :action => 'show', :id => document},
:class => 'document'
end
when 'version'
if project && version = project.versions.find_by_name(name)
if project && version = project.versions.visible.find_by_name(name)
link = link_to h(version.name), {:only_path => only_path, :controller => 'versions', :action => 'show', :id => version},
:class => 'version'
end
when 'commit'
if project && (changeset = project.changesets.find(:first, :conditions => ["scmid LIKE ?", "#{name}%"]))
link = link_to h("#{name}"), {:only_path => only_path, :controller => 'repositories', :action => 'revision', :id => project, :rev => changeset.identifier},
if project && project.repository && (changeset = Changeset.visible.find(:first, :conditions => ["repository_id = ? AND scmid LIKE ?", project.repository.id, "#{name}%"]))
link = link_to h("#{project_prefix}#{name}"), {:only_path => only_path, :controller => 'repositories', :action => 'revision', :id => project, :rev => changeset.identifier},
:class => 'changeset',
:title => truncate_single_line(changeset.comments, :length => 100)
end
when 'source', 'export'
if project && project.repository
if project && project.repository && User.current.allowed_to?(:browse_repository, project)
name =~ %r{^[/\\]*(.*?)(@([0-9a-f]+))?(#(L\d+))?$}
path, rev, anchor = $1, $3, $5
link = link_to h("#{prefix}:#{name}"), {:controller => 'repositories', :action => 'entry', :id => project,
link = link_to h("#{project_prefix}#{prefix}:#{name}"), {:controller => 'repositories', :action => 'entry', :id => project,
:path => to_path_param(path),
:rev => rev,
:anchor => anchor,
@ -679,7 +697,7 @@ module ApplicationHelper
end
end
end
leading + (link || "#{prefix}#{sep}#{identifier}")
leading + (link || "#{project_prefix}#{prefix}#{sep}#{identifier}")
end
end

View File

@ -16,14 +16,4 @@
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
module MessagesHelper
def link_to_message(message)
return '' unless message
link_to h(truncate(message.subject, :length => 60)), :controller => 'messages',
:action => 'show',
:board_id => message.board_id,
:id => message.root,
:r => (message.parent_id && message.id),
:anchor => (message.parent_id ? "message-#{message.id}" : nil)
end
end

View File

@ -43,7 +43,7 @@ class Attachment < ActiveRecord::Base
"LEFT JOIN #{Project.table_name} ON #{Document.table_name}.project_id = #{Project.table_name}.id"}
cattr_accessor :storage_path
@@storage_path = "#{RAILS_ROOT}/files"
@@storage_path = Redmine::Configuration['attachments_storage_path'] || "#{RAILS_ROOT}/files"
def validate
if self.filesize > Setting.attachment_max_size.to_i.kilobytes

View File

@ -29,6 +29,9 @@ class Document < ActiveRecord::Base
validates_presence_of :project, :title, :category
validates_length_of :title, :maximum => 60
named_scope :visible, lambda {|*args| { :include => :project,
:conditions => Project.allowed_to_condition(args.first || User.current, :view_documents) } }
def visible?(user=User.current)
!user.nil? && user.allowed_to?(:view_documents, project)
end

View File

@ -34,7 +34,7 @@ class Issue < ActiveRecord::Base
has_many :relations_from, :class_name => 'IssueRelation', :foreign_key => 'issue_from_id', :dependent => :delete_all
has_many :relations_to, :class_name => 'IssueRelation', :foreign_key => 'issue_to_id', :dependent => :delete_all
acts_as_nested_set :scope => 'root_id'
acts_as_nested_set :scope => 'root_id', :dependent => :destroy
acts_as_attachable :after_remove => :attachment_removed
acts_as_customizable
acts_as_watchable
@ -89,7 +89,6 @@ class Issue < ActiveRecord::Base
before_create :default_assign
before_save :close_duplicates, :update_done_ratio_from_issue_status
after_save :reschedule_following_issues, :update_nested_set_attributes, :update_parent_attributes, :create_journal
after_destroy :destroy_children
after_destroy :update_parent_attributes
# Returns true if usr or current user is allowed to view the issue
@ -758,14 +757,6 @@ class Issue < ActiveRecord::Base
end
end
def destroy_children
unless leaf?
children.each do |child|
child.destroy
end
end
end
# Update issues so their versions are not pointing to a
# fixed_version that is not shared with the issue's project
def self.update_versions(conditions=nil)

View File

@ -296,7 +296,7 @@ class Mailer < ActionMailer::Base
if raise_errors
raise e
elsif mylogger
mylogger.error "The following error occured while sending email notification: \"#{e.message}\". Check your configuration in config/email.yml."
mylogger.error "The following error occured while sending email notification: \"#{e.message}\". Check your configuration in config/configuration.yml."
end
ensure
self.class.raise_delivery_errors = raise_errors

View File

@ -42,6 +42,9 @@ class Message < ActiveRecord::Base
after_create :add_author_as_watcher
named_scope :visible, lambda {|*args| { :include => {:board => :project},
:conditions => Project.allowed_to_condition(args.first || User.current, :view_messages) } }
def visible?(user=User.current)
!user.nil? && user.allowed_to?(:view_messages, project)
end

View File

@ -104,10 +104,11 @@ class Repository::Cvs < Repository
scm.revisions('', fetch_since, nil, :with_paths => true) do |revision|
# only add the change to the database, if it doen't exists. the cvs log
# is not exclusive at all.
unless changes.find_by_path_and_revision(scm.with_leading_slash(revision.paths[0][:path]), revision.paths[0][:revision])
revision
tmp_time = revision.time.clone
unless changes.find_by_path_and_revision(
scm.with_leading_slash(revision.paths[0][:path]), revision.paths[0][:revision])
cs = changesets.find(:first, :conditions=>{
:committed_on=>revision.time-time_delta..revision.time+time_delta,
:committed_on=>tmp_time - time_delta .. tmp_time + time_delta,
:committer=>revision.author,
:comments=>Changeset.normalize_comments(revision.message)
})
@ -116,11 +117,14 @@ class Repository::Cvs < Repository
unless cs
# we use a temporaray revision number here (just for inserting)
# later on, we calculate a continous positive number
latest = changesets.find(:first, :order => 'id DESC')
tmp_time2 = tmp_time.clone.gmtime
branch = revision.paths[0][:branch]
scmid = branch + "-" + tmp_time2.strftime("%Y%m%d-%H%M%S")
cs = Changeset.create(:repository => self,
:revision => "_#{tmp_rev_num}",
:revision => "tmp#{tmp_rev_num}",
:scmid => scmid,
:committer => revision.author,
:committed_on => revision.time,
:committed_on => tmp_time,
:comments => revision.message)
tmp_rev_num += 1
end
@ -144,10 +148,13 @@ class Repository::Cvs < Repository
end
# Renumber new changesets in chronological order
changesets.find(:all, :order => 'committed_on ASC, id ASC', :conditions => "revision LIKE '_%'").each do |changeset|
changesets.find(
:all, :order => 'committed_on ASC, id ASC', :conditions => "revision LIKE 'tmp%'"
).each do |changeset|
changeset.update_attribute :revision, next_revision_number
end
end # transaction
@current_revision_number = nil
end
private
@ -155,7 +162,9 @@ class Repository::Cvs < Repository
# Returns the next revision number to assign to a CVS changeset
def next_revision_number
# Need to retrieve existing revision numbers to sort them as integers
@current_revision_number ||= (connection.select_values("SELECT revision FROM #{Changeset.table_name} WHERE repository_id = #{id} AND revision NOT LIKE '_%'").collect(&:to_i).max || 0)
sql = "SELECT revision FROM #{Changeset.table_name} "
sql << "WHERE repository_id = #{id} AND revision NOT LIKE 'tmp%'"
@current_revision_number ||= (connection.select_values(sql).collect(&:to_i).max || 0)
@current_revision_number += 1
end
end

View File

@ -260,12 +260,16 @@ class User < Principal
notified_projects_ids
end
# Only users that belong to more than 1 project can select projects for which they are notified
def valid_notification_options
self.class.valid_notification_options(self)
end
# Only users that belong to more than 1 project can select projects for which they are notified
def self.valid_notification_options(user=nil)
# Note that @user.membership.size would fail since AR ignores
# :include association option when doing a count
if memberships.length < 1
MAIL_NOTIFICATION_OPTIONS.delete_if {|option| option.first == 'selected'}
if user.nil? || user.memberships.length < 1
MAIL_NOTIFICATION_OPTIONS.reject {|option| option.first == 'selected'}
else
MAIL_NOTIFICATION_OPTIONS
end
@ -418,7 +422,12 @@ class User < Principal
when 'all'
true
when 'selected'
# Handled by the Project
# user receives notifications for created/assigned issues on unselected projects
if object.is_a?(Issue) && (object.author == self || object.assigned_to == self)
true
else
false
end
when 'none'
false
when 'only_my_events'

View File

@ -6,9 +6,9 @@
<p><strong><%=l(:label_related_issues)%></strong></p>
<% if @issue.relations.any? %>
<% if @relations.present? %>
<table style="width:100%">
<% @issue.relations.select {|r| r.other_issue(@issue).visible? }.each do |relation| %>
<% @relations.each do |relation| %>
<tr>
<td><%= l(relation.label_for(@issue)) %> <%= "(#{l('datetime.distance_in_words.x_days', :count => relation.delay)})" if relation.delay && relation.delay != 0 %>
<%= h(relation.other_issue(@issue).project) + ' - ' if Setting.cross_project_issue_relations? %>

View File

@ -26,10 +26,10 @@ api.issue do
render_api_issue_children(@issue, api) if include_in_api_response?('children')
api.array :relations do
@issue.relations.select {|r| r.other_issue(@issue).visible? }.each do |relation|
@relations.each do |relation|
api.relation(:id => relation.id, :issue_id => relation.other_issue(@issue).id, :relation_type => relation.relation_type_for(@issue), :delay => relation.delay)
end
end if include_in_api_response?('relations')
end if include_in_api_response?('relations') && @relations.present?
api.array :changesets do
@issue.changesets.each do |changeset|

View File

@ -11,7 +11,7 @@
<%= javascript_include_tag :defaults %>
<%= heads_for_theme %>
<%= heads_for_wiki_formatter %>
<!--[if IE]>
<!--[if IE 6]>
<style type="text/css">
* html body{ width: expression( document.documentElement.clientWidth < 900 ? '900px' : '100%' ); }
body {behavior: url(<%= stylesheet_path "csshover.htc" %>);}

View File

@ -16,6 +16,6 @@ dirs.each do |dir|
/ <%= link_to h(filename), :action => 'changes', :id => @project, :path => to_path_param("#{link_path}/#{filename}"), :rev => @rev %>
<% end %>
<%= "@ #{h revision}" if revision %>
<%= "@ #{h format_revision(@changeset)}" if @changeset %>
<% html_title(with_leading_slash(path)) -%>

View File

@ -8,7 +8,7 @@
<p><%= setting_check_box :plain_text_mail %></p>
<p><%= setting_select(:default_notification_option, User::MAIL_NOTIFICATION_OPTIONS.collect {|o| [l(o.last), o.first.to_s]}) %></p>
<p><%= setting_select(:default_notification_option, User.valid_notification_options.collect {|o| [l(o.last), o.first.to_s]}) %></p>
</div>

View File

@ -3,7 +3,6 @@
<h3><%= l(:label_history) %></h3>
<% form_tag({:action => "diff"}, :method => :get) do %>
<%= hidden_field_tag('project_id', h(@project.to_param)) %>
<table class="list wiki-page-versions">
<thead><tr>
<th>#</th>

View File

@ -0,0 +1,126 @@
# = Redmine configuration file
#
# Each environment has it's own configuration options. If you are only
# running in production, only the production block needs to be configured.
# Environment specific configuration options override the default ones.
#
# Note that this file needs to be a valid YAML file.
#
# == Outgoing email settings (email_delivery setting)
#
# === Common configurations
#
# ==== Sendmail command
#
# production:
# email_delivery:
# delivery_method: :sendmail
#
# ==== Simple SMTP server at localhost
#
# production:
# email_delivery:
# delivery_method: :smtp
# smtp_settings:
# address: "localhost"
# port: 25
#
# ==== SMTP server at example.com using LOGIN authentication and checking HELO for foo.com
#
# production:
# email_delivery:
# delivery_method: :smtp
# smtp_settings:
# address: "example.com"
# port: 25
# authentication: :login
# domain: 'foo.com'
# user_name: 'myaccount'
# password: 'password'
#
# ==== SMTP server at example.com using PLAIN authentication
#
# production:
# email_delivery:
# delivery_method: :smtp
# smtp_settings:
# address: "example.com"
# port: 25
# authentication: :plain
# domain: 'example.com'
# user_name: 'myaccount'
# password: 'password'
#
# ==== SMTP server at using TLS (GMail)
#
# This requires some additional configuration. See the article at:
# http://redmineblog.com/articles/setup-redmine-to-send-email-using-gmail/
#
# production:
# email_delivery:
# delivery_method: :smtp
# smtp_settings:
# tls: true
# address: "smtp.gmail.com"
# port: 587
# domain: "smtp.gmail.com" # 'your.domain.com' for GoogleApps
# authentication: :plain
# user_name: "your_email@gmail.com"
# password: "your_password"
#
#
# === More configuration options
#
# See the "Configuration options" at the following website for a list of the
# full options allowed:
#
# http://wiki.rubyonrails.org/rails/pages/HowToSendEmailsWithActionMailer
# default configuration options for all environments
default:
# Outgoing emails configuration (see examples above)
email_delivery:
delivery_method: :smtp
smtp_settings:
address: smtp.example.net
port: 25
domain: example.net
authentication: :login
user_name: "redmine@example.net"
password: "redmine"
# Absolute path to the directory where attachments are stored.
# The default is the 'files' directory in your Redmine instance.
# Your Redmine instance needs to have write permission on this
# directory.
# Examples:
# attachments_storage_path: /var/redmine/files
# attachments_storage_path: D:/redmine/files
attachments_storage_path:
# Configuration of the autologin cookie.
# autologin_cookie_name: the name of the cookie (default: autologin)
# autologin_cookie_path: the cookie path (default: /)
# autologin_cookie_secure: true sets the cookie secure flag (default: false)
autologin_cookie_name:
autologin_cookie_path:
autologin_cookie_secure:
# Configuration of SCM executable command.
# Absolute path (e.g. /usr/local/bin/hg) or command name (e.g. hg.exe, bzr.exe)
# On Windows, *.cmd, *.bat (e.g. hg.cmd, bzr.bat) does not work.
scm_subversion_command: svn # (default: svn)
scm_mercurial_command: "\"C:\Program Files\TortoiseHg\hg.exe\"" # (default: hg)
scm_git_command: /usr/local/bin/git # (default: git)
scm_cvs_command: cvs # (default: cvs)
scm_bazaar_command: bzr.exe # (default: bzr)
scm_darcs_command: darcs-1.0.9-i386-linux # (default: darcs)
# specific configuration options for production environment
# that overrides the default ones
production:
# specific configuration options for development environment
# that overrides the default ones
development:

View File

@ -36,4 +36,4 @@ test_pgsql:
test_sqlite3:
adapter: sqlite3
database: db/test.db
database: db/test.sqlite3

View File

@ -1,87 +0,0 @@
# = Outgoing email settings
#
# Each environment has it's own configuration options. If you are only
# running in production, only the production block needs to be configured.
#
# == Common configurations
#
# === Sendmail command
#
# production:
# delivery_method: :sendmail
#
# === Simple SMTP server at localhost
#
# production:
# delivery_method: :smtp
# smtp_settings:
# address: "localhost"
# port: 25
#
# === SMTP server at example.com using LOGIN authentication and checking HELO for foo.com
#
# production:
# delivery_method: :smtp
# smtp_settings:
# address: "example.com"
# port: 25
# authentication: :login
# domain: 'foo.com'
# user_name: 'myaccount'
# password: 'password'
#
# === SMTP server at example.com using PLAIN authentication
#
# production:
# delivery_method: :smtp
# smtp_settings:
# address: "example.com"
# port: 25
# authentication: :plain
# domain: 'example.com'
# user_name: 'myaccount'
# password: 'password'
#
# === SMTP server at using TLS (GMail)
#
# This requires some additional configuration. See the article at:
# http://redmineblog.com/articles/setup-redmine-to-send-email-using-gmail/
#
# production:
# delivery_method: :smtp
# smtp_settings:
# tls: true
# address: "smtp.gmail.com"
# port: 587
# domain: "smtp.gmail.com" # 'your.domain.com' for GoogleApps
# authentication: :plain
# user_name: "your_email@gmail.com"
# password: "your_password"
#
#
# == More configuration options
#
# See the "Configuration options" at the following website for a list of the
# full options allowed:
#
# http://wiki.rubyonrails.org/rails/pages/HowToSendEmailsWithActionMailer
production:
delivery_method: :smtp
smtp_settings:
address: smtp.example.net
port: 25
domain: example.net
authentication: :login
user_name: "redmine@example.net"
password: "redmine"
development:
delivery_method: :smtp
smtp_settings:
address: 127.0.0.1
port: 25
domain: example.net
authentication: :login
user_name: "redmine@example.net"
password: "redmine"

View File

@ -46,11 +46,12 @@ Rails::Initializer.run do |config|
# config.active_record.schema_format = :ruby
# Deliveries are disabled by default. Do NOT modify this section.
# Define your email configuration in email.yml instead.
# Define your email configuration in configuration.yml instead.
# It will automatically turn deliveries on
config.action_mailer.perform_deliveries = false
config.gem 'rubytree', :lib => 'tree'
config.gem 'coderay', :version => '~>0.9.7'
# Load any local configuration that is kept out of source control
# (e.g. gems, patches).

View File

@ -1,17 +0,0 @@
# Loads action_mailer settings from email.yml
# and turns deliveries on if configuration file is found
filename = File.join(File.dirname(__FILE__), '..', 'email.yml')
if File.file?(filename)
mailconfig = YAML::load_file(filename)
if mailconfig.is_a?(Hash) && mailconfig.has_key?(Rails.env)
# Enable deliveries
ActionMailer::Base.perform_deliveries = true
mailconfig[Rails.env].each do |k, v|
v.symbolize_keys! if v.respond_to?(:symbolize_keys!)
ActionMailer::Base.send("#{k}=", v)
end
end
end

View File

@ -1,11 +1,12 @@
bg:
# Text direction: Left-to-Right (ltr) or Right-to-Left (rtl)
direction: ltr
date:
formats:
# Use the strftime parameters for formats.
# When no format has been given, it uses default.
# You can provide other formats here if you like!
default: "%Y-%m-%d"
default: "%d-%m-%Y"
short: "%b %d"
long: "%B %d, %Y"
@ -65,6 +66,7 @@ bg:
other: "почти %{count} години"
number:
# Default format for numbers
format:
separator: "."
delimiter: ""
@ -84,6 +86,7 @@ bg:
gb: "GB"
tb: "TB"
# Used in array.to_sentence.
support:
array:
@ -94,8 +97,8 @@ bg:
errors:
template:
header:
one: "1 error prohibited this %{model} from being saved"
other: "%{count} errors prohibited this %{model} from being saved"
one: "1 грешка попречи този %{model} да бъде записан"
other: "%{count} грешки попречиха този %{model} да бъде записан"
messages:
inclusion: "не съществува в списъка"
exclusion: "е запазено"
@ -120,6 +123,7 @@ bg:
greater_than_start_date: "трябва да е след началната дата"
not_same_project: "не е от същия проект"
circular_dependency: "Тази релация ще доведе до безкрайна зависимост"
cant_link_an_issue_with_a_descendant: "Една задача не може да бъде свързвана към своя подзадача"
actionview_instancetag_blank_option: Изберете
@ -150,24 +154,61 @@ bg:
notice_file_not_found: Несъществуваща или преместена страница.
notice_locking_conflict: Друг потребител променя тези данни в момента.
notice_not_authorized: Нямате право на достъп до тази страница.
notice_not_authorized_archived_project: Проектът, който се опитвате да видите е архивиран.
notice_email_sent: "Изпратен e-mail на %{value}"
notice_email_error: "Грешка при изпращане на e-mail (%{value})"
notice_feeds_access_key_reseted: Вашия ключ за RSS достъп беше променен.
notice_api_access_key_reseted: Вашият API ключ за достъп беше изчистен.
notice_failed_to_save_issues: "Неуспешен запис на %{count} задачи от %{total} избрани: %{ids}."
notice_failed_to_save_members: "Невъзможност за запис на член(ове): %{errors}."
notice_no_issue_selected: "Няма избрани задачи."
notice_account_pending: "Профилът Ви е създаден и очаква одобрение от администратор."
notice_default_data_loaded: Примерната информация е заредена успешно.
notice_unable_delete_version: Невъзможност за изтриване на версия
notice_unable_delete_time_entry: Невъзможност за изтриване на запис на time log.
notice_issue_done_ratios_updated: Обновен процент на завършените задачи.
notice_gantt_chart_truncated: Мрежовият график е съкратен, понеже броят на обектите, които могат да бъдат показани е твърде голям (%{max})
error_can_t_load_default_data: "Грешка при зареждане на примерната информация: %{value}"
error_scm_not_found: Несъществуващ обект в хранилището.
error_scm_command_failed: "Грешка при опит за комуникация с хранилище: %{value}"
error_scm_annotate: "Обектът не съществува или не може да бъде анотиран."
error_issue_not_found_in_project: 'Задачата не е намерена или не принадлежи на този проект'
error_no_tracker_in_project: Няма асоциирани тракери с този проект. Проверете настройките на проекта.
error_no_default_issue_status: Няма установено подразбиращо се състояние за задачите. Моля проверете вашата конфигурация (Вижте "Администрация -> Състояния на задачи").
error_can_not_delete_custom_field: Невъзможност за изтриване на потребителско поле
error_can_not_delete_tracker: Този тракер съдържа задачи и не може да бъде изтрит.
error_can_not_remove_role: Тази роля се използва и не може да бъде изтрита.
error_can_not_reopen_issue_on_closed_version: Задача, асоциирана със затворена версия не може да бъде отворена отново
error_can_not_archive_project: Този проект не може да бъде архивиран
error_issue_done_ratios_not_updated: Процентът на завършените задачи не е обновен.
error_workflow_copy_source: Моля изберете source тракер или роля
error_workflow_copy_target: Моля изберете тракер(и) и роля (роли).
error_unable_delete_issue_status: Невъзможност за изтриване на състояние на задача
error_unable_to_connect: Невъзможност за свързване с (%{value})
warning_attachments_not_saved: "%{count} файла не бяха записани."
mail_subject_lost_password: "Вашата парола (%{value})"
mail_body_lost_password: 'За да смените паролата си, използвайте следния линк:'
mail_subject_register: "Активация на профил (%{value})"
mail_body_register: 'За да активирате профила си използвайте следния линк:'
mail_body_account_information_external: "Можете да използвате вашия %{value} профил за вход."
mail_body_account_information: Информацията за профила ви
mail_subject_account_activation_request: "Заявка за активиране на профил в %{value}"
mail_body_account_activation_request: "Има новорегистриран потребител (%{value}), очакващ вашето одобрение:"
mail_subject_reminder: "%{count} задачи с краен срок с следващите %{days} дни"
mail_body_reminder: "%{count} задачи, назначени на вас са с краен срок в следващите %{days} дни:"
mail_subject_wiki_content_added: "Wiki страницата '%{id}' беше добавена"
mail_body_wiki_content_added: Wiki страницата '%{id}' беше добавена от %{author}.
mail_subject_wiki_content_updated: "Wiki страницата '%{id}' не беше обновена"
mail_body_wiki_content_updated: Wiki страницата '%{id}' беше обновена от %{author}.
gui_validation_error: 1 грешка
gui_validation_error_plural: "%{count} грешки"
field_name: Име
field_description: Описание
field_summary: Групиран изглед
field_summary: Анотация
field_is_required: Задължително
field_firstname: Име
field_lastname: Фамилия
@ -200,6 +241,7 @@ bg:
field_priority: Приоритет
field_fixed_version: Планувана версия
field_user: Потребител
field_principal: Principal
field_role: Роля
field_homepage: Начална страница
field_is_public: Публичен
@ -225,6 +267,7 @@ bg:
field_attr_lastname: Атрибут Фамилия (Lastname)
field_attr_mail: Атрибут Email
field_onthefly: Динамично създаване на потребител
field_start_date: Начална дата
field_done_ratio: % Прогрес
field_auth_source: Начин на оторизация
field_hide_mail: Скрий e-mail адреса ми
@ -242,7 +285,24 @@ bg:
field_assignable: Възможно е възлагане на задачи за тази роля
field_redirect_existing_links: Пренасочване на съществуващи линкове
field_estimated_hours: Изчислено време
field_column_names: Колони
field_time_entries: Log time
field_time_zone: Часова зона
field_searchable: С възможност за търсене
field_default_value: Стойност по подразбиране
field_comments_sorting: Сортиране на коментарите
field_parent_title: Родителска страница
field_editable: Editable
field_watcher: Наблюдател
field_identity_url: OpenID URL
field_content: Съдържание
field_group_by: Групиране на резултатите по
field_sharing: Sharing
field_parent_issue: Родителска задача
field_member_of_group: Член на група
field_assigned_to_role: Assignee's role
field_text: Текстово поле
field_visible: Видим
setting_app_title: Заглавие
setting_app_subtitle: Описание
@ -253,26 +313,132 @@ bg:
setting_attachment_max_size: Максимална големина на прикачен файл
setting_issues_export_limit: Максимален брой задачи за експорт
setting_mail_from: E-mail адрес за емисии
setting_bcc_recipients: Получатели на скрито копие (bcc)
setting_plain_text_mail: само чист текст (без HTML)
setting_host_name: Хост
setting_text_formatting: Форматиране на текста
setting_wiki_compression: Wiki компресиране на историята
setting_feeds_limit: Максимален брой за емисии
setting_default_projects_public: Новите проекти са публични по подразбиране
setting_autofetch_changesets: Автоматично обработване на ревизиите
setting_sys_api_enabled: Разрешаване на WS за управление
setting_commit_ref_keywords: Отбелязващи ключови думи
setting_commit_fix_keywords: Приключващи ключови думи
setting_autologin: Автоматичен вход
setting_date_format: Формат на датата
setting_time_format: Формат на часа
setting_cross_project_issue_relations: Релации на задачи между проекти
setting_issue_list_default_columns: Показвани колони по подразбиране
setting_repositories_encodings: Кодови таблици
setting_commit_logs_encoding: Кодова таблица на съобщенията при поверяване
setting_emails_header: Emails header
setting_emails_footer: Подтекст за e-mail
setting_protocol: Протокол
setting_per_page_options: Опции за страниране
setting_user_format: Потребителски формат
setting_activity_days_default: Брой дни показвани на таб Дейност
setting_display_subprojects_issues: Показване на подпроектите в проектите по подразбиране
setting_enabled_scm: Разрешена SCM
setting_mail_handler_body_delimiters: Отрязване на e-mail-ите след един от тези редове
setting_mail_handler_api_enabled: Разрешаване на WS за входящи e-mail-и
setting_mail_handler_api_key: API ключ
setting_sequential_project_identifiers: Генериране на последователни проектни идентификатори
setting_gravatar_enabled: Използване на портребителски икони от Gravatar
setting_gravatar_default: Подразбиращо се изображение от Gravatar
setting_diff_max_lines_displayed: Максимален брой показани diff редове
setting_file_max_size_displayed: Максимален размер на текстовите файлове, показвани inline
setting_repository_log_display_limit: Максимален брой на показванете ревизии в лог файла
setting_openid: Рарешаване на OpenID вход и регистрация
setting_password_min_length: Минимална дължина на парола
setting_new_project_user_role_id: Роля, давана на потребител, създаващ проекти, който не е администратор
setting_default_projects_modules: Активирани модули по подразбиране за нов проект
setting_issue_done_ratio: Изчисление на процента на готови задачи с
setting_issue_done_ratio_issue_field: Използване на поле '% Прогрес'
setting_issue_done_ratio_issue_status: Използване на състоянието на задачите
setting_start_of_week: Първи ден на седмицата
setting_rest_api_enabled: Разрешаване на REST web сървис
setting_cache_formatted_text: Cache formatted text
setting_default_notification_option: Подразбиращ се начин за известяване
setting_commit_logtime_enabled: Разрешаване на отчитането на работното време
setting_commit_logtime_activity_id: Дейност при отчитане на работното време
setting_gantt_items_limit: Максимален брой обекти, които да се показват в мрежов график
permission_add_project: Създаване на проект
permission_add_subprojects: Създаване на подпроекти
permission_edit_project: Редактиране на проект
permission_select_project_modules: Избор на проектни модули
permission_manage_members: Управление на членовете (на екип)
permission_manage_project_activities: Управление на дейностите на проекта
permission_manage_versions: Управление на версиите
permission_manage_categories: Управление на категориите
permission_view_issues: Разглеждане на задачите
permission_add_issues: Добавяне на задачи
permission_edit_issues: Редактиране на задачи
permission_manage_issue_relations: Управление на връзките между задачите
permission_add_issue_notes: Добаване на бележки
permission_edit_issue_notes: Редактиране на бележки
permission_edit_own_issue_notes: Редактиране на собствени бележки
permission_move_issues: Преместване на задачи
permission_delete_issues: Изтриване на задачи
permission_manage_public_queries: Управление на публичните заявки
permission_save_queries: Запис на запитвания (queries)
permission_view_gantt: Разглеждане на мрежов график
permission_view_calendar: Разглеждане на календари
permission_view_issue_watchers: Разглеждане на списък с наблюдатели
permission_add_issue_watchers: Добавяне на наблюдатели
permission_delete_issue_watchers: Изтриване на наблюдатели
permission_log_time: Log spent time
permission_view_time_entries: Разглеждане на изразходваното време
permission_edit_time_entries: Редактиране на time logs
permission_edit_own_time_entries: Редактиране на собствените time logs
permission_manage_news: Управление на новини
permission_comment_news: Коментиране на новини
permission_manage_documents: Управление на документи
permission_view_documents: Разглеждане на документи
permission_manage_files: Управление на файлове
permission_view_files: Разглеждане на файлове
permission_manage_wiki: Управление на wiki
permission_rename_wiki_pages: Преименуване на wiki страници
permission_delete_wiki_pages: Изтриване на wiki страници
permission_view_wiki_pages: Разглеждане на wiki
permission_view_wiki_edits: Разглеждане на wiki история
permission_edit_wiki_pages: Редактиране на wiki страници
permission_delete_wiki_pages_attachments: Изтриване на прикачени файлове към wiki страници
permission_protect_wiki_pages: Заключване на wiki страници
permission_manage_repository: Управление на хранилища
permission_browse_repository: Разглеждане на хранилища
permission_view_changesets: Разглеждане на changesets
permission_commit_access: Поверяване
permission_manage_boards: Управление на boards
permission_view_messages: Разглеждане на съобщения
permission_add_messages: Публикуване на съобщения
permission_edit_messages: Редактиране на съобщения
permission_edit_own_messages: Редактиране на собствени съобщения
permission_delete_messages: Изтриване на съобщения
permission_delete_own_messages: Изтриване на собствени съобщения
permission_export_wiki_pages: Експорт на wiki страници
permission_manage_subtasks: Управление на подзадачите
project_module_issue_tracking: Тракинг
project_module_time_tracking: Отделяне на време
project_module_news: Новини
project_module_documents: Документи
project_module_files: Файлове
project_module_wiki: Wiki
project_module_repository: Хранилище
project_module_boards: Форуми
project_module_calendar: Календар
project_module_gantt: Мрежов график
label_user: Потребител
label_user_plural: Потребители
label_user_new: Нов потребител
label_user_anonymous: Анонимен
label_project: Проект
label_project_new: Нов проект
label_project_plural: Проекти
label_x_projects:
zero: 0 проекти
zero: 0 проекта
one: 1 проект
other: "%{count} проекта"
label_project_all: Всички проекти
@ -281,9 +447,13 @@ bg:
label_issue_new: Нова задача
label_issue_plural: Задачи
label_issue_view_all: Всички задачи
label_issues_by: "Задачи по %{value}"
label_issue_added: Добавена задача
label_issue_updated: Обновена задача
label_document: Документ
label_document_new: Нов документ
label_document_plural: Документи
label_document_added: Добавен документ
label_role: Роля
label_role_plural: Роли
label_role_new: Нова роля
@ -310,11 +480,13 @@ bg:
label_information_plural: Информация
label_please_login: Вход
label_register: Регистрация
label_login_with_open_id_option: или вход чрез OpenID
label_password_lost: Забравена парола
label_home: Начало
label_my_page: Лична страница
label_my_account: Профил
label_my_projects: Проекти, в които участвам
label_my_page_block: Блокове в личната страница
label_administration: Администрация
label_login: Вход
label_logout: Изход
@ -324,6 +496,8 @@ bg:
label_last_login: Последно свързване
label_registered_on: Регистрация
label_activity: Дейност
label_overall_activity: Цялостна дейност
label_user_activity: "Активност на %{value}"
label_new: Нов
label_logged_as: Здравейте,
label_environment: Среда
@ -332,10 +506,13 @@ bg:
label_auth_source_new: Нов начин на оторизация
label_auth_source_plural: Начини на оторизация
label_subproject_plural: Подпроекти
label_subproject_new: Нов подпроект
label_and_its_subprojects: "%{value} и неговите подпроекти"
label_min_max_length: Минимална - максимална дължина
label_list: Списък
label_date: Дата
label_integer: Целочислен
label_float: Дробно
label_boolean: Чекбокс
label_string: Текст
label_text: Дълъг текст
@ -350,6 +527,7 @@ bg:
label_attachment_new: Нов файл
label_attachment_delete: Изтриване
label_attachment_plural: Файлове
label_file_added: Добавен файл
label_report: Справка
label_report_plural: Справки
label_news: Новини
@ -357,11 +535,13 @@ bg:
label_news_plural: Новини
label_news_latest: Последни новини
label_news_view_all: Виж всички
label_news_added: Добавена новина
label_settings: Настройки
label_overview: Общ изглед
label_version: Версия
label_version_new: Нова версия
label_version_plural: Версии
label_close_versions: Затваряне на завършените версии
label_confirmation: Одобрение
label_export_to: Експорт към
label_read: Read...
@ -388,6 +568,7 @@ bg:
label_new_statuses_allowed: Позволени състояния
label_all: всички
label_none: никакви
label_nobody: никой
label_next: Следващ
label_previous: Предишен
label_used_by: Използва се от
@ -419,9 +600,19 @@ bg:
label_not_equals: не е
label_in_less_than: след по-малко от
label_in_more_than: след повече от
label_greater_or_equal: ">="
label_less_or_equal: <=
label_in: в следващите
label_today: днес
label_all_time: всички
label_yesterday: вчера
label_this_week: тази седмица
label_last_week: последната седмица
label_last_n_days: "последните %{count} дни"
label_this_month: текущия месец
label_last_month: последния месец
label_this_year: текущата година
label_date_range: Период
label_less_than_ago: преди по-малко от
label_more_than_ago: преди повече от
label_ago: преди
@ -429,17 +620,25 @@ bg:
label_not_contains: не съдържа
label_day_plural: дни
label_repository: Хранилище
label_repository_plural: Хранилища
label_browse: Разглеждане
label_modification: "%{count} промяна"
label_modification_plural: "%{count} промени"
label_branch: работен вариант
label_tag: Версия
label_revision: Ревизия
label_revision_plural: Ревизии
label_revision_id: Ревизия %{value}
label_associated_revisions: Асоциирани ревизии
label_added: добавено
label_modified: променено
label_copied: копирано
label_renamed: преименувано
label_deleted: изтрито
label_latest_revision: Последна ревизия
label_latest_revision_plural: Последни ревизии
label_view_revisions: Виж ревизиите
label_view_all_revisions: Разглеждане на всички ревизии
label_max_size: Максимална големина
label_sort_highest: Премести най-горе
label_sort_higher: Премести по-горе
@ -465,6 +664,7 @@ bg:
label_changes_details: Подробни промени
label_issue_tracking: Тракинг
label_spent_time: Отделено време
label_overall_spent_time: Общо употребено време
label_f_hour: "%{value} час"
label_f_hour_plural: "%{value} часа"
label_time_tracking: Отделяне на време
@ -486,6 +686,7 @@ bg:
label_relation_delete: Изтриване на релация
label_relates_to: свързана със
label_duplicates: дублира
label_duplicated_by: дублирана от
label_blocks: блокира
label_blocked_by: блокирана от
label_precedes: предшества
@ -501,10 +702,13 @@ bg:
label_board: Форум
label_board_new: Нов форум
label_board_plural: Форуми
label_board_locked: Заключена
label_board_sticky: Sticky
label_topic_plural: Теми
label_message_plural: Съобщения
label_message_last: Последно съобщение
label_message_new: Нова тема
label_message_posted: Добавено съобщение
label_reply_plural: Отговори
label_send_information: Изпращане на информацията до потребителя
label_year: Година
@ -515,11 +719,80 @@ bg:
label_language_based: В зависимост от езика
label_sort_by: "Сортиране по %{value}"
label_send_test_email: Изпращане на тестов e-mail
label_feeds_access_key: RSS access ключ
label_missing_feeds_access_key: Липсващ RSS ключ за достъп
label_feeds_access_key_created_on: "%{value} от създаването на RSS ключа"
label_module_plural: Модули
label_added_time_by: "Публикувана от %{author} преди %{age}"
label_updated_time_by: "Обновена от %{author} преди %{age}"
label_updated_time: "Обновена преди %{value}"
label_jump_to_a_project: Проект...
label_file_plural: Файлове
label_changeset_plural: Ревизии
label_default_columns: По подразбиране
label_no_change_option: (Без промяна)
label_bulk_edit_selected_issues: Редактиране на задачи
label_theme: Тема
label_default: По подразбиране
label_search_titles_only: Само в заглавията
label_user_mail_option_all: "За всяко събитие в проектите, в които участвам"
label_user_mail_option_selected: "За всички събития само в избраните проекти..."
label_user_mail_option_none: "Само за наблюдавани или в които участвам (автор или назначени на мен)"
label_user_mail_option_only_my_events: Само за неща, в които съм включен/а
label_user_mail_option_only_assigned: Само за неща, назначени на мен
label_user_mail_option_only_owner: Само за неща, на които аз съм собственик
label_user_mail_no_self_notified: "Не искам известия за извършени от мен промени"
label_registration_activation_by_email: активиране на профила по email
label_registration_manual_activation: ръчно активиране
label_registration_automatic_activation: автоматично активиране
label_display_per_page: "На страница по: %{value}"
label_age: Възраст
label_change_properties: Промяна на настройки
label_general: Основни
label_more: Още
label_scm: SCM (Система за контрол на версиите)
label_plugins: Плъгини
label_ldap_authentication: LDAP оторизация
label_downloads_abbr: D/L
label_optional_description: Незадължително описание
label_add_another_file: Добавяне на друг файл
label_preferences: Предпочитания
label_chronological_order: Хронологичен ред
label_reverse_chronological_order: Обратен хронологичен ред
label_planning: Планиране
label_incoming_emails: Входящи e-mail-и
label_generate_key: Генериране на ключ
label_issue_watchers: Наблюдатели
label_example: Пример
label_display: Display
label_sort: Сортиране
label_ascending: Нарастващ
label_descending: Намаляващ
label_date_from_to: От %{start} до %{end}
label_wiki_content_added: Wiki страница беше добавена
label_wiki_content_updated: Wiki страница беше обновена
label_group: Група
label_group_plural: Групи
label_group_new: Нова група
label_time_entry_plural: Използвано време
label_version_sharing_none: Не споделен
label_version_sharing_descendants: С подпроекти
label_version_sharing_hierarchy: С проектна йерархия
label_version_sharing_tree: С дърво на проектите
label_version_sharing_system: С всички проекти
label_update_issue_done_ratios: Обновяване на процента на завършените задачи
label_copy_source: Източник
label_copy_target: Цел
label_copy_same_as_target: Също като целта
label_display_used_statuses_only: Показване само на състоянията, използвани от този тракер
label_api_access_key: API ключ за достъп
label_missing_api_access_key: Липсващ API ключ
label_api_access_key_created_on: API ключ за достъп е създаден преди %{value}
label_profile: Профил
label_subtask_plural: Подзадачи
label_project_copy_notifications: Изпращане на Send e-mail известия по време на копирането на проекта
label_principal_search: "Търсене на потребител или група:"
label_user_search: "Търсене на потребител:"
button_login: Вход
button_submit: Прикачване
@ -528,8 +801,10 @@ bg:
button_uncheck_all: Изчистване на всички
button_delete: Изтриване
button_create: Създаване
button_create_and_continue: Създаване и продължаване
button_test: Тест
button_edit: Редакция
button_edit_associated_wikipage: "Редактиране на асоциираната Wiki страница: %{page_title}"
button_add: Добавяне
button_change: Промяна
button_apply: Приложи
@ -540,6 +815,7 @@ bg:
button_list: Списък
button_view: Преглед
button_move: Преместване
button_move_and_follow: Преместване и продължаване
button_back: Назад
button_cancel: Отказ
button_activate: Активация
@ -553,26 +829,49 @@ bg:
button_unarchive: Разархивиране
button_reset: Генериране наново
button_rename: Преименуване
button_change_password: Промяна на парола
button_copy: Копиране
button_copy_and_follow: Копиране и продължаване
button_annotate: Анотация
button_update: Обновяване
button_configure: Конфигуриране
button_quote: Цитат
button_duplicate: Дублиране
button_show: Показване
status_active: активен
status_registered: регистриран
status_locked: заключен
version_status_open: отворена
version_status_locked: заключена
version_status_closed: затворена
field_active: Активен
text_select_mail_notifications: Изберете събития за изпращане на e-mail.
text_regexp_info: пр. ^[A-Z0-9]+$
text_min_max_length_info: 0 - без ограничения
text_project_destroy_confirmation: Сигурни ли сте, че искате да изтриете проекта и данните в него?
text_subprojects_destroy_warning: "Неговите подпроекти: %{value} също ще бъдат изтрити."
text_workflow_edit: Изберете роля и тракер за да редактирате работния процес
text_are_you_sure: Сигурни ли сте?
text_tip_task_begin_day: задача започваща този ден
text_tip_task_end_day: задача завършваща този ден
text_tip_task_begin_end_day: задача започваща и завършваща този ден
text_are_you_sure_with_children: Изтриване на задачата и нейните подзадачи?
text_journal_changed: "%{label} променен от %{old} на %{new}"
text_journal_set_to: "%{label} установен на %{value}"
text_journal_deleted: "%{label} изтрит (%{old})"
text_journal_added: "Добавено %{label} %{value}"
text_tip_issue_begin_day: задача, започваща този ден
text_tip_issue_end_day: задача, завършваща този ден
text_tip_issue_begin_end_day: задача, започваща и завършваща този ден
text_project_identifier_info: 'Позволени са малки букви (a-z), цифри и тирета.<br />Невъзможна промяна след запис.'
text_caracters_maximum: "До %{count} символа."
text_caracters_minimum: "Минимум %{count} символа."
text_length_between: "От %{min} до %{max} символа."
text_tracker_no_workflow: Няма дефиниран работен процес за този тракер
text_unallowed_characters: Непозволени символи
text_comma_separated: Позволено е изброяване (с разделител запетая).
text_line_separated: Позволени са много стойности (по едно на ред).
text_issues_ref_in_commit_messages: Отбелязване и приключване на задачи от ревизии
text_issue_added: "Публикувана е нова задача с номер %{id} (от %{author})."
text_issue_updated: "Задача %{id} е обновена (от %{author})."
@ -580,6 +879,35 @@ bg:
text_issue_category_destroy_question: "Има задачи (%{count}) обвързани с тази категория. Какво ще изберете?"
text_issue_category_destroy_assignments: Премахване на връзките с категорията
text_issue_category_reassign_to: Преобвързване с категория
text_user_mail_option: "За неизбраните проекти, ще получавате известия само за наблюдавани дейности или в които участвате (т.е. автор или назначени на мен)."
text_no_configuration_data: "Все още не са конфигурирани Роли, тракери, състояния на задачи и работен процес.\nСтрого се препоръчва зареждането на примерната информация. Веднъж заредена ще имате възможност да я редактирате."
text_load_default_configuration: Зареждане на примерна информация
text_status_changed_by_changeset: "Приложено с ревизия %{value}."
text_time_logged_by_changeset: Приложено в ревизия %{value}.
text_issues_destroy_confirmation: 'Сигурни ли сте, че искате да изтриете избраните задачи?'
text_select_project_modules: 'Изберете активните модули за този проект:'
text_default_administrator_account_changed: Сменен фабричния администраторски профил
text_file_repository_writable: Възможност за писане в хранилището с файлове
text_plugin_assets_writable: Папката на приставките е разрешена за запис
text_rmagick_available: Наличен RMagick (по избор)
text_destroy_time_entries_question: "%{hours} часа са отделени на задачите, които искате да изтриете. Какво избирате?"
text_destroy_time_entries: Изтриване на отделеното време
text_assign_time_entries_to_project: Прехвърляне на отделеното време към проект
text_reassign_time_entries: 'Прехвърляне на отделеното време към задача:'
text_user_wrote: "%{value} написа:"
text_enumeration_destroy_question: "%{count} обекта са свързани с тази стойност."
text_enumeration_category_reassign_to: 'Пресвържете ги към тази стойност:'
text_email_delivery_not_configured: "Изпращането на e-mail-и не е конфигурирано и известията не са разрешени.\nКонфигурирайте вашия SMTP сървър в config/configuration.yml и рестартирайте Redmine, за да ги разрешите."
text_repository_usernames_mapping: "Изберете или променете потребителите в Redmine, съответстващи на потребителите в дневника на хранилището (repository).\nПотребителите с еднакви имена в Redmine и хранилищата се съвместяват автоматично."
text_diff_truncated: '... Този diff не е пълен, понеже е надхвърля максималния размер, който може да бъде показан.'
text_custom_field_possible_values_info: 'Една стойност на ред'
text_wiki_page_destroy_question: Тази страница има %{descendants} страници деца и descendant(s). Какво желаете да правите?
text_wiki_page_nullify_children: Запазване на тези страници като коренни страници
text_wiki_page_destroy_children: Изтриване на страниците деца и всички техни descendants
text_wiki_page_reassign_children: Преназначаване на страниците деца на тази родителска страница
text_own_membership_delete_confirmation: "Вие сте на път да премахнете някои или всички ваши разрешения и е възможно след това да не можете да редактирате този проект.\nСигурен ли сте, че искате да продължите?"
text_zoom_in: Увеличаване
text_zoom_out: Намаляване
default_role_manager: Мениджър
default_role_developer: Разработчик
@ -606,329 +934,5 @@ bg:
enumeration_issue_priorities: Приоритети на задачи
enumeration_doc_categories: Категории документи
enumeration_activities: Дейности (time tracking)
label_file_plural: Файлове
label_changeset_plural: Ревизии
field_column_names: Колони
label_default_columns: По подразбиране
setting_issue_list_default_columns: Показвани колони по подразбиране
setting_repositories_encodings: Кодови таблици
notice_no_issue_selected: "Няма избрани задачи."
label_bulk_edit_selected_issues: Редактиране на задачи
label_no_change_option: (Без промяна)
notice_failed_to_save_issues: "Неуспешен запис на %{count} задачи от %{total} избрани: %{ids}."
label_theme: Тема
label_default: По подразбиране
label_search_titles_only: Само в заглавията
label_nobody: никой
button_change_password: Промяна на парола
text_user_mail_option: "За неизбраните проекти, ще получавате известия само за наблюдавани дейности или в които участвате (т.е. автор или назначени на мен)."
label_user_mail_option_selected: "За всички събития само в избраните проекти..."
label_user_mail_option_all: "За всяко събитие в проектите, в които участвам"
label_user_mail_option_none: "Само за наблюдавани или в които участвам (автор или назначени на мен)"
setting_emails_footer: Подтекст за e-mail
label_float: Дробно
button_copy: Копиране
mail_body_account_information_external: "Можете да използвате вашия %{value} профил за вход."
mail_body_account_information: Информацията за профила ви
setting_protocol: Протокол
label_user_mail_no_self_notified: "Не искам известия за извършени от мен промени"
setting_time_format: Формат на часа
label_registration_activation_by_email: активиране на профила по email
mail_subject_account_activation_request: "Заявка за активиране на профил в %{value}"
mail_body_account_activation_request: "Има новорегистриран потребител (%{value}), очакващ вашето одобрение:"
label_registration_automatic_activation: автоматично активиране
label_registration_manual_activation: ръчно активиране
notice_account_pending: "Профилът Ви е създаден и очаква одобрение от администратор."
field_time_zone: Часова зона
text_caracters_minimum: "Минимум %{count} символа."
setting_bcc_recipients: Получатели на скрито копие (bcc)
button_annotate: Анотация
label_issues_by: "Задачи по %{value}"
field_searchable: С възможност за търсене
label_display_per_page: "На страница по: %{value}"
setting_per_page_options: Опции за страниране
label_age: Възраст
notice_default_data_loaded: Примерната информацията е успешно заредена.
text_load_default_configuration: Зареждане на примерна информация
text_no_configuration_data: "Все още не са конфигурирани Роли, тракери, състояния на задачи и работен процес.\nСтрого се препоръчва зареждането на примерната информация. Веднъж заредена ще имате възможност да я редактирате."
error_can_t_load_default_data: "Грешка при зареждане на примерната информация: %{value}"
button_update: Обновяване
label_change_properties: Промяна на настройки
label_general: Основни
label_repository_plural: Хранилища
label_associated_revisions: Асоциирани ревизии
setting_user_format: Потребителски формат
text_status_changed_by_changeset: "Приложено с ревизия %{value}."
label_more: Още
text_issues_destroy_confirmation: 'Сигурни ли сте, че искате да изтриете избраните задачи?'
label_scm: SCM (Система за контрол на кода)
text_select_project_modules: 'Изберете активните модули за този проект:'
label_issue_added: Добавена задача
label_issue_updated: Обновена задача
label_document_added: Добавен документ
label_message_posted: Добавено съобщение
label_file_added: Добавен файл
label_news_added: Добавена новина
project_module_boards: Форуми
project_module_issue_tracking: Тракинг
project_module_wiki: Wiki
project_module_files: Файлове
project_module_documents: Документи
project_module_repository: Хранилище
project_module_news: Новини
project_module_time_tracking: Отделяне на време
text_file_repository_writable: Възможност за писане в хранилището с файлове
text_default_administrator_account_changed: Сменен фабричния администраторски профил
text_rmagick_available: Наличен RMagick (по избор)
button_configure: Конфигуриране
label_plugins: Плъгини
label_ldap_authentication: LDAP оторизация
label_downloads_abbr: D/L
label_this_month: текущия месец
label_last_n_days: "последните %{count} дни"
label_all_time: всички
label_this_year: текущата година
label_date_range: Период
label_last_week: последната седмица
label_yesterday: вчера
label_last_month: последния месец
label_add_another_file: Добавяне на друг файл
label_optional_description: Незадължително описание
text_destroy_time_entries_question: "%{hours} часа са отделени на задачите, които искате да изтриете. Какво избирате?"
error_issue_not_found_in_project: 'Задачата не е намерена или не принадлежи на този проект'
text_assign_time_entries_to_project: Прехвърляне на отделеното време към проект
text_destroy_time_entries: Изтриване на отделеното време
text_reassign_time_entries: 'Прехвърляне на отделеното време към задача:'
setting_activity_days_default: Брой дни показвани на таб Дейност
label_chronological_order: Хронологичен ред
field_comments_sorting: Сортиране на коментарите
label_reverse_chronological_order: Обратен хронологичен ред
label_preferences: Предпочитания
setting_display_subprojects_issues: Показване на подпроектите в проектите по подразбиране
label_overall_activity: Цялостна дейност
setting_default_projects_public: Новите проекти са публични по подразбиране
error_scm_annotate: "Обектът не съществува или не може да бъде анотиран."
label_planning: Планиране
text_subprojects_destroy_warning: "Неговите подпроекти: %{value} също ще бъдат изтрити."
label_and_its_subprojects: "%{value} и неговите подпроекти"
mail_body_reminder: "%{count} задачи, назначени на вас са с краен срок в следващите %{days} дни:"
mail_subject_reminder: "%{count} задачи с краен срок с следващите %{days} дни"
text_user_wrote: "%{value} написа:"
label_duplicated_by: дублирана от
setting_enabled_scm: Разрешена SCM
text_enumeration_category_reassign_to: 'Пресвържете ги към тази стойност:'
text_enumeration_destroy_question: "%{count} обекта са свързани с тази стойност."
label_incoming_emails: Входящи e-mail-и
label_generate_key: Генериране на ключ
setting_mail_handler_api_enabled: Разрешаване на WS за входящи e-mail-и
setting_mail_handler_api_key: API ключ
text_email_delivery_not_configured: "Изпращането на e-mail-и не е конфигурирано и известията не са разрешени.\nКонфигурирайте вашия SMTP сървър в config/email.yml и рестартирайте Redmine, за да ги разрешите."
field_parent_title: Родителска страница
label_issue_watchers: Наблюдатели
setting_commit_logs_encoding: Кодова таблица на съобщенията при поверяване
button_quote: Цитат
setting_sequential_project_identifiers: Генериране на последователни проектни идентификатори
notice_unable_delete_version: Невъзможност за изтриване на версия
label_renamed: преименувано
label_copied: копирано
setting_plain_text_mail: само чист текст (без HTML)
permission_view_files: Разглеждане на файлове
permission_edit_issues: Редактиране на задачи
permission_edit_own_time_entries: Редактиране на собствените time logs
permission_manage_public_queries: Управление на публичните заявки
permission_add_issues: Добавяне на задачи
permission_log_time: Log spent time
permission_view_changesets: Разглеждане на changesets
permission_view_time_entries: Разглеждане на изразходваното време
permission_manage_versions: Управление на версиите
permission_manage_wiki: Управление на wiki
permission_manage_categories: Управление на категориите задачи
permission_protect_wiki_pages: Заключване на wiki страници
permission_comment_news: Коментиране на новини
permission_delete_messages: Изтриване на съобщения
permission_select_project_modules: Избор на проектни модули
permission_manage_documents: Управление на документи
permission_edit_wiki_pages: Редактиране на wiki страници
permission_add_issue_watchers: Добавяне на наблюдатели
permission_view_gantt: Разглеждане на мрежов график
permission_move_issues: Преместване на задачи
permission_manage_issue_relations: Управление на връзките между задачите
permission_delete_wiki_pages: Изтриване на wiki страници
permission_manage_boards: Управление на boards
permission_delete_wiki_pages_attachments: Изтриване на прикачени файлове
permission_view_wiki_edits: Разглеждане на wiki история
permission_add_messages: Публикуване на съобщения
permission_view_messages: Разглеждане на съобщения
permission_manage_files: Управление на файлове
permission_edit_issue_notes: Редактиране на бележки
permission_manage_news: Управление на новини
permission_view_calendar: Разглеждане на календари
permission_manage_members: Управление на членовете (на екип)
permission_edit_messages: Редактиране на съобщения
permission_delete_issues: Изтриване на задачи
permission_view_issue_watchers: Разглеждане на списък с наблюдатели
permission_manage_repository: Управление на хранилища
permission_commit_access: Поверяване
permission_browse_repository: Разглеждане на хранилища
permission_view_documents: Разглеждане на документи
permission_edit_project: Редактиране на проект
permission_add_issue_notes: Добаване на бележки
permission_save_queries: Запис на запитвания (queries)
permission_view_wiki_pages: Разглеждане на wiki
permission_rename_wiki_pages: Преименуване на wiki страници
permission_edit_time_entries: Редактиране на time logs
permission_edit_own_issue_notes: Редактиране на собствени бележки
setting_gravatar_enabled: Използване на портребителски икони от Gravatar
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."
permission_edit_own_messages: Редактиране на собствени съобщения
permission_delete_own_messages: Изтриване на собствени съобщения
label_user_activity: "Активност на %{value}"
label_updated_time_by: "Обновена от %{author} преди %{age}"
text_diff_truncated: '... Този diff не е пълен, понеже е надхвърля максималния размер, който може да бъде показан.'
setting_diff_max_lines_displayed: Максимален брой показани diff редове
text_plugin_assets_writable: Папката на приставките е разрешена за запис
warning_attachments_not_saved: "%{count} файла не бяха записани."
button_create_and_continue: Създаване и продължаване
text_custom_field_possible_values_info: 'Една стойност на ред'
label_display: Display
field_editable: Editable
setting_repository_log_display_limit: Максимален брой на показванете ревизии в лог файла
setting_file_max_size_displayed: Максимален размер на текстовите файлове, показвани inline
field_watcher: Наблюдател
setting_openid: Рарешаване на OpenID вход и регистрация
field_identity_url: OpenID URL
label_login_with_open_id_option: или вход чрез OpenID
field_content: Съдържание
label_descending: Намаляващ
label_sort: Сортиране
label_ascending: Нарастващ
label_date_from_to: От %{start} до %{end}
label_greater_or_equal: ">="
label_less_or_equal: <=
text_wiki_page_destroy_question: Тази страница има %{descendants} страници деца и descendant(s). Какво желаете да правите?
text_wiki_page_reassign_children: Преназначаване на страниците деца на тази родителска страница
text_wiki_page_nullify_children: Запазване на тези страници като коренни страници
text_wiki_page_destroy_children: Изтриване на страниците деца и всички техни descendants
setting_password_min_length: Минимална дължина на парола
field_group_by: Групиране на резултатите по
mail_subject_wiki_content_updated: "Wiki страницата '%{id}' не беше обновена"
label_wiki_content_added: Wiki страница беше добавена
mail_subject_wiki_content_added: "Wiki страницата '%{id}' беше добавена"
mail_body_wiki_content_added: Wiki страницата '%{id}' беше добавена от %{author}.
label_wiki_content_updated: Wiki страница беше обновена
mail_body_wiki_content_updated: Wiki страницата '%{id}' беше обновена от %{author}.
permission_add_project: Създаване на проект
setting_new_project_user_role_id: Роля, давана на потребител, създаващ проекти, който не е администратор
label_view_all_revisions: Разглеждане на всички ревизии
label_tag: Версия
label_branch: работен вариант
error_no_tracker_in_project: Няма асоциирани тракери с този проект. Проверете настройките на проекта.
error_no_default_issue_status: Няма установено подразбиращо се състояние за задачите. Моля проверете вашата конфигурация (Вижте "Администрация -> Състояния на задачи").
text_journal_changed: "%{label} променен от %{old} на %{new}"
text_journal_set_to: "%{label} установен на %{value}"
text_journal_deleted: "%{label} изтрит (%{old})"
label_group_plural: Групи
label_group: Група
label_group_new: Нова група
label_time_entry_plural: Използвано време
text_journal_added: "Добавено %{label} %{value}"
field_active: Активен
enumeration_system_activity: Системна активност
permission_delete_issue_watchers: Изтриване на наблюдатели
version_status_closed: затворена
version_status_locked: заключена
version_status_open: отворена
error_can_not_reopen_issue_on_closed_version: Задача, асоциирана със затворена версия не може да бъде отворена отново
label_user_anonymous: Анонимен
button_move_and_follow: Преместване и продължаване
setting_default_projects_modules: Активирани модули по подразбиране за нов проект
setting_gravatar_default: Подразбиращо се изображение от Gravatar
field_sharing: Sharing
label_version_sharing_hierarchy: С проектна йерархия
label_version_sharing_system: С всички проекти
label_version_sharing_descendants: С подпроекти
label_version_sharing_tree: С дърво на проектите
label_version_sharing_none: Не споделен
error_can_not_archive_project: Този проект не може да бъде архивиран
button_duplicate: Дублиране
button_copy_and_follow: Копиране и продължаване
label_copy_source: Източник
setting_issue_done_ratio: Изчисление на процента на готови задачи с
setting_issue_done_ratio_issue_status: Използване на състоянието на задачите
error_issue_done_ratios_not_updated: Процентът на завършените задачи не е обновен.
error_workflow_copy_target: Моля изберете тракер(и) и роля (роли).
setting_issue_done_ratio_issue_field: Използване на поле '% Прогрес'
label_copy_same_as_target: Също като целта
label_copy_target: Цел
notice_issue_done_ratios_updated: Обновен процент на завършените задачи.
error_workflow_copy_source: Моля изберете source тракер или роля
label_update_issue_done_ratios: Обновяване на процента на завършените задачи
setting_start_of_week: Първи ден на седмицата
permission_view_issues: Разглеждане на задачите
label_display_used_statuses_only: Показване само на състоянията, използвани от този тракер
label_revision_id: Ревизия %{value}
label_api_access_key: API ключ за достъп
label_api_access_key_created_on: API ключ за достъп е създаден преди %{value}
label_feeds_access_key: RSS access ключ
notice_api_access_key_reseted: Вашият API ключ за достъп беше изчистен.
setting_rest_api_enabled: Разрешаване на REST web сървис
label_missing_api_access_key: Липсващ API ключ
label_missing_feeds_access_key: Липсващ RSS ключ за достъп
button_show: Показване
text_line_separated: Позволени са много стойности (по едно на ред).
setting_mail_handler_body_delimiters: Отрязване на e-mail-ите след един от тези редове
permission_add_subprojects: Създаване на подпроекти
label_subproject_new: Нов подпроект
text_own_membership_delete_confirmation: |-
Вие сте на път да премахнете някои или всички ваши разрешения и е възможно след това на да не можете да редатирате този проект.
Сигурен ли сте, че искате да продължите?
label_close_versions: Затваряне на завършените версии
label_board_sticky: Sticky
label_board_locked: Заключена
permission_export_wiki_pages: Експорт на wiki страници
setting_cache_formatted_text: Cache formatted text
permission_manage_project_activities: Управление на дейностите на проекта
error_unable_delete_issue_status: Невъзможност за изтриване на състояние на задача
label_profile: Профил
permission_manage_subtasks: Управление на подзадачите
field_parent_issue: Родителска задача
label_subtask_plural: Подзадачи
label_project_copy_notifications: Изпращане на Send e-mail известия по време на копирането на проекта
error_can_not_delete_custom_field: Невъзможност за изтриване на потребителско поле
error_unable_to_connect: Невъзможност за свързване с (%{value})
error_can_not_remove_role: Тази роля се използва и не може да бъде изтрита.
error_can_not_delete_tracker: Този тракер съдържа задачи и не може да бъде изтрит.
field_principal: Principal
label_my_page_block: Блокове в личната страница
notice_failed_to_save_members: "Невъзможност за запис на член(ове): %{errors}."
text_zoom_out: Намаляване
text_zoom_in: Увеличаване
notice_unable_delete_time_entry: Невъзможност за изтриване на запис на time log.
label_overall_spent_time: Общо употребено време
field_time_entries: Log time
notice_not_authorized_archived_project: Проектът, който се опитвате да видите е архивиран.
text_tip_issue_end_day: задача, завършваща този ден
field_text: Текстово поле
label_user_mail_option_only_owner: Само за неща, на които аз съм собственик
field_member_of_group: Член на група
project_module_gantt: Мрежов график
text_are_you_sure_with_children: Изтриване на задачата и нейните подзадачи?
text_tip_issue_begin_end_day: задача, започваща и завършваща този ден
setting_default_notification_option: Подразбиращ се начин за известяване
project_module_calendar: Календар
label_user_mail_option_only_my_events: Само за неща, в които съм включен/а
text_tip_issue_begin_day: задача, започваща този ден
label_user_mail_option_only_assigned: Само за неща, назначени на мен
button_edit_associated_wikipage: "Редактиране на асоциираната Wiki страница: %{page_title}"
field_assigned_to_role: Assignee's role
field_start_date: Начална дата
label_principal_search: "Търсене на потребител или група:"
label_user_search: "Търсене на потребител:"
field_visible: Видим
setting_emails_header: Emails header
setting_commit_logtime_activity_id: Дейност при отчитане на работното време
text_time_logged_by_changeset: Приложено в ревизия %{value}.
setting_commit_logtime_enabled: Разрешаване на отчитането на работното време
notice_gantt_chart_truncated: Мрежовият график е съкратен, понеже броят на обектите, които могат да бъдат показани е твърде голям (%{max})
setting_gantt_items_limit: Максимален брой обекти, които да се показват в мрежов график

View File

@ -787,7 +787,7 @@ bs:
text_user_wrote: "%{value} je napisao/la:"
text_enumeration_destroy_question: "Za %{count} objekata je dodjeljenja ova vrijednost."
text_enumeration_category_reassign_to: 'Ponovo im dodjeli ovu vrijednost:'
text_email_delivery_not_configured: "Email dostava nije konfiguraisana, notifikacija je onemogućena.\nKonfiguriši SMTP server u config/email.yml i restartuj aplikaciju nakon toga."
text_email_delivery_not_configured: "Email dostava nije konfiguraisana, notifikacija je onemogućena.\nKonfiguriši SMTP server u config/configuration.yml i restartuj aplikaciju nakon toga."
text_repository_usernames_mapping: "Odaberi ili ispravi redmine korisnika mapiranog za svako korisničko ima nađeno u logu repozitorija.\nKorisnici sa istim imenom u redmineu i u repozitoruju se automatski mapiraju."
text_diff_truncated: '... Ovaj prikaz razlike je odsječen pošto premašuje maksimalnu veličinu za prikaz'
text_custom_field_possible_values_info: 'Jedna linija za svaku vrijednost'

View File

@ -880,7 +880,7 @@ ca:
text_user_wrote: "%{value} va escriure:"
text_enumeration_destroy_question: "%{count} objectes estan assignats a aquest valor."
text_enumeration_category_reassign_to: "Torna a assignar-los a aquest valor:"
text_email_delivery_not_configured: "El lliurament per correu electrònic no està configurat i les notificacions estan inhabilitades.\nConfigureu el servidor SMTP a config/email.yml i reinicieu l'aplicació per habilitar-lo."
text_email_delivery_not_configured: "El lliurament per correu electrònic no està configurat i les notificacions estan inhabilitades.\nConfigureu el servidor SMTP a config/configuration.yml i reinicieu l'aplicació per habilitar-lo."
text_repository_usernames_mapping: "Seleccioneu l'assignació entre els usuaris del Redmine i cada nom d'usuari trobat al dipòsit.\nEls usuaris amb el mateix nom d'usuari o correu del Redmine i del dipòsit s'assignaran automàticament."
text_diff_truncated: "... Aquestes diferències s'han trucat perquè excedeixen la mida màxima que es pot mostrar."
text_custom_field_possible_values_info: "Una línia per a cada valor"

View File

@ -546,7 +546,7 @@ cs:
label_relation_delete: Odstranit souvislost
label_relates_to: související s
label_duplicates: duplicity
label_blocks: bloků
label_blocks: blokuje
label_blocked_by: zablokován
label_precedes: předchází
label_follows: následuje
@ -729,7 +729,7 @@ cs:
label_generate_key: Generovat klíč
setting_mail_handler_api_enabled: Povolit WS pro příchozí e-maily
setting_mail_handler_api_key: API klíč
text_email_delivery_not_configured: "Doručování e-mailů není nastaveno a odesílání notifikací je zakázáno.\nNastavte Váš SMTP server v souboru config/email.yml a restartujte aplikaci."
text_email_delivery_not_configured: "Doručování e-mailů není nastaveno a odesílání notifikací je zakázáno.\nNastavte Váš SMTP server v souboru config/configuration.yml a restartujte aplikaci."
field_parent_title: Rodičovská stránka
label_issue_watchers: Sledování
setting_commit_logs_encoding: Kódování zpráv při commitu

View File

@ -753,7 +753,7 @@ da:
setting_sequential_project_identifiers: Generér sekventielle projekt-identifikatorer
setting_plain_text_mail: Emails som almindelig tekst (ingen HTML)
field_parent_title: Siden over
text_email_delivery_not_configured: "Email-afsendelse er ikke indstillet og notifikationer er defor slået fra.\nKonfigurér din SMTP server i config/email.yml og genstart applikationen for at aktivere email-afsendelse."
text_email_delivery_not_configured: "Email-afsendelse er ikke indstillet og notifikationer er defor slået fra.\nKonfigurér din SMTP server i config/configuration.yml og genstart applikationen for at aktivere email-afsendelse."
permission_protect_wiki_pages: Beskyt wiki sider
permission_manage_documents: Administrér dokumenter
permission_add_issue_watchers: Tilføj overvågere

View File

@ -898,7 +898,7 @@ de:
text_user_wrote: "%{value} schrieb:"
text_enumeration_destroy_question: "%{count} Objekt(e) sind diesem Wert zugeordnet."
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/configuration.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_diff_truncated: '... Dieser Diff wurde abgeschnitten, weil er die maximale Anzahl anzuzeigender Zeilen überschreitet.'
text_custom_field_possible_values_info: 'Eine Zeile pro Wert'

View File

@ -798,7 +798,7 @@ el:
text_user_wrote: "%{value} έγραψε:"
text_enumeration_destroy_question: "%{count} αντικείμενα έχουν τεθεί σε αυτή την τιμή."
text_enumeration_category_reassign_to: 'Επανεκχώρηση τους στην παρούσα αξία:'
text_email_delivery_not_configured: "Δεν έχουν γίνει ρυθμίσεις παράδοσης email, και οι ειδοποιήσεις είναι απενεργοποιημένες.\nΔηλώστε τον εξυπηρετητή SMTP στο config/email.yml και κάντε επανακκίνηση την εφαρμογή για να τις ρυθμίσεις."
text_email_delivery_not_configured: "Δεν έχουν γίνει ρυθμίσεις παράδοσης email, και οι ειδοποιήσεις είναι απενεργοποιημένες.\nΔηλώστε τον εξυπηρετητή SMTP στο config/configuration.yml και κάντε επανακκίνηση την εφαρμογή για να τις ρυθμίσεις."
text_repository_usernames_mapping: "Επιλέξτε ή ενημερώστε τον χρήστη Redmine που αντιστοιχεί σε κάθε όνομα χρήστη στο ιστορικό του αποθετηρίου.\nΧρήστες με το ίδιο όνομα χρήστη ή email στο Redmine και στο αποθετηρίο αντιστοιχίζονται αυτόματα."
text_diff_truncated: '... Αυτό το diff εχεί κοπεί επειδή υπερβαίνει το μέγιστο μέγεθος που μπορεί να προβληθεί.'
text_custom_field_possible_values_info: 'Μία γραμμή για κάθε τιμή'

View File

@ -864,7 +864,7 @@ en-GB:
text_user_wrote: "%{value} wrote:"
text_enumeration_destroy_question: "%{count} objects are assigned 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/configuration.yml and restart the application to enable them."
text_repository_usernames_mapping: "Select or update the Redmine user mapped to each username found in the repository log.\nUsers with the same Redmine and repository username or email are automatically mapped."
text_diff_truncated: '... This diff was truncated because it exceeds the maximum size that can be displayed.'
text_custom_field_possible_values_info: 'One line for each value'

View File

@ -897,7 +897,7 @@ en:
text_user_wrote: "%{value} wrote:"
text_enumeration_destroy_question: "%{count} objects are assigned 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/configuration.yml and restart the application to enable them."
text_repository_usernames_mapping: "Select or update the Redmine user mapped to each username found in the repository log.\nUsers with the same Redmine and repository username or email are automatically mapped."
text_diff_truncated: '... This diff was truncated because it exceeds the maximum size that can be displayed.'
text_custom_field_possible_values_info: 'One line for each value'

View File

@ -795,7 +795,7 @@ es:
text_destroy_time_entries: Borrar las horas
text_destroy_time_entries_question: Existen %{hours} 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: "Las notificaciones están desactivadas porque el servidor de correo no está configurado.\nConfigure el servidor de SMTP en config/email.yml y reinicie la aplicación para activar los cambios."
text_email_delivery_not_configured: "Las notificaciones están desactivadas porque el servidor de correo no está configurado.\nConfigure el servidor de SMTP en config/configuration.yml y reinicie la aplicación para activar los cambios."
text_enumeration_category_reassign_to: 'Reasignar al siguiente valor:'
text_enumeration_destroy_question: "%{count} objetos con este valor asignado."
text_file_repository_writable: Se puede escribir en el repositorio

View File

@ -859,7 +859,7 @@ eu:
text_user_wrote: "%{value}-(e)k idatzi zuen:"
text_enumeration_destroy_question: "%{count} objetu balio honetara esleituta daude."
text_enumeration_category_reassign_to: 'Beste balio honetara esleitu:'
text_email_delivery_not_configured: "Eposta bidalketa ez dago konfiguratuta eta jakinarazpenak ezgaituta daude.\nKonfiguratu zure SMTP zerbitzaria config/email.yml-n eta aplikazioa berrabiarazi hauek gaitzeko."
text_email_delivery_not_configured: "Eposta bidalketa ez dago konfiguratuta eta jakinarazpenak ezgaituta daude.\nKonfiguratu zure SMTP zerbitzaria config/configuration.yml-n eta aplikazioa berrabiarazi hauek gaitzeko."
text_repository_usernames_mapping: "Hautatu edo eguneratu Redmineko erabiltzailea biltegiko egunkarietan topatzen diren erabiltzaile izenekin erlazionatzeko.\nRedmine-n eta biltegian erabiltzaile izen edo eposta berdina duten erabiltzaileak automatikoki erlazionatzen dira."
text_diff_truncated: '... Diff hau moztua izan da erakus daitekeen tamaina maximoa gainditu duelako.'
text_custom_field_possible_values_info: 'Lerro bat balio bakoitzeko'

View File

@ -750,7 +750,7 @@ fi:
label_generate_key: Luo avain
setting_mail_handler_api_enabled: Ota käyttöön WS saapuville sähköposteille
setting_mail_handler_api_key: API avain
text_email_delivery_not_configured: "Sähköpostin jakelu ei ole määritelty ja sähköpostimuistutukset eivät ole käytössä.\nKonfiguroi sähköpostipalvelinasetukset (SMTP) config/email.yml tiedostosta ja uudelleenkäynnistä sovellus jotta asetukset astuvat voimaan."
text_email_delivery_not_configured: "Sähköpostin jakelu ei ole määritelty ja sähköpostimuistutukset eivät ole käytössä.\nKonfiguroi sähköpostipalvelinasetukset (SMTP) config/configuration.yml tiedostosta ja uudelleenkäynnistä sovellus jotta asetukset astuvat voimaan."
field_parent_title: Aloitussivu
label_issue_watchers: Tapahtuman seuraajat
button_quote: Vastaa

View File

@ -166,10 +166,10 @@ fr:
notice_successful_create: Création effectuée avec succès.
notice_successful_update: Mise à jour effectuée avec succès.
notice_successful_delete: Suppression effectuée avec succès.
notice_successful_connection: Connection réussie.
notice_successful_connection: Connexion réussie.
notice_file_not_found: "La page à laquelle vous souhaitez accéder n'existe pas ou a été supprimée."
notice_locking_conflict: Les données ont été mises à jour par un autre utilisateur. Mise à jour impossible.
notice_not_authorized: "Vous n'êtes pas autorisés à accéder à cette page."
notice_not_authorized: "Vous n'êtes pas autorisé à accéder à cette page."
notice_not_authorized_archived_project: Le projet auquel vous tentez d'accéder a été archivé.
notice_email_sent: "Un email a été envoyé à %{value}"
notice_email_error: "Erreur lors de l'envoi de l'email (%{value})"
@ -323,11 +323,11 @@ fr:
setting_text_formatting: Formatage du texte
setting_wiki_compression: Compression historique wiki
setting_feeds_limit: Limite du contenu des flux RSS
setting_default_projects_public: Définir les nouveaux projects comme publics par défaut
setting_default_projects_public: Définir les nouveaux projets comme publics par défaut
setting_autofetch_changesets: Récupération auto. des commits
setting_sys_api_enabled: Activer les WS pour la gestion des dépôts
setting_commit_ref_keywords: Mot-clés de référencement
setting_commit_fix_keywords: Mot-clés de résolution
setting_commit_ref_keywords: Mots-clés de référencement
setting_commit_fix_keywords: Mots-clés de résolution
setting_autologin: Autologin
setting_date_format: Format de date
setting_time_format: Format d'heure
@ -349,7 +349,7 @@ fr:
setting_gravatar_enabled: Afficher les Gravatar des utilisateurs
setting_diff_max_lines_displayed: Nombre maximum de lignes de diff affichées
setting_file_max_size_displayed: Taille maximum des fichiers texte affichés en ligne
setting_repository_log_display_limit: "Nombre maximum de revisions affichées sur l'historique d'un fichier"
setting_repository_log_display_limit: "Nombre maximum de révisions affichées sur l'historique d'un fichier"
setting_openid: "Autoriser l'authentification et l'enregistrement OpenID"
setting_password_min_length: Longueur minimum des mots de passe
setting_new_project_user_role_id: Rôle donné à un utilisateur non-administrateur qui crée un projet
@ -369,7 +369,7 @@ fr:
permission_add_subprojects: Créer des sous-projets
permission_edit_project: Modifier le projet
permission_select_project_modules: Choisir les modules
permission_manage_members: Gérer les members
permission_manage_members: Gérer les membres
permission_manage_versions: Gérer les versions
permission_manage_categories: Gérer les catégories de demandes
permission_view_issues: Voir les demandes
@ -859,7 +859,7 @@ fr:
text_issue_added: "La demande %{id} a été soumise par %{author}."
text_issue_updated: "La demande %{id} a été mise à jour par %{author}."
text_wiki_destroy_confirmation: Etes-vous sûr de vouloir supprimer ce wiki et tout son contenu ?
text_issue_category_destroy_question: "%{count} demandes sont affectées à cette catégories. Que voulez-vous faire ?"
text_issue_category_destroy_question: "%{count} demandes sont affectées à cette catégorie. Que voulez-vous faire ?"
text_issue_category_destroy_assignments: N'affecter les demandes à aucune autre catégorie
text_issue_category_reassign_to: Réaffecter les demandes à cette catégorie
text_user_mail_option: "Pour les projets non sélectionnés, vous recevrez seulement des notifications pour ce que vous surveillez ou à quoi vous participez (exemple: demandes dont vous êtes l'auteur ou la personne assignée)."
@ -880,7 +880,7 @@ fr:
text_user_wrote: "%{value} a écrit :"
text_enumeration_destroy_question: "Cette valeur est affectée à %{count} objets."
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/configuration.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_diff_truncated: '... Ce différentiel a été tronqué car il excède la taille maximale pouvant être affichée.'
text_custom_field_possible_values_info: 'Une ligne par valeur'

View File

@ -772,7 +772,7 @@ gl:
text_destroy_time_entries: Borrar as horas
text_destroy_time_entries_question: Existen %{hours} horas asignadas á petición que quere borrar. ¿Que quere facer ?
text_diff_truncated: '... Diferencia truncada por exceder o máximo tamaño visualizable.'
text_email_delivery_not_configured: "O envío de correos non está configurado, e as notificacións desactiváronse. \n Configure o servidor de SMTP en config/email.yml e reinicie a aplicación para activar os cambios."
text_email_delivery_not_configured: "O envío de correos non está configurado, e as notificacións desactiváronse. \n Configure o servidor de SMTP en config/configuration.yml e reinicie a aplicación para activar os cambios."
text_enumeration_category_reassign_to: 'Reasignar ó seguinte valor:'
text_enumeration_destroy_question: "%{count} obxectos con este valor asignado."
text_file_repository_writable: Pódese escribir no repositorio

View File

@ -889,7 +889,7 @@ he:
text_user_wrote: "%{value} כתב:"
text_enumeration_destroy_question: "%{count} אוביקטים מוצבים לערך זה."
text_enumeration_category_reassign_to: 'הצב מחדש לערך הזה:'
text_email_delivery_not_configured: 'לא נקבעה תצורה לשליחת דואר, וההתראות כבויות.\nקבע את תצורת שרת ה־SMTP בקובץ /etc/redmine/&lt;instance&gt;/email.yml והתחל את האפליקציה מחדש ע"מ לאפשר אותם.'
text_email_delivery_not_configured: 'לא נקבעה תצורה לשליחת דואר, וההתראות כבויות.\nקבע את תצורת שרת ה־SMTP בקובץ /etc/redmine/&lt;instance&gt;/configuration.yml והתחל את האפליקציה מחדש ע"מ לאפשר אותם.'
text_repository_usernames_mapping: "בחר או עדכן את משתמש Redmine הממופה לכל שם משתמש ביומן המאגר.\nמשתמשים בעלי שם או כתובת דואר זהה ב־Redmine ובמאגר ממופים באופן אוטומטי."
text_diff_truncated: '... השינויים עוברים את מספר השורות המירבי לתצוגה, ולכן הם קוצצו.'
text_custom_field_possible_values_info: שורה אחת לכל ערך

View File

@ -854,7 +854,7 @@ hr:
text_user_wrote: "%{value} je napisao/la:"
text_enumeration_destroy_question: "%{count} objekata je pridruženo toj vrijednosti."
text_enumeration_category_reassign_to: 'Premjesti ih ovoj vrijednosti:'
text_email_delivery_not_configured: "Email delivery is not configured, and notifications are disabled.\nConfigure your SMTP server in config/email.yml and restart the application to enable them."
text_email_delivery_not_configured: "Email delivery is not configured, and notifications are disabled.\nConfigure your SMTP server in config/configuration.yml and restart the application to enable them."
text_repository_usernames_mapping: "Select or update the Redmine user mapped to each username found in the repository log.\nUsers with the same Redmine and repository username or email are automatically mapped."
text_diff_truncated: '... Ovaj diff je odrezan zato što prelazi maksimalnu veličinu koja može biti prikazana.'
text_custom_field_possible_values_info: 'One line for each value'

View File

@ -748,7 +748,7 @@
label_generate_key: Kulcs generálása
setting_mail_handler_api_enabled: Web Service engedélyezése a beérkezett levelekhez
setting_mail_handler_api_key: API kulcs
text_email_delivery_not_configured: "Az E-mail küldés nincs konfigurálva, és az értesítések ki vannak kapcsolva.\nÁllítsd be az SMTP szervert a config/email.yml fájlban és indítsd újra az alkalmazást, hogy érvénybe lépjen."
text_email_delivery_not_configured: "Az E-mail küldés nincs konfigurálva, és az értesítések ki vannak kapcsolva.\nÁllítsd be az SMTP szervert a config/configuration.yml fájlban és indítsd újra az alkalmazást, hogy érvénybe lépjen."
field_parent_title: Szülő oldal
label_issue_watchers: Megfigyelők
setting_commit_logs_encoding: Commit üzenetek kódlapja

View File

@ -833,7 +833,7 @@ id:
text_user_wrote: "%{value} menulis:"
text_enumeration_destroy_question: "%{count} obyek ditugaskan untuk nilai ini."
text_enumeration_category_reassign_to: 'Tugaskan kembali untuk nilai ini:'
text_email_delivery_not_configured: "Pengiriman email belum dikonfigurasi, notifikasi tidak diaktifkan.\nAnda harus mengkonfigur SMTP server anda pada config/email.yml dan restart kembali aplikasi untuk mengaktifkan."
text_email_delivery_not_configured: "Pengiriman email belum dikonfigurasi, notifikasi tidak diaktifkan.\nAnda harus mengkonfigur SMTP server anda pada config/configuration.yml dan restart kembali aplikasi untuk mengaktifkan."
text_repository_usernames_mapping: "Pilih atau perbarui pengguna Redmine yang terpetakan ke setiap nama pengguna yang ditemukan di log repositori.\nPengguna dengan nama pengguna dan repositori atau email yang sama secara otomasit akan dipetakan."
text_diff_truncated: '... Perbedaan terpotong karena melebihi batas maksimum yang bisa ditampilkan.'
text_custom_field_possible_values_info: 'Satu baris untuk setiap nilai'

View File

@ -730,7 +730,7 @@ it:
label_generate_key: Genera una chiave
setting_mail_handler_api_enabled: Abilita WS per le email in arrivo
setting_mail_handler_api_key: Chiave API
text_email_delivery_not_configured: "La consegna via email non è configurata e le notifiche sono disabilitate.\nConfigura il tuo server SMTP in config/email.yml e riavvia l'applicazione per abilitarle."
text_email_delivery_not_configured: "La consegna via email non è configurata e le notifiche sono disabilitate.\nConfigura il tuo server SMTP in config/configuration.yml e riavvia l'applicazione per abilitarle."
field_parent_title: Pagina principale
label_issue_watchers: Osservatori
setting_commit_logs_encoding: Codifica dei messaggi di commit

View File

@ -919,7 +919,7 @@ ja:
text_user_wrote: "%{value} は書きました:"
text_enumeration_destroy_question: "%{count}個のオブジェクトがこの値に割り当てられています。"
text_enumeration_category_reassign_to: '次の値に割り当て直す:'
text_email_delivery_not_configured: "メールを送信するために必要な設定が行われていないため、メール通知は利用できません。\nconfig/email.ymlでSMTPサーバの設定を行い、アプリケーションを再起動してください。"
text_email_delivery_not_configured: "メールを送信するために必要な設定が行われていないため、メール通知は利用できません。\nconfig/configuration.ymlでSMTPサーバの設定を行い、アプリケーションを再起動してください。"
text_repository_usernames_mapping: "リポジトリのログから検出されたユーザー名をどのRedmineユーザーに関連づけるのか選択してください。\nログ上のユーザー名またはメールアドレスがRedmineのユーザーと一致する場合は自動的に関連づけられます。"
text_diff_truncated: '... 差分の行数が表示可能な上限を超えました。超過分は表示しません。'
text_custom_field_possible_values_info: '選択肢の値は1行に1個ずつ記述してください。'

View File

@ -843,7 +843,7 @@ ko:
text_user_wrote: "%{value}의 덧글:"
text_enumeration_category_reassign_to: '새로운 값을 설정:'
text_enumeration_destroy_question: "%{count} 개의 일감이 이 값을 사용하고 있습니다."
text_email_delivery_not_configured: "이메일 전달이 설정되지 않았습니다. 그래서 알림이 비활성화되었습니다.\n SMTP서버를 config/email.yml에서 설정하고 어플리케이션을 다시 시작하십시오. 그러면 동작합니다."
text_email_delivery_not_configured: "이메일 전달이 설정되지 않았습니다. 그래서 알림이 비활성화되었습니다.\n SMTP서버를 config/configuration.yml에서 설정하고 어플리케이션을 다시 시작하십시오. 그러면 동작합니다."
text_repository_usernames_mapping: "저장소 로그에서 발견된 각 사용자에 레드마인 사용자를 업데이트할때 선택합니다.\n레드마인과 저장소의 이름이나 이메일이 같은 사용자가 자동으로 연결됩니다."
text_diff_truncated: '... 이 차이점은 표시할 수 있는 최대 줄수를 초과해서 이 차이점은 잘렸습니다.'
text_custom_field_possible_values_info: '각 값 당 한 줄'

View File

@ -885,7 +885,7 @@ lt:
text_user_wrote: "%{value} parašė:"
text_enumeration_destroy_question: "%{count} objektai priskirti šiai reikšmei."
text_enumeration_category_reassign_to: 'Priskirti juos šiai reikšmei:'
text_email_delivery_not_configured: "El.pašto siuntimas nesukonfigūruotas, ir perspėjimai neaktyvus.\nSukonfigūruokite savo SMTP serverį byloje config/email.yml ir perleiskite programą norėdami pritaikyti pakeitimus."
text_email_delivery_not_configured: "El.pašto siuntimas nesukonfigūruotas, ir perspėjimai neaktyvus.\nSukonfigūruokite savo SMTP serverį byloje config/configuration.yml ir perleiskite programą norėdami pritaikyti pakeitimus."
text_repository_usernames_mapping: "Parinkite ar atnaujinkite Redmine vartotojo vardą kiekvienam saugyklos vardui, kuris paminėtas saugyklos log'e.\nVartotojai, turintys tą patį Redmine ir saugyklos vardą ar el.paštą automatiškai surišti."
text_diff_truncated: "... Šis diff'as nukarpytas, nes jis viršijo maksimalų rodomą eilučių skaičių."
text_custom_field_possible_values_info: 'Po vieną eilutę kiekvienai reikšmei'

View File

@ -854,7 +854,7 @@ lv:
text_user_wrote: "%{value} rakstīja:"
text_enumeration_destroy_question: "%{count} objekti ir piešķirti šai vērtībai."
text_enumeration_category_reassign_to: 'Piešķirt tos šai vērtībai:'
text_email_delivery_not_configured: "E-pastu nosūtīšana nav konfigurēta, un ziņojumi ir izslēgti.\nKonfigurējiet savu SMTP serveri datnē config/email.yml un pārstartējiet lietotni."
text_email_delivery_not_configured: "E-pastu nosūtīšana nav konfigurēta, un ziņojumi ir izslēgti.\nKonfigurējiet savu SMTP serveri datnē config/configuration.yml un pārstartējiet lietotni."
text_repository_usernames_mapping: "Izvēlieties vai atjaunojiet Redmine lietotāju, saistītu ar katru lietotājvārdu, kas atrodams repozitorija žurnālā.\nLietotāji ar to pašu Redmine un repozitorija lietotājvārdu būs saistīti automātiski."
text_diff_truncated: '... Šis diff tika nošķelts, jo tas pārsniedz maksimālo izmēru, ko var parādīt.'
text_custom_field_possible_values_info: 'Katra vērtības savā rindā'

View File

@ -877,7 +877,7 @@ mk:
text_user_wrote: "%{value} напиша:"
text_enumeration_destroy_question: "%{count} objects are assigned to this value."
text_enumeration_category_reassign_to: 'Reassign them to this value:'
text_email_delivery_not_configured: "Доставата по е-пошта не е конфигурирана, и известувањата се оневозможени.\nКонфигурирајте го Вашиот SMTP сервер во config/email.yml и рестартирајте ја апликацијата."
text_email_delivery_not_configured: "Доставата по е-пошта не е конфигурирана, и известувањата се оневозможени.\nКонфигурирајте го Вашиот SMTP сервер во config/configuration.yml и рестартирајте ја апликацијата."
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.'
text_custom_field_possible_values_info: 'One line for each value'

View File

@ -859,7 +859,7 @@ mn:
text_user_wrote: "%{value} бичихдээ:"
text_enumeration_destroy_question: "Энэ утгад %{count} обьект оноогдсон байна."
text_enumeration_category_reassign_to: 'Тэдгээрийг энэ утгад дахин оноо:'
text_email_delivery_not_configured: "Имэйлийн тохиргоог хараахан тохируулаагүй байна, тиймээс имэйл мэдэгдэл явуулах боломжгүй байна.\nSMTP сервэрээ config/email.yml файл дотор тохируулаад төслийн менежерээ дахиад эхлүүлээрэй."
text_email_delivery_not_configured: "Имэйлийн тохиргоог хараахан тохируулаагүй байна, тиймээс имэйл мэдэгдэл явуулах боломжгүй байна.\nSMTP сервэрээ config/configuration.yml файл дотор тохируулаад төслийн менежерээ дахиад эхлүүлээрэй."
text_repository_usernames_mapping: "Репозиторийн логд байгаа бүх хэрэглэгчийн нэрүүдэд харгалзсан Төслийн Менежер системд бүртгэлтэй хэрэглэгчдийг Сонгох юмуу шинэчилнэ үү.\nТөслийн менежер болон репозиторид байгаа ижилхэн нэр юмуу имэйлтэй хэрэглэгчид харилцан харгалзна."
text_diff_truncated: '... Файлын ялгаврын хэмжээ үзүүлэхэд дэндүү урт байгаа учраас төгсгөлөөс нь хасч үзүүлэв.'
text_custom_field_possible_values_info: 'One line for each value'

View File

@ -742,7 +742,7 @@ nl:
text_destroy_time_entries: Verwijder gerapporteerde uren
text_destroy_time_entries_question: "%{hours} uren werden gerapporteerd op de issue(s) die u wilde verwijderen. Wat wil u doen?"
text_diff_truncated: '... Deze diff werd afgekort omdat het de maximale weer te geven karakters overschreed.'
text_email_delivery_not_configured: "E-mailbezorging is niet geconfigureerd. Notificaties zijn uitgeschakeld.\nConfigureer uw SMTP server in config/email.yml en herstart de applicatie om dit te activeren."
text_email_delivery_not_configured: "E-mailbezorging is niet geconfigureerd. Notificaties zijn uitgeschakeld.\nConfigureer uw SMTP server in config/configuration.yml en herstart de applicatie om dit te activeren."
text_enumeration_category_reassign_to: 'Wijs de volgende waarde toe:'
text_enumeration_destroy_question: "%{count} objecten zijn toegewezen aan deze waarde."
text_file_repository_writable: Bestandsrepository beschrijfbaar

View File

@ -716,7 +716,7 @@
label_generate_key: Generer en nøkkel
setting_mail_handler_api_enabled: Skru på WS for innkommende e-post
setting_mail_handler_api_key: API-nøkkel
text_email_delivery_not_configured: "Levering av e-post er ikke satt opp, og varsler er skrudd av.\nStill inn din SMTP-tjener i config/email.yml og start programmet på nytt for å skru det på."
text_email_delivery_not_configured: "Levering av e-post er ikke satt opp, og varsler er skrudd av.\nStill inn din SMTP-tjener i config/configuration.yml og start programmet på nytt for å skru det på."
field_parent_title: Foreldreside
label_issue_watchers: Overvåkere
setting_commit_logs_encoding: Tegnkoding for innsendingsmeldinger

View File

@ -771,7 +771,7 @@ pl:
text_default_administrator_account_changed: Zmieniono domyślne hasło administratora
text_destroy_time_entries: Usuń wpisy dziennika
text_destroy_time_entries_question: Przepracowano %{hours} godzin przy zagadnieniu, które chcesz usunąć. Co chcesz zrobić?
text_email_delivery_not_configured: "Dostarczanie poczty elektronicznej nie zostało skonfigurowane, więc powiadamianie jest nieaktywne.\nSkonfiguruj serwer SMTP w config/email.yml a następnie zrestartuj aplikację i uaktywnij to."
text_email_delivery_not_configured: "Dostarczanie poczty elektronicznej nie zostało skonfigurowane, więc powiadamianie jest nieaktywne.\nSkonfiguruj serwer SMTP w config/configuration.yml a następnie zrestartuj aplikację i uaktywnij to."
text_enumeration_category_reassign_to: 'Zmień przypisanie na tą wartość:'
text_enumeration_destroy_question: "%{count} obiektów jest przypisana do tej wartości."
text_file_repository_writable: Zapisywalne repozytorium plików

View File

@ -728,7 +728,7 @@ pt-BR:
text_user_wrote: "%{value} escreveu:"
text_enumeration_destroy_question: "%{count} objetos estão atribuídos a este valor."
text_enumeration_category_reassign_to: 'Reatribuí-los ao valor:'
text_email_delivery_not_configured: "O envio de e-mail não está configurado, e as notificações estão inativas.\nConfigure seu servidor SMTP no arquivo config/email.yml e reinicie a aplicação para ativá-las."
text_email_delivery_not_configured: "O envio de e-mail não está configurado, e as notificações estão inativas.\nConfigure seu servidor SMTP no arquivo config/configuration.yml e reinicie a aplicação para ativá-las."
default_role_manager: Gerente
default_role_developer: Desenvolvedor

View File

@ -715,7 +715,7 @@ pt:
text_user_wrote: "%{value} escreveu:"
text_enumeration_destroy_question: "%{count} objectos estão atribuídos a este valor."
text_enumeration_category_reassign_to: 'Re-atribuí-los para este valor:'
text_email_delivery_not_configured: "Entrega por e-mail não está configurada, e as notificação estão desactivadas.\nConfigure o seu servidor de SMTP em config/email.yml e reinicie a aplicação para activar estas funcionalidades."
text_email_delivery_not_configured: "Entrega por e-mail não está configurada, e as notificação estão desactivadas.\nConfigure o seu servidor de SMTP em config/configuration.yml e reinicie a aplicação para activar estas funcionalidades."
default_role_manager: Gestor
default_role_developer: Programador

View File

@ -774,7 +774,7 @@ ro:
text_user_wrote: "%{value} a scris:"
text_enumeration_destroy_question: "Această valoare are %{count} obiecte."
text_enumeration_category_reassign_to: 'Atribuie la această valoare:'
text_email_delivery_not_configured: "Trimiterea de emailuri nu este configurată și ca urmare, notificările sunt dezactivate.\nConfigurați serverul SMTP în config/email.yml și reporniți aplicația pentru a le activa."
text_email_delivery_not_configured: "Trimiterea de emailuri nu este configurată și ca urmare, notificările sunt dezactivate.\nConfigurați serverul SMTP în config/configuration.yml și reporniți aplicația pentru a le activa."
text_repository_usernames_mapping: "Selectați sau modificați contul Redmine echivalent contului din istoricul depozitului.\nUtilizatorii cu un cont (sau e-mail) identic în Redmine și depozit sunt echivalate automat."
text_diff_truncated: '... Comparația a fost trunchiată pentru ca depășește lungimea maximă de text care poate fi afișat.'
text_custom_field_possible_values_info: 'O linie pentru fiecare valoare'

View File

@ -913,7 +913,7 @@ ru:
text_destroy_time_entries_question: Вы собираетесь удалить %{hours} часа(ов), прикрепленных за этой задачей.
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/configuration.yml. Для применения изменений перезапустите приложение."
text_enumeration_category_reassign_to: 'Назначить им следующее значение:'
text_enumeration_destroy_question: "%{count} объект(а,ов) связаны с этим значением."
text_file_repository_writable: Хранилище с доступом на запись

View File

@ -723,7 +723,7 @@ sk:
label_generate_key: Vygenerovať kľúč
setting_mail_handler_api_enabled: Zapnúť Webovú Službu (WS) pre príchodzie emaily
setting_mail_handler_api_key: API kľúč
text_email_delivery_not_configured: "Doručenie emailov nieje nastavené, notifikácie sú vypnuté.\nNastavte váš SMTP server v config/email.yml a reštartnite aplikáciu pre aktiváciu funkcie."
text_email_delivery_not_configured: "Doručenie emailov nieje nastavené, notifikácie sú vypnuté.\nNastavte váš SMTP server v config/configuration.yml a reštartnite aplikáciu pre aktiváciu funkcie."
field_parent_title: Nadradená stránka
label_issue_watchers: Pozorovatelia
setting_commit_logs_encoding: Kódovanie prenášaných správ

View File

@ -761,7 +761,7 @@ sl:
text_user_wrote: "%{value} je napisal(a):"
text_enumeration_destroy_question: "%{count} objektov je določenih tej vrednosti."
text_enumeration_category_reassign_to: 'Ponastavi jih na to vrednost:'
text_email_delivery_not_configured: "E-poštna dostava ni nastavljena in oznanila so onemogočena.\nNastavite vaš SMTP strežnik v config/email.yml in ponovno zaženite aplikacijo da ga omogočite.\n"
text_email_delivery_not_configured: "E-poštna dostava ni nastavljena in oznanila so onemogočena.\nNastavite vaš SMTP strežnik v config/configuration.yml in ponovno zaženite aplikacijo da ga omogočite.\n"
text_repository_usernames_mapping: "Izberite ali posodobite Redmine uporabnika dodeljenega vsakemu uporabniškemu imenu najdenemu v zapisniku shrambe.\n Uporabniki z enakim Redmine ali shrambinem uporabniškem imenu ali e-poštnem naslovu so samodejno dodeljeni."
text_diff_truncated: '... Ta sprememba je bila odsekana ker presega največjo velikost ki je lahko prikazana.'

View File

@ -874,7 +874,7 @@ sr-YU:
text_user_wrote: "%{value} je napisao:"
text_enumeration_destroy_question: "%{count} objekat(a) je dodeljeno ovoj vrednosti."
text_enumeration_category_reassign_to: 'Dodeli ih ponovo ovoj vrednosti:'
text_email_delivery_not_configured: "Isporuka e-poruka nije konfigurisana i obaveštenja su onemogućena.\nPodesite vaš SMTP server u config/email.yml i pokrenite ponovo aplikaciju za njihovo omogućavanje."
text_email_delivery_not_configured: "Isporuka e-poruka nije konfigurisana i obaveštenja su onemogućena.\nPodesite vaš SMTP server u config/configuration.yml i pokrenite ponovo aplikaciju za njihovo omogućavanje."
text_repository_usernames_mapping: "Odaberite ili ažurirajte Redmine korisnike mapiranjem svakog korisničkog imena pronađenog u evidenciji spremišta.\nKorisnici sa istim Redmine imenom i imenom spremišta ili e-adresom su automatski mapirani."
text_diff_truncated: '... Ova razlika je isečena jer je dostignuta maksimalna veličina prikaza.'
text_custom_field_possible_values_info: 'Jedan red za svaku vrednost'

View File

@ -874,7 +874,7 @@ sr:
text_user_wrote: "%{value} је написао:"
text_enumeration_destroy_question: "%{count} објекат(а) је додељено овој вредности."
text_enumeration_category_reassign_to: 'Додели их поново овој вредности:'
text_email_delivery_not_configured: "Испорука е-порука није конфигурисана и обавештења су онемогућена.\nПодесите ваш SMTP сервер у config/email.yml и покрените поново апликацију за њихово омогућавање."
text_email_delivery_not_configured: "Испорука е-порука није конфигурисана и обавештења су онемогућена.\nПодесите ваш SMTP сервер у config/configuration.yml и покрените поново апликацију за њихово омогућавање."
text_repository_usernames_mapping: "Одаберите или ажурирајте Redmine кориснике мапирањем сваког корисничког имена пронађеног у евиденцији спремишта.\nКорисници са истим Redmine именом и именом спремишта или е-адресом су аутоматски мапирани."
text_diff_truncated: '... Ова разлика је исечена јер је достигнута максимална величина приказа.'
text_custom_field_possible_values_info: 'Један ред за сваку вредност'

View File

@ -208,6 +208,7 @@ sv:
notice_unable_delete_version: Denna version var inte möjlig att ta bort.
notice_unable_delete_time_entry: Tidloggning kunde inte tas bort.
notice_issue_done_ratios_updated: % klart uppdaterade.
notice_gantt_chart_truncated: "Schemat förminskades eftersom det överskrider det maximala antalet aktiviteter som får visas (%{max})"
error_can_t_load_default_data: "Standardkonfiguration gick inte att läsa in: %{value}"
error_scm_not_found: "Inlägg och/eller revision finns inte i detta versionsarkiv."
@ -217,7 +218,7 @@ sv:
error_no_tracker_in_project: 'Ingen ärendetyp är associerad med projektet. Vänligen kontrollera projektinställningarna.'
error_no_default_issue_status: 'Ingen status är definierad som standard för nya ärenden. Vänligen kontrollera din konfiguration (Gå till "Administration -> Ärendestatus").'
error_can_not_delete_custom_field: Kan inte ta bort användardefinerat fält
error_can_not_delete_tracker: Det finns ärenden av denna typ och den är därför inte möjlig att ta bort.
error_can_not_delete_tracker: "Det finns ärenden av denna typ och den är därför inte möjlig att ta bort."
error_can_not_remove_role: "Denna roll används och den är därför inte möjlig att ta bort."
error_can_not_reopen_issue_on_closed_version: 'Ett ärende tilldelat en stängd version kan inte öppnas på nytt'
error_can_not_archive_project: Detta projekt kan inte arkiveras
@ -225,7 +226,7 @@ sv:
error_workflow_copy_source: 'Vänligen välj källans ärendetyp eller roll'
error_workflow_copy_target: 'Vänligen välj ärendetyp(er) och roll(er) för mål'
error_unable_delete_issue_status: 'Ärendestatus kunde inte tas bort'
error_unable_to_connect: Kan inte ansluta (%{value})
error_unable_to_connect: "Kan inte ansluta (%{value})"
warning_attachments_not_saved: "%{count} fil(er) kunde inte sparas."
@ -240,9 +241,9 @@ sv:
mail_subject_reminder: "%{count} ärende(n) har deadline under de kommande %{days} dagarna"
mail_body_reminder: "%{count} ärende(n) som är tilldelat dig har deadline under de %{days} dagarna:"
mail_subject_wiki_content_added: "'%{id}' wikisida has lagts till"
mail_body_wiki_content_added: The '%{id}' wikisida has lagts till av %{author}.
mail_body_wiki_content_added: "The '%{id}' wikisida has lagts till av %{author}."
mail_subject_wiki_content_updated: "'%{id}' wikisida har uppdaterats"
mail_body_wiki_content_updated: The '%{id}' wikisida har uppdaterats av %{author}.
mail_body_wiki_content_updated: "The '%{id}' wikisida har uppdaterats av %{author}."
gui_validation_error: 1 fel
gui_validation_error_plural: "%{count} fel"
@ -340,8 +341,8 @@ sv:
field_group_by: Gruppera resultat efter
field_sharing: Delning
field_parent_issue: Förälderaktivitet
field_member_of_group: Tilldelad användares grupp
field_assigned_to_role: Tilldelad användares roll
field_member_of_group: "Tilldelad användares grupp"
field_assigned_to_role: "Tilldelad användares roll"
field_text: Textfält
field_visible: Synlig
@ -380,7 +381,7 @@ sv:
setting_activity_days_default: Dagar som visas på projektaktivitet
setting_display_subprojects_issues: Visa ärenden från underprojekt i huvudprojekt
setting_enabled_scm: Aktivera SCM
setting_mail_handler_body_delimiters: Trunkera mail efter en av följande rader
setting_mail_handler_body_delimiters: "Trunkera mail efter en av följande rader"
setting_mail_handler_api_enabled: Aktivera WS för inkommande mail
setting_mail_handler_api_key: API-nyckel
setting_sequential_project_identifiers: Generera projektidentifierare sekventiellt
@ -400,6 +401,9 @@ sv:
setting_rest_api_enabled: Aktivera REST webbtjänst
setting_cache_formatted_text: Cacha formaterad text
setting_default_notification_option: Standard notifieringsalternativ
setting_commit_logtime_enabled: Aktivera tidloggning
setting_commit_logtime_activity_id: Aktivitet för loggad tid
setting_gantt_items_limit: Maximalt antal aktiviteter som visas i gantt-schemat
permission_add_project: Skapa projekt
permission_add_subprojects: Skapa underprojekt
@ -581,7 +585,7 @@ sv:
label_version_plural: Versioner
label_close_versions: Stäng klara versioner
label_confirmation: Bekräftelse
label_export_to: Exportera till
label_export_to: 'Finns även som:'
label_read: Läs...
label_public_projects: Publika projekt
label_open_issues: öppen
@ -666,7 +670,7 @@ sv:
label_tag: Tag
label_revision: Revision
label_revision_plural: Revisioner
label_revision_id: Revision %{value}
label_revision_id: "Revision %{value}"
label_associated_revisions: Associerade revisioner
label_added: tillagd
label_modified: modifierad
@ -775,10 +779,10 @@ sv:
label_search_titles_only: Sök endast i titlar
label_user_mail_option_all: "För alla händelser i mina projekt"
label_user_mail_option_selected: "För alla händelser i markerade projekt..."
label_user_mail_option_none: Inga händelser
label_user_mail_option_only_my_events: Endast för saker jag bevakar eller är inblandad i
label_user_mail_option_only_assigned: Endast för saker jag är tilldelad
label_user_mail_option_only_owner: Endast för saker jag äger
label_user_mail_option_none: "Inga händelser"
label_user_mail_option_only_my_events: "Endast för saker jag bevakar eller är inblandad i"
label_user_mail_option_only_assigned: "Endast för saker jag är tilldelad"
label_user_mail_option_only_owner: "Endast för saker jag äger"
label_user_mail_no_self_notified: "Jag vill inte bli underrättad om ändringar som jag har gjort"
label_registration_activation_by_email: kontoaktivering med mail
label_registration_manual_activation: manuell kontoaktivering
@ -825,7 +829,7 @@ sv:
label_display_used_statuses_only: Visa endast status som används av denna ärendetyp
label_api_access_key: API-nyckel
label_missing_api_access_key: Saknar en API-nyckel
label_api_access_key_created_on: API-nyckel skapad för %{value} sedan
label_api_access_key_created_on: "API-nyckel skapad för %{value} sedan"
label_profile: Profil
label_subtask_plural: Underaktiviteter
label_project_copy_notifications: Skicka mailnotifieringar när projektet kopieras
@ -921,6 +925,7 @@ sv:
text_no_configuration_data: "Roller, ärendetyper, ärendestatus och arbetsflöden har inte konfigurerats ännu.\nDet rekommenderas att läsa in standardkonfigurationen. Du kommer att kunna göra ändringar efter att den blivit inläst."
text_load_default_configuration: Läs in standardkonfiguration
text_status_changed_by_changeset: "Tilldelad i changeset %{value}."
text_time_logged_by_changeset: "Tilldelad i changeset %{value}."
text_issues_destroy_confirmation: 'Är du säker på att du vill radera markerade ärende(n) ?'
text_select_project_modules: 'Välj vilka moduler som ska vara aktiva för projektet:'
text_default_administrator_account_changed: Standardadministratörens konto ändrat
@ -934,14 +939,14 @@ sv:
text_user_wrote: "%{value} skrev:"
text_enumeration_destroy_question: "%{count} objekt är tilldelade till detta värde."
text_enumeration_category_reassign_to: 'Återtilldela till detta värde:'
text_email_delivery_not_configured: "Mailfunktionen har inte konfigurerats, och notifieringar via mail kan därför inte skickas.\nKonfigurera din SMTP-server i config/email.yml och starta om applikationen för att aktivera dem."
text_email_delivery_not_configured: "Mailfunktionen har inte konfigurerats, och notifieringar via mail kan därför inte skickas.\nKonfigurera din SMTP-server i config/configuration.yml och starta om applikationen för att aktivera dem."
text_repository_usernames_mapping: "Välj eller uppdatera den Redmine-användare som är mappad till varje användarnamn i versionarkivloggen.\nAnvändare med samma användarnamn eller mailadress i både Redmine och versionsarkivet mappas automatiskt."
text_diff_truncated: '... Denna diff har förminskats eftersom den överskrider den maximala storlek som kan visas.'
text_custom_field_possible_values_info: 'Ett värde per rad'
text_wiki_page_destroy_question: Denna sida har %{descendants} underliggande sidor. Vad vill du göra?
text_wiki_page_nullify_children: Behåll undersidor som rotsidor
text_wiki_page_destroy_children: Ta bort alla underliggande sidor
text_wiki_page_reassign_children: Flytta undersidor till denna föräldersida
text_wiki_page_destroy_question: "Denna sida har %{descendants} underliggande sidor. Vad vill du göra?"
text_wiki_page_nullify_children: "Behåll undersidor som rotsidor"
text_wiki_page_destroy_children: "Ta bort alla underliggande sidor"
text_wiki_page_reassign_children: "Flytta undersidor till denna föräldersida"
text_own_membership_delete_confirmation: "Några av, eller alla, dina behörigheter kommer att tas bort och du kanske inte längre kommer kunna göra ändringar i det här projektet.\nVill du verkligen fortsätta?"
text_zoom_out: Zooma ut
text_zoom_in: Zooma in
@ -972,8 +977,3 @@ sv:
enumeration_doc_categories: Dokumentkategorier
enumeration_activities: Aktiviteter (tidsuppföljning)
enumeration_system_activity: Systemaktivitet
setting_commit_logtime_activity_id: Activity for logged time
text_time_logged_by_changeset: Applied in changeset %{value}.
setting_commit_logtime_enabled: Enable time logging
notice_gantt_chart_truncated: The chart was truncated because it exceeds the maximum number of items that can be displayed (%{max})
setting_gantt_items_limit: Maximum number of items displayed on the gantt chart

View File

@ -726,7 +726,7 @@ th:
label_generate_key: Generate a key
setting_mail_handler_api_enabled: Enable WS for incoming emails
setting_mail_handler_api_key: API key
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/configuration.yml and restart the application to enable them."
field_parent_title: Parent page
label_issue_watchers: Watchers
setting_commit_logs_encoding: Commit messages encoding

View File

@ -741,7 +741,7 @@ tr:
label_generate_key: Generate a key
setting_sequential_project_identifiers: Generate sequential project identifiers
field_parent_title: Parent page
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/configuration.yml and restart the application to enable them."
text_enumeration_category_reassign_to: 'Reassign them to this value:'
label_issue_watchers: Watchers
mail_body_reminder: "%{count} issue(s) that are assigned to you are due in the next %{days} days:"

View File

@ -725,7 +725,7 @@ uk:
label_generate_key: Generate a key
setting_mail_handler_api_enabled: Enable WS for incoming emails
setting_mail_handler_api_key: API key
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/configuration.yml and restart the application to enable them."
field_parent_title: Parent page
label_issue_watchers: Watchers
setting_commit_logs_encoding: Commit messages encoding

View File

@ -760,7 +760,7 @@ vi:
text_user_wrote: "%{value} wrote:"
text_enumeration_destroy_question: "%{count} objects are assigned 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/configuration.yml and restart the application to enable them."
default_role_manager: Điều hành
default_role_developer: Phát triển

View File

@ -979,7 +979,7 @@
text_user_wrote: "%{value} 先前提到:"
text_enumeration_destroy_question: "目前有 %{count} 個物件使用此列舉值。"
text_enumeration_category_reassign_to: '重新設定其列舉值為:'
text_email_delivery_not_configured: "您尚未設定電子郵件傳送方式,因此提醒選項已被停用。\n請在 config/email.yml 中設定 SMTP 之後,重新啟動 Redmine以啟用電子郵件提醒選項。"
text_email_delivery_not_configured: "您尚未設定電子郵件傳送方式,因此提醒選項已被停用。\n請在 config/configuration.yml 中設定 SMTP 之後,重新啟動 Redmine以啟用電子郵件提醒選項。"
text_repository_usernames_mapping: "選擇或更新 Redmine 使用者與版本庫使用者之對應關係。\n版本庫中之使用者帳號或電子郵件信箱與 Redmine 設定相同者,將自動產生對應關係。"
text_diff_truncated: '... 這份差異已被截短以符合顯示行數之最大值'
text_custom_field_possible_values_info: '一列輸入一個值'

View File

@ -869,7 +869,7 @@ zh:
text_user_wrote: "%{value} 写到:"
text_enumeration_category_reassign_to: '将它们关联到新的枚举值:'
text_enumeration_destroy_question: "%{count} 个对象被关联到了这个枚举值。"
text_email_delivery_not_configured: "邮件参数尚未配置,因此邮件通知功能已被禁用。\n请在config/email.yml中配置您的SMTP服务器信息并重新启动以使其生效。"
text_email_delivery_not_configured: "邮件参数尚未配置,因此邮件通知功能已被禁用。\n请在config/configuration.yml中配置您的SMTP服务器信息并重新启动以使其生效。"
text_repository_usernames_mapping: "选择或更新与版本库中的用户名对应的Redmine用户。\n版本库中与Redmine中的同名用户将被自动对应。"
text_diff_truncated: '... 差别内容超过了可显示的最大行数并已被截断'
text_custom_field_possible_values_info: '每项数值一行'

View File

@ -4,6 +4,29 @@ Redmine - project management software
Copyright (C) 2006-2011 Jean-Philippe Lang
http://www.redmine.org/
== 2011-01-30 v1.1.1
* Defect #4899: Redmine fails to list files for darcs repository
* Defect #7245: Wiki fails to find pages with cyrillic characters using postgresql
* Defect #7256: redmine/public/.htaccess must be moved for non-fastcgi installs/upgrades
* Defect #7258: Automatic spent time logging does not work properly with SQLite3
* Defect #7259: Released 1.1.0 uses "devel" label inside admin information
* Defect #7265: "Loading..." icon does not disappear after add project member
* Defect #7266: Test test_due_date_distance_in_words fail due to undefined locale
* Defect #7274: CSV value separator in dutch locale
* Defect #7277: Enabling gravatas causes usernames to overlap first name field in user list
* Defect #7294: "Notifiy for only project I select" is not available anymore in 1.1.0
* Defect #7307: HTTP 500 error on query for empty revision
* Defect #7313: Label not translated in french in Settings/Email Notification tab
* Defect #7329: <code class="javascript"> with long strings may hang server
* Defect #7337: My page french translation
* Defect #7348: French Translation of "Connection"
* Defect #7385: Error when viewing an issue which was related to a deleted subtask
* Defect #7386: NoMethodError on pdf export
* Defect #7415: Darcs adapter recognizes new files as modified files above Darcs 2.4
* Defect #7421: no email sent with 'Notifiy for any event on the selected projects only'
* Feature #5344: Update to latest CodeRay 0.9.x
== 2011-01-09 v1.1.0
* Defect #2038: Italics in wiki headers show-up wrong in the toc

View File

@ -80,8 +80,8 @@ Optional:
== SMTP server Configuration
Copy config/email.yml.example to config/email.yml and edit this file
to adjust your SMTP settings.
Copy config/configuration.yml.example to config/configuration.yml and
edit this file to adjust your SMTP settings.
Do not forget to restart the application after any change to this file.
Please do not enter your SMTP settings in environment.rb.

View File

@ -10,8 +10,10 @@ http://www.redmine.org/
1. Uncompress the program archive in a new directory
2. Copy your database settings (RAILS_ROOT/config/database.yml)
and SMTP settings (RAILS_ROOT/config/email.yml) into the new
config directory
and your configuration file (RAILS_ROOT/config/configuration.yml)
into the new config directory
Note: before Redmine 1.2, SMTP configuration was stored in
config/email.yml. It should now be stored in config/configuration.yml.
3. Copy the RAILS_ROOT/files directory content into your new installation
This directory contains all the attached files.

View File

@ -0,0 +1,97 @@
# Redmine - project management software
# Copyright (C) 2006-2011 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.
module Redmine
module Configuration
# Configuration default values
@defaults = {
'email_delivery' => nil
}
@config = nil
class << self
# Loads the Redmine configuration file
# Valid options:
# * <tt>:file</tt>: the configuration file to load (default: config/configuration.yml)
# * <tt>:env</tt>: the environment to load the configuration for (default: Rails.env)
def load(options={})
filename = options[:file] || File.join(Rails.root, 'config', 'configuration.yml')
env = options[:env] || Rails.env
@config = @defaults.dup
load_deprecated_email_configuration(env)
if File.file?(filename)
@config.merge!(load_from_yaml(filename, env))
end
# Compatibility mode for those who copy email.yml over configuration.yml
%w(delivery_method smtp_settings sendmail_settings).each do |key|
if value = @config.delete(key)
@config['email_delivery'] ||= {}
@config['email_delivery'][key] = value
end
end
if @config['email_delivery']
ActionMailer::Base.perform_deliveries = true
@config['email_delivery'].each do |k, v|
v.symbolize_keys! if v.respond_to?(:symbolize_keys!)
ActionMailer::Base.send("#{k}=", v)
end
end
@config
end
# Returns a configuration setting
def [](name)
load unless @config
@config[name]
end
private
def load_from_yaml(filename, env)
yaml = YAML::load_file(filename)
conf = {}
if yaml.is_a?(Hash)
if yaml['default']
conf.merge!(yaml['default'])
end
if yaml[env]
conf.merge!(yaml[env])
end
else
$stderr.puts "#{filename} is not a valid Redmine configuration file"
exit 1
end
conf
end
def load_deprecated_email_configuration(env)
deprecated_email_conf = File.join(Rails.root, 'config', 'email.yml')
if File.file?(deprecated_email_conf)
warn "Storing outgoing emails configuration in config/email.yml is deprecated. You should now store it in config/configuration.yml using the email_delivery setting."
@config.merge!({'email_delivery' => load_from_yaml(deprecated_email_conf, env)})
end
end
end
end
end

View File

@ -255,7 +255,7 @@ module Redmine
pdf.SetFontStyle('B',9)
pdf.Cell(35,5, l(:field_description) + ":")
pdf.SetFontStyle('',9)
pdf.MultiCell(155,5, issue.description,"BR")
pdf.MultiCell(155,5, issue.description.to_s,"BR")
pdf.Line(pdf.GetX, y0, pdf.GetX, pdf.GetY)
pdf.Line(pdf.GetX, pdf.GetY, 170, pdf.GetY)
@ -271,7 +271,7 @@ module Redmine
pdf.Ln
unless changeset.comments.blank?
pdf.SetFontStyle('',8)
pdf.MultiCell(190,5, changeset.comments)
pdf.MultiCell(190,5, changeset.comments.to_s)
end
pdf.Ln
end
@ -291,7 +291,7 @@ module Redmine
end
if journal.notes?
pdf.SetFontStyle('',8)
pdf.MultiCell(190,5, journal.notes)
pdf.MultiCell(190,5, journal.notes.to_s)
end
pdf.Ln
end

View File

@ -27,30 +27,36 @@ module Redmine
delete_unprocessed = (pop_options[:delete_unprocessed].to_s == '1')
pop = Net::POP3.APOP(apop).new(host,port)
puts "Connecting to #{host}..."
logger.debug "Connecting to #{host}..." if logger && logger.debug?
pop.start(pop_options[:username], pop_options[:password]) do |pop_session|
if pop_session.mails.empty?
puts "No email to process"
logger.debug "No email to process" if logger && logger.debug?
else
puts "#{pop_session.mails.size} email(s) to process..."
logger.debug "#{pop_session.mails.size} email(s) to process..." if logger && logger.debug?
pop_session.each_mail do |msg|
message = msg.pop
message_id = (message =~ /^Message-ID: (.*)/ ? $1 : '').strip
if MailHandler.receive(message, options)
msg.delete
puts "--> Message #{message_id} processed and deleted from the server"
logger.debug "--> Message #{message_id} processed and deleted from the server" if logger && logger.debug?
else
if delete_unprocessed
msg.delete
puts "--> Message #{message_id} NOT processed and deleted from the server"
logger.debug "--> Message #{message_id} NOT processed and deleted from the server" if logger && logger.debug?
else
puts "--> Message #{message_id} NOT processed and left on the server"
logger.debug "--> Message #{message_id} NOT processed and left on the server" if logger && logger.debug?
end
end
end
end
end
end
private
def logger
RAILS_DEFAULT_LOGGER
end
end
end
end

View File

@ -23,7 +23,7 @@ module Redmine
class BazaarAdapter < AbstractAdapter
# Bazaar executable name
BZR_BIN = "bzr"
BZR_BIN = Redmine::Configuration['scm_bazaar_command'] || "bzr"
# Get info about the repository
def info

View File

@ -23,7 +23,7 @@ module Redmine
class CvsAdapter < AbstractAdapter
# CVS executable name
CVS_BIN = "cvs"
CVS_BIN = Redmine::Configuration['scm_cvs_command'] || "cvs"
# Guidelines for the input:
# url -> the project-path, relative to the cvsroot (eg. module name)
@ -109,7 +109,7 @@ module Redmine
path_with_project="#{url}#{with_leading_slash(path)}"
cmd = "#{CVS_BIN} -d #{shell_quote root_url} rlog"
cmd << " -d\">#{time_to_cvstime(identifier_from)}\"" if identifier_from
cmd << " -d\">#{time_to_cvstime_rlog(identifier_from)}\"" if identifier_from
cmd << " #{shell_quote path_with_project}"
shellout(cmd) do |io|
state="entry_start"
@ -291,6 +291,12 @@ module Redmine
return time.strftime("%Y-%m-%d %H:%M:%S")
end
def time_to_cvstime_rlog(time)
return nil if time.nil?
t1 = time.clone.localtime
return t1.strftime("%Y-%m-%d %H:%M:%S")
end
def normalize_cvs_path(path)
normalize_path(path.gsub(/Attic\//,''))
end

View File

@ -23,7 +23,7 @@ module Redmine
module Adapters
class DarcsAdapter < AbstractAdapter
# Darcs executable name
DARCS_BIN = "darcs"
DARCS_BIN = Redmine::Configuration['scm_darcs_command'] || "darcs"
class << self
def client_version
@ -31,16 +31,14 @@ module Redmine
end
def darcs_binary_version
cmd = "#{DARCS_BIN} --version"
version = nil
shellout(cmd) do |io|
# Read darcs version in first returned line
if m = io.gets.match(%r{((\d+\.)+\d+)})
version = m[0].scan(%r{\d+}).collect(&:to_i)
end
darcsversion = darcs_binary_version_from_command_line
if m = darcsversion.match(%r{\A(.*?)((\d+\.)+\d+)})
m[2].scan(%r{\d+}).collect(&:to_i)
end
return nil if $? && $?.exitstatus != 0
version
end
def darcs_binary_version_from_command_line
shellout("#{DARCS_BIN} --version") { |io| io.read }.to_s
end
end
@ -64,7 +62,9 @@ module Redmine
# or nil if the given path doesn't exist in the repository
def entries(path=nil, identifier=nil)
path_prefix = (path.blank? ? '' : "#{path}/")
path = '.' if path.blank?
if path.blank?
path = ( self.class.client_version_above?([2, 2, 0]) ? @url : '.' )
end
entries = Entries.new
cmd = "#{DARCS_BIN} annotate --repodir #{shell_quote @url} --xml-output"
cmd << " --match #{shell_quote("hash #{identifier}")}" if identifier
@ -168,8 +168,37 @@ module Redmine
})
end
# Retrieve changed paths for a single patch
def get_paths_for_patch(hash)
paths = get_paths_for_patch_raw(hash)
if self.class.client_version_above?([2, 4])
orig_paths = paths
paths = []
add_paths = []
add_paths_name = []
mod_paths = []
other_paths = []
orig_paths.each do |path|
if path[:action] == 'A'
add_paths << path
add_paths_name << path[:path]
elsif path[:action] == 'M'
mod_paths << path
else
other_paths << path
end
end
add_paths_name.each do |add_path|
mod_paths.delete_if { |m| m[:path] == add_path }
end
paths.concat add_paths
paths.concat mod_paths
paths.concat other_paths
end
paths
end
# Retrieve changed paths for a single patch
def get_paths_for_patch_raw(hash)
cmd = "#{DARCS_BIN} annotate --repodir #{shell_quote @url} --summary --xml-output"
cmd << " --match #{shell_quote("hash #{hash}")} "
paths = []

View File

@ -22,7 +22,7 @@ module Redmine
module Adapters
class GitAdapter < AbstractAdapter
# Git executable name
GIT_BIN = "git"
GIT_BIN = Redmine::Configuration['scm_git_command'] || "git"
def info
begin

View File

@ -24,7 +24,7 @@ module Redmine
class MercurialAdapter < AbstractAdapter
# Mercurial executable name
HG_BIN = "hg"
HG_BIN = Redmine::Configuration['scm_mercurial_command'] || "hg"
TEMPLATES_DIR = File.dirname(__FILE__) + "/mercurial"
TEMPLATE_NAME = "hg-template"
TEMPLATE_EXTENSION = "tmpl"

View File

@ -24,7 +24,7 @@ module Redmine
class SubversionAdapter < AbstractAdapter
# SVN executable name
SVN_BIN = "svn"
SVN_BIN = Redmine::Configuration['scm_subversion_command'] || "svn"
class << self
def client_version

View File

@ -4,7 +4,7 @@ module Redmine
module VERSION #:nodoc:
MAJOR = 1
MINOR = 1
TINY = 0
TINY = 1
# Branch values:
# * official release: nil

View File

@ -287,7 +287,7 @@ task :migrate_from_mantis => :environment do
project.versions.each do |version|
v = Version.new :name => encode(version.version),
:description => encode(version.description),
:effective_date => version.date_order.to_date
:effective_date => (version.date_order ? version.date_order.to_date : nil)
v.project = p
v.save
versions_map[version.id] = v.id

View File

@ -46,7 +46,9 @@
<ul>
<li>Link to an issue: <strong>#124</strong> (displays <del><a href="#" class="issue" title="bulk edit doesn't change the category or fixed version properties (Closed)">#124</a></del>, link is striked-through if the issue is closed)</li>
<li>Link to a changeset: <strong>r758</strong> (displays <a href="#" class="changeset" title="Search engine now only searches objects the user is allowed to view.">r758</a>)</li>
<li>Link to a changeset with a non-numeric hash: <strong>commit:c6f4d0fd</strong> (displays c6f4d0fd). Added in <a href="#" class="changeset" title="Merged Git support branch (r1200 to r1226).">r1236</a>.</li>
<li>Link to a changeset with a non-numeric hash: <strong>commit:c6f4d0fd</strong> (displays <a href="#" class="changeset">c6f4d0fd</a>).</li>
<li>Link to a changeset of another project: <strong>sandbox:r758</strong> (displays <a href="#" class="changeset" title="Search engine now only searches objects the user is allowed to view.">sanbox:r758</a>)</li>
<li>Link to a changeset with a non-numeric hash: <strong>sandbox:c6f4d0fd</strong> (displays <a href="#" class="changeset">sandbox:c6f4d0fd</a>).</li>
</ul>
<p>Wiki links:</p>
@ -74,7 +76,7 @@
<li><strong>document#17</strong> (link to document with id 17)</li>
<li><strong>document:Greetings</strong> (link to the document with title "Greetings")</li>
<li><strong>document:"Some document"</strong> (double quotes can be used when document title contains spaces)</li>
<li><strong>document:some_project:"Some document"</strong> (link to a document with title "Some document" in other project "some_project")
<li><strong>sandbox:document:"Some document"</strong> (link to a document with title "Some document" in other project "sandbox")</li>
</ul></li>
</ul>
@ -84,6 +86,7 @@
<li><strong>version#3</strong> (link to version with id 3)</li>
<li><strong>version:1.0.0</strong> (link to version named "1.0.0")</li>
<li><strong>version:"1.0 beta 2"</strong></li>
<li><strong>sandbox:version:1.0.0</strong> (link to version "1.0.0" in the project "sandbox")</li>
</ul></li>
</ul>
@ -104,6 +107,8 @@
<li><strong>source:some/file@52#L120</strong> (link to line 120 of the file's revision 52)</li>
<li><strong>source:"some file@52#L120"</strong> (use double quotes when the URL contains spaces</li>
<li><strong>export:some/file</strong> (force the download of the file)</li>
<li><strong>sandbox:source:some/file</strong> (link to the file located at /some/file in the repository of the project "sandbox")</li>
<li><strong>sandbox:export:some/file</strong> (force the download of the file)</li>
</ul></li>
</ul>

View File

@ -0,0 +1,8 @@
default:
somesetting: foo
production:
development:
test:

7
test/fixtures/configuration/empty.yml vendored Normal file
View File

@ -0,0 +1,7 @@
default:
production:
development:
test:

View File

@ -0,0 +1,8 @@
default:
production:
development:
test:
somesetting: foo

View File

@ -0,0 +1,9 @@
default:
somesetting: foo
production:
development:
test:
somesetting: bar

View File

@ -33,6 +33,19 @@ class IssueRelationsControllerTest < ActionController::TestCase
end
end
def test_new_xhr
assert_difference 'IssueRelation.count' do
@request.session[:user_id] = 3
xhr :post, :new,
:issue_id => 3,
:relation => {:issue_to_id => '1', :relation_type => 'relates', :delay => ''}
assert_select_rjs 'relations' do
assert_select 'table', 1
assert_select 'tr', 2 # relations
end
end
end
def test_new_should_accept_id_with_hash
assert_difference 'IssueRelation.count' do
@request.session[:user_id] = 3
@ -68,4 +81,20 @@ class IssueRelationsControllerTest < ActionController::TestCase
post :destroy, :id => '2', :issue_id => '3'
end
end
def test_destroy_xhr
IssueRelation.create!(:relation_type => IssueRelation::TYPE_RELATES) do |r|
r.issue_from_id = 3
r.issue_to_id = 1
end
assert_difference 'IssueRelation.count', -1 do
@request.session[:user_id] = 3
xhr :post, :destroy, :id => '2', :issue_id => '3'
assert_select_rjs 'relations' do
assert_select 'table', 1
assert_select 'tr', 1 # relation left
end
end
end
end

View File

@ -29,6 +29,7 @@ class RepositoriesCvsControllerTest < ActionController::TestCase
REPOSITORY_PATH.gsub!(/\//, "\\") if Redmine::Platform.mswin?
# CVS module
MODULE_NAME = 'test'
PRJ_ID = 3
def setup
@controller = RepositoriesController.new
@ -37,14 +38,18 @@ class RepositoriesCvsControllerTest < ActionController::TestCase
Setting.default_language = 'en'
User.current = nil
@project = Project.find(1)
@project.repository = Repository::Cvs.create(:root_url => REPOSITORY_PATH,
:url => MODULE_NAME)
@project = Project.find(PRJ_ID)
@repository = Repository::Cvs.create(:project => Project.find(PRJ_ID),
:root_url => REPOSITORY_PATH,
:url => MODULE_NAME)
assert @repository
end
if File.directory?(REPOSITORY_PATH)
def test_show
get :show, :id => 1
@repository.fetch_changesets
@repository.reload
get :show, :id => PRJ_ID
assert_response :success
assert_template 'show'
assert_not_nil assigns(:entries)
@ -52,7 +57,9 @@ class RepositoriesCvsControllerTest < ActionController::TestCase
end
def test_browse_root
get :show, :id => 1
@repository.fetch_changesets
@repository.reload
get :show, :id => PRJ_ID
assert_response :success
assert_template 'show'
assert_not_nil assigns(:entries)
@ -66,7 +73,9 @@ class RepositoriesCvsControllerTest < ActionController::TestCase
end
def test_browse_directory
get :show, :id => 1, :path => ['images']
@repository.fetch_changesets
@repository.reload
get :show, :id => PRJ_ID, :path => ['images']
assert_response :success
assert_template 'show'
assert_not_nil assigns(:entries)
@ -78,8 +87,9 @@ class RepositoriesCvsControllerTest < ActionController::TestCase
end
def test_browse_at_given_revision
Project.find(1).repository.fetch_changesets
get :show, :id => 1, :path => ['images'], :rev => 1
@repository.fetch_changesets
@repository.reload
get :show, :id => PRJ_ID, :path => ['images'], :rev => 1
assert_response :success
assert_template 'show'
assert_not_nil assigns(:entries)
@ -87,7 +97,9 @@ class RepositoriesCvsControllerTest < ActionController::TestCase
end
def test_entry
get :entry, :id => 1, :path => ['sources', 'watchers_controller.rb']
@repository.fetch_changesets
@repository.reload
get :entry, :id => PRJ_ID, :path => ['sources', 'watchers_controller.rb']
assert_response :success
assert_template 'entry'
assert_no_tag :tag => 'td', :attributes => { :class => /line-code/},
@ -96,8 +108,9 @@ class RepositoriesCvsControllerTest < ActionController::TestCase
def test_entry_at_given_revision
# changesets must be loaded
Project.find(1).repository.fetch_changesets
get :entry, :id => 1, :path => ['sources', 'watchers_controller.rb'], :rev => 2
@repository.fetch_changesets
@repository.reload
get :entry, :id => PRJ_ID, :path => ['sources', 'watchers_controller.rb'], :rev => 2
assert_response :success
assert_template 'entry'
# this line was removed in r3
@ -106,18 +119,24 @@ class RepositoriesCvsControllerTest < ActionController::TestCase
end
def test_entry_not_found
get :entry, :id => 1, :path => ['sources', 'zzz.c']
@repository.fetch_changesets
@repository.reload
get :entry, :id => PRJ_ID, :path => ['sources', 'zzz.c']
assert_tag :tag => 'p', :attributes => { :id => /errorExplanation/ },
:content => /The entry or revision was not found in the repository/
end
def test_entry_download
get :entry, :id => 1, :path => ['sources', 'watchers_controller.rb'], :format => 'raw'
@repository.fetch_changesets
@repository.reload
get :entry, :id => PRJ_ID, :path => ['sources', 'watchers_controller.rb'], :format => 'raw'
assert_response :success
end
def test_directory_entry
get :entry, :id => 1, :path => ['sources']
@repository.fetch_changesets
@repository.reload
get :entry, :id => PRJ_ID, :path => ['sources']
assert_response :success
assert_template 'show'
assert_not_nil assigns(:entry)
@ -125,8 +144,9 @@ class RepositoriesCvsControllerTest < ActionController::TestCase
end
def test_diff
Project.find(1).repository.fetch_changesets
get :diff, :id => 1, :rev => 3, :type => 'inline'
@repository.fetch_changesets
@repository.reload
get :diff, :id => PRJ_ID, :rev => 3, :type => 'inline'
assert_response :success
assert_template 'diff'
assert_tag :tag => 'td', :attributes => { :class => 'line-code diff_out' },
@ -136,8 +156,9 @@ class RepositoriesCvsControllerTest < ActionController::TestCase
end
def test_annotate
Project.find(1).repository.fetch_changesets
get :annotate, :id => 1, :path => ['sources', 'watchers_controller.rb']
@repository.fetch_changesets
@repository.reload
get :annotate, :id => PRJ_ID, :path => ['sources', 'watchers_controller.rb']
assert_response :success
assert_template 'annotate'
# 1.1 line

View File

@ -170,6 +170,15 @@ class RepositoriesGitControllerTest < ActionController::TestCase
:sibling => { :tag => 'td', :content => /watcher =/ }
end
def test_annotate_at_given_revision
@repository.fetch_changesets
@repository.reload
get :annotate, :id => 3, :rev => 'deff7', :path => ['sources', 'watchers_controller.rb']
assert_response :success
assert_template 'annotate'
assert_tag :tag => 'h2', :content => /@ deff712f/
end
def test_annotate_binary_file
get :annotate, :id => 3, :path => ['images', 'edit.png']
assert_response 500

View File

@ -196,6 +196,17 @@ class RepositoriesMercurialControllerTest < ActionController::TestCase
:sibling => { :tag => 'td', :content => /watcher =/ }
end
def test_annotate_at_given_revision
@repository.fetch_changesets
@repository.reload
[2, '400bb8672109', '400', 400].each do |r1|
get :annotate, :id => 3, :rev => r1, :path => ['sources', 'watchers_controller.rb']
assert_response :success
assert_template 'annotate'
assert_tag :tag => 'h2', :content => /@ 2:400bb8672109/
end
end
def test_empty_revision
@repository.fetch_changesets
@repository.reload

View File

@ -228,6 +228,13 @@ class RepositoriesSubversionControllerTest < ActionController::TestCase
assert_response :success
assert_template 'annotate'
end
def test_annotate_at_given_revision
get :annotate, :id => 1, :rev => 8, :path => ['subversion_test', 'helloworld.c']
assert_response :success
assert_template 'annotate'
assert_tag :tag => 'h2', :content => /@ 8/
end
else
puts "Subversion test repository NOT FOUND. Skipping functional tests !!!"
def test_fake; assert true end

View File

@ -200,7 +200,7 @@ RAW
'export:/some/file' => link_to('export:/some/file', source_url.merge(:format => 'raw'), :class => 'source download'),
# message
'message#4' => link_to('Post 2', message_url, :class => 'message'),
'message#5' => link_to('RE: post 2', message_url.merge(:anchor => 'message-5'), :class => 'message'),
'message#5' => link_to('RE: post 2', message_url.merge(:anchor => 'message-5', :r => 5), :class => 'message'),
# project
'project#3' => link_to('eCookbook Subproject 1', project_url, :class => 'project'),
'project:subproject1' => link_to('eCookbook Subproject 1', project_url, :class => 'project'),
@ -225,6 +225,35 @@ RAW
to_test.each { |text, result| assert_equal "<p>#{result}</p>", textilizable(text), "#{text} failed" }
end
def test_cross_project_redmine_links
source_link = link_to('ecookbook:source:/some/file', {:controller => 'repositories', :action => 'entry', :id => 'ecookbook', :path => ['some', 'file']},
:class => 'source')
changeset_link = link_to('ecookbook:r2', {:controller => 'repositories', :action => 'revision', :id => 'ecookbook', :rev => 2},
:class => 'changeset', :title => 'This commit fixes #1, #2 and references #1 & #3')
to_test = {
# documents
'document:"Test document"' => 'document:"Test document"',
'ecookbook:document:"Test document"' => '<a href="/documents/1" class="document">Test document</a>',
'invalid:document:"Test document"' => 'invalid:document:"Test document"',
# versions
'version:"1.0"' => 'version:"1.0"',
'ecookbook:version:"1.0"' => '<a href="/versions/show/2" class="version">1.0</a>',
'invalid:version:"1.0"' => 'invalid:version:"1.0"',
# changeset
'r2' => 'r2',
'ecookbook:r2' => changeset_link,
'invalid:r2' => 'invalid:r2',
# source
'source:/some/file' => 'source:/some/file',
'ecookbook:source:/some/file' => source_link,
'invalid:source:/some/file' => 'invalid:source:/some/file',
}
@project = Project.find(3)
to_test.each { |text, result| assert_equal "<p>#{result}</p>", textilizable(text), "#{text} failed" }
end
def test_redmine_links_git_commit
changeset_link = link_to('abcd',
{

View File

@ -202,7 +202,19 @@ class IssueNestedSetTest < ActiveSupport::TestCase
issue2 = create_issue!
issue3 = create_issue!(:parent_issue_id => issue2.id)
issue4 = create_issue!(:parent_issue_id => issue1.id)
issue2.reload.destroy
issue3.init_journal(User.find(2))
issue3.subject = 'child with journal'
issue3.save!
assert_difference 'Issue.count', -2 do
assert_difference 'Journal.count', -1 do
assert_difference 'JournalDetail.count', -1 do
Issue.find(issue2.id).destroy
end
end
end
issue1.reload
issue4.reload
assert !Issue.exists?(issue2.id)
@ -211,6 +223,26 @@ class IssueNestedSetTest < ActiveSupport::TestCase
assert_equal [issue1.id, 2, 3], [issue4.root_id, issue4.lft, issue4.rgt]
end
def test_destroy_child_issue_with_children
root = Issue.create!(:project_id => 1, :author_id => 2, :tracker_id => 1, :subject => 'root')
child = Issue.create!(:project_id => 1, :author_id => 2, :tracker_id => 1, :subject => 'child', :parent_issue_id => root.id)
leaf = Issue.create!(:project_id => 1, :author_id => 2, :tracker_id => 1, :subject => 'leaf', :parent_issue_id => child.id)
leaf.init_journal(User.find(2))
leaf.subject = 'leaf with journal'
leaf.save!
assert_difference 'Issue.count', -2 do
assert_difference 'Journal.count', -1 do
assert_difference 'JournalDetail.count', -1 do
Issue.find(child.id).destroy
end
end
end
root = Issue.find(root.id)
assert root.leaf?, "Root issue is not a leaf (lft: #{root.lft}, rgt: #{root.rgt})"
end
def test_parent_priority_should_be_the_highest_child_priority
parent = create_issue!(:priority => IssuePriority.find_by_name('Normal'))
# Create children

View File

@ -0,0 +1,52 @@
# Redmine - project management software
# Copyright (C) 2006-2011 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.expand_path('../../../../test_helper', __FILE__)
class Redmine::ConfigurationTest < ActiveSupport::TestCase
def setup
@conf = Redmine::Configuration
end
def test_empty
assert_kind_of Hash, load_conf('empty.yml', 'test')
end
def test_default
assert_kind_of Hash, load_conf('default.yml', 'test')
assert_equal 'foo', @conf['somesetting']
end
def test_no_default
assert_kind_of Hash, load_conf('no_default.yml', 'test')
assert_equal 'foo', @conf['somesetting']
end
def test_overrides
assert_kind_of Hash, load_conf('overrides.yml', 'test')
assert_equal 'bar', @conf['somesetting']
end
private
def load_conf(file, env)
@conf.load(
:file => File.join(Rails.root, 'test', 'fixtures', 'configuration', file),
:env => env
)
end
end

View File

@ -0,0 +1,42 @@
require File.expand_path('../../../../../../test_helper', __FILE__)
begin
require 'mocha'
class CvsAdapterTest < ActiveSupport::TestCase
REPOSITORY_PATH = RAILS_ROOT.gsub(%r{config\/\.\.}, '') + '/tmp/test/cvs_repository'
MODULE_NAME = 'test'
if File.directory?(REPOSITORY_PATH)
def setup
@adapter = Redmine::Scm::Adapters::CvsAdapter.new(MODULE_NAME, REPOSITORY_PATH)
end
def test_revisions_all
cnt = 0
@adapter.revisions('', nil, nil, :with_paths => true) do |revision|
cnt += 1
end
assert_equal 14, cnt
end
def test_revisions_from_rev3
rev3_committed_on = Time.gm(2007, 12, 13, 16, 27, 22)
cnt = 0
@adapter.revisions('', rev3_committed_on, nil, :with_paths => true) do |revision|
cnt += 1
end
assert_equal 2, cnt
end
else
puts "Cvs test repository NOT FOUND. Skipping unit tests !!!"
def test_fake; assert true end
end
end
rescue LoadError
class CvsMochaFake < ActiveSupport::TestCase
def test_fake; assert(false, "Requires mocha to run those tests") end
end
end

View File

@ -0,0 +1,53 @@
require File.expand_path('../../../../../../test_helper', __FILE__)
begin
require 'mocha'
class DarcsAdapterTest < ActiveSupport::TestCase
REPOSITORY_PATH = RAILS_ROOT.gsub(%r{config\/\.\.}, '') + '/tmp/test/darcs_repository'
if File.directory?(REPOSITORY_PATH)
def setup
@adapter = Redmine::Scm::Adapters::DarcsAdapter.new(REPOSITORY_PATH)
end
def test_darcsversion
to_test = { "1.0.9 (release)\n" => [1,0,9] ,
"2.2.0 (release)\n" => [2,2,0] }
to_test.each do |s, v|
test_darcsversion_for(s, v)
end
end
def test_revisions
id1 = '20080308225258-98289-761f654d669045eabee90b91b53a21ce5593cadf.gz'
revs = @adapter.revisions('', nil, nil, {:with_path => true})
assert_equal 6, revs.size
assert_equal id1, revs[5].scmid
paths = revs[5].paths
assert_equal 5, paths.size
assert_equal 'A', paths[0][:action]
assert_equal '/README', paths[0][:path]
assert_equal 'A', paths[1][:action]
assert_equal '/images', paths[1][:path]
end
private
def test_darcsversion_for(darcsversion, version)
@adapter.class.expects(:darcs_binary_version_from_command_line).returns(darcsversion)
assert_equal version, @adapter.class.darcs_binary_version
end
else
puts "Darcs test repository NOT FOUND. Skipping unit tests !!!"
def test_fake; assert true end
end
end
rescue LoadError
class DarcsMochaFake < ActiveSupport::TestCase
def test_fake; assert(false, "Requires mocha to run those tests") end
end
end

View File

@ -69,6 +69,17 @@ begin
end
end
def test_diff_made_by_revision
if @adapter.class.client_version_above?([1, 2])
[16, '16', '4cddb4e45f52'].each do |r1|
diff1 = @adapter.diff(nil, r1)
assert_equal 5, diff1.size
buf = diff1[4].gsub(/\r\n|\r|\n/, "")
assert_equal '+0885933ad4f68d77c2649cd11f8311276e7ef7ce tag-init-revision', buf
end
end
end
def test_cat
[2, '400bb8672109', '400', 400].each do |r|
buf = @adapter.cat('sources/welcome_controller.rb', r)

Some files were not shown because too many files have changed in this diff Show More