Compare commits

...

31 Commits
0.7.0 ... 0.7.3

Author SHA1 Message Date
Jean-Philippe Lang
cba0faadd6 tagged version 0.7.3
git-svn-id: http://redmine.rubyforge.org/svn/tags/0.7.3@1638 e93f8b46-1217-0410-a6f0-8f06a7374b81
2008-07-06 12:19:00 +00:00
Jean-Philippe Lang
bf45264131 Updated CHANGELOG.
git-svn-id: http://redmine.rubyforge.org/svn/branches/0.7-stable@1637 e93f8b46-1217-0410-a6f0-8f06a7374b81
2008-07-06 11:13:28 +00:00
Jean-Philippe Lang
1602fd0dfd Updated CHANGELOG and version number.
git-svn-id: http://redmine.rubyforge.org/svn/branches/0.7-stable@1636 e93f8b46-1217-0410-a6f0-8f06a7374b81
2008-07-06 11:12:21 +00:00
Jean-Philippe Lang
12c4119abd Merged r1609 from trunk.
git-svn-id: http://redmine.rubyforge.org/svn/branches/0.7-stable@1635 e93f8b46-1217-0410-a6f0-8f06a7374b81
2008-07-06 11:10:47 +00:00
Jean-Philippe Lang
f3a52d2e98 Merged r1600 from trunk.
git-svn-id: http://redmine.rubyforge.org/svn/branches/0.7-stable@1634 e93f8b46-1217-0410-a6f0-8f06a7374b81
2008-07-06 11:09:00 +00:00
Jean-Philippe Lang
ba1af78dc8 Merged r1598 from trunk.
git-svn-id: http://redmine.rubyforge.org/svn/branches/0.7-stable@1633 e93f8b46-1217-0410-a6f0-8f06a7374b81
2008-07-06 11:08:02 +00:00
Jean-Philippe Lang
59427dcfbf Merged r1589 from trunk.
git-svn-id: http://redmine.rubyforge.org/svn/branches/0.7-stable@1632 e93f8b46-1217-0410-a6f0-8f06a7374b81
2008-07-06 11:05:31 +00:00
Jean-Philippe Lang
50755b5913 Merged r1585 from trunk.
git-svn-id: http://redmine.rubyforge.org/svn/branches/0.7-stable@1631 e93f8b46-1217-0410-a6f0-8f06a7374b81
2008-07-06 11:02:37 +00:00
Jean-Philippe Lang
5b0051e710 Merged r1583 from trunk.
git-svn-id: http://redmine.rubyforge.org/svn/branches/0.7-stable@1630 e93f8b46-1217-0410-a6f0-8f06a7374b81
2008-07-06 11:01:06 +00:00
Jean-Philippe Lang
8af523c694 Merged r1561 from trunk.
git-svn-id: http://redmine.rubyforge.org/svn/branches/0.7-stable@1629 e93f8b46-1217-0410-a6f0-8f06a7374b81
2008-07-06 10:58:31 +00:00
Jean-Philippe Lang
2f84506227 Merged r1612 from trunk.
git-svn-id: http://redmine.rubyforge.org/svn/branches/0.7-stable@1613 e93f8b46-1217-0410-a6f0-8f06a7374b81
2008-07-02 17:28:48 +00:00
Jean-Philippe Lang
6e7012c40f Version number updated.
git-svn-id: http://redmine.rubyforge.org/svn/branches/0.7-stable@1548 e93f8b46-1217-0410-a6f0-8f06a7374b81
2008-06-15 12:27:25 +00:00
Jean-Philippe Lang
dfcd0f15ae Merged r1546 from trunk.
git-svn-id: http://redmine.rubyforge.org/svn/branches/0.7-stable@1547 e93f8b46-1217-0410-a6f0-8f06a7374b81
2008-06-15 12:26:24 +00:00
Jean-Philippe Lang
8bfe71e803 Merged r1544 from trunk.
git-svn-id: http://redmine.rubyforge.org/svn/branches/0.7-stable@1545 e93f8b46-1217-0410-a6f0-8f06a7374b81
2008-06-15 11:41:55 +00:00
Jean-Philippe Lang
1c1c9fa517 Merged r1542 from trunk.
git-svn-id: http://redmine.rubyforge.org/svn/branches/0.7-stable@1543 e93f8b46-1217-0410-a6f0-8f06a7374b81
2008-06-15 11:04:03 +00:00
Jean-Philippe Lang
a55317f09c Merged r1376 from trunk.
git-svn-id: http://redmine.rubyforge.org/svn/branches/0.7-stable@1541 e93f8b46-1217-0410-a6f0-8f06a7374b81
2008-06-15 10:22:00 +00:00
Jean-Philippe Lang
fcc5d2847c Merged r1535 from trunk.
git-svn-id: http://redmine.rubyforge.org/svn/branches/0.7-stable@1536 e93f8b46-1217-0410-a6f0-8f06a7374b81
2008-06-14 14:11:45 +00:00
Jean-Philippe Lang
e5b3c31e70 Merged r1533 from trunk.
git-svn-id: http://redmine.rubyforge.org/svn/branches/0.7-stable@1534 e93f8b46-1217-0410-a6f0-8f06a7374b81
2008-06-14 12:32:26 +00:00
Jean-Philippe Lang
2af910e8e6 Merged r1505, r1506, r1511, r1512, r1517, r1518, r1524 to 1526 from trunk.
git-svn-id: http://redmine.rubyforge.org/svn/branches/0.7-stable@1532 e93f8b46-1217-0410-a6f0-8f06a7374b81
2008-06-14 12:21:52 +00:00
Jean-Philippe Lang
9c5ec2974d Merged r1503 from trunk.
git-svn-id: http://redmine.rubyforge.org/svn/branches/0.7-stable@1531 e93f8b46-1217-0410-a6f0-8f06a7374b81
2008-06-14 12:12:17 +00:00
Jean-Philippe Lang
6f6f1f1ba3 Merged r1500 from trunk.
git-svn-id: http://redmine.rubyforge.org/svn/branches/0.7-stable@1530 e93f8b46-1217-0410-a6f0-8f06a7374b81
2008-06-14 12:11:13 +00:00
Jean-Philippe Lang
3f62305e91 Merged r1492 to r1498 from trunk.
git-svn-id: http://redmine.rubyforge.org/svn/branches/0.7-stable@1529 e93f8b46-1217-0410-a6f0-8f06a7374b81
2008-06-14 12:09:42 +00:00
Jean-Philippe Lang
15ecbbf928 Merged r1473, r1476, r1477, r1478, r1481, r1482, r1484 to r1487, r1491 from trunk.
git-svn-id: http://redmine.rubyforge.org/svn/branches/0.7-stable@1528 e93f8b46-1217-0410-a6f0-8f06a7374b81
2008-06-14 11:59:59 +00:00
Jean-Philippe Lang
2074f0ab41 Merged r1451 to r1454, r1458, r1460 to r1463 from trunk.
git-svn-id: http://redmine.rubyforge.org/svn/branches/0.7-stable@1474 e93f8b46-1217-0410-a6f0-8f06a7374b81
2008-05-29 18:07:00 +00:00
Jean-Philippe Lang
290bd1756d Merged r1442, r1443 and r1446 to r1449 from trunk.
git-svn-id: http://redmine.rubyforge.org/svn/branches/0.7-stable@1450 e93f8b46-1217-0410-a6f0-8f06a7374b81
2008-05-25 11:33:04 +00:00
Jean-Philippe Lang
729d1176ea Merged r1385 and r1426 to r1434 from trunk.
git-svn-id: http://redmine.rubyforge.org/svn/branches/0.7-stable@1437 e93f8b46-1217-0410-a6f0-8f06a7374b81
2008-05-18 16:53:23 +00:00
Jean-Philippe Lang
c0db7007fa Doc and version update for 0.7.1 release.
git-svn-id: http://redmine.rubyforge.org/svn/branches/0.7-stable@1413 e93f8b46-1217-0410-a6f0-8f06a7374b81
2008-05-04 10:26:25 +00:00
Jean-Philippe Lang
d7e3c4df26 Merged r1409 and r1410 from trunk.
git-svn-id: http://redmine.rubyforge.org/svn/branches/0.7-stable@1411 e93f8b46-1217-0410-a6f0-8f06a7374b81
2008-05-04 10:04:19 +00:00
Jean-Philippe Lang
76ec11422d Merged r1400 from trunk.
git-svn-id: http://redmine.rubyforge.org/svn/branches/0.7-stable@1408 e93f8b46-1217-0410-a6f0-8f06a7374b81
2008-05-03 10:34:41 +00:00
Jean-Philippe Lang
8bc721c264 Merged r1399, r1403, r1405 and r1406 from trunk.
git-svn-id: http://redmine.rubyforge.org/svn/branches/0.7-stable@1407 e93f8b46-1217-0410-a6f0-8f06a7374b81
2008-05-02 18:39:32 +00:00
Jean-Philippe Lang
914d1e6645 Merged r1379 to r1385 from trunk.
git-svn-id: http://redmine.rubyforge.org/svn/branches/0.7-stable@1387 e93f8b46-1217-0410-a6f0-8f06a7374b81
2008-04-30 11:41:16 +00:00
102 changed files with 3361 additions and 1245 deletions

View File

@@ -61,11 +61,11 @@ class ApplicationController < ActionController::Base
def set_localization
User.current.language = nil unless User.current.logged?
lang = begin
if !User.current.language.blank? and GLoc.valid_languages.include? User.current.language.to_sym
if !User.current.language.blank? && GLoc.valid_language?(User.current.language)
User.current.language
elsif request.env['HTTP_ACCEPT_LANGUAGE']
accept_lang = parse_qvalues(request.env['HTTP_ACCEPT_LANGUAGE']).first.split('-').first
if accept_lang and !accept_lang.empty? and GLoc.valid_languages.include? accept_lang.to_sym
accept_lang = parse_qvalues(request.env['HTTP_ACCEPT_LANGUAGE']).first.downcase
if !accept_lang.blank? && (GLoc.valid_language?(accept_lang) || GLoc.valid_language?(accept_lang = accept_lang.split('-').first))
User.current.language = accept_lang
end
end

View File

@@ -102,6 +102,7 @@ class IssuesController < ApplicationController
@edit_allowed = User.current.allowed_to?(:edit_issues, @project)
@activities = Enumeration::get_values('ACTI')
@priorities = Enumeration::get_values('IPRI')
@time_entry = TimeEntry.new
respond_to do |format|
format.html { render :template => 'issues/show.rhtml' }
format.atom { render :action => 'changes', :layout => false, :content_type => 'application/atom+xml' }
@@ -137,7 +138,7 @@ class IssuesController < ApplicationController
@project.custom_fields_for_issues(@issue.tracker).collect { |x| CustomValue.new(:custom_field => x, :customized => @issue) } :
@issue.custom_values
else
requested_status = IssueStatus.find_by_id(params[:issue][:status_id])
requested_status = (params[:issue] && params[:issue][:status_id] ? IssueStatus.find_by_id(params[:issue][:status_id]) : default_status)
# Check that the user is allowed to apply the requested status
@issue.status = (@allowed_statuses.include? requested_status) ? requested_status : default_status
@custom_values = @project.custom_fields_for_issues(@issue.tracker).collect { |x| CustomValue.new(:custom_field => x,
@@ -148,7 +149,7 @@ class IssuesController < ApplicationController
attach_files(@issue, params[:attachments])
flash[:notice] = l(:notice_successful_create)
Mailer.deliver_issue_add(@issue) if Setting.notified_events.include?('issue_added')
redirect_to :controller => 'issues', :action => 'show', :id => @issue, :project_id => @project
redirect_to :controller => 'issues', :action => 'show', :id => @issue
return
end
end
@@ -185,13 +186,13 @@ class IssuesController < ApplicationController
@custom_values = @project.custom_fields_for_issues(@issue.tracker).collect { |x| CustomValue.new(:custom_field => x, :customized => @issue, :value => params["custom_fields"][x.id.to_s]) }
@issue.custom_values = @custom_values
end
@time_entry = TimeEntry.new(:project => @project, :issue => @issue, :user => User.current, :spent_on => Date.today)
@time_entry.attributes = params[:time_entry]
attachments = attach_files(@issue, params[:attachments])
attachments.each {|a| journal.details << JournalDetail.new(:property => 'attachment', :prop_key => a.id, :value => a.filename)}
if @issue.save
# Log spend time
if current_role.allowed_to?(:log_time)
@time_entry = TimeEntry.new(:project => @project, :issue => @issue, :user => User.current, :spent_on => Date.today)
@time_entry.attributes = params[:time_entry]
@time_entry.save
end
if !journal.new_record?

View File

@@ -87,7 +87,7 @@ class ProjectsController < ApplicationController
def show
@custom_values = @project.custom_values.find(:all, :include => :custom_field, :order => "#{CustomField.table_name}.position")
@members_by_role = @project.members.find(:all, :include => [:user, :role], :order => 'position').group_by {|m| m.role}
@subprojects = @project.active_children
@subprojects = @project.children.find(:all, :conditions => Project.visible_by(User.current))
@news = @project.news.find(:all, :limit => 5, :include => [ :author, :project ], :order => "#{News.table_name}.created_on DESC")
@trackers = @project.rolled_up_trackers

View File

@@ -172,7 +172,7 @@ class TimelogController < ApplicationController
@time_entry.attributes = params[:time_entry]
if request.post? and @time_entry.save
flash[:notice] = l(:notice_successful_update)
redirect_to(params[:back_url] || {:action => 'details', :project_id => @time_entry.project})
redirect_to(params[:back_url].blank? ? {:action => 'details', :project_id => @time_entry.project} : params[:back_url])
return
end
@activities = Enumeration::get_values('ACTI')

View File

@@ -90,6 +90,11 @@ module ApplicationHelper
include_date ? local.strftime("#{@date_format} #{@time_format}") : local.strftime(@time_format)
end
# Truncates and returns the string as a single line
def truncate_single_line(string, *args)
truncate(string, *args).gsub(%r{[\r\n]+}m, ' ')
end
def html_hours(text)
text.gsub(%r{(\d+)\.(\d+)}, '<span class="hours hours-int">\1</span><span class="hours hours-dec">.\2</span>')
end
@@ -293,7 +298,7 @@ module ApplicationHelper
# source:some/file#L120 -> Link to line 120 of the file
# source:some/file@52#L120 -> Link to line 120 of the file's revision 52
# export:some/file -> Force the download of the file
text = text.gsub(%r{([\s\(,-^])(!)?(attachment|document|version|commit|source|export)?((#|r)(\d+)|(:)([^"\s<>][^\s<>]*|"[^"]+"))(?=[[:punct:]]|\s|<|$)}) do |m|
text = text.gsub(%r{([\s\(,\-\>]|^)(!)?(attachment|document|version|commit|source|export)?((#|r)(\d+)|(:)([^"\s<>][^\s<>]*|"[^"]+"))(?=[[:punct:]]|\s|<|$)}) do |m|
leading, esc, prefix, sep, oid = $1, $2, $3, $5 || $7, $6 || $8
link = nil
if esc.nil?
@@ -301,7 +306,7 @@ module ApplicationHelper
if project && (changeset = project.changesets.find_by_revision(oid))
link = link_to("r#{oid}", {:only_path => only_path, :controller => 'repositories', :action => 'revision', :id => project, :rev => oid},
:class => 'changeset',
:title => truncate(changeset.comments, 100))
:title => truncate_single_line(changeset.comments, 100))
end
elsif sep == '#'
oid = oid.to_i
@@ -340,7 +345,9 @@ module ApplicationHelper
end
when 'commit'
if project && (changeset = project.changesets.find(:first, :conditions => ["scmid LIKE ?", "#{name}%"]))
link = link_to h("#{name}"), {:only_path => only_path, :controller => 'repositories', :action => 'revision', :id => project, :rev => changeset.revision}, :class => 'changeset', :title => truncate(changeset.comments, 100)
link = link_to h("#{name}"), {:only_path => only_path, :controller => 'repositories', :action => 'revision', :id => project, :rev => changeset.revision},
:class => 'changeset',
:title => truncate_single_line(changeset.comments, 100)
end
when 'source', 'export'
if project && project.repository

View File

@@ -21,6 +21,10 @@ module ProjectsHelper
link_to h(version.name), { :controller => 'versions', :action => 'show', :id => version }, options
end
def format_activity_title(text)
h(truncate_single_line(text, 100))
end
def format_activity_day(date)
date == Date.today ? l(:label_today).titleize : format_date(date)
end

View File

@@ -83,7 +83,7 @@ module SortHelper
# Use this to sort the controller's table items collection.
#
def sort_clause()
session[@sort_name][:key] + ' ' + session[@sort_name][:order]
session[@sort_name][:key] + ' ' + (session[@sort_name][:order] || 'ASC')
end
# Returns a link which sorts by the named column.

View File

@@ -30,7 +30,7 @@ module UsersHelper
link_to l(:button_unlock), url.merge(:user => {:status => User::STATUS_ACTIVE}), :method => :post, :class => 'icon icon-unlock'
elsif user.registered?
link_to l(:button_activate), url.merge(:user => {:status => User::STATUS_ACTIVE}), :method => :post, :class => 'icon icon-unlock'
else
elsif user != User.current
link_to l(:button_lock), url.merge(:user => {:status => User::STATUS_LOCKED}), :method => :post, :class => 'icon icon-lock'
end
end

View File

@@ -40,7 +40,7 @@ class Attachment < ActiveRecord::Base
@temp_file = incoming_file
if @temp_file.size > 0
self.filename = sanitize_filename(@temp_file.original_filename)
self.disk_filename = DateTime.now.strftime("%y%m%d%H%M%S") + "_" + self.filename
self.disk_filename = Attachment.disk_filename(filename)
self.content_type = @temp_file.content_type.to_s.chomp
self.filesize = @temp_file.size
end
@@ -100,4 +100,17 @@ private
# Finally, replace all non alphanumeric, hyphens or periods with underscore
@filename = just_filename.gsub(/[^\w\.\-]/,'_')
end
# Returns an ASCII or hashed filename
def self.disk_filename(filename)
df = DateTime.now.strftime("%y%m%d%H%M%S") + "_"
if filename =~ %r{^[a-zA-Z0-9_\.\-]*$}
df << filename
else
df << Digest::MD5.hexdigest(filename)
# keep the extension if any
df << $1 if filename =~ %r{(\.[a-zA-Z0-9]+)$}
end
df
end
end

View File

@@ -19,4 +19,8 @@ class Change < ActiveRecord::Base
belongs_to :changeset
validates_presence_of :changeset_id, :action, :path
def relative_path
changeset.repository.relative_path(path)
end
end

View File

@@ -75,7 +75,7 @@ class Changeset < ActiveRecord::Base
if ref_keywords.delete('*')
# find any issue ID in the comments
target_issue_ids = []
comments.scan(%r{([\s\(,-^])#(\d+)(?=[[:punct:]]|\s|<|$)}).each { |m| target_issue_ids << m[1] }
comments.scan(%r{([\s\(,-]|^)#(\d+)(?=[[:punct:]]|\s|<|$)}).each { |m| target_issue_ids << m[1] }
referenced_issues += repository.project.issues.find_all_by_id(target_issue_ids)
end

View File

@@ -23,7 +23,6 @@ class Enumeration < ActiveRecord::Base
validates_presence_of :opt, :name
validates_uniqueness_of :name, :scope => [:opt]
validates_length_of :name, :maximum => 30
validates_format_of :name, :with => /^[\w\s\'\-]*$/i
OPTIONS = {
"IPRI" => :enumeration_issue_priorities,

View File

@@ -30,7 +30,7 @@ class Journal < ActiveRecord::Base
:project_key => "#{Issue.table_name}.project_id",
:date_column => "#{Issue.table_name}.created_on"
acts_as_event :title => Proc.new {|o| "#{o.issue.tracker.name} ##{o.issue.id}: #{o.issue.subject}" + ((s = o.new_status) ? " (#{s})" : '') },
acts_as_event :title => Proc.new {|o| status = ((s = o.new_status) ? " (#{s})" : nil); "#{o.issue.tracker} ##{o.issue.id}#{status}: #{o.issue.subject}" },
:description => :notes,
:author => :user,
:type => Proc.new {|o| (s = o.new_status) && s.is_closed? ? 'issue-closed' : 'issue-edit' },

View File

@@ -73,9 +73,9 @@ class Project < ActiveRecord::Base
def issues_with_subprojects(include_subprojects=false)
conditions = nil
if include_subprojects && !active_children.empty?
ids = [id] + active_children.collect {|c| c.id}
conditions = ["#{Project.table_name}.id IN (#{ids.join(',')})"]
if include_subprojects
ids = [id] + child_ids
conditions = ["#{Project.table_name}.id IN (#{ids.join(',')}) AND #{Project.visible_by}"]
end
conditions ||= ["#{Project.table_name}.id = ?", id]
# Quick and dirty fix for Rails 2 compatibility
@@ -93,6 +93,7 @@ class Project < ActiveRecord::Base
end
def self.visible_by(user=nil)
user ||= User.current
if user && user.admin?
return "#{Project.table_name}.status=#{Project::STATUS_ACTIVE}"
elsif user && user.memberships.any?
@@ -143,7 +144,8 @@ class Project < ActiveRecord::Base
end
def to_param
identifier
# id is used for projects with a numeric identifier (compatibility)
@to_param ||= (identifier.to_s =~ %r{^\d*$} ? id : identifier)
end
def active?

View File

@@ -125,7 +125,7 @@ class Query < ActiveRecord::Base
filters.each_key do |field|
errors.add label_for(field), :activerecord_error_blank unless
# filter requires one or more values
(values_for(field) and !values_for(field).first.empty?) or
(values_for(field) and !values_for(field).first.blank?) or
# filter doesn't require any value
["o", "c", "!*", "*", "t", "w"].include? operator_for(field)
end if filters
@@ -227,7 +227,7 @@ class Query < ActiveRecord::Base
end
def label_for(field)
label = @available_filters[field][:name] if @available_filters.has_key?(field)
label = available_filters[field][:name] if available_filters.has_key?(field)
label ||= field.gsub(/\_id$/, "")
end
@@ -265,7 +265,7 @@ class Query < ActiveRecord::Base
def statement
# project/subprojects clause
clause = ''
project_clauses = []
if project && !@project.active_children.empty?
ids = [project.id]
if has_filter?("subproject_id")
@@ -277,17 +277,16 @@ class Query < ActiveRecord::Base
# main project only
else
# all subprojects
ids += project.active_children.collect{|p| p.id}
ids += project.child_ids
end
elsif Setting.display_subprojects_issues?
ids += project.active_children.collect{|p| p.id}
ids += project.child_ids
end
clause << "#{Issue.table_name}.project_id IN (%s)" % ids.join(',')
project_clauses << "#{Issue.table_name}.project_id IN (%s)" % ids.join(',')
elsif project
clause << "#{Issue.table_name}.project_id = %d" % project.id
else
clause << Project.visible_by(User.current)
project_clauses << "#{Issue.table_name}.project_id = %d" % project.id
end
project_clauses << Project.visible_by(User.current)
# filters clauses
filters_clauses = []
@@ -296,11 +295,13 @@ class Query < ActiveRecord::Base
v = values_for(field).clone
next unless v and !v.empty?
sql = ''
sql = ''
is_custom_filter = false
if field =~ /^cf_(\d+)$/
# custom field
db_table = CustomValue.table_name
db_field = 'value'
is_custom_filter = true
sql << "#{Issue.table_name}.id IN (SELECT #{Issue.table_name}.id FROM #{Issue.table_name} LEFT OUTER JOIN #{db_table} ON #{db_table}.customized_type='Issue' AND #{db_table}.customized_id=#{Issue.table_name}.id AND #{db_table}.custom_field_id=#{$1} WHERE "
else
# regular field
@@ -320,9 +321,11 @@ class Query < ActiveRecord::Base
when "!"
sql = sql + "(#{db_table}.#{db_field} IS NULL OR #{db_table}.#{db_field} NOT IN (" + v.collect{|val| "'#{connection.quote_string(val)}'"}.join(",") + "))"
when "!*"
sql = sql + "#{db_table}.#{db_field} IS NULL OR #{db_table}.#{db_field} = ''"
sql = sql + "#{db_table}.#{db_field} IS NULL"
sql << " OR #{db_table}.#{db_field} = ''" if is_custom_filter
when "*"
sql = sql + "#{db_table}.#{db_field} IS NOT NULL AND #{db_table}.#{db_field} <> ''"
sql = sql + "#{db_table}.#{db_field} IS NOT NULL"
sql << " AND #{db_table}.#{db_field} <> ''" if is_custom_filter
when ">="
sql = sql + "#{db_table}.#{db_field} >= #{v.first.to_i}"
when "<="
@@ -361,8 +364,6 @@ class Query < ActiveRecord::Base
filters_clauses << sql
end if filters and valid?
clause << ' AND ' unless clause.empty?
clause << filters_clauses.join(' AND ') unless filters_clauses.empty?
clause
(project_clauses + filters_clauses).join(' AND ')
end
end

View File

@@ -64,6 +64,11 @@ class Repository < ActiveRecord::Base
:order => "committed_on DESC, #{Changeset.table_name}.id DESC").collect(&:changeset)
end
# Returns a path relative to the url of the repository
def relative_path(path)
path
end
def latest_changeset
@latest_changeset ||= changesets.find(:first)
end

View File

@@ -76,7 +76,8 @@ class Repository::Cvs < Repository
unless revision_to
revision_to=scm.get_previous_revision(revision_from)
end
diff=diff+scm.diff(change_from.path, revision_from, revision_to, type)
file_diff = scm.diff(change_from.path, revision_from, revision_to)
diff = diff + file_diff unless file_diff.nil?
end
end
return diff

View File

@@ -35,6 +35,11 @@ class Repository::Subversion < Repository
revisions ? changesets.find_all_by_revision(revisions.collect(&:identifier), :order => "committed_on DESC") : []
end
# Returns a path relative to the url of the repository
def relative_path(path)
path.gsub(Regexp.new("^\/?#{Regexp.escape(relative_url)}"), '')
end
def fetch_changesets
scm_info = scm.info
if scm_info
@@ -71,4 +76,14 @@ class Repository::Subversion < Repository
end
end
end
private
# Returns the relative url of the repository
# Eg: root_url = file:///var/svn/foo
# url = file:///var/svn/foo/bar
# => returns /bar
def relative_url
@relative_url ||= url.gsub(Regexp.new("^#{Regexp.escape(root_url)}"), '')
end
end

View File

@@ -29,6 +29,14 @@ class TimeEntry < ActiveRecord::Base
validates_numericality_of :hours, :allow_nil => true
validates_length_of :comments, :maximum => 255
def after_initialize
if new_record? && self.activity.nil?
if default_activity = Enumeration.default('ACTI')
self.activity_id = default_activity.id
end
end
end
def before_validation
self.project = issue.project if issue && project.nil?
end

View File

@@ -54,7 +54,7 @@ class User < ActiveRecord::Base
# Login must contain lettres, numbers, underscores only
validates_format_of :login, :with => /^[a-z0-9_\-@\.]*$/i
validates_length_of :login, :maximum => 30
validates_format_of :firstname, :lastname, :with => /^[\w\s\'\-]*$/i
validates_format_of :firstname, :lastname, :with => /^[\w\s\'\-\.]*$/i
validates_length_of :firstname, :lastname, :maximum => 30
validates_format_of :mail, :with => /^([^@\s]+)@((?:[-a-z0-9]+\.)+[a-z]{2,})$/i, :allow_nil => true
validates_length_of :mail, :maximum => 60, :allow_nil => true
@@ -258,13 +258,12 @@ class User < ActiveRecord::Base
end
def self.anonymous
return @anonymous_user if @anonymous_user
anonymous_user = AnonymousUser.find(:first)
if anonymous_user.nil?
anonymous_user = AnonymousUser.create(:lastname => 'Anonymous', :firstname => '', :mail => '', :login => '', :status => 0)
raise 'Unable to create the anonymous user.' if anonymous_user.new_record?
end
@anonymous_user = anonymous_user
anonymous_user
end
private

View File

@@ -1,7 +1,7 @@
<h2><%=h @user.name %></h2>
<p>
<%= mail_to @user.mail unless @user.pref.hide_mail %>
<%= mail_to(h(@user.mail)) unless @user.pref.hide_mail %>
<ul>
<li><%=l(:label_registered_on)%>: <%= format_date(@user.created_on) %></li>
<% for custom_value in @custom_values %>
@@ -16,8 +16,8 @@
<h3><%=l(:label_project_plural)%></h3>
<ul>
<% for membership in @memberships %>
<li><%= link_to membership.project.name, :controller => 'projects', :action => 'show', :id => membership.project %>
(<%= membership.role.name %>, <%= format_date(membership.created_on) %>)</li>
<li><%= link_to(h(membership.project.name), :controller => 'projects', :action => 'show', :id => membership.project) %>
(<%=h membership.role.name %>, <%= format_date(membership.created_on) %>)</li>
<% end %>
</ul>
<% end %>

View File

@@ -38,3 +38,5 @@
<% content_for :header_tags do %>
<%= auto_discovery_link_tag(:atom, {:controller => 'projects', :action => 'activity', :id => @project, :format => 'atom', :show_messages => 1, :key => User.current.rss_key}) %>
<% end %>
<% html_title l(:label_board_plural) %>

View File

@@ -57,3 +57,5 @@
<% else %>
<p class="nodata"><%= l(:label_no_data) %></p>
<% end %>
<% html_title h(@board.name) %>

View File

@@ -1,6 +1,6 @@
xml.instruct!
xml.feed "xmlns" => "http://www.w3.org/2005/Atom" do
xml.title @title
xml.title truncate_single_line(@title, 100)
xml.link "rel" => "self", "href" => url_for(params.merge({:format => nil, :only_path => false}))
xml.link "rel" => "alternate", "href" => url_for(:controller => 'welcome', :only_path => false)
xml.id url_for(:controller => 'welcome', :only_path => false)
@@ -10,11 +10,15 @@ xml.feed "xmlns" => "http://www.w3.org/2005/Atom" do
@items.each do |item|
xml.entry do
url = url_for(item.event_url(:only_path => false))
xml.title truncate(item.event_title, 100)
if @project
xml.title truncate_single_line(item.event_title, 100)
else
xml.title truncate_single_line("#{item.project} - #{item.event_title}", 100)
end
xml.link "rel" => "alternate", "href" => url
xml.id url
xml.updated item.event_datetime.xmlschema
author = item.event_author if item.respond_to?(:author)
author = item.event_author if item.respond_to?(:event_author)
xml.author do
xml.name(author)
xml.email(author.mail) if author.respond_to?(:mail) && !author.mail.blank?

View File

@@ -8,7 +8,7 @@
<table class="list">
<% enumerations.each do |enumeration| %>
<tr class="<%= cycle('odd', 'even') %>">
<td><%= link_to enumeration.name, :action => 'edit', :id => enumeration %></td>
<td><%= link_to h(enumeration), :action => 'edit', :id => enumeration %></td>
<td style="width:15%;"><%= image_tag('true.png') if enumeration.is_default? %></td>
<td style="width:15%;">
<%= link_to image_tag('2uparrow.png', :alt => l(:label_sort_highest)), {:action => 'move', :id => enumeration, :position => 'highest'}, :method => :post, :title => l(:label_sort_highest) %>

View File

@@ -21,9 +21,9 @@
<p><%= time_entry.text_field :hours, :size => 6, :label => :label_spent_time %> <%= l(:field_hours) %></p>
</div>
<div class="splitcontentright">
<p><%= time_entry.text_field :comments, :size => 40 %></p>
<p><%= time_entry.select :activity_id, (@activities.collect {|p| [p.name, p.id]}) %></p>
</div>
<p><%= time_entry.text_field :comments, :size => 60 %></p>
<% end %>
</fieldset>
<% end %>

View File

@@ -6,7 +6,7 @@
<a href="#" class="submenu" onclick="return false;"><%= l(:field_status) %></a>
<ul>
<% @statuses.each do |s| -%>
<li><%= context_menu_link s.name, {:controller => 'issues', :action => 'edit', :id => @issue, :issue => {:status_id => s}},
<li><%= context_menu_link s.name, {:controller => 'issues', :action => 'edit', :id => @issue, :issue => {:status_id => s}, :back_to => @back}, :method => :post,
:selected => (s == @issue.status), :disabled => !(@can[:update] && @allowed_statuses.include?(s)) %></li>
<% end -%>
</ul>

View File

@@ -45,7 +45,7 @@
<p class="other-formats">
<%= l(:label_export_to) %>
<span><%= link_to 'Atom', {:format => 'atom', :key => User.current.rss_key}, :class => 'feed' %></span>
<span><%= link_to 'Atom', {:query_id => @query, :format => 'atom', :key => User.current.rss_key}, :class => 'feed' %></span>
<span><%= link_to 'CSV', {:format => 'csv'}, :class => 'csv' %></span>
<span><%= link_to 'PDF', {:format => 'pdf'}, :class => 'pdf' %></span>
</p>

View File

@@ -36,7 +36,7 @@
<%= render :partial => 'layouts/project_selector' if User.current.memberships.any? %>
</div>
<h1><%= h(@project ? @project.name : Setting.app_title) %></h1>
<h1><%= h(@project && !@project.new_record? ? @project.name : Setting.app_title) %></h1>
<div id="main-menu">
<%= render_main_menu(@project) %>

View File

@@ -1,12 +1,32 @@
<html>
<head>
<style>
body { font-family: Verdana, sans-serif; font-size: 0.8em; color:#484848; }
body h1 { font-family: "Trebuchet MS", Verdana, sans-serif; font-size: 1.2em; margin: 0;}
a, a:link, a:visited{ color: #2A5685; }
a:hover, a:active{ color: #c61a1a; }
hr { width: 100%; height: 1px; background: #ccc; border: 0; }
.footer { font-size: 0.8em; font-style: italic; }
body {
font-family: Verdana, sans-serif;
font-size: 0.8em;
color:#484848;
}
h1 {
font-family: "Trebuchet MS", Verdana, sans-serif;
font-size: 1.2em;
margin: 0px;
}
a, a:link, a:visited {
color: #2A5685;
}
a:hover, a:active {
color: #c61a1a;
}
hr {
width: 100%;
height: 1px;
background: #ccc;
border: 0;
}
.footer {
font-size: 0.8em;
font-style: italic;
}
</style>
</head>
<body>

View File

@@ -17,6 +17,7 @@
</div>
<br />
<% unless @replies.empty? %>
<h3 class="icon22 icon22-comment"><%= l(:label_reply_plural) %></h3>
<% @replies.each do |message| %>
<a name="<%= "message-#{message.id}" %>"></a>
@@ -30,6 +31,7 @@
<%= link_to_attachments message.attachments, :no_author => true %>
</div>
<% end %>
<% end %>
<% if !@topic.locked? && authorize_for('messages', 'reply') %>
<p><%= toggle_link l(:button_reply), "reply", :focus => 'message_content' %></p>
@@ -48,3 +50,5 @@
<div id="preview" class="wiki"></div>
</div>
<% end %>
<% html_title h(@topic.subject) %>

View File

@@ -7,7 +7,8 @@
<dl>
<% @events_by_day[day].sort {|x,y| y.event_datetime <=> x.event_datetime }.each do |e| -%>
<dt class="<%= e.event_type %>"><span class="time"><%= format_time(e.event_datetime, false) %></span>
<%= content_tag('span', h(e.project), :class => 'project') if @project.nil? || @project != e.project %> <%= link_to h(truncate(e.event_title, 100)), e.event_url %></dt>
<%= content_tag('span', h(e.project), :class => 'project') if @project.nil? || @project != e.project %>
<%= link_to format_activity_title(e.event_title), e.event_url %></dt>
<dd><% unless e.event_description.blank? -%>
<span class="description"><%= format_activity_description(e.event_description) %></span><br />
<% end %>

View File

@@ -43,7 +43,7 @@
<h3><%= l(:label_version_plural) %></h3>
<% @versions.each do |version| %>
<%= link_to version.name, :anchor => version.name %><br />
<%= link_to version.name, "##{version.name}" %><br />
<% end %>
<% end %>

View File

@@ -3,7 +3,7 @@
<div class="splitcontentleft">
<%= textilizable @project.description %>
<ul>
<% unless @project.homepage.blank? %><li><%=l(:field_homepage)%>: <%= auto_link @project.homepage %></li><% end %>
<% unless @project.homepage.blank? %><li><%=l(:field_homepage)%>: <%= auto_link(h(@project.homepage)) %></li><% end %>
<% if @subprojects.any? %>
<li><%=l(:label_subproject_plural)%>: <%= @subprojects.collect{|p| link_to(h(p.name), :action => 'show', :id => p)}.join(", ") %></li>
<% end %>

View File

@@ -1,32 +1,24 @@
<% @entries.each do |entry| %>
<% tr_id = Digest::MD5.hexdigest(entry.path)
depth = params[:depth].to_i %>
<tr id="<%= tr_id %>" class="<%= params[:parent_id] %> entry">
<td class="filename">
<%= if entry.is_dir?
link_to_remote h(entry.name),
{:url => {:action => 'browse', :id => @project, :path => entry.path, :rev => @rev, :depth => (depth + 1), :parent_id => tr_id},
<tr id="<%= tr_id %>" class="<%= params[:parent_id] %> entry <%= entry.kind %>">
<td style="padding-left: <%=18 * depth%>px;" class="filename">
<% if entry.is_dir? %>
<span class="expander" onclick="<%= remote_function :url => {:action => 'browse', :id => @project, :path => entry.path, :rev => @rev, :depth => (depth + 1), :parent_id => tr_id},
:update => { :success => tr_id },
:position => :after,
:success => "scmEntryLoaded('#{tr_id}')",
:condition => "scmEntryClick('#{tr_id}')"
},
{:href => url_for({:action => 'browse', :id => @project, :path => entry.path, :rev => @rev}),
:class => ('icon icon-folder'),
:style => "margin-left: #{18 * depth}px;"
}
else
link_to h(entry.name),
:condition => "scmEntryClick('#{tr_id}')"%>">&nbsp</span>
<% end %>
<%= link_to h(entry.name),
{:action => (entry.is_dir? ? 'browse' : 'changes'), :id => @project, :path => entry.path, :rev => @rev},
:class => 'icon icon-file',
:style => "margin-left: #{18 * depth}px;"
end %>
:class => (entry.is_dir? ? 'icon icon-folder' : 'icon icon-file')%>
</td>
<td class="size"><%= (entry.size ? number_to_human_size(entry.size) : "?") unless entry.is_dir? %></td>
<td class="revision"><%= link_to(format_revision(entry.lastrev.name), :action => 'revision', :id => @project, :rev => entry.lastrev.identifier) if entry.lastrev && entry.lastrev.identifier %></td>
<td class="age"><%= distance_of_time_in_words(entry.lastrev.time, Time.now) if entry.lastrev && entry.lastrev.time %></td>
<td class="author"><%=h(entry.lastrev.author.to_s.split('<').first) if entry.lastrev %></td>
<% changeset = @project.repository.changesets.find_by_revision(entry.lastrev.identifier) if entry.lastrev %>
<% changeset = @project.repository.changesets.find_by_revision(entry.lastrev.identifier) if entry.lastrev && entry.lastrev.identifier %>
<td class="comments"><%=h truncate(changeset.comments, 50) unless changeset.nil? %></td>
</tr>
<% end %>

View File

@@ -13,6 +13,7 @@
<%= "(#{number_to_human_size(@entry.size)})" if @entry.size %>
</p>
<%= render :partial => 'revisions', :locals => {:project => @project, :path => @path, :revisions => @changesets, :entry => @entry }%>
<%= render(:partial => 'revisions',
:locals => {:project => @project, :path => @path, :revisions => @changesets, :entry => @entry }) unless @changesets.empty? %>
<% html_title(l(:label_change_plural)) -%>

View File

@@ -11,82 +11,78 @@
<%= select_tag 'type', options_for_select([[l(:label_diff_inline), "inline"], [l(:label_diff_side_by_side), "sbs"]], @diff_type), :onchange => "if (this.value != '') {this.form.submit()}" %></p>
<% end %>
<% cache(@cache_key) do %>
<% @diff.each do |table_file| %>
<% cache(@cache_key) do -%>
<% @diff.each do |table_file| -%>
<div class="autoscroll">
<% if @diff_type == 'sbs' %>
<table class="filecontent CodeRay">
<thead>
<tr>
<th colspan="4" class="filename">
<%= table_file.file_name %>
</th>
</tr>
<tr>
<th colspan="2">@<%= format_revision @rev %></th>
<th colspan="2">@<%= format_revision @rev_to %></th>
</tr>
</thead>
<tbody>
<% table_file.keys.sort.each do |key| %>
<tr>
<th class="line-num">
<%= table_file[key].nb_line_left %>
</th>
<td class="line-code <%= table_file[key].type_diff_left %>">
<pre><%=to_utf8 table_file[key].line_left %></pre>
</td>
<th class="line-num">
<%= table_file[key].nb_line_right %>
</th>
<td class="line-code <%= table_file[key].type_diff_right %>">
<pre><%=to_utf8 table_file[key].line_right %></pre>
</td>
</tr>
<% end %>
</tbody>
</table>
<% if @diff_type == 'sbs' -%>
<table class="filecontent CodeRay">
<thead>
<tr><th colspan="4" class="filename"><%= table_file.file_name %></th></tr>
<tr>
<th colspan="2">@<%= format_revision @rev %></th>
<th colspan="2">@<%= format_revision @rev_to %></th>
</tr>
</thead>
<tbody>
<% prev_line_left, prev_line_right = nil, nil -%>
<% table_file.keys.sort.each do |key| -%>
<% if prev_line_left && prev_line_right && (table_file[key].nb_line_left != prev_line_left+1) && (table_file[key].nb_line_right != prev_line_right+1) -%>
<tr class="spacing"><td colspan="4"></td></tr>
<% end -%>
<tr>
<th class="line-num"><%= table_file[key].nb_line_left %></th>
<td class="line-code <%= table_file[key].type_diff_left %>">
<pre><%=to_utf8 table_file[key].line_left %></pre>
</td>
<th class="line-num"><%= table_file[key].nb_line_right %></th>
<td class="line-code <%= table_file[key].type_diff_right %>">
<pre><%=to_utf8 table_file[key].line_right %></pre>
</td>
</tr>
<% prev_line_left, prev_line_right = table_file[key].nb_line_left.to_i, table_file[key].nb_line_right.to_i -%>
<% end -%>
</tbody>
</table>
<% else -%>
<table class="filecontent CodeRay">
<thead>
<tr><th colspan="3" class="filename"><%= table_file.file_name %></th></tr>
<tr>
<th>@<%= format_revision @rev %></th>
<th>@<%= format_revision @rev_to %></th>
<th></th>
</tr>
</thead>
<tbody>
<% prev_line_left, prev_line_right = nil, nil -%>
<% table_file.keys.sort.each do |key, line| %>
<% if prev_line_left && prev_line_right && (table_file[key].nb_line_left != prev_line_left+1) && (table_file[key].nb_line_right != prev_line_right+1) -%>
<tr class="spacing"><td colspan="3"></td></tr>
<% end -%>
<tr>
<th class="line-num"><%= table_file[key].nb_line_left %></th>
<th class="line-num"><%= table_file[key].nb_line_right %></th>
<% if table_file[key].line_left.empty? -%>
<td class="line-code <%= table_file[key].type_diff_right %>">
<pre><%=to_utf8 table_file[key].line_right %></pre>
</td>
<% else -%>
<td class="line-code <%= table_file[key].type_diff_left %>">
<pre><%=to_utf8 table_file[key].line_left %></pre>
</td>
<% end -%>
</tr>
<% prev_line_left = table_file[key].nb_line_left.to_i if table_file[key].nb_line_left.to_i > 0 -%>
<% prev_line_right = table_file[key].nb_line_right.to_i if table_file[key].nb_line_right.to_i > 0 -%>
<% end -%>
</tbody>
</table>
<% end -%>
<% else %>
<table class="filecontent CodeRay">
<thead>
<tr>
<th colspan="3" class="filename">
<%= table_file.file_name %>
</th>
</tr>
<tr>
<th>@<%= format_revision @rev %></th>
<th>@<%= format_revision @rev_to %></th>
<th></th>
</tr>
</thead>
<tbody>
<% table_file.keys.sort.each do |key, line| %>
<tr>
<th class="line-num">
<%= table_file[key].nb_line_left %>
</th>
<th class="line-num">
<%= table_file[key].nb_line_right %>
</th>
<% if table_file[key].line_left.empty? %>
<td class="line-code <%= table_file[key].type_diff_right %>">
<pre><%=to_utf8 table_file[key].line_right %></pre>
</td>
<% else %>
<td class="line-code <%= table_file[key].type_diff_left %>">
<pre><%=to_utf8 table_file[key].line_left %></pre>
</td>
<% end %>
</tr>
<% end %>
</tbody>
</table>
<% end %>
</div>
<% end %>
<% end %>
<% end -%>
<% end -%>
<% html_title(with_leading_slash(@path), 'Diff') -%>

View File

@@ -49,7 +49,7 @@
<td><div class="square action_<%= change.action %>"></div> <%= change.path %> <%= "(#{change.revision})" unless change.revision.blank? %></td>
<td align="right">
<% if change.action == "M" %>
<%= link_to l(:label_view_diff), :action => 'diff', :id => @project, :path => without_leading_slash(change.path), :rev => @changeset.revision %>
<%= link_to l(:label_view_diff), :action => 'diff', :id => @project, :path => without_leading_slash(change.relative_path), :rev => @changeset.revision %>
<% end %>
</td>
</tr>

View File

@@ -12,7 +12,7 @@
<% end %>
<h3><%= l(:label_permissions) %></h3>
<div class="box">
<div class="box" id="permissions">
<% perms_by_module = @permissions.group_by {|p| p.project_module.to_s} %>
<% perms_by_module.keys.sort.each do |mod| %>
<fieldset><legend><%= mod.blank? ? l(:label_project) : mod.humanize %></legend>
@@ -24,6 +24,6 @@
<% end %>
</fieldset>
<% end %>
<br /><%= check_all_links 'role_form' %>
<br /><%= check_all_links 'permissions' %>
<%= hidden_field_tag 'role[permissions][]', '' %>
</div>

View File

@@ -9,13 +9,13 @@
<%= hidden_field_tag 'settings[bcc_recipients]', 0 %></p>
</div>
<fieldset class="box"><legend><%=l(:text_select_mail_notifications)%></legend>
<fieldset class="box" id="notified_events"><legend><%=l(:text_select_mail_notifications)%></legend>
<% @notifiables.each do |notifiable| %>
<label><%= check_box_tag 'settings[notified_events][]', notifiable, Setting.notified_events.include?(notifiable) %>
<%= l_or_humanize(notifiable) %></label><br />
<% end %>
<%= hidden_field_tag 'settings[notified_events][]', '' %>
<p><%= check_all_links('mail-options-form') %></p>
<p><%= check_all_links('notified_events') %></p>
</fieldset>
<fieldset class="box"><legend><%= l(:setting_emails_footer) %></legend>

View File

@@ -3,7 +3,7 @@
<% next if hours_for_value.empty? -%>
<tr class="<%= cycle('odd', 'even') %> <%= 'last-level' unless criterias.length > level+1 %>">
<%= '<td></td>' * level %>
<td><%= format_criteria_value(criterias[level], value) %></td>
<td><%= h(format_criteria_value(criterias[level], value)) %></td>
<%= '<td></td>' * (criterias.length - level - 1) -%>
<% total = 0 -%>
<% @periods.each do |period| -%>

View File

@@ -13,7 +13,7 @@
<p><%= custom_field_tag_with_label @custom_value %></p>
<% end if @custom_values%>
<p><%= f.check_box :admin %></p>
<p><%= f.check_box :admin, :disabled => (@user == User.current) %></p>
</div>
<div class="box">

View File

@@ -26,10 +26,10 @@
<tbody>
<% for user in @users -%>
<tr class="user <%= cycle("odd", "even") %> <%= %w(anon active registered locked)[user.status] %>">
<td class="username"><%= link_to user.login, :action => 'edit', :id => user %></td>
<td class="firstname"><%= user.firstname %></td>
<td class="lastname"><%= user.lastname %></td>
<td class="email"><%= user.mail %></td>
<td class="username"><%= link_to h(user.login), :action => 'edit', :id => user %></td>
<td class="firstname"><%= h(user.firstname) %></td>
<td class="lastname"><%= h(user.lastname) %></td>
<td class="email"><%= h(user.mail) %></td>
<td align="center"><%= image_tag('true.png') if user.admin? %></td>
<td class="created_on" align="center"><%= format_time(user.created_on) %></td>
<td class="last_login_on" align="center"><%= format_time(user.last_login_on) unless user.last_login_on.nil? %></td>

View File

@@ -12,17 +12,19 @@
</div>
<div class="splitcontentright">
<% if @projects.any? %>
<div class="box">
<h3 class="icon22 icon22-projects"><%=l(:label_project_latest)%></h3>
<ul>
<% for project in @projects %>
<li>
<%= link_to project.name, :controller => 'projects', :action => 'show', :id => project %> (<%= format_time(project.created_on) %>)
<%= link_to h(project.name), :controller => 'projects', :action => 'show', :id => project %> (<%= format_time(project.created_on) %>)
<%= textilizable project.short_description, :project => project %>
</li>
<% end %>
</ul>
</div>
</div>
<% end %>
</div>
<% content_for :header_tags do %>

View File

@@ -12,6 +12,7 @@ production:
host: localhost
username: root
password:
encoding: utf8
development:
adapter: mysql
@@ -19,6 +20,7 @@ development:
host: localhost
username: root
password:
encoding: utf8
test:
adapter: mysql
@@ -26,6 +28,7 @@ test:
host: localhost
username: root
password:
encoding: utf8
test_pgsql:
adapter: postgresql

View File

@@ -5,6 +5,86 @@ Copyright (C) 2006-2008 Jean-Philippe Lang
http://www.redmine.org/
== 2008-07-06 v0.7.3
* Allow dot in firstnames and lastnames
* Add project name to cross-project Atom feeds
* Encoding set to utf8 in example database.yml
* HTML titles on forums related views
* Fixed: various XSS vulnerabilities
* Fixed: Entourage (and some old client) fails to correctly render notification styles
* Fixed: Fixed: timelog redirects inappropriately when :back_url is blank
* Fixed: wrong relative paths to images in wiki_syntax.html
== 2008-06-15 v0.7.2
* "New Project" link on Projects page
* Links to repository directories on the repo browser
* Move status to front in Activity View
* Remove edit step from Status context menu
* Fixed: No way to do textile horizontal rule
* Fixed: Repository: View differences doesn't work
* Fixed: attachement's name maybe invalid.
* Fixed: Error when creating a new issue
* Fixed: NoMethodError on @available_filters.has_key?
* Fixed: Check All / Uncheck All in Email Settings
* Fixed: "View differences" of one file at /repositories/revision/ fails
* Fixed: Column width in "my page"
* Fixed: private subprojects are listed on Issues view
* Fixed: Textile: bold, italics, underline, etc... not working after parentheses
* Fixed: Update issue form: comment field from log time end out of screen
* Fixed: Editing role: "issue can be assigned to this role" out of box
* Fixed: Unable use angular braces after include word
* Fixed: Using '*' as keyword for repository referencing keywords doesn't work
* Fixed: Subversion repository "View differences" on each file rise ERROR
* Fixed: View differences for individual file of a changeset fails if the repository URL doesn't point to the repository root
* Fixed: It is possible to lock out the last admin account
* Fixed: Wikis are viewable for anonymous users on public projects, despite not granting access
* Fixed: Issue number display clipped on 'my issues'
* Fixed: Roadmap version list links not carrying state
* Fixed: Log Time fieldset in IssueController#edit doesn't set default Activity as default
* Fixed: git's "get_rev" API should use repo's current branch instead of hardwiring "master"
* Fixed: browser's language subcodes ignored
* Fixed: Error on project selection with numeric (only) identifier.
* Fixed: Link to PDF doesn't work after creating new issue
* Fixed: "Replies" should not be shown on forum threads that are locked
* Fixed: SVN errors lead to svn username/password being displayed to end users (security issue)
* Fixed: http links containing hashes don't display correct
* Fixed: Allow ampersands in Enumeration names
* Fixed: Atom link on saved query does not include query_id
* Fixed: Logtime info lost when there's an error updating an issue
* Fixed: TOC does not parse colorization markups
* Fixed: CVS: add support for modules names with spaces
* Fixed: Bad rendering on projects/add
* Fixed: exception when viewing differences on cvs
* Fixed: export issue to pdf will messup when use Chinese language
* Fixed: Redmine::Scm::Adapters::GitAdapter#get_rev ignored GIT_BIN constant
* Fixed: Adding non-ASCII new issue type in the New Issue page have encoding error using IE
* Fixed: Importing from trac : some wiki links are messed
* Fixed: Incorrect weekend definition in Hebrew calendar locale
* Fixed: Atom feeds don't provide author section for repository revisions
* Fixed: In Activity views, changesets titles can be multiline while they should not
* Fixed: Ignore unreadable subversion directories (read disabled using authz)
* Fixed: lib/SVG/Graph/Graph.rb can't externalize stylesheets
* Fixed: Close statement handler in Redmine.pm
== 2008-05-04 v0.7.1
* Thai translation added (Gampol Thitinilnithi)
* Translations updates
* Escape HTML comment tags
* Prevent "can't convert nil into String" error when :sort_order param is not present
* Fixed: Updating tickets add a time log with zero hours
* Fixed: private subprojects names are revealed on the project overview
* Fixed: Search for target version of "none" fails with postgres 8.3
* Fixed: Home, Logout, Login links shouldn't be absolute links
* Fixed: 'Latest projects' box on the welcome screen should be hidden if there are no projects
* Fixed: error when using upcase language name in coderay
* Fixed: error on Trac import when :due attribute is nil
== 2008-04-28 v0.7.0
* Forces Redmine to use rails 2.0.2 gem when vendor/rails is not present

View File

@@ -1,13 +1,13 @@
== Redmine installation
Redmine - project management software
Copyright (C) 2006-2007 Jean-Philippe Lang
Copyright (C) 2006-2008 Jean-Philippe Lang
http://www.redmine.org/
== Requirements
* Ruby on Rails 2.0.2
* Ruby on Rails 2.0.2 (not Rails 2.1)
* A database (see compatibility below)
Optional:
@@ -33,17 +33,26 @@ Supported databases:
rake db:migrate RAILS_ENV="production"
It will create tables and an administrator account.
5. Test the installation by running WEBrick web server:
5. Setting up permissions
The user who runs Redmine must have write permission on the following
subdirectories: files, log, tmp (create the last one if not present).
Assuming you run Redmine with a user named redmine:
mkdir tmp
sudo chown -R redmine:redmine files log tmp
sudo chmod -R 755 files log tmp
6. Test the installation by running WEBrick web server:
ruby script/server -e production
Once WEBrick has started, point your browser to http://localhost:3000/
You should now see the application welcome page
6. Use default administrator account to log in:
7. Use default administrator account to log in:
login: admin
password: admin
7. Go to "Administration" to load the default configuration data (roles,
Go to "Administration" to load the default configuration data (roles,
trackers, statuses, workflow) and adjust application settings

View File

@@ -307,8 +307,8 @@ label_confirmation: Vahvistus
label_export_to: Vie
label_read: Lukee...
label_public_projects: Julkiset projektit
label_open_issues: avoin
label_open_issues_plural: avointa
label_open_issues: avoin, yhteensä
label_open_issues_plural: avointa, yhteensä
label_closed_issues: suljettu
label_closed_issues_plural: suljettua
label_total: Yhteensä
@@ -617,4 +617,4 @@ setting_default_projects_public: Uudet projektit ovat oletuksena julkisia
label_overall_activity: Kokonaishistoria
error_scm_annotate: "Merkintää ei ole tai siihen ei voi lisätä selityksiä."
label_planning: Suunnittelu
text_subprojects_destroy_warning: 'Its subproject(s): %s will be also deleted.'
text_subprojects_destroy_warning: 'Tämän alaprojekti(t): %s tullaan myös poistamaan.'

626
lang/hu.yml Normal file
View File

@@ -0,0 +1,626 @@
_gloc_rule_default: '|n| n==1 ? "" : "_plural" '
actionview_datehelper_select_day_prefix:
actionview_datehelper_select_month_names: Január,Február,Március,Április,Május,Június,Július,Augusztus,Szeptember,Október,November,December
actionview_datehelper_select_month_names_abbr: Jan,Feb,Már,Ápr,Máj,Jún,Júl,Aug,Szept,Okt,Nov,Dec
actionview_datehelper_select_month_prefix:
actionview_datehelper_select_year_prefix:
actionview_datehelper_time_in_words_day: 1 nap
actionview_datehelper_time_in_words_day_plural: %d nap
actionview_datehelper_time_in_words_hour_about: kb. 1 óra
actionview_datehelper_time_in_words_hour_about_plural: kb. %d óra
actionview_datehelper_time_in_words_hour_about_single: kb. 1 óra
actionview_datehelper_time_in_words_minute: 1 perc
actionview_datehelper_time_in_words_minute_half: fél perc
actionview_datehelper_time_in_words_minute_less_than: kevesebb, mint 1 perc
actionview_datehelper_time_in_words_minute_plural: %d perc
actionview_datehelper_time_in_words_minute_single: 1 perc
actionview_datehelper_time_in_words_second_less_than: kevesebb, mint 1 másodperc
actionview_datehelper_time_in_words_second_less_than_plural: kevesebb, mint %d másodperc
actionview_instancetag_blank_option: Kérem válasszon
activerecord_error_inclusion: nem található a listában
activerecord_error_exclusion: foglalt
activerecord_error_invalid: érvénytelen
activerecord_error_confirmation: jóváhagyás szükséges
activerecord_error_accepted: ell kell fogadni
activerecord_error_empty: nem lehet üres
activerecord_error_blank: nem lehet üres
activerecord_error_too_long: túl hosszú
activerecord_error_too_short: túl rövid
activerecord_error_wrong_length: hibás a hossza
activerecord_error_taken: már foglalt
activerecord_error_not_a_number: nem egy szám
activerecord_error_not_a_date: nem érvényes dátum
activerecord_error_greater_than_start_date: nagyobbnak kell lennie, mint az indítás dátuma
activerecord_error_not_same_project: nem azonos projekthez tartozik
activerecord_error_circular_dependency: Ez a kapcsolat egy körkörös függőséget eredményez
general_fmt_age: %d év
general_fmt_age_plural: %d év
general_fmt_date: %%Y.%%m.%%d
general_fmt_datetime: %%Y.%%m.%%d %%H:%%M:%%S
general_fmt_datetime_short: %%b %%d, %%H:%%M:%%S
general_fmt_time: %%H:%%M:%%S
general_text_No: 'Nem'
general_text_Yes: 'Igen'
general_text_no: 'nem'
general_text_yes: 'igen'
general_lang_name: 'Magyar'
general_csv_separator: ','
general_csv_encoding: ISO-8859-2
general_pdf_encoding: ISO-8859-2
general_day_names: Hétfő,Kedd,Szerda,Csütörtök,Péntek,Szombat,Vasárnap
general_first_day_of_week: '1'
notice_account_updated: A fiók adatai sikeresen frissítve.
notice_account_invalid_creditentials: Hibás felhasználói név, vagy jelszó
notice_account_password_updated: A jelszó módosítása megtörtént.
notice_account_wrong_password: Hibás jelszó
notice_account_register_done: A fiók sikeresen létrehozva. Aktiválásához kattints az e-mailben kapott linkre
notice_account_unknown_email: Ismeretlen felhasználó.
notice_can_t_change_password: A fiók külső azonosítási forrást használ. A jelszó megváltoztatása nem lehetséges.
notice_account_lost_email_sent: Egy e-mail üzenetben postáztunk Önnek egy leírást az új jelszó beállításáról.
notice_account_activated: Fiókját aktiváltuk. Most már be tud jelentkezni a rendszerbe.
notice_successful_create: Sikeres létrehozás.
notice_successful_update: Sikeres módosítás.
notice_successful_delete: Sikeres törlés.
notice_successful_connection: Sikeres bejelentkezés.
notice_file_not_found: Az oldal, amit meg szeretne nézni nem található, vagy átkerült egy másik helyre.
notice_locking_conflict: Az adatot egy másik felhasználó idő közben módosította.
notice_not_authorized: Nincs hozzáférési engedélye ehhez az oldalhoz.
notice_email_sent: Egy e-mail üzenetet küldtünk a következő címre %s
notice_email_error: Hiba történt a levél küldése közben (%s)
notice_feeds_access_key_reseted: Az RSS hozzáférési kulcsát újra generáltuk.
notice_failed_to_save_issues: "Nem sikerült a %d feladat(ok) mentése a %d -ban kiválasztva: %s."
notice_no_issue_selected: "Nincs feladat kiválasztva! Kérem jelölje meg melyik feladatot szeretné szerkeszteni!"
notice_account_pending: "A fiókja létrejött, és adminisztrátori jóváhagyásra vár."
notice_default_data_loaded: Az alapértelmezett konfiguráció betöltése sikeresen megtörtént.
error_can_t_load_default_data: "Az alapértelmezett konfiguráció betöltése nem lehetséges: %s"
error_scm_not_found: "A bejegyzés, vagy revízió nem található a tárolóban."
error_scm_command_failed: "A tároló elérése közben hiba lépett fel: %s"
error_scm_annotate: "A bejegyzés nem létezik, vagy nics jegyzetekkel ellátva."
error_issue_not_found_in_project: 'A feladat nem található, vagy nem ehhez a projekthez tartozik'
mail_subject_lost_password: Az Ön Redmine jelszava
mail_body_lost_password: 'A Redmine jelszó megváltoztatásához, kattintson a következő linkre:'
mail_subject_register: Redmine azonosító aktiválása
mail_body_register: 'A Redmine azonosítója aktiválásához, kattintson a következő linkre:'
mail_body_account_information_external: A "%s" azonosító használatával bejelentkezhet a Redmineba.
mail_body_account_information: Az Ön Redmine azonosítójának információi
mail_subject_account_activation_request: Redmine azonosító aktiválási kérelem
mail_body_account_activation_request: 'Egy új felhasználó (%s) regisztrált, azonosítója jóváhasgyásra várakozik:'
gui_validation_error: 1 hiba
gui_validation_error_plural: %d hiba
field_name: Név
field_description: Leírás
field_summary: Összegzés
field_is_required: Kötelező
field_firstname: Keresztnév
field_lastname: Vezetéknév
field_mail: E-mail
field_filename: Fájl
field_filesize: Méret
field_downloads: Letöltések
field_author: Szerző
field_created_on: Létrehozva
field_updated_on: Módosítva
field_field_format: Formátum
field_is_for_all: Minden projekthez
field_possible_values: Lehetséges értékek
field_regexp: Reguláris kifejezés
field_min_length: Minimum hossz
field_max_length: Maximum hossz
field_value: Érték
field_category: Kategória
field_title: Cím
field_project: Projekt
field_issue: Feladat
field_status: Státusz
field_notes: Feljegyzések
field_is_closed: Feladat lezárva
field_is_default: Alapértelmezett érték
field_tracker: Típus
field_subject: Tárgy
field_due_date: Befejezés dátuma
field_assigned_to: Felelős
field_priority: Prioritás
field_fixed_version: Cél verzió
field_user: Felhasználó
field_role: Szerepkör
field_homepage: Weboldal
field_is_public: Nyilvános
field_parent: Szülő projekt
field_is_in_chlog: Feladatok látszanak a változás naplóban
field_is_in_roadmap: Feladatok látszanak az életútban
field_login: Azonosító
field_mail_notification: E-mail értesítések
field_admin: Adminisztrátor
field_last_login_on: Utolsó bejelentkezés
field_language: Nyelv
field_effective_date: Dátum
field_password: Jelszó
field_new_password: Új jelszó
field_password_confirmation: Megerősítés
field_version: Verzió
field_type: Típus
field_host: Kiszolgáló
field_port: Port
field_account: Felhasználói fiók
field_base_dn: Base DN
field_attr_login: Bejelentkezési tulajdonság
field_attr_firstname: Családnév
field_attr_lastname: Utónév
field_attr_mail: E-mail
field_onthefly: On-the-fly felhasználó létrehozás
field_start_date: Kezdés dátuma
field_done_ratio: Elkészült (%%)
field_auth_source: Azonosítási mód
field_hide_mail: Rejtse el az e-mail címem
field_comments: Megjegyzés
field_url: URL
field_start_page: Kezdőlap
field_subproject: Alprojekt
field_hours: Óra
field_activity: Aktivitás
field_spent_on: Dátum
field_identifier: Azonosító
field_is_filter: Szűrőként használható
field_issue_to_id: Kapcsolódó feladat
field_delay: Késés
field_assignable: Feladat rendelhető ehhez a szerepkörhöz
field_redirect_existing_links: Létező linkek átirányítása
field_estimated_hours: Becsült idő
field_column_names: Oszlopok
field_time_zone: Időzóna
field_searchable: Kereshető
field_default_value: Alapértelmezett érték
field_comments_sorting: Feljegyzések megjelenítése
setting_app_title: Alkalmazás címe
setting_app_subtitle: Alkalmazás alcíme
setting_welcome_text: Üdvözlő üzenet
setting_default_language: Alapértelmezett nyelv
setting_login_required: Azonosítás szükséges
setting_self_registration: Regisztráció
setting_attachment_max_size: Melléklet max. mérete
setting_issues_export_limit: Feladatok exportálásának korlátja
setting_mail_from: Kibocsátó e-mail címe
setting_bcc_recipients: Titkos másolat címzet (bcc)
setting_host_name: Kiszolgáló neve
setting_text_formatting: Szöveg formázás
setting_wiki_compression: Wiki történet tömörítés
setting_feeds_limit: RSS tartalom korlát
setting_default_projects_public: Az új projektek alapértelmezés szerint nyilvánosak
setting_autofetch_changesets: Commitok automatikus lehúzása
setting_sys_api_enabled: WS engedélyezése a tárolók kezeléséhez
setting_commit_ref_keywords: Hivatkozó kulcsszavak
setting_commit_fix_keywords: Javítások kulcsszavai
setting_autologin: Automatikus bejelentkezés
setting_date_format: Dátum formátum
setting_time_format: Idő formátum
setting_cross_project_issue_relations: Kereszt-projekt feladat hivatkozások engedélyezése
setting_issue_list_default_columns: Az alapértelmezésként megjelenített oszlopok a feladat listában
setting_repositories_encodings: Tárolók kódolása
setting_emails_footer: E-mail lábléc
setting_protocol: Protokol
setting_per_page_options: Objektum / oldal opciók
setting_user_format: Felhasználók megjelenítésének formája
setting_activity_days_default: Napok megjelenítése a project aktivitásnál
setting_display_subprojects_issues: Alapértelmezettként mutassa az alprojektek feladatait is a projekteken
project_module_issue_tracking: Feladat követés
project_module_time_tracking: Idő rögzítés
project_module_news: Hírek
project_module_documents: Dokumentumok
project_module_files: Fájlok
project_module_wiki: Wiki
project_module_repository: Tároló
project_module_boards: Fórumok
label_user: Felhasználó
label_user_plural: Felhasználók
label_user_new: Új felhasználó
label_project: Projekt
label_project_new: Új projekt
label_project_plural: Projektek
label_project_all: Az összes projekt
label_project_latest: Legutóbbi projektek
label_issue: Feladat
label_issue_new: Új feladat
label_issue_plural: Feladatok
label_issue_view_all: Minden feladat megtekintése
label_issues_by: %s feladatai
label_issue_added: Feladat hozzáadva
label_issue_updated: Feladat frissítve
label_document: Dokumentum
label_document_new: Új dokumentum
label_document_plural: Dokumentumok
label_document_added: Dokumentum hozzáadva
label_role: Szerepkör
label_role_plural: Szerepkörök
label_role_new: Új szerepkör
label_role_and_permissions: Szerepkörök, és jogosultságok
label_member: Résztvevő
label_member_new: Új résztvevő
label_member_plural: Résztvevők
label_tracker: Feladat típus
label_tracker_plural: Feladat típusok
label_tracker_new: Új feladat típus
label_workflow: Workflow
label_issue_status: Feladat státusz
label_issue_status_plural: Feladat státuszok
label_issue_status_new: Új státusz
label_issue_category: Feladat kategória
label_issue_category_plural: Feladat kategóriák
label_issue_category_new: Új kategória
label_custom_field: Egyéni mező
label_custom_field_plural: Egyéni mezők
label_custom_field_new: Új egyéni mező
label_enumerations: Felsorolások
label_enumeration_new: Új érték
label_information: Információ
label_information_plural: Információk
label_please_login: Jelentkezzen be
label_register: Regisztráljon
label_password_lost: Elfelejtett jelszó
label_home: Kezdőlap
label_my_page: Saját kezdőlapom
label_my_account: Fiókom adatai
label_my_projects: Saját projektem
label_administration: Adminisztráció
label_login: Bejelentkezés
label_logout: Kijelentkezés
label_help: Súgó
label_reported_issues: Bejelentett feladatok
label_assigned_to_me_issues: A nekem kiosztott feladatok
label_last_login: Utolsó bejelentkezés
label_last_updates: Utoljára frissítve
label_last_updates_plural: Utoljára módosítva %d
label_registered_on: Regisztrált
label_activity: Tevékenységek
label_overall_activity: Teljes aktivitás
label_new: Új
label_logged_as: Bejelentkezve, mint
label_environment: Környezet
label_authentication: Azonosítás
label_auth_source: Azonosítás módja
label_auth_source_new: Új azonosítási mód
label_auth_source_plural: Azonosítási módok
label_subproject_plural: Alprojektek
label_and_its_subprojects: %s és alprojektjei
label_min_max_length: Min - Max hossz
label_list: Lista
label_date: Dátum
label_integer: Egész
label_float: Lebegőpontos
label_boolean: Logikai
label_string: Szöveg
label_text: Hosszú szöveg
label_attribute: Tulajdonság
label_attribute_plural: Tulajdonságok
label_download: %d Letöltés
label_download_plural: %d Letöltések
label_no_data: Nincs megjeleníthető adat
label_change_status: Státusz módosítása
label_history: Történet
label_attachment: Fájl
label_attachment_new: Új fájl
label_attachment_delete: Fájl törlése
label_attachment_plural: Fájlok
label_file_added: Fájl hozzáadva
label_report: Jelentés
label_report_plural: Jelentések
label_news: Hírek
label_news_new: Hír hozzáadása
label_news_plural: Hírek
label_news_latest: Legutóbbi hírek
label_news_view_all: Minden hír megtekintése
label_news_added: Hír hozzáadva
label_change_log: Változás napló
label_settings: Beállítások
label_overview: Áttekintés
label_version: Verzió
label_version_new: Új verzió
label_version_plural: Verziók
label_confirmation: Jóváhagyás
label_export_to: Exportálás
label_read: Olvas...
label_public_projects: Nyilvános projektek
label_open_issues: nyitott
label_open_issues_plural: nyitott
label_closed_issues: lezárt
label_closed_issues_plural: lezárt
label_total: Összesen
label_permissions: Jogosultságok
label_current_status: Jelenlegi státusz
label_new_statuses_allowed: Státusz változtatások engedélyei
label_all: mind
label_none: nincs
label_nobody: senki
label_next: Következő
label_previous: Előző
label_used_by: Használja
label_details: Részletek
label_add_note: Jegyzet hozzáadása
label_per_page: Oldalanként
label_calendar: Naptár
label_months_from: hónap, kezdve
label_gantt: Gantt
label_internal: Belső
label_last_changes: utolsó %d változás
label_change_view_all: Minden változás megtekintése
label_personalize_page: Az oldal testreszabása
label_comment: Megjegyzés
label_comment_plural: Megjegyzések
label_comment_add: Megjegyzés hozzáadása
label_comment_added: Megjegyzés hozzáadva
label_comment_delete: Megjegyzések törlése
label_query: Egyéni lekérdezés
label_query_plural: Egyéni lekérdezések
label_query_new: Új lekérdezés
label_filter_add: Szűrő hozzáadása
label_filter_plural: Szűrők
label_equals: egyenlő
label_not_equals: nem egyenlő
label_in_less_than: kevesebb, mint
label_in_more_than: több, mint
label_in: in
label_today: ma
label_all_time: mindenkor
label_yesterday: tegnap
label_this_week: aktuális hét
label_last_week: múlt hét
label_last_n_days: az elmúlt %d nap
label_this_month: aktuális hónap
label_last_month: múlt hónap
label_this_year: aktuális év
label_date_range: Dátum intervallum
label_less_than_ago: kevesebb, mint nappal ezelőtt
label_more_than_ago: több, mint nappal ezelőtt
label_ago: nappal ezelőtt
label_contains: tartalmazza
label_not_contains: nem tartalmazza
label_day_plural: nap
label_repository: Tároló
label_repository_plural: Tárolók
label_browse: Tallóz
label_modification: %d változás
label_modification_plural: %d változások
label_revision: Revízió
label_revision_plural: Revíziók
label_associated_revisions: Kapcsolt revíziók
label_added: hozzáadva
label_modified: módosítva
label_deleted: törölve
label_latest_revision: Legutolsó revízió
label_latest_revision_plural: Legutolsó revíziók
label_view_revisions: Revíziók megtekintése
label_max_size: Maximális méret
label_on: 'összesen'
label_sort_highest: Az elejére
label_sort_higher: Eggyel feljebb
label_sort_lower: Eggyel lejjebb
label_sort_lowest: Az aljára
label_roadmap: Életút
label_roadmap_due_in: Elkészültéig várhatóan még
label_roadmap_overdue: %s késésben
label_roadmap_no_issues: Nincsenek feladatok ehhez a verzióhoz
label_search: Keresés
label_result_plural: Találatok
label_all_words: Minden szó
label_wiki: Wiki
label_wiki_edit: Wiki szerkesztés
label_wiki_edit_plural: Wiki szerkesztések
label_wiki_page: Wiki oldal
label_wiki_page_plural: Wiki oldalak
label_index_by_title: Cím szerint indexelve
label_index_by_date: Dátum szerint indexelve
label_current_version: Jelenlegi verzió
label_preview: Előnézet
label_feed_plural: Visszajelzések
label_changes_details: Változások részletei
label_issue_tracking: Feladat követés
label_spent_time: Ráfordított idő
label_f_hour: %.2f óra
label_f_hour_plural: %.2f óra
label_time_tracking: Idő követés
label_change_plural: Változások
label_statistics: Statisztikák
label_commits_per_month: Commits havonta
label_commits_per_author: Commits szerzőnként
label_view_diff: Különbségek megtekintése
label_diff_inline: inline
label_diff_side_by_side: side by side
label_options: Opciók
label_copy_workflow_from: Workflow másolása innen
label_permissions_report: Jogosultsági riport
label_watched_issues: Megfigyelt feladatok
label_related_issues: Kapcsolódó feladatok
label_applied_status: Alkalmazandó státusz
label_loading: Betöltés...
label_relation_new: Új kapcsolat
label_relation_delete: Kapcsolat törlése
label_relates_to: kapcsolódik
label_duplicates: duplikálja
label_blocks: zárolja
label_blocked_by: zárolta
label_precedes: megelőzi
label_follows: követi
label_end_to_start: végétől indulásig
label_end_to_end: végétől végéig
label_start_to_start: indulástól indulásig
label_start_to_end: indulástól végéig
label_stay_logged_in: Emlékezzen rám
label_disabled: kikapcsolva
label_show_completed_versions: A kész verziók mutatása
label_me: én
label_board: Fórum
label_board_new: Új fórum
label_board_plural: Fórumok
label_topic_plural: Témák
label_message_plural: Üzenetek
label_message_last: Utolsó üzenet
label_message_new: Új üzenet
label_message_posted: Üzenet hozzáadva
label_reply_plural: Válaszok
label_send_information: Fiók infomációk küldése a felhasználónak
label_year: Év
label_month: Hónap
label_week: Hét
label_date_from: 'Kezdet:'
label_date_to: 'Vége:'
label_language_based: A felhasználó nyelve alapján
label_sort_by: %s szerint rendezve
label_send_test_email: Teszt e-mail küldése
label_feeds_access_key_created_on: 'RSS hozzáférési kulcs létrehozva ennyivel ezelőtt: %s'
label_module_plural: Modulok
label_added_time_by: '%s adta hozzá ennyivel ezelőtt: %s'
label_updated_time: 'Utolsó módosítás ennyivel ezelőtt: %s'
label_jump_to_a_project: Ugrás projekthez...
label_file_plural: Fájlok
label_changeset_plural: Changesets
label_default_columns: Alapértelmezett oszlopok
label_no_change_option: (Nincs változás)
label_bulk_edit_selected_issues: A kiválasztott feladatok kötegelt szerkesztése
label_theme: Téma
label_default: Alapértelmezett
label_search_titles_only: Keresés csak a címekben
label_user_mail_option_all: "Minden eseményről minden saját projektemben"
label_user_mail_option_selected: "Minden eseményről a kiválasztott projektekben..."
label_user_mail_option_none: "Csak a megfigyelt dolgokról, vagy, amiben részt veszek"
label_user_mail_no_self_notified: "Nem kérek értesítést az általam végzett módosításokról"
label_registration_activation_by_email: Fiók aktiválása e-mailben
label_registration_manual_activation: Manuális fiók aktiválás
label_registration_automatic_activation: Automatikus fiók aktiválás
label_display_per_page: 'Oldalanként: %s'
label_age: Kor
label_change_properties: Tulajdonságok változtatása
label_general: Általános
label_more: továbbiak
label_scm: SCM
label_plugins: Pluginek
label_ldap_authentication: LDAP azonosítás
label_downloads_abbr: D/L
label_optional_description: Opcionális leírás
label_add_another_file: Újabb fájl hozzáadása
label_preferences: Tulajdonságok
label_chronological_order: Időrendben
label_reverse_chronological_order: Fordított időrendben
label_planning: Tervezés
button_login: Bejelentkezés
button_submit: Elfogad
button_save: Mentés
button_check_all: Mindent kijelöl
button_uncheck_all: Kijelölés törlése
button_delete: Töröl
button_create: Létrehoz
button_test: Teszt
button_edit: Szerkeszt
button_add: Hozzáad
button_change: Változtat
button_apply: Alkalmaz
button_clear: Töröl
button_lock: Zárol
button_unlock: Felold
button_download: Letöltés
button_list: Lista
button_view: Megnéz
button_move: Mozgat
button_back: Vissza
button_cancel: Mégse
button_activate: Aktivál
button_sort: Rendezés
button_log_time: Idő rögzítés
button_rollback: Visszaáll erre a verzióra
button_watch: Megfigyel
button_unwatch: Megfigyelés törlése
button_reply: Válasz
button_archive: Archivál
button_unarchive: Dearchivál
button_reset: Reset
button_rename: Átnevez
button_change_password: Jelszó megváltoztatása
button_copy: Másol
button_annotate: Jegyzetel
button_update: Módosít
button_configure: Konfigurál
status_active: aktív
status_registered: regisztrált
status_locked: zárolt
text_select_mail_notifications: Válasszon eseményeket, amelyekről e-mail értesítést kell küldeni.
text_regexp_info: eg. ^[A-Z0-9]+$
text_min_max_length_info: 0 = nincs korlátozás
text_project_destroy_confirmation: Biztosan törölni szeretné a projektet és vele együtt minden kapcsolódó adatot ?
text_subprojects_destroy_warning: 'Az alprojekt(ek): %s szintén törlésre kerülnek.'
text_workflow_edit: Válasszon egy szerepkört, és egy trackert a workflow szerkesztéséhez
text_are_you_sure: Biztos benne ?
text_journal_changed: "változás: %s volt, %s lett"
text_journal_set_to: "beállítva: %s"
text_journal_deleted: törölve
text_tip_task_begin_day: a feladat ezen a napon kezdődik
text_tip_task_end_day: a feladat ezen a napon ér véget
text_tip_task_begin_end_day: a feladat ezen a napon kezdődik és ér véget
text_project_identifier_info: 'Kis betűk (a-z), számok és kötőjel megengedett.<br />Mentés után az azonosítót megváltoztatni nem lehet.'
text_caracters_maximum: maximum %d karakter.
text_caracters_minimum: Legkevesebb %d karakter hosszúnek kell lennie.
text_length_between: Legalább %d és legfeljebb %d hosszú karakter.
text_tracker_no_workflow: Nincs workflow definiálva ehhez a tracker-hez
text_unallowed_characters: Tiltott karakterek
text_comma_separated: Több érték megengedett (vesszővel elválasztva)
text_issues_ref_in_commit_messages: Hivatkozás feladatokra, feladatok javítása a commit üzenetekben
text_issue_added: %s feladat bejelentve.
text_issue_updated: %s feladat frissítve.
text_wiki_destroy_confirmation: Biztosan törölni szeretné ezt a wiki-t minden tartalmával együtt ?
text_issue_category_destroy_question: Néhány feladat (%d) hozzá van rendelve ehhez a kategóriához. Mit szeretne tenni ?
text_issue_category_destroy_assignments: Kategória hozzárendelés megszűntetése
text_issue_category_reassign_to: Feladatok újra hozzárendelése a kategóriához
text_user_mail_option: "A nem kiválasztott projektekről csak akkor kap értesítést, ha figyelést kér rá, vagy részt vesz benne (pl. Ön a létrehozó, vagy a hozzárendelő)"
text_no_configuration_data: "Szerepkörök, trackerek, feladat státuszok, és workflow adatok még nincsenek konfigurálva.\nErősen ajánlott, az alapértelmezett konfiguráció betöltése, és utána módosíthatja azt."
text_load_default_configuration: Alapértelmezett konfiguráció betöltése
text_status_changed_by_changeset: Applied in changeset %s.
text_issues_destroy_confirmation: 'Biztos benne, hogy törölni szeretné a kijelölt feladato(ka)t ?'
text_select_project_modules: 'Válassza ki az engedélyezett modulokat ehhez a projekthez:'
text_default_administrator_account_changed: Alapértelmezett adminisztrátor fiók megváltoztatva
text_file_repository_writable: Fájl tároló írható
text_rmagick_available: RMagick elérhető (opcionális)
text_destroy_time_entries_question: %.02f órányi munka van rögzítve a feladatokon, amiket törölni szeretne. Mit szeretne tenni ?
text_destroy_time_entries: A rögzített órák törlése
text_assign_time_entries_to_project: A rögzített órák hozzárendelése a projekthez
text_reassign_time_entries: 'A rögzített órák újra hozzárendelése ehhez a feladathoz:'
default_role_manager: Vezető
default_role_developper: Fejlesztő
default_role_reporter: Bejelentő
default_tracker_bug: Hiba
default_tracker_feature: Fejlesztés
default_tracker_support: Support
default_issue_status_new: Új
default_issue_status_assigned: Kiosztva
default_issue_status_resolved: Megoldva
default_issue_status_feedback: Visszajelzés
default_issue_status_closed: Lezárt
default_issue_status_rejected: Elutasított
default_doc_category_user: Felhasználói dokumentáció
default_doc_category_tech: Technikai dokumentáció
default_priority_low: Alacsony
default_priority_normal: Normál
default_priority_high: Magas
default_priority_urgent: Sürgős
default_priority_immediate: Azonnal
default_activity_design: Tervezés
default_activity_development: Fejlesztés
enumeration_issue_priorities: Feladat prioritások
enumeration_doc_categories: Dokumentum kategóriák
enumeration_activities: Tevékenységek (idő rögzítés)
mail_body_reminder: "%d neked kiosztott feladat határidős az elkövetkező %d napban:"
mail_subject_reminder: "%d feladat határidős az elkövetkező napokban"
text_user_wrote: '%s írta:'
label_duplicated_by: duplikálta

View File

@@ -554,7 +554,7 @@ enumeration_issue_priorities: Darbo prioritetai
enumeration_doc_categories: Dokumento kategorijos
enumeration_activities: Veiklos (laiko sekimas)
label_display_per_page: '%s įrašų puslapyje'
setting_per_page_options: Objects per page options
setting_per_page_options: Įrašų puslapyje nustatimas
notice_default_data_loaded: Numatytoji konfiguracija sėkmingai užkrauta.
label_age: Amžius
label_general: Bendri
@@ -578,44 +578,46 @@ label_document_added: Dokumentas pridėtas
label_message_posted: Pranešimas pridėtas
label_file_added: Byla pridėta
label_news_added: Naujiena pridėta
project_module_boards: Boards
project_module_issue_tracking: Issue tracking
project_module_boards: Forumai
project_module_issue_tracking: Darbu pėdsekys
project_module_wiki: Wiki
project_module_files: Files
project_module_documents: Documents
project_module_repository: Repository
project_module_news: News
project_module_time_tracking: Time tracking
text_file_repository_writable: File repository writable
text_default_administrator_account_changed: Default administrator account changed
text_rmagick_available: RMagick available (optional)
button_configure: Configure
project_module_files: Rinkmenos
project_module_documents: Dokumentai
project_module_repository: Saugykla
project_module_news: Žinios
project_module_time_tracking: Laiko pėdsekys
text_file_repository_writable: Į rinkmenu saugyklą galima saugoti (RW)
text_default_administrator_account_changed: Administratoriaus numatyta paskyra pakeista
text_rmagick_available: RMagick pasiekiamas (pasirinktinai)
button_configure: Konfiguruoti
label_plugins: Plugins
label_ldap_authentication: LDAP authentication
label_downloads_abbr: D/L
label_this_month: this month
label_last_n_days: last %d days
label_all_time: all time
label_this_year: this year
label_date_range: Date range
label_last_week: last week
label_yesterday: yesterday
label_last_month: last month
label_add_another_file: Add another file
label_optional_description: Optional description
text_destroy_time_entries_question: %.02f hours were reported on the issues you are about to delete. What do you want to do ?
error_issue_not_found_in_project: 'The issue was not found or does not belong to this project'
text_assign_time_entries_to_project: Assign reported hours to the project
text_destroy_time_entries: Delete reported hours
text_reassign_time_entries: 'Reassign reported hours to this issue:'
setting_activity_days_default: Days displayed on project activity
label_chronological_order: In chronological order
field_comments_sorting: Display comments
label_reverse_chronological_order: In reverse chronological order
label_preferences: Preferences
setting_display_subprojects_issues: Display subprojects issues on main projects by default
label_overall_activity: Overall activity
setting_default_projects_public: New projects are public by default
error_scm_annotate: "The entry does not exist or can not be annotated."
label_planning: Planning
text_subprojects_destroy_warning: 'Its subproject(s): %s will be also deleted.'
label_ldap_authentication: LDAP autentifikacija
label_downloads_abbr: siunt.
label_this_month: šis menuo
label_last_n_days: paskutinių %d dienų
label_all_time: visas laikas
label_this_year: šiemet
label_date_range: Dienų diapazonas
label_last_week: paskutinė savaitė
label_yesterday: vakar
label_last_month: paskutinis menuo
label_add_another_file: Pridėti kitą bylą
label_optional_description: Apibūdinimas (laisvai pasirenkamas)
text_destroy_time_entries_question: Naikinamam darbui paskelbta %.02f valandų. Ką jūs noryte su jomis daryti?
error_issue_not_found_in_project: 'Darbas nerastas arba nesurištas su šiuo projektu'
text_assign_time_entries_to_project: Priskirti valandas prie projekto
text_destroy_time_entries: Ištrinti paskelbtas valandas
text_reassign_time_entries: 'Priskirti paskelbtas valandas šiam darbui:'
setting_activity_days_default: Atvaizduojamos dienos projekto veikloje
label_chronological_order: Chronologine tvarka
field_comments_sorting: rodyti komentarus
label_reverse_chronological_order: Atbuline chronologine tvarka
label_preferences: Savybės
setting_display_subprojects_issues: Pagal nutylėjimą rodyti subprojektų darbus pagrindiniame projekte
label_overall_activity: Visa veikla
setting_default_projects_public: Naujas projektas viešas pagal nutylėjimą
error_scm_annotate: "Įrašas neegzituoja arba negalima jo atvaizduoti."
label_planning: Planavimas
text_subprojects_destroy_warning: 'Šis(ie) subprojektas(ai): %s taip pat bus ištrintas(i).'
label_and_its_subprojects: %s projektas ir jo subprojektai

View File

@@ -91,6 +91,8 @@ mail_body_account_information_external: Du kan bruke din "%s"-konto for å logge
mail_body_account_information: Informasjon om din konto
mail_subject_account_activation_request: %s kontoaktivering
mail_body_account_activation_request: 'En ny bruker (%s) er registrert, og avventer din godkjenning:'
mail_subject_reminder: "%d sak(er) har frist de kommende dagene"
mail_body_reminder: "%d sak(er) som er tildelt deg har frist de kommende %d dager:"
gui_validation_error: 1 feil
gui_validation_error_plural: %d feil
@@ -291,6 +293,7 @@ label_auth_source: Autentifikasjonsmodus
label_auth_source_new: Ny autentifikasjonmodus
label_auth_source_plural: Autentifikasjonsmoduser
label_subproject_plural: Underprosjekter
label_and_its_subprojects: %s og dets underprosjekter
label_min_max_length: Min.-maks. lengde
label_list: Liste
label_date: Dato
@@ -444,7 +447,8 @@ label_loading: Laster...
label_relation_new: Ny relasjon
label_relation_delete: Slett relasjon
label_relates_to: relatert til
label_duplicates: duplikater
label_duplicates: dupliserer
label_duplicated_by: duplisert av
label_blocks: blokkerer
label_blocked_by: blokkert av
label_precedes: kommer før
@@ -557,7 +561,7 @@ text_select_mail_notifications: Velg hendelser som skal varsles med e-post.
text_regexp_info: eg. ^[A-Z0-9]+$
text_min_max_length_info: 0 betyr ingen begrensning
text_project_destroy_confirmation: Er du sikker på at du vil slette dette prosjekter og alle relatert data ?
text_subprojects_destroy_warning: 'Underprojekt(ene): %s vil også bli slettet.'
text_subprojects_destroy_warning: 'Underprojekt(ene): %s vil også bli slettet.'
text_workflow_edit: Velg en rolle og en sakstype for å endre arbeidsflyten
text_are_you_sure: Er du sikker ?
text_journal_changed: endret fra %s til %s
@@ -593,6 +597,7 @@ text_destroy_time_entries_question: %.02f timer er ført på sakene du er i ferd
text_destroy_time_entries: Slett førte timer
text_assign_time_entries_to_project: Overfør førte timer til prosjektet
text_reassign_time_entries: 'Overfør førte timer til denne saken:'
text_user_wrote: '%s skrev:'
default_role_manager: Leder
default_role_developper: Utvikler

View File

@@ -70,7 +70,7 @@ notice_file_not_found: Strona do której próbujesz się dostać nie istnieje lu
notice_locking_conflict: Dane poprawione przez innego użytkownika.
notice_not_authorized: Nie jesteś autoryzowany by zobaczyć stronę.
error_scm_not_found: "Wejście i/lub zmiana nie istnieje w repozytorium."
error_scm_not_found: "Obiekt lub wersja nie zostały znalezione w repozytorium."
error_scm_command_failed: "An error occurred when trying to access the repository: %s"
mail_subject_lost_password: Twoje hasło do %s
@@ -114,12 +114,12 @@ field_subject: Temat
field_due_date: Data oddania
field_assigned_to: Przydzielony do
field_priority: Priorytet
field_fixed_version: Target version
field_fixed_version: Wersja docelowa
field_user: Użytkownik
field_role: Rola
field_homepage: Strona www
field_is_public: Publiczny
field_parent: Podprojekt
field_parent: Nadprojekt
field_is_in_chlog: Zagadnienie pokazywane w zapisie zmian
field_is_in_roadmap: Zagadnienie pokazywane na mapie
field_login: Login
@@ -172,10 +172,10 @@ setting_host_name: Nazwa hosta
setting_text_formatting: Formatowanie tekstu
setting_wiki_compression: Kompresja historii Wiki
setting_feeds_limit: Limit danych RSS
setting_autofetch_changesets: Auto-odświeżanie CVS
setting_autofetch_changesets: Automatyczne pobieranie zmian
setting_sys_api_enabled: Włączenie WS do zarządzania repozytorium
setting_commit_ref_keywords: Terminy odnoszące (CVS)
setting_commit_fix_keywords: Terminy ustalające (CVS)
setting_commit_ref_keywords: Słowa tworzące powiązania
setting_commit_fix_keywords: Słowa zmieniające status
setting_autologin: Auto logowanie
setting_date_format: Format daty
@@ -328,14 +328,14 @@ label_repository: Repozytorium
label_browse: Przegląd
label_modification: %d modyfikacja
label_modification_plural: %d modyfikacja
label_revision: Zmiana
label_revision_plural: Zmiany
label_revision: Rewizja
label_revision_plural: Rewizje
label_added: dodane
label_modified: zmodufikowane
label_modified: zmodyfikowane
label_deleted: usunięte
label_latest_revision: Ostatnia zmiana
label_latest_revision_plural: Ostatnie zmiany
label_view_revisions: Pokaż zmiany
label_latest_revision: Najnowsza rewizja
label_latest_revision_plural: Najnowsze rewizje
label_view_revisions: Pokaż rewizje
label_max_size: Maksymalny rozmiar
label_on: 'z'
label_sort_highest: Przesuń na górę
@@ -366,8 +366,8 @@ label_f_hour_plural: %.2f godzin
label_time_tracking: Śledzenie czasu
label_change_plural: Zmiany
label_statistics: Statystyki
label_commits_per_month: Wrzutek CVS w miesiącu
label_commits_per_author: Wrzutek CVS przez autora
label_commits_per_month: Zatwierdzenia według miesięcy
label_commits_per_author: Zatwierdzenia według autorów
label_view_diff: Pokaż różnice
label_diff_inline: w linii
label_diff_side_by_side: obok siebie
@@ -463,13 +463,13 @@ text_length_between: Długość pomiędzy %d i %d znaków.
text_tracker_no_workflow: Brak przepływu zefiniowanego dla tego typu zagadnienia
text_unallowed_characters: Niedozwolone znaki
text_comma_separated: Wielokrotne wartości dozwolone (rozdzielone przecinkami).
text_issues_ref_in_commit_messages: Zagadnienia odnoszące i ustalające we wrzutkach CVS
text_issues_ref_in_commit_messages: Odwołania do zagadnień w komentarzach zatwierdzeń
default_role_manager: Kierownik
default_role_developper: Programista
default_role_reporter: Wprowadzajacy
default_tracker_bug: Błąd
default_tracker_feature: Cecha
default_tracker_feature: Zadanie
default_tracker_support: Wsparcie
default_issue_status_new: Nowy
default_issue_status_assigned: Przypisany
@@ -483,7 +483,7 @@ default_priority_low: Niski
default_priority_normal: Normalny
default_priority_high: Wysoki
default_priority_urgent: Pilny
default_priority_immediate: Natyczmiastowy
default_priority_immediate: Natychmiastowy
default_activity_design: Projektowanie
default_activity_development: Rozwój

View File

@@ -1,140 +1,140 @@
_gloc_rule_default: '|n| n==1 ? "" : "_plural" '
actionview_datehelper_select_day_prefix:
actionview_datehelper_select_month_names: Janeiro,Fevereiro,Marco,Abrill,Maio,Junho,Julho,Agosto,Setembro,Outubro,Novembro,Dezembro
actionview_datehelper_select_month_names: Janeiro,Fevereiro,Março,Abrill,Maio,Junho,Julho,Agosto,Setembro,Outubro,Novembro,Dezembro
actionview_datehelper_select_month_names_abbr: Jan,Fev,Mar,Abr,Mai,Jun,Jul,Ago,Set,Out,Nov,Dez
actionview_datehelper_select_month_prefix:
actionview_datehelper_select_year_prefix:
actionview_datehelper_time_in_words_day: 1 dia
actionview_datehelper_time_in_words_day_plural: %d dias
actionview_datehelper_time_in_words_hour_about: sobre uma hora
actionview_datehelper_time_in_words_hour_about_plural: sobra %d horas
actionview_datehelper_time_in_words_hour_about_single: sobre uma hora
actionview_datehelper_time_in_words_hour_about: aproximadamente uma hora
actionview_datehelper_time_in_words_hour_about_plural: aproximadamente %d horas
actionview_datehelper_time_in_words_hour_about_single: aproximadamente uma hora
actionview_datehelper_time_in_words_minute: 1 minuto
actionview_datehelper_time_in_words_minute_half: meio minuto
actionview_datehelper_time_in_words_minute_less_than: menos que um minuto
actionview_datehelper_time_in_words_minute_less_than: menos de um minuto
actionview_datehelper_time_in_words_minute_plural: %d minutos
actionview_datehelper_time_in_words_minute_single: 1 minuto
actionview_datehelper_time_in_words_second_less_than: menos que um segundo
actionview_datehelper_time_in_words_second_less_than_plural: menos que %d segundos
actionview_datehelper_time_in_words_second_less_than: menos de um segundo
actionview_datehelper_time_in_words_second_less_than_plural: menos de %d segundos
actionview_instancetag_blank_option: Selecione
activerecord_error_inclusion: nao esta incluido na lista
activerecord_error_exclusion: esta reservado
activerecord_error_invalid: e invalido
activerecord_error_confirmation: confirmacao nao confere
activerecord_error_inclusion: não está incluso na lista
activerecord_error_exclusion: está reservado
activerecord_error_invalid: é inválido
activerecord_error_confirmation: confirmação não confere
activerecord_error_accepted: deve ser aceito
activerecord_error_empty: nao pode ser vazio
activerecord_error_blank: nao pode estar em branco
activerecord_error_too_long: e muito longo
activerecord_error_too_short: e muito comprido
activerecord_error_wrong_length: esta com o comprimento errado
activerecord_error_taken: ja esta examinado
activerecord_error_not_a_number: nao e um numero
activerecord_error_not_a_date: nao e uma data valida
activerecord_error_empty: não pode ser vazio
activerecord_error_blank: não pode estar em branco
activerecord_error_too_long: é muito longo
activerecord_error_too_short: é muito curto
activerecord_error_wrong_length: esta com o tamanho errado
activerecord_error_taken: já foi obtido
activerecord_error_not_a_number: não é um numero
activerecord_error_not_a_date: não é uma data valida
activerecord_error_greater_than_start_date: deve ser maior que a data inicial
activerecord_error_not_same_project: doesn't belong to the same project
activerecord_error_circular_dependency: This relation would create a circular dependency
activerecord_error_not_same_project: não pode pertencer ao mesmo projeto
activerecord_error_circular_dependency: Esta relação geraria uma dependência circular
general_fmt_age: %d yr
general_fmt_age_plural: %d yrs
general_fmt_date: %%m/%%d/%%Y
general_fmt_datetime: %%m/%%d/%%Y %%I:%%M %%p
general_fmt_age: %d ano
general_fmt_age_plural: %d anos
general_fmt_date: %%d/%%m/%%Y
general_fmt_datetime: %%d/%%m/%%Y %%I:%%M %%p
general_fmt_datetime_short: %%b %%d, %%I:%%M %%p
general_fmt_time: %%I:%%M %%p
general_text_No: 'Nao'
general_text_No: 'Não'
general_text_Yes: 'Sim'
general_text_no: 'nao'
general_text_no: 'não'
general_text_yes: 'sim'
general_lang_name: 'Portugues Brasileiro'
general_lang_name: 'Português(Brasil)'
general_csv_separator: ','
general_csv_encoding: ISO-8859-1
general_pdf_encoding: ISO-8859-1
general_day_names: Segunda,Terca,Quarta,Quinta,Sexta,Sabado,Domingo
general_day_names: Segunda,Terça,Quarta,Quinta,Sexta,Sabado,Domingo
general_first_day_of_week: '1'
notice_account_updated: Conta foi alterada com sucesso.
notice_account_invalid_creditentials: Usuario ou senha invalido.
notice_account_password_updated: Senha foi alterada com sucesso.
notice_account_wrong_password: Senha errada.
notice_account_register_done: Conta foi criada com sucesso.
notice_account_unknown_email: Usuario desconhecido.
notice_can_t_change_password: Esta conta usa autenticacao externa. E impossivel trocar a senha.
notice_account_lost_email_sent: Um email com instrucoes para escolher uma nova senha foi enviado para voce.
notice_account_activated: Sua conta foi ativada. Voce pode logar agora
notice_account_invalid_creditentials: Usuário ou senha inválido.
notice_account_password_updated: Senha alterada com sucesso.
notice_account_wrong_password: Senha inválida.
notice_account_register_done: Conta criada com sucesso.
notice_account_unknown_email: Usuário desconhecido.
notice_can_t_change_password: Esta conta usa autenticação externa. E impossível alterar a senha.
notice_account_lost_email_sent: Um email com instruções para escolher uma nova senha foi enviado para você.
notice_account_activated: Sua conta foi ativada. Você pode acessá-la agora.
notice_successful_create: Criado com sucesso.
notice_successful_update: Alterado com sucesso.
notice_successful_delete: Apagado com sucesso.
notice_successful_delete: Excluído com sucesso.
notice_successful_connection: Conectado com sucesso.
notice_file_not_found: A pagina que voce esta tentando acessar nao existe ou foi excluida.
notice_locking_conflict: Os dados foram atualizados por um outro usuario.
notice_not_authorized: You are not authorized to access this page.
notice_email_sent: An email was sent to %s
notice_email_error: An error occurred while sending mail (%s)
notice_feeds_access_key_reseted: Your RSS access key was reseted.
notice_file_not_found: A página que você está tentando acessar não existe ou foi excluída.
notice_locking_conflict: Os dados foram atualizados por outro usuário.
notice_not_authorized: Você não está autorizado a acessar esta página.
notice_email_sent: Um email foi enviado para %s
notice_email_error: Um erro ocorreu ao enviar o email (%s)
notice_feeds_access_key_reseted: Sua chave RSS foi reconfigurada.
error_scm_not_found: "A entrada e/ou a revisao nao existem no repositorio."
error_scm_command_failed: "An error occurred when trying to access the repository: %s"
error_scm_not_found: "A entrada e/ou a revisão não existe no repositório."
error_scm_command_failed: "Ocorreu um erro ao tentar acessar o repositório: %s"
mail_subject_lost_password: Sua senha do %s.
mail_body_lost_password: 'Para mudar sua senha, clique no link abaixo:'
mail_subject_register: Ativacao de conta do %s.
mail_subject_register: Ativação de conta do %s.
mail_body_register: 'Para ativar sua conta, clique no link abaixo:'
gui_validation_error: 1 erro
gui_validation_error_plural: %d erros
field_name: Nome
field_description: Descricao
field_summary: Sumario
field_is_required: Obrigatorio
field_description: Descrição
field_summary: Resumo
field_is_required: Obrigatório
field_firstname: Primeiro nome
field_lastname: Ultimo nome
field_lastname: Último nome
field_mail: Email
field_filename: Arquivo
field_filesize: Tamanho
field_downloads: Downloads
field_author: Autor
field_created_on: Criado
field_updated_on: Alterado
field_created_on: Criado em
field_updated_on: Alterado em
field_field_format: Formato
field_is_for_all: Para todos os projetos
field_possible_values: Possiveis valores
field_regexp: Expressao regular
field_min_length: Tamanho minimo
field_max_length: Tamanho maximo
field_possible_values: Possíveis valores
field_regexp: Expressão regular
field_min_length: Tamanho mínimo
field_max_length: Tamanho máximo
field_value: Valor
field_category: Categoria
field_title: Titulo
field_title: Título
field_project: Projeto
field_issue: Tarefa
field_issue: Ticket
field_status: Status
field_notes: Notas
field_is_closed: Tarefa fechada
field_is_default: Status padrao
field_is_closed: Ticket fechado
field_is_default: Status padrão
field_tracker: Tipo
field_subject: Titulo
field_due_date: Data devida
field_assigned_to: Atribuido para
field_subject: Título
field_due_date: Data prevista
field_assigned_to: Atribuído para
field_priority: Prioridade
field_fixed_version: Target version
field_user: Usuario
field_role: Regra
field_homepage: Pagina inicial
field_is_public: Publico
field_fixed_version: Versão
field_user: Usuário
field_role: Papel
field_homepage: Página inicial
field_is_public: Público
field_parent: Sub-projeto de
field_is_in_chlog: Tarefas mostradas no changelog
field_is_in_roadmap: Tarefas mostradas no roadmap
field_is_in_chlog: Tarefas exibidas no registro de alterações
field_is_in_roadmap: Tarefas exibidas no planejamento
field_login: Login
field_mail_notification: Notificacoes por email
field_mail_notification: Notificações por email
field_admin: Administrador
field_last_login_on: Ultima conexao
field_language: Lingua
field_last_login_on: Última conexão
field_language: Idioma
field_effective_date: Data
field_password: Senha
field_new_password: Nova senha
field_password_confirmation: Confirmacao
field_version: Versao
field_password_confirmation: Confirmação
field_version: Versão
field_type: Tipo
field_host: Servidor
field_port: Porta
@@ -142,116 +142,116 @@ field_account: Conta
field_base_dn: Base DN
field_attr_login: Atributo login
field_attr_firstname: Atributo primeiro nome
field_attr_lastname: Atributo ultimo nome
field_attr_lastname: Atributo último nome
field_attr_mail: Atributo email
field_onthefly: Criacao de usuario on-the-fly
field_start_date: Inicio
field_onthefly: Criação automática de usuário
field_start_date: Início
field_done_ratio: %% Terminado
field_auth_source: Modo de autenticacao
field_hide_mail: Esconder meu email
field_comments: Comentario
field_auth_source: Modo de autenticação
field_hide_mail: Ocultar meu email
field_comments: Comentário
field_url: URL
field_start_page: Pagina inicial
field_start_page: Página inicial
field_subproject: Sub-projeto
field_hours: Horas
field_activity: Atividade
field_spent_on: Data
field_identifier: Identificador
field_is_filter: Used as a filter
field_issue_to_id: Related issue
field_delay: Delay
field_assignable: Issues can be assigned to this role
field_redirect_existing_links: Redirect existing links
field_estimated_hours: Estimated time
field_default_value: Padrao
field_is_filter: É um filtro
field_issue_to_id: Ticket relacionado
field_delay: Espera
field_assignable: Tickets podem ser atribuídos para este papel
field_redirect_existing_links: Redirecionar links existentes
field_estimated_hours: Tempo estimado
field_default_value: Padrão
setting_app_title: Titulo da aplicacao
setting_app_subtitle: Sub-titulo da aplicacao
setting_welcome_text: Texto de boa-vinda
setting_default_language: Lingua padrao
setting_login_required: Autenticacao obrigatoria
setting_self_registration: Registro de si mesmo permitido
setting_attachment_max_size: Tamanho maximo do anexo
setting_issues_export_limit: Limite de exportacao das tarefas
setting_app_title: Título da aplicação
setting_app_subtitle: Sub-título da aplicação
setting_welcome_text: Texto de boas-vindas
setting_default_language: Idioma padrão
setting_login_required: Autenticação obrigatória
setting_self_registration: Permitido Auto-registro
setting_attachment_max_size: Tamanho máximo do anexo
setting_issues_export_limit: Limite de exportação das tarefas
setting_mail_from: Email enviado de
setting_host_name: Servidor
setting_text_formatting: Formato do texto
setting_wiki_compression: Compactacao do historio do Wiki
setting_wiki_compression: Compactação de histórico do Wiki
setting_feeds_limit: Limite do Feed
setting_autofetch_changesets: Autofetch commits
setting_sys_api_enabled: Ativa WS para gerenciamento do repositorio
setting_commit_ref_keywords: Referencing keywords
setting_commit_fix_keywords: Fixing keywords
setting_autologin: Autologin
setting_date_format: Date format
setting_cross_project_issue_relations: Allow cross-project issue relations
setting_autofetch_changesets: Auto-obter commits
setting_sys_api_enabled: Ativa WS para gerenciamento do repositório
setting_commit_ref_keywords: Palavras de referência
setting_commit_fix_keywords: Palavras de fechamento
setting_autologin: Auto-login
setting_date_format: Formato da data
setting_cross_project_issue_relations: Permitir relacionar tickets entre projetos
label_user: Usuario
label_user_plural: Usuarios
label_user_new: Novo usuario
label_user: Usuário
label_user_plural: Usuários
label_user_new: Novo usuário
label_project: Projeto
label_project_new: Novo projeto
label_project_plural: Projetos
label_project_all: All Projects
label_project_latest: Ultimos projetos
label_issue: Tarefa
label_issue_new: Nova tarefa
label_issue_plural: Tarefas
label_issue_view_all: Ver todas as tarefas
label_project_all: Todos os projetos
label_project_latest: Últimos projetos
label_issue: Ticket
label_issue_new: Novo ticket
label_issue_plural: Tickets
label_issue_view_all: Ver todos os tickets
label_document: Documento
label_document_new: Novo documento
label_document_plural: Documentos
label_role: Regra
label_role_plural: Regras
label_role_new: Nova regra
label_role_and_permissions: Regras e permissoes
label_role: Papel
label_role_plural: Papéis
label_role_new: Novo papel
label_role_and_permissions: Papéis e permissões
label_member: Membro
label_member_new: Novo membro
label_member_plural: Membros
label_tracker: Tipo
label_tracker_plural: Tipos
label_tracker: Tipo de ticket
label_tracker_plural: Tipos de ticket
label_tracker_new: Novo tipo
label_workflow: Workflow
label_issue_status: Status da tarefa
label_issue_status_plural: Status das tarefas
label_issue_status: Status do ticket
label_issue_status_plural: Status dos tickets
label_issue_status_new: Novo status
label_issue_category: Categoria de tarefa
label_issue_category_plural: Categorias de tarefa
label_issue_category: Categoria de ticket
label_issue_category_plural: Categorias de tickets
label_issue_category_new: Nova categoria
label_custom_field: Campo personalizado
label_custom_field_plural: Campos personalizado
label_custom_field_plural: Campos personalizados
label_custom_field_new: Novo campo personalizado
label_enumerations: Enumeracao
label_enumeration_new: Novo valor
label_information: Informacao
label_information_plural: Informacoes
label_please_login: Efetue login
label_enumerations: 'Tipos & Categorias'
label_enumeration_new: Novo
label_information: Informação
label_information_plural: Informações
label_please_login: Efetue o login
label_register: Registre-se
label_password_lost: Perdi a senha
label_home: Pagina inicial
label_my_page: Minha pagina
label_password_lost: Perdi minha senha
label_home: Página inicial
label_my_page: Minha página
label_my_account: Minha conta
label_my_projects: Meus projetos
label_administration: Administracao
label_login: Login
label_logout: Logout
label_administration: Administração
label_login: Entrar
label_logout: Sair
label_help: Ajuda
label_reported_issues: Tarefas reportadas
label_assigned_to_me_issues: Tarefas atribuidas a mim
label_last_login: Utima conexao
label_last_updates: Ultima alteracao
label_last_updates_plural: %d Ultimas alteracoes
label_reported_issues: Tickets reportados
label_assigned_to_me_issues: Meus tickets
label_last_login: Última conexao
label_last_updates: Última alteração
label_last_updates_plural: %d Últimas alterações
label_registered_on: Registrado em
label_activity: Atividade
label_new: Novo
label_logged_as: Logado como
label_logged_as: "Acessando como:"
label_environment: Ambiente
label_authentication: Autenticacao
label_auth_source: Modo de autenticacao
label_auth_source_new: Novo modo de autenticacao
label_auth_source_plural: Modos de autenticacao
label_authentication: Autenticação
label_auth_source: Modo de autenticação
label_auth_source_new: Novo modo de autenticação
label_auth_source_plural: Modos de autenticação
label_subproject_plural: Sub-projetos
label_min_max_length: Tamanho min-max
label_min_max_length: Tamanho mín-máx
label_list: Lista
label_date: Data
label_integer: Inteiro
@@ -262,169 +262,169 @@ label_attribute: Atributo
label_attribute_plural: Atributos
label_download: %d Download
label_download_plural: %d Downloads
label_no_data: Sem dados para mostrar
label_change_status: Mudar status
label_history: Historico
label_no_data: Nenhuma informação disponível
label_change_status: Alterar status
label_history: Histórico
label_attachment: Arquivo
label_attachment_new: Novo arquivo
label_attachment_delete: Apagar arquivo
label_attachment_plural: Arquivos
label_report: Relatorio
label_report_plural: Relatorio
label_news: Noticias
label_news_new: Adicionar noticias
label_news_plural: Noticias
label_news_latest: Ultimas noticias
label_news_view_all: Ver todas as noticias
label_change_log: Change log
label_settings: Ajustes
label_overview: Visao geral
label_version: Versao
label_version_new: Nova versao
label_version_plural: Versoes
label_confirmation: Confirmacao
label_report: Relatório
label_report_plural: Relatório
label_news: Notícia
label_news_new: Adicionar notícias
label_news_plural: Notícias
label_news_latest: Últimas notícias
label_news_view_all: Ver todas as notícias
label_change_log: Registro de alterações
label_settings: Configurações
label_overview: Visão geral
label_version: Versão
label_version_new: Nova versão
label_version_plural: Versões
label_confirmation: Confirmação
label_export_to: Exportar para
label_read: Ler...
label_public_projects: Projetos publicos
label_public_projects: Projetos públicos
label_open_issues: Aberto
label_open_issues_plural: Abertos
label_open_issues_plural: Abertos
label_closed_issues: Fechado
label_closed_issues_plural: Fechados
label_total: Total
label_permissions: Permissoes
label_permissions: Permissões
label_current_status: Status atual
label_new_statuses_allowed: Novo status permitido
label_all: todos
label_none: nenhum
label_next: Proximo
label_next: Próximo
label_previous: Anterior
label_used_by: Usado por
label_details: Detalhes
label_add_note: Adicionar nota
label_per_page: Por pagina
label_calendar: Calendario
label_months_from: Meses de
label_per_page: Por página
label_calendar: Calendário
label_months_from: meses a partir de
label_gantt: Gantt
label_internal: Interno
label_last_changes: utlimas %d mudancas
label_change_view_all: Mostrar todas as mudancas
label_personalize_page: Personalizar esta pagina
label_comment: Comentario
label_comment_plural: Comentarios
label_comment_add: Adicionar comentario
label_comment_added: Comentario adicionado
label_comment_delete: Apagar comentario
label_last_changes: últimas %d alteraçoes
label_change_view_all: Mostrar todas as alteraçoes
label_personalize_page: Personalizar esta página
label_comment: Comentário
label_comment_plural: Comentários
label_comment_add: Adicionar comentário
label_comment_added: Comentário adicionado
label_comment_delete: Apagar comentário
label_query: Consulta personalizada
label_query_plural: Consultas personalizadas
label_query_new: Nova consulta
label_filter_add: Adicionar filtro
label_filter_plural: Filtros
label_equals: e
label_not_equals: nao e
label_in_less_than: e maior que
label_in_more_than: e menor que
label_equals: é
label_not_equals: não é
label_in_less_than: é maior que
label_in_more_than: é menor que
label_in: em
label_today: hoje
label_this_week: this week
label_this_week: esta semana
label_less_than_ago: faz menos de
label_more_than_ago: faz mais de
label_ago: dias atras
label_contains: contem
label_not_contains: nao contem
label_ago: dias atrás
label_contains: contém
label_not_contains: não contem
label_day_plural: dias
label_repository: Repository
label_browse: Browse
label_modification: %d change
label_modification_plural: %d changes
label_revision: Revision
label_revision_plural: Revisions
label_added: added
label_modified: modified
label_deleted: deleted
label_latest_revision: Latest revision
label_latest_revision_plural: Latest revisions
label_view_revisions: View revisions
label_max_size: Maximum size
label_repository: Repositório
label_browse: Procurar
label_modification: %d alteração
label_modification_plural: %d alterações
label_revision: Revisão
label_revision_plural: Revisões
label_added: adicionado
label_modified: modificado
label_deleted: excluído
label_latest_revision: Última revisão
label_latest_revision_plural: Últimas revisões
label_view_revisions: Visualizar revisões
label_max_size: Tamanho máximo
label_on: 'em'
label_sort_highest: Mover para o inicio
label_sort_highest: Mover para o início
label_sort_higher: Mover para cima
label_sort_lower: Mover para baixo
label_sort_lowest: Mover para o fim
label_roadmap: Roadmap
label_roadmap_due_in: Due in
label_roadmap_overdue: %s late
label_roadmap_no_issues: Sem tarefas para essa versao
label_roadmap: Planejamento
label_roadmap_due_in: Previsão em
label_roadmap_overdue: %s atrasado
label_roadmap_no_issues: Sem tickets para esta versão
label_search: Busca
label_result_plural: Resultados
label_all_words: Todas as palavras
label_wiki: Wiki
label_wiki_edit: Wiki edit
label_wiki_edit_plural: Wiki edits
label_wiki_page: Wiki page
label_wiki_page_plural: Wiki pages
label_index_by_title: Index by title
label_index_by_date: Index by date
label_current_version: Versao atual
label_preview: Previa
label_wiki_edit: Editar Wiki
label_wiki_edit_plural: Edições Wiki
label_wiki_page: Página Wiki
label_wiki_page_plural: Páginas Wiki
label_index_by_title: Índice por título
label_index_by_date: Índice por data
label_current_version: Versão atual
label_preview: Pré-visualizar
label_feed_plural: Feeds
label_changes_details: Detalhes de todas as mudancas
label_issue_tracking: Tarefas
label_changes_details: Detalhes de todas as alterações
label_issue_tracking: Tickets
label_spent_time: Tempo gasto
label_f_hour: %.2f hora
label_f_hour_plural: %.2f horas
label_time_tracking: Tempo trabalhado
label_change_plural: Mudancas
label_statistics: Estatisticas
label_commits_per_month: Commits por mes
label_change_plural: Mudanças
label_statistics: Estatísticas
label_commits_per_month: Commits por mês
label_commits_per_author: Commits por autor
label_view_diff: Ver diferencas
label_view_diff: Ver diferenças
label_diff_inline: inline
label_diff_side_by_side: side by side
label_options: Opcoes
label_diff_side_by_side: lado a lado
label_options: Opções
label_copy_workflow_from: Copiar workflow de
label_permissions_report: Relatorio de permissoes
label_watched_issues: Watched issues
label_related_issues: Related issues
label_applied_status: Applied status
label_loading: Loading...
label_relation_new: New relation
label_relation_delete: Delete relation
label_relates_to: related to
label_duplicates: duplicates
label_blocks: blocks
label_blocked_by: blocked by
label_precedes: precedes
label_follows: follows
label_end_to_start: end to start
label_end_to_end: end to end
label_start_to_start: start to start
label_start_to_end: start to end
label_stay_logged_in: Stay logged in
label_disabled: disabled
label_show_completed_versions: Show completed versions
label_me: me
label_board: Forum
label_board_new: New forum
label_board_plural: Forums
label_topic_plural: Topics
label_message_plural: Messages
label_message_last: Last message
label_message_new: New message
label_reply_plural: Replies
label_send_information: Send account information to the user
label_year: Year
label_month: Month
label_week: Week
label_date_from: From
label_date_to: To
label_language_based: Language based
label_sort_by: Sort by %s
label_send_test_email: Send a test email
label_feeds_access_key_created_on: RSS access key created %s ago
label_module_plural: Modules
label_added_time_by: Added by %s %s ago
label_updated_time: Updated %s ago
label_jump_to_a_project: Jump to a project...
label_permissions_report: Relatório de permissões
label_watched_issues: Tickes acompanhados
label_related_issues: Tickets relacionados
label_applied_status: Status aplicado
label_loading: Carregando...
label_relation_new: Nova relação
label_relation_delete: Excluir relação
label_relates_to: relacionado a
label_duplicates: duplicado de
label_blocks: bloqueia
label_blocked_by: bloqueado por
label_precedes: precede
label_follows: segue
label_end_to_start: fim para o início
label_end_to_end: fim para fim
label_start_to_start: início para início
label_start_to_end: início para fim
label_stay_logged_in: Permanecer logado
label_disabled: desabilitado
label_show_completed_versions: Exibir versões completas
label_me: eu
label_board: Fórum
label_board_new: Novo fórum
label_board_plural: Fóruns
label_topic_plural: Tópicos
label_message_plural: Mensagens
label_message_last: Última mensagem
label_message_new: Nova mensagem
label_reply_plural: Respostas
label_send_information: Enviar informação de conta para o usuário
label_year: Ano
label_month: Mês
label_week: Semana
label_date_from: De
label_date_to: Para
label_language_based: Com base no idioma
label_sort_by: Ordenar por %s
label_send_test_email: Enviar um email de teste
label_feeds_access_key_created_on: chave de acesso RSS criada %s atrás
label_module_plural: Módulos
label_added_time_by: Adicionado por %s %s atrás
label_updated_time: Atualizado %s atrás
label_jump_to_a_project: Ir para o projeto...
button_login: Login
button_submit: Enviar
@@ -436,7 +436,7 @@ button_create: Criar
button_test: Testar
button_edit: Editar
button_add: Adicionar
button_change: Mudar
button_change: Alterar
button_apply: Aplicar
button_clear: Limpar
button_lock: Bloquear
@@ -450,59 +450,59 @@ button_cancel: Cancelar
button_activate: Ativar
button_sort: Ordenar
button_log_time: Tempo de trabalho
button_rollback: Voltar para esta versao
button_watch: Watch
button_unwatch: Unwatch
button_reply: Reply
button_archive: Archive
button_unarchive: Unarchive
button_reset: Reset
button_rename: Rename
button_rollback: Voltar para esta versão
button_watch: Acompanhar
button_unwatch: Não Acompanhar
button_reply: Responder
button_archive: Arquivar
button_unarchive: Desarquivar
button_reset: Redefinir
button_rename: Renomear
status_active: ativo
status_registered: registrado
status_locked: bloqueado
text_select_mail_notifications: Selecionar acoes para ser enviado uma notificacao por email
text_regexp_info: eg. ^[A-Z0-9]+$
text_min_max_length_info: 0 siginifica sem restricao
text_project_destroy_confirmation: Voce tem certeza que deseja deletar este projeto e todas os dados relacionados?
text_select_mail_notifications: Selecionar ações para ser enviado uma notificação por email
text_regexp_info: ex. ^[A-Z0-9]+$
text_min_max_length_info: 0 siginifica sem restrição
text_project_destroy_confirmation: Você tem certeza que deseja excluir este projeto e todos os dados relacionados?
text_workflow_edit: Selecione uma regra e um tipo de tarefa para editar o workflow
text_are_you_sure: Voce tem certeza ?
text_are_you_sure: Você tem certeza?
text_journal_changed: alterado de %s para %s
text_journal_set_to: setar para %s
text_journal_deleted: apagado
text_tip_task_begin_day: tarefa comeca neste dia
text_tip_task_begin_day: tarefa inicia neste dia
text_tip_task_end_day: tarefa termina neste dia
text_tip_task_begin_end_day: tarefa comeca e termina neste dia
text_project_identifier_info: 'Letras minusculas (a-z), numeros e tracos permitido.<br />Uma vez salvo, o identificador nao pode ser mudado.'
text_caracters_maximum: %d maximo de caracteres
text_tip_task_begin_end_day: tarefa inicia e termina neste dia
text_project_identifier_info: 'Letras minúsculas (a-z), números e traços permitidos.<br />Uma vez salvo, o identificador não pode ser alterado.'
text_caracters_maximum: ximo %d caracteres
text_length_between: Tamanho entre %d e %d caracteres.
text_tracker_no_workflow: Sem workflow definido para este tipo.
text_unallowed_characters: Unallowed characters
text_comma_separated: Multiple values allowed (comma separated).
text_issues_ref_in_commit_messages: Referencing and fixing issues in commit messages
text_issue_added: Tarefa %s foi incluída (by %s).
text_issue_updated: Tarefa %s foi alterada (by %s).
text_wiki_destroy_confirmation: Are you sure you want to delete this wiki and all its content ?
text_issue_category_destroy_question: Some issues (%d) are assigned to this category. What do you want to do ?
text_issue_category_destroy_assignments: Remove category assignments
text_issue_category_reassign_to: Reassing issues to this category
text_unallowed_characters: Caracteres não permitidos
text_comma_separated: Múltiplos valores são permitidos (separados por vírgula).
text_issues_ref_in_commit_messages: Referenciando e fixando tickets nas mensagens de commit
text_issue_added: Tarefa %s foi incluída (por %s).
text_issue_updated: Tarefa %s foi alterada (por %s).
text_wiki_destroy_confirmation: Você tem certeza que deseja excluir este wiki e todo o seu conteúdo?
text_issue_category_destroy_question: Alguns tickets (%d) estão atribuídos a esta categoria. O que você deseja fazer?
text_issue_category_destroy_assignments: Remover atribuições da categoria
text_issue_category_reassign_to: Redefinir tickets para esta categoria
default_role_manager: Analista de Negocio ou Gerente de Projeto
default_role_manager: Gerente
default_role_developper: Desenvolvedor
default_role_reporter: Analista de Suporte
default_tracker_bug: Bug
default_tracker_feature: Implementacao
default_role_reporter: Informante
default_tracker_bug: Problema
default_tracker_feature: Implementação
default_tracker_support: Suporte
default_issue_status_new: Novo
default_issue_status_assigned: Atribuido
default_issue_status_assigned: Atribuído
default_issue_status_resolved: Resolvido
default_issue_status_feedback: Feedback
default_issue_status_closed: Fechado
default_issue_status_rejected: Rejeitado
default_doc_category_user: Documentacao do usuario
default_doc_category_tech: Documentacao do tecnica
default_doc_category_user: Documentação do usuário
default_doc_category_tech: Documentação técnica
default_priority_low: Baixo
default_priority_normal: Normal
default_priority_high: Alto
@@ -514,107 +514,107 @@ default_activity_development: Desenvolvimento
enumeration_issue_priorities: Prioridade das tarefas
enumeration_doc_categories: Categorias de documento
enumeration_activities: Atividades (time tracking)
label_file_plural: Files
label_file_plural: Arquivos
label_changeset_plural: Changesets
field_column_names: Columns
label_default_columns: Default columns
setting_issue_list_default_columns: Default columns displayed on the issue list
setting_repositories_encodings: Repositories encodings
notice_no_issue_selected: "No issue is selected! Please, check the issues you want to edit."
label_bulk_edit_selected_issues: Bulk edit selected issues
label_no_change_option: (No change)
notice_failed_to_save_issues: "Failed to save %d issue(s) on %d selected: %s."
label_theme: Theme
label_default: Default
label_search_titles_only: Search titles only
label_nobody: nobody
button_change_password: Change password
text_user_mail_option: "For unselected projects, you will only receive notifications about things you watch or you're involved in (eg. issues you're the author or assignee)."
label_user_mail_option_selected: "For any event on the selected projects only..."
label_user_mail_option_all: "For any event on all my projects"
label_user_mail_option_none: "Only for things I watch or I'm involved in"
setting_emails_footer: Emails footer
label_float: Float
button_copy: Copy
mail_body_account_information_external: You can use your "%s" account to log in.
mail_body_account_information: Your account information
setting_protocol: Protocol
label_user_mail_no_self_notified: "I don't want to be notified of changes that I make myself"
setting_time_format: Time format
label_registration_activation_by_email: account activation by email
mail_subject_account_activation_request: %s account activation request
mail_body_account_activation_request: 'A new user (%s) has registered. His account his pending your approval:'
label_registration_automatic_activation: automatic account activation
label_registration_manual_activation: manual account activation
notice_account_pending: "Your account was created and is now pending administrator approval."
field_time_zone: Time zone
text_caracters_minimum: Must be at least %d characters long.
setting_bcc_recipients: Blind carbon copy recipients (bcc)
button_annotate: Annotate
label_issues_by: Issues by %s
field_searchable: Searchable
label_display_per_page: 'Per page: %s'
setting_per_page_options: Objects per page options
label_age: Age
notice_default_data_loaded: Default configuration successfully loaded.
text_load_default_configuration: Load the default configuration
text_no_configuration_data: "Roles, trackers, issue statuses and workflow have not been configured yet.\nIt is highly recommended to load the default configuration. You will be able to modify it once loaded."
error_can_t_load_default_data: "Default configuration could not be loaded: %s"
button_update: Update
label_change_properties: Change properties
label_general: General
label_repository_plural: Repositories
label_associated_revisions: Associated revisions
setting_user_format: Users display format
text_status_changed_by_changeset: Applied in changeset %s.
label_more: More
text_issues_destroy_confirmation: 'Are you sure you want to delete the selected issue(s) ?'
field_column_names: Colunas
label_default_columns: Colunas padrão
setting_issue_list_default_columns: Colunas padrão visíveis na lista de tickets
setting_repositories_encodings: Codificação dos repositórios
notice_no_issue_selected: "Nenhum ticket está selecionado! Por favor, marque os tickets que você deseja alterar."
label_bulk_edit_selected_issues: Edição em massa dos tickets selecionados.
label_no_change_option: (Sem alteração)
notice_failed_to_save_issues: "Problema ao salvar %d ticket(s) no %d selecionado: %s."
label_theme: Tema
label_default: Padrão
label_search_titles_only: Pesquisar somente títulos
label_nobody: ninguém
button_change_password: Alterar senha
text_user_mail_option: "Para projetos não selecionados, você somente receberá notificações sobre o que você acompanha ou está envolvido (ex. tickets que você é autor ou está atribuído)"
label_user_mail_option_selected: "Para qualquer evento somente no(s) projeto(s) selecionado(s)..."
label_user_mail_option_all: "Para qualquer evento em todos os meus projetos"
label_user_mail_option_none: "Somente eventos que eu acompanho ou estou envolvido"
setting_emails_footer: Rodapé dos emails
label_float: Flutuante
button_copy: Copiar
mail_body_account_information_external: Você pode usar sua conta "%s" para entrar.
mail_body_account_information: Informações de sua conta
setting_protocol: Protocolo
label_user_mail_no_self_notified: "Eu não desejo ser notificado de minhas próprias modificações"
setting_time_format: Formato de data
label_registration_activation_by_email: ativação de conta por email
mail_subject_account_activation_request: %s requisição de ativação de conta
mail_body_account_activation_request: 'Um novo usuário (%s) se registrou. A conta está aguardando sua aprovação:'
label_registration_automatic_activation: ativação automática de conta
label_registration_manual_activation: ativação manual de conta
notice_account_pending: "Sua conta foi criada e está aguardando aprovação do administrador."
field_time_zone: Fuso-horário
text_caracters_minimum: Precisa ter ao menos %d caracteres.
setting_bcc_recipients: Destinatários com cópia oculta (cco)
button_annotate: Anotar
label_issues_by: Tickets por %s
field_searchable: Pesquisável
label_display_per_page: 'Por página: %s'
setting_per_page_options: Opções de itens por página
notice_default_data_loaded: Configuração padrão carregada com sucesso.
text_load_default_configuration: Carregar a configuração padrão
text_no_configuration_data: "Os Papéis, tipos de tickets, status de tickets e workflows não foram configurados ainda.\nÉ altamente recomendado carregar as configurações padrão. Você poderá modificar estas configurações assim que carregadas."
error_can_t_load_default_data: "Configuração padrão não pôde ser carregada: %s"
button_update: Atualizar
label_change_properties: Alterar propriedades
label_general: Geral
label_repository_plural: Repositórios
label_associated_revisions: Revisões associadas
setting_user_format: Formato de visualização dos usuários
text_status_changed_by_changeset: Aplicado no changeset %s.
label_more: Mais
text_issues_destroy_confirmation: 'Você tem certeza que deseja excluir o(s) ticket(s) selecionado(s)?'
label_scm: SCM
text_select_project_modules: 'Select modules to enable for this project:'
label_issue_added: Issue added
label_issue_updated: Issue updated
label_document_added: Document added
label_message_posted: Message added
label_file_added: File added
label_news_added: News added
project_module_boards: Boards
project_module_issue_tracking: Issue tracking
text_select_project_modules: 'Selecione módulos para habilitar para este projeto:'
label_issue_added: Ticket adicionado
label_issue_updated: Ticket atualizado
label_document_added: Documento adicionado
label_message_posted: Mensagem enviada
label_file_added: Arquivo adicionado
label_news_added: Notícia adicionada
project_module_boards: Fóruns
project_module_issue_tracking: Gerenciamento de Tickets
project_module_wiki: Wiki
project_module_files: Files
project_module_documents: Documents
project_module_repository: Repository
project_module_news: News
project_module_time_tracking: Time tracking
text_file_repository_writable: File repository writable
text_default_administrator_account_changed: Default administrator account changed
text_rmagick_available: RMagick available (optional)
button_configure: Configure
project_module_files: Arquivos
project_module_documents: Documentos
project_module_repository: Repositório
project_module_news: Notícias
project_module_time_tracking: Gerenciamento de tempo
text_file_repository_writable: Repositório de arquivos gravável
text_default_administrator_account_changed: Conta de administrador padrão modificada
text_rmagick_available: RMagick disponível (opcional)
button_configure: Configuração
label_plugins: Plugins
label_ldap_authentication: LDAP authentication
label_ldap_authentication: autenticação LDAP
label_downloads_abbr: D/L
label_this_month: this month
label_last_n_days: last %d days
label_all_time: all time
label_this_year: this year
label_date_range: Date range
label_last_week: last week
label_yesterday: yesterday
label_last_month: last month
label_add_another_file: Add another file
label_optional_description: Optional description
text_destroy_time_entries_question: %.02f hours were reported on the issues you are about to delete. What do you want to do ?
error_issue_not_found_in_project: 'The issue was not found or does not belong to this project'
text_assign_time_entries_to_project: Assign reported hours to the project
text_destroy_time_entries: Delete reported hours
text_reassign_time_entries: 'Reassign reported hours to this issue:'
setting_activity_days_default: Days displayed on project activity
label_chronological_order: In chronological order
field_comments_sorting: Display comments
label_reverse_chronological_order: In reverse chronological order
label_preferences: Preferences
setting_display_subprojects_issues: Display subprojects issues on main projects by default
label_overall_activity: Overall activity
setting_default_projects_public: New projects are public by default
error_scm_annotate: "The entry does not exist or can not be annotated."
label_planning: Planning
text_subprojects_destroy_warning: 'Its subproject(s): %s will be also deleted.'
label_this_month: este mês
label_last_n_days: últimos %d dias
label_all_time: todo o tempo
label_this_year: este ano
label_date_range: Intervalo de datas
label_last_week: última semana
label_yesterday: ontem
label_last_month: último mês
label_add_another_file: Adicionar outro arquivo
label_optional_description: Descrição opcional
text_destroy_time_entries_question: %.02f horas foram reportadas neste ticket que você está excluindo. O que você deseja fazer?
error_issue_not_found_in_project: 'O ticket não foi encontrado ou não pertence a este projeto'
text_assign_time_entries_to_project: Atribuir horas reportadas para o projeto
text_destroy_time_entries: Excluir horas reportadas
text_reassign_time_entries: 'Redefinir horas reportadas para este ticket:'
setting_activity_days_default: Dias visualizados na atividade do projeto
label_chronological_order: Em ordem cronológica
field_comments_sorting: Visualizar comentários
label_reverse_chronological_order: Em order cronológica reversa
label_preferences: Preferências
setting_display_subprojects_issues: Visualizar tickets dos subprojetos nos projetos principais por padrão
label_overall_activity: Atividade geral
setting_default_projects_public: Novos projetos são públicos por padrão
error_scm_annotate: "Esta entrada não existe ou não pode ser anotada."
label_planning: Planejamento
text_subprojects_destroy_warning: 'Seu(s) subprojeto(s): %s também serão excluídos.'
label_age: Age

View File

@@ -332,7 +332,7 @@ label_internal: Внутренний
label_last_changes: менее %d изменений
label_change_view_all: Просмотреть все изменения
label_personalize_page: Персонализировать данную страницу
label_comment: Комментировать
label_comment: комментарий
label_comment_plural: Комментарии
label_comment_add: Оставить комментарий
label_comment_added: Добавленный комментарий
@@ -621,4 +621,9 @@ label_overall_activity: Сводная активность
setting_default_projects_public: Новые проекты являются публичными
error_scm_annotate: "Данные отсутствуют или не могут быть подписаны."
label_planning: Планирование
text_subprojects_destroy_warning: 'Its subproject(s): %s will be also deleted.'
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: duplicated by

623
lang/th.yml Normal file
View File

@@ -0,0 +1,623 @@
_gloc_rule_default: '|n| n==1 ? "" : "_plural" '
actionview_datehelper_select_day_prefix:
actionview_datehelper_select_month_names: มกราคม,กุมภาพันธ์,มีนาคม,เมษายน,พฤษภาคม,มิถุนายน,กรกฎาคม,สิงหาคม,กันยายน,ตุลาคม,พฤศจิกายน,ธันวาคม
actionview_datehelper_select_month_names_abbr: ม.ค.,ก.พ.,มี.ค.,เม.ย.,พ.ค.,มิ.ย.,ก.ค.,ส.ค.,ก.ย.,ต.ค.,พ.ย.,ธ.ค.
actionview_datehelper_select_month_prefix:
actionview_datehelper_select_year_prefix:
actionview_datehelper_time_in_words_day: 1 วัน
actionview_datehelper_time_in_words_day_plural: %d วัน
actionview_datehelper_time_in_words_hour_about: ประมาณ 1 ชั่วโมง
actionview_datehelper_time_in_words_hour_about_plural: ประมาณ %d ชั่วโมง
actionview_datehelper_time_in_words_hour_about_single: ประมาณ 1 ชั่วโมง
actionview_datehelper_time_in_words_minute: 1 นาที
actionview_datehelper_time_in_words_minute_half: ครึ่งนาที
actionview_datehelper_time_in_words_minute_less_than: ไม่ถึงนาที
actionview_datehelper_time_in_words_minute_plural: %d นาที
actionview_datehelper_time_in_words_minute_single: 1 นาที
actionview_datehelper_time_in_words_second_less_than: ไม่ถึงวินาที
actionview_datehelper_time_in_words_second_less_than_plural: ไม่ถึง %d วินาที
actionview_instancetag_blank_option: กรุณาเลือก
activerecord_error_inclusion: ไม่อยู่ในรายการ
activerecord_error_exclusion: ถูกสงวนไว้
activerecord_error_invalid: ไม่ถูกต้อง
activerecord_error_confirmation: พิมพ์ไม่เหมือนเดิม
activerecord_error_accepted: ต้องยอมรับ
activerecord_error_empty: ต้องเติม
activerecord_error_blank: ต้องเติม
activerecord_error_too_long: ยาวเกินไป
activerecord_error_too_short: สั้นเกินไป
activerecord_error_wrong_length: ความยาวไม่ถูกต้อง
activerecord_error_taken: ถูกใช้ไปแล้ว
activerecord_error_not_a_number: ไม่ใช่ตัวเลข
activerecord_error_not_a_date: ไม่ใช่วันที่ ที่ถูกต้อง
activerecord_error_greater_than_start_date: ต้องมากกว่าวันเริ่ม
activerecord_error_not_same_project: ไม่ได้อยู่ในโครงการเดียวกัน
activerecord_error_circular_dependency: ความสัมพันธ์อ้างอิงเป็นวงกลม
general_fmt_age: %d ปี
general_fmt_age_plural: %d ปี
general_fmt_date: %%d/%%B/%%Y
general_fmt_datetime: %%d/%%B/%%Y %%H:%%M
general_fmt_datetime_short: %%d %%b, %%H:%%M
general_fmt_time: %%H:%%M
general_text_No: 'ไม่'
general_text_Yes: 'ใช่'
general_text_no: 'ไม่'
general_text_yes: 'ใช่'
general_lang_name: 'Thai (ไทย)'
general_csv_separator: ','
general_csv_encoding: Windows-874
general_pdf_encoding: cp874
general_day_names: จันทร์,อังคาร,พุธ,พฤหัสบดี,ศุกร์,เสาร์,อาทิตย์
general_first_day_of_week: '1'
notice_account_updated: บัญชีได้ถูกปรับปรุงแล้ว.
notice_account_invalid_creditentials: ชื้ผู้ใช้หรือรหัสผ่านไม่ถูกต้อง
notice_account_password_updated: รหัสได้ถูกปรับปรุงแล้ว.
notice_account_wrong_password: รหัสผ่านไม่ถูกต้อง
notice_account_register_done: บัญชีถูกสร้างแล้ว. กรุณาเช็คเมล์ แล้วคลิ๊กที่ลิงค์ในอีเมล์เพื่อเปิดใช้บัญชี
notice_account_unknown_email: ไม่มีผู้ใช้ที่ใช้อีเมล์นี้.
notice_can_t_change_password: บัญชีนี้ใช้การยืนยันตัวตนจากแหล่งภายนอก. ไม่สามารถปลี่ยนรหัสผ่านได้.
notice_account_lost_email_sent: เราได้ส่งอีเมล์พร้อมวิธีการสร้างรหัีสผ่านใหม่ให้คุณแล้ว กรุณาเช็คเมล์.
notice_account_activated: บัญชีของคุณได้เปิดใช้แล้ว. ตอนนี้คุณสามารถเข้าสู่ระบบได้แล้ว.
notice_successful_create: สร้างเสร็จแล้ว.
notice_successful_update: ปรับปรุงเสร็จแล้ว.
notice_successful_delete: ลบเสร็จแล้ว.
notice_successful_connection: ติดต่อสำเร็จแล้ว.
notice_file_not_found: หน้าที่คุณต้องการดูไม่มีอยู่จริง หรือถูกลบไปแล้ว.
notice_locking_conflict: ข้อมูลถูกปรับปรุงโดยผู้ใช้คนอื่น.
notice_not_authorized: คุณไม่มีสิทธิเข้าถึงหน้านี้.
notice_email_sent: อีเมล์ได้ถูกส่งถึง %s
notice_email_error: เกิดความผิดพลาดขณะกำส่งอีเมล์ (%s)
notice_feeds_access_key_reseted: RSS access key ของคุณถูก reset แล้ว.
notice_failed_to_save_issues: "%d ปัญหาจาก %d ปัญหาที่ถูกเลือกไม่สามารถจัดเก็บ: %s."
notice_no_issue_selected: "ไม่มีปัญหาที่ถูกเลือก! กรุณาเลือกปัญหาที่คุณต้องการแก้ไข."
notice_account_pending: "บัญชีของคุณสร้างเสร็จแล้ว ขณะนี้รอการอนุมัติจากผู้บริหารจัดการ."
notice_default_data_loaded: ค่าเริ่มต้นโหลดเสร็จแล้ว.
error_can_t_load_default_data: "ค่าเริ่มต้นโหลดไม่สำเร็จ: %s"
error_scm_not_found: "ไม่พบรุ่นที่ต้องการในแหล่งเก็บต้นฉบับ."
error_scm_command_failed: "เกิดความผิดพลาดในการเข้าถึงแหล่งเก็บต้นฉบับ: %s"
error_scm_annotate: "entry ไม่มีอยู่จริง หรือไม่สามารถเขียนหมายเหตุประกอบ."
error_issue_not_found_in_project: 'ไม่พบปัญหานี้ หรือปัญหาไม่ได้อยู่ในโครงการนี้'
mail_subject_lost_password: รหัสผ่าน %s ของคุณ
mail_body_lost_password: 'คลิ๊กที่ลิงค์ต่อไปนี้เพื่อเปลี่ยนรหัสผ่าน:'
mail_subject_register: เปิดบัญชี %s ของคุณ
mail_body_register: 'คลิ๊กที่ลิงค์ต่อไปนี้เพื่อเปลี่ยนรหัสผ่าน:'
mail_body_account_information_external: คุณสามารถใช้บัญชี "%s" เพื่อเข้าสู่ระบบ.
mail_body_account_information: ข้อมูลบัญชีของคุณ
mail_subject_account_activation_request: กรุณาเปิดบัญชี %s
mail_body_account_activation_request: 'ผู้ใช้ใหม่ (%s) ได้ลงทะเบียน. บัญชีของเขากำลังรออนุมัติ:'
gui_validation_error: 1 ข้อผิดพลาด
gui_validation_error_plural: %d ข้อผิดพลาด
field_name: ชื่อ
field_description: รายละเอียด
field_summary: สรุปย่อ
field_is_required: ต้องใส่
field_firstname: ชื่อ
field_lastname: นามสกุล
field_mail: อีเมล์
field_filename: แฟ้ม
field_filesize: ขนาด
field_downloads: ดาวน์โหลด
field_author: ผู้แต่ง
field_created_on: สร้าง
field_updated_on: ปรับปรุง
field_field_format: รูปแบบ
field_is_for_all: สำหรับทุกโครงการ
field_possible_values: ค่าที่เป็นไปได้
field_regexp: Regular expression
field_min_length: สั้นสุด
field_max_length: ยาวสุด
field_value: ค่า
field_category: ประเภท
field_title: ชื่อเรื่อง
field_project: โครงการ
field_issue: ปัญหา
field_status: สถานะ
field_notes: บันทึก
field_is_closed: ปัญหาจบ
field_is_default: ค่าเริ่มต้น
field_tracker: การติดตาม
field_subject: เรื่อง
field_due_date: วันครบกำหนด
field_assigned_to: มอบหมายให้
field_priority: ความสำคัญ
field_fixed_version: รุ่น
field_user: ผู้ใช้
field_role: บทบาท
field_homepage: หน้าแรก
field_is_public: สาธารณะ
field_parent: โครงการย่อยของ
field_is_in_chlog: ปัญหาแสดงใน รายกาเปลี่ยนแปลง
field_is_in_roadmap: ปัญหาแสดงใน แผนงาน
field_login: ชื่อที่ใช้เข้าระบบ
field_mail_notification: การแจ้งเตือนทางอีเมล์
field_admin: ผู้บริหารจัดการ
field_last_login_on: เข้าระบบครั้งสุดท้าย
field_language: ภาษา
field_effective_date: วันที่
field_password: รหัสผ่าน
field_new_password: รหัสผ่านใหม่
field_password_confirmation: ยืนยันรหัสผ่าน
field_version: รุ่น
field_type: ชนิด
field_host: โฮสต์
field_port: พอร์ต
field_account: บัญชี
field_base_dn: Base DN
field_attr_login: เข้าระบบ attribute
field_attr_firstname: ชื่อ attribute
field_attr_lastname: นามสกุล attribute
field_attr_mail: อีเมล์ attribute
field_onthefly: สร้างผู้ใช้ทันที
field_start_date: เริ่ม
field_done_ratio: %% สำเร็จ
field_auth_source: วิธีการยืนยันตัวตน
field_hide_mail: ซ่อนอีเมล์ของฉัน
field_comments: ความเห็น
field_url: URL
field_start_page: หน้าเริ่มต้น
field_subproject: โครงการย่อย
field_hours: ชั่วโมง
field_activity: กิจกรรม
field_spent_on: วันที่
field_identifier: ชื่อเฉพาะ
field_is_filter: ใช้เป็นตัวกรอง
field_issue_to_id: ปัญหาที่เกี่ยวข้อง
field_delay: เลื่อน
field_assignable: ปัญหาสามารถมอบหมายให้คนที่ทำบทบาทนี้
field_redirect_existing_links: ย้ายจุดเชื่อมโยงนี้
field_estimated_hours: เวลาที่ใช้โดยประมาณ
field_column_names: สดมภ์
field_time_zone: ย่านเวลา
field_searchable: ค้นหาได้
field_default_value: ค่าเริ่มต้น
field_comments_sorting: แสดงความเห็น
setting_app_title: ชื่อโปรแกรม
setting_app_subtitle: ชื่อโปรแกรมรอง
setting_welcome_text: ข้อความต้อนรับ
setting_default_language: ภาษาเริ่มต้น
setting_login_required: ต้องป้อนผู้ใช้-รหัสผ่าน
setting_self_registration: ลงทะเบียนด้วยตนเอง
setting_attachment_max_size: ขนาดแฟ้มแนบสูงสุด
setting_issues_export_limit: การส่งออกปัญหาสูงสุด
setting_mail_from: อีเมล์ที่ใช้ส่ง
setting_bcc_recipients: ไม่ระบุชื่อผู้รับ (bcc)
setting_host_name: ชื่อโฮสต์
setting_text_formatting: การจัดรูปแบบข้อความ
setting_wiki_compression: บีบอัดประวัติ Wiki
setting_feeds_limit: จำนวน Feed
setting_default_projects_public: โครงการใหม่มีค่าเริ่มต้นเป็น สาธารณะ
setting_autofetch_changesets: ดึง commits อัตโนมัติ
setting_sys_api_enabled: เปิดใช้ WS สำหรับการจัดการที่เก็บต้นฉบับ
setting_commit_ref_keywords: คำสำคัญ Referencing
setting_commit_fix_keywords: คำสำคัญ Fixing
setting_autologin: เข้าระบบอัตโนมัติ
setting_date_format: รูปแบบวันที่
setting_time_format: รูปแบบเวลา
setting_cross_project_issue_relations: อนุญาตให้ระบุปัญหาข้ามโครงการ
setting_issue_list_default_columns: สดมภ์เริ่มต้นแสดงในรายการปัญหา
setting_repositories_encodings: การเข้ารหัสที่เก็บต้นฉบับ
setting_emails_footer: คำลงท้ายอีเมล์
setting_protocol: Protocol
setting_per_page_options: ตัวเลือกจำนวนต่อหน้า
setting_user_format: รูปแบบการแสดงชื่อผู้ใช้
setting_activity_days_default: จำนวนวันที่แสดงในกิจกรรมของโครงการ
setting_display_subprojects_issues: แสดงปัญหาของโครงการย่อยในโครงการหลัก
project_module_issue_tracking: การติดตามปัญหา
project_module_time_tracking: การใช้เวลา
project_module_news: ข่าว
project_module_documents: เอกสาร
project_module_files: แฟ้ม
project_module_wiki: Wiki
project_module_repository: ที่เก็บต้นฉบับ
project_module_boards: กระดานข้อความ
label_user: ผู้ใช้
label_user_plural: ผู้ใช้
label_user_new: ผู้ใช้ใหม่
label_project: โครงการ
label_project_new: โครงการใหม่
label_project_plural: โครงการ
label_project_all: โครงการทั้งหมด
label_project_latest: โครงการล่าสุด
label_issue: ปัญหา
label_issue_new: ปัญหาใหม่
label_issue_plural: ปัญหา
label_issue_view_all: ดูปัญหาทั้งหมด
label_issues_by: ปัญหาโดย %s
label_issue_added: ปัญหาถูกเพิ่ม
label_issue_updated: ปัญหาถูกปรับปรุง
label_document: เอกสาร
label_document_new: เอกสารใหม่
label_document_plural: เอกสาร
label_document_added: เอกสารถูกเพิ่ม
label_role: บทบาท
label_role_plural: บทบาท
label_role_new: บทบาทใหม่
label_role_and_permissions: บทบาทและสิทธิ
label_member: สมาชิก
label_member_new: สมาชิกใหม่
label_member_plural: สมาชิก
label_tracker: การติดตาม
label_tracker_plural: การติดตาม
label_tracker_new: การติดตามใหม่
label_workflow: ลำดับงาน
label_issue_status: สถานะของปัญหา
label_issue_status_plural: สถานะของปัญหา
label_issue_status_new: สถานะใหม
label_issue_category: ประเภทของปัญหา
label_issue_category_plural: ประเภทของปัญหา
label_issue_category_new: ประเภทใหม่
label_custom_field: เขตข้อมูลแบบระบุเอง
label_custom_field_plural: เขตข้อมูลแบบระบุเอง
label_custom_field_new: สร้างเขตข้อมูลแบบระบุเอง
label_enumerations: รายการ
label_enumeration_new: สร้างใหม่
label_information: ข้อมูล
label_information_plural: ข้อมูล
label_please_login: กรุณาเข้าระบบก่อน
label_register: ลงทะเบียน
label_password_lost: ลืมรหัสผ่าน
label_home: หน้าแรก
label_my_page: หน้าของฉัน
label_my_account: บัญชีของฉัน
label_my_projects: โครงการของฉัน
label_administration: บริหารจัดการ
label_login: เข้าระบบ
label_logout: ออกระบบ
label_help: ช่วยเหลือ
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_activity_plural: กิจกรรม
label_activity_latest: กิจกรรมล่าสุด
label_overall_activity: กิจกรรมโดยรวม
label_new: ใหม่
label_logged_as: เข้าระบบในชื่อ
label_environment: สภาพแวดล้อม
label_authentication: การยืนยันตัวตน
label_auth_source: วิธีการการยืนยันตัวตน
label_auth_source_new: สร้างวิธีการยืนยันตัวตนใหม่
label_auth_source_plural: วิธีการ Authentication
label_subproject_plural: โครงการย่อย
label_min_max_length: สั้น-ยาว สุดที่
label_list: รายการ
label_date: วันที่
label_integer: จำนวนเต็ม
label_float: จำนวนจริง
label_boolean: ถูกผิด
label_string: ข้อความ
label_text: ข้อความขนาดยาว
label_attribute: คุณลักษณะ
label_attribute_plural: คุณลักษณะ
label_download: %d ดาวน์โหลด
label_download_plural: %d ดาวน์โหลด
label_no_data: จำนวนข้อมูลที่แสดง
label_change_status: เปลี่ยนสถานะ
label_history: ประวัติ
label_attachment: แฟ้ม
label_attachment_new: แฟ้มใหม่
label_attachment_delete: ลบแฟ้ม
label_attachment_plural: แฟ้ม
label_file_added: แฟ้มถูกเพิ่ม
label_report: รายงาน
label_report_plural: รายงาน
label_news: ข่าว
label_news_new: เพิ่มข่าว
label_news_plural: ข่าว
label_news_latest: ข่าวล่าสุด
label_news_view_all: ดูข่าวทั้งหมด
label_news_added: ข่าวถูกเพิ่ม
label_change_log: บันทึกการเปลี่ยนแปลง
label_settings: ปรับแต่ง
label_overview: ภาพรวม
label_version: รุ่น
label_version_new: รุ่นใหม่
label_version_plural: รุ่น
label_confirmation: ยืนยัน
label_export_to: 'รูปแบบอื่นๆ :'
label_read: อ่าน...
label_public_projects: โครงการสาธารณะ
label_open_issues: เปิด
label_open_issues_plural: เปิด
label_closed_issues: ปิด
label_closed_issues_plural: ปิด
label_total: จำนวนรวม
label_permissions: สิทธิ
label_current_status: สถานะปัจจุบัน
label_new_statuses_allowed: อนุญาตให้มีสถานะใหม่
label_all: ทั้งหมด
label_none: ไม่มี
label_nobody: ไม่มีใคร
label_next: ต่อไป
label_previous: ก่อนหน้า
label_used_by: ถูกใช้โดย
label_details: รายละเอียด
label_add_note: เพิ่มบันทึก
label_per_page: ต่อหน้า
label_calendar: ปฏิทิน
label_months_from: เดือนจาก
label_gantt: Gantt
label_internal: ภายใน
label_last_changes: last %d เปลี่ยนแปลง
label_change_view_all: ดูการเปลี่ยนแปลงทั้งหมด
label_personalize_page: ปรับแต่งหน้านี้
label_comment: ความเห็น
label_comment_plural: ความเห็น
label_comment_add: เพิ่มความเห็น
label_comment_added: ความเห็นถูกเพิ่ม
label_comment_delete: ลบความเห็น
label_query: แบบสอบถามแบบกำหนดเอง
label_query_plural: แบบสอบถามแบบกำหนดเอง
label_query_new: แบบสอบถามใหม่
label_filter_add: เพิ่มตัวกรอง
label_filter_plural: ตัวกรอง
label_equals: คือ
label_not_equals: ไม่ใช่
label_in_less_than: น้อยกว่า
label_in_more_than: มากกว่า
label_in: ในช่วง
label_today: วันนี้
label_all_time: ตลอดเวลา
label_yesterday: เมื่อวาน
label_this_week: อาทิตย์นี้
label_last_week: อาทิตย์ที่แล้ว
label_last_n_days: %d วันย้อนหลัง
label_this_month: เดือนนี้
label_last_month: เดือนที่แล้ว
label_this_year: ปีนี้
label_date_range: ช่วงวันที่
label_less_than_ago: น้อยกว่าหนึ่งวัน
label_more_than_ago: มากกว่าหนึ่งวัน
label_ago: วันผ่านมาแล้ว
label_contains: มี...
label_not_contains: ไม่มี...
label_day_plural: วัน
label_repository: ที่เก็บต้นฉบับ
label_repository_plural: ที่เก็บต้นฉบับ
label_browse: เปิดหา
label_modification: %d เปลี่ยนแปลง
label_modification_plural: %d เปลี่ยนแปลง
label_revision: การแก้ไข
label_revision_plural: การแก้ไข
label_associated_revisions: การแก้ไขที่เกี่ยวข้อง
label_added: ถูกเพิ่ม
label_modified: ถูกแก้ไข
label_deleted: ถูกลบ
label_latest_revision: รุ่นการแก้ไขล่าสุด
label_latest_revision_plural: รุ่นการแก้ไขล่าสุด
label_view_revisions: ดูการแก้ไข
label_max_size: ขนาดใหญ่สุด
label_on: 'ใน'
label_sort_highest: ย้ายไปบนสุด
label_sort_higher: ย้ายขึ้น
label_sort_lower: ย้ายลง
label_sort_lowest: ย้ายไปล่างสุด
label_roadmap: แผนงาน
label_roadmap_due_in: ถึงกำหนดใน
label_roadmap_overdue: %s ช้ากว่ากำหนด
label_roadmap_no_issues: ไม่มีปัญหาสำหรับรุ่นนี้
label_search: ค้นหา
label_result_plural: ผลการค้นหา
label_all_words: ทุกคำ
label_wiki: Wiki
label_wiki_edit: แก้ไข Wiki
label_wiki_edit_plural: แก้ไข Wiki
label_wiki_page: หน้า Wiki
label_wiki_page_plural: หน้า Wiki
label_index_by_title: เรียงตามชื่อเรื่อง
label_index_by_date: เรียงตามวัน
label_current_version: รุ่นปัจจุบัน
label_preview: ตัวอย่างก่อนจัดเก็บ
label_feed_plural: Feeds
label_changes_details: รายละเอียดการเปลี่ยนแปลงทั้งหมด
label_issue_tracking: ติดตามปัญหา
label_spent_time: เวลาที่ใช้
label_f_hour: %.2f ชั่วโมง
label_f_hour_plural: %.2f ชั่วโมง
label_time_tracking: ติดตามการใช้เวลา
label_change_plural: เปลี่ยนแปลง
label_statistics: สถิติ
label_commits_per_month: Commits ต่อเดือน
label_commits_per_author: Commits ต่อผู้แต่ง
label_view_diff: ดูความแตกต่าง
label_diff_inline: inline
label_diff_side_by_side: side by side
label_options: ตัวเลือก
label_copy_workflow_from: คัดลอกลำดับงานจาก
label_permissions_report: รายงานสิทธิ
label_watched_issues: เฝ้าดูปัญหา
label_related_issues: ปัญหาที่เกี่ยวข้อง
label_applied_status: จัดเก็บสถานะ
label_loading: กำลังโหลด...
label_relation_new: ความสัมพันธ์ใหม่
label_relation_delete: ลบความสัมพันธ์
label_relates_to: สัมพันธ์กับ
label_duplicates: ซ้ำ
label_blocks: กีดกัน
label_blocked_by: กีดกันโดย
label_precedes: นำหน้า
label_follows: ตามหลัง
label_end_to_start: จบ-เริ่ม
label_end_to_end: จบ-จบ
label_start_to_start: เริ่ม-เริ่ม
label_start_to_end: เริ่ม-จบ
label_stay_logged_in: อยู่ในระบบต่อ
label_disabled: ไม่ใช้งาน
label_show_completed_versions: แสดงรุ่นที่สมบูรณ์
label_me: ฉัน
label_board: สภากาแฟ
label_board_new: สร้างสภากาแฟ
label_board_plural: สภากาแฟ
label_topic_plural: หัวข้อ
label_message_plural: ข้อความ
label_message_last: ข้อความล่าสุด
label_message_new: เขียนข้อความใหม่
label_message_posted: ข้อความถูกเพิ่มแล้ว
label_reply_plural: ตอบกลับ
label_send_information: ส่งรายละเอียดของบัญชีให้ผู้ใช้
label_year: ปี
label_month: เดือน
label_week: สัปดาห์
label_date_from: จาก
label_date_to: ถึง
label_language_based: ขึ้นอยู่กับภาษาของผู้ใช้
label_sort_by: เรียงโดย %s
label_send_test_email: ส่งจดหมายทดสอบ
label_feeds_access_key_created_on: RSS access key สร้างเมื่อ %s ที่ผ่านมา
label_module_plural: ส่วนประกอบ
label_added_time_by: เพิ่มโดย %s %s ที่ผ่านมา
label_updated_time: ปรับปรุง %s ที่ผ่านมา
label_jump_to_a_project: ไปที่โครงการ...
label_file_plural: แฟ้ม
label_changeset_plural: กลุ่มการเปลี่ยนแปลง
label_default_columns: สดมภ์เริ่มต้น
label_no_change_option: (ไม่เปลี่ยนแปลง)
label_bulk_edit_selected_issues: แก้ไขปัญหาที่เลือกทั้งหมด
label_theme: ชุดรูปแบบ
label_default: ค่าเริ่มต้น
label_search_titles_only: ค้นหาจากชื่อเรื่องเท่านั้น
label_user_mail_option_all: "ทุกๆ เหตุการณ์ในโครงการของฉัน"
label_user_mail_option_selected: "ทุกๆ เหตุการณ์ในโครงการที่เลือก..."
label_user_mail_option_none: "เฉพาะสิ่งที่ฉันเลือกหรือมีส่วนเกี่ยวข้อง"
label_user_mail_no_self_notified: "ฉันไม่ต้องการได้รับการแจ้งเตือนในสิ่งที่ฉันทำเอง"
label_registration_activation_by_email: เปิดบัญชีผ่านอีเมล์
label_registration_manual_activation: อนุมัติโดยผู้บริหารจัดการ
label_registration_automatic_activation: เปิดบัญชีอัตโนมัติ
label_display_per_page: 'ต่อหน้า: %s'
label_age: อายุ
label_change_properties: เปลี่ยนคุณสมบัติ
label_general: ทั่วๆ ไป
label_more: อื่น ๆ
label_scm: ตัวจัดการต้นฉบับ
label_plugins: ส่วนเสริม
label_ldap_authentication: การยืนยันตัวตนโดยใช้ LDAP
label_downloads_abbr: D/L
label_optional_description: รายละเอียดเพิ่มเติม
label_add_another_file: เพิ่มแฟ้มอื่นๆ
label_preferences: ค่าที่ชอบใจ
label_chronological_order: เรียงจากเก่าไปใหม่
label_reverse_chronological_order: เรียงจากใหม่ไปเก่า
label_planning: การวางแผน
button_login: เข้าระบบ
button_submit: จัดส่งข้อมูล
button_save: จัดเก็บ
button_check_all: เลือกทั้งหมด
button_uncheck_all: ไม่เลือกทั้งหมด
button_delete: ลบ
button_create: สร้าง
button_test: ทดสอบ
button_edit: แก้ไข
button_add: เพิ่ม
button_change: เปลี่ยนแปลง
button_apply: ประยุกต์ใช้
button_clear: ล้างข้อความ
button_lock: ล็อค
button_unlock: ยกเลิกการล็อค
button_download: ดาวน์โหลด
button_list: รายการ
button_view: มุมมอง
button_move: ย้าย
button_back: กลับ
button_cancel: ยกเลิก
button_activate: เปิดใช้
button_sort: จัดเรียง
button_log_time: บันทึกเวลา
button_rollback: ถอยกลับมาที่รุ่นนี้
button_watch: เฝ้าดู
button_unwatch: เลิกเฝ้าดู
button_reply: ตอบกลับ
button_archive: เก็บเข้าโกดัง
button_unarchive: เอาออกจากโกดัง
button_reset: เริ่มใหมท
button_rename: เปลี่ยนชื่อ
button_change_password: เปลี่ยนรหัสผ่าน
button_copy: คัดลอก
button_annotate: หมายเหตุประกอบ
button_update: ปรับปรุง
button_configure: ปรับแต่ง
status_active: เปิดใช้งานแล้ว
status_registered: รอการอนุมัติ
status_locked: ล็อค
text_select_mail_notifications: เลือกการกระทำที่ต้องการให้ส่งอีเมล์แจ้ง.
text_regexp_info: ตัวอย่าง ^[A-Z0-9]+$
text_min_max_length_info: 0 หมายถึงไม่จำกัด
text_project_destroy_confirmation: คุณแน่ใจไหมว่าต้องการลบโครงการและข้อมูลที่เกี่ยวข้่อง ?
text_subprojects_destroy_warning: 'โครงการย่อย: %s จะถูกลบด้วย.'
text_workflow_edit: เลือกบทบาทและการติดตาม เพื่อแก้ไขลำดับงาน
text_are_you_sure: คุณแน่ใจไหม ?
text_journal_changed: เปลี่ยนแปลงจาก %s เป็น %s
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_project_identifier_info: 'ภาษาอังกฤษตัวเล็ก(a-z), ตัวเลข(0-9) และขีด (-) เท่านั้น.<br />เมื่อจัดเก็บแล้ว, ชื่อเฉพาะไม่สามารถเปลี่ยนแปลงได้'
text_caracters_maximum: สูงสุด %d ตัวอักษร.
text_caracters_minimum: ต้องยาวอย่างน้อย %d ตัวอักษร.
text_length_between: ความยาวระหว่าง %d ถึง %d ตัวอักษร.
text_tracker_no_workflow: ไม่ได้บัญญัติลำดับงานสำหรับการติดตามนี้
text_unallowed_characters: ตัวอักษรต้องห้าม
text_comma_separated: ใส่ได้หลายค่า โดยคั่นด้วยลูกน้ำ( ,).
text_issues_ref_in_commit_messages: Referencing and fixing issues in commit messages
text_issue_added: ปัญหา %s ถูกแจ้งโดย %s.
text_issue_updated: ปัญหา %s ถูกปรับปรุงโดย %s.
text_wiki_destroy_confirmation: คุณแน่ใจหรือว่าต้องการลบ wiki นี้พร้อมทั้งเนี้อหา?
text_issue_category_destroy_question: บางปัญหา (%d) อยู่ในประเภทนี้. คุณต้องการทำอย่างไร ?
text_issue_category_destroy_assignments: ลบประเภทนี้
text_issue_category_reassign_to: ระบุปัญหาในประเภทนี้
text_user_mail_option: "ในโครงการที่ไม่ได้เลือก, คุณจะได้รับการแจ้งเกี่ยวกับสิ่งที่คุณเฝ้าดูหรือมีส่วนเกี่ยวข้อง (เช่นปัญหาที่คุณแจ้งไว้หรือได้รับมอบหมาย)."
text_no_configuration_data: "บทบาท, การติดตาม, สถานะปัญหา และลำดับงานยังไม่ได้ถูกตั้งค่า.\nขอแนะนำให้โหลดค่าเริ่มต้น. คุณสามารถแก้ไขค่าได้หลังจากโหลดแล้ว."
text_load_default_configuration: โหลดค่าเริ่มต้น
text_status_changed_by_changeset: ประยุกต์ใช้ในกลุ่มการเปลี่ยนแปลง %s.
text_issues_destroy_confirmation: 'คุณแน่ใจไหมว่าต้องการลบปัญหา(ทั้งหลาย)ที่เลือกไว้?'
text_select_project_modules: 'เลือกส่วนประกอบที่ต้องการใช้งานสำหรับโครงการนี้:'
text_default_administrator_account_changed: ค่าเริ่มต้นของบัญชีผู้บริหารจัดการถูกเปลี่ยนแปลง
text_file_repository_writable: ที่เก็บต้นฉบับสามารถเขียนได้
text_rmagick_available: RMagick มีให้ใช้ (เป็นตัวเลือก)
text_destroy_time_entries_question: %.02f ชั่วโมงที่ถูกแจ้งในปัญหานี้จะโดนลบ. คุณต้องการทำอย่างไร?
text_destroy_time_entries: ลบเวลาที่รายงานไว้
text_assign_time_entries_to_project: ระบุเวลาที่ใช้ในโครงการนี้
text_reassign_time_entries: 'ระบุเวลาที่ใช้ในโครงการนี่อีกครั้ง:'
default_role_manager: ผู้จัดการ
default_role_developper: ผู้พัฒนา
default_role_reporter: ผู้รายงาน
default_tracker_bug: บั๊ก
default_tracker_feature: ลักษณะเด่น
default_tracker_support: สนับสนุน
default_issue_status_new: เกิดขึ้น
default_issue_status_assigned: รับมอบหมาย
default_issue_status_resolved: ดำเนินการ
default_issue_status_feedback: รอคำตอบ
default_issue_status_closed: จบ
default_issue_status_rejected: ยกเลิก
default_doc_category_user: เอกสารของผู้ใช้
default_doc_category_tech: เอกสารทางเทคนิค
default_priority_low: ต่ำ
default_priority_normal: ปกติ
default_priority_high: สูง
default_priority_urgent: เร่งด่วน
default_priority_immediate: ด่วนมาก
default_activity_design: ออกแบบ
default_activity_development: พัฒนา
enumeration_issue_priorities: ความสำคัญของปัญหา
enumeration_doc_categories: ประเภทเอกสาร
enumeration_activities: กิจกรรม (ใช้ในการติดตามเวลา)

View File

@@ -91,6 +91,8 @@ mail_body_account_information_external: 您可以使用 "%s" 帳號登入 Redmin
mail_body_account_information: 您的 Redmine 帳號資訊
mail_subject_account_activation_request: Redmine 帳號啟用需求通知
mail_body_account_activation_request: '有位新用戶 (%s) 已經完成註冊,正等候您的審核:'
mail_subject_reminder: "您有 %d 個項目即將到期"
mail_body_reminder: "%d 個指派給您的項目,將於 %d 天之內到期:"
gui_validation_error: 1 個錯誤
gui_validation_error_plural: %d 個錯誤
@@ -210,7 +212,7 @@ setting_protocol: 協定
setting_per_page_options: 每頁顯示個數選項
setting_user_format: 使用者顯示格式
setting_activity_days_default: 專案活動顯示天數
setting_display_subprojects_issues: 預設於主控專案中顯示從屬專案的項目
setting_display_subprojects_issues: 預設於專案中顯示專案的項目
project_module_issue_tracking: 項目追蹤
project_module_time_tracking: 工時追蹤
@@ -291,6 +293,7 @@ label_auth_source: 認證模式
label_auth_source_new: 建立新認證模式
label_auth_source_plural: 認證模式清單
label_subproject_plural: 子專案
label_and_its_subprojects: %s 與其子專案
label_min_max_length: 最小 - 最大 長度
label_list: 清單
label_date: 日期
@@ -445,6 +448,7 @@ label_relation_new: 建立新關聯
label_relation_delete: 刪除關聯
label_relates_to: 關聯至
label_duplicates: 已重複
label_duplicated_by: 與後面所列項目重複
label_blocks: 阻擋
label_blocked_by: 被阻擋
label_precedes: 優先於
@@ -557,6 +561,7 @@ text_select_mail_notifications: 選擇欲寄送提醒通知郵件之動作
text_regexp_info: eg. ^[A-Z0-9]+$
text_min_max_length_info: 0 代表「不限制」
text_project_destroy_confirmation: 您確定要刪除這個專案和其他相關資料?
text_subprojects_destroy_warning: '下列子專案: %s 將一併被刪除。'
text_workflow_edit: 選擇角色與追蹤標籤以設定其工作流程
text_are_you_sure: 確定執行?
text_journal_changed: 從 %s 變更為 %s
@@ -592,6 +597,7 @@ text_destroy_time_entries_question: 您即將刪除的項目已報工 %.02f 小
text_destroy_time_entries: 刪除已報工的時數
text_assign_time_entries_to_project: 指定已報工的時數至專案中
text_reassign_time_entries: '重新指定已報工的時數至此項目:'
text_user_wrote: '%s 先前提到:'
default_role_manager: 管理人員
default_role_developper: 開發人員
@@ -618,4 +624,3 @@ default_activity_development: 開發
enumeration_issue_priorities: 項目優先權
enumeration_doc_categories: 文件分類
enumeration_activities: 活動 (時間追蹤)
text_subprojects_destroy_warning: 'Its subproject(s): %s will be also deleted.'

View File

@@ -91,6 +91,8 @@ mail_body_account_information_external: 您可以使用您的 "%s" 帐号来登
mail_body_account_information: 您的帐号信息
mail_subject_account_activation_request: %s帐号激活请求
mail_body_account_activation_request: '新用户(%s已完成注册正在等候您的审核'
mail_subject_reminder: "%d 个问题需要尽快解决"
mail_body_reminder: "指派给您的 %d 个问题需要在 %d 天内完成:"
gui_validation_error: 1 个错误
gui_validation_error_plural: %d 个错误
@@ -198,7 +200,7 @@ setting_default_projects_public: 新建项目默认为公开项目
setting_autofetch_changesets: 自动获取程序变更
setting_sys_api_enabled: 启用用于版本库管理的Web Service
setting_commit_ref_keywords: 用于引用问题的关键字
setting_commit_fix_keywords: 用于修订问题的关键字
setting_commit_fix_keywords: 用于解决问题的关键字
setting_autologin: 自动登录
setting_date_format: 日期格式
setting_time_format: 时间格式
@@ -257,9 +259,9 @@ label_issue_status_new: 新建问题状态
label_issue_category: 问题类别
label_issue_category_plural: 问题类别
label_issue_category_new: 新建问题类别
label_custom_field: 自定义字段
label_custom_field_plural: 自定义字段
label_custom_field_new: 新建自定义字段
label_custom_field: 自定义属性
label_custom_field_plural: 自定义属性
label_custom_field_new: 新建自定义属性
label_enumerations: 枚举值
label_enumeration_new: 新建枚举值
label_information: 信息
@@ -291,6 +293,7 @@ label_auth_source: 认证模式
label_auth_source_new: 新建认证模式
label_auth_source_plural: 认证模式
label_subproject_plural: 子项目
label_and_its_subprojects: %s 及其子项目
label_min_max_length: 最小 - 最大 长度
label_list: 列表
label_date: 日期
@@ -554,9 +557,10 @@ status_registered: 已注册
status_locked: 已锁定
text_select_mail_notifications: 选择需要发送邮件通知的动作
text_regexp_info: eg. ^[A-Z0-9]+$
text_regexp_info: 例如:^[A-Z0-9]+$
text_min_max_length_info: 0 表示没有限制
text_project_destroy_confirmation: 您确信要删除这个项目以及所有相关的数据吗?
text_subprojects_destroy_warning: '以下子项目也将被同时删除:%s'
text_workflow_edit: 选择角色和跟踪标签来编辑工作流程
text_are_you_sure: 您确定?
text_journal_changed: 从 %s 变更为 %s
@@ -572,7 +576,7 @@ text_length_between: 长度必须在 %d 到 %d 个字符之间。
text_tracker_no_workflow: 此跟踪标签未定义工作流程
text_unallowed_characters: 非法字符
text_comma_separated: 可以使用多个值(用逗号,分开)。
text_issues_ref_in_commit_messages: 在提交信息中引用和修订问题
text_issues_ref_in_commit_messages: 在提交信息中引用和解决问题
text_issue_added: 问题 %s 已由 %s 提交。
text_issue_updated: 问题 %s 已由 %s 更新。
text_wiki_destroy_confirmation: 您确定要删除这个 wiki 及其所有内容吗?
@@ -592,6 +596,7 @@ text_destroy_time_entries_question: 您要删除的问题已经上报了 %.02f
text_destroy_time_entries: 删除上报的工作量
text_assign_time_entries_to_project: 将已上报的工作量提交到项目中
text_reassign_time_entries: '将已上报的工作量指定到此问题:'
text_user_wrote: '%s 写到:'
default_role_manager: 管理人员
default_role_developper: 开发人员
@@ -618,4 +623,4 @@ default_activity_development: 开发
enumeration_issue_priorities: 问题优先级
enumeration_doc_categories: 文档类别
enumeration_activities: 活动(时间跟踪)
text_subprojects_destroy_warning: 'Its subproject(s): %s will be also deleted.'
label_duplicated_by: duplicated by

View File

@@ -829,7 +829,7 @@ module SVG
@doc << DocType.new( %q{svg PUBLIC "-//W3C//DTD SVG 1.0//EN" } +
%q{"http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd"} )
if style_sheet && style_sheet != ''
@doc << ProcessingInstruction.new( "xml-stylesheet",
@doc << Instruction.new( "xml-stylesheet",
%Q{href="#{style_sheet}" type="text/css"} )
end
@root = @doc.add_element( "svg", {

View File

@@ -376,13 +376,13 @@ class RedCloth < String
re =
case rtype
when :limit
/(^|[>\s])
/(^|[>\s\(])
(#{rcq})
(#{C})
(?::(\S+?))?
([^\s\-].*?[^\s\-]|\w)
#{rcq}
(?=[[:punct:]]|\s|$)/x
(?=[[:punct:]]|\s|\)|$)/x
else
/(#{rcq})
(#{C})
@@ -764,7 +764,7 @@ class RedCloth < String
([\s\[{(]|[#{PUNCT}])? # $pre
" # start
(#{C}) # $atts
([^"]+?) # $text
([^"\n]+?) # $text
\s?
(?:\(([^)]+?)\)(?="))? # $title
":
@@ -1131,10 +1131,10 @@ class RedCloth < String
end
end
ALLOWED_TAGS = %w(redpre pre code)
ALLOWED_TAGS = %w(redpre pre code notextile)
def escape_html_tags(text)
text.gsub!(%r{<(\/?(\w+)[^>\n]*)(>?)}) {|m| ALLOWED_TAGS.include?($2) ? "<#{$1}#{$3}" : "&lt;#{$1}#{'&gt;' if $3}" }
text.gsub!(%r{<(\/?([!\w]+)[^<>\n]*)(>?)}) {|m| ALLOWED_TAGS.include?($2) ? "<#{$1}#{$3}" : "&lt;#{$1}#{'&gt;' unless $3.blank?}" }
end
end

View File

@@ -94,7 +94,7 @@ Redmine::AccessControl.map do |map|
end
Redmine::MenuManager.map :top_menu do |menu|
menu.push :home, :home_url, :html => { :class => 'home' }
menu.push :home, :home_path, :html => { :class => 'home' }
menu.push :my_page, { :controller => 'my', :action => 'page' }, :html => { :class => 'mypage' }, :if => Proc.new { User.current.logged? }
menu.push :projects, { :controller => 'projects', :action => 'index' }, :caption => :label_project_plural, :html => { :class => 'projects' }
menu.push :administration, { :controller => 'admin', :action => 'index' }, :html => { :class => 'admin' }, :if => Proc.new { User.current.admin? }
@@ -102,10 +102,10 @@ Redmine::MenuManager.map :top_menu do |menu|
end
Redmine::MenuManager.map :account_menu do |menu|
menu.push :login, :signin_url, :html => { :class => 'login' }, :if => Proc.new { !User.current.logged? }
menu.push :login, :signin_path, :html => { :class => 'login' }, :if => Proc.new { !User.current.logged? }
menu.push :register, { :controller => 'account', :action => 'register' }, :html => { :class => 'register' }, :if => Proc.new { !User.current.logged? && Setting.self_registration? }
menu.push :my_account, { :controller => 'my', :action => 'account' }, :html => { :class => 'myaccount' }, :if => Proc.new { User.current.logged? }
menu.push :logout, :signout_url, :html => { :class => 'logout' }, :if => Proc.new { User.current.logged? }
menu.push :logout, :signout_path, :html => { :class => 'logout' }, :if => Proc.new { User.current.logged? }
end
Redmine::MenuManager.map :application_menu do |menu|

View File

@@ -32,7 +32,7 @@ module Redmine #:nodoc:
end
# 2,5 => 2.5
s.gsub!(',', '.')
s.to_f
begin; Kernel.Float(s); rescue; nil; end
end
end
end

View File

@@ -118,7 +118,7 @@ module Redmine
def logger
RAILS_DEFAULT_LOGGER
end
def shellout(cmd, &block)
logger.debug "Shelling out: #{cmd}" if logger && logger.debug?
begin
@@ -127,11 +127,22 @@ module Redmine
block.call(io) if block_given?
end
rescue Errno::ENOENT => e
msg = strip_credential(e.message)
# The command failed, log it and re-raise
logger.error("SCM command failed: #{cmd}\n with: #{e.message}")
raise CommandFailed.new(e.message)
logger.error("SCM command failed: #{strip_credential(cmd)}\n with: #{msg}")
raise CommandFailed.new(msg)
end
end
# Hides username/password in a given command
def self.hide_credential(cmd)
q = (RUBY_PLATFORM =~ /mswin/ ? '"' : "'")
cmd.to_s.gsub(/(\-\-(password|username))\s+(#{q}[^#{q}]+#{q}|[^#{q}]\S+)/, '\\1 xxxx')
end
def strip_credential(cmd)
self.class.hide_credential(cmd)
end
end
class Entries < Array
@@ -279,7 +290,6 @@ module Redmine
end
else
if line =~ /^[^\+\-\s@\\]/
self.delete(self.keys.sort.last)
@parsing = false
return false
elsif line =~ /^@@ (\+|\-)(\d+)(,\d+)? (\+|\-)(\d+)(,\d+)? @@/

View File

@@ -27,8 +27,8 @@ module Redmine
# Get the revision of a particuliar file
def get_rev (rev,path)
cmd="git --git-dir #{target('')} show #{shell_quote rev} -- #{shell_quote path}" if rev!='latest' and (! rev.nil?)
cmd="git --git-dir #{target('')} log -1 master -- #{shell_quote path}" if
cmd="#{GIT_BIN} --git-dir #{target('')} show #{shell_quote rev} -- #{shell_quote path}" if rev!='latest' and (! rev.nil?)
cmd="#{GIT_BIN} --git-dir #{target('')} log -1 master -- #{shell_quote path}" if
rev=='latest' or rev.nil?
rev=[]
i=0

View File

@@ -64,6 +64,9 @@ module Redmine
begin
doc = REXML::Document.new(output)
doc.elements.each("lists/list/entry") do |entry|
# Skip directory if there is no commit date (usually that
# means that we don't have read access to it)
next if entry.attributes['kind'] == 'dir' && entry.elements['commit'].elements['date'].nil?
entries << Entry.new({:name => entry.elements['name'].text,
:path => ((path.empty? ? "" : "#{path}/") + entry.elements['name'].text),
:kind => entry.attributes['kind'],

View File

@@ -4,7 +4,7 @@ module Redmine
module VERSION #:nodoc:
MAJOR = 0
MINOR = 7
TINY = 0
TINY = 3
def self.revision
revision = nil

View File

@@ -26,7 +26,7 @@ module Redmine
class TextileFormatter < RedCloth
# auto_link rule after textile rules so that it doesn't break !image_url! tags
RULES = [:textile, :inline_auto_link, :inline_auto_mailto, :inline_toc, :inline_macros]
RULES = [:textile, :block_markdown_rule, :inline_auto_link, :inline_auto_mailto, :inline_toc, :inline_macros]
def initialize(*args)
super
@@ -45,7 +45,7 @@ module Redmine
# Patch for RedCloth. Fixed in RedCloth r128 but _why hasn't released it yet.
# <a href="http://code.whytheluckystiff.net/redcloth/changeset/128">http://code.whytheluckystiff.net/redcloth/changeset/128</a>
def hard_break( text )
text.gsub!( /(.)\n(?!\n|\Z| *([#*=]+(\s|$)|[{|]))/, "\\1<br />" ) if hard_breaks
text.gsub!( /(.)\n(?!\n|\Z| *([#*=]+(\s|$)|[{|]))/, "\\1<br />\n" ) if hard_breaks
end
# Patch to add code highlighting support to RedCloth
@@ -56,7 +56,7 @@ module Redmine
content = @pre_list[$1.to_i]
if content.match(/<code\s+class="(\w+)">\s?(.+)/m)
content = "<code class=\"#{$1} CodeRay\">" +
CodeRay.scan($2, $1).html(:escape => false, :line_numbers => :inline)
CodeRay.scan($2, $1.downcase).html(:escape => false, :line_numbers => :inline)
end
content
end
@@ -85,6 +85,9 @@ module Redmine
@toc.each_with_index do |heading, index|
# remove wiki links from the item
toc_item = heading.last.gsub(/(\[\[|\]\])/, '')
# remove styles
# eg. %{color:red}Triggers% => Triggers
toc_item.gsub! %r[%\{[^\}]*\}([^%]+)%], '\\1'
out << "<a href=\"##{index+1}\" class=\"heading#{heading.first}\">#{toc_item}</a>"
end
out << '</div>'

View File

@@ -92,7 +92,7 @@ namespace :redmine do
set_table_name :milestone
def due
if read_attribute(:due) > 0
if read_attribute(:due) && read_attribute(:due) > 0
Time.at(read_attribute(:due)).to_date
else
nil
@@ -126,6 +126,10 @@ namespace :redmine do
File.open("#{trac_fullpath}", 'rb').read
end
def description
read_attribute(:description).to_s.slice(0,255)
end
private
def trac_fullpath
attachment_type = read_attribute(:type)
@@ -233,7 +237,8 @@ namespace :redmine do
text = text.gsub(/\[\"(.+)\".*\]/) {|s| "[[#{$1.delete(',./?;|:')}]]"}
text = text.gsub(/\[wiki:\"(.+)\".*\]/) {|s| "[[#{$1.delete(',./?;|:')}]]"}
text = text.gsub(/\[wiki:\"(.+)\".*\]/) {|s| "[[#{$1.delete(',./?;|:')}]]"}
text = text.gsub(/\[wiki:([^\s\]]+).*\]/) {|s| "[[#{$1.delete(',./?;|:')}]]"}
text = text.gsub(/\[wiki:([^\s\]]+)\]/) {|s| "[[#{$1.delete(',./?;|:')}]]"}
text = text.gsub(/\[wiki:([^\s\]]+)\s(.*)\]/) {|s| "[[#{$1.delete(',./?;|:')}|#{$2.delete(',./?;|:')}]]"}
# Links to pages UsingJustWikiCaps
text = text.gsub(/([^!]|^)(^| )([A-Z][a-z]+[A-Z][a-zA-Z]+)/, '\\1\\2[[\3]]')
@@ -408,6 +413,7 @@ namespace :redmine do
a.file = attachment
a.author = find_or_create_user(attachment.author)
a.container = i
a.description = attachment.description
migrated_ticket_attachments += 1 if a.save
end
@@ -456,6 +462,7 @@ namespace :redmine do
a = Attachment.new :created_on => attachment.time
a.file = attachment
a.author = find_or_create_user(attachment.author)
a.description = attachment.description
a.container = p
migrated_wiki_attachments += 1 if a.save
end

View File

@@ -22,13 +22,13 @@ table td h3 { font-size: 1.2em; text-align: left; }
<table width="100%">
<tr><th colspan="3">Font Styles</th></tr>
<tr><th><img src="../../images/jstoolbar/bt_strong.png" style="border: 1px solid #bbb;" alt="Strong" /></th><td width="50%">*Strong*</td><td width="50%"><strong>Strong</strong></td></tr>
<tr><th><img src="../../images/jstoolbar/bt_em.png" style="border: 1px solid #bbb;" alt="Italic" /></th><td>_Italic_</td><td><em>Italic</em></td></tr>
<tr><th><img src="../../images/jstoolbar/bt_ins.png" style="border: 1px solid #bbb;" alt="Underline" /></th><td>+Underline+</td><td><ins>Underline</ins></td></tr>
<tr><th><img src="../../images/jstoolbar/bt_del.png" style="border: 1px solid #bbb;" alt="Deleted" /></th><td>-Deleted-</td><td><del>Deleted</del></td></tr>
<tr><th><img src="../images/jstoolbar/bt_strong.png" style="border: 1px solid #bbb;" alt="Strong" /></th><td width="50%">*Strong*</td><td width="50%"><strong>Strong</strong></td></tr>
<tr><th><img src="../images/jstoolbar/bt_em.png" style="border: 1px solid #bbb;" alt="Italic" /></th><td>_Italic_</td><td><em>Italic</em></td></tr>
<tr><th><img src="../images/jstoolbar/bt_ins.png" style="border: 1px solid #bbb;" alt="Underline" /></th><td>+Underline+</td><td><ins>Underline</ins></td></tr>
<tr><th><img src="../images/jstoolbar/bt_del.png" style="border: 1px solid #bbb;" alt="Deleted" /></th><td>-Deleted-</td><td><del>Deleted</del></td></tr>
<tr><th></th><td>??Quote??</td><td><cite>Quote</cite></td></tr>
<tr><th><img src="../../images/jstoolbar/bt_code.png" style="border: 1px solid #bbb;" alt="Inline Code" /></th><td>@Inline Code@</td><td><code>Inline Code</code></td></tr>
<tr><th><img src="../../images/jstoolbar/bt_pre.png" style="border: 1px solid #bbb;" alt="Preformatted text" /></th><td>&lt;pre><br />&nbsp;lines<br />&nbsp;of code<br />&lt;/pre></td><td>
<tr><th><img src="../images/jstoolbar/bt_code.png" style="border: 1px solid #bbb;" alt="Inline Code" /></th><td>@Inline Code@</td><td><code>Inline Code</code></td></tr>
<tr><th><img src="../images/jstoolbar/bt_pre.png" style="border: 1px solid #bbb;" alt="Preformatted text" /></th><td>&lt;pre><br />&nbsp;lines<br />&nbsp;of code<br />&lt;/pre></td><td>
<pre>
lines
of code
@@ -36,27 +36,27 @@ table td h3 { font-size: 1.2em; text-align: left; }
</td></tr>
<tr><th colspan="3">Lists</th></tr>
<tr><th><img src="../../images/jstoolbar/bt_ul.png" style="border: 1px solid #bbb;" alt="Unordered list" /></th><td>* Item 1<br />* Item 2</td><td><ul><li>Item 1</li><li>Item 2</li></ul></td></tr>
<tr><th><img src="../../images/jstoolbar/bt_ol.png" style="border: 1px solid #bbb;" alt="Ordered list" /></th><td># Item 1<br /># Item 2</td><td><ol><li>Item 1</li><li>Item 2</li></ol></td></tr>
<tr><th><img src="../images/jstoolbar/bt_ul.png" style="border: 1px solid #bbb;" alt="Unordered list" /></th><td>* Item 1<br />* Item 2</td><td><ul><li>Item 1</li><li>Item 2</li></ul></td></tr>
<tr><th><img src="../images/jstoolbar/bt_ol.png" style="border: 1px solid #bbb;" alt="Ordered list" /></th><td># Item 1<br /># Item 2</td><td><ol><li>Item 1</li><li>Item 2</li></ol></td></tr>
<tr><th colspan="3">Headings</th></tr>
<tr><th><img src="../../images/jstoolbar/bt_h1.png" style="border: 1px solid #bbb;" alt="Heading 1" /></th><td>h1. Title 1</td><td><h1>Title 1</h1></td></tr>
<tr><th><img src="../../images/jstoolbar/bt_h2.png" style="border: 1px solid #bbb;" alt="Heading 2" /></th><td>h2. Title 2</td><td><h2>Title 2</h2></td></tr>
<tr><th><img src="../../images/jstoolbar/bt_h3.png" style="border: 1px solid #bbb;" alt="Heading 3" /></th><td>h3. Title 3</td><td><h3>Title 3</h3></td></tr>
<tr><th><img src="../images/jstoolbar/bt_h1.png" style="border: 1px solid #bbb;" alt="Heading 1" /></th><td>h1. Title 1</td><td><h1>Title 1</h1></td></tr>
<tr><th><img src="../images/jstoolbar/bt_h2.png" style="border: 1px solid #bbb;" alt="Heading 2" /></th><td>h2. Title 2</td><td><h2>Title 2</h2></td></tr>
<tr><th><img src="../images/jstoolbar/bt_h3.png" style="border: 1px solid #bbb;" alt="Heading 3" /></th><td>h3. Title 3</td><td><h3>Title 3</h3></td></tr>
<tr><th colspan="3">Links</th></tr>
<tr><th></th><td>http://foo.bar</td><td><a href="#">http://foo.bar</a></td></tr>
<tr><th></th><td>"Foo":http://foo.bar</td><td><a href="#">Foo</a></td></tr>
<tr><th colspan="3">Redmine links</th></tr>
<tr><th><img src="../../images/jstoolbar/bt_link.png" style="border: 1px solid #bbb;" alt="Link to a Wiki page" /></th><td>[[Wiki page]]</td><td><a href="#">Wiki page</a></td></tr>
<tr><th><img src="../images/jstoolbar/bt_link.png" style="border: 1px solid #bbb;" alt="Link to a Wiki page" /></th><td>[[Wiki page]]</td><td><a href="#">Wiki page</a></td></tr>
<tr><th></th><td>Issue #12</td><td>Issue <a href="#">#12</a></td></tr>
<tr><th></th><td>Revision r43</td><td>Revision <a href="#">r43</a></td></tr>
<tr><th></th><td>commit:"f30e13e43"</td><td><a href="#">f30e13e4</a></td></tr>
<tr><th></th><td>source:some/file</td><td><a href="#">source:some/file</a></td></tr>
<tr><th colspan="3">Inline images</th></tr>
<tr><th><img src="../../images/jstoolbar/bt_img.png" style="border: 1px solid #bbb;" alt="Image" /></th><td>!<em>image_url</em>!</td><td></td></tr>
<tr><th><img src="../images/jstoolbar/bt_img.png" style="border: 1px solid #bbb;" alt="Image" /></th><td>!<em>image_url</em>!</td><td></td></tr>
<tr><th></th><td>!<em>attached_image</em>!</td><td></td></tr>
</table>

Binary file not shown.

After

Width:  |  Height:  |  Size: 335 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 335 B

View File

@@ -2,10 +2,10 @@
Copyright (C) 2006-2008 Jean-Philippe Lang */
function checkAll (id, checked) {
var el = document.getElementById(id);
for (var i = 0; i < el.elements.length; i++) {
if (el.elements[i].disabled==false) {
el.elements[i].checked = checked;
var els = Element.descendants(id);
for (var i = 0; i < els.length; i++) {
if (els[i].disabled==false) {
els[i].checked = checked;
}
}
}
@@ -56,7 +56,7 @@ function setPredecessorFieldsVisibility() {
function promptToRemote(text, param, url) {
value = prompt(text + ':');
if (value) {
new Ajax.Request(url + '?' + param + '=' + value, {asynchronous:true, evalScripts:true});
new Ajax.Request(url + '?' + param + '=' + encodeURIComponent(value), {asynchronous:true, evalScripts:true});
return false;
}
}

View File

@@ -113,7 +113,7 @@ Calendar._TT["DAY_FIRST"] = "הצג %s קודם";
// This may be locale-dependent. It specifies the week-end days, as an array
// of comma-separated numbers. The numbers are from 0 to 6: 0 means Sunday, 1
// means Monday, etc.
Calendar._TT["WEEKEND"] = "6,7";
Calendar._TT["WEEKEND"] = "5,6";
Calendar._TT["CLOSE"] = "סגור";
Calendar._TT["TODAY"] = "היום";

View File

@@ -0,0 +1,127 @@
// ** I18N
// Calendar HU language
// Author: Takács Gábor
// Encoding: UTF-8
// Distributed under the same terms as the calendar itself.
// For translators: please use UTF-8 if possible. We strongly believe that
// Unicode is the answer to a real internationalized world. Also please
// include your contact information in the header, as can be seen above.
// full day names
Calendar._DN = new Array
("Vasárnap",
"Hétfő",
"Kedd",
"Szerda",
"Csütörtök",
"Péntek",
"Szombat",
"Vasárnap");
// Please note that the following array of short day names (and the same goes
// for short month names, _SMN) isn't absolutely necessary. We give it here
// for exemplification on how one can customize the short day names, but if
// they are simply the first N letters of the full name you can simply say:
//
// Calendar._SDN_len = N; // short day name length
// Calendar._SMN_len = N; // short month name length
//
// If N = 3 then this is not needed either since we assume a value of 3 if not
// present, to be compatible with translation files that were written before
// this feature.
// short day names
Calendar._SDN = new Array
("Vas",
"Hét",
"Ked",
"Sze",
"Csü",
"Pén",
"Szo",
"Vas");
// First day of the week. "0" means display Sunday first, "1" means display
// Monday first, etc.
Calendar._FD = 1;
// full month names
Calendar._MN = new Array
("Január",
"Február",
"Március",
"Április",
"Május",
"Június",
"Július",
"Augusztus",
"Szeptember",
"Október",
"November",
"December");
// short month names
Calendar._SMN = new Array
("Jan",
"Feb",
"Már",
"Ápr",
"Máj",
"Jún",
"Júl",
"Aug",
"Szep",
"Okt",
"Nov",
"Dec");
// tooltips
Calendar._TT = {};
Calendar._TT["INFO"] = "A naptár leírása";
Calendar._TT["ABOUT"] =
"DHTML Date/Time Selector\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." +
"\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.";
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.";
Calendar._TT["PREV_YEAR"] = "Előző év (nyomvatart = menü)";
Calendar._TT["PREV_MONTH"] = "Előző hónap (nyomvatart = menü)";
Calendar._TT["GO_TODAY"] = "Irány a Ma";
Calendar._TT["NEXT_MONTH"] = "Következő hónap (nyomvatart = menü)";
Calendar._TT["NEXT_YEAR"] = "Következő év (nyomvatart = menü)";
Calendar._TT["SEL_DATE"] = "Válasszon dátumot";
Calendar._TT["DRAG_TO_MOVE"] = "Fogd és vidd";
Calendar._TT["PART_TODAY"] = " (ma)";
// the following is to inform that "%s" is to be the first day of week
// %s will be replaced with the day name.
Calendar._TT["DAY_FIRST"] = "%s megjelenítése elsőként";
// This may be locale-dependent. It specifies the week-end days, as an array
// of comma-separated numbers. The numbers are from 0 to 6: 0 means Sunday, 1
// means Monday, etc.
Calendar._TT["WEEKEND"] = "0,6";
Calendar._TT["CLOSE"] = "Bezár";
Calendar._TT["TODAY"] = "Ma";
Calendar._TT["TIME_PART"] = "(Shift-)Click vagy húzd az érték változtatásához";
// date formats
Calendar._TT["DEF_DATE_FORMAT"] = "%Y.%m.%d";
Calendar._TT["TT_DATE_FORMAT"] = "%B %e, %A";
Calendar._TT["WK"] = "hét";
Calendar._TT["TIME"] = "Idő:";

View File

@@ -2,7 +2,8 @@
// Calendar pt_BR language
// Author: Adalberto Machado, <betosm@terra.com.br>
// Encoding: any
// Review: Alexandre da Silva, <simpsomboy@gmail.com>
// Encoding: UTF-8
// Distributed under the same terms as the calendar itself.
// For translators: please use UTF-8 if possible. We strongly believe that
@@ -13,7 +14,7 @@
Calendar._DN = new Array
("Domingo",
"Segunda",
"Terca",
"Terça",
"Quarta",
"Quinta",
"Sexta",
@@ -45,13 +46,13 @@ Calendar._SDN = new Array
// First day of the week. "0" means display Sunday first, "1" means display
// Monday first, etc.
Calendar._FD = 1;
Calendar._FD = 0;
// full month names
Calendar._MN = new Array
("Janeiro",
"Fevereiro",
"Marco",
"Março",
"Abril",
"Maio",
"Junho",
@@ -79,29 +80,30 @@ Calendar._SMN = new Array
// tooltips
Calendar._TT = {};
Calendar._TT["INFO"] = "Sobre o calendario";
Calendar._TT["INFO"] = "Sobre o calendário";
Calendar._TT["ABOUT"] =
"DHTML Date/Time Selector\n" +
"(c) dynarch.com 2002-2005 / Author: Mihai Bazon\n" + // don't translate this this ;-)
"Ultima versao visite: http://www.dynarch.com/projects/calendar/\n" +
"Distribuido sobre GNU LGPL. Veja http://gnu.org/licenses/lgpl.html para detalhes." +
"Última versão visite: http://www.dynarch.com/projects/calendar/\n" +
"Distribuído sobre GNU LGPL. Veja http://gnu.org/licenses/lgpl.html para detalhes." +
"\n\n" +
"Selecao de data:\n" +
"- Use os botoes \xab, \xbb para selecionar o ano\n" +
"- Use os botoes " + String.fromCharCode(0x2039) + ", " + String.fromCharCode(0x203a) + " para selecionar o mes\n" +
"- Segure o botao do mouse em qualquer um desses botoes para selecao rapida.";
"Seleção de data:\n" +
"- Use os botões \xab, \xbb para selecionar o ano\n" +
"- Use os botões " + String.fromCharCode(0x2039) + ", " +
String.fromCharCode(0x203a) + " para selecionar o mês\n" +
"- Segure o botão do mouse em qualquer um desses botões para seleção rápida.";
Calendar._TT["ABOUT_TIME"] = "\n\n" +
"Selecao de hora:\n" +
"Seleção de hora:\n" +
"- Clique em qualquer parte da hora para incrementar\n" +
"- ou Shift-click para decrementar\n" +
"- ou clique e segure para selecao rapida.";
"- ou clique e segure para seleção rápida.";
Calendar._TT["PREV_YEAR"] = "Ant. ano (segure para menu)";
Calendar._TT["PREV_MONTH"] = "Ant. mes (segure para menu)";
Calendar._TT["PREV_MONTH"] = "Ant. mês (segure para menu)";
Calendar._TT["GO_TODAY"] = "Hoje";
Calendar._TT["NEXT_MONTH"] = "Prox. mes (segure para menu)";
Calendar._TT["NEXT_YEAR"] = "Prox. ano (segure para menu)";
Calendar._TT["NEXT_MONTH"] = "Próx. mes (segure para menu)";
Calendar._TT["NEXT_YEAR"] = "Próx. ano (segure para menu)";
Calendar._TT["SEL_DATE"] = "Selecione a data";
Calendar._TT["DRAG_TO_MOVE"] = "Arraste para mover";
Calendar._TT["PART_TODAY"] = " (hoje)";

View File

@@ -0,0 +1,127 @@
// ** I18N
// Calendar EN language
// Author: Gampol Thitinilnithi, <gampolt@gmail.com>
// Encoding: UTF-8
// Distributed under the same terms as the calendar itself.
// For translators: please use UTF-8 if possible. We strongly believe that
// Unicode is the answer to a real internationalized world. Also please
// include your contact information in the header, as can be seen above.
// full day names
Calendar._DN = new Array
("อาทิตย์",
"จันทร์",
"อังคาร",
"พุธ",
"พฤหัสบดี",
"ศุกร์",
"เสาร์",
"อาทิตย์");
// Please note that the following array of short day names (and the same goes
// for short month names, _SMN) isn't absolutely necessary. We give it here
// for exemplification on how one can customize the short day names, but if
// they are simply the first N letters of the full name you can simply say:
//
// Calendar._SDN_len = N; // short day name length
// Calendar._SMN_len = N; // short month name length
//
// If N = 3 then this is not needed either since we assume a value of 3 if not
// present, to be compatible with translation files that were written before
// this feature.
// short day names
Calendar._SDN = new Array
("อา.",
"จ.",
"อ.",
"พ.",
"พฤ.",
"ศ.",
"ส.",
"อา.");
// First day of the week. "0" means display Sunday first, "1" means display
// Monday first, etc.
Calendar._FD = 1;
// full month names
Calendar._MN = new Array
("มกราคม",
"กุมภาพันธ์",
"มีนาคม",
"เมษายน",
"พฤษภาคม",
"มิถุนายน",
"กรกฎาคม",
"สิงหาคม",
"กันยายน",
"ตุลาคม",
"พฤศจิกายน",
"ธันวาคม");
// short month names
Calendar._SMN = new Array
("ม.ค.",
"ก.พ.",
"มี.ค.",
"เม.ย.",
"พ.ค.",
"มิ.ย.",
"ก.ค.",
"ส.ค.",
"ก.ย.",
"ต.ค.",
"พ.ย.",
"ธ.ค.");
// tooltips
Calendar._TT = {};
Calendar._TT["INFO"] = "เกี่ยวกับปฏิทิน";
Calendar._TT["ABOUT"] =
"DHTML Date/Time Selector\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." +
"\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.";
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.";
Calendar._TT["PREV_YEAR"] = "ปีที่แล้ว (ถ้ากดค้างจะมีเมนู)";
Calendar._TT["PREV_MONTH"] = "เดือนที่แล้ว (ถ้ากดค้างจะมีเมนู)";
Calendar._TT["GO_TODAY"] = "ไปที่วันนี้";
Calendar._TT["NEXT_MONTH"] = "เดือนหน้า (ถ้ากดค้างจะมีเมนู)";
Calendar._TT["NEXT_YEAR"] = "ปีหน้า (ถ้ากดค้างจะมีเมนู)";
Calendar._TT["SEL_DATE"] = "เลือกวัน";
Calendar._TT["DRAG_TO_MOVE"] = "กดแล้วลากเพื่อย้าย";
Calendar._TT["PART_TODAY"] = " (วันนี้)";
// the following is to inform that "%s" is to be the first day of week
// %s will be replaced with the day name.
Calendar._TT["DAY_FIRST"] = "แสดง %s เป็นวันแรก";
// This may be locale-dependent. It specifies the week-end days, as an array
// of comma-separated numbers. The numbers are from 0 to 6: 0 means Sunday, 1
// means Monday, etc.
Calendar._TT["WEEKEND"] = "0,6";
Calendar._TT["CLOSE"] = "ปิด";
Calendar._TT["TODAY"] = "วันนี้";
Calendar._TT["TIME_PART"] = "(Shift-)กดหรือกดแล้วลากเพื่อเปลี่ยนค่า";
// date formats
Calendar._TT["DEF_DATE_FORMAT"] = "%Y-%m-%d";
Calendar._TT["TT_DATE_FORMAT"] = "%a %e %b";
Calendar._TT["WK"] = "wk";
Calendar._TT["TIME"] = "เวลา:";

View File

@@ -84,13 +84,13 @@ Calendar._TT["INFO"] = "關於 calendar";
Calendar._TT["ABOUT"] =
"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 以取得更多關於 LGPL 之細節。" +
"\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" +
"時間選擇方式:\n" +
"- 「單擊」時分秒為遞增\n" +

View File

@@ -82,33 +82,33 @@ Calendar._TT = {};
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 " +
"\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" +
"- Shift加点击来减少\n" +
"- 点击后拖动进行快速选择";
Calendar._TT["PREV_YEAR"] = "上年 (hold for menu)";
Calendar._TT["PREV_MONTH"] = "上月 (hold for menu)";
Calendar._TT["PREV_YEAR"] = "上年(按住不放显示菜单)";
Calendar._TT["PREV_MONTH"] = "上月(按住不放显示菜单)";
Calendar._TT["GO_TODAY"] = "回到今天";
Calendar._TT["NEXT_MONTH"] = "下月 (hold for menu)";
Calendar._TT["NEXT_YEAR"] = "下年 (hold for menu)";
Calendar._TT["NEXT_MONTH"] = "下月(按住不放显示菜单)";
Calendar._TT["NEXT_YEAR"] = "下年(按住不放显示菜单)";
Calendar._TT["SEL_DATE"] = "选择日期";
Calendar._TT["DRAG_TO_MOVE"] = "拖动";
Calendar._TT["PART_TODAY"] = " (今日)";
// the following is to inform that "%s" is to be the first day of week
// %s will be replaced with the day name.
Calendar._TT["DAY_FIRST"] = "Display %s first";
Calendar._TT["DAY_FIRST"] = "一周开始于 %s";
// This may be locale-dependent. It specifies the week-end days, as an array
// of comma-separated numbers. The numbers are from 0 to 6: 0 means Sunday, 1
@@ -117,11 +117,11 @@ Calendar._TT["WEEKEND"] = "0,6";
Calendar._TT["CLOSE"] = "关闭";
Calendar._TT["TODAY"] = "今天";
Calendar._TT["TIME_PART"] = "(Shift-)Click or drag to change value";
Calendar._TT["TIME_PART"] = "Shift加点击或者拖动来变更";
// date formats
Calendar._TT["DEF_DATE_FORMAT"] = "%Y-%m-%d";
Calendar._TT["TT_DATE_FORMAT"] = "%a, %b %e";
Calendar._TT["TT_DATE_FORMAT"] = "星期%a %b%e";
Calendar._TT["WK"] = "wk";
Calendar._TT["TIME"] = "Time:";
Calendar._TT["WK"] = "";
Calendar._TT["TIME"] = "时间:";

View File

@@ -0,0 +1,14 @@
jsToolBar.strings = {};
jsToolBar.strings['Strong'] = 'Félkövér';
jsToolBar.strings['Italic'] = 'Dőlt';
jsToolBar.strings['Underline'] = 'Aláhúzott';
jsToolBar.strings['Deleted'] = 'Törölt';
jsToolBar.strings['Code'] = 'Kód sorok';
jsToolBar.strings['Heading 1'] = 'Fejléc 1';
jsToolBar.strings['Heading 2'] = 'Fejléc 2';
jsToolBar.strings['Heading 3'] = 'Fejléc 3';
jsToolBar.strings['Unordered list'] = 'Felsorolás';
jsToolBar.strings['Ordered list'] = 'Számozott lista';
jsToolBar.strings['Preformatted text'] = 'Előreformázott szöveg';
jsToolBar.strings['Wiki link'] = 'Link egy Wiki oldalra';
jsToolBar.strings['Image'] = 'Kép';

View File

@@ -1,14 +1,16 @@
// Translated by: Alexandre da Silva <simpsomboy@gmail.com>
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['Preformatted text'] = 'Preformatted text';
jsToolBar.strings['Wiki link'] = 'Link to a Wiki page';
jsToolBar.strings['Image'] = 'Image';
jsToolBar.strings['Strong'] = 'Negrito';
jsToolBar.strings['Italic'] = 'Itálico';
jsToolBar.strings['Underline'] = 'Sublinhado';
jsToolBar.strings['Deleted'] = 'Excluído';
jsToolBar.strings['Code'] = 'Código Inline';
jsToolBar.strings['Heading 1'] = 'Cabeçalho 1';
jsToolBar.strings['Heading 2'] = 'Cabeçalho 2';
jsToolBar.strings['Heading 3'] = 'Cabeçalho 3';
jsToolBar.strings['Unordered list'] = 'Lista não ordenada';
jsToolBar.strings['Ordered list'] = 'Lista ordenada';
jsToolBar.strings['Preformatted text'] = 'Texto pré-formatado';
jsToolBar.strings['Wiki link'] = 'Link para uma página Wiki';
jsToolBar.strings['Image'] = 'Imagem';

View File

@@ -0,0 +1,14 @@
jsToolBar.strings = {};
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['Preformatted text'] = 'รูปแบบข้อความคงที่';
jsToolBar.strings['Wiki link'] = 'เชื่อมโยงไปหน้า Wiki อื่น';
jsToolBar.strings['Image'] = 'รูปภาพ';

View File

@@ -9,6 +9,8 @@ jsToolBar.strings['Heading 2'] = '標題 2';
jsToolBar.strings['Heading 3'] = '標題 3';
jsToolBar.strings['Unordered list'] = '項目清單';
jsToolBar.strings['Ordered list'] = '編號清單';
jsToolBar.strings['Preformatted text'] = '格式化文字';
jsToolBar.strings['Quote'] = '引文';
jsToolBar.strings['Unquote'] = '取消引文';
jsToolBar.strings['Preformatted text'] = '已格式文字';
jsToolBar.strings['Wiki link'] = '連結至 Wiki 頁面';
jsToolBar.strings['Image'] = '圖片';

View File

@@ -1,14 +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['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'] = '格式化文本';
jsToolBar.strings['Wiki link'] = '连接到 Wiki 页面';
jsToolBar.strings['Image'] = '图片';

View File

@@ -80,7 +80,7 @@ a.issue.closed, .issue.closed a { text-decoration: line-through; }
/***** Tables *****/
table.list { border: 1px solid #e4e4e4; border-collapse: collapse; width: 100%; margin-bottom: 4px; }
table.list th { background-color:#EEEEEE; padding: 4px; white-space:nowrap; }
table.list td { overflow: hidden; vertical-align: top;}
table.list td { vertical-align: top; }
table.list td.id { width: 2%; text-align: center;}
table.list td.checkbox { width: 15px; padding: 0px;}
@@ -97,6 +97,10 @@ tr.entry td.size { text-align: right; font-size: 90%; }
tr.entry td.revision, tr.entry td.author { text-align: center; }
tr.entry td.age { text-align: right; }
tr.entry span.expander {background-image: url(../images/bullet_toggle_plus.png); padding-left: 8px; margin-left: 0; cursor: pointer;}
tr.entry.open span.expander {background-image: url(../images/bullet_toggle_minus.png);}
tr.entry.file td.filename a { margin-left: 16px; }
tr.changeset td.author { text-align: center; width: 15%; }
tr.changeset td.committed_on { text-align: center; width: 15%; }
@@ -223,6 +227,8 @@ height: 1%;
clear:left;
}
html>body .tabular p {overflow:hidden;}
.tabular label{
font-weight: bold;
float: left;
@@ -239,6 +245,8 @@ text-align: left;
width: 200px;
}
input#time_entry_comments { width: 90%;}
#preview fieldset {margin-top: 1em; background: url(../images/draft.png)}
.tabular.settings p{ padding-left: 300px; }

View File

@@ -2,7 +2,7 @@
table.filecontent { border: 1px solid #ccc; border-collapse: collapse; width:98%; }
table.filecontent th { border: 1px solid #ccc; background-color: #eee; }
table.filecontent th.filename { background-color: #ddc; text-align: left; }
table.filecontent tr.spacing { border: 1px solid #d7d7d7; }
table.filecontent tr.spacing td { border: 1px solid #d7d7d7; height: 0.4em; }
table.filecontent th.line-num {
border: 1px solid #d7d7d7;
font-size: 0.8em;

View File

@@ -13,4 +13,11 @@ changes_002:
path: /test/some/path/elsewhere/in/the/repo
from_path:
from_revision:
changes_003:
id: 3
changeset_id: 101
action: M
path: /test/some/path/in/the/repo
from_path:
from_revision:

View File

@@ -4,6 +4,7 @@ custom_fields_001:
min_length: 0
regexp: ""
is_for_all: true
is_filter: true
type: IssueCustomField
max_length: 0
possible_values: MySQL|PostgreSQL|Oracle

View File

@@ -39,4 +39,9 @@ enumerations_010:
name: Development
id: 10
opt: ACTI
is_default: true
enumerations_011:
name: QA
id: 11
opt: ACTI

View File

@@ -71,4 +71,20 @@ issues_005:
assigned_to_id:
author_id: 2
status_id: 1
issues_006:
created_on: <%= 1.minute.ago.to_date.to_s(:db) %>
project_id: 5
updated_on: <%= 1.minute.ago.to_date.to_s(:db) %>
priority_id: 4
subject: Issue of a private subproject
id: 6
fixed_version_id:
category_id:
description: This is an issue of a private subproject of cookbook
tracker_id: 1
assigned_to_id:
author_id: 2
status_id: 1
start_date: <%= Date.today.to_s(:db) %>
due_date: <%= 1.days.from_now.to_date.to_s(:db) %>

View File

@@ -24,4 +24,10 @@ members_004:
role_id: 2
# Locked user
user_id: 5
members_005:
id: 5
created_on: 2006-07-19 19:35:33 +02:00
project_id: 5
role_id: 1
user_id: 2

View File

@@ -3,7 +3,7 @@ projects_001:
created_on: 2006-07-19 19:13:59 +02:00
name: eCookbook
updated_on: 2006-07-19 22:53:01 +02:00
projects_count: 2
projects_count: 3
id: 1
description: Recipes management application
homepage: http://ecookbook.somenet.foo/
@@ -43,3 +43,15 @@ projects_004:
is_public: true
identifier: subproject2
parent_id: 1
projects_005:
created_on: 2006-07-19 19:15:51 +02:00
name: Private child of eCookbook
updated_on: 2006-07-19 19:17:07 +02:00
projects_count: 0
id: 5
description: This is a private subproject of a public project
homepage: ""
is_public: false
identifier: private_child
parent_id: 1

View File

@@ -53,13 +53,44 @@ class IssuesControllerTest < Test::Unit::TestCase
assert_template 'index.rhtml'
assert_not_nil assigns(:issues)
assert_nil assigns(:project)
assert_tag :tag => 'a', :content => /Can't print recipes/
assert_tag :tag => 'a', :content => /Subproject issue/
# private projects hidden
assert_no_tag :tag => 'a', :content => /Issue of a private subproject/
assert_no_tag :tag => 'a', :content => /Issue on project 2/
end
def test_index_with_project
Setting.display_subprojects_issues = 0
get :index, :project_id => 1
assert_response :success
assert_template 'index.rhtml'
assert_not_nil assigns(:issues)
assert_tag :tag => 'a', :content => /Can't print recipes/
assert_no_tag :tag => 'a', :content => /Subproject issue/
end
def test_index_with_project_and_subprojects
Setting.display_subprojects_issues = 1
get :index, :project_id => 1
assert_response :success
assert_template 'index.rhtml'
assert_not_nil assigns(:issues)
assert_tag :tag => 'a', :content => /Can't print recipes/
assert_tag :tag => 'a', :content => /Subproject issue/
assert_no_tag :tag => 'a', :content => /Issue of a private subproject/
end
def test_index_with_project_and_subprojects_should_show_private_subprojects
@request.session[:user_id] = 2
Setting.display_subprojects_issues = 1
get :index, :project_id => 1
assert_response :success
assert_template 'index.rhtml'
assert_not_nil assigns(:issues)
assert_tag :tag => 'a', :content => /Can't print recipes/
assert_tag :tag => 'a', :content => /Subproject issue/
assert_tag :tag => 'a', :content => /Issue of a private subproject/
end
def test_index_with_project_and_filter
@@ -169,13 +200,15 @@ class IssuesControllerTest < Test::Unit::TestCase
:issue => {:tracker_id => 1,
:subject => 'This is the test_new issue',
:description => 'This is the description',
:priority_id => 5},
:priority_id => 5,
:estimated_hours => ''},
:custom_fields => {'2' => 'Value for field 2'}
assert_redirected_to 'issues/show'
issue = Issue.find_by_subject('This is the test_new issue')
assert_not_nil issue
assert_equal 2, issue.author_id
assert_nil issue.estimated_hours
v = issue.custom_values.find_by_custom_field_id(2)
assert_not_nil v
assert_equal 'Value for field 2', v.value
@@ -254,10 +287,13 @@ class IssuesControllerTest < Test::Unit::TestCase
issue = Issue.find(1)
assert_equal 1, issue.status_id
@request.session[:user_id] = 2
post :edit,
:id => 1,
:issue => { :status_id => 2, :assigned_to_id => 3 },
:notes => 'Assigned to dlopper'
assert_difference('TimeEntry.count', 0) do
post :edit,
:id => 1,
:issue => { :status_id => 2, :assigned_to_id => 3 },
:notes => 'Assigned to dlopper',
:time_entry => { :hours => '', :comments => '', :activity_id => Enumeration.get_values('ACTI').first }
end
assert_redirected_to 'issues/show/1'
issue.reload
assert_equal 2, issue.status_id
@@ -288,10 +324,12 @@ class IssuesControllerTest < Test::Unit::TestCase
def test_post_edit_with_note_and_spent_time
@request.session[:user_id] = 2
spent_hours_before = Issue.find(1).spent_hours
post :edit,
:id => 1,
:notes => '2.5 hours added',
:time_entry => { :hours => '2.5', :comments => '', :activity_id => Enumeration.get_values('ACTI').first }
assert_difference('TimeEntry.count') do
post :edit,
:id => 1,
:notes => '2.5 hours added',
:time_entry => { :hours => '2.5', :comments => '', :activity_id => Enumeration.get_values('ACTI').first }
end
assert_redirected_to 'issues/show/1'
issue = Issue.find(1)

View File

@@ -29,6 +29,7 @@ class ProjectsControllerTest < Test::Unit::TestCase
@controller = ProjectsController.new
@request = ActionController::TestRequest.new
@response = ActionController::TestResponse.new
@request.session[:user_id] = nil
end
def test_index
@@ -63,6 +64,21 @@ class ProjectsControllerTest < Test::Unit::TestCase
assert_equal Project.find_by_identifier('ecookbook'), assigns(:project)
end
def test_private_subprojects_hidden
get :show, :id => 'ecookbook'
assert_response :success
assert_template 'show'
assert_no_tag :tag => 'a', :content => /Private child/
end
def test_private_subprojects_visible
@request.session[:user_id] = 2 # manager who is a member of the private subproject
get :show, :id => 'ecookbook'
assert_response :success
assert_template 'show'
assert_tag :tag => 'a', :content => /Private child/
end
def test_settings
@request.session[:user_id] = 2 # manager
get :settings, :id => 1
@@ -222,11 +238,21 @@ class ProjectsControllerTest < Test::Unit::TestCase
assert_not_nil assigns(:calendar)
end
def test_calendar_with_subprojects
def test_calendar_with_subprojects_should_not_show_private_subprojects
get :calendar, :id => 1, :with_subprojects => 1, :tracker_ids => [1, 2]
assert_response :success
assert_template 'calendar'
assert_not_nil assigns(:calendar)
assert_no_tag :tag => 'a', :content => /#6/
end
def test_calendar_with_subprojects_should_show_private_subprojects
@request.session[:user_id] = 2
get :calendar, :id => 1, :with_subprojects => 1, :tracker_ids => [1, 2]
assert_response :success
assert_template 'calendar'
assert_not_nil assigns(:calendar)
assert_tag :tag => 'a', :content => /#6/
end
def test_gantt
@@ -236,13 +262,23 @@ class ProjectsControllerTest < Test::Unit::TestCase
assert_not_nil assigns(:events)
end
def test_gantt_with_subprojects
def test_gantt_with_subprojects_should_not_show_private_subprojects
get :gantt, :id => 1, :with_subprojects => 1, :tracker_ids => [1, 2]
assert_response :success
assert_template 'gantt.rhtml'
assert_not_nil assigns(:events)
assert_no_tag :tag => 'a', :content => /#6/
end
def test_gantt_with_subprojects_should_show_private_subprojects
@request.session[:user_id] = 2
get :gantt, :id => 1, :with_subprojects => 1, :tracker_ids => [1, 2]
assert_response :success
assert_template 'gantt.rhtml'
assert_not_nil assigns(:events)
assert_tag :tag => 'a', :content => /#6/
end
def test_gantt_export_to_pdf
get :gantt, :id => 1, :format => 'pdf'
assert_response :success

View File

@@ -97,6 +97,32 @@ class RepositoriesSubversionControllerTest < Test::Unit::TestCase
assert_equal 'folder', assigns(:entry).name
end
def test_revision
get :revision, :id => 1, :rev => 2
assert_response :success
assert_template 'revision'
assert_tag :tag => 'tr',
:child => { :tag => 'td', :content => %r{/test/some/path/in/the/repo} },
:child => { :tag => 'td',
:child => { :tag => 'a', :attributes => { :href => '/repositories/diff/ecookbook/test/some/path/in/the/repo?rev=2' } }
}
end
def test_revision_with_repository_pointing_to_a_subdirectory
r = Project.find(1).repository
# Changes repository url to a subdirectory
r.update_attribute :url, (r.url + '/test/some')
get :revision, :id => 1, :rev => 2
assert_response :success
assert_template 'revision'
assert_tag :tag => 'tr',
:child => { :tag => 'td', :content => %r{/test/some/path/in/the/repo} },
:child => { :tag => 'td',
:child => { :tag => 'a', :attributes => { :href => '/repositories/diff/ecookbook/path/in/the/repo?rev=2' } }
}
end
def test_diff
get :diff, :id => 1, :rev => 3
assert_response :success

View File

@@ -30,11 +30,22 @@ class TimelogControllerTest < Test::Unit::TestCase
@response = ActionController::TestResponse.new
end
def test_create
def test_get_edit
@request.session[:user_id] = 3
get :edit, :project_id => 1
assert_response :success
assert_template 'edit'
# Default activity selected
assert_tag :tag => 'option', :attributes => { :selected => 'selected' },
:content => 'Development'
end
def test_post_edit
@request.session[:user_id] = 3
post :edit, :project_id => 1,
:time_entry => {:comments => 'Some work on TimelogControllerTest',
:activity_id => '10',
# Not the default activity
:activity_id => '11',
:spent_on => '2008-03-14',
:issue_id => '1',
:hours => '7.3'}
@@ -43,6 +54,7 @@ class TimelogControllerTest < Test::Unit::TestCase
i = Issue.find(1)
t = TimeEntry.find_by_comments('Some work on TimelogControllerTest')
assert_not_nil t
assert_equal 11, t.activity_id
assert_equal 7.3, t.hours
assert_equal 3, t.user_id
assert_equal i, t.issue

View File

@@ -46,4 +46,18 @@ class WelcomeControllerTest < Test::Unit::TestCase
get :index
assert_equal :fr, @controller.current_language
end
def test_browser_language_alternate
Setting.default_language = 'en'
@request.env['HTTP_ACCEPT_LANGUAGE'] = 'zh-TW'
get :index
assert_equal :"zh-tw", @controller.current_language
end
def test_browser_language_alternate_not_valid
Setting.default_language = 'en'
@request.env['HTTP_ACCEPT_LANGUAGE'] = 'fr-CA'
get :index
assert_equal :fr, @controller.current_language
end
end

View File

@@ -0,0 +1,32 @@
# redMine - project management software
# Copyright (C) 2006-2007 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 AttachmentTest < Test::Unit::TestCase
def setup
end
def test_diskfilename
assert Attachment.disk_filename("test_file.txt") =~ /^\d{12}_test_file.txt$/
assert_equal 'test_file.txt', Attachment.disk_filename("test_file.txt")[13..-1]
assert_equal '770c509475505f37c2b8fb6030434d6b.txt', Attachment.disk_filename("test_accentué.txt")[13..-1]
assert_equal 'f8139524ebb8f32e51976982cd20a85d', Attachment.disk_filename("test_accentué")[13..-1]
assert_equal 'cbb5b0f30978ba03731d61f9f6d10011', Attachment.disk_filename("test_accentué.ça")[13..-1]
end
end

View File

@@ -39,6 +39,17 @@ class ChangesetTest < Test::Unit::TestCase
assert fixed.closed?
assert_equal 90, fixed.done_ratio
end
def test_ref_keywords_any_line_start
Setting.commit_ref_keywords = '*'
c = Changeset.new(:repository => Project.find(1).repository,
:committed_on => Time.now,
:comments => '#1 is the reason of this commit')
c.scan_comment_for_issue_ids
assert_equal [1], c.issue_ids.sort
end
def test_previous
changeset = Changeset.find_by_revision('3')

View File

@@ -58,7 +58,9 @@ class ApplicationHelperTest < HelperTestCase
to_test = {
'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)":http://foo.bar' => '<a href="http://foo.bar" title="Link title" class="external">link</a>',
# 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"
}
to_test.each { |text, result| assert_equal "<p>#{result}</p>", textilizable(text) }
end
@@ -106,7 +108,9 @@ class ApplicationHelperTest < HelperTestCase
'!version:"1.0"' => 'version:"1.0"',
'!source:/some/file' => 'source:/some/file',
# invalid expressions
'source:' => 'source:'
'source:' => 'source:',
# url hash
"http://foo.bar/FAQ#3" => '<a class="external" href="http://foo.bar/FAQ#3">http://foo.bar/FAQ#3</a>',
}
@project = Project.find(1)
to_test.each { |text, result| assert_equal "<p>#{result}</p>", textilizable(text) }
@@ -141,6 +145,16 @@ class ApplicationHelperTest < HelperTestCase
"<pre>\nline 1\nline2</pre>" => "<pre>\nline 1\nline2</pre>",
"<pre><code>\nline 1\nline2</code></pre>" => "<pre><code>\nline 1\nline2</code></pre>",
"<pre><div>content</div></pre>" => "<pre>&lt;div&gt;content&lt;/div&gt;</pre>",
"HTML comment: <!-- no comments -->" => "<p>HTML comment: &lt;!-- no comments --&gt;</p>",
"<!-- opening comment" => "<p>&lt;!-- opening comment</p>"
}
to_test.each { |text, result| assert_equal result, textilizable(text) }
end
def test_allowed_html_tags
to_test = {
"<pre>preformatted text</pre>" => "<pre>preformatted text</pre>",
"<notextile>no *textile* formatting</notextile>" => "no *textile* formatting",
}
to_test.each { |text, result| assert_equal result, textilizable(text) }
end
@@ -160,6 +174,46 @@ class ApplicationHelperTest < HelperTestCase
to_test.each { |text, result| assert_equal "<table>#{result}</table>", textilizable(text).gsub(/[\t\n]/, '') }
end
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>)'
}
to_test.each { |text, result| assert_equal "<p>#{result}</p>", textilizable(text) }
end
def test_wiki_horizontal_rule
assert_equal '<hr />', textilizable('---')
assert_equal '<p>Dashes: ---</p>', textilizable('Dashes: ---')
end
def test_table_of_content
raw = <<-RAW
{{toc}}
h1. Title
Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Maecenas sed libero.
h2. Subtitle
Nullam commodo metus accumsan nulla. Curabitur lobortis dui id dolor.
h2. Subtitle with %{color:red}red text%
h1. Another title
RAW
expected = '<div class="toc">' +
'<a href="#1" class="heading1">Title</a>' +
'<a href="#2" class="heading2">Subtitle</a>' +
'<a href="#3" class="heading2">Subtitle with red text</a>' +
'<a href="#4" class="heading1">Another title</a>' +
'</div>'
assert textilizable(raw).include?(expected)
end
def test_macro_hello_world
text = "{{hello_world}}"
assert textilizable(text).match(/Hello world!/)

View File

@@ -101,7 +101,7 @@ class ProjectTest < Test::Unit::TestCase
assert sub.save
assert_equal @ecookbook.id, sub.parent.id
@ecookbook.reload
assert_equal 3, @ecookbook.children.size
assert_equal 4, @ecookbook.children.size
end
def test_subproject_invalid

View File

@@ -29,6 +29,80 @@ class QueryTest < Test::Unit::TestCase
assert_equal Issue.find(3), issues.first
end
def test_operator_none
query = Query.new(:project => Project.find(1), :name => '_')
query.add_filter('fixed_version_id', '!*', [''])
query.add_filter('cf_1', '!*', [''])
assert query.statement.include?("#{Issue.table_name}.fixed_version_id IS NULL")
assert query.statement.include?("#{CustomValue.table_name}.value IS NULL OR #{CustomValue.table_name}.value = ''")
issues = Issue.find :all,:include => [ :assigned_to, :status, :tracker, :project, :priority ], :conditions => query.statement
end
def test_operator_all
query = Query.new(:project => Project.find(1), :name => '_')
query.add_filter('fixed_version_id', '*', [''])
query.add_filter('cf_1', '*', [''])
assert query.statement.include?("#{Issue.table_name}.fixed_version_id IS NOT NULL")
assert query.statement.include?("#{CustomValue.table_name}.value IS NOT NULL AND #{CustomValue.table_name}.value <> ''")
issues = Issue.find :all,:include => [ :assigned_to, :status, :tracker, :project, :priority ], :conditions => query.statement
end
def test_operator_greater_than
query = Query.new(:project => Project.find(1), :name => '_')
query.add_filter('done_ratio', '>=', ['40'])
assert query.statement.include?("#{Issue.table_name}.done_ratio >= 40")
issues = Issue.find :all,:include => [ :assigned_to, :status, :tracker, :project, :priority ], :conditions => query.statement
end
def test_operator_in_more_than
query = Query.new(:project => Project.find(1), :name => '_')
query.add_filter('due_date', '>t+', ['15'])
assert query.statement.include?("#{Issue.table_name}.due_date >=")
issues = Issue.find :all,:include => [ :assigned_to, :status, :tracker, :project, :priority ], :conditions => query.statement
end
def test_operator_in_less_than
query = Query.new(:project => Project.find(1), :name => '_')
query.add_filter('due_date', '<t+', ['15'])
assert query.statement.include?("#{Issue.table_name}.due_date BETWEEN")
issues = Issue.find :all,:include => [ :assigned_to, :status, :tracker, :project, :priority ], :conditions => query.statement
end
def test_operator_today
query = Query.new(:project => Project.find(1), :name => '_')
query.add_filter('due_date', 't', [''])
assert query.statement.include?("#{Issue.table_name}.due_date BETWEEN")
issues = Issue.find :all,:include => [ :assigned_to, :status, :tracker, :project, :priority ], :conditions => query.statement
end
def test_operator_this_week_on_date
query = Query.new(:project => Project.find(1), :name => '_')
query.add_filter('due_date', 'w', [''])
assert query.statement.include?("#{Issue.table_name}.due_date BETWEEN")
issues = Issue.find :all,:include => [ :assigned_to, :status, :tracker, :project, :priority ], :conditions => query.statement
end
def test_operator_this_week_on_datetime
query = Query.new(:project => Project.find(1), :name => '_')
query.add_filter('created_on', 'w', [''])
assert query.statement.include?("#{Issue.table_name}.created_on BETWEEN")
issues = Issue.find :all,:include => [ :assigned_to, :status, :tracker, :project, :priority ], :conditions => query.statement
end
def test_operator_contains
query = Query.new(:project => Project.find(1), :name => '_')
query.add_filter('subject', '~', ['string'])
assert query.statement.include?("#{Issue.table_name}.subject LIKE '%string%'")
issues = Issue.find :all,:include => [ :assigned_to, :status, :tracker, :project, :priority ], :conditions => query.statement
end
def test_operator_does_not_contains
query = Query.new(:project => Project.find(1), :name => '_')
query.add_filter('subject', '!~', ['string'])
assert query.statement.include?("#{Issue.table_name}.subject NOT LIKE '%string%'")
issues = Issue.find :all,:include => [ :assigned_to, :status, :tracker, :project, :priority ], :conditions => query.statement
end
def test_default_columns
q = Query.new
assert !q.columns.empty?
@@ -42,6 +116,11 @@ class QueryTest < Test::Unit::TestCase
assert q.has_column?(c)
end
def test_label_for
q = Query.new
assert_equal 'assigned_to', q.label_for('assigned_to_id')
end
def test_editable_by
admin = User.find(1)
manager = User.find(2)

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