Compare commits

..
1 Commits
Author SHA1 Message Date
Jean-Philippe Lang 82b5285c2d tagged version 1.2.1
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/tags/1.2.1@6262 e93f8b46-1217-0410-a6f0-8f06a7374b81
2011-07-11 11:45:47 +00:00
216 changed files with 8639 additions and 1660 deletions
+3 -2
View File
@@ -48,8 +48,9 @@ class ContextMenusController < ApplicationController
@projects = @time_entries.collect(&:project).compact.uniq @projects = @time_entries.collect(&:project).compact.uniq
@project = @projects.first if @projects.size == 1 @project = @projects.first if @projects.size == 1
@activities = TimeEntryActivity.shared.active @activities = TimeEntryActivity.shared.active
@can = {:edit => User.current.allowed_to?(:edit_time_entries, @projects), @can = {:edit => User.current.allowed_to?(:log_time, @projects),
:delete => User.current.allowed_to?(:edit_time_entries, @projects) :update => User.current.allowed_to?(:log_time, @projects),
:delete => User.current.allowed_to?(:log_time, @projects)
} }
@back = back_url @back = back_url
render :layout => false render :layout => false
+2 -3
View File
@@ -20,8 +20,7 @@ class SysController < ActionController::Base
def projects def projects
p = Project.active.has_module(:repository).find(:all, :include => :repository, :order => 'identifier') p = Project.active.has_module(:repository).find(:all, :include => :repository, :order => 'identifier')
# extra_info attribute from repository breaks activeresource client render :xml => p.to_xml(:include => :repository)
render :xml => p.to_xml(:only => [:id, :identifier, :name, :is_public, :status], :include => {:repository => {:only => [:id, :url]}})
end end
def create_project_repository def create_project_repository
@@ -32,7 +31,7 @@ class SysController < ActionController::Base
logger.info "Repository for #{project.name} was reported to be created by #{request.remote_ip}." logger.info "Repository for #{project.name} was reported to be created by #{request.remote_ip}."
project.repository = Repository.factory(params[:vendor], params[:repository]) project.repository = Repository.factory(params[:vendor], params[:repository])
if project.repository && project.repository.save if project.repository && project.repository.save
render :xml => project.repository.to_xml(:only => [:id, :url]), :status => 201 render :xml => project.repository, :status => 201
else else
render :nothing => true, :status => 422 render :nothing => true, :status => 422
end end
+3 -12
View File
@@ -550,20 +550,15 @@ module ApplicationHelper
if page =~ /^(.+?)\#(.+)$/ if page =~ /^(.+?)\#(.+)$/
page, anchor = $1, $2 page, anchor = $1, $2
end end
anchor = sanitize_anchor_name(anchor) if anchor.present?
# check if page exists # check if page exists
wiki_page = link_project.wiki.find_page(page) wiki_page = link_project.wiki.find_page(page)
url = if anchor.present? && wiki_page.present? && (obj.is_a?(WikiContent) || obj.is_a?(WikiContent::Version)) && obj.page == wiki_page url = case options[:wiki_links]
"##{anchor}" when :local; "#{title}.html"
else
case options[:wiki_links]
when :local; "#{page.present? ? Wiki.titleize(page) : ''}.html" + (anchor.present? ? "##{anchor}" : '')
when :anchor; "##{title}" # used for single-file wiki export when :anchor; "##{title}" # used for single-file wiki export
else else
wiki_page_id = page.present? ? Wiki.titleize(page) : nil wiki_page_id = page.present? ? Wiki.titleize(page) : nil
url_for(:only_path => only_path, :controller => 'wiki', :action => 'show', :project_id => link_project, :id => wiki_page_id, :anchor => anchor) url_for(:only_path => only_path, :controller => 'wiki', :action => 'show', :project_id => link_project, :id => wiki_page_id, :anchor => anchor)
end end
end
link_to((title || page), url, :class => ('wiki-page' + (wiki_page ? '' : ' new'))) link_to((title || page), url, :class => ('wiki-page' + (wiki_page ? '' : ' new')))
else else
# project or wiki doesn't exist # project or wiki doesn't exist
@@ -708,7 +703,7 @@ module ApplicationHelper
text.gsub!(HEADING_RE) do text.gsub!(HEADING_RE) do
level, attrs, content = $1.to_i, $2, $3 level, attrs, content = $1.to_i, $2, $3
item = strip_tags(content).strip item = strip_tags(content).strip
anchor = sanitize_anchor_name(item) anchor = item.gsub(%r{[^\w\s\-]}, '').gsub(%r{\s+(\-+\s*)?}, '-')
@parsed_headings << [level, anchor, item] @parsed_headings << [level, anchor, item]
"<a name=\"#{anchor}\"></a>\n<h#{level} #{attrs}>#{content}<a href=\"##{anchor}\" class=\"wiki-anchor\">&para;</a></h#{level}>" "<a name=\"#{anchor}\"></a>\n<h#{level} #{attrs}>#{content}<a href=\"##{anchor}\" class=\"wiki-anchor\">&para;</a></h#{level}>"
end end
@@ -894,10 +889,6 @@ module ApplicationHelper
end end
end end
def sanitize_anchor_name(anchor)
anchor.gsub(%r{[^\w\s\-]}, '').gsub(%r{\s+(\-+\s*)?}, '-')
end
# Returns the javascript tags that are included in the html layout head # Returns the javascript tags that are included in the html layout head
def javascript_heads def javascript_heads
tags = javascript_include_tag(:defaults) tags = javascript_include_tag(:defaults)
+1 -1
View File
@@ -193,7 +193,7 @@ class Changeset < ActiveRecord::Base
def fix_issue(issue) def fix_issue(issue)
status = IssueStatus.find_by_id(Setting.commit_fix_status_id.to_i) status = IssueStatus.find_by_id(Setting.commit_fix_status_id.to_i)
if status.nil? if status.nil?
logger.warn("No status matches commit_fix_status_id setting (#{Setting.commit_fix_status_id})") if logger logger.warn("No status macthes commit_fix_status_id setting (#{Setting.commit_fix_status_id})") if logger
return issue return issue
end end
+1 -9
View File
@@ -42,14 +42,6 @@ class CustomField < ActiveRecord::Base
errors.add(:possible_values, :invalid) unless self.possible_values.is_a? Array errors.add(:possible_values, :invalid) unless self.possible_values.is_a? Array
end end
if regexp.present?
begin
Regexp.new(regexp)
rescue
errors.add(:regexp, :invalid)
end
end
# validate default value # validate default value
v = CustomValue.new(:custom_field => self.clone, :value => default_value, :customized => nil) v = CustomValue.new(:custom_field => self.clone, :value => default_value, :customized => nil)
v.custom_field.is_required = false v.custom_field.is_required = false
@@ -64,7 +56,7 @@ class CustomField < ActiveRecord::Base
when 'user' when 'user'
obj.project.users.sort.collect {|u| [u.to_s, u.id.to_s]} obj.project.users.sort.collect {|u| [u.to_s, u.id.to_s]}
when 'version' when 'version'
obj.project.shared_versions.sort.collect {|u| [u.to_s, u.id.to_s]} obj.project.versions.sort.collect {|u| [u.to_s, u.id.to_s]}
end end
elsif obj.is_a?(Array) elsif obj.is_a?(Array)
obj.collect {|o| possible_values_options(o)}.inject {|memo, v| memo & v} obj.collect {|o| possible_values_options(o)}.inject {|memo, v| memo & v}
+1 -1
View File
@@ -62,7 +62,7 @@ protected
when 'float' when 'float'
begin; Kernel.Float(value); rescue; errors.add(:value, :invalid) end begin; Kernel.Float(value); rescue; errors.add(:value, :invalid) end
when 'date' when 'date'
errors.add(:value, :not_a_date) unless value =~ /^\d{4}-\d{2}-\d{2}$/ && begin; value.to_date; rescue; false end errors.add(:value, :not_a_date) unless value =~ /^\d{4}-\d{2}-\d{2}$/
when 'list' when 'list'
errors.add(:value, :inclusion) unless custom_field.possible_values.include?(value) errors.add(:value, :inclusion) unless custom_field.possible_values.include?(value)
end end
-1
View File
@@ -449,7 +449,6 @@ class Issue < ActiveRecord::Base
def assignable_users def assignable_users
users = project.assignable_users users = project.assignable_users
users << author if author users << author if author
users << assigned_to if assigned_to
users.uniq.sort users.uniq.sort
end end
+8 -10
View File
@@ -58,7 +58,8 @@ class IssueStatus < ActiveRecord::Base
transitions = workflows.select do |w| transitions = workflows.select do |w|
role_ids.include?(w.role_id) && role_ids.include?(w.role_id) &&
w.tracker_id == tracker.id && w.tracker_id == tracker.id &&
((!w.author && !w.assignee) || (author && w.author) || (assignee && w.assignee)) (author || !w.author) &&
(assignee || !w.assignee)
end end
transitions.collect{|w| w.new_status}.compact.sort transitions.collect{|w| w.new_status}.compact.sort
else else
@@ -69,17 +70,14 @@ class IssueStatus < ActiveRecord::Base
# Same thing as above but uses a database query # Same thing as above but uses a database query
# More efficient than the previous method if called just once # More efficient than the previous method if called just once
def find_new_statuses_allowed_to(roles, tracker, author=false, assignee=false) def find_new_statuses_allowed_to(roles, tracker, author=false, assignee=false)
if roles.present? && tracker if roles && tracker
conditions = "(author = :false AND assignee = :false)" conditions = {:role_id => roles.collect(&:id), :tracker_id => tracker.id}
conditions << " OR author = :true" if author conditions[:author] = false unless author
conditions << " OR assignee = :true" if assignee conditions[:assignee] = false unless assignee
workflows.find(:all, workflows.find(:all,
:include => :new_status, :include => :new_status,
:conditions => ["role_id IN (:role_ids) AND tracker_id = :tracker_id AND (#{conditions})", :conditions => conditions).collect{|w| w.new_status}.compact.sort
{:role_ids => roles.collect(&:id), :tracker_id => tracker.id, :true => true, :false => false}
]
).collect{|w| w.new_status}.compact.sort
else else
[] []
end end
+1 -1
View File
@@ -198,7 +198,7 @@ class MailHandler < ActionMailer::Base
end end
def add_attachments(obj) def add_attachments(obj)
if email.attachments && email.attachments.any? if email.has_attachments?
email.attachments.each do |attachment| email.attachments.each do |attachment|
Attachment.create(:container => obj, Attachment.create(:container => obj,
:file => attachment, :file => attachment,
-1
View File
@@ -809,7 +809,6 @@ class Project < ActiveRecord::Base
new_query.attributes = query.attributes.dup.except("id", "project_id", "sort_criteria") new_query.attributes = query.attributes.dup.except("id", "project_id", "sort_criteria")
new_query.sort_criteria = query.sort_criteria if query.sort_criteria new_query.sort_criteria = query.sort_criteria if query.sort_criteria
new_query.project = self new_query.project = self
new_query.user_id = query.user_id
self.queries << new_query self.queries << new_query
end end
end end
+10 -13
View File
@@ -333,17 +333,14 @@ class Query < ActiveRecord::Base
end end
def columns def columns
# preserve the column_names order if has_default_columns?
(has_default_columns? ? default_columns_names : column_names).collect do |name| available_columns.select do |c|
available_columns.find { |col| col.name == name } # Adds the project column by default for cross-project lists
end.compact Setting.issue_list_default_columns.include?(c.name.to_s) || (c.name == :project && project.nil?)
end end
else
def default_columns_names # preserve the column_names order
@default_columns_names ||= begin column_names.collect {|name| available_columns.find {|col| col.name == name}}.compact
default_columns = Setting.issue_list_default_columns.map(&:to_sym)
project.present? ? default_columns : [:project] | default_columns
end end
end end
@@ -352,7 +349,7 @@ class Query < ActiveRecord::Base
names = names.select {|n| n.is_a?(Symbol) || !n.blank? } names = names.select {|n| n.is_a?(Symbol) || !n.blank? }
names = names.collect {|n| n.is_a?(Symbol) ? n : n.to_sym } names = names.collect {|n| n.is_a?(Symbol) ? n : n.to_sym }
# Set column_names to nil if default columns # Set column_names to nil if default columns
if names == default_columns_names if names.map(&:to_s) == Setting.issue_list_default_columns
names = nil names = nil
end end
end end
@@ -521,7 +518,7 @@ class Query < ActiveRecord::Base
# Returns the issue count # Returns the issue count
def issue_count def issue_count
Issue.visible.count(:include => [:status, :project], :conditions => statement) Issue.count(:include => [:status, :project], :conditions => statement)
rescue ::ActiveRecord::StatementInvalid => e rescue ::ActiveRecord::StatementInvalid => e
raise StatementInvalid.new(e.message) raise StatementInvalid.new(e.message)
end end
-11
View File
@@ -92,17 +92,6 @@ class Repository::Git < Repository
options = {:report_last_commit => extra_report_last_commit}) options = {:report_last_commit => extra_report_last_commit})
end end
# With SCMs that have a sequential commit numbering,
# such as Subversion and Mercurial,
# Redmine is able to be clever and only fetch changesets
# going forward from the most recent one it knows about.
#
# However, Git does not have a sequential commit numbering.
#
# In order to fetch only new adding revisions,
# Redmine needs to parse revisions per branch.
# Branch "last_scmid" is for this requirement.
#
# In Git and Mercurial, revisions are not in date order. # In Git and Mercurial, revisions are not in date order.
# Redmine Mercurial fixed issues. # Redmine Mercurial fixed issues.
# * Redmine Takes Too Long On Large Mercurial Repository # * Redmine Takes Too Long On Large Mercurial Repository
-5
View File
@@ -43,11 +43,6 @@ class Version < ActiveRecord::Base
user.allowed_to?(:view_issues, self.project) user.allowed_to?(:view_issues, self.project)
end end
# Version files have same visibility as project files
def attachments_visible?(*args)
project.present? && project.attachments_visible?(*args)
end
def start_date def start_date
@start_date ||= fixed_issues.minimum('start_date') @start_date ||= fixed_issues.minimum('start_date')
end end
+1 -1
View File
@@ -30,7 +30,7 @@ class WikiPage < ActiveRecord::Base
:datetime => :created_on, :datetime => :created_on,
:url => Proc.new {|o| {:controller => 'wiki', :action => 'show', :project_id => o.wiki.project, :id => o.title}} :url => Proc.new {|o| {:controller => 'wiki', :action => 'show', :project_id => o.wiki.project, :id => o.title}}
acts_as_searchable :columns => ['title', "#{WikiContent.table_name}.text"], acts_as_searchable :columns => ['title', 'text'],
:include => [{:wiki => :project}, :content], :include => [{:wiki => :project}, :content],
:permission => :view_wiki_pages, :permission => :view_wiki_pages,
:project_key => "#{Wiki.table_name}.project_id" :project_key => "#{Wiki.table_name}.project_id"
@@ -15,13 +15,13 @@
<ul> <ul>
<% @activities.each do |u| -%> <% @activities.each do |u| -%>
<li><%= context_menu_link u.name, {:controller => 'timelog', :action => 'bulk_edit', :ids => @time_entries.collect(&:id), :time_entry => {'activity_id' => u}, :back_url => @back}, :method => :post, <li><%= context_menu_link u.name, {:controller => 'timelog', :action => 'bulk_edit', :ids => @time_entries.collect(&:id), :time_entry => {'activity_id' => u}, :back_url => @back}, :method => :post,
:selected => (@time_entry && u == @time_entry.activity), :disabled => !@can[:edit] %></li> :selected => (@time_entry && u == @time_entry.activity), :disabled => !@can[:update] %></li>
<% end -%> <% end -%>
<li><%= context_menu_link l(:label_nobody), {:controller => 'timelog', :action => 'bulk_edit', :ids => @time_entries.collect(&:id), :time_entry => {'activity_id' => 'none'}, :back_url => @back}, :method => :post, <li><%= context_menu_link l(:label_nobody), {:controller => 'timelog', :action => 'bulk_edit', :ids => @time_entries.collect(&:id), :time_entry => {'activity_id' => 'none'}, :back_url => @back}, :method => :post,
:selected => (@time_entry && @time_entry.activity.nil?), :disabled => !@can[:edit] %></li> :selected => (@time_entry && @time_entry.activity.nil?), :disabled => !@can[:update] %></li>
</ul> </ul>
</li> </li>
<% end %> <% end %>
<%= call_hook(:view_time_entries_context_menu_end, {:time_entries => @time_entries, :can => @can, :back => @back }) %> <%= call_hook(:view_time_entries_context_menu_end, {:time_entries => @time_entries, :can => @can, :back => @back }) %>
+1 -1
View File
@@ -2,5 +2,5 @@
<p><em><%= format_time(document.updated_on) %></em></p> <p><em><%= format_time(document.updated_on) %></em></p>
<div class="wiki"> <div class="wiki">
<%= textilizable(truncate_lines(document.description), :object => document) %> <%= textilizable(truncate_lines(document.description)) %>
</div> </div>
+1 -1
View File
@@ -15,7 +15,7 @@
<%= render :partial => (@edit_allowed ? 'form' : 'form_update'), :locals => {:f => f} %> <%= render :partial => (@edit_allowed ? 'form' : 'form_update'), :locals => {:f => f} %>
</fieldset> </fieldset>
<% end %> <% end %>
<% if User.current.allowed_to?(:log_time, @project) %> <% if authorize_for('timelog', 'edit') %>
<fieldset class="tabular"><legend><%= l(:button_log_time) %></legend> <fieldset class="tabular"><legend><%= l(:button_log_time) %></legend>
<% fields_for :time_entry, @time_entry, { :builder => TabularFormBuilder, :lang => current_language} do |time_entry| %> <% fields_for :time_entry, @time_entry, { :builder => TabularFormBuilder, :lang => current_language} do |time_entry| %>
<div class="splitcontentleft"> <div class="splitcontentleft">
@@ -32,7 +32,6 @@
</div> </div>
<% unless @hours.empty? %> <% unless @hours.empty? %>
<div class="autoscroll">
<table class="list" id="time-report"> <table class="list" id="time-report">
<thead> <thead>
<tr> <tr>
@@ -60,7 +59,6 @@
</tr> </tr>
</tbody> </tbody>
</table> </table>
</div>
<% other_formats_links do |f| %> <% other_formats_links do |f| %>
<%= f.link_to 'CSV', :url => params %> <%= f.link_to 'CSV', :url => params %>
-2
View File
@@ -1,6 +1,5 @@
<% form_tag({}) do -%> <% form_tag({}) do -%>
<%= hidden_field_tag 'back_url', url_for(params) %> <%= hidden_field_tag 'back_url', url_for(params) %>
<div class="autoscroll">
<table class="list time-entries"> <table class="list time-entries">
<thead> <thead>
<tr> <tr>
@@ -49,7 +48,6 @@
<% end -%> <% end -%>
</tbody> </tbody>
</table> </table>
</div>
<% end -%> <% end -%>
<%= context_menu time_entries_context_menu_path %> <%= context_menu time_entries_context_menu_path %>
+1 -1
View File
@@ -6,7 +6,7 @@
<h2><%= @page.pretty_title %></h2> <h2><%= @page.pretty_title %></h2>
<p> <p>
<%= l(:label_version) %> <%= link_to @annotate.content.version, :action => 'show', :project_id => @project, :id => @page.title, :version => @annotate.content.version %> <%= l(:label_version) %> <%= link_to @annotate.content.version, :action => 'show', :id => @page.title, :version => @annotate.content.version %>
<em>(<%= @annotate.content.author ? @annotate.content.author.name : "anonyme" %>, <%= format_time(@annotate.content.updated_on) %>)</em> <em>(<%= @annotate.content.author ? @annotate.content.author.name : "anonyme" %>, <%= format_time(@annotate.content.updated_on) %>)</em>
</p> </p>
+2 -2
View File
@@ -46,8 +46,8 @@
<% end %> <% end %>
<% other_formats_links do |f| %> <% other_formats_links do |f| %>
<%= f.link_to 'HTML', :url => {:id => @page.title, :version => params[:version]} %> <%= f.link_to 'HTML', :url => {:id => @page.title, :version => @content.version} %>
<%= f.link_to 'TXT', :url => {:id => @page.title, :version => params[:version]} %> <%= f.link_to 'TXT', :url => {:id => @page.title, :version => @content.version} %>
<% end if User.current.allowed_to?(:export_wiki_pages, @project) %> <% end if User.current.allowed_to?(:export_wiki_pages, @project) %>
<% content_for :header_tags do %> <% content_for :header_tags do %>
+7 -15
View File
@@ -89,7 +89,7 @@ default:
authentication: :login authentication: :login
user_name: "redmine@example.net" user_name: "redmine@example.net"
password: "redmine" password: "redmine"
# Absolute path to the directory where attachments are stored. # Absolute path to the directory where attachments are stored.
# The default is the 'files' directory in your Redmine instance. # The default is the 'files' directory in your Redmine instance.
# Your Redmine instance needs to have write permission on this # Your Redmine instance needs to have write permission on this
@@ -98,7 +98,7 @@ default:
# attachments_storage_path: /var/redmine/files # attachments_storage_path: /var/redmine/files
# attachments_storage_path: D:/redmine/files # attachments_storage_path: D:/redmine/files
attachments_storage_path: attachments_storage_path:
# Configuration of the autologin cookie. # Configuration of the autologin cookie.
# autologin_cookie_name: the name of the cookie (default: autologin) # autologin_cookie_name: the name of the cookie (default: autologin)
# autologin_cookie_path: the cookie path (default: /) # autologin_cookie_path: the cookie path (default: /)
@@ -106,17 +106,10 @@ default:
autologin_cookie_name: autologin_cookie_name:
autologin_cookie_path: autologin_cookie_path:
autologin_cookie_secure: autologin_cookie_secure:
# Configuration of SCM executable command. # Configuration of SCM executable command.
#
# Absolute path (e.g. /usr/local/bin/hg) or command name (e.g. hg.exe, bzr.exe) # Absolute path (e.g. /usr/local/bin/hg) or command name (e.g. hg.exe, bzr.exe)
# On Windows + CRuby, *.cmd, *.bat (e.g. hg.cmd, bzr.bat) does not work. # On Windows, *.cmd, *.bat (e.g. hg.cmd, bzr.bat) does not work.
#
# On Windows + JRuby 1.6.2, path which contains spaces does not work.
# For example, "C:\Program Files\TortoiseHg\hg.exe".
# If you want to this feature, you need to install to the path which does not contains spaces.
# For example, "C:\TortoiseHg\hg.exe".
#
# Examples: # Examples:
# scm_subversion_command: svn # (default: svn) # scm_subversion_command: svn # (default: svn)
# scm_mercurial_command: C:\Program Files\TortoiseHg\hg.exe # (default: hg) # scm_mercurial_command: C:\Program Files\TortoiseHg\hg.exe # (default: hg)
@@ -124,14 +117,13 @@ default:
# scm_cvs_command: cvs # (default: cvs) # scm_cvs_command: cvs # (default: cvs)
# scm_bazaar_command: bzr.exe # (default: bzr) # scm_bazaar_command: bzr.exe # (default: bzr)
# scm_darcs_command: darcs-1.0.9-i386-linux # (default: darcs) # scm_darcs_command: darcs-1.0.9-i386-linux # (default: darcs)
#
scm_subversion_command: scm_subversion_command:
scm_mercurial_command: scm_mercurial_command:
scm_git_command: scm_git_command:
scm_cvs_command: scm_cvs_command:
scm_bazaar_command: scm_bazaar_command:
scm_darcs_command: scm_darcs_command:
# Key used to encrypt sensitive data in the database (SCM and LDAP passwords). # Key used to encrypt sensitive data in the database (SCM and LDAP passwords).
# If you don't want to enable data encryption, just leave it blank. # If you don't want to enable data encryption, just leave it blank.
# WARNING: losing/changing this key will make encrypted data unreadable. # WARNING: losing/changing this key will make encrypted data unreadable.
@@ -144,8 +136,8 @@ default:
# * decrypt data using 'rake db:decrypt RAILS_ENV=production' first # * decrypt data using 'rake db:decrypt RAILS_ENV=production' first
# * change the cipher key here in your configuration file # * change the cipher key here in your configuration file
# * encrypt data using 'rake db:encrypt RAILS_ENV=production' # * encrypt data using 'rake db:encrypt RAILS_ENV=production'
database_cipher_key: database_cipher_key:
# specific configuration options for production environment # specific configuration options for production environment
# that overrides the default ones # that overrides the default ones
production: production:
+1 -1
View File
@@ -368,7 +368,7 @@ bg:
setting_issue_done_ratio_issue_status: Използване на състоянието на задачите setting_issue_done_ratio_issue_status: Използване на състоянието на задачите
setting_start_of_week: Първи ден на седмицата setting_start_of_week: Първи ден на седмицата
setting_rest_api_enabled: Разрешаване на REST web сървис setting_rest_api_enabled: Разрешаване на REST web сървис
setting_cache_formatted_text: Кещиране на форматираните текстове setting_cache_formatted_text: Cache formatted text
setting_default_notification_option: Подразбиращ се начин за известяване setting_default_notification_option: Подразбиращ се начин за известяване
setting_commit_logtime_enabled: Разрешаване на отчитането на работното време setting_commit_logtime_enabled: Разрешаване на отчитането на работното време
setting_commit_logtime_activity_id: Дейност при отчитане на работното време setting_commit_logtime_activity_id: Дейност при отчитане на работното време
+1 -1
View File
@@ -132,7 +132,7 @@ es:
greater_than_start_date: "debe ser posterior a la fecha de comienzo" greater_than_start_date: "debe ser posterior a la fecha de comienzo"
not_same_project: "no pertenece al mismo proyecto" not_same_project: "no pertenece al mismo proyecto"
circular_dependency: "Esta relación podría crear una dependencia circular" circular_dependency: "Esta relación podría crear una dependencia circular"
cant_link_an_issue_with_a_descendant: "Esta petición no puede ser ligada a una de estas tareas" cant_link_an_issue_with_a_descendant: "An issue can not be linked to one of its subtasks"
# Append your own errors here or at the model/attributes scope. # Append your own errors here or at the model/attributes scope.
+53 -53
View File
@@ -34,40 +34,40 @@
distance_in_words: distance_in_words:
half_a_minute: 'fél perc' half_a_minute: 'fél perc'
less_than_x_seconds: less_than_x_seconds:
# zero: 'kevesebb, mint 1 másodperce' # zero: 'kevesebb, mint 1 másodperc'
one: 'kevesebb, mint 1 másodperce' one: 'kevesebb, mint 1 másodperc'
other: 'kevesebb, mint %{count} másodperce' other: 'kevesebb, mint %{count} másodperc'
x_seconds: x_seconds:
one: '1 másodperce' one: '1 másodperc'
other: '%{count} másodperce' other: '%{count} másodperc'
less_than_x_minutes: less_than_x_minutes:
# zero: 'kevesebb, mint 1 perce' # zero: 'kevesebb, mint 1 perc'
one: 'kevesebb, mint 1 perce' one: 'kevesebb, mint 1 perc'
other: 'kevesebb, mint %{count} perce' other: 'kevesebb, mint %{count} perc'
x_minutes: x_minutes:
one: '1 perce' one: '1 perc'
other: '%{count} perce' other: '%{count} perc'
about_x_hours: about_x_hours:
one: 'csaknem 1 órája' one: 'majdnem 1 óra'
other: 'csaknem %{count} órája' other: 'majdnem %{count} óra'
x_days: x_days:
one: '1 napja' one: '1 nap'
other: '%{count} napja' other: '%{count} nap'
about_x_months: about_x_months:
one: 'csaknem 1 hónapja' one: 'majdnem 1 hónap'
other: 'csaknem %{count} hónapja' other: 'majdnem %{count} hónap'
x_months: x_months:
one: '1 hónapja' one: '1 hónap'
other: '%{count} hónapja' other: '%{count} hónap'
about_x_years: about_x_years:
one: 'csaknem 1 éve' one: 'majdnem 1 év'
other: 'csaknem %{count} éve' other: 'majdnem %{count} év'
over_x_years: over_x_years:
one: 'több, mint 1 éve' one: 'több, mint 1 év'
other: 'több, mint %{count} éve' other: 'több, mint %{count} év'
almost_x_years: almost_x_years:
one: "csaknem 1 éve" one: "közel 1 év"
other: "csaknem %{count} éve" other: "közel %{count} év"
prompts: prompts:
year: "Év" year: "Év"
month: "Hónap" month: "Hónap"
@@ -264,7 +264,7 @@
field_attr_mail: E-mail field_attr_mail: E-mail
field_onthefly: On-the-fly felhasználó létrehozás field_onthefly: On-the-fly felhasználó létrehozás
field_start_date: Kezdés dátuma field_start_date: Kezdés dátuma
field_done_ratio: Készültség (%) field_done_ratio: Elkészült (%)
field_auth_source: Azonosítási mód field_auth_source: Azonosítási mód
field_hide_mail: Rejtse el az e-mail címem field_hide_mail: Rejtse el az e-mail címem
field_comments: Megjegyzés field_comments: Megjegyzés
@@ -280,7 +280,7 @@
field_delay: Késés field_delay: Késés
field_assignable: Feladat rendelhető ehhez a szerepkörhöz field_assignable: Feladat rendelhető ehhez a szerepkörhöz
field_redirect_existing_links: Létező linkek átirányítása field_redirect_existing_links: Létező linkek átirányítása
field_estimated_hours: Becsült időigény field_estimated_hours: Becsült idő
field_column_names: Oszlopok field_column_names: Oszlopok
field_time_zone: Időzóna field_time_zone: Időzóna
field_searchable: Kereshető field_searchable: Kereshető
@@ -326,7 +326,7 @@
project_module_documents: Dokumentumok project_module_documents: Dokumentumok
project_module_files: Fájlok project_module_files: Fájlok
project_module_wiki: Wiki project_module_wiki: Wiki
project_module_repository: Forráskód project_module_repository: Tároló
project_module_boards: Fórumok project_module_boards: Fórumok
label_user: Felhasználó label_user: Felhasználó
@@ -391,7 +391,7 @@
label_assigned_to_me_issues: A nekem kiosztott feladatok label_assigned_to_me_issues: A nekem kiosztott feladatok
label_last_login: Utolsó bejelentkezés label_last_login: Utolsó bejelentkezés
label_registered_on: Regisztrált label_registered_on: Regisztrált
label_activity: Történések label_activity: Tevékenységek
label_overall_activity: Teljes aktivitás label_overall_activity: Teljes aktivitás
label_new: Új label_new: Új
label_logged_as: Bejelentkezve, mint label_logged_as: Bejelentkezve, mint
@@ -510,8 +510,8 @@
label_contains: tartalmazza label_contains: tartalmazza
label_not_contains: nem tartalmazza label_not_contains: nem tartalmazza
label_day_plural: nap label_day_plural: nap
label_repository: Forráskód label_repository: Tároló
label_repository_plural: Forráskódok label_repository_plural: Tárolók
label_browse: Tallóz label_browse: Tallóz
label_modification: "%{count} változás" label_modification: "%{count} változás"
label_modification_plural: "%{count} változás" label_modification_plural: "%{count} változás"
@@ -600,10 +600,10 @@
label_language_based: A felhasználó nyelve alapján label_language_based: A felhasználó nyelve alapján
label_sort_by: "%{value} szerint rendezve" label_sort_by: "%{value} szerint rendezve"
label_send_test_email: Teszt e-mail küldése label_send_test_email: Teszt e-mail küldése
label_feeds_access_key_created_on: "RSS hozzáférési kulcs létrehozva %{value}" label_feeds_access_key_created_on: "RSS hozzáférési kulcs létrehozva ennyivel ezelőtt: %{value}"
label_module_plural: Modulok label_module_plural: Modulok
label_added_time_by: "%{author} adta hozzá %{age}" label_added_time_by: "%{author} adta hozzá ennyivel ezelőtt: %{age}"
label_updated_time: "Utolsó módosítás %{value}" label_updated_time: "Utolsó módosítás ennyivel ezelőtt: %{value}"
label_jump_to_a_project: Ugrás projekthez... label_jump_to_a_project: Ugrás projekthez...
label_file_plural: Fájlok label_file_plural: Fájlok
label_changeset_plural: Changesets label_changeset_plural: Changesets
@@ -695,11 +695,11 @@
text_unallowed_characters: Tiltott karakterek text_unallowed_characters: Tiltott karakterek
text_comma_separated: Több érték megengedett (vesszővel elválasztva) text_comma_separated: Több érték megengedett (vesszővel elválasztva)
text_issues_ref_in_commit_messages: Hivatkozás feladatokra, feladatok javítása a commit üzenetekben text_issues_ref_in_commit_messages: Hivatkozás feladatokra, feladatok javítása a commit üzenetekben
text_issue_added: "%{author} új feladatot hozott létre %{id} sorszámmal." text_issue_added: "A feladatot %{id} bejelentette: %{author}."
text_issue_updated: "%{author} módosította a %{id} sorszámú feladatot." text_issue_updated: "A feladatot %{id} módosította: %{author}."
text_wiki_destroy_confirmation: Biztosan törölni szeretné ezt a wiki-t minden tartalmával együtt ? text_wiki_destroy_confirmation: Biztosan törölni szeretné ezt a wiki-t minden tartalmával együtt ?
text_issue_category_destroy_question: "Néhány feladat (%{count}) hozzá van rendelve ehhez a kategóriához. Mit szeretne tenni?" text_issue_category_destroy_question: "Néhány feladat (%{count}) hozzá van rendelve ehhez a kategóriához. Mit szeretne tenni ?"
text_issue_category_destroy_assignments: Kategória hozzárendelés megszüntetése text_issue_category_destroy_assignments: Kategória hozzárendelés megszűntetése
text_issue_category_reassign_to: Feladatok újra hozzárendelése másik kategóriához text_issue_category_reassign_to: Feladatok újra hozzárendelése másik kategóriához
text_user_mail_option: "A nem kiválasztott projektekről csak akkor kap értesítést, ha figyelést kér rá, vagy részt vesz benne (pl. Ön a létrehozó, vagy a hozzárendelő)" text_user_mail_option: "A nem kiválasztott projektekről csak akkor kap értesítést, ha figyelést kér rá, vagy részt vesz benne (pl. Ön a létrehozó, vagy a hozzárendelő)"
text_no_configuration_data: "Szerepkörök, feladat típusok, feladat státuszok, és workflow adatok még nincsenek konfigurálva.\nErősen ajánlott, az alapértelmezett konfiguráció betöltése, és utána módosíthatja azt." text_no_configuration_data: "Szerepkörök, feladat típusok, feladat státuszok, és workflow adatok még nincsenek konfigurálva.\nErősen ajánlott, az alapértelmezett konfiguráció betöltése, és utána módosíthatja azt."
@@ -709,8 +709,8 @@
text_select_project_modules: 'Válassza ki az engedélyezett modulokat ehhez a projekthez:' text_select_project_modules: 'Válassza ki az engedélyezett modulokat ehhez a projekthez:'
text_default_administrator_account_changed: Alapértelmezett adminisztrátor fiók megváltoztatva text_default_administrator_account_changed: Alapértelmezett adminisztrátor fiók megváltoztatva
text_file_repository_writable: Fájl tároló írható text_file_repository_writable: Fájl tároló írható
text_rmagick_available: RMagick elérhető (nem kötelező) text_rmagick_available: RMagick elérhető (opcionális)
text_destroy_time_entries_question: "%{hours} órányi munka van rögzítve a feladatokon, amiket törölni szeretne. Mit szeretne tenni?" text_destroy_time_entries_question: "%{hours} órányi munka van rögzítve a feladatokon, amiket törölni szeretne. Mit szeretne tenni ?"
text_destroy_time_entries: A rögzített órák törlése text_destroy_time_entries: A rögzített órák törlése
text_assign_time_entries_to_project: A rögzített órák hozzárendelése a projekthez text_assign_time_entries_to_project: A rögzített órák hozzárendelése a projekthez
text_reassign_time_entries: 'A rögzített órák újra hozzárendelése másik feladathoz:' text_reassign_time_entries: 'A rögzített órák újra hozzárendelése másik feladathoz:'
@@ -720,7 +720,7 @@
default_role_reporter: Bejelentő default_role_reporter: Bejelentő
default_tracker_bug: Hiba default_tracker_bug: Hiba
default_tracker_feature: Fejlesztés default_tracker_feature: Fejlesztés
default_tracker_support: Támogatás default_tracker_support: Support
default_issue_status_new: Új default_issue_status_new: Új
default_issue_status_in_progress: Folyamatban default_issue_status_in_progress: Folyamatban
default_issue_status_resolved: Megoldva default_issue_status_resolved: Megoldva
@@ -741,7 +741,7 @@
enumeration_doc_categories: Dokumentum kategóriák enumeration_doc_categories: Dokumentum kategóriák
enumeration_activities: Tevékenységek (idő rögzítés) enumeration_activities: Tevékenységek (idő rögzítés)
mail_body_reminder: "%{count} neked kiosztott feladat határidős az elkövetkező %{days} napban:" mail_body_reminder: "%{count} neked kiosztott feladat határidős az elkövetkező %{days} napban:"
mail_subject_reminder: "%{count} feladat határidős az elkövetkező %{days} napban" mail_subject_reminder: "%{count} feladat határidős az elkövetkező %{days} napokban"
text_user_wrote: "%{value} írta:" text_user_wrote: "%{value} írta:"
label_duplicated_by: duplikálta label_duplicated_by: duplikálta
setting_enabled_scm: Forráskódkezelő (SCM) engedélyezése setting_enabled_scm: Forráskódkezelő (SCM) engedélyezése
@@ -812,14 +812,14 @@
permission_edit_own_messages: Saját üzenetek szerkesztése permission_edit_own_messages: Saját üzenetek szerkesztése
permission_delete_own_messages: Saját üzenetek törlése permission_delete_own_messages: Saját üzenetek törlése
label_user_activity: "%{value} tevékenységei" label_user_activity: "%{value} tevékenységei"
label_updated_time_by: "Módosította %{author} %{age}" label_updated_time_by: "Módosította %{author} ennyivel ezelőtt: %{age}"
text_diff_truncated: '... A diff fájl vége nem jelenik meg, mert hosszab, mint a megjeleníthető sorok száma.' text_diff_truncated: '... A diff fájl vége nem jelenik meg, mert hosszab, mint a megjeleníthető sorok száma.'
setting_diff_max_lines_displayed: A megjelenítendő sorok száma (maximum) a diff fájloknál setting_diff_max_lines_displayed: A megjelenítendő sorok száma (maximum) a diff fájloknál
text_plugin_assets_writable: Plugin eszközök könyvtár írható text_plugin_assets_writable: Plugin eszközök könyvtár írható
warning_attachments_not_saved: "%{count} fájl mentése nem sikerült." warning_attachments_not_saved: "%{count} fájl mentése nem sikerült."
button_create_and_continue: Létrehozás és folytatás button_create_and_continue: Létrehozás és folytatás
text_custom_field_possible_values_info: 'Értékenként egy sor' text_custom_field_possible_values_info: 'Értékenként egy sor'
label_display: Megmutat label_display: Megjelenés
field_editable: Szerkeszthető field_editable: Szerkeszthető
setting_repository_log_display_limit: Maximum hány revíziót mutasson meg a log megjelenítésekor setting_repository_log_display_limit: Maximum hány revíziót mutasson meg a log megjelenítésekor
setting_file_max_size_displayed: Maximum mekkora szövegfájlokat jelenítsen meg soronkénti összehasonlításnál setting_file_max_size_displayed: Maximum mekkora szövegfájlokat jelenítsen meg soronkénti összehasonlításnál
@@ -835,40 +835,40 @@
label_greater_or_equal: ">=" label_greater_or_equal: ">="
label_less_or_equal: "<=" label_less_or_equal: "<="
text_wiki_page_destroy_question: Ennek az oldalnak %{descendants} gyermek-, és leszármazott oldala van. Mit szeretne tenni? text_wiki_page_destroy_question: Ennek az oldalnak %{descendants} gyermek-, és leszármazott oldala van. Mit szeretne tenni?
text_wiki_page_reassign_children: Aloldalak hozzárendelése ehhez a szülő oldalhoz text_wiki_page_reassign_children: Az aloldalak hozzárendelése ehhez a szülő oldalhoz
text_wiki_page_nullify_children: Aloldalak átalakítása főoldallá text_wiki_page_nullify_children: Az aloldalak megtartása, mint főoldalak
text_wiki_page_destroy_children: Minden aloldal és leszármazottjának törlése text_wiki_page_destroy_children: Minden aloldal és leszármazottjának törlése
setting_password_min_length: Minimum jelszó hosszúság setting_password_min_length: Minimum jelszó hosszúság
field_group_by: Szerint csoportosítva field_group_by: Szerint csoportosítva
mail_subject_wiki_content_updated: "'%{id}' wiki oldal frissítve" mail_subject_wiki_content_updated: "'%{id}' wiki oldal frissítve"
label_wiki_content_added: Wiki oldal hozzáadva label_wiki_content_added: Wiki oldal hozzáadva
mail_subject_wiki_content_added: "Új wiki oldal: '%{id}'" mail_subject_wiki_content_added: "Új wiki oldal: '%{id}'"
mail_body_wiki_content_added: %{author} létrehozta a '%{id}' wiki oldalt. mail_body_wiki_content_added: A '%{id}' wiki oldalt %{author} hozta létre.
label_wiki_content_updated: Wiki oldal frissítve label_wiki_content_updated: Wiki oldal frissítve
mail_body_wiki_content_updated: %{author} frissítette a '%{id}' wiki oldalt. mail_body_wiki_content_updated: A '%{id}' wiki oldalt %{author} frissítette.
permission_add_project: Projekt létrehozása permission_add_project: Projekt létrehozása
setting_new_project_user_role_id: Projekt létrehozási jog nem adminisztrátor felhasználóknak setting_new_project_user_role_id: Projekt létrehozási jog nem adminisztrátor felhasználóknak
label_view_all_revisions: Összes verzió label_view_all_revisions: Minden revízió megtekintése
label_tag: Tag label_tag: Tag
label_branch: Branch label_branch: Branch
error_no_tracker_in_project: Nincs feladat típus hozzárendelve ehhez a projekthez. Kérem ellenőrizze a projekt beállításait. error_no_tracker_in_project: Nincs feladat típus hozzárendelve ehhez a projekthez. Kérem ellenőrizze a projekt beállításait.
error_no_default_issue_status: Nincs alapértelmezett feladat státusz beállítva. Kérem ellenőrizze a beállításokat (Itt találja "Adminisztráció -> Feladat státuszok"). error_no_default_issue_status: Nincs alapértelmezett feladat státusz beállítva. Kérem ellenőrizze a beállításokat (Itt találja "Adminisztráció -> Feladat státuszok").
text_journal_changed: "%{label} megváltozott, %{old} helyett %{new} lett" text_journal_changed: "%{label} változott erről: %{old} erre: %{new}"
text_journal_set_to: "%{label} új értéke: %{value}" text_journal_set_to: "%{label} új értéke: %{value}"
text_journal_deleted: "%{label} törölve lett (%{old})" text_journal_deleted: "%{label} törölve (%{old})"
label_group_plural: Csoportok label_group_plural: Csoportok
label_group: Csoport label_group: Csoport
label_group_new: Új csoport label_group_new: Új csoport
label_time_entry_plural: Időráfordítás label_time_entry_plural: Rögzített idő
text_journal_added: "%{label} %{value} hozzáadva" text_journal_added: "%{label} %{value} hozzáadva"
field_active: Aktív field_active: Aktív
enumeration_system_activity: Rendszertevékenység enumeration_system_activity: Rendszer Tevékenység
permission_delete_issue_watchers: Megfigyelők törlése permission_delete_issue_watchers: Megfigyelők törlése
version_status_closed: lezárt version_status_closed: lezárt
version_status_locked: zárolt version_status_locked: zárolt
version_status_open: nyitott version_status_open: nyitott
error_can_not_reopen_issue_on_closed_version: Lezárt verzióhoz rendelt feladatot nem lehet újranyitni error_can_not_reopen_issue_on_closed_version: Lezárt verzióhoz rendelt feladatot nem lehet újranyitni
label_user_anonymous: Névtelen label_user_anonymous: Anonymous
button_move_and_follow: Mozgatás és követés button_move_and_follow: Mozgatás és követés
setting_default_projects_modules: Alapértelmezett modulok az új projektekhez setting_default_projects_modules: Alapértelmezett modulok az új projektekhez
setting_gravatar_default: Alapértelmezett Gravatar kép setting_gravatar_default: Alapértelmezett Gravatar kép
+36 -36
View File
@@ -939,41 +939,41 @@ it:
setting_commit_logtime_enabled: Abilita registrazione del tempo di collegamento setting_commit_logtime_enabled: Abilita registrazione del tempo di collegamento
notice_gantt_chart_truncated: Il grafico è stato troncato perchè eccede il numero di oggetti (%{max}) da visualizzare notice_gantt_chart_truncated: Il grafico è stato troncato perchè eccede il numero di oggetti (%{max}) da visualizzare
setting_gantt_items_limit: Massimo numero di oggetti da visualizzare sul diagramma di gantt setting_gantt_items_limit: Massimo numero di oggetti da visualizzare sul diagramma di gantt
field_warn_on_leaving_unsaved: Avvisami quando lascio una pagina con testo non salvato field_warn_on_leaving_unsaved: Warn me when leaving a page with unsaved text
text_warn_on_leaving_unsaved: La pagina corrente contiene del testo non salvato che verrà perso se lasci questa pagina. text_warn_on_leaving_unsaved: The current page contains unsaved text that will be lost if you leave this page.
label_my_queries: Le mie queries personalizzate label_my_queries: My custom queries
text_journal_changed_no_detail: "%{label} aggiornato" text_journal_changed_no_detail: "%{label} updated"
label_news_comment_added: Commento aggiunto a una notizia label_news_comment_added: Comment added to a news
button_expand_all: Espandi tutto button_expand_all: Expand all
button_collapse_all: Comprimi tutto button_collapse_all: Collapse all
label_additional_workflow_transitions_for_assignee: Transizioni supplementari consentite quando l'utente è l'assegnatario label_additional_workflow_transitions_for_assignee: Additional transitions allowed when the user is the assignee
label_additional_workflow_transitions_for_author: Transizioni supplementari consentite quando l'utente è l'autore label_additional_workflow_transitions_for_author: Additional transitions allowed when the user is the author
label_bulk_edit_selected_time_entries: Modifica massiva delle ore segnalate selezionate label_bulk_edit_selected_time_entries: Bulk edit selected time entries
text_time_entries_destroy_confirmation: Sei sicuro di voler eliminare l'ora\e selezionata\e? text_time_entries_destroy_confirmation: Are you sure you want to delete the selected time entr(y/ies)?
label_role_anonymous: Anonimo label_role_anonymous: Anonymous
label_role_non_member: Non membro label_role_non_member: Non member
label_issue_note_added: Nota aggiunta label_issue_note_added: Note added
label_issue_status_updated: Stato aggiornato label_issue_status_updated: Status updated
label_issue_priority_updated: Priorità aggiornata label_issue_priority_updated: Priority updated
label_issues_visibility_own: Segnalazioni create o assegnate all'utente label_issues_visibility_own: Issues created by or assigned to the user
field_issues_visibility: Visibilità segnalazioni field_issues_visibility: Issues visibility
label_issues_visibility_all: Tutte le segnalazioni label_issues_visibility_all: All issues
permission_set_own_issues_private: Imposta le proprie segnalazioni pubbliche o private permission_set_own_issues_private: Set own issues public or private
field_is_private: Privato field_is_private: Private
permission_set_issues_private: Imposta le segnalazioni pubbliche o private permission_set_issues_private: Set issues public or private
label_issues_visibility_public: Tutte le segnalazioni non private label_issues_visibility_public: All non private issues
text_issues_destroy_descendants_confirmation: Questo eliminerà anche %{count} sottoattività. text_issues_destroy_descendants_confirmation: This will also delete %{count} subtask(s).
field_commit_logs_encoding: Codifica dei messaggi di commit field_commit_logs_encoding: Codifica dei messaggi di commit
field_scm_path_encoding: Codifica del percorso field_scm_path_encoding: Path encoding
text_scm_path_encoding_note: "Predefinito: UTF-8" text_scm_path_encoding_note: "Default: UTF-8"
field_path_to_repository: Percorso del repository field_path_to_repository: Path to repository
field_root_directory: Directory radice field_root_directory: Root directory
field_cvs_module: Modulo field_cvs_module: Module
field_cvsroot: CVSROOT field_cvsroot: CVSROOT
text_git_repository_note: Repository centrale e locale (es. /gitrepo, c:\gitrepo) text_git_repository_note: Bare and local repository (e.g. /gitrepo, c:\gitrepo)
text_mercurial_repository_note: Repository locale (es. /hgrepo, c:\hgrepo) text_mercurial_repository_note: Local repository (e.g. /hgrepo, c:\hgrepo)
text_scm_command: Comando text_scm_command: Command
text_scm_command_version: Versione text_scm_command_version: Version
label_git_report_last_commit: Riporta l'ultimo commit per files e directories label_git_report_last_commit: Report last commit for files and directories
text_scm_config: Puoi configurare i comandi scm nel file config/configuration.yml. E' necessario riavviare l'applicazione dopo averlo modificato. text_scm_config: You can configure your scm commands in config/configuration.yml. Please restart the application after editing it.
text_scm_command_not_available: Il comando scm non è disponibile. Controllare le impostazioni nel pannello di amministrazione. text_scm_command_not_available: Scm command is not available. Please check settings on the administration panel.
+9 -9
View File
@@ -123,7 +123,7 @@ nl:
greater_than_start_date: "moet na de startdatum liggen" greater_than_start_date: "moet na de startdatum liggen"
not_same_project: "hoort niet bij hetzelfde project" not_same_project: "hoort niet bij hetzelfde project"
circular_dependency: "Deze relatie zou een circulaire afhankelijkheid tot gevolg hebben" circular_dependency: "Deze relatie zou een circulaire afhankelijkheid tot gevolg hebben"
cant_link_an_issue_with_a_descendant: "Een issue kan niet gelinked worden met een subtask" cant_link_an_issue_with_a_descendant: "An issue can not be linked to one of its subtasks"
actionview_instancetag_blank_option: Selecteer actionview_instancetag_blank_option: Selecteer
@@ -703,7 +703,7 @@ nl:
setting_bcc_recipients: Blind carbon copy ontvangers (bcc) setting_bcc_recipients: Blind carbon copy ontvangers (bcc)
setting_commit_fix_keywords: Gefixeerde trefwoorden setting_commit_fix_keywords: Gefixeerde trefwoorden
setting_commit_ref_keywords: Refererende trefwoorden setting_commit_ref_keywords: Refererende trefwoorden
setting_cross_project_issue_relations: Sta cross-project issuerelaties toe setting_cross_project_issue_relations: Sta crossproject issuerelaties toe
setting_date_format: Datumformaat setting_date_format: Datumformaat
setting_default_language: Standaard taal setting_default_language: Standaard taal
setting_default_projects_public: Nieuwe projecten zijn standaard publiek setting_default_projects_public: Nieuwe projecten zijn standaard publiek
@@ -908,8 +908,8 @@ nl:
label_user_mail_option_only_my_events: Alleen voor dingen die ik volg of bij betrokken ben label_user_mail_option_only_my_events: Alleen voor dingen die ik volg of bij betrokken ben
label_user_mail_option_only_assigned: Alleen voor dingen die aan mij zijn toegewezen label_user_mail_option_only_assigned: Alleen voor dingen die aan mij zijn toegewezen
label_user_mail_option_none: Bij geen enkele gebeurtenis label_user_mail_option_none: Bij geen enkele gebeurtenis
field_member_of_group: Groep van toegewezene field_member_of_group: Assignee's group
field_assigned_to_role: Rol van toegewezene field_assigned_to_role: Assignee's role
notice_not_authorized_archived_project: Het project dat u wilt bezoeken is gearchiveerd. notice_not_authorized_archived_project: Het project dat u wilt bezoeken is gearchiveerd.
label_principal_search: "Zoek naar gebruiker of groep:" label_principal_search: "Zoek naar gebruiker of groep:"
label_user_search: "Zoek naar gebruiker:" label_user_search: "Zoek naar gebruiker:"
@@ -925,10 +925,10 @@ nl:
label_my_queries: Mijn aangepaste zoekopdrachten label_my_queries: Mijn aangepaste zoekopdrachten
text_journal_changed_no_detail: "%{label} updated" text_journal_changed_no_detail: "%{label} updated"
label_news_comment_added: Commentaar toegevoegd aan een nieuwsitem label_news_comment_added: Commentaar toegevoegd aan een nieuwsitem
button_expand_all: Klap uit button_expand_all: Expand all
button_collapse_all: Klap in button_collapse_all: Collapse all
label_additional_workflow_transitions_for_assignee: Aanvullende veranderingen toegestaan wanneer de gebruiker de toegewezene is label_additional_workflow_transitions_for_assignee: Additional transitions allowed when the user is the assignee
label_additional_workflow_transitions_for_author: Aanvullende veranderingen toegestaan wanneer de gebruiker de auteur is label_additional_workflow_transitions_for_author: Additional transitions allowed when the user is the author
label_bulk_edit_selected_time_entries: Bulk edit selected time entries label_bulk_edit_selected_time_entries: Bulk edit selected time entries
text_time_entries_destroy_confirmation: Are you sure you want to delete the selected time entr(y/ies)? text_time_entries_destroy_confirmation: Are you sure you want to delete the selected time entr(y/ies)?
label_role_anonymous: Anonymous label_role_anonymous: Anonymous
@@ -946,7 +946,7 @@ nl:
text_issues_destroy_descendants_confirmation: This will also delete %{count} subtask(s). text_issues_destroy_descendants_confirmation: This will also delete %{count} subtask(s).
field_commit_logs_encoding: Encodering van commit berichten field_commit_logs_encoding: Encodering van commit berichten
field_scm_path_encoding: Path encoding field_scm_path_encoding: Path encoding
text_scm_path_encoding_note: "Standaard: UTF-8" text_scm_path_encoding_note: "Default: UTF-8"
field_path_to_repository: Path to repository field_path_to_repository: Path to repository
field_root_directory: Root directory field_root_directory: Root directory
field_cvs_module: Module field_cvs_module: Module
+223 -225
View File
@@ -114,7 +114,7 @@
greater_than_start_date: "må være større enn startdato" greater_than_start_date: "må være større enn startdato"
not_same_project: "hører ikke til samme prosjekt" not_same_project: "hører ikke til samme prosjekt"
circular_dependency: "Denne relasjonen ville lagd en sirkulær avhengighet" circular_dependency: "Denne relasjonen ville lagd en sirkulær avhengighet"
cant_link_an_issue_with_a_descendant: "En sak kan ikke kobles mot en av sine undersaker" cant_link_an_issue_with_a_descendant: "An issue can not be linked to one of its subtasks"
actionview_instancetag_blank_option: Vennligst velg actionview_instancetag_blank_option: Vennligst velg
@@ -212,7 +212,7 @@
field_role: Rolle field_role: Rolle
field_homepage: Hjemmeside field_homepage: Hjemmeside
field_is_public: Offentlig field_is_public: Offentlig
field_parent: Underprosjekt av field_parent: Underprosjekt til
field_is_in_roadmap: Vises i veikart field_is_in_roadmap: Vises i veikart
field_login: Brukernavn field_login: Brukernavn
field_mail_notification: E-post-varsling field_mail_notification: E-post-varsling
@@ -236,8 +236,8 @@
field_onthefly: On-the-fly brukeropprettelse field_onthefly: On-the-fly brukeropprettelse
field_start_date: Start field_start_date: Start
field_done_ratio: "% Ferdig" field_done_ratio: "% Ferdig"
field_auth_source: Autentiseringskilde field_auth_source: Autentifikasjonsmodus
field_hide_mail: Skjul min epost-adresse field_hide_mail: Skjul min e-post-adresse
field_comments: Kommentarer field_comments: Kommentarer
field_url: URL field_url: URL
field_start_page: Startside field_start_page: Startside
@@ -247,7 +247,7 @@
field_spent_on: Dato field_spent_on: Dato
field_identifier: Identifikasjon field_identifier: Identifikasjon
field_is_filter: Brukes som filter field_is_filter: Brukes som filter
field_issue_to: Relaterte saker field_issue_to: Relatert saker
field_delay: Forsinkelse field_delay: Forsinkelse
field_assignable: Saker kan tildeles denne rollen field_assignable: Saker kan tildeles denne rollen
field_redirect_existing_links: Viderekoble eksisterende lenker field_redirect_existing_links: Viderekoble eksisterende lenker
@@ -266,24 +266,24 @@
setting_self_registration: Selvregistrering setting_self_registration: Selvregistrering
setting_attachment_max_size: Maks. størrelse vedlegg setting_attachment_max_size: Maks. størrelse vedlegg
setting_issues_export_limit: Eksportgrense for saker setting_issues_export_limit: Eksportgrense for saker
setting_mail_from: Avsenders epost setting_mail_from: Avsenders e-post
setting_bcc_recipients: Blindkopi (bcc) til mottakere setting_bcc_recipients: Blindkopi (bcc) til mottakere
setting_host_name: Vertsnavn setting_host_name: Vertsnavn
setting_text_formatting: Tekstformattering setting_text_formatting: Tekstformattering
setting_wiki_compression: Komprimering av Wiki-historikk setting_wiki_compression: Komprimering av Wiki-historikk
setting_feeds_limit: Innholdsgrense for Feed setting_feeds_limit: Innholdsgrense for Feed
setting_default_projects_public: Nye prosjekter er offentlige som standard setting_default_projects_public: Nye prosjekter er offentlige som standard
setting_autofetch_changesets: Autohenting av endringssett setting_autofetch_changesets: Autohenting av innsendinger
setting_sys_api_enabled: Aktiver webservice for depot-administrasjon setting_sys_api_enabled: Aktiver webservice for depot-administrasjon
setting_commit_ref_keywords: Nøkkelord for referanse setting_commit_ref_keywords: Nøkkelord for referanse
setting_commit_fix_keywords: Nøkkelord for retting setting_commit_fix_keywords: Nøkkelord for retting
setting_autologin: Autoinnlogging setting_autologin: Autoinnlogging
setting_date_format: Datoformat setting_date_format: Datoformat
setting_time_format: Tidsformat setting_time_format: Tidsformat
setting_cross_project_issue_relations: Tillat saksrelasjoner på kryss av prosjekter setting_cross_project_issue_relations: Tillat saksrelasjoner mellom prosjekter
setting_issue_list_default_columns: Standardkolonner vist i sakslisten setting_issue_list_default_columns: Standardkolonner vist i sakslisten
setting_repositories_encodings: Depot-tegnsett setting_repositories_encodings: Depot-tegnsett
setting_emails_footer: Epost-signatur setting_emails_footer: E-post-signatur
setting_protocol: Protokoll setting_protocol: Protokoll
setting_per_page_options: Alternativer, objekter pr. side setting_per_page_options: Alternativer, objekter pr. side
setting_user_format: Visningsformat, brukere setting_user_format: Visningsformat, brukere
@@ -291,8 +291,8 @@
setting_display_subprojects_issues: Vis saker fra underprosjekter på hovedprosjekt som standard setting_display_subprojects_issues: Vis saker fra underprosjekter på hovedprosjekt som standard
setting_enabled_scm: Aktiviserte SCM setting_enabled_scm: Aktiviserte SCM
project_module_issue_tracking: Sakshåndtering project_module_issue_tracking: Sakssporing
project_module_time_tracking: Tidsregistrering project_module_time_tracking: Tidssporing
project_module_news: Nyheter project_module_news: Nyheter
project_module_documents: Dokumenter project_module_documents: Dokumenter
project_module_files: Filer project_module_files: Filer
@@ -326,7 +326,7 @@
label_role: Rolle label_role: Rolle
label_role_plural: Roller label_role_plural: Roller
label_role_new: Ny rolle label_role_new: Ny rolle
label_role_and_permissions: Roller og rettigheter label_role_and_permissions: Roller og tillatelser
label_member: Medlem label_member: Medlem
label_member_new: Nytt medlem label_member_new: Nytt medlem
label_member_plural: Medlemmer label_member_plural: Medlemmer
@@ -343,7 +343,7 @@
label_custom_field: Eget felt label_custom_field: Eget felt
label_custom_field_plural: Egne felt label_custom_field_plural: Egne felt
label_custom_field_new: Nytt eget felt label_custom_field_new: Nytt eget felt
label_enumerations: Listeverdier label_enumerations: Kodelister
label_enumeration_new: Ny verdi label_enumeration_new: Ny verdi
label_information: Informasjon label_information: Informasjon
label_information_plural: Informasjon label_information_plural: Informasjon
@@ -367,10 +367,10 @@
label_new: Ny label_new: Ny
label_logged_as: Innlogget som label_logged_as: Innlogget som
label_environment: Miljø label_environment: Miljø
label_authentication: Autentisering label_authentication: Autentifikasjon
label_auth_source: Autentiseringskilde label_auth_source: Autentifikasjonsmodus
label_auth_source_new: Ny autentiseringskilde label_auth_source_new: Ny autentifikasjonmodus
label_auth_source_plural: Autentiseringskilder label_auth_source_plural: Autentifikasjonsmoduser
label_subproject_plural: Underprosjekter label_subproject_plural: Underprosjekter
label_and_its_subprojects: "%{value} og dets underprosjekter" label_and_its_subprojects: "%{value} og dets underprosjekter"
label_min_max_length: Min.-maks. lengde label_min_max_length: Min.-maks. lengde
@@ -423,13 +423,13 @@
one: 1 åpen one: 1 åpen
other: "%{count} åpne" other: "%{count} åpne"
label_x_closed_issues_abbr: label_x_closed_issues_abbr:
zero: 0 lukket zero: 0 lukka
one: 1 lukket one: 1 lukka
other: "%{count} lukket" other: "%{count} lukka"
label_total: Totalt label_total: Totalt
label_permissions: Rettigheter label_permissions: Godkjenninger
label_current_status: Nåværende status label_current_status: Nåværende status
label_new_statuses_allowed: Tillate nye statuser label_new_statuses_allowed: Tillatte nye statuser
label_all: alle label_all: alle
label_none: ingen label_none: ingen
label_nobody: ingen label_nobody: ingen
@@ -437,7 +437,7 @@
label_previous: Forrige label_previous: Forrige
label_used_by: Brukt av label_used_by: Brukt av
label_details: Detaljer label_details: Detaljer
label_add_note: Legg til notat label_add_note: Legg til notis
label_per_page: Pr. side label_per_page: Pr. side
label_calendar: Kalender label_calendar: Kalender
label_months_from: måneder fra label_months_from: måneder fra
@@ -449,7 +449,7 @@
label_comment: Kommentar label_comment: Kommentar
label_comment_plural: Kommentarer label_comment_plural: Kommentarer
label_x_comments: label_x_comments:
zero: ingen kommentarer zero: no kommentarer
one: 1 kommentar one: 1 kommentar
other: "%{count} kommentarer" other: "%{count} kommentarer"
label_comment_add: Legg til kommentar label_comment_add: Legg til kommentar
@@ -518,11 +518,11 @@
label_preview: Forhåndsvis label_preview: Forhåndsvis
label_feed_plural: Feeder label_feed_plural: Feeder
label_changes_details: Detaljer om alle endringer label_changes_details: Detaljer om alle endringer
label_issue_tracking: Sakshåndtering label_issue_tracking: Sakssporing
label_spent_time: Brukt tid label_spent_time: Brukt tid
label_f_hour: "%{value} time" label_f_hour: "%{value} time"
label_f_hour_plural: "%{value} timer" label_f_hour_plural: "%{value} timer"
label_time_tracking: Tidsregistrering label_time_tracking: Tidssporing
label_change_plural: Endringer label_change_plural: Endringer
label_statistics: Statistikk label_statistics: Statistikk
label_commits_per_month: Innsendinger pr. måned label_commits_per_month: Innsendinger pr. måned
@@ -532,7 +532,7 @@
label_diff_side_by_side: side ved side label_diff_side_by_side: side ved side
label_options: Alternativer label_options: Alternativer
label_copy_workflow_from: Kopier arbeidsflyt fra label_copy_workflow_from: Kopier arbeidsflyt fra
label_permissions_report: Rettighetsrapport label_permissions_report: Godkjenningsrapport
label_watched_issues: Overvåkede saker label_watched_issues: Overvåkede saker
label_related_issues: Relaterte saker label_related_issues: Relaterte saker
label_applied_status: Gitt status label_applied_status: Gitt status
@@ -571,7 +571,7 @@
label_date_to: Til label_date_to: Til
label_language_based: Basert på brukerens språk label_language_based: Basert på brukerens språk
label_sort_by: "Sorter etter %{value}" label_sort_by: "Sorter etter %{value}"
label_send_test_email: Send en epost-test label_send_test_email: Send en e-post-test
label_feeds_access_key_created_on: "RSS tilgangsnøkkel opprettet for %{value} siden" label_feeds_access_key_created_on: "RSS tilgangsnøkkel opprettet for %{value} siden"
label_module_plural: Moduler label_module_plural: Moduler
label_added_time_by: "Lagt til av %{author} for %{age} siden" label_added_time_by: "Lagt til av %{author} for %{age} siden"
@@ -598,7 +598,7 @@
label_more: Mer label_more: Mer
label_scm: SCM label_scm: SCM
label_plugins: Tillegg label_plugins: Tillegg
label_ldap_authentication: LDAP-autentisering label_ldap_authentication: LDAP-autentifikasjon
label_downloads_abbr: Nedl. label_downloads_abbr: Nedl.
label_optional_description: Valgfri beskrivelse label_optional_description: Valgfri beskrivelse
label_add_another_file: Legg til en fil til label_add_another_file: Legg til en fil til
@@ -650,7 +650,7 @@
status_locked: låst status_locked: låst
text_select_mail_notifications: Velg hendelser som skal varsles med e-post. text_select_mail_notifications: Velg hendelser som skal varsles med e-post.
text_regexp_info: f.eks. ^[A-Z0-9]+$ text_regexp_info: eg. ^[A-Z0-9]+$
text_min_max_length_info: 0 betyr ingen begrensning text_min_max_length_info: 0 betyr ingen begrensning
text_project_destroy_confirmation: Er du sikker på at du vil slette dette prosjekter og alle relatert data ? text_project_destroy_confirmation: Er du sikker på at du vil slette dette prosjekter og alle relatert data ?
text_subprojects_destroy_warning: "Underprojekt(ene): %{value} vil også bli slettet." text_subprojects_destroy_warning: "Underprojekt(ene): %{value} vil også bli slettet."
@@ -667,8 +667,8 @@
text_unallowed_characters: Ugyldige tegn text_unallowed_characters: Ugyldige tegn
text_comma_separated: Flere verdier tillat (kommaseparert). text_comma_separated: Flere verdier tillat (kommaseparert).
text_issues_ref_in_commit_messages: Referering og retting av saker i innsendingsmelding text_issues_ref_in_commit_messages: Referering og retting av saker i innsendingsmelding
text_issue_added: "Sak %{id} er innrapportert av %{author}." text_issue_added: "Issue %{id} has been reported by %{author}."
text_issue_updated: "Sak %{id} er oppdatert av %{author}." text_issue_updated: "Issue %{id} has been updated by %{author}."
text_wiki_destroy_confirmation: Er du sikker på at du vil slette denne wikien og alt innholdet ? text_wiki_destroy_confirmation: Er du sikker på at du vil slette denne wikien og alt innholdet ?
text_issue_category_destroy_question: "Noen saker (%{count}) er lagt til i denne kategorien. Hva vil du gjøre ?" text_issue_category_destroy_question: "Noen saker (%{count}) er lagt til i denne kategorien. Hva vil du gjøre ?"
text_issue_category_destroy_assignments: Fjern bruk av kategorier text_issue_category_destroy_assignments: Fjern bruk av kategorier
@@ -695,12 +695,12 @@
default_tracker_feature: Funksjon default_tracker_feature: Funksjon
default_tracker_support: Support default_tracker_support: Support
default_issue_status_new: Ny default_issue_status_new: Ny
default_issue_status_in_progress: Pågår default_issue_status_in_progress: In Progress
default_issue_status_resolved: Avklart default_issue_status_resolved: Avklart
default_issue_status_feedback: Tilbakemelding default_issue_status_feedback: Tilbakemelding
default_issue_status_closed: Lukket default_issue_status_closed: Lukket
default_issue_status_rejected: Avvist default_issue_status_rejected: Avvist
default_doc_category_user: Brukerdokumentasjon default_doc_category_user: Bruker-dokumentasjon
default_doc_category_tech: Teknisk dokumentasjon default_doc_category_tech: Teknisk dokumentasjon
default_priority_low: Lav default_priority_low: Lav
default_priority_normal: Normal default_priority_normal: Normal
@@ -711,16 +711,16 @@
default_activity_development: Utvikling default_activity_development: Utvikling
enumeration_issue_priorities: Sakssprioriteringer enumeration_issue_priorities: Sakssprioriteringer
enumeration_doc_categories: Dokumentkategorier enumeration_doc_categories: Dokument-kategorier
enumeration_activities: Aktiviteter (tidsregistrering) enumeration_activities: Aktiviteter (tidssporing)
text_enumeration_category_reassign_to: 'Endre dem til denne verdien:' text_enumeration_category_reassign_to: 'Endre dem til denne verdien:'
text_enumeration_destroy_question: "%{count} objekter er endret til denne verdien." text_enumeration_destroy_question: "%{count} objekter er endret til denne verdien."
label_incoming_emails: Innkommende e-post label_incoming_emails: Innkommende e-post
label_generate_key: Generer en nøkkel label_generate_key: Generer en nøkkel
setting_mail_handler_api_enabled: Skru på WS for innkommende epost setting_mail_handler_api_enabled: Skru på WS for innkommende e-post
setting_mail_handler_api_key: API-nøkkel setting_mail_handler_api_key: API-nøkkel
text_email_delivery_not_configured: "Levering av epost 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å." 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: Overordnet side field_parent_title: Foreldreside
label_issue_watchers: Overvåkere label_issue_watchers: Overvåkere
button_quote: Sitat button_quote: Sitat
setting_sequential_project_identifiers: Generer sekvensielle prosjekt-IDer setting_sequential_project_identifiers: Generer sekvensielle prosjekt-IDer
@@ -731,39 +731,39 @@
permission_view_files: Vise filer permission_view_files: Vise filer
permission_edit_issues: Redigere saker permission_edit_issues: Redigere saker
permission_edit_own_time_entries: Redigere egne timelister permission_edit_own_time_entries: Redigere egne timelister
permission_manage_public_queries: Administrere delte søk permission_manage_public_queries: Behandle delte søk
permission_add_issues: Legge inn saker permission_add_issues: Legge inn saker
permission_log_time: Loggføre timer permission_log_time: Loggføre timer
permission_view_changesets: Vise endringssett permission_view_changesets: Vise endringssett
permission_view_time_entries: Vise brukte timer permission_view_time_entries: Vise brukte timer
permission_manage_versions: Administrere versjoner permission_manage_versions: Behandle versjoner
permission_manage_wiki: Administrere wiki permission_manage_wiki: Behandle wiki
permission_manage_categories: Administrere kategorier for saker permission_manage_categories: Behandle kategorier for saker
permission_protect_wiki_pages: Beskytte wiki-sider permission_protect_wiki_pages: Beskytte wiki-sider
permission_comment_news: Kommentere nyheter permission_comment_news: Kommentere nyheter
permission_delete_messages: Slette meldinger permission_delete_messages: Slette meldinger
permission_select_project_modules: Velge prosjektmoduler permission_select_project_modules: Velge prosjekt-moduler
permission_manage_documents: Administrere dokumenter permission_manage_documents: Behandle dokumenter
permission_edit_wiki_pages: Redigere wiki-sider permission_edit_wiki_pages: Redigere wiki-sider
permission_add_issue_watchers: Legge til overvåkere permission_add_issue_watchers: Legge til overvåkere
permission_view_gantt: Vise gantt-diagram permission_view_gantt: Vise gantt-diagram
permission_move_issues: Flytte saker permission_move_issues: Flytte saker
permission_manage_issue_relations: Administrere saksrelasjoner permission_manage_issue_relations: Behandle saksrelasjoner
permission_delete_wiki_pages: Slette wiki-sider permission_delete_wiki_pages: Slette wiki-sider
permission_manage_boards: Administrere forum permission_manage_boards: Behandle forum
permission_delete_wiki_pages_attachments: Slette vedlegg permission_delete_wiki_pages_attachments: Slette vedlegg
permission_view_wiki_edits: Vise wiki-historie permission_view_wiki_edits: Vise wiki-historie
permission_add_messages: Sende meldinger permission_add_messages: Sende meldinger
permission_view_messages: Vise meldinger permission_view_messages: Vise meldinger
permission_manage_files: Administrere filer permission_manage_files: Behandle filer
permission_edit_issue_notes: Redigere notater permission_edit_issue_notes: Redigere notater
permission_manage_news: Administrere nyheter permission_manage_news: Behandle nyheter
permission_view_calendar: Vise kalender permission_view_calendar: Vise kalender
permission_manage_members: Administrere medlemmer permission_manage_members: Behandle medlemmer
permission_edit_messages: Redigere meldinger permission_edit_messages: Redigere meldinger
permission_delete_issues: Slette saker permission_delete_issues: Slette saker
permission_view_issue_watchers: Vise liste over overvåkere permission_view_issue_watchers: Vise liste over overvåkere
permission_manage_repository: Administrere depot permission_manage_repository: Behandle depot
permission_commit_access: Tilgang til innsending permission_commit_access: Tilgang til innsending
permission_browse_repository: Bla gjennom depot permission_browse_repository: Bla gjennom depot
permission_view_documents: Vise dokumenter permission_view_documents: Vise dokumenter
@@ -777,191 +777,189 @@
setting_gravatar_enabled: Bruk Gravatar-brukerikoner setting_gravatar_enabled: Bruk Gravatar-brukerikoner
label_example: Eksempel label_example: Eksempel
text_repository_usernames_mapping: "Select ou update the Redmine user mapped to each username found in the repository log.\nUsers with the same Redmine and repository username or email are automatically mapped." text_repository_usernames_mapping: "Select ou update the Redmine user mapped to each username found in the repository log.\nUsers with the same Redmine and repository username or email are automatically mapped."
permission_edit_own_messages: Rediger egne meldinger permission_edit_own_messages: Edit own messages
permission_delete_own_messages: Slett egne meldinger permission_delete_own_messages: Delete own messages
label_user_activity: "%{value}s aktivitet" label_user_activity: "%{value}'s activity"
label_updated_time_by: "Oppdatert av %{author} for %{age} siden" label_updated_time_by: "Updated by %{author} %{age} ago"
text_diff_truncated: '... This diff was truncated because it exceeds the maximum size that can be displayed.' text_diff_truncated: '... This diff was truncated because it exceeds the maximum size that can be displayed.'
setting_diff_max_lines_displayed: Max number of diff lines displayed setting_diff_max_lines_displayed: Max number of diff lines displayed
text_plugin_assets_writable: Plugin assets directory writable text_plugin_assets_writable: Plugin assets directory writable
warning_attachments_not_saved: "%{count} fil(er) kunne ikke lagres." warning_attachments_not_saved: "%{count} file(s) could not be saved."
button_create_and_continue: Opprett og fortsett button_create_and_continue: Create and continue
text_custom_field_possible_values_info: 'En linje for hver verdi' text_custom_field_possible_values_info: 'One line for each value'
label_display: Visning label_display: Display
field_editable: Redigerbar field_editable: Editable
setting_repository_log_display_limit: Maks antall revisjoner vist i fil-loggen setting_repository_log_display_limit: Maximum number of revisions displayed on file log
setting_file_max_size_displayed: Max size of text files displayed inline setting_file_max_size_displayed: Max size of text files displayed inline
field_watcher: Overvåker field_watcher: Watcher
setting_openid: Tillat OpenID innlogging og registrering setting_openid: Allow OpenID login and registration
field_identity_url: OpenID URL field_identity_url: OpenID URL
label_login_with_open_id_option: eller logg inn med OpenID label_login_with_open_id_option: or login with OpenID
field_content: Innhold field_content: Content
label_descending: Synkende label_descending: Descending
label_sort: Sorter label_sort: Sort
label_ascending: Stigende label_ascending: Ascending
label_date_from_to: Fra %{start} til %{end} label_date_from_to: From %{start} to %{end}
label_greater_or_equal: ">=" label_greater_or_equal: ">="
label_less_or_equal: <= label_less_or_equal: <=
text_wiki_page_destroy_question: Denne siden har %{descendants} underside(r). Hva ønsker du å gjøre? text_wiki_page_destroy_question: This page has %{descendants} child page(s) and descendant(s). What do you want to do?
text_wiki_page_reassign_children: Tilknytt undersider til denne overordnede siden text_wiki_page_reassign_children: Reassign child pages to this parent page
text_wiki_page_nullify_children: Behold undersider som rotsider text_wiki_page_nullify_children: Keep child pages as root pages
text_wiki_page_destroy_children: Slett undersider og alle deres underliggende sider text_wiki_page_destroy_children: Delete child pages and all their descendants
setting_password_min_length: Minimum passordlengde setting_password_min_length: Minimum password length
field_group_by: Grupper resultater etter field_group_by: Group results by
mail_subject_wiki_content_updated: "Wiki-side '%{id}' er oppdatert" mail_subject_wiki_content_updated: "'%{id}' wiki page has been updated"
label_wiki_content_added: Wiki-side opprettet label_wiki_content_added: Wiki page added
mail_subject_wiki_content_added: "Wiki-side '%{id}' er opprettet" mail_subject_wiki_content_added: "'%{id}' wiki page has been added"
mail_body_wiki_content_added: Wiki-siden '%{id}' ble opprettet av %{author}. mail_body_wiki_content_added: The '%{id}' wiki page has been added by %{author}.
label_wiki_content_updated: Wiki-side oppdatert label_wiki_content_updated: Wiki page updated
mail_body_wiki_content_updated: Wiki-siden '%{id}' ble oppdatert av %{author}. mail_body_wiki_content_updated: The '%{id}' wiki page has been updated by %{author}.
permission_add_project: Opprett prosjekt permission_add_project: Create project
setting_new_project_user_role_id: Rolle gitt en ikke-administratorbruker som oppretter et prosjekt setting_new_project_user_role_id: Role given to a non-admin user who creates a project
label_view_all_revisions: Se alle revisjoner label_view_all_revisions: View all revisions
label_tag: Tag label_tag: Tag
label_branch: Gren label_branch: Branch
error_no_tracker_in_project: Ingen sakstyper er tilknyttet dette prosjektet. Vennligst kontroller prosjektets innstillinger. error_no_tracker_in_project: No tracker is associated to this project. Please check the Project settings.
error_no_default_issue_status: Ingen standard saksstatus er angitt. Vennligst kontroller konfigurasjonen (Gå til "Administrasjon -> Saksstatuser"). error_no_default_issue_status: No default issue status is defined. Please check your configuration (Go to "Administration -> Issue statuses").
text_journal_changed: "%{label} endret fra %{old} til %{new}" text_journal_changed: "%{label} changed from %{old} to %{new}"
text_journal_set_to: "%{label} satt til %{value}" text_journal_set_to: "%{label} set to %{value}"
text_journal_deleted: "%{label} slettet (%{old})" text_journal_deleted: "%{label} deleted (%{old})"
label_group_plural: Grupper label_group_plural: Groups
label_group: Gruppe label_group: Group
label_group_new: Ny gruppe label_group_new: New group
label_time_entry_plural: Brukt tid label_time_entry_plural: Spent time
text_journal_added: "%{label} %{value} lagt til" text_journal_added: "%{label} %{value} added"
field_active: Aktiv field_active: Active
enumeration_system_activity: Systemaktivitet enumeration_system_activity: System Activity
permission_delete_issue_watchers: Slett overvåkere permission_delete_issue_watchers: Delete watchers
version_status_closed: stengt version_status_closed: closed
version_status_locked: låst version_status_locked: locked
version_status_open: åpen version_status_open: open
error_can_not_reopen_issue_on_closed_version: En sak tilknyttet en stengt versjon kan ikke gjenåpnes. error_can_not_reopen_issue_on_closed_version: An issue assigned to a closed version can not be reopened
label_user_anonymous: Anonym label_user_anonymous: Anonymous
button_move_and_follow: Flytt og følg etter button_move_and_follow: Move and follow
setting_default_projects_modules: Standard aktiverte moduler for nye prosjekter setting_default_projects_modules: Default enabled modules for new projects
setting_gravatar_default: Standard Gravatar-bilde setting_gravatar_default: Default Gravatar image
field_sharing: Deling field_sharing: Sharing
label_version_sharing_hierarchy: Med prosjekt-hierarki label_version_sharing_hierarchy: With project hierarchy
label_version_sharing_system: Med alle prosjekter label_version_sharing_system: With all projects
label_version_sharing_descendants: Med underprosjekter label_version_sharing_descendants: With subprojects
label_version_sharing_tree: Med prosjekt-tre label_version_sharing_tree: With project tree
label_version_sharing_none: Ikke delt label_version_sharing_none: Not shared
error_can_not_archive_project: Dette prosjektet kan ikke arkiveres error_can_not_archive_project: This project can not be archived
button_duplicate: Duplikat button_duplicate: Duplicate
button_copy_and_follow: Kopier og følg etter button_copy_and_follow: Copy and follow
label_copy_source: Kilde label_copy_source: Source
setting_issue_done_ratio: Kalkuler ferdigstillingsprosent ut i fra setting_issue_done_ratio: Calculate the issue done ratio with
setting_issue_done_ratio_issue_status: Bruk saksstatuser setting_issue_done_ratio_issue_status: Use the issue status
error_issue_done_ratios_not_updated: Ferdigstillingsprosent oppdateres ikke. error_issue_done_ratios_not_updated: Issue done ratios not updated.
error_workflow_copy_target: Vennligst velg sakstype(r) og rolle(r) error_workflow_copy_target: Please select target tracker(s) and role(s)
setting_issue_done_ratio_issue_field: Bruk felt fra saker setting_issue_done_ratio_issue_field: Use the issue field
label_copy_same_as_target: Samme som mål label_copy_same_as_target: Same as target
label_copy_target: Mål label_copy_target: Target
notice_issue_done_ratios_updated: Ferdigstillingsprosent oppdatert. notice_issue_done_ratios_updated: Issue done ratios updated.
error_workflow_copy_source: Vennligst velg en kilde-sakstype eller rolle. error_workflow_copy_source: Please select a source tracker or role
label_update_issue_done_ratios: Oppdatert ferdigstillingsprosent label_update_issue_done_ratios: Update issue done ratios
setting_start_of_week: Start kalender på setting_start_of_week: Start calendars on
permission_view_issues: Se på saker permission_view_issues: View Issues
label_display_used_statuses_only: Vis kun statuser som brukes av denne sakstypen label_display_used_statuses_only: Only display statuses that are used by this tracker
label_revision_id: Revision %{value} label_revision_id: Revision %{value}
label_api_access_key: API tilgangsnøkkel label_api_access_key: API access key
label_api_access_key_created_on: API tilgangsnøkkel opprettet for %{value} siden label_api_access_key_created_on: API access key created %{value} ago
label_feeds_access_key: RSS tilgangsnøkkel label_feeds_access_key: RSS access key
notice_api_access_key_reseted: Din API tilgangsnøkkel ble resatt. notice_api_access_key_reseted: Your API access key was reset.
setting_rest_api_enabled: Aktiver REST webservice setting_rest_api_enabled: Enable REST web service
label_missing_api_access_key: Mangler en API tilgangsnøkkel label_missing_api_access_key: Missing an API access key
label_missing_feeds_access_key: Mangler en RSS tilgangsnøkkel label_missing_feeds_access_key: Missing a RSS access key
button_show: Vis button_show: Show
text_line_separated: Flere verdier er tillatt (en linje per verdi). text_line_separated: Multiple values allowed (one line for each value).
setting_mail_handler_body_delimiters: Avkort epost etter en av disse linjene setting_mail_handler_body_delimiters: Truncate emails after one of these lines
permission_add_subprojects: Opprett underprosjekt permission_add_subprojects: Create subprojects
label_subproject_new: Nytt underprosjekt label_subproject_new: New subproject
text_own_membership_delete_confirmation: |- text_own_membership_delete_confirmation: |-
Du er i ferd med å fjerne noen eller alle rettigheter og vil kanskje ikke være i stand til å redigere dette prosjektet etterpå. You are about to remove some or all of your permissions and may no longer be able to edit this project after that.
Er du sikker på at du vil fortsette? Are you sure you want to continue?
label_close_versions: Steng fullførte versjoner label_close_versions: Close completed versions
label_board_sticky: Fast label_board_sticky: Sticky
label_board_locked: Låst label_board_locked: Locked
permission_export_wiki_pages: Eksporter wiki-sider permission_export_wiki_pages: Export wiki pages
setting_cache_formatted_text: Mellomlagre formattert tekst setting_cache_formatted_text: Cache formatted text
permission_manage_project_activities: Administrere prosjektaktiviteter permission_manage_project_activities: Manage project activities
error_unable_delete_issue_status: Kan ikke slette saksstatus error_unable_delete_issue_status: Unable to delete issue status
label_profile: Profil label_profile: Profile
permission_manage_subtasks: Administrere undersaker permission_manage_subtasks: Manage subtasks
field_parent_issue: Overordnet sak field_parent_issue: Parent task
label_subtask_plural: Undersaker label_subtask_plural: Subtasks
label_project_copy_notifications: Send epost-varslinger under prosjektkopiering label_project_copy_notifications: Send email notifications during the project copy
error_can_not_delete_custom_field: Kan ikke slette eget felt error_can_not_delete_custom_field: Unable to delete custom field
error_unable_to_connect: Kunne ikke koble til (%{value}) error_unable_to_connect: Unable to connect (%{value})
error_can_not_remove_role: Denne rollen er i bruk og kan ikke slettes. error_can_not_remove_role: This role is in use and can not be deleted.
error_can_not_delete_tracker: Denne sakstypen inneholder saker og kan ikke slettes. error_can_not_delete_tracker: This tracker contains issues and can't be deleted.
field_principal: Principal field_principal: Principal
label_my_page_block: Min side felt label_my_page_block: My page block
notice_failed_to_save_members: "Feil ved lagring av medlem(mer): %{errors}." notice_failed_to_save_members: "Failed to save member(s): %{errors}."
text_zoom_out: Zoom ut text_zoom_out: Zoom out
text_zoom_in: Zoom inn text_zoom_in: Zoom in
notice_unable_delete_time_entry: Kan ikke slette oppføring fra timeliste. notice_unable_delete_time_entry: Unable to delete time log entry.
label_overall_spent_time: All tidsbruk label_overall_spent_time: Overall spent time
field_time_entries: Loggfør tid field_time_entries: Log time
project_module_gantt: Gantt project_module_gantt: Gantt
project_module_calendar: Kalender project_module_calendar: Calendar
button_edit_associated_wikipage: "Rediger tilhørende Wiki-side: %{page_title}" button_edit_associated_wikipage: "Edit associated Wiki page: %{page_title}"
text_are_you_sure_with_children: Slett sak og alle undersaker? text_are_you_sure_with_children: Delete issue and all child issues?
field_text: Tekstfelt field_text: Text field
label_user_mail_option_only_owner: Kun for ting jeg eier label_user_mail_option_only_owner: Only for things I am the owner of
setting_default_notification_option: Standardvalg for varslinger setting_default_notification_option: Default notification option
label_user_mail_option_only_my_events: Kun for ting jeg overvåker eller er involvert i label_user_mail_option_only_my_events: Only for things I watch or I'm involved in
label_user_mail_option_only_assigned: Kun for ting jeg er tildelt label_user_mail_option_only_assigned: Only for things I am assigned to
label_user_mail_option_none: Ingen hendelser label_user_mail_option_none: No events
field_member_of_group: Den tildeltes gruppe field_member_of_group: Assignee's group
field_assigned_to_role: Den tildeltes rolle field_assigned_to_role: Assignee's role
notice_not_authorized_archived_project: Prosjektet du forsøker å åpne er blitt arkivert. notice_not_authorized_archived_project: The project you're trying to access has been archived.
label_principal_search: "Søk etter bruker eller gruppe:" label_principal_search: "Search for user or group:"
label_user_search: "Søk etter bruker:" label_user_search: "Search for user:"
field_visible: Synlig field_visible: Visible
setting_emails_header: Eposthode setting_emails_header: Emails header
setting_commit_logtime_activity_id: Aktivitet for logget tid. setting_commit_logtime_activity_id: Activity for logged time
text_time_logged_by_changeset: Lagt til i endringssett %{value}. text_time_logged_by_changeset: Applied in changeset %{value}.
setting_commit_logtime_enabled: Muliggjør loggføring av tid setting_commit_logtime_enabled: Enable time logging
notice_gantt_chart_truncated: Diagrammet ble avkortet fordi det overstiger det maksimale antall elementer som kan vises (%{max}) 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: Maksimalt antall elementer vist på gantt-diagrammet setting_gantt_items_limit: Maximum number of items displayed on the gantt chart
field_warn_on_leaving_unsaved: Vis meg en advarsel når jeg forlater en side med ikke lagret tekst field_warn_on_leaving_unsaved: Warn me when leaving a page with unsaved text
text_warn_on_leaving_unsaved: Den gjeldende siden inneholder tekst som ikke er lagret, som vil bli tapt hvis du forlater denne siden. text_warn_on_leaving_unsaved: The current page contains unsaved text that will be lost if you leave this page.
label_my_queries: Mine egne spørringer label_my_queries: My custom queries
text_journal_changed_no_detail: "%{label} oppdatert" text_journal_changed_no_detail: "%{label} updated"
label_news_comment_added: Kommentar lagt til en nyhet label_news_comment_added: Comment added to a news
button_expand_all: Utvid alle button_expand_all: Expand all
button_collapse_all: Kollaps alle button_collapse_all: Collapse all
label_additional_workflow_transitions_for_assignee: Ytterligere overganger tillatt når brukeren er sakens tildelte label_additional_workflow_transitions_for_assignee: Additional transitions allowed when the user is the assignee
label_additional_workflow_transitions_for_author: Ytterligere overganger tillatt når brukeren er den som har opprettet saken label_additional_workflow_transitions_for_author: Additional transitions allowed when the user is the author
label_bulk_edit_selected_time_entries: Masserediger valgte timeliste-oppføringer label_bulk_edit_selected_time_entries: Bulk edit selected time entries
text_time_entries_destroy_confirmation: Er du sikker på du vil slette de(n) valgte timeliste-oppføringen(e)? text_time_entries_destroy_confirmation: Are you sure you want to delete the selected time entr(y/ies)?
label_role_anonymous: Anonym label_role_anonymous: Anonymous
label_role_non_member: Ikke medlem label_role_non_member: Non member
label_issue_note_added: Notat lagt til label_issue_note_added: Note added
label_issue_status_updated: Status oppdatert label_issue_status_updated: Status updated
label_issue_priority_updated: Prioritet oppdatert label_issue_priority_updated: Priority updated
label_issues_visibility_own: Saker opprettet av eller tildelt brukeren label_issues_visibility_own: Issues created by or assigned to the user
field_issues_visibility: Synlighet på saker field_issues_visibility: Issues visibility
label_issues_visibility_all: Alle saker label_issues_visibility_all: All issues
permission_set_own_issues_private: Gjør egne saker offentlige eller private permission_set_own_issues_private: Set own issues public or private
field_is_private: Privat field_is_private: Private
permission_set_issues_private: Gjør saker offentlige eller private permission_set_issues_private: Set issues public or private
label_issues_visibility_public: Alle ikke-private saker label_issues_visibility_public: All non private issues
text_issues_destroy_descendants_confirmation: Dette vil også slette %{count} undersak(er). text_issues_destroy_descendants_confirmation: This will also delete %{count} subtask(s).
field_commit_logs_encoding: Tegnkoding for innsendingsmeldinger field_commit_logs_encoding: Tegnkoding for innsendingsmeldinger
field_scm_path_encoding: Koding av sti field_scm_path_encoding: Path encoding
text_scm_path_encoding_note: "Standard: UTF-8" text_scm_path_encoding_note: "Default: UTF-8"
field_path_to_repository: Sti til depot field_path_to_repository: Path to repository
field_root_directory: Rotkatalog field_root_directory: Root directory
field_cvs_module: Modul field_cvs_module: Module
field_cvsroot: CVSROOT field_cvsroot: CVSROOT
text_mercurial_repository_note: Lokalt depot (f.eks. /hgrepo, c:\hgrepo) text_git_repository_note: Bare and local repository (e.g. /gitrepo, c:\gitrepo)
text_scm_command: Kommando text_mercurial_repository_note: Local repository (e.g. /hgrepo, c:\hgrepo)
text_scm_command_version: Versjon text_scm_command: Command
label_git_report_last_commit: Rapporter siste innsending for filer og kataloger text_scm_command_version: Version
text_scm_config: Du kan konfigurere scm kommandoer i config/configuration.yml. Vennligst restart applikasjonen etter å ha redigert filen. label_git_report_last_commit: Report last commit for files and directories
text_scm_command_not_available: Scm kommando er ikke tilgjengelig. Vennligst kontroller innstillingene i administrasjonspanelet. text_scm_config: You can configure your scm commands in config/configuration.yml. Please restart the application after editing it.
text_scm_command_not_available: Scm command is not available. Please check settings on the administration panel.
text_git_repository_note: Depot er bart og lokalt (f.eks. /gitrepo, c:\gitrepo)
+1 -1
View File
@@ -961,7 +961,7 @@ pt-BR:
setting_commit_logtime_enabled: Habilitar registro de horas setting_commit_logtime_enabled: Habilitar registro de horas
notice_gantt_chart_truncated: O gráfico foi cortado por exceder o tamanho máximo de linhas que podem ser exibidas (%{max}) notice_gantt_chart_truncated: O gráfico foi cortado por exceder o tamanho máximo de linhas que podem ser exibidas (%{max})
setting_gantt_items_limit: Número máximo de itens exibidos no gráfico gatt setting_gantt_items_limit: Número máximo de itens exibidos no gráfico gatt
field_warn_on_leaving_unsaved: Alertar-me ao sair de uma página sem salvar o texto field_warn_on_leaving_unsaved: Alertar-me ao sarir de uma página sem salvar o texto
text_warn_on_leaving_unsaved: A página atual contem texto que não foi salvo e será perdido se você sair desta página. text_warn_on_leaving_unsaved: A página atual contem texto que não foi salvo e será perdido se você sair desta página.
label_my_queries: Minhas consultas personalizadas label_my_queries: Minhas consultas personalizadas
text_journal_changed_no_detail: "%{label} atualizado(a)" text_journal_changed_no_detail: "%{label} atualizado(a)"
+234 -236
View File
@@ -9,12 +9,12 @@ sl:
short: "%b %d" short: "%b %d"
long: "%B %d, %Y" long: "%B %d, %Y"
day_names: [Nedelja, Ponedeljek, Torek, Sreda, Četrtek, Petek, Sobota] day_names: [Sunday, Monday, Tuesday, Wednesday, Thursday, Friday, Saturday]
abbr_day_names: [Ned, Pon, To, Sr, Čet, Pet, Sob] abbr_day_names: [Sun, Mon, Tue, Wed, Thu, Fri, Sat]
# Don't forget the nil at the beginning; there's no such thing as a 0th month # Don't forget the nil at the beginning; there's no such thing as a 0th month
month_names: [~, Januar, Februar, Marec, April, Maj, Junij, Julij, Avgust, September, Oktober, November, December] month_names: [~, January, February, March, April, May, June, July, August, September, October, November, December]
abbr_month_names: [~, Jan, Feb, Mar, Apr, Maj, Jun, Jul, Aug, Sep, Okt, Nov, Dec] abbr_month_names: [~, Jan, Feb, Mar, Apr, May, Jun, Jul, Aug, Sep, Oct, Nov, Dec]
# Used in date_select and datime_select. # Used in date_select and datime_select.
order: order:
- :year - :year
@@ -32,40 +32,40 @@ sl:
datetime: datetime:
distance_in_words: distance_in_words:
half_a_minute: "pol minute" half_a_minute: "half a minute"
less_than_x_seconds: less_than_x_seconds:
one: "manj kot 1. sekundo" one: "less than 1 second"
other: "manj kot %{count} sekund" other: "less than %{count} seconds"
x_seconds: x_seconds:
one: "1. sekunda" one: "1 second"
other: "%{count} sekund" other: "%{count} seconds"
less_than_x_minutes: less_than_x_minutes:
one: "manj kot minuto" one: "less than a minute"
other: "manj kot %{count} minut" other: "less than %{count} minutes"
x_minutes: x_minutes:
one: "1 minuta" one: "1 minute"
other: "%{count} minut" other: "%{count} minutes"
about_x_hours: about_x_hours:
one: "okrog 1. ure" one: "about 1 hour"
other: "okrog %{count} ur" other: "about %{count} hours"
x_days: x_days:
one: "1 dan" one: "1 day"
other: "%{count} dni" other: "%{count} days"
about_x_months: about_x_months:
one: "okrog 1. mesec" one: "about 1 month"
other: "okrog %{count} mesecev" other: "about %{count} months"
x_months: x_months:
one: "1 mesec" one: "1 month"
other: "%{count} mesecev" other: "%{count} months"
about_x_years: about_x_years:
one: "okrog 1. leto" one: "about 1 year"
other: "okrog %{count} let" other: "about %{count} years"
over_x_years: over_x_years:
one: "več kot 1. leto" one: "over 1 year"
other: "več kot %{count} let" other: "over %{count} years"
almost_x_years: almost_x_years:
one: "skoraj 1. leto" one: "almost 1 year"
other: "skoraj %{count} let" other: "almost %{count} years"
number: number:
format: format:
@@ -90,15 +90,15 @@ sl:
# Used in array.to_sentence. # Used in array.to_sentence.
support: support:
array: array:
sentence_connector: "in" sentence_connector: "and"
skip_last_comma: false skip_last_comma: false
activerecord: activerecord:
errors: errors:
template: template:
header: header:
one: "1. napaka je preprečila temu %{model} da bi se shranil" one: "1 error prohibited this %{model} from being saved"
other: "%{count} napak je preprečilo temu %{model} da bi se shranil" other: "%{count} errors prohibited this %{model} from being saved"
messages: messages:
inclusion: "ni vključen na seznamu" inclusion: "ni vključen na seznamu"
exclusion: "je rezerviran" exclusion: "je rezerviran"
@@ -113,17 +113,17 @@ sl:
taken: "je že zaseden" taken: "je že zaseden"
not_a_number: "ni število" not_a_number: "ni število"
not_a_date: "ni veljaven datum" not_a_date: "ni veljaven datum"
greater_than: "mora biti večji kot %{count}" greater_than: "must be greater than %{count}"
greater_than_or_equal_to: "mora biti večji ali enak kot %{count}" greater_than_or_equal_to: "must be greater than or equal to %{count}"
equal_to: "mora biti enak kot %{count}" equal_to: "must be equal to %{count}"
less_than: "mora biti manjši kot %{count}" less_than: "must be less than %{count}"
less_than_or_equal_to: "mora biti manjši ali enak kot %{count}" less_than_or_equal_to: "must be less than or equal to %{count}"
odd: "mora biti sodo" odd: "must be odd"
even: "mora biti liho" even: "must be even"
greater_than_start_date: "mora biti kasnejši kot začetni datum" greater_than_start_date: "mora biti kasnejši kot začeten datum"
not_same_project: "ne pripada istemu projektu" not_same_project: "ne pripada istemu projektu"
circular_dependency: "Ta odnos bi povzročil krožno odvisnost" circular_dependency: "Ta odnos bi povzročil krožno odvisnost"
cant_link_an_issue_with_a_descendant: "Zahtevek ne more biti povezan s svojo podnalogo" cant_link_an_issue_with_a_descendant: "An issue can not be linked to one of its subtasks"
actionview_instancetag_blank_option: Prosimo izberite actionview_instancetag_blank_option: Prosimo izberite
@@ -372,9 +372,9 @@ sl:
label_project_new: Nov projekt label_project_new: Nov projekt
label_project_plural: Projekti label_project_plural: Projekti
label_x_projects: label_x_projects:
zero: ni projektov zero: no projects
one: 1 projekt one: 1 project
other: "%{count} projektov" other: "%{count} projects"
label_project_all: Vsi projekti label_project_all: Vsi projekti
label_project_latest: Zadnji projekti label_project_latest: Zadnji projekti
label_issue: Zahtevek label_issue: Zahtevek
@@ -476,22 +476,22 @@ sl:
label_export_to: 'Na razpolago tudi v:' label_export_to: 'Na razpolago tudi v:'
label_read: Preberi... label_read: Preberi...
label_public_projects: Javni projekti label_public_projects: Javni projekti
label_open_issues: odprt zahtevek label_open_issues: odpri zahtevek
label_open_issues_plural: odprti zahtevki label_open_issues_plural: odpri zahtevke
label_closed_issues: zaprt zahtevek label_closed_issues: zapri zahtevek
label_closed_issues_plural: zaprti zahtevki label_closed_issues_plural: zapri zahtevke
label_x_open_issues_abbr_on_total: label_x_open_issues_abbr_on_total:
zero: 0 odprtih / %{total} zero: 0 open / %{total}
one: 1 odprt / %{total} one: 1 open / %{total}
other: "%{count} odprtih / %{total}" other: "%{count} open / %{total}"
label_x_open_issues_abbr: label_x_open_issues_abbr:
zero: 0 odprtih zero: 0 open
one: 1 odprt one: 1 open
other: "%{count} odprtih" other: "%{count} open"
label_x_closed_issues_abbr: label_x_closed_issues_abbr:
zero: 0 zaprtih zero: 0 closed
one: 1 zaprt one: 1 closed
other: "%{count} zaprtih" other: "%{count} closed"
label_total: Skupaj label_total: Skupaj
label_permissions: Dovoljenja label_permissions: Dovoljenja
label_current_status: Trenutno stanje label_current_status: Trenutno stanje
@@ -507,7 +507,7 @@ sl:
label_per_page: Na stran label_per_page: Na stran
label_calendar: Koledar label_calendar: Koledar
label_months_from: mesecev od label_months_from: mesecev od
label_gantt: Gantogram label_gantt: Gantt
label_internal: Notranji label_internal: Notranji
label_last_changes: "zadnjih %{count} sprememb" label_last_changes: "zadnjih %{count} sprememb"
label_change_view_all: Poglej vse spremembe label_change_view_all: Poglej vse spremembe
@@ -515,9 +515,9 @@ sl:
label_comment: Komentar label_comment: Komentar
label_comment_plural: Komentarji label_comment_plural: Komentarji
label_x_comments: label_x_comments:
zero: ni komentarjev zero: no comments
one: 1 komentar one: 1 comment
other: "%{count} komentarjev" other: "%{count} comments"
label_comment_add: Dodaj komentar label_comment_add: Dodaj komentar
label_comment_added: Komentar dodan label_comment_added: Komentar dodan
label_comment_delete: Izbriši komentarje label_comment_delete: Izbriši komentarje
@@ -774,7 +774,7 @@ sl:
default_tracker_feature: Funkcija default_tracker_feature: Funkcija
default_tracker_support: Podpora default_tracker_support: Podpora
default_issue_status_new: Nov default_issue_status_new: Nov
default_issue_status_in_progress: V teku default_issue_status_in_progress: In Progress
default_issue_status_resolved: Rešen default_issue_status_resolved: Rešen
default_issue_status_feedback: Povratna informacija default_issue_status_feedback: Povratna informacija
default_issue_status_closed: Zaključen default_issue_status_closed: Zaključen
@@ -792,185 +792,183 @@ sl:
enumeration_issue_priorities: Prioritete zahtevkov enumeration_issue_priorities: Prioritete zahtevkov
enumeration_doc_categories: Kategorije dokumentov enumeration_doc_categories: Kategorije dokumentov
enumeration_activities: Aktivnosti (sledenje časa) enumeration_activities: Aktivnosti (sledenje časa)
warning_attachments_not_saved: "%{count} datotek(e) ni bilo mogoče shraniti." warning_attachments_not_saved: "%{count} file(s) could not be saved."
field_editable: Uredljivo field_editable: Editable
text_plugin_assets_writable: Zapisljiva mapa za vtičnike text_plugin_assets_writable: Plugin assets directory writable
label_display: Prikaz label_display: Display
button_create_and_continue: Ustvari in nadaljuj button_create_and_continue: Create and continue
text_custom_field_possible_values_info: 'Ena vrstica za vsako vrednost' text_custom_field_possible_values_info: 'One line for each value'
setting_repository_log_display_limit: Največje število prikazanih revizij v log datoteki setting_repository_log_display_limit: Maximum number of revisions displayed on file log
setting_file_max_size_displayed: Največja velikost besedilnih datotek v vključenem prikazu setting_file_max_size_displayed: Max size of text files displayed inline
field_watcher: Opazovalec field_watcher: Watcher
setting_openid: Dovoli OpenID prijavo in registracijo setting_openid: Allow OpenID login and registration
field_identity_url: OpenID URL field_identity_url: OpenID URL
label_login_with_open_id_option: ali se prijavi z OpenID label_login_with_open_id_option: or login with OpenID
field_content: Vsebina field_content: Content
label_descending: Padajoče label_descending: Descending
label_sort: Razvrsti label_sort: Sort
label_ascending: Naraščajoče label_ascending: Ascending
label_date_from_to: Od %{start} do %{end} label_date_from_to: From %{start} to %{end}
label_greater_or_equal: ">=" label_greater_or_equal: ">="
label_less_or_equal: <= label_less_or_equal: <=
text_wiki_page_destroy_question: Ta stran ima %{descendants} podstran(i) in naslednik(ov). Kaj želite storiti? text_wiki_page_destroy_question: This page has %{descendants} child page(s) and descendant(s). What do you want to do?
text_wiki_page_reassign_children: Znova dodeli podstrani tej glavni strani text_wiki_page_reassign_children: Reassign child pages to this parent page
text_wiki_page_nullify_children: Obdrži podstrani kot glavne strani text_wiki_page_nullify_children: Keep child pages as root pages
text_wiki_page_destroy_children: Izbriši podstrani in vse njihove naslednike text_wiki_page_destroy_children: Delete child pages and all their descendants
setting_password_min_length: Minimalna dolžina gesla setting_password_min_length: Minimum password length
field_group_by: Združi rezultate po field_group_by: Group results by
mail_subject_wiki_content_updated: "'%{id}' wiki stran je bila posodobljena" mail_subject_wiki_content_updated: "'%{id}' wiki page has been updated"
label_wiki_content_added: Wiki stran dodana label_wiki_content_added: Wiki page added
mail_subject_wiki_content_added: "'%{id}' wiki stran je bila dodana" mail_subject_wiki_content_added: "'%{id}' wiki page has been added"
mail_body_wiki_content_added: %{author} je dodal '%{id}' wiki stran mail_body_wiki_content_added: The '%{id}' wiki page has been added by %{author}.
label_wiki_content_updated: Wiki stran posodobljena label_wiki_content_updated: Wiki page updated
mail_body_wiki_content_updated: %{author} je posodobil '%{id}' wiki stran. mail_body_wiki_content_updated: The '%{id}' wiki page has been updated by %{author}.
permission_add_project: Ustvari projekt permission_add_project: Create project
setting_new_project_user_role_id: Vloga, dodeljena neadministratorskemu uporabniku, ki je ustvaril projekt setting_new_project_user_role_id: Role given to a non-admin user who creates a project
label_view_all_revisions: Poglej vse revizije label_view_all_revisions: View all revisions
label_tag: Oznaka label_tag: Tag
label_branch: Veja label_branch: Branch
error_no_tracker_in_project: Noben sledilnik ni povezan s tem projektom. Prosimo preverite nastavitve projekta. error_no_tracker_in_project: No tracker is associated to this project. Please check the Project settings.
error_no_default_issue_status: Privzeti zahtevek ni definiran. Prosimo preverite svoje nastavitve (Pojdite na "Administracija -> Stanje zahtevkov"). error_no_default_issue_status: No default issue status is defined. Please check your configuration (Go to "Administration -> Issue statuses").
text_journal_changed: "%{label} se je spremenilo iz %{old} v %{new}" text_journal_changed: "%{label} changed from %{old} to %{new}"
text_journal_set_to: "%{label} nastavljeno na %{value}" text_journal_set_to: "%{label} set to %{value}"
text_journal_deleted: "%{label} izbrisan (%{old})" text_journal_deleted: "%{label} deleted (%{old})"
label_group_plural: Skupine label_group_plural: Groups
label_group: Skupina label_group: Group
label_group_new: Nova skupina label_group_new: New group
label_time_entry_plural: Porabljen čas label_time_entry_plural: Spent time
text_journal_added: "%{label} %{value} dodan" text_journal_added: "%{label} %{value} added"
field_active: Aktiven field_active: Active
enumeration_system_activity: Sistemska aktivnost enumeration_system_activity: System Activity
permission_delete_issue_watchers: Izbriši opazovalce permission_delete_issue_watchers: Delete watchers
version_status_closed: zaprt version_status_closed: closed
version_status_locked: zaklenjen version_status_locked: locked
version_status_open: odprt version_status_open: open
error_can_not_reopen_issue_on_closed_version: Zahtevek dodeljen zaprti verziji ne more biti ponovno odprt error_can_not_reopen_issue_on_closed_version: An issue assigned to a closed version can not be reopened
label_user_anonymous: Anonimni label_user_anonymous: Anonymous
button_move_and_follow: Premakni in sledi button_move_and_follow: Move and follow
setting_default_projects_modules: Privzeti moduli za nove projekte setting_default_projects_modules: Default enabled modules for new projects
setting_gravatar_default: Privzeta Gravatar slika setting_gravatar_default: Default Gravatar image
field_sharing: Deljenje field_sharing: Sharing
label_version_sharing_hierarchy: S projektno hierarhijo label_version_sharing_hierarchy: With project hierarchy
label_version_sharing_system: Z vsemi projekti label_version_sharing_system: With all projects
label_version_sharing_descendants: S podprojekti label_version_sharing_descendants: With subprojects
label_version_sharing_tree: Z drevesom projekta label_version_sharing_tree: With project tree
label_version_sharing_none: Ni deljeno label_version_sharing_none: Not shared
error_can_not_archive_project: Ta projekt ne more biti arhiviran error_can_not_archive_project: This project can not be archived
button_duplicate: Podvoji button_duplicate: Duplicate
button_copy_and_follow: Kopiraj in sledi button_copy_and_follow: Copy and follow
label_copy_source: Vir label_copy_source: Source
setting_issue_done_ratio: Izračunaj razmerje opravljenega zahtevka z setting_issue_done_ratio: Calculate the issue done ratio with
setting_issue_done_ratio_issue_status: Uporabi stanje zahtevka setting_issue_done_ratio_issue_status: Use the issue status
error_issue_done_ratios_not_updated: Razmerje opravljenega zahtevka ni bilo posodobljeno. error_issue_done_ratios_not_updated: Issue done ratios not updated.
error_workflow_copy_target: Prosimo izberite ciljni(e) sledilnik(e) in vlogo(e) error_workflow_copy_target: Please select target tracker(s) and role(s)
setting_issue_done_ratio_issue_field: Uporabi polje zahtevka setting_issue_done_ratio_issue_field: Use the issue field
label_copy_same_as_target: Enako kot cilj label_copy_same_as_target: Same as target
label_copy_target: Cilj label_copy_target: Target
notice_issue_done_ratios_updated: Razmerje opravljenega zahtevka posodobljeno. notice_issue_done_ratios_updated: Issue done ratios updated.
error_workflow_copy_source: Prosimo izberite vir zahtevka ali vlogo error_workflow_copy_source: Please select a source tracker or role
label_update_issue_done_ratios: Posodobi razmerje opravljenega zahtevka label_update_issue_done_ratios: Update issue done ratios
setting_start_of_week: Začni koledarje z setting_start_of_week: Start calendars on
permission_view_issues: Poglej zahtevke permission_view_issues: View Issues
label_display_used_statuses_only: Prikaži samo stanja ki uporabljajo ta sledilnik label_display_used_statuses_only: Only display statuses that are used by this tracker
label_revision_id: Revizija %{value} label_revision_id: Revision %{value}
label_api_access_key: API dostopni ključ label_api_access_key: API access key
label_api_access_key_created_on: API dostopni ključ ustvarjen pred %{value} label_api_access_key_created_on: API access key created %{value} ago
label_feeds_access_key: RSS dostopni ključ label_feeds_access_key: RSS access key
notice_api_access_key_reseted: Vaš API dostopni ključ je bil ponastavljen. notice_api_access_key_reseted: Your API access key was reset.
setting_rest_api_enabled: Omogoči REST spletni servis setting_rest_api_enabled: Enable REST web service
label_missing_api_access_key: Manjkajoč API dostopni ključ label_missing_api_access_key: Missing an API access key
label_missing_feeds_access_key: Manjkajoč RSS dostopni ključ label_missing_feeds_access_key: Missing a RSS access key
button_show: Prikaži button_show: Show
text_line_separated: Dovoljenih več vrednosti (ena vrstica za vsako vrednost). text_line_separated: Multiple values allowed (one line for each value).
setting_mail_handler_body_delimiters: Odreži e-pošto po eni od teh vrstic setting_mail_handler_body_delimiters: Truncate emails after one of these lines
permission_add_subprojects: Ustvari podprojekte permission_add_subprojects: Create subprojects
label_subproject_new: Nov podprojekt label_subproject_new: New subproject
text_own_membership_delete_confirmation: |- text_own_membership_delete_confirmation: |-
Odstranili boste nekatere ali vse od dovoljenj zaradi česar morda ne boste mogli več urejati tega projekta. You are about to remove some or all of your permissions and may no longer be able to edit this project after that.
Ali ste prepričani, da želite nadaljevati? Are you sure you want to continue?
label_close_versions: Zapri dokončane verzije label_close_versions: Close completed versions
label_board_sticky: Lepljivo label_board_sticky: Sticky
label_board_locked: Zaklenjeno label_board_locked: Locked
permission_export_wiki_pages: Izvozi wiki strani permission_export_wiki_pages: Export wiki pages
setting_cache_formatted_text: Predpomni oblikovano besedilo setting_cache_formatted_text: Cache formatted text
permission_manage_project_activities: Uredi aktivnosti projekta permission_manage_project_activities: Manage project activities
error_unable_delete_issue_status: Stanja zahtevka ni bilo možno spremeniti error_unable_delete_issue_status: Unable to delete issue status
label_profile: Profil label_profile: Profile
permission_manage_subtasks: Uredi podnaloge permission_manage_subtasks: Manage subtasks
field_parent_issue: Nadrejena naloga field_parent_issue: Parent task
label_subtask_plural: Podnaloge label_subtask_plural: Subtasks
label_project_copy_notifications: Med kopiranjem projekta pošlji e-poštno sporočilo label_project_copy_notifications: Send email notifications during the project copy
error_can_not_delete_custom_field: Polja po meri ni mogoče izbrisati error_can_not_delete_custom_field: Unable to delete custom field
error_unable_to_connect: Povezava ni mogoča (%{value}) error_unable_to_connect: Unable to connect (%{value})
error_can_not_remove_role: Ta vloga je v uporabi in je ni mogoče izbrisati. error_can_not_remove_role: This role is in use and can not be deleted.
error_can_not_delete_tracker: Ta sledilnik vsebuje zahtevke in se ga ne more izbrisati. error_can_not_delete_tracker: This tracker contains issues and can't be deleted.
field_principal: Upravnik varnosti field_principal: Principal
label_my_page_block: Moj gradnik strani label_my_page_block: My page block
notice_failed_to_save_members: "Shranjevanje uporabnika(ov) ni uspelo: %{errors}." notice_failed_to_save_members: "Failed to save member(s): %{errors}."
text_zoom_out: Približaj text_zoom_out: Zoom out
text_zoom_in: Oddalji text_zoom_in: Zoom in
notice_unable_delete_time_entry: Brisanje dnevnika porabljenaga časa ni mogoče. notice_unable_delete_time_entry: Unable to delete time log entry.
label_overall_spent_time: Skupni porabljeni čas label_overall_spent_time: Overall spent time
field_time_entries: Beleži porabljeni čas field_time_entries: Log time
project_module_gantt: Gantogram project_module_gantt: Gantt
project_module_calendar: Koledear project_module_calendar: Calendar
button_edit_associated_wikipage: "Uredi povezano Wiki stran: %{page_title}" button_edit_associated_wikipage: "Edit associated Wiki page: %{page_title}"
text_are_you_sure_with_children: Izbriši zahtevek in vse podazahtevke? text_are_you_sure_with_children: Delete issue and all child issues?
field_text: Besedilno polje field_text: Text field
label_user_mail_option_only_owner: Samo za stvari katerih lastnik sem label_user_mail_option_only_owner: Only for things I am the owner of
setting_default_notification_option: Privzeta možnost obveščanja setting_default_notification_option: Default notification option
label_user_mail_option_only_my_events: Samo za stvari, ki jih opazujem ali sem v njih vpleten label_user_mail_option_only_my_events: Only for things I watch or I'm involved in
label_user_mail_option_only_assigned: Samo za stvari, ki smo mi dodeljene label_user_mail_option_only_assigned: Only for things I am assigned to
label_user_mail_option_none: Noben dogodek label_user_mail_option_none: No events
field_member_of_group: Pooblaščenčeva skupina field_member_of_group: Assignee's group
field_assigned_to_role: Pooblaščenčeva vloga field_assigned_to_role: Assignee's role
notice_not_authorized_archived_project: Projekt, do katerega poskušate dostopati, je bil arhiviran. notice_not_authorized_archived_project: The project you're trying to access has been archived.
label_principal_search: "Poišči uporabnika ali skupino:" label_principal_search: "Search for user or group:"
label_user_search: "Poišči uporabnikia:" label_user_search: "Search for user:"
field_visible: Viden field_visible: Visible
setting_emails_header: Glava e-pošte setting_emails_header: Emails header
setting_commit_logtime_activity_id: Aktivnost zabeleženega časa setting_commit_logtime_activity_id: Activity for logged time
text_time_logged_by_changeset: Uporabljeno v spremembi %{value}. text_time_logged_by_changeset: Applied in changeset %{value}.
setting_commit_logtime_enabled: Omogoči beleženje časa setting_commit_logtime_enabled: Enable time logging
notice_gantt_chart_truncated: Graf je bil odrezan, ker je prekoračil največje dovoljeno število elementov, ki se jih lahko prikaže (%{max}) 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: Največje število elementov prikazano na gantogramu setting_gantt_items_limit: Maximum number of items displayed on the gantt chart
field_warn_on_leaving_unsaved: Opozori me, kadar zapuščam stran z neshranjenim besedilom field_warn_on_leaving_unsaved: Warn me when leaving a page with unsaved text
text_warn_on_leaving_unsaved: Trenutna stran vsebuje neshranjeno besedilo ki bo izgubljeno, če zapustite to stran. text_warn_on_leaving_unsaved: The current page contains unsaved text that will be lost if you leave this page.
label_my_queries: Moje poizvedbe po meri label_my_queries: My custom queries
text_journal_changed_no_detail: "%{label} posodobljen" text_journal_changed_no_detail: "%{label} updated"
label_news_comment_added: Komentar dodan novici label_news_comment_added: Comment added to a news
button_expand_all: Razširi vse button_expand_all: Expand all
button_collapse_all: Skrči vse button_collapse_all: Collapse all
label_additional_workflow_transitions_for_assignee: Dovoljeni dodatni prehodi kadar je uporabnik pooblaščenec label_additional_workflow_transitions_for_assignee: Additional transitions allowed when the user is the assignee
label_additional_workflow_transitions_for_author: Dovoljeni dodatni prehodi kadar je uporabnik avtor label_additional_workflow_transitions_for_author: Additional transitions allowed when the user is the author
label_bulk_edit_selected_time_entries: Skupinsko urejanje izbranih časovnih zapisov label_bulk_edit_selected_time_entries: Bulk edit selected time entries
text_time_entries_destroy_confirmation: Ali ste prepričani, da želite izbristai izbran(e) časovn(i/e) zapis(e)? text_time_entries_destroy_confirmation: Are you sure you want to delete the selected time entr(y/ies)?
label_role_anonymous: Anonimni label_role_anonymous: Anonymous
label_role_non_member: Nečlan label_role_non_member: Non member
label_issue_note_added: Dodan zaznamek label_issue_note_added: Note added
label_issue_status_updated: Status posodobljen label_issue_status_updated: Status updated
label_issue_priority_updated: Prioriteta posodobljena label_issue_priority_updated: Priority updated
label_issues_visibility_own: Zahtevek ustvarjen s strani uporabnika ali dodeljen uporabniku label_issues_visibility_own: Issues created by or assigned to the user
field_issues_visibility: Vidljivost zahtevkov field_issues_visibility: Issues visibility
label_issues_visibility_all: Vsi zahtevki label_issues_visibility_all: All issues
permission_set_own_issues_private: Nastavi lastne zahtevke kot javne ali zasebne permission_set_own_issues_private: Set own issues public or private
field_is_private: Zaseben field_is_private: Private
permission_set_issues_private: Nastavi zahtevke kot javne ali zasebne permission_set_issues_private: Set issues public or private
label_issues_visibility_public: Vsi nezasebni zahtevki label_issues_visibility_public: All non private issues
text_issues_destroy_descendants_confirmation: To bo izbrisalo tudi %{count} podnalog(o). text_issues_destroy_descendants_confirmation: This will also delete %{count} subtask(s).
field_commit_logs_encoding: Kodiranje sporočil ob predaji field_commit_logs_encoding: Kodiranje sporočil ob predaji
field_scm_path_encoding: Pot do kodiranja field_scm_path_encoding: Path encoding
text_scm_path_encoding_note: "Privzeto: UTF-8" text_scm_path_encoding_note: "Default: UTF-8"
field_path_to_repository: Pot do shrambe field_path_to_repository: Path to repository
field_root_directory: Korenska mapa field_root_directory: Root directory
field_cvs_module: Modul field_cvs_module: Module
field_cvsroot: CVSROOT field_cvsroot: CVSROOT
text_mercurial_repository_note: Lokalna shramba (npr. /hgrepo, c:\hgrepo) text_git_repository_note: Bare and local repository (e.g. /gitrepo, c:\gitrepo)
text_scm_command: Ukaz text_mercurial_repository_note: Local repository (e.g. /hgrepo, c:\hgrepo)
text_scm_command_version: Verzija text_scm_command: Command
label_git_report_last_commit: Sporoči zadnje uveljavljanje datotek in map text_scm_command_version: Version
text_scm_config: Svoje SCM ukaze lahko nastavite v datoteki config/configuration.yml. Po urejanju prosimo ponovno zaženite aplikacijo. label_git_report_last_commit: Report last commit for files and directories
text_scm_command_not_available: SCM ukaz ni na voljo. Prosimo preverite nastavitve v upravljalskem podoknu. text_scm_config: You can configure your scm commands in config/configuration.yml. Please restart the application after editing it.
text_scm_command_not_available: Scm command is not available. Please check settings on the administration panel.
text_git_repository_note: Shramba je prazna in lokalna (npr. /gitrepo, c:\gitrepo)
+60 -61
View File
@@ -1,4 +1,4 @@
# Chinese (China) translations for Ruby on Rails # Chinese (China) translations for Ruby on Rails
# by tsechingho (http://github.com/tsechingho) # by tsechingho (http://github.com/tsechingho)
zh: zh:
# Text direction: Left-to-Right (ltr) or Right-to-Left (rtl) # Text direction: Left-to-Right (ltr) or Right-to-Left (rtl)
@@ -11,7 +11,7 @@ zh:
default: "%Y-%m-%d" default: "%Y-%m-%d"
short: "%b%d日" short: "%b%d日"
long: "%Y年%b%d日" long: "%Y年%b%d日"
day_names: [星期天, 星期一, 星期二, 星期三, 星期四, 星期五, 星期六] day_names: [星期天, 星期一, 星期二, 星期三, 星期四, 星期五, 星期六]
abbr_day_names: [日, 一, 二, 三, 四, 五, 六] abbr_day_names: [日, 一, 二, 三, 四, 五, 六]
@@ -73,7 +73,7 @@ zh:
number: number:
# Default format for numbers # Default format for numbers
format: format:
separator: "." separator: "."
delimiter: "" delimiter: ""
precision: 3 precision: 3
human: human:
@@ -91,12 +91,13 @@ zh:
gb: "GB" gb: "GB"
tb: "TB" tb: "TB"
# Used in array.to_sentence. # Used in array.to_sentence.
support: support:
array: array:
sentence_connector: "和" sentence_connector: "和"
skip_last_comma: false skip_last_comma: false
activerecord: activerecord:
errors: errors:
template: template:
@@ -130,7 +131,7 @@ zh:
cant_link_an_issue_with_a_descendant: "问题不能关联到它的子任务" cant_link_an_issue_with_a_descendant: "问题不能关联到它的子任务"
actionview_instancetag_blank_option: 请选择 actionview_instancetag_blank_option: 请选择
general_text_No: '否' general_text_No: '否'
general_text_Yes: '是' general_text_Yes: '是'
general_text_no: '否' general_text_no: '否'
@@ -141,7 +142,7 @@ zh:
general_csv_encoding: gb18030 general_csv_encoding: gb18030
general_pdf_encoding: gb18030 general_pdf_encoding: gb18030
general_first_day_of_week: '7' general_first_day_of_week: '7'
notice_account_updated: 帐号更新成功 notice_account_updated: 帐号更新成功
notice_account_invalid_creditentials: 无效的用户名或密码 notice_account_invalid_creditentials: 无效的用户名或密码
notice_account_password_updated: 密码更新成功 notice_account_password_updated: 密码更新成功
@@ -172,7 +173,7 @@ zh:
notice_unable_delete_time_entry: 无法删除工时 notice_unable_delete_time_entry: 无法删除工时
notice_issue_done_ratios_updated: 问题完成度已更新。 notice_issue_done_ratios_updated: 问题完成度已更新。
notice_gantt_chart_truncated: "The chart was truncated because it exceeds the maximum number of items that can be displayed (%{max})" notice_gantt_chart_truncated: "The chart was truncated because it exceeds the maximum number of items that can be displayed (%{max})"
error_can_t_load_default_data: "无法载入默认设置:%{value}" error_can_t_load_default_data: "无法载入默认设置:%{value}"
error_scm_not_found: "版本库中不存在该条目和(或)其修订版本。" error_scm_not_found: "版本库中不存在该条目和(或)其修订版本。"
error_scm_command_failed: "访问版本库时发生错误:%{value}" error_scm_command_failed: "访问版本库时发生错误:%{value}"
@@ -191,7 +192,7 @@ zh:
error_unable_delete_issue_status: '无法删除问题状态' error_unable_delete_issue_status: '无法删除问题状态'
error_unable_to_connect: "无法连接 (%{value})" error_unable_to_connect: "无法连接 (%{value})"
warning_attachments_not_saved: "%{count} 个文件保存失败" warning_attachments_not_saved: "%{count} 个文件保存失败"
mail_subject_lost_password: "您的 %{value} 密码" mail_subject_lost_password: "您的 %{value} 密码"
mail_body_lost_password: '请点击以下链接来修改您的密码:' mail_body_lost_password: '请点击以下链接来修改您的密码:'
mail_subject_register: "%{value}帐号激活" mail_subject_register: "%{value}帐号激活"
@@ -206,10 +207,10 @@ zh:
mail_body_wiki_content_added: "'%{id}' wiki页面已由 %{author} 添加。" mail_body_wiki_content_added: "'%{id}' wiki页面已由 %{author} 添加。"
mail_subject_wiki_content_updated: "'%{id}' wiki页面已更新。" mail_subject_wiki_content_updated: "'%{id}' wiki页面已更新。"
mail_body_wiki_content_updated: "'%{id}' wiki页面已由 %{author} 更新。" mail_body_wiki_content_updated: "'%{id}' wiki页面已由 %{author} 更新。"
gui_validation_error: 1 个错误 gui_validation_error: 1 个错误
gui_validation_error_plural: "%{count} 个错误" gui_validation_error_plural: "%{count} 个错误"
field_name: 名称 field_name: 名称
field_description: 描述 field_description: 描述
field_summary: 摘要 field_summary: 摘要
@@ -240,7 +241,7 @@ zh:
field_is_default: 默认值 field_is_default: 默认值
field_tracker: 跟踪 field_tracker: 跟踪
field_subject: 主题 field_subject: 主题
field_due_date: 计划完成日期 field_due_date: 完成日期
field_assigned_to: 指派给 field_assigned_to: 指派给
field_priority: 优先级 field_priority: 优先级
field_fixed_version: 目标版本 field_fixed_version: 目标版本
@@ -272,7 +273,7 @@ zh:
field_attr_mail: 邮件属性 field_attr_mail: 邮件属性
field_onthefly: 即时用户生成 field_onthefly: 即时用户生成
field_start_date: 开始日期 field_start_date: 开始日期
field_done_ratio: "% 完成" field_done_ratio: % 完成
field_auth_source: 认证模式 field_auth_source: 认证模式
field_hide_mail: 隐藏我的邮件地址 field_hide_mail: 隐藏我的邮件地址
field_comments: 注释 field_comments: 注释
@@ -307,7 +308,7 @@ zh:
field_assigned_to_role: 角色的成员 field_assigned_to_role: 角色的成员
field_text: 文本字段 field_text: 文本字段
field_visible: 可见的 field_visible: 可见的
setting_app_title: 应用程序标题 setting_app_title: 应用程序标题
setting_app_subtitle: 应用程序子标题 setting_app_subtitle: 应用程序子标题
setting_welcome_text: 欢迎文字 setting_welcome_text: 欢迎文字
@@ -365,7 +366,7 @@ zh:
setting_commit_logtime_enabled: 激活时间日志 setting_commit_logtime_enabled: 激活时间日志
setting_commit_logtime_activity_id: 记录的活动 setting_commit_logtime_activity_id: 记录的活动
setting_gantt_items_limit: 在甘特图上显示的最大记录数 setting_gantt_items_limit: 在甘特图上显示的最大记录数
permission_add_project: 新建项目 permission_add_project: 新建项目
permission_add_subprojects: 新建子项目 permission_add_subprojects: 新建子项目
permission_edit_project: 编辑项目 permission_edit_project: 编辑项目
@@ -401,7 +402,7 @@ zh:
permission_manage_files: 管理文件 permission_manage_files: 管理文件
permission_view_files: 查看文件 permission_view_files: 查看文件
permission_manage_wiki: 管理Wiki permission_manage_wiki: 管理Wiki
permission_rename_wiki_pages: 重定向/重命名Wiki页面 permission_rename_wiki_pages: 重命名Wiki页面
permission_delete_wiki_pages: 删除Wiki页面 permission_delete_wiki_pages: 删除Wiki页面
permission_view_wiki_pages: 查看Wiki permission_view_wiki_pages: 查看Wiki
permission_view_wiki_edits: 查看Wiki历史记录 permission_view_wiki_edits: 查看Wiki历史记录
@@ -421,7 +422,7 @@ zh:
permission_delete_own_messages: 删除自己的帖子 permission_delete_own_messages: 删除自己的帖子
permission_export_wiki_pages: 导出 wiki 页面 permission_export_wiki_pages: 导出 wiki 页面
permission_manage_subtasks: 管理子任务 permission_manage_subtasks: 管理子任务
project_module_issue_tracking: 问题跟踪 project_module_issue_tracking: 问题跟踪
project_module_time_tracking: 时间跟踪 project_module_time_tracking: 时间跟踪
project_module_news: 新闻 project_module_news: 新闻
@@ -432,7 +433,7 @@ zh:
project_module_boards: 讨论区 project_module_boards: 讨论区
project_module_calendar: 日历 project_module_calendar: 日历
project_module_gantt: 甘特图 project_module_gantt: 甘特图
label_user: 用户 label_user: 用户
label_user_plural: 用户 label_user_plural: 用户
label_user_new: 新建用户 label_user_new: 新建用户
@@ -796,7 +797,7 @@ zh:
label_project_copy_notifications: 复制项目时发送邮件通知 label_project_copy_notifications: 复制项目时发送邮件通知
label_principal_search: "搜索用户或组:" label_principal_search: "搜索用户或组:"
label_user_search: "搜索用户:" label_user_search: "搜索用户:"
button_login: 登录 button_login: 登录
button_submit: 提交 button_submit: 提交
button_save: 保存 button_save: 保存
@@ -831,7 +832,7 @@ zh:
button_archive: 存档 button_archive: 存档
button_unarchive: 取消存档 button_unarchive: 取消存档
button_reset: 重置 button_reset: 重置
button_rename: 重命名/重定向 button_rename: 重命名
button_change_password: 修改密码 button_change_password: 修改密码
button_copy: 复制 button_copy: 复制
button_copy_and_follow: 复制并转到新问题 button_copy_and_follow: 复制并转到新问题
@@ -845,13 +846,13 @@ zh:
status_active: 活动的 status_active: 活动的
status_registered: 已注册 status_registered: 已注册
status_locked: 已锁定 status_locked: 已锁定
version_status_open: 打开 version_status_open: 打开
version_status_locked: 锁定 version_status_locked: 锁定
version_status_closed: 关闭 version_status_closed: 关闭
field_active: 活动 field_active: 活动
text_select_mail_notifications: 选择需要发送邮件通知的动作 text_select_mail_notifications: 选择需要发送邮件通知的动作
text_regexp_info: 例如:^[A-Z0-9]+$ text_regexp_info: 例如:^[A-Z0-9]+$
text_min_max_length_info: 0 表示没有限制 text_min_max_length_info: 0 表示没有限制
@@ -909,9 +910,9 @@ zh:
text_wiki_page_destroy_children: 删除子页面及其所有下级页面 text_wiki_page_destroy_children: 删除子页面及其所有下级页面
text_wiki_page_reassign_children: 将子页面的上级页面设置为 text_wiki_page_reassign_children: 将子页面的上级页面设置为
text_own_membership_delete_confirmation: 你正在删除你现有的某些或全部权限,如果这样做了你可能将会再也无法编辑该项目了。你确定要继续吗? text_own_membership_delete_confirmation: 你正在删除你现有的某些或全部权限,如果这样做了你可能将会再也无法编辑该项目了。你确定要继续吗?
text_zoom_in: 放大 text_zoom_in: Zoom in
text_zoom_out: 缩小 text_zoom_out: Zoom out
default_role_manager: 管理人员 default_role_manager: 管理人员
default_role_developer: 开发人员 default_role_developer: 开发人员
default_role_reporter: 报告人员 default_role_reporter: 报告人员
@@ -933,50 +934,48 @@ zh:
default_priority_immediate: 立刻 default_priority_immediate: 立刻
default_activity_design: 设计 default_activity_design: 设计
default_activity_development: 开发 default_activity_development: 开发
enumeration_issue_priorities: 问题优先级 enumeration_issue_priorities: 问题优先级
enumeration_doc_categories: 文档类别 enumeration_doc_categories: 文档类别
enumeration_activities: 活动(时间跟踪) enumeration_activities: 活动(时间跟踪)
enumeration_system_activity: 系统活动 enumeration_system_activity: 系统活动
field_warn_on_leaving_unsaved: 当离开未保存内容的页面时,提示我 field_warn_on_leaving_unsaved: Warn me when leaving a page with unsaved text
text_warn_on_leaving_unsaved: 若离开当前页面,则该页面内未保存的内容将丢失。 text_warn_on_leaving_unsaved: The current page contains unsaved text that will be lost if you leave this page.
label_my_queries: 我的自定义查询 label_my_queries: My custom queries
text_journal_changed_no_detail: "%{label} 已更新。" text_journal_changed_no_detail: "%{label} updated"
label_news_comment_added: 添加到新闻的评论 label_news_comment_added: Comment added to a news
button_expand_all: 展开所有 button_expand_all: Expand all
button_collapse_all: 合拢所有 button_collapse_all: Collapse all
label_additional_workflow_transitions_for_assignee: 当用户是问题的分配对象时所允许的问题状态转换 label_additional_workflow_transitions_for_assignee: Additional transitions allowed when the user is the assignee
label_additional_workflow_transitions_for_author: 当用户是问题作者时所允许的问题状态转换 label_additional_workflow_transitions_for_author: Additional transitions allowed when the user is the author
label_bulk_edit_selected_time_entries: 批量修改选定的时间条目 label_bulk_edit_selected_time_entries: Bulk edit selected time entries
text_time_entries_destroy_confirmation: 是否确定要删除选定的时间条目? text_time_entries_destroy_confirmation: Are you sure you want to delete the selected time entr(y/ies)?
label_role_anonymous: Anonymous label_role_anonymous: Anonymous
label_role_non_member: Non member label_role_non_member: Non member
label_issue_note_added: 问题备注已添加 label_issue_note_added: Note added
label_issue_status_updated: 问题状态更新 label_issue_status_updated: Status updated
label_issue_priority_updated: 问题优先级更新 label_issue_priority_updated: Priority updated
label_issues_visibility_own: 创建或分配给用户的问题 label_issues_visibility_own: Issues created by or assigned to the user
field_issues_visibility: 问题可见 field_issues_visibility: Issues visibility
label_issues_visibility_all: 全部问题 label_issues_visibility_all: All issues
permission_set_own_issues_private: 设置自己的问题为公开或私有 permission_set_own_issues_private: Set own issues public or private
field_is_private: 私有 field_is_private: Private
permission_set_issues_private: 设置问题为公开或私有 permission_set_issues_private: Set issues public or private
label_issues_visibility_public: 全部非私有问题 label_issues_visibility_public: All non private issues
text_issues_destroy_descendants_confirmation: 此操作同时会删除 %{count} 个子任务。 text_issues_destroy_descendants_confirmation: This will also delete %{count} subtask(s).
field_commit_logs_encoding: 提交注释的编码 field_commit_logs_encoding: 提交注释的编码
field_scm_path_encoding: 路径编码 field_scm_path_encoding: Path encoding
text_scm_path_encoding_note: "默认: UTF-8" text_scm_path_encoding_note: "Default: UTF-8"
field_path_to_repository: 库路径 field_path_to_repository: Path to repository
field_root_directory: 根目录 field_root_directory: Root directory
field_cvs_module: CVS Module field_cvs_module: Module
field_cvsroot: CVSROOT field_cvsroot: CVSROOT
text_mercurial_repository_note: 本地库 (e.g. /hgrepo, c:\hgrepo) text_git_repository_note: Bare and local repository (e.g. /gitrepo, c:\gitrepo)
text_scm_command: 命令 text_mercurial_repository_note: Local repository (e.g. /hgrepo, c:\hgrepo)
text_scm_command_version: 版本 text_scm_command: Command
label_git_report_last_commit: 报告最后一次文件/目录提交 text_scm_command_version: Version
text_scm_config: 您可以在config/configuration.yml中配置您的SCM命令。 请在编辑后,重启Redmine应用。 label_git_report_last_commit: Report last commit for files and directories
text_scm_command_not_available: Scm命令不可用。 请检查管理面板的配置。 text_scm_config: You can configure your scm commands in config/configuration.yml. Please restart the application after editing it.
text_scm_command_not_available: Scm command is not available. Please check settings on the administration panel.
text_git_repository_note: 库中无内容。(e.g. /gitrepo, c:\gitrepo)
+7 -47
View File
@@ -4,46 +4,6 @@ Redmine - project management software
Copyright (C) 2006-2011 Jean-Philippe Lang Copyright (C) 2006-2011 Jean-Philippe Lang
http://www.redmine.org/ http://www.redmine.org/
== 2011-12-10 v1.2.3
* Defect #8707: Reposman: wrong constant name
* Defect #8809: Table in timelog report overflows
* Defect #9055: Version files in Files module cannot be downloaded if issue tracking is disabled
* Defect #9137: db:encrypt fails to handle repositories with blank password
* Defect #9394: Custom date field only validating on regex and not a valid date
* Defect #9405: Any user with :log_time permission can edit time entries via context menu
* Defect #9448: The attached images are not shown in documents
* Defect #9520: Copied private query not visible after project copy
* Defect #9552: Error when reading ciphered text from the database without cipher key configured
* Defect #9566: Redmine.pm considers all projects private when login_required is enabled
* Defect #9567: Redmine.pm potential security issue with cache credential enabled and subversion
* Defect #9577: Deleting a subtasks doesn't update parent's rgt & lft values
* Defect #9597: Broken version links in wiki annotate history
* Defect #9682: Wiki HTML Export only useful when Access history is accessible
* Defect #9737: Custom values deleted before issue submit
* Defect #9741: calendar-hr.js (Croatian) is not UTF-8
* Patch #9558: Simplified Chinese translation for 1.2.2 updated
* Patch #9695: Bulgarian translation (r7942)
== 2011-11-11 v1.2.2
* Defect #3276: Incorrect handling of anchors in Wiki to HTML export
* Defect #7215: Wiki formatting mangles links to internal headers
* Defect #7613: Generated test instances may share the same attribute value object
* Defect #8411: Can't remove "Project" column on custom query
* Defect #8615: Custom 'version' fields don't show shared versions
* Defect #8633: Pagination counts non visible issues
* Defect #8651: Email attachments are not added to issues any more in v1.2
* Defect #8825: JRuby + Windows: SCMs do not work on Redmine 1.2
* Defect #8836: Additional workflow transitions not available when set to both author and assignee
* Defect #8865: Custom field regular expression is not validated
* Defect #8880: Error deleting issue with grandchild
* Defect #8884: Assignee is cleared when updating issue with locked assignee
* Defect #8892: Unused fonts in rfpdf plugin folder
* Defect #9161: pt-BR field_warn_on_leaving_unsaved has a small gramatical error
* Defect #9308: Search fails when a role haven't "view wiki" permission
* Defect #9465: Mercurial: can't browse named branch below Mercurial 1.5
== 2011-07-11 v1.2.1 == 2011-07-11 v1.2.1
* Defect #5089: i18N error on truncated revision diff view * Defect #5089: i18N error on truncated revision diff view
@@ -457,7 +417,7 @@ http://www.redmine.org/
* #819: Add a body ID and class to all pages * #819: Add a body ID and class to all pages
* #871: Commit new CSS styles! * #871: Commit new CSS styles!
* #3301: Add favicon to base layout * #3301: Add favicon to base layout
* #4656: On Issue#show page, clicking on “Add related issueâ€� should focus on the input * #4656: On Issue#show page, clicking on “Add related issue” should focus on the input
* #4896: Project identifier should be a limited field * #4896: Project identifier should be a limited field
* #5084: Filter all isssues by projects * #5084: Filter all isssues by projects
* #5477: Replace Test::Unit::TestCase with ActiveSupport::TestCase * #5477: Replace Test::Unit::TestCase with ActiveSupport::TestCase
@@ -1466,7 +1426,7 @@ http://www.redmine.org/
* Search engines now supports pagination. Results are sorted in reverse chronological order * Search engines now supports pagination. Results are sorted in reverse chronological order
* Added "Estimated hours" attribute on issues * Added "Estimated hours" attribute on issues
* A category with assigned issue can now be deleted. 2 options are proposed: remove assignments or reassign issues to another category * A category with assigned issue can now be deleted. 2 options are proposed: remove assignments or reassign issues to another category
* Forum notifications are now also sent to the authors of the thread, even if they don�t watch the board * Forum notifications are now also sent to the authors of the thread, even if they don�t watch the board
* Added an application setting to specify the application protocol (http or https) used to generate urls in emails * Added an application setting to specify the application protocol (http or https) used to generate urls in emails
* Gantt chart: now starts at the current month by default * Gantt chart: now starts at the current month by default
* Gantt chart: month count and zoom factor are automatically saved as user preferences * Gantt chart: month count and zoom factor are automatically saved as user preferences
@@ -1474,7 +1434,7 @@ http://www.redmine.org/
* Added wiki index by date * Added wiki index by date
* Added preview on add/edit issue form * Added preview on add/edit issue form
* Emails footer can now be customized from the admin interface (Admin -> Email notifications) * Emails footer can now be customized from the admin interface (Admin -> Email notifications)
* Default encodings for repository files can now be set in application settings (used to convert files content and diff to UTF-8 so that they�re properly displayed) * Default encodings for repository files can now be set in application settings (used to convert files content and diff to UTF-8 so that they�re properly displayed)
* Calendar: first day of week can now be set in lang files * Calendar: first day of week can now be set in lang files
* Automatic closing of duplicate issues * Automatic closing of duplicate issues
* Added a cross-project issue list * Added a cross-project issue list
@@ -1486,7 +1446,7 @@ http://www.redmine.org/
* Added some accesskeys * Added some accesskeys
* Added "Float" as a custom field format * Added "Float" as a custom field format
* Added basic Theme support * Added basic Theme support
* Added the ability to set the �done ratio� of issues fixed by commit (Nikolay Solakov) * Added the ability to set the �done ratio� of issues fixed by commit (Nikolay Solakov)
* Added custom fields in issue related mail notifications * Added custom fields in issue related mail notifications
* Email notifications are now sent in plain text and html * Email notifications are now sent in plain text and html
* Gantt chart can now be exported to a graphic file (png). This functionality is only available if RMagick is installed. * Gantt chart can now be exported to a graphic file (png). This functionality is only available if RMagick is installed.
@@ -1519,7 +1479,7 @@ http://www.redmine.org/
* Added Korean translation (Choi Jong Yoon) * Added Korean translation (Choi Jong Yoon)
* Fixed: the link to delete issue relations is displayed even if the user is not authorized to delete relations * Fixed: the link to delete issue relations is displayed even if the user is not authorized to delete relations
* Performance improvement on calendar and gantt * Performance improvement on calendar and gantt
* Fixed: wiki preview doesn�t work on long entries * Fixed: wiki preview doesn�t work on long entries
* Fixed: queries with multiple custom fields return no result * Fixed: queries with multiple custom fields return no result
* Fixed: Can not authenticate user against LDAP if its DN contains non-ascii characters * Fixed: Can not authenticate user against LDAP if its DN contains non-ascii characters
* Fixed: URL with ~ broken in wiki formatting * Fixed: URL with ~ broken in wiki formatting
@@ -1530,7 +1490,7 @@ http://www.redmine.org/
* per project forums added * per project forums added
* added the ability to archive projects * added the ability to archive projects
* added �Watch� functionality on issues. It allows users to receive notifications about issue changes * added �Watch� functionality on issues. It allows users to receive notifications about issue changes
* custom fields for issues can now be used as filters on issue list * custom fields for issues can now be used as filters on issue list
* added per user custom queries * added per user custom queries
* commit messages are now scanned for referenced or fixed issue IDs (keywords defined in Admin -> Settings) * commit messages are now scanned for referenced or fixed issue IDs (keywords defined in Admin -> Settings)
@@ -1571,7 +1531,7 @@ http://www.redmine.org/
* added swedish translation (Thomas Habets) * added swedish translation (Thomas Habets)
* italian translation update (Alessio Spadaro) * italian translation update (Alessio Spadaro)
* japanese translation update (Satoru Kurashiki) * japanese translation update (Satoru Kurashiki)
* fixed: error on history atom feed when there�s no notes on an issue change * fixed: error on history atom feed when there�s no notes on an issue change
* fixed: error in journalizing an issue with longtext custom fields (Postgresql) * fixed: error in journalizing an issue with longtext custom fields (Postgresql)
* fixed: creation of Oracle schema * fixed: creation of Oracle schema
* fixed: last day of the month not included in project activity * fixed: last day of the month not included in project activity
+1 -2
View File
@@ -9,9 +9,8 @@ Running Tests
Run `rake --tasks test` to see available tests. Run `rake --tasks test` to see available tests.
`rake test` will run the entire testsuite. `rake test` will run the entire testsuite.
You can run `ruby test/unit/issue_test.rb` for an each test.
Before running tests, you need to configure both development Before running `rake test` you need to configure both development
and test databases. and test databases.
Creating test repositories Creating test repositories
+13 -39
View File
@@ -149,16 +149,15 @@ sub RedmineDSN {
$self->{RedmineDSN} = $arg; $self->{RedmineDSN} = $arg;
my $query = "SELECT my $query = "SELECT
hashed_password, salt, auth_source_id, permissions hashed_password, salt, auth_source_id, permissions
FROM projects, users, roles FROM members, projects, users, roles, member_roles
WHERE WHERE
users.login=? projects.id=members.project_id
AND projects.identifier=? AND member_roles.member_id=members.id
AND users.id=members.user_id
AND roles.id=member_roles.role_id
AND users.status=1 AND users.status=1
AND ( AND login=?
roles.id IN (SELECT member_roles.role_id FROM members, member_roles WHERE members.user_id = users.id AND members.project_id = projects.id AND members.id = member_roles.member_id) AND identifier=? ";
OR
(roles.builtin=1 AND cast(projects.is_public as CHAR) IN ('t', '1'))
) ";
$self->{RedmineQuery} = trim($query); $self->{RedmineQuery} = trim($query);
} }
@@ -209,7 +208,7 @@ sub access_handler {
my $project_id = get_project_identifier($r); my $project_id = get_project_identifier($r);
$r->set_handlers(PerlAuthenHandler => [\&OK]) $r->set_handlers(PerlAuthenHandler => [\&OK])
if is_public_project($project_id, $r) && anonymous_role_allows_browse_repository($r); if is_public_project($project_id, $r);
return OK return OK
} }
@@ -281,29 +280,6 @@ sub is_public_project {
$ret; $ret;
} }
sub anonymous_role_allows_browse_repository {
my $r = shift;
my $dbh = connect_database($r);
my $sth = $dbh->prepare(
"SELECT permissions FROM roles WHERE builtin = 2;"
);
$sth->execute();
my $ret = 0;
if (my @row = $sth->fetchrow_array) {
if ($row[0] =~ /:browse_repository/) {
$ret = 1;
}
}
$sth->finish();
undef $sth;
$dbh->disconnect();
undef $dbh;
$ret;
}
# perhaps we should use repository right (other read right) to check public access. # perhaps we should use repository right (other read right) to check public access.
# it could be faster BUT it doesn't work for the moment. # it could be faster BUT it doesn't work for the moment.
# sub is_public_project_by_file { # sub is_public_project_by_file {
@@ -328,13 +304,11 @@ sub is_member {
my $project_id = get_project_identifier($r); my $project_id = get_project_identifier($r);
my $pass_digest = Digest::SHA1::sha1_hex($redmine_pass); my $pass_digest = Digest::SHA1::sha1_hex($redmine_pass);
my $access_mode = defined $read_only_methods{$r->method} ? "R" : "W";
my $cfg = Apache2::Module::get_config(__PACKAGE__, $r->server, $r->per_dir_config); my $cfg = Apache2::Module::get_config(__PACKAGE__, $r->server, $r->per_dir_config);
my $usrprojpass; my $usrprojpass;
if ($cfg->{RedmineCacheCredsMax}) { if ($cfg->{RedmineCacheCredsMax}) {
$usrprojpass = $cfg->{RedmineCacheCreds}->get($redmine_user.":".$project_id.":".$access_mode); $usrprojpass = $cfg->{RedmineCacheCreds}->get($redmine_user.":".$project_id);
return 1 if (defined $usrprojpass and ($usrprojpass eq $pass_digest)); return 1 if (defined $usrprojpass and ($usrprojpass eq $pass_digest));
} }
my $query = $cfg->{RedmineQuery}; my $query = $cfg->{RedmineQuery};
@@ -347,7 +321,7 @@ sub is_member {
unless ($auth_source_id) { unless ($auth_source_id) {
my $method = $r->method; my $method = $r->method;
my $salted_password = Digest::SHA1::sha1_hex($salt.$pass_digest); my $salted_password = Digest::SHA1::sha1_hex($salt.$pass_digest);
if ($hashed_password eq $salted_password && (($access_mode eq "R" && $permissions =~ /:browse_repository/) || $permissions =~ /:commit_access/) ) { if ($hashed_password eq $salted_password && ((defined $read_only_methods{$method} && $permissions =~ /:browse_repository/) || $permissions =~ /:commit_access/) ) {
$ret = 1; $ret = 1;
last; last;
} }
@@ -366,7 +340,7 @@ sub is_member {
filter => "(".$rowldap[6]."=%s)" filter => "(".$rowldap[6]."=%s)"
); );
my $method = $r->method; my $method = $r->method;
$ret = 1 if ($ldap->authenticate($redmine_user, $redmine_pass) && (($access_mode eq "R" && $permissions =~ /:browse_repository/) || $permissions =~ /:commit_access/)); $ret = 1 if ($ldap->authenticate($redmine_user, $redmine_pass) && ((defined $read_only_methods{$method} && $permissions =~ /:browse_repository/) || $permissions =~ /:commit_access/));
} }
$sthldap->finish(); $sthldap->finish();
@@ -380,10 +354,10 @@ sub is_member {
if ($cfg->{RedmineCacheCredsMax} and $ret) { if ($cfg->{RedmineCacheCredsMax} and $ret) {
if (defined $usrprojpass) { if (defined $usrprojpass) {
$cfg->{RedmineCacheCreds}->set($redmine_user.":".$project_id.":".$access_mode, $pass_digest); $cfg->{RedmineCacheCreds}->set($redmine_user.":".$project_id, $pass_digest);
} else { } else {
if ($cfg->{RedmineCacheCredsCount} < $cfg->{RedmineCacheCredsMax}) { if ($cfg->{RedmineCacheCredsCount} < $cfg->{RedmineCacheCredsMax}) {
$cfg->{RedmineCacheCreds}->set($redmine_user.":".$project_id.":".$access_mode, $pass_digest); $cfg->{RedmineCacheCreds}->set($redmine_user.":".$project_id, $pass_digest);
$cfg->{RedmineCacheCredsCount}++; $cfg->{RedmineCacheCredsCount}++;
} else { } else {
$cfg->{RedmineCacheCreds}->clear(); $cfg->{RedmineCacheCreds}->clear();
+1 -1
View File
@@ -938,7 +938,7 @@ class RedCloth3 < String
stln,algn,atts,url,title,href,href_a1,href_a2 = $~[1..8] stln,algn,atts,url,title,href,href_a1,href_a2 = $~[1..8]
htmlesc title htmlesc title
atts = pba( atts ) atts = pba( atts )
atts = " src=\"#{ htmlesc url.dup }\"#{ atts }" atts = " src=\"#{ url }\"#{ atts }"
atts << " title=\"#{ title }\"" if title atts << " title=\"#{ title }\"" if title
atts << " alt=\"#{ title }\"" atts << " alt=\"#{ title }\""
# size = @getimagesize($url); # size = @getimagesize($url);
+3 -3
View File
@@ -88,10 +88,10 @@ Redmine::AccessControl.map do |map|
end end
map.project_module :time_tracking do |map| map.project_module :time_tracking do |map|
map.permission :log_time, {:timelog => [:new, :create]}, :require => :loggedin map.permission :log_time, {:timelog => [:new, :create, :edit, :update, :bulk_edit, :bulk_update]}, :require => :loggedin
map.permission :view_time_entries, :timelog => [:index, :show], :time_entry_reports => [:report] map.permission :view_time_entries, :timelog => [:index, :show], :time_entry_reports => [:report]
map.permission :edit_time_entries, {:timelog => [:edit, :update, :destroy, :bulk_edit, :bulk_update]}, :require => :member map.permission :edit_time_entries, {:timelog => [:new, :create, :edit, :update, :destroy, :bulk_edit, :bulk_update]}, :require => :member
map.permission :edit_own_time_entries, {:timelog => [:edit, :update, :destroy,:bulk_edit, :bulk_update]}, :require => :loggedin map.permission :edit_own_time_entries, {:timelog => [:new, :create, :edit, :update, :destroy,:bulk_edit, :bulk_update]}, :require => :loggedin
map.permission :manage_project_activities, {:project_enumerations => [:update, :destroy]}, :require => :member map.permission :manage_project_activities, {:project_enumerations => [:update, :destroy]}, :require => :member
end end
+1 -9
View File
@@ -23,7 +23,7 @@ module Redmine
class << self class << self
def encrypt_text(text) def encrypt_text(text)
if cipher_key.blank? || text.blank? if cipher_key.blank?
text text
else else
c = OpenSSL::Cipher::Cipher.new("aes-256-cbc") c = OpenSSL::Cipher::Cipher.new("aes-256-cbc")
@@ -39,10 +39,6 @@ module Redmine
def decrypt_text(text) def decrypt_text(text)
if text && match = text.match(/\Aaes-256-cbc:(.+)\Z/) if text && match = text.match(/\Aaes-256-cbc:(.+)\Z/)
if cipher_key.blank?
logger.error "Attempt to decrypt a ciphered text with no cipher key configured in config/configuration.yml" if logger
return text
end
text = match[1] text = match[1]
c = OpenSSL::Cipher::Cipher.new("aes-256-cbc") c = OpenSSL::Cipher::Cipher.new("aes-256-cbc")
e, iv = text.split("--").map {|s| Base64.decode64(s)} e, iv = text.split("--").map {|s| Base64.decode64(s)}
@@ -60,10 +56,6 @@ module Redmine
key = Redmine::Configuration['database_cipher_key'].to_s key = Redmine::Configuration['database_cipher_key'].to_s
key.blank? ? nil : Digest::SHA256.hexdigest(key) key.blank? ? nil : Digest::SHA256.hexdigest(key)
end end
def logger
RAILS_DEFAULT_LOGGER
end
end end
module ClassMethods module ClassMethods
-7
View File
@@ -11,13 +11,6 @@ module Redmine
str = str.encode("US-ASCII", :invalid => :replace, str = str.encode("US-ASCII", :invalid => :replace,
:undef => :replace, :replace => '?').encode("UTF-8") :undef => :replace, :replace => '?').encode("UTF-8")
end end
elsif RUBY_PLATFORM == 'java'
begin
ic = Iconv.new('UTF-8', 'UTF-8')
str = ic.iconv(str)
rescue
str = str.gsub(%r{[^\r\n\t\x20-\x7e]}, '?')
end
else else
ic = Iconv.new('UTF-8', 'UTF-8') ic = Iconv.new('UTF-8', 'UTF-8')
txtar = "" txtar = ""
+22 -22
View File
@@ -1,16 +1,16 @@
# Redmine - project management software # Redmine - project management software
# Copyright (C) 2006-2011 Jean-Philippe Lang # Copyright (C) 2006-2008 Jean-Philippe Lang
# #
# This program is free software; you can redistribute it and/or # This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License # modify it under the terms of the GNU General Public License
# as published by the Free Software Foundation; either version 2 # as published by the Free Software Foundation; either version 2
# of the License, or (at your option) any later version. # of the License, or (at your option) any later version.
# #
# This program is distributed in the hope that it will be useful, # This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of # but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details. # GNU General Public License for more details.
# #
# You should have received a copy of the GNU General Public License # You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software # along with this program; if not, write to the Free Software
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
@@ -22,7 +22,7 @@ module Redmine
@@listener_classes = [] @@listener_classes = []
@@listeners = nil @@listeners = nil
@@hook_listeners = {} @@hook_listeners = {}
class << self class << self
# Adds a listener class. # Adds a listener class.
# Automatically called when a class inherits from Redmine::Hook::Listener. # Automatically called when a class inherits from Redmine::Hook::Listener.
@@ -31,29 +31,29 @@ module Redmine
@@listener_classes << klass @@listener_classes << klass
clear_listeners_instances clear_listeners_instances
end end
# Returns all the listerners instances. # Returns all the listerners instances.
def listeners def listeners
@@listeners ||= @@listener_classes.collect {|listener| listener.instance} @@listeners ||= @@listener_classes.collect {|listener| listener.instance}
end end
# Returns the listeners instances for the given hook. # Returns the listeners instances for the given hook.
def hook_listeners(hook) def hook_listeners(hook)
@@hook_listeners[hook] ||= listeners.select {|listener| listener.respond_to?(hook)} @@hook_listeners[hook] ||= listeners.select {|listener| listener.respond_to?(hook)}
end end
# Clears all the listeners. # Clears all the listeners.
def clear_listeners def clear_listeners
@@listener_classes = [] @@listener_classes = []
clear_listeners_instances clear_listeners_instances
end end
# Clears all the listeners instances. # Clears all the listeners instances.
def clear_listeners_instances def clear_listeners_instances
@@listeners = nil @@listeners = nil
@@hook_listeners = {} @@hook_listeners = {}
end end
# Calls a hook. # Calls a hook.
# Returns the listeners response. # Returns the listeners response.
def call_hook(hook, context={}) def call_hook(hook, context={})
@@ -101,11 +101,11 @@ module Redmine
def self.default_url_options def self.default_url_options
{:only_path => true } {:only_path => true }
end end
# Helper method to directly render a partial using the context: # Helper method to directly render a partial using the context:
# #
# class MyHook < Redmine::Hook::ViewListener # class MyHook < Redmine::Hook::ViewListener
# render_on :view_issues_show_details_bottom, :partial => "show_more_data" # render_on :view_issues_show_details_bottom, :partial => "show_more_data"
# end # end
# #
def self.render_on(hook, options={}) def self.render_on(hook, options={})
@@ -115,25 +115,25 @@ module Redmine
end end
end end
# Helper module included in ApplicationHelper and ActionController so that # Helper module included in ApplicationHelper and ActionControllerso that
# hooks can be called in views like this: # hooks can be called in views like this:
# #
# <%= call_hook(:some_hook) %> # <%= call_hook(:some_hook) %>
# <%= call_hook(:another_hook, :foo => 'bar') %> # <%= call_hook(:another_hook, :foo => 'bar' %>
# #
# Or in controllers like: # Or in controllers like:
# call_hook(:some_hook) # call_hook(:some_hook)
# call_hook(:another_hook, :foo => 'bar') # call_hook(:another_hook, :foo => 'bar'
# #
# Hooks added to views will be concatenated into a string. Hooks added to # Hooks added to views will be concatenated into a string. Hooks added to
# controllers will return an array of results. # controllers will return an array of results.
# #
# Several objects are automatically added to the call context: # Several objects are automatically added to the call context:
# #
# * project => current project # * project => current project
# * request => Request instance # * request => Request instance
# * controller => current Controller instance # * controller => current Controller instance
# #
module Helper module Helper
def call_hook(hook, context={}) def call_hook(hook, context={})
if is_a?(ActionController::Base) if is_a?(ActionController::Base)
@@ -142,7 +142,7 @@ module Redmine
else else
default_context = {:controller => controller, :project => @project, :request => request} default_context = {:controller => controller, :project => @project, :request => request}
Redmine::Hook.call_hook(hook, default_context.merge(context)).join(' ') Redmine::Hook.call_hook(hook, default_context.merge(context)).join(' ')
end end
end end
end end
end end
+1 -13
View File
@@ -29,14 +29,6 @@ module Redmine
"" ""
end end
def shell_quote_command
if Redmine::Platform.mswin? && RUBY_PLATFORM == 'java'
client_command
else
shell_quote(client_command)
end
end
# Returns the version of the scm client # Returns the version of the scm client
# Eg: [1, 5, 0] or [] if unknown # Eg: [1, 5, 0] or [] if unknown
def client_version def client_version
@@ -224,11 +216,7 @@ module Redmine
io.close_write io.close_write
block.call(io) if block_given? block.call(io) if block_given?
end end
## If scm command does not exist, rescue Errno::ENOENT => e
## Linux JRuby 1.6.2 (ruby-1.8.7-p330) raises java.io.IOException
## in production environment.
# rescue Errno::ENOENT => e
rescue Exception => e
msg = strip_credential(e.message) msg = strip_credential(e.message)
# The command failed, log it and re-raise # The command failed, log it and re-raise
logmsg = "SCM command failed, " logmsg = "SCM command failed, "
+1 -1
View File
@@ -31,7 +31,7 @@ module Redmine
end end
def sq_bin def sq_bin
@@sq_bin ||= shell_quote_command @@sq_bin ||= shell_quote(BZR_BIN)
end end
def client_version def client_version
+3 -6
View File
@@ -34,7 +34,7 @@ module Redmine
end end
def sq_bin def sq_bin
@@sq_bin ||= shell_quote_command @@sq_bin ||= shell_quote(CVS_BIN)
end end
def client_version def client_version
@@ -379,16 +379,13 @@ module Redmine
end end
def scm_cmd(*args, &block) def scm_cmd(*args, &block)
full_args = ['-d', root_url] full_args = [CVS_BIN, '-d', root_url]
full_args += args full_args += args
full_args_locale = [] full_args_locale = []
full_args.map do |e| full_args.map do |e|
full_args_locale << scm_iconv(@path_encoding, 'UTF-8', e) full_args_locale << scm_iconv(@path_encoding, 'UTF-8', e)
end end
ret = shellout( ret = shellout(full_args_locale.map { |e| shell_quote e.to_s }.join(' '), &block)
self.class.sq_bin + ' ' + full_args_locale.map { |e| shell_quote e.to_s }.join(' '),
&block
)
if $? && $?.exitstatus != 0 if $? && $?.exitstatus != 0
raise ScmCommandAborted, "cvs exited with non-zero status: #{$?.exitstatus}" raise ScmCommandAborted, "cvs exited with non-zero status: #{$?.exitstatus}"
end end
+1 -1
View File
@@ -31,7 +31,7 @@ module Redmine
end end
def sq_bin def sq_bin
@@sq_bin ||= shell_quote_command @@sq_bin ||= shell_quote(DARCS_BIN)
end end
def client_version def client_version
+3 -6
View File
@@ -34,7 +34,7 @@ module Redmine
end end
def sq_bin def sq_bin
@@sq_bin ||= shell_quote_command @@sq_bin ||= shell_quote(GIT_BIN)
end end
def client_version def client_version
@@ -359,16 +359,13 @@ module Redmine
def scm_cmd(*args, &block) def scm_cmd(*args, &block)
repo_path = root_url || url repo_path = root_url || url
full_args = ['--git-dir', repo_path] full_args = [GIT_BIN, '--git-dir', repo_path]
if self.class.client_version_above?([1, 7, 2]) if self.class.client_version_above?([1, 7, 2])
full_args << '-c' << 'core.quotepath=false' full_args << '-c' << 'core.quotepath=false'
full_args << '-c' << 'log.decorate=no' full_args << '-c' << 'log.decorate=no'
end end
full_args += args full_args += args
ret = shellout( ret = shellout(full_args.map { |e| shell_quote e.to_s }.join(' '), &block)
self.class.sq_bin + ' ' + full_args.map { |e| shell_quote e.to_s }.join(' '),
&block
)
if $? && $?.exitstatus != 0 if $? && $?.exitstatus != 0
raise ScmCommandAborted, "git exited with non-zero status: #{$?.exitstatus}" raise ScmCommandAborted, "git exited with non-zero status: #{$?.exitstatus}"
end end
@@ -0,0 +1,12 @@
changeset = 'This template must be used with --debug option\n'
changeset_quiet = 'This template must be used with --debug option\n'
changeset_verbose = 'This template must be used with --debug option\n'
changeset_debug = '<logentry revision="{rev}" node="{node|short}">\n<author>{author|escape}</author>\n<date>{date|isodate}</date>\n<paths>\n{files}{file_adds}{file_dels}{file_copies}</paths>\n<msg>{desc|escape}</msg>\n{tags}</logentry>\n\n'
file = '<path action="M">{file|urlescape}</path>\n'
file_add = '<path action="A">{file_add|urlescape}</path>\n'
file_del = '<path action="D">{file_del|urlescape}</path>\n'
file_copy = '<path-copied copyfrom-path="{source|urlescape}">{name|urlescape}</path-copied>\n'
tag = '<tag>{tag|escape}</tag>\n'
header='<?xml version="1.0" encoding="UTF-8" ?>\n<log>\n\n'
# footer="</log>"
@@ -46,7 +46,7 @@ Output example of rhmanifest::
</rhmanifest> </rhmanifest>
""" """
import re, time, cgi, urllib import re, time, cgi, urllib
from mercurial import cmdutil, commands, node, error, hg from mercurial import cmdutil, commands, node, error
_x = cgi.escape _x = cgi.escape
_u = lambda s: cgi.escape(urllib.quote(s)) _u = lambda s: cgi.escape(urllib.quote(s))
@@ -146,10 +146,7 @@ def rhlog(ui, repo, *pats, **opts):
bra = urllib.unquote_plus(opts.pop('rhbranch', None)) bra = urllib.unquote_plus(opts.pop('rhbranch', None))
from_rev = from_rev.replace('"', '\\"') from_rev = from_rev.replace('"', '\\"')
to_rev = to_rev.replace('"', '\\"') to_rev = to_rev.replace('"', '\\"')
if hg.util.version() >= '1.6': opts['rev'] = ['"%s":"%s"' % (from_rev, to_rev)]
opts['rev'] = ['"%s":"%s"' % (from_rev, to_rev)]
else:
opts['rev'] = ['%s:%s' % (from_rev, to_rev)]
opts['branch'] = [bra] opts['branch'] = [bra]
return commands.log(ui, repo, *map(urllib.unquote_plus, pats), **opts) return commands.log(ui, repo, *map(urllib.unquote_plus, pats), **opts)
@@ -199,21 +196,21 @@ cmdtable = {
[ [
('r', 'rev', [], 'show the specified revision'), ('r', 'rev', [], 'show the specified revision'),
('b', 'branch', [], ('b', 'branch', [],
'show changesets within the given named branch'), 'show changesets within the given named branch', 'BRANCH'),
('l', 'limit', '', ('l', 'limit', '',
'limit number of changes displayed'), 'limit number of changes displayed', 'NUM'),
('d', 'date', '', ('d', 'date', '',
'show revisions matching date spec'), 'show revisions matching date spec', 'DATE'),
('u', 'user', [], ('u', 'user', [],
'revisions committed by user'), 'revisions committed by user', 'USER'),
('', 'from', '', ('', 'from', '',
''), '', ''),
('', 'to', '', ('', 'to', '',
''), '', ''),
('', 'rhbranch', '', ('', 'rhbranch', '',
''), '', ''),
('', 'template', '', ('', 'template', '',
'display with template')], 'display with template', 'TEMPLATE')],
'hg rhlog [OPTION]... [FILE]'), 'hg rhlog [OPTION]... [FILE]'),
'rhmanifest': (rhmanifest, 'rhmanifest': (rhmanifest,
[('r', 'rev', '', 'show the specified revision')], [('r', 'rev', '', 'show the specified revision')],
+10 -8
View File
@@ -39,7 +39,7 @@ module Redmine
end end
def sq_bin def sq_bin
@@sq_bin ||= shell_quote_command @@sq_bin ||= shell_quote(HG_BIN)
end end
def client_version def client_version
@@ -47,7 +47,7 @@ module Redmine
end end
def client_available def client_available
client_version_above?([1, 2]) client_version_above?([0, 9, 5])
end end
def hgversion def hgversion
@@ -72,7 +72,12 @@ module Redmine
end end
def template_path_for(version) def template_path_for(version)
"#{HELPERS_DIR}/#{TEMPLATE_NAME}-1.0.#{TEMPLATE_EXTENSION}" if ((version <=> [0,9,5]) > 0) || version.empty?
ver = "1.0"
else
ver = "0.9.5"
end
"#{HELPERS_DIR}/#{TEMPLATE_NAME}-#{ver}.#{TEMPLATE_EXTENSION}"
end end
end end
@@ -289,14 +294,11 @@ module Redmine
# Runs 'hg' command with the given args # Runs 'hg' command with the given args
def hg(*args, &block) def hg(*args, &block)
repo_path = root_url || url repo_path = root_url || url
full_args = ['-R', repo_path, '--encoding', 'utf-8'] full_args = [HG_BIN, '-R', repo_path, '--encoding', 'utf-8']
full_args << '--config' << "extensions.redminehelper=#{HG_HELPER_EXT}" full_args << '--config' << "extensions.redminehelper=#{HG_HELPER_EXT}"
full_args << '--config' << 'diff.git=false' full_args << '--config' << 'diff.git=false'
full_args += args full_args += args
ret = shellout( ret = shellout(full_args.map { |e| shell_quote e.to_s }.join(' '), &block)
self.class.sq_bin + ' ' + full_args.map { |e| shell_quote e.to_s }.join(' '),
&block
)
if $? && $?.exitstatus != 0 if $? && $?.exitstatus != 0
raise HgCommandAborted, "hg exited with non-zero status: #{$?.exitstatus}" raise HgCommandAborted, "hg exited with non-zero status: #{$?.exitstatus}"
end end
@@ -32,7 +32,7 @@ module Redmine
end end
def sq_bin def sq_bin
@@sq_bin ||= shell_quote_command @@sq_bin ||= shell_quote(SVN_BIN)
end end
def client_version def client_version
+1 -1
View File
@@ -4,7 +4,7 @@ module Redmine
module VERSION #:nodoc: module VERSION #:nodoc:
MAJOR = 1 MAJOR = 1
MINOR = 2 MINOR = 2
TINY = 3 TINY = 1
# Branch values: # Branch values:
# * official release: nil # * official release: nil
+2 -2
View File
@@ -100,14 +100,14 @@ Processed emails control options:
Examples: Examples:
# No project specified. Emails MUST contain the 'Project' keyword: # No project specified. Emails MUST contain the 'Project' keyword:
rake redmine:email:receive_imap RAILS_ENV="production" \\ rake redmine:email:receive_iamp RAILS_ENV="production" \\
host=imap.foo.bar username=redmine@example.net password=xxx host=imap.foo.bar username=redmine@example.net password=xxx
# Fixed project and default tracker specified, but emails can override # Fixed project and default tracker specified, but emails can override
# both tracker and priority attributes: # both tracker and priority attributes:
rake redmine:email:receive_imap RAILS_ENV="production" \\ rake redmine:email:receive_iamp RAILS_ENV="production" \\
host=imap.foo.bar username=redmine@example.net password=xxx ssl=1 \\ host=imap.foo.bar username=redmine@example.net password=xxx ssl=1 \\
project=foo \\ project=foo \\
tracker=bug \\ tracker=bug \\
@@ -18,7 +18,7 @@ Calendar._DN = new Array
"Cetvrtak", "Cetvrtak",
"Petak", "Petak",
"Subota", "Subota",
"Nedjelja"); "Nedjelja");
// Please note that the following array of short day names (and the same goes // Please note that the following array of short day names (and the same goes
// for short month names, _SMN) isn't absolutely necessary. We give it here // for short month names, _SMN) isn't absolutely necessary. We give it here
@@ -51,7 +51,7 @@ Calendar._FD = 0;
Calendar._MN = new Array Calendar._MN = new Array
("Sijecanj", ("Sijecanj",
"Veljaca", "Veljaca",
"Ožujak", "Ožujak",
"Travanj", "Travanj",
"Svibanj", "Svibanj",
"Lipanj", "Lipanj",
@@ -66,7 +66,7 @@ Calendar._MN = new Array
Calendar._SMN = new Array Calendar._SMN = new Array
("Sij", ("Sij",
"Velj", "Velj",
"Ožu", "Ožu",
"Tra", "Tra",
"Svi", "Svi",
"Lip", "Lip",
@@ -100,7 +100,7 @@ Calendar._TT["ABOUT_TIME"] = "\n\n" +
Calendar._TT["PREV_YEAR"] = "Prethodna godina (hold for menu)"; Calendar._TT["PREV_YEAR"] = "Prethodna godina (hold for menu)";
Calendar._TT["PREV_MONTH"] = "Prethodni mjesec (hold for menu)"; Calendar._TT["PREV_MONTH"] = "Prethodni mjesec (hold for menu)";
Calendar._TT["GO_TODAY"] = "Na današnji dan"; Calendar._TT["GO_TODAY"] = "Na današnji dan";
Calendar._TT["NEXT_MONTH"] = "Naredni mjesec (hold for menu)"; Calendar._TT["NEXT_MONTH"] = "Naredni mjesec (hold for menu)";
Calendar._TT["NEXT_YEAR"] = "Naredna godina (hold for menu)"; Calendar._TT["NEXT_YEAR"] = "Naredna godina (hold for menu)";
Calendar._TT["SEL_DATE"] = "Odaberite datum"; Calendar._TT["SEL_DATE"] = "Odaberite datum";
@@ -109,7 +109,7 @@ Calendar._TT["PART_TODAY"] = " (Danas)";
// the following is to inform that "%s" is to be the first day of week // the following is to inform that "%s" is to be the first day of week
// %s will be replaced with the day name. // %s will be replaced with the day name.
Calendar._TT["DAY_FIRST"] = "Prikaži %s prvo"; Calendar._TT["DAY_FIRST"] = "Prikaži %s prvo";
// This may be locale-dependent. It specifies the week-end days, as an array // This may be locale-dependent. It specifies the week-end days, as an array
// of comma-separated numbers. The numbers are from 0 to 6: 0 means Sunday, 1 // of comma-separated numbers. The numbers are from 0 to 6: 0 means Sunday, 1
+6 -1
View File
@@ -1,4 +1,9 @@
class AuthSource < ActiveRecord::Base class AuthSource < ActiveRecord::Base
generator_for :name, :start => 'Auth0' generator_for :name, :method => :next_name
def self.next_name
@last_name ||= 'Auth0'
@last_name.succ!
@last_name
end
end end
+14 -2
View File
@@ -1,8 +1,20 @@
class Board < ActiveRecord::Base class Board < ActiveRecord::Base
generator_for :name, :start => 'A Forum' generator_for :name, :method => :next_name
generator_for :description, :start => 'Some description here' generator_for :description, :method => :next_description
generator_for :project, :method => :generate_project generator_for :project, :method => :generate_project
def self.next_name
@last_name ||= 'A Forum'
@last_name.succ!
@last_name
end
def self.next_description
@last_description ||= 'Some description here'
@last_description.succ!
@last_description
end
def self.generate_project def self.generate_project
Project.generate! Project.generate!
end end
+7 -1
View File
@@ -1,8 +1,14 @@
class Change < ActiveRecord::Base class Change < ActiveRecord::Base
generator_for :action => 'A' generator_for :action => 'A'
generator_for :path, :start => 'test/dir/aaa0001' generator_for :path, :method => :next_path
generator_for :changeset, :method => :generate_changeset generator_for :changeset, :method => :generate_changeset
def self.next_path
@last_path ||= 'test/dir/aaa0001'
@last_path.succ!
@last_path
end
def self.generate_changeset def self.generate_changeset
Changeset.generate! Changeset.generate!
end end
+7 -1
View File
@@ -1,8 +1,14 @@
class Changeset < ActiveRecord::Base class Changeset < ActiveRecord::Base
generator_for :revision, :start => '1' generator_for :revision, :method => :next_revision
generator_for :committed_on => Date.today generator_for :committed_on => Date.today
generator_for :repository, :method => :generate_repository generator_for :repository, :method => :generate_repository
def self.next_revision
@last_revision ||= '1'
@last_revision.succ!
@last_revision
end
def self.generate_repository def self.generate_repository
Repository::Subversion.generate! Repository::Subversion.generate!
end end
+6 -1
View File
@@ -1,5 +1,10 @@
class CustomField < ActiveRecord::Base class CustomField < ActiveRecord::Base
generator_for :name, :start => 'CustomField0' generator_for :name, :method => :next_name
generator_for :field_format => 'string' generator_for :field_format => 'string'
def self.next_name
@last_name ||= 'CustomField0'
@last_name.succ!
@last_name
end
end end
+6 -1
View File
@@ -1,5 +1,10 @@
class DocumentCategory < Enumeration class DocumentCategory < Enumeration
generator_for :name, :start => 'DocumentCategory0' generator_for :name, :method => :next_name
generator_for :type => 'DocumentCategory' generator_for :type => 'DocumentCategory'
def self.next_name
@last_name ||= 'DocumentCategory0'
@last_name.succ!
@last_name
end
end end
+6 -1
View File
@@ -1,4 +1,9 @@
class Document < ActiveRecord::Base class Document < ActiveRecord::Base
generator_for :title, :start => 'Document001' generator_for :title, :method => :next_title
def self.next_title
@last_title ||= 'Document001'
@last_title.succ!
@last_title
end
end end
+7 -1
View File
@@ -1,4 +1,10 @@
class EnabledModule < ActiveRecord::Base class EnabledModule < ActiveRecord::Base
generator_for :name, :start => 'module_001' generator_for :name, :method => :next_name
def self.next_name
@last_name ||= 'module_001'
@last_name.succ!
@last_name
end
end end
+6 -1
View File
@@ -1,5 +1,10 @@
class Enumeration < ActiveRecord::Base class Enumeration < ActiveRecord::Base
generator_for :name, :start => 'Enumeration0' generator_for :name, :method => :next_name
generator_for :type => 'TimeEntryActivity' generator_for :type => 'TimeEntryActivity'
def self.next_name
@last_name ||= 'Enumeration0'
@last_name.succ!
@last_name
end
end end
+7 -1
View File
@@ -1,4 +1,10 @@
class Group < Principal class Group < Principal
generator_for :lastname, :start => 'Group' generator_for :lastname, :method => :next_lastname
def self.next_lastname
@last_lastname ||= 'Group'
@last_lastname.succ!
@last_lastname
end
end end
+7 -2
View File
@@ -1,4 +1,9 @@
class IssueCategory < ActiveRecord::Base class IssueCategory < ActiveRecord::Base
generator_for :name, :start => 'Category 0001' generator_for :name, :method => :next_name
def self.next_name
@last_name ||= 'Category 0001'
@last_name.succ!
@last_name
end
end end
+8 -1
View File
@@ -1,7 +1,13 @@
class Issue < ActiveRecord::Base class Issue < ActiveRecord::Base
generator_for :subject, :start => 'Subject 0' generator_for :subject, :method => :next_subject
generator_for :author, :method => :next_author generator_for :author, :method => :next_author
generator_for :priority, :method => :fetch_priority generator_for :priority, :method => :fetch_priority
def self.next_subject
@last_subject ||= 'Subject 0'
@last_subject.succ!
@last_subject
end
def self.next_author def self.next_author
User.generate_with_protected! User.generate_with_protected!
@@ -10,4 +16,5 @@ class Issue < ActiveRecord::Base
def self.fetch_priority def self.fetch_priority
IssuePriority.first || IssuePriority.generate! IssuePriority.first || IssuePriority.generate!
end end
end end
+6 -1
View File
@@ -1,5 +1,10 @@
class IssuePriority < Enumeration class IssuePriority < Enumeration
generator_for :name, :start => 'IssuePriority0' generator_for :name, :method => :next_name
generator_for :type => 'IssuePriority' generator_for :type => 'IssuePriority'
def self.next_name
@last_name ||= 'IssuePriority0'
@last_name.succ!
@last_name
end
end end
+6 -1
View File
@@ -1,4 +1,9 @@
class IssueStatus < ActiveRecord::Base class IssueStatus < ActiveRecord::Base
generator_for :name, :start => 'Status 0' generator_for :name, :method => :next_name
def self.next_name
@last_name ||= 'Status 0'
@last_name.succ!
@last_name
end
end end
+14 -2
View File
@@ -1,8 +1,20 @@
class Message < ActiveRecord::Base class Message < ActiveRecord::Base
generator_for :subject, :start => 'A Message' generator_for :subject, :method => :next_subject
generator_for :content, :start => 'Some content here' generator_for :content, :method => :next_content
generator_for :board, :method => :generate_board generator_for :board, :method => :generate_board
def self.next_subject
@last_subject ||= 'A Message'
@last_subject.succ!
@last_subject
end
def self.next_content
@last_content ||= 'Some content here'
@last_content.succ!
@last_content
end
def self.generate_board def self.generate_board
Board.generate! Board.generate!
end end
+13 -2
View File
@@ -1,5 +1,16 @@
class News < ActiveRecord::Base class News < ActiveRecord::Base
generator_for :title, :start => 'A New Item' generator_for :title, :method => :next_title
generator_for :description, :start => 'Some content here' generator_for :description, :method => :next_description
def self.next_title
@last_title ||= 'A New Item'
@last_title.succ!
@last_title
end
def self.next_description
@last_description ||= 'Some content here'
@last_description.succ!
@last_description
end
end end
+15 -2
View File
@@ -1,8 +1,21 @@
class Project < ActiveRecord::Base class Project < ActiveRecord::Base
generator_for :name, :start => 'Project 0' generator_for :name, :method => :next_name
generator_for :identifier, :start => 'project-0000' generator_for :identifier, :method => :next_identifier_from_object_daddy
generator_for :enabled_modules, :method => :all_modules generator_for :enabled_modules, :method => :all_modules
generator_for :trackers, :method => :next_tracker generator_for :trackers, :method => :next_tracker
def self.next_name
@last_name ||= 'Project 0'
@last_name.succ!
@last_name
end
# Project#next_identifier is defined on Redmine
def self.next_identifier_from_object_daddy
@last_identifier ||= 'project-0000'
@last_identifier.succ!
@last_identifier
end
def self.all_modules def self.all_modules
[].tap do |modules| [].tap do |modules|
+6 -1
View File
@@ -1,4 +1,9 @@
class Query < ActiveRecord::Base class Query < ActiveRecord::Base
generator_for :name, :start => 'Query 0' generator_for :name, :method => :next_name
def self.next_name
@last_name ||= 'Query 0'
@last_name.succ!
@last_name
end
end end
+7 -1
View File
@@ -1,5 +1,11 @@
class Repository < ActiveRecord::Base class Repository < ActiveRecord::Base
generator_for :type => 'Subversion' generator_for :type => 'Subversion'
generator_for :url, :start => 'file:///test/svn' generator_for :url, :method => :next_url
def self.next_url
@last_url ||= 'file:///test/svn'
@last_url.succ!
@last_url
end
end end
+5 -1
View File
@@ -1,4 +1,8 @@
class Role < ActiveRecord::Base class Role < ActiveRecord::Base
generator_for :name, :start => 'Role0' generator_for :name, :method => :next_name
def self.next_name
@last_name ||= 'Role0'
@last_name.succ!
end
end end
@@ -1,5 +1,11 @@
class Repository::Subversion < Repository class Repository::Subversion < Repository
generator_for :type, :method => 'Subversion' generator_for :type, :method => 'Subversion'
generator_for :url, :start => 'file:///test/svn' generator_for :url, :method => :next_url
def self.next_url
@last_url ||= 'file:///test/svn'
@last_url.succ!
@last_url
end
end end
+6 -1
View File
@@ -1,5 +1,10 @@
class TimeEntryActivity < Enumeration class TimeEntryActivity < Enumeration
generator_for :name, :start => 'TimeEntryActivity0' generator_for :name, :method => :next_name
generator_for :type => 'TimeEntryActivity' generator_for :type => 'TimeEntryActivity'
def self.next_name
@last_name ||= 'TimeEntryActivity0'
@last_name.succ!
@last_name
end
end end
+1
View File
@@ -6,4 +6,5 @@ class TimeEntry < ActiveRecord::Base
def self.generate_user def self.generate_user
User.generate_with_protected! User.generate_with_protected!
end end
end end
+6 -1
View File
@@ -1,4 +1,9 @@
class Tracker < ActiveRecord::Base class Tracker < ActiveRecord::Base
generator_for :name, :start => 'Tracker 0' generator_for :name, :method => :next_name
def self.next_name
@last_name ||= 'Tracker 0'
@last_name.succ!
@last_name
end
end end
+22 -4
View File
@@ -1,12 +1,30 @@
class User < Principal class User < Principal
generator_for :login, :start => 'user1' generator_for :login, :method => :next_login
generator_for :mail, :method => :next_email generator_for :mail, :method => :next_email
generator_for :firstname, :start => 'Bob' generator_for :firstname, :method => :next_firstname
generator_for :lastname, :start => 'Doe' generator_for :lastname, :method => :next_lastname
def self.next_login
@gen_login ||= 'user1'
@gen_login.succ!
@gen_login
end
def self.next_email def self.next_email
@last_email ||= 'user1' @last_email ||= 'user1'
@last_email.succ! @last_email.succ!
"#{@last_email}@example.com" "#{@last_email}@example.com"
end end
def self.next_firstname
@last_firstname ||= 'Bob'
@last_firstname.succ!
@last_firstname
end
def self.next_lastname
@last_lastname ||= 'Doe'
@last_lastname.succ!
@last_lastname
end
end end
+7 -1
View File
@@ -1,5 +1,11 @@
class Version < ActiveRecord::Base class Version < ActiveRecord::Base
generator_for :name, :start => 'Version 1.0.0' generator_for :name, :method => :next_name
generator_for :status => 'open' generator_for :status => 'open'
def self.next_name
@last_name ||= 'Version 1.0.0'
@last_name.succ!
@last_name
end
end end
+7 -1
View File
@@ -1,7 +1,13 @@
class WikiPage < ActiveRecord::Base class WikiPage < ActiveRecord::Base
generator_for :title, :start => 'AWikiPage' generator_for :title, :method => :next_title
generator_for :wiki, :method => :generate_wiki generator_for :wiki, :method => :generate_wiki
def self.next_title
@last_title ||= 'AWikiPage'
@last_title.succ!
@last_title
end
def self.generate_wiki def self.generate_wiki
Wiki.generate! Wiki.generate!
end end
+14 -2
View File
@@ -1,8 +1,20 @@
class WikiRedirect < ActiveRecord::Base class WikiRedirect < ActiveRecord::Base
generator_for :title, :start => 'AWikiPage' generator_for :title, :method => :next_title
generator_for :redirects_to, :start => '/a/path/000001' generator_for :redirects_to, :method => :next_redirects_to
generator_for :wiki, :method => :generate_wiki generator_for :wiki, :method => :generate_wiki
def self.next_title
@last_title ||= 'AWikiPage'
@last_title.succ!
@last_title
end
def self.next_redirects_to
@last_redirect ||= '/a/path/000001'
@last_redirect.succ!
@last_redirect
end
def self.generate_wiki def self.generate_wiki
Wiki.generate! Wiki.generate!
end end
+1 -1
View File
@@ -102,7 +102,7 @@ attachments_009:
container_type: Version container_type: Version
container_id: 1 container_id: 1
downloads: 0 downloads: 0
disk_filename: 060719210727_archive.zip disk_filename: 060719210727_version_file.zip
digest: b91e08d0cf966d5c6ff411bd8c4cc3a2 digest: b91e08d0cf966d5c6ff411bd8c4cc3a2
id: 9 id: 9
filesize: 452 filesize: 452
@@ -1,240 +0,0 @@
From JSmith@somenet.foo Mon Jun 27 06:55:56 2011
Return-Path: <JSmith@somenet.foo>
X-Original-To: redmine@somenet.foo
Delivered-To: redmine@somenet.foo
From: John Smith <JSmith@somenet.foo>
Mime-Version: 1.0 (Apple Message framework v1084)
Content-Type: multipart/alternative; boundary=Apple-Mail-3-163265085
Subject: Test attaching images to tickets by HTML mail
Date: Mon, 27 Jun 2011 16:55:46 +0300
To: redmine@somenet.foo
Message-Id: <7ABE3636-07E8-47C9-90A1-FCB1AA894DA1@somenet.foo>
X-Mailer: Apple Mail (2.1084)
--Apple-Mail-3-163265085
Content-Transfer-Encoding: quoted-printable
Content-Type: text/plain;
charset=us-ascii
Yet another test!
--Apple-Mail-3-163265085
Content-Type: multipart/related;
type="text/html";
boundary=Apple-Mail-4-163265085
--Apple-Mail-4-163265085
Content-Transfer-Encoding: quoted-printable
Content-Type: text/html;
charset=us-ascii
<html><head></head><body style=3D"word-wrap: break-word; =
-webkit-nbsp-mode: space; -webkit-line-break: after-white-space; ">
<br></body></html>=
--Apple-Mail-4-163265085
Content-Transfer-Encoding: base64
Content-Disposition: inline;
filename=paella.jpg
Content-Type: image/jpg;
x-unix-mode=0644;
name="paella.jpg"
Content-Id: <1207F0B5-9F9D-4AB4-B547-AF9033E82111>
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
cbis+/WpUqUcMZKdF44n/9k=
--Apple-Mail-4-163265085--
--Apple-Mail-3-163265085--
+2 -15
View File
@@ -104,12 +104,6 @@ class AttachmentsControllerTest < ActionController::TestCase
assert_equal 'application/x-ruby', @response.content_type assert_equal 'application/x-ruby', @response.content_type
end end
def test_download_version_file_with_issue_tracking_disabled
Project.find(1).disable_module! :issue_tracking
get :download, :id => 9
assert_response :success
end
def test_download_should_assign_content_type_if_blank def test_download_should_assign_content_type_if_blank
Attachment.find(4).update_attribute(:content_type, '') Attachment.find(4).update_attribute(:content_type, '')
@@ -129,7 +123,6 @@ class AttachmentsControllerTest < ActionController::TestCase
end end
def test_destroy_issue_attachment def test_destroy_issue_attachment
set_tmp_attachments_directory
issue = Issue.find(3) issue = Issue.find(3)
@request.session[:user_id] = 2 @request.session[:user_id] = 2
@@ -146,7 +139,6 @@ class AttachmentsControllerTest < ActionController::TestCase
end end
def test_destroy_wiki_page_attachment def test_destroy_wiki_page_attachment
set_tmp_attachments_directory
@request.session[:user_id] = 2 @request.session[:user_id] = 2
assert_difference 'Attachment.count', -1 do assert_difference 'Attachment.count', -1 do
post :destroy, :id => 3 post :destroy, :id => 3
@@ -155,7 +147,6 @@ class AttachmentsControllerTest < ActionController::TestCase
end end
def test_destroy_project_attachment def test_destroy_project_attachment
set_tmp_attachments_directory
@request.session[:user_id] = 2 @request.session[:user_id] = 2
assert_difference 'Attachment.count', -1 do assert_difference 'Attachment.count', -1 do
post :destroy, :id => 8 post :destroy, :id => 8
@@ -164,7 +155,6 @@ class AttachmentsControllerTest < ActionController::TestCase
end end
def test_destroy_version_attachment def test_destroy_version_attachment
set_tmp_attachments_directory
@request.session[:user_id] = 2 @request.session[:user_id] = 2
assert_difference 'Attachment.count', -1 do assert_difference 'Attachment.count', -1 do
post :destroy, :id => 9 post :destroy, :id => 9
@@ -173,11 +163,8 @@ class AttachmentsControllerTest < ActionController::TestCase
end end
def test_destroy_without_permission def test_destroy_without_permission
set_tmp_attachments_directory post :destroy, :id => 3
assert_no_difference 'Attachment.count' do assert_redirected_to '/login?back_url=http%3A%2F%2Ftest.host%2Fattachments%2Fdestroy%2F3'
delete :destroy, :id => 3
end
assert_response 302
assert Attachment.find_by_id(3) assert Attachment.find_by_id(3)
end end
end end
@@ -115,23 +115,4 @@ class ContextMenusControllerTest < ActionController::TestCase
assert_template 'context_menu' assert_template 'context_menu'
assert_equal [1], assigns(:issues).collect(&:id) assert_equal [1], assigns(:issues).collect(&:id)
end end
def test_time_entries_context_menu
@request.session[:user_id] = 2
get :time_entries, :ids => [1, 2]
assert_response :success
assert_template 'time_entries'
assert_tag 'a', :content => 'Edit'
assert_no_tag 'a', :content => 'Edit', :attributes => {:class => /disabled/}
end
def test_time_entries_context_menu_without_edit_permission
@request.session[:user_id] = 2
Role.find_by_name('Manager').remove_permission! :edit_time_entries
get :time_entries, :ids => [1, 2]
assert_response :success
assert_template 'time_entries'
assert_tag 'a', :content => 'Edit', :attributes => {:class => /disabled/}
end
end end
+12 -38
View File
@@ -78,6 +78,17 @@ class IssuesControllerTest < ActionController::TestCase
assert_tag :tag => 'a', :content => /Subproject issue/ assert_tag :tag => 'a', :content => /Subproject issue/
end end
def test_index_should_not_list_issues_when_module_disabled
EnabledModule.delete_all("name = 'issue_tracking' AND project_id = 1")
get :index
assert_response :success
assert_template 'index.rhtml'
assert_not_nil assigns(:issues)
assert_nil assigns(:project)
assert_no_tag :tag => 'a', :content => /Can't print recipes/
assert_tag :tag => 'a', :content => /Subproject issue/
end
def test_index_should_list_visible_issues_only def test_index_should_list_visible_issues_only
get :index, :per_page => 100 get :index, :per_page => 100
assert_response :success assert_response :success
@@ -285,27 +296,6 @@ class IssuesControllerTest < ActionController::TestCase
:parent => { :tag => 'select', :attributes => { :id => "selected_columns" } } :parent => { :tag => 'select', :attributes => { :id => "selected_columns" } }
end end
def test_index_without_project_should_implicitly_add_project_column_to_default_columns
Setting.issue_list_default_columns = ['tracker', 'subject', 'assigned_to']
get :index, :set_filter => 1
# query should use specified columns
query = assigns(:query)
assert_kind_of Query, query
assert_equal [:project, :tracker, :subject, :assigned_to], query.columns.map(&:name)
end
def test_index_without_project_and_explicit_default_columns_should_not_add_project_column
Setting.issue_list_default_columns = ['tracker', 'subject', 'assigned_to']
columns = ['tracker', 'subject', 'assigned_to']
get :index, :set_filter => 1, :c => columns
# query should use specified columns
query = assigns(:query)
assert_kind_of Query, query
assert_equal columns.map(&:to_sym), query.columns.map(&:name)
end
def test_index_with_custom_field_column def test_index_with_custom_field_column
columns = %w(tracker subject cf_2) columns = %w(tracker subject cf_2)
get :index, :set_filter => 1, :c => columns get :index, :set_filter => 1, :c => columns
@@ -872,22 +862,6 @@ class IssuesControllerTest < ActionController::TestCase
assert_equal Issue.find(1), assigns(:issue) assert_equal Issue.find(1), assigns(:issue)
end end
def test_get_edit_should_display_the_time_entry_form_with_log_time_permission
@request.session[:user_id] = 2
Role.find_by_name('Manager').update_attribute :permissions, [:view_issues, :edit_issues, :log_time]
get :edit, :id => 1
assert_tag 'input', :attributes => {:name => 'time_entry[hours]'}
end
def test_get_edit_should_not_display_the_time_entry_form_without_log_time_permission
@request.session[:user_id] = 2
Role.find_by_name('Manager').remove_permission! :log_time
get :edit, :id => 1
assert_no_tag 'input', :attributes => {:name => 'time_entry[hours]'}
end
def test_get_edit_with_params def test_get_edit_with_params
@request.session[:user_id] = 2 @request.session[:user_id] = 2
get :edit, :id => 1, :issue => { :status_id => 5, :priority_id => 7 }, get :edit, :id => 1, :issue => { :status_id => 5, :priority_id => 7 },
@@ -1284,7 +1258,7 @@ class IssuesControllerTest < ActionController::TestCase
:attributes => {:name => "issue[custom_field_values][#{field.id}]"}, :attributes => {:name => "issue[custom_field_values][#{field.id}]"},
:children => { :children => {
:only => {:tag => 'option'}, :only => {:tag => 'option'},
:count => Project.find(1).shared_versions.count + 1 :count => Project.find(1).versions.count + 1
} }
end end
@@ -30,14 +30,6 @@ class RepositoriesGitControllerTest < ActionController::TestCase
PRJ_ID = 3 PRJ_ID = 3
CHAR_1_HEX = "\xc3\x9c" CHAR_1_HEX = "\xc3\x9c"
## Git, Mercurial and CVS path encodings are binary.
## Subversion supports URL encoding for path.
## Redmine Mercurial adapter and extension use URL encoding.
## Git accepts only binary path in command line parameter.
## So, there is no way to use binary command line parameter in JRuby.
JRUBY_SKIP = (RUBY_PLATFORM == 'java')
JRUBY_SKIP_STR = "TODO: This test fails in JRuby"
def setup def setup
@ruby19_non_utf8_pass = @ruby19_non_utf8_pass =
(RUBY_VERSION >= '1.9' && Encoding.default_external.to_s != 'UTF-8') (RUBY_VERSION >= '1.9' && Encoding.default_external.to_s != 'UTF-8')
@@ -165,8 +157,6 @@ class RepositoriesGitControllerTest < ActionController::TestCase
def test_entry_show_latin_1 def test_entry_show_latin_1
if @ruby19_non_utf8_pass if @ruby19_non_utf8_pass
puts_ruby19_non_utf8_pass() puts_ruby19_non_utf8_pass()
elsif JRUBY_SKIP
puts JRUBY_SKIP_STR
else else
with_settings :repositories_encodings => 'UTF-8,ISO-8859-1' do with_settings :repositories_encodings => 'UTF-8,ISO-8859-1' do
['57ca437c', '57ca437c0acbbcb749821fdf3726a1367056d364'].each do |r1| ['57ca437c', '57ca437c0acbbcb749821fdf3726a1367056d364'].each do |r1|
@@ -323,8 +313,6 @@ class RepositoriesGitControllerTest < ActionController::TestCase
def test_annotate_latin_1 def test_annotate_latin_1
if @ruby19_non_utf8_pass if @ruby19_non_utf8_pass
puts_ruby19_non_utf8_pass() puts_ruby19_non_utf8_pass()
elsif JRUBY_SKIP
puts JRUBY_SKIP_STR
else else
with_settings :repositories_encodings => 'UTF-8,ISO-8859-1' do with_settings :repositories_encodings => 'UTF-8,ISO-8859-1' do
['57ca437c', '57ca437c0acbbcb749821fdf3726a1367056d364'].each do |r1| ['57ca437c', '57ca437c0acbbcb749821fdf3726a1367056d364'].each do |r1|
+1 -13
View File
@@ -39,10 +39,7 @@ class SysControllerTest < ActionController::TestCase
assert_equal 'application/xml', @response.content_type assert_equal 'application/xml', @response.content_type
with_options :tag => 'projects' do |test| with_options :tag => 'projects' do |test|
test.assert_tag :children => { :count => Project.active.has_module(:repository).count } test.assert_tag :children => { :count => Project.active.has_module(:repository).count }
test.assert_tag 'project', :child => {:tag => 'identifier', :sibling => {:tag => 'is-public'}}
end end
assert_no_tag 'extra-info'
assert_no_tag 'extra_info'
end end
def test_create_project_repository def test_create_project_repository
@@ -52,19 +49,10 @@ class SysControllerTest < ActionController::TestCase
:vendor => 'Subversion', :vendor => 'Subversion',
:repository => { :url => 'file:///create/project/repository/subproject2'} :repository => { :url => 'file:///create/project/repository/subproject2'}
assert_response :created assert_response :created
assert_equal 'application/xml', @response.content_type
r = Project.find(4).repository r = Project.find(4).repository
assert r.is_a?(Repository::Subversion) assert r.is_a?(Repository::Subversion)
assert_equal 'file:///create/project/repository/subproject2', r.url assert_equal 'file:///create/project/repository/subproject2', r.url
assert_tag 'repository-subversion',
:child => {
:tag => 'id', :content => r.id.to_s,
:sibling => {:tag => 'url', :content => r.url}
}
assert_no_tag 'extra-info'
assert_no_tag 'extra_info'
end end
def test_fetch_changesets def test_fetch_changesets
@@ -115,18 +115,6 @@ class TimelogControllerTest < ActionController::TestCase
assert_equal 3, t.user_id assert_equal 3, t.user_id
end end
def test_create_without_log_time_permission_should_be_denied
@request.session[:user_id] = 2
Role.find_by_name('Manager').remove_permission! :log_time
post :create, :project_id => 1,
:time_entry => {:activity_id => '11',
:issue_id => '',
:spent_on => '2008-03-14',
:hours => '7.3'}
assert_response 403
end
def test_update def test_update
entry = TimeEntry.find(1) entry = TimeEntry.find(1)
assert_equal 1, entry.issue_id assert_equal 1, entry.issue_id
@@ -173,9 +161,6 @@ class TimelogControllerTest < ActionController::TestCase
def test_bulk_update_on_different_projects def test_bulk_update_on_different_projects
@request.session[:user_id] = 2 @request.session[:user_id] = 2
# makes user a manager on the other project
Member.create!(:user_id => 2, :project_id => 3, :role_ids => [1])
# update time entry activity # update time entry activity
post :bulk_update, :ids => [1, 2, 4], :time_entry => { :activity_id => 9 } post :bulk_update, :ids => [1, 2, 4], :time_entry => { :activity_id => 9 }
@@ -218,14 +203,6 @@ class TimelogControllerTest < ActionController::TestCase
assert_redirected_to :controller => 'timelog', :action => 'index', :project_id => Project.find(1).identifier assert_redirected_to :controller => 'timelog', :action => 'index', :project_id => Project.find(1).identifier
end end
def test_post_bulk_update_without_edit_permission_should_be_denied
@request.session[:user_id] = 2
Role.find_by_name('Manager').remove_permission! :edit_time_entries
post :bulk_update, :ids => [1,2]
assert_response 403
end
def test_destroy def test_destroy
@request.session[:user_id] = 2 @request.session[:user_id] = 2
delete :destroy, :id => 1 delete :destroy, :id => 1
-7
View File
@@ -43,13 +43,6 @@ class WikiControllerTest < ActionController::TestCase
:child => { :tag => 'a', :attributes => { :href => '/projects/ecookbook/wiki/Page_with_an_inline_image' }, :child => { :tag => 'a', :attributes => { :href => '/projects/ecookbook/wiki/Page_with_an_inline_image' },
:content => 'Page with an inline image' } } :content => 'Page with an inline image' } }
end end
def test_export_link
Role.anonymous.add_permission! :export_wiki_pages
get :show, :project_id => 'ecookbook'
assert_response :success
assert_tag 'a', :attributes => {:href => '/projects/ecookbook/wiki/CookBook_documentation.txt'}
end
def test_show_page_with_name def test_show_page_with_name
get :show, :project_id => 1, :id => 'Another_page' get :show, :project_id => 1, :id => 'Another_page'
+2 -11
View File
@@ -1,5 +1,5 @@
# Redmine - project management software # redMine - project management software
# Copyright (C) 2006-2011 Jean-Philippe Lang # Copyright (C) 2006-2007 Jean-Philippe Lang
# #
# This program is free software; you can redistribute it and/or # This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License # modify it under the terms of the GNU General Public License
@@ -25,15 +25,6 @@ class CustomFieldTest < ActiveSupport::TestCase
assert field.save assert field.save
end end
def test_regexp_validation
field = IssueCustomField.new(:name => 'regexp', :field_format => 'text', :regexp => '[a-z0-9')
assert !field.save
assert_equal I18n.t('activerecord.errors.messages.invalid'), field.errors.on(:regexp)
field.regexp = '[a-z0-9]'
assert field.save
end
def test_possible_values_should_accept_an_array def test_possible_values_should_accept_an_array
field = CustomField.new field = CustomField.new
field.possible_values = ["One value", ""] field.possible_values = ["One value", ""]
@@ -1,76 +0,0 @@
# 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 CustomFieldVersionFormatTest < ActiveSupport::TestCase
fixtures :custom_fields, :projects, :members, :users, :member_roles, :trackers, :issues, :versions
def setup
@field = IssueCustomField.create!(:name => 'Tester', :field_format => 'version')
end
def test_possible_values_with_no_arguments
assert_equal [], @field.possible_values
assert_equal [], @field.possible_values(nil)
end
def test_possible_values_with_project_resource
project = Project.find(1)
possible_values = @field.possible_values(project.issues.first)
assert possible_values.any?
assert_equal project.shared_versions.sort.collect(&:id).map(&:to_s), possible_values
end
def test_possible_values_with_nil_project_resource
assert_equal [], @field.possible_values(Issue.new)
end
def test_possible_values_options_with_no_arguments
assert_equal [], @field.possible_values_options
assert_equal [], @field.possible_values_options(nil)
end
def test_possible_values_options_with_project_resource
project = Project.find(1)
possible_values_options = @field.possible_values_options(project.issues.first)
assert possible_values_options.any?
assert_equal project.shared_versions.sort.map {|u| [u.name, u.id.to_s]}, possible_values_options
end
def test_possible_values_options_with_array
projects = Project.find([1, 2])
possible_values_options = @field.possible_values_options(projects)
assert possible_values_options.any?
assert_equal (projects.first.shared_versions & projects.last.shared_versions).sort.map {|u| [u.name, u.id.to_s]}, possible_values_options
end
def test_cast_blank_value
assert_equal nil, @field.cast_value(nil)
assert_equal nil, @field.cast_value("")
end
def test_cast_valid_value
version = @field.cast_value("2")
assert_kind_of Version, version
assert_equal Version.find(2), version
end
def test_cast_invalid_value
assert_equal nil, @field.cast_value("187")
end
end
-2
View File
@@ -64,8 +64,6 @@ class CustomValueTest < ActiveSupport::TestCase
assert v.valid? assert v.valid?
v.value = 'abc' v.value = 'abc'
assert !v.valid? assert !v.valid?
v.value = '1975-07-33'
assert !v.valid?
v.value = '1975-07-14' v.value = '1975-07-14'
assert v.valid? assert v.valid?
end end
@@ -375,26 +375,6 @@ RAW
to_test.each { |text, result| assert_equal "<p>#{result}</p>", textilizable(text) } to_test.each { |text, result| assert_equal "<p>#{result}</p>", textilizable(text) }
end end
def test_wiki_links_within_local_file_generation_context
to_test = {
# link to a page
'[[CookBook documentation]]' => '<a href="CookBook_documentation.html" class="wiki-page">CookBook documentation</a>',
'[[CookBook documentation|documentation]]' => '<a href="CookBook_documentation.html" class="wiki-page">documentation</a>',
'[[CookBook documentation#One-section]]' => '<a href="CookBook_documentation.html#One-section" class="wiki-page">CookBook documentation</a>',
'[[CookBook documentation#One-section|documentation]]' => '<a href="CookBook_documentation.html#One-section" class="wiki-page">documentation</a>',
# page that doesn't exist
'[[Unknown page]]' => '<a href="Unknown_page.html" class="wiki-page new">Unknown page</a>',
'[[Unknown page|404]]' => '<a href="Unknown_page.html" class="wiki-page new">404</a>',
'[[Unknown page#anchor]]' => '<a href="Unknown_page.html#anchor" class="wiki-page new">Unknown page</a>',
'[[Unknown page#anchor|404]]' => '<a href="Unknown_page.html#anchor" class="wiki-page new">404</a>',
}
@project = Project.find(1)
to_test.each { |text, result| assert_equal "<p>#{result}</p>", textilizable(text, :wiki_links => :local) }
end
def test_html_tags def test_html_tags
to_test = { to_test = {
"<div>content</div>" => "<p>&lt;div&gt;content&lt;/div&gt;</p>", "<div>content</div>" => "<p>&lt;div&gt;content&lt;/div&gt;</p>",
@@ -553,43 +533,6 @@ EXPECTED
assert_equal expected, textilizable(raw) assert_equal expected, textilizable(raw)
end end
def test_headings_with_special_chars
# This test makes sure that the generated anchor names match the expected
# ones even if the heading text contains unconventional characters
raw = 'h1. Some heading related to version 0.5'
anchor = sanitize_anchor_name("Some-heading-related-to-version-0.5")
expected = %|<a name="#{anchor}"></a>\n<h1 >Some heading related to version 0.5<a href="##{anchor}" class="wiki-anchor">&para;</a></h1>|
assert_equal expected, textilizable(raw)
end
def test_wiki_links_within_wiki_page_context
page = WikiPage.find_by_title('Another_page' )
to_test = {
# link to another page
'[[CookBook documentation]]' => '<a href="/projects/ecookbook/wiki/CookBook_documentation" class="wiki-page">CookBook documentation</a>',
'[[CookBook documentation|documentation]]' => '<a href="/projects/ecookbook/wiki/CookBook_documentation" class="wiki-page">documentation</a>',
'[[CookBook documentation#One-section]]' => '<a href="/projects/ecookbook/wiki/CookBook_documentation#One-section" class="wiki-page">CookBook documentation</a>',
'[[CookBook documentation#One-section|documentation]]' => '<a href="/projects/ecookbook/wiki/CookBook_documentation#One-section" class="wiki-page">documentation</a>',
# link to the current page
'[[Another page]]' => '<a href="/projects/ecookbook/wiki/Another_page" class="wiki-page">Another page</a>',
'[[Another page|Page]]' => '<a href="/projects/ecookbook/wiki/Another_page" class="wiki-page">Page</a>',
'[[Another page#anchor]]' => '<a href="#anchor" class="wiki-page">Another page</a>',
'[[Another page#anchor|Page]]' => '<a href="#anchor" class="wiki-page">Page</a>',
# page that doesn't exist
'[[Unknown page]]' => '<a href="/projects/ecookbook/wiki/Unknown_page" class="wiki-page new">Unknown page</a>',
'[[Unknown page|404]]' => '<a href="/projects/ecookbook/wiki/Unknown_page" class="wiki-page new">404</a>',
'[[Unknown page#anchor]]' => '<a href="/projects/ecookbook/wiki/Unknown_page#anchor" class="wiki-page new">Unknown page</a>',
'[[Unknown page#anchor|404]]' => '<a href="/projects/ecookbook/wiki/Unknown_page#anchor" class="wiki-page new">404</a>',
}
@project = Project.find(1)
to_test.each { |text, result| assert_equal "<p>#{result}</p>", textilizable(WikiContent.generate!( :text => text, :page => page ), :text) }
end
def test_table_of_content def test_table_of_content
raw = <<-RAW raw = <<-RAW
{{toc}} {{toc}}
-28
View File
@@ -222,20 +222,6 @@ class IssueNestedSetTest < ActiveSupport::TestCase
assert_equal [issue1.id, 1, 4], [issue1.root_id, issue1.lft, issue1.rgt] assert_equal [issue1.id, 1, 4], [issue1.root_id, issue1.lft, issue1.rgt]
assert_equal [issue1.id, 2, 3], [issue4.root_id, issue4.lft, issue4.rgt] assert_equal [issue1.id, 2, 3], [issue4.root_id, issue4.lft, issue4.rgt]
end end
def test_destroy_child_should_update_parent
issue = create_issue!
child1 = create_issue!(:parent_issue_id => issue.id)
child2 = create_issue!(:parent_issue_id => issue.id)
issue.reload
assert_equal [issue.id, 1, 6], [issue.root_id, issue.lft, issue.rgt]
child2.reload.destroy
issue.reload
assert_equal [issue.id, 1, 4], [issue.root_id, issue.lft, issue.rgt]
end
def test_destroy_parent_issue_updated_during_children_destroy def test_destroy_parent_issue_updated_during_children_destroy
parent = create_issue! parent = create_issue!
@@ -266,20 +252,6 @@ class IssueNestedSetTest < ActiveSupport::TestCase
root = Issue.find(root.id) root = Issue.find(root.id)
assert root.leaf?, "Root issue is not a leaf (lft: #{root.lft}, rgt: #{root.rgt})" assert root.leaf?, "Root issue is not a leaf (lft: #{root.lft}, rgt: #{root.rgt})"
end end
def test_destroy_issue_with_grand_child
parent = create_issue!
issue = create_issue!(:parent_issue_id => parent.id)
child = create_issue!(:parent_issue_id => issue.id)
grandchild1 = create_issue!(:parent_issue_id => child.id)
grandchild2 = create_issue!(:parent_issue_id => child.id)
assert_difference 'Issue.count', -4 do
Issue.find(issue.id).destroy
parent.reload
assert_equal [1, 2], [parent.lft, parent.rgt]
end
end
def test_parent_priority_should_be_the_highest_child_priority def test_parent_priority_should_be_the_highest_child_priority
parent = create_issue!(:priority => IssuePriority.find_by_name('Normal')) parent = create_issue!(:priority => IssuePriority.find_by_name('Normal'))
+4 -4
View File
@@ -83,11 +83,11 @@ class IssueStatusTest < ActiveSupport::TestCase
assert_equal [2], status.new_statuses_allowed_to([role], tracker, false, false).map(&:id) assert_equal [2], status.new_statuses_allowed_to([role], tracker, false, false).map(&:id)
assert_equal [2], status.find_new_statuses_allowed_to([role], tracker, false, false).map(&:id) assert_equal [2], status.find_new_statuses_allowed_to([role], tracker, false, false).map(&:id)
assert_equal [2, 3, 5], status.new_statuses_allowed_to([role], tracker, true, false).map(&:id) assert_equal [2, 3], status.new_statuses_allowed_to([role], tracker, true, false).map(&:id)
assert_equal [2, 3, 5], status.find_new_statuses_allowed_to([role], tracker, true, false).map(&:id) assert_equal [2, 3], status.find_new_statuses_allowed_to([role], tracker, true, false).map(&:id)
assert_equal [2, 4, 5], status.new_statuses_allowed_to([role], tracker, false, true).map(&:id) assert_equal [2, 4], status.new_statuses_allowed_to([role], tracker, false, true).map(&:id)
assert_equal [2, 4, 5], status.find_new_statuses_allowed_to([role], tracker, false, true).map(&:id) assert_equal [2, 4], status.find_new_statuses_allowed_to([role], tracker, false, true).map(&:id)
assert_equal [2, 3, 4, 5], status.new_statuses_allowed_to([role], tracker, true, true).map(&:id) assert_equal [2, 3, 4, 5], status.new_statuses_allowed_to([role], tracker, true, true).map(&:id)
assert_equal [2, 3, 4, 5], status.find_new_statuses_allowed_to([role], tracker, true, true).map(&:id) assert_equal [2, 3, 4, 5], status.find_new_statuses_allowed_to([role], tracker, true, true).map(&:id)
+2 -27
View File
@@ -232,22 +232,6 @@ class IssueTest < ActiveSupport::TestCase
assert_equal custom_value.id, issue.custom_value_for(field).id assert_equal custom_value.id, issue.custom_value_for(field).id
end end
def test_should_not_update_custom_fields_on_changing_tracker_with_different_custom_fields
issue = Issue.new(:project_id => 1)
issue.attributes = {:tracker_id => 1, :author_id => 1, :status_id => 1, :subject => 'Test', :custom_field_values => {'2' => 'Test'}}
issue.save!
assert !Tracker.find(2).custom_field_ids.include?(2)
issue = Issue.find(issue.id)
issue.attributes = {:tracker_id => 2, :custom_field_values => {'1' => ''}}
issue = Issue.find(issue.id)
custom_value = issue.custom_value_for(2)
assert_not_nil custom_value
assert_equal 'Test', custom_value.value
end
def test_assigning_tracker_id_should_reload_custom_fields_values def test_assigning_tracker_id_should_reload_custom_fields_values
issue = Issue.new(:project => Project.find(1)) issue = Issue.new(:project => Project.find(1))
assert issue.custom_field_values.empty? assert issue.custom_field_values.empty?
@@ -309,10 +293,10 @@ class IssueTest < ActiveSupport::TestCase
assert_equal [1, 2], issue.new_statuses_allowed_to(user).map(&:id) assert_equal [1, 2], issue.new_statuses_allowed_to(user).map(&:id)
issue = Issue.generate!(:tracker => tracker, :status => status, :project_id => 1, :author => user) issue = Issue.generate!(:tracker => tracker, :status => status, :project_id => 1, :author => user)
assert_equal [1, 2, 3, 5], issue.new_statuses_allowed_to(user).map(&:id) assert_equal [1, 2, 3], issue.new_statuses_allowed_to(user).map(&:id)
issue = Issue.generate!(:tracker => tracker, :status => status, :project_id => 1, :assigned_to => user) issue = Issue.generate!(:tracker => tracker, :status => status, :project_id => 1, :assigned_to => user)
assert_equal [1, 2, 4, 5], issue.new_statuses_allowed_to(user).map(&:id) assert_equal [1, 2, 4], issue.new_statuses_allowed_to(user).map(&:id)
issue = Issue.generate!(:tracker => tracker, :status => status, :project_id => 1, :author => user, :assigned_to => user) issue = Issue.generate!(:tracker => tracker, :status => status, :project_id => 1, :author => user, :assigned_to => user)
assert_equal [1, 2, 3, 4, 5], issue.new_statuses_allowed_to(user).map(&:id) assert_equal [1, 2, 3, 4, 5], issue.new_statuses_allowed_to(user).map(&:id)
@@ -690,15 +674,6 @@ class IssueTest < ActiveSupport::TestCase
assert issue.assignable_users.include?(non_project_member) assert issue.assignable_users.include?(non_project_member)
end end
should "include the current assignee" do
project = Project.find(1)
user = User.generate!
issue = Issue.generate_for_project!(project, :assigned_to => user)
user.lock!
assert Issue.find(issue.id).assignable_users.include?(user)
end
should "not show the issue author twice" do should "not show the issue author twice" do
assignable_user_ids = Issue.find(1).assignable_users.collect(&:id) assignable_user_ids = Issue.find(1).assignable_users.collect(&:id)
assert_equal 2, assignable_user_ids.length assert_equal 2, assignable_user_ids.length
+1 -23
View File
@@ -43,14 +43,6 @@ class Redmine::CipheringTest < ActiveSupport::TestCase
end end
end end
def test_blank_password_should_be_clear
Redmine::Configuration.with 'database_cipher_key' => 'secret' do
r = Repository::Subversion.generate!(:password => '')
assert_equal '', r.password
assert_equal '', r.read_attribute(:password)
end
end
def test_unciphered_password_should_be_readable def test_unciphered_password_should_be_readable
Redmine::Configuration.with 'database_cipher_key' => nil do Redmine::Configuration.with 'database_cipher_key' => nil do
r = Repository::Subversion.generate!(:password => 'clear') r = Repository::Subversion.generate!(:password => 'clear')
@@ -61,21 +53,7 @@ class Redmine::CipheringTest < ActiveSupport::TestCase
assert_equal 'clear', r.password assert_equal 'clear', r.password
end end
end end
def test_ciphered_password_with_no_cipher_key_configured_should_be_returned_ciphered
Redmine::Configuration.with 'database_cipher_key' => 'secret' do
r = Repository::Subversion.generate!(:password => 'clear')
end
Redmine::Configuration.with 'database_cipher_key' => '' do
r = Repository.first(:order => 'id DESC')
# password can not be deciphered
assert_nothing_raised do
assert r.password.match(/\Aaes-256-cbc:.+\Z/)
end
end
end
def test_encrypt_all def test_encrypt_all
Repository.delete_all Repository.delete_all
Redmine::Configuration.with 'database_cipher_key' => nil do Redmine::Configuration.with 'database_cipher_key' => nil do
@@ -20,14 +20,6 @@ begin
# WINDOWS_PASS = Redmine::Platform.mswin? # WINDOWS_PASS = Redmine::Platform.mswin?
WINDOWS_PASS = false WINDOWS_PASS = false
## Git, Mercurial and CVS path encodings are binary.
## Subversion supports URL encoding for path.
## Redmine Mercurial adapter and extension use URL encoding.
## Git accepts only binary path in command line parameter.
## So, there is no way to use binary command line parameter in JRuby.
JRUBY_SKIP = (RUBY_PLATFORM == 'java')
JRUBY_SKIP_STR = "TODO: This test fails in JRuby"
if File.directory?(REPOSITORY_PATH) if File.directory?(REPOSITORY_PATH)
def setup def setup
adapter_class = Redmine::Scm::Adapters::GitAdapter adapter_class = Redmine::Scm::Adapters::GitAdapter
@@ -270,8 +262,6 @@ begin
def test_latin_1_path def test_latin_1_path
if WINDOWS_PASS if WINDOWS_PASS
# #
elsif JRUBY_SKIP
puts JRUBY_SKIP_STR
else else
p2 = "latin-1-dir/test-#{@char_1}-2.txt" p2 = "latin-1-dir/test-#{@char_1}-2.txt"
['4fc55c43bf3d3dc2efb66145365ddc17639ce81e', '4fc55c43bf3'].each do |r1| ['4fc55c43bf3d3dc2efb66145365ddc17639ce81e', '4fc55c43bf3'].each do |r1|
@@ -332,8 +322,6 @@ begin
def test_entries_latin_1_dir def test_entries_latin_1_dir
if WINDOWS_PASS if WINDOWS_PASS
# #
elsif JRUBY_SKIP
puts JRUBY_SKIP_STR
else else
entries1 = @adapter.entries("latin-1-dir/test-#{@char_1}-subdir", entries1 = @adapter.entries("latin-1-dir/test-#{@char_1}-subdir",
'1ca7f5ed') '1ca7f5ed')
@@ -56,14 +56,12 @@ begin
end end
def test_template_path def test_template_path
to_test = { to_test = { [0,9,5] => "0.9.5",
[1,2] => "1.0", [1,0] => "1.0",
[] => "1.0", [] => "1.0",
[1,2,1] => "1.0", [1,0,1] => "1.0",
[1,7] => "1.0", [1,7] => "1.0",
[1,7,1] => "1.0", [1,7,1] => "1.0" }
[2,0] => "1.0",
}
to_test.each do |v, template| to_test.each do |v, template|
test_template_path_for(v, template) test_template_path_for(v, template)
end end
@@ -319,21 +317,17 @@ begin
assert_equal 1, nib1.size assert_equal 1, nib1.size
case bra case bra
when 'branch (1)[2]&,%.-3_4' when 'branch (1)[2]&,%.-3_4'
if @adapter.class.client_version_above?([1, 6]) assert_equal 3, nib0.size
assert_equal 3, nib0.size assert_equal nib0[0], 'afc61e85bde7'
assert_equal nib0[0], 'afc61e85bde7' nib2 = @adapter.nodes_in_branch(bra, :limit => 2)
nib2 = @adapter.nodes_in_branch(bra, :limit => 2) assert_equal 2, nib2.size
assert_equal 2, nib2.size assert_equal nib2[1], '933ca60293d7'
assert_equal nib2[1], '933ca60293d7'
end
when @branch_char_1 when @branch_char_1
if @adapter.class.client_version_above?([1, 6]) assert_equal 2, nib0.size
assert_equal 2, nib0.size assert_equal nib0[1], '08ff3227303e'
assert_equal nib0[1], '08ff3227303e' nib2 = @adapter.nodes_in_branch(bra, :limit => 1)
nib2 = @adapter.nodes_in_branch(bra, :limit => 1) assert_equal 1, nib2.size
assert_equal 1, nib2.size assert_equal nib2[0], '7bbf4c738e71'
assert_equal nib2[0], '7bbf4c738e71'
end
end end
end end
end end
@@ -1,16 +1,16 @@
# Redmine - project management software # Redmine - project management software
# Copyright (C) 2006-2011 Jean-Philippe Lang # Copyright (C) 2006-2010 Jean-Philippe Lang
# #
# This program is free software; you can redistribute it and/or # This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License # modify it under the terms of the GNU General Public License
# as published by the Free Software Foundation; either version 2 # as published by the Free Software Foundation; either version 2
# of the License, or (at your option) any later version. # of the License, or (at your option) any later version.
# #
# This program is distributed in the hope that it will be useful, # This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of # but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details. # GNU General Public License for more details.
# #
# You should have received a copy of the GNU General Public License # You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software # along with this program; if not, write to the Free Software
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
@@ -22,7 +22,7 @@ class Redmine::WikiFormatting::TextileFormatterTest < HelperTestCase
def setup def setup
@formatter = Redmine::WikiFormatting::Textile::Formatter @formatter = Redmine::WikiFormatting::Textile::Formatter
end end
MODIFIERS = { MODIFIERS = {
"*" => 'strong', # bold "*" => 'strong', # bold
"_" => 'em', # italic "_" => 'em', # italic
@@ -31,7 +31,7 @@ class Redmine::WikiFormatting::TextileFormatterTest < HelperTestCase
"^" => 'sup', # superscript "^" => 'sup', # superscript
"~" => 'sub' # subscript "~" => 'sub' # subscript
} }
def test_modifiers def test_modifiers
assert_html_output( assert_html_output(
'*bold*' => '<strong>bold</strong>', '*bold*' => '<strong>bold</strong>',
@@ -46,7 +46,7 @@ class Redmine::WikiFormatting::TextileFormatterTest < HelperTestCase
'*(foo)two words*' => '<strong class="foo">two words</strong>' '*(foo)two words*' => '<strong class="foo">two words</strong>'
) )
end end
def test_modifiers_combination def test_modifiers_combination
MODIFIERS.each do |m1, tag1| MODIFIERS.each do |m1, tag1|
MODIFIERS.each do |m2, tag2| MODIFIERS.each do |m2, tag2|
@@ -57,7 +57,7 @@ class Redmine::WikiFormatting::TextileFormatterTest < HelperTestCase
end end
end end
end end
def test_inline_code def test_inline_code
assert_html_output( assert_html_output(
'this is @some code@' => 'this is <code>some code</code>', 'this is @some code@' => 'this is <code>some code</code>',
@@ -76,14 +76,14 @@ class Redmine::WikiFormatting::TextileFormatterTest < HelperTestCase
'h1. 2009\02\09' => '<h1>2009\02\09</h1>' 'h1. 2009\02\09' => '<h1>2009\02\09</h1>'
}, false) }, false)
end end
def test_double_dashes_should_not_strikethrough def test_double_dashes_should_not_strikethrough
assert_html_output( assert_html_output(
'double -- dashes -- test' => 'double -- dashes -- test', 'double -- dashes -- test' => 'double -- dashes -- test',
'double -- *dashes* -- test' => 'double -- <strong>dashes</strong> -- test' 'double -- *dashes* -- test' => 'double -- <strong>dashes</strong> -- test'
) )
end end
def test_acronyms def test_acronyms
assert_html_output( assert_html_output(
'this is an acronym: GPL(General Public License)' => 'this is an acronym: <acronym title="General Public License">GPL</acronym>', 'this is an acronym: GPL(General Public License)' => 'this is an acronym: <acronym title="General Public License">GPL</acronym>',
@@ -91,7 +91,7 @@ class Redmine::WikiFormatting::TextileFormatterTest < HelperTestCase
'GPL(This is a double-quoted "title")' => '<acronym title="This is a double-quoted &quot;title&quot;">GPL</acronym>' 'GPL(This is a double-quoted "title")' => '<acronym title="This is a double-quoted &quot;title&quot;">GPL</acronym>'
) )
end end
def test_blockquote def test_blockquote
# orig raw text # orig raw text
raw = <<-RAW raw = <<-RAW
@@ -108,7 +108,7 @@ John said:
He's right. He's right.
RAW RAW
# expected html # expected html
expected = <<-EXPECTED expected = <<-EXPECTED
<p>John said:</p> <p>John said:</p>
@@ -128,10 +128,10 @@ Nullam commodo metus accumsan nulla. Curabitur lobortis dui id dolor.
</blockquote> </blockquote>
<p>He's right.</p> <p>He's right.</p>
EXPECTED EXPECTED
assert_equal expected.gsub(%r{\s+}, ''), to_html(raw).gsub(%r{\s+}, '') assert_equal expected.gsub(%r{\s+}, ''), to_html(raw).gsub(%r{\s+}, '')
end end
def test_table def test_table
raw = <<-RAW raw = <<-RAW
This is a table with empty cells: This is a table with empty cells:
@@ -153,7 +153,7 @@ EXPECTED
assert_equal expected.gsub(%r{\s+}, ''), to_html(raw).gsub(%r{\s+}, '') assert_equal expected.gsub(%r{\s+}, ''), to_html(raw).gsub(%r{\s+}, '')
end end
def test_table_with_line_breaks def test_table_with_line_breaks
raw = <<-RAW raw = <<-RAW
This is a table with line breaks: This is a table with line breaks:
@@ -192,26 +192,19 @@ EXPECTED
assert_equal expected.gsub(%r{\s+}, ''), to_html(raw).gsub(%r{\s+}, '') assert_equal expected.gsub(%r{\s+}, ''), to_html(raw).gsub(%r{\s+}, '')
end end
def test_textile_should_not_mangle_brackets def test_textile_should_not_mangle_brackets
assert_equal '<p>[msg1][msg2]</p>', to_html('[msg1][msg2]') assert_equal '<p>[msg1][msg2]</p>', to_html('[msg1][msg2]')
end end
def test_textile_should_escape_image_urls
# this is onclick="alert('XSS');" in encoded form
raw = '!/images/comment.png"onclick=&#x61;&#x6c;&#x65;&#x72;&#x74;&#x28;&#x27;&#x58;&#x53;&#x53;&#x27;&#x29;;&#x22;!'
expected = '<p><img src="/images/comment.png&quot;onclick=&amp;#x61;&amp;#x6c;&amp;#x65;&amp;#x72;&amp;#x74;&amp;#x28;&amp;#x27;&amp;#x58;&amp;#x53;&amp;#x53;&amp;#x27;&amp;#x29;;&amp;#x22;" alt="" /></p>'
assert_equal expected.gsub(%r{\s+}, ''), to_html(raw).gsub(%r{\s+}, '')
end
private private
def assert_html_output(to_test, expect_paragraph = true) def assert_html_output(to_test, expect_paragraph = true)
to_test.each do |text, expected| to_test.each do |text, expected|
assert_equal(( expect_paragraph ? "<p>#{expected}</p>" : expected ), @formatter.new(text).to_html, "Formatting the following text failed:\n===\n#{text}\n===\n") assert_equal(( expect_paragraph ? "<p>#{expected}</p>" : expected ), @formatter.new(text).to_html, "Formatting the following text failed:\n===\n#{text}\n===\n")
end end
end end
def to_html(text) def to_html(text)
@formatter.new(text).to_html @formatter.new(text).to_html
end end
-10
View File
@@ -278,16 +278,6 @@ class MailHandlerTest < ActiveSupport::TestCase
assert_kind_of Issue, issue assert_kind_of Issue, issue
assert_equal tracker, issue.tracker assert_equal tracker, issue.tracker
end end
def test_add_issue_from_apple_mail
issue = submit_email('apple_mail_with_attachment.eml', :issue => {:project => 'ecookbook'})
assert_kind_of Issue, issue
assert_equal 1, issue.attachments.size
attachment = issue.attachments.first
assert_equal 'paella.jpg', attachment.filename
assert_equal 10790, attachment.filesize
end
def test_should_ignore_emails_from_emission_address def test_should_ignore_emails_from_emission_address
Role.anonymous.add_permission!(:add_issues) Role.anonymous.add_permission!(:add_issues)

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