Revision 1298:4f746d8966dd .svn/pristine/04
| .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'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: "تنها برای چیزهایی که به من واگذار شده" |
|
Also available in: Unified diff