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