##// END OF EJS Templates
* Referencing issues in commit messages: enter * in 'Referencing keywords' to link any issue id without using keywords....
Jean-Philippe Lang -
r905:99f9aea80a2b
parent child
Show More
@@ -0,0 +1,42
1 # redMine - project management software
2 # Copyright (C) 2006-2007 Jean-Philippe Lang
3 #
4 # This program is free software; you can redistribute it and/or
5 # modify it under the terms of the GNU General Public License
6 # as published by the Free Software Foundation; either version 2
7 # of the License, or (at your option) any later version.
8 #
9 # This program is distributed in the hope that it will be useful,
10 # but WITHOUT ANY WARRANTY; without even the implied warranty of
11 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 # GNU General Public License for more details.
13 #
14 # You should have received a copy of the GNU General Public License
15 # along with this program; if not, write to the Free Software
16 # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
17
18 require File.dirname(__FILE__) + '/../test_helper'
19
20 class ChangesetTest < Test::Unit::TestCase
21 fixtures :projects, :repositories, :issues, :issue_statuses, :changesets, :changes, :issue_categories, :enumerations, :custom_fields, :custom_values, :users, :members, :trackers
22
23 def setup
24 end
25
26 def test_ref_keywords_any
27 Setting.commit_fix_status_id = IssueStatus.find(:first, :conditions => ["is_closed = ?", true]).id
28 Setting.commit_fix_done_ratio = '90'
29 Setting.commit_ref_keywords = '*'
30 Setting.commit_fix_keywords = 'fixes , closes'
31
32 c = Changeset.new(:repository => Project.find(1).repository,
33 :committed_on => Time.now,
34 :comments => 'New commit (#2). Fixes #1')
35 c.scan_comment_for_issue_ids
36
37 assert_equal [1, 2], c.issue_ids.sort
38 fixed = Issue.find(1)
39 assert fixed.closed?
40 assert_equal 90, fixed.done_ratio
41 end
42 end
@@ -1,403 +1,403
1 # redMine - project management software
1 # redMine - project management software
2 # Copyright (C) 2006-2007 Jean-Philippe Lang
2 # Copyright (C) 2006-2007 Jean-Philippe Lang
3 #
3 #
4 # This program is free software; you can redistribute it and/or
4 # This program is free software; you can redistribute it and/or
5 # modify it under the terms of the GNU General Public License
5 # modify it under the terms of the GNU General Public License
6 # as published by the Free Software Foundation; either version 2
6 # as published by the Free Software Foundation; either version 2
7 # of the License, or (at your option) any later version.
7 # of the License, or (at your option) any later version.
8 #
8 #
9 # This program is distributed in the hope that it will be useful,
9 # This program is distributed in the hope that it will be useful,
10 # but WITHOUT ANY WARRANTY; without even the implied warranty of
10 # but WITHOUT ANY WARRANTY; without even the implied warranty of
11 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 # GNU General Public License for more details.
12 # GNU General Public License for more details.
13 #
13 #
14 # You should have received a copy of the GNU General Public License
14 # You should have received a copy of the GNU General Public License
15 # along with this program; if not, write to the Free Software
15 # along with this program; if not, write to the Free Software
16 # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
16 # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
17
17
18 module ApplicationHelper
18 module ApplicationHelper
19 include Redmine::WikiFormatting::Macros::Definitions
19 include Redmine::WikiFormatting::Macros::Definitions
20
20
21 def current_role
21 def current_role
22 @current_role ||= User.current.role_for_project(@project)
22 @current_role ||= User.current.role_for_project(@project)
23 end
23 end
24
24
25 # Return true if user is authorized for controller/action, otherwise false
25 # Return true if user is authorized for controller/action, otherwise false
26 def authorize_for(controller, action)
26 def authorize_for(controller, action)
27 User.current.allowed_to?({:controller => controller, :action => action}, @project)
27 User.current.allowed_to?({:controller => controller, :action => action}, @project)
28 end
28 end
29
29
30 # Display a link if user is authorized
30 # Display a link if user is authorized
31 def link_to_if_authorized(name, options = {}, html_options = nil, *parameters_for_method_reference)
31 def link_to_if_authorized(name, options = {}, html_options = nil, *parameters_for_method_reference)
32 link_to(name, options, html_options, *parameters_for_method_reference) if authorize_for(options[:controller] || params[:controller], options[:action])
32 link_to(name, options, html_options, *parameters_for_method_reference) if authorize_for(options[:controller] || params[:controller], options[:action])
33 end
33 end
34
34
35 # Display a link to user's account page
35 # Display a link to user's account page
36 def link_to_user(user)
36 def link_to_user(user)
37 link_to user.name, :controller => 'account', :action => 'show', :id => user
37 link_to user.name, :controller => 'account', :action => 'show', :id => user
38 end
38 end
39
39
40 def link_to_issue(issue)
40 def link_to_issue(issue)
41 link_to "#{issue.tracker.name} ##{issue.id}", :controller => "issues", :action => "show", :id => issue
41 link_to "#{issue.tracker.name} ##{issue.id}", :controller => "issues", :action => "show", :id => issue
42 end
42 end
43
43
44 def toggle_link(name, id, options={})
44 def toggle_link(name, id, options={})
45 onclick = "Element.toggle('#{id}'); "
45 onclick = "Element.toggle('#{id}'); "
46 onclick << (options[:focus] ? "Form.Element.focus('#{options[:focus]}'); " : "this.blur(); ")
46 onclick << (options[:focus] ? "Form.Element.focus('#{options[:focus]}'); " : "this.blur(); ")
47 onclick << "return false;"
47 onclick << "return false;"
48 link_to(name, "#", :onclick => onclick)
48 link_to(name, "#", :onclick => onclick)
49 end
49 end
50
50
51 def show_and_goto_link(name, id, options={})
51 def show_and_goto_link(name, id, options={})
52 onclick = "Element.show('#{id}'); "
52 onclick = "Element.show('#{id}'); "
53 onclick << (options[:focus] ? "Form.Element.focus('#{options[:focus]}'); " : "this.blur(); ")
53 onclick << (options[:focus] ? "Form.Element.focus('#{options[:focus]}'); " : "this.blur(); ")
54 onclick << "location.href='##{id}-anchor'; "
54 onclick << "location.href='##{id}-anchor'; "
55 onclick << "return false;"
55 onclick << "return false;"
56 link_to(name, "#", options.merge(:onclick => onclick))
56 link_to(name, "#", options.merge(:onclick => onclick))
57 end
57 end
58
58
59 def image_to_function(name, function, html_options = {})
59 def image_to_function(name, function, html_options = {})
60 html_options.symbolize_keys!
60 html_options.symbolize_keys!
61 tag(:input, html_options.merge({
61 tag(:input, html_options.merge({
62 :type => "image", :src => image_path(name),
62 :type => "image", :src => image_path(name),
63 :onclick => (html_options[:onclick] ? "#{html_options[:onclick]}; " : "") + "#{function};"
63 :onclick => (html_options[:onclick] ? "#{html_options[:onclick]}; " : "") + "#{function};"
64 }))
64 }))
65 end
65 end
66
66
67 def prompt_to_remote(name, text, param, url, html_options = {})
67 def prompt_to_remote(name, text, param, url, html_options = {})
68 html_options[:onclick] = "promptToRemote('#{text}', '#{param}', '#{url_for(url)}'); return false;"
68 html_options[:onclick] = "promptToRemote('#{text}', '#{param}', '#{url_for(url)}'); return false;"
69 link_to name, {}, html_options
69 link_to name, {}, html_options
70 end
70 end
71
71
72 def format_date(date)
72 def format_date(date)
73 return nil unless date
73 return nil unless date
74 # "Setting.date_format.size < 2" is a temporary fix (content of date_format setting changed)
74 # "Setting.date_format.size < 2" is a temporary fix (content of date_format setting changed)
75 @date_format ||= (Setting.date_format.blank? || Setting.date_format.size < 2 ? l(:general_fmt_date) : Setting.date_format)
75 @date_format ||= (Setting.date_format.blank? || Setting.date_format.size < 2 ? l(:general_fmt_date) : Setting.date_format)
76 date.strftime(@date_format)
76 date.strftime(@date_format)
77 end
77 end
78
78
79 def format_time(time, include_date = true)
79 def format_time(time, include_date = true)
80 return nil unless time
80 return nil unless time
81 time = time.to_time if time.is_a?(String)
81 time = time.to_time if time.is_a?(String)
82 zone = User.current.time_zone
82 zone = User.current.time_zone
83 if time.utc?
83 if time.utc?
84 local = zone ? zone.adjust(time) : time.getlocal
84 local = zone ? zone.adjust(time) : time.getlocal
85 else
85 else
86 local = zone ? zone.adjust(time.getutc) : time
86 local = zone ? zone.adjust(time.getutc) : time
87 end
87 end
88 @date_format ||= (Setting.date_format.blank? || Setting.date_format.size < 2 ? l(:general_fmt_date) : Setting.date_format)
88 @date_format ||= (Setting.date_format.blank? || Setting.date_format.size < 2 ? l(:general_fmt_date) : Setting.date_format)
89 @time_format ||= (Setting.time_format.blank? ? l(:general_fmt_time) : Setting.time_format)
89 @time_format ||= (Setting.time_format.blank? ? l(:general_fmt_time) : Setting.time_format)
90 include_date ? local.strftime("#{@date_format} #{@time_format}") : local.strftime(@time_format)
90 include_date ? local.strftime("#{@date_format} #{@time_format}") : local.strftime(@time_format)
91 end
91 end
92
92
93 def authoring(created, author)
93 def authoring(created, author)
94 time_tag = content_tag('acronym', distance_of_time_in_words(Time.now, created), :title => format_time(created))
94 time_tag = content_tag('acronym', distance_of_time_in_words(Time.now, created), :title => format_time(created))
95 l(:label_added_time_by, author.name, time_tag)
95 l(:label_added_time_by, author.name, time_tag)
96 end
96 end
97
97
98 def day_name(day)
98 def day_name(day)
99 l(:general_day_names).split(',')[day-1]
99 l(:general_day_names).split(',')[day-1]
100 end
100 end
101
101
102 def month_name(month)
102 def month_name(month)
103 l(:actionview_datehelper_select_month_names).split(',')[month-1]
103 l(:actionview_datehelper_select_month_names).split(',')[month-1]
104 end
104 end
105
105
106 def pagination_links_full(paginator, options={}, html_options={})
106 def pagination_links_full(paginator, options={}, html_options={})
107 page_param = options.delete(:page_param) || :page
107 page_param = options.delete(:page_param) || :page
108
108
109 html = ''
109 html = ''
110 html << link_to_remote(('&#171; ' + l(:label_previous)),
110 html << link_to_remote(('&#171; ' + l(:label_previous)),
111 {:update => "content", :url => options.merge(page_param => paginator.current.previous)},
111 {:update => "content", :url => options.merge(page_param => paginator.current.previous)},
112 {:href => url_for(:params => options.merge(page_param => paginator.current.previous))}) + ' ' if paginator.current.previous
112 {:href => url_for(:params => options.merge(page_param => paginator.current.previous))}) + ' ' if paginator.current.previous
113
113
114 html << (pagination_links_each(paginator, options) do |n|
114 html << (pagination_links_each(paginator, options) do |n|
115 link_to_remote(n.to_s,
115 link_to_remote(n.to_s,
116 {:url => {:params => options.merge(page_param => n)}, :update => 'content'},
116 {:url => {:params => options.merge(page_param => n)}, :update => 'content'},
117 {:href => url_for(:params => options.merge(page_param => n))})
117 {:href => url_for(:params => options.merge(page_param => n))})
118 end || '')
118 end || '')
119
119
120 html << ' ' + link_to_remote((l(:label_next) + ' &#187;'),
120 html << ' ' + link_to_remote((l(:label_next) + ' &#187;'),
121 {:update => "content", :url => options.merge(page_param => paginator.current.next)},
121 {:update => "content", :url => options.merge(page_param => paginator.current.next)},
122 {:href => url_for(:params => options.merge(page_param => paginator.current.next))}) if paginator.current.next
122 {:href => url_for(:params => options.merge(page_param => paginator.current.next))}) if paginator.current.next
123 html
123 html
124 end
124 end
125
125
126 def set_html_title(text)
126 def set_html_title(text)
127 @html_header_title = text
127 @html_header_title = text
128 end
128 end
129
129
130 def html_title
130 def html_title
131 title = []
131 title = []
132 title << @project.name if @project
132 title << @project.name if @project
133 title << @html_header_title
133 title << @html_header_title
134 title << Setting.app_title
134 title << Setting.app_title
135 title.compact.join(' - ')
135 title.compact.join(' - ')
136 end
136 end
137
137
138 ACCESSKEYS = {:edit => 'e',
138 ACCESSKEYS = {:edit => 'e',
139 :preview => 'r',
139 :preview => 'r',
140 :quick_search => 'f',
140 :quick_search => 'f',
141 :search => '4',
141 :search => '4',
142 }.freeze unless const_defined?(:ACCESSKEYS)
142 }.freeze unless const_defined?(:ACCESSKEYS)
143
143
144 def accesskey(s)
144 def accesskey(s)
145 ACCESSKEYS[s]
145 ACCESSKEYS[s]
146 end
146 end
147
147
148 # Formats text according to system settings.
148 # Formats text according to system settings.
149 # 2 ways to call this method:
149 # 2 ways to call this method:
150 # * with a String: textilizable(text, options)
150 # * with a String: textilizable(text, options)
151 # * with an object and one of its attribute: textilizable(issue, :description, options)
151 # * with an object and one of its attribute: textilizable(issue, :description, options)
152 def textilizable(*args)
152 def textilizable(*args)
153 options = args.last.is_a?(Hash) ? args.pop : {}
153 options = args.last.is_a?(Hash) ? args.pop : {}
154 case args.size
154 case args.size
155 when 1
155 when 1
156 obj = nil
156 obj = nil
157 text = args.shift || ''
157 text = args.shift || ''
158 when 2
158 when 2
159 obj = args.shift
159 obj = args.shift
160 text = obj.send(args.shift)
160 text = obj.send(args.shift)
161 else
161 else
162 raise ArgumentError, 'invalid arguments to textilizable'
162 raise ArgumentError, 'invalid arguments to textilizable'
163 end
163 end
164
164
165 # when using an image link, try to use an attachment, if possible
165 # when using an image link, try to use an attachment, if possible
166 attachments = options[:attachments]
166 attachments = options[:attachments]
167 if attachments
167 if attachments
168 text = text.gsub(/!([<>=]*)(\S+\.(gif|jpg|jpeg|png))!/) do |m|
168 text = text.gsub(/!([<>=]*)(\S+\.(gif|jpg|jpeg|png))!/) do |m|
169 align = $1
169 align = $1
170 filename = $2
170 filename = $2
171 rf = Regexp.new(filename, Regexp::IGNORECASE)
171 rf = Regexp.new(filename, Regexp::IGNORECASE)
172 # search for the picture in attachments
172 # search for the picture in attachments
173 if found = attachments.detect { |att| att.filename =~ rf }
173 if found = attachments.detect { |att| att.filename =~ rf }
174 image_url = url_for :controller => 'attachments', :action => 'download', :id => found.id
174 image_url = url_for :controller => 'attachments', :action => 'download', :id => found.id
175 "!#{align}#{image_url}!"
175 "!#{align}#{image_url}!"
176 else
176 else
177 "!#{align}#{filename}!"
177 "!#{align}#{filename}!"
178 end
178 end
179 end
179 end
180 end
180 end
181
181
182 text = (Setting.text_formatting == 'textile') ?
182 text = (Setting.text_formatting == 'textile') ?
183 Redmine::WikiFormatting.to_html(text) { |macro, args| exec_macro(macro, obj, args) } :
183 Redmine::WikiFormatting.to_html(text) { |macro, args| exec_macro(macro, obj, args) } :
184 simple_format(auto_link(h(text)))
184 simple_format(auto_link(h(text)))
185
185
186 # different methods for formatting wiki links
186 # different methods for formatting wiki links
187 case options[:wiki_links]
187 case options[:wiki_links]
188 when :local
188 when :local
189 # used for local links to html files
189 # used for local links to html files
190 format_wiki_link = Proc.new {|project, title| "#{title}.html" }
190 format_wiki_link = Proc.new {|project, title| "#{title}.html" }
191 when :anchor
191 when :anchor
192 # used for single-file wiki export
192 # used for single-file wiki export
193 format_wiki_link = Proc.new {|project, title| "##{title}" }
193 format_wiki_link = Proc.new {|project, title| "##{title}" }
194 else
194 else
195 format_wiki_link = Proc.new {|project, title| url_for :controller => 'wiki', :action => 'index', :id => project, :page => title }
195 format_wiki_link = Proc.new {|project, title| url_for :controller => 'wiki', :action => 'index', :id => project, :page => title }
196 end
196 end
197
197
198 project = options[:project] || @project
198 project = options[:project] || @project
199
199
200 # turn wiki links into html links
200 # turn wiki links into html links
201 # example:
201 # example:
202 # [[mypage]]
202 # [[mypage]]
203 # [[mypage|mytext]]
203 # [[mypage|mytext]]
204 # wiki links can refer other project wikis, using project name or identifier:
204 # wiki links can refer other project wikis, using project name or identifier:
205 # [[project:]] -> wiki starting page
205 # [[project:]] -> wiki starting page
206 # [[project:|mytext]]
206 # [[project:|mytext]]
207 # [[project:mypage]]
207 # [[project:mypage]]
208 # [[project:mypage|mytext]]
208 # [[project:mypage|mytext]]
209 text = text.gsub(/\[\[([^\]\|]+)(\|([^\]\|]+))?\]\]/) do |m|
209 text = text.gsub(/\[\[([^\]\|]+)(\|([^\]\|]+))?\]\]/) do |m|
210 link_project = project
210 link_project = project
211 page = $1
211 page = $1
212 title = $3
212 title = $3
213 if page =~ /^([^\:]+)\:(.*)$/
213 if page =~ /^([^\:]+)\:(.*)$/
214 link_project = Project.find_by_name($1) || Project.find_by_identifier($1)
214 link_project = Project.find_by_name($1) || Project.find_by_identifier($1)
215 page = title || $2
215 page = title || $2
216 title = $1 if page.blank?
216 title = $1 if page.blank?
217 end
217 end
218
218
219 if link_project && link_project.wiki
219 if link_project && link_project.wiki
220 # check if page exists
220 # check if page exists
221 wiki_page = link_project.wiki.find_page(page)
221 wiki_page = link_project.wiki.find_page(page)
222 link_to((title || page), format_wiki_link.call(link_project, Wiki.titleize(page)),
222 link_to((title || page), format_wiki_link.call(link_project, Wiki.titleize(page)),
223 :class => ('wiki-page' + (wiki_page ? '' : ' new')))
223 :class => ('wiki-page' + (wiki_page ? '' : ' new')))
224 else
224 else
225 # project or wiki doesn't exist
225 # project or wiki doesn't exist
226 title || page
226 title || page
227 end
227 end
228 end
228 end
229
229
230 # turn issue and revision ids into links
230 # turn issue and revision ids into links
231 # example:
231 # example:
232 # #52 -> <a href="/issues/show/52">#52</a>
232 # #52 -> <a href="/issues/show/52">#52</a>
233 # r52 -> <a href="/repositories/revision/6?rev=52">r52</a> (project.id is 6)
233 # r52 -> <a href="/repositories/revision/6?rev=52">r52</a> (project.id is 6)
234 text = text.gsub(%r{([\s,-^])(#|r)(\d+)(?=[[:punct:]]|\s|<|$)}) do |m|
234 text = text.gsub(%r{([\s\(,-^])(#|r)(\d+)(?=[[:punct:]]|\s|<|$)}) do |m|
235 leading, otype, oid = $1, $2, $3
235 leading, otype, oid = $1, $2, $3
236 link = nil
236 link = nil
237 if otype == 'r'
237 if otype == 'r'
238 if project && (changeset = project.changesets.find_by_revision(oid))
238 if project && (changeset = project.changesets.find_by_revision(oid))
239 link = link_to("r#{oid}", {:controller => 'repositories', :action => 'revision', :id => project.id, :rev => oid}, :class => 'changeset',
239 link = link_to("r#{oid}", {:controller => 'repositories', :action => 'revision', :id => project.id, :rev => oid}, :class => 'changeset',
240 :title => truncate(changeset.comments, 100))
240 :title => truncate(changeset.comments, 100))
241 end
241 end
242 else
242 else
243 if issue = Issue.find_by_id(oid.to_i, :include => [:project, :status], :conditions => Project.visible_by(User.current))
243 if issue = Issue.find_by_id(oid.to_i, :include => [:project, :status], :conditions => Project.visible_by(User.current))
244 link = link_to("##{oid}", {:controller => 'issues', :action => 'show', :id => oid}, :class => 'issue',
244 link = link_to("##{oid}", {:controller => 'issues', :action => 'show', :id => oid}, :class => 'issue',
245 :title => "#{truncate(issue.subject, 100)} (#{issue.status.name})")
245 :title => "#{truncate(issue.subject, 100)} (#{issue.status.name})")
246 link = content_tag('del', link) if issue.closed?
246 link = content_tag('del', link) if issue.closed?
247 end
247 end
248 end
248 end
249 leading + (link || "#{otype}#{oid}")
249 leading + (link || "#{otype}#{oid}")
250 end
250 end
251
251
252 text
252 text
253 end
253 end
254
254
255 # Same as Rails' simple_format helper without using paragraphs
255 # Same as Rails' simple_format helper without using paragraphs
256 def simple_format_without_paragraph(text)
256 def simple_format_without_paragraph(text)
257 text.to_s.
257 text.to_s.
258 gsub(/\r\n?/, "\n"). # \r\n and \r -> \n
258 gsub(/\r\n?/, "\n"). # \r\n and \r -> \n
259 gsub(/\n\n+/, "<br /><br />"). # 2+ newline -> 2 br
259 gsub(/\n\n+/, "<br /><br />"). # 2+ newline -> 2 br
260 gsub(/([^\n]\n)(?=[^\n])/, '\1<br />') # 1 newline -> br
260 gsub(/([^\n]\n)(?=[^\n])/, '\1<br />') # 1 newline -> br
261 end
261 end
262
262
263 def error_messages_for(object_name, options = {})
263 def error_messages_for(object_name, options = {})
264 options = options.symbolize_keys
264 options = options.symbolize_keys
265 object = instance_variable_get("@#{object_name}")
265 object = instance_variable_get("@#{object_name}")
266 if object && !object.errors.empty?
266 if object && !object.errors.empty?
267 # build full_messages here with controller current language
267 # build full_messages here with controller current language
268 full_messages = []
268 full_messages = []
269 object.errors.each do |attr, msg|
269 object.errors.each do |attr, msg|
270 next if msg.nil?
270 next if msg.nil?
271 msg = msg.first if msg.is_a? Array
271 msg = msg.first if msg.is_a? Array
272 if attr == "base"
272 if attr == "base"
273 full_messages << l(msg)
273 full_messages << l(msg)
274 else
274 else
275 full_messages << "&#171; " + (l_has_string?("field_" + attr) ? l("field_" + attr) : object.class.human_attribute_name(attr)) + " &#187; " + l(msg) unless attr == "custom_values"
275 full_messages << "&#171; " + (l_has_string?("field_" + attr) ? l("field_" + attr) : object.class.human_attribute_name(attr)) + " &#187; " + l(msg) unless attr == "custom_values"
276 end
276 end
277 end
277 end
278 # retrieve custom values error messages
278 # retrieve custom values error messages
279 if object.errors[:custom_values]
279 if object.errors[:custom_values]
280 object.custom_values.each do |v|
280 object.custom_values.each do |v|
281 v.errors.each do |attr, msg|
281 v.errors.each do |attr, msg|
282 next if msg.nil?
282 next if msg.nil?
283 msg = msg.first if msg.is_a? Array
283 msg = msg.first if msg.is_a? Array
284 full_messages << "&#171; " + v.custom_field.name + " &#187; " + l(msg)
284 full_messages << "&#171; " + v.custom_field.name + " &#187; " + l(msg)
285 end
285 end
286 end
286 end
287 end
287 end
288 content_tag("div",
288 content_tag("div",
289 content_tag(
289 content_tag(
290 options[:header_tag] || "span", lwr(:gui_validation_error, full_messages.length) + ":"
290 options[:header_tag] || "span", lwr(:gui_validation_error, full_messages.length) + ":"
291 ) +
291 ) +
292 content_tag("ul", full_messages.collect { |msg| content_tag("li", msg) }),
292 content_tag("ul", full_messages.collect { |msg| content_tag("li", msg) }),
293 "id" => options[:id] || "errorExplanation", "class" => options[:class] || "errorExplanation"
293 "id" => options[:id] || "errorExplanation", "class" => options[:class] || "errorExplanation"
294 )
294 )
295 else
295 else
296 ""
296 ""
297 end
297 end
298 end
298 end
299
299
300 def lang_options_for_select(blank=true)
300 def lang_options_for_select(blank=true)
301 (blank ? [["(auto)", ""]] : []) +
301 (blank ? [["(auto)", ""]] : []) +
302 GLoc.valid_languages.collect{|lang| [ ll(lang.to_s, :general_lang_name), lang.to_s]}.sort{|x,y| x.first <=> y.first }
302 GLoc.valid_languages.collect{|lang| [ ll(lang.to_s, :general_lang_name), lang.to_s]}.sort{|x,y| x.first <=> y.first }
303 end
303 end
304
304
305 def label_tag_for(name, option_tags = nil, options = {})
305 def label_tag_for(name, option_tags = nil, options = {})
306 label_text = l(("field_"+field.to_s.gsub(/\_id$/, "")).to_sym) + (options.delete(:required) ? @template.content_tag("span", " *", :class => "required"): "")
306 label_text = l(("field_"+field.to_s.gsub(/\_id$/, "")).to_sym) + (options.delete(:required) ? @template.content_tag("span", " *", :class => "required"): "")
307 content_tag("label", label_text)
307 content_tag("label", label_text)
308 end
308 end
309
309
310 def labelled_tabular_form_for(name, object, options, &proc)
310 def labelled_tabular_form_for(name, object, options, &proc)
311 options[:html] ||= {}
311 options[:html] ||= {}
312 options[:html].store :class, "tabular"
312 options[:html].store :class, "tabular"
313 form_for(name, object, options.merge({ :builder => TabularFormBuilder, :lang => current_language}), &proc)
313 form_for(name, object, options.merge({ :builder => TabularFormBuilder, :lang => current_language}), &proc)
314 end
314 end
315
315
316 def check_all_links(form_name)
316 def check_all_links(form_name)
317 link_to_function(l(:button_check_all), "checkAll('#{form_name}', true)") +
317 link_to_function(l(:button_check_all), "checkAll('#{form_name}', true)") +
318 " | " +
318 " | " +
319 link_to_function(l(:button_uncheck_all), "checkAll('#{form_name}', false)")
319 link_to_function(l(:button_uncheck_all), "checkAll('#{form_name}', false)")
320 end
320 end
321
321
322 def progress_bar(pct, options={})
322 def progress_bar(pct, options={})
323 width = options[:width] || '100px;'
323 width = options[:width] || '100px;'
324 legend = options[:legend] || ''
324 legend = options[:legend] || ''
325 content_tag('table',
325 content_tag('table',
326 content_tag('tr',
326 content_tag('tr',
327 (pct > 0 ? content_tag('td', '', :width => "#{pct.floor}%;", :class => 'closed') : '') +
327 (pct > 0 ? content_tag('td', '', :width => "#{pct.floor}%;", :class => 'closed') : '') +
328 (pct < 100 ? content_tag('td', '', :width => "#{100-pct.floor}%;", :class => 'open') : '')
328 (pct < 100 ? content_tag('td', '', :width => "#{100-pct.floor}%;", :class => 'open') : '')
329 ), :class => 'progress', :style => "width: #{width};") +
329 ), :class => 'progress', :style => "width: #{width};") +
330 content_tag('p', legend, :class => 'pourcent')
330 content_tag('p', legend, :class => 'pourcent')
331 end
331 end
332
332
333 def context_menu_link(name, url, options={})
333 def context_menu_link(name, url, options={})
334 options[:class] ||= ''
334 options[:class] ||= ''
335 if options.delete(:selected)
335 if options.delete(:selected)
336 options[:class] << ' icon-checked disabled'
336 options[:class] << ' icon-checked disabled'
337 options[:disabled] = true
337 options[:disabled] = true
338 end
338 end
339 if options.delete(:disabled)
339 if options.delete(:disabled)
340 options.delete(:method)
340 options.delete(:method)
341 options.delete(:confirm)
341 options.delete(:confirm)
342 options.delete(:onclick)
342 options.delete(:onclick)
343 options[:class] << ' disabled'
343 options[:class] << ' disabled'
344 url = '#'
344 url = '#'
345 end
345 end
346 link_to name, url, options
346 link_to name, url, options
347 end
347 end
348
348
349 def calendar_for(field_id)
349 def calendar_for(field_id)
350 image_tag("calendar.png", {:id => "#{field_id}_trigger",:class => "calendar-trigger"}) +
350 image_tag("calendar.png", {:id => "#{field_id}_trigger",:class => "calendar-trigger"}) +
351 javascript_tag("Calendar.setup({inputField : '#{field_id}', ifFormat : '%Y-%m-%d', button : '#{field_id}_trigger' });")
351 javascript_tag("Calendar.setup({inputField : '#{field_id}', ifFormat : '%Y-%m-%d', button : '#{field_id}_trigger' });")
352 end
352 end
353
353
354 def wikitoolbar_for(field_id)
354 def wikitoolbar_for(field_id)
355 return '' unless Setting.text_formatting == 'textile'
355 return '' unless Setting.text_formatting == 'textile'
356 javascript_include_tag('jstoolbar') + javascript_tag("var toolbar = new jsToolBar($('#{field_id}')); toolbar.draw();")
356 javascript_include_tag('jstoolbar') + javascript_tag("var toolbar = new jsToolBar($('#{field_id}')); toolbar.draw();")
357 end
357 end
358
358
359 def content_for(name, content = nil, &block)
359 def content_for(name, content = nil, &block)
360 @has_content ||= {}
360 @has_content ||= {}
361 @has_content[name] = true
361 @has_content[name] = true
362 super(name, content, &block)
362 super(name, content, &block)
363 end
363 end
364
364
365 def has_content?(name)
365 def has_content?(name)
366 (@has_content && @has_content[name]) || false
366 (@has_content && @has_content[name]) || false
367 end
367 end
368 end
368 end
369
369
370 class TabularFormBuilder < ActionView::Helpers::FormBuilder
370 class TabularFormBuilder < ActionView::Helpers::FormBuilder
371 include GLoc
371 include GLoc
372
372
373 def initialize(object_name, object, template, options, proc)
373 def initialize(object_name, object, template, options, proc)
374 set_language_if_valid options.delete(:lang)
374 set_language_if_valid options.delete(:lang)
375 @object_name, @object, @template, @options, @proc = object_name, object, template, options, proc
375 @object_name, @object, @template, @options, @proc = object_name, object, template, options, proc
376 end
376 end
377
377
378 (field_helpers - %w(radio_button hidden_field) + %w(date_select)).each do |selector|
378 (field_helpers - %w(radio_button hidden_field) + %w(date_select)).each do |selector|
379 src = <<-END_SRC
379 src = <<-END_SRC
380 def #{selector}(field, options = {})
380 def #{selector}(field, options = {})
381 return super if options.delete :no_label
381 return super if options.delete :no_label
382 label_text = l(options[:label]) if options[:label]
382 label_text = l(options[:label]) if options[:label]
383 label_text ||= l(("field_"+field.to_s.gsub(/\_id$/, "")).to_sym)
383 label_text ||= l(("field_"+field.to_s.gsub(/\_id$/, "")).to_sym)
384 label_text << @template.content_tag("span", " *", :class => "required") if options.delete(:required)
384 label_text << @template.content_tag("span", " *", :class => "required") if options.delete(:required)
385 label = @template.content_tag("label", label_text,
385 label = @template.content_tag("label", label_text,
386 :class => (@object && @object.errors[field] ? "error" : nil),
386 :class => (@object && @object.errors[field] ? "error" : nil),
387 :for => (@object_name.to_s + "_" + field.to_s))
387 :for => (@object_name.to_s + "_" + field.to_s))
388 label + super
388 label + super
389 end
389 end
390 END_SRC
390 END_SRC
391 class_eval src, __FILE__, __LINE__
391 class_eval src, __FILE__, __LINE__
392 end
392 end
393
393
394 def select(field, choices, options = {}, html_options = {})
394 def select(field, choices, options = {}, html_options = {})
395 label_text = l(("field_"+field.to_s.gsub(/\_id$/, "")).to_sym) + (options.delete(:required) ? @template.content_tag("span", " *", :class => "required"): "")
395 label_text = l(("field_"+field.to_s.gsub(/\_id$/, "")).to_sym) + (options.delete(:required) ? @template.content_tag("span", " *", :class => "required"): "")
396 label = @template.content_tag("label", label_text,
396 label = @template.content_tag("label", label_text,
397 :class => (@object && @object.errors[field] ? "error" : nil),
397 :class => (@object && @object.errors[field] ? "error" : nil),
398 :for => (@object_name.to_s + "_" + field.to_s))
398 :for => (@object_name.to_s + "_" + field.to_s))
399 label + super
399 label + super
400 end
400 end
401
401
402 end
402 end
403
403
@@ -1,85 +1,94
1 # redMine - project management software
1 # redMine - project management software
2 # Copyright (C) 2006-2007 Jean-Philippe Lang
2 # Copyright (C) 2006-2007 Jean-Philippe Lang
3 #
3 #
4 # This program is free software; you can redistribute it and/or
4 # This program is free software; you can redistribute it and/or
5 # modify it under the terms of the GNU General Public License
5 # modify it under the terms of the GNU General Public License
6 # as published by the Free Software Foundation; either version 2
6 # as published by the Free Software Foundation; either version 2
7 # of the License, or (at your option) any later version.
7 # of the License, or (at your option) any later version.
8 #
8 #
9 # This program is distributed in the hope that it will be useful,
9 # This program is distributed in the hope that it will be useful,
10 # but WITHOUT ANY WARRANTY; without even the implied warranty of
10 # but WITHOUT ANY WARRANTY; without even the implied warranty of
11 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 # GNU General Public License for more details.
12 # GNU General Public License for more details.
13 #
13 #
14 # You should have received a copy of the GNU General Public License
14 # You should have received a copy of the GNU General Public License
15 # along with this program; if not, write to the Free Software
15 # along with this program; if not, write to the Free Software
16 # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
16 # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
17
17
18 class Changeset < ActiveRecord::Base
18 class Changeset < ActiveRecord::Base
19 belongs_to :repository
19 belongs_to :repository
20 has_many :changes, :dependent => :delete_all
20 has_many :changes, :dependent => :delete_all
21 has_and_belongs_to_many :issues
21 has_and_belongs_to_many :issues
22
22
23 acts_as_event :title => Proc.new {|o| "#{l(:label_revision)} #{o.revision}" + (o.comments.blank? ? '' : (': ' + o.comments))},
23 acts_as_event :title => Proc.new {|o| "#{l(:label_revision)} #{o.revision}" + (o.comments.blank? ? '' : (': ' + o.comments))},
24 :description => :comments,
24 :description => :comments,
25 :datetime => :committed_on,
25 :datetime => :committed_on,
26 :author => :committer,
26 :author => :committer,
27 :url => Proc.new {|o| {:controller => 'repositories', :action => 'revision', :id => o.repository.project_id, :rev => o.revision}}
27 :url => Proc.new {|o| {:controller => 'repositories', :action => 'revision', :id => o.repository.project_id, :rev => o.revision}}
28
28
29 acts_as_searchable :columns => 'comments',
29 acts_as_searchable :columns => 'comments',
30 :include => :repository,
30 :include => :repository,
31 :project_key => "#{Repository.table_name}.project_id",
31 :project_key => "#{Repository.table_name}.project_id",
32 :date_column => 'committed_on'
32 :date_column => 'committed_on'
33
33
34 validates_presence_of :repository_id, :revision, :committed_on, :commit_date
34 validates_presence_of :repository_id, :revision, :committed_on, :commit_date
35 validates_numericality_of :revision, :only_integer => true
35 validates_numericality_of :revision, :only_integer => true
36 validates_uniqueness_of :revision, :scope => :repository_id
36 validates_uniqueness_of :revision, :scope => :repository_id
37 validates_uniqueness_of :scmid, :scope => :repository_id, :allow_nil => true
37 validates_uniqueness_of :scmid, :scope => :repository_id, :allow_nil => true
38
38
39 def comments=(comment)
39 def comments=(comment)
40 write_attribute(:comments, comment.strip)
40 write_attribute(:comments, comment.strip)
41 end
41 end
42
42
43 def committed_on=(date)
43 def committed_on=(date)
44 self.commit_date = date
44 self.commit_date = date
45 super
45 super
46 end
46 end
47
47
48 def after_create
48 def after_create
49 scan_comment_for_issue_ids
49 scan_comment_for_issue_ids
50 end
50 end
51
51
52 def scan_comment_for_issue_ids
52 def scan_comment_for_issue_ids
53 return if comments.blank?
53 return if comments.blank?
54 # keywords used to reference issues
54 # keywords used to reference issues
55 ref_keywords = Setting.commit_ref_keywords.downcase.split(",").collect(&:strip)
55 ref_keywords = Setting.commit_ref_keywords.downcase.split(",").collect(&:strip)
56 # keywords used to fix issues
56 # keywords used to fix issues
57 fix_keywords = Setting.commit_fix_keywords.downcase.split(",").collect(&:strip)
57 fix_keywords = Setting.commit_fix_keywords.downcase.split(",").collect(&:strip)
58 # status and optional done ratio applied
58 # status and optional done ratio applied
59 fix_status = IssueStatus.find_by_id(Setting.commit_fix_status_id)
59 fix_status = IssueStatus.find_by_id(Setting.commit_fix_status_id)
60 done_ratio = Setting.commit_fix_done_ratio.blank? ? nil : Setting.commit_fix_done_ratio.to_i
60 done_ratio = Setting.commit_fix_done_ratio.blank? ? nil : Setting.commit_fix_done_ratio.to_i
61
61
62 kw_regexp = (ref_keywords + fix_keywords).collect{|kw| Regexp.escape(kw)}.join("|")
62 kw_regexp = (ref_keywords + fix_keywords).collect{|kw| Regexp.escape(kw)}.join("|")
63 return if kw_regexp.blank?
63 return if kw_regexp.blank?
64
64
65 referenced_issues = []
65 referenced_issues = []
66
67 if ref_keywords.delete('*')
68 # find any issue ID in the comments
69 target_issue_ids = []
70 comments.scan(%r{([\s\(,-^])#(\d+)(?=[[:punct:]]|\s|<|$)}).each { |m| target_issue_ids << m[1] }
71 referenced_issues += repository.project.issues.find_all_by_id(target_issue_ids)
72 end
73
66 comments.scan(Regexp.new("(#{kw_regexp})[\s:]+(([\s,;&]*#?\\d+)+)", Regexp::IGNORECASE)).each do |match|
74 comments.scan(Regexp.new("(#{kw_regexp})[\s:]+(([\s,;&]*#?\\d+)+)", Regexp::IGNORECASE)).each do |match|
67 action = match[0]
75 action = match[0]
68 target_issue_ids = match[1].scan(/\d+/)
76 target_issue_ids = match[1].scan(/\d+/)
69 target_issues = repository.project.issues.find_all_by_id(target_issue_ids)
77 target_issues = repository.project.issues.find_all_by_id(target_issue_ids)
70 if fix_status && fix_keywords.include?(action.downcase)
78 if fix_status && fix_keywords.include?(action.downcase)
71 # update status of issues
79 # update status of issues
72 logger.debug "Issues fixed by changeset #{self.revision}: #{issue_ids.join(', ')}." if logger && logger.debug?
80 logger.debug "Issues fixed by changeset #{self.revision}: #{issue_ids.join(', ')}." if logger && logger.debug?
73 target_issues.each do |issue|
81 target_issues.each do |issue|
74 # don't change the status is the issue is already closed
82 # don't change the status is the issue is already closed
75 next if issue.status.is_closed?
83 next if issue.status.is_closed?
76 issue.status = fix_status
84 issue.status = fix_status
77 issue.done_ratio = done_ratio if done_ratio
85 issue.done_ratio = done_ratio if done_ratio
78 issue.save
86 issue.save
79 end
87 end
80 end
88 end
81 referenced_issues += target_issues
89 referenced_issues += target_issues
82 end
90 end
91
83 self.issues = referenced_issues.uniq
92 self.issues = referenced_issues.uniq
84 end
93 end
85 end
94 end
@@ -1,547 +1,547
1 _gloc_rule_default: '|n| n==1 ? "" : "_plural" '
1 _gloc_rule_default: '|n| n==1 ? "" : "_plural" '
2
2
3 actionview_datehelper_select_day_prefix:
3 actionview_datehelper_select_day_prefix:
4 actionview_datehelper_select_month_names: StyczeΕ„,Luty,Marzec,KwiecieΕ„,Maj,Czerwiec,Lipiec,SierpieΕ„,WrzesieΕ„,PaΕΊdziernik,Listopad,GrudzieΕ„
4 actionview_datehelper_select_month_names: StyczeΕ„,Luty,Marzec,KwiecieΕ„,Maj,Czerwiec,Lipiec,SierpieΕ„,WrzesieΕ„,PaΕΊdziernik,Listopad,GrudzieΕ„
5 actionview_datehelper_select_month_names_abbr: Sty,Lut,Mar,Kwi,Maj,Cze,Lip,Sie,Wrz,PaΕΊ,Lis,Gru
5 actionview_datehelper_select_month_names_abbr: Sty,Lut,Mar,Kwi,Maj,Cze,Lip,Sie,Wrz,PaΕΊ,Lis,Gru
6 actionview_datehelper_select_month_prefix:
6 actionview_datehelper_select_month_prefix:
7 actionview_datehelper_select_year_prefix:
7 actionview_datehelper_select_year_prefix:
8 actionview_datehelper_time_in_words_day: 1 dzieΕ„
8 actionview_datehelper_time_in_words_day: 1 dzieΕ„
9 actionview_datehelper_time_in_words_day_plural: %d dni
9 actionview_datehelper_time_in_words_day_plural: %d dni
10 actionview_datehelper_time_in_words_hour_about: okoΕ‚o godziny
10 actionview_datehelper_time_in_words_hour_about: okoΕ‚o godziny
11 actionview_datehelper_time_in_words_hour_about_plural: okoΕ‚o %d godzin
11 actionview_datehelper_time_in_words_hour_about_plural: okoΕ‚o %d godzin
12 actionview_datehelper_time_in_words_hour_about_single: okoΕ‚o godziny
12 actionview_datehelper_time_in_words_hour_about_single: okoΕ‚o godziny
13 actionview_datehelper_time_in_words_minute: 1 minuta
13 actionview_datehelper_time_in_words_minute: 1 minuta
14 actionview_datehelper_time_in_words_minute_half: pΓ³Ε‚ minuty
14 actionview_datehelper_time_in_words_minute_half: pΓ³Ε‚ minuty
15 actionview_datehelper_time_in_words_minute_less_than: mniej niΕΌ minuta
15 actionview_datehelper_time_in_words_minute_less_than: mniej niΕΌ minuta
16 actionview_datehelper_time_in_words_minute_plural: %d minut
16 actionview_datehelper_time_in_words_minute_plural: %d minut
17 actionview_datehelper_time_in_words_minute_single: 1 minuta
17 actionview_datehelper_time_in_words_minute_single: 1 minuta
18 actionview_datehelper_time_in_words_second_less_than: mniej niΕΌ sekunda
18 actionview_datehelper_time_in_words_second_less_than: mniej niΕΌ sekunda
19 actionview_datehelper_time_in_words_second_less_than_plural: mniej niΕΌ %d sekund
19 actionview_datehelper_time_in_words_second_less_than_plural: mniej niΕΌ %d sekund
20 actionview_instancetag_blank_option: ProszΔ™ wybierz
20 actionview_instancetag_blank_option: ProszΔ™ wybierz
21
21
22 activerecord_error_inclusion: nie jest zawarte na liΕ›cie
22 activerecord_error_inclusion: nie jest zawarte na liΕ›cie
23 activerecord_error_exclusion: jest zarezerwowane
23 activerecord_error_exclusion: jest zarezerwowane
24 activerecord_error_invalid: jest nieprawidΕ‚owe
24 activerecord_error_invalid: jest nieprawidΕ‚owe
25 activerecord_error_confirmation: nie pasuje do potwierdzenia
25 activerecord_error_confirmation: nie pasuje do potwierdzenia
26 activerecord_error_accepted: musi być zaakceptowane
26 activerecord_error_accepted: musi być zaakceptowane
27 activerecord_error_empty: nie może być puste
27 activerecord_error_empty: nie może być puste
28 activerecord_error_blank: nie może być czyste
28 activerecord_error_blank: nie może być czyste
29 activerecord_error_too_long: jest za dΕ‚ugie
29 activerecord_error_too_long: jest za dΕ‚ugie
30 activerecord_error_too_short: jest za krΓ³tkie
30 activerecord_error_too_short: jest za krΓ³tkie
31 activerecord_error_wrong_length: ma zΕ‚Δ… dΕ‚ugoΕ›Δ‡
31 activerecord_error_wrong_length: ma zΕ‚Δ… dΕ‚ugoΕ›Δ‡
32 activerecord_error_taken: jest juΕΌ wybrane
32 activerecord_error_taken: jest juΕΌ wybrane
33 activerecord_error_not_a_number: nie jest numerem
33 activerecord_error_not_a_number: nie jest numerem
34 activerecord_error_not_a_date: nie jest prawidΕ‚owΔ… datΔ…
34 activerecord_error_not_a_date: nie jest prawidΕ‚owΔ… datΔ…
35 activerecord_error_greater_than_start_date: musi być większe niż początkowa data
35 activerecord_error_greater_than_start_date: musi być większe niż początkowa data
36 activerecord_error_not_same_project: nie naleΕΌy do tego samego projektu
36 activerecord_error_not_same_project: nie naleΕΌy do tego samego projektu
37 activerecord_error_circular_dependency: Ta relacja może wytworzyć kołową zależność
37 activerecord_error_circular_dependency: Ta relacja może wytworzyć kołową zależność
38
38
39 general_fmt_age: %d lat
39 general_fmt_age: %d lat
40 general_fmt_age_plural: %d lat
40 general_fmt_age_plural: %d lat
41 general_fmt_date: %%m/%%d/%%Y
41 general_fmt_date: %%m/%%d/%%Y
42 general_fmt_datetime: %%m/%%d/%%Y %%I:%%M %%p
42 general_fmt_datetime: %%m/%%d/%%Y %%I:%%M %%p
43 general_fmt_datetime_short: %%b %%d, %%I:%%M %%p
43 general_fmt_datetime_short: %%b %%d, %%I:%%M %%p
44 general_fmt_time: %%I:%%M %%p
44 general_fmt_time: %%I:%%M %%p
45 general_text_No: 'Nie'
45 general_text_No: 'Nie'
46 general_text_Yes: 'Tak'
46 general_text_Yes: 'Tak'
47 general_text_no: 'nie'
47 general_text_no: 'nie'
48 general_text_yes: 'tak'
48 general_text_yes: 'tak'
49 general_lang_name: 'Polski'
49 general_lang_name: 'Polski'
50 general_csv_separator: ','
50 general_csv_separator: ','
51 general_csv_encoding: ISO-8859-2
51 general_csv_encoding: ISO-8859-2
52 general_pdf_encoding: ISO-8859-2
52 general_pdf_encoding: ISO-8859-2
53 general_day_names: PoniedziaΕ‚ek,Wtorek,Środa,Czwartek,PiΔ…tek,Sobota,Niedziela
53 general_day_names: PoniedziaΕ‚ek,Wtorek,Środa,Czwartek,PiΔ…tek,Sobota,Niedziela
54 general_first_day_of_week: '1'
54 general_first_day_of_week: '1'
55
55
56 notice_account_updated: Konto prawidΕ‚owo zaktualizowane.
56 notice_account_updated: Konto prawidΕ‚owo zaktualizowane.
57 notice_account_invalid_creditentials: ZΕ‚y uΕΌytkownik lub hasΕ‚o
57 notice_account_invalid_creditentials: ZΕ‚y uΕΌytkownik lub hasΕ‚o
58 notice_account_password_updated: HasΕ‚o prawidΕ‚owo zmienione.
58 notice_account_password_updated: HasΕ‚o prawidΕ‚owo zmienione.
59 notice_account_wrong_password: ZΕ‚e hasΕ‚o
59 notice_account_wrong_password: ZΕ‚e hasΕ‚o
60 notice_account_register_done: Konto prawidΕ‚owo stworzone.
60 notice_account_register_done: Konto prawidΕ‚owo stworzone.
61 notice_account_unknown_email: Nieznany uΕΌytkownik.
61 notice_account_unknown_email: Nieznany uΕΌytkownik.
62 notice_can_t_change_password: To konto ma zewnętrzne źródło identyfikacji. Nie możesz zmienić hasła.
62 notice_can_t_change_password: To konto ma zewnętrzne źródło identyfikacji. Nie możesz zmienić hasła.
63 notice_account_lost_email_sent: Email z instrukcjami zmiany hasΕ‚a zostaΕ‚ wysΕ‚any do Ciebie.
63 notice_account_lost_email_sent: Email z instrukcjami zmiany hasΕ‚a zostaΕ‚ wysΕ‚any do Ciebie.
64 notice_account_activated: Twoje konto zostało aktywowane. Możesz się zalogować.
64 notice_account_activated: Twoje konto zostało aktywowane. Możesz się zalogować.
65 notice_successful_create: Udane stworzenie.
65 notice_successful_create: Udane stworzenie.
66 notice_successful_update: Udane poprawienie.
66 notice_successful_update: Udane poprawienie.
67 notice_successful_delete: Udane usuniΔ™cie.
67 notice_successful_delete: Udane usuniΔ™cie.
68 notice_successful_connection: Udane nawiΔ…zanie poΕ‚Δ…czenia.
68 notice_successful_connection: Udane nawiΔ…zanie poΕ‚Δ…czenia.
69 notice_file_not_found: Strona do której próbujesz się dostać nie istnieje lub została usunięta.
69 notice_file_not_found: Strona do której próbujesz się dostać nie istnieje lub została usunięta.
70 notice_locking_conflict: Dane poprawione przez innego uΕΌytkownika.
70 notice_locking_conflict: Dane poprawione przez innego uΕΌytkownika.
71 notice_scm_error: WejΕ›cie i/lub zmiana nie istnieje w repozytorium.
71 notice_scm_error: WejΕ›cie i/lub zmiana nie istnieje w repozytorium.
72 notice_not_authorized: Nie jesteś autoryzowany by zobaczyć stronę.
72 notice_not_authorized: Nie jesteś autoryzowany by zobaczyć stronę.
73
73
74 mail_subject_lost_password: Twoje hasΕ‚o do redMine
74 mail_subject_lost_password: Twoje hasΕ‚o do redMine
75 mail_body_lost_password: 'W celu zmiany swojego hasΕ‚a uΕΌyj poniΕΌszego odnoΕ›nika:'
75 mail_body_lost_password: 'W celu zmiany swojego hasΕ‚a uΕΌyj poniΕΌszego odnoΕ›nika:'
76 mail_subject_register: Aktywacja konta w redMine
76 mail_subject_register: Aktywacja konta w redMine
77 mail_body_register: 'W celu aktywacji Twojego konta w Redmine, uΕΌyj poniΕΌszego odnoΕ›nika:'
77 mail_body_register: 'W celu aktywacji Twojego konta w Redmine, uΕΌyj poniΕΌszego odnoΕ›nika:'
78
78
79 gui_validation_error: 1 bΕ‚Δ…d
79 gui_validation_error: 1 bΕ‚Δ…d
80 gui_validation_error_plural: %d bΕ‚Δ™dΓ³w
80 gui_validation_error_plural: %d bΕ‚Δ™dΓ³w
81
81
82 field_name: Nazwa
82 field_name: Nazwa
83 field_description: Opis
83 field_description: Opis
84 field_summary: Podsumowanie
84 field_summary: Podsumowanie
85 field_is_required: Wymagane
85 field_is_required: Wymagane
86 field_firstname: ImiΔ™
86 field_firstname: ImiΔ™
87 field_lastname: Nazwisko
87 field_lastname: Nazwisko
88 field_mail: Email
88 field_mail: Email
89 field_filename: Plik
89 field_filename: Plik
90 field_filesize: Rozmiar
90 field_filesize: Rozmiar
91 field_downloads: PobraΕ„
91 field_downloads: PobraΕ„
92 field_author: Autor
92 field_author: Autor
93 field_created_on: Stworzone
93 field_created_on: Stworzone
94 field_updated_on: Zmienione
94 field_updated_on: Zmienione
95 field_field_format: Format
95 field_field_format: Format
96 field_is_for_all: Dla wszystkich projektΓ³w
96 field_is_for_all: Dla wszystkich projektΓ³w
97 field_possible_values: MoΕΌliwe wartoΕ›ci
97 field_possible_values: MoΕΌliwe wartoΕ›ci
98 field_regexp: WyraΕΌenie regularne
98 field_regexp: WyraΕΌenie regularne
99 field_min_length: Minimalna dΕ‚ugoΕ›Δ‡
99 field_min_length: Minimalna dΕ‚ugoΕ›Δ‡
100 field_max_length: Maksymalna dΕ‚ugoΕ›Δ‡
100 field_max_length: Maksymalna dΕ‚ugoΕ›Δ‡
101 field_value: WartoΕ›Δ‡
101 field_value: WartoΕ›Δ‡
102 field_category: Kategoria
102 field_category: Kategoria
103 field_title: TytuΕ‚
103 field_title: TytuΕ‚
104 field_project: Projekt
104 field_project: Projekt
105 field_issue: Zagadnienie
105 field_issue: Zagadnienie
106 field_status: Status
106 field_status: Status
107 field_notes: Notatki
107 field_notes: Notatki
108 field_is_closed: Zagadnienie zamkniΔ™te
108 field_is_closed: Zagadnienie zamkniΔ™te
109 field_is_default: DomyΕ›lny status
109 field_is_default: DomyΕ›lny status
110 field_tracker: Typ zagadnienia
110 field_tracker: Typ zagadnienia
111 field_subject: Temat
111 field_subject: Temat
112 field_due_date: Data oddania
112 field_due_date: Data oddania
113 field_assigned_to: Przydzielony do
113 field_assigned_to: Przydzielony do
114 field_priority: Priorytet
114 field_priority: Priorytet
115 field_fixed_version: Wersja
115 field_fixed_version: Wersja
116 field_user: UΕΌytkownik
116 field_user: UΕΌytkownik
117 field_role: Rola
117 field_role: Rola
118 field_homepage: Strona www
118 field_homepage: Strona www
119 field_is_public: Publiczny
119 field_is_public: Publiczny
120 field_parent: Podprojekt
120 field_parent: Podprojekt
121 field_is_in_chlog: Zagadnienie pokazywane w zapisie zmian
121 field_is_in_chlog: Zagadnienie pokazywane w zapisie zmian
122 field_is_in_roadmap: Zagadnienie pokazywane na mapie
122 field_is_in_roadmap: Zagadnienie pokazywane na mapie
123 field_login: Login
123 field_login: Login
124 field_mail_notification: Powiadomienia Email
124 field_mail_notification: Powiadomienia Email
125 field_admin: Administrator
125 field_admin: Administrator
126 field_last_login_on: Ostatnie poΕ‚Δ…czenie
126 field_last_login_on: Ostatnie poΕ‚Δ…czenie
127 field_language: JΔ™zyk
127 field_language: JΔ™zyk
128 field_effective_date: Data
128 field_effective_date: Data
129 field_password: HasΕ‚o
129 field_password: HasΕ‚o
130 field_new_password: Nowe hasΕ‚o
130 field_new_password: Nowe hasΕ‚o
131 field_password_confirmation: Potwierdzenie
131 field_password_confirmation: Potwierdzenie
132 field_version: Wersja
132 field_version: Wersja
133 field_type: Typ
133 field_type: Typ
134 field_host: Host
134 field_host: Host
135 field_port: Port
135 field_port: Port
136 field_account: Konto
136 field_account: Konto
137 field_base_dn: Base DN
137 field_base_dn: Base DN
138 field_attr_login: Login atrybut
138 field_attr_login: Login atrybut
139 field_attr_firstname: ImiΔ™ atrybut
139 field_attr_firstname: ImiΔ™ atrybut
140 field_attr_lastname: Nazwisko atrybut
140 field_attr_lastname: Nazwisko atrybut
141 field_attr_mail: Email atrybut
141 field_attr_mail: Email atrybut
142 field_onthefly: Tworzenie uΕΌytkownika w locie
142 field_onthefly: Tworzenie uΕΌytkownika w locie
143 field_start_date: Start
143 field_start_date: Start
144 field_done_ratio: %% Wykonane
144 field_done_ratio: %% Wykonane
145 field_auth_source: Tryb identyfikacji
145 field_auth_source: Tryb identyfikacji
146 field_hide_mail: Ukryj mΓ³j adres email
146 field_hide_mail: Ukryj mΓ³j adres email
147 field_comments: Komentarz
147 field_comments: Komentarz
148 field_url: URL
148 field_url: URL
149 field_start_page: Strona startowa
149 field_start_page: Strona startowa
150 field_subproject: Podprojekt
150 field_subproject: Podprojekt
151 field_hours: Godzin
151 field_hours: Godzin
152 field_activity: AktywnoΕ›Δ‡
152 field_activity: AktywnoΕ›Δ‡
153 field_spent_on: Data
153 field_spent_on: Data
154 field_identifier: Identifikator
154 field_identifier: Identifikator
155 field_is_filter: Atrybut filtrowania
155 field_is_filter: Atrybut filtrowania
156 field_issue_to_id: PowiΔ…zania zagadnienia
156 field_issue_to_id: PowiΔ…zania zagadnienia
157 field_delay: OpΓ³ΕΊnienie
157 field_delay: OpΓ³ΕΊnienie
158
158
159 setting_app_title: TytuΕ‚ aplikacji
159 setting_app_title: TytuΕ‚ aplikacji
160 setting_app_subtitle: PodtytuΕ‚ aplikacji
160 setting_app_subtitle: PodtytuΕ‚ aplikacji
161 setting_welcome_text: Tekst powitalny
161 setting_welcome_text: Tekst powitalny
162 setting_default_language: DomyΕ›lny jΔ™zyk
162 setting_default_language: DomyΕ›lny jΔ™zyk
163 setting_login_required: Identyfikacja wymagana
163 setting_login_required: Identyfikacja wymagana
164 setting_self_registration: WΕ‚asna rejestracja umoΕΌliwiona
164 setting_self_registration: WΕ‚asna rejestracja umoΕΌliwiona
165 setting_attachment_max_size: Maks. rozm. zaΕ‚Δ…cznika
165 setting_attachment_max_size: Maks. rozm. zaΕ‚Δ…cznika
166 setting_issues_export_limit: Limit eksportu zagadnieΕ„
166 setting_issues_export_limit: Limit eksportu zagadnieΕ„
167 setting_mail_from: Adres email wysyΕ‚ki
167 setting_mail_from: Adres email wysyΕ‚ki
168 setting_host_name: Nazwa hosta
168 setting_host_name: Nazwa hosta
169 setting_text_formatting: Formatowanie tekstu
169 setting_text_formatting: Formatowanie tekstu
170 setting_wiki_compression: Kompresja historii Wiki
170 setting_wiki_compression: Kompresja historii Wiki
171 setting_feeds_limit: Limit danych RSS
171 setting_feeds_limit: Limit danych RSS
172 setting_autofetch_changesets: Auto-odΕ›wieΕΌanie CVS
172 setting_autofetch_changesets: Auto-odΕ›wieΕΌanie CVS
173 setting_sys_api_enabled: WΕ‚Δ…czenie WS do zarzΔ…dzania repozytorium
173 setting_sys_api_enabled: WΕ‚Δ…czenie WS do zarzΔ…dzania repozytorium
174 setting_commit_ref_keywords: Terminy odnoszΔ…ce (CVS)
174 setting_commit_ref_keywords: Terminy odnoszΔ…ce (CVS)
175 setting_commit_fix_keywords: Terminy ustalajΔ…ce (CVS)
175 setting_commit_fix_keywords: Terminy ustalajΔ…ce (CVS)
176 setting_autologin: Auto logowanie
176 setting_autologin: Auto logowanie
177 setting_date_format: Format daty
177 setting_date_format: Format daty
178
178
179 label_user: UΕΌytkownik
179 label_user: UΕΌytkownik
180 label_user_plural: UΕΌytkownicy
180 label_user_plural: UΕΌytkownicy
181 label_user_new: Nowy uΕΌytkownik
181 label_user_new: Nowy uΕΌytkownik
182 label_project: Projekt
182 label_project: Projekt
183 label_project_new: Nowy projekt
183 label_project_new: Nowy projekt
184 label_project_plural: Projekty
184 label_project_plural: Projekty
185 label_project_all: Wszystkie projekty
185 label_project_all: Wszystkie projekty
186 label_project_latest: Ostatnie projekty
186 label_project_latest: Ostatnie projekty
187 label_issue: Zagadnienie
187 label_issue: Zagadnienie
188 label_issue_new: Nowe zagadnienie
188 label_issue_new: Nowe zagadnienie
189 label_issue_plural: Zagadnienia
189 label_issue_plural: Zagadnienia
190 label_issue_view_all: Zobacz wszystkie zagadnienia
190 label_issue_view_all: Zobacz wszystkie zagadnienia
191 label_document: Dokument
191 label_document: Dokument
192 label_document_new: Nowy dokument
192 label_document_new: Nowy dokument
193 label_document_plural: Dokumenty
193 label_document_plural: Dokumenty
194 label_role: Rola
194 label_role: Rola
195 label_role_plural: Role
195 label_role_plural: Role
196 label_role_new: Nowa rola
196 label_role_new: Nowa rola
197 label_role_and_permissions: Role i Uprawnienia
197 label_role_and_permissions: Role i Uprawnienia
198 label_member: Uczestnik
198 label_member: Uczestnik
199 label_member_new: Nowy uczestnik
199 label_member_new: Nowy uczestnik
200 label_member_plural: Uczestnicy
200 label_member_plural: Uczestnicy
201 label_tracker: Typ zagadnienia
201 label_tracker: Typ zagadnienia
202 label_tracker_plural: Typy zagadnieΕ„
202 label_tracker_plural: Typy zagadnieΕ„
203 label_tracker_new: Nowy typ zagadnienia
203 label_tracker_new: Nowy typ zagadnienia
204 label_workflow: PrzepΕ‚yw
204 label_workflow: PrzepΕ‚yw
205 label_issue_status: Status zagadnienia
205 label_issue_status: Status zagadnienia
206 label_issue_status_plural: Statusy zagadnieΕ„
206 label_issue_status_plural: Statusy zagadnieΕ„
207 label_issue_status_new: Nowy status
207 label_issue_status_new: Nowy status
208 label_issue_category: Kategoria zagadnienia
208 label_issue_category: Kategoria zagadnienia
209 label_issue_category_plural: Kategorie zagadnieΕ„
209 label_issue_category_plural: Kategorie zagadnieΕ„
210 label_issue_category_new: Nowa kategoria
210 label_issue_category_new: Nowa kategoria
211 label_custom_field: Dowolne pole
211 label_custom_field: Dowolne pole
212 label_custom_field_plural: Dowolne pola
212 label_custom_field_plural: Dowolne pola
213 label_custom_field_new: Nowe dowolne pole
213 label_custom_field_new: Nowe dowolne pole
214 label_enumerations: Wyliczenia
214 label_enumerations: Wyliczenia
215 label_enumeration_new: Nowa wartoΕ›Δ‡
215 label_enumeration_new: Nowa wartoΕ›Δ‡
216 label_information: Informacja
216 label_information: Informacja
217 label_information_plural: Informacje
217 label_information_plural: Informacje
218 label_please_login: Zaloguj siΔ™
218 label_please_login: Zaloguj siΔ™
219 label_register: Rejestracja
219 label_register: Rejestracja
220 label_password_lost: Zapomniane hasΕ‚o
220 label_password_lost: Zapomniane hasΕ‚o
221 label_home: GΕ‚Γ³wna
221 label_home: GΕ‚Γ³wna
222 label_my_page: Moja strona
222 label_my_page: Moja strona
223 label_my_account: Moje konto
223 label_my_account: Moje konto
224 label_my_projects: Moje projekty
224 label_my_projects: Moje projekty
225 label_administration: Administracja
225 label_administration: Administracja
226 label_login: Login
226 label_login: Login
227 label_logout: Wylogowanie
227 label_logout: Wylogowanie
228 label_help: Pomoc
228 label_help: Pomoc
229 label_reported_issues: Wprowadzone zagadnienia
229 label_reported_issues: Wprowadzone zagadnienia
230 label_assigned_to_me_issues: Zagadnienia przypisane do mnie
230 label_assigned_to_me_issues: Zagadnienia przypisane do mnie
231 label_last_login: Ostatnie poΕ‚Δ…czenie
231 label_last_login: Ostatnie poΕ‚Δ…czenie
232 label_last_updates: Ostatnia zmieniana
232 label_last_updates: Ostatnia zmieniana
233 label_last_updates_plural: %d ostatnie zmiany
233 label_last_updates_plural: %d ostatnie zmiany
234 label_registered_on: Zarejestrowany
234 label_registered_on: Zarejestrowany
235 label_activity: AktywnoΕ›Δ‡
235 label_activity: AktywnoΕ›Δ‡
236 label_new: Nowy
236 label_new: Nowy
237 label_logged_as: Zalogowany jako
237 label_logged_as: Zalogowany jako
238 label_environment: Środowisko
238 label_environment: Środowisko
239 label_authentication: Identyfikacja
239 label_authentication: Identyfikacja
240 label_auth_source: Tryb identyfikacji
240 label_auth_source: Tryb identyfikacji
241 label_auth_source_new: Nowy tryb identyfikacji
241 label_auth_source_new: Nowy tryb identyfikacji
242 label_auth_source_plural: Tryby identyfikacji
242 label_auth_source_plural: Tryby identyfikacji
243 label_subproject_plural: Podprojekty
243 label_subproject_plural: Podprojekty
244 label_min_max_length: Min - Maks dΕ‚ugoΕ›Δ‡
244 label_min_max_length: Min - Maks dΕ‚ugoΕ›Δ‡
245 label_list: Lista
245 label_list: Lista
246 label_date: Data
246 label_date: Data
247 label_integer: Liczba caΕ‚kowita
247 label_integer: Liczba caΕ‚kowita
248 label_boolean: WartoΕ›Δ‡ logiczna
248 label_boolean: WartoΕ›Δ‡ logiczna
249 label_string: Tekst
249 label_string: Tekst
250 label_text: DΕ‚ugi tekst
250 label_text: DΕ‚ugi tekst
251 label_attribute: Atrybut
251 label_attribute: Atrybut
252 label_attribute_plural: Atrybuty
252 label_attribute_plural: Atrybuty
253 label_download: %d Pobranie
253 label_download: %d Pobranie
254 label_download_plural: %d Pobrania
254 label_download_plural: %d Pobrania
255 label_no_data: Brak danych do pokazania
255 label_no_data: Brak danych do pokazania
256 label_change_status: Status zmian
256 label_change_status: Status zmian
257 label_history: Historia
257 label_history: Historia
258 label_attachment: Plik
258 label_attachment: Plik
259 label_attachment_new: Nowy plik
259 label_attachment_new: Nowy plik
260 label_attachment_delete: Skasuj plik
260 label_attachment_delete: Skasuj plik
261 label_attachment_plural: Pliki
261 label_attachment_plural: Pliki
262 label_report: Raport
262 label_report: Raport
263 label_report_plural: Raporty
263 label_report_plural: Raporty
264 label_news: NowoΕ›Δ‡
264 label_news: WiadomoΕ›Δ‡
265 label_news_new: Dodaj nowoΕ›Δ‡
265 label_news_new: Dodaj wiadomoΕ›Δ‡
266 label_news_plural: NowoΕ›ci
266 label_news_plural: WiadomoΕ›ci
267 label_news_latest: Ostatnie nowoΕ›ci
267 label_news_latest: Ostatnie wiadomoΕ›ci
268 label_news_view_all: PokaΕΌ wszystkie nowoΕ›ci
268 label_news_view_all: PokaΕΌ wszystkie wiadomoΕ›ci
269 label_change_log: Lista zmian
269 label_change_log: Lista zmian
270 label_settings: Ustawienia
270 label_settings: Ustawienia
271 label_overview: PrzeglΔ…d
271 label_overview: PrzeglΔ…d
272 label_version: Wersja
272 label_version: Wersja
273 label_version_new: Nowa wersja
273 label_version_new: Nowa wersja
274 label_version_plural: Wersje
274 label_version_plural: Wersje
275 label_confirmation: Potwierdzenie
275 label_confirmation: Potwierdzenie
276 label_export_to: Eksportuj do
276 label_export_to: Eksportuj do
277 label_read: Czytanie...
277 label_read: Czytanie...
278 label_public_projects: Projekty publiczne
278 label_public_projects: Projekty publiczne
279 label_open_issues: otwarte
279 label_open_issues: otwarte
280 label_open_issues_plural: otwarte
280 label_open_issues_plural: otwarte
281 label_closed_issues: zamkniΔ™te
281 label_closed_issues: zamkniΔ™te
282 label_closed_issues_plural: zamkniΔ™te
282 label_closed_issues_plural: zamkniΔ™te
283 label_total: OgΓ³Ε‚em
283 label_total: OgΓ³Ε‚em
284 label_permissions: Uprawnienia
284 label_permissions: Uprawnienia
285 label_current_status: Obecny status
285 label_current_status: Obecny status
286 label_new_statuses_allowed: Uprawnione nowe statusy
286 label_new_statuses_allowed: Uprawnione nowe statusy
287 label_all: wszystko
287 label_all: wszystko
288 label_none: brak
288 label_none: brak
289 label_next: NastΔ™pne
289 label_next: NastΔ™pne
290 label_previous: Poprzednie
290 label_previous: Poprzednie
291 label_used_by: UΕΌywane przez
291 label_used_by: UΕΌywane przez
292 label_details: SzczegΓ³Ε‚y
292 label_details: SzczegΓ³Ε‚y
293 label_add_note: Dodaj notatkΔ™
293 label_add_note: Dodaj notatkΔ™
294 label_per_page: Na stronΔ™
294 label_per_page: Na stronΔ™
295 label_calendar: Kalendarz
295 label_calendar: Kalendarz
296 label_months_from: miesiΔ…ce od
296 label_months_from: miesiΔ…ce od
297 label_gantt: Gantt
297 label_gantt: Gantt
298 label_internal: WewnΔ™trzny
298 label_internal: WewnΔ™trzny
299 label_last_changes: ostatnie %d zmian
299 label_last_changes: ostatnie %d zmian
300 label_change_view_all: PokaΕΌ wszystkie zmiany
300 label_change_view_all: PokaΕΌ wszystkie zmiany
301 label_personalize_page: Personalizuj tΔ… stronΔ™
301 label_personalize_page: Personalizuj tΔ… stronΔ™
302 label_comment: Komentarz
302 label_comment: Komentarz
303 label_comment_plural: Komentarze
303 label_comment_plural: Komentarze
304 label_comment_add: Dodaj komentarz
304 label_comment_add: Dodaj komentarz
305 label_comment_added: Komentarz dodany
305 label_comment_added: Komentarz dodany
306 label_comment_delete: UsuΕ„ komentarze
306 label_comment_delete: UsuΕ„ komentarze
307 label_query: Dowolne zapytanie
307 label_query: Dowolne zapytanie
308 label_query_plural: Dowolne zapytania
308 label_query_plural: Dowolne zapytania
309 label_query_new: Nowe zapytanie
309 label_query_new: Nowe zapytanie
310 label_filter_add: Dodaj filtr
310 label_filter_add: Dodaj filtr
311 label_filter_plural: Filtry
311 label_filter_plural: Filtry
312 label_equals: jest
312 label_equals: jest
313 label_not_equals: nie jest
313 label_not_equals: nie jest
314 label_in_less_than: w mniejszych od
314 label_in_less_than: w mniejszych od
315 label_in_more_than: w wiΔ™kszych niΕΌ
315 label_in_more_than: w wiΔ™kszych niΕΌ
316 label_in: w
316 label_in: w
317 label_today: dzisiaj
317 label_today: dzisiaj
318 label_less_than_ago: dni mniej
318 label_less_than_ago: dni mniej
319 label_more_than_ago: dni wiΔ™cej
319 label_more_than_ago: dni wiΔ™cej
320 label_ago: dni temu
320 label_ago: dni temu
321 label_contains: zawiera
321 label_contains: zawiera
322 label_not_contains: nie zawiera
322 label_not_contains: nie zawiera
323 label_day_plural: dni
323 label_day_plural: dni
324 label_repository: Repozytorium
324 label_repository: Repozytorium
325 label_browse: PrzeglΔ…d
325 label_browse: PrzeglΔ…d
326 label_modification: %d modyfikacja
326 label_modification: %d modyfikacja
327 label_modification_plural: %d modyfikacja
327 label_modification_plural: %d modyfikacja
328 label_revision: Zmiana
328 label_revision: Zmiana
329 label_revision_plural: Zmiany
329 label_revision_plural: Zmiany
330 label_added: dodane
330 label_added: dodane
331 label_modified: zmodufikowane
331 label_modified: zmodufikowane
332 label_deleted: usuniΔ™te
332 label_deleted: usuniΔ™te
333 label_latest_revision: Ostatnia zmiana
333 label_latest_revision: Ostatnia zmiana
334 label_latest_revision_plural: Ostatnie zmiany
334 label_latest_revision_plural: Ostatnie zmiany
335 label_view_revisions: PokaΕΌ zmiany
335 label_view_revisions: PokaΕΌ zmiany
336 label_max_size: Maksymalny rozmiar
336 label_max_size: Maksymalny rozmiar
337 label_on: 'wΕ‚Δ…czone'
337 label_on: 'z'
338 label_sort_highest: PrzesuΕ„ na gΓ³rΔ™
338 label_sort_highest: PrzesuΕ„ na gΓ³rΔ™
339 label_sort_higher: Do gΓ³ry
339 label_sort_higher: Do gΓ³ry
340 label_sort_lower: Do doΕ‚u
340 label_sort_lower: Do doΕ‚u
341 label_sort_lowest: PrzesuΕ„ na dΓ³Ε‚
341 label_sort_lowest: PrzesuΕ„ na dΓ³Ε‚
342 label_roadmap: Mapa
342 label_roadmap: Mapa
343 label_roadmap_due_in: W czasie
343 label_roadmap_due_in: W czasie
344 label_roadmap_no_issues: Brak zagadnieΕ„ do tej wersji
344 label_roadmap_no_issues: Brak zagadnieΕ„ do tej wersji
345 label_search: Szukaj
345 label_search: Szukaj
346 label_result_plural: RezultatΓ³w
346 label_result_plural: RezultatΓ³w
347 label_all_words: Wszystkie sΕ‚owa
347 label_all_words: Wszystkie sΕ‚owa
348 label_wiki: Wiki
348 label_wiki: Wiki
349 label_wiki_edit: Edycja wiki
349 label_wiki_edit: Edycja wiki
350 label_wiki_edit_plural: Edycje wiki
350 label_wiki_edit_plural: Edycje wiki
351 label_wiki_page: Strona wiki
351 label_wiki_page: Strona wiki
352 label_wiki_page_plural: Strony wiki
352 label_wiki_page_plural: Strony wiki
353 label_index_by_title: Indeks
353 label_index_by_title: Indeks
354 label_index_by_date: Index by date
354 label_index_by_date: Index by date
355 label_current_version: Obecna wersja
355 label_current_version: Obecna wersja
356 label_preview: PodglΔ…d
356 label_preview: PodglΔ…d
357 label_feed_plural: IloΕ›Δ‡ RSS
357 label_feed_plural: IloΕ›Δ‡ RSS
358 label_changes_details: SzczegΓ³Ε‚y wszystkich zmian
358 label_changes_details: SzczegΓ³Ε‚y wszystkich zmian
359 label_issue_tracking: Śledzenie zagadnieΕ„
359 label_issue_tracking: Śledzenie zagadnieΕ„
360 label_spent_time: SpΔ™dzony czas
360 label_spent_time: SpΔ™dzony czas
361 label_f_hour: %.2f godzina
361 label_f_hour: %.2f godzina
362 label_f_hour_plural: %.2f godzin
362 label_f_hour_plural: %.2f godzin
363 label_time_tracking: Śledzenie czasu
363 label_time_tracking: Śledzenie czasu
364 label_change_plural: Zmiany
364 label_change_plural: Zmiany
365 label_statistics: Statystyki
365 label_statistics: Statystyki
366 label_commits_per_month: Wrzutek CVS w miesiΔ…cu
366 label_commits_per_month: Wrzutek CVS w miesiΔ…cu
367 label_commits_per_author: Wrzutek CVS przez autora
367 label_commits_per_author: Wrzutek CVS przez autora
368 label_view_diff: PokaΕΌ rΓ³ΕΌnice
368 label_view_diff: PokaΕΌ rΓ³ΕΌnice
369 label_diff_inline: w linii
369 label_diff_inline: w linii
370 label_diff_side_by_side: obok siebie
370 label_diff_side_by_side: obok siebie
371 label_options: Opcje
371 label_options: Opcje
372 label_copy_workflow_from: Kopiuj przepΕ‚yw z
372 label_copy_workflow_from: Kopiuj przepΕ‚yw z
373 label_permissions_report: Raport uprawnieΕ„
373 label_permissions_report: Raport uprawnieΕ„
374 label_watched_issues: Obserwowane zagadnienia
374 label_watched_issues: Obserwowane zagadnienia
375 label_related_issues: PowiΔ…zane zagadnienia
375 label_related_issues: PowiΔ…zane zagadnienia
376 label_applied_status: Stosowany status
376 label_applied_status: Stosowany status
377 label_loading: Ładowanie...
377 label_loading: Ładowanie...
378 label_relation_new: Nowe powiΔ…zanie
378 label_relation_new: Nowe powiΔ…zanie
379 label_relation_delete: UsuΕ„ powiΔ…zanie
379 label_relation_delete: UsuΕ„ powiΔ…zanie
380 label_relates_to: powiΔ…zane z
380 label_relates_to: powiΔ…zane z
381 label_duplicates: duplikaty
381 label_duplicates: duplikaty
382 label_blocks: blokady
382 label_blocks: blokady
383 label_blocked_by: zablokowane przez
383 label_blocked_by: zablokowane przez
384 label_precedes: poprzedza
384 label_precedes: poprzedza
385 label_follows: podΔ…ΕΌa
385 label_follows: podΔ…ΕΌa
386 label_end_to_start: koniec do poczΔ…tku
386 label_end_to_start: koniec do poczΔ…tku
387 label_end_to_end: koniec do koΕ„ca
387 label_end_to_end: koniec do koΕ„ca
388 label_start_to_start: poczΔ…tek do poczΔ…tku
388 label_start_to_start: poczΔ…tek do poczΔ…tku
389 label_start_to_end: poczΔ…tek do koΕ„ca
389 label_start_to_end: poczΔ…tek do koΕ„ca
390 label_stay_logged_in: PozostaΕ„ zalogowany
390 label_stay_logged_in: PozostaΕ„ zalogowany
391 label_disabled: zablokowany
391 label_disabled: zablokowany
392 label_show_completed_versions: PokaΕΌ kompletne wersje
392 label_show_completed_versions: PokaΕΌ kompletne wersje
393 label_me: ja
393 label_me: ja
394 label_board: Forum
394 label_board: Forum
395 label_board_new: Nowe forum
395 label_board_new: Nowe forum
396 label_board_plural: Fora
396 label_board_plural: Fora
397 label_topic_plural: Tematy
397 label_topic_plural: Tematy
398 label_message_plural: WiadomoΕ›ci
398 label_message_plural: WiadomoΕ›ci
399 label_message_last: Ostatnia wiadomoΕ›Δ‡
399 label_message_last: Ostatnia wiadomoΕ›Δ‡
400 label_message_new: Nowa wiadomoΕ›Δ‡
400 label_message_new: Nowa wiadomoΕ›Δ‡
401 label_reply_plural: Odpowiedzi
401 label_reply_plural: Odpowiedzi
402 label_send_information: WyΕ›lij informacjΔ™ uΕΌytkownikowi
402 label_send_information: WyΕ›lij informacjΔ™ uΕΌytkownikowi
403 label_year: Rok
403 label_year: Rok
404 label_month: MiesiΔ…c
404 label_month: MiesiΔ…c
405 label_week: TydzieΕ„
405 label_week: TydzieΕ„
406 label_date_from: Z
406 label_date_from: Z
407 label_date_to: Do
407 label_date_to: Do
408 label_language_based: Na podstawie jΔ™zyka
408 label_language_based: Na podstawie jΔ™zyka
409
409
410 button_login: Login
410 button_login: Login
411 button_submit: WyΕ›lij
411 button_submit: WyΕ›lij
412 button_save: Zapisz
412 button_save: Zapisz
413 button_check_all: Zaznacz wszystko
413 button_check_all: Zaznacz wszystko
414 button_uncheck_all: Odznacz wszystko
414 button_uncheck_all: Odznacz wszystko
415 button_delete: UsuΕ„
415 button_delete: UsuΕ„
416 button_create: StwΓ³rz
416 button_create: StwΓ³rz
417 button_test: Testuj
417 button_test: Testuj
418 button_edit: Edytuj
418 button_edit: Edytuj
419 button_add: Dodaj
419 button_add: Dodaj
420 button_change: ZmieΕ„
420 button_change: ZmieΕ„
421 button_apply: Ustaw
421 button_apply: Ustaw
422 button_clear: WyczyΕ›Δ‡
422 button_clear: WyczyΕ›Δ‡
423 button_lock: Zablokuj
423 button_lock: Zablokuj
424 button_unlock: Odblokuj
424 button_unlock: Odblokuj
425 button_download: Pobierz
425 button_download: Pobierz
426 button_list: Lista
426 button_list: Lista
427 button_view: PokaΕΌ
427 button_view: PokaΕΌ
428 button_move: PrzenieΕ›
428 button_move: PrzenieΕ›
429 button_back: Wstecz
429 button_back: Wstecz
430 button_cancel: Anuluj
430 button_cancel: Anuluj
431 button_activate: Aktywuj
431 button_activate: Aktywuj
432 button_sort: Sortuj
432 button_sort: Sortuj
433 button_log_time: Logowanie czasu
433 button_log_time: Logowanie czasu
434 button_rollback: PrzywrΓ³c do tej wersji
434 button_rollback: PrzywrΓ³c do tej wersji
435 button_watch: Obserwuj
435 button_watch: Obserwuj
436 button_unwatch: Nie obserwuj
436 button_unwatch: Nie obserwuj
437 button_reply: Odpowiedz
437 button_reply: Odpowiedz
438 button_archive: Archiwizuj
438 button_archive: Archiwizuj
439 button_unarchive: PrzywrΓ³c z archiwum
439 button_unarchive: PrzywrΓ³c z archiwum
440
440
441 status_active: aktywny
441 status_active: aktywny
442 status_registered: zarejestrowany
442 status_registered: zarejestrowany
443 status_locked: zablokowany
443 status_locked: zablokowany
444
444
445 text_select_mail_notifications: Zaznacz czynności przy których użytkownik powinien być powiadomiony mailem.
445 text_select_mail_notifications: Zaznacz czynności przy których użytkownik powinien być powiadomiony mailem.
446 text_regexp_info: np. ^[A-Z0-9]+$
446 text_regexp_info: np. ^[A-Z0-9]+$
447 text_min_max_length_info: 0 oznacza brak restrykcji
447 text_min_max_length_info: 0 oznacza brak restrykcji
448 text_project_destroy_confirmation: JesteΕ› pewien, ΕΌe chcesz usunΔ…Δ‡ ten projekt i wszyskie powiΔ…zane dane?
448 text_project_destroy_confirmation: JesteΕ› pewien, ΕΌe chcesz usunΔ…Δ‡ ten projekt i wszyskie powiΔ…zane dane?
449 text_workflow_edit: Zaznacz rolΔ™ i typ zagadnienia do edycji przepΕ‚ywu
449 text_workflow_edit: Zaznacz rolΔ™ i typ zagadnienia do edycji przepΕ‚ywu
450 text_are_you_sure: JesteΕ› pewien ?
450 text_are_you_sure: JesteΕ› pewien ?
451 text_journal_changed: zmienione %s do %s
451 text_journal_changed: zmienione %s do %s
452 text_journal_set_to: ustawione na %s
452 text_journal_set_to: ustawione na %s
453 text_journal_deleted: usuniΔ™te
453 text_journal_deleted: usuniΔ™te
454 text_tip_task_begin_day: zadanie zaczynajΔ…ce siΔ™ dzisiaj
454 text_tip_task_begin_day: zadanie zaczynajΔ…ce siΔ™ dzisiaj
455 text_tip_task_end_day: zadanie koΕ„czΔ…ce siΔ™ dzisiaj
455 text_tip_task_end_day: zadanie koΕ„czΔ…ce siΔ™ dzisiaj
456 text_tip_task_begin_end_day: zadanie zaczynajΔ…ce i koΕ„czΔ…ce siΔ™ dzisiaj
456 text_tip_task_begin_end_day: zadanie zaczynajΔ…ce i koΕ„czΔ…ce siΔ™ dzisiaj
457 text_project_identifier_info: 'Małe litery (a-z), liczby i myślniki dozwolone.<br />Raz zapisany, identyfikator nie może być zmieniony.'
457 text_project_identifier_info: 'Małe litery (a-z), liczby i myślniki dozwolone.<br />Raz zapisany, identyfikator nie może być zmieniony.'
458 text_caracters_maximum: %d znakΓ³w maksymalnie.
458 text_caracters_maximum: %d znakΓ³w maksymalnie.
459 text_length_between: DΕ‚ugoΕ›Δ‡ pomiΔ™dzy %d i %d znakΓ³w.
459 text_length_between: DΕ‚ugoΕ›Δ‡ pomiΔ™dzy %d i %d znakΓ³w.
460 text_tracker_no_workflow: Brak przepΕ‚ywu zefiniowanego dla tego typu zagadnienia
460 text_tracker_no_workflow: Brak przepΕ‚ywu zefiniowanego dla tego typu zagadnienia
461 text_unallowed_characters: Niedozwolone znaki
461 text_unallowed_characters: Niedozwolone znaki
462 text_comma_separated: Wielokrotne wartoΕ›ci dozwolone (rozdzielone przecinkami).
462 text_comma_separated: Wielokrotne wartoΕ›ci dozwolone (rozdzielone przecinkami).
463 text_issues_ref_in_commit_messages: Zagadnienia odnoszΔ…ce i ustalajΔ…ce we wrzutkach CVS
463 text_issues_ref_in_commit_messages: Zagadnienia odnoszΔ…ce i ustalajΔ…ce we wrzutkach CVS
464
464
465 default_role_manager: Kierownik
465 default_role_manager: Kierownik
466 default_role_developper: Programista
466 default_role_developper: Programista
467 default_role_reporter: Wprowadzajacy
467 default_role_reporter: Wprowadzajacy
468 default_tracker_bug: BΕ‚Δ…d
468 default_tracker_bug: BΕ‚Δ…d
469 default_tracker_feature: Cecha
469 default_tracker_feature: Cecha
470 default_tracker_support: Wsparcie
470 default_tracker_support: Wsparcie
471 default_issue_status_new: Nowy
471 default_issue_status_new: Nowy
472 default_issue_status_assigned: Przypisany
472 default_issue_status_assigned: Przypisany
473 default_issue_status_resolved: RozwiΔ…zany
473 default_issue_status_resolved: RozwiΔ…zany
474 default_issue_status_feedback: OdpowiedΕΊ
474 default_issue_status_feedback: OdpowiedΕΊ
475 default_issue_status_closed: ZamkniΔ™ty
475 default_issue_status_closed: ZamkniΔ™ty
476 default_issue_status_rejected: Odrzucony
476 default_issue_status_rejected: Odrzucony
477 default_doc_category_user: Dokumentacja uΕΌytkownika
477 default_doc_category_user: Dokumentacja uΕΌytkownika
478 default_doc_category_tech: Dokumentacja techniczna
478 default_doc_category_tech: Dokumentacja techniczna
479 default_priority_low: Niski
479 default_priority_low: Niski
480 default_priority_normal: Normalny
480 default_priority_normal: Normalny
481 default_priority_high: Wysoki
481 default_priority_high: Wysoki
482 default_priority_urgent: Pilny
482 default_priority_urgent: Pilny
483 default_priority_immediate: Natyczmiastowy
483 default_priority_immediate: Natyczmiastowy
484 default_activity_design: Projektowanie
484 default_activity_design: Projektowanie
485 default_activity_development: RozwΓ³j
485 default_activity_development: RozwΓ³j
486
486
487 enumeration_issue_priorities: Priorytety zagadnieΕ„
487 enumeration_issue_priorities: Priorytety zagadnieΕ„
488 enumeration_doc_categories: Kategorie dokumentΓ³w
488 enumeration_doc_categories: Kategorie dokumentΓ³w
489 enumeration_activities: DziaΕ‚ania (Ε›ledzenie czasu)
489 enumeration_activities: DziaΕ‚ania (Ε›ledzenie czasu)
490 button_rename: ZmieΕ„ nazwΔ™
490 button_rename: ZmieΕ„ nazwΔ™
491 text_issue_category_destroy_question: Zagadnienia (%d) są przypisane do tej kategorii. Co chcesz uczynić?
491 text_issue_category_destroy_question: Zagadnienia (%d) są przypisane do tej kategorii. Co chcesz uczynić?
492 label_feeds_access_key_created_on: Klucz dostΔ™pu RSS stworzony %s dni temu
492 label_feeds_access_key_created_on: Klucz dostΔ™pu RSS stworzony %s dni temu
493 setting_cross_project_issue_relations: ZezwΓ³l na powiΔ…zania zagadnieΕ„ miΔ™dzy projektami
493 setting_cross_project_issue_relations: ZezwΓ³l na powiΔ…zania zagadnieΕ„ miΔ™dzy projektami
494 label_roadmap_overdue: %s spΓ³ΕΊnienia
494 label_roadmap_overdue: %s spΓ³ΕΊnienia
495 label_module_plural: ModuΕ‚y
495 label_module_plural: ModuΕ‚y
496 label_this_week: ten tydzieΕ„
496 label_this_week: ten tydzieΕ„
497 label_jump_to_a_project: Skocz do projektu...
497 label_jump_to_a_project: Skocz do projektu...
498 field_assignable: Zagadnienia mogą być przypisane do tej roli
498 field_assignable: Zagadnienia mogą być przypisane do tej roli
499 label_sort_by: Sortuj po %s
499 label_sort_by: Sortuj po %s
500 text_issue_updated: Zagadnienie %s zostaΕ‚o zaktualizowane.
500 text_issue_updated: Zagadnienie %s zostaΕ‚o zaktualizowane.
501 notice_feeds_access_key_reseted: TwΓ³j klucz dostΔ™pu RSS zostaΕ‚ zrestetowany.
501 notice_feeds_access_key_reseted: TwΓ³j klucz dostΔ™pu RSS zostaΕ‚ zrestetowany.
502 field_redirect_existing_links: Przekierowanie istniejΔ…cych odnoΕ›nikΓ³w
502 field_redirect_existing_links: Przekierowanie istniejΔ…cych odnoΕ›nikΓ³w
503 text_issue_category_reassign_to: Przydziel zagadnienie do tej kategorii
503 text_issue_category_reassign_to: Przydziel zagadnienie do tej kategorii
504 notice_email_sent: Email zostaΕ‚ wysΕ‚any do %s
504 notice_email_sent: Email zostaΕ‚ wysΕ‚any do %s
505 text_issue_added: Zagadnienie %s zostaΕ‚o wprowadzone.
505 text_issue_added: Zagadnienie %s zostaΕ‚o wprowadzone.
506 text_wiki_destroy_confirmation: JesteΕ› pewien, ΕΌe chcesz usunΔ…Δ‡ to wiki i caΕ‚Δ… jego zawartoΕ›Δ‡ ?
506 text_wiki_destroy_confirmation: JesteΕ› pewien, ΕΌe chcesz usunΔ…Δ‡ to wiki i caΕ‚Δ… jego zawartoΕ›Δ‡ ?
507 notice_email_error: WystΔ…piΕ‚ bΕ‚Δ…d w trakcie wysyΕ‚ania maila (%s)
507 notice_email_error: WystΔ…piΕ‚ bΕ‚Δ…d w trakcie wysyΕ‚ania maila (%s)
508 label_updated_time: Zaktualizowane %s temu
508 label_updated_time: Zaktualizowane %s temu
509 text_issue_category_destroy_assignments: UsuΕ„ przydziaΕ‚y kategorii
509 text_issue_category_destroy_assignments: UsuΕ„ przydziaΕ‚y kategorii
510 label_send_test_email: WyΕ›lij prΓ³bny email
510 label_send_test_email: WyΕ›lij prΓ³bny email
511 button_reset: Resetuj
511 button_reset: Resetuj
512 label_added_time_by: Dodane przez %s %s temu
512 label_added_time_by: Dodane przez %s %s temu
513 field_estimated_hours: Szacowany czas
513 field_estimated_hours: Szacowany czas
514 label_file_plural: Pliki
514 label_file_plural: Pliki
515 label_changeset_plural: Zestawienia zmian
515 label_changeset_plural: Zestawienia zmian
516 field_column_names: Nazwy kolumn
516 field_column_names: Nazwy kolumn
517 label_default_columns: DomyΕ›lne kolumny
517 label_default_columns: DomyΕ›lne kolumny
518 setting_issue_list_default_columns: DomyΕ›lne kolumny wiΕ›wietlane na liΕ›cie zagadnieΕ„
518 setting_issue_list_default_columns: DomyΕ›lne kolumny wiΕ›wietlane na liΕ›cie zagadnieΕ„
519 setting_repositories_encodings: Kodowanie repozytoriΓ³w
519 setting_repositories_encodings: Kodowanie repozytoriΓ³w
520 notice_no_issue_selected: "Nie wybrano zagadnienia! Zaznacz zagadnienie, które chcesz edytować."
520 notice_no_issue_selected: "Nie wybrano zagadnienia! Zaznacz zagadnienie, które chcesz edytować."
521 label_bulk_edit_selected_issues: Zbiorowa edycja zagadnieΕ„
521 label_bulk_edit_selected_issues: Zbiorowa edycja zagadnieΕ„
522 label_no_change_option: (Bez zmian)
522 label_no_change_option: (Bez zmian)
523 notice_failed_to_save_issues: "BΕ‚Δ…d podczas zapisu zagadnieΕ„ %d z %d zaznaczonych: %s."
523 notice_failed_to_save_issues: "BΕ‚Δ…d podczas zapisu zagadnieΕ„ %d z %d zaznaczonych: %s."
524 label_theme: Temat
524 label_theme: Temat
525 label_default: DomyΕ›lne
525 label_default: DomyΕ›lne
526 label_search_titles_only: Przeszukuj tylko tytuΕ‚y
526 label_search_titles_only: Przeszukuj tylko tytuΕ‚y
527 label_nobody: nikt
527 label_nobody: nikt
528 button_change_password: ZmieΕ„ hasΕ‚o
528 button_change_password: ZmieΕ„ hasΕ‚o
529 text_user_mail_option: "W przypadku niezaznaczonych projektΓ³w, bΔ™dziesz otrzymywaΕ‚ powiadomienia tylko na temat zagadnien, ktΓ³re obserwujesz, lub w ktΓ³rych bierzesz udziaΕ‚ (np. jesteΕ› autorem lub adresatem)."
529 text_user_mail_option: "W przypadku niezaznaczonych projektΓ³w, bΔ™dziesz otrzymywaΕ‚ powiadomienia tylko na temat zagadnien, ktΓ³re obserwujesz, lub w ktΓ³rych bierzesz udziaΕ‚ (np. jesteΕ› autorem lub adresatem)."
530 label_user_mail_option_selected: "Tylko dla kaΕΌdego zdarzenia w wybranych projektach..."
530 label_user_mail_option_selected: "Tylko dla kaΕΌdego zdarzenia w wybranych projektach..."
531 label_user_mail_option_all: "Dla kaΕΌdego zdarzenia w kaΕΌdym moim projekcie"
531 label_user_mail_option_all: "Dla kaΕΌdego zdarzenia w kaΕΌdym moim projekcie"
532 label_user_mail_option_none: "Tylko to co obserwuje lub w czym biorΔ™ udziaΕ‚"
532 label_user_mail_option_none: "Tylko to co obserwuje lub w czym biorΔ™ udziaΕ‚"
533 setting_emails_footer: Stopka e-mail
533 setting_emails_footer: Stopka e-mail
534 label_float: Liczba rzeczywista
534 label_float: Liczba rzeczywista
535 button_copy: Kopia
535 button_copy: Kopia
536 mail_body_account_information_external: Możesz użyć twojego "%s" konta do zalogowania do Redmine.
536 mail_body_account_information_external: Możesz użyć twojego "%s" konta do zalogowania do Redmine.
537 mail_body_account_information: Twoje konto w Redmine
537 mail_body_account_information: Twoje konto w Redmine
538 setting_protocol: ProtokoΕ‚
538 setting_protocol: ProtokoΕ‚
539 label_user_mail_no_self_notified: "Nie chcΔ™ powiadomieΕ„ o zmianach, ktΓ³re sam wprowadzam."
539 label_user_mail_no_self_notified: "Nie chcΔ™ powiadomieΕ„ o zmianach, ktΓ³re sam wprowadzam."
540 setting_time_format: Format czasu
540 setting_time_format: Format czasu
541 label_registration_activation_by_email: aktywacja konta przez e-mail
541 label_registration_activation_by_email: aktywacja konta przez e-mail
542 mail_subject_account_activation_request: Zapytanie aktywacyjne konta Redmine
542 mail_subject_account_activation_request: Zapytanie aktywacyjne konta Redmine
543 mail_body_account_activation_request: 'Zarejestrowano nowego uΕΌytkownika: (%s). Konto oczekuje na twoje zatwierdzenie:'
543 mail_body_account_activation_request: 'Zarejestrowano nowego uΕΌytkownika: (%s). Konto oczekuje na twoje zatwierdzenie:'
544 label_registration_automatic_activation: automatyczna aktywacja kont
544 label_registration_automatic_activation: automatyczna aktywacja kont
545 label_registration_manual_activation: manualna aktywacja kont
545 label_registration_manual_activation: manualna aktywacja kont
546 notice_account_pending: "Twoje konto zostaΕ‚o utworzone i oczekuje na zatwierdzenie administratora."
546 notice_account_pending: "Twoje konto zostaΕ‚o utworzone i oczekuje na zatwierdzenie administratora."
547 field_time_zone: Time zone
547 field_time_zone: Strefa czasowa
@@ -1,76 +1,76
1 # redMine - project management software
1 # redMine - project management software
2 # Copyright (C) 2006-2007 Jean-Philippe Lang
2 # Copyright (C) 2006-2007 Jean-Philippe Lang
3 #
3 #
4 # This program is free software; you can redistribute it and/or
4 # This program is free software; you can redistribute it and/or
5 # modify it under the terms of the GNU General Public License
5 # modify it under the terms of the GNU General Public License
6 # as published by the Free Software Foundation; either version 2
6 # as published by the Free Software Foundation; either version 2
7 # of the License, or (at your option) any later version.
7 # of the License, or (at your option) any later version.
8 #
8 #
9 # This program is distributed in the hope that it will be useful,
9 # This program is distributed in the hope that it will be useful,
10 # but WITHOUT ANY WARRANTY; without even the implied warranty of
10 # but WITHOUT ANY WARRANTY; without even the implied warranty of
11 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 # GNU General Public License for more details.
12 # GNU General Public License for more details.
13 #
13 #
14 # You should have received a copy of the GNU General Public License
14 # You should have received a copy of the GNU General Public License
15 # along with this program; if not, write to the Free Software
15 # along with this program; if not, write to the Free Software
16 # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
16 # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
17
17
18 require File.dirname(__FILE__) + '/../test_helper'
18 require File.dirname(__FILE__) + '/../test_helper'
19
19
20 class RepositoryTest < Test::Unit::TestCase
20 class RepositoryTest < Test::Unit::TestCase
21 fixtures :projects, :repositories, :issues, :issue_statuses, :changesets, :changes
21 fixtures :projects, :repositories, :issues, :issue_statuses, :changesets, :changes
22
22
23 def setup
23 def setup
24 @repository = Project.find(1).repository
24 @repository = Project.find(1).repository
25 end
25 end
26
26
27 def test_create
27 def test_create
28 repository = Repository::Subversion.new(:project => Project.find(2))
28 repository = Repository::Subversion.new(:project => Project.find(2))
29 assert !repository.save
29 assert !repository.save
30
30
31 repository.url = "svn://localhost"
31 repository.url = "svn://localhost"
32 assert repository.save
32 assert repository.save
33 repository.reload
33 repository.reload
34
34
35 project = Project.find(2)
35 project = Project.find(2)
36 assert_equal repository, project.repository
36 assert_equal repository, project.repository
37 end
37 end
38
38
39 def test_scan_changesets_for_issue_ids
39 def test_scan_changesets_for_issue_ids
40 # choosing a status to apply to fix issues
40 # choosing a status to apply to fix issues
41 Setting.commit_fix_status_id = IssueStatus.find(:first, :conditions => ["is_closed = ?", true]).id
41 Setting.commit_fix_status_id = IssueStatus.find(:first, :conditions => ["is_closed = ?", true]).id
42 Setting.commit_fix_done_ratio = "90"
42 Setting.commit_fix_done_ratio = "90"
43 Setting.commit_ref_keywords = 'refs , references, IssueID'
43 Setting.commit_ref_keywords = 'refs , references, IssueID'
44 Setting.commit_fix_keywords = 'fixes , closes'
44 Setting.commit_fix_keywords = 'fixes , closes'
45
45
46 # make sure issue 1 is not already closed
46 # make sure issue 1 is not already closed
47 assert !Issue.find(1).status.is_closed?
47 assert !Issue.find(1).status.is_closed?
48
48
49 Repository.scan_changesets_for_issue_ids
49 Repository.scan_changesets_for_issue_ids
50 assert_equal [101, 102], Issue.find(3).changeset_ids
50 assert_equal [101, 102], Issue.find(3).changeset_ids
51
51
52 # fixed issues
52 # fixed issues
53 fixed_issue = Issue.find(1)
53 fixed_issue = Issue.find(1)
54 assert fixed_issue.status.is_closed?
54 assert fixed_issue.status.is_closed?
55 assert_equal 90, fixed_issue.done_ratio
55 assert_equal 90, fixed_issue.done_ratio
56 assert_equal [101], fixed_issue.changeset_ids
56 assert_equal [101], fixed_issue.changeset_ids
57
57
58 # ignoring commits referencing an issue of another project
58 # ignoring commits referencing an issue of another project
59 assert_equal [], Issue.find(4).changesets
59 assert_equal [], Issue.find(4).changesets
60 end
60 end
61
61
62 def test_for_changeset_comments_strip
62 def test_for_changeset_comments_strip
63 repository = Repository::Mercurial.create( :project => Project.find( 4 ), :url => '/foo/bar/baz' )
63 repository = Repository::Mercurial.create( :project => Project.find( 4 ), :url => '/foo/bar/baz' )
64 comment = <<-COMMENT
64 comment = <<-COMMENT
65 This is a loooooooooooooooooooooooooooong comment
65 This is a loooooooooooooooooooooooooooong comment
66
66
67
67
68 COMMENT
68 COMMENT
69 changeset = Changeset.new(
69 changeset = Changeset.new(
70 :comments => comment, :commit_date => Time.now, :revision => 0, :scmid => 'f39b7922fb3c',
70 :comments => comment, :commit_date => Time.now, :revision => 0, :scmid => 'f39b7922fb3c',
71 :committer => 'foo <foo@example.com>', :committed_on => Time.now, :repository_id => repository )
71 :committer => 'foo <foo@example.com>', :committed_on => Time.now, :repository => repository )
72 assert( changeset.save )
72 assert( changeset.save )
73 assert_not_equal( comment, changeset.comments )
73 assert_not_equal( comment, changeset.comments )
74 assert_equal( 'This is a loooooooooooooooooooooooooooong comment', changeset.comments )
74 assert_equal( 'This is a loooooooooooooooooooooooooooong comment', changeset.comments )
75 end
75 end
76 end
76 end
General Comments 0
You need to be logged in to leave comments. Login now