Merge remote-tracking branch 'origin/feature/2.4.0/accessibility-master' into feature/2.4.0/accessibility-master

pull/41/head
jwollert 13 years ago
commit 3194ed8162
  1. 18
      app/controllers/account_controller.rb
  2. 15
      app/controllers/admin_controller.rb
  3. 37
      app/controllers/application_controller.rb
  4. 4
      app/controllers/auth_sources_controller.rb
  5. 4
      app/controllers/enumerations_controller.rb
  6. 20
      app/controllers/issues_controller.rb
  7. 2
      app/controllers/messages_controller.rb
  8. 4
      app/controllers/my_controller.rb
  9. 2
      app/controllers/news_controller.rb
  10. 6
      app/controllers/reports_controller.rb
  11. 4
      app/controllers/settings_controller.rb
  12. 2
      app/controllers/watchers_controller.rb
  13. 135
      app/helpers/application_helper.rb
  14. 15
      app/helpers/journals_helper.rb
  15. 7
      app/helpers/projects_helper.rb
  16. 20
      app/models/issue.rb
  17. 2
      app/models/issue_status.rb
  18. 4
      app/models/journal.rb
  19. 6
      app/models/setting.rb
  20. 101
      app/models/user.rb
  21. 3
      app/views/account/login.rhtml
  22. 2
      app/views/account/lost_password.rhtml
  23. 2
      app/views/account/password_recovery.rhtml
  24. 2
      app/views/account/register.rhtml
  25. 14
      app/views/activities/index.html.erb
  26. 5
      app/views/admin/index.rhtml
  27. 4
      app/views/admin/projects.rhtml
  28. 18
      app/views/attachments/_form.rhtml
  29. 2
      app/views/boards/show.rhtml
  30. 20
      app/views/common/_calendar.rhtml
  31. 26
      app/views/issues/_action_menu.rhtml
  32. 5
      app/views/issues/_form.rhtml
  33. 36
      app/views/issues/_subissue_row.rhtml
  34. 27
      app/views/issues/_subissues_paragraph.rhtml
  35. 18
      app/views/issues/index.rhtml
  36. 60
      app/views/issues/show.rhtml
  37. 2
      app/views/layouts/admin.rhtml
  38. 58
      app/views/layouts/base.rhtml
  39. 6
      app/views/messages/show.rhtml
  40. 2
      app/views/my/_block.rhtml
  41. 3
      app/views/my/account.rhtml
  42. 2
      app/views/my/first_login.rhtml
  43. 1
      app/views/my/page.rhtml
  44. 17
      app/views/news/_news.rhtml
  45. 24
      app/views/news/index.rhtml
  46. 2
      app/views/news/show.rhtml
  47. 1
      app/views/projects/settings.rhtml
  48. 2
      app/views/projects/settings/_boards.rhtml
  49. 1
      app/views/projects/show.rhtml
  50. 4
      app/views/queries/_columns.rhtml
  51. 4
      app/views/reports/issue_report.rhtml
  52. 2
      app/views/reports/issue_report_details.rhtml
  53. 2
      app/views/users/_form.rhtml
  54. 7
      app/views/users/_impaired_settings.rhtml
  55. 1
      app/views/users/show.rhtml
  56. 2
      app/views/versions/index.html.erb
  57. 12
      app/views/watchers/_watchers.rhtml
  58. 8
      app/views/welcome/index.rhtml
  59. 2
      app/views/wiki/_content.rhtml
  60. 6
      app/views/wiki/_sidebar.rhtml
  61. 29
      app/views/wiki/show.rhtml
  62. 25
      config/locales/bg.yml
  63. 25
      config/locales/bs.yml
  64. 25
      config/locales/ca.yml
  65. 25
      config/locales/cs.yml
  66. 25
      config/locales/da.yml
  67. 30
      config/locales/de.yml
  68. 25
      config/locales/el.yml
  69. 32
      config/locales/en-GB.yml
  70. 25
      config/locales/en.yml
  71. 25
      config/locales/es.yml
  72. 25
      config/locales/eu.yml
  73. 25
      config/locales/fa.yml
  74. 25
      config/locales/fi.yml
  75. 25
      config/locales/fr.yml
  76. 25
      config/locales/gl.yml
  77. 25
      config/locales/he.yml
  78. 25
      config/locales/hr.yml
  79. 25
      config/locales/hu.yml
  80. 25
      config/locales/id.yml
  81. 25
      config/locales/it.yml
  82. 25
      config/locales/ja.yml
  83. 25
      config/locales/ko.yml
  84. 25
      config/locales/lt.yml
  85. 25
      config/locales/lv.yml
  86. 25
      config/locales/mk.yml
  87. 25
      config/locales/mn.yml
  88. 25
      config/locales/nl.yml
  89. 25
      config/locales/no.yml
  90. 25
      config/locales/pl.yml
  91. 25
      config/locales/pt-BR.yml
  92. 25
      config/locales/pt.yml
  93. 25
      config/locales/ro.yml
  94. 25
      config/locales/ru.yml
  95. 25
      config/locales/sk.yml
  96. 25
      config/locales/sl.yml
  97. 25
      config/locales/sr-YU.yml
  98. 25
      config/locales/sr.yml
  99. 25
      config/locales/sv.yml
  100. 25
      config/locales/th.yml
  101. Some files were not shown because too many files have changed in this diff Show More

@ -20,9 +20,9 @@ class AccountController < ApplicationController
# Login request and validation
def login
if request.get?
logout_user
else
if User.current.logged?
redirect_to home_url
elsif request.post?
authenticate_user
end
end
@ -143,7 +143,12 @@ class AccountController < ApplicationController
user = User.try_to_login(params[:username], params[:password])
if user.nil?
invalid_credentials
u = User.find_by_login(params[:username])
if u && !u.active? && u.check_password?(params[:password])
inactive_account
else
invalid_credentials
end
elsif user.new_record?
onthefly_creation_failed(user, {:login => user.login, :auth_source_id => user.auth_source_id })
else
@ -237,6 +242,11 @@ class AccountController < ApplicationController
flash.now[:error] = l(:notice_account_invalid_creditentials)
end
def inactive_account
logger.warn "Failed login for '#{params[:username]}' from #{request.remote_ip} at #{Time.now.utc} (INACTIVE)"
flash.now[:error] = l(:notice_account_inactive)
end
# Register a user for email activation.
#
# Pass a block for behavior when a user fails to save

@ -24,10 +24,12 @@ class AdminController < ApplicationController
menu_item :info, :only => [:info]
def index
@no_configuration_data = Redmine::DefaultData::Loader::no_data?
redirect_to :action => 'projects'
end
def projects
@no_configuration_data = Redmine::DefaultData::Loader::no_data?
@status = params[:status] ? params[:status].to_i : 1
c = ARCondition.new(@status == 0 ? "status <> 0" : ["status = ?", @status])
@ -83,4 +85,15 @@ class AdminController < ApplicationController
[:text_rmagick_available, Object.const_defined?(:Magick)]
]
end
def default_breadcrumb
case params[:action]
when 'projects'
l(:label_project_plural)
when 'plugins'
l(:label_plugins)
when 'info'
l(:label_information)
end
end
end

@ -307,6 +307,34 @@ class ApplicationController < ActionController::Base
return false
end
def render_500(options={})
message = t(:notice_internal_server_error, :app_title => Setting.app_title)
if $!.is_a?(ActionView::ActionViewError)
@template.instance_variable_set("@project", nil)
@template.instance_variable_set("@status", 500)
@template.instance_variable_set("@message", message)
else
@project = nil
end
render_error({:message => message}.merge(options))
return false
end
def render_optional_error_file(status_code)
user_setup unless User.current.id == session[:user_id]
case status_code
when :not_found
render_404
when :internal_server_error
render_500
else
super
end
end
# Renders an error response
def render_error(arg)
arg = {:message => arg} unless arg.is_a?(Hash)
@ -502,4 +530,13 @@ class ApplicationController < ActionController::Base
def pick_layout(*args)
api_request? ? nil : super
end
def default_breadcrumb
name = l("label_" + self.class.name.gsub("Controller", "").underscore.singularize + "_plural")
if name =~ /translation missing/i
name = l("label_" + self.class.name.gsub("Controller", "").underscore.singularize)
end
name
end
helper_method :default_breadcrumb
end

@ -81,4 +81,8 @@ class AuthSourcesController < ApplicationController
def auth_source_class
AuthSource
end
def default_breadcrumb
l(:label_auth_source_plural)
end
end

@ -84,4 +84,8 @@ class EnumerationsController < ApplicationController
# flash[:error] = 'Unable to delete enumeration'
# redirect_to :action => 'index'
end
def default_breadcrumb
l(:label_enumerations)
end
end

@ -13,6 +13,8 @@
#++
class IssuesController < ApplicationController
EXPORT_FORMATS = %w[atom rss api xls csv pdf]
menu_item :new_issue, :only => [:new, :create]
menu_item :view_all_issues, :only => [:all]
default_search_scope :issues
@ -22,6 +24,7 @@ class IssuesController < ApplicationController
before_filter :check_project_uniqueness, :only => [:move, :perform_move]
before_filter :find_project, :only => [:new, :create]
before_filter :authorize, :except => [:index, :all]
before_filter :protect_from_unauthorized_export, :only => [:index, :all]
before_filter :find_optional_project, :only => [:index, :all]
before_filter :check_for_default_issue_status, :only => [:new, :create]
before_filter :build_new_issue_from_params, :only => [:new, :create]
@ -52,7 +55,7 @@ class IssuesController < ApplicationController
verify :method => :put, :only => :update, :render => {:nothing => true, :status => :method_not_allowed }
def index
sort_init(@query.sort_criteria.empty? ? [['id', 'desc']] : @query.sort_criteria)
sort_init(@query.sort_criteria.empty? ? [['parent', 'desc']] : @query.sort_criteria)
sort_update(@query.sortable_columns)
if @query.valid?
@ -93,11 +96,12 @@ class IssuesController < ApplicationController
def all
params[:set_filter] = '1'
retrieve_query
index
end
def show
@journals = @issue.journals.find(:all, :include => [:user], :order => "#{Journal.table_name}.created_at ASC")
@journals = @issue.journals.changing.find(:all, :include => [:user], :order => "#{Journal.table_name}.created_at ASC")
@journals.reverse! if User.current.wants_comments_in_reverse_order?
@changesets = @issue.changesets.visible.all
@changesets.reverse! if User.current.wants_comments_in_reverse_order?
@ -319,4 +323,16 @@ private
attributes[:custom_field_values].reject! {|k,v| v.blank?} if attributes[:custom_field_values]
attributes
end
def protect_from_unauthorized_export
return true unless EXPORT_FORMATS.include? params[:format]
find_optional_project
return true if User.current.allowed_to? :export_issues, @project
# otherwise deny access
params[:format] = 'html'
deny_access
return false
end
end

@ -110,7 +110,7 @@ class MessagesController < ApplicationController
content = "#{ll(Setting.default_language, :text_user_wrote, user)}\\n> "
content << text.to_s.strip.gsub(%r{<pre>((.|\s)*?)</pre>}m, '[...]').gsub('"', '\"').gsub(/(\r?\n|\r\n?)/, "\\n> ") + "\\n\\n"
render(:update) { |page|
page << "$('reply_subject').value = \"#{subject}\";"
page << "$('message_subject').value = \"#{subject}\";"
page.<< "$('message_content').value = \"#{content}\";"
page.show 'reply'
page << "Form.Element.focus('message_content');"

@ -184,4 +184,8 @@ class MyController < ApplicationController
end
render :nothing => true
end
def default_breadcrumb
l(:label_my_account)
end
end

@ -22,6 +22,8 @@ class NewsController < ApplicationController
before_filter :find_optional_project, :only => :index
accept_key_auth :index
menu_item :new_news, :only => [:new, :create]
def index
case params[:format]

@ -72,7 +72,7 @@ class ReportsController < ApplicationController
@field = "project_id"
@rows = @project.descendants.visible
@data = Issue.by_subproject(@project) || []
@report_title = l(:field_subproject)
@report_title = l(:label_subproject_plural)
end
respond_to do |format|
@ -89,4 +89,8 @@ class ReportsController < ApplicationController
def find_issue_statuses
@statuses = IssueStatus.find(:all, :order => 'position')
end
def default_breadcrumb
l(:label_summary)
end
end

@ -58,4 +58,8 @@ class SettingsController < ApplicationController
rescue Redmine::PluginNotFound
render_404
end
def default_breadcrumb
l(:label_settings)
end
end

@ -63,7 +63,7 @@ class WatchersController < ApplicationController
private
def find_project
klass = Object.const_get(params[:object_type].camelcase)
klass = params[:object_type].camelcase.constantize
return false unless klass.respond_to?('watched_by')
@watched = klass.find(params[:object_id])
@project = @watched.project

@ -34,8 +34,25 @@ module ApplicationHelper
# @param [Hash] options Hash params. This will checked by authorize_for to see if the user is authorized
# @param [optional, Hash] html_options Options passed to link_to
# @param [optional, Hash] parameters_for_method_reference Extra parameters for link_to
def link_to_if_authorized(name, options = {}, html_options = nil, *parameters_for_method_reference)
link_to(name, options, html_options, *parameters_for_method_reference) if authorize_for(options[:controller] || params[:controller], options[:action])
#
# When a block is given, skip the name parameter
def link_to_if_authorized(*args, &block)
name = args.shift unless block_given?
options = args.shift || {}
html_options = args.shift
parameters_for_method_reference = args
return unless authorize_for(options[:controller] || params[:controller], options[:action])
if block_given?
link_to(options, html_options, *parameters_for_method_reference, &block)
else
link_to(name, options, html_options, *parameters_for_method_reference)
end
end
def li_unless_nil(link)
content_tag(:li, link) if link
end
# Display a link to remote if user is authorized
@ -105,11 +122,10 @@ module ApplicationHelper
subject = truncate(subject, :length => options[:truncate])
end
end
closed = issue.closed? ? content_tag(:span, l(:label_closed_issues), :class => "hidden-for-sighted") : nil
s = link_to "#{h(issue.tracker)} ##{issue.id}", {:controller => "issues", :action => "show", :id => issue},
closed = issue.closed? ? content_tag(:span, l(:label_closed_issues), :class => "hidden-for-sighted") : ""
s = link_to closed + options[:before_text].to_s + "#{h(issue.tracker)} ##{issue.id}", {:controller => "issues", :action => "show", :id => issue},
:class => issue.css_classes,
:title => title
s << closed unless closed.nil?
s << ": #{h subject}" if subject
s = "#{h issue.project} - " + s if options[:project]
s
@ -159,12 +175,18 @@ module ApplicationHelper
# link_to_project(project, {:only_path => false}, :class => "project") # => 3rd arg adds html options
# link_to_project(project, {}, :class => "project") # => html options with default url (project overview)
#
def link_to_project(project, options={}, html_options = nil)
def link_to_project(project, options={}, html_options = nil, show_icon = false)
if show_icon && User.current.member_of?(project)
icon = image_tag('fav.png', :alt => l(:description_my_project), :title => l(:description_my_project))
else
icon = ""
end
if project.active?
url = {:controller => 'projects', :action => 'show', :id => project}.merge(options)
link_to(h(project), url, html_options)
icon + link_to(h(project), url, html_options)
else
h(project)
icon + h(project)
end
end
@ -232,11 +254,11 @@ module ApplicationHelper
# Renders flash messages
def render_flash_messages
s = ''
flash.each do |k,v|
s << content_tag('div', content_tag('a',v, :href => 'javascript:;'), :class => "flash #{k}")
if User.current.impaired?
flash.map { |k,v| content_tag('div', content_tag('a', v, :href => 'javascript:;'), :class => "flash #{k}") }.join
else
flash.map { |k,v| content_tag('div', v, :class => "flash #{k}") }.join
end
s
end
# Renders tabs and their content
@ -268,7 +290,7 @@ module ApplicationHelper
def project_tree_options_for_select(projects, options = {})
s = ''
project_tree(projects) do |project, level|
name_prefix = (level > 0 ? ('&nbsp;' * 2 * level + '&#187; ') : '')
name_prefix = (level > 0 ? ('&nbsp;' * 3 * level + '&#187; ') : '')
tag_options = {:value => project.id, :title => h(project)}
if project == options[:selected] || (options[:selected].respond_to?(:include?) && options[:selected].include?(project))
tag_options[:selected] = 'selected'
@ -398,10 +420,13 @@ module ApplicationHelper
end
def reorder_links(name, url)
link_to(image_tag('2uparrow.png', :alt => l(:label_sort_highest)), url.merge({"#{name}[move_to]" => 'highest'}), :method => :post, :title => l(:label_sort_highest)) +
link_to(image_tag('1uparrow.png', :alt => l(:label_sort_higher)), url.merge({"#{name}[move_to]" => 'higher'}), :method => :post, :title => l(:label_sort_higher)) +
link_to(image_tag('1downarrow.png', :alt => l(:label_sort_lower)), url.merge({"#{name}[move_to]" => 'lower'}), :method => :post, :title => l(:label_sort_lower)) +
link_to(image_tag('2downarrow.png', :alt => l(:label_sort_lowest)), url.merge({"#{name}[move_to]" => 'lowest'}), :method => :post, :title => l(:label_sort_lowest))
content_tag(:span,
link_to(image_tag('2uparrow.png', :alt => l(:label_sort_highest)), url.merge({"#{name}[move_to]" => 'highest'}), :method => :post, :title => l(:label_sort_highest)) +
link_to(image_tag('1uparrow.png', :alt => l(:label_sort_higher)), url.merge({"#{name}[move_to]" => 'higher'}), :method => :post, :title => l(:label_sort_higher)) +
link_to(image_tag('1downarrow.png', :alt => l(:label_sort_lower)), url.merge({"#{name}[move_to]" => 'lower'}), :method => :post, :title => l(:label_sort_lower)) +
link_to(image_tag('2downarrow.png', :alt => l(:label_sort_lowest)), url.merge({"#{name}[move_to]" => 'lowest'}), :method => :post, :title => l(:label_sort_lowest)),
:class => "reorder-icons"
)
end
def breadcrumb(*args)
@ -409,12 +434,38 @@ module ApplicationHelper
elements.any? ? content_tag('p', args.join(' &#187; ') + ' &#187; ', :class => 'breadcrumb') : nil
end
def breadcrumb_list(*args)
elements = args.flatten
cutme_elements = []
breadcrumb_elements = [content_tag(:li, elements.shift.to_s, :class => 'first-breadcrumb-element', :style => 'list-style-image:none;')]
breadcrumb_elements += elements.collect do |element|
content_tag(:li, element.to_s) if element
end
content_tag(:ul, breadcrumb_elements, :class => 'breadcrumb')
end
def other_formats_links(&block)
concat('<p class="other-formats">' + l(:label_export_to))
yield Redmine::Views::OtherFormatsBuilder.new(self)
concat('</p>')
end
def link_to_project_ancestors(project)
if @project
ancestors = (project.root? ? [] : project.ancestors.visible)
ancestors << project
ancestors.collect do |p|
if p == project
link_to_project(p, {:jump => current_menu_item}, {:title => p, :class => 'breadcrumb-project-title nocut'})
else
link_to_project(p, {:jump => current_menu_item}, {:title => p})
end
end
end
end
def page_header_title
if @page_header_title.present?
h(@page_header_title)
@ -458,8 +509,11 @@ module ApplicationHelper
css << 'theme-' + theme.name
end
css << 'controller-' + params[:controller]
css << 'action-' + params[:action]
if params[:controller] && params[:action]
css << 'controller-' + params[:controller]
css << 'action-' + params[:action]
end
css.join(' ')
end
@ -845,8 +899,8 @@ module ApplicationHelper
back_url = params[:back_url]
if back_url.present?
back_url = back_url.to_s
else
back_url = url_for(params) if request.get?
elsif request.get? and !params.blank?
back_url = url_for(params)
end
hidden_field_tag('back_url', back_url) unless back_url.blank?
end
@ -942,9 +996,16 @@ module ApplicationHelper
end
def content_for(name, content = nil, &block)
@has_content ||= {}
@has_content[name] = true
super(name, content, &block)
# only care for non whitespace contents;
# rails 2.3 specific implementation
if instance_variable_get("@content_for_#{name}").match /\S+/
@has_content ||= {}
@has_content[name] = true
end
nil
end
def has_content?(name)
@ -974,7 +1035,7 @@ module ApplicationHelper
unless User.current.pref.warn_on_leaving_unsaved == '0'
tags << "\n" + javascript_tag("Event.observe(window, 'load', function(){ new WarnLeavingUnsaved('#{escape_javascript( l(:text_warn_on_leaving_unsaved) )}'); });")
end
tags << "\n" + javascript_include_tag("accessibility.js") if ( User.current.impaired? or User.current.anonymous? )
tags << "\n" + javascript_include_tag("accessibility.js") if User.current.impaired? and accessibility_js_enabled?
tags
end
@ -1081,6 +1142,22 @@ module ApplicationHelper
@top_menu_split
end
def disable_accessibility_css!
@accessibility_css_disabled = true
end
def accessibility_css_enabled?
!@accessibility_css_disabled
end
def disable_accessibility_js!
@accessibility_js_disabled = true
end
def accessibility_js_enabled?
!@accessibility_js_disabled
end
private
def wiki_helper
@ -1097,4 +1174,14 @@ module ApplicationHelper
"<em>" + l(:text_caracters_minimum, :count => Setting.password_min_length) + "</em>"
end
def breadcrumb_paths(*args)
if args.nil?
nil
elsif args.empty?
@breadcrumb_paths ||= [default_breadcrumb]
else
@breadcrumb_paths ||= []
@breadcrumb_paths += args
end
end
end

@ -34,18 +34,14 @@ module JournalsHelper
# This renders a journal entry with a header and details
def render_journal_details(journal, header_label = :label_updated_time_by, model=nil, options={})
header = <<-HTML
<div class="profile-wrap">
#{avatar(journal.user, :size => "40")}
</div>
<h4>
<div class="journal-link" style="float:right;">#{link_to "##{journal.anchor}", :anchor => "note-#{journal.anchor}"}</div>
#{authoring journal.created_at, journal.user, :label => header_label}
#{content_tag('a', '', :name => "note-#{journal.anchor}")}
</h4>
<div class="profile-wrap">
#{avatar(journal.user, :size => "40")}
</div>
#{render_notes(model, journal, options) unless journal.notes.blank?}
HTML
if journal.details.any?
@ -58,7 +54,10 @@ module JournalsHelper
end
end
content_tag("div", "#{header}#{details}", :id => "change-#{journal.id}", :class => "journal")
notes = <<-HTML
#{render_notes(model, journal, options) unless journal.notes.blank?}
HTML
content_tag("div", "#{header}#{details}#{notes}", :id => "change-#{journal.id}", :class => "journal")
end
def render_notes(model, journal, options={})

@ -13,9 +13,10 @@
#++
module ProjectsHelper
def link_to_version(version, options = {})
def link_to_version(version, html_options = {}, options={})
return '' unless version && version.is_a?(Version)
link_to_if version.visible?, format_version_name(version), { :controller => 'versions', :action => 'show', :id => version }, options
options
link_to_if version.visible?, options[:before_text].to_s + format_version_name(version), { :controller => 'versions', :action => 'show', :id => version }, html_options
end
def project_settings_tabs
@ -69,7 +70,7 @@ module ProjectsHelper
end
classes = (ancestors.empty? ? 'root' : 'child')
s << "<li class='#{classes}'><div class='#{classes}'>" +
link_to_project(project, {}, :class => "project #{User.current.member_of?(project) ? 'my-project' : nil}")
link_to_project(project, {}, {:class => "project"}, true)
s << "<div class='wiki description'>#{textilizable(project.short_description, :project => project)}</div>" unless project.description.blank?
s << "</div>\n"
ancestors << project

@ -43,7 +43,8 @@ class Issue < ActiveRecord::Base
else
t << (IssueStatus.find_by_id(o.new_value_for(:status_id)).try(:is_closed?) ? '-closed' : '-edit')
end
t }
t },
:except => ["root_id"]
register_on_journal_formatter(:id, 'parent_id')
register_on_journal_formatter(:named_association, 'project_id', 'status_id', 'tracker_id', 'assigned_to_id',
@ -557,7 +558,7 @@ class Issue < ActiveRecord::Base
s << ' assigned-to-me' if User.current.logged? && assigned_to_id == User.current.id
s
end
# Saves an issue, time_entry, attachments, and a journal from the parameters
# Returns false if save fails
def save_issue_with_child_records(params, existing_time_entry=nil)
@ -586,7 +587,18 @@ class Issue < ActiveRecord::Base
end
rescue ActiveRecord::StaleObjectError
attachments[:files].each(&:destroy)
errors.add_to_base l(:notice_locking_conflict)
error_message = l(:notice_locking_conflict)
journals_since = self.journals.after(lock_version)
if journals_since.any?
changes = journals_since.map { |j| "#{j.user.name} (#{j.created_at.to_s(:short)})" }
error_message << " " << l(:notice_locking_conflict_additional_information, :users => changes.join(', '))
end
error_message << " " << l(:notice_locking_conflict_reload_page)
errors.add_to_base error_message
raise ActiveRecord::Rollback
end
end
@ -610,9 +622,11 @@ class Issue < ActiveRecord::Base
def parent_issue_id=(arg)
parent_issue_id = arg.blank? ? nil : arg.to_i
if parent_issue_id && @parent_issue = Issue.find_by_id(parent_issue_id)
journal_changes["parent_id"] = [self.parent_id, @parent_issue.id]
@parent_issue.id
else
@parent_issue = nil
journal_changes["parent_id"] = [self.parent_id, nil]
nil
end
end

@ -56,7 +56,7 @@ class IssueStatus < ActiveRecord::Base
(author || !w.author) &&
(assignee || !w.assignee)
end
transitions.collect{|w| w.new_status}.compact.sort
transitions.collect{|w| w.new_status}.uniq.compact.sort
else
[]
end

@ -42,6 +42,10 @@ class Journal < ActiveRecord::Base
# undef_method :changes
serialize :changes, Hash
# Scopes to all journals excluding the initial journal - useful for change
# logs like the history on issue#show
named_scope "changing", :conditions => ["version > 1"]
def touch_journaled_after_creation
journaled.touch
end

@ -158,8 +158,10 @@ private
def self.find_or_default(name)
name = name.to_s
raise "There's no setting named #{name}" unless @@available_settings.has_key?(name)
setting = find_by_name(name)
setting ||= new(:name => name, :value => @@available_settings[name]['default']) if @@available_settings.has_key? name
find_by_name(name) or new do |s|
s.name = name
s.value = @@available_settings[name]['default']
end
end
def self.cache_key(name)

@ -116,6 +116,26 @@ class User < Principal
self.read_attribute(:identity_url)
end
def self.register_allowance_evaluator(filter)
self.registered_allowance_evaluators ||= []
registered_allowance_evaluators << filter
end
# replace by class_attribute when on rails 3.x
class_eval do
def self.registered_allowance_evaluators() nil end
def self.registered_allowance_evaluators=(val)
singleton_class.class_eval do
define_method(:registered_allowance_evaluators) do
val
end
end
end
end
register_allowance_evaluator ChiliProject::PrincipalAllowanceEvaluator::Default
# Returns the user that matches provided login and password, or nil
def self.try_to_login(login, password)
# Make sure no one can sign in with an empty password
@ -256,7 +276,7 @@ class User < Principal
end
def impaired
!!self.pref.impaired
anonymous? || !!self.pref.impaired
end
def impaired?
@ -406,41 +426,59 @@ class User < Principal
# * nil with options[:global] set : check if user has at least one role allowed for this action,
# or falls back to Non Member / Anonymous permissions depending if the user is logged
def allowed_to?(action, context, options={})
if context && context.is_a?(Project)
# No action allowed on archived projects
return false unless context.active?
# No action allowed on disabled modules
return false unless context.allows_to?(action)
# Admin users are authorized for anything else
return true if admin?
roles = roles_for_project(context)
return false unless roles
roles.detect {|role| (context.is_public? || role.member?) && role.allowed_to?(action)}
elsif context && context.is_a?(Array)
if context.is_a?(Project)
allowed_to_in_project?(action, context, options)
elsif context.is_a?(Array)
# Authorize if user is authorized on every element of the array
context.map do |project|
context.present? && context.all? do |project|
allowed_to?(action,project,options)
end.inject do |memo,allowed|
memo && allowed
end
elsif options[:global]
# Admin users are always authorized
return true if admin?
# authorize if user has at least one role that has this permission
roles = memberships.collect {|m| m.roles}.flatten.uniq
roles.detect {|r| r.allowed_to?(action)} || (self.logged? ? Role.non_member.allowed_to?(action) : Role.anonymous.allowed_to?(action))
allowed_to_globally?(action, options)
else
false
end
end
def allowed_to_in_project?(action, project, options = {})
initialize_allowance_evaluators
# No action allowed on archived projects
return false unless project.active?
# No action allowed on disabled modules
return false unless project.allows_to?(action)
# Admin users are authorized for anything else
return true if admin?
candidates_for_project_allowance(project).any? do |candidate|
denied = @registered_allowance_evaluators.any? do |filter|
filter.denied_for_project? candidate, action, project, options
end
!denied && @registered_allowance_evaluators.any? do |filter|
filter.granted_for_project? candidate, action, project, options
end
end
end
# Is the user allowed to do the specified action on any project?
# See allowed_to? for the actions and valid options.
def allowed_to_globally?(action, options)
allowed_to?(action, nil, options.reverse_merge(:global => true))
def allowed_to_globally?(action, options = {})
initialize_allowance_evaluators
# Admin users are always authorized
return true if admin?
# authorize if user has at least one membership granting this permission
candidates_for_global_allowance.any? do |candidate|
denied = @registered_allowance_evaluators.any? do |evaluator|
evaluator.denied_for_global? candidate, action, options
end
!denied && @registered_allowance_evaluators.any? do |evaluator|
evaluator.granted_for_global? candidate, action, options
end
end
end
safe_attributes 'login',
@ -554,6 +592,19 @@ class User < Principal
ActiveSupport::SecureRandom.hex(16)
end
def initialize_allowance_evaluators
@registered_allowance_evaluators ||= self.class.registered_allowance_evaluators.collect do |evaluator|
evaluator.new(self)
end
end
def candidates_for_global_allowance
@registered_allowance_evaluators.map(&:global_granting_candidates).flatten.uniq
end
def candidates_for_project_allowance project
@registered_allowance_evaluators.map{ |f| f.project_granting_candidates(project) }.flatten.uniq
end
end
class AnonymousUser < User

@ -1,3 +1,6 @@
<% disable_accessibility_css! %>
<% breadcrumb_paths(l(:label_login)) %>
<%= call_hook :view_account_login_top %>
<div id="login-form">
<% form_tag({:action=> "login"}) do %>

@ -1,3 +1,5 @@
<% disable_accessibility_css! %>
<h2><%=l(:label_password_lost)%></h2>
<div class="box">

@ -1,3 +1,5 @@
<% disable_accessibility_css! %>
<h2><%=l(:label_password_lost)%></h2>
<%= error_messages_for 'user' %>

@ -1,3 +1,5 @@
<% disable_accessibility_css! %>
<h2><%=l(:label_register)%> <%=link_to l(:label_login_with_open_id_option), signin_url if Setting.openid? %></h2>
<% form_tag({:action => 'register'}, :class => "tabular") do %>

@ -21,14 +21,16 @@
<%= content_tag('p', l(:label_no_data), :class => 'nodata') if @events_by_day.empty? %>
<div style="float:left;">
<%= link_to_content_update('&#171; ' + l(:label_previous_week),
params.merge(:from => @date_to - @days - 1),
:title => l(:label_date_from_to, :start => format_date(@date_to - 2*@days), :end => format_date(@date_to - @days - 1))) %>
<%= link_to_content_update(l(:label_previous_week),
params.merge(:from => @date_to - @days - 1),
{:title => l(:label_date_from_to, :start => format_date(@date_to - 2*@days), :end => format_date(@date_to - @days - 1)),
:class => 'navigate-left'}) %>
</div>
<div style="float:right;">
<%= link_to_content_update(l(:label_next_week) + ' &#187;',
params.merge(:from => @date_to + @days - 1),
:title => l(:label_date_from_to, :start => format_date(@date_to), :end => format_date(@date_to + @days - 1))) unless @date_to >= Date.today %>
<%= link_to_content_update(l(:label_next_week),
params.merge(:from => @date_to + @days - 1),
{:title => l(:label_date_from_to, :start => format_date(@date_to), :end => format_date(@date_to + @days - 1)),
:class => 'navigate-right'}) unless @date_to >= Date.today %>
</div>
&nbsp;
<% other_formats_links do |f| %>

@ -1,5 +0,0 @@
<div id="admin-index">
<%= render :partial => 'no_data' if @no_configuration_data %>
</div>
<% html_title(l(:label_administration)) -%>

@ -1,3 +1,7 @@
<div id="admin-index">
<%= render :partial => 'no_data' if @no_configuration_data %>
</div>
<div class="contextual">
<%= link_to l(:label_project_new), {:controller => 'projects', :action => 'new'}, :class => 'icon icon-add' %>
</div>

@ -1,8 +1,16 @@
<span id="attachments_fields">
<%= file_field_tag 'attachments[1][file]', :size => 30, :id => nil -%><label class="inline"><span id="attachment_description_label_content"><%= l(:label_optional_description) %></span><%= text_field_tag 'attachments[1][description]', '', :size => 60, :id => nil %>
</label>
<span id="attachment_template">
<%= file_field_tag 'attachments[1][file]', :size => 15, :id => nil, :class => "attachment_choose_file" -%>
<label class="label-with-input" >
<span class="attachment_description_label_content">
<%= l(:label_optional_description) %>
</span>
<%= text_field_tag 'attachments[1][description]', '', :size => 38, :id => nil %>
</label>
</span>
</span>
<br />
<small><%= link_to l(:label_add_another_file), '#', :onclick => 'addFileField(); return false;' %>
(<%= l(:label_max_size) %>: <%= number_to_human_size(Setting.attachment_max_size.to_i.kilobytes) %>)
</small>
<span class="add_another_file">
<%= link_to l(:label_add_another_file), '#', :onclick => 'addFileField(); return false;' %>
(<%= l(:label_max_size) %>: <%= number_to_human_size(Setting.attachment_max_size.to_i.kilobytes) %>)
</span>

@ -1,5 +1,3 @@
<%= breadcrumb link_to(l(:label_board_plural), {:controller => 'boards', :action => 'index', :project_id => @project}) %>
<div class="contextual">
<%= link_to_if_authorized l(:label_message_new),
{:controller => 'messages', :action => 'new', :board_id => @board},

@ -11,15 +11,27 @@ while day <= calendar.enddt %>
<p class="day-num"><%= day.day %></p>
<% calendar.events_on(day).each do |i| %>
<% if i.is_a? Issue %>
<div class="<%= i.css_classes %> <%= 'starting' if day == i.start_date %> <%= 'ending' if day == i.due_date %> tooltip">
<div class="<%= i.css_classes %> tooltip">
<%= h("#{i.project} -") unless @project && @project == i.project %>
<%= link_to_issue i, :truncate => 30 %>
<% date_img = '' %>
<% if day == i.start_date and day == i.due_date %>
<% date_img = image_tag("bullet_diamond.png", :title => l(:text_tip_issue_begin_end_day), :alt => l(:text_tip_issue_begin_end_day),
:class => "imgtag-icon") %>
<% elsif day == i.start_date %>
<% date_img = image_tag("bullet_go.png", :title => l(:text_tip_issue_begin_day), :alt => l(:text_tip_issue_begin_day),
:class => "imgtag-icon") %>
<% elsif day == i.due_date %>
<% date_img = image_tag("bullet_end.png", :title => l(:text_tip_issue_end_day), :alt => l(:text_tip_issue_end_day),
:class => "imgtag-icon") %>
<% end %>
<%= link_to_issue i, :truncate => 30, :before_text => date_img %>
<span class="tip"><%= render_issue_tooltip i %></span>
</div>
<% else %>
<span class="icon icon-package">
<span>
<%= h("#{i.project} -") unless @project && @project == i.project %>
<%= link_to_version i%>
<%= link_to_version i, {}, {:before_text => image_tag("package.png", :title => l(:label_version), :alt => l(:label_version), :class => "imgtag-icon") }%>
</span>
<% end %>
<% end %>

@ -1,12 +1,14 @@
<div class="contextual">
<%= link_to_if_authorized(l(:button_update), {:controller => 'issues', :action => 'edit', :id => @issue }, :onclick => 'showAndScrollTo("update", "notes"); return false;', :class => 'icon icon-edit', :accesskey => accesskey(:edit)) %>
<%= link_to_if_authorized l(:button_log_time), {:controller => 'timelog', :action => 'new', :issue_id => @issue}, :class => 'icon icon-time-add' %>
<%= watcher_link(@issue,
User.current,
{ :class => 'watcher_link',
:replace => User.current.allowed_to?(:view_issue_watchers, @project) ? ['#watchers', '.watcher_link'] : ['.watcher_link'] }) %>
<%= link_to_if_authorized l(:button_duplicate), {:controller => 'issues', :action => 'new', :project_id => @project, :copy_from => @issue }, :class => 'icon icon-duplicate' %>
<%= link_to_if_authorized l(:button_copy), {:controller => 'issue_moves', :action => 'new', :id => @issue, :copy_options => {:copy => 't'}}, :class => 'icon icon-copy' %>
<%= link_to_if_authorized l(:button_move), {:controller => 'issue_moves', :action => 'new', :id => @issue}, :class => 'icon icon-move' %>
<%= link_to_if_authorized l(:button_delete), {:controller => 'issues', :action => 'destroy', :id => @issue}, :confirm => (@issue.leaf? ? l(:text_are_you_sure) : l(:text_are_you_sure_with_children)), :method => :post, :class => 'icon icon-del' %>
</div>
<% content_for :action_menu_main do %>
<%= li_unless_nil(link_to_if_authorized(l(:button_update), {:controller => 'issues', :action => 'edit', :id => @issue }, :onclick => 'showAndScrollTo("update", "notes"); return false;', :class => 'icon icon-edit', :accesskey => accesskey(:edit))) %>
<%= li_unless_nil(watcher_link(@issue,
User.current,
{ :class => 'watcher_link',
:replace => User.current.allowed_to?(:view_issue_watchers, @project) ? ['#watchers', '.watcher_link'] : ['.watcher_link'] })) %>
<% end %>
<% content_for :action_menu_more do %>
<%= li_unless_nil(link_to_if_authorized l(:button_log_time), {:controller => 'timelog', :action => 'new', :issue_id => @issue}, :class => 'icon icon-time-add') %>
<%= li_unless_nil(link_to_if_authorized l(:button_duplicate), {:controller => 'issues', :action => 'new', :project_id => @project, :copy_from => @issue }, :class => 'icon icon-duplicate') %>
<%= li_unless_nil(link_to_if_authorized l(:button_copy), {:controller => 'issue_moves', :action => 'new', :id => @issue, :copy_options => {:copy => 't'}}, :class => 'icon icon-copy') %>
<%= li_unless_nil(link_to_if_authorized l(:button_move), {:controller => 'issue_moves', :action => 'new', :id => @issue}, :class => 'icon icon-move') %>
<%= li_unless_nil(link_to_if_authorized l(:button_delete), {:controller => 'issues', :action => 'destroy', :id => @issue}, :confirm => (@issue.leaf? ? l(:text_are_you_sure) : l(:text_are_you_sure_with_children)), :method => :post, :class => 'icon icon-del') %>
<% end %>

@ -26,7 +26,10 @@
</div>
<% if @issue.new_record? %>
<p id="attachments_form"><%= label_tag('attachments[1][file]', l(:label_attachment_plural))%><%= render :partial => 'attachments/form' %></p>
<p>
<%= label_tag('attachments[1][file]', l(:label_attachment_plural))%>
<%= render :partial => 'attachments/form' %>
</p>
<% end %>
<% if @issue.new_record? && User.current.allowed_to?(:add_issue_watchers, @project) -%>

@ -0,0 +1,36 @@
<%
css_classes = ["issue"]
css_classes << "issue-#{issue.id}"
css_classes << "idnt" << "idnt-#{level}" if level > 0
if relation == "root"
issue_text = link_to("#{h(issue.tracker.name)} ##{issue.id}",
'javascript:void(0)',
:style => "color:inherit; font-weight: bold; text-decoration:none; cursor:default;",
:class => issue.css_classes)
else
title = ''
if relation == "parent"
title << content_tag(:span, l(:description_parent_issue), :class => "hidden-for-sighted")
elsif relation == "child"
title << content_tag(:span, l(:description_sub_issue), :class => "hidden-for-sighted")
end
title << " #{h(issue.tracker.name)} ##{issue.id}"
issue_text = link_to(title, issue, :class => issue.css_classes)
end
issue_text << ": "
issue_text << truncate(issue.subject, :length => 60)
%>
<%=
content_tag('tr', [
content_tag('td', check_box_tag("ids[]", issue.id, false, :id => nil), :class => 'checkbox'),
content_tag('td', issue_text, :class => 'subject'),
content_tag('td', h(issue.status)),
content_tag('td', link_to_user(issue.assigned_to)),
content_tag('td', link_to_version(issue.fixed_version))
].join,
:class => css_classes.join(' ')
)
%>

@ -0,0 +1,27 @@
<strong><%= l(:label_issue_hierarchy) %></strong>
(<%= link_to(l(:label_add_subtask), {:controller => 'issues', :action => 'new', :project_id => @project, :issue => {:parent_issue_id => @issue}}) if User.current.allowed_to?(:manage_subtasks, @project) %>)
<% if !@issue.leaf? || @issue.parent %>
<% indent = 0 %>
<form action="#">
<table id="issue_tree" class="list">
<!-- render parent elements -->
<% @issue.ancestors.each do |issue| %>
<%= render :partial => 'subissue_row', :locals => { :issue => issue, :level => indent, :relation => "parent" } %>
<% indent += 1 %>
<% end %>
<!-- render current element -->
<%= render :partial => 'subissue_row', :locals => { :issue => @issue, :level => indent, :relation => "root" } %>
<% indent += 1 %>
<!-- render child elements -->
<% issue_list(@issue.descendants.sort_by(&:lft)) do |issue, level| %>
<%= render :partial => 'subissue_row', :locals => { :issue => issue, :level => indent + level, :relation => "child" } %>
<% end %>
</table>
</form>
<% end %>

@ -1,16 +1,14 @@
<div class="title-bar">
<div class="contextual">
<% if !@query.new_record? && @query.editable_by?(User.current) %>
<%= link_to l(:button_edit), {:controller => 'queries', :action => 'edit', :id => @query}, :class => 'icon icon-edit' %>
<%= link_to l(:button_delete), {:controller => 'queries', :action => 'destroy', :id => @query}, :confirm => l(:text_are_you_sure), :method => :post, :class => 'icon icon-del' %>
<% end %>
</div>
<h2><%= @query.new_record? ? l(:label_issue_plural) : h(@query.name) %></h2>
<div class="title-bar">
<div class="title-bar-extras">
<div class="contextual">
<% if !@query.new_record? && @query.editable_by?(User.current) %>
<%= link_to l(:button_edit), {:controller => 'queries', :action => 'edit', :id => @query}, :class => 'icon icon-edit' %>
<%= link_to l(:button_delete), {:controller => 'queries', :action => 'destroy', :id => @query}, :confirm => l(:text_are_you_sure), :method => :post, :class => 'icon icon-del' %>
<% end %>
<%= link_to_if_authorized(l(:label_issue_new), {:controller => 'issues', :action => 'new', :project_id => @project}, :class => 'icon icon-add') if @project %>
</div>
<% html_title(@query.new_record? ? l(:label_issue_plural) : h(@query.name)) %>
@ -78,7 +76,7 @@
<%= f.link_to 'Atom', :url => { :project_id => @project, :query_id => (@query.new_record? ? nil : @query), :key => User.current.rss_key } %>
<%= f.link_to 'CSV', :url => { :project_id => @project } %>
<%= f.link_to 'PDF', :url => { :project_id => @project } %>
<% end %>
<% end if User.current.allowed_to? :export_issues, @project %>
<% end %>
<%= call_hook(:view_issues_index_bottom, { :issues => @issues, :project => @project, :query => @query }) %>

@ -1,10 +1,7 @@
<div class="title-bar" id="upper-title-bar">
<div class="subject"><%= content_tag('h2', h(@issue.tracker.name) + ' #' +@issue.id.to_s) %></div>
<%= render :partial => 'action_menu' %>
<div class="title-bar-actions">
<%= render :partial => 'action_menu' %>
</div>
</div>
<% breadcrumb_paths(*[link_to(l(:label_issue_plural), {:controller => 'issues', :action => 'index'})] << @issue.ancestors.collect {|parent| link_to '#' + h(parent.id), {:controller => 'issues', :action => 'show', :id => parent}}) unless @issue.ancestors.empty? %>
<%= content_tag('h2', h(@issue.tracker.name) + ' #' +@issue.id.to_s) %>
<div class="<%= @issue.css_classes %> details">
<div class="profile-wrap">
@ -13,7 +10,6 @@
<h3>
<%=h(@issue.subject) %>
</h3>
<hr />
<p class="author">
<%= authoring @issue.created_on, @issue.author %>.
@ -21,7 +17,6 @@
<%= l(:label_updated_time, time_tag(@issue.updated_on)) %>.
<% end %>
</p>
<hr />
<div class="meta">
<table class="attributes">
@ -56,48 +51,43 @@
</div><!-- .meta -->
<% if @issue.description? %>
<hr />
<div class="description">
<hr />
<div class="contextual">
<%= link_to_remote_if_authorized(l(:button_quote), { :url => {:controller => 'journals', :action => 'new', :id => @issue} }, :class => 'icon icon-comment') %>
</div>
<p><strong><%=l(:field_description)%></strong></p>
<div class="wiki">
<%= textilizable @issue, :description, :attachments => @issue.attachments %>
</div>
</div>
<p><strong><%=l(:field_description)%></strong></p>
<div class="wiki">
<%= textilizable @issue, :description, :attachments => @issue.attachments %>
</div>
</div>
<% end %>
<% if @issue.attachments.any? -%>
<hr />
<%= link_to_attachments @issue %>
<%= link_to_attachments @issue %>
<% end -%>
<%= call_hook(:view_issues_show_description_bottom, :issue => @issue) %>
<% if !@issue.leaf? || User.current.allowed_to?(:manage_subtasks, @project) %>
<hr />
<div id="issue_tree">
<p>
<strong><%=l(:label_subtask_plural)%></strong>
(<%= link_to(l(:label_add_subtask), {:controller => 'issues', :action => 'new', :project_id => @project, :issue => {:parent_issue_id => @issue}}) if User.current.allowed_to?(:manage_subtasks, @project) %>)
</p>
<%= render_descendants_tree(@issue) unless @issue.leaf? %>
</div>
<% end %>
<%= render :partial => 'subissues_paragraph' %>
<% if authorize_for('issue_relations', 'new') || @issue.relations.present? %>
<hr />
<div id="relations">
<%= render :partial => 'relations' %>
</div>
<hr />
<% end %>
<% if User.current.allowed_to?(:add_issue_watchers, @project) ||
(@issue.watchers.present? && User.current.allowed_to?(:view_issue_watchers, @project)) %>
<div id="watchers">
<%= render :partial => 'watchers/watchers', :locals => {:watched => @issue} %>
</div>
<% end %>
</div>
<div style="clear: both;"></div>
<% if @changesets.present? %>
<div id="issue-changesets">
@ -117,15 +107,12 @@
<div style="clear: both;"></div>
<div class="title-bar" id="lower-title-bar">
<div class="title-bar-actions">
<%= render :partial => 'action_menu', :locals => {:replace_watcher => 'watcher2' } %>
</div>
<%= javascript_include_tag 'copy_issue_actions' %>
</div>
<div style="clear: both;"></div>
<% if authorize_for('issues', 'edit') %>
<div id="update" style="display:none;">
<h3><%= l(:button_update) %></h3>
<div id="update" style="display:none;">
<%= render :partial => 'edit' %>
</div>
<% end %>
@ -139,13 +126,6 @@
<% content_for :sidebar do %>
<%= render :partial => 'issues/sidebar' %>
<% if User.current.allowed_to?(:add_issue_watchers, @project) ||
(@issue.watchers.present? && User.current.allowed_to?(:view_issue_watchers, @project)) %>
<div id="watchers">
<%= render :partial => 'watchers/watchers', :locals => {:watched => @issue} %>
</div>
<% end %>
<% end %>
<% content_for :header_tags do %>

@ -1,3 +1,5 @@
<% breadcrumb_paths(link_to(l(:label_administration), :controller => 'admin'),
default_breadcrumb) %>
<% @page_header_title = l(:label_administration) %>
<% content_for :main_menu do %>
<%= render :partial => 'admin/menu' %>

@ -19,8 +19,12 @@
<%= javascript_include_tag 'jquery.min.js' %>
<%= javascript_include_tag 'jquery-ui.min.js' %>
<%= javascript_include_tag 'jquery.menu_expand.js' %>
<%= javascript_include_tag 'breadcrumb.js' %>
<%= javascript_include_tag 'chosen.js'%>
<%= stylesheet_link_tag 'chosen'%>
<% if User.current.impaired? && accessibility_css_enabled? %>
<%= stylesheet_link_tag 'accessibility' %>
<% end %>
<%= javascript_tag('jQuery.noConflict();') %>
<%= javascript_heads %>
<%= stylesheet_link_tag 'jstoolbar' %>
@ -41,12 +45,14 @@
<%= label_tag("q", l(:label_search), :class => "hidden-for-sighted") %>
<% form_tag({:controller => 'search', :action => 'index', :id => @project}, :method => :get) do %>
<%= hidden_field_tag(controller.default_search_scope, 1, :id => nil) if controller.default_search_scope %>
<%= text_field_tag 'q', @question, :size => 20, :class => 'search_field', :placeholder => l(:search_input_placeholder), :accesskey => accesskey(:quick_search) %>
<div id='search_wrap'>
<%= text_field_tag 'q', @question, :size => 20, :class => 'search_field', :placeholder => l(:search_input_placeholder), :accesskey => accesskey(:quick_search) %>
</div>
<% end %>
</div>
<ul id="account-nav">
<h1 class="hidden-for-sighted"><%= l(:label_top_menu) %></h1>
<h1 class="hidden-for-sighted"><%= l(:label_top_menu) %></h1>
<ul id="account-nav" class="menu_root">
<% main_top_menu_items.each do |item| %>
<%= render_menu_node(item) %>
<% end %>
@ -95,30 +101,32 @@
<div id="breadcrumb">
<h1>
<span class = 'hidden-for-sighted'><%=l(:description_current_position)%></span>
<%= page_header_title %>
<%= breadcrumb_list(link_to('Home', home_path),
link_to_project_ancestors(@project),
*breadcrumb_paths) %>
</h1>
</div>
<%= javascript_tag('jQuery("div#breadcrumb ul.breadcrumb").adjustBreadcrumbToWindowSize()') %>
</div>
<% main_menu = render_main_menu(@project) %>
<% if (side_displayed = has_content?(:sidebar) || has_content?(:main_menu) || !main_menu.blank?) %>
<% display_sidebar = true %>
<% else %>
<% display_sidebar = false %>
<% end %>
<% side_displayed = has_content?(:sidebar) || has_content?(:main_menu) || !main_menu.blank? %>
<div id="main" class="<%= side_displayed ? '' : "nosidebar" %>">
<% if (side_displayed) %>
<div id="main-menu">
<h1 class="hidden-for-sighted"><%= l(:label_main_menu) %></h1>
<%= main_menu %>
<%= yield :main_menu %>
<% if display_sidebar %>
<!-- Sidebar -->
<div id="sidebar">
<%= yield :sidebar %>
<%= call_hook :view_layouts_base_sidebar %>
<div id="toggle-project-menu">
<a href="javascript:;" title="<%= l(:show_hide_project_menu) %>" class="navigation-toggler"></a>
</div>
<div id="menu-sidebar">
<%= main_menu %>
<%= yield :main_menu %>
<!-- Sidebar -->
<div id="sidebar">
<%= yield :sidebar %>
<%= call_hook :view_layouts_base_sidebar %>
</div>
</div>
<% end %>
</div>
<%= expand_current_menu %>
@ -126,6 +134,22 @@
<div class="<%= side_displayed ? '' : "nosidebar" %>" id="content">
<h1 class="hidden-for-sighted"><%= l(:label_content) %></h1>
<%= render_flash_messages %>
<!-- Action menu -->
<% if @content_for_action_menu_main %>
<ul class="action_menu_main">
<%= yield :action_menu_main %>
<% if @content_for_action_menu_more %>
<li class="drop-down">
<a href="javascript:" class="icon icon-more"><%= l(:more_actions) %></a>
<ul class="action_menu_more" style="display:none;">
<%= yield :action_menu_more %>
</ul>
</li>
<% end %>
</ul>
<% end %>
<%= yield %>
<%= call_hook :view_layouts_base_content %>
<div style="clear:both;">&nbsp;</div>

@ -1,5 +1,7 @@
<%= breadcrumb link_to(l(:label_board_plural), {:controller => 'boards', :action => 'index', :project_id => @project}),
link_to(h(@board.name), {:controller => 'boards', :action => 'show', :project_id => @project, :id => @board}) %>
<% breadcrumb_paths(
link_to(l(:label_board_plural), {:controller => 'boards', :action => 'index', :project_id => @project}),
link_to(h(@board.name), {:controller => 'boards', :action => 'show', :project_id => @project, :id => @board}))
%>
<div class="contextual">
<%= watcher_link(@topic, User.current) %>

@ -1,6 +1,6 @@
<div id="block_<%= block_name.dasherize %>" class="mypage-box">
<div style="float:right;margin-right:16px;z-index:500;">
<div class="box-actions">
<%= link_to_remote "", {
:url => { :action => "remove_block", :block => block_name },
:complete => "removeBlock('block_#{block_name.dasherize}')" },

@ -1,3 +1,4 @@
<% breadcrumb_paths(l(:label_my_account)) %>
<div class="contextual">
<%= call_hook(:view_my_account_contextual, :user => @user)%>
</div>
@ -34,7 +35,7 @@
<%= render :partial => 'users/mail_notifications' %>
</div>
<h3><%=l(:field_impaired_settings)%></h3>
<h3><%=l(:field_ui, :app_title => Setting.app_title)%></h3>
<div class="box tabular">
<%= render :partial => 'users/impaired_settings' %>
</div>

@ -1,5 +1,5 @@
<% form_tag({:controller => 'my', :action => "first_login", :back_url => @back_url }, {:method => :put}) do %>
<h3><%=l(:field_impaired_settings)%></h3>
<h3><%=l(:field_ui, :app_title => Setting.app_title)%></h3>
<div class="box tabular">
<%= render :partial => "users/impaired_settings" %>
</div>

@ -1,3 +1,4 @@
<% breadcrumb_paths(l(:label_my_page)) %>
<div class="contextual">
<%= link_to l(:label_personalize_page), :action => 'page_layout' %>
</div>

@ -1,6 +1,11 @@
<p><%= link_to_project(news.project) + ': ' unless @project %>
<%= link_to h(news.title), news_path(news) %>
<%= "(#{l(:label_x_comments, :count => news.comments_count)})" if news.comments_count > 0 %>
<br />
<% unless news.summary.blank? %><span class="summary"><%=h news.summary %></span><br /><% end %>
<span class="author"><%= authoring news.created_on, news.author %></span></p>
<div class="news">
<%= link_to_project(news.project) + ': ' unless @project %>
<h4 class='overview'><%= link_to h(news.title), news_path(news) %></h4>
<p class="author additional-information"><%= authoring news.created_on, news.author %></p>
<div>
<%= "(#{l(:label_x_comments, :count => news.comments_count)})" if news.comments_count > 0 %>
<% unless news.summary.blank? %>
<div class="summary"><%=h news.summary %></div>
<% end %>
</div>
</div>

@ -1,27 +1,3 @@
<div class="contextual">
<%= link_to(l(:label_news_new),
new_project_news_path(@project),
:class => 'icon icon-add',
:onclick => 'Element.show("add-news"); Form.Element.focus("news_title"); return false;') if @project && User.current.allowed_to?(:manage_news, @project) %>
</div>
<div id="add-news" style="display:none;">
<h2><%=l(:label_news_new)%></h2>
<% labelled_tabular_form_for :news, @news, :url => project_news_index_path(@project),
:html => { :id => 'news-form' } do |f| %>
<%= render :partial => 'news/form', :locals => { :f => f } %>
<%= submit_tag l(:button_create) %>
<%= link_to_remote l(:label_preview),
{ :url => preview_news_path(:project_id => @project),
:method => 'get',
:update => 'preview',
:with => "Form.serialize('news-form')"
}, :accesskey => accesskey(:preview) %> |
<%= link_to l(:button_cancel), "#", :onclick => 'Element.hide("add-news")' %>
<% end if @project %>
<div id="preview" class="wiki"></div>
</div>
<h2><%=l(:label_news_plural)%></h2>
<% if @newss.empty? %>

@ -1,10 +1,10 @@
<div class="contextual">
<%= watcher_link(@news, User.current) %>
<%= link_to(l(:button_edit),
edit_news_path(@news),
:class => 'icon icon-edit',
:accesskey => accesskey(:edit),
:onclick => 'Element.show("edit-news"); return false;') if User.current.allowed_to?(:manage_news, @project) %>
<%= watcher_link(@news, User.current) %>
<%= link_to(l(:button_delete),
news_path(@news),
:confirm => l(:text_are_you_sure),

@ -1,4 +1,5 @@
<h2><%=l(:label_settings)%></h2>
<% breadcrumb_paths(l(:label_settings)) %>
<%= render_tabs project_settings_tabs %>

@ -12,7 +12,7 @@
<tr class="<%= cycle 'odd', 'even' %>">
<td><%=h board.name %></td>
<td><%=h board.description %></td>
<td align="center">
<td class="small-icons" align="center">
<% if authorize_for("boards", "edit") %>
<%= reorder_links('board', {:controller => 'boards', :action => 'edit', :project_id => @project, :id => board}) %>
<% end %>

@ -5,6 +5,7 @@
</div>
<h2><%=l(:label_overview)%></h2>
<% breadcrumb_paths(l(:label_overview)) %>
<div class="splitcontentleft">
<div class="wiki">

@ -7,7 +7,7 @@
options_for_select((query.available_columns - query.columns).collect {|column| [column.caption, column.name]}),
:multiple => true, :size => 10, :style => "width:150px" %>
</td>
<td align="center" valign="middle">
<td class="table-buttons" align="center" valign="middle">
<input type="button" value="&#8594;"
onclick="moveOptions(this.form.available_columns, this.form.selected_columns);"
title="<%= l(:label_add_columns) %>"/><br />
@ -22,7 +22,7 @@
options_for_select(query.columns.collect {|column| [column.caption, column.name]}),
:id => 'selected_columns', :multiple => true, :size => 10, :style => "width:150px" %>
</td>
<td align="center" valign="middle">
<td class="table-buttons" align="center" valign="middle">
<input type="button" value="&#8593;" onclick="moveOptionUp(this.form.selected_columns);"
title="<%= l(:label_sort_higher) %>" /><br />
<input type="button" value="&#8595;" onclick="moveOptionDown(this.form.selected_columns);"

@ -1,4 +1,4 @@
<h2><%=l(:label_report_plural)%></h2>
<h2><%=l(:label_summary)%></h2>
<div class="splitcontentleft">
<h3><%=l(:field_tracker)%>&nbsp;&nbsp;
@ -46,7 +46,7 @@
<%= render :partial => 'simple', :locals => { :data => @issues_by_version, :field_name => "fixed_version_id", :rows => @versions } %>
<br />
<% if @project.children.any? %>
<h3><%=l(:field_subproject)%>&nbsp;&nbsp;
<h3><%=l(:label_suproject_plural)%>&nbsp;&nbsp;
<%= link_to image_tag('zoom_in.png',
:alt => l(:text_analyze, :subject => l(:field_subproject)),
:title => l(:text_analyze, :subject => l(:field_subproject))),

@ -1,4 +1,4 @@
<h2><%=l(:label_report_plural)%></h2>
<h2><%=l(:label_summary)%></h2>
<h3><%=@report_title%></h3>
<%= render :partial => 'details', :locals => { :data => @data, :field_name => @field, :rows => @rows } %>

@ -20,7 +20,7 @@
</div>
<div class="box tabular">
<h3><%=l(:field_impaired_settings)%></h3>
<h3><%=l(:field_ui, :app_title => Setting.app_title)%></h3>
<%= render :partial => "users/impaired_settings" %>
</div>

@ -1,3 +1,6 @@
<% fields_for :pref, @user.pref, :builder => TabularFormBuilder, :lang => current_language do |pref_fields| %>
<p><%= pref_fields.check_box :impaired %></p>
<% fields_for :pref, @user.pref, :lang => current_language do |pref_fields| %>
<p>
<%= pref_fields.label(:impaired, t(:field_impaired, :app_title => Setting.app_title))%>
<%= pref_fields.check_box :impaired %>
</p>
<% end %>

@ -15,7 +15,6 @@
<li><%=h custom_value.custom_field.name%>: <%=h show_value(custom_value) %></li>
<% end %>
<% end %>
<li><%=l(:label_registered_on)%>: <%= format_date(@user.created_on) %></li>
<% unless @user.last_login_on.nil? %>
<li><%=l(:field_last_login_on)%>: <%= format_date(@user.last_login_on) %></li>
<% end %>

@ -13,9 +13,9 @@
<%= render(:partial => "wiki/content", :locals => {:content => version.wiki_page.content}) if version.wiki_page %>
<% if (issues = @issues_by_version[version]) && issues.size > 0 %>
<strong class="related-issues-heading"><%= l(:label_related_issues) %></strong>
<% form_tag({}) do -%>
<table class="list related-issues">
<caption><%= l(:label_related_issues) %></caption>
<%- issues.each do |issue| -%>
<tr class="hascontextmenu">
<td class="checkbox"><%= check_box_tag 'ids[]', issue.id %></td>

@ -1,13 +1,11 @@
<div class="contextual">
<%= link_to_remote l(:button_add),
<strong><%= l(:label_issue_watchers) %> (<%= watched.watcher_users.size %>)</strong>
(<%= link_to_remote(l(:button_add_watcher),
:url => {:controller => 'watchers',
:action => 'new',
:object_type => watched.class.name.underscore,
:object_id => watched} if User.current.allowed_to?(:add_issue_watchers, @project) %>
</div>
<h3><%= l(:label_issue_watchers) %> (<%= watched.watcher_users.size %>)</h3>
:object_id => watched},
:method => :get) if User.current.allowed_to?(:add_issue_watchers, @project)
%>)
<% unless @watcher.nil? %>
<% remote_form_for(:watcher, @watcher,
:url => {:controller => 'watchers',

@ -1,10 +1,14 @@
<% breadcrumb_paths(nil) %>
<div class="splitcontentleft">
<div class="wiki"><%= textilizable Setting.welcome_text %></div>
<% if @news.any? %>
<div class="news box">
<div class="mypage-box">
<h3><%=l(:label_news_latest)%></h3>
<div class="overview">
<%= render :partial => 'news/news', :collection => @news %>
<%= link_to l(:label_news_view_all), :controller => 'news' %>
</div>
</div>
<% end %>
<%= call_hook(:view_welcome_index_left, :projects => @projects) %>
@ -12,7 +16,7 @@
<div class="splitcontentright">
<% if @projects.any? %>
<div class="projects box">
<div class="projects mypage-box overview">
<h3><%=l(:label_project_latest)%></h3>
<ul>
<% for project in @projects %>

@ -1,3 +1,3 @@
<div class="wiki">
<div class="wiki wiki-content">
<%= textilizable content, :text, :attachments => content.page.attachments %>
</div>

@ -1,9 +1,3 @@
<% if @wiki && @wiki.sidebar -%>
<%= textilizable @wiki.sidebar.content, :text %>
<% end -%>
<h3><%= l(:label_wiki_navigation) %></h3>
<%= link_to l(:field_start_page), {:action => 'show', :id => nil} %><br />
<%= link_to l(:label_index_by_title), {:action => 'index'} %><br />
<%= link_to l(:label_index_by_date), {:action => 'date_index'} %><br />

@ -1,17 +1,22 @@
<div class="contextual">
<% if @editable %>
<%= link_to_if_authorized(l(:button_edit), {:action => 'edit', :id => @page.title}, :class => 'icon icon-edit', :accesskey => accesskey(:edit)) if @content.version == @page.content.version %>
<%= watcher_link(@page, User.current) %>
<%= link_to_if_authorized(l(:button_lock), {:action => 'protect', :id => @page.title, :protected => 1}, :method => :post, :class => 'icon icon-lock') if !@page.protected? %>
<%= link_to_if_authorized(l(:button_unlock), {:action => 'protect', :id => @page.title, :protected => 0}, :method => :post, :class => 'icon icon-unlock') if @page.protected? %>
<%= link_to_if_authorized(l(:button_rename), {:action => 'rename', :id => @page.title}, :class => 'icon icon-move') if @content.version == @page.content.version %>
<%= link_to_if_authorized(l(:button_delete), {:action => 'destroy', :id => @page.title}, :method => :delete, :confirm => l(:text_are_you_sure), :class => 'icon icon-del') %>
<%= link_to_if_authorized(l(:button_rollback), {:action => 'edit', :id => @page.title, :version => @content.version }, :class => 'icon icon-cancel') if @content.version < @page.content.version %>
<%= call_hook :wiki_navigation %>
<% content_for :action_menu_main do %>
<% if @editable %>
<%= li_unless_nil(link_to_if_authorized(l(:button_edit), {:action => 'edit', :id => @page.title}, :class => 'icon icon-edit', :accesskey => accesskey(:edit))) if @content.version == @page.content.version %>
<%= li_unless_nil(watcher_link(@page, User.current)) if Setting.notified_events.include?("wiki_content_added") or Setting.notified_events.include?("wiki_content_updated") %>
<% end %>
<% end %>
<% content_for :action_menu_more do %>
<% if @editable %>
<%= li_unless_nil(link_to_if_authorized(l(:button_lock), {:action => 'protect', :id => @page.title, :protected => 1}, :method => :post, :class => 'icon icon-lock')) if !@page.protected? %>
<%= li_unless_nil(link_to_if_authorized(l(:button_unlock), {:action => 'protect', :id => @page.title, :protected => 0}, :method => :post, :class => 'icon icon-unlock')) if @page.protected? %>
<%= li_unless_nil(link_to_if_authorized(l(:button_rename), {:action => 'rename', :id => @page.title}, :class => 'icon icon-move')) if @content.version == @page.content.version %>
<%= li_unless_nil(link_to_if_authorized(l(:button_delete), {:action => 'destroy', :id => @page.title}, :method => :delete, :confirm => l(:text_are_you_sure), :class => 'icon icon-del')) %>
<%= li_unless_nil(link_to_if_authorized(l(:button_rollback), {:action => 'edit', :id => @page.title, :version => @content.version }, :class => 'icon icon-cancel')) if @content.version < @page.content.version %>
<% end %>
<%= li_unless_nil(link_to_if_authorized(l(:label_history), {:action => 'history', :id => @page.title}, :class => 'icon icon-history')) %>
<% end %>
<%= link_to_if_authorized(l(:label_history), {:action => 'history', :id => @page.title}, :class => 'icon icon-history') %>
</div>
<%= breadcrumb(@page.ancestors.reverse.collect {|parent| link_to h(parent.pretty_title), {:id => parent.title, :project_id => parent.project}}) %>
<% breadcrumb_paths(*@page.ancestors.reverse.collect {|parent| link_to h(parent.pretty_title), {:id => parent.title, :project_id => parent.project}}) %>
<% if @content.version != @page.content.version %>
<p>

@ -983,3 +983,28 @@ bg:
description_choose_project: Projects
description_date_from: Enter start date
label_deleted_custom_field: (deleted custom field)
label_checked: checked
label_calendar_show: Show Calendar
description_compare_to: Compare to version
description_active: Active?
label_main_menu: Side Menu
label_enable_multi_select: Toggle multiselect
label_remove_columns: Remove selected columns
notice_account_inactive: Your account has not yet been activated. To activate your account, click on the link that was emailed to you.
description_enter_text: Enter text
label_content: Content
description_current_position: "You are here:"
label_top_menu: Top Menu
description_compare_from: Compare from version
label_add_columns: Add selected columns
button_remove_widget: Remove widget
label_modules: Modules
notice_account_update_failed: Account setting could not be safed. Please have a look at your account page.
description_enter_number: Enter number
description_select_issue: Select issue
label_table_of_contents: Table of Contents
field_impaired: Accessibility mode
search_input_placeholder: search ...
text_analyze: "Further analyze: %{subject}"
label_project_view_all: View all projects
description_subissue: Subissue of

@ -997,3 +997,28 @@ bs:
description_choose_project: Projects
description_date_from: Enter start date
label_deleted_custom_field: (deleted custom field)
label_checked: checked
label_calendar_show: Show Calendar
description_compare_to: Compare to version
description_active: Active?
label_main_menu: Side Menu
label_enable_multi_select: Toggle multiselect
label_remove_columns: Remove selected columns
notice_account_inactive: Your account has not yet been activated. To activate your account, click on the link that was emailed to you.
description_enter_text: Enter text
label_content: Content
description_current_position: "You are here:"
label_top_menu: Top Menu
description_compare_from: Compare from version
label_add_columns: Add selected columns
button_remove_widget: Remove widget
label_modules: Modules
notice_account_update_failed: Account setting could not be safed. Please have a look at your account page.
description_enter_number: Enter number
description_select_issue: Select issue
label_table_of_contents: Table of Contents
field_impaired: Accessibility mode
search_input_placeholder: search ...
text_analyze: "Further analyze: %{subject}"
label_project_view_all: View all projects
description_subissue: Subissue of

@ -986,3 +986,28 @@ ca:
description_choose_project: Projects
description_date_from: Enter start date
label_deleted_custom_field: (deleted custom field)
label_checked: checked
label_calendar_show: Show Calendar
description_compare_to: Compare to version
description_active: Active?
label_main_menu: Side Menu
label_enable_multi_select: Toggle multiselect
label_remove_columns: Remove selected columns
notice_account_inactive: Your account has not yet been activated. To activate your account, click on the link that was emailed to you.
description_enter_text: Enter text
label_content: Content
description_current_position: "You are here:"
label_top_menu: Top Menu
description_compare_from: Compare from version
label_add_columns: Add selected columns
button_remove_widget: Remove widget
label_modules: Modules
notice_account_update_failed: Account setting could not be safed. Please have a look at your account page.
description_enter_number: Enter number
description_select_issue: Select issue
label_table_of_contents: Table of Contents
field_impaired: Accessibility mode
search_input_placeholder: search ...
text_analyze: "Further analyze: %{subject}"
label_project_view_all: View all projects
description_subissue: Subissue of

@ -1207,3 +1207,28 @@ cs:
description_choose_project: Projects
description_date_from: Enter start date
label_deleted_custom_field: (deleted custom field)
label_checked: checked
label_calendar_show: Show Calendar
description_compare_to: Compare to version
description_active: Active?
label_main_menu: Side Menu
label_enable_multi_select: Toggle multiselect
label_remove_columns: Remove selected columns
notice_account_inactive: Your account has not yet been activated. To activate your account, click on the link that was emailed to you.
description_enter_text: Enter text
label_content: Content
description_current_position: "You are here:"
label_top_menu: Top Menu
description_compare_from: Compare from version
label_add_columns: Add selected columns
button_remove_widget: Remove widget
label_modules: Modules
notice_account_update_failed: Account setting could not be safed. Please have a look at your account page.
description_enter_number: Enter number
description_select_issue: Select issue
label_table_of_contents: Table of Contents
field_impaired: Accessibility mode
search_input_placeholder: search ...
text_analyze: "Further analyze: %{subject}"
label_project_view_all: View all projects
description_subissue: Subissue of

@ -999,3 +999,28 @@ da:
description_choose_project: Projects
description_date_from: Enter start date
label_deleted_custom_field: (deleted custom field)
label_checked: checked
label_calendar_show: Show Calendar
description_compare_to: Compare to version
description_active: Active?
label_main_menu: Side Menu
label_enable_multi_select: Toggle multiselect
label_remove_columns: Remove selected columns
notice_account_inactive: Your account has not yet been activated. To activate your account, click on the link that was emailed to you.
description_enter_text: Enter text
label_content: Content
description_current_position: "You are here:"
label_top_menu: Top Menu
description_compare_from: Compare from version
label_add_columns: Add selected columns
button_remove_widget: Remove widget
label_modules: Modules
notice_account_update_failed: Account setting could not be safed. Please have a look at your account page.
description_enter_number: Enter number
description_select_issue: Select issue
label_table_of_contents: Table of Contents
field_impaired: Accessibility mode
search_input_placeholder: search ...
text_analyze: "Further analyze: %{subject}"
label_project_view_all: View all projects
description_subissue: Subissue of

@ -162,18 +162,22 @@ de:
notice_account_invalid_creditentials: Benutzer oder Kennwort ist ungültig.
notice_account_password_updated: Kennwort wurde erfolgreich aktualisiert.
notice_account_wrong_password: Falsches Kennwort.
notice_account_register_done: Konto wurde erfolgreich angelegt.
notice_account_register_done: Konto wurde erfolgreich angelegt. Zur Aktivierung folgen Sie dem Link, der Ihnen per E-Mail zugeschickt wurde.
notice_account_unknown_email: Unbekannter Benutzer.
notice_account_update_failed: Konto konnte nicht aktualisiert werden. Bitte besuchen Sie ihre Profilseite und überprüfen Sie die Einstellungen.
notice_can_t_change_password: Dieses Konto verwendet eine externe Authentifizierungs-Quelle. Unmöglich, das Kennwort zu ändern.
notice_account_lost_email_sent: Eine E-Mail mit Anweisungen, ein neues Kennwort zu wählen, wurde Ihnen geschickt.
notice_account_activated: Ihr Konto ist aktiviert. Sie können sich jetzt anmelden.
notice_account_inactive: Ihr Konto ist nicht aktiviert. Zur Aktivierung folgen Sie dem Link, der Ihnen bei der Registrierung per E-Mail zugeschickt wurde.
notice_successful_create: Erfolgreich angelegt
notice_successful_update: Erfolgreich aktualisiert.
notice_successful_delete: Erfolgreich gelöscht.
notice_successful_connection: Verbindung erfolgreich.
notice_file_not_found: Anhang existiert nicht oder ist gelöscht worden.
notice_locking_conflict: Datum wurde von einem anderen Benutzer geändert.
notice_internal_server_error: "Auf der von Ihnen aufgerufenen Seite ist ein Fehler aufgetreten. Kontaktieren Sie bitte ihren %{app_title} Administrator wenn sie wiederholt Probleme mit dem Aufrufen der Seite haben."
notice_locking_conflict: Die Informationen wurde zwischenzeitlich von einem anderen Benutzer geändert.
notice_locking_conflict_additional_information: "Die Änderungen wurden durchgeführt von %{users}."
notice_locking_conflict_reload_page: Bitte laden Sie die Seite neu, machen Sie sich mit den Änderungen vertraut und geben Sie Ihre Änderungen noch einmal ein.
notice_not_authorized: Sie sind nicht berechtigt, auf diese Seite zuzugreifen.
notice_email_sent: "Eine E-Mail wurde an %{value} gesendet."
notice_email_error: "Beim Senden einer E-Mail ist ein Fehler aufgetreten (%{value})."
@ -279,6 +283,7 @@ de:
field_host: Host
field_port: Port
field_account: Konto
field_base: "Allgemeiner Fehler:"
field_base_dn: Base DN
field_attr_login: Mitgliedsname-Attribut
field_attr_firstname: Vorname-Attribut
@ -382,6 +387,7 @@ de:
permission_manage_versions: Versionen verwalten
permission_manage_categories: Ticket-Kategorien verwalten
permission_view_issues: Tickets anzeigen
permission_export_issues: Tickets exportieren
permission_add_issues: Tickets hinzufügen
permission_edit_issues: Tickets bearbeiten
permission_manage_issue_relations: Ticket-Beziehungen verwalten
@ -499,6 +505,7 @@ de:
label_password_lost: Kennwort vergessen
label_home: Hauptseite
label_my_page: Meine Seite
label_account: Konto
label_my_account: Mein Konto
label_my_account_data: Meine Kontodaten
label_my_projects: Meine Projekte
@ -553,6 +560,8 @@ de:
label_news_view_all: Alle News anzeigen
label_news_added: News hinzugefügt
label_settings: Konfiguration
label_summary: Zusammenfassung
label_project_settings: Projektkonfiguration
label_overview: Übersicht
label_version: Version
label_version_new: Neue Version
@ -678,8 +687,8 @@ de:
label_wiki_edit_plural: Wiki-Bearbeitungen
label_wiki_page: Wiki-Seite
label_wiki_page_plural: Wiki-Seiten
label_index_by_title: Seiten nach Titel sortiert
label_index_by_date: Seiten nach Datum sortiert
label_index_by_title: Seiten nach Titel
label_index_by_date: Seiten nach Datum
label_current_version: Gegenwärtige Version
label_preview: Vorschau
label_feed_plural: Feeds
@ -775,7 +784,7 @@ de:
label_plugins: Plugins
label_ldap_authentication: LDAP-Authentifizierung
label_downloads_abbr: D/L
label_optional_description: Beschreibung (optional)
label_optional_description: Beschreibung
label_add_another_file: Eine weitere Datei hinzufügen
label_preferences: Präferenzen
label_chronological_order: in zeitlicher Reihenfolge
@ -784,6 +793,7 @@ de:
label_incoming_emails: Eingehende E-Mails
label_generate_key: Generieren
label_issue_watchers: Beobachter
button_add_watcher: Beobachter hinzufügen
label_example: Beispiel
label_display: Anzeige
label_sort: Sortierung
@ -1000,8 +1010,8 @@ de:
field_effective_date: "Abgabedatum"
label_news_comment_added: "Kommentar einer News hinzugefügt"
field_warn_on_leaving_unsaved: "Beim Verlassen einer Seite mit ungespeichertem Text warnen"
field_impaired_settings: "ChiliProject bietet eine optimierte Oberfläche für motorisch- oder seh-behinderte Nutzer"
field_impaired: "Angepasste ChiliProject-Oberfläche benutzen"
field_impaired: Für die barrierefreie Nutzung optimierte Oberfläche
field_ui: Nutzeroberfläche
text_warn_on_leaving_unsaved: "Der eingegebene Text wird nicht gespeichert, wenn sie die Seite jetzt verlassen."
text_default_encoding: "Default: UTF-8"
text_git_repo_example: a bare and local repository (e.g. /gitrepo, c:\gitrepo)
@ -1041,3 +1051,9 @@ de:
description_attachment_toggle: Dateien aus/einblenden
description_autocomplete: Für dieses Feld werden sie mit einer Autovervollständigung unterstützt. Sie können einen Teil des Tickettitels schreiben und bekommen eine Liste von möglichen Tickets angezeigt. Wählen Sie mit den Pfeiltasten den gewünschten Eintrag und bestätigen Sie mit Tab oder Enter. Sie können aber auch die Ticketnummer direkt eintragen.
description_noscript: Sie müssen JavaScript aktiveren, um Chiliproject nutzen zu können!
description_my_project: Sie sind Mitglied
description_parent_issue: Übergeordnetes Ticket
description_sub_issue: Untergeordnetes Ticket
label_issue_hierarchy: "Tickethierarchie"
more_actions: Weitere Funktionen
show_hide_project_menu: Projektnavigation aus/einblenden

@ -983,3 +983,28 @@ el:
description_choose_project: Projects
description_date_from: Enter start date
label_deleted_custom_field: (deleted custom field)
label_checked: checked
label_calendar_show: Show Calendar
description_compare_to: Compare to version
description_active: Active?
label_main_menu: Side Menu
label_enable_multi_select: Toggle multiselect
label_remove_columns: Remove selected columns
notice_account_inactive: Your account has not yet been activated. To activate your account, click on the link that was emailed to you.
description_enter_text: Enter text
label_content: Content
description_current_position: "You are here:"
label_top_menu: Top Menu
description_compare_from: Compare from version
label_add_columns: Add selected columns
button_remove_widget: Remove widget
label_modules: Modules
notice_account_update_failed: Account setting could not be safed. Please have a look at your account page.
description_enter_number: Enter number
description_select_issue: Select issue
label_table_of_contents: Table of Contents
field_impaired: Accessibility mode
search_input_placeholder: search ...
text_analyze: "Further analyze: %{subject}"
label_project_view_all: View all projects
description_subissue: Subissue of

@ -159,7 +159,9 @@ en-GB:
notice_successful_delete: Successful deletion.
notice_successful_connection: Successful connection.
notice_file_not_found: The page you were trying to access doesn't exist or has been removed.
notice_locking_conflict: Data has been updated by another user.
notice_locking_conflict: Information has been updated by at least one other user in the meantime.
notice_locking_conflict_additional_information: "The update(s) came from %{users}."
notice_locking_conflict_reload_page: Please reload the page, review the changes and reapply your updates.
notice_not_authorized: You are not authorised to access this page.
notice_not_authorized_archived_project: The project you're trying to access has been archived.
notice_email_sent: "An email was sent to %{value}"
@ -268,6 +270,7 @@ en-GB:
field_host: Host
field_port: Port
field_account: Account
field_base: "General Error:"
field_base_dn: Base DN
field_attr_login: Login attribute
field_attr_firstname: Firstname attribute
@ -381,6 +384,7 @@ en-GB:
permission_manage_versions: Manage versions
permission_manage_categories: Manage issue categories
permission_view_issues: View Issues
permission_export_issues: Export Issues
permission_add_issues: Add issues
permission_edit_issues: Edit issues
permission_manage_issue_relations: Manage issue relations
@ -493,6 +497,7 @@ en-GB:
label_password_lost: Lost password
label_home: Home
label_my_page: My page
label_account: Account
label_my_account: My account
label_my_projects: My projects
label_my_page_block: My page block
@ -987,3 +992,28 @@ en-GB:
description_choose_project: Projects
description_date_from: Enter start date
label_deleted_custom_field: (deleted custom field)
label_checked: checked
label_calendar_show: Show Calendar
description_compare_to: Compare to version
description_active: Active?
label_main_menu: Side Menu
label_enable_multi_select: Toggle multiselect
label_remove_columns: Remove selected columns
notice_account_inactive: Your account has not yet been activated. To activate your account, click on the link that was emailed to you.
description_enter_text: Enter text
label_content: Content
description_current_position: "You are here:"
label_top_menu: Top Menu
description_compare_from: Compare from version
label_add_columns: Add selected columns
button_remove_widget: Remove widget
label_modules: Modules
notice_account_update_failed: Account setting could not be safed. Please have a look at your account page.
description_enter_number: Enter number
description_select_issue: Select issue
label_table_of_contents: Table of Contents
field_impaired: Accessibility mode
search_input_placeholder: search ...
text_analyze: "Further analyze: %{subject}"
label_project_view_all: View all projects
description_subissue: Subissue of

@ -151,12 +151,16 @@ en:
notice_can_t_change_password: This account uses an external authentication source. Impossible to change the password.
notice_account_lost_email_sent: An email with instructions to choose a new password has been sent to you.
notice_account_activated: Your account has been activated. You can now log in.
notice_account_inactive: Your account has not yet been activated. To activate your account, click on the link that was emailed to you.
notice_successful_create: Successful creation.
notice_successful_update: Successful update.
notice_successful_delete: Successful deletion.
notice_successful_connection: Successful connection.
notice_file_not_found: The page you were trying to access doesn't exist or has been removed.
notice_locking_conflict: Data has been updated by another user.
notice_internal_server_error: "An error occurred on the page you were trying to access. If you continue to experience problems please contact your %{app_title} administrator for assistance."
notice_locking_conflict: Information has been updated by at least one other user in the meantime.
notice_locking_conflict_additional_information: "The update(s) came from %{users}."
notice_locking_conflict_reload_page: Please reload the page, review the changes and reapply your updates.
notice_not_authorized: You are not authorized to access this page.
notice_not_authorized_archived_project: The project you're trying to access has been archived.
notice_email_sent: "An email was sent to %{value}"
@ -265,6 +269,7 @@ en:
field_host: Host
field_port: Port
field_account: Account
field_base: "General Error:"
field_base_dn: Base DN
field_attr_login: Login attribute
field_attr_firstname: Firstname attribute
@ -308,9 +313,8 @@ en:
field_text: Text field
field_visible: Visible
field_warn_on_leaving_unsaved: "Warn me when leaving a page with unsaved text"
field_impaired_settings: "ChiliProject offers a slightly different User Interface for visually/motorically impaired Users"
field_impaired: "Use adjusted ChiliProject Interface"
field_impaired: Accessibility mode
field_ui: User Interface
setting_app_title: Application title
setting_app_subtitle: Application subtitle
setting_welcome_text: Welcome text
@ -380,6 +384,7 @@ en:
permission_manage_versions: Manage versions
permission_manage_categories: Manage issue categories
permission_view_issues: View Issues
permission_export_issues: Export Issues
permission_add_issues: Add issues
permission_edit_issues: Edit issues
permission_manage_issue_relations: Manage issue relations
@ -497,6 +502,7 @@ en:
label_password_lost: Lost password
label_home: Home
label_my_page: My page
label_account: Account
label_my_account: My account
label_my_account_data: My account data
label_my_projects: My projects
@ -552,6 +558,8 @@ en:
label_news_added: News added
label_news_comment_added: Comment added to a news
label_settings: Settings
label_summary: Summary
label_project_settings: Project settings
label_overview: Overview
label_version: Version
label_version_new: New version
@ -780,7 +788,7 @@ en:
label_plugins: Plugins
label_ldap_authentication: LDAP authentication
label_downloads_abbr: D/L
label_optional_description: Optional description
label_optional_description: Description
label_add_another_file: Add another file
label_preferences: Preferences
label_chronological_order: In chronological order
@ -789,6 +797,7 @@ en:
label_incoming_emails: Incoming emails
label_generate_key: Generate a key
label_issue_watchers: Watchers
button_add_watcher: Add watcher
label_example: Example
label_display: Display
label_sort: Sort
@ -1023,3 +1032,9 @@ en:
description_attachment_toggle: Show/Hide attachments
description_autocomplete: This field uses autocomplete. While typing the title of an issue you will receive a list of possible candidates. Choose one using the arrow up and arrow down key and select it with tab or enter. Alternatively you can enter the issue number directly.
description_noscript: You need to activate JavaScript in order to use Chiliproject!
description_my_project: You are member
description_parent_issue: Parent issue of current
description_sub_issue: Subissue of current
label_issue_hierarchy: "Issue Hierarchy"
more_actions: More functions
show_hide_project_menu: Hide/Show project menu

@ -1020,3 +1020,28 @@ es:
description_choose_project: Projects
description_date_from: Enter start date
label_deleted_custom_field: (deleted custom field)
label_checked: checked
label_calendar_show: Show Calendar
description_compare_to: Compare to version
description_active: Active?
label_main_menu: Side Menu
label_enable_multi_select: Toggle multiselect
label_remove_columns: Remove selected columns
notice_account_inactive: Your account has not yet been activated. To activate your account, click on the link that was emailed to you.
description_enter_text: Enter text
label_content: Content
description_current_position: "You are here:"
label_top_menu: Top Menu
description_compare_from: Compare from version
label_add_columns: Add selected columns
button_remove_widget: Remove widget
label_modules: Modules
notice_account_update_failed: Account setting could not be safed. Please have a look at your account page.
description_enter_number: Enter number
description_select_issue: Select issue
label_table_of_contents: Table of Contents
field_impaired: Accessibility mode
search_input_placeholder: search ...
text_analyze: "Further analyze: %{subject}"
label_project_view_all: View all projects
description_subissue: Subissue of

@ -987,3 +987,28 @@ eu:
description_choose_project: Projects
description_date_from: Enter start date
label_deleted_custom_field: (deleted custom field)
label_checked: checked
label_calendar_show: Show Calendar
description_compare_to: Compare to version
description_active: Active?
label_main_menu: Side Menu
label_enable_multi_select: Toggle multiselect
label_remove_columns: Remove selected columns
notice_account_inactive: Your account has not yet been activated. To activate your account, click on the link that was emailed to you.
description_enter_text: Enter text
label_content: Content
description_current_position: "You are here:"
label_top_menu: Top Menu
description_compare_from: Compare from version
label_add_columns: Add selected columns
button_remove_widget: Remove widget
label_modules: Modules
notice_account_update_failed: Account setting could not be safed. Please have a look at your account page.
description_enter_number: Enter number
description_select_issue: Select issue
label_table_of_contents: Table of Contents
field_impaired: Accessibility mode
search_input_placeholder: search ...
text_analyze: "Further analyze: %{subject}"
label_project_view_all: View all projects
description_subissue: Subissue of

@ -986,3 +986,28 @@ fa:
description_choose_project: Projects
description_date_from: Enter start date
label_deleted_custom_field: (deleted custom field)
label_checked: checked
label_calendar_show: Show Calendar
description_compare_to: Compare to version
description_active: Active?
label_main_menu: Side Menu
label_enable_multi_select: Toggle multiselect
label_remove_columns: Remove selected columns
notice_account_inactive: Your account has not yet been activated. To activate your account, click on the link that was emailed to you.
description_enter_text: Enter text
label_content: Content
description_current_position: "You are here:"
label_top_menu: Top Menu
description_compare_from: Compare from version
label_add_columns: Add selected columns
button_remove_widget: Remove widget
label_modules: Modules
notice_account_update_failed: Account setting could not be safed. Please have a look at your account page.
description_enter_number: Enter number
description_select_issue: Select issue
label_table_of_contents: Table of Contents
field_impaired: Accessibility mode
search_input_placeholder: search ...
text_analyze: "Further analyze: %{subject}"
label_project_view_all: View all projects
description_subissue: Subissue of

@ -1004,3 +1004,28 @@ fi:
description_choose_project: Projects
description_date_from: Enter start date
label_deleted_custom_field: (deleted custom field)
label_checked: checked
label_calendar_show: Show Calendar
description_compare_to: Compare to version
description_active: Active?
label_main_menu: Side Menu
label_enable_multi_select: Toggle multiselect
label_remove_columns: Remove selected columns
notice_account_inactive: Your account has not yet been activated. To activate your account, click on the link that was emailed to you.
description_enter_text: Enter text
label_content: Content
description_current_position: "You are here:"
label_top_menu: Top Menu
description_compare_from: Compare from version
label_add_columns: Add selected columns
button_remove_widget: Remove widget
label_modules: Modules
notice_account_update_failed: Account setting could not be safed. Please have a look at your account page.
description_enter_number: Enter number
description_select_issue: Select issue
label_table_of_contents: Table of Contents
field_impaired: Accessibility mode
search_input_placeholder: search ...
text_analyze: "Further analyze: %{subject}"
label_project_view_all: View all projects
description_subissue: Subissue of

@ -1001,3 +1001,28 @@ fr:
description_filter: Filter
description_choose_project: Projects
description_date_from: Enter start date
label_checked: checked
label_calendar_show: Show Calendar
description_compare_to: Compare to version
description_active: Active?
label_main_menu: Side Menu
label_enable_multi_select: Toggle multiselect
label_remove_columns: Remove selected columns
notice_account_inactive: Your account has not yet been activated. To activate your account, click on the link that was emailed to you.
description_enter_text: Enter text
label_content: Content
description_current_position: "You are here:"
label_top_menu: Top Menu
description_compare_from: Compare from version
label_add_columns: Add selected columns
button_remove_widget: Remove widget
label_modules: Modules
notice_account_update_failed: Account setting could not be safed. Please have a look at your account page.
description_enter_number: Enter number
description_select_issue: Select issue
label_table_of_contents: Table of Contents
field_impaired: Accessibility mode
search_input_placeholder: search ...
text_analyze: "Further analyze: %{subject}"
label_project_view_all: View all projects
description_subissue: Subissue of

@ -995,3 +995,28 @@ gl:
description_choose_project: Projects
description_date_from: Enter start date
label_deleted_custom_field: (deleted custom field)
label_checked: checked
label_calendar_show: Show Calendar
description_compare_to: Compare to version
description_active: Active?
label_main_menu: Side Menu
label_enable_multi_select: Toggle multiselect
label_remove_columns: Remove selected columns
notice_account_inactive: Your account has not yet been activated. To activate your account, click on the link that was emailed to you.
description_enter_text: Enter text
label_content: Content
description_current_position: "You are here:"
label_top_menu: Top Menu
description_compare_from: Compare from version
label_add_columns: Add selected columns
button_remove_widget: Remove widget
label_modules: Modules
notice_account_update_failed: Account setting could not be safed. Please have a look at your account page.
description_enter_number: Enter number
description_select_issue: Select issue
label_table_of_contents: Table of Contents
field_impaired: Accessibility mode
search_input_placeholder: search ...
text_analyze: "Further analyze: %{subject}"
label_project_view_all: View all projects
description_subissue: Subissue of

@ -988,3 +988,28 @@ he:
description_choose_project: Projects
description_date_from: Enter start date
label_deleted_custom_field: (deleted custom field)
label_checked: checked
label_calendar_show: Show Calendar
description_compare_to: Compare to version
description_active: Active?
label_main_menu: Side Menu
label_enable_multi_select: Toggle multiselect
label_remove_columns: Remove selected columns
notice_account_inactive: Your account has not yet been activated. To activate your account, click on the link that was emailed to you.
description_enter_text: Enter text
label_content: Content
description_current_position: "You are here:"
label_top_menu: Top Menu
description_compare_from: Compare from version
label_add_columns: Add selected columns
button_remove_widget: Remove widget
label_modules: Modules
notice_account_update_failed: Account setting could not be safed. Please have a look at your account page.
description_enter_number: Enter number
description_select_issue: Select issue
label_table_of_contents: Table of Contents
field_impaired: Accessibility mode
search_input_placeholder: search ...
text_analyze: "Further analyze: %{subject}"
label_project_view_all: View all projects
description_subissue: Subissue of

@ -990,3 +990,28 @@ hr:
description_choose_project: Projects
description_date_from: Enter start date
label_deleted_custom_field: (deleted custom field)
label_checked: checked
label_calendar_show: Show Calendar
description_compare_to: Compare to version
description_active: Active?
label_main_menu: Side Menu
label_enable_multi_select: Toggle multiselect
label_remove_columns: Remove selected columns
notice_account_inactive: Your account has not yet been activated. To activate your account, click on the link that was emailed to you.
description_enter_text: Enter text
label_content: Content
description_current_position: "You are here:"
label_top_menu: Top Menu
description_compare_from: Compare from version
label_add_columns: Add selected columns
button_remove_widget: Remove widget
label_modules: Modules
notice_account_update_failed: Account setting could not be safed. Please have a look at your account page.
description_enter_number: Enter number
description_select_issue: Select issue
label_table_of_contents: Table of Contents
field_impaired: Accessibility mode
search_input_placeholder: search ...
text_analyze: "Further analyze: %{subject}"
label_project_view_all: View all projects
description_subissue: Subissue of

@ -1002,3 +1002,28 @@
description_choose_project: Projects
description_date_from: Enter start date
label_deleted_custom_field: (deleted custom field)
label_checked: checked
label_calendar_show: Show Calendar
description_compare_to: Compare to version
description_active: Active?
label_main_menu: Side Menu
label_enable_multi_select: Toggle multiselect
label_remove_columns: Remove selected columns
notice_account_inactive: Your account has not yet been activated. To activate your account, click on the link that was emailed to you.
description_enter_text: Enter text
label_content: Content
description_current_position: "You are here:"
label_top_menu: Top Menu
description_compare_from: Compare from version
label_add_columns: Add selected columns
button_remove_widget: Remove widget
label_modules: Modules
notice_account_update_failed: Account setting could not be safed. Please have a look at your account page.
description_enter_number: Enter number
description_select_issue: Select issue
label_table_of_contents: Table of Contents
field_impaired: Accessibility mode
search_input_placeholder: search ...
text_analyze: "Further analyze: %{subject}"
label_project_view_all: View all projects
description_subissue: Subissue of

@ -991,3 +991,28 @@ id:
description_choose_project: Projects
description_date_from: Enter start date
label_deleted_custom_field: (deleted custom field)
label_checked: checked
label_calendar_show: Show Calendar
description_compare_to: Compare to version
description_active: Active?
label_main_menu: Side Menu
label_enable_multi_select: Toggle multiselect
label_remove_columns: Remove selected columns
notice_account_inactive: Your account has not yet been activated. To activate your account, click on the link that was emailed to you.
description_enter_text: Enter text
label_content: Content
description_current_position: "You are here:"
label_top_menu: Top Menu
description_compare_from: Compare from version
label_add_columns: Add selected columns
button_remove_widget: Remove widget
label_modules: Modules
notice_account_update_failed: Account setting could not be safed. Please have a look at your account page.
description_enter_number: Enter number
description_select_issue: Select issue
label_table_of_contents: Table of Contents
field_impaired: Accessibility mode
search_input_placeholder: search ...
text_analyze: "Further analyze: %{subject}"
label_project_view_all: View all projects
description_subissue: Subissue of

@ -984,3 +984,28 @@ it:
description_choose_project: Projects
description_date_from: Enter start date
label_deleted_custom_field: (deleted custom field)
label_checked: checked
label_calendar_show: Show Calendar
description_compare_to: Compare to version
description_active: Active?
label_main_menu: Side Menu
label_enable_multi_select: Toggle multiselect
label_remove_columns: Remove selected columns
notice_account_inactive: Your account has not yet been activated. To activate your account, click on the link that was emailed to you.
description_enter_text: Enter text
label_content: Content
description_current_position: "You are here:"
label_top_menu: Top Menu
description_compare_from: Compare from version
label_add_columns: Add selected columns
button_remove_widget: Remove widget
label_modules: Modules
notice_account_update_failed: Account setting could not be safed. Please have a look at your account page.
description_enter_number: Enter number
description_select_issue: Select issue
label_table_of_contents: Table of Contents
field_impaired: Accessibility mode
search_input_placeholder: search ...
text_analyze: "Further analyze: %{subject}"
label_project_view_all: View all projects
description_subissue: Subissue of

@ -1005,3 +1005,28 @@ ja:
description_choose_project: Projects
description_date_from: Enter start date
label_deleted_custom_field: (deleted custom field)
label_checked: checked
label_calendar_show: Show Calendar
description_compare_to: Compare to version
description_active: Active?
label_main_menu: Side Menu
label_enable_multi_select: Toggle multiselect
label_remove_columns: Remove selected columns
notice_account_inactive: Your account has not yet been activated. To activate your account, click on the link that was emailed to you.
description_enter_text: Enter text
label_content: Content
description_current_position: "You are here:"
label_top_menu: Top Menu
description_compare_from: Compare from version
label_add_columns: Add selected columns
button_remove_widget: Remove widget
label_modules: Modules
notice_account_update_failed: Account setting could not be safed. Please have a look at your account page.
description_enter_number: Enter number
description_select_issue: Select issue
label_table_of_contents: Table of Contents
field_impaired: Accessibility mode
search_input_placeholder: search ...
text_analyze: "Further analyze: %{subject}"
label_project_view_all: View all projects
description_subissue: Subissue of

@ -1035,3 +1035,28 @@ ko:
description_choose_project: Projects
description_date_from: Enter start date
label_deleted_custom_field: (deleted custom field)
label_checked: checked
label_calendar_show: Show Calendar
description_compare_to: Compare to version
description_active: Active?
label_main_menu: Side Menu
label_enable_multi_select: Toggle multiselect
label_remove_columns: Remove selected columns
notice_account_inactive: Your account has not yet been activated. To activate your account, click on the link that was emailed to you.
description_enter_text: Enter text
label_content: Content
description_current_position: "You are here:"
label_top_menu: Top Menu
description_compare_from: Compare from version
label_add_columns: Add selected columns
button_remove_widget: Remove widget
label_modules: Modules
notice_account_update_failed: Account setting could not be safed. Please have a look at your account page.
description_enter_number: Enter number
description_select_issue: Select issue
label_table_of_contents: Table of Contents
field_impaired: Accessibility mode
search_input_placeholder: search ...
text_analyze: "Further analyze: %{subject}"
label_project_view_all: View all projects
description_subissue: Subissue of

@ -1043,3 +1043,28 @@ lt:
description_choose_project: Projects
description_date_from: Enter start date
label_deleted_custom_field: (deleted custom field)
label_checked: checked
label_calendar_show: Show Calendar
description_compare_to: Compare to version
description_active: Active?
label_main_menu: Side Menu
label_enable_multi_select: Toggle multiselect
label_remove_columns: Remove selected columns
notice_account_inactive: Your account has not yet been activated. To activate your account, click on the link that was emailed to you.
description_enter_text: Enter text
label_content: Content
description_current_position: "You are here:"
label_top_menu: Top Menu
description_compare_from: Compare from version
label_add_columns: Add selected columns
button_remove_widget: Remove widget
label_modules: Modules
notice_account_update_failed: Account setting could not be safed. Please have a look at your account page.
description_enter_number: Enter number
description_select_issue: Select issue
label_table_of_contents: Table of Contents
field_impaired: Accessibility mode
search_input_placeholder: search ...
text_analyze: "Further analyze: %{subject}"
label_project_view_all: View all projects
description_subissue: Subissue of

@ -978,3 +978,28 @@ lv:
description_choose_project: Projects
description_date_from: Enter start date
label_deleted_custom_field: (deleted custom field)
label_checked: checked
label_calendar_show: Show Calendar
description_compare_to: Compare to version
description_active: Active?
label_main_menu: Side Menu
label_enable_multi_select: Toggle multiselect
label_remove_columns: Remove selected columns
notice_account_inactive: Your account has not yet been activated. To activate your account, click on the link that was emailed to you.
description_enter_text: Enter text
label_content: Content
description_current_position: "You are here:"
label_top_menu: Top Menu
description_compare_from: Compare from version
label_add_columns: Add selected columns
button_remove_widget: Remove widget
label_modules: Modules
notice_account_update_failed: Account setting could not be safed. Please have a look at your account page.
description_enter_number: Enter number
description_select_issue: Select issue
label_table_of_contents: Table of Contents
field_impaired: Accessibility mode
search_input_placeholder: search ...
text_analyze: "Further analyze: %{subject}"
label_project_view_all: View all projects
description_subissue: Subissue of

@ -983,3 +983,28 @@ mk:
description_choose_project: Projects
description_date_from: Enter start date
label_deleted_custom_field: (deleted custom field)
label_checked: checked
label_calendar_show: Show Calendar
description_compare_to: Compare to version
description_active: Active?
label_main_menu: Side Menu
label_enable_multi_select: Toggle multiselect
label_remove_columns: Remove selected columns
notice_account_inactive: Your account has not yet been activated. To activate your account, click on the link that was emailed to you.
description_enter_text: Enter text
label_content: Content
description_current_position: "You are here:"
label_top_menu: Top Menu
description_compare_from: Compare from version
label_add_columns: Add selected columns
button_remove_widget: Remove widget
label_modules: Modules
notice_account_update_failed: Account setting could not be safed. Please have a look at your account page.
description_enter_number: Enter number
description_select_issue: Select issue
label_table_of_contents: Table of Contents
field_impaired: Accessibility mode
search_input_placeholder: search ...
text_analyze: "Further analyze: %{subject}"
label_project_view_all: View all projects
description_subissue: Subissue of

@ -984,3 +984,28 @@ mn:
description_choose_project: Projects
description_date_from: Enter start date
label_deleted_custom_field: (deleted custom field)
label_checked: checked
label_calendar_show: Show Calendar
description_compare_to: Compare to version
description_active: Active?
label_main_menu: Side Menu
label_enable_multi_select: Toggle multiselect
label_remove_columns: Remove selected columns
notice_account_inactive: Your account has not yet been activated. To activate your account, click on the link that was emailed to you.
description_enter_text: Enter text
label_content: Content
description_current_position: "You are here:"
label_top_menu: Top Menu
description_compare_from: Compare from version
label_add_columns: Add selected columns
button_remove_widget: Remove widget
label_modules: Modules
notice_account_update_failed: Account setting could not be safed. Please have a look at your account page.
description_enter_number: Enter number
description_select_issue: Select issue
label_table_of_contents: Table of Contents
field_impaired: Accessibility mode
search_input_placeholder: search ...
text_analyze: "Further analyze: %{subject}"
label_project_view_all: View all projects
description_subissue: Subissue of

@ -965,3 +965,28 @@ nl:
description_choose_project: Projects
description_date_from: Enter start date
label_deleted_custom_field: (deleted custom field)
label_checked: checked
label_calendar_show: Show Calendar
description_compare_to: Compare to version
description_active: Active?
label_main_menu: Side Menu
label_enable_multi_select: Toggle multiselect
label_remove_columns: Remove selected columns
notice_account_inactive: Your account has not yet been activated. To activate your account, click on the link that was emailed to you.
description_enter_text: Enter text
label_content: Content
description_current_position: "You are here:"
label_top_menu: Top Menu
description_compare_from: Compare from version
label_add_columns: Add selected columns
button_remove_widget: Remove widget
label_modules: Modules
notice_account_update_failed: Account setting could not be safed. Please have a look at your account page.
description_enter_number: Enter number
description_select_issue: Select issue
label_table_of_contents: Table of Contents
field_impaired: Accessibility mode
search_input_placeholder: search ...
text_analyze: "Further analyze: %{subject}"
label_project_view_all: View all projects
description_subissue: Subissue of

@ -970,3 +970,28 @@
description_choose_project: Projects
description_date_from: Enter start date
label_deleted_custom_field: (deleted custom field)
label_checked: checked
label_calendar_show: Show Calendar
description_compare_to: Compare to version
description_active: Active?
label_main_menu: Side Menu
label_enable_multi_select: Toggle multiselect
label_remove_columns: Remove selected columns
notice_account_inactive: Your account has not yet been activated. To activate your account, click on the link that was emailed to you.
description_enter_text: Enter text
label_content: Content
description_current_position: "You are here:"
label_top_menu: Top Menu
description_compare_from: Compare from version
label_add_columns: Add selected columns
button_remove_widget: Remove widget
label_modules: Modules
notice_account_update_failed: Account setting could not be safed. Please have a look at your account page.
description_enter_number: Enter number
description_select_issue: Select issue
label_table_of_contents: Table of Contents
field_impaired: Accessibility mode
search_input_placeholder: search ...
text_analyze: "Further analyze: %{subject}"
label_project_view_all: View all projects
description_subissue: Subissue of

@ -1000,3 +1000,28 @@ pl:
description_choose_project: Projects
description_date_from: Enter start date
label_deleted_custom_field: (deleted custom field)
label_checked: checked
label_calendar_show: Show Calendar
description_compare_to: Compare to version
description_active: Active?
label_main_menu: Side Menu
label_enable_multi_select: Toggle multiselect
label_remove_columns: Remove selected columns
notice_account_inactive: Your account has not yet been activated. To activate your account, click on the link that was emailed to you.
description_enter_text: Enter text
label_content: Content
description_current_position: "You are here:"
label_top_menu: Top Menu
description_compare_from: Compare from version
label_add_columns: Add selected columns
button_remove_widget: Remove widget
label_modules: Modules
notice_account_update_failed: Account setting could not be safed. Please have a look at your account page.
description_enter_number: Enter number
description_select_issue: Select issue
label_table_of_contents: Table of Contents
field_impaired: Accessibility mode
search_input_placeholder: search ...
text_analyze: "Further analyze: %{subject}"
label_project_view_all: View all projects
description_subissue: Subissue of

@ -1007,3 +1007,28 @@ pt-BR:
description_choose_project: Projects
description_date_from: Enter start date
label_deleted_custom_field: (deleted custom field)
label_checked: checked
label_calendar_show: Show Calendar
description_compare_to: Compare to version
description_active: Active?
label_main_menu: Side Menu
label_enable_multi_select: Toggle multiselect
label_remove_columns: Remove selected columns
notice_account_inactive: Your account has not yet been activated. To activate your account, click on the link that was emailed to you.
description_enter_text: Enter text
label_content: Content
description_current_position: "You are here:"
label_top_menu: Top Menu
description_compare_from: Compare from version
label_add_columns: Add selected columns
button_remove_widget: Remove widget
label_modules: Modules
notice_account_update_failed: Account setting could not be safed. Please have a look at your account page.
description_enter_number: Enter number
description_select_issue: Select issue
label_table_of_contents: Table of Contents
field_impaired: Accessibility mode
search_input_placeholder: search ...
text_analyze: "Further analyze: %{subject}"
label_project_view_all: View all projects
description_subissue: Subissue of

@ -987,3 +987,28 @@ pt:
description_choose_project: Projects
description_date_from: Enter start date
label_deleted_custom_field: (deleted custom field)
label_checked: checked
label_calendar_show: Show Calendar
description_compare_to: Compare to version
description_active: Active?
label_main_menu: Side Menu
label_enable_multi_select: Toggle multiselect
label_remove_columns: Remove selected columns
notice_account_inactive: Your account has not yet been activated. To activate your account, click on the link that was emailed to you.
description_enter_text: Enter text
label_content: Content
description_current_position: "You are here:"
label_top_menu: Top Menu
description_compare_from: Compare from version
label_add_columns: Add selected columns
button_remove_widget: Remove widget
label_modules: Modules
notice_account_update_failed: Account setting could not be safed. Please have a look at your account page.
description_enter_number: Enter number
description_select_issue: Select issue
label_table_of_contents: Table of Contents
field_impaired: Accessibility mode
search_input_placeholder: search ...
text_analyze: "Further analyze: %{subject}"
label_project_view_all: View all projects
description_subissue: Subissue of

@ -976,3 +976,28 @@ ro:
description_choose_project: Projects
description_date_from: Enter start date
label_deleted_custom_field: (deleted custom field)
label_checked: checked
label_calendar_show: Show Calendar
description_compare_to: Compare to version
description_active: Active?
label_main_menu: Side Menu
label_enable_multi_select: Toggle multiselect
label_remove_columns: Remove selected columns
notice_account_inactive: Your account has not yet been activated. To activate your account, click on the link that was emailed to you.
description_enter_text: Enter text
label_content: Content
description_current_position: "You are here:"
label_top_menu: Top Menu
description_compare_from: Compare from version
label_add_columns: Add selected columns
button_remove_widget: Remove widget
label_modules: Modules
notice_account_update_failed: Account setting could not be safed. Please have a look at your account page.
description_enter_number: Enter number
description_select_issue: Select issue
label_table_of_contents: Table of Contents
field_impaired: Accessibility mode
search_input_placeholder: search ...
text_analyze: "Further analyze: %{subject}"
label_project_view_all: View all projects
description_subissue: Subissue of

@ -1096,3 +1096,28 @@ ru:
description_choose_project: Projects
description_date_from: Enter start date
label_deleted_custom_field: (deleted custom field)
label_checked: checked
label_calendar_show: Show Calendar
description_compare_to: Compare to version
description_active: Active?
label_main_menu: Side Menu
label_enable_multi_select: Toggle multiselect
label_remove_columns: Remove selected columns
notice_account_inactive: Your account has not yet been activated. To activate your account, click on the link that was emailed to you.
description_enter_text: Enter text
label_content: Content
description_current_position: "You are here:"
label_top_menu: Top Menu
description_compare_from: Compare from version
label_add_columns: Add selected columns
button_remove_widget: Remove widget
label_modules: Modules
notice_account_update_failed: Account setting could not be safed. Please have a look at your account page.
description_enter_number: Enter number
description_select_issue: Select issue
label_table_of_contents: Table of Contents
field_impaired: Accessibility mode
search_input_placeholder: search ...
text_analyze: "Further analyze: %{subject}"
label_project_view_all: View all projects
description_subissue: Subissue of

@ -978,3 +978,28 @@ sk:
description_choose_project: Projects
description_date_from: Enter start date
label_deleted_custom_field: (deleted custom field)
label_checked: checked
label_calendar_show: Show Calendar
description_compare_to: Compare to version
description_active: Active?
label_main_menu: Side Menu
label_enable_multi_select: Toggle multiselect
label_remove_columns: Remove selected columns
notice_account_inactive: Your account has not yet been activated. To activate your account, click on the link that was emailed to you.
description_enter_text: Enter text
label_content: Content
description_current_position: "You are here:"
label_top_menu: Top Menu
description_compare_from: Compare from version
label_add_columns: Add selected columns
button_remove_widget: Remove widget
label_modules: Modules
notice_account_update_failed: Account setting could not be safed. Please have a look at your account page.
description_enter_number: Enter number
description_select_issue: Select issue
label_table_of_contents: Table of Contents
field_impaired: Accessibility mode
search_input_placeholder: search ...
text_analyze: "Further analyze: %{subject}"
label_project_view_all: View all projects
description_subissue: Subissue of

@ -979,3 +979,28 @@ sl:
description_choose_project: Projects
description_date_from: Enter start date
label_deleted_custom_field: (deleted custom field)
label_checked: checked
label_calendar_show: Show Calendar
description_compare_to: Compare to version
description_active: Active?
label_main_menu: Side Menu
label_enable_multi_select: Toggle multiselect
label_remove_columns: Remove selected columns
notice_account_inactive: Your account has not yet been activated. To activate your account, click on the link that was emailed to you.
description_enter_text: Enter text
label_content: Content
description_current_position: "You are here:"
label_top_menu: Top Menu
description_compare_from: Compare from version
label_add_columns: Add selected columns
button_remove_widget: Remove widget
label_modules: Modules
notice_account_update_failed: Account setting could not be safed. Please have a look at your account page.
description_enter_number: Enter number
description_select_issue: Select issue
label_table_of_contents: Table of Contents
field_impaired: Accessibility mode
search_input_placeholder: search ...
text_analyze: "Further analyze: %{subject}"
label_project_view_all: View all projects
description_subissue: Subissue of

@ -983,3 +983,28 @@ sr-YU:
description_choose_project: Projects
description_date_from: Enter start date
label_deleted_custom_field: (deleted custom field)
label_checked: checked
label_calendar_show: Show Calendar
description_compare_to: Compare to version
description_active: Active?
label_main_menu: Side Menu
label_enable_multi_select: Toggle multiselect
label_remove_columns: Remove selected columns
notice_account_inactive: Your account has not yet been activated. To activate your account, click on the link that was emailed to you.
description_enter_text: Enter text
label_content: Content
description_current_position: "You are here:"
label_top_menu: Top Menu
description_compare_from: Compare from version
label_add_columns: Add selected columns
button_remove_widget: Remove widget
label_modules: Modules
notice_account_update_failed: Account setting could not be safed. Please have a look at your account page.
description_enter_number: Enter number
description_select_issue: Select issue
label_table_of_contents: Table of Contents
field_impaired: Accessibility mode
search_input_placeholder: search ...
text_analyze: "Further analyze: %{subject}"
label_project_view_all: View all projects
description_subissue: Subissue of

@ -984,3 +984,28 @@ sr:
description_choose_project: Projects
description_date_from: Enter start date
label_deleted_custom_field: (deleted custom field)
label_checked: checked
label_calendar_show: Show Calendar
description_compare_to: Compare to version
description_active: Active?
label_main_menu: Side Menu
label_enable_multi_select: Toggle multiselect
label_remove_columns: Remove selected columns
notice_account_inactive: Your account has not yet been activated. To activate your account, click on the link that was emailed to you.
description_enter_text: Enter text
label_content: Content
description_current_position: "You are here:"
label_top_menu: Top Menu
description_compare_from: Compare from version
label_add_columns: Add selected columns
button_remove_widget: Remove widget
label_modules: Modules
notice_account_update_failed: Account setting could not be safed. Please have a look at your account page.
description_enter_number: Enter number
description_select_issue: Select issue
label_table_of_contents: Table of Contents
field_impaired: Accessibility mode
search_input_placeholder: search ...
text_analyze: "Further analyze: %{subject}"
label_project_view_all: View all projects
description_subissue: Subissue of

@ -1025,3 +1025,28 @@ sv:
description_choose_project: Projects
description_date_from: Enter start date
label_deleted_custom_field: (deleted custom field)
label_checked: checked
label_calendar_show: Show Calendar
description_compare_to: Compare to version
description_active: Active?
label_main_menu: Side Menu
label_enable_multi_select: Toggle multiselect
label_remove_columns: Remove selected columns
notice_account_inactive: Your account has not yet been activated. To activate your account, click on the link that was emailed to you.
description_enter_text: Enter text
label_content: Content
description_current_position: "You are here:"
label_top_menu: Top Menu
description_compare_from: Compare from version
label_add_columns: Add selected columns
button_remove_widget: Remove widget
label_modules: Modules
notice_account_update_failed: Account setting could not be safed. Please have a look at your account page.
description_enter_number: Enter number
description_select_issue: Select issue
label_table_of_contents: Table of Contents
field_impaired: Accessibility mode
search_input_placeholder: search ...
text_analyze: "Further analyze: %{subject}"
label_project_view_all: View all projects
description_subissue: Subissue of

@ -980,3 +980,28 @@ th:
description_choose_project: Projects
description_date_from: Enter start date
label_deleted_custom_field: (deleted custom field)
label_checked: checked
label_calendar_show: Show Calendar
description_compare_to: Compare to version
description_active: Active?
label_main_menu: Side Menu
label_enable_multi_select: Toggle multiselect
label_remove_columns: Remove selected columns
notice_account_inactive: Your account has not yet been activated. To activate your account, click on the link that was emailed to you.
description_enter_text: Enter text
label_content: Content
description_current_position: "You are here:"
label_top_menu: Top Menu
description_compare_from: Compare from version
label_add_columns: Add selected columns
button_remove_widget: Remove widget
label_modules: Modules
notice_account_update_failed: Account setting could not be safed. Please have a look at your account page.
description_enter_number: Enter number
description_select_issue: Select issue
label_table_of_contents: Table of Contents
field_impaired: Accessibility mode
search_input_placeholder: search ...
text_analyze: "Further analyze: %{subject}"
label_project_view_all: View all projects
description_subissue: Subissue of

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

Loading…
Cancel
Save