Revision 1298:4f746d8966dd .svn/pristine/04

View differences:

.svn/pristine/04/045b82572747e8f57f122a0ac4102b9d20ea2c04.svn-base
1
# Redmine - project management software
2
# Copyright (C) 2006-2013  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.expand_path('../../test_helper', __FILE__)
19

  
20
class ProjectsControllerTest < ActionController::TestCase
21
  fixtures :projects, :versions, :users, :roles, :members, :member_roles, :issues, :journals, :journal_details,
22
           :trackers, :projects_trackers, :issue_statuses, :enabled_modules, :enumerations, :boards, :messages,
23
           :attachments, :custom_fields, :custom_values, :time_entries
24

  
25
  def setup
26
    @request.session[:user_id] = nil
27
    Setting.default_language = 'en'
28
  end
29

  
30
  def test_index_by_anonymous_should_not_show_private_projects
31
    get :index
32
    assert_response :success
33
    assert_template 'index'
34
    projects = assigns(:projects)
35
    assert_not_nil projects
36
    assert projects.all?(&:is_public?)
37

  
38
    assert_select 'ul' do
39
      assert_select 'li' do
40
        assert_select 'a', :text => 'eCookbook'
41
        assert_select 'ul' do
42
          assert_select 'a', :text => 'Child of private child'
43
        end
44
      end
45
    end
46
    assert_select 'a', :text => /Private child of eCookbook/, :count => 0
47
  end
48

  
49
  def test_index_atom
50
    get :index, :format => 'atom'
51
    assert_response :success
52
    assert_template 'common/feed'
53
    assert_select 'feed>title', :text => 'Redmine: Latest projects'
54
    assert_select 'feed>entry', :count => Project.count(:conditions => Project.visible_condition(User.current))
55
  end
56

  
57
  test "#index by non-admin user with view_time_entries permission should show overall spent time link" do
58
    @request.session[:user_id] = 3
59
    get :index
60
    assert_template 'index'
61
    assert_select 'a[href=?]', '/time_entries'
62
  end
63

  
64
  test "#index by non-admin user without view_time_entries permission should not show overall spent time link" do
65
    Role.find(2).remove_permission! :view_time_entries
66
    Role.non_member.remove_permission! :view_time_entries
67
    Role.anonymous.remove_permission! :view_time_entries
68
    @request.session[:user_id] = 3
69

  
70
    get :index
71
    assert_template 'index'
72
    assert_select 'a[href=?]', '/time_entries', 0
73
  end
74

  
75
  test "#new by admin user should accept get" do
76
    @request.session[:user_id] = 1
77

  
78
    get :new
79
    assert_response :success
80
    assert_template 'new'
81
  end
82

  
83
  test "#new by non-admin user with add_project permission should accept get" do
84
    Role.non_member.add_permission! :add_project
85
    @request.session[:user_id] = 9
86

  
87
    get :new
88
    assert_response :success
89
    assert_template 'new'
90
    assert_select 'select[name=?]', 'project[parent_id]', 0
91
  end
92

  
93
  test "#new by non-admin user with add_subprojects permission should accept get" do
94
    Role.find(1).remove_permission! :add_project
95
    Role.find(1).add_permission! :add_subprojects
96
    @request.session[:user_id] = 2
97

  
98
    get :new, :parent_id => 'ecookbook'
99
    assert_response :success
100
    assert_template 'new'
101

  
102
    assert_select 'select[name=?]', 'project[parent_id]' do
103
      # parent project selected
104
      assert_select 'option[value=1][selected=selected]'
105
      # no empty value
106
      assert_select 'option[value=]', 0
107
    end
108
  end
109

  
110
  test "#create by admin user should create a new project" do
111
    @request.session[:user_id] = 1
112

  
113
    post :create,
114
      :project => {
115
        :name => "blog",
116
        :description => "weblog",
117
        :homepage => 'http://weblog',
118
        :identifier => "blog",
119
        :is_public => 1,
120
        :custom_field_values => { '3' => 'Beta' },
121
        :tracker_ids => ['1', '3'],
122
        # an issue custom field that is not for all project
123
        :issue_custom_field_ids => ['9'],
124
        :enabled_module_names => ['issue_tracking', 'news', 'repository']
125
      }
126
    assert_redirected_to '/projects/blog/settings'
127

  
128
    project = Project.find_by_name('blog')
129
    assert_kind_of Project, project
130
    assert project.active?
131
    assert_equal 'weblog', project.description
132
    assert_equal 'http://weblog', project.homepage
133
    assert_equal true, project.is_public?
134
    assert_nil project.parent
135
    assert_equal 'Beta', project.custom_value_for(3).value
136
    assert_equal [1, 3], project.trackers.map(&:id).sort
137
    assert_equal ['issue_tracking', 'news', 'repository'], project.enabled_module_names.sort
138
    assert project.issue_custom_fields.include?(IssueCustomField.find(9))
139
  end
140

  
141
  test "#create by admin user should create a new subproject" do
142
    @request.session[:user_id] = 1
143

  
144
    assert_difference 'Project.count' do
145
      post :create, :project => { :name => "blog",
146
                               :description => "weblog",
147
                               :identifier => "blog",
148
                               :is_public => 1,
149
                               :custom_field_values => { '3' => 'Beta' },
150
                               :parent_id => 1
151
                              }
152
      assert_redirected_to '/projects/blog/settings'
153
    end
154

  
155
    project = Project.find_by_name('blog')
156
    assert_kind_of Project, project
157
    assert_equal Project.find(1), project.parent
158
  end
159

  
160
  test "#create by admin user should continue" do
161
    @request.session[:user_id] = 1
162

  
163
    assert_difference 'Project.count' do
164
      post :create, :project => {:name => "blog", :identifier => "blog"}, :continue => 'Create and continue'
165
    end
166
    assert_redirected_to '/projects/new'
167
  end
168

  
169
  test "#create by non-admin user with add_project permission should create a new project" do
170
    Role.non_member.add_permission! :add_project
171
    @request.session[:user_id] = 9
172

  
173
    post :create, :project => { :name => "blog",
174
                             :description => "weblog",
175
                             :identifier => "blog",
176
                             :is_public => 1,
177
                             :custom_field_values => { '3' => 'Beta' },
178
                             :tracker_ids => ['1', '3'],
179
                             :enabled_module_names => ['issue_tracking', 'news', 'repository']
180
                            }
181

  
182
    assert_redirected_to '/projects/blog/settings'
183

  
184
    project = Project.find_by_name('blog')
185
    assert_kind_of Project, project
186
    assert_equal 'weblog', project.description
187
    assert_equal true, project.is_public?
188
    assert_equal [1, 3], project.trackers.map(&:id).sort
189
    assert_equal ['issue_tracking', 'news', 'repository'], project.enabled_module_names.sort
190

  
191
    # User should be added as a project member
192
    assert User.find(9).member_of?(project)
193
    assert_equal 1, project.members.size
194
  end
195

  
196
  test "#create by non-admin user with add_project permission should fail with parent_id" do
197
    Role.non_member.add_permission! :add_project
198
    @request.session[:user_id] = 9
199

  
200
    assert_no_difference 'Project.count' do
201
      post :create, :project => { :name => "blog",
202
                               :description => "weblog",
203
                               :identifier => "blog",
204
                               :is_public => 1,
205
                               :custom_field_values => { '3' => 'Beta' },
206
                               :parent_id => 1
207
                              }
208
    end
209
    assert_response :success
210
    project = assigns(:project)
211
    assert_kind_of Project, project
212
    assert_not_nil project.errors[:parent_id]
213
  end
214

  
215
  test "#create by non-admin user with add_subprojects permission should create a project with a parent_id" do
216
    Role.find(1).remove_permission! :add_project
217
    Role.find(1).add_permission! :add_subprojects
218
    @request.session[:user_id] = 2
219

  
220
    post :create, :project => { :name => "blog",
221
                             :description => "weblog",
222
                             :identifier => "blog",
223
                             :is_public => 1,
224
                             :custom_field_values => { '3' => 'Beta' },
225
                             :parent_id => 1
226
                            }
227
    assert_redirected_to '/projects/blog/settings'
228
    project = Project.find_by_name('blog')
229
  end
230

  
231
  test "#create by non-admin user with add_subprojects permission should fail without parent_id" do
232
    Role.find(1).remove_permission! :add_project
233
    Role.find(1).add_permission! :add_subprojects
234
    @request.session[:user_id] = 2
235

  
236
    assert_no_difference 'Project.count' do
237
      post :create, :project => { :name => "blog",
238
                               :description => "weblog",
239
                               :identifier => "blog",
240
                               :is_public => 1,
241
                               :custom_field_values => { '3' => 'Beta' }
242
                              }
243
    end
244
    assert_response :success
245
    project = assigns(:project)
246
    assert_kind_of Project, project
247
    assert_not_nil project.errors[:parent_id]
248
  end
249

  
250
  test "#create by non-admin user with add_subprojects permission should fail with unauthorized parent_id" do
251
    Role.find(1).remove_permission! :add_project
252
    Role.find(1).add_permission! :add_subprojects
253
    @request.session[:user_id] = 2
254

  
255
    assert !User.find(2).member_of?(Project.find(6))
256
    assert_no_difference 'Project.count' do
257
      post :create, :project => { :name => "blog",
258
                               :description => "weblog",
259
                               :identifier => "blog",
260
                               :is_public => 1,
261
                               :custom_field_values => { '3' => 'Beta' },
262
                               :parent_id => 6
263
                              }
264
    end
265
    assert_response :success
266
    project = assigns(:project)
267
    assert_kind_of Project, project
268
    assert_not_nil project.errors[:parent_id]
269
  end
270

  
271
  def test_create_subproject_with_inherit_members_should_inherit_members
272
    Role.find_by_name('Manager').add_permission! :add_subprojects
273
    parent = Project.find(1)
274
    @request.session[:user_id] = 2
275

  
276
    assert_difference 'Project.count' do
277
      post :create, :project => {
278
        :name => 'inherited', :identifier => 'inherited', :parent_id => parent.id, :inherit_members => '1'
279
      }
280
      assert_response 302
281
    end
282

  
283
    project = Project.order('id desc').first
284
    assert_equal 'inherited', project.name
285
    assert_equal parent, project.parent
286
    assert project.memberships.count > 0
287
    assert_equal parent.memberships.count, project.memberships.count
288
  end
289

  
290
  def test_create_should_preserve_modules_on_validation_failure
291
    with_settings :default_projects_modules => ['issue_tracking', 'repository'] do
292
      @request.session[:user_id] = 1
293
      assert_no_difference 'Project.count' do
294
        post :create, :project => {
295
          :name => "blog",
296
          :identifier => "",
297
          :enabled_module_names => %w(issue_tracking news)
298
        }
299
      end
300
      assert_response :success
301
      project = assigns(:project)
302
      assert_equal %w(issue_tracking news), project.enabled_module_names.sort
303
    end
304
  end
305

  
306
  def test_show_by_id
307
    get :show, :id => 1
308
    assert_response :success
309
    assert_template 'show'
310
    assert_not_nil assigns(:project)
311
  end
312

  
313
  def test_show_by_identifier
314
    get :show, :id => 'ecookbook'
315
    assert_response :success
316
    assert_template 'show'
317
    assert_not_nil assigns(:project)
318
    assert_equal Project.find_by_identifier('ecookbook'), assigns(:project)
319

  
320
    assert_select 'li', :text => /Development status/
321
  end
322

  
323
  def test_show_should_not_display_hidden_custom_fields
324
    ProjectCustomField.find_by_name('Development status').update_attribute :visible, false
325
    get :show, :id => 'ecookbook'
326
    assert_response :success
327
    assert_template 'show'
328
    assert_not_nil assigns(:project)
329

  
330
    assert_select 'li', :text => /Development status/, :count => 0
331
  end
332

  
333
  def test_show_should_not_fail_when_custom_values_are_nil
334
    project = Project.find_by_identifier('ecookbook')
335
    project.custom_values.first.update_attribute(:value, nil)
336
    get :show, :id => 'ecookbook'
337
    assert_response :success
338
    assert_template 'show'
339
    assert_not_nil assigns(:project)
340
    assert_equal Project.find_by_identifier('ecookbook'), assigns(:project)
341
  end
342

  
343
  def show_archived_project_should_be_denied
344
    project = Project.find_by_identifier('ecookbook')
345
    project.archive!
346

  
347
    get :show, :id => 'ecookbook'
348
    assert_response 403
349
    assert_nil assigns(:project)
350
    assert_select 'p', :text => /archived/
351
  end
352

  
353
  def test_show_should_not_show_private_subprojects_that_are_not_visible
354
    get :show, :id => 'ecookbook'
355
    assert_response :success
356
    assert_template 'show'
357
    assert_select 'a', :text => /Private child/, :count => 0
358
  end
359

  
360
  def test_show_should_show_private_subprojects_that_are_visible
361
    @request.session[:user_id] = 2 # manager who is a member of the private subproject
362
    get :show, :id => 'ecookbook'
363
    assert_response :success
364
    assert_template 'show'
365
    assert_select 'a', :text => /Private child/
366
  end
367

  
368
  def test_settings
369
    @request.session[:user_id] = 2 # manager
370
    get :settings, :id => 1
371
    assert_response :success
372
    assert_template 'settings'
373
  end
374

  
375
  def test_settings_of_subproject
376
    @request.session[:user_id] = 2
377
    get :settings, :id => 'private-child'
378
    assert_response :success
379
    assert_template 'settings'
380

  
381
    assert_select 'input[type=checkbox][name=?]', 'project[inherit_members]'
382
  end
383

  
384
  def test_settings_should_be_denied_for_member_on_closed_project
385
    Project.find(1).close
386
    @request.session[:user_id] = 2 # manager
387

  
388
    get :settings, :id => 1
389
    assert_response 403
390
  end
391

  
392
  def test_settings_should_be_denied_for_anonymous_on_closed_project
393
    Project.find(1).close
394

  
395
    get :settings, :id => 1
396
    assert_response 302
397
  end
398

  
399
  def test_update
400
    @request.session[:user_id] = 2 # manager
401
    post :update, :id => 1, :project => {:name => 'Test changed name',
402
                                       :issue_custom_field_ids => ['']}
403
    assert_redirected_to '/projects/ecookbook/settings'
404
    project = Project.find(1)
405
    assert_equal 'Test changed name', project.name
406
  end
407

  
408
  def test_update_with_failure
409
    @request.session[:user_id] = 2 # manager
410
    post :update, :id => 1, :project => {:name => ''}
411
    assert_response :success
412
    assert_template 'settings'
413
    assert_error_tag :content => /name can&#x27;t be blank/i
414
  end
415

  
416
  def test_update_should_be_denied_for_member_on_closed_project
417
    Project.find(1).close
418
    @request.session[:user_id] = 2 # manager
419

  
420
    post :update, :id => 1, :project => {:name => 'Closed'}
421
    assert_response 403
422
    assert_equal 'eCookbook', Project.find(1).name
423
  end
424

  
425
  def test_update_should_be_denied_for_anonymous_on_closed_project
426
    Project.find(1).close
427

  
428
    post :update, :id => 1, :project => {:name => 'Closed'}
429
    assert_response 302
430
    assert_equal 'eCookbook', Project.find(1).name
431
  end
432

  
433
  def test_modules
434
    @request.session[:user_id] = 2
435
    Project.find(1).enabled_module_names = ['issue_tracking', 'news']
436

  
437
    post :modules, :id => 1, :enabled_module_names => ['issue_tracking', 'repository', 'documents']
438
    assert_redirected_to '/projects/ecookbook/settings/modules'
439
    assert_equal ['documents', 'issue_tracking', 'repository'], Project.find(1).enabled_module_names.sort
440
  end
441

  
442
  def test_destroy_leaf_project_without_confirmation_should_show_confirmation
443
    @request.session[:user_id] = 1 # admin
444

  
445
    assert_no_difference 'Project.count' do
446
      delete :destroy, :id => 2
447
      assert_response :success
448
      assert_template 'destroy'
449
    end
450
  end
451

  
452
  def test_destroy_without_confirmation_should_show_confirmation_with_subprojects
453
    @request.session[:user_id] = 1 # admin
454

  
455
    assert_no_difference 'Project.count' do
456
      delete :destroy, :id => 1
457
      assert_response :success
458
      assert_template 'destroy'
459
    end
460
    assert_select 'strong',
461
                  :text => ['Private child of eCookbook',
462
                            'Child of private child, eCookbook Subproject 1',
463
                            'eCookbook Subproject 2'].join(', ')
464
  end
465

  
466
  def test_destroy_with_confirmation_should_destroy_the_project_and_subprojects
467
    @request.session[:user_id] = 1 # admin
468

  
469
    assert_difference 'Project.count', -5 do
470
      delete :destroy, :id => 1, :confirm => 1
471
      assert_redirected_to '/admin/projects'
472
    end
473
    assert_nil Project.find_by_id(1)
474
  end
475

  
476
  def test_archive
477
    @request.session[:user_id] = 1 # admin
478
    post :archive, :id => 1
479
    assert_redirected_to '/admin/projects'
480
    assert !Project.find(1).active?
481
  end
482

  
483
  def test_archive_with_failure
484
    @request.session[:user_id] = 1
485
    Project.any_instance.stubs(:archive).returns(false)
486
    post :archive, :id => 1
487
    assert_redirected_to '/admin/projects'
488
    assert_match /project cannot be archived/i, flash[:error]
489
  end
490

  
491
  def test_unarchive
492
    @request.session[:user_id] = 1 # admin
493
    Project.find(1).archive
494
    post :unarchive, :id => 1
495
    assert_redirected_to '/admin/projects'
496
    assert Project.find(1).active?
497
  end
498

  
499
  def test_close
500
    @request.session[:user_id] = 2
501
    post :close, :id => 1
502
    assert_redirected_to '/projects/ecookbook'
503
    assert_equal Project::STATUS_CLOSED, Project.find(1).status
504
  end
505

  
506
  def test_reopen
507
    Project.find(1).close
508
    @request.session[:user_id] = 2
509
    post :reopen, :id => 1
510
    assert_redirected_to '/projects/ecookbook'
511
    assert Project.find(1).active?
512
  end
513

  
514
  def test_project_breadcrumbs_should_be_limited_to_3_ancestors
515
    CustomField.delete_all
516
    parent = nil
517
    6.times do |i|
518
      p = Project.generate_with_parent!(parent)
519
      get :show, :id => p
520
      assert_select '#header h1' do
521
        assert_select 'a', :count => [i, 3].min
522
      end
523

  
524
      parent = p
525
    end
526
  end
527

  
528
  def test_get_copy
529
    @request.session[:user_id] = 1 # admin
530
    get :copy, :id => 1
531
    assert_response :success
532
    assert_template 'copy'
533
    assert assigns(:project)
534
    assert_equal Project.find(1).description, assigns(:project).description
535
    assert_nil assigns(:project).id
536

  
537
    assert_select 'input[name=?][value=?]', 'project[enabled_module_names][]', 'issue_tracking', 1
538
  end
539

  
540
  def test_get_copy_with_invalid_source_should_respond_with_404
541
    @request.session[:user_id] = 1
542
    get :copy, :id => 99
543
    assert_response 404
544
  end
545

  
546
  def test_post_copy_should_copy_requested_items
547
    @request.session[:user_id] = 1 # admin
548
    CustomField.delete_all
549

  
550
    assert_difference 'Project.count' do
551
      post :copy, :id => 1,
552
        :project => {
553
          :name => 'Copy',
554
          :identifier => 'unique-copy',
555
          :tracker_ids => ['1', '2', '3', ''],
556
          :enabled_module_names => %w(issue_tracking time_tracking)
557
        },
558
        :only => %w(issues versions)
559
    end
560
    project = Project.find('unique-copy')
561
    source = Project.find(1)
562
    assert_equal %w(issue_tracking time_tracking), project.enabled_module_names.sort
563

  
564
    assert_equal source.versions.count, project.versions.count, "All versions were not copied"
565
    assert_equal source.issues.count, project.issues.count, "All issues were not copied"
566
    assert_equal 0, project.members.count
567
  end
568

  
569
  def test_post_copy_should_redirect_to_settings_when_successful
570
    @request.session[:user_id] = 1 # admin
571
    post :copy, :id => 1, :project => {:name => 'Copy', :identifier => 'unique-copy'}
572
    assert_response :redirect
573
    assert_redirected_to :controller => 'projects', :action => 'settings', :id => 'unique-copy'
574
  end
575

  
576
  def test_jump_should_redirect_to_active_tab
577
    get :show, :id => 1, :jump => 'issues'
578
    assert_redirected_to '/projects/ecookbook/issues'
579
  end
580

  
581
  def test_jump_should_not_redirect_to_inactive_tab
582
    get :show, :id => 3, :jump => 'documents'
583
    assert_response :success
584
    assert_template 'show'
585
  end
586

  
587
  def test_jump_should_not_redirect_to_unknown_tab
588
    get :show, :id => 3, :jump => 'foobar'
589
    assert_response :success
590
    assert_template 'show'
591
  end
592
end
.svn/pristine/04/0490719dc3185896fb07e210967a75c0f5e40a0a.svn-base
1
# Redmine - project management software
2
# Copyright (C) 2006-2013  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.expand_path('../../test_helper', __FILE__)
19

  
20
class IssueTransactionTest < ActiveSupport::TestCase
21
  fixtures :projects, :users, :members, :member_roles, :roles,
22
           :trackers, :projects_trackers,
23
           :versions,
24
           :issue_statuses, :issue_categories, :issue_relations, :workflows,
25
           :enumerations,
26
           :issues,
27
           :custom_fields, :custom_fields_projects, :custom_fields_trackers, :custom_values,
28
           :time_entries
29

  
30
  self.use_transactional_fixtures = false
31

  
32
  def test_invalid_move_to_another_project
33
    parent1 = Issue.generate!
34
    child =   Issue.generate!(:parent_issue_id => parent1.id)
35
    grandchild = Issue.generate!(:parent_issue_id => child.id, :tracker_id => 2)
36
    Project.find(2).tracker_ids = [1]
37

  
38
    parent1.reload
39
    assert_equal [1, parent1.id, 1, 6], [parent1.project_id, parent1.root_id, parent1.lft, parent1.rgt]
40

  
41
    # child can not be moved to Project 2 because its child is on a disabled tracker
42
    child = Issue.find(child.id)
43
    child.project = Project.find(2)
44
    assert !child.save
45
    child.reload
46
    grandchild.reload
47
    parent1.reload
48

  
49
    # no change
50
    assert_equal [1, parent1.id, 1, 6], [parent1.project_id, parent1.root_id, parent1.lft, parent1.rgt]
51
    assert_equal [1, parent1.id, 2, 5], [child.project_id, child.root_id, child.lft, child.rgt]
52
    assert_equal [1, parent1.id, 3, 4], [grandchild.project_id, grandchild.root_id, grandchild.lft, grandchild.rgt]
53
  end
54
end
.svn/pristine/04/04bafe6e6b402a0f59316ed78a7582dc8951a46f.svn-base
1
<% content_for :header_tags do %>
2
    <%= auto_discovery_link_tag(:atom, {:action => 'index', :format => 'atom', :key => User.current.rss_key}) %>
3
<% end %>
4

  
5
<div class="contextual">
6
    <%= link_to(l(:label_project_new), {:controller => 'projects', :action => 'new'}, :class => 'icon icon-add') + ' |' if User.current.allowed_to?(:add_project, nil, :global => true) %>
7
    <%= link_to(l(:label_issue_view_all), { :controller => 'issues' }) + ' |' if User.current.allowed_to?(:view_issues, nil, :global => true) %>
8
    <%= link_to(l(:label_overall_spent_time), { :controller => 'time_entries' }) + ' |' if User.current.allowed_to?(:view_time_entries, nil, :global => true) %>
9
    <%= link_to l(:label_overall_activity), { :controller => 'activities', :action => 'index' }%>
10
</div>
11

  
12
<h2><%=l(:label_project_plural)%></h2>
13

  
14
<%= render_project_hierarchy(@projects)%>
15

  
16
<% if User.current.logged? %>
17
<p style="text-align:right;">
18
<span class="my-project"><%= l(:label_my_projects) %></span>
19
</p>
20
<% end %>
21

  
22
<% other_formats_links do |f| %>
23
  <%= f.link_to 'Atom', :url => {:key => User.current.rss_key} %>
24
<% end %>
25

  
26
<% html_title(l(:label_project_plural)) -%>
.svn/pristine/04/04bd6b422ff086dcb557f90d7ba79b9553b3ae87.svn-base
1
# encoding: utf-8
2
module CodeRay
3
module Scanners
4
  
5
  class Ruby
6
    
7
    class StringState < Struct.new :type, :interpreted, :delim, :heredoc,
8
      :opening_paren, :paren_depth, :pattern, :next_state  # :nodoc: all
9
      
10
      CLOSING_PAREN = Hash[ *%w[
11
        ( )
12
        [ ]
13
        < >
14
        { }
15
      ] ].each { |k,v| k.freeze; v.freeze }  # debug, if I try to change it with <<
16
      
17
      STRING_PATTERN = Hash.new do |h, k|
18
        delim, interpreted = *k
19
        # delim = delim.dup  # workaround for old Ruby
20
        delim_pattern = Regexp.escape(delim)
21
        if closing_paren = CLOSING_PAREN[delim]
22
          delim_pattern << Regexp.escape(closing_paren)
23
        end
24
        delim_pattern << '\\\\' unless delim == '\\'
25
        
26
        # special_escapes =
27
        #   case interpreted
28
        #   when :regexp_symbols
29
        #     '| [|?*+(){}\[\].^$]'
30
        #   end
31
        
32
        h[k] =
33
          if interpreted && delim != '#'
34
            / (?= [#{delim_pattern}] | \# [{$@] ) /mx
35
          else
36
            / (?= [#{delim_pattern}] ) /mx
37
          end
38
      end
39
      
40
      def initialize kind, interpreted, delim, heredoc = false
41
        if heredoc
42
          pattern = heredoc_pattern delim, interpreted, heredoc == :indented
43
          delim = nil
44
        else
45
          pattern = STRING_PATTERN[ [delim, interpreted] ]
46
          if closing_paren = CLOSING_PAREN[delim]
47
            opening_paren = delim
48
            delim = closing_paren
49
            paren_depth = 1
50
          end
51
        end
52
        super kind, interpreted, delim, heredoc, opening_paren, paren_depth, pattern, :initial
53
      end
54
      
55
      def heredoc_pattern delim, interpreted, indented
56
        # delim = delim.dup  # workaround for old Ruby
57
        delim_pattern = Regexp.escape(delim)
58
        delim_pattern = / (?:\A|\n) #{ '(?>[ \t]*)' if indented } #{ Regexp.new delim_pattern } $ /x
59
        if interpreted
60
          / (?= #{delim_pattern}() | \\ | \# [{$@] ) /mx  # $1 set == end of heredoc
61
        else
62
          / (?= #{delim_pattern}() | \\ ) /mx
63
        end
64
      end
65
      
66
    end
67
    
68
  end
69
  
70
end
71
end
.svn/pristine/04/04dcbe1c1303811a184d8f2171e27c9cdde0c767.svn-base
1
fa:
2
  # Text direction: Left-to-Right (ltr) or Right-to-Left (rtl)
3
  direction: rtl
4
  date:
5
    formats:
6
      # Use the strftime parameters for formats.
7
      # When no format has been given, it uses default.
8
      # You can provide other formats here if you like!
9
      default: "%Y/%m/%d"
10
      short: "%b %d"
11
      long: "%B %d, %Y"
12

  
13
    day_names: [یک‌شنبه, دوشنبه, سه‌شنبه, چهارشنبه, پنج‌شنبه, آدینه, شنبه]
14
    abbr_day_names: [یک, دو, سه, چهار, پنج, آدینه, شنبه]
15

  
16
    # Don't forget the nil at the beginning; there's no such thing as a 0th month
17
    month_names: [~, ژانویه, فوریه, مارس, آوریل, مه, ژوئن, ژوئیه, اوت, سپتامبر, اکتبر, نوامبر, دسامبر]
18
    abbr_month_names: [~, ژان, فور, مار, آور, مه, ژوئن, ژوئیه, اوت, سپت, اکت, نوا, دسا]
19
    # Used in date_select and datime_select.
20
    order:
21
      - :year
22
      - :month
23
      - :day
24

  
25
  time:
26
    formats:
27
      default: "%Y/%m/%d - %H:%M"
28
      time: "%H:%M"
29
      short: "%d %b %H:%M"
30
      long: "%d %B %Y ساعت %H:%M"
31
    am: "صبح"
32
    pm: "عصر"
33

  
34
  datetime:
35
    distance_in_words:
36
      half_a_minute: "نیم دقیقه"
37
      less_than_x_seconds:
38
        one:   "کمتر از 1 ثانیه"
39
        other: "کمتر از %{count} ثانیه"
40
      x_seconds:
41
        one:   "1 ثانیه"
42
        other: "%{count} ثانیه"
43
      less_than_x_minutes:
44
        one:   "کمتر از 1 دقیقه"
45
        other: "کمتر از %{count} دقیقه"
46
      x_minutes:
47
        one:   "1 دقیقه"
48
        other: "%{count} دقیقه"
49
      about_x_hours:
50
        one:   "نزدیک 1 ساعت"
51
        other: "نزدیک %{count} ساعت"
52
      x_hours:
53
        one:   "1 ساعت"
54
        other: "%{count} ساعت"
55
      x_days:
56
        one:   "1 روز"
57
        other: "%{count} روز"
58
      about_x_months:
59
        one:   "نزدیک 1 ماه"
60
        other: "نزدیک %{count} ماه"
61
      x_months:
62
        one:   "1 ماه"
63
        other: "%{count} ماه"
64
      about_x_years:
65
        one:   "نزدیک 1 سال"
66
        other: "نزدیک %{count} سال"
67
      over_x_years:
68
        one:   "بیش از 1 سال"
69
        other: "بیش از %{count} سال"
70
      almost_x_years:
71
        one:   "نزدیک 1 سال"
72
        other: "نزدیک %{count} سال"
73

  
74
  number:
75
    # Default format for numbers
76
    format:
77
      separator: "٫"
78
      delimiter: ""
79
      precision: 3
80
    human:
81
      format:
82
        delimiter: ""
83
        precision: 3
84
      storage_units:
85
        format: "%n %u"
86
        units:
87
          byte:
88
            one: "بایت"
89
            other: "بایت"
90
          kb: "کیلوبایت"
91
          mb: "مگابایت"
92
          gb: "گیگابایت"
93
          tb: "ترابایت"
94

  
95
# Used in array.to_sentence.
96
  support:
97
    array:
98
      sentence_connector: "و"
99
      skip_last_comma: false
100

  
101
  activerecord:
102
    errors:
103
      template:
104
        header:
105
          one:    "1 ایراد از ذخیره سازی این %{model} جلوگیری کرد"
106
          other:  "%{count} ایراد از ذخیره سازی این %{model} جلوگیری کرد"
107
      messages:
108
        inclusion: "در فهرست نیامده است"
109
        exclusion: "رزرو شده است"
110
        invalid: "نادرست است"
111
        confirmation: "با بررسی سازگاری ندارد"
112
        accepted: "باید پذیرفته شود"
113
        empty: "نمی‌تواند تهی باشد"
114
        blank: "نمی‌تواند تهی باشد"
115
        too_long: "خیلی بلند است (بیشترین اندازه %{count} نویسه است)"
116
        too_short: "خیلی کوتاه است (کمترین اندازه %{count} نویسه است)"
117
        wrong_length: "اندازه نادرست است (باید %{count} نویسه باشد)"
118
        taken: "پیش از این گرفته شده است"
119
        not_a_number: "شماره درستی نیست"
120
        not_a_date: "تاریخ درستی نیست"
121
        greater_than: "باید بزرگتر از %{count} باشد"
122
        greater_than_or_equal_to: "باید بزرگتر از یا برابر با %{count} باشد"
123
        equal_to: "باید برابر با %{count} باشد"
124
        less_than: "باید کمتر از %{count} باشد"
125
        less_than_or_equal_to: "باید کمتر از یا برابر با %{count} باشد"
126
        odd: "باید فرد باشد"
127
        even: "باید زوج باشد"
128
        greater_than_start_date: "باید از تاریخ آغاز بزرگتر باشد"
129
        not_same_project: "به همان پروژه وابسته نیست"
130
        circular_dependency: "این وابستگی یک وابستگی دایره وار خواهد ساخت"
131
        cant_link_an_issue_with_a_descendant: "یک پیامد نمی‌تواند به یکی از زیر کارهایش پیوند بخورد"
132

  
133
  actionview_instancetag_blank_option: گزینش کنید
134

  
135
  general_text_No: 'خیر'
136
  general_text_Yes: 'آری'
137
  general_text_no: 'خیر'
138
  general_text_yes: 'آری'
139
  general_lang_name: 'Persian (پارسی)'
140
  general_csv_separator: ','
141
  general_csv_decimal_separator: '.'
142
  general_csv_encoding: UTF-8
143
  general_pdf_encoding: UTF-8
144
  general_first_day_of_week: '6'
145

  
146
  notice_account_updated: حساب شما بروز شد.
147
  notice_account_invalid_creditentials: نام کاربری یا گذرواژه نادرست است
148
  notice_account_password_updated: گذرواژه بروز شد
149
  notice_account_wrong_password: گذرواژه نادرست است
150
  notice_account_register_done: حساب ساخته شد. برای فعال نمودن آن، روی پیوندی که به شما ایمیل شده کلیک کنید.
151
  notice_account_unknown_email: کاربر شناخته نشد.
152
  notice_can_t_change_password:  این حساب یک روش شناسایی بیرونی را به کار گرفته است. گذرواژه را نمی‌توان جایگزین کرد.
153
  notice_account_lost_email_sent: یک ایمیل با راهنمایی درباره گزینش گذرواژه تازه برای شما فرستاده شد.
154
  notice_account_activated: حساب شما فعال شده است. اکنون می‌توانید وارد شوید.
155
  notice_successful_create: با موفقیت ساخته شد.
156
  notice_successful_update: با موفقیت بروز شد.
157
  notice_successful_delete: با موفقیت برداشته شد.
158
  notice_successful_connection: با موفقیت متصل شد.
159
  notice_file_not_found: برگه درخواستی شما در دسترس نیست یا پاک شده است.
160
  notice_locking_conflict: داده‌ها را کاربر دیگری بروز کرده است.
161
  notice_not_authorized: شما به این برگه دسترسی ندارید.
162
  notice_not_authorized_archived_project: پروژه درخواستی شما بایگانی شده است.
163
  notice_email_sent: "یک ایمیل به %{value} فرستاده شد."
164
  notice_email_error: "یک ایراد در فرستادن ایمیل پیش آمد (%{value})."
165
  notice_feeds_access_key_reseted: کلید دسترسی RSS شما بازنشانی شد.
166
  notice_api_access_key_reseted: کلید دسترسی API شما بازنشانی شد.
167
  notice_failed_to_save_issues: "ذخیره سازی %{count} پیامد از %{total} پیامد گزینش شده شکست خورد: %{ids}."
168
  notice_failed_to_save_members: "ذخیره سازی اعضا شکست خورد: %{errors}."
169
  notice_no_issue_selected: "هیچ پیامدی برگزیده نشده است! پیامدهایی که می‌خواهید ویرایش کنید را برگزینید."
170
  notice_account_pending: "حساب شما ساخته شد و اکنون چشم به راه روادید سرپرست است."
171
  notice_default_data_loaded: پیکربندی پیش‌گزیده با موفقیت بار شد.
172
  notice_unable_delete_version: نگارش را نمی‌توان پاک کرد.
173
  notice_unable_delete_time_entry: زمان گزارش شده را نمی‌توان پاک کرد.
174
  notice_issue_done_ratios_updated: اندازه انجام شده پیامد بروز شد.
175
  notice_gantt_chart_truncated: "نمودار بریده شد چون از بیشترین شماری که می‌توان نشان داد بزگتر است (%{max})."
176

  
177
  error_can_t_load_default_data: "پیکربندی پیش‌گزیده نمی‌تواند بار شود: %{value}"
178
  error_scm_not_found: "بخش یا نگارش در انباره پیدا نشد."
179
  error_scm_command_failed: "ایرادی در دسترسی به انباره پیش آمد: %{value}"
180
  error_scm_annotate: "بخش پیدا نشد یا نمی‌توان برای آن یادداشت نوشت."
181
  error_issue_not_found_in_project: 'پیامد پیدا نشد یا به این پروژه وابسته نیست.'
182
  error_no_tracker_in_project: 'هیچ پیگردی به این پروژه پیوسته نشده است. پیکربندی پروژه را بررسی کنید.'
183
  error_no_default_issue_status: 'هیچ وضعیت پیامد پیش‌گزیده‌ای مشخص نشده است. پیکربندی را بررسی کنید (به «پیکربندی -> وضعیت‌های پیامد» بروید).'
184
  error_can_not_delete_custom_field: فیلد سفارشی را نمی‌توان پاک کرد.
185
  error_can_not_delete_tracker: "این پیگرد دارای پیامد است و نمی‌توان آن را پاک کرد."
186
  error_can_not_remove_role: "این نقش به کار گرفته شده است و نمی‌توان آن را پاک کرد."
187
  error_can_not_reopen_issue_on_closed_version: 'یک پیامد که به یک نگارش بسته شده وابسته است را نمی‌توان باز کرد.'
188
  error_can_not_archive_project: این پروژه را نمی‌توان بایگانی کرد.
189
  error_issue_done_ratios_not_updated: "اندازه انجام شده پیامد بروز نشد."
190
  error_workflow_copy_source: 'یک پیگرد یا نقش منبع را برگزینید.'
191
  error_workflow_copy_target: 'پیگردها یا نقش‌های مقصد را برگزینید.'
192
  error_unable_delete_issue_status: 'وضعیت پیامد را نمی‌توان پاک کرد.'
193
  error_unable_to_connect: "نمی‌توان متصل شد (%{value})"
194
  warning_attachments_not_saved: "%{count} پرونده ذخیره نشد."
195

  
196
  mail_subject_lost_password: "گذرواژه حساب %{value} شما"
197
  mail_body_lost_password: 'برای جایگزینی گذرواژه خود، بر روی پیوند زیر کلیک کنید:'
198
  mail_subject_register: "فعالسازی حساب %{value} شما"
199
  mail_body_register: 'برای فعالسازی حساب خود، بر روی پیوند زیر کلیک کنید:'
200
  mail_body_account_information_external: "شما می‌توانید حساب %{value} خود را برای ورود به کار برید."
201
  mail_body_account_information: داده‌های حساب شما
202
  mail_subject_account_activation_request: "درخواست فعالسازی حساب %{value}"
203
  mail_body_account_activation_request: "یک کاربر تازه (%{value}) نامنویسی کرده است. این حساب چشم به راه روادید شماست:"
204
  mail_subject_reminder: "زمان رسیدگی به %{count} پیامد در %{days} روز آینده سر می‌رسد"
205
  mail_body_reminder: "زمان رسیدگی به %{count} پیامد که به شما واگذار شده است، در %{days} روز آینده سر می‌رسد:"
206
  mail_subject_wiki_content_added: "برگه ویکی «%{id}» افزوده شد"
207
  mail_body_wiki_content_added: "برگه ویکی «%{id}» به دست %{author} افزوده شد."
208
  mail_subject_wiki_content_updated: "برگه ویکی «%{id}» بروز شد"
209
  mail_body_wiki_content_updated: "برگه ویکی «%{id}» به دست %{author} بروز شد."
210

  
211

  
212
  field_name: نام
213
  field_description: یادداشت
214
  field_summary: خلاصه
215
  field_is_required: الزامی
216
  field_firstname: نام کوچک
217
  field_lastname: نام خانوادگی
218
  field_mail: ایمیل
219
  field_filename: پرونده
220
  field_filesize: اندازه
221
  field_downloads: دریافت‌ها
222
  field_author: نویسنده
223
  field_created_on: ساخته شده در
224
  field_updated_on: بروز شده در
225
  field_field_format: قالب
226
  field_is_for_all: برای همه پروژه‌ها
227
  field_possible_values: مقادیر ممکن
228
  field_regexp: عبارت منظم
229
  field_min_length: کمترین اندازه
230
  field_max_length: بیشترین اندازه
231
  field_value: مقدار
232
  field_category: دسته
233
  field_title: عنوان
234
  field_project: پروژه
235
  field_issue: پیامد
236
  field_status: وضعیت
237
  field_notes: یادداشت
238
  field_is_closed: پیامد بسته شده
239
  field_is_default: مقدار پیش‌گزیده
240
  field_tracker: پیگرد
241
  field_subject: موضوع
242
  field_due_date: زمان سررسید
243
  field_assigned_to: واگذار شده به
244
  field_priority: برتری
245
  field_fixed_version: نگارش هدف
246
  field_user: کاربر
247
  field_principal: دستور دهنده
248
  field_role: نقش
249
  field_homepage: برگه خانه
250
  field_is_public: همگانی
251
  field_parent: پروژه پدر
252
  field_is_in_roadmap: این پیامدها در چشم‌انداز نشان داده شوند
253
  field_login: ورود
254
  field_mail_notification: آگاه سازی‌های ایمیلی
255
  field_admin: سرپرست
256
  field_last_login_on: آخرین ورود
257
  field_language: زبان
258
  field_effective_date: تاریخ
259
  field_password: گذرواژه
260
  field_new_password: گذرواژه تازه
261
  field_password_confirmation: بررسی گذرواژه
262
  field_version: نگارش
263
  field_type: گونه
264
  field_host: میزبان
265
  field_port: درگاه
266
  field_account: حساب
267
  field_base_dn: DN پایه
268
  field_attr_login: نشانه ورود
269
  field_attr_firstname: نشانه نام کوچک
270
  field_attr_lastname: نشانه نام خانوادگی
271
  field_attr_mail: نشانه ایمیل
272
  field_onthefly: ساخت کاربر بیدرنگ
273
  field_start_date: تاریخ آغاز
274
  field_done_ratio: ٪ انجام شده
275
  field_auth_source: روش شناسایی
276
  field_hide_mail: ایمیل من پنهان شود
277
  field_comments: دیدگاه
278
  field_url: نشانی
279
  field_start_page: برگه آغاز
280
  field_subproject: زیر پروژه
281
  field_hours: ساعت‌
282
  field_activity: گزارش
283
  field_spent_on: در تاریخ
284
  field_identifier: شناسه
285
  field_is_filter: پالایش پذیر
286
  field_issue_to: پیامد وابسته
287
  field_delay: دیرکرد
288
  field_assignable: پیامدها می‌توانند به این نقش واگذار شوند
289
  field_redirect_existing_links: پیوندهای پیشین  به پیوند تازه راهنمایی شوند
290
  field_estimated_hours: زمان برآورد شده
291
  field_column_names: ستون‌ها
292
  field_time_entries: زمان نوشتن
293
  field_time_zone: پهنه زمانی
294
  field_searchable: جستجو پذیر
295
  field_default_value: مقدار پیش‌گزیده
296
  field_comments_sorting: نمایش دیدگاه‌ها
297
  field_parent_title: برگه پدر
298
  field_editable: ویرایش پذیر
299
  field_watcher: دیده‌بان
300
  field_identity_url: نشانی OpenID
301
  field_content: محتوا
302
  field_group_by: دسته بندی با
303
  field_sharing: اشتراک گذاری
304
  field_parent_issue: کار پدر
305
  field_member_of_group: "دسته واگذار شونده"
306
  field_assigned_to_role: "نقش واگذار شونده"
307
  field_text: فیلد متنی
308
  field_visible: آشکار
309

  
310
  setting_app_title: نام برنامه
311
  setting_app_subtitle: زیرنام برنامه
312
  setting_welcome_text: نوشتار خوش‌آمد گویی
313
  setting_default_language: زبان پیش‌گزیده
314
  setting_login_required: الزامی بودن ورود
315
  setting_self_registration: خود نام نویسی
316
  setting_attachment_max_size: بیشترین اندازه پیوست
317
  setting_issues_export_limit: کرانه صدور پییامدها
318
  setting_mail_from: نشانی فرستنده ایمیل
319
  setting_bcc_recipients: گیرندگان ایمیل دیده نشوند (bcc)
320
  setting_plain_text_mail: ایمیل نوشته ساده (بدون HTML)
321
  setting_host_name: نام میزبان و نشانی
322
  setting_text_formatting: قالب بندی نوشته
323
  setting_wiki_compression: فشرده‌سازی پیشینه ویکی
324
  setting_feeds_limit: کرانه محتوای خوراک
325
  setting_default_projects_public: حالت پیش‌گزیده پروژه‌های تازه، همگانی است
326
  setting_autofetch_changesets: دریافت خودکار تغییرات
327
  setting_sys_api_enabled: فعال سازی وب سرویس برای سرپرستی انباره
328
  setting_commit_ref_keywords: کلیدواژه‌های نشانه
329
  setting_commit_fix_keywords: کلیدواژه‌های انجام
330
  setting_autologin: ورود خودکار
331
  setting_date_format: قالب تاریخ
332
  setting_time_format: قالب زمان
333
  setting_cross_project_issue_relations: توانایی وابستگی میان پروژه‌ای پیامدها
334
  setting_issue_list_default_columns: ستون‌های پیش‌گزیده نمایش داده شده در فهرست پیامدها
335
  setting_emails_header: سرنویس ایمیل‌ها
336
  setting_emails_footer: پانویس ایمیل‌ها
337
  setting_protocol: پیوندنامه
338
  setting_per_page_options: گزینه‌های اندازه داده‌های هر برگ
339
  setting_user_format: قالب نمایشی کاربران
340
  setting_activity_days_default: روزهای نمایش داده شده در گزارش پروژه
341
  setting_display_subprojects_issues: پیش‌گزیده نمایش پیامدهای زیرپروژه در پروژه پدر
342
  setting_enabled_scm: فعالسازی SCM
343
  setting_mail_handler_body_delimiters: "بریدن ایمیل‌ها پس از یکی از این ردیف‌ها"
344
  setting_mail_handler_api_enabled: فعالسازی وب سرویس برای ایمیل‌های آمده
345
  setting_mail_handler_api_key: کلید API
346
  setting_sequential_project_identifiers: ساخت پشت سر هم شناسه پروژه
347
  setting_gravatar_enabled: کاربرد Gravatar برای عکس کاربر
348
  setting_gravatar_default: عکس Gravatar پیش‌گزیده
349
  setting_diff_max_lines_displayed: بیشترین اندازه ردیف‌های تفاوت نشان داده شده
350
  setting_file_max_size_displayed: بیشترین اندازه پرونده‌های نمایش داده شده درون خطی
351
  setting_repository_log_display_limit: بیشترین شمار نگارش‌های نمایش داده شده در گزارش پرونده
352
  setting_openid: پذیرش ورود و نام نویسی با OpenID
353
  setting_password_min_length: کمترین اندازه گذرواژه
354
  setting_new_project_user_role_id: نقش داده شده به کاربری که سرپرست نیست و پروژه می‌سازد
355
  setting_default_projects_modules: پیمانه‌های پیش‌گزیده فعال برای پروژه‌های تازه
356
  setting_issue_done_ratio: برآورد اندازه انجام شده پیامد با
357
  setting_issue_done_ratio_issue_field: کاربرد فیلد پیامد
358
  setting_issue_done_ratio_issue_status: کاربرد وضعیت پیامد
359
  setting_start_of_week: آغاز گاهشمار از
360
  setting_rest_api_enabled: فعالسازی وب سرویس‌های REST
361
  setting_cache_formatted_text: نهان سازی نوشته‌های قالب بندی شده
362
  setting_default_notification_option: آگاه سازی پیش‌گزیده
363
  setting_commit_logtime_enabled: فعالسازی زمان گذاشته شده
364
  setting_commit_logtime_activity_id: کار زمان گذاشته شده
365
  setting_gantt_items_limit: بیشترین شمار بخش‌های نمایش داده شده در نمودار گانت
366

  
367
  permission_add_project: ساخت پروژه
368
  permission_add_subprojects: ساخت زیرپروژه
369
  permission_edit_project: ویرایش پروژه
370
  permission_select_project_modules: گزینش پیمانه‌های پروژه
371
  permission_manage_members: سرپرستی اعضا
372
  permission_manage_project_activities: سرپرستی کارهای پروژه
373
  permission_manage_versions: سرپرستی نگارش‌ها
374
  permission_manage_categories: سرپرستی دسته‌های پیامد
375
  permission_view_issues: دیدن پیامدها
376
  permission_add_issues: افزودن پیامدها
377
  permission_edit_issues: ویرایش پیامدها
378
  permission_manage_issue_relations: سرپرستی وابستگی پیامدها
379
  permission_add_issue_notes: افزودن یادداشت
380
  permission_edit_issue_notes: ویرایش یادداشت
381
  permission_edit_own_issue_notes: ویرایش یادداشت خود
382
  permission_move_issues: جابجایی پیامدها
383
  permission_delete_issues: پاک کردن پیامدها
384
  permission_manage_public_queries: سرپرستی پرس‌وجوهای همگانی
385
  permission_save_queries: ذخیره سازی پرس‌وجوها
386
  permission_view_gantt: دیدن نمودار گانت
387
  permission_view_calendar: دیدن گاهشمار
388
  permission_view_issue_watchers: دیدن فهرست دیده‌بان‌ها
389
  permission_add_issue_watchers: افزودن دیده‌بان‌ها
390
  permission_delete_issue_watchers: پاک کردن دیده‌بان‌ها
391
  permission_log_time: نوشتن زمان گذاشته شده
392
  permission_view_time_entries: دیدن زمان گذاشته شده
393
  permission_edit_time_entries: ویرایش زمان گذاشته شده
394
  permission_edit_own_time_entries: ویرایش زمان گذاشته شده خود
395
  permission_manage_news: سرپرستی رویدادها
396
  permission_comment_news: گذاشتن دیدگاه روی رویدادها
397
  permission_view_documents: دیدن نوشتارها
398
  permission_manage_files: سرپرستی پرونده‌ها
399
  permission_view_files: دیدن پرونده‌ها
400
  permission_manage_wiki: سرپرستی ویکی
401
  permission_rename_wiki_pages: نامگذاری برگه ویکی
402
  permission_delete_wiki_pages: پاک کردن برگه ویکی
403
  permission_view_wiki_pages: دیدن ویکی
404
  permission_view_wiki_edits: دیدن پیشینه ویکی
405
  permission_edit_wiki_pages: ویرایش برگه‌های ویکی
406
  permission_delete_wiki_pages_attachments: پاک کردن پیوست‌های برگه ویکی
407
  permission_protect_wiki_pages: نگه‌داری برگه‌های ویکی
408
  permission_manage_repository: سرپرستی انباره
409
  permission_browse_repository: چریدن در انباره
410
  permission_view_changesets: دیدن تغییرات
411
  permission_commit_access: دسترسی تغییر انباره
412
  permission_manage_boards: سرپرستی انجمن‌ها
413
  permission_view_messages: دیدن پیام‌ها
414
  permission_add_messages: فرستادن پیام‌ها
415
  permission_edit_messages: ویرایش پیام‌ها
416
  permission_edit_own_messages: ویرایش پیام خود
417
  permission_delete_messages: پاک کردن پیام‌ها
418
  permission_delete_own_messages: پاک کردن پیام خود
419
  permission_export_wiki_pages: صدور برگه‌های ویکی
420
  permission_manage_subtasks: سرپرستی زیرکارها
421

  
422
  project_module_issue_tracking: پیگیری پیامدها
423
  project_module_time_tracking: پیگیری زمان
424
  project_module_news: رویدادها
425
  project_module_documents: نوشتارها
426
  project_module_files: پرونده‌ها
427
  project_module_wiki: ویکی
428
  project_module_repository: انباره
429
  project_module_boards: انجمن‌ها
430
  project_module_calendar: گاهشمار
431
  project_module_gantt: گانت
432

  
433
  label_user: کاربر
434
  label_user_plural: کاربر
435
  label_user_new: کاربر تازه
436
  label_user_anonymous: ناشناس
437
  label_project: پروژه
438
  label_project_new: پروژه تازه
439
  label_project_plural: پروژه
440
  label_x_projects:
441
    zero:  بدون پروژه
442
    one:   "1 پروژه"
443
    other: "%{count} پروژه"
444
  label_project_all: همه پروژه‌ها
445
  label_project_latest: آخرین پروژه‌ها
446
  label_issue: پیامد
447
  label_issue_new: پیامد تازه
448
  label_issue_plural: پیامد
449
  label_issue_view_all: دیدن همه پیامدها
450
  label_issues_by: "دسته‌بندی پیامدها با %{value}"
451
  label_issue_added: پیامد افزوده شد
452
  label_issue_updated: پیامد بروز شد
453
  label_document: نوشتار
454
  label_document_new: نوشتار تازه
455
  label_document_plural: نوشتار
456
  label_document_added: نوشتار افزوده شد
457
  label_role: نقش
458
  label_role_plural: نقش
459
  label_role_new: نقش تازه
460
  label_role_and_permissions: نقش‌ها و پروانه‌ها
461
  label_member: عضو
462
  label_member_new: عضو تازه
463
  label_member_plural: عضو
464
  label_tracker: پیگرد
465
  label_tracker_plural: پیگرد
466
  label_tracker_new: پیگرد تازه
467
  label_workflow: گردش کار
468
  label_issue_status: وضعیت پیامد
469
  label_issue_status_plural: وضعیت پیامد
470
  label_issue_status_new: وضعیت تازه
471
  label_issue_category: دسته پیامد
472
  label_issue_category_plural: دسته پیامد
473
  label_issue_category_new: دسته تازه
474
  label_custom_field: فیلد سفارشی
475
  label_custom_field_plural: فیلد سفارشی
476
  label_custom_field_new: فیلد سفارشی تازه
477
  label_enumerations: برشمردنی‌ها
478
  label_enumeration_new: مقدار تازه
479
  label_information: داده
480
  label_information_plural: داده
481
  label_please_login: وارد شوید
482
  label_register: نام نویسی کنید
483
  label_login_with_open_id_option: یا با OpenID وارد شوید
484
  label_password_lost: بازیافت گذرواژه
485
  label_home: سرآغاز
486
  label_my_page: برگه من
487
  label_my_account: حساب من
488
  label_my_projects: پروژه‌های من
489
  label_my_page_block: بخش برگه من
490
  label_administration: سرپرستی
491
  label_login: ورود
492
  label_logout: خروج
493
  label_help: راهنما
494
  label_reported_issues: پیامدهای گزارش شده
495
  label_assigned_to_me_issues: پیامدهای واگذار شده به من
496
  label_last_login: آخرین ورود
497
  label_registered_on: نام نویسی شده در
498
  label_activity: گزارش
499
  label_overall_activity: گزارش روی هم رفته
500
  label_user_activity: "گزارش %{value}"
501
  label_new: تازه
502
  label_logged_as: "نام کاربری:"
503
  label_environment: محیط
504
  label_authentication: شناسایی
505
  label_auth_source: روش شناسایی
506
  label_auth_source_new: روش شناسایی تازه
507
  label_auth_source_plural: روش شناسایی
508
  label_subproject_plural: زیرپروژه
509
  label_subproject_new: زیرپروژه تازه
510
  label_and_its_subprojects: "%{value} و زیرپروژه‌هایش"
511
  label_min_max_length: کمترین و بیشترین اندازه
512
  label_list: فهرست
513
  label_date: تاریخ
514
  label_integer: شماره درست
515
  label_float: شماره شناور
516
  label_boolean: درست/نادرست
517
  label_string: نوشته
518
  label_text: نوشته بلند
519
  label_attribute: نشانه
520
  label_attribute_plural: نشانه
521
  label_no_data: هیچ داده‌ای برای نمایش نیست
522
  label_change_status: جایگزینی وضعیت
523
  label_history: پیشینه
524
  label_attachment: پرونده
525
  label_attachment_new: پرونده تازه
526
  label_attachment_delete: پاک کردن پرونده
527
  label_attachment_plural: پرونده
528
  label_file_added: پرونده افزوده شد
529
  label_report: گزارش
530
  label_report_plural: گزارش
531
  label_news: رویداد
532
  label_news_new: افزودن رویداد
533
  label_news_plural: رویداد
534
  label_news_latest: آخرین رویدادها
535
  label_news_view_all: دیدن همه رویدادها
536
  label_news_added: رویداد افزوده شد
537
  label_settings: پیکربندی
538
  label_overview: در یک نگاه
539
  label_version: نگارش
540
  label_version_new: نگارش تازه
541
  label_version_plural: نگارش
542
  label_close_versions: بستن نگارش‌های انجام شده
543
  label_confirmation: بررسی
544
  label_export_to: 'قالب‌های دیگر:'
545
  label_read: خواندن...
546
  label_public_projects: پروژه‌های همگانی
547
  label_open_issues: باز
548
  label_open_issues_plural: باز
549
  label_closed_issues: بسته
550
  label_closed_issues_plural: بسته
551
  label_x_open_issues_abbr_on_total:
552
    zero:  0 باز از %{total}
553
    one:   1 باز از %{total}
554
    other: "%{count} باز از %{total}"
555
  label_x_open_issues_abbr:
556
    zero:  0 باز
557
    one:   1 باز
558
    other: "%{count} باز"
559
  label_x_closed_issues_abbr:
560
    zero:  0 بسته
561
    one:   1 بسته
562
    other: "%{count} بسته"
563
  label_total: جمله
564
  label_permissions: پروانه‌ها
565
  label_current_status: وضعیت کنونی
566
  label_new_statuses_allowed: وضعیت‌های پذیرفتنی تازه
567
  label_all: همه
568
  label_none: هیچ
569
  label_nobody: هیچکس
570
  label_next: پسین
571
  label_previous: پیشین
572
  label_used_by: به کار رفته در
573
  label_details: ریزه‌کاری
574
  label_add_note: افزودن یادداشت
575
  label_per_page: ردیف‌ها در هر برگه
576
  label_calendar: گاهشمار
577
  label_months_from: از ماه
578
  label_gantt: گانت
579
  label_internal: درونی
580
  label_last_changes: "%{count} تغییر آخر"
581
  label_change_view_all: دیدن همه تغییرات
582
  label_personalize_page: سفارشی نمودن این برگه
583
  label_comment: دیدگاه
584
  label_comment_plural: دیدگاه
585
  label_x_comments:
586
    zero: بدون دیدگاه
587
    one: 1 دیدگاه
588
    other: "%{count} دیدگاه"
589
  label_comment_add: افزودن دیدگاه
590
  label_comment_added: دیدگاه افزوده شد
591
  label_comment_delete: پاک کردن دیدگاه‌ها
592
  label_query: پرس‌وجوی سفارشی
593
  label_query_plural: پرس‌وجوی سفارشی
594
  label_query_new: پرس‌وجوی تازه
595
  label_filter_add: افزودن پالایه
596
  label_filter_plural: پالایه
597
  label_equals: برابر است با
598
  label_not_equals: برابر نیست با
599
  label_in_less_than: کمتر است از
600
  label_in_more_than: بیشتر است از
601
  label_greater_or_equal: بیشتر یا برابر است با
602
  label_less_or_equal: کمتر یا برابر است با
603
  label_in: در
604
  label_today: امروز
605
  label_all_time: همیشه
606
  label_yesterday: دیروز
607
  label_this_week: این هفته
608
  label_last_week: هفته پیشین
609
  label_last_n_days: "%{count} روز گذشته"
610
  label_this_month: این ماه
611
  label_last_month: ماه پیشین
612
  label_this_year: امسال
613
  label_date_range: بازه تاریخ
614
  label_less_than_ago: کمتر از چند روز پیشین
615
  label_more_than_ago: بیشتر از چند روز پیشین
616
  label_ago: روز پیشین
617
  label_contains: دارد
618
  label_not_contains: ندارد
619
  label_day_plural: روز
620
  label_repository: انباره
621
  label_repository_plural: انباره
622
  label_browse: چریدن
623
  label_branch: شاخه
624
  label_tag: برچسب
625
  label_revision: بازبینی
626
  label_revision_plural: بازبینی
627
  label_revision_id: "بازبینی %{value}"
628
  label_associated_revisions: بازبینی‌های وابسته
629
  label_added: افزوده شده
630
  label_modified: پیراسته شده
631
  label_copied: رونویسی شده
632
  label_renamed: نامگذاری شده
633
  label_deleted: پاکسازی شده
634
  label_latest_revision: آخرین بازبینی
635
  label_latest_revision_plural: آخرین بازبینی
636
  label_view_revisions: دیدن بازبینی‌ها
637
  label_view_all_revisions: دیدن همه بازبینی‌ها
638
  label_max_size: بیشترین اندازه
639
  label_sort_highest: بردن به آغاز
640
  label_sort_higher: بردن به بالا
641
  label_sort_lower: بردن به پایین
642
  label_sort_lowest: بردن به پایان
643
  label_roadmap: چشم‌انداز
644
  label_roadmap_due_in: "سررسید در %{value}"
645
  label_roadmap_overdue: "%{value} دیرکرد"
646
  label_roadmap_no_issues: هیچ پیامدی برای این نگارش نیست
647
  label_search: جستجو
648
  label_result_plural: دست‌آورد
649
  label_all_words: همه واژه‌ها
650
  label_wiki: ویکی
651
  label_wiki_edit: ویرایش ویکی
652
  label_wiki_edit_plural: ویرایش ویکی
653
  label_wiki_page: برگه ویکی
654
  label_wiki_page_plural: برگه ویکی
655
  label_index_by_title: شاخص بر اساس نام
656
  label_index_by_date: شاخص بر اساس تاریخ
657
  label_current_version: نگارش کنونی
658
  label_preview: پیش‌نمایش
659
  label_feed_plural: خوراک
660
  label_changes_details: ریز همه جایگذاری‌ها
661
  label_issue_tracking: پیگیری پیامد
662
  label_spent_time: زمان گذاشته شده
663
  label_overall_spent_time: زمان گذاشته شده روی هم
664
  label_f_hour: "%{value} ساعت"
665
  label_f_hour_plural: "%{value} ساعت"
666
  label_time_tracking: پیگیری زمان
667
  label_change_plural: جایگذاری
668
  label_statistics: سرشماری
669
  label_commits_per_month: تغییر در هر ماه
670
  label_commits_per_author: تغییر هر نویسنده
671
  label_view_diff: دیدن تفاوت‌ها
672
  label_diff_inline: همراستا
673
  label_diff_side_by_side: کنار به کنار
674
  label_options: گزینه‌ها
675
  label_copy_workflow_from: رونویسی گردش کار از روی
676
  label_permissions_report: گزارش پروانه‌ها
677
  label_watched_issues: پیامدهای دیده‌بانی شده
678
  label_related_issues: پیامدهای وابسته
679
  label_applied_status: وضعیت به کار رفته
680
  label_loading: بار گذاری...
681
  label_relation_new: وابستگی تازه
682
  label_relation_delete: پاک کردن وابستگی
683
  label_relates_to: وابسته به
684
  label_duplicates: نگارش دیگری از
685
  label_duplicated_by: نگارشی دیگر در
686
  label_blocks: بازداشت‌ها
687
  label_blocked_by: بازداشت به دست
688
  label_precedes: جلوتر است از
689
  label_follows: پستر است از
690
  label_end_to_start: پایان به آغاز
691
  label_end_to_end: پایان به پایان
692
  label_start_to_start: آغاز به آغاز
693
  label_start_to_end: آغاز به پایان
694
  label_stay_logged_in: وارد شده بمانید
695
  label_disabled: غیرفعال
696
  label_show_completed_versions: نمایش نگارش‌های انجام شده
697
  label_me: من
698
  label_board: انجمن
699
  label_board_new: انجمن تازه
700
  label_board_plural: انجمن
701
  label_board_locked: قفل شده
702
  label_board_sticky: چسبناک
703
  label_topic_plural: سرفصل
704
  label_message_plural: پیام
705
  label_message_last: آخرین پیام
706
  label_message_new: پیام تازه
707
  label_message_posted: پیام افزوده شد
708
  label_reply_plural: پاسخ
709
  label_send_information: فرستادن داده‌های حساب به کاربر
710
  label_year: سال
711
  label_month: ماه
712
  label_week: هفته
713
  label_date_from: از
714
  label_date_to: تا
715
  label_language_based: بر اساس زبان کاربر
716
  label_sort_by: "جور کرد با %{value}"
717
  label_send_test_email: فرستادن ایمیل آزمایشی
718
  label_feeds_access_key: کلید دسترسی RSS
719
  label_missing_feeds_access_key: کلید دسترسی RSS در دسترس نیست
720
  label_feeds_access_key_created_on: "کلید دسترسی RSS %{value} پیش ساخته شده است"
721
  label_module_plural: پیمانه
722
  label_added_time_by: "افزوده شده به دست %{author} در %{age} پیش"
723
  label_updated_time_by: "بروز شده به دست %{author} در %{age} پیش"
724
  label_updated_time: "بروز شده در %{value} پیش"
725
  label_jump_to_a_project: پرش به یک پروژه...
726
  label_file_plural: پرونده
727
  label_changeset_plural: تغییر
728
  label_default_columns: ستون‌های پیش‌گزیده
729
  label_no_change_option: (بدون تغییر)
730
  label_bulk_edit_selected_issues: ویرایش دسته‌ای پیامدهای گزینش شده
731
  label_theme: پوسته
732
  label_default: پیش‌گزیده
733
  label_search_titles_only: تنها نام‌ها جستجو شود
734
  label_user_mail_option_all: "برای هر رویداد در همه پروژه‌ها"
735
  label_user_mail_option_selected: "برای هر رویداد تنها در پروژه‌های گزینش شده..."
736
  label_user_mail_option_none: "هیچ رویدادی"
737
  label_user_mail_option_only_my_events: "تنها برای چیزهایی که دیده‌بان هستم یا در آن‌ها درگیر هستم"
738
  label_user_mail_option_only_assigned: "تنها برای چیزهایی که به من واگذار شده"
... This diff was truncated because it exceeds the maximum size that can be displayed.

Also available in: Unified diff