##// END OF EJS Templates
Fixed: localization problem on issue list headers....
Jean-Philippe Lang -
r893:76cdef46f290
parent child
Show More
@@ -1,345 +1,346
1 1 # redMine - project management software
2 2 # Copyright (C) 2006-2007 Jean-Philippe Lang
3 3 #
4 4 # This program is free software; you can redistribute it and/or
5 5 # modify it under the terms of the GNU General Public License
6 6 # as published by the Free Software Foundation; either version 2
7 7 # of the License, or (at your option) any later version.
8 8 #
9 9 # This program is distributed in the hope that it will be useful,
10 10 # but WITHOUT ANY WARRANTY; without even the implied warranty of
11 11 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 12 # GNU General Public License for more details.
13 13 #
14 14 # You should have received a copy of the GNU General Public License
15 15 # along with this program; if not, write to the Free Software
16 16 # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
17 17
18 18 class QueryColumn
19 19 attr_accessor :name, :sortable
20 20 include GLoc
21 21
22 22 def initialize(name, options={})
23 23 self.name = name
24 24 self.sortable = options[:sortable]
25 25 end
26 26
27 27 def caption
28 set_language_if_valid(User.current.language)
28 29 l("field_#{name}")
29 30 end
30 31 end
31 32
32 33 class QueryCustomFieldColumn < QueryColumn
33 34
34 35 def initialize(custom_field)
35 36 self.name = "cf_#{custom_field.id}".to_sym
36 37 self.sortable = false
37 38 @cf = custom_field
38 39 end
39 40
40 41 def caption
41 42 @cf.name
42 43 end
43 44
44 45 def custom_field
45 46 @cf
46 47 end
47 48 end
48 49
49 50 class Query < ActiveRecord::Base
50 51 belongs_to :project
51 52 belongs_to :user
52 53 serialize :filters
53 54 serialize :column_names
54 55
55 56 attr_protected :project, :user
56 57 attr_accessor :executed_by
57 58
58 59 validates_presence_of :name, :on => :save
59 60 validates_length_of :name, :maximum => 255
60 61
61 62 @@operators = { "=" => :label_equals,
62 63 "!" => :label_not_equals,
63 64 "o" => :label_open_issues,
64 65 "c" => :label_closed_issues,
65 66 "!*" => :label_none,
66 67 "*" => :label_all,
67 68 ">=" => '>=',
68 69 "<=" => '<=',
69 70 "<t+" => :label_in_less_than,
70 71 ">t+" => :label_in_more_than,
71 72 "t+" => :label_in,
72 73 "t" => :label_today,
73 74 "w" => :label_this_week,
74 75 ">t-" => :label_less_than_ago,
75 76 "<t-" => :label_more_than_ago,
76 77 "t-" => :label_ago,
77 78 "~" => :label_contains,
78 79 "!~" => :label_not_contains }
79 80
80 81 cattr_reader :operators
81 82
82 83 @@operators_by_filter_type = { :list => [ "=", "!" ],
83 84 :list_status => [ "o", "=", "!", "c", "*" ],
84 85 :list_optional => [ "=", "!", "!*", "*" ],
85 86 :list_one_or_more => [ "*", "=" ],
86 87 :date => [ "<t+", ">t+", "t+", "t", "w", ">t-", "<t-", "t-" ],
87 88 :date_past => [ ">t-", "<t-", "t-", "t", "w" ],
88 89 :string => [ "=", "~", "!", "!~" ],
89 90 :text => [ "~", "!~" ],
90 91 :integer => [ "=", ">=", "<=" ] }
91 92
92 93 cattr_reader :operators_by_filter_type
93 94
94 95 @@available_columns = [
95 96 QueryColumn.new(:tracker, :sortable => "#{Tracker.table_name}.position"),
96 97 QueryColumn.new(:status, :sortable => "#{IssueStatus.table_name}.position"),
97 98 QueryColumn.new(:priority, :sortable => "#{Enumeration.table_name}.position"),
98 99 QueryColumn.new(:subject),
99 100 QueryColumn.new(:assigned_to, :sortable => "#{User.table_name}.lastname"),
100 101 QueryColumn.new(:updated_on, :sortable => "#{Issue.table_name}.updated_on"),
101 102 QueryColumn.new(:category, :sortable => "#{IssueCategory.table_name}.name"),
102 103 QueryColumn.new(:start_date, :sortable => "#{Issue.table_name}.start_date"),
103 104 QueryColumn.new(:due_date, :sortable => "#{Issue.table_name}.due_date"),
104 105 QueryColumn.new(:estimated_hours, :sortable => "#{Issue.table_name}.estimated_hours"),
105 106 QueryColumn.new(:done_ratio, :sortable => "#{Issue.table_name}.done_ratio"),
106 107 QueryColumn.new(:created_on, :sortable => "#{Issue.table_name}.created_on"),
107 108 ]
108 109 cattr_reader :available_columns
109 110
110 111 def initialize(attributes = nil)
111 112 super attributes
112 113 self.filters ||= { 'status_id' => {:operator => "o", :values => [""]} }
113 114 end
114 115
115 116 def executed_by=(user)
116 117 @executed_by = user
117 118 set_language_if_valid(user.language) if user
118 119 end
119 120
120 121 def validate
121 122 filters.each_key do |field|
122 123 errors.add label_for(field), :activerecord_error_blank unless
123 124 # filter requires one or more values
124 125 (values_for(field) and !values_for(field).first.empty?) or
125 126 # filter doesn't require any value
126 127 ["o", "c", "!*", "*", "t", "w"].include? operator_for(field)
127 128 end if filters
128 129 end
129 130
130 131 def editable_by?(user)
131 132 return false unless user
132 133 return true if !is_public && self.user_id == user.id
133 134 is_public && user.allowed_to?(:manage_public_queries, project)
134 135 end
135 136
136 137 def available_filters
137 138 return @available_filters if @available_filters
138 139 @available_filters = { "status_id" => { :type => :list_status, :order => 1, :values => IssueStatus.find(:all, :order => 'position').collect{|s| [s.name, s.id.to_s] } },
139 140 "tracker_id" => { :type => :list, :order => 2, :values => Tracker.find(:all, :order => 'position').collect{|s| [s.name, s.id.to_s] } },
140 141 "priority_id" => { :type => :list, :order => 3, :values => Enumeration.find(:all, :conditions => ['opt=?','IPRI']).collect{|s| [s.name, s.id.to_s] } },
141 142 "subject" => { :type => :text, :order => 8 },
142 143 "created_on" => { :type => :date_past, :order => 9 },
143 144 "updated_on" => { :type => :date_past, :order => 10 },
144 145 "start_date" => { :type => :date, :order => 11 },
145 146 "due_date" => { :type => :date, :order => 12 },
146 147 "done_ratio" => { :type => :integer, :order => 13 }}
147 148
148 149 user_values = []
149 150 user_values << ["<< #{l(:label_me)} >>", "me"] if executed_by
150 151 if project
151 152 user_values += project.users.collect{|s| [s.name, s.id.to_s] }
152 153 elsif executed_by
153 154 # members of the user's projects
154 155 user_values += executed_by.projects.collect(&:users).flatten.uniq.sort.collect{|s| [s.name, s.id.to_s] }
155 156 end
156 157 @available_filters["assigned_to_id"] = { :type => :list_optional, :order => 4, :values => user_values } unless user_values.empty?
157 158 @available_filters["author_id"] = { :type => :list, :order => 5, :values => user_values } unless user_values.empty?
158 159
159 160 if project
160 161 # project specific filters
161 162 @available_filters["category_id"] = { :type => :list_optional, :order => 6, :values => @project.issue_categories.collect{|s| [s.name, s.id.to_s] } }
162 163 @available_filters["fixed_version_id"] = { :type => :list_optional, :order => 7, :values => @project.versions.sort.collect{|s| [s.name, s.id.to_s] } }
163 164 unless @project.active_children.empty?
164 165 @available_filters["subproject_id"] = { :type => :list_one_or_more, :order => 13, :values => @project.active_children.collect{|s| [s.name, s.id.to_s] } }
165 166 end
166 167 @project.all_custom_fields.select(&:is_filter?).each do |field|
167 168 case field.field_format
168 169 when "string", "int"
169 170 options = { :type => :string, :order => 20 }
170 171 when "text"
171 172 options = { :type => :text, :order => 20 }
172 173 when "list"
173 174 options = { :type => :list_optional, :values => field.possible_values, :order => 20}
174 175 when "date"
175 176 options = { :type => :date, :order => 20 }
176 177 when "bool"
177 178 options = { :type => :list, :values => [[l(:general_text_yes), "1"], [l(:general_text_no), "0"]], :order => 20 }
178 179 end
179 180 @available_filters["cf_#{field.id}"] = options.merge({ :name => field.name })
180 181 end
181 182 # remove category filter if no category defined
182 183 @available_filters.delete "category_id" if @available_filters["category_id"][:values].empty?
183 184 end
184 185 @available_filters
185 186 end
186 187
187 188 def add_filter(field, operator, values)
188 189 # values must be an array
189 190 return unless values and values.is_a? Array # and !values.first.empty?
190 191 # check if field is defined as an available filter
191 192 if available_filters.has_key? field
192 193 filter_options = available_filters[field]
193 194 # check if operator is allowed for that filter
194 195 #if @@operators_by_filter_type[filter_options[:type]].include? operator
195 196 # allowed_values = values & ([""] + (filter_options[:values] || []).collect {|val| val[1]})
196 197 # filters[field] = {:operator => operator, :values => allowed_values } if (allowed_values.first and !allowed_values.first.empty?) or ["o", "c", "!*", "*", "t"].include? operator
197 198 #end
198 199 filters[field] = {:operator => operator, :values => values }
199 200 end
200 201 end
201 202
202 203 def add_short_filter(field, expression)
203 204 return unless expression
204 205 parms = expression.scan(/^(o|c|\!|\*)?(.*)$/).first
205 206 add_filter field, (parms[0] || "="), [parms[1] || ""]
206 207 end
207 208
208 209 def has_filter?(field)
209 210 filters and filters[field]
210 211 end
211 212
212 213 def operator_for(field)
213 214 has_filter?(field) ? filters[field][:operator] : nil
214 215 end
215 216
216 217 def values_for(field)
217 218 has_filter?(field) ? filters[field][:values] : nil
218 219 end
219 220
220 221 def label_for(field)
221 222 label = @available_filters[field][:name] if @available_filters.has_key?(field)
222 223 label ||= field.gsub(/\_id$/, "")
223 224 end
224 225
225 226 def available_columns
226 227 return @available_columns if @available_columns
227 228 @available_columns = Query.available_columns
228 229 @available_columns += (project ?
229 230 project.custom_fields :
230 231 IssueCustomField.find(:all, :conditions => {:is_for_all => true})
231 232 ).collect {|cf| QueryCustomFieldColumn.new(cf) }
232 233 end
233 234
234 235 def columns
235 236 if has_default_columns?
236 237 available_columns.select {|c| Setting.issue_list_default_columns.include?(c.name.to_s) }
237 238 else
238 239 # preserve the column_names order
239 240 column_names.collect {|name| available_columns.find {|col| col.name == name}}.compact
240 241 end
241 242 end
242 243
243 244 def column_names=(names)
244 245 names = names.select {|n| n.is_a?(Symbol) || !n.blank? } if names
245 246 names = names.collect {|n| n.is_a?(Symbol) ? n : n.to_sym } if names
246 247 write_attribute(:column_names, names)
247 248 end
248 249
249 250 def has_column?(column)
250 251 column_names && column_names.include?(column.name)
251 252 end
252 253
253 254 def has_default_columns?
254 255 column_names.nil? || column_names.empty?
255 256 end
256 257
257 258 def statement
258 259 # project/subprojects clause
259 260 clause = ''
260 261 if project && has_filter?("subproject_id")
261 262 subproject_ids = []
262 263 if operator_for("subproject_id") == "="
263 264 subproject_ids = values_for("subproject_id").each(&:to_i)
264 265 else
265 266 subproject_ids = project.active_children.collect{|p| p.id}
266 267 end
267 268 clause << "#{Issue.table_name}.project_id IN (%d,%s)" % [project.id, subproject_ids.join(",")] if project
268 269 elsif project
269 270 clause << "#{Issue.table_name}.project_id=%d" % project.id
270 271 else
271 272 clause << Project.visible_by(executed_by)
272 273 end
273 274
274 275 # filters clauses
275 276 filters_clauses = []
276 277 filters.each_key do |field|
277 278 next if field == "subproject_id"
278 279 v = values_for(field).clone
279 280 next unless v and !v.empty?
280 281
281 282 sql = ''
282 283 if field =~ /^cf_(\d+)$/
283 284 # custom field
284 285 db_table = CustomValue.table_name
285 286 db_field = 'value'
286 287 sql << "#{Issue.table_name}.id IN (SELECT #{db_table}.customized_id FROM #{db_table} where #{db_table}.customized_type='Issue' AND #{db_table}.customized_id=#{Issue.table_name}.id AND #{db_table}.custom_field_id=#{$1} AND "
287 288 else
288 289 # regular field
289 290 db_table = Issue.table_name
290 291 db_field = field
291 292 sql << '('
292 293 end
293 294
294 295 # "me" value subsitution
295 296 if %w(assigned_to_id author_id).include?(field)
296 297 v.push(executed_by ? executed_by.id.to_s : "0") if v.delete("me")
297 298 end
298 299
299 300 case operator_for field
300 301 when "="
301 302 sql = sql + "#{db_table}.#{db_field} IN (" + v.collect{|val| "'#{connection.quote_string(val)}'"}.join(",") + ")"
302 303 when "!"
303 304 sql = sql + "#{db_table}.#{db_field} NOT IN (" + v.collect{|val| "'#{connection.quote_string(val)}'"}.join(",") + ")"
304 305 when "!*"
305 306 sql = sql + "#{db_table}.#{db_field} IS NULL"
306 307 when "*"
307 308 sql = sql + "#{db_table}.#{db_field} IS NOT NULL"
308 309 when ">="
309 310 sql = sql + "#{db_table}.#{db_field} >= #{v.first.to_i}"
310 311 when "<="
311 312 sql = sql + "#{db_table}.#{db_field} <= #{v.first.to_i}"
312 313 when "o"
313 314 sql = sql + "#{IssueStatus.table_name}.is_closed=#{connection.quoted_false}" if field == "status_id"
314 315 when "c"
315 316 sql = sql + "#{IssueStatus.table_name}.is_closed=#{connection.quoted_true}" if field == "status_id"
316 317 when ">t-"
317 318 sql = sql + "#{db_table}.#{db_field} BETWEEN '%s' AND '%s'" % [connection.quoted_date((Date.today - v.first.to_i).to_time), connection.quoted_date((Date.today + 1).to_time)]
318 319 when "<t-"
319 320 sql = sql + "#{db_table}.#{db_field} <= '%s'" % connection.quoted_date((Date.today - v.first.to_i).to_time)
320 321 when "t-"
321 322 sql = sql + "#{db_table}.#{db_field} BETWEEN '%s' AND '%s'" % [connection.quoted_date((Date.today - v.first.to_i).to_time), connection.quoted_date((Date.today - v.first.to_i + 1).to_time)]
322 323 when ">t+"
323 324 sql = sql + "#{db_table}.#{db_field} >= '%s'" % connection.quoted_date((Date.today + v.first.to_i).to_time)
324 325 when "<t+"
325 326 sql = sql + "#{db_table}.#{db_field} BETWEEN '%s' AND '%s'" % [connection.quoted_date(Date.today.to_time), connection.quoted_date((Date.today + v.first.to_i + 1).to_time)]
326 327 when "t+"
327 328 sql = sql + "#{db_table}.#{db_field} BETWEEN '%s' AND '%s'" % [connection.quoted_date((Date.today + v.first.to_i).to_time), connection.quoted_date((Date.today + v.first.to_i + 1).to_time)]
328 329 when "t"
329 330 sql = sql + "#{db_table}.#{db_field} BETWEEN '%s' AND '%s'" % [connection.quoted_date(Date.today.to_time), connection.quoted_date((Date.today+1).to_time)]
330 331 when "w"
331 332 sql = sql + "#{db_table}.#{db_field} BETWEEN '%s' AND '%s'" % [connection.quoted_date(Time.now.at_beginning_of_week), connection.quoted_date(Time.now.next_week.yesterday)]
332 333 when "~"
333 334 sql = sql + "#{db_table}.#{db_field} LIKE '%#{connection.quote_string(v.first)}%'"
334 335 when "!~"
335 336 sql = sql + "#{db_table}.#{db_field} NOT LIKE '%#{connection.quote_string(v.first)}%'"
336 337 end
337 338 sql << ')'
338 339 filters_clauses << sql
339 340 end if filters and valid?
340 341
341 342 clause << ' AND ' unless clause.empty?
342 343 clause << filters_clauses.join(' AND ') unless filters_clauses.empty?
343 344 clause
344 345 end
345 346 end
@@ -1,540 +1,540
1 1 _gloc_rule_default: '|n| n==1 ? "" : "_plural" '
2 2
3 3 actionview_datehelper_select_day_prefix:
4 4 actionview_datehelper_select_month_names: Январь,Февраль,Март,Апрель,Май,Июнь,Июль,Август,Сентябрь,Октябрь,Ноябрь,Декабрь
5 5 actionview_datehelper_select_month_names_abbr: Янв,Фев,Мар,Апр,Май,Июн,Июл,Авг,Сен,Окт,Нояб,Дек
6 6 actionview_datehelper_select_month_prefix:
7 7 actionview_datehelper_select_year_prefix:
8 8 actionview_datehelper_time_in_words_day: 1 день
9 9 actionview_datehelper_time_in_words_day_plural: %d дней(я)
10 10 actionview_datehelper_time_in_words_hour_about: около часа
11 11 actionview_datehelper_time_in_words_hour_about_plural: около %d часов
12 12 actionview_datehelper_time_in_words_hour_about_single: около часа
13 13 actionview_datehelper_time_in_words_minute: 1 минута
14 14 actionview_datehelper_time_in_words_minute_half: полминуты
15 15 actionview_datehelper_time_in_words_minute_less_than: менее минуты
16 16 actionview_datehelper_time_in_words_minute_plural: %d минут(ы)
17 17 actionview_datehelper_time_in_words_minute_single: 1 минута
18 18 actionview_datehelper_time_in_words_second_less_than: менее секунды
19 19 actionview_datehelper_time_in_words_second_less_than_plural: менее %d секунд
20 20 actionview_instancetag_blank_option: Выберите
21 21
22 22 activerecord_error_inclusion: нет в списке
23 23 activerecord_error_exclusion: зарезервировано
24 24 activerecord_error_invalid: неверное значение
25 25 activerecord_error_confirmation: ошибка в подтверждении
26 26 activerecord_error_accepted: необходимо принять
27 27 activerecord_error_empty: необходимо заполнить
28 28 activerecord_error_blank: необходимо заполнить
29 29 activerecord_error_too_long: слишком длинное значение
30 30 activerecord_error_too_short: слишком короткое значение
31 31 activerecord_error_wrong_length: не соответствует длине
32 32 activerecord_error_taken: уже был принят
33 33 activerecord_error_not_a_number: не является числом
34 34 activerecord_error_not_a_date: дата недействительна
35 35 activerecord_error_greater_than_start_date: должна быть позднее даты начала
36 36 activerecord_error_not_same_project: не относятся к одному проекту
37 37 activerecord_error_circular_dependency: Такая связь приведет к циклической зависимости
38 38
39 39 general_fmt_age: %d г.
40 40 general_fmt_age_plural: %d гг.
41 41 general_fmt_date: %%m/%%d/%%Y
42 42 general_fmt_datetime: %%m/%%d/%%Y %%I:%%M %%p
43 43 general_fmt_datetime_short: %%b %%d, %%I:%%M %%p
44 44 general_fmt_time: %%I:%%M %%p
45 45 general_text_No: 'Нет'
46 46 general_text_Yes: 'Да'
47 47 general_text_no: 'Нет'
48 48 general_text_yes: 'Да'
49 49 general_lang_name: 'Russian (Русский)'
50 50 general_csv_separator: ','
51 51 general_csv_encoding: ISO-8859-1
52 52 general_pdf_encoding: ISO-8859-1
53 53 general_day_names: Понедельник,Вторник,Среда,Четверг,Пятница,Суббота,Воскресенье
54 general_first_day_of_week: '7'
54 general_first_day_of_week: '1'
55 55
56 56 notice_account_updated: Учетная запись успешно обновлена.
57 57 notice_account_invalid_creditentials: Неправильное имя пользователя или пароль
58 58 notice_account_password_updated: Пароль успешно обновлен.
59 59 notice_account_wrong_password: Неверный пароль
60 60 notice_account_register_done: Учетная запись успешно создана. Для активации Вашей учетной записи зайдите по ссылке, которая выслана вам по электронной почте.
61 61 notice_account_unknown_email: Неизвестный пользователь.
62 62 notice_can_t_change_password: Для данной учетной записи используется источник внешней аутентификации. Невозможно изменить пароль.
63 63 notice_account_lost_email_sent: Вам отправлено письмо с инструкциями по выбору нового пароля.
64 64 notice_account_activated: Ваша учетная запись активирована. Вы можете войти.
65 65 notice_successful_create: Создание успешно завершено.
66 66 notice_successful_update: Обновление успешно завершено.
67 67 notice_successful_delete: Удаление успешно завершено.
68 68 notice_successful_connection: Подключение успешно установлено.
69 69 notice_file_not_found: Страница, на которую вы пытаетесь зайти, не существует или удалена.
70 70 notice_locking_conflict: Информация обновлена другим пользователем.
71 71 notice_scm_error: Записи и/или исправления нет в репозитории.
72 72 notice_not_authorized: У вас нет прав для посещения данной страницы.
73 73 notice_email_sent: Отправлено письмо %s
74 74 notice_email_error: Во время отправки письма произошла ошибка (%s)
75 75 notice_feeds_access_key_reseted: Ваш ключ доступа RSS был перезапущен.
76 76 notice_failed_to_save_issues: "Не удалось сохранить %d пункт(ов)из %d выбранных: %s."
77 77 notice_no_issue_selected: "Не выбрано ни одной задачи! Пожалуйста, отметьте задачи, которые вы хотите отредактировать."
78 78
79 79 mail_subject_lost_password: Ваш Redmine пароль
80 80 mail_body_lost_password: 'Для изменения Redmine пароля, зайдите по следующей ссылке:'
81 81 mail_subject_register: Активация учетной записи Redmine
82 82 mail_body_register: 'Для активации учетной записи Redmine, зайдите по следующей ссылке:'
83 83 mail_body_account_information_external: Вы можете использовать вашу "%s" учетную запись для входа в Redmine.
84 84 mail_body_account_information: Информация по Вашей учетной записи Redmine
85 85
86 86 gui_validation_error: 1 ошибка
87 87 gui_validation_error_plural: %d ошибки(ок)
88 88
89 89 field_name: Имя
90 90 field_description: Описание
91 91 field_summary: Краткое описание
92 92 field_is_required: Необходимо
93 93 field_firstname: Имя
94 94 field_lastname: Фамилия
95 95 field_mail: Email
96 96 field_filename: Файл
97 97 field_filesize: Размер
98 98 field_downloads: Загрузки
99 99 field_author: Автор
100 100 field_created_on: Создано
101 101 field_updated_on: Обновлено
102 102 field_field_format: Формат
103 103 field_is_for_all: Для всех форматов
104 104 field_possible_values: Возможные значения
105 105 field_regexp: Регулярное выражение
106 106 field_min_length: Минимальная длина
107 107 field_max_length: Максимальная длина
108 108 field_value: Значение
109 109 field_category: Категория
110 110 field_title: Название
111 111 field_project: Проект
112 112 field_issue: Задача
113 113 field_status: Статус
114 114 field_notes: Примечания
115 115 field_is_closed: Задача закрыта
116 116 field_is_default: Значение по умолчанию
117 117 field_tracker: Трекер
118 118 field_subject: Тема
119 119 field_due_date: Дата выполнения
120 120 field_assigned_to: Назначена
121 121 field_priority: Приоритет
122 122 field_fixed_version: Фиксированная версия
123 123 field_user: Пользователь
124 124 field_role: Роль
125 125 field_homepage: Стартовая страница
126 126 field_is_public: Публичный
127 127 field_parent: Подпроект
128 128 field_is_in_chlog: Задачи, отображаемые в журнале изменений
129 129 field_is_in_roadmap: Задачи, отображаемые в оперативном плане
130 130 field_login: Вход
131 131 field_mail_notification: Уведомления по Email
132 132 field_admin: Администратор
133 133 field_last_login_on: Последнее подключение
134 134 field_language: Язык
135 135 field_effective_date: Дата
136 136 field_password: Пароль
137 137 field_new_password: Новый пароль
138 138 field_password_confirmation: Подтверждение
139 139 field_version: Версия
140 140 field_type: Тип
141 141 field_host: Компьютер
142 142 field_port: Порт
143 143 field_account: Учетная запись
144 144 field_base_dn: Базовое отличительное имя
145 145 field_attr_login: Атрибут Регистрация
146 146 field_attr_firstname: Атрибут Имя
147 147 field_attr_lastname: Атрибут Фамилия
148 148 field_attr_mail: Атрибут Email
149 149 field_onthefly: Создание пользователя на лету
150 150 field_start_date: Начало
151 151 field_done_ratio: %% Готовности
152 152 field_auth_source: Режим аутентификации
153 field_hide_mail: Скрывать мой email адрес
153 field_hide_mail: Скрывать мой email
154 154 field_comments: Комментарий
155 155 field_url: URL
156 156 field_start_page: Стартовая страница
157 157 field_subproject: Подпроект
158 158 field_hours: Часы
159 159 field_activity: Деятельность
160 160 field_spent_on: Дата
161 161 field_identifier: Признак
162 162 field_is_filter: Используется в качестве фильтра
163 field_issue_to_id: Относящиеся задачи
163 field_issue_to_id: Связанные задачи
164 164 field_delay: Отложить
165 165 field_assignable: Задача может быть назначена этой роли
166 166 field_redirect_existing_links: Перенаправить существующие ссылки
167 167 field_estimated_hours: Оцененное время
168 168 field_column_names: Колонки
169 169
170 170 setting_app_title: Название приложения
171 171 setting_app_subtitle: Подзаголовок приложения
172 172 setting_welcome_text: Текст приветствия
173 173 setting_default_language: Язык по умолчанию
174 174 setting_login_required: Необходима аутентификация
175 175 setting_self_registration: Возможна само-регистрация
176 176 setting_attachment_max_size: Максимальный размер вложения
177 177 setting_issues_export_limit: Ограничение по экспортируемым задачам
178 178 setting_mail_from: email адрес для передачи информации
179 179 setting_host_name: Имя компьютера
180 180 setting_text_formatting: Форматирование текста
181 181 setting_wiki_compression: Сжатие истории Wiki
182 182 setting_feeds_limit: Ограничения вводимого содержания
183 183 setting_autofetch_changesets: Autofetch коммиты
184 184 setting_sys_api_enabled: Разрешить WS для управления репозиторием
185 185 setting_commit_ref_keywords: Ключевые слова для поиска
186 186 setting_commit_fix_keywords: Назначение ключевых слов
187 187 setting_autologin: Автоматический вход
188 188 setting_date_format: Формат даты
189 setting_time_format: Time format
189 190 setting_cross_project_issue_relations: Разрешить пересечение задач по проектам
190 191 setting_issue_list_default_columns: Колонки, отображаемые в списке задач по умолчанию
191 192 setting_repositories_encodings: Кодировки репозитория
192 193 setting_emails_footer: Подстрочные примечания Emailов
193 194 setting_protocol: Протокол
194 195
195 196 label_user: Пользователь
196 197 label_user_plural: Пользователи
197 198 label_user_new: Новый пользователь
198 199 label_project: Проект
199 200 label_project_new: Новый проект
200 201 label_project_plural: Проекты
201 202 label_project_all: Все проекты
202 203 label_project_latest: Последние проекты
203 204 label_issue: Задача
204 205 label_issue_new: Новая задача
205 206 label_issue_plural: Задачи
206 207 label_issue_view_all: Просмотреть все задачи
207 208 label_document: Документ
208 209 label_document_new: Новый документ
209 210 label_document_plural: Документы
210 211 label_role: Роль
211 212 label_role_plural: Роли
212 213 label_role_new: Новая роль
213 214 label_role_and_permissions: Роли и права доступа
214 215 label_member: Участник
215 216 label_member_new: Новый участник
216 217 label_member_plural: Участники
217 218 label_tracker: Трекер
218 219 label_tracker_plural: Трекеры
219 220 label_tracker_new: Новый трекер
220 221 label_workflow: Последовательность действий
221 222 label_issue_status: Статус задачи
222 223 label_issue_status_plural: Статусы задачи
223 224 label_issue_status_new: Новый статус
224 225 label_issue_category: Категория задачи
225 226 label_issue_category_plural: Категории задачи
226 227 label_issue_category_new: Новая категория
227 228 label_custom_field: Поле клиента
228 229 label_custom_field_plural: Поля клиента
229 230 label_custom_field_new: Новое поле клиента
230 231 label_enumerations: Справочники
231 232 label_enumeration_new: Новое значение
232 233 label_information: Информация
233 234 label_information_plural: Информация
234 235 label_please_login: Пожалуйста, войдите.
235 236 label_register: Зарегистрироваться
236 237 label_password_lost: Забыли пароль
237 238 label_home: Домашняя страница
238 239 label_my_page: Моя страница
239 240 label_my_account: Моя учетная запись
240 241 label_my_projects: Мои проекты
241 242 label_administration: Администрирование
242 243 label_login: Войти
243 244 label_logout: Выйти
244 245 label_help: Помощь
245 246 label_reported_issues: Задачи, по которым предоставлен отчет
246 247 label_assigned_to_me_issues: Мои задачи
247 248 label_last_login: Последнее подключение
248 249 label_last_updates: Последнее обновление
249 250 label_last_updates_plural: %d последние обновления
250 251 label_registered_on: Зарегистрировано на
251 label_activity: Активность
252 label_activity: События
252 253 label_new: Новый
253 254 label_logged_as: Вошел как
254 255 label_environment: Окружение
255 256 label_authentication: Аутентификация
256 257 label_auth_source: Режим аутентификации
257 258 label_auth_source_new: Новый режим аутентификации
258 259 label_auth_source_plural: Режимы аутентификации
259 260 label_subproject_plural: Подпроекты
260 261 label_min_max_length: Min - Максимальная длина
261 262 label_list: Список
262 263 label_date: Дата
263 264 label_integer: Целый
264 265 label_float: Свободный
265 266 label_boolean: Логический
266 267 label_string: Текст
267 268 label_text: Длинный текст
268 269 label_attribute: Атрибут
269 270 label_attribute_plural: атрибуты
270 271 label_download: %d Загружено
271 272 label_download_plural: %d Загрузок
272 273 label_no_data: Нет данных для отображения
273 274 label_change_status: Изменить статус
274 275 label_history: История
275 276 label_attachment: Файл
276 277 label_attachment_new: Новый файл
277 278 label_attachment_delete: Удалить файл
278 279 label_attachment_plural: Файлы
279 280 label_report: Отчет
280 281 label_report_plural: Отчеты
281 282 label_news: Новости
282 283 label_news_new: Добавить новость
283 284 label_news_plural: Новости
284 285 label_news_latest: Последние новости
285 286 label_news_view_all: Посмотреть все новости
286 287 label_change_log: Журнал изменений
287 288 label_settings: Настройки
288 289 label_overview: Просмотр
289 290 label_version: Версия
290 291 label_version_new: Новая версия
291 292 label_version_plural: Версии
292 293 label_confirmation: Подтверждение
293 294 label_export_to: Экспортировать в
294 295 label_read: Чтение...
295 296 label_public_projects: Общие проекты
296 297 label_open_issues: открытый
297 298 label_open_issues_plural: открытые
298 299 label_closed_issues: закрытый
299 300 label_closed_issues_plural: закрытые
300 301 label_total: Всего
301 302 label_permissions: Права доступа
302 303 label_current_status: Текущий статус
303 304 label_new_statuses_allowed: Разрешены новые статусы
304 305 label_all: Все
305 306 label_none: Никому
306 307 label_nobody: Никто
307 308 label_next: Следующий
308 309 label_previous: Предыдущий
309 310 label_used_by: Используется
310 311 label_details: Подробности
311 312 label_add_note: Добавить замечание
312 313 label_per_page: На страницу
313 314 label_calendar: Календарь
314 315 label_months_from: месяцев(ца) с
315 316 label_gantt: Диаграмма Гантта
316 317 label_internal: Внутренний
317 318 label_last_changes: менее %d изменений
318 319 label_change_view_all: Просмотреть все изменения
319 320 label_personalize_page: Персонализировать данную страницу
320 321 label_comment: Комментировать
321 322 label_comment_plural: Комментарии
322 323 label_comment_add: Оставить комментарий
323 324 label_comment_added: Добавленный комментарий
324 325 label_comment_delete: Удалить комментарии
325 326 label_query: Запрос клиента
326 327 label_query_plural: Запросы клиентов
327 328 label_query_new: Новый запрос
328 329 label_filter_add: Добавить фильтр
329 330 label_filter_plural: Фильтры
330 331 label_equals: есть
331 332 label_not_equals: нет
332 333 label_in_less_than: менее чем
333 334 label_in_more_than: более чем
334 335 label_in: в
335 336 label_today: сегодня
336 337 label_this_week: на этой неделе
337 338 label_less_than_ago: менее чем дней(я) назад
338 339 label_more_than_ago: более чем дней(я) назад
339 340 label_ago: дней(я) назад
340 341 label_contains: содержит
341 342 label_not_contains: не содержит
342 343 label_day_plural: дней(я)
343 344 label_repository: Репозиторий
344 345 label_browse: Искать
345 346 label_modification: %d изменение
346 347 label_modification_plural: %d изменений
347 348 label_revision: Версия
348 349 label_revision_plural: Версии
349 350 label_added: добавлено
350 351 label_modified: изменено
351 352 label_deleted: удалено
352 353 label_latest_revision: Последняя версия
353 354 label_latest_revision_plural: Последние версии
354 355 label_view_revisions: Просмотреть версии
355 356 label_max_size: Максимальный размер
356 357 label_on: 'из'
357 358 label_sort_highest: В начало
358 359 label_sort_higher: Вверх
359 360 label_sort_lower: Вниз
360 361 label_sort_lowest: В конец
361 362 label_roadmap: Оперативный план
362 363 label_roadmap_due_in: Вовремя
363 364 label_roadmap_overdue: %s опоздание
364 365 label_roadmap_no_issues: Нет задач для данной версии
365 366 label_search: Поиск
366 367 label_result_plural: Результаты
367 368 label_all_words: Все слова
368 369 label_wiki: Wiki
369 370 label_wiki_edit: Редактирование Wiki
370 371 label_wiki_edit_plural: Редактирования Wiki
371 372 label_wiki_page: Страница Wiki
372 373 label_wiki_page_plural: Страницы Wiki
373 374 label_index_by_title: Индекс по названию
374 375 label_index_by_date: Индекс по дате
375 376 label_current_version: Текущая версия
376 377 label_preview: Предварительный просмотр
377 378 label_feed_plural: Вводы
378 379 label_changes_details: Подробности по всем изменениям
379 380 label_issue_tracking: Ситуация по задачам
380 381 label_spent_time: Затраченное время
381 382 label_f_hour: %.2f час
382 383 label_f_hour_plural: %.2f часов(а)
383 384 label_time_tracking: Учет времени
384 385 label_change_plural: Изменения
385 386 label_statistics: Статистика
386 387 label_commits_per_month: Коммиты на месяц
387 388 label_commits_per_author: Коммиты на пользователя
388 389 label_view_diff: Просмотреть отличия
389 390 label_diff_inline: подключенный
390 391 label_diff_side_by_side: рядом
391 392 label_options: Опции
392 393 label_copy_workflow_from: Скопировать последовательность действий из
393 394 label_permissions_report: Отчет о правах доступа
394 395 label_watched_issues: Просмотренные задачи
395 label_related_issues: Относящиеся задачи
396 label_related_issues: Связанные задачи
396 397 label_applied_status: Применимый статус
397 398 label_loading: Загрузка...
398 399 label_relation_new: Новое отношение
399 label_relation_delete: Удалить отношение
400 label_relates_to: относится к
401 label_duplicates: дубликаты
402 label_blocks: блоки
400 label_relation_delete: Удалить связь
401 label_relates_to: связана с
402 label_duplicates: дублицирует
403 label_blocks: блокирует
403 404 label_blocked_by: заблокировано
404 label_precedes: предыдущий
405 label_precedes: предшествует
405 406 label_follows: следующий
406 407 label_end_to_start: с конца к началу
407 408 label_end_to_end: с конца к концу
408 409 label_start_to_start: с начала к началу
409 410 label_start_to_end: с начала к концу
410 411 label_stay_logged_in: Оставаться в системе
411 412 label_disabled: отключен
412 413 label_show_completed_versions: Показать завершенную версию
413 414 label_me: Я
414 415 label_board: Форум
415 416 label_board_new: Новый форум
416 417 label_board_plural: Форумы
417 418 label_topic_plural: Темы
418 419 label_message_plural: Сообщения
419 420 label_message_last: Последнее сообщение
420 421 label_message_new: Новое сообщение
421 422 label_reply_plural: Ответы
422 423 label_send_information: Отправить пользователю информацию по учетной записи
423 424 label_year: Год
424 425 label_month: Месяц
425 426 label_week: Неделя
426 427 label_date_from: От
427 428 label_date_to: Кому
428 429 label_language_based: На основе языка
429 430 label_sort_by: Сортировать по %s
430 431 label_send_test_email: Послать email для проверки
431 432 label_feeds_access_key_created_on: Ключ доступа RSS создан %s назад
432 433 label_module_plural: Модули
433 434 label_added_time_by: Добавлен %s %s назад
434 435 label_updated_time: Обновлен %s назад
435 436 label_jump_to_a_project: Перейти к проекту...
436 437 label_file_plural: Файлы
437 438 label_changeset_plural: Наборы изменений
438 439 label_default_columns: Колонки по умолчанию
439 440 label_no_change_option: (Нет изменений)
440 441 label_bulk_edit_selected_issues: Редактировать все выбранные вопросы
441 442 label_theme: Тема
442 443 label_default: По умолчанию
443 444 label_search_titles_only: Искать только в названиях
444 445 label_user_mail_option_all: "Для всех событий во всех моих проектах"
445 446 label_user_mail_option_selected: "Для всех событий только в выбранном проекте..."
446 447 label_user_mail_option_none: "Только для того, что я просматриваю или в чем я участвую"
447 label_user_mail_no_self_notified: "I don't want to be notified of changes that I make myself"
448 label_user_mail_no_self_notified: "Не извещать об изменениях которые я сделал сам"
448 449
449 450 button_login: Вход
450 451 button_submit: Принять
451 452 button_save: Сохранить
452 453 button_check_all: Отметить все
453 454 button_uncheck_all: Очистить
454 455 button_delete: Удалить
455 456 button_create: Создать
456 457 button_test: Проверить
457 458 button_edit: Редактировать
458 459 button_add: Добавить
459 460 button_change: Изменить
460 461 button_apply: Применить
461 462 button_clear: Очистить
462 463 button_lock: Закрыть
463 464 button_unlock: Открыть
464 465 button_download: Загрузить
465 466 button_list: Список
466 467 button_view: Просмотреть
467 468 button_move: Переместить
468 469 button_back: Назад
469 470 button_cancel: Отмена
470 471 button_activate: Активировать
471 472 button_sort: Сортировать
472 473 button_log_time: Время в системе
473 474 button_rollback: Вернуться к данной версии
474 475 button_watch: Смотреть
475 476 button_unwatch: Не смотреть
476 477 button_reply: Ответить
477 478 button_archive: Архивировать
478 479 button_unarchive: Разархивировать
479 480 button_reset: Перезапустить
480 481 button_rename: Переименовать
481 482 button_change_password: Изменить пароль
482 483 button_copy: Копировать
483 484
484 485 status_active: Активен
485 486 status_registered: Зарегистрирован
486 487 status_locked: Закрыт
487 488
488 489 text_select_mail_notifications: Выберите действия, на которые будет отсылаться уведомление на электронную почту.
489 490 text_regexp_info: eg. ^[A-Z0-9]+$
490 491 text_min_max_length_info: 0 означает отсутствие запретов
491 492 text_project_destroy_confirmation: Вы настаиваете на удалении данного проекта и всей относящейся к нему информации?
492 text_workflow_edit: Выберите роль и трекер для редактирования последовательности состояний.
493 text_workflow_edit: Выберите роль и трекер для редактирования последовательности состояний
493 494 text_are_you_sure: Подтвердите
494 495 text_journal_changed: параметр изменился с %s на %s
495 496 text_journal_set_to: параметр изменился на %s
496 497 text_journal_deleted: удалено
497 498 text_tip_task_begin_day: дата начала задачи
498 499 text_tip_task_end_day: дата завершения задачи
499 500 text_tip_task_begin_end_day: начало задачи и окончание ее в этот день
500 501 text_project_identifier_info: 'Строчные буквы (a-z), допустимы цифры и дефис.<br />Сохраненный идентификатор не может быть изменен.'
501 502 text_caracters_maximum: %d символов(а) максимум.
502 503 text_length_between: Длина между %d и %d символов.
503 504 text_tracker_no_workflow: Для этого трекера последовательность действий не определена
504 505 text_unallowed_characters: Запрещенные символы
505 506 text_comma_separated: Допустимы несколько значений (разделенные запятой).
506 507 text_issues_ref_in_commit_messages: Сопоставление и изменение статуса задач исходя из текста сообщений
507 508 text_issue_added: О вопросе %s был создает отчет.
508 509 text_issue_updated: Вопрос %s был обновлен.
509 510 text_wiki_destroy_confirmation: Вы уверены, что хотите удалить данную вики и все содержание?
510 511 text_issue_category_destroy_question: Несколько задач (%d) назначено в данную категорию. Что вы хотите предпринять?
511 512 text_issue_category_destroy_assignments: Удалить назначения категории
512 513 text_issue_category_reassign_to: Переназначить задачи для данной категории
513 514 text_user_mail_option: "Для невыбранных проектов, вы будете получать уведомления только о том что просматриваете или в чем участвуете (например, вопросы автором которых вы являетесь или которые вам назначенАы)."
514 515
515 516 default_role_manager: Менеджер
516 517 default_role_developper: Разработчик
517 518 default_role_reporter: Генератор отчетов
518 519 default_tracker_bug: Bug Ошибка
519 520 default_tracker_feature: Характеристика
520 521 default_tracker_support: Поддержка
521 522 default_issue_status_new: Новый
522 523 default_issue_status_assigned: Назначен
523 524 default_issue_status_resolved: Заблокирован
524 525 default_issue_status_feedback: Обратная связь
525 526 default_issue_status_closed: Закрыт
526 527 default_issue_status_rejected: Отказ
527 528 default_doc_category_user: Документация пользователя
528 529 default_doc_category_tech: Техническая документация
529 530 default_priority_low: Низкий
530 531 default_priority_normal: Нормальный
531 532 default_priority_high: Высокий
532 533 default_priority_urgent: Срочный
533 534 default_priority_immediate: Немедленный
534 535 default_activity_design: Проектирование
535 536 default_activity_development: Разработка
536 537
537 538 enumeration_issue_priorities: Приоритеты задач
538 539 enumeration_doc_categories: Категории документов
539 540 enumeration_activities: Действия (учет времени)
540 setting_time_format: Time format
General Comments 0
You need to be logged in to leave comments. Login now