summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--redmine/app/controllers/account_controller.rb22
-rw-r--r--redmine/app/controllers/application.rb10
-rw-r--r--redmine/app/controllers/enumerations_controller.rb7
-rw-r--r--redmine/app/controllers/help_controller.rb2
-rw-r--r--redmine/app/controllers/projects_controller.rb2
-rw-r--r--redmine/app/controllers/roles_controller.rb7
-rw-r--r--redmine/app/helpers/application_helper.rb12
-rw-r--r--redmine/app/helpers/search_filter_helper.rb25
-rw-r--r--redmine/app/models/auth_source_ldap.rb2
-rw-r--r--redmine/app/models/enumeration.rb12
-rw-r--r--redmine/app/models/issue_status.rb4
-rw-r--r--redmine/app/models/mailer.rb3
-rw-r--r--redmine/app/models/member.rb18
-rw-r--r--redmine/app/models/news.rb18
-rw-r--r--redmine/app/models/permission.rb32
-rw-r--r--redmine/app/models/role.rb10
-rw-r--r--redmine/app/models/tracker.rb4
-rw-r--r--redmine/app/models/user.rb3
-rw-r--r--redmine/app/views/account/my_account.rhtml8
-rw-r--r--redmine/app/views/account/register.rhtml16
-rw-r--r--redmine/app/views/admin/info.rhtml2
-rw-r--r--redmine/app/views/custom_fields/list.rhtml2
-rw-r--r--redmine/app/views/documents/_form.rhtml2
-rw-r--r--redmine/app/views/documents/edit.rhtml4
-rw-r--r--redmine/app/views/documents/show.rhtml20
-rw-r--r--redmine/app/views/enumerations/_form.rhtml2
-rw-r--r--redmine/app/views/enumerations/edit.rhtml6
-rw-r--r--redmine/app/views/enumerations/list.rhtml17
-rw-r--r--redmine/app/views/enumerations/new.rhtml4
-rw-r--r--redmine/app/views/issue_categories/_form.rhtml2
-rw-r--r--redmine/app/views/issue_categories/edit.rhtml4
-rw-r--r--redmine/app/views/issue_statuses/_form.rhtml8
-rw-r--r--redmine/app/views/issue_statuses/edit.rhtml4
-rw-r--r--redmine/app/views/issue_statuses/list.rhtml14
-rw-r--r--redmine/app/views/issue_statuses/new.rhtml4
-rw-r--r--redmine/app/views/issues/_list_simple.rhtml48
-rw-r--r--redmine/app/views/issues/change_status.rhtml13
-rw-r--r--redmine/app/views/issues/edit.rhtml21
-rw-r--r--redmine/app/views/issues/show.rhtml43
-rw-r--r--redmine/app/views/layouts/base.rhtml60
-rw-r--r--redmine/app/views/mailer/_issue.rhtml4
-rw-r--r--redmine/app/views/news/_form.rhtml6
-rw-r--r--redmine/app/views/news/edit.rhtml4
-rw-r--r--redmine/app/views/news/show.rhtml6
-rw-r--r--redmine/app/views/projects/_form.rhtml12
-rw-r--r--redmine/app/views/projects/add.rhtml4
-rw-r--r--redmine/app/views/projects/add_document.rhtml22
-rw-r--r--redmine/app/views/projects/add_file.rhtml9
-rw-r--r--redmine/app/views/projects/add_issue.rhtml21
-rw-r--r--redmine/app/views/projects/add_news.rhtml4
-rw-r--r--redmine/app/views/projects/add_version.rhtml4
-rw-r--r--redmine/app/views/projects/changelog.rhtml2
-rw-r--r--redmine/app/views/projects/destroy.rhtml8
-rw-r--r--redmine/app/views/projects/list.rhtml8
-rw-r--r--redmine/app/views/projects/list_documents.rhtml6
-rw-r--r--redmine/app/views/projects/list_files.rhtml14
-rw-r--r--redmine/app/views/projects/list_issues.rhtml83
-rw-r--r--redmine/app/views/projects/list_members.rhtml2
-rw-r--r--redmine/app/views/projects/list_news.rhtml6
-rw-r--r--redmine/app/views/projects/settings.rhtml30
-rw-r--r--redmine/app/views/projects/show.rhtml27
-rw-r--r--redmine/app/views/reports/_simple.rhtml6
-rw-r--r--redmine/app/views/reports/issue_report.rhtml8
-rw-r--r--redmine/app/views/roles/_form.rhtml16
-rw-r--r--redmine/app/views/roles/edit.rhtml6
-rw-r--r--redmine/app/views/roles/list.rhtml8
-rw-r--r--redmine/app/views/roles/new.rhtml7
-rw-r--r--redmine/app/views/roles/workflow.rhtml20
-rw-r--r--redmine/app/views/trackers/_form.rhtml4
-rw-r--r--redmine/app/views/trackers/edit.rhtml4
-rw-r--r--redmine/app/views/trackers/list.rhtml8
-rw-r--r--redmine/app/views/trackers/new.rhtml4
-rw-r--r--redmine/app/views/users/_form.rhtml20
-rw-r--r--redmine/app/views/users/add.rhtml4
-rw-r--r--redmine/app/views/users/edit.rhtml5
-rw-r--r--redmine/app/views/users/list.rhtml24
-rw-r--r--redmine/app/views/versions/_form.rhtml6
-rw-r--r--redmine/app/views/versions/edit.rhtml4
-rw-r--r--redmine/app/views/welcome/index.rhtml13
-rw-r--r--redmine/db/migrate/001_setup.rb89
-rw-r--r--redmine/db/migrate/002_default_configuration.rb61
-rw-r--r--redmine/db/redmine_demo.dbbin40960 -> 0 bytes
-rw-r--r--redmine/doc/CHANGELOG9
-rw-r--r--redmine/doc/docbook/fr/images/issues_list.pngbin0 -> 8233 bytes
-rw-r--r--redmine/doc/docbook/fr/images/users_list.pngbin0 -> 6502 bytes
-rw-r--r--redmine/doc/docbook/fr/images/workflow.pngbin0 -> 6503 bytes
-rw-r--r--redmine/doc/docbook/fr/redmine-userdoc-fr.xml400
-rw-r--r--redmine/lang/en.yml1
-rw-r--r--redmine/lang/fr.yml103
-rw-r--r--redmine/lib/tasks/load_default_data.rake43
-rw-r--r--redmine/test/fixtures/permissions.yml84
-rw-r--r--redmine/test/integration/account_test.rb4
92 files changed, 1093 insertions, 647 deletions
diff --git a/redmine/app/controllers/account_controller.rb b/redmine/app/controllers/account_controller.rb
index b156bfd5b..bc65622b8 100644
--- a/redmine/app/controllers/account_controller.rb
+++ b/redmine/app/controllers/account_controller.rb
@@ -41,7 +41,7 @@ class AccountController < ApplicationController
self.logged_in_user = user
redirect_back_or_default :controller => 'account', :action => 'my_page'
else
- flash[:notice] = l(:notice_account_invalid_creditentials)
+ flash.now[:notice] = l(:notice_account_invalid_creditentials)
end
end
end
@@ -64,7 +64,7 @@ class AccountController < ApplicationController
@user = self.logged_in_user
if request.post? and @user.update_attributes(@params[:user])
set_localization
- flash[:notice] = l(:notice_account_updated)
+ flash.now[:notice] = l(:notice_account_updated)
self.logged_in_user.reload
end
end
@@ -72,11 +72,12 @@ class AccountController < ApplicationController
# Change logged in user's password
def change_password
@user = self.logged_in_user
+ flash.now[:notice] = l(:notice_can_t_change_password) and render :action => 'my_account' and return if @user.auth_source_id
if @user.check_password?(@params[:password])
@user.password, @user.password_confirmation = params[:new_password], params[:new_password_confirmation]
- flash[:notice] = l(:notice_account_password_updated) if @user.save
+ flash.now[:notice] = l(:notice_account_password_updated) if @user.save
else
- flash[:notice] = l(:notice_account_wrong_password)
+ flash.now[:notice] = l(:notice_account_wrong_password)
end
render :action => 'my_account'
end
@@ -100,11 +101,16 @@ class AccountController < ApplicationController
return
else
if request.post?
- user = User.find_by_mail(params[:mail])
- flash[:notice] = l(:notice_account_unknown_email) and return unless user
+ user = User.find_by_mail(params[:mail])
+ # user not found in db
+ flash.now[:notice] = l(:notice_account_unknown_email) and return unless user
+ # user uses an external authentification
+ flash.now[:notice] = l(:notice_can_t_change_password) and return if user.auth_source_id
+ # create a new token for password recovery
token = Token.new(:user => user, :action => "recovery")
if token.save
- Mailer.set_language_if_valid(Localization.lang)
+ # send token to user via email
+ Mailer.set_language_if_valid(user.language)
Mailer.deliver_lost_password(token)
flash[:notice] = l(:notice_account_lost_email_sent)
redirect_to :action => 'login'
@@ -143,7 +149,7 @@ class AccountController < ApplicationController
@user.custom_values = @custom_values
token = Token.new(:user => @user, :action => "register")
if @user.save and token.save
- Mailer.set_language_if_valid(Localization.lang)
+ Mailer.set_language_if_valid(@user.language)
Mailer.deliver_register(token)
flash[:notice] = l(:notice_account_register_done)
redirect_to :controller => ''
diff --git a/redmine/app/controllers/application.rb b/redmine/app/controllers/application.rb
index adae23550..8acbb0926 100644
--- a/redmine/app/controllers/application.rb
+++ b/redmine/app/controllers/application.rb
@@ -37,21 +37,19 @@ class ApplicationController < ActionController::Base
end
def set_localization
- Localization.lang = begin
- if self.logged_in_user and Localization.langs.keys.include? self.logged_in_user.language
+ lang = begin
+ if self.logged_in_user and self.logged_in_user.language and !self.logged_in_user.language.empty? and GLoc.valid_languages.include? self.logged_in_user.language.to_sym
self.logged_in_user.language
elsif request.env['HTTP_ACCEPT_LANGUAGE']
accept_lang = HTTPUtils.parse_qvalues(request.env['HTTP_ACCEPT_LANGUAGE']).first.split('-').first
- if Localization.langs.keys.include? accept_lang
+ if accept_lang and !accept_lang.empty? and GLoc.valid_languages.include? accept_lang.to_sym
accept_lang
end
end
rescue
nil
end || $RDM_DEFAULT_LANG
-
- set_language_if_valid(Localization.lang)
-
+ set_language_if_valid(lang)
end
def require_login
diff --git a/redmine/app/controllers/enumerations_controller.rb b/redmine/app/controllers/enumerations_controller.rb
index 01664c85e..8e5be0a20 100644
--- a/redmine/app/controllers/enumerations_controller.rb
+++ b/redmine/app/controllers/enumerations_controller.rb
@@ -38,7 +38,7 @@ class EnumerationsController < ApplicationController
def create
@enumeration = Enumeration.new(params[:enumeration])
if @enumeration.save
- flash[:notice] = 'Enumeration was successfully created.'
+ flash[:notice] = l(:notice_successful_create)
redirect_to :action => 'list', :opt => @enumeration.opt
else
render :action => 'new'
@@ -52,7 +52,7 @@ class EnumerationsController < ApplicationController
def update
@enumeration = Enumeration.find(params[:id])
if @enumeration.update_attributes(params[:enumeration])
- flash[:notice] = 'Enumeration was successfully updated.'
+ flash[:notice] = l(:notice_successful_update)
redirect_to :action => 'list', :opt => @enumeration.opt
else
render :action => 'edit'
@@ -60,7 +60,8 @@ class EnumerationsController < ApplicationController
end
def destroy
- Enumeration.find(params[:id]).destroy
+ Enumeration.find(params[:id]).destroy
+ flash[:notice] = l(:notice_successful_delete)
redirect_to :action => 'list'
rescue
flash[:notice] = "Unable to delete enumeration"
diff --git a/redmine/app/controllers/help_controller.rb b/redmine/app/controllers/help_controller.rb
index e51d077a1..6fde039d5 100644
--- a/redmine/app/controllers/help_controller.rb
+++ b/redmine/app/controllers/help_controller.rb
@@ -31,7 +31,7 @@ class HelpController < ApplicationController
end
end
# choose language according to available help translations
- lang = (@help_config['langs'].include? Localization.lang) ? Localization.lang : @help_config['langs'].first
+ lang = (@help_config['langs'].include? current_language) ? current_language : @help_config['langs'].first
if template
redirect_to "/manual/#{lang}/#{template}"
diff --git a/redmine/app/controllers/projects_controller.rb b/redmine/app/controllers/projects_controller.rb
index 3c4d806b5..3d45f7268 100644
--- a/redmine/app/controllers/projects_controller.rb
+++ b/redmine/app/controllers/projects_controller.rb
@@ -227,7 +227,7 @@ class ProjectsController < ApplicationController
CSV::Writer.generate(export, ',') do |csv|
csv << %w(Id Status Tracker Subject Author Created Updated)
@issues.each do |issue|
- csv << [issue.id, issue.status.name, issue.tracker.name, issue.subject, issue.author.display_name, _('(time)', issue.created_on), _('(time)', issue.updated_on)]
+ csv << [issue.id, issue.status.name, issue.tracker.name, issue.subject, issue.author.display_name, l_datetime(issue.created_on), l_datetime(issue.updated_on)]
end
end
export.rewind
diff --git a/redmine/app/controllers/roles_controller.rb b/redmine/app/controllers/roles_controller.rb
index 657f62e05..0e26ff56c 100644
--- a/redmine/app/controllers/roles_controller.rb
+++ b/redmine/app/controllers/roles_controller.rb
@@ -37,7 +37,7 @@ class RolesController < ApplicationController
redirect_to :action => 'list'
end
end
- @permissions = Permission.find(:all, :order => 'sort ASC')
+ @permissions = Permission.find(:all, :conditions => ["is_public=?", false], :order => 'sort ASC')
end
def edit
@@ -48,7 +48,7 @@ class RolesController < ApplicationController
flash[:notice] = 'Role was successfully updated.'
redirect_to :action => 'list'
end
- @permissions = Permission.find(:all, :order => 'sort ASC')
+ @permissions = Permission.find(:all, :conditions => ["is_public=?", false], :order => 'sort ASC')
end
def destroy
@@ -61,8 +61,7 @@ class RolesController < ApplicationController
redirect_to :action => 'list'
end
- def workflow
-
+ def workflow
@role = Role.find_by_id(params[:role_id])
@tracker = Tracker.find_by_id(params[:tracker_id])
diff --git a/redmine/app/helpers/application_helper.rb b/redmine/app/helpers/application_helper.rb
index ddb846073..6e395d3da 100644
--- a/redmine/app/helpers/application_helper.rb
+++ b/redmine/app/helpers/application_helper.rb
@@ -50,18 +50,18 @@ module ApplicationHelper
end
def format_date(date)
- _('(date)', date) if date
+ l_date(date) if date
end
def format_time(time)
- _('(time)', time) if time
+ l_datetime(time) if time
end
def pagination_links_full(paginator, options={}, html_options={})
html =''
- html << link_to(('&#171; ' + _('Previous') ), { :page => paginator.current.previous }) + ' ' if paginator.current.previous
+ html << link_to(('&#171; ' + l(:label_previous) ), { :page => paginator.current.previous }) + ' ' if paginator.current.previous
html << (pagination_links(paginator, options, html_options) || '')
- html << ' ' + link_to((_('Next') + ' &#187;'), { :page => paginator.current.next }) if paginator.current.next
+ html << ' ' + link_to((l(:label_next) + ' &#187;'), { :page => paginator.current.next }) if paginator.current.next
html
end
@@ -90,4 +90,8 @@ module ApplicationHelper
""
end
end
+
+ def lang_options_for_select
+ GLoc.valid_languages.collect {|lang| [ l_lang_name(lang.to_s, lang), lang.to_s]}
+ end
end
diff --git a/redmine/app/helpers/search_filter_helper.rb b/redmine/app/helpers/search_filter_helper.rb
index 98b281225..62ff5f291 100644
--- a/redmine/app/helpers/search_filter_helper.rb
+++ b/redmine/app/helpers/search_filter_helper.rb
@@ -58,42 +58,43 @@ module SearchFilterHelper
def search_filter_init_list_issues
search_filter_criteria('status_id') {
- [ [_('[Open]'), "O", ["issue_statuses.is_closed=?", false]],
- [_('[All]'), "A", nil]
+ [ [('['+l(:label_open_issues_plural)+']'), "O", ["issue_statuses.is_closed=?", false]],
+ [('['+l(:label_closed_issues_plural)+']'), "C", ["issue_statuses.is_closed=?", true]],
+ [('['+l(:label_all)+']'), "A", nil]
] + IssueStatus.find(:all).collect {|s| [s.name, s.id, ["issues.status_id=?", s.id]] }
}
search_filter_criteria('tracker_id') {
- [ [_('[All]'), "A", nil]
+ [ [('['+l(:label_all)+']'), "A", nil]
] + Tracker.find(:all).collect {|s| [s.name, s.id, ["issues.tracker_id=?", s.id]] }
}
search_filter_criteria('priority_id') {
- [ [_('[All]'), "A", nil]
+ [ [('['+l(:label_all)+']'), "A", nil]
] + Enumeration.find(:all, :conditions => ['opt=?','IPRI']).collect {|s| [s.name, s.id, ["issues.priority_id=?", s.id]] }
}
search_filter_criteria('category_id') {
- [ [_('[All]'), "A", nil],
- [_('[None]'), "N", ["issues.category_id is null"]]
+ [ [('['+l(:label_all)+']'), "A", nil],
+ [('['+l(:label_none)+']'), "N", ["issues.category_id is null"]]
] + @project.issue_categories.find(:all).collect {|s| [s.name, s.id, ["issues.category_id=?", s.id]] }
}
search_filter_criteria('fixed_version_id') {
- [ [_('[All]'), "A", nil],
- [_('[None]'), "N", ["issues.fixed_version_id is null"]]
+ [ [('['+l(:label_all)+']'), "A", nil],
+ [('['+l(:label_none)+']'), "N", ["issues.fixed_version_id is null"]]
] + @project.versions.collect {|s| [s.name, s.id, ["issues.fixed_version_id=?", s.id]] }
}
search_filter_criteria('assigned_to_id') {
- [ [_('[All]'), "A", nil],
- [_('[None]'), "N", ["issues.assigned_to_id is null"]]
+ [ [('['+l(:label_all)+']'), "A", nil],
+ [('['+l(:label_none)+']'), "N", ["issues.assigned_to_id is null"]]
] + @project.users.collect {|s| [s.display_name, s.id, ["issues.assigned_to_id=?", s.id]] }
}
search_filter_criteria('subproject_id') {
- [ [_('[None]'), "N", ["issues.project_id=?", @project.id]],
- [_('[All]'), "A", ["(issues.project_id=? or projects.parent_id=?)", @project.id, @project.id]]
+ [ [('['+l(:label_none)+']'), "N", ["issues.project_id=?", @project.id]],
+ [('['+l(:label_all)+']'), "A", ["(issues.project_id=? or projects.parent_id=?)", @project.id, @project.id]]
]
}
end
diff --git a/redmine/app/models/auth_source_ldap.rb b/redmine/app/models/auth_source_ldap.rb
index 9579a1094..895cf1c63 100644
--- a/redmine/app/models/auth_source_ldap.rb
+++ b/redmine/app/models/auth_source_ldap.rb
@@ -30,7 +30,7 @@ class AuthSourceLdap < AuthSource
# get user's DN
ldap_con = initialize_ldap_con(self.account, self.account_password)
login_filter = Net::LDAP::Filter.eq( self.attr_login, login )
- object_filter = Net::LDAP::Filter.eq( "objectClass", "organizationalPerson" )
+ object_filter = Net::LDAP::Filter.eq( "objectClass", "*" )
dn = String.new
ldap_con.search( :base => self.base_dn,
:filter => object_filter & login_filter,
diff --git a/redmine/app/models/enumeration.rb b/redmine/app/models/enumeration.rb
index 7f985d2f8..122da15c5 100644
--- a/redmine/app/models/enumeration.rb
+++ b/redmine/app/models/enumeration.rb
@@ -21,18 +21,14 @@ class Enumeration < ActiveRecord::Base
validates_presence_of :opt, :name
validates_uniqueness_of :name, :scope => [:opt]
- OPTIONS = [
- ["Issue priorities", "IPRI"],
- ["Document categories", "DCAT"]
- ].freeze
+ OPTIONS = {
+ "IPRI" => :enumeration_issue_priorities,
+ "DCAT" => :enumeration_doc_categories
+ }.freeze
def self.get_values(option)
find(:all, :conditions => ['opt=?', option])
end
-
- def name
- _ self.attributes['name']
- end
private
def check_integrity
diff --git a/redmine/app/models/issue_status.rb b/redmine/app/models/issue_status.rb
index ef9862092..426580987 100644
--- a/redmine/app/models/issue_status.rb
+++ b/redmine/app/models/issue_status.rb
@@ -38,10 +38,6 @@ class IssueStatus < ActiveRecord::Base
statuses
end
- def name
- _ self.attributes['name']
- end
-
private
def check_integrity
raise "Can't delete status" if Issue.find(:first, :conditions => ["status_id=?", self.id]) or IssueHistory.find(:first, :conditions => ["status_id=?", self.id])
diff --git a/redmine/app/models/mailer.rb b/redmine/app/models/mailer.rb
index bf4c85dbb..755764dc0 100644
--- a/redmine/app/models/mailer.rb
+++ b/redmine/app/models/mailer.rb
@@ -45,6 +45,5 @@ class Mailer < ActionMailer::Base
@from = 'redmine@somenet.foo'
@subject = "redMine account activation"
@body['token'] = token
- end
-
+ end
end
diff --git a/redmine/app/models/member.rb b/redmine/app/models/member.rb
index d37936561..1214b6443 100644
--- a/redmine/app/models/member.rb
+++ b/redmine/app/models/member.rb
@@ -16,14 +16,14 @@
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
class Member < ActiveRecord::Base
- belongs_to :user
- belongs_to :role
- belongs_to :project
-
- validates_presence_of :role, :user, :project
+ belongs_to :user
+ belongs_to :role
+ belongs_to :project
+
+ validates_presence_of :role, :user, :project
validates_uniqueness_of :user_id, :scope => :project_id
-
- def name
- self.user.display_name
- end
+
+ def name
+ self.user.display_name
+ end
end
diff --git a/redmine/app/models/news.rb b/redmine/app/models/news.rb
index c4884ace5..faafa7eef 100644
--- a/redmine/app/models/news.rb
+++ b/redmine/app/models/news.rb
@@ -16,13 +16,13 @@
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
class News < ActiveRecord::Base
- belongs_to :project
- belongs_to :author, :class_name => 'User', :foreign_key => 'author_id'
-
- validates_presence_of :title, :description
-
- # returns last created news
- def self.latest
- find(:all, :limit => 5, :include => [ :author, :project ], :order => "news.created_on DESC")
- end
+ belongs_to :project
+ belongs_to :author, :class_name => 'User', :foreign_key => 'author_id'
+
+ validates_presence_of :title, :description
+
+ # returns last created news
+ def self.latest
+ find(:all, :limit => 5, :include => [ :author, :project ], :order => "news.created_on DESC")
+ end
end
diff --git a/redmine/app/models/permission.rb b/redmine/app/models/permission.rb
index 164ca21b9..620974608 100644
--- a/redmine/app/models/permission.rb
+++ b/redmine/app/models/permission.rb
@@ -16,27 +16,27 @@
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
class Permission < ActiveRecord::Base
- has_and_belongs_to_many :roles
-
- validates_presence_of :controller, :action, :description
-
+ has_and_belongs_to_many :roles
+
+ validates_presence_of :controller, :action, :description
+
GROUPS = {
- 100 => "Project",
- 200 => "Membres",
- 300 => "Versions",
- 400 => "Issue categories",
- 1000 => "Issues",
- 1100 => "News",
- 1200 => "Documents",
- 1300 => "Files",
- }.freeze
+ 100 => :label_project,
+ 200 => :label_member_plural,
+ 300 => :label_version_plural,
+ 400 => :label_issue_category_plural,
+ 1000 => :label_issue_plural,
+ 1100 => :label_news_plural,
+ 1200 => :label_document_plural,
+ 1300 => :label_attachment_plural,
+ }.freeze
@@cached_perms_for_public = nil
@@cached_perms_for_roles = nil
- def name
- self.controller + "/" + self.action
- end
+ def name
+ self.controller + "/" + self.action
+ end
def group_id
(self.sort / 100)*100
diff --git a/redmine/app/models/role.rb b/redmine/app/models/role.rb
index ce880b5cc..6908095e9 100644
--- a/redmine/app/models/role.rb
+++ b/redmine/app/models/role.rb
@@ -17,13 +17,13 @@
class Role < ActiveRecord::Base
before_destroy :check_integrity
- has_and_belongs_to_many :permissions
+ has_and_belongs_to_many :permissions
has_many :workflows, :dependent => true
has_many :members
-
- validates_presence_of :name
- validates_uniqueness_of :name
-
+
+ validates_presence_of :name
+ validates_uniqueness_of :name
+
private
def check_integrity
raise "Can't delete role" if Member.find(:first, :conditions =>["role_id=?", self.id])
diff --git a/redmine/app/models/tracker.rb b/redmine/app/models/tracker.rb
index ca37eb939..a4376a351 100644
--- a/redmine/app/models/tracker.rb
+++ b/redmine/app/models/tracker.rb
@@ -24,10 +24,6 @@ class Tracker < ActiveRecord::Base
validates_presence_of :name
validates_uniqueness_of :name
- def name
- _ self.attributes['name']
- end
-
private
def check_integrity
raise "Can't delete tracker" if Issue.find(:first, :conditions => ["tracker_id=?", self.id])
diff --git a/redmine/app/models/user.rb b/redmine/app/models/user.rb
index ea313483c..ba489ac14 100644
--- a/redmine/app/models/user.rb
+++ b/redmine/app/models/user.rb
@@ -57,7 +57,7 @@ class User < ActiveRecord::Base
# user has an external authentication method
return nil unless user.auth_source.authenticate(login, password)
else
- # local authentication
+ # authentication with local password
return nil unless User.hash_password(password) == user.hashed_password
end
else
@@ -69,6 +69,7 @@ class User < ActiveRecord::Base
onthefly.language = $RDM_DEFAULT_LANG
if onthefly.save
user = find(:first, :conditions => ["login=?", login])
+ logger.info("User '#{user.login}' created on the fly.") if logger
end
end
end
diff --git a/redmine/app/views/account/my_account.rhtml b/redmine/app/views/account/my_account.rhtml
index 097e23181..4aa6e62db 100644
--- a/redmine/app/views/account/my_account.rhtml
+++ b/redmine/app/views/account/my_account.rhtml
@@ -23,7 +23,7 @@
<%= text_field 'user', 'mail' %></p>
<p><label for="user_language"><%=l(:field_language)%></label><br/>
- <%= select("user", "language", Localization.langs.invert) %></p>
+ <%= select("user", "language", lang_options_for_select) %></p>
<!--[eoform:user]-->
<p><%= check_box 'user', 'mail_notification' %> <label for="user_mail_notification"><%=l(:field_mail_notification)%></label></p>
@@ -34,7 +34,8 @@
</div>
-<div class="splitcontentright">
+<div class="splitcontentright">
+<% unless @user.auth_source_id %>
<div class="box">
<h3><%=l(:field_password)%></h3>
&nbsp;
@@ -51,5 +52,6 @@
<center><%= submit_tag l(:button_save) %></center>
<%= end_form_tag %>
- </div>
+ </div>
+<% end %>
</div> \ No newline at end of file
diff --git a/redmine/app/views/account/register.rhtml b/redmine/app/views/account/register.rhtml
index 2bdf380f9..3a953a254 100644
--- a/redmine/app/views/account/register.rhtml
+++ b/redmine/app/views/account/register.rhtml
@@ -1,7 +1,6 @@
<h2><%=l(:label_register)%></h2>
<%= start_form_tag %>
-
<%= error_messages_for 'user' %>
<div class="box">
@@ -25,22 +24,15 @@
<%= text_field 'user', 'mail' %></p>
<p><label for="user_language"><%=l(:field_language)%></label><br/>
-<%= select("user", "language", Localization.langs.invert) %></p>
+<%= select("user", "language", lang_options_for_select) %></p>
-<% for custom_value in @custom_values %>
- <div style="float:left;margin-right:10px;">
- <p><%= content_tag "label", custom_value.custom_field.name %>
- <% if custom_value.custom_field.is_required? %><span class="required">*</span><% end %>
- <br />
- <%= custom_field_tag custom_value %></p>
- </div>
+<% for custom_value in @custom_values %>
+ <p><%= custom_field_tag_with_label custom_value %></p>
<% end %>
-<div style="clear: both;"></div>
-
<p><%= check_box 'user', 'mail_notification' %> <label for="user_mail_notification"><%=l(:field_mail_notification)%></label></p>
<!--[eoform:user]-->
</div>
- <%= submit_tag l(:button_submit) %>
+<%= submit_tag l(:button_submit) %>
<%= end_form_tag %>
diff --git a/redmine/app/views/admin/info.rhtml b/redmine/app/views/admin/info.rhtml
index 03dddafb6..4777a151e 100644
--- a/redmine/app/views/admin/info.rhtml
+++ b/redmine/app/views/admin/info.rhtml
@@ -1,4 +1,4 @@
-<h2><%=_('Information')%></h2>
+<h2><%=l(:label_information_plural)%></h2>
<p><%=l(:field_version)%>: <strong><%= RDM_APP_NAME %> <%= RDM_APP_VERSION %></strong></p>
diff --git a/redmine/app/views/custom_fields/list.rhtml b/redmine/app/views/custom_fields/list.rhtml
index fba952100..7f45f7a89 100644
--- a/redmine/app/views/custom_fields/list.rhtml
+++ b/redmine/app/views/custom_fields/list.rhtml
@@ -7,7 +7,7 @@
<th><%=l(:field_field_format)%></th>
<th><%=l(:field_is_required)%></th>
<th><%=l(:field_is_for_all)%></th>
- <th><%=_('Used by')%></th>
+ <th><%=l(:label_used_by)%></th>
<th></th>
</tr>
<% for custom_field in @custom_fields %>
diff --git a/redmine/app/views/documents/_form.rhtml b/redmine/app/views/documents/_form.rhtml
index e4dac38e6..ae56cdd46 100644
--- a/redmine/app/views/documents/_form.rhtml
+++ b/redmine/app/views/documents/_form.rhtml
@@ -9,7 +9,7 @@
<p><label for="document_title"><%=l(:field_title)%> <span class="required">*</span></label><br />
<%= text_field 'document', 'title', :size => 60 %></p>
-<p><label for="document_description"><%=l(:field_description)%> <span class="required">*</span></label><br />
+<p><label for="document_description"><%=l(:field_description)%></label><br />
<%= text_area 'document', 'description', :cols => 60, :rows => 5 %></p>
<!--[eoform:document]-->
diff --git a/redmine/app/views/documents/edit.rhtml b/redmine/app/views/documents/edit.rhtml
index 2f1e9a94c..059c99d9b 100644
--- a/redmine/app/views/documents/edit.rhtml
+++ b/redmine/app/views/documents/edit.rhtml
@@ -1,8 +1,8 @@
-<h2><%=_('Document')%></h2>
+<h2><%=l(:label_document)%></h2>
<%= start_form_tag :action => 'edit', :id => @document %>
<%= render :partial => 'form' %>
- <%= submit_tag _('Save') %>
+ <%= submit_tag l(:button_save) %>
<%= end_form_tag %>
diff --git a/redmine/app/views/documents/show.rhtml b/redmine/app/views/documents/show.rhtml
index 1cadf7c42..136621331 100644
--- a/redmine/app/views/documents/show.rhtml
+++ b/redmine/app/views/documents/show.rhtml
@@ -1,18 +1,18 @@
<h2><%= @document.title %></h2>
-<strong><%=_('Description')%>:</strong> <%= @document.description %><br />
-<strong><%=_('Category')%>:</strong> <%= @document.category.name %><br />
+<strong><%=l(:field_description)%>:</strong> <%= @document.description %><br />
+<strong><%=l(:field_category)%>:</strong> <%= @document.category.name %><br />
<br />
<% if authorize_for('documents', 'edit') %>
- <%= start_form_tag ({ :controller => 'documents', :action => 'edit', :id => @document }, :method => 'get' ) %>
- <%= submit_tag _('Edit') %>
+ <%= start_form_tag({ :controller => 'documents', :action => 'edit', :id => @document }, :method => 'get' ) %>
+ <%= submit_tag l(:button_edit) %>
<%= end_form_tag %>
<% end %>
<% if authorize_for('documents', 'destroy') %>
- <%= start_form_tag ({ :controller => 'documents', :action => 'destroy', :id => @document } ) %>
- <%= submit_tag _('Delete') %>
+ <%= start_form_tag({ :controller => 'documents', :action => 'destroy', :id => @document } ) %>
+ <%= submit_tag l(:button_delete) %>
<%= end_form_tag %>
<% end %>
@@ -24,12 +24,12 @@
<td><%= link_to attachment.filename, :action => 'download', :id => @document, :attachment_id => attachment %></td>
<td align="center"><%= format_date(attachment.created_on) %></td>
<td align="center"><%= attachment.author.display_name %></td>
- <td><%= human_size(attachment.filesize) %><br /><%= attachment.downloads %> <%=_('download')%>(s)</td>
+ <td><%= human_size(attachment.filesize) %><br /><%= lwr(:label_download, attachment.downloads) %></td>
<% if authorize_for('documents', 'destroy_attachment') %>
<td align="center">
<%= start_form_tag :action => 'destroy_attachment', :id => @document, :attachment_id => attachment %>
- <%= submit_tag _('Delete'), :class => "button-small" %>
+ <%= submit_tag l(:button_delete), :class => "button-small" %>
<%= end_form_tag %>
</tr>
<% end %>
@@ -40,8 +40,8 @@
<% if authorize_for('documents', 'add_attachment') %>
<%= start_form_tag ({ :controller => 'documents', :action => 'add_attachment', :id => @document }, :multipart => true) %>
- <%=_('Add file')%><br /><%= file_field 'attachment', 'file' %>
- <%= submit_tag _('Add') %>
+ <%=l(:label_attachment_new)%><br /><%= file_field 'attachment', 'file' %>
+ <%= submit_tag l(:button_add) %>
<%= end_form_tag %>
<% end %>
diff --git a/redmine/app/views/enumerations/_form.rhtml b/redmine/app/views/enumerations/_form.rhtml
index d78dc358c..280eebfbd 100644
--- a/redmine/app/views/enumerations/_form.rhtml
+++ b/redmine/app/views/enumerations/_form.rhtml
@@ -3,7 +3,7 @@
<!--[form:optvalue]-->
<%= hidden_field 'enumeration', 'opt' %>
-<p><label for="enumeration_name"><%=_('Name')%></label><br/>
+<p><label for="enumeration_name"><%=l(:field_name)%></label><br/>
<%= text_field 'enumeration', 'name' %></p>
<!--[eoform:optvalue]-->
diff --git a/redmine/app/views/enumerations/edit.rhtml b/redmine/app/views/enumerations/edit.rhtml
index 16bd377f3..5c26414eb 100644
--- a/redmine/app/views/enumerations/edit.rhtml
+++ b/redmine/app/views/enumerations/edit.rhtml
@@ -1,10 +1,10 @@
-<h2><%=_('Enumerations')%></h2>
+<h2><%=l(:label_enumerations)%></h2>
<%= start_form_tag :action => 'update', :id => @enumeration %>
<%= render :partial => 'form' %>
- <%= submit_tag _('Save') %>
+ <%= submit_tag l(:button_save) %>
<%= end_form_tag %>
<%= start_form_tag :action => 'destroy', :id => @enumeration %>
- <%= submit_tag _('Delete') %>
+ <%= submit_tag l(:button_delete) %>
<%= end_form_tag %> \ No newline at end of file
diff --git a/redmine/app/views/enumerations/list.rhtml b/redmine/app/views/enumerations/list.rhtml
index b5ce65c23..15b91c1ac 100644
--- a/redmine/app/views/enumerations/list.rhtml
+++ b/redmine/app/views/enumerations/list.rhtml
@@ -1,22 +1,21 @@
-<h2><%=_('Enumerations')%></h2>
+<h2><%=l(:label_enumerations)%></h2>
-<% for option in Enumeration::OPTIONS %>
+<% Enumeration::OPTIONS.each do |option, name| %>
- <% if @params[:opt]==option[1] %>
+ <% if @params[:opt]==option %>
- <p><%= image_tag 'dir_open' %> <b><%=_ option[0] %></b></p>
+ <p><%= image_tag 'dir_open' %> <b><%= l(name) %></b></p>
<ul>
- <% for value in Enumeration::find(:all, :conditions => [ "opt = ?", option[1]]) %>
+ <% for value in Enumeration.find(:all, :conditions => ["opt = ?", option]) %>
<li><%= link_to value.name, :action => 'edit', :id => value %></li>
<% end %>
</ul>
<ul>
- <li><%= link_to ('&#187; ' + _('New')), :action => 'new', :opt => option[1] %></li>
+ <li><%= link_to ('&#187; ' + l(:label_new)), :action => 'new', :opt => option %></li>
</ul>
<% else %>
- <p><%= image_tag 'dir' %> <%= link_to _(option[0]), :opt => option[1] %></p>
+ <p><%= image_tag 'dir' %> <%= link_to l(name), :opt => option %></p>
<% end %>
-<% end %>
-
+<% end %> \ No newline at end of file
diff --git a/redmine/app/views/enumerations/new.rhtml b/redmine/app/views/enumerations/new.rhtml
index 30048f2fd..87ede016c 100644
--- a/redmine/app/views/enumerations/new.rhtml
+++ b/redmine/app/views/enumerations/new.rhtml
@@ -1,6 +1,6 @@
-<h2><%=_('New enumeration')%></h2>
+<h2><%=l(:label_enumeration_new)%></h2>
<%= start_form_tag :action => 'create' %>
<%= render :partial => 'form' %>
- <%= submit_tag _('Create') %>
+ <%= submit_tag l(:button_create) %>
<%= end_form_tag %>
diff --git a/redmine/app/views/issue_categories/_form.rhtml b/redmine/app/views/issue_categories/_form.rhtml
index eba2f1672..fdf0cfda8 100644
--- a/redmine/app/views/issue_categories/_form.rhtml
+++ b/redmine/app/views/issue_categories/_form.rhtml
@@ -1,7 +1,7 @@
<%= error_messages_for 'issue_category' %>
<!--[form:issue_category]-->
-<p><label for="issue_category_name"><%=_('Name')%></label><br/>
+<p><label for="issue_category_name"><%l(:field_name)%></label><br/>
<%= text_field 'issue_category', 'name' %></p>
<!--[eoform:issue_category]-->
diff --git a/redmine/app/views/issue_categories/edit.rhtml b/redmine/app/views/issue_categories/edit.rhtml
index 3afdd1c63..087dd7c1b 100644
--- a/redmine/app/views/issue_categories/edit.rhtml
+++ b/redmine/app/views/issue_categories/edit.rhtml
@@ -1,6 +1,6 @@
-<h2>Editing issue category</h2>
+<h2><%=l(:label_issue_category)%></h2>
<%= start_form_tag :action => 'edit', :id => @category %>
<%= render :partial => 'form' %>
- <%= submit_tag _('Save') %>
+ <%= submit_tag l(:button_save) %>
<%= end_form_tag %>
diff --git a/redmine/app/views/issue_statuses/_form.rhtml b/redmine/app/views/issue_statuses/_form.rhtml
index 7c4d63674..237466a3e 100644
--- a/redmine/app/views/issue_statuses/_form.rhtml
+++ b/redmine/app/views/issue_statuses/_form.rhtml
@@ -1,16 +1,16 @@
<%= error_messages_for 'issue_status' %>
<!--[form:issue_status]-->
-<p><label for="issue_status_name"><%=_('Name')%></label> <span class="required">*</span><br/>
+<p><label for="issue_status_name"><%=l(:field_name)%></label> <span class="required">*</span><br/>
<%= text_field 'issue_status', 'name' %></p>
<p><%= check_box 'issue_status', 'is_closed' %>
-<label for="issue_status_is_closed"><%=_('Issue closed')%></label></p>
+<label for="issue_status_is_closed"><%=l(:field_is_closed)%></label></p>
<p><%= check_box 'issue_status', 'is_default' %>
-<label for="issue_status_is_default"><%=_('Default status')%></label></p>
+<label for="issue_status_is_default"><%=l(:field_is_default)%></label></p>
-<p><label for="issue_status_html_color"><%=_('Color')%></label>
+<p><label for="issue_status_html_color"><%=l(:field_html_color)%></label>
#<%= text_field 'issue_status', 'html_color', :maxlength => 6 %> <span class="required">*</span></p>
<!--[eoform:issue_status]-->
diff --git a/redmine/app/views/issue_statuses/edit.rhtml b/redmine/app/views/issue_statuses/edit.rhtml
index d3ed92201..140a40d94 100644
--- a/redmine/app/views/issue_statuses/edit.rhtml
+++ b/redmine/app/views/issue_statuses/edit.rhtml
@@ -1,6 +1,6 @@
-<h2><%=_('Issue status')%></h2>
+<h2><%=l(:label_issue_status)%></h2>
<%= start_form_tag :action => 'update', :id => @issue_status %>
<%= render :partial => 'form' %>
- <%= submit_tag _('Save') %>
+ <%= submit_tag l(:button_save) %>
<%= end_form_tag %>
diff --git a/redmine/app/views/issue_statuses/list.rhtml b/redmine/app/views/issue_statuses/list.rhtml
index 8c0532263..ce7f8469c 100644
--- a/redmine/app/views/issue_statuses/list.rhtml
+++ b/redmine/app/views/issue_statuses/list.rhtml
@@ -1,11 +1,11 @@
-<h2><%=_('Issue statuses')%></h2>
+<h2><%=l(:label_issue_status_plural)%></h2>
<table border="0" cellspacing="1" cellpadding="2" class="listTableContent">
<tr class="ListHead">
- <th><%=_('Status')%></th>
- <th><%=_('Default status')%></th>
- <th><%=_('Issue closed')%></th>
- <th><%=_('Color')%></th>
+ <th><%=l(:field_status)%></th>
+ <th><%=l(:field_is_default)%></th>
+ <th><%=l(:field_is_closed)%></th>
+ <th><%=l(:field_html_color)%></th>
<th></th>
</tr>
@@ -17,7 +17,7 @@
<td bgcolor="#<%= status.html_color %>">&nbsp</td>
<td align="center">
<%= start_form_tag :action => 'destroy', :id => status %>
- <%= submit_tag _('Delete'), :class => "button-small" %>
+ <%= submit_tag l(:button_delete), :class => "button-small" %>
<%= end_form_tag %>
</td>
</tr>
@@ -27,4 +27,4 @@
<%= pagination_links_full @issue_status_pages %>
<br />
-<%= link_to '&#187; ' + _('New issue status'), :action => 'new' %>
+<%= link_to '&#187; ' + l(:label_issue_status_new), :action => 'new' %>
diff --git a/redmine/app/views/issue_statuses/new.rhtml b/redmine/app/views/issue_statuses/new.rhtml
index f7ac082e9..1dc61eb85 100644
--- a/redmine/app/views/issue_statuses/new.rhtml
+++ b/redmine/app/views/issue_statuses/new.rhtml
@@ -1,6 +1,6 @@
-<h2><%=_('New issue status')%></h2>
+<h2><%=l(:label_issue_status_new)%></h2>
<%= start_form_tag :action => 'create' %>
<%= render :partial => 'form' %>
- <%= submit_tag _('Create') %>
+ <%= submit_tag l(:button_create) %>
<%= end_form_tag %>
diff --git a/redmine/app/views/issues/_list_simple.rhtml b/redmine/app/views/issues/_list_simple.rhtml
index 66b70a1da..bcc05d1e8 100644
--- a/redmine/app/views/issues/_list_simple.rhtml
+++ b/redmine/app/views/issues/_list_simple.rhtml
@@ -1,28 +1,28 @@
<% if issues.length > 0 %>
- <table cellspacing="0" cellpadding="1" width="100%" border="0" class="listTable">
- <tr><td>
- <table width="100%" border="0" cellspacing="1" cellpadding="2" class="listTableContent">
- <tr class="ListHead">
- <th>#</th>
- <th><%=_('Tracker')%></th>
- <th><%=_('Subject')%></th>
- </tr>
- <% for issue in issues %>
- <tr bgcolor="#<%= issue.status.html_color %>">
- <td align="center">
- <%= link_to issue.id, :controller => 'issues', :action => 'show', :id => issue %><br />
- </td>
- <td><p class="small"><%= issue.project.name %> - <%= issue.tracker.name %><br />
- <%= issue.status.name %> - <%= format_time(issue.updated_on) %></p></td>
- <td>
- <p class="small"><%= link_to issue.subject, :controller => 'issues', :action => 'show', :id => issue %></p>
- </td>
- </tr>
- <% end %>
- </table>
- </td>
+<table cellspacing="0" cellpadding="1" width="100%" border="0" class="listTable">
+ <tr><td>
+ <table width="100%" border="0" cellspacing="1" cellpadding="2" class="listTableContent">
+ <tr class="ListHead">
+ <th>#</th>
+ <th><%=l(:field_tracker)%></th>
+ <th><%=l(:field_subject)%></th>
</tr>
- </table>
+ <% for issue in issues %>
+ <tr bgcolor="#<%= issue.status.html_color %>">
+ <td align="center">
+ <%= link_to issue.id, :controller => 'issues', :action => 'show', :id => issue %><br />
+ </td>
+ <td><p class="small"><%= issue.project.name %> - <%= issue.tracker.name %><br />
+ <%= issue.status.name %> - <%= format_time(issue.updated_on) %></p></td>
+ <td>
+ <p class="small"><%= link_to issue.subject, :controller => 'issues', :action => 'show', :id => issue %></p>
+ </td>
+ </tr>
+ <% end %>
+ </table>
+ </td>
+ </tr>
+</table>
<% else %>
- <%=_('No issue')%>
+ <i><%=l(:label_no_data)%></i>
<% end %> \ No newline at end of file
diff --git a/redmine/app/views/issues/change_status.rhtml b/redmine/app/views/issues/change_status.rhtml
index aa85ae249..35494dbb9 100644
--- a/redmine/app/views/issues/change_status.rhtml
+++ b/redmine/app/views/issues/change_status.rhtml
@@ -1,4 +1,4 @@
-<h2><%=_('Issue')%> #<%= @issue.id %>: <%= @issue.subject %></h2>
+<h2><%=l(:label_issue)%> #<%= @issue.id %>: <%= @issue.subject %></h2>
<%= error_messages_for 'history' %>
<%= start_form_tag :action => 'change_status', :id => @issue %>
@@ -7,26 +7,25 @@
<%= hidden_field 'history', 'status_id' %>
<div class="box">
-<p><%=_('New status')%>: <b><%= @history.status.name %></b></p>
+<p><%=l(:label_issue_status_new)%>: <b><%= @history.status.name %></b></p>
<div>
-<p><label for="issue_assigned_to_id"><%=_('Assigned to')%></label><br/>
+<p><label for="issue_assigned_to_id"><%=l(:field_assigned_to)%></label><br/>
<select name="issue[assigned_to_id]">
<option value=""></option>
<%= options_from_collection_for_select @assignable_to, "id", "display_name", @issue.assigned_to_id %></p>
</select></p>
</div>
-<p><label for="issue_fixed_version"><%=_('Fixed in version')%></label><br/>
+<p><label for="issue_fixed_version"><%=l(:field_fixed_version)%></label><br/>
<select name="issue[fixed_version_id]">
<option value="">--none--</option>
<%= options_from_collection_for_select @issue.project.versions, "id", "name", @issue.fixed_version_id %>
</select></p>
-<p><label for="history_notes"><%=_('Notes')%></label><br />
+<p><label for="history_notes"><%=l(:field_notes)%></label><br />
<%= text_area 'history', 'notes', :cols => 60, :rows => 10 %></p>
</div>
-
-<%= submit_tag _('Save') %>
+<%= submit_tag l(:button_save) %>
<%= end_form_tag %>
diff --git a/redmine/app/views/issues/edit.rhtml b/redmine/app/views/issues/edit.rhtml
index 876542fbe..b8fc6ad4c 100644
--- a/redmine/app/views/issues/edit.rhtml
+++ b/redmine/app/views/issues/edit.rhtml
@@ -1,21 +1,21 @@
-<h2><%=_@issue.tracker.name%> #<%= @issue.id %> - <%= @issue.subject %></h2>
+<h2><%= @issue.tracker.name %> #<%= @issue.id %> - <%= @issue.subject %></h2>
<%= error_messages_for 'issue' %>
<%= start_form_tag :action => 'edit', :id => @issue %>
<div class="box">
<!--[form:issue]-->
-<p><%=_('Status')%>: <b><%= @issue.status.name %></b></p>
+<p><%=l(:field_status)%>: <b><%= @issue.status.name %></b></p>
<div style="float:left;margin-right:10px;">
-<p><label for="issue_priority_id"><%=_('Priority')%> <span class="required">*</span></label><br/>
+<p><label for="issue_priority_id"><%=l(:field_priority)%> <span class="required">*</span></label><br/>
<select name="issue[priority_id]">
<%= options_from_collection_for_select @priorities, "id", "name", @issue.priority_id %></p>
</select></p>
</div>
<div style="float:left;margin-right:10px;">
-<p><label for="issue_assigned_to_id"><%=_('Assigned to')%></label><br/>
+<p><label for="issue_assigned_to_id"><%=l(:field_assigned_to)%></label><br/>
<select name="issue[assigned_to_id]">
<option value=""></option>
<%= options_from_collection_for_select @issue.project.members, "user_id", "name", @issue.assigned_to_id %></p>
@@ -23,24 +23,27 @@
</div>
<div>
-<p><label for="issue_category_id"><%=_('Category')%></label><br/>
+<p><label for="issue_category_id"><%=l(:field_category)%></label><br/>
<select name="issue[category_id]">
<option value=""></option>
<%= options_from_collection_for_select @project.issue_categories, "id", "name", @issue.category_id %></p>
</select></p>
</div>
-<p><label for="issue_subject"><%=_('Subject')%></label><span class="required">*</span><br/>
+<p><label for="issue_subject"><%=l(:field_subject)%></label><span class="required">*</span><br/>
<%= text_field 'issue', 'subject', :size => 60 %></p>
-<p><label for="issue_description"><%=_('Description')%></label><span class="required">*</span><br/>
+<p><label for="issue_description"><%=l(:field_description)%></label><span class="required">*</span><br/>
<%= text_area 'issue', 'description', :cols => 60, :rows => 10 %></p>
+
+<p><label for="issue_due_date"><%=l(:field_due_date)%></label><br />
+<%= date_select 'issue', 'due_date', :start_year => Date.today.year, :include_blank => true %></p>
<% for custom_value in @custom_values %>
<p><%= custom_field_tag_with_label custom_value %></p>
<% end %>
-<p><label for="issue_fixed_version"><%=_('Fixed in version')%></label><br/>
+<p><label for="issue_fixed_version"><%=l(:field_fixed_version)%></label><br/>
<select name="issue[fixed_version_id]">
<option value="">--none--</option>
<%= options_from_collection_for_select @project.versions, "id", "name", @issue.fixed_version_id %>
@@ -49,5 +52,5 @@
<!--[eoform:issue]-->
</div>
-<%= submit_tag _('Save') %>
+<%= submit_tag l(:button_save) %>
<%= end_form_tag %>
diff --git a/redmine/app/views/issues/show.rhtml b/redmine/app/views/issues/show.rhtml
index 649f9adf9..acba6af0c 100644
--- a/redmine/app/views/issues/show.rhtml
+++ b/redmine/app/views/issues/show.rhtml
@@ -1,42 +1,43 @@
-
-<h2><%=_(@issue.tracker.name)%> #<%= @issue.id %> - <%= @issue.subject %></h2>
+<h2><%= @issue.tracker.name %> #<%= @issue.id %> - <%= @issue.subject %></h2>
<div class="box">
-<p><b><%=_('Status')%>:</b> <%= @issue.status.name %></p>
-<p><b><%=_('Priority')%>:</b> <%= @issue.priority.name %></p>
-<p><b><%=_('Category')%>:</b> <%= @issue.category.name unless @issue.category_id.nil? %></p>
-<p><b><%=_('Author')%>:</b> <%= @issue.author.display_name %></p>
-<p><b><%=_('Assigned to')%>:</b> <%= @issue.assigned_to.display_name unless @issue.assigned_to.nil? %></p>
-
-<p><b><%=_('Subject')%>:</b> <%= @issue.subject %></p>
-<p><b><%=_('Description')%>:</b> <%= simple_format auto_link @issue.description %></p>
-<p><b><%=_('Created on')%>:</b> <%= format_date(@issue.created_on) %></p>
+<p>
+<b><%=l(:field_status)%> :</b> <%= @issue.status.name %> &nbsp &nbsp
+<b><%=l(:field_priority)%> :</b> <%= @issue.priority.name %> &nbsp &nbsp
+<b><%=l(:field_assigned_to)%> :</b> <%= @issue.assigned_to ? @issue.assigned_to.display_name : "-" %> &nbsp &nbsp
+<b><%=l(:field_category)%> :</b> <%= @issue.category ? @issue.category.name : "-" %>
+</p>
+<p><b><%=l(:field_author)%> :</b> <%= @issue.author.display_name %></p>
+<p><b><%=l(:field_subject)%> :</b> <%= @issue.subject %></p>
+<p><b><%=l(:field_description)%> :</b> <%= simple_format auto_link @issue.description %></p>
+<p><b><%=l(:field_due_date)%> :</b> <%= format_date(@issue.due_date) %></p>
+<p><b><%=l(:field_created_on)%> :</b> <%= format_date(@issue.created_on) %></p>
<% for custom_value in @custom_values %>
-<p><b><%= custom_value.custom_field.name %></b>: <%= show_value custom_value %></p>
+<p><b><%= custom_value.custom_field.name %></b> : <%= show_value custom_value %></p>
<% end %>
<% if authorize_for('issues', 'edit') %>
<%= start_form_tag ({:controller => 'issues', :action => 'edit', :id => @issue}, :method => "get" ) %>
- <%= submit_tag _('Edit') %>
+ <%= submit_tag l(:button_edit) %>
<%= end_form_tag %>
&nbsp;&nbsp;
<% end %>
<% if authorize_for('issues', 'change_status') and @status_options and !@status_options.empty? %>
<%= start_form_tag ({:controller => 'issues', :action => 'change_status', :id => @issue}) %>
- <label for="history_status_id"><%=_('Change status')%>:</label>
+ <label for="history_status_id"><%=l(:label_change_status)%> :</label>
<select name="history[status_id]">
<%= options_from_collection_for_select @status_options, "id", "name" %>
</select>
- <%= submit_tag _ "Update..." %>
+ <%= submit_tag l(:button_change) %>
<%= end_form_tag %>
&nbsp;&nbsp;
<% end %>
<% if authorize_for('issues', 'destroy') %>
<%= start_form_tag ({:controller => 'issues', :action => 'destroy', :id => @issue} ) %>
- <%= submit_tag _ "Delete" %>
+ <%= submit_tag l(:button_delete) %>
<%= end_form_tag %>
&nbsp;&nbsp;
<% end %>
@@ -46,7 +47,7 @@
<div class="splitcontentleft">
<div class="box">
-<h3><%=_('History')%></h3>
+<h3><%=l(:label_history)%></h3>
<table width="100%">
<% for history in @issue.histories.find(:all, :include => :author) %>
<tr>
@@ -64,7 +65,7 @@
<div class="splitcontentright">
<div class="box">
-<h3><%=_('Attachments')%></h3>
+<h3><%=l(:label_attachment_plural)%></h3>
<table width="100%">
<% for attachment in @issue.attachments %>
<tr>
@@ -74,7 +75,7 @@
<% if authorize_for('issues', 'destroy_attachment') %>
<td>
<%= start_form_tag :action => 'destroy_attachment', :id => @issue, :attachment_id => attachment %>
- <%= submit_tag _('Delete'), :class => "button-small" %>
+ <%= submit_tag l(:button_delete), :class => "button-small" %>
<%= end_form_tag %>
</td>
<% end %>
@@ -84,8 +85,8 @@
<br />
<% if authorize_for('issues', 'add_attachment') %>
<%= start_form_tag ({ :controller => 'issues', :action => 'add_attachment', :id => @issue }, :multipart => true) %>
- <%=_('Add file')%>: <%= file_field 'attachment', 'file' %>
- <%= submit_tag _('Add') %>
+ <%=l(:label_attachment_new)%>: <%= file_field 'attachment', 'file' %>
+ <%= submit_tag l(:button_add) %>
<%= end_form_tag %>
<% end %>
</div>
diff --git a/redmine/app/views/layouts/base.rhtml b/redmine/app/views/layouts/base.rhtml
index de99a0b4a..dd85ed5c3 100644
--- a/redmine/app/views/layouts/base.rhtml
+++ b/redmine/app/views/layouts/base.rhtml
@@ -14,33 +14,33 @@
<script type='text/javascript'>
var menu_contenu=' \
<div id="menuAdmin" class="menu" onmouseover="menuMouseover(event)"> \
-<a class="menuItem" href="\/admin\/projects" onmouseover="menuItemMouseover(event,\'menuProjects\');"><span class="menuItemText"><%=_('Projects')%><\/span><span class="menuItemArrow">&#9654;<\/span><\/a> \
-<a class="menuItem" href="\/users" onmouseover="menuItemMouseover(event,\'menuUsers\');"><span class="menuItemText"><%=_('Users')%><\/span><span class="menuItemArrow">&#9654;<\/span><\/a> \
-<a class="menuItem" href="\/roles"><%=_('Roles and permissions')%><\/a> \
-<a class="menuItem" href="\/trackers" onmouseover="menuItemMouseover(event,\'menuTrackers\');"><span class="menuItemText"><%=_('Trackers')%><\/span><span class="menuItemArrow">&#9654;<\/span><\/a> \
-<a class="menuItem" href="\/custom_fields"><%=_('Custom fields')%><\/a> \
-<a class="menuItem" href="\/enumerations"><%=_('Enumerations')%><\/a> \
-<a class="menuItem" href="\/admin\/mail_options"><%=_('Mail notifications')%><\/a> \
+<a class="menuItem" href="\/admin\/projects" onmouseover="menuItemMouseover(event,\'menuProjects\');"><span class="menuItemText"><%=l(:label_project_plural)%><\/span><span class="menuItemArrow">&#9654;<\/span><\/a> \
+<a class="menuItem" href="\/users" onmouseover="menuItemMouseover(event,\'menuUsers\');"><span class="menuItemText"><%=l(:label_user_plural)%><\/span><span class="menuItemArrow">&#9654;<\/span><\/a> \
+<a class="menuItem" href="\/roles"><%=l(:label_role_and_permissions)%><\/a> \
+<a class="menuItem" href="\/trackers" onmouseover="menuItemMouseover(event,\'menuTrackers\');"><span class="menuItemText"><%=l(:label_tracker_plural)%><\/span><span class="menuItemArrow">&#9654;<\/span><\/a> \
+<a class="menuItem" href="\/custom_fields"><%=l(:label_custom_field_plural)%><\/a> \
+<a class="menuItem" href="\/enumerations"><%=l(:label_enumerations)%><\/a> \
+<a class="menuItem" href="\/admin\/mail_options"><%=l(:field_mail_notification)%><\/a> \
<a class="menuItem" href="\/auth_sources"><%=l(:label_authentication)%><\/a> \
-<a class="menuItem" href="\/admin\/info"><%=_('Information')%><\/a> \
+<a class="menuItem" href="\/admin\/info"><%=l(:label_information_plural)%><\/a> \
<\/div> \
<div id="menuTrackers" class="menu"> \
-<a class="menuItem" href="\/issue_statuses"><%=_('Issue Statuses')%><\/a> \
-<a class="menuItem" href="\/roles\/workflow"><%=_('Workflow')%><\/a> \
+<a class="menuItem" href="\/issue_statuses"><%=l(:label_issue_status_plural)%><\/a> \
+<a class="menuItem" href="\/roles\/workflow"><%=l(:label_workflow)%><\/a> \
<\/div> \
-<div id="menuProjects" class="menu"><a class="menuItem" href="\/projects\/add"><%=_('New')%><\/a><\/div> \
-<div id="menuUsers" class="menu"><a class="menuItem" href="\/users\/add"><%=_('New')%><\/a><\/div> \
+<div id="menuProjects" class="menu"><a class="menuItem" href="\/projects\/add"><%=l(:label_new)%><\/a><\/div> \
+<div id="menuUsers" class="menu"><a class="menuItem" href="\/users\/add"><%=l(:label_new)%><\/a><\/div> \
\
<% unless @project.nil? || @project.id.nil? %> \
<div id="menuProject" class="menu" onmouseover="menuMouseover(event)"> \
-<%= link_to _('Issues'), {:controller => 'projects', :action => 'list_issues', :id => @project }, :class => "menuItem" %> \
-<%= link_to _('Reports'), {:controller => 'reports', :action => 'issue_report', :id => @project }, :class => "menuItem" %> \
-<%= link_to _('News'), {:controller => 'projects', :action => 'list_news', :id => @project }, :class => "menuItem" %> \
-<%= link_to _('Change log'), {:controller => 'projects', :action => 'changelog', :id => @project }, :class => "menuItem" %> \
-<%= link_to _('Documents'), {:controller => 'projects', :action => 'list_documents', :id => @project }, :class => "menuItem" %> \
-<%= link_to _('Members'), {:controller => 'projects', :action => 'list_members', :id => @project }, :class => "menuItem" %> \
-<%= link_to _('Files'), {:controller => 'projects', :action => 'list_files', :id => @project }, :class => "menuItem" %> \
-<%= link_to_if_authorized _('Settings'), {:controller => 'projects', :action => 'settings', :id => @project }, :class => "menuItem" %> \
+<%= link_to l(:label_issue_plural), {:controller => 'projects', :action => 'list_issues', :id => @project }, :class => "menuItem" %> \
+<%= link_to l(:label_report_plural), {:controller => 'reports', :action => 'issue_report', :id => @project }, :class => "menuItem" %> \
+<%= link_to l(:label_news_plural), {:controller => 'projects', :action => 'list_news', :id => @project }, :class => "menuItem" %> \
+<%= link_to l(:label_change_log), {:controller => 'projects', :action => 'changelog', :id => @project }, :class => "menuItem" %> \
+<%= link_to l(:label_document_plural), {:controller => 'projects', :action => 'list_documents', :id => @project }, :class => "menuItem" %> \
+<%= link_to l(:label_member_plural), {:controller => 'projects', :action => 'list_members', :id => @project }, :class => "menuItem" %> \
+<%= link_to l(:label_attachment_plural), {:controller => 'projects', :action => 'list_files', :id => @project }, :class => "menuItem" %> \
+<%= link_to_if_authorized l(:label_settings), {:controller => 'projects', :action => 'settings', :id => @project }, :class => "menuItem" %> \
<\/div> \
<% end %> \
';
@@ -95,20 +95,20 @@ var menu_contenu=' \
<% unless @project.nil? || @project.id.nil? %>
<h2><%= @project.name %></h2>
<ul class="menublock">
- <li><%= link_to _('Overview'), :controller => 'projects', :action => 'show', :id => @project %></li>
- <li><%= link_to _('Issues'), :controller => 'projects', :action => 'list_issues', :id => @project %></li>
- <li><%= link_to _('Reports'), :controller => 'reports', :action => 'issue_report', :id => @project %></li>
- <li><%= link_to _('News'), :controller => 'projects', :action => 'list_news', :id => @project %></li>
- <li><%= link_to _('Change log'), :controller => 'projects', :action => 'changelog', :id => @project %></li>
- <li><%= link_to _('Documents'), :controller => 'projects', :action => 'list_documents', :id => @project %></li>
- <li><%= link_to _('Members'), :controller => 'projects', :action => 'list_members', :id => @project %></li>
- <li><%= link_to _('Files'), :controller => 'projects', :action => 'list_files', :id => @project %></li>
- <li><%= link_to_if_authorized _('Settings'), :controller => 'projects', :action => 'settings', :id => @project %></li>
+ <li><%= link_to l(:label_overview), :controller => 'projects', :action => 'show', :id => @project %></li>
+ <li><%= link_to l(:label_issue_plural), :controller => 'projects', :action => 'list_issues', :id => @project %></li>
+ <li><%= link_to l(:label_report_plural), :controller => 'reports', :action => 'issue_report', :id => @project %></li>
+ <li><%= link_to l(:label_news_plural), :controller => 'projects', :action => 'list_news', :id => @project %></li>
+ <li><%= link_to l(:label_change_log), :controller => 'projects', :action => 'changelog', :id => @project %></li>
+ <li><%= link_to l(:label_document_plural), :controller => 'projects', :action => 'list_documents', :id => @project %></li>
+ <li><%= link_to l(:label_member_plural), :controller => 'projects', :action => 'list_members', :id => @project %></li>
+ <li><%= link_to l(:label_attachment_plural), :controller => 'projects', :action => 'list_files', :id => @project %></li>
+ <li><%= link_to_if_authorized l(:label_settings), :controller => 'projects', :action => 'settings', :id => @project %></li>
</ul>
<% end %>
<% if loggedin? and @logged_in_user.memberships.length > 0 %>
- <h2><%=_('My projects') %></h2>
+ <h2><%=l(:label_my_projects) %></h2>
<ul class="menublock">
<% for membership in @logged_in_user.memberships %>
<li><%= link_to membership.project.name, :controller => 'projects', :action => 'show', :id => membership.project %></li>
diff --git a/redmine/app/views/mailer/_issue.rhtml b/redmine/app/views/mailer/_issue.rhtml
index f2ab6fa5f..57acb4b8d 100644
--- a/redmine/app/views/mailer/_issue.rhtml
+++ b/redmine/app/views/mailer/_issue.rhtml
@@ -1,5 +1,5 @@
-<%=_('Issue')%> #<%= issue.id %> - <%= issue.subject %>
-<%=_('Author')%>: <%= issue.author.display_name %>
+<%=l(:label_issue)%> #<%= issue.id %> - <%= issue.subject %>
+<%=l(:field_author)%>: <%= issue.author.display_name %>
<%= issue.description %>
diff --git a/redmine/app/views/news/_form.rhtml b/redmine/app/views/news/_form.rhtml
index ea6d5df7f..564a8834a 100644
--- a/redmine/app/views/news/_form.rhtml
+++ b/redmine/app/views/news/_form.rhtml
@@ -1,13 +1,13 @@
<%= error_messages_for 'news' %>
<!--[form:news]-->
-<p><label for="news_title"><%=_('Title')%></label> <span class="required">*</span><br/>
+<p><label for="news_title"><%=l(:field_title)%></label> <span class="required">*</span><br/>
<%= text_field 'news', 'title', :size => 60 %></p>
-<p><label for="news_summary"><%=_('Summary')%></label><br/>
+<p><label for="news_summary"><%=l(:field_summary)%></label><br/>
<%= text_area 'news', 'summary', :cols => 60, :rows => 2 %></p>
-<p><label for="news_description"><%=_('Description')%> <span class="required">*</span></label><br/>
+<p><label for="news_description"><%=l(:field_description)%> <span class="required">*</span></label><br/>
<%= text_area 'news', 'description', :cols => 60, :rows => 10 %></p>
<!--[eoform:news]-->
diff --git a/redmine/app/views/news/edit.rhtml b/redmine/app/views/news/edit.rhtml
index 2e849ab1d..27f7ac993 100644
--- a/redmine/app/views/news/edit.rhtml
+++ b/redmine/app/views/news/edit.rhtml
@@ -1,6 +1,6 @@
-<h2><%=_('News')%></h2>
+<h2><%=l(:label_news)%></h2>
<%= start_form_tag :action => 'edit', :id => @news %>
<%= render :partial => 'form' %>
- <%= submit_tag _('Save') %>
+ <%= submit_tag l(:button_save) %>
<%= end_form_tag %>
diff --git a/redmine/app/views/news/show.rhtml b/redmine/app/views/news/show.rhtml
index f571b54ca..2ff75fa8a 100644
--- a/redmine/app/views/news/show.rhtml
+++ b/redmine/app/views/news/show.rhtml
@@ -1,9 +1,9 @@
<h2><%= @news.title %></h2>
<p>
-<b><%=_('Summary')%></b>: <%= @news.summary %><br />
-<b><%=_('By')%></b>: <%= @news.author.display_name %><br />
-<b><%=_('Date')%></b>: <%= format_time(@news.created_on) %>
+<b><%=l(:field_summary)%></b>: <%= @news.summary %><br />
+<b><%=l(:field_author)%></b>: <%= @news.author.display_name %><br />
+<b><%=l(:field_created_on)%></b>: <%= format_time(@news.created_on) %>
</p>
<%= simple_format auto_link @news.description %>
diff --git a/redmine/app/views/projects/_form.rhtml b/redmine/app/views/projects/_form.rhtml
index 9623a9d46..06fdc46fb 100644
--- a/redmine/app/views/projects/_form.rhtml
+++ b/redmine/app/views/projects/_form.rhtml
@@ -2,31 +2,31 @@
<div class="box">
<!--[form:project]-->
-<p><label for="project_name"><%=_('Name')%> <span class="required">*</span></label><br/>
+<p><label for="project_name"><%=l(:field_name)%> <span class="required">*</span></label><br/>
<%= text_field 'project', 'name' %></p>
<% if admin_loggedin? %>
-<p><label for="project_parent_id"><%=_('Subproject of')%></label><br/>
+<p><label for="project_parent_id"><%=l(:field_parent)%></label><br/>
<select name="project[parent_id]">
<option value=""></option>
<%= options_from_collection_for_select @root_projects, "id", "name", @project.parent_id %>
</select></p>
<% end %>
-<p><label for="project_description"><%=_('Description')%> <span class="required">*</span></label><br/>
+<p><label for="project_description"><%=l(:field_description)%> <span class="required">*</span></label><br/>
<%= text_area 'project', 'description', :cols => 60, :rows => 3 %></p>
-<p><label for="project_homepage"><%=_('Homepage')%></label><br/>
+<p><label for="project_homepage"><%=l(:field_homepage)%></label><br/>
<%= text_field 'project', 'homepage', :size => 40 %></p>
<p><%= check_box 'project', 'is_public' %>
-<label for="project_is_public"><%=_('Public')%></label></p>
+<label for="project_is_public"><%=l(:field_is_public)%></label></p>
<% for custom_value in @custom_values %>
<p><%= custom_field_tag_with_label custom_value %></p>
<% end %>
-<fieldset><legend><%=_('Custom fields')%></legend>
+<fieldset><legend><%=l(:label_custom_field_plural)%></legend>
<% for custom_field in @custom_fields %>
<input type="checkbox"
diff --git a/redmine/app/views/projects/add.rhtml b/redmine/app/views/projects/add.rhtml
index bdfe0862e..2dd4eb450 100644
--- a/redmine/app/views/projects/add.rhtml
+++ b/redmine/app/views/projects/add.rhtml
@@ -1,6 +1,6 @@
-<h2><%=_('New project')%></h2>
+<h2><%=l(:label_project_new)%></h2>
<%= start_form_tag :action => 'add' %>
<%= render :partial => 'form' %>
-<%= submit_tag _('Create') %>
+<%= submit_tag l(:button_create) %>
<%= end_form_tag %>
diff --git a/redmine/app/views/projects/add_document.rhtml b/redmine/app/views/projects/add_document.rhtml
index f1adc8d4d..8d6d2e39d 100644
--- a/redmine/app/views/projects/add_document.rhtml
+++ b/redmine/app/views/projects/add_document.rhtml
@@ -1,26 +1,12 @@
-<h2><%=_('New document')%></h2>
+<h2><%=l(:label_document_new)%></h2>
-<%= error_messages_for 'document' %>
<%= start_form_tag( { :action => 'add_document', :id => @project }, :multipart => true) %>
-
-<!--[form:document]-->
-<p><label for="document_category_id"><%=_('Category')%></label><br />
-<select name="document[category_id]">
-<%= options_from_collection_for_select @categories, "id", "name",@document.category_id %>
-</select></p>
-
-<p><label for="document_title"><%=_('Title')%> <span class="required">*</span></label><br />
-<%= text_field 'document', 'title', :size => 60 %></p>
-
-<p><label for="document_description"><%=_('Description')%> <span class="required">*</span></label><br />
-<%= text_area 'document', 'description', :cols => 60, :rows => 5 %></p>
+<%= render :partial => 'documents/form' %>
-<p><label for="attachment_file"><%=_('File')%></label><br/>
+<p><label for="attachment_file"><%=l(:label_attachment)%></label><br/>
<%= file_field 'attachment', 'file' %></p>
-<!--[eoform:document]-->
-
-<%= submit_tag _('Create') %>
+<%= submit_tag l(:button_create) %>
<%= end_form_tag %>
diff --git a/redmine/app/views/projects/add_file.rhtml b/redmine/app/views/projects/add_file.rhtml
index 4e8ce9b02..fee67c53f 100644
--- a/redmine/app/views/projects/add_file.rhtml
+++ b/redmine/app/views/projects/add_file.rhtml
@@ -1,13 +1,14 @@
-<h2><%=_('New file')%></h2>
+<h2><%=l(:label_attachment_new)%></h2>
+<%= error_messages_for 'attachment' %>
<%= start_form_tag ({ :action => 'add_file', :project => @project }, :multipart => true) %>
-<p><label for="version_id"><%=_('Version')%></label><br />
+<p><label for="version_id"><%=l(:field_version)%></label><br />
<select name="version_id">
<%= options_from_collection_for_select @versions, "id", "name" %>
</select></p>
-<p><b><%=_('File')%><b><br /><%= file_field 'attachment', 'file' %></p>
+<p><b><%=l(:label_attachment)%><b><br /><%= file_field 'attachment', 'file' %></p>
<br/>
-<%= submit_tag _('Add') %>
+<%= submit_tag l(:button_add) %>
<%= end_form_tag %> \ No newline at end of file
diff --git a/redmine/app/views/projects/add_issue.rhtml b/redmine/app/views/projects/add_issue.rhtml
index 5e4d450ec..48d296fea 100644
--- a/redmine/app/views/projects/add_issue.rhtml
+++ b/redmine/app/views/projects/add_issue.rhtml
@@ -1,4 +1,4 @@
-<h2><%=_('New issue')%>: <%=_(@tracker.name)%></h2>
+<h2><%=l(:label_issue_new)%>: <%= @tracker.name %></h2>
<%= start_form_tag( { :action => 'add_issue', :id => @project }, :multipart => true) %>
<%= error_messages_for 'issue' %>
@@ -9,14 +9,14 @@
<%= hidden_field_tag 'tracker_id', @tracker.id %>
<div style="float:left;margin-right:10px;">
-<p><label for="issue_priority_id"><%=_('Priority')%> <span class="required">*</span></label><br/>
+<p><label for="issue_priority_id"><%=l(:field_priority)%> <span class="required">*</span></label><br />
<select name="issue[priority_id]">
<%= options_from_collection_for_select @priorities, "id", "name", @issue.priority_id %></p>
</select></p>
</div>
<div style="float:left;margin-right:10px;">
-<p><label for="issue_assigned_to_id"><%=_('Assigned to')%></label><br/>
+<p><label for="issue_assigned_to_id"><%=l(:field_assigned_to)%></label><br />
<select name="issue[assigned_to_id]">
<option value=""></option>
<%= options_from_collection_for_select @issue.project.members, "user_id", "name", @issue.assigned_to_id %></p>
@@ -24,28 +24,29 @@
</div>
<div>
-<p><label for="issue_category_id"><%=_('Category')%></label><br/>
+<p><label for="issue_category_id"><%=l(:field_category)%></label><br />
<select name="issue[category_id]">
<option value=""></option><%= options_from_collection_for_select @project.issue_categories, "id", "name", @issue.category_id %>
</select></p>
</div>
-<p><label for="issue_subject"><%=_('Subject')%> <span class="required">*</span></label><br/>
+<p><label for="issue_subject"><%=l(:field_subject)%> <span class="required">*</span></label><br />
<%= text_field 'issue', 'subject', :size => 80 %></p>
-<p><label for="issue_description"><%=_('Description')%> <span class="required">*</span></label><br/>
+<p><label for="issue_description"><%=l(:field_description)%> <span class="required">*</span></label><br />
<%= text_area 'issue', 'description', :cols => 60, :rows => 10 %></p>
+
+<p><label for="issue_due_date"><%=l(:field_due_date)%></label><br />
+<%= date_select 'issue', 'due_date', :start_year => Date.today.year, :include_blank => true %></p>
<% for custom_value in @custom_values %>
<p><%= custom_field_tag_with_label custom_value %></p>
<% end %>
-<p><label for="attachment_file"><%=_('Attachment')%></label><br/>
+<p><label for="attachment_file"><%=l(:label_attachment)%></label><br />
<%= file_field 'attachment', 'file' %></p>
-
<!--[eoform:issue]-->
</div>
-
-<%= submit_tag _('Create') %>
+<%= submit_tag l(:button_create) %>
<%= end_form_tag %> \ No newline at end of file
diff --git a/redmine/app/views/projects/add_news.rhtml b/redmine/app/views/projects/add_news.rhtml
index c106e7c21..abe6e96e0 100644
--- a/redmine/app/views/projects/add_news.rhtml
+++ b/redmine/app/views/projects/add_news.rhtml
@@ -1,7 +1,7 @@
-<h2><%=('Add news')%></h2>
+<h2><%=l(:label_news_new)%></h2>
<%= start_form_tag :action => 'add_news', :id => @project %>
<%= render :partial => 'news/form' %>
- <%= submit_tag _('Create') %>
+ <%= submit_tag l(:button_create) %>
<%= end_form_tag %>
diff --git a/redmine/app/views/projects/add_version.rhtml b/redmine/app/views/projects/add_version.rhtml
index 27b258fab..501a7e615 100644
--- a/redmine/app/views/projects/add_version.rhtml
+++ b/redmine/app/views/projects/add_version.rhtml
@@ -1,7 +1,7 @@
-<h2><%=_('New version')%></h2>
+<h2><%=l(:label_version_new)%></h2>
<%= start_form_tag :action => 'add_version', :id => @project %>
<%= render :partial => 'versions/form' %>
- <%= submit_tag _('Create') %>
+ <%= submit_tag l(:button_create) %>
<%= end_form_tag %>
diff --git a/redmine/app/views/projects/changelog.rhtml b/redmine/app/views/projects/changelog.rhtml
index 5d2a588ea..c3c7bb604 100644
--- a/redmine/app/views/projects/changelog.rhtml
+++ b/redmine/app/views/projects/changelog.rhtml
@@ -1,4 +1,4 @@
-<h2><%=_('Change log')%></h2>
+<h2><%=l(:label_change_log)%></h2>
<% fixed_issues = @fixed_issues.group_by {|i| i.fixed_version } %>
<% fixed_issues.each do |version, issues| %>
diff --git a/redmine/app/views/projects/destroy.rhtml b/redmine/app/views/projects/destroy.rhtml
index 2e26478d9..d11705be4 100644
--- a/redmine/app/views/projects/destroy.rhtml
+++ b/redmine/app/views/projects/destroy.rhtml
@@ -1,11 +1,13 @@
-<h2><%=_('Confirmation')%></h2>
+<h2><%=l(:label_confirmation)%></h2>
<div class="box">
<center>
-<p><%=_('Are you sure you want to delete project')%> <strong><%= @project.name %></strong> ?</p>
+<p><strong><%= @project.name %></strong><br />
+<%=l(:text_project_destroy_confirmation)%></p>
+
<p>
<%= start_form_tag({:controller => 'projects', :action => 'destroy', :id => @project}) %>
<%= hidden_field_tag "confirm", 1 %>
- <%= submit_tag _('Delete') %>
+ <%= submit_tag l(:button_delete) %>
<%= end_form_tag %>
</p>
</center>
diff --git a/redmine/app/views/projects/list.rhtml b/redmine/app/views/projects/list.rhtml
index 1c7cd4374..b48fef39a 100644
--- a/redmine/app/views/projects/list.rhtml
+++ b/redmine/app/views/projects/list.rhtml
@@ -1,10 +1,10 @@
-<h2><%=_('Public projects')%></h2>
+<h2><%=l(:label_public_projects)%></h2>
<table width="100%" cellspacing="1" cellpadding="2" class="listTableContent">
<tr class="ListHead">
- <%= sort_header_tag('name', :caption => _('Project')) %>
- <th>Description</th>
- <%= sort_header_tag('created_on', :caption => _('Created on')) %>
+ <%= sort_header_tag('name', :caption => l(:label_project)) %>
+ <th><%=l(:field_description)%></th>
+ <%= sort_header_tag('created_on', :caption => l(:field_created_on)) %>
</tr>
<% for project in @projects %>
diff --git a/redmine/app/views/projects/list_documents.rhtml b/redmine/app/views/projects/list_documents.rhtml
index aa7670964..7e6eff0ba 100644
--- a/redmine/app/views/projects/list_documents.rhtml
+++ b/redmine/app/views/projects/list_documents.rhtml
@@ -1,4 +1,4 @@
-<h2><%=_('Documents')%></h2>
+<h2><%=l(:label_document_plural)%></h2>
<% documents = @documents.group_by {|d| d.category } %>
<% documents.each do |category, docs| %>
@@ -8,7 +8,7 @@
<li>
<b><%= link_to d.title, :controller => 'documents', :action => 'show', :id => d %></b>
<br />
- <%=_('Desciption')%>: <%= d.description %><br />
+ <%=l(:field_description)%>: <%= d.description %><br />
<%= format_time(d.created_on) %>
</li>
@@ -17,5 +17,5 @@
<% end %>
<p>
-<%= link_to_if_authorized '&#187; ' + _('New'), :controller => 'projects', :action => 'add_document', :id => @project %>
+<%= link_to_if_authorized '&#187; ' + l(:label_document_new), :controller => 'projects', :action => 'add_document', :id => @project %>
</p>
diff --git a/redmine/app/views/projects/list_files.rhtml b/redmine/app/views/projects/list_files.rhtml
index ced6400ba..4498f2544 100644
--- a/redmine/app/views/projects/list_files.rhtml
+++ b/redmine/app/views/projects/list_files.rhtml
@@ -1,13 +1,13 @@
-<h2><%=_('Files')%></h2>
+<h2><%=l(:label_attachment_plural)%></h2>
<% delete_allowed = authorize_for('versions', 'destroy_file') %>
<table border="0" cellspacing="1" cellpadding="2" class="listTableContent">
<tr class="ListHead">
- <th><%=_('Version')%></th>
- <th><%=_('File')%></th>
- <th><%=_('Date')%></th>
- <th><%=_('Size')%></th>
+ <th><%=l(:field_version)%></th>
+ <th><%=l(:field_filename)%></th>
+ <th><%=l(:label_date)%></th>
+ <th><%=l(:field_filesize)%></th>
<th>D/L</th>
<th>MD5</th>
<% if delete_allowed %><th></th><% end %>
@@ -28,7 +28,7 @@
<% if delete_allowed %>
<td align="center">
<%= start_form_tag :controller => 'versions', :action => 'destroy_file', :id => version, :attachment_id => file %>
- <%= submit_tag _('Delete'), :class => "button-small" %>
+ <%= submit_tag l(:button_delete), :class => "button-small" %>
<%= end_form_tag %>
</td>
<% end %>
@@ -40,7 +40,7 @@
<br />
<p>
-<%= link_to_if_authorized '&#187; ' + _('New'), :controller => 'projects', :action => 'add_file', :id => @project %>
+<%= link_to_if_authorized '&#187; ' + l(:label_attachment_new), :controller => 'projects', :action => 'add_file', :id => @project %>
</p>
diff --git a/redmine/app/views/projects/list_issues.rhtml b/redmine/app/views/projects/list_issues.rhtml
index 652ad6bc5..4bba76bb7 100644
--- a/redmine/app/views/projects/list_issues.rhtml
+++ b/redmine/app/views/projects/list_issues.rhtml
@@ -1,56 +1,53 @@
-<h2><%=_('Issues')%></h2>
+<h2><%=l(:label_issue_plural)%></h2>
<form method="post" class="noborder">
- <table cellpadding=2>
+<table cellpadding=2>
<tr>
- <td><small><%=_('Status')%>:</small><br /><%= search_filter_tag 'status_id', :class => 'select-small' %></td>
- <td><small><%=_('Tracker')%>:</small><br /><%= search_filter_tag 'tracker_id', :class => 'select-small' %></td>
- <td><small><%=_('Priority')%>:</small><br /><%= search_filter_tag 'priority_id', :class => 'select-small' %></td>
- <td><small><%=_('Category')%>:</small><br /><%= search_filter_tag 'category_id', :class => 'select-small' %></td>
- <td><small><%=_('Fixed in version')%>:</small><br /><%= search_filter_tag 'fixed_version_id', :class => 'select-small' %></td>
- <td><small><%=_('Assigned to')%>:</small><br /><%= search_filter_tag 'assigned_to_id', :class => 'select-small' %></td>
- <td><small><%=_('Subprojects')%>:</small><br /><%= search_filter_tag 'subproject_id', :class => 'select-small' %></td>
+ <td><small><%=l(:field_status)%>:</small><br /><%= search_filter_tag 'status_id', :class => 'select-small' %></td>
+ <td><small><%=l(:field_tracker)%>:</small><br /><%= search_filter_tag 'tracker_id', :class => 'select-small' %></td>
+ <td><small><%=l(:field_priority)%>:</small><br /><%= search_filter_tag 'priority_id', :class => 'select-small' %></td>
+ <td><small><%=l(:field_category)%>:</small><br /><%= search_filter_tag 'category_id', :class => 'select-small' %></td>
+ <td><small><%=l(:field_fixed_version)%>:</small><br /><%= search_filter_tag 'fixed_version_id', :class => 'select-small' %></td>
+ <td><small><%=l(:field_assigned_to)%>:</small><br /><%= search_filter_tag 'assigned_to_id', :class => 'select-small' %></td>
+ <td><small><%=l(:label_subproject_plural)%>:</small><br /><%= search_filter_tag 'subproject_id', :class => 'select-small' %></td>
<td valign="bottom">
- <%= submit_tag _('Apply filter'), :class => 'button-small' %>
+ <%= submit_tag l(:button_apply), :class => 'button-small' %>
<%= end_form_tag %>
<%= start_form_tag %>
- <%= submit_tag _('Reset'), :class => 'button-small' %>
+ <%= submit_tag l(:button_clear), :class => 'button-small' %>
<%= end_form_tag %>
</td>
</tr>
</table>
&nbsp;
- <table border="0" cellspacing="1" cellpadding="2" class="listTableContent">
-
- <tr><td colspan="7" align="right">
- <small><%= link_to 'Export to CSV', :action => 'export_issues_csv', :id => @project.id %></small>
- </td></tr>
-
- <tr class="ListHead">
- <%= sort_header_tag('issues.id', :caption => '#') %>
- <%= sort_header_tag('issue_statuses.name', :caption => _('Status')) %>
- <%= sort_header_tag('issues.tracker_id', :caption => _('Tracker')) %>
- <th><%=_('Subject')%></th>
- <%= sort_header_tag('users.lastname', :caption => _('Author')) %>
- <%= sort_header_tag('issues.created_on', :caption => _('Created on')) %>
- <%= sort_header_tag('issues.updated_on', :caption => _('Last update')) %>
- </tr>
-
- <% for issue in @issues %>
- <tr bgcolor="#<%= issue.status.html_color %>">
- <td align="center"><%= link_to issue.long_id, :controller => 'issues', :action => 'show', :id => issue %></td>
- <td align="center"><%= issue.status.name %></td>
- <td align="center"><%= issue.tracker.name %></td>
- <td><%= link_to issue.subject, :controller => 'issues', :action => 'show', :id => issue %></td>
- <td align="center"><%= issue.author.display_name %></td>
- <td align="center"><%= format_time(issue.created_on) %></td>
- <td align="center"><%= format_time(issue.updated_on) %></td>
- </tr>
- <% end %>
- </table>
- <p>
- <%= pagination_links_full @issue_pages %>
- [ <%= @issue_pages.current.first_item %> - <%= @issue_pages.current.last_item %> / <%= @issue_count %> ]
- </p> \ No newline at end of file
+<table border="0" cellspacing="1" cellpadding="2" class="listTableContent">
+ <tr><td colspan="7" align="right">
+ <small><%= link_to l(:label_export_csv), :action => 'export_issues_csv', :id => @project.id %></small>
+ </td></tr>
+ <tr class="ListHead">
+ <%= sort_header_tag('issues.id', :caption => '#') %>
+ <%= sort_header_tag('issue_statuses.name', :caption => l(:field_status)) %>
+ <%= sort_header_tag('issues.tracker_id', :caption => l(:field_tracker)) %>
+ <th><%=l(:field_subject)%></th>
+ <%= sort_header_tag('users.lastname', :caption => l(:field_author)) %>
+ <%= sort_header_tag('issues.created_on', :caption => l(:field_created_on)) %>
+ <%= sort_header_tag('issues.updated_on', :caption => l(:field_updated_on)) %>
+ </tr>
+ <% for issue in @issues %>
+ <tr bgcolor="#<%= issue.status.html_color %>">
+ <td align="center"><%= link_to issue.long_id, :controller => 'issues', :action => 'show', :id => issue %></td>
+ <td align="center"><%= issue.status.name %></td>
+ <td align="center"><%= issue.tracker.name %></td>
+ <td><%= link_to issue.subject, :controller => 'issues', :action => 'show', :id => issue %></td>
+ <td align="center"><%= issue.author.display_name %></td>
+ <td align="center"><%= format_time(issue.created_on) %></td>
+ <td align="center"><%= format_time(issue.updated_on) %></td>
+ </tr>
+ <% end %>
+</table>
+<p>
+<%= pagination_links_full @issue_pages %>
+[ <%= @issue_pages.current.first_item %> - <%= @issue_pages.current.last_item %> / <%= @issue_count %> ]
+</p> \ No newline at end of file
diff --git a/redmine/app/views/projects/list_members.rhtml b/redmine/app/views/projects/list_members.rhtml
index 6fca0d2bf..655abb280 100644
--- a/redmine/app/views/projects/list_members.rhtml
+++ b/redmine/app/views/projects/list_members.rhtml
@@ -1,4 +1,4 @@
-<h2><%=_('Project members')%></h2>
+<h2><%=l(:label_member_plural)%></h2>
<% members = @members.group_by {|m| m.role } %>
<% members.each do |role, member| %>
diff --git a/redmine/app/views/projects/list_news.rhtml b/redmine/app/views/projects/list_news.rhtml
index aee4146bf..a1b15941a 100644
--- a/redmine/app/views/projects/list_news.rhtml
+++ b/redmine/app/views/projects/list_news.rhtml
@@ -1,4 +1,4 @@
-<h2><%=_('News')%></h2>
+<h2><%=l(:label_news_plural)%></h2>
<% for news in @news %>
<p>
@@ -7,11 +7,11 @@
<%= link_to_if_authorized image_tag('delete'), { :controller => 'news', :action => 'destroy', :id => news }, :confirm => 'Are you sure?' %>
<br />
<%= news.summary %>
- <small>[<%= link_to _('Read...'), :controller => 'news', :action => 'show', :id => news %>]</small>
+ <small>[<%= link_to l(:label_read), :controller => 'news', :action => 'show', :id => news %>]</small>
</p>
<% end %>
<%= pagination_links_full @news_pages %>
<p>
-<%= link_to_if_authorized '&#187; ' + _('Add'), :controller => 'projects', :action => 'add_news', :id => @project %>
+<%= link_to_if_authorized '&#187; ' + l(:label_news_new), :controller => 'projects', :action => 'add_news', :id => @project %>
</p>
diff --git a/redmine/app/views/projects/settings.rhtml b/redmine/app/views/projects/settings.rhtml
index f6b5e169f..1d1684ff6 100644
--- a/redmine/app/views/projects/settings.rhtml
+++ b/redmine/app/views/projects/settings.rhtml
@@ -1,14 +1,14 @@
-<h2><%=_('Settings')%></h2>
+<h2><%=l(:label_settings)%></h2>
<%= start_form_tag :action => 'edit', :id => @project %>
<%= render :partial => 'form' %>
-<center><%= submit_tag _('Save') %></center>
+<center><%= submit_tag l(:button_save) %></center>
<%= end_form_tag %>
&nbsp;
<div class="box">
-<h3><%=_('Members')%></h3>
+<h3><%=l(:label_member_plural)%></h3>
<%= error_messages_for 'member' %>
<table>
<% for member in @project.members.find(:all, :include => :user) %>
@@ -22,12 +22,12 @@
</select>
</td>
<td>
- <%= submit_tag _('Save'), :class => "button-small" %>
+ <%= submit_tag l(:button_change), :class => "button-small" %>
<%= end_form_tag %>
</td>
<td>
<%= start_form_tag :controller => 'members', :action => 'destroy', :id => member %>
- <%= submit_tag _('Delete'), :class => "button-small" %>
+ <%= submit_tag l(:button_delete), :class => "button-small" %>
<%= end_form_tag %>
</td>
</tr>
@@ -35,7 +35,7 @@
<% end %>
</table>
<hr />
- <label><%=_('New member')%></label><br/>
+ <label><%=l(:label_member_new)%></label><br/>
<%= start_form_tag :controller => 'projects', :action => 'add_member', :id => @project %>
<select name="member[user_id]">
<%= options_from_collection_for_select @users, "id", "display_name", @member.user_id %>
@@ -43,12 +43,12 @@
<select name="member[role_id]">
<%= options_from_collection_for_select @roles, "id", "name", @member.role_id %>
</select>
- <%= submit_tag _('Add') %>
+ <%= submit_tag l(:button_add) %>
<%= end_form_tag %>
</div>
<div class="box">
-<h3><%=_('Versions')%></h3>
+<h3><%=l(:label_version_plural)%></h3>
<table>
<% for version in @project.versions %>
@@ -57,7 +57,7 @@
<td><%=h version.description %></td>
<td>
<%= start_form_tag :controller => 'versions', :action => 'destroy', :id => version %>
- <%= submit_tag _('Delete'), :class => "button-small" %>
+ <%= submit_tag l(:button_delete), :class => "button-small" %>
<%= end_form_tag %>
</td>
</tr>
@@ -65,13 +65,13 @@
</table>
<hr />
<%= start_form_tag ({ :controller => 'projects', :action => 'add_version', :id => @project }, :method => 'get' ) %>
- <%= submit_tag _('New version...') %>
+ <%= submit_tag l(:label_version_new) %>
<%= end_form_tag %>
</div>
<div class="box">
-<h3><%=_('Issue categories')%></h3>
+<h3><%=l(:label_issue_category_plural)%></h3>
<table>
<% for @category in @project.issue_categories %>
<% unless @category.new_record? %>
@@ -81,12 +81,12 @@
<%= text_field 'category', 'name', :size => 25 %>
</td>
<td>
- <%= submit_tag _('Save'), :class => "button-small" %>
+ <%= submit_tag l(:button_save), :class => "button-small" %>
<%= end_form_tag %>
</td>
<td>
<%= start_form_tag :controller => 'issue_categories', :action => 'destroy', :id => @category %>
- <%= submit_tag _('Delete'), :class => "button-small" %>
+ <%= submit_tag l(:button_delete), :class => "button-small" %>
<%= end_form_tag %>
</td>
</tr>
@@ -96,10 +96,10 @@
<hr />
<%= start_form_tag :action => 'add_issue_category', :id => @project %>
+<label for="issue_category_name"><%=l(:label_issue_category_new)%></label><br/>
<%= error_messages_for 'issue_category' %>
-<label for="issue_category_name"><%=_('New category')%></label><br/>
<%= text_field 'issue_category', 'name', :size => 25 %>
-<%= submit_tag _('Create') %>
+<%= submit_tag l(:button_create) %>
<%= end_form_tag %>
</div>
diff --git a/redmine/app/views/projects/show.rhtml b/redmine/app/views/projects/show.rhtml
index 985142f3e..81f2bebc3 100644
--- a/redmine/app/views/projects/show.rhtml
+++ b/redmine/app/views/projects/show.rhtml
@@ -1,10 +1,10 @@
-<h2><%=_('Overview')%></h2>
+<h2><%=l(:label_overview)%></h2>
<div class="splitcontentleft">
<%= @project.description %>
<ul>
- <li><%=_('Homepage')%>: <%= link_to @project.homepage, @project.homepage %></li>
- <li><%=_('Created on')%>: <%= format_date(@project.created_on) %></li>
+ <li><%=l(:field_homepage)%>: <%= link_to @project.homepage, @project.homepage %></li>
+ <li><%=l(:field_created_on)%>: <%= format_date(@project.created_on) %></li>
<% for custom_value in @custom_values %>
<% if !custom_value.value.empty? %>
<li><%= custom_value.custom_field.name%>: <%= custom_value.value%></li>
@@ -13,31 +13,32 @@
</ul>
<div class="box">
- <h3><%= image_tag "tracker" %> <%=_('Trackers')%></h3>
+ <h3><%= image_tag "tracker" %> <%=l(:label_tracker_plural)%></h3>
<ul>
<% for tracker in @trackers %>
<li><%= link_to tracker.name, :controller => 'projects', :action => 'list_issues', :id => @project,
:set_filter => 1,
"tracker_id" => tracker.id %>:
- <%= Issue.count(:conditions => ["project_id=? and tracker_id=? and issue_statuses.is_closed=?", @project.id, tracker.id, false], :include => :status) %> <%=_('open')%>
+ <%= issue_count = Issue.count(:conditions => ["project_id=? and tracker_id=? and issue_statuses.is_closed=?", @project.id, tracker.id, false], :include => :status) %>
+ <%= lwr(:label_open_issues, issue_count) %>
</li>
<% end %>
</ul>
<% if authorize_for 'projects', 'add_issue' %>
- &#187; <%=_('Report an issue')%>:
+ &#187; <%=l(:label_issue_new)%>:
<ul>
<% @trackers.each do |tracker| %>
- <li><%= link_to _(tracker.name), :controller => 'projects', :action => 'add_issue', :id => @project, :tracker_id => tracker %></li>
+ <li><%= link_to tracker.name, :controller => 'projects', :action => 'add_issue', :id => @project, :tracker_id => tracker %></li>
<% end %>
</ul>
<% end %>
- <center><small>[ <%= link_to _('View all issues'), :controller => 'projects', :action => 'list_issues', :id => @project, :set_filter => 1 %> ]</small></center>
+ <center><small>[ <%= link_to l(:label_issue_view_all), :controller => 'projects', :action => 'list_issues', :id => @project, :set_filter => 1 %> ]</small></center>
</div>
</div>
<div class="splitcontentright">
<div class="box">
- <h3><%= image_tag "users" %> <%=_('Members')%></h3>
+ <h3><%= image_tag "users" %> <%=l(:label_member_plural)%></h3>
<% for member in @members %>
<%= link_to_user member.user %> (<%= member.role.name %>)<br />
<% end %>
@@ -45,7 +46,7 @@
<% if @subprojects %>
<div class="box">
- <h3><%= image_tag "projects" %> <%=_('Subprojects')%></h3>
+ <h3><%= image_tag "projects" %> <%=l(:label_subproject_plural)%></h3>
<% for subproject in @subprojects %>
<%= link_to subproject.name, :action => 'show', :id => subproject %><br />
<% end %>
@@ -53,16 +54,16 @@
<% end %>
<div class="box">
- <h3><%=_('Latest news')%></h3>
+ <h3><%=l(:label_news_latest)%></h3>
<% for news in @news %>
<p>
<b><%= news.title %></b> <small>(<%= link_to_user news.author %> <%= format_time(news.created_on) %>)</small><br />
<%= news.summary %>
- <small>[<%= link_to _('Read...'), :controller => 'news', :action => 'show', :id => news %>]</small>
+ <small>[<%= link_to l(:label_read), :controller => 'news', :action => 'show', :id => news %>]</small>
</p>
<hr />
<% end %>
- <center><small>[ <%= link_to _('View all news'), :controller => 'projects', :action => 'list_news', :id => @project %> ]</small></center>
+ <center><small>[ <%= link_to l(:label_news_view_all), :controller => 'projects', :action => 'list_news', :id => @project %> ]</small></center>
</div>
</div>
diff --git a/redmine/app/views/reports/_simple.rhtml b/redmine/app/views/reports/_simple.rhtml
index f556d0a89..2dde32a5e 100644
--- a/redmine/app/views/reports/_simple.rhtml
+++ b/redmine/app/views/reports/_simple.rhtml
@@ -6,9 +6,9 @@
<% for status in @statuses %>
<td align="center" width="<%= col_width %>%" bgcolor="#<%= status.html_color %>"><small><%= status.name %></small></td>
<% end %>
-<td align="center" width="<%= col_width %>%"><strong><%=_('Open')%></strong></td>
-<td align="center" width="<%= col_width %>%"><strong><%=_('Closed')%></strong></td>
-<td align="center" width="<%= col_width %>%"><strong><%=_('Total')%></strong></td>
+<td align="center" width="<%= col_width %>%"><strong><%=l(:label_open_issues_plural)%></strong></td>
+<td align="center" width="<%= col_width %>%"><strong><%=l(:label_closed_issues_plural)%></strong></td>
+<td align="center" width="<%= col_width %>%"><strong><%=l(:label_total)%></strong></td>
</tr>
<% for row in rows %>
diff --git a/redmine/app/views/reports/issue_report.rhtml b/redmine/app/views/reports/issue_report.rhtml
index 32a1f55f2..08347bdb2 100644
--- a/redmine/app/views/reports/issue_report.rhtml
+++ b/redmine/app/views/reports/issue_report.rhtml
@@ -1,13 +1,13 @@
-<h2><%=_('Reports')%></h2>
+<h2><%=l(:label_report_plural)%></h2>
-<strong><%=_('Issues by tracker')%></strong>
+<strong><%=l(:field_tracker)%></strong>
<%= render :partial => 'simple', :locals => { :data => @issues_by_tracker, :field_name => "tracker_id", :rows => @trackers } %>
<br />
-<strong><%=_('Issues by priority')%></strong>
+<strong><%=l(:field_priority)%></strong>
<%= render :partial => 'simple', :locals => { :data => @issues_by_priority, :field_name => "priority_id", :rows => @priorities } %>
<br />
-<strong><%=_('Issues by category')%></strong>
+<strong><%=l(:field_category)%></strong>
<%= render :partial => 'simple', :locals => { :data => @issues_by_category, :field_name => "category_id", :rows => @categories } %>
diff --git a/redmine/app/views/roles/_form.rhtml b/redmine/app/views/roles/_form.rhtml
index cc30e82b0..b007d1e34 100644
--- a/redmine/app/views/roles/_form.rhtml
+++ b/redmine/app/views/roles/_form.rhtml
@@ -2,22 +2,22 @@
<div class="box">
<!--[form:role]-->
-<p><label for="role_name"><%=_('Name')%> <span class="required">*</span></label><br />
+<p><label for="role_name"><%=l(:field_name)%> <span class="required">*</span></label><br />
<%= text_field 'role', 'name' %></p>
-<strong><%=_('Permissions')%></strong>
+<strong><%=l(:label_permissions)%>:</strong>
<% permissions = @permissions.group_by {|p| p.group_id } %>
-<% permissions.keys.sort.each do |group_id| %>
-<fieldset><legend><%= _(Permission::GROUPS[group_id]) %></legend>
+<% permissions.keys.sort.each do |group_id| %>
+<fieldset style="margin-top: 6px;"><legend><strong><%= l(Permission::GROUPS[group_id]) %></strong></legend>
<% permissions[group_id].each do |p| %>
- <div style="width:200px;float:left;"><%= check_box_tag "permission_ids[]", p.id, (@role.permissions.include? p) %>
- <%= _(p.description) %>
+ <div style="width:170px;float:left;"><%= check_box_tag "permission_ids[]", p.id, (@role.permissions.include? p) %>
+ <%= l(p.description.to_sym) %>
</div>
<% end %>
</fieldset>
<% end %>
<br />
-<a href="javascript:checkAll('role_form', true)"><%=_('Check all')%></a> |
-<a href="javascript:checkAll('role_form', false)"><%=_('Uncheck all')%></a><br />
+<a href="javascript:checkAll('role_form', true)"><%=l(:button_check_all)%></a> |
+<a href="javascript:checkAll('role_form', false)"><%=l(:button_uncheck_all)%></a><br />
<!--[eoform:role]-->
</div>
diff --git a/redmine/app/views/roles/edit.rhtml b/redmine/app/views/roles/edit.rhtml
index cffbe0119..0bc352506 100644
--- a/redmine/app/views/roles/edit.rhtml
+++ b/redmine/app/views/roles/edit.rhtml
@@ -1,10 +1,8 @@
-<h2><%=_('Role')%></h2>
+<h2><%=l(:label_role)%></h2>
<%= start_form_tag ({ :action => 'edit', :id => @role }, :id => 'role_form') %>
<%= render :partial => 'form' %>
-
-<br />
-<%= submit_tag _('Save') %>
+<%= submit_tag l(:button_save) %>
<%= end_form_tag %>
diff --git a/redmine/app/views/roles/list.rhtml b/redmine/app/views/roles/list.rhtml
index eb1a9ecc2..ae92a8071 100644
--- a/redmine/app/views/roles/list.rhtml
+++ b/redmine/app/views/roles/list.rhtml
@@ -1,8 +1,8 @@
-<h2><%=_('Roles')%></h2>
+<h2><%=l(:label_role_plural)%></h2>
<table border="0" cellspacing="1" cellpadding="2" class="listTableContent">
<tr class="ListHead">
- <th><%=_('Role')%></th>
+ <th><%=l(:label_role)%></th>
<th></th>
</tr>
@@ -11,7 +11,7 @@
<td><%= link_to role.name, :action => 'edit', :id => role %></td>
<td align="center">
<%= start_form_tag :action => 'destroy', :id => role %>
- <%= submit_tag _('Delete'), :class => "button-small" %>
+ <%= submit_tag l(:button_delete), :class => "button-small" %>
<%= end_form_tag %>
</tr>
<% end %>
@@ -20,4 +20,4 @@
<%= pagination_links_full @role_pages %>
<br />
-<%= link_to '&#187; ' + _('New role'), :action => 'new' %>
+<%= link_to '&#187; ' + l(:label_role_new), :action => 'new' %>
diff --git a/redmine/app/views/roles/new.rhtml b/redmine/app/views/roles/new.rhtml
index c82fb2144..11d2d9209 100644
--- a/redmine/app/views/roles/new.rhtml
+++ b/redmine/app/views/roles/new.rhtml
@@ -1,8 +1,7 @@
-<h2><%=_('New role')%></h2>
+<h2><%=l(:label_role_new)%></h2>
<%= start_form_tag ({ :action => 'new' }, :id => 'role_form') %>
-<%= render :partial => 'form' %>
-
-<br /><%= submit_tag _('Create') %>
+<%= render :partial => 'form' %>
+<%= submit_tag l(:button_create) %>
<%= end_form_tag %>
diff --git a/redmine/app/views/roles/workflow.rhtml b/redmine/app/views/roles/workflow.rhtml
index 652f6a0f1..3c2d46051 100644
--- a/redmine/app/views/roles/workflow.rhtml
+++ b/redmine/app/views/roles/workflow.rhtml
@@ -1,22 +1,22 @@
-<h2><%=_('Workflow setup')%></h2>
+<h2><%=l(:label_workflow)%></h2>
-<p><%=_('Select a workflow to edit')%>:</p>
+<p><%=l(:text_workflow_edit)%>:</p>
<%= start_form_tag ({:action => 'workflow'}, :method => 'get') %>
<div style="float:left;margin-right:10px;">
-<p><label for="role_id"><%=_('Role')%></label><br/>
+<p><label for="role_id"><%=l(:label_role)%></label><br/>
<select id="role_id" name="role_id">
<%= options_from_collection_for_select @roles, "id", "name", (@role.id unless @role.nil?) %>
</select></p>
</div>
<div>
-<p><label for="tracker_id"><%=_('Tracker')%></label><br/>
+<p><label for="tracker_id"><%=l(:label_tracker)%></label><br/>
<select id="tracker_id" name="tracker_id">
<%= options_from_collection_for_select @trackers, "id", "name", (@tracker.id unless @tracker.nil?) %>
</select>
-<%= submit_tag _('Edit') %>
+<%= submit_tag l(:button_edit) %>
</p>
</div>
<%= end_form_tag %>
@@ -28,8 +28,8 @@
<%= form_tag ({:action => 'workflow', :role_id => @role, :tracker_id => @tracker }, :id => 'workflow_form' ) %>
<table>
<tr>
- <td align="center"><strong><%=_('Issue status')%></strong></td>
- <td align="center" colspan="<%= @statuses.length %>"><strong><%=_('New statuses allowed')%></strong></td>
+ <td align="center"><strong><%=l(:label_current_status)%></strong></td>
+ <td align="center" colspan="<%= @statuses.length %>"><strong><%=l(:label_new_statuses_allowed)%></strong></td>
</tr>
<tr>
<td></td>
@@ -59,11 +59,11 @@
</table>
<br />
<p>
-<a href="javascript:checkAll('workflow_form', true)"><%=_('Check all')%></a> |
-<a href="javascript:checkAll('workflow_form', false)"><%=_('Uncheck all')%></a>
+<a href="javascript:checkAll('workflow_form', true)"><%=l(:button_check_all)%></a> |
+<a href="javascript:checkAll('workflow_form', false)"><%=l(:button_uncheck_all)%></a>
</p>
<br />
-<%= submit_tag _('Save') %>
+<%= submit_tag l(:button_save) %>
<%= end_form_tag %>
<% end %>
diff --git a/redmine/app/views/trackers/_form.rhtml b/redmine/app/views/trackers/_form.rhtml
index 0eab8e96a..e0b74ec37 100644
--- a/redmine/app/views/trackers/_form.rhtml
+++ b/redmine/app/views/trackers/_form.rhtml
@@ -1,10 +1,10 @@
<%= error_messages_for 'tracker' %>
<!--[form:tracker]-->
-<p><label for="tracker_name"><%=_('Name')%></label> <span class="required">*</span><br/>
+<p><label for="tracker_name"><%=l(:field_name)%></label> <span class="required">*</span><br/>
<%= text_field 'tracker', 'name' %></p>
<p><%= check_box 'tracker', 'is_in_chlog' %>
-<label for="tracker_is_in_chlog"><%=_('View issues in change log')%></label></p>
+<label for="tracker_is_in_chlog"><%=l(:field_is_in_chlog)%></label></p>
<!--[eoform:tracker]-->
diff --git a/redmine/app/views/trackers/edit.rhtml b/redmine/app/views/trackers/edit.rhtml
index a209b3f38..25cec51d2 100644
--- a/redmine/app/views/trackers/edit.rhtml
+++ b/redmine/app/views/trackers/edit.rhtml
@@ -1,6 +1,6 @@
-<h2><%=_('Tracker')%></h2>
+<h2><%=l(:label_tracker)%></h2>
<%= start_form_tag :action => 'edit', :id => @tracker %>
<%= render :partial => 'form' %>
- <%= submit_tag _('Save') %>
+ <%= submit_tag l(:button_save) %>
<%= end_form_tag %>
diff --git a/redmine/app/views/trackers/list.rhtml b/redmine/app/views/trackers/list.rhtml
index 8b03a1413..475a6b9da 100644
--- a/redmine/app/views/trackers/list.rhtml
+++ b/redmine/app/views/trackers/list.rhtml
@@ -1,8 +1,8 @@
-<h2><%=_('Trackers')%></h2>
+<h2><%=l(:label_tracker_plural)%></h2>
<table border="0" cellspacing="1" cellpadding="2" class="listTableContent">
<tr class="ListHead">
- <th><%=_('Tracker')%></th>
+ <th><%=l(:label_tracker)%></th>
<th></th>
</tr>
@@ -11,7 +11,7 @@
<td><%= link_to tracker.name, :action => 'edit', :id => tracker %></td>
<td align="center">
<%= start_form_tag :action => 'destroy', :id => tracker %>
- <%= submit_tag _('Delete'), :class => "button-small" %>
+ <%= submit_tag l(:button_delete), :class => "button-small" %>
<%= end_form_tag %>
</td>
</tr>
@@ -21,4 +21,4 @@
<%= pagination_links_full @tracker_pages %>
<br />
-<%= link_to '&#187; ' + _('New tracker'), :action => 'new' %>
+<%= link_to '&#187; ' + l(:label_tracker_new), :action => 'new' %>
diff --git a/redmine/app/views/trackers/new.rhtml b/redmine/app/views/trackers/new.rhtml
index a24fca738..788854c28 100644
--- a/redmine/app/views/trackers/new.rhtml
+++ b/redmine/app/views/trackers/new.rhtml
@@ -1,7 +1,7 @@
-<h2><%=_('New tracker')%></h2>
+<h2><%=l(:label_tracker_new)%></h2>
<%= start_form_tag :action => 'new' %>
<%= render :partial => 'form' %>
- <%= submit_tag _('Create') %>
+ <%= submit_tag l(:button_create) %>
<%= end_form_tag %>
diff --git a/redmine/app/views/users/_form.rhtml b/redmine/app/views/users/_form.rhtml
index 84cc6f171..db5639f06 100644
--- a/redmine/app/views/users/_form.rhtml
+++ b/redmine/app/views/users/_form.rhtml
@@ -2,26 +2,26 @@
<div class="box">
<!--[form:user]-->
-<p><label for="user_login"><%=_('Login')%></label> <span class="required">*</span><br/>
+<p><label for="user_login"><%=l(:field_login)%></label> <span class="required">*</span><br/>
<%= text_field 'user', 'login', :size => 25 %></p>
-<p><label for="password"><%=_('Password')%></label> <span class="required">*</span><br/>
+<p><label for="password"><%=l(:field_password)%></label> <span class="required">*</span><br/>
<%= password_field_tag 'password', nil, :size => 25 %></p>
-<p><label for="password_confirmation"><%=_('Confirmation')%></label> <span class="required">*</span><br/>
+<p><label for="password_confirmation"><%=l(:field_password_confirmation)%></label> <span class="required">*</span><br/>
<%= password_field_tag 'password_confirmation', nil, :size => 25 %></p>
-<p><label for="user_firstname"><%=_('Firstname')%></label> <span class="required">*</span><br/>
+<p><label for="user_firstname"><%=l(:field_firstname)%></label> <span class="required">*</span><br/>
<%= text_field 'user', 'firstname' %></p>
-<p><label for="user_lastname"><%=_('Lastname')%></label> <span class="required">*</span><br/>
+<p><label for="user_lastname"><%=l(:field_lastname)%></label> <span class="required">*</span><br/>
<%= text_field 'user', 'lastname' %></p>
-<p><label for="user_mail"><%=_('Mail')%></label> <span class="required">*</span><br/>
+<p><label for="user_mail"><%=l(:field_mail)%></label> <span class="required">*</span><br/>
<%= text_field 'user', 'mail' %></p>
-<p><label for="user_language"><%=_('Language')%></label><br/>
-<%= select("user", "language", Localization.langs.invert) %></p>
+<p><label for="user_language"><%=l(:field_language)%></label><br/>
+<%= select("user", "language", lang_options_for_select) %></p>
<% for custom_value in @custom_values %>
<p><%= custom_field_tag_with_label custom_value %></p>
@@ -29,9 +29,9 @@
<div style="clear: both;"></div>
-<p><%= check_box 'user', 'admin' %> <label for="user_admin"><%=_('Administrator')%></label></p>
+<p><%= check_box 'user', 'admin' %> <label for="user_admin"><%=l(:field_admin)%></label></p>
-<p><%= check_box 'user', 'mail_notification' %> <label for="user_mail_notification"><%=_('Mail notifications')%></label></p>
+<p><%= check_box 'user', 'mail_notification' %> <label for="user_mail_notification"><%=l(:field_mail_notification)%></label></p>
<!--[eoform:user]-->
</div>
diff --git a/redmine/app/views/users/add.rhtml b/redmine/app/views/users/add.rhtml
index 9d0ba8d3a..13e7069fc 100644
--- a/redmine/app/views/users/add.rhtml
+++ b/redmine/app/views/users/add.rhtml
@@ -1,6 +1,6 @@
-<h2><%=_('New user')%></h2>
+<h2><%=l(:label_user_new)%></h2>
<%= start_form_tag :action => 'add' %>
<%= render :partial => 'form' %>
- <%= submit_tag _('Create') %>
+ <%= submit_tag l(:button_create) %>
<%= end_form_tag %>
diff --git a/redmine/app/views/users/edit.rhtml b/redmine/app/views/users/edit.rhtml
index a033a7fda..524b920f6 100644
--- a/redmine/app/views/users/edit.rhtml
+++ b/redmine/app/views/users/edit.rhtml
@@ -1,7 +1,6 @@
-<h2><%=_('User')%></h2>
+<h2><%=l(:label_user)%></h2>
<%= start_form_tag :action => 'edit', :id => @user %>
<%= render :partial => 'form' %>
- <%= submit_tag _('Save') %>
-
+ <%= submit_tag l(:button_save) %>
<%= end_form_tag %>
diff --git a/redmine/app/views/users/list.rhtml b/redmine/app/views/users/list.rhtml
index 7263000aa..129decd71 100644
--- a/redmine/app/views/users/list.rhtml
+++ b/redmine/app/views/users/list.rhtml
@@ -1,15 +1,15 @@
-<h2><%=_('Users')%></h2>
+<h2><%=l(:label_user_plural)%></h2>
<table border="0" cellspacing="1" cellpadding="2" class="listTableContent">
<tr class="ListHead">
- <%= sort_header_tag('login', :caption => _('Login')) %>
- <%= sort_header_tag('firstname', :caption => _('Firstname')) %>
- <%= sort_header_tag('lastname', :caption => _('Lastname')) %>
- <th><%=_('Mail')%></th>
- <%= sort_header_tag('admin', :caption => _('Admin')) %>
- <%= sort_header_tag('status', :caption => _('Status')) %>
- <%= sort_header_tag('created_on', :caption => _('Created on')) %>
- <%= sort_header_tag('last_login_on', :caption => _('Last login')) %>
+ <%= sort_header_tag('login', :caption => l(:field_login)) %>
+ <%= sort_header_tag('firstname', :caption => l(:field_firstname)) %>
+ <%= sort_header_tag('lastname', :caption => l(:field_lastname)) %>
+ <th><%=l(:field_mail)%></th>
+ <%= sort_header_tag('admin', :caption => l(:field_admin)) %>
+ <%= sort_header_tag('status', :caption => l(:field_status)) %>
+ <%= sort_header_tag('created_on', :caption => l(:field_created_on)) %>
+ <%= sort_header_tag('last_login_on', :caption => l(:field_last_login_on)) %>
<th></th>
</tr>
<% for user in @users %>
@@ -26,10 +26,10 @@
<%= start_form_tag :action => 'edit', :id => user %>
<% if user.locked? %>
<%= hidden_field_tag 'user[status]', User::STATUS_ACTIVE %>
- <%= submit_tag _('Unlock'), :class => "button-small" %>
+ <%= submit_tag l(:button_unlock), :class => "button-small" %>
<% else %>
<%= hidden_field_tag 'user[status]', User::STATUS_LOCKED %>
- <%= submit_tag _('Lock'), :class => "button-small" %>
+ <%= submit_tag l(:button_lock), :class => "button-small" %>
<% end %>
<%= end_form_tag %>
</td>
@@ -42,5 +42,5 @@
</p>
<p>
-<%= link_to '&#187; ' + _('New user'), :action => 'add' %>
+<%= link_to '&#187; ' + l(:label_user_new), :action => 'add' %>
</p> \ No newline at end of file
diff --git a/redmine/app/views/versions/_form.rhtml b/redmine/app/views/versions/_form.rhtml
index a62d22d84..18de3c5c3 100644
--- a/redmine/app/views/versions/_form.rhtml
+++ b/redmine/app/views/versions/_form.rhtml
@@ -1,13 +1,13 @@
<%= error_messages_for 'version' %>
<!--[form:version]-->
-<p><label for="version_name"><%=_('Version')%></label> <span class="required">*</span><br/>
+<p><label for="version_name"><%=l(:field_name)%></label> <span class="required">*</span><br/>
<%= text_field 'version', 'name', :size => 20 %></p>
-<p><label for="version_description"><%=_('Description')%></label><br/>
+<p><label for="version_description"><%=l(:field_description)%></label><br/>
<%= text_field 'version', 'description', :size => 60 %></p>
-<p><label for="version_effective_date"><%=_('Date')%></label><br/>
+<p><label for="version_effective_date"><%=l(:field_effective_date)%></label><br/>
<%= date_select 'version', 'effective_date' %></p>
<!--[eoform:version]-->
diff --git a/redmine/app/views/versions/edit.rhtml b/redmine/app/views/versions/edit.rhtml
index 6db4daa00..6851d79b8 100644
--- a/redmine/app/views/versions/edit.rhtml
+++ b/redmine/app/views/versions/edit.rhtml
@@ -1,8 +1,8 @@
-<h2><%=_('Version')%></h2>
+<h2><%=l(:label_version)%></h2>
<%= start_form_tag :action => 'edit', :id => @version %>
<%= render :partial => 'form' %>
- <%= submit_tag _('Save') %>
+ <%= submit_tag l(:button_save) %>
<%= end_form_tag %>
diff --git a/redmine/app/views/welcome/index.rhtml b/redmine/app/views/welcome/index.rhtml
index 694de9b7b..974cc7694 100644
--- a/redmine/app/views/welcome/index.rhtml
+++ b/redmine/app/views/welcome/index.rhtml
@@ -1,14 +1,14 @@
<div class="splitcontentleft">
- <h2><%= $RDM_WELCOME_TITLE || _('Welcome') %> !</h2>
+ <h2><%= $RDM_WELCOME_TITLE || l(:label_home) %></h2>
<p><%= $RDM_WELCOME_TEXT %></p>
<div class="box">
- <h3><%=_('Latest news')%></h3>
+ <h3><%=l(:label_news_latest)%></h3>
<% for news in @news %>
<p>
<b><%= news.title %></b> (<%= link_to_user news.author %> <%= format_time(news.created_on) %> - <%= news.project.name %>)<br />
<%= news.summary %><br />
- [<%= link_to 'Read...', :controller => 'news', :action => 'show', :id => news %>]
+ [<%= link_to l(:label_read), :controller => 'news', :action => 'show', :id => news %>]
</p>
<hr />
<% end %>
@@ -17,15 +17,14 @@
<div class="splitcontentright">
<div class="box">
- <h3><%=_('Latest projects')%></h3>
+ <h3><%=l(:label_project_latest)%></h3>
<ul>
<% for project in @projects %>
<li>
- <%= link_to project.name, :controller => 'projects', :action => 'show', :id => project %> (added <%= format_time(project.created_on) %>)<br />
+ <%= link_to project.name, :controller => 'projects', :action => 'show', :id => project %> (<%= format_time(project.created_on) %>)<br />
<%= project.description %>
</li>
<% end %>
</ul>
- </div>
-
+ </div>
</div>
diff --git a/redmine/db/migrate/001_setup.rb b/redmine/db/migrate/001_setup.rb
index 7aa9b5ff7..65fd23422 100644
--- a/redmine/db/migrate/001_setup.rb
+++ b/redmine/db/migrate/001_setup.rb
@@ -78,7 +78,7 @@ class Setup < ActiveRecord::Migration
t.column "project_id", :integer, :default => 0, :null => false
t.column "category_id", :integer, :default => 0, :null => false
t.column "title", :string, :limit => 60, :default => "", :null => false
- t.column "description", :text, :default => "", :null => false
+ t.column "description", :text, :default => ""
t.column "created_on", :timestamp
end
@@ -113,7 +113,8 @@ class Setup < ActiveRecord::Migration
t.column "tracker_id", :integer, :default => 0, :null => false
t.column "project_id", :integer, :default => 0, :null => false
t.column "subject", :string, :default => "", :null => false
- t.column "description", :text, :default => "", :null => false
+ t.column "description", :text, :default => "", :null => false
+ t.column "due_date", :date
t.column "category_id", :integer
t.column "status_id", :integer, :default => 0, :null => false
t.column "assigned_to_id", :integer
@@ -219,55 +220,55 @@ class Setup < ActiveRecord::Migration
end
# project
- Permission.create :controller => "projects", :action => "show", :description => "Overview", :sort => 100, :is_public => true
- Permission.create :controller => "projects", :action => "changelog", :description => "View change log", :sort => 105, :is_public => true
- Permission.create :controller => "reports", :action => "issue_report", :description => "View reports", :sort => 110, :is_public => true
- Permission.create :controller => "projects", :action => "settings", :description => "Settings", :sort => 150
- Permission.create :controller => "projects", :action => "edit", :description => "Edit", :sort => 151
+ Permission.create :controller => "projects", :action => "show", :description => "label_overview", :sort => 100, :is_public => true
+ Permission.create :controller => "projects", :action => "changelog", :description => "label_change_log", :sort => 105, :is_public => true
+ Permission.create :controller => "reports", :action => "issue_report", :description => "label_report_plural", :sort => 110, :is_public => true
+ Permission.create :controller => "projects", :action => "settings", :description => "label_settings", :sort => 150
+ Permission.create :controller => "projects", :action => "edit", :description => "button_edit", :sort => 151
# members
- Permission.create :controller => "projects", :action => "list_members", :description => "View list", :sort => 200, :is_public => true
- Permission.create :controller => "projects", :action => "add_member", :description => "New member", :sort => 220
- Permission.create :controller => "members", :action => "edit", :description => "Edit", :sort => 221
- Permission.create :controller => "members", :action => "destroy", :description => "Delete", :sort => 222
+ Permission.create :controller => "projects", :action => "list_members", :description => "button_list", :sort => 200, :is_public => true
+ Permission.create :controller => "projects", :action => "add_member", :description => "button_add", :sort => 220
+ Permission.create :controller => "members", :action => "edit", :description => "button_edit", :sort => 221
+ Permission.create :controller => "members", :action => "destroy", :description => "button_delete", :sort => 222
# versions
- Permission.create :controller => "projects", :action => "add_version", :description => "New version", :sort => 320
- Permission.create :controller => "versions", :action => "edit", :description => "Edit", :sort => 321
- Permission.create :controller => "versions", :action => "destroy", :description => "Delete", :sort => 322
+ Permission.create :controller => "projects", :action => "add_version", :description => "button_add", :sort => 320
+ Permission.create :controller => "versions", :action => "edit", :description => "button_edit", :sort => 321
+ Permission.create :controller => "versions", :action => "destroy", :description => "button_delete", :sort => 322
# issue categories
- Permission.create :controller => "projects", :action => "add_issue_category", :description => "New issue category", :sort => 420
- Permission.create :controller => "issue_categories", :action => "edit", :description => "Edit", :sort => 421
- Permission.create :controller => "issue_categories", :action => "destroy", :description => "Delete", :sort => 422
+ Permission.create :controller => "projects", :action => "add_issue_category", :description => "button_add", :sort => 420
+ Permission.create :controller => "issue_categories", :action => "edit", :description => "button_edit", :sort => 421
+ Permission.create :controller => "issue_categories", :action => "destroy", :description => "button_delete", :sort => 422
# issues
- Permission.create :controller => "projects", :action => "list_issues", :description => "View list", :sort => 1000, :is_public => true
- Permission.create :controller => "projects", :action => "export_issues_csv", :description => "Export list to CSV", :sort => 1001, :is_public => true
- Permission.create :controller => "issues", :action => "show", :description => "View", :sort => 1005, :is_public => true
- Permission.create :controller => "issues", :action => "download", :description => "Download file", :sort => 1010, :is_public => true
- Permission.create :controller => "projects", :action => "add_issue", :description => "Report an issue", :sort => 1050, :mail_option => 1, :mail_enabled => 1
- Permission.create :controller => "issues", :action => "edit", :description => "Edit", :sort => 1055
- Permission.create :controller => "issues", :action => "change_status", :description => "Change status", :sort => 1060, :mail_option => 1, :mail_enabled => 1
- Permission.create :controller => "issues", :action => "destroy", :description => "Delete", :sort => 1065
- Permission.create :controller => "issues", :action => "add_attachment", :description => "Add file", :sort => 1070
- Permission.create :controller => "issues", :action => "destroy_attachment", :description => "Delete file", :sort => 1075
+ Permission.create :controller => "projects", :action => "list_issues", :description => "button_list", :sort => 1000, :is_public => true
+ Permission.create :controller => "projects", :action => "export_issues_csv", :description => "label_export_csv", :sort => 1001, :is_public => true
+ Permission.create :controller => "issues", :action => "show", :description => "button_view", :sort => 1005, :is_public => true
+ Permission.create :controller => "issues", :action => "download", :description => "button_download", :sort => 1010, :is_public => true
+ Permission.create :controller => "projects", :action => "add_issue", :description => "button_add", :sort => 1050, :mail_option => 1, :mail_enabled => 1
+ Permission.create :controller => "issues", :action => "edit", :description => "button_edit", :sort => 1055
+ Permission.create :controller => "issues", :action => "change_status", :description => "label_change_status", :sort => 1060, :mail_option => 1, :mail_enabled => 1
+ Permission.create :controller => "issues", :action => "destroy", :description => "button_delete", :sort => 1065
+ Permission.create :controller => "issues", :action => "add_attachment", :description => "label_attachment_new", :sort => 1070
+ Permission.create :controller => "issues", :action => "destroy_attachment", :description => "label_attachment_delete", :sort => 1075
# news
- Permission.create :controller => "projects", :action => "list_news", :description => "View list", :sort => 1100, :is_public => true
- Permission.create :controller => "news", :action => "show", :description => "View", :sort => 1101, :is_public => true
- Permission.create :controller => "projects", :action => "add_news", :description => "Add", :sort => 1120
- Permission.create :controller => "news", :action => "edit", :description => "Edit", :sort => 1121
- Permission.create :controller => "news", :action => "destroy", :description => "Delete", :sort => 1122
+ Permission.create :controller => "projects", :action => "list_news", :description => "button_list", :sort => 1100, :is_public => true
+ Permission.create :controller => "news", :action => "show", :description => "button_view", :sort => 1101, :is_public => true
+ Permission.create :controller => "projects", :action => "add_news", :description => "button_add", :sort => 1120
+ Permission.create :controller => "news", :action => "edit", :description => "button_edit", :sort => 1121
+ Permission.create :controller => "news", :action => "destroy", :description => "button_delete", :sort => 1122
# documents
- Permission.create :controller => "projects", :action => "list_documents", :description => "View list", :sort => 1200, :is_public => true
- Permission.create :controller => "documents", :action => "show", :description => "View", :sort => 1201, :is_public => true
- Permission.create :controller => "documents", :action => "download", :description => "Download", :sort => 1202, :is_public => true
- Permission.create :controller => "projects", :action => "add_document", :description => "Add", :sort => 1220
- Permission.create :controller => "documents", :action => "edit", :description => "Edit", :sort => 1221
- Permission.create :controller => "documents", :action => "destroy", :description => "Delete", :sort => 1222
- Permission.create :controller => "documents", :action => "add_attachment", :description => "Add file", :sort => 1223
- Permission.create :controller => "documents", :action => "destroy_attachment", :description => "Delete file", :sort => 1224
+ Permission.create :controller => "projects", :action => "list_documents", :description => "button_list", :sort => 1200, :is_public => true
+ Permission.create :controller => "documents", :action => "show", :description => "button_view", :sort => 1201, :is_public => true
+ Permission.create :controller => "documents", :action => "download", :description => "button_download", :sort => 1202, :is_public => true
+ Permission.create :controller => "projects", :action => "add_document", :description => "button_add", :sort => 1220
+ Permission.create :controller => "documents", :action => "edit", :description => "button_edit", :sort => 1221
+ Permission.create :controller => "documents", :action => "destroy", :description => "button_delete", :sort => 1222
+ Permission.create :controller => "documents", :action => "add_attachment", :description => "label_attachment_new", :sort => 1223
+ Permission.create :controller => "documents", :action => "destroy_attachment", :description => "label_attachment_delete", :sort => 1224
# files
- Permission.create :controller => "projects", :action => "list_files", :description => "View list", :sort => 1300, :is_public => true
- Permission.create :controller => "versions", :action => "download", :description => "Download", :sort => 1301, :is_public => true
- Permission.create :controller => "projects", :action => "add_file", :description => "Add", :sort => 1320
- Permission.create :controller => "versions", :action => "destroy_file", :description => "Delete", :sort => 1322
+ Permission.create :controller => "projects", :action => "list_files", :description => "button_list", :sort => 1300, :is_public => true
+ Permission.create :controller => "versions", :action => "download", :description => "button_download", :sort => 1301, :is_public => true
+ Permission.create :controller => "projects", :action => "add_file", :description => "button_add", :sort => 1320
+ Permission.create :controller => "versions", :action => "destroy_file", :description => "button_delete", :sort => 1322
# create default administrator account
user = User.create :firstname => "redMine", :lastname => "Admin", :mail => "admin@somenet.foo", :mail_notification => true, :language => "en"
diff --git a/redmine/db/migrate/002_default_configuration.rb b/redmine/db/migrate/002_default_configuration.rb
deleted file mode 100644
index 794a96b26..000000000
--- a/redmine/db/migrate/002_default_configuration.rb
+++ /dev/null
@@ -1,61 +0,0 @@
-# redMine - project management software
-# Copyright (C) 2006 Jean-Philippe Lang
-#
-# This program is free software; you can redistribute it and/or
-# modify it under the terms of the GNU General Public License
-# as published by the Free Software Foundation; either version 2
-# of the License, or (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
-
-class DefaultConfiguration < ActiveRecord::Migration
- def self.up
- # roles
- r = Role.create(:name => "Manager")
- r.permissions = Permission.find(:all)
- r = Role.create :name => "Developer"
- r.permissions = Permission.find(:all)
- r = Role.create :name => "Reporter"
- r.permissions = Permission.find(:all)
- # trackers
- Tracker.create(:name => "Bug", :is_in_chlog => true)
- Tracker.create(:name => "Feature request", :is_in_chlog => true)
- Tracker.create(:name => "Support request", :is_in_chlog => false)
- # issue statuses
- IssueStatus.create(:name => "New", :is_closed => false, :is_default => true, :html_color => 'F98787')
- IssueStatus.create(:name => "Assigned", :is_closed => false, :is_default => false, :html_color => 'C0C0FF')
- IssueStatus.create(:name => "Resolved", :is_closed => false, :is_default => false, :html_color => '88E0B3')
- IssueStatus.create(:name => "Feedback", :is_closed => false, :is_default => false, :html_color => 'F3A4F4')
- IssueStatus.create(:name => "Closed", :is_closed => true, :is_default => false, :html_color => 'DBDBDB')
- IssueStatus.create(:name => "Rejected", :is_closed => true, :is_default => false, :html_color => 'F5C28B')
- # workflow
- Tracker.find(:all).each { |t|
- Role.find(:all).each { |r|
- IssueStatus.find(:all).each { |os|
- IssueStatus.find(:all).each { |ns|
- Workflow.create(:tracker_id => t.id, :role_id => r.id, :old_status_id => os.id, :new_status_id => ns.id) unless os == ns
- }
- }
- }
- }
- # enumeartions
- Enumeration.create(:opt => "DCAT", :name => 'Uncategorized')
- Enumeration.create(:opt => "DCAT", :name => 'User documentation')
- Enumeration.create(:opt => "DCAT", :name => 'Technical documentation')
- Enumeration.create(:opt => "IPRI", :name => 'Low')
- Enumeration.create(:opt => "IPRI", :name => 'Normal')
- Enumeration.create(:opt => "IPRI", :name => 'High')
- Enumeration.create(:opt => "IPRI", :name => 'Urgent')
- Enumeration.create(:opt => "IPRI", :name => 'Immediate')
- end
-
- def self.down
- end
-end
diff --git a/redmine/db/redmine_demo.db b/redmine/db/redmine_demo.db
deleted file mode 100644
index 6a19ec527..000000000
--- a/redmine/db/redmine_demo.db
+++ /dev/null
Binary files differ
diff --git a/redmine/doc/CHANGELOG b/redmine/doc/CHANGELOG
index 99f71ba57..5d9140dd7 100644
--- a/redmine/doc/CHANGELOG
+++ b/redmine/doc/CHANGELOG
@@ -11,19 +11,20 @@ http://redmine.org/
* token based "lost password" functionality
* user self-registration functionality (optional)
* custom fields now available for issues, users and projects
-* new custom field format "text" (textarea)
-* project & administration drop down menus in navigation bar
+* new custom field format "text" (displayed as a textarea field)
+* project & administration drop down menus in navigation bar for quicker access
+* "due date" field added on issues
* error messages internationalization
* Localization plugin replaced with GLoc 1.1.0
* new filter in issues list: "Fixed version"
-* colored background for active filters on issues list
+* active filters are displayed with colored background on issues list
* custom configuration is now defined in config/config_custom.rb
* user object no more stored in session (only user_id)
* news summary field is no longer required
* Fixed: boolean custom field not working
* Fixed: error messages for custom fields are not displayed
* Fixed: custom fields values are not validated on issue update
-* Fixed: user unable to choose an empty value for 'List' custom fields
+* Fixed: unable to choose an empty value for 'List' custom fields
* Fixed: no issue categories sorting
* Fixed: incorrect versions sorting
diff --git a/redmine/doc/docbook/fr/images/issues_list.png b/redmine/doc/docbook/fr/images/issues_list.png
new file mode 100644
index 000000000..47eab0fca
--- /dev/null
+++ b/redmine/doc/docbook/fr/images/issues_list.png
Binary files differ
diff --git a/redmine/doc/docbook/fr/images/users_list.png b/redmine/doc/docbook/fr/images/users_list.png
new file mode 100644
index 000000000..0c9ef86ec
--- /dev/null
+++ b/redmine/doc/docbook/fr/images/users_list.png
Binary files differ
diff --git a/redmine/doc/docbook/fr/images/workflow.png b/redmine/doc/docbook/fr/images/workflow.png
new file mode 100644
index 000000000..04e79d61e
--- /dev/null
+++ b/redmine/doc/docbook/fr/images/workflow.png
Binary files differ
diff --git a/redmine/doc/docbook/fr/redmine-userdoc-fr.xml b/redmine/doc/docbook/fr/redmine-userdoc-fr.xml
new file mode 100644
index 000000000..08a4e8225
--- /dev/null
+++ b/redmine/doc/docbook/fr/redmine-userdoc-fr.xml
@@ -0,0 +1,400 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE book PUBLIC "-//OASIS//DTD DocBook XML V4.4//EN"
+"http://www.oasis-open.org/docbook/xml/4.4/docbookx.dtd">
+<book>
+ <title>Documentation redMine</title>
+
+ <chapter>
+ <title>Administration</title>
+
+ <section>
+ <title>Utilisateurs</title>
+
+ <para>Ces écrans vous permettent de gérer les utilisateurs de
+ l'application.</para>
+
+ <section>
+ <title>Liste des utilisateurs</title>
+
+ <para></para>
+
+ <screenshot>
+ <screeninfo>Liste des utilisateurs</screeninfo>
+
+ <mediaobject>
+ <imageobject>
+ <imagedata fileref="images/users_list.png" />
+ </imageobject>
+ </mediaobject>
+ </screenshot>
+
+ <para>Les boutons Lock/Unlock vous permettent de
+ vérouiller/dévérouiller les comptes utilisateurs.</para>
+
+ <para>Un utilisateur dont le compte est vérouillé ne peut plus
+ s'identifier pour accéder à l'application.</para>
+ </section>
+
+ <section>
+ <title>Création ou modification d'un utilisateur</title>
+
+ <para>En mode modification, laissez le champ Password vide pour
+ laisser le mot de passe de l'utilisateur inchangé.</para>
+
+ <para>Un utilisateur déclaré comme administrateur dispose de toutes
+ les permissions sur l'application et sur tous les projets.</para>
+
+ <itemizedlist>
+ <listitem>
+ <para><guilabel>Administrateur</guilabel>: déclare l'utilisateur
+ comme administrateur de l'application.</para>
+ </listitem>
+
+ <listitem>
+ <para><guilabel>Notifications par mail</guilabel>: permet
+ d'activer ou non l'envoi automatique de notifications par mail
+ pour cet utilisateur</para>
+ </listitem>
+
+ <listitem>
+ <para><guilabel>Vérouillé</guilabel>: désactive le compte de
+ l'utilisateur</para>
+ </listitem>
+ </itemizedlist>
+ </section>
+ </section>
+
+ <section>
+ <title>Rôles et permissions</title>
+
+ <para>Les rôles permettent de définir les permissions des différents
+ membres d'un projet. Chaque membre d'un projet dispose d'un rôle unique
+ au sein d'un projet. Un utilisateur peut avoir différents rôles au sein
+ de différents projets.</para>
+
+ <para>Sur l'écran d'édition du rôle, cochez les actions que vous
+ souhaitez autoriser pour le rôle.</para>
+ </section>
+
+ <section>
+ <title>Trackers</title>
+
+ <para>Les trackers permettent de typer les demandes et de définir des
+ workflows spécifiques pour chacun de ces types.</para>
+ </section>
+
+ <section>
+ <title>Champs personnalisés</title>
+
+ <para>Les champs personnalisés vous permettent d'ajouter des
+ informations supplémentaires sur les demandes. Un champ personnalisé
+ peut être de l'un des types suivants:</para>
+
+ <itemizedlist>
+ <listitem>
+ <para><guilabel>Integer</guilabel>: entier positif ou négatif</para>
+ </listitem>
+
+ <listitem>
+ <para><guilabel>String</guilabel>: chaîne de caractère</para>
+ </listitem>
+
+ <listitem>
+ <para><guilabel>Date</guilabel>: date</para>
+ </listitem>
+
+ <listitem>
+ <para><guilabel>Boolean</guilabel>: booléen (case à cocher)</para>
+ </listitem>
+
+ <listitem>
+ <para><guilabel>List</guilabel>: valeur à sélectionnée parmi une
+ liste prédéfinie (liste déroulante)</para>
+ </listitem>
+ </itemizedlist>
+
+ <para>Des éléments de validation peuvent être définis:</para>
+
+ <itemizedlist>
+ <listitem>
+ <para><guilabel>Obligatoire</guilabel>: champ dont la saisie est
+ obligatoire sur les demandes</para>
+ </listitem>
+
+ <listitem>
+ <para><guilabel>Pour tous les projects</guilabel>: champ
+ automatiquement associé à l'ensemble des projets</para>
+ </listitem>
+
+ <listitem>
+ <para><guilabel>Min - max length</guilabel>: longueurs minimales et
+ maximales pour les champs en saisie libre (0 signifie qu'il n'y a
+ pas de restriction)</para>
+ </listitem>
+
+ <listitem>
+ <para><guilabel>Expression régulière</guilabel>: expression
+ régulière permettant de valider la valeur saisie</para>
+ </listitem>
+
+ <listitem>
+ <para><guilabel>Valeurs possibles</guilabel>: valeurs possibles pour
+ les champs de type "Liste". Les valeurs sont séparées par le
+ caractère |</para>
+ </listitem>
+ </itemizedlist>
+
+ <para>Si l'option <guilabel>Pour tous les projets</guilabel> n'est pas
+ activée, chaque projet pourra choisir d'utiliser ou non le champ pour
+ ses demandes.</para>
+ </section>
+
+ <section>
+ <title>Statut des demandes</title>
+
+ <para>Ces écrans vous permettent de définir les différents statuts
+ possibles des demandes.</para>
+
+ <itemizedlist>
+ <listitem>
+ <para><guilabel>Demande fermée</guilabel>: indique que le statut
+ correspond à une demande considérée comme fermée</para>
+ </listitem>
+
+ <listitem>
+ <para><guilabel>Statut par défaut</guilabel>: statut appliqué par
+ défaut aux nouvelles demandes (seul un statut peut être déclaré
+ comme statut par défaut)</para>
+ </listitem>
+
+ <listitem>
+ <para><guilabel>Couleur</guilabel>: code couleur HTML (6 caractères)
+ représentant le statut à l'affichage</para>
+ </listitem>
+ </itemizedlist>
+
+ <para></para>
+ </section>
+
+ <section>
+ <title>Workflow</title>
+
+ <para>Le workflow permet de définir les changements que les différents
+ membres d'un projet sont autorisés à effectuer sur les demandes, en
+ fonction de leur type.</para>
+
+ <para>Sélectionnez le rôle et le tracker pour lesquels vous souhaitez
+ modifier le workflow, puis cliquez sur Edit. L'écran vous permet alors
+ de modifier, pour le rôle et le tracker choisi, les changements
+ autorisés. Les lignes représentent les statuts initiaux des demandes.
+ Les colonnes représentent les statuts autorisés à être appliqués.</para>
+
+ <para>Remarque: pour qu'un rôle puisse changer le statut des demandes,
+ la permission doit lui être explicitement donnée indépendemment de la
+ configuration du workflow.</para>
+
+ <para></para>
+
+ <screenshot>
+ <screeninfo>Exemple de configuration d'un workflow</screeninfo>
+
+ <mediaobject>
+ <imageobject>
+ <imagedata fileref="images/workflow.png" />
+ </imageobject>
+ </mediaobject>
+ </screenshot>
+
+ <para>Dans l'exemple ci-dessus, les demandes de type Bug au statut
+ Nouveau pourront être passées au statut Assignée ou Résolue par le rôle
+ Développeur. Celles au statut Assignée pourront être passées au statut
+ Résolue. Le statut de toutes les autres demandes de type Bug ne pourra
+ pas être modifié par le Développeur.</para>
+ </section>
+
+ <section>
+ <title>Listes de valeurs</title>
+
+ <para>Les listes de valeurs utilisées par l'application (exemple: les
+ priorités des demandes) peuvent être personnalisées. Cet écran vous
+ permet de définir les valeurs possibles pour chacune des listes
+ suivantes:</para>
+
+ <itemizedlist>
+ <listitem>
+ <para>Priorités des demandes</para>
+ </listitem>
+
+ <listitem>
+ <para>Catégories de documents</para>
+ </listitem>
+ </itemizedlist>
+
+ <para></para>
+ </section>
+
+ <section>
+ <title>Notifications par mail</title>
+
+ <para>Cet écran vous permet de sélectionner les actions qui donneront
+ lieu à une notification par mail aux membres du projet.</para>
+
+ <para>Remarque: l'envoi de mails doit être activé dans la configuration
+ de l'application si souhaitez effectuer des notifications.</para>
+ </section>
+
+ <section>
+ <title>Informations</title>
+
+ <para>Affiche des informations relatives à l'application et à son
+ environnement.</para>
+ </section>
+ </chapter>
+
+ <chapter>
+ <title>Projets</title>
+
+ <para></para>
+
+ <section>
+ <title>Aperçu du projet</title>
+
+ <para>L'aperçu vous présente les informations générales relatives au
+ projet, les principaux membres, les dernières annonces, ainsi qu'une
+ synthèse du nombre de demandes ouvertes par tracker.</para>
+
+ <para></para>
+ </section>
+
+ <section>
+ <title>Gestion des demandes</title>
+
+ <para></para>
+
+ <section>
+ <title>Liste des demandes</title>
+
+ <para>Par défaut, l'ensemble des demandes ouvertes du projet sont
+ affichées. Différents filtres vous permettent de sélectionner les
+ demandes à afficher. Si le projet comporte des sous-projets, vous avez
+ la possibilité d'afficher également les demandes relatives aux
+ sous-projets (non affichées par défaut).</para>
+
+ <para>Une fois appliqué, un filtre reste valable durant toute votre
+ session. Vous pouvez le redéfinir, ou le supprimer en cliquant sur
+ Annuler.</para>
+
+ <para></para>
+
+ <screenshot>
+ <screeninfo>Liste des demandes</screeninfo>
+
+ <mediaobject>
+ <imageobject>
+ <imagedata fileref="images/issues_list.png" />
+ </imageobject>
+ </mediaobject>
+ </screenshot>
+
+ <para></para>
+ </section>
+ </section>
+
+ <section>
+ <title>Rapports</title>
+
+ <para>Cet écran présente la synthèse du nombre de demandes par statut et
+ selon différents critères (tracker, priorité, catégorie). Des liens
+ directs permettent d'accéder à la liste détaillée des demandes pour
+ chaque critère.</para>
+ </section>
+
+ <section>
+ <title>Historique</title>
+
+ <para>Cette page présente l'ensemble des demandes résolues dans chacune
+ des versions du projet. Certains types de demande peuvent être exclus de
+ cet affichage.</para>
+ </section>
+
+ <section>
+ <title>Annonces</title>
+
+ <para>Les nouvelles vous permettent d'informer les utilisateurs sur
+ l'activité du projet.</para>
+ </section>
+
+ <section>
+ <title>Documents</title>
+
+ <para>Les documents sont groupés par catégories (voir Listes de
+ valeurs). Un document peut contenir plusieurs fichiers (exemple:
+ révisions ou versions successives).</para>
+ </section>
+
+ <section>
+ <title>Fichiers</title>
+
+ <para>Ce module vous permet de publier les différents fichiers (sources,
+ binaires, ...) pour chaque version de l'application.</para>
+ </section>
+
+ <section>
+ <title>Configuration du projet</title>
+
+ <para></para>
+
+ <section>
+ <title>Propriétés du projet</title>
+
+ <para></para>
+
+ <itemizedlist>
+ <listitem>
+ <para><guilabel>Public</guilabel>: si le projet est public, il
+ sera visible (consultation des demandes, des documents, ...) pour
+ l'ensemble des utilisateurs, y compris ceux qui ne sont pas
+ membres du projet. Si le projet n'est pas public, seuls les
+ membres du projet y ont accès, en fonction de leur rôle.</para>
+ </listitem>
+
+ <listitem>
+ <para><guilabel>Champs personnalisés</guilabel>: sélectionner les
+ champs personnalisés que vous souhaitez utiliser au sein du
+ projet. Seul l'administrateur peut ajouter de nouveaux champs
+ personnalisés.</para>
+ </listitem>
+ </itemizedlist>
+
+ <para></para>
+ </section>
+
+ <section>
+ <title>Membres</title>
+
+ <para>Cet écran vous permet de définir les membres du projet ainsi que
+ leurs rôles respectifs. Un utilisateur ne peut avoir qu'un rôle au
+ sein d'un projet donné. Le rôle d'un membre détermine les permissions
+ dont il bénéficie sur le projet.</para>
+ </section>
+
+ <section>
+ <title>Versions</title>
+
+ <para>Les versions vous permettent de suivre les changements survenus
+ tout au long du projet. A la fermeture d'une demande, vous pouvez par
+ exemple indiquer quelle version la prend en compte. Vous pouvez par
+ ailleurs publier les différentes versions de l'application (voir
+ Fichiers).</para>
+ </section>
+
+ <section>
+ <title>Catégories des demandes</title>
+
+ <para>Les catégories de demande vous permettent de typer les demandes.
+ Les catégories peuvent par exemple correspondre aux différents modules
+ du projet.</para>
+ </section>
+ </section>
+ </chapter>
+</book> \ No newline at end of file
diff --git a/redmine/lang/en.yml b/redmine/lang/en.yml
index 04d671fd6..81d5d979f 100644
--- a/redmine/lang/en.yml
+++ b/redmine/lang/en.yml
@@ -42,6 +42,7 @@ general_text_No: 'No'
general_text_Yes: 'Yes'
general_text_no: 'no'
general_text_yes: 'yes'
+general_lang_en: 'English'
notice_account_updated: Account was successfully updated.
notice_account_invalid_creditentials: Invalid user or password
diff --git a/redmine/lang/fr.yml b/redmine/lang/fr.yml
index 560b11bbf..807a22dba 100644
--- a/redmine/lang/fr.yml
+++ b/redmine/lang/fr.yml
@@ -1,4 +1,4 @@
-_gloc_rule_default: '|n| n==1 ? "" : "_plural" '
+_gloc_rule_default: '|n| n<=1 ? "" : "_plural" '
actionview_datehelper_select_day_prefix:
actionview_datehelper_select_month_names: Janvier,Février,Mars,Avril,Mai,Juin,Juillet,Août,Septembre,Octobre,Novembre,Décembre
@@ -42,6 +42,7 @@ general_text_No: 'Non'
general_text_Yes: 'Oui'
general_text_no: 'non'
general_text_yes: 'oui'
+general_lang_fr: 'Français'
notice_account_updated: Le compte a été mis à jour avec succès.
notice_account_invalid_creditentials: Identifiant ou mot de passe invalide.
@@ -49,10 +50,11 @@ notice_account_password_updated: Mot de passe mis à jour avec succès.
notice_account_wrong_password: Mot de passe incorrect
notice_account_register_done: Un message contenant les instructions pour activer votre compte vous a été envoyé.
notice_account_unknown_email: Aucun compte ne correspond à cette adresse.
+notice_can_t_change_password: Ce compte utilise une authentification externe. Impossible de changer le mot de passe.
notice_account_lost_email_sent: Un message contenant les instructions pour choisir un nouveau mot de passe vous a été envoyé.
notice_account_activated: Votre compte a été activé. Vous pouvez à présent vous connecter.
-notice_successful_update: Mise à jour effectuée avec succès.
notice_successful_create: Création effectuée avec succès.
+notice_successful_update: Mise à jour effectuée avec succès.
notice_successful_delete: Suppression effectuée avec succès.
notice_successful_connection: Connection réussie.
@@ -90,6 +92,7 @@ field_is_default: Statut par défaut
field_html_color: Couleur
field_tracker: Tracker
field_subject: Sujet
+field_due_date: Date d'échéance
field_assigned_to: Assigné à
field_priority: Priorité
field_fixed_version: Version corrigée
@@ -127,24 +130,36 @@ label_user_new: Nouvel utilisateur
label_project: Projet
label_project_new: Nouveau projet
label_project_plural: Projets
+label_project_latest: Derniers projets
label_issue: Demande
label_issue_new: Nouvelle demande
label_issue_plural: Demandes
+label_issue_view_all: Voir toutes les demandes
+label_document: Document
+label_document_new: Nouveau document
+label_document_plural: Documents
label_role: Rôle
label_role_plural: Rôles
-label_role_add: Nouveau rôle
+label_role_new: Nouveau rôle
label_role_and_permissions: Rôles et permissions
+label_member: Membre
+label_member_new: Nouveau membre
+label_member_plural: Membres
label_tracker: Tracker
label_tracker_plural: Trackers
-label_tracker_add: Nouveau tracker
+label_tracker_new: Nouveau tracker
label_workflow: Workflow
label_issue_status: Statut de demandes
label_issue_status_plural: Statuts de demandes
-label_issue_status_add: Nouveau statut
+label_issue_status_new: Nouveau statut
+label_issue_category: Catégorie de demandes
+label_issue_category_plural: Catégories de demandes
+label_issue_category_new: Nouvelle catégorie
label_custom_field: Champ personnalisé
label_custom_field_plural: Champs personnalisés
label_custom_field_new: Nouveau champ personnalisé
label_enumerations: Listes de valeurs
+label_enumeration_new: Nouvelle valeur
label_information: Information
label_information_plural: Informations
label_please_login: Identification
@@ -153,6 +168,7 @@ label_password_lost: Mot de passe perdu
label_home: Accueil
label_my_page: Ma page
label_my_account: Mon compte
+label_my_projects: Mes projets
label_administration: Administration
label_login: Connexion
label_logout: Déconnexion
@@ -182,7 +198,45 @@ label_string: Chaîne
label_text: Texte
label_attribute: Attribut
label_attribute_plural: Attributs
-
+label_download: %d Téléchargement
+label_download_plural: %d Téléchargements
+label_no_data: Aucune donnée à afficher
+label_change_status: Changer le statut
+label_history: Historique
+label_attachment: Fichier
+label_attachment_new: Nouveau fichier
+label_attachment_delete: Supprimer le fichier
+label_attachment_plural: Fichiers
+label_report: Rapport
+label_report_plural: Rapports
+label_news: Annonce
+label_news_new: Nouvelle annonce
+label_news_plural: Annonces
+label_news_latest: Dernières annonces
+label_news_view_all: Voir toutes les annonces
+label_change_log: Historique
+label_settings: Configuration
+label_overview: Aperçu
+label_version: Version
+label_version_new: Nouvelle version
+label_version_plural: Versions
+label_confirmation: Confirmation
+label_export_csv: Exporter en CSV
+label_read: Lire...
+label_public_projects: Projets publics
+label_open_issues: Ouverte
+label_open_issues_plural: Ouvertes
+label_closed_issues: Fermée
+label_closed_issues_plural: Fermées
+label_total: Total
+label_permissions: Permissions
+label_current_status: Statut actuel
+label_new_statuses_allowed: Nouveaux statuts autorisés
+label_all: Tous
+label_none: Aucun
+label_next: Suivant
+label_previous: Précédent
+label_used_by: Utilisé par
button_login: Connexion
button_submit: Soumettre
@@ -192,8 +246,43 @@ button_uncheck_all: Tout décocher
button_delete: Supprimer
button_create: Créer
button_test: Tester
+button_edit: Modifier
+button_add: Ajouter
+button_change: Changer
+button_apply: Appliquer
+button_clear: Effacer
+button_lock: Verrouiller
+button_unlock: Déverrouiller
+button_download: Télécharger
+button_list: Lister
+button_view: Voir
text_select_mail_notifications: Sélectionner les actions pour lesquelles la notification par mail doit être activée.
text_regexp_info: eg. ^[A-Z0-9]+$
text_min_max_length_info: 0 pour aucune restriction
-text_possible_values_info: valeurs séparées par | \ No newline at end of file
+text_possible_values_info: valeurs séparées par |
+text_project_destroy_confirmation: Etes-vous sûr de vouloir supprimer ce projet et tout ce qui lui est rattaché ?
+text_workflow_edit: Sélectionner un tracker et un rôle pour éditer le workflow
+
+default_role_manager: Manager
+default_role_developper: Développeur
+default_role_reporter: Rapporteur
+default_tracker_bug: Anomalie
+default_tracker_feature: Evolution
+default_tracker_support: Assistance
+default_issue_status_new: Nouveau
+default_issue_status_assigned: Assigné
+default_issue_status_resolved: Résolu
+default_issue_status_feedback: Commentaire
+default_issue_status_closed: Fermé
+default_issue_status_rejected: Rejeté
+default_doc_category_user: Documentation utilisateur
+default_doc_category_tech: Documentation technique
+default_priority_low: Bas
+default_priority_normal: Normal
+default_priority_high: Haut
+default_priority_urgent: Urgent
+default_priority_immediate: Immédiat
+
+enumeration_issue_priorities: Priorités des demandes
+enumeration_doc_categories: Catégories des documents
diff --git a/redmine/lib/tasks/load_default_data.rake b/redmine/lib/tasks/load_default_data.rake
new file mode 100644
index 000000000..1cf0f8fe1
--- /dev/null
+++ b/redmine/lib/tasks/load_default_data.rake
@@ -0,0 +1,43 @@
+desc 'Load default configuration data (using default language)'
+
+task :load_default_data => :environment do
+ include GLoc
+ set_language_if_valid($RDM_DEFAULT_LANG)
+
+ # roles
+ r = Role.create :name => l(:default_role_manager)
+ r.permissions = Permission.find(:all, :conditions => ["is_public=?", false])
+ r = Role.create :name => l(:default_role_developper)
+ r.permissions = Permission.find(:all, :conditions => ["is_public=?", false])
+ r = Role.create :name => l(:default_role_reporter)
+ r.permissions = Permission.find(:all, :conditions => ["is_public=?", false])
+ # trackers
+ Tracker.create(:name => l(:default_tracker_bug), :is_in_chlog => true)
+ Tracker.create(:name => l(:default_tracker_feature), :is_in_chlog => true)
+ Tracker.create(:name => l(:default_tracker_support), :is_in_chlog => false)
+ # issue statuses
+ IssueStatus.create(:name => l(:default_issue_status_new), :is_closed => false, :is_default => true, :html_color => 'F98787')
+ IssueStatus.create(:name => l(:default_issue_status_assigned), :is_closed => false, :is_default => false, :html_color => 'C0C0FF')
+ IssueStatus.create(:name => l(:default_issue_status_resolved), :is_closed => false, :is_default => false, :html_color => '88E0B3')
+ IssueStatus.create(:name => l(:default_issue_status_feedback), :is_closed => false, :is_default => false, :html_color => 'F3A4F4')
+ IssueStatus.create(:name => l(:default_issue_status_closed), :is_closed => true, :is_default => false, :html_color => 'DBDBDB')
+ IssueStatus.create(:name => l(:default_issue_status_rejected), :is_closed => true, :is_default => false, :html_color => 'F5C28B')
+ # workflow
+ Tracker.find(:all).each { |t|
+ Role.find(:all).each { |r|
+ IssueStatus.find(:all).each { |os|
+ IssueStatus.find(:all).each { |ns|
+ Workflow.create(:tracker_id => t.id, :role_id => r.id, :old_status_id => os.id, :new_status_id => ns.id) unless os == ns
+ }
+ }
+ }
+ }
+ # enumerations
+ Enumeration.create(:opt => "DCAT", :name => l(:default_doc_category_user))
+ Enumeration.create(:opt => "DCAT", :name => l(:default_doc_category_tech))
+ Enumeration.create(:opt => "IPRI", :name => l(:default_priority_low))
+ Enumeration.create(:opt => "IPRI", :name => l(:default_priority_normal))
+ Enumeration.create(:opt => "IPRI", :name => l(:default_priority_high))
+ Enumeration.create(:opt => "IPRI", :name => l(:default_priority_urgent))
+ Enumeration.create(:opt => "IPRI", :name => l(:default_priority_immediate))
+end \ No newline at end of file
diff --git a/redmine/test/fixtures/permissions.yml b/redmine/test/fixtures/permissions.yml
index 5ab97fa7a..81350e1af 100644
--- a/redmine/test/fixtures/permissions.yml
+++ b/redmine/test/fixtures/permissions.yml
@@ -2,7 +2,7 @@
permissions_041:
action: add_file
id: 41
- description: Add
+ description: button_add
controller: projects
mail_enabled: false
mail_option: false
@@ -11,7 +11,7 @@ permissions_041:
permissions_030:
action: destroy
id: 30
- description: Delete
+ description: button_delete
controller: news
mail_enabled: false
mail_option: false
@@ -20,7 +20,7 @@ permissions_030:
permissions_019:
action: download
id: 19
- description: Download file
+ description: button_download
controller: issues
mail_enabled: false
mail_option: false
@@ -29,7 +29,7 @@ permissions_019:
permissions_008:
action: edit
id: 8
- description: Edit
+ description: button_edit
controller: members
mail_enabled: false
mail_option: false
@@ -38,7 +38,7 @@ permissions_008:
permissions_042:
action: destroy_file
id: 42
- description: Delete
+ description: button_delete
controller: versions
mail_enabled: false
mail_option: false
@@ -47,7 +47,7 @@ permissions_042:
permissions_031:
action: list_documents
id: 31
- description: View list
+ description: button_list
controller: projects
mail_enabled: false
mail_option: false
@@ -56,7 +56,7 @@ permissions_031:
permissions_020:
action: add_issue
id: 20
- description: Report an issue
+ description: button_add
controller: projects
mail_enabled: true
mail_option: true
@@ -65,7 +65,7 @@ permissions_020:
permissions_009:
action: destroy
id: 9
- description: Delete
+ description: button_delete
controller: members
mail_enabled: false
mail_option: false
@@ -74,7 +74,7 @@ permissions_009:
permissions_032:
action: show
id: 32
- description: View
+ description: button_view
controller: documents
mail_enabled: false
mail_option: false
@@ -83,7 +83,7 @@ permissions_032:
permissions_021:
action: edit
id: 21
- description: Edit
+ description: button_edit
controller: issues
mail_enabled: false
mail_option: false
@@ -92,7 +92,7 @@ permissions_021:
permissions_010:
action: add_version
id: 10
- description: New version
+ description: button_add
controller: projects
mail_enabled: false
mail_option: false
@@ -101,7 +101,7 @@ permissions_010:
permissions_033:
action: download
id: 33
- description: Download
+ description: button_download
controller: documents
mail_enabled: false
mail_option: false
@@ -110,7 +110,7 @@ permissions_033:
permissions_022:
action: change_status
id: 22
- description: Change status
+ description: label_change_status
controller: issues
mail_enabled: true
mail_option: true
@@ -119,7 +119,7 @@ permissions_022:
permissions_011:
action: edit
id: 11
- description: Edit
+ description: button_edit
controller: versions
mail_enabled: false
mail_option: false
@@ -128,7 +128,7 @@ permissions_011:
permissions_034:
action: add_document
id: 34
- description: Add
+ description: button_add
controller: projects
mail_enabled: false
mail_option: false
@@ -137,7 +137,7 @@ permissions_034:
permissions_023:
action: destroy
id: 23
- description: Delete
+ description: button_delete
controller: issues
mail_enabled: false
mail_option: false
@@ -146,7 +146,7 @@ permissions_023:
permissions_012:
action: destroy
id: 12
- description: Delete
+ description: button_delete
controller: versions
mail_enabled: false
mail_option: false
@@ -155,7 +155,7 @@ permissions_012:
permissions_001:
action: show
id: 1
- description: Overview
+ description: label_overview
controller: projects
mail_enabled: false
mail_option: false
@@ -164,7 +164,7 @@ permissions_001:
permissions_035:
action: edit
id: 35
- description: Edit
+ description: button_edit
controller: documents
mail_enabled: false
mail_option: false
@@ -173,7 +173,7 @@ permissions_035:
permissions_024:
action: add_attachment
id: 24
- description: Add file
+ description: label_attachment_new
controller: issues
mail_enabled: false
mail_option: false
@@ -182,7 +182,7 @@ permissions_024:
permissions_013:
action: add_issue_category
id: 13
- description: New issue category
+ description: button_add
controller: projects
mail_enabled: false
mail_option: false
@@ -191,7 +191,7 @@ permissions_013:
permissions_002:
action: changelog
id: 2
- description: View change log
+ description: label_change_log
controller: projects
mail_enabled: false
mail_option: false
@@ -200,7 +200,7 @@ permissions_002:
permissions_036:
action: destroy
id: 36
- description: Delete
+ description: button_delete
controller: documents
mail_enabled: false
mail_option: false
@@ -209,7 +209,7 @@ permissions_036:
permissions_025:
action: destroy_attachment
id: 25
- description: Delete file
+ description: label_attachment_delete
controller: issues
mail_enabled: false
mail_option: false
@@ -218,7 +218,7 @@ permissions_025:
permissions_014:
action: edit
id: 14
- description: Edit
+ description: button_edit
controller: issue_categories
mail_enabled: false
mail_option: false
@@ -227,7 +227,7 @@ permissions_014:
permissions_003:
action: issue_report
id: 3
- description: View reports
+ description: label_report_plural
controller: reports
mail_enabled: false
mail_option: false
@@ -236,7 +236,7 @@ permissions_003:
permissions_037:
action: add_attachment
id: 37
- description: Add file
+ description: label_attachment_new
controller: documents
mail_enabled: false
mail_option: false
@@ -245,7 +245,7 @@ permissions_037:
permissions_026:
action: list_news
id: 26
- description: View list
+ description: button_list
controller: projects
mail_enabled: false
mail_option: false
@@ -254,7 +254,7 @@ permissions_026:
permissions_015:
action: destroy
id: 15
- description: Delete
+ description: button_delete
controller: issue_categories
mail_enabled: false
mail_option: false
@@ -263,7 +263,7 @@ permissions_015:
permissions_004:
action: settings
id: 4
- description: Settings
+ description: label_settings
controller: projects
mail_enabled: false
mail_option: false
@@ -272,7 +272,7 @@ permissions_004:
permissions_038:
action: destroy_attachment
id: 38
- description: Delete file
+ description: label_attachment_delete
controller: documents
mail_enabled: false
mail_option: false
@@ -281,7 +281,7 @@ permissions_038:
permissions_027:
action: show
id: 27
- description: View
+ description: button_view
controller: news
mail_enabled: false
mail_option: false
@@ -290,7 +290,7 @@ permissions_027:
permissions_016:
action: list_issues
id: 16
- description: View list
+ description: button_list
controller: projects
mail_enabled: false
mail_option: false
@@ -299,7 +299,7 @@ permissions_016:
permissions_005:
action: edit
id: 5
- description: Edit
+ description: button_edit
controller: projects
mail_enabled: false
mail_option: false
@@ -308,7 +308,7 @@ permissions_005:
permissions_039:
action: list_files
id: 39
- description: View list
+ description: button_list
controller: projects
mail_enabled: false
mail_option: false
@@ -317,7 +317,7 @@ permissions_039:
permissions_028:
action: add_news
id: 28
- description: Add
+ description: button_add
controller: projects
mail_enabled: false
mail_option: false
@@ -326,7 +326,7 @@ permissions_028:
permissions_017:
action: export_issues_csv
id: 17
- description: Export list to CSV
+ description: label_export_csv
controller: projects
mail_enabled: false
mail_option: false
@@ -335,7 +335,7 @@ permissions_017:
permissions_006:
action: list_members
id: 6
- description: View list
+ description: button_list
controller: projects
mail_enabled: false
mail_option: false
@@ -344,7 +344,7 @@ permissions_006:
permissions_040:
action: download
id: 40
- description: Download
+ description: button_download
controller: versions
mail_enabled: false
mail_option: false
@@ -353,7 +353,7 @@ permissions_040:
permissions_029:
action: edit
id: 29
- description: Edit
+ description: button_edit
controller: news
mail_enabled: false
mail_option: false
@@ -362,7 +362,7 @@ permissions_029:
permissions_018:
action: show
id: 18
- description: View
+ description: button_view
controller: issues
mail_enabled: false
mail_option: false
@@ -371,7 +371,7 @@ permissions_018:
permissions_007:
action: add_member
id: 7
- description: New member
+ description: button_add
controller: projects
mail_enabled: false
mail_option: false
diff --git a/redmine/test/integration/account_test.rb b/redmine/test/integration/account_test.rb
index 832e00321..4f5240b68 100644
--- a/redmine/test/integration/account_test.rb
+++ b/redmine/test/integration/account_test.rb
@@ -41,10 +41,6 @@ class AccountTest < ActionController::IntegrationTest
assert_response :success
assert_tag :tag => "div", :attributes => { :class => "errorExplanation" }
- post "account/change_password", :password => 'admiN', :new_password => "hello", :new_password_confirmation => "hello"
- assert_response :success
- assert_equal 'Wrong password', flash[:notice]
-
post "account/change_password", :password => 'jsmith', :new_password => "hello", :new_password_confirmation => "hello"
assert_response :success
log_user('jsmith', 'hello')