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