##// END OF EJS Templates
- new controller "myController"...
Jean-Philippe Lang -
r60:362633d486e3
parent child
Show More
@@ -0,0 +1,128
1 # redMine - project management software
2 # Copyright (C) 2006 Jean-Philippe Lang
3 #
4 # This program is free software; you can redistribute it and/or
5 # modify it under the terms of the GNU General Public License
6 # as published by the Free Software Foundation; either version 2
7 # of the License, or (at your option) any later version.
8 #
9 # This program is distributed in the hope that it will be useful,
10 # but WITHOUT ANY WARRANTY; without even the implied warranty of
11 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 # GNU General Public License for more details.
13 #
14 # You should have received a copy of the GNU General Public License
15 # along with this program; if not, write to the Free Software
16 # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
17
18 class MyController < ApplicationController
19 layout 'base'
20 before_filter :require_login
21
22 BLOCKS = { 'issues_assigned_to_me' => :label_assigned_to_me_issues,
23 'issues_reported_by_me' => :label_reported_issues,
24 'latest_news' => :label_news_latest,
25 'calendar' => :label_calendar,
26 'documents' => :label_document_plural
27 }.freeze
28
29 verify :xhr => true,
30 :session => :page_layout,
31 :only => [:add_block, :remove_block, :order_blocks]
32
33 def index
34 page
35 render :action => 'page'
36 end
37
38 # Show user's page
39 def page
40 @user = self.logged_in_user
41 @blocks = @user.pref[:my_page_layout] || { 'left' => ['issues_assigned_to_me'], 'right' => ['issues_reported_by_me'] }
42 end
43
44 # Edit user's account
45 def account
46 @user = self.logged_in_user
47 if request.post? and @user.update_attributes(@params[:user])
48 set_localization
49 flash.now[:notice] = l(:notice_account_updated)
50 self.logged_in_user.reload
51 end
52 end
53
54 # Change user's password
55 def change_password
56 @user = self.logged_in_user
57 flash[:notice] = l(:notice_can_t_change_password) and redirect_to :action => 'account' and return if @user.auth_source_id
58 if @user.check_password?(@params[:password])
59 @user.password, @user.password_confirmation = params[:new_password], params[:new_password_confirmation]
60 if @user.save
61 flash[:notice] = l(:notice_account_password_updated)
62 else
63 render :action => 'account'
64 return
65 end
66 else
67 flash[:notice] = l(:notice_account_wrong_password)
68 end
69 redirect_to :action => 'account'
70 end
71
72 # User's page layout configuration
73 def page_layout
74 @user = self.logged_in_user
75 @blocks = @user.pref[:my_page_layout] || { 'left' => ['issues_assigned_to_me'], 'right' => ['issues_reported_by_me'] }
76 session[:page_layout] = @blocks
77 %w(top left right).each {|f| session[:page_layout][f] ||= [] }
78 @block_options = []
79 BLOCKS.each {|k, v| @block_options << [l(v), k]}
80 end
81
82 # Add a block to user's page
83 # The block is added on top of the page
84 # params[:block] : id of the block to add
85 def add_block
86 @user = self.logged_in_user
87 block = params[:block]
88 # remove if already present in a group
89 %w(top left right).each {|f| (session[:page_layout][f] ||= []).delete block }
90 # add it on top
91 session[:page_layout]['top'].unshift block
92 render :partial => "block", :locals => {:user => @user, :block_name => block}
93 end
94
95 # Remove a block to user's page
96 # params[:block] : id of the block to remove
97 def remove_block
98 block = params[:block]
99 # remove block in all groups
100 %w(top left right).each {|f| (session[:page_layout][f] ||= []).delete block }
101 render :nothing => true
102 end
103
104 # Change blocks order on user's page
105 # params[:group] : group to order (top, left or right)
106 # params[:list-(top|left|right)] : array of block ids of the group
107 def order_blocks
108 group = params[:group]
109 group_items = params["list-#{group}"]
110 if group_items and group_items.is_a? Array
111 # remove group blocks if they are presents in other groups
112 %w(top left right).each {|f|
113 session[:page_layout][f] = (session[:page_layout][f] || []) - group_items
114 }
115 session[:page_layout][group] = group_items
116 end
117 render :nothing => true
118 end
119
120 # Save user's page layout
121 def page_layout_save
122 @user = self.logged_in_user
123 @user.pref[:my_page_layout] = session[:page_layout] if session[:page_layout]
124 @user.pref.save
125 session[:page_layout] = nil
126 redirect_to :action => 'page'
127 end
128 end
@@ -0,0 +1,19
1 # redMine - project management software
2 # Copyright (C) 2006 Jean-Philippe Lang
3 #
4 # This program is free software; you can redistribute it and/or
5 # modify it under the terms of the GNU General Public License
6 # as published by the Free Software Foundation; either version 2
7 # of the License, or (at your option) any later version.
8 #
9 # This program is distributed in the hope that it will be useful,
10 # but WITHOUT ANY WARRANTY; without even the implied warranty of
11 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 # GNU General Public License for more details.
13 #
14 # You should have received a copy of the GNU General Public License
15 # along with this program; if not, write to the Free Software
16 # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
17
18 module MyHelper
19 end
@@ -0,0 +1,44
1 # redMine - project management software
2 # Copyright (C) 2006 Jean-Philippe Lang
3 #
4 # This program is free software; you can redistribute it and/or
5 # modify it under the terms of the GNU General Public License
6 # as published by the Free Software Foundation; either version 2
7 # of the License, or (at your option) any later version.
8 #
9 # This program is distributed in the hope that it will be useful,
10 # but WITHOUT ANY WARRANTY; without even the implied warranty of
11 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 # GNU General Public License for more details.
13 #
14 # You should have received a copy of the GNU General Public License
15 # along with this program; if not, write to the Free Software
16 # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
17
18 class UserPreference < ActiveRecord::Base
19 belongs_to :user
20 serialize :others, Hash
21
22 attr_protected :others
23
24 def initialize(attributes = nil)
25 super
26 self.others ||= {}
27 end
28
29 def [](attr_name)
30 if attribute_present? attr_name
31 super
32 else
33 others[attr_name]
34 end
35 end
36
37 def []=(attr_name, value)
38 if attribute_present? attr_name
39 super
40 else
41 others.store attr_name, value
42 end
43 end
44 end
@@ -0,0 +1,16
1 <div id="block_<%= block_name %>" class="mypage-box">
2
3 <div style="float:right;margin-right:16px;z-index:500;">
4 <%= link_to_remote "", {
5 :url => { :action => "remove_block", :block => block_name },
6 :complete => "removeBlock('block_#{block_name}')",
7 :loading => "Element.show('indicator')",
8 :loaded => "Element.hide('indicator')" },
9 :class => "close-icon"
10 %>
11 </div>
12
13 <div class="handle">
14 <%= render :partial => "my/blocks/#{block_name}", :locals => { :user => user } %>
15 </div>
16 </div> No newline at end of file
@@ -0,0 +1,45
1 <h3><%= l(:label_calendar) %></h3>
2
3 <%
4 @date_from = Date.today - (Date.today.cwday-1)
5 @date_to = Date.today + (7-Date.today.cwday)
6 @issues = Issue.find :all,
7 :conditions => ["issues.project_id in (#{@user.projects.collect{|m| m.id}.join(',')}) AND ((start_date>=? and start_date<=?) or (due_date>=? and due_date<=?))", @date_from, @date_to, @date_from, @date_to],
8 :include => [:project, :tracker] unless @user.projects.empty?
9 @issues ||= []
10 %>
11
12 <table class="calenderTable">
13 <tr class="ListHead">
14 <td></td>
15 <% 1.upto(7) do |d| %>
16 <td align="center" width="14%"><%= day_name(d) %></td>
17 <% end %>
18 </tr>
19 <tr height="100">
20 <% day = @date_from
21 while day <= @date_to
22 if day.cwday == 1 %>
23 <td valign="middle"><%= day.cweek %></td>
24 <% end %>
25 <td valign="top" width="14%" class="<%= day.month==@month ? "even" : "odd" %>">
26 <p align="right"><%= day==Date.today ? "<b>#{day.day}</b>" : day.day %></p>
27 <% day_issues = []
28 @issues.each { |i| day_issues << i if i.start_date == day or i.due_date == day }
29 day_issues.each do |i| %>
30 <%= if day == i.start_date and day == i.due_date
31 image_tag('arrow_bw')
32 elsif day == i.start_date
33 image_tag('arrow_from')
34 elsif day == i.due_date
35 image_tag('arrow_to')
36 end %>
37 <small><%= link_to "#{i.tracker.name} ##{i.id}", :controller => 'issues', :action => 'show', :id => i %>: <%= i.subject.sub(/^(.{30}[^\s]*\s).*$/, '\1 (...)') %></small><br />
38 <% end %>
39 </td>
40 <%= '</tr><tr height="100">' if day.cwday >= 7 and day!=@date_to %>
41 <%
42 day = day + 1
43 end %>
44 </tr>
45 </table> No newline at end of file
@@ -0,0 +1,15
1 <h3><%=l(:label_document_plural)%></h3>
2
3 <ul>
4 <% for document in Document.find :all,
5 :limit => 10,
6 :conditions => "documents.project_id in (#{@user.projects.collect{|m| m.id}.join(',')})",
7 :include => [:project] %>
8 <li>
9 <b><%= link_to document.title, :controller => 'documents', :action => 'show', :id => document %></b>
10 <br />
11 <%= truncate document.description, 150 %><br />
12 <em><%= format_time(document.created_on) %></em><br />&nbsp;
13 </li>
14 <% end unless @user.projects.empty? %>
15 </ul> No newline at end of file
@@ -0,0 +1,10
1 <h3><%=l(:label_assigned_to_me_issues)%></h3>
2 <% assigned_issues = Issue.find(:all,
3 :conditions => ["assigned_to_id=?", user.id],
4 :limit => 10,
5 :include => [ :status, :project, :tracker ],
6 :order => 'issues.updated_on DESC') %>
7 <%= render :partial => 'issues/list_simple', :locals => { :issues => assigned_issues } %>
8 <% if assigned_issues.length > 0 %>
9 <p><%=lwr(:label_last_updates, assigned_issues.length)%></p>
10 <% end %>
@@ -0,0 +1,10
1 <h3><%=l(:label_reported_issues)%></h3>
2 <% reported_issues = Issue.find(:all,
3 :conditions => ["author_id=?", user.id],
4 :limit => 10,
5 :include => [ :status, :project, :tracker ],
6 :order => 'issues.updated_on DESC') %>
7 <%= render :partial => 'issues/list_simple', :locals => { :issues => reported_issues } %>
8 <% if reported_issues.length > 0 %>
9 <p><%=lwr(:label_last_updates, reported_issues.length)%></p>
10 <% end %> No newline at end of file
@@ -0,0 +1,13
1 <h3><%=l(:label_news_latest)%></h3>
2
3 <ul>
4 <% for news in News.find :all,
5 :limit => 10,
6 :conditions => "news.project_id in (#{@user.projects.collect{|m| m.id}.join(',')})",
7 :include => [:project, :author] %>
8 <li><%= link_to news.title, :controller => 'news', :action => 'show', :id => news %><br />
9 <% unless news.summary.empty? %><%= news.summary %><br /><% end %>
10 <em><%= news.author.name %>, <%= format_time(news.created_on) %></em><br />&nbsp;
11 </li>
12 <% end unless @user.projects.empty? %>
13 </ul> No newline at end of file
@@ -0,0 +1,30
1 <h2><%=l(:label_my_page)%></h2>
2
3 <div class="topright">
4 <small><%= link_to l(:label_personalize_page), :action => 'page_layout' %></small>
5 </div>
6
7 <div id="list-top">
8 <% @blocks['top'].each do |b| %>
9 <div class="mypage-box">
10 <%= render :partial => "my/blocks/#{b}", :locals => { :user => @user } %>
11 </div>
12 <% end if @blocks['top'] %>
13 </div>
14
15 <div id="list-left" class="splitcontentleft">
16 <% @blocks['left'].each do |b| %>
17 <div class="mypage-box">
18 <%= render :partial => "my/blocks/#{b}", :locals => { :user => @user } %>
19 </div>
20 <% end if @blocks['left'] %>
21 </div>
22
23 <div id="list-right" class="splitcontentright">
24 <% @blocks['right'].each do |b| %>
25 <div class="mypage-box">
26 <%= render :partial => "my/blocks/#{b}", :locals => { :user => @user } %>
27 </div>
28 <% end if @blocks['right'] %>
29 </div>
30
@@ -0,0 +1,121
1 <script language="JavaScript">
2
3 function recreateSortables() {
4 Sortable.destroy('list-top');
5 Sortable.destroy('list-left');
6 Sortable.destroy('list-right');
7
8 Sortable.create("list-top", {constraint:false, containment:['list-top','list-left','list-right'], dropOnEmpty:true, handle:'handle', onUpdate:function(){new Ajax.Request('/my/order_blocks?group=top', {asynchronous:true, evalScripts:true, onComplete:function(request){new Effect.Highlight("list-top",{});}, onLoaded:function(request){Element.hide('indicator')}, onLoading:function(request){Element.show('indicator')}, parameters:Sortable.serialize("list-top")})}, only:'mypage-box', tag:'div'})
9 Sortable.create("list-left", {constraint:false, containment:['list-top','list-left','list-right'], dropOnEmpty:true, handle:'handle', onUpdate:function(){new Ajax.Request('/my/order_blocks?group=left', {asynchronous:true, evalScripts:true, onComplete:function(request){new Effect.Highlight("list-left",{});}, onLoaded:function(request){Element.hide('indicator')}, onLoading:function(request){Element.show('indicator')}, parameters:Sortable.serialize("list-left")})}, only:'mypage-box', tag:'div'})
10 Sortable.create("list-right", {constraint:false, containment:['list-top','list-left','list-right'], dropOnEmpty:true, handle:'handle', onUpdate:function(){new Ajax.Request('/my/order_blocks?group=right', {asynchronous:true, evalScripts:true, onComplete:function(request){new Effect.Highlight("list-right",{});}, onLoaded:function(request){Element.hide('indicator')}, onLoading:function(request){Element.show('indicator')}, parameters:Sortable.serialize("list-right")})}, only:'mypage-box', tag:'div'})
11 }
12
13 function updateSelect() {
14 s = $('block-select')
15 for (var i = 0; i < s.options.length; i++) {
16 if ($('block_' + s.options[i].value)) {
17 s.options[i].disabled = true;
18 } else {
19 s.options[i].disabled = false;
20 }
21 }
22 s.options[0].selected = true;
23 }
24
25 function afterAddBlock() {
26 recreateSortables();
27 updateSelect();
28 }
29
30 function removeBlock(block) {
31 $(block).parentNode.removeChild($(block));
32 updateSelect();
33 }
34
35 </script>
36
37 <div style="float:right;">
38 <%= start_form_tag({:action => "add_block"}, :id => "block-form") %>
39
40 <%= select_tag 'block', "<option></option>" + options_for_select(@block_options), :id => "block-select", :class => "select-small" %>
41 <small>
42 <%= link_to_remote l(:button_add),
43 :url => { :action => "add_block" },
44 :with => "Form.serialize('block-form')",
45 :update => "list-top",
46 :position => :top,
47 :complete => "afterAddBlock();",
48 :loading => "Element.show('indicator')",
49 :loaded => "Element.hide('indicator')"
50 %>
51 </small>
52 <%= end_form_tag %>
53 <small>|
54 <%= link_to l(:button_save), :action => 'page_layout_save' %> |
55 <%= link_to l(:button_cancel), :action => 'page' %>
56 </small>
57 </div>
58
59 <div style="float:right;margin-right:20px;">
60 <span id="indicator" style="display:none"><%= image_tag "loading.gif" %></span>
61 </div>
62
63 <h2><%=l(:label_my_page)%></h2>
64
65 <div id="list-top" class="block-receiver">
66 <% @blocks['top'].each do |b| %>
67 <%= render :partial => 'block', :locals => {:user => @user, :block_name => b} %>
68 <% end if @blocks['top'] %>
69 </div>
70
71 <div id="list-left" class="splitcontentleft block-receiver">
72 <% @blocks['left'].each do |b| %>
73 <%= render :partial => 'block', :locals => {:user => @user, :block_name => b} %>
74 <% end if @blocks['left'] %>
75 </div>
76
77 <div id="list-right" class="splitcontentright block-receiver">
78 <% @blocks['right'].each do |b| %>
79 <%= render :partial => 'block', :locals => {:user => @user, :block_name => b} %>
80 <% end if @blocks['right'] %>
81 </div>
82
83 <%= sortable_element 'list-top',
84 :tag => 'div',
85 :only => 'mypage-box',
86 :handle => "handle",
87 :dropOnEmpty => true,
88 :containment => ['list-top', 'list-left', 'list-right'],
89 :constraint => false,
90 :complete => visual_effect(:highlight, 'list-top'),
91 :url => { :action => "order_blocks", :group => "top" },
92 :loading => "Element.show('indicator')",
93 :loaded => "Element.hide('indicator')"
94 %>
95
96
97 <%= sortable_element 'list-left',
98 :tag => 'div',
99 :only => 'mypage-box',
100 :handle => "handle",
101 :dropOnEmpty => true,
102 :containment => ['list-top', 'list-left', 'list-right'],
103 :constraint => false,
104 :complete => visual_effect(:highlight, 'list-left'),
105 :url => { :action => "order_blocks", :group => "left" },
106 :loading => "Element.show('indicator')",
107 :loaded => "Element.hide('indicator')" %>
108
109 <%= sortable_element 'list-right',
110 :tag => 'div',
111 :only => 'mypage-box',
112 :handle => "handle",
113 :dropOnEmpty => true,
114 :containment => ['list-top', 'list-left', 'list-right'],
115 :constraint => false,
116 :complete => visual_effect(:highlight, 'list-right'),
117 :url => { :action => "order_blocks", :group => "right" },
118 :loading => "Element.show('indicator')",
119 :loaded => "Element.hide('indicator')" %>
120
121 <%= javascript_tag "updateSelect()" %> No newline at end of file
@@ -0,0 +1,12
1 class CreateUserPreferences < ActiveRecord::Migration
2 def self.up
3 create_table :user_preferences do |t|
4 t.column "user_id", :integer, :default => 0, :null => false
5 t.column "others", :text
6 end
7 end
8
9 def self.down
10 drop_table :user_preferences
11 end
12 end
1 NO CONTENT: new file 100644, binary diff hidden
NO CONTENT: new file 100644, binary diff hidden
1 NO CONTENT: new file 100644, binary diff hidden
NO CONTENT: new file 100644, binary diff hidden
1 NO CONTENT: new file 100644, binary diff hidden
NO CONTENT: new file 100644, binary diff hidden
@@ -0,0 +1,5
1 # Read about fixtures at http://ar.rubyonrails.org/classes/Fixtures.html
2 first:
3 id: 1
4 another:
5 id: 2
@@ -0,0 +1,18
1 require File.dirname(__FILE__) + '/../test_helper'
2 require 'my_controller'
3
4 # Re-raise errors caught by the controller.
5 class MyController; def rescue_action(e) raise e end; end
6
7 class MyControllerTest < Test::Unit::TestCase
8 def setup
9 @controller = MyController.new
10 @request = ActionController::TestRequest.new
11 @response = ActionController::TestResponse.new
12 end
13
14 # Replace this with your real tests.
15 def test_truth
16 assert true
17 end
18 end
@@ -0,0 +1,10
1 require File.dirname(__FILE__) + '/../test_helper'
2
3 class UserPreferenceTest < Test::Unit::TestCase
4 fixtures :user_preferences
5
6 # Replace this with your real tests.
7 def test_truth
8 assert true
9 end
10 end
@@ -1,166 +1,131
1 # redMine - project management software
1 # redMine - project management software
2 # Copyright (C) 2006 Jean-Philippe Lang
2 # Copyright (C) 2006 Jean-Philippe Lang
3 #
3 #
4 # This program is free software; you can redistribute it and/or
4 # This program is free software; you can redistribute it and/or
5 # modify it under the terms of the GNU General Public License
5 # modify it under the terms of the GNU General Public License
6 # as published by the Free Software Foundation; either version 2
6 # as published by the Free Software Foundation; either version 2
7 # of the License, or (at your option) any later version.
7 # of the License, or (at your option) any later version.
8 #
8 #
9 # This program is distributed in the hope that it will be useful,
9 # This program is distributed in the hope that it will be useful,
10 # but WITHOUT ANY WARRANTY; without even the implied warranty of
10 # but WITHOUT ANY WARRANTY; without even the implied warranty of
11 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 # GNU General Public License for more details.
12 # GNU General Public License for more details.
13 #
13 #
14 # You should have received a copy of the GNU General Public License
14 # You should have received a copy of the GNU General Public License
15 # along with this program; if not, write to the Free Software
15 # along with this program; if not, write to the Free Software
16 # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
16 # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
17
17
18 class AccountController < ApplicationController
18 class AccountController < ApplicationController
19 layout 'base'
19 layout 'base'
20 helper :custom_fields
20 helper :custom_fields
21 include CustomFieldsHelper
21 include CustomFieldsHelper
22
22
23 # prevents login action to be filtered by check_if_login_required application scope filter
23 # prevents login action to be filtered by check_if_login_required application scope filter
24 skip_before_filter :check_if_login_required, :only => [:login, :lost_password, :register]
24 skip_before_filter :check_if_login_required, :only => [:login, :lost_password, :register]
25 before_filter :require_login, :except => [:show, :login, :lost_password, :register]
25 before_filter :require_login, :except => [:show, :login, :lost_password, :register]
26
26
27 # Show user's account
27 # Show user's account
28 def show
28 def show
29 @user = User.find(params[:id])
29 @user = User.find(params[:id])
30 @custom_values = @user.custom_values.find(:all, :include => :custom_field)
30 @custom_values = @user.custom_values.find(:all, :include => :custom_field)
31 end
31 end
32
32
33 # Login request and validation
33 # Login request and validation
34 def login
34 def login
35 if request.get?
35 if request.get?
36 # Logout user
36 # Logout user
37 self.logged_in_user = nil
37 self.logged_in_user = nil
38 else
38 else
39 # Authenticate user
39 # Authenticate user
40 user = User.try_to_login(params[:login], params[:password])
40 user = User.try_to_login(params[:login], params[:password])
41 if user
41 if user
42 self.logged_in_user = user
42 self.logged_in_user = user
43 redirect_back_or_default :controller => 'account', :action => 'my_page'
43 redirect_back_or_default :controller => 'my', :action => 'page'
44 else
44 else
45 flash.now[:notice] = l(:notice_account_invalid_creditentials)
45 flash.now[:notice] = l(:notice_account_invalid_creditentials)
46 end
46 end
47 end
47 end
48 end
48 end
49
49
50 # Log out current user and redirect to welcome page
50 # Log out current user and redirect to welcome page
51 def logout
51 def logout
52 self.logged_in_user = nil
52 self.logged_in_user = nil
53 redirect_to :controller => ''
53 redirect_to :controller => ''
54 end
54 end
55
55
56 # Show logged in user's page
57 def my_page
58 @user = self.logged_in_user
59 @reported_issues = Issue.find(:all, :conditions => ["author_id=?", @user.id], :limit => 10, :include => [ :status, :project, :tracker ], :order => 'issues.updated_on DESC')
60 @assigned_issues = Issue.find(:all, :conditions => ["assigned_to_id=?", @user.id], :limit => 10, :include => [ :status, :project, :tracker ], :order => 'issues.updated_on DESC')
61 end
62
63 # Edit logged in user's account
64 def my_account
65 @user = self.logged_in_user
66 if request.post? and @user.update_attributes(@params[:user])
67 set_localization
68 flash.now[:notice] = l(:notice_account_updated)
69 self.logged_in_user.reload
70 end
71 end
72
73 # Change logged in user's password
74 def change_password
75 @user = self.logged_in_user
76 flash[:notice] = l(:notice_can_t_change_password) and redirect_to :action => 'my_account' and return if @user.auth_source_id
77 if @user.check_password?(@params[:password])
78 @user.password, @user.password_confirmation = params[:new_password], params[:new_password_confirmation]
79 if @user.save
80 flash[:notice] = l(:notice_account_password_updated)
81 else
82 render :action => 'my_account'
83 return
84 end
85 else
86 flash[:notice] = l(:notice_account_wrong_password)
87 end
88 redirect_to :action => 'my_account'
89 end
90
91 # Enable user to choose a new password
56 # Enable user to choose a new password
92 def lost_password
57 def lost_password
93 if params[:token]
58 if params[:token]
94 @token = Token.find_by_action_and_value("recovery", params[:token])
59 @token = Token.find_by_action_and_value("recovery", params[:token])
95 redirect_to :controller => '' and return unless @token and !@token.expired?
60 redirect_to :controller => '' and return unless @token and !@token.expired?
96 @user = @token.user
61 @user = @token.user
97 if request.post?
62 if request.post?
98 @user.password, @user.password_confirmation = params[:new_password], params[:new_password_confirmation]
63 @user.password, @user.password_confirmation = params[:new_password], params[:new_password_confirmation]
99 if @user.save
64 if @user.save
100 @token.destroy
65 @token.destroy
101 flash[:notice] = l(:notice_account_password_updated)
66 flash[:notice] = l(:notice_account_password_updated)
102 redirect_to :action => 'login'
67 redirect_to :action => 'login'
103 return
68 return
104 end
69 end
105 end
70 end
106 render :template => "account/password_recovery"
71 render :template => "account/password_recovery"
107 return
72 return
108 else
73 else
109 if request.post?
74 if request.post?
110 user = User.find_by_mail(params[:mail])
75 user = User.find_by_mail(params[:mail])
111 # user not found in db
76 # user not found in db
112 flash.now[:notice] = l(:notice_account_unknown_email) and return unless user
77 flash.now[:notice] = l(:notice_account_unknown_email) and return unless user
113 # user uses an external authentification
78 # user uses an external authentification
114 flash.now[:notice] = l(:notice_can_t_change_password) and return if user.auth_source_id
79 flash.now[:notice] = l(:notice_can_t_change_password) and return if user.auth_source_id
115 # create a new token for password recovery
80 # create a new token for password recovery
116 token = Token.new(:user => user, :action => "recovery")
81 token = Token.new(:user => user, :action => "recovery")
117 if token.save
82 if token.save
118 # send token to user via email
83 # send token to user via email
119 Mailer.set_language_if_valid(user.language)
84 Mailer.set_language_if_valid(user.language)
120 Mailer.deliver_lost_password(token)
85 Mailer.deliver_lost_password(token)
121 flash[:notice] = l(:notice_account_lost_email_sent)
86 flash[:notice] = l(:notice_account_lost_email_sent)
122 redirect_to :action => 'login'
87 redirect_to :action => 'login'
123 return
88 return
124 end
89 end
125 end
90 end
126 end
91 end
127 end
92 end
128
93
129 # User self-registration
94 # User self-registration
130 def register
95 def register
131 redirect_to :controller => '' and return if $RDM_SELF_REGISTRATION == false
96 redirect_to :controller => '' and return if $RDM_SELF_REGISTRATION == false
132 if params[:token]
97 if params[:token]
133 token = Token.find_by_action_and_value("register", params[:token])
98 token = Token.find_by_action_and_value("register", params[:token])
134 redirect_to :controller => '' and return unless token and !token.expired?
99 redirect_to :controller => '' and return unless token and !token.expired?
135 user = token.user
100 user = token.user
136 redirect_to :controller => '' and return unless user.status == User::STATUS_REGISTERED
101 redirect_to :controller => '' and return unless user.status == User::STATUS_REGISTERED
137 user.status = User::STATUS_ACTIVE
102 user.status = User::STATUS_ACTIVE
138 if user.save
103 if user.save
139 token.destroy
104 token.destroy
140 flash[:notice] = l(:notice_account_activated)
105 flash[:notice] = l(:notice_account_activated)
141 redirect_to :action => 'login'
106 redirect_to :action => 'login'
142 return
107 return
143 end
108 end
144 else
109 else
145 if request.get?
110 if request.get?
146 @user = User.new(:language => $RDM_DEFAULT_LANG)
111 @user = User.new(:language => $RDM_DEFAULT_LANG)
147 @custom_values = UserCustomField.find(:all).collect { |x| CustomValue.new(:custom_field => x, :customized => @user) }
112 @custom_values = UserCustomField.find(:all).collect { |x| CustomValue.new(:custom_field => x, :customized => @user) }
148 else
113 else
149 @user = User.new(params[:user])
114 @user = User.new(params[:user])
150 @user.admin = false
115 @user.admin = false
151 @user.login = params[:user][:login]
116 @user.login = params[:user][:login]
152 @user.status = User::STATUS_REGISTERED
117 @user.status = User::STATUS_REGISTERED
153 @user.password, @user.password_confirmation = params[:password], params[:password_confirmation]
118 @user.password, @user.password_confirmation = params[:password], params[:password_confirmation]
154 @custom_values = UserCustomField.find(:all).collect { |x| CustomValue.new(:custom_field => x, :customized => @user, :value => params["custom_fields"][x.id.to_s]) }
119 @custom_values = UserCustomField.find(:all).collect { |x| CustomValue.new(:custom_field => x, :customized => @user, :value => params["custom_fields"][x.id.to_s]) }
155 @user.custom_values = @custom_values
120 @user.custom_values = @custom_values
156 token = Token.new(:user => @user, :action => "register")
121 token = Token.new(:user => @user, :action => "register")
157 if @user.save and token.save
122 if @user.save and token.save
158 Mailer.set_language_if_valid(@user.language)
123 Mailer.set_language_if_valid(@user.language)
159 Mailer.deliver_register(token)
124 Mailer.deliver_register(token)
160 flash[:notice] = l(:notice_account_register_done)
125 flash[:notice] = l(:notice_account_register_done)
161 redirect_to :controller => ''
126 redirect_to :controller => ''
162 end
127 end
163 end
128 end
164 end
129 end
165 end
130 end
166 end
131 end
@@ -1,123 +1,129
1 # redMine - project management software
1 # redMine - project management software
2 # Copyright (C) 2006 Jean-Philippe Lang
2 # Copyright (C) 2006 Jean-Philippe Lang
3 #
3 #
4 # This program is free software; you can redistribute it and/or
4 # This program is free software; you can redistribute it and/or
5 # modify it under the terms of the GNU General Public License
5 # modify it under the terms of the GNU General Public License
6 # as published by the Free Software Foundation; either version 2
6 # as published by the Free Software Foundation; either version 2
7 # of the License, or (at your option) any later version.
7 # of the License, or (at your option) any later version.
8 #
8 #
9 # This program is distributed in the hope that it will be useful,
9 # This program is distributed in the hope that it will be useful,
10 # but WITHOUT ANY WARRANTY; without even the implied warranty of
10 # but WITHOUT ANY WARRANTY; without even the implied warranty of
11 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 # GNU General Public License for more details.
12 # GNU General Public License for more details.
13 #
13 #
14 # You should have received a copy of the GNU General Public License
14 # You should have received a copy of the GNU General Public License
15 # along with this program; if not, write to the Free Software
15 # along with this program; if not, write to the Free Software
16 # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
16 # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
17
17
18 require "digest/sha1"
18 require "digest/sha1"
19
19
20 class User < ActiveRecord::Base
20 class User < ActiveRecord::Base
21 has_many :memberships, :class_name => 'Member', :include => [ :project, :role ], :dependent => true
21 has_many :memberships, :class_name => 'Member', :include => [ :project, :role ], :dependent => true
22 has_many :projects, :through => :memberships
22 has_many :custom_values, :dependent => true, :as => :customized
23 has_many :custom_values, :dependent => true, :as => :customized
24 has_one :preference, :dependent => true, :class_name => 'UserPreference'
23 belongs_to :auth_source
25 belongs_to :auth_source
24
26
25 attr_accessor :password, :password_confirmation
27 attr_accessor :password, :password_confirmation
26 attr_accessor :last_before_login_on
28 attr_accessor :last_before_login_on
27 # Prevents unauthorized assignments
29 # Prevents unauthorized assignments
28 attr_protected :login, :admin, :password, :password_confirmation, :hashed_password
30 attr_protected :login, :admin, :password, :password_confirmation, :hashed_password
29
31
30 validates_presence_of :login, :firstname, :lastname, :mail
32 validates_presence_of :login, :firstname, :lastname, :mail
31 validates_uniqueness_of :login, :mail
33 validates_uniqueness_of :login, :mail
32 # Login must contain lettres, numbers, underscores only
34 # Login must contain lettres, numbers, underscores only
33 validates_format_of :login, :with => /^[a-z0-9_]+$/i
35 validates_format_of :login, :with => /^[a-z0-9_]+$/i
34 validates_format_of :mail, :with => /^([^@\s]+)@((?:[-a-z0-9]+\.)+[a-z]{2,})$/i
36 validates_format_of :mail, :with => /^([^@\s]+)@((?:[-a-z0-9]+\.)+[a-z]{2,})$/i
35 # Password length between 4 and 12
37 # Password length between 4 and 12
36 validates_length_of :password, :in => 4..12, :allow_nil => true
38 validates_length_of :password, :in => 4..12, :allow_nil => true
37 validates_confirmation_of :password, :allow_nil => true
39 validates_confirmation_of :password, :allow_nil => true
38 validates_associated :custom_values, :on => :update
40 validates_associated :custom_values, :on => :update
39
41
40 # Account statuses
42 # Account statuses
41 STATUS_ACTIVE = 1
43 STATUS_ACTIVE = 1
42 STATUS_REGISTERED = 2
44 STATUS_REGISTERED = 2
43 STATUS_LOCKED = 3
45 STATUS_LOCKED = 3
44
46
45 def before_save
47 def before_save
46 # update hashed_password if password was set
48 # update hashed_password if password was set
47 self.hashed_password = User.hash_password(self.password) if self.password
49 self.hashed_password = User.hash_password(self.password) if self.password
48 end
50 end
49
51
50 # Returns the user that matches provided login and password, or nil
52 # Returns the user that matches provided login and password, or nil
51 def self.try_to_login(login, password)
53 def self.try_to_login(login, password)
52 user = find(:first, :conditions => ["login=?", login])
54 user = find(:first, :conditions => ["login=?", login])
53 if user
55 if user
54 # user is already in local database
56 # user is already in local database
55 return nil if !user.active?
57 return nil if !user.active?
56 if user.auth_source
58 if user.auth_source
57 # user has an external authentication method
59 # user has an external authentication method
58 return nil unless user.auth_source.authenticate(login, password)
60 return nil unless user.auth_source.authenticate(login, password)
59 else
61 else
60 # authentication with local password
62 # authentication with local password
61 return nil unless User.hash_password(password) == user.hashed_password
63 return nil unless User.hash_password(password) == user.hashed_password
62 end
64 end
63 else
65 else
64 # user is not yet registered, try to authenticate with available sources
66 # user is not yet registered, try to authenticate with available sources
65 attrs = AuthSource.authenticate(login, password)
67 attrs = AuthSource.authenticate(login, password)
66 if attrs
68 if attrs
67 onthefly = new(*attrs)
69 onthefly = new(*attrs)
68 onthefly.login = login
70 onthefly.login = login
69 onthefly.language = $RDM_DEFAULT_LANG
71 onthefly.language = $RDM_DEFAULT_LANG
70 if onthefly.save
72 if onthefly.save
71 user = find(:first, :conditions => ["login=?", login])
73 user = find(:first, :conditions => ["login=?", login])
72 logger.info("User '#{user.login}' created on the fly.") if logger
74 logger.info("User '#{user.login}' created on the fly.") if logger
73 end
75 end
74 end
76 end
75 end
77 end
76 user.update_attribute(:last_login_on, Time.now) if user
78 user.update_attribute(:last_login_on, Time.now) if user
77 user
79 user
78
80
79 rescue => text
81 rescue => text
80 raise text
82 raise text
81 end
83 end
82
84
83 # Return user's full name for display
85 # Return user's full name for display
84 def display_name
86 def display_name
85 firstname + " " + lastname
87 firstname + " " + lastname
86 end
88 end
87
89
88 def name
90 def name
89 display_name
91 display_name
90 end
92 end
91
93
92 def active?
94 def active?
93 self.status == STATUS_ACTIVE
95 self.status == STATUS_ACTIVE
94 end
96 end
95
97
96 def registered?
98 def registered?
97 self.status == STATUS_REGISTERED
99 self.status == STATUS_REGISTERED
98 end
100 end
99
101
100 def locked?
102 def locked?
101 self.status == STATUS_LOCKED
103 self.status == STATUS_LOCKED
102 end
104 end
103
105
104 def check_password?(clear_password)
106 def check_password?(clear_password)
105 User.hash_password(clear_password) == self.hashed_password
107 User.hash_password(clear_password) == self.hashed_password
106 end
108 end
107
109
108 def role_for_project(project_id)
110 def role_for_project(project_id)
109 @role_for_projects ||=
111 @role_for_projects ||=
110 begin
112 begin
111 roles = {}
113 roles = {}
112 self.memberships.each { |m| roles.store m.project_id, m.role_id }
114 self.memberships.each { |m| roles.store m.project_id, m.role_id }
113 roles
115 roles
114 end
116 end
115 @role_for_projects[project_id]
117 @role_for_projects[project_id]
116 end
118 end
117
119
120 def pref
121 self.preference ||= UserPreference.new(:user => self)
122 end
123
118 private
124 private
119 # Return password digest
125 # Return password digest
120 def self.hash_password(clear_password)
126 def self.hash_password(clear_password)
121 Digest::SHA1.hexdigest(clear_password || "")
127 Digest::SHA1.hexdigest(clear_password || "")
122 end
128 end
123 end
129 end
@@ -1,142 +1,142
1 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
1 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
2 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
2 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
3 <head>
3 <head>
4 <title><%= $RDM_HEADER_TITLE + (@html_title ? ": #{@html_title}" : "") %></title>
4 <title><%= $RDM_HEADER_TITLE + (@html_title ? ": #{@html_title}" : "") %></title>
5 <meta http-equiv="content-type" content="text/html; charset=utf-8" />
5 <meta http-equiv="content-type" content="text/html; charset=utf-8" />
6 <meta name="description" content="redMine" />
6 <meta name="description" content="redMine" />
7 <meta name="keywords" content="issue,bug,tracker" />
7 <meta name="keywords" content="issue,bug,tracker" />
8 <%= stylesheet_link_tag "application" %>
8 <%= stylesheet_link_tag "application" %>
9 <%= stylesheet_link_tag "menu" %>
9 <%= stylesheet_link_tag "menu" %>
10 <%= stylesheet_link_tag "rails" %>
10 <%= stylesheet_link_tag "rails" %>
11 <%= javascript_include_tag :defaults %>
11 <%= javascript_include_tag :defaults %>
12 <%= javascript_include_tag 'menu' %>
12 <%= javascript_include_tag 'menu' %>
13 <%= javascript_include_tag 'calendar/calendar' %>
13 <%= javascript_include_tag 'calendar/calendar' %>
14 <%= javascript_include_tag "calendar/lang/calendar-#{current_language}.js" %>
14 <%= javascript_include_tag "calendar/lang/calendar-#{current_language}.js" %>
15 <%= javascript_include_tag 'calendar/calendar-setup' %>
15 <%= javascript_include_tag 'calendar/calendar-setup' %>
16 <%= stylesheet_link_tag 'calendar' %>
16 <%= stylesheet_link_tag 'calendar' %>
17 <%= stylesheet_link_tag 'jstoolbar' %>
17 <%= stylesheet_link_tag 'jstoolbar' %>
18 <script type='text/javascript'>
18 <script type='text/javascript'>
19 var menu_contenu=' \
19 var menu_contenu=' \
20 <div id="menuAdmin" class="menu" onmouseover="menuMouseover(event)"> \
20 <div id="menuAdmin" class="menu" onmouseover="menuMouseover(event)"> \
21 <a class="menuItem" href="\/admin\/projects" onmouseover="menuItemMouseover(event,\'menuProjects\');"><span class="menuItemText"><%=l(:label_project_plural)%><\/span><span class="menuItemArrow">&#9654;<\/span><\/a> \
21 <a class="menuItem" href="\/admin\/projects" onmouseover="menuItemMouseover(event,\'menuProjects\');"><span class="menuItemText"><%=l(:label_project_plural)%><\/span><span class="menuItemArrow">&#9654;<\/span><\/a> \
22 <a class="menuItem" href="\/users" onmouseover="menuItemMouseover(event,\'menuUsers\');"><span class="menuItemText"><%=l(:label_user_plural)%><\/span><span class="menuItemArrow">&#9654;<\/span><\/a> \
22 <a class="menuItem" href="\/users" onmouseover="menuItemMouseover(event,\'menuUsers\');"><span class="menuItemText"><%=l(:label_user_plural)%><\/span><span class="menuItemArrow">&#9654;<\/span><\/a> \
23 <a class="menuItem" href="\/roles"><%=l(:label_role_and_permissions)%><\/a> \
23 <a class="menuItem" href="\/roles"><%=l(:label_role_and_permissions)%><\/a> \
24 <a class="menuItem" href="\/trackers" onmouseover="menuItemMouseover(event,\'menuTrackers\');"><span class="menuItemText"><%=l(:label_tracker_plural)%><\/span><span class="menuItemArrow">&#9654;<\/span><\/a> \
24 <a class="menuItem" href="\/trackers" onmouseover="menuItemMouseover(event,\'menuTrackers\');"><span class="menuItemText"><%=l(:label_tracker_plural)%><\/span><span class="menuItemArrow">&#9654;<\/span><\/a> \
25 <a class="menuItem" href="\/custom_fields"><%=l(:label_custom_field_plural)%><\/a> \
25 <a class="menuItem" href="\/custom_fields"><%=l(:label_custom_field_plural)%><\/a> \
26 <a class="menuItem" href="\/enumerations"><%=l(:label_enumerations)%><\/a> \
26 <a class="menuItem" href="\/enumerations"><%=l(:label_enumerations)%><\/a> \
27 <a class="menuItem" href="\/admin\/mail_options"><%=l(:field_mail_notification)%><\/a> \
27 <a class="menuItem" href="\/admin\/mail_options"><%=l(:field_mail_notification)%><\/a> \
28 <a class="menuItem" href="\/auth_sources"><%=l(:label_authentication)%><\/a> \
28 <a class="menuItem" href="\/auth_sources"><%=l(:label_authentication)%><\/a> \
29 <a class="menuItem" href="\/admin\/info"><%=l(:label_information_plural)%><\/a> \
29 <a class="menuItem" href="\/admin\/info"><%=l(:label_information_plural)%><\/a> \
30 <\/div> \
30 <\/div> \
31 <div id="menuTrackers" class="menu"> \
31 <div id="menuTrackers" class="menu"> \
32 <a class="menuItem" href="\/issue_statuses"><%=l(:label_issue_status_plural)%><\/a> \
32 <a class="menuItem" href="\/issue_statuses"><%=l(:label_issue_status_plural)%><\/a> \
33 <a class="menuItem" href="\/roles\/workflow"><%=l(:label_workflow)%><\/a> \
33 <a class="menuItem" href="\/roles\/workflow"><%=l(:label_workflow)%><\/a> \
34 <\/div> \
34 <\/div> \
35 <div id="menuProjects" class="menu"><a class="menuItem" href="\/projects\/add"><%=l(:label_new)%><\/a><\/div> \
35 <div id="menuProjects" class="menu"><a class="menuItem" href="\/projects\/add"><%=l(:label_new)%><\/a><\/div> \
36 <div id="menuUsers" class="menu"><a class="menuItem" href="\/users\/add"><%=l(:label_new)%><\/a><\/div> \
36 <div id="menuUsers" class="menu"><a class="menuItem" href="\/users\/add"><%=l(:label_new)%><\/a><\/div> \
37 \
37 \
38 <% unless @project.nil? || @project.id.nil? %> \
38 <% unless @project.nil? || @project.id.nil? %> \
39 <div id="menuProject" class="menu" onmouseover="menuMouseover(event)"> \
39 <div id="menuProject" class="menu" onmouseover="menuMouseover(event)"> \
40 <%= link_to l(:label_calendar), {:controller => 'projects', :action => 'calendar', :id => @project }, :class => "menuItem" %> \
40 <%= link_to l(:label_calendar), {:controller => 'projects', :action => 'calendar', :id => @project }, :class => "menuItem" %> \
41 <%= link_to l(:label_issue_plural), {:controller => 'projects', :action => 'list_issues', :id => @project }, :class => "menuItem" %> \
41 <%= link_to l(:label_issue_plural), {:controller => 'projects', :action => 'list_issues', :id => @project }, :class => "menuItem" %> \
42 <%= link_to l(:label_report_plural), {:controller => 'reports', :action => 'issue_report', :id => @project }, :class => "menuItem" %> \
42 <%= link_to l(:label_report_plural), {:controller => 'reports', :action => 'issue_report', :id => @project }, :class => "menuItem" %> \
43 <%= link_to l(:label_activity), {:controller => 'projects', :action => 'activity', :id => @project }, :class => "menuItem" %> \
43 <%= link_to l(:label_activity), {:controller => 'projects', :action => 'activity', :id => @project }, :class => "menuItem" %> \
44 <%= link_to l(:label_news_plural), {:controller => 'projects', :action => 'list_news', :id => @project }, :class => "menuItem" %> \
44 <%= link_to l(:label_news_plural), {:controller => 'projects', :action => 'list_news', :id => @project }, :class => "menuItem" %> \
45 <%= link_to l(:label_change_log), {:controller => 'projects', :action => 'changelog', :id => @project }, :class => "menuItem" %> \
45 <%= link_to l(:label_change_log), {:controller => 'projects', :action => 'changelog', :id => @project }, :class => "menuItem" %> \
46 <%= link_to l(:label_document_plural), {:controller => 'projects', :action => 'list_documents', :id => @project }, :class => "menuItem" %> \
46 <%= link_to l(:label_document_plural), {:controller => 'projects', :action => 'list_documents', :id => @project }, :class => "menuItem" %> \
47 <%= link_to l(:label_member_plural), {:controller => 'projects', :action => 'list_members', :id => @project }, :class => "menuItem" %> \
47 <%= link_to l(:label_member_plural), {:controller => 'projects', :action => 'list_members', :id => @project }, :class => "menuItem" %> \
48 <%= link_to l(:label_attachment_plural), {:controller => 'projects', :action => 'list_files', :id => @project }, :class => "menuItem" %> \
48 <%= link_to l(:label_attachment_plural), {:controller => 'projects', :action => 'list_files', :id => @project }, :class => "menuItem" %> \
49 <%= link_to_if_authorized l(:label_settings), {:controller => 'projects', :action => 'settings', :id => @project }, :class => "menuItem" %> \
49 <%= link_to_if_authorized l(:label_settings), {:controller => 'projects', :action => 'settings', :id => @project }, :class => "menuItem" %> \
50 <\/div> \
50 <\/div> \
51 <% end %> \
51 <% end %> \
52 ';
52 ';
53 </script>
53 </script>
54
54
55 </head>
55 </head>
56
56
57 <body>
57 <body>
58 <div id="container" >
58 <div id="container" >
59
59
60 <div id="header">
60 <div id="header">
61 <div style="float: left;">
61 <div style="float: left;">
62 <h1><%= $RDM_HEADER_TITLE %></h1>
62 <h1><%= $RDM_HEADER_TITLE %></h1>
63 <h2><%= $RDM_HEADER_SUBTITLE %></h2>
63 <h2><%= $RDM_HEADER_SUBTITLE %></h2>
64 </div>
64 </div>
65 <div style="float: right; padding-right: 1em; padding-top: 0.2em;">
65 <div style="float: right; padding-right: 1em; padding-top: 0.2em;">
66 <% if loggedin? %><small><%=l(:label_logged_as)%> <b><%= @logged_in_user.login %></b></small><% end %>
66 <% if loggedin? %><small><%=l(:label_logged_as)%> <b><%= @logged_in_user.login %></b></small><% end %>
67 </div>
67 </div>
68 </div>
68 </div>
69
69
70 <div id="navigation">
70 <div id="navigation">
71 <ul>
71 <ul>
72 <li class="selected"><%= link_to l(:label_home), { :controller => '' }, :class => "picHome" %></li>
72 <li class="selected"><%= link_to l(:label_home), { :controller => '' }, :class => "picHome" %></li>
73 <li><%= link_to l(:label_my_page), { :controller => 'account', :action => 'my_page'}, :class => "picUserPage" %></li>
73 <li><%= link_to l(:label_my_page), { :controller => 'my', :action => 'page'}, :class => "picUserPage" %></li>
74 <li><%= link_to l(:label_project_plural), { :controller => 'projects' }, :class => "picProject" %></li>
74 <li><%= link_to l(:label_project_plural), { :controller => 'projects' }, :class => "picProject" %></li>
75
75
76 <% unless @project.nil? || @project.id.nil? %>
76 <% unless @project.nil? || @project.id.nil? %>
77 <li><%= link_to @project.name, { :controller => 'projects', :action => 'show', :id => @project }, :class => "picProject", :onmouseover => "buttonMouseover(event, 'menuProject');" %></li>
77 <li><%= link_to @project.name, { :controller => 'projects', :action => 'show', :id => @project }, :class => "picProject", :onmouseover => "buttonMouseover(event, 'menuProject');" %></li>
78 <% end %>
78 <% end %>
79
79
80 <% if loggedin? %>
80 <% if loggedin? %>
81 <li><%= link_to l(:label_my_account), { :controller => 'account', :action => 'my_account' }, :class => "picUser" %></li>
81 <li><%= link_to l(:label_my_account), { :controller => 'my', :action => 'account' }, :class => "picUser" %></li>
82 <% end %>
82 <% end %>
83
83
84 <% if admin_loggedin? %>
84 <% if admin_loggedin? %>
85 <li><%= link_to l(:label_administration), { :controller => 'admin' }, :class => "picAdmin", :onmouseover => "buttonMouseover(event, 'menuAdmin');" %></li>
85 <li><%= link_to l(:label_administration), { :controller => 'admin' }, :class => "picAdmin", :onmouseover => "buttonMouseover(event, 'menuAdmin');" %></li>
86 <% end %>
86 <% end %>
87
87
88 <li class="right"><%= link_to l(:label_help), { :controller => 'help', :ctrl => @params[:controller], :page => @params[:action] }, :target => "new", :class => "picHelp" %></li>
88 <li class="right"><%= link_to l(:label_help), { :controller => 'help', :ctrl => @params[:controller], :page => @params[:action] }, :target => "new", :class => "picHelp" %></li>
89
89
90 <% if loggedin? %>
90 <% if loggedin? %>
91 <li class="right"><%= link_to l(:label_logout), { :controller => 'account', :action => 'logout' }, :class => "picUser" %></li>
91 <li class="right"><%= link_to l(:label_logout), { :controller => 'account', :action => 'logout' }, :class => "picUser" %></li>
92 <% else %>
92 <% else %>
93 <li class="right"><%= link_to l(:label_login), { :controller => 'account', :action => 'login' }, :class => "picUser" %></li>
93 <li class="right"><%= link_to l(:label_login), { :controller => 'account', :action => 'login' }, :class => "picUser" %></li>
94 <% end %>
94 <% end %>
95 </ul>
95 </ul>
96 </div>
96 </div>
97 <script type='text/javascript'>if(document.getElementById) {document.write(menu_contenu);}</script>
97 <script type='text/javascript'>if(document.getElementById) {document.write(menu_contenu);}</script>
98
98
99 <div id="subcontent">
99 <div id="subcontent">
100
100
101 <% unless @project.nil? || @project.id.nil? %>
101 <% unless @project.nil? || @project.id.nil? %>
102 <h2><%= @project.name %></h2>
102 <h2><%= @project.name %></h2>
103 <ul class="menublock">
103 <ul class="menublock">
104 <li><%= link_to l(:label_overview), :controller => 'projects', :action => 'show', :id => @project %></li>
104 <li><%= link_to l(:label_overview), :controller => 'projects', :action => 'show', :id => @project %></li>
105 <li><%= link_to l(:label_calendar), :controller => 'projects', :action => 'calendar', :id => @project %></li>
105 <li><%= link_to l(:label_calendar), :controller => 'projects', :action => 'calendar', :id => @project %></li>
106 <li><%= link_to l(:label_issue_plural), :controller => 'projects', :action => 'list_issues', :id => @project %></li>
106 <li><%= link_to l(:label_issue_plural), :controller => 'projects', :action => 'list_issues', :id => @project %></li>
107 <li><%= link_to l(:label_report_plural), :controller => 'reports', :action => 'issue_report', :id => @project %></li>
107 <li><%= link_to l(:label_report_plural), :controller => 'reports', :action => 'issue_report', :id => @project %></li>
108 <li><%= link_to l(:label_activity), :controller => 'projects', :action => 'activity', :id => @project %></li>
108 <li><%= link_to l(:label_activity), :controller => 'projects', :action => 'activity', :id => @project %></li>
109 <li><%= link_to l(:label_news_plural), :controller => 'projects', :action => 'list_news', :id => @project %></li>
109 <li><%= link_to l(:label_news_plural), :controller => 'projects', :action => 'list_news', :id => @project %></li>
110 <li><%= link_to l(:label_change_log), :controller => 'projects', :action => 'changelog', :id => @project %></li>
110 <li><%= link_to l(:label_change_log), :controller => 'projects', :action => 'changelog', :id => @project %></li>
111 <li><%= link_to l(:label_document_plural), :controller => 'projects', :action => 'list_documents', :id => @project %></li>
111 <li><%= link_to l(:label_document_plural), :controller => 'projects', :action => 'list_documents', :id => @project %></li>
112 <li><%= link_to l(:label_member_plural), :controller => 'projects', :action => 'list_members', :id => @project %></li>
112 <li><%= link_to l(:label_member_plural), :controller => 'projects', :action => 'list_members', :id => @project %></li>
113 <li><%= link_to l(:label_attachment_plural), :controller => 'projects', :action => 'list_files', :id => @project %></li>
113 <li><%= link_to l(:label_attachment_plural), :controller => 'projects', :action => 'list_files', :id => @project %></li>
114 <li><%= link_to_if_authorized l(:label_settings), :controller => 'projects', :action => 'settings', :id => @project %></li>
114 <li><%= link_to_if_authorized l(:label_settings), :controller => 'projects', :action => 'settings', :id => @project %></li>
115 </ul>
115 </ul>
116 <% end %>
116 <% end %>
117
117
118 <% if loggedin? and @logged_in_user.memberships.length > 0 %>
118 <% if loggedin? and @logged_in_user.memberships.length > 0 %>
119 <h2><%=l(:label_my_projects) %></h2>
119 <h2><%=l(:label_my_projects) %></h2>
120 <ul class="menublock">
120 <ul class="menublock">
121 <% for membership in @logged_in_user.memberships %>
121 <% for membership in @logged_in_user.memberships %>
122 <li><%= link_to membership.project.name, :controller => 'projects', :action => 'show', :id => membership.project %></li>
122 <li><%= link_to membership.project.name, :controller => 'projects', :action => 'show', :id => membership.project %></li>
123 <% end %>
123 <% end %>
124 </ul>
124 </ul>
125 <% end %>
125 <% end %>
126 </div>
126 </div>
127
127
128 <div id="content">
128 <div id="content">
129 <% if flash[:notice] %><p style="color: green"><%= flash[:notice] %></p><% end %>
129 <% if flash[:notice] %><p style="color: green"><%= flash[:notice] %></p><% end %>
130 <%= @content_for_layout %>
130 <%= @content_for_layout %>
131 </div>
131 </div>
132
132
133 <div id="footer">
133 <div id="footer">
134 <p>
134 <p>
135 <%= auto_link $RDM_FOOTER_SIG %> |
135 <%= auto_link $RDM_FOOTER_SIG %> |
136 <a href="http://redmine.rubyforge.org/" target="_new"><%= RDM_APP_NAME %></a> <%= RDM_APP_VERSION %>
136 <a href="http://redmine.rubyforge.org/" target="_new"><%= RDM_APP_NAME %></a> <%= RDM_APP_VERSION %>
137 </p>
137 </p>
138 </div>
138 </div>
139
139
140 </div>
140 </div>
141 </body>
141 </body>
142 </html> No newline at end of file
142 </html>
@@ -1,54 +1,54
1 <h2><%=l(:label_my_account)%></h2>
1 <h2><%=l(:label_my_account)%></h2>
2
2
3 <p><%=l(:field_login)%>: <strong><%= @user.login %></strong><br />
3 <p><%=l(:field_login)%>: <strong><%= @user.login %></strong><br />
4 <%=l(:field_created_on)%>: <%= format_time(@user.created_on) %>,
4 <%=l(:field_created_on)%>: <%= format_time(@user.created_on) %>,
5 <%=l(:field_updated_on)%>: <%= format_time(@user.updated_on) %></p>
5 <%=l(:field_updated_on)%>: <%= format_time(@user.updated_on) %></p>
6
6
7 <%= error_messages_for 'user' %>
7 <%= error_messages_for 'user' %>
8
8
9 <div class="box">
9 <div class="box">
10 <h3><%=l(:label_information_plural)%></h3>
10 <h3><%=l(:label_information_plural)%></h3>
11
11
12 <%= start_form_tag({:action => 'my_account'}, :class => "tabular") %>
12 <%= start_form_tag({:action => 'account'}, :class => "tabular") %>
13
13
14 <!--[form:user]-->
14 <!--[form:user]-->
15 <p><label for="user_firstname"><%=l(:field_firstname)%> <span class="required">*</span></label>
15 <p><label for="user_firstname"><%=l(:field_firstname)%> <span class="required">*</span></label>
16 <%= text_field 'user', 'firstname' %></p>
16 <%= text_field 'user', 'firstname' %></p>
17
17
18 <p><label for="user_lastname"><%=l(:field_lastname)%> <span class="required">*</span></label>
18 <p><label for="user_lastname"><%=l(:field_lastname)%> <span class="required">*</span></label>
19 <%= text_field 'user', 'lastname' %></p>
19 <%= text_field 'user', 'lastname' %></p>
20
20
21 <p><label for="user_mail"><%=l(:field_mail)%> <span class="required">*</span></label>
21 <p><label for="user_mail"><%=l(:field_mail)%> <span class="required">*</span></label>
22 <%= text_field 'user', 'mail', :size => 40 %></p>
22 <%= text_field 'user', 'mail', :size => 40 %></p>
23
23
24 <p><label for="user_language"><%=l(:field_language)%></label>
24 <p><label for="user_language"><%=l(:field_language)%></label>
25 <%= select("user", "language", lang_options_for_select) %></p>
25 <%= select("user", "language", lang_options_for_select) %></p>
26 <!--[eoform:user]-->
26 <!--[eoform:user]-->
27
27
28 <p><label for="user_mail_notification"><%=l(:field_mail_notification)%></label>
28 <p><label for="user_mail_notification"><%=l(:field_mail_notification)%></label>
29 <%= check_box 'user', 'mail_notification' %></p>
29 <%= check_box 'user', 'mail_notification' %></p>
30
30
31 <center><%= submit_tag l(:button_save) %></center>
31 <center><%= submit_tag l(:button_save) %></center>
32 <%= end_form_tag %>
32 <%= end_form_tag %>
33 </div>
33 </div>
34
34
35
35
36 <% unless @user.auth_source_id %>
36 <% unless @user.auth_source_id %>
37 <div class="box">
37 <div class="box">
38 <h3><%=l(:field_password)%></h3>
38 <h3><%=l(:field_password)%></h3>
39
39
40 <%= start_form_tag({:action => 'change_password'}, :class => "tabular") %>
40 <%= start_form_tag({:action => 'change_password'}, :class => "tabular") %>
41
41
42 <p><label for="password"><%=l(:field_password)%> <span class="required">*</span></label>
42 <p><label for="password"><%=l(:field_password)%> <span class="required">*</span></label>
43 <%= password_field_tag 'password', nil, :size => 25 %></p>
43 <%= password_field_tag 'password', nil, :size => 25 %></p>
44
44
45 <p><label for="new_password"><%=l(:field_new_password)%> <span class="required">*</span></label>
45 <p><label for="new_password"><%=l(:field_new_password)%> <span class="required">*</span></label>
46 <%= password_field_tag 'new_password', nil, :size => 25 %></p>
46 <%= password_field_tag 'new_password', nil, :size => 25 %></p>
47
47
48 <p><label for="new_password_confirmation"><%=l(:field_password_confirmation)%> <span class="required">*</span></label>
48 <p><label for="new_password_confirmation"><%=l(:field_password_confirmation)%> <span class="required">*</span></label>
49 <%= password_field_tag 'new_password_confirmation', nil, :size => 25 %></p>
49 <%= password_field_tag 'new_password_confirmation', nil, :size => 25 %></p>
50
50
51 <center><%= submit_tag l(:button_save) %></center>
51 <center><%= submit_tag l(:button_save) %></center>
52 <%= end_form_tag %>
52 <%= end_form_tag %>
53 </div>
53 </div>
54 <% end %>
54 <% end %>
@@ -1,95 +1,96
1 == redMine changelog
1 == redMine changelog
2
2
3 redMine - project management software
3 redMine - project management software
4 Copyright (C) 2006 Jean-Philippe Lang
4 Copyright (C) 2006 Jean-Philippe Lang
5 http://redmine.org/
5 http://redmine.org/
6
6
7
7
8 == xx/xx/2006 v0.x.x
8 == xx/xx/2006 v0.x.x
9
9
10 * "my page" is now customizable
10 * improved issues change history
11 * improved issues change history
11 * new functionality: move an issue to another project or tracker
12 * new functionality: move an issue to another project or tracker
12 * new functionality: add a note to an issue
13 * new functionality: add a note to an issue
13 * new report: project activity
14 * new report: project activity
14 * "start date" and "% done" fields added on issues
15 * "start date" and "% done" fields added on issues
15 * project calendar added
16 * project calendar added
16 * gantt chart added (exportable to pdf)
17 * gantt chart added (exportable to pdf)
17 * single/multiple issues pdf export added
18 * single/multiple issues pdf export added
18 * issues reports improvements
19 * issues reports improvements
19 * multiple file upload for issues attachments
20 * multiple file upload for issues attachments
20 * textile formating of issue and news descritions (RedCloth required)
21 * textile formating of issue and news descritions (RedCloth required)
21 * integration of DotClear jstoolbar for textile formatting
22 * integration of DotClear jstoolbar for textile formatting
22 * calendar date picker for date fields (LGPL DHTML Calendar http://sourceforge.net/projects/jscalendar)
23 * calendar date picker for date fields (LGPL DHTML Calendar http://sourceforge.net/projects/jscalendar)
23 * new filter in issues list: Author
24 * new filter in issues list: Author
24 * ajaxified paginators
25 * ajaxified paginators
25 * option to set number of results per page on issues list
26 * option to set number of results per page on issues list
26 * localized csv separator (comma/semicolon)
27 * localized csv separator (comma/semicolon)
27 * csv output encoded to ISO-8859-1
28 * csv output encoded to ISO-8859-1
28 * user custom field displayed on account/show
29 * user custom field displayed on account/show
29 * default configuration improved (default roles, trackers, status, permissions and workflows)
30 * default configuration improved (default roles, trackers, status, permissions and workflows)
30 * fixed: custom fields not in csv exports
31 * fixed: custom fields not in csv exports
31 * fixed: project settings now displayed according to user's permissions
32 * fixed: project settings now displayed according to user's permissions
32
33
33 == 10/08/2006 v0.3.0
34 == 10/08/2006 v0.3.0
34
35
35 * user authentication against multiple LDAP (optional)
36 * user authentication against multiple LDAP (optional)
36 * token based "lost password" functionality
37 * token based "lost password" functionality
37 * user self-registration functionality (optional)
38 * user self-registration functionality (optional)
38 * custom fields now available for issues, users and projects
39 * custom fields now available for issues, users and projects
39 * new custom field format "text" (displayed as a textarea field)
40 * new custom field format "text" (displayed as a textarea field)
40 * project & administration drop down menus in navigation bar for quicker access
41 * project & administration drop down menus in navigation bar for quicker access
41 * text formatting is preserved for long text fields (issues, projects and news descriptions)
42 * text formatting is preserved for long text fields (issues, projects and news descriptions)
42 * urls and emails are turned into clickable links in long text fields
43 * urls and emails are turned into clickable links in long text fields
43 * "due date" field added on issues
44 * "due date" field added on issues
44 * tracker selection filter added on change log
45 * tracker selection filter added on change log
45 * Localization plugin replaced with GLoc 1.1.0 (iconv required)
46 * Localization plugin replaced with GLoc 1.1.0 (iconv required)
46 * error messages internationalization
47 * error messages internationalization
47 * german translation added (thanks to Karim Trott)
48 * german translation added (thanks to Karim Trott)
48 * data locking for issues to prevent update conflicts (using ActiveRecord builtin optimistic locking)
49 * data locking for issues to prevent update conflicts (using ActiveRecord builtin optimistic locking)
49 * new filter in issues list: "Fixed version"
50 * new filter in issues list: "Fixed version"
50 * active filters are displayed with colored background on issues list
51 * active filters are displayed with colored background on issues list
51 * custom configuration is now defined in config/config_custom.rb
52 * custom configuration is now defined in config/config_custom.rb
52 * user object no more stored in session (only user_id)
53 * user object no more stored in session (only user_id)
53 * news summary field is no longer required
54 * news summary field is no longer required
54 * tables and forms redesign
55 * tables and forms redesign
55 * Fixed: boolean custom field not working
56 * Fixed: boolean custom field not working
56 * Fixed: error messages for custom fields are not displayed
57 * Fixed: error messages for custom fields are not displayed
57 * Fixed: invalid custom fields should have a red border
58 * Fixed: invalid custom fields should have a red border
58 * Fixed: custom fields values are not validated on issue update
59 * Fixed: custom fields values are not validated on issue update
59 * Fixed: unable to choose an empty value for 'List' custom fields
60 * Fixed: unable to choose an empty value for 'List' custom fields
60 * Fixed: no issue categories sorting
61 * Fixed: no issue categories sorting
61 * Fixed: incorrect versions sorting
62 * Fixed: incorrect versions sorting
62
63
63
64
64 == 07/12/2006 - v0.2.2
65 == 07/12/2006 - v0.2.2
65
66
66 * Fixed: bug in "issues list"
67 * Fixed: bug in "issues list"
67
68
68
69
69 == 07/09/2006 - v0.2.1
70 == 07/09/2006 - v0.2.1
70
71
71 * new databases supported: Oracle, PostgreSQL, SQL Server
72 * new databases supported: Oracle, PostgreSQL, SQL Server
72 * projects/subprojects hierarchy (1 level of subprojects only)
73 * projects/subprojects hierarchy (1 level of subprojects only)
73 * environment information display in admin/info
74 * environment information display in admin/info
74 * more filter options in issues list (rev6)
75 * more filter options in issues list (rev6)
75 * default language based on browser settings (Accept-Language HTTP header)
76 * default language based on browser settings (Accept-Language HTTP header)
76 * issues list exportable to CSV (rev6)
77 * issues list exportable to CSV (rev6)
77 * simple_format and auto_link on long text fields
78 * simple_format and auto_link on long text fields
78 * more data validations
79 * more data validations
79 * Fixed: error when all mail notifications are unchecked in admin/mail_options
80 * Fixed: error when all mail notifications are unchecked in admin/mail_options
80 * Fixed: all project news are displayed on project summary
81 * Fixed: all project news are displayed on project summary
81 * Fixed: Can't change user password in users/edit
82 * Fixed: Can't change user password in users/edit
82 * Fixed: Error on tables creation with PostgreSQL (rev5)
83 * Fixed: Error on tables creation with PostgreSQL (rev5)
83 * Fixed: SQL error in "issue reports" view with PostgreSQL (rev5)
84 * Fixed: SQL error in "issue reports" view with PostgreSQL (rev5)
84
85
85
86
86 == 06/25/2006 - v0.1.0
87 == 06/25/2006 - v0.1.0
87
88
88 * multiple users/multiple projects
89 * multiple users/multiple projects
89 * role based access control
90 * role based access control
90 * issue tracking system
91 * issue tracking system
91 * fully customizable workflow
92 * fully customizable workflow
92 * documents/files repository
93 * documents/files repository
93 * email notifications on issue creation and update
94 * email notifications on issue creation and update
94 * multilanguage support (except for error messages):english, french, spanish
95 * multilanguage support (except for error messages):english, french, spanish
95 * online manual in french (unfinished) No newline at end of file
96 * online manual in french (unfinished)
@@ -1,317 +1,319
1 _gloc_rule_default: '|n| n==1 ? "" : "_plural" '
1 _gloc_rule_default: '|n| n==1 ? "" : "_plural" '
2
2
3 actionview_datehelper_select_day_prefix:
3 actionview_datehelper_select_day_prefix:
4 actionview_datehelper_select_month_names: January,February,March,April,May,June,July,August,September,October,November,December
4 actionview_datehelper_select_month_names: January,February,March,April,May,June,July,August,September,October,November,December
5 actionview_datehelper_select_month_names_abbr: Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,Dec
5 actionview_datehelper_select_month_names_abbr: Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,Dec
6 actionview_datehelper_select_month_prefix:
6 actionview_datehelper_select_month_prefix:
7 actionview_datehelper_select_year_prefix:
7 actionview_datehelper_select_year_prefix:
8 actionview_datehelper_time_in_words_day: 1 day
8 actionview_datehelper_time_in_words_day: 1 day
9 actionview_datehelper_time_in_words_day_plural: %d days
9 actionview_datehelper_time_in_words_day_plural: %d days
10 actionview_datehelper_time_in_words_hour_about: about an hour
10 actionview_datehelper_time_in_words_hour_about: about an hour
11 actionview_datehelper_time_in_words_hour_about_plural: about %d hours
11 actionview_datehelper_time_in_words_hour_about_plural: about %d hours
12 actionview_datehelper_time_in_words_hour_about_single: about an hour
12 actionview_datehelper_time_in_words_hour_about_single: about an hour
13 actionview_datehelper_time_in_words_minute: 1 minute
13 actionview_datehelper_time_in_words_minute: 1 minute
14 actionview_datehelper_time_in_words_minute_half: half a minute
14 actionview_datehelper_time_in_words_minute_half: half a minute
15 actionview_datehelper_time_in_words_minute_less_than: less than a minute
15 actionview_datehelper_time_in_words_minute_less_than: less than a minute
16 actionview_datehelper_time_in_words_minute_plural: %d minutes
16 actionview_datehelper_time_in_words_minute_plural: %d minutes
17 actionview_datehelper_time_in_words_minute_single: 1 minute
17 actionview_datehelper_time_in_words_minute_single: 1 minute
18 actionview_datehelper_time_in_words_second_less_than: less than a second
18 actionview_datehelper_time_in_words_second_less_than: less than a second
19 actionview_datehelper_time_in_words_second_less_than_plural: less than %d seconds
19 actionview_datehelper_time_in_words_second_less_than_plural: less than %d seconds
20 actionview_instancetag_blank_option: Bitte auserwählt
20 actionview_instancetag_blank_option: Bitte auserwählt
21
21
22 activerecord_error_inclusion: ist nicht in der Liste eingeschlossen
22 activerecord_error_inclusion: ist nicht in der Liste eingeschlossen
23 activerecord_error_exclusion: ist reserviert
23 activerecord_error_exclusion: ist reserviert
24 activerecord_error_invalid: ist unzulässig
24 activerecord_error_invalid: ist unzulässig
25 activerecord_error_confirmation: bringt nicht Bestätigung zusammen
25 activerecord_error_confirmation: bringt nicht Bestätigung zusammen
26 activerecord_error_accepted: muß angenommen werden
26 activerecord_error_accepted: muß angenommen werden
27 activerecord_error_empty: kann nicht leer sein
27 activerecord_error_empty: kann nicht leer sein
28 activerecord_error_blank: kann nicht leer sein
28 activerecord_error_blank: kann nicht leer sein
29 activerecord_error_too_long: ist zu lang
29 activerecord_error_too_long: ist zu lang
30 activerecord_error_too_short: ist zu kurz
30 activerecord_error_too_short: ist zu kurz
31 activerecord_error_wrong_length: ist die falsche Länge
31 activerecord_error_wrong_length: ist die falsche Länge
32 activerecord_error_taken: ist bereits genommen worden
32 activerecord_error_taken: ist bereits genommen worden
33 activerecord_error_not_a_number: ist nicht eine Zahl
33 activerecord_error_not_a_number: ist nicht eine Zahl
34 activerecord_error_not_a_date: ist nicht ein gültiges Datum
34 activerecord_error_not_a_date: ist nicht ein gültiges Datum
35 activerecord_error_greater_than_start_date: muß als grösser sein beginnen Datum
35 activerecord_error_greater_than_start_date: muß als grösser sein beginnen Datum
36
36
37 general_fmt_age: %d yr
37 general_fmt_age: %d yr
38 general_fmt_age_plural: %d yrs
38 general_fmt_age_plural: %d yrs
39 general_fmt_date: %%b %%d, %%Y (%%a)
39 general_fmt_date: %%b %%d, %%Y (%%a)
40 general_fmt_datetime: %%b %%d, %%Y (%%a), %%I:%%M %%p
40 general_fmt_datetime: %%b %%d, %%Y (%%a), %%I:%%M %%p
41 general_fmt_datetime_short: %%b %%d, %%I:%%M %%p
41 general_fmt_datetime_short: %%b %%d, %%I:%%M %%p
42 general_fmt_time: %%I:%%M %%p
42 general_fmt_time: %%I:%%M %%p
43 general_text_No: 'Nein'
43 general_text_No: 'Nein'
44 general_text_Yes: 'Ja'
44 general_text_Yes: 'Ja'
45 general_text_no: 'nein'
45 general_text_no: 'nein'
46 general_text_yes: 'ja'
46 general_text_yes: 'ja'
47 general_lang_de: 'Deutsch'
47 general_lang_de: 'Deutsch'
48 general_csv_separator: ';'
48 general_csv_separator: ';'
49 general_day_names: Montag,Dienstag,Mittwoch,Donnerstag,Freitag,Samstag,Sonntag
49 general_day_names: Montag,Dienstag,Mittwoch,Donnerstag,Freitag,Samstag,Sonntag
50
50
51 notice_account_updated: Konto wurde erfolgreich aktualisiert.
51 notice_account_updated: Konto wurde erfolgreich aktualisiert.
52 notice_account_invalid_creditentials: Unzulässiger Benutzer oder Passwort
52 notice_account_invalid_creditentials: Unzulässiger Benutzer oder Passwort
53 notice_account_password_updated: Passwort wurde erfolgreich aktualisiert.
53 notice_account_password_updated: Passwort wurde erfolgreich aktualisiert.
54 notice_account_wrong_password: Falsches Passwort
54 notice_account_wrong_password: Falsches Passwort
55 notice_account_register_done: Konto wurde erfolgreich verursacht.
55 notice_account_register_done: Konto wurde erfolgreich verursacht.
56 notice_account_unknown_email: Unbekannter Benutzer.
56 notice_account_unknown_email: Unbekannter Benutzer.
57 notice_can_t_change_password: Dieses Konto verwendet eine externe Authentisierung Quelle. Unmöglich, das Kennwort zu ändern.
57 notice_can_t_change_password: Dieses Konto verwendet eine externe Authentisierung Quelle. Unmöglich, das Kennwort zu ändern.
58 notice_account_lost_email_sent: Ein email mit Anweisungen, ein neues Kennwort zu wählen ist dir geschickt worden.
58 notice_account_lost_email_sent: Ein email mit Anweisungen, ein neues Kennwort zu wählen ist dir geschickt worden.
59 notice_account_activated: Dein Konto ist aktiviert worden. Du kannst jetzt einloggen.
59 notice_account_activated: Dein Konto ist aktiviert worden. Du kannst jetzt einloggen.
60 notice_successful_create: Erfolgreiche Kreation.
60 notice_successful_create: Erfolgreiche Kreation.
61 notice_successful_update: Erfolgreiches Update.
61 notice_successful_update: Erfolgreiches Update.
62 notice_successful_delete: Erfolgreiche Auslassung.
62 notice_successful_delete: Erfolgreiche Auslassung.
63 notice_successful_connection: Erfolgreicher Anschluß.
63 notice_successful_connection: Erfolgreicher Anschluß.
64 notice_file_not_found: Erbetene Akte besteht nicht oder ist gelöscht worden.
64 notice_file_not_found: Erbetene Akte besteht nicht oder ist gelöscht worden.
65 notice_locking_conflict: Data have been updated by another user.
65 notice_locking_conflict: Data have been updated by another user.
66
66
67 mail_subject_lost_password: Dein redMine Kennwort
67 mail_subject_lost_password: Dein redMine Kennwort
68 mail_subject_register: redMine Kontoaktivierung
68 mail_subject_register: redMine Kontoaktivierung
69
69
70 gui_validation_error: 1 Störung
70 gui_validation_error: 1 Störung
71 gui_validation_error_plural: %d Störungen
71 gui_validation_error_plural: %d Störungen
72
72
73 field_name: Name
73 field_name: Name
74 field_description: Beschreibung
74 field_description: Beschreibung
75 field_summary: Zusammenfassung
75 field_summary: Zusammenfassung
76 field_is_required: Erforderlich
76 field_is_required: Erforderlich
77 field_firstname: Vorname
77 field_firstname: Vorname
78 field_lastname: Nachname
78 field_lastname: Nachname
79 field_mail: Email
79 field_mail: Email
80 field_filename: Datei
80 field_filename: Datei
81 field_filesize: Grootte
81 field_filesize: Grootte
82 field_downloads: Downloads
82 field_downloads: Downloads
83 field_author: Autor
83 field_author: Autor
84 field_created_on: Angelegt
84 field_created_on: Angelegt
85 field_updated_on: aktualisiert
85 field_updated_on: aktualisiert
86 field_field_format: Format
86 field_field_format: Format
87 field_is_for_all: Für alle Projekte
87 field_is_for_all: Für alle Projekte
88 field_possible_values: Mögliche Werte
88 field_possible_values: Mögliche Werte
89 field_regexp: Regulärer Ausdruck
89 field_regexp: Regulärer Ausdruck
90 field_min_length: Minimale Länge
90 field_min_length: Minimale Länge
91 field_max_length: Maximale Länge
91 field_max_length: Maximale Länge
92 field_value: Wert
92 field_value: Wert
93 field_category: Kategorie
93 field_category: Kategorie
94 field_title: Títel
94 field_title: Títel
95 field_project: Projekt
95 field_project: Projekt
96 field_issue: Antrag
96 field_issue: Antrag
97 field_status: Status
97 field_status: Status
98 field_notes: Anmerkungen
98 field_notes: Anmerkungen
99 field_is_closed: Problem erledigt
99 field_is_closed: Problem erledigt
100 field_is_default: Rückstellung status
100 field_is_default: Rückstellung status
101 field_html_color: Farbe
101 field_html_color: Farbe
102 field_tracker: Tracker
102 field_tracker: Tracker
103 field_subject: Thema
103 field_subject: Thema
104 field_due_date: Abgabedatum
104 field_due_date: Abgabedatum
105 field_assigned_to: Zugewiesen an
105 field_assigned_to: Zugewiesen an
106 field_priority: Priorität
106 field_priority: Priorität
107 field_fixed_version: Erledigt in Version
107 field_fixed_version: Erledigt in Version
108 field_user: Benutzer
108 field_user: Benutzer
109 field_role: Rolle
109 field_role: Rolle
110 field_homepage: Startseite
110 field_homepage: Startseite
111 field_is_public: Öffentlich
111 field_is_public: Öffentlich
112 field_parent: Subprojekt von
112 field_parent: Subprojekt von
113 field_is_in_chlog: Ansicht der Issues in der Historie
113 field_is_in_chlog: Ansicht der Issues in der Historie
114 field_login: Mitgliedsname
114 field_login: Mitgliedsname
115 field_mail_notification: Mailbenachrichtigung
115 field_mail_notification: Mailbenachrichtigung
116 field_admin: Administrator
116 field_admin: Administrator
117 field_locked: Gesperrt
117 field_locked: Gesperrt
118 field_last_login_on: Letzte Anmeldung
118 field_last_login_on: Letzte Anmeldung
119 field_language: Sprache
119 field_language: Sprache
120 field_effective_date: Datum
120 field_effective_date: Datum
121 field_password: Passwort
121 field_password: Passwort
122 field_new_password: Neues Passwort
122 field_new_password: Neues Passwort
123 field_password_confirmation: Bestätigung
123 field_password_confirmation: Bestätigung
124 field_version: Version
124 field_version: Version
125 field_type: Typ
125 field_type: Typ
126 field_host: Host
126 field_host: Host
127 field_port: Port
127 field_port: Port
128 field_account: Konto
128 field_account: Konto
129 field_base_dn: Base DN
129 field_base_dn: Base DN
130 field_attr_login: Mitgliedsnameattribut
130 field_attr_login: Mitgliedsnameattribut
131 field_attr_firstname: Vornamensattribut
131 field_attr_firstname: Vornamensattribut
132 field_attr_lastname: Namenattribut
132 field_attr_lastname: Namenattribut
133 field_attr_mail: Emailattribut
133 field_attr_mail: Emailattribut
134 field_onthefly: On-the-fly Benutzerkreation
134 field_onthefly: On-the-fly Benutzerkreation
135 field_start_date: Beginn
135 field_start_date: Beginn
136 field_done_ratio: %% Getan
136 field_done_ratio: %% Getan
137
137
138 label_user: Benutzer
138 label_user: Benutzer
139 label_user_plural: Benutzer
139 label_user_plural: Benutzer
140 label_user_new: Neuer Benutzer
140 label_user_new: Neuer Benutzer
141 label_project: Projekt
141 label_project: Projekt
142 label_project_new: Neues Projekt
142 label_project_new: Neues Projekt
143 label_project_plural: Projekte
143 label_project_plural: Projekte
144 label_project_latest: Neueste Projekte
144 label_project_latest: Neueste Projekte
145 label_issue: Antrag
145 label_issue: Antrag
146 label_issue_new: Neue Antrag
146 label_issue_new: Neue Antrag
147 label_issue_plural: Anträge
147 label_issue_plural: Anträge
148 label_issue_view_all: Alle Anträge ansehen
148 label_issue_view_all: Alle Anträge ansehen
149 label_document: Dokument
149 label_document: Dokument
150 label_document_new: Neues Dokument
150 label_document_new: Neues Dokument
151 label_document_plural: Dokumente
151 label_document_plural: Dokumente
152 label_role: Rolle
152 label_role: Rolle
153 label_role_plural: Rollen
153 label_role_plural: Rollen
154 label_role_new: Neue Rolle
154 label_role_new: Neue Rolle
155 label_role_and_permissions: Rollen und Rechte
155 label_role_and_permissions: Rollen und Rechte
156 label_member: Mitglied
156 label_member: Mitglied
157 label_member_new: Neues Mitglied
157 label_member_new: Neues Mitglied
158 label_member_plural: Mitglieder
158 label_member_plural: Mitglieder
159 label_tracker: Tracker
159 label_tracker: Tracker
160 label_tracker_plural: Tracker
160 label_tracker_plural: Tracker
161 label_tracker_new: Neuer Tracker
161 label_tracker_new: Neuer Tracker
162 label_workflow: Workflow
162 label_workflow: Workflow
163 label_issue_status: Antrag Status
163 label_issue_status: Antrag Status
164 label_issue_status_plural: Antrag Stati
164 label_issue_status_plural: Antrag Stati
165 label_issue_status_new: Neuer Status
165 label_issue_status_new: Neuer Status
166 label_issue_category: Antrag Kategorie
166 label_issue_category: Antrag Kategorie
167 label_issue_category_plural: Antrag Kategorien
167 label_issue_category_plural: Antrag Kategorien
168 label_issue_category_new: Neue Kategorie
168 label_issue_category_new: Neue Kategorie
169 label_custom_field: Benutzerdefiniertes Feld
169 label_custom_field: Benutzerdefiniertes Feld
170 label_custom_field_plural: Benutzerdefinierte Felder
170 label_custom_field_plural: Benutzerdefinierte Felder
171 label_custom_field_new: Neues Feld
171 label_custom_field_new: Neues Feld
172 label_enumerations: Enumerationen
172 label_enumerations: Enumerationen
173 label_enumeration_new: Neuer Wert
173 label_enumeration_new: Neuer Wert
174 label_information: Information
174 label_information: Information
175 label_information_plural: Informationen
175 label_information_plural: Informationen
176 label_please_login: Anmelden
176 label_please_login: Anmelden
177 label_register: Anmelden
177 label_register: Anmelden
178 label_password_lost: Passwort vergessen
178 label_password_lost: Passwort vergessen
179 label_home: Hauptseite
179 label_home: Hauptseite
180 label_my_page: Meine Seite
180 label_my_page: Meine Seite
181 label_my_account: Mein Konto
181 label_my_account: Mein Konto
182 label_my_projects: Meine Projekte
182 label_my_projects: Meine Projekte
183 label_administration: Administration
183 label_administration: Administration
184 label_login: Einloggen
184 label_login: Einloggen
185 label_logout: Abmelden
185 label_logout: Abmelden
186 label_help: Hilfe
186 label_help: Hilfe
187 label_reported_issues: Gemeldete Issues
187 label_reported_issues: Gemeldete Issues
188 label_assigned_to_me_issues: Mir zugewiesen
188 label_assigned_to_me_issues: Mir zugewiesen
189 label_last_login: Letzte Anmeldung
189 label_last_login: Letzte Anmeldung
190 label_last_updates: Letztes aktualisiertes
190 label_last_updates: Letztes aktualisiertes
191 label_last_updates_plural: %d Letztes aktualisiertes
191 label_last_updates_plural: %d Letztes aktualisiertes
192 label_registered_on: Angemeldet am
192 label_registered_on: Angemeldet am
193 label_activity: Aktivität
193 label_activity: Aktivität
194 label_new: Neue
194 label_new: Neue
195 label_logged_as: Angemeldet als
195 label_logged_as: Angemeldet als
196 label_environment: Environment
196 label_environment: Environment
197 label_authentication: Authentisierung
197 label_authentication: Authentisierung
198 label_auth_source: Authentisierung Modus
198 label_auth_source: Authentisierung Modus
199 label_auth_source_new: Neuer Authentisierung Modus
199 label_auth_source_new: Neuer Authentisierung Modus
200 label_auth_source_plural: Authentisierung Modi
200 label_auth_source_plural: Authentisierung Modi
201 label_subproject: Vorprojekt von
201 label_subproject: Vorprojekt von
202 label_subproject_plural: Vorprojekte
202 label_subproject_plural: Vorprojekte
203 label_min_max_length: Min - Max Länge
203 label_min_max_length: Min - Max Länge
204 label_list: Liste
204 label_list: Liste
205 label_date: Date
205 label_date: Date
206 label_integer: Zahl
206 label_integer: Zahl
207 label_boolean: Boolesch
207 label_boolean: Boolesch
208 label_string: Text
208 label_string: Text
209 label_text: Langer Text
209 label_text: Langer Text
210 label_attribute: Attribut
210 label_attribute: Attribut
211 label_attribute_plural: Attribute
211 label_attribute_plural: Attribute
212 label_download: %d Herunterlade
212 label_download: %d Herunterlade
213 label_download_plural: %d Herunterlade
213 label_download_plural: %d Herunterlade
214 label_no_data: Nichts anzuzeigen
214 label_no_data: Nichts anzuzeigen
215 label_change_status: Statuswechsel
215 label_change_status: Statuswechsel
216 label_history: Historie
216 label_history: Historie
217 label_attachment: Datei
217 label_attachment: Datei
218 label_attachment_new: Neue Datei
218 label_attachment_new: Neue Datei
219 label_attachment_delete: Löschungakten
219 label_attachment_delete: Löschungakten
220 label_attachment_plural: Dateien
220 label_attachment_plural: Dateien
221 label_report: Bericht
221 label_report: Bericht
222 label_report_plural: Berichte
222 label_report_plural: Berichte
223 label_news: Neuigkeit
223 label_news: Neuigkeit
224 label_news_new: Neuigkeite addieren
224 label_news_new: Neuigkeite addieren
225 label_news_plural: Neuigkeiten
225 label_news_plural: Neuigkeiten
226 label_news_latest: Letzte Neuigkeiten
226 label_news_latest: Letzte Neuigkeiten
227 label_news_view_all: Alle Neuigkeiten anzeigen
227 label_news_view_all: Alle Neuigkeiten anzeigen
228 label_change_log: Change log
228 label_change_log: Change log
229 label_settings: Konfiguration
229 label_settings: Konfiguration
230 label_overview: Übersicht
230 label_overview: Übersicht
231 label_version: Version
231 label_version: Version
232 label_version_new: Neue Version
232 label_version_new: Neue Version
233 label_version_plural: Versionen
233 label_version_plural: Versionen
234 label_confirmation: Bestätigung
234 label_confirmation: Bestätigung
235 label_export_to: Export zu
235 label_export_to: Export zu
236 label_read: Lesen...
236 label_read: Lesen...
237 label_public_projects: Öffentliche Projekte
237 label_public_projects: Öffentliche Projekte
238 label_open_issues: Geöffnet
238 label_open_issues: Geöffnet
239 label_open_issues_plural: Geöffnet
239 label_open_issues_plural: Geöffnet
240 label_closed_issues: Geschlossen
240 label_closed_issues: Geschlossen
241 label_closed_issues_plural: Geschlossen
241 label_closed_issues_plural: Geschlossen
242 label_total: Gesamtzahl
242 label_total: Gesamtzahl
243 label_permissions: Berechtigungen
243 label_permissions: Berechtigungen
244 label_current_status: Gegenwärtiger Status
244 label_current_status: Gegenwärtiger Status
245 label_new_statuses_allowed: Neue Status gewährten
245 label_new_statuses_allowed: Neue Status gewährten
246 label_all: Alle
246 label_all: Alle
247 label_none: Kein
247 label_none: Kein
248 label_next: Weiter
248 label_next: Weiter
249 label_previous: Zurück
249 label_previous: Zurück
250 label_used_by: Benutzt von
250 label_used_by: Benutzt von
251 label_details: Details...
251 label_details: Details...
252 label_add_note: Eine Anmerkung addieren
252 label_add_note: Eine Anmerkung addieren
253 label_per_page: Pro Seite
253 label_per_page: Pro Seite
254 label_calendar: Kalender
254 label_calendar: Kalender
255 label_months_from: Monate von
255 label_months_from: Monate von
256 label_gantt_chart: Gantt Diagramm
256 label_gantt_chart: Gantt Diagramm
257 label_internal: Intern
257 label_internal: Intern
258 label_last_changes: %d änderungen des Letzten
258 label_last_changes: %d änderungen des Letzten
259 label_change_view_all: Alle änderungen ansehen
259 label_change_view_all: Alle änderungen ansehen
260 label_personalize_page: Diese Seite personifizieren
260
261
261 button_login: Einloggen
262 button_login: Einloggen
262 button_submit: Einreichen
263 button_submit: Einreichen
263 button_save: Speichern
264 button_save: Speichern
264 button_check_all: Alles auswählen
265 button_check_all: Alles auswählen
265 button_uncheck_all: Alles abwählen
266 button_uncheck_all: Alles abwählen
266 button_delete: Löschen
267 button_delete: Löschen
267 button_create: Anlegen
268 button_create: Anlegen
268 button_test: Testen
269 button_test: Testen
269 button_edit: Bearbeiten
270 button_edit: Bearbeiten
270 button_add: Hinzufügen
271 button_add: Hinzufügen
271 button_change: Wechseln
272 button_change: Wechseln
272 button_apply: Anwenden
273 button_apply: Anwenden
273 button_clear: Zurücksetzen
274 button_clear: Zurücksetzen
274 button_lock: Verriegeln
275 button_lock: Verriegeln
275 button_unlock: Entriegeln
276 button_unlock: Entriegeln
276 button_download: Fernzuladen
277 button_download: Fernzuladen
277 button_list: Aufzulisten
278 button_list: Aufzulisten
278 button_view: Siehe
279 button_view: Siehe
279 button_move: Bewegen
280 button_move: Bewegen
280 button_back: Rückkehr
281 button_back: Rückkehr
282 button_cancel: Annullieren
281
283
282 text_select_mail_notifications: Aktionen für die Mailbenachrichtigung aktiviert werden soll.
284 text_select_mail_notifications: Aktionen für die Mailbenachrichtigung aktiviert werden soll.
283 text_regexp_info: eg. ^[A-Z0-9]+$
285 text_regexp_info: eg. ^[A-Z0-9]+$
284 text_min_max_length_info: 0 heisst keine Beschränkung
286 text_min_max_length_info: 0 heisst keine Beschränkung
285 text_possible_values_info: Werte trennten sich mit |
287 text_possible_values_info: Werte trennten sich mit |
286 text_project_destroy_confirmation: Sind sie sicher, daß sie das Projekt löschen wollen ?
288 text_project_destroy_confirmation: Sind sie sicher, daß sie das Projekt löschen wollen ?
287 text_workflow_edit: Auswahl Workflow zum Bearbeiten
289 text_workflow_edit: Auswahl Workflow zum Bearbeiten
288 text_are_you_sure: Sind sie sicher ?
290 text_are_you_sure: Sind sie sicher ?
289 text_journal_changed: geändert von %s zu %s
291 text_journal_changed: geändert von %s zu %s
290 text_journal_set_to: gestellt zu %s
292 text_journal_set_to: gestellt zu %s
291 text_journal_deleted: gelöscht
293 text_journal_deleted: gelöscht
292 text_tip_task_begin_day: Aufgabe, die an diesem Tag beginnt
294 text_tip_task_begin_day: Aufgabe, die an diesem Tag beginnt
293 text_tip_task_end_day: Aufgabe, die an diesem Tag beendet
295 text_tip_task_end_day: Aufgabe, die an diesem Tag beendet
294 text_tip_task_begin_end_day: Aufgabe, die an diesem Tag beginnt und beendet
296 text_tip_task_begin_end_day: Aufgabe, die an diesem Tag beginnt und beendet
295
297
296 default_role_manager: Manager
298 default_role_manager: Manager
297 default_role_developper: Developer
299 default_role_developper: Developer
298 default_role_reporter: Reporter
300 default_role_reporter: Reporter
299 default_tracker_bug: Fehler
301 default_tracker_bug: Fehler
300 default_tracker_feature: Feature
302 default_tracker_feature: Feature
301 default_tracker_support: Support
303 default_tracker_support: Support
302 default_issue_status_new: Neu
304 default_issue_status_new: Neu
303 default_issue_status_assigned: Zugewiesen
305 default_issue_status_assigned: Zugewiesen
304 default_issue_status_resolved: Gelöst
306 default_issue_status_resolved: Gelöst
305 default_issue_status_feedback: Feedback
307 default_issue_status_feedback: Feedback
306 default_issue_status_closed: Erledigt
308 default_issue_status_closed: Erledigt
307 default_issue_status_rejected: Abgewiesen
309 default_issue_status_rejected: Abgewiesen
308 default_doc_category_user: Benutzerdokumentation
310 default_doc_category_user: Benutzerdokumentation
309 default_doc_category_tech: Technische Dokumentation
311 default_doc_category_tech: Technische Dokumentation
310 default_priority_low: Niedrig
312 default_priority_low: Niedrig
311 default_priority_normal: Normal
313 default_priority_normal: Normal
312 default_priority_high: Hoch
314 default_priority_high: Hoch
313 default_priority_urgent: Dringend
315 default_priority_urgent: Dringend
314 default_priority_immediate: Sofort
316 default_priority_immediate: Sofort
315
317
316 enumeration_issue_priorities: Issue-Prioritäten
318 enumeration_issue_priorities: Issue-Prioritäten
317 enumeration_doc_categories: Dokumentenkategorien
319 enumeration_doc_categories: Dokumentenkategorien
@@ -1,317 +1,319
1 _gloc_rule_default: '|n| n==1 ? "" : "_plural" '
1 _gloc_rule_default: '|n| n==1 ? "" : "_plural" '
2
2
3 actionview_datehelper_select_day_prefix:
3 actionview_datehelper_select_day_prefix:
4 actionview_datehelper_select_month_names: January,February,March,April,May,June,July,August,September,October,November,December
4 actionview_datehelper_select_month_names: January,February,March,April,May,June,July,August,September,October,November,December
5 actionview_datehelper_select_month_names_abbr: Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,Dec
5 actionview_datehelper_select_month_names_abbr: Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,Dec
6 actionview_datehelper_select_month_prefix:
6 actionview_datehelper_select_month_prefix:
7 actionview_datehelper_select_year_prefix:
7 actionview_datehelper_select_year_prefix:
8 actionview_datehelper_time_in_words_day: 1 day
8 actionview_datehelper_time_in_words_day: 1 day
9 actionview_datehelper_time_in_words_day_plural: %d days
9 actionview_datehelper_time_in_words_day_plural: %d days
10 actionview_datehelper_time_in_words_hour_about: about an hour
10 actionview_datehelper_time_in_words_hour_about: about an hour
11 actionview_datehelper_time_in_words_hour_about_plural: about %d hours
11 actionview_datehelper_time_in_words_hour_about_plural: about %d hours
12 actionview_datehelper_time_in_words_hour_about_single: about an hour
12 actionview_datehelper_time_in_words_hour_about_single: about an hour
13 actionview_datehelper_time_in_words_minute: 1 minute
13 actionview_datehelper_time_in_words_minute: 1 minute
14 actionview_datehelper_time_in_words_minute_half: half a minute
14 actionview_datehelper_time_in_words_minute_half: half a minute
15 actionview_datehelper_time_in_words_minute_less_than: less than a minute
15 actionview_datehelper_time_in_words_minute_less_than: less than a minute
16 actionview_datehelper_time_in_words_minute_plural: %d minutes
16 actionview_datehelper_time_in_words_minute_plural: %d minutes
17 actionview_datehelper_time_in_words_minute_single: 1 minute
17 actionview_datehelper_time_in_words_minute_single: 1 minute
18 actionview_datehelper_time_in_words_second_less_than: less than a second
18 actionview_datehelper_time_in_words_second_less_than: less than a second
19 actionview_datehelper_time_in_words_second_less_than_plural: less than %d seconds
19 actionview_datehelper_time_in_words_second_less_than_plural: less than %d seconds
20 actionview_instancetag_blank_option: Please select
20 actionview_instancetag_blank_option: Please select
21
21
22 activerecord_error_inclusion: is not included in the list
22 activerecord_error_inclusion: is not included in the list
23 activerecord_error_exclusion: is reserved
23 activerecord_error_exclusion: is reserved
24 activerecord_error_invalid: is invalid
24 activerecord_error_invalid: is invalid
25 activerecord_error_confirmation: doesn't match confirmation
25 activerecord_error_confirmation: doesn't match confirmation
26 activerecord_error_accepted: must be accepted
26 activerecord_error_accepted: must be accepted
27 activerecord_error_empty: can't be empty
27 activerecord_error_empty: can't be empty
28 activerecord_error_blank: can't be blank
28 activerecord_error_blank: can't be blank
29 activerecord_error_too_long: is too long
29 activerecord_error_too_long: is too long
30 activerecord_error_too_short: is too short
30 activerecord_error_too_short: is too short
31 activerecord_error_wrong_length: is the wrong length
31 activerecord_error_wrong_length: is the wrong length
32 activerecord_error_taken: has already been taken
32 activerecord_error_taken: has already been taken
33 activerecord_error_not_a_number: is not a number
33 activerecord_error_not_a_number: is not a number
34 activerecord_error_not_a_date: is not a valid date
34 activerecord_error_not_a_date: is not a valid date
35 activerecord_error_greater_than_start_date: must be greater than start date
35 activerecord_error_greater_than_start_date: must be greater than start date
36
36
37 general_fmt_age: %d yr
37 general_fmt_age: %d yr
38 general_fmt_age_plural: %d yrs
38 general_fmt_age_plural: %d yrs
39 general_fmt_date: %%m/%%d/%%Y
39 general_fmt_date: %%m/%%d/%%Y
40 general_fmt_datetime: %%m/%%d/%%Y %%I:%%M %%p
40 general_fmt_datetime: %%m/%%d/%%Y %%I:%%M %%p
41 general_fmt_datetime_short: %%b %%d, %%I:%%M %%p
41 general_fmt_datetime_short: %%b %%d, %%I:%%M %%p
42 general_fmt_time: %%I:%%M %%p
42 general_fmt_time: %%I:%%M %%p
43 general_text_No: 'No'
43 general_text_No: 'No'
44 general_text_Yes: 'Yes'
44 general_text_Yes: 'Yes'
45 general_text_no: 'no'
45 general_text_no: 'no'
46 general_text_yes: 'yes'
46 general_text_yes: 'yes'
47 general_lang_en: 'English'
47 general_lang_en: 'English'
48 general_csv_separator: ','
48 general_csv_separator: ','
49 general_day_names: Monday,Tuesday,Wednesday,Thursday,Friday,Saturday,Sunday
49 general_day_names: Monday,Tuesday,Wednesday,Thursday,Friday,Saturday,Sunday
50
50
51 notice_account_updated: Account was successfully updated.
51 notice_account_updated: Account was successfully updated.
52 notice_account_invalid_creditentials: Invalid user or password
52 notice_account_invalid_creditentials: Invalid user or password
53 notice_account_password_updated: Password was successfully updated.
53 notice_account_password_updated: Password was successfully updated.
54 notice_account_wrong_password: Wrong password
54 notice_account_wrong_password: Wrong password
55 notice_account_register_done: Account was successfully created.
55 notice_account_register_done: Account was successfully created.
56 notice_account_unknown_email: Unknown user.
56 notice_account_unknown_email: Unknown user.
57 notice_can_t_change_password: This account uses an external authentication source. Impossible to change the password.
57 notice_can_t_change_password: This account uses an external authentication source. Impossible to change the password.
58 notice_account_lost_email_sent: An email with instructions to choose a new password has been sent to you.
58 notice_account_lost_email_sent: An email with instructions to choose a new password has been sent to you.
59 notice_account_activated: Your account has been activated. You can now log in.
59 notice_account_activated: Your account has been activated. You can now log in.
60 notice_successful_create: Successful creation.
60 notice_successful_create: Successful creation.
61 notice_successful_update: Successful update.
61 notice_successful_update: Successful update.
62 notice_successful_delete: Successful deletion.
62 notice_successful_delete: Successful deletion.
63 notice_successful_connection: Successful connection.
63 notice_successful_connection: Successful connection.
64 notice_file_not_found: Requested file doesn't exist or has been deleted.
64 notice_file_not_found: Requested file doesn't exist or has been deleted.
65 notice_locking_conflict: Data have been updated by another user.
65 notice_locking_conflict: Data have been updated by another user.
66
66
67 mail_subject_lost_password: Your redMine password
67 mail_subject_lost_password: Your redMine password
68 mail_subject_register: redMine account activation
68 mail_subject_register: redMine account activation
69
69
70 gui_validation_error: 1 error
70 gui_validation_error: 1 error
71 gui_validation_error_plural: %d errors
71 gui_validation_error_plural: %d errors
72
72
73 field_name: Name
73 field_name: Name
74 field_description: Description
74 field_description: Description
75 field_summary: Summary
75 field_summary: Summary
76 field_is_required: Required
76 field_is_required: Required
77 field_firstname: Firstname
77 field_firstname: Firstname
78 field_lastname: Lastname
78 field_lastname: Lastname
79 field_mail: Email
79 field_mail: Email
80 field_filename: File
80 field_filename: File
81 field_filesize: Size
81 field_filesize: Size
82 field_downloads: Downloads
82 field_downloads: Downloads
83 field_author: Author
83 field_author: Author
84 field_created_on: Created
84 field_created_on: Created
85 field_updated_on: Updated
85 field_updated_on: Updated
86 field_field_format: Format
86 field_field_format: Format
87 field_is_for_all: For all projects
87 field_is_for_all: For all projects
88 field_possible_values: Possible values
88 field_possible_values: Possible values
89 field_regexp: Regular expression
89 field_regexp: Regular expression
90 field_min_length: Minimum length
90 field_min_length: Minimum length
91 field_max_length: Maximum length
91 field_max_length: Maximum length
92 field_value: Value
92 field_value: Value
93 field_category: Category
93 field_category: Category
94 field_title: Title
94 field_title: Title
95 field_project: Project
95 field_project: Project
96 field_issue: Issue
96 field_issue: Issue
97 field_status: Status
97 field_status: Status
98 field_notes: Notes
98 field_notes: Notes
99 field_is_closed: Issue closed
99 field_is_closed: Issue closed
100 field_is_default: Default status
100 field_is_default: Default status
101 field_html_color: Color
101 field_html_color: Color
102 field_tracker: Tracker
102 field_tracker: Tracker
103 field_subject: Subject
103 field_subject: Subject
104 field_due_date: Due date
104 field_due_date: Due date
105 field_assigned_to: Assigned to
105 field_assigned_to: Assigned to
106 field_priority: Priority
106 field_priority: Priority
107 field_fixed_version: Fixed version
107 field_fixed_version: Fixed version
108 field_user: User
108 field_user: User
109 field_role: Role
109 field_role: Role
110 field_homepage: Homepage
110 field_homepage: Homepage
111 field_is_public: Public
111 field_is_public: Public
112 field_parent: Subproject of
112 field_parent: Subproject of
113 field_is_in_chlog: Issues displayed in changelog
113 field_is_in_chlog: Issues displayed in changelog
114 field_login: Login
114 field_login: Login
115 field_mail_notification: Mail notifications
115 field_mail_notification: Mail notifications
116 field_admin: Administrator
116 field_admin: Administrator
117 field_locked: Locked
117 field_locked: Locked
118 field_last_login_on: Last connection
118 field_last_login_on: Last connection
119 field_language: Language
119 field_language: Language
120 field_effective_date: Date
120 field_effective_date: Date
121 field_password: Password
121 field_password: Password
122 field_new_password: New password
122 field_new_password: New password
123 field_password_confirmation: Confirmation
123 field_password_confirmation: Confirmation
124 field_version: Version
124 field_version: Version
125 field_type: Type
125 field_type: Type
126 field_host: Host
126 field_host: Host
127 field_port: Port
127 field_port: Port
128 field_account: Account
128 field_account: Account
129 field_base_dn: Base DN
129 field_base_dn: Base DN
130 field_attr_login: Login attribute
130 field_attr_login: Login attribute
131 field_attr_firstname: Firstname attribute
131 field_attr_firstname: Firstname attribute
132 field_attr_lastname: Lastname attribute
132 field_attr_lastname: Lastname attribute
133 field_attr_mail: Email attribute
133 field_attr_mail: Email attribute
134 field_onthefly: On-the-fly user creation
134 field_onthefly: On-the-fly user creation
135 field_start_date: Start
135 field_start_date: Start
136 field_done_ratio: %% Done
136 field_done_ratio: %% Done
137
137
138 label_user: User
138 label_user: User
139 label_user_plural: Users
139 label_user_plural: Users
140 label_user_new: New user
140 label_user_new: New user
141 label_project: Project
141 label_project: Project
142 label_project_new: New project
142 label_project_new: New project
143 label_project_plural: Projects
143 label_project_plural: Projects
144 label_project_latest: Latest projects
144 label_project_latest: Latest projects
145 label_issue: Issue
145 label_issue: Issue
146 label_issue_new: New issue
146 label_issue_new: New issue
147 label_issue_plural: Issues
147 label_issue_plural: Issues
148 label_issue_view_all: View all issues
148 label_issue_view_all: View all issues
149 label_document: Document
149 label_document: Document
150 label_document_new: New document
150 label_document_new: New document
151 label_document_plural: Documents
151 label_document_plural: Documents
152 label_role: Role
152 label_role: Role
153 label_role_plural: Roles
153 label_role_plural: Roles
154 label_role_new: New role
154 label_role_new: New role
155 label_role_and_permissions: Roles and permissions
155 label_role_and_permissions: Roles and permissions
156 label_member: Member
156 label_member: Member
157 label_member_new: New member
157 label_member_new: New member
158 label_member_plural: Members
158 label_member_plural: Members
159 label_tracker: Tracker
159 label_tracker: Tracker
160 label_tracker_plural: Trackers
160 label_tracker_plural: Trackers
161 label_tracker_new: New tracker
161 label_tracker_new: New tracker
162 label_workflow: Workflow
162 label_workflow: Workflow
163 label_issue_status: Issue status
163 label_issue_status: Issue status
164 label_issue_status_plural: Issue statuses
164 label_issue_status_plural: Issue statuses
165 label_issue_status_new: New status
165 label_issue_status_new: New status
166 label_issue_category: Issue category
166 label_issue_category: Issue category
167 label_issue_category_plural: Issue categories
167 label_issue_category_plural: Issue categories
168 label_issue_category_new: New category
168 label_issue_category_new: New category
169 label_custom_field: Custom field
169 label_custom_field: Custom field
170 label_custom_field_plural: Custom fields
170 label_custom_field_plural: Custom fields
171 label_custom_field_new: New custom field
171 label_custom_field_new: New custom field
172 label_enumerations: Enumerations
172 label_enumerations: Enumerations
173 label_enumeration_new: New value
173 label_enumeration_new: New value
174 label_information: Information
174 label_information: Information
175 label_information_plural: Information
175 label_information_plural: Information
176 label_please_login: Please login
176 label_please_login: Please login
177 label_register: Register
177 label_register: Register
178 label_password_lost: Lost password
178 label_password_lost: Lost password
179 label_home: Home
179 label_home: Home
180 label_my_page: My page
180 label_my_page: My page
181 label_my_account: My account
181 label_my_account: My account
182 label_my_projects: My projects
182 label_my_projects: My projects
183 label_administration: Administration
183 label_administration: Administration
184 label_login: Login
184 label_login: Login
185 label_logout: Logout
185 label_logout: Logout
186 label_help: Help
186 label_help: Help
187 label_reported_issues: Reported issues
187 label_reported_issues: Reported issues
188 label_assigned_to_me_issues: Issues assigned to me
188 label_assigned_to_me_issues: Issues assigned to me
189 label_last_login: Last connection
189 label_last_login: Last connection
190 label_last_updates: Last updated
190 label_last_updates: Last updated
191 label_last_updates_plural: %d last updated
191 label_last_updates_plural: %d last updated
192 label_registered_on: Registered on
192 label_registered_on: Registered on
193 label_activity: Activity
193 label_activity: Activity
194 label_new: New
194 label_new: New
195 label_logged_as: Logged as
195 label_logged_as: Logged as
196 label_environment: Environment
196 label_environment: Environment
197 label_authentication: Authentication
197 label_authentication: Authentication
198 label_auth_source: Authentication mode
198 label_auth_source: Authentication mode
199 label_auth_source_new: New authentication mode
199 label_auth_source_new: New authentication mode
200 label_auth_source_plural: Authentication modes
200 label_auth_source_plural: Authentication modes
201 label_subproject: Subproject
201 label_subproject: Subproject
202 label_subproject_plural: Subprojects
202 label_subproject_plural: Subprojects
203 label_min_max_length: Min - Max length
203 label_min_max_length: Min - Max length
204 label_list: List
204 label_list: List
205 label_date: Date
205 label_date: Date
206 label_integer: Integer
206 label_integer: Integer
207 label_boolean: Boolean
207 label_boolean: Boolean
208 label_string: Text
208 label_string: Text
209 label_text: Long text
209 label_text: Long text
210 label_attribute: Attribute
210 label_attribute: Attribute
211 label_attribute_plural: Attributes
211 label_attribute_plural: Attributes
212 label_download: %d Download
212 label_download: %d Download
213 label_download_plural: %d Downloads
213 label_download_plural: %d Downloads
214 label_no_data: No data to display
214 label_no_data: No data to display
215 label_change_status: Change status
215 label_change_status: Change status
216 label_history: History
216 label_history: History
217 label_attachment: File
217 label_attachment: File
218 label_attachment_new: New file
218 label_attachment_new: New file
219 label_attachment_delete: Delete file
219 label_attachment_delete: Delete file
220 label_attachment_plural: Files
220 label_attachment_plural: Files
221 label_report: Report
221 label_report: Report
222 label_report_plural: Reports
222 label_report_plural: Reports
223 label_news: News
223 label_news: News
224 label_news_new: Add news
224 label_news_new: Add news
225 label_news_plural: News
225 label_news_plural: News
226 label_news_latest: Latest news
226 label_news_latest: Latest news
227 label_news_view_all: View all news
227 label_news_view_all: View all news
228 label_change_log: Change log
228 label_change_log: Change log
229 label_settings: Settings
229 label_settings: Settings
230 label_overview: Overview
230 label_overview: Overview
231 label_version: Version
231 label_version: Version
232 label_version_new: New version
232 label_version_new: New version
233 label_version_plural: Versions
233 label_version_plural: Versions
234 label_confirmation: Confirmation
234 label_confirmation: Confirmation
235 label_export_to: Export to
235 label_export_to: Export to
236 label_read: Read...
236 label_read: Read...
237 label_public_projects: Public projects
237 label_public_projects: Public projects
238 label_open_issues: Open
238 label_open_issues: Open
239 label_open_issues_plural: Open
239 label_open_issues_plural: Open
240 label_closed_issues: Closed
240 label_closed_issues: Closed
241 label_closed_issues_plural: Closed
241 label_closed_issues_plural: Closed
242 label_total: Total
242 label_total: Total
243 label_permissions: Permissions
243 label_permissions: Permissions
244 label_current_status: Current status
244 label_current_status: Current status
245 label_new_statuses_allowed: New statuses allowed
245 label_new_statuses_allowed: New statuses allowed
246 label_all: All
246 label_all: All
247 label_none: None
247 label_none: None
248 label_next: Next
248 label_next: Next
249 label_previous: Previous
249 label_previous: Previous
250 label_used_by: Used by
250 label_used_by: Used by
251 label_details: Details...
251 label_details: Details...
252 label_add_note: Add a note
252 label_add_note: Add a note
253 label_per_page: Per page
253 label_per_page: Per page
254 label_calendar: Calendar
254 label_calendar: Calendar
255 label_months_from: months from
255 label_months_from: months from
256 label_gantt_chart: Gantt chart
256 label_gantt_chart: Gantt chart
257 label_internal: Internal
257 label_internal: Internal
258 label_last_changes: last %d changes
258 label_last_changes: last %d changes
259 label_change_view_all: View all changes
259 label_change_view_all: View all changes
260 label_personalize_page: Personalize this page
260
261
261 button_login: Login
262 button_login: Login
262 button_submit: Submit
263 button_submit: Submit
263 button_save: Save
264 button_save: Save
264 button_check_all: Check all
265 button_check_all: Check all
265 button_uncheck_all: Uncheck all
266 button_uncheck_all: Uncheck all
266 button_delete: Delete
267 button_delete: Delete
267 button_create: Create
268 button_create: Create
268 button_test: Test
269 button_test: Test
269 button_edit: Edit
270 button_edit: Edit
270 button_add: Add
271 button_add: Add
271 button_change: Change
272 button_change: Change
272 button_apply: Apply
273 button_apply: Apply
273 button_clear: Clear
274 button_clear: Clear
274 button_lock: Lock
275 button_lock: Lock
275 button_unlock: Unlock
276 button_unlock: Unlock
276 button_download: Download
277 button_download: Download
277 button_list: List
278 button_list: List
278 button_view: View
279 button_view: View
279 button_move: Move
280 button_move: Move
280 button_back: Back
281 button_back: Back
282 button_cancel: Cancel
281
283
282 text_select_mail_notifications: Select actions for which mail notifications should be sent.
284 text_select_mail_notifications: Select actions for which mail notifications should be sent.
283 text_regexp_info: eg. ^[A-Z0-9]+$
285 text_regexp_info: eg. ^[A-Z0-9]+$
284 text_min_max_length_info: 0 means no restriction
286 text_min_max_length_info: 0 means no restriction
285 text_possible_values_info: values separated with |
287 text_possible_values_info: values separated with |
286 text_project_destroy_confirmation: Are you sure you want to delete this project and all related data ?
288 text_project_destroy_confirmation: Are you sure you want to delete this project and all related data ?
287 text_workflow_edit: Select a role and a tracker to edit the workflow
289 text_workflow_edit: Select a role and a tracker to edit the workflow
288 text_are_you_sure: Are you sure ?
290 text_are_you_sure: Are you sure ?
289 text_journal_changed: changed from %s to %s
291 text_journal_changed: changed from %s to %s
290 text_journal_set_to: set to %s
292 text_journal_set_to: set to %s
291 text_journal_deleted: deleted
293 text_journal_deleted: deleted
292 text_tip_task_begin_day: task beginning this day
294 text_tip_task_begin_day: task beginning this day
293 text_tip_task_end_day: task ending this day
295 text_tip_task_end_day: task ending this day
294 text_tip_task_begin_end_day: task beginning and ending this day
296 text_tip_task_begin_end_day: task beginning and ending this day
295
297
296 default_role_manager: Manager
298 default_role_manager: Manager
297 default_role_developper: Developer
299 default_role_developper: Developer
298 default_role_reporter: Reporter
300 default_role_reporter: Reporter
299 default_tracker_bug: Bug
301 default_tracker_bug: Bug
300 default_tracker_feature: Feature
302 default_tracker_feature: Feature
301 default_tracker_support: Support
303 default_tracker_support: Support
302 default_issue_status_new: New
304 default_issue_status_new: New
303 default_issue_status_assigned: Assigned
305 default_issue_status_assigned: Assigned
304 default_issue_status_resolved: Resolved
306 default_issue_status_resolved: Resolved
305 default_issue_status_feedback: Feedback
307 default_issue_status_feedback: Feedback
306 default_issue_status_closed: Closed
308 default_issue_status_closed: Closed
307 default_issue_status_rejected: Rejected
309 default_issue_status_rejected: Rejected
308 default_doc_category_user: User documentation
310 default_doc_category_user: User documentation
309 default_doc_category_tech: Technical documentation
311 default_doc_category_tech: Technical documentation
310 default_priority_low: Low
312 default_priority_low: Low
311 default_priority_normal: Normal
313 default_priority_normal: Normal
312 default_priority_high: High
314 default_priority_high: High
313 default_priority_urgent: Urgent
315 default_priority_urgent: Urgent
314 default_priority_immediate: Immediate
316 default_priority_immediate: Immediate
315
317
316 enumeration_issue_priorities: Issue priorities
318 enumeration_issue_priorities: Issue priorities
317 enumeration_doc_categories: Document categories
319 enumeration_doc_categories: Document categories
@@ -1,317 +1,319
1 _gloc_rule_default: '|n| n==1 ? "" : "_plural" '
1 _gloc_rule_default: '|n| n==1 ? "" : "_plural" '
2
2
3 actionview_datehelper_select_day_prefix:
3 actionview_datehelper_select_day_prefix:
4 actionview_datehelper_select_month_names: Enero,Febrero,Marzo,Abril,Mayo,Junio,Julio,Agosto,Septiembre,Octubre,Noviembre,Diciembre
4 actionview_datehelper_select_month_names: Enero,Febrero,Marzo,Abril,Mayo,Junio,Julio,Agosto,Septiembre,Octubre,Noviembre,Diciembre
5 actionview_datehelper_select_month_names_abbr: Ene,Feb,Mar,Abr,Mayo,Jun,Jul,Ago,Sep,Oct,Nov,Dic
5 actionview_datehelper_select_month_names_abbr: Ene,Feb,Mar,Abr,Mayo,Jun,Jul,Ago,Sep,Oct,Nov,Dic
6 actionview_datehelper_select_month_prefix:
6 actionview_datehelper_select_month_prefix:
7 actionview_datehelper_select_year_prefix:
7 actionview_datehelper_select_year_prefix:
8 actionview_datehelper_time_in_words_day: 1 day
8 actionview_datehelper_time_in_words_day: 1 day
9 actionview_datehelper_time_in_words_day_plural: %d days
9 actionview_datehelper_time_in_words_day_plural: %d days
10 actionview_datehelper_time_in_words_hour_about: about an hour
10 actionview_datehelper_time_in_words_hour_about: about an hour
11 actionview_datehelper_time_in_words_hour_about_plural: about %d hours
11 actionview_datehelper_time_in_words_hour_about_plural: about %d hours
12 actionview_datehelper_time_in_words_hour_about_single: about an hour
12 actionview_datehelper_time_in_words_hour_about_single: about an hour
13 actionview_datehelper_time_in_words_minute: 1 minute
13 actionview_datehelper_time_in_words_minute: 1 minute
14 actionview_datehelper_time_in_words_minute_half: half a minute
14 actionview_datehelper_time_in_words_minute_half: half a minute
15 actionview_datehelper_time_in_words_minute_less_than: less than a minute
15 actionview_datehelper_time_in_words_minute_less_than: less than a minute
16 actionview_datehelper_time_in_words_minute_plural: %d minutes
16 actionview_datehelper_time_in_words_minute_plural: %d minutes
17 actionview_datehelper_time_in_words_minute_single: 1 minute
17 actionview_datehelper_time_in_words_minute_single: 1 minute
18 actionview_datehelper_time_in_words_second_less_than: less than a second
18 actionview_datehelper_time_in_words_second_less_than: less than a second
19 actionview_datehelper_time_in_words_second_less_than_plural: less than %d seconds
19 actionview_datehelper_time_in_words_second_less_than_plural: less than %d seconds
20 actionview_instancetag_blank_option: Please select
20 actionview_instancetag_blank_option: Please select
21
21
22 activerecord_error_inclusion: is not included in the list
22 activerecord_error_inclusion: is not included in the list
23 activerecord_error_exclusion: is reserved
23 activerecord_error_exclusion: is reserved
24 activerecord_error_invalid: is invalid
24 activerecord_error_invalid: is invalid
25 activerecord_error_confirmation: doesn't match confirmation
25 activerecord_error_confirmation: doesn't match confirmation
26 activerecord_error_accepted: must be accepted
26 activerecord_error_accepted: must be accepted
27 activerecord_error_empty: can't be empty
27 activerecord_error_empty: can't be empty
28 activerecord_error_blank: can't be blank
28 activerecord_error_blank: can't be blank
29 activerecord_error_too_long: is too long
29 activerecord_error_too_long: is too long
30 activerecord_error_too_short: is too short
30 activerecord_error_too_short: is too short
31 activerecord_error_wrong_length: is the wrong length
31 activerecord_error_wrong_length: is the wrong length
32 activerecord_error_taken: has already been taken
32 activerecord_error_taken: has already been taken
33 activerecord_error_not_a_number: is not a number
33 activerecord_error_not_a_number: is not a number
34 activerecord_error_not_a_date: no es una fecha válida
34 activerecord_error_not_a_date: no es una fecha válida
35 activerecord_error_greater_than_start_date: debe ser la fecha mayor que del comienzo
35 activerecord_error_greater_than_start_date: debe ser la fecha mayor que del comienzo
36
36
37 general_fmt_age: %d año
37 general_fmt_age: %d año
38 general_fmt_age_plural: %d años
38 general_fmt_age_plural: %d años
39 general_fmt_date: %%d/%%m/%%Y
39 general_fmt_date: %%d/%%m/%%Y
40 general_fmt_datetime: %%d/%%m/%%Y %%H:%%M
40 general_fmt_datetime: %%d/%%m/%%Y %%H:%%M
41 general_fmt_datetime_short: %%d/%%m %%H:%%M
41 general_fmt_datetime_short: %%d/%%m %%H:%%M
42 general_fmt_time: %%H:%%M
42 general_fmt_time: %%H:%%M
43 general_text_No: 'No'
43 general_text_No: 'No'
44 general_text_Yes: 'Sí'
44 general_text_Yes: 'Sí'
45 general_text_no: 'no'
45 general_text_no: 'no'
46 general_text_yes: 'sí'
46 general_text_yes: 'sí'
47 general_lang_es: 'Español'
47 general_lang_es: 'Español'
48 general_csv_separator: ';'
48 general_csv_separator: ';'
49 general_day_names: Lunes,Martes,Miércoles,Jueves,Viernes,Sábado,Domingo
49 general_day_names: Lunes,Martes,Miércoles,Jueves,Viernes,Sábado,Domingo
50
50
51 notice_account_updated: Account was successfully updated.
51 notice_account_updated: Account was successfully updated.
52 notice_account_invalid_creditentials: Invalid user or password
52 notice_account_invalid_creditentials: Invalid user or password
53 notice_account_password_updated: Password was successfully updated.
53 notice_account_password_updated: Password was successfully updated.
54 notice_account_wrong_password: Wrong password
54 notice_account_wrong_password: Wrong password
55 notice_account_register_done: Account was successfully created.
55 notice_account_register_done: Account was successfully created.
56 notice_account_unknown_email: Unknown user.
56 notice_account_unknown_email: Unknown user.
57 notice_can_t_change_password: This account uses an external authentication source. Impossible to change the password.
57 notice_can_t_change_password: This account uses an external authentication source. Impossible to change the password.
58 notice_account_lost_email_sent: An email with instructions to choose a new password has been sent to you.
58 notice_account_lost_email_sent: An email with instructions to choose a new password has been sent to you.
59 notice_account_activated: Your account has been activated. You can now log in.
59 notice_account_activated: Your account has been activated. You can now log in.
60 notice_successful_create: Successful creation.
60 notice_successful_create: Successful creation.
61 notice_successful_update: Successful update.
61 notice_successful_update: Successful update.
62 notice_successful_delete: Successful deletion.
62 notice_successful_delete: Successful deletion.
63 notice_successful_connection: Successful connection.
63 notice_successful_connection: Successful connection.
64 notice_file_not_found: Requested file doesn't exist or has been deleted.
64 notice_file_not_found: Requested file doesn't exist or has been deleted.
65 notice_locking_conflict: Data have been updated by another user.
65 notice_locking_conflict: Data have been updated by another user.
66
66
67 mail_subject_lost_password: Tu contraseña del redMine
67 mail_subject_lost_password: Tu contraseña del redMine
68 mail_subject_register: Activación de la cuenta del redMine
68 mail_subject_register: Activación de la cuenta del redMine
69
69
70 gui_validation_error: 1 error
70 gui_validation_error: 1 error
71 gui_validation_error_plural: %d errores
71 gui_validation_error_plural: %d errores
72
72
73 field_name: Nombre
73 field_name: Nombre
74 field_description: Descripción
74 field_description: Descripción
75 field_summary: Resumen
75 field_summary: Resumen
76 field_is_required: Obligatorio
76 field_is_required: Obligatorio
77 field_firstname: Nombre
77 field_firstname: Nombre
78 field_lastname: Apellido
78 field_lastname: Apellido
79 field_mail: Email
79 field_mail: Email
80 field_filename: Fichero
80 field_filename: Fichero
81 field_filesize: Tamaño
81 field_filesize: Tamaño
82 field_downloads: Telecargas
82 field_downloads: Telecargas
83 field_author: Autor
83 field_author: Autor
84 field_created_on: Creado
84 field_created_on: Creado
85 field_updated_on: Actualizado
85 field_updated_on: Actualizado
86 field_field_format: Formato
86 field_field_format: Formato
87 field_is_for_all: Para todos los proyectos
87 field_is_for_all: Para todos los proyectos
88 field_possible_values: Valores posibles
88 field_possible_values: Valores posibles
89 field_regexp: Expresión regular
89 field_regexp: Expresión regular
90 field_min_length: Longitud mínima
90 field_min_length: Longitud mínima
91 field_max_length: Longitud máxima
91 field_max_length: Longitud máxima
92 field_value: Valor
92 field_value: Valor
93 field_category: Categoría
93 field_category: Categoría
94 field_title: Título
94 field_title: Título
95 field_project: Proyecto
95 field_project: Proyecto
96 field_issue: Petición
96 field_issue: Petición
97 field_status: Estatuto
97 field_status: Estatuto
98 field_notes: Notas
98 field_notes: Notas
99 field_is_closed: Petición resuelta
99 field_is_closed: Petición resuelta
100 field_is_default: Estatuto por defecto
100 field_is_default: Estatuto por defecto
101 field_html_color: Color
101 field_html_color: Color
102 field_tracker: Tracker
102 field_tracker: Tracker
103 field_subject: Tema
103 field_subject: Tema
104 field_due_date: Fecha debida
104 field_due_date: Fecha debida
105 field_assigned_to: Asignado a
105 field_assigned_to: Asignado a
106 field_priority: Prioridad
106 field_priority: Prioridad
107 field_fixed_version: Versión corregida
107 field_fixed_version: Versión corregida
108 field_user: Usuario
108 field_user: Usuario
109 field_role: Papel
109 field_role: Papel
110 field_homepage: Sitio web
110 field_homepage: Sitio web
111 field_is_public: Público
111 field_is_public: Público
112 field_parent: Proyecto secundario de
112 field_parent: Proyecto secundario de
113 field_is_in_chlog: Consultar las peticiones en el histórico
113 field_is_in_chlog: Consultar las peticiones en el histórico
114 field_login: Identificador
114 field_login: Identificador
115 field_mail_notification: Notificación por mail
115 field_mail_notification: Notificación por mail
116 field_admin: Administrador
116 field_admin: Administrador
117 field_locked: Cerrado
117 field_locked: Cerrado
118 field_last_login_on: Última conexión
118 field_last_login_on: Última conexión
119 field_language: Lengua
119 field_language: Lengua
120 field_effective_date: Fecha
120 field_effective_date: Fecha
121 field_password: Contraseña
121 field_password: Contraseña
122 field_new_password: Nueva contraseña
122 field_new_password: Nueva contraseña
123 field_password_confirmation: Confirmación
123 field_password_confirmation: Confirmación
124 field_version: Versión
124 field_version: Versión
125 field_type: Tipo
125 field_type: Tipo
126 field_host: Anfitrión
126 field_host: Anfitrión
127 field_port: Puerto
127 field_port: Puerto
128 field_account: Cuenta
128 field_account: Cuenta
129 field_base_dn: Base DN
129 field_base_dn: Base DN
130 field_attr_login: Cualidad del identificador
130 field_attr_login: Cualidad del identificador
131 field_attr_firstname: Cualidad del nombre
131 field_attr_firstname: Cualidad del nombre
132 field_attr_lastname: Cualidad del apellido
132 field_attr_lastname: Cualidad del apellido
133 field_attr_mail: Cualidad del Email
133 field_attr_mail: Cualidad del Email
134 field_onthefly: Creación del usuario On-the-fly
134 field_onthefly: Creación del usuario On-the-fly
135 field_start_date: Comienzo
135 field_start_date: Comienzo
136 field_done_ratio: %% Realizado
136 field_done_ratio: %% Realizado
137
137
138 label_user: Usuario
138 label_user: Usuario
139 label_user_plural: Usuarios
139 label_user_plural: Usuarios
140 label_user_new: Nuevo usuario
140 label_user_new: Nuevo usuario
141 label_project: Proyecto
141 label_project: Proyecto
142 label_project_new: Nuevo proyecto
142 label_project_new: Nuevo proyecto
143 label_project_plural: Proyectos
143 label_project_plural: Proyectos
144 label_project_latest: Los proyectos más últimos
144 label_project_latest: Los proyectos más últimos
145 label_issue: Petición
145 label_issue: Petición
146 label_issue_new: Nueva petición
146 label_issue_new: Nueva petición
147 label_issue_plural: Peticiones
147 label_issue_plural: Peticiones
148 label_issue_view_all: Ver todas las peticiones
148 label_issue_view_all: Ver todas las peticiones
149 label_document: Documento
149 label_document: Documento
150 label_document_new: Nuevo documento
150 label_document_new: Nuevo documento
151 label_document_plural: Documentos
151 label_document_plural: Documentos
152 label_role: Papel
152 label_role: Papel
153 label_role_plural: Papeles
153 label_role_plural: Papeles
154 label_role_new: Nuevo papel
154 label_role_new: Nuevo papel
155 label_role_and_permissions: Papeles y permisos
155 label_role_and_permissions: Papeles y permisos
156 label_member: Miembro
156 label_member: Miembro
157 label_member_new: Nuevo miembro
157 label_member_new: Nuevo miembro
158 label_member_plural: Miembros
158 label_member_plural: Miembros
159 label_tracker: Tracker
159 label_tracker: Tracker
160 label_tracker_plural: Trackers
160 label_tracker_plural: Trackers
161 label_tracker_new: Nuevo tracker
161 label_tracker_new: Nuevo tracker
162 label_workflow: Workflow
162 label_workflow: Workflow
163 label_issue_status: Estatuto de petición
163 label_issue_status: Estatuto de petición
164 label_issue_status_plural: Estatutos de las peticiones
164 label_issue_status_plural: Estatutos de las peticiones
165 label_issue_status_new: Nuevo estatuto
165 label_issue_status_new: Nuevo estatuto
166 label_issue_category: Categoría de las peticiones
166 label_issue_category: Categoría de las peticiones
167 label_issue_category_plural: Categorías de las peticiones
167 label_issue_category_plural: Categorías de las peticiones
168 label_issue_category_new: Nueva categoría
168 label_issue_category_new: Nueva categoría
169 label_custom_field: Campo personalizado
169 label_custom_field: Campo personalizado
170 label_custom_field_plural: Campos personalizados
170 label_custom_field_plural: Campos personalizados
171 label_custom_field_new: Nuevo campo personalizado
171 label_custom_field_new: Nuevo campo personalizado
172 label_enumerations: Listas de valores
172 label_enumerations: Listas de valores
173 label_enumeration_new: Nuevo valor
173 label_enumeration_new: Nuevo valor
174 label_information: Informacion
174 label_information: Informacion
175 label_information_plural: Informaciones
175 label_information_plural: Informaciones
176 label_please_login: Conexión
176 label_please_login: Conexión
177 label_register: Registrar
177 label_register: Registrar
178 label_password_lost: ¿Olvidaste la contraseña?
178 label_password_lost: ¿Olvidaste la contraseña?
179 label_home: Acogida
179 label_home: Acogida
180 label_my_page: Mi página
180 label_my_page: Mi página
181 label_my_account: Mi cuenta
181 label_my_account: Mi cuenta
182 label_my_projects: Mis proyectos
182 label_my_projects: Mis proyectos
183 label_administration: Administración
183 label_administration: Administración
184 label_login: Conexión
184 label_login: Conexión
185 label_logout: Desconexión
185 label_logout: Desconexión
186 label_help: Ayuda
186 label_help: Ayuda
187 label_reported_issues: Peticiones registradas
187 label_reported_issues: Peticiones registradas
188 label_assigned_to_me_issues: Peticiones que me están asignadas
188 label_assigned_to_me_issues: Peticiones que me están asignadas
189 label_last_login: Última conexión
189 label_last_login: Última conexión
190 label_last_updates: Actualizado
190 label_last_updates: Actualizado
191 label_last_updates_plural: %d Actualizados
191 label_last_updates_plural: %d Actualizados
192 label_registered_on: Inscrito el
192 label_registered_on: Inscrito el
193 label_activity: Actividad
193 label_activity: Actividad
194 label_new: Nuevo
194 label_new: Nuevo
195 label_logged_as: Conectado como
195 label_logged_as: Conectado como
196 label_environment: Environment
196 label_environment: Environment
197 label_authentication: Autentificación
197 label_authentication: Autentificación
198 label_auth_source: Modo de la autentificación
198 label_auth_source: Modo de la autentificación
199 label_auth_source_new: Nuevo modo de la autentificación
199 label_auth_source_new: Nuevo modo de la autentificación
200 label_auth_source_plural: Modos de la autentificación
200 label_auth_source_plural: Modos de la autentificación
201 label_subproject: Proyecto secundario
201 label_subproject: Proyecto secundario
202 label_subproject_plural: Proyectos secundarios
202 label_subproject_plural: Proyectos secundarios
203 label_min_max_length: Longitud mín - máx
203 label_min_max_length: Longitud mín - máx
204 label_list: Lista
204 label_list: Lista
205 label_date: Fecha
205 label_date: Fecha
206 label_integer: Número
206 label_integer: Número
207 label_boolean: Boleano
207 label_boolean: Boleano
208 label_string: Texto
208 label_string: Texto
209 label_text: Texto largo
209 label_text: Texto largo
210 label_attribute: Cualidad
210 label_attribute: Cualidad
211 label_attribute_plural: Cualidades
211 label_attribute_plural: Cualidades
212 label_download: %d Telecarga
212 label_download: %d Telecarga
213 label_download_plural: %d Telecargas
213 label_download_plural: %d Telecargas
214 label_no_data: Ningunos datos a exhibir
214 label_no_data: Ningunos datos a exhibir
215 label_change_status: Cambiar el estatuto
215 label_change_status: Cambiar el estatuto
216 label_history: Histórico
216 label_history: Histórico
217 label_attachment: Fichero
217 label_attachment: Fichero
218 label_attachment_new: Nuevo fichero
218 label_attachment_new: Nuevo fichero
219 label_attachment_delete: Suprimir el fichero
219 label_attachment_delete: Suprimir el fichero
220 label_attachment_plural: Ficheros
220 label_attachment_plural: Ficheros
221 label_report: Informe
221 label_report: Informe
222 label_report_plural: Informes
222 label_report_plural: Informes
223 label_news: Noticia
223 label_news: Noticia
224 label_news_new: Nueva noticia
224 label_news_new: Nueva noticia
225 label_news_plural: Noticias
225 label_news_plural: Noticias
226 label_news_latest: Últimas noticias
226 label_news_latest: Últimas noticias
227 label_news_view_all: Ver todas las noticias
227 label_news_view_all: Ver todas las noticias
228 label_change_log: Cambios
228 label_change_log: Cambios
229 label_settings: Configuración
229 label_settings: Configuración
230 label_overview: Vistazo
230 label_overview: Vistazo
231 label_version: Versión
231 label_version: Versión
232 label_version_new: Nueva versión
232 label_version_new: Nueva versión
233 label_version_plural: Versiónes
233 label_version_plural: Versiónes
234 label_confirmation: Confirmación
234 label_confirmation: Confirmación
235 label_export_to: Exportar a
235 label_export_to: Exportar a
236 label_read: Leer...
236 label_read: Leer...
237 label_public_projects: Proyectos publicos
237 label_public_projects: Proyectos publicos
238 label_open_issues: Abierta
238 label_open_issues: Abierta
239 label_open_issues_plural: Abiertas
239 label_open_issues_plural: Abiertas
240 label_closed_issues: Cerrada
240 label_closed_issues: Cerrada
241 label_closed_issues_plural: Cerradas
241 label_closed_issues_plural: Cerradas
242 label_total: Total
242 label_total: Total
243 label_permissions: Permisos
243 label_permissions: Permisos
244 label_current_status: Estado actual
244 label_current_status: Estado actual
245 label_new_statuses_allowed: Nuevos estatutos autorizados
245 label_new_statuses_allowed: Nuevos estatutos autorizados
246 label_all: Todos
246 label_all: Todos
247 label_none: Ninguno
247 label_none: Ninguno
248 label_next: Próximo
248 label_next: Próximo
249 label_previous: Precedente
249 label_previous: Precedente
250 label_used_by: Utilizado por
250 label_used_by: Utilizado por
251 label_details: Detalles...
251 label_details: Detalles...
252 label_add_note: Agregar una nota
252 label_add_note: Agregar una nota
253 label_per_page: Por la página
253 label_per_page: Por la página
254 label_calendar: Calendario
254 label_calendar: Calendario
255 label_months_from: meses de
255 label_months_from: meses de
256 label_gantt_chart: Diagrama de Gantt
256 label_gantt_chart: Diagrama de Gantt
257 label_internal: Interno
257 label_internal: Interno
258 label_last_changes: %d cambios del último
258 label_last_changes: %d cambios del último
259 label_change_view_all: Ver todos los cambios
259 label_change_view_all: Ver todos los cambios
260 label_personalize_page: Personalizar esta página
260
261
261 button_login: Conexión
262 button_login: Conexión
262 button_submit: Someter
263 button_submit: Someter
263 button_save: Validar
264 button_save: Validar
264 button_check_all: Seleccionar todo
265 button_check_all: Seleccionar todo
265 button_uncheck_all: No seleccionar nada
266 button_uncheck_all: No seleccionar nada
266 button_delete: Suprimir
267 button_delete: Suprimir
267 button_create: Crear
268 button_create: Crear
268 button_test: Testar
269 button_test: Testar
269 button_edit: Modificar
270 button_edit: Modificar
270 button_add: Añadir
271 button_add: Añadir
271 button_change: Cambiar
272 button_change: Cambiar
272 button_apply: Aplicar
273 button_apply: Aplicar
273 button_clear: Anular
274 button_clear: Anular
274 button_lock: Bloquear
275 button_lock: Bloquear
275 button_unlock: Desbloquear
276 button_unlock: Desbloquear
276 button_download: Telecargar
277 button_download: Telecargar
277 button_list: Listar
278 button_list: Listar
278 button_view: Ver
279 button_view: Ver
279 button_move: Mover
280 button_move: Mover
280 button_back: Atrás
281 button_back: Atrás
282 button_cancel: Cancelar
281
283
282 text_select_mail_notifications: Seleccionar las actividades que necesitan la activación de la notificación por mail.
284 text_select_mail_notifications: Seleccionar las actividades que necesitan la activación de la notificación por mail.
283 text_regexp_info: eg. ^[A-Z0-9]+$
285 text_regexp_info: eg. ^[A-Z0-9]+$
284 text_min_max_length_info: 0 para ninguna restricción
286 text_min_max_length_info: 0 para ninguna restricción
285 text_possible_values_info: Los valores se separaron con |
287 text_possible_values_info: Los valores se separaron con |
286 text_project_destroy_confirmation: ¿ Estás seguro de querer eliminar el proyecto ?
288 text_project_destroy_confirmation: ¿ Estás seguro de querer eliminar el proyecto ?
287 text_workflow_edit: Seleccionar un workflow para actualizar
289 text_workflow_edit: Seleccionar un workflow para actualizar
288 text_are_you_sure: ¿ Estás seguro ?
290 text_are_you_sure: ¿ Estás seguro ?
289 text_journal_changed: cambiado de %s a %s
291 text_journal_changed: cambiado de %s a %s
290 text_journal_set_to: fijado a %s
292 text_journal_set_to: fijado a %s
291 text_journal_deleted: suprimido
293 text_journal_deleted: suprimido
292 text_tip_task_begin_day: tarea que comienza este día
294 text_tip_task_begin_day: tarea que comienza este día
293 text_tip_task_end_day: tarea que termina este día
295 text_tip_task_end_day: tarea que termina este día
294 text_tip_task_begin_end_day: tarea que comienza y termina este día
296 text_tip_task_begin_end_day: tarea que comienza y termina este día
295
297
296 default_role_manager: Manager
298 default_role_manager: Manager
297 default_role_developper: Desarrollador
299 default_role_developper: Desarrollador
298 default_role_reporter: Informador
300 default_role_reporter: Informador
299 default_tracker_bug: Anomalía
301 default_tracker_bug: Anomalía
300 default_tracker_feature: Evolución
302 default_tracker_feature: Evolución
301 default_tracker_support: Asistencia
303 default_tracker_support: Asistencia
302 default_issue_status_new: Nuevo
304 default_issue_status_new: Nuevo
303 default_issue_status_assigned: Asignada
305 default_issue_status_assigned: Asignada
304 default_issue_status_resolved: Resuelta
306 default_issue_status_resolved: Resuelta
305 default_issue_status_feedback: Comentario
307 default_issue_status_feedback: Comentario
306 default_issue_status_closed: Cerrada
308 default_issue_status_closed: Cerrada
307 default_issue_status_rejected: Rechazada
309 default_issue_status_rejected: Rechazada
308 default_doc_category_user: Documentación del usuario
310 default_doc_category_user: Documentación del usuario
309 default_doc_category_tech: Documentación tecnica
311 default_doc_category_tech: Documentación tecnica
310 default_priority_low: Bajo
312 default_priority_low: Bajo
311 default_priority_normal: Normal
313 default_priority_normal: Normal
312 default_priority_high: Alto
314 default_priority_high: Alto
313 default_priority_urgent: Urgente
315 default_priority_urgent: Urgente
314 default_priority_immediate: Ahora
316 default_priority_immediate: Ahora
315
317
316 enumeration_issue_priorities: Prioridad de las peticiones
318 enumeration_issue_priorities: Prioridad de las peticiones
317 enumeration_doc_categories: Categorías del documento
319 enumeration_doc_categories: Categorías del documento
@@ -1,318 +1,320
1 _gloc_rule_default: '|n| n<=1 ? "" : "_plural" '
1 _gloc_rule_default: '|n| n<=1 ? "" : "_plural" '
2
2
3 actionview_datehelper_select_day_prefix:
3 actionview_datehelper_select_day_prefix:
4 actionview_datehelper_select_month_names: Janvier,Février,Mars,Avril,Mai,Juin,Juillet,Août,Septembre,Octobre,Novembre,Décembre
4 actionview_datehelper_select_month_names: Janvier,Février,Mars,Avril,Mai,Juin,Juillet,Août,Septembre,Octobre,Novembre,Décembre
5 actionview_datehelper_select_month_names_abbr: Jan,Fév,Mars,Avril,Mai,Juin,Juil,Août,Sept,Oct,Nov,Déc
5 actionview_datehelper_select_month_names_abbr: Jan,Fév,Mars,Avril,Mai,Juin,Juil,Août,Sept,Oct,Nov,Déc
6 actionview_datehelper_select_month_prefix:
6 actionview_datehelper_select_month_prefix:
7 actionview_datehelper_select_year_prefix:
7 actionview_datehelper_select_year_prefix:
8 actionview_datehelper_time_in_words_day: 1 jour
8 actionview_datehelper_time_in_words_day: 1 jour
9 actionview_datehelper_time_in_words_day_plural: %d jours
9 actionview_datehelper_time_in_words_day_plural: %d jours
10 actionview_datehelper_time_in_words_hour_about: about an hour
10 actionview_datehelper_time_in_words_hour_about: about an hour
11 actionview_datehelper_time_in_words_hour_about_plural: about %d hours
11 actionview_datehelper_time_in_words_hour_about_plural: about %d hours
12 actionview_datehelper_time_in_words_hour_about_single: about an hour
12 actionview_datehelper_time_in_words_hour_about_single: about an hour
13 actionview_datehelper_time_in_words_minute: 1 minute
13 actionview_datehelper_time_in_words_minute: 1 minute
14 actionview_datehelper_time_in_words_minute_half: 30 secondes
14 actionview_datehelper_time_in_words_minute_half: 30 secondes
15 actionview_datehelper_time_in_words_minute_less_than: moins d'une minute
15 actionview_datehelper_time_in_words_minute_less_than: moins d'une minute
16 actionview_datehelper_time_in_words_minute_plural: %d minutes
16 actionview_datehelper_time_in_words_minute_plural: %d minutes
17 actionview_datehelper_time_in_words_minute_single: 1 minute
17 actionview_datehelper_time_in_words_minute_single: 1 minute
18 actionview_datehelper_time_in_words_second_less_than: moins d'une seconde
18 actionview_datehelper_time_in_words_second_less_than: moins d'une seconde
19 actionview_datehelper_time_in_words_second_less_than_plural: moins de %d secondes
19 actionview_datehelper_time_in_words_second_less_than_plural: moins de %d secondes
20 actionview_instancetag_blank_option: Choisir
20 actionview_instancetag_blank_option: Choisir
21
21
22 activerecord_error_inclusion: n'est pas inclus dans la liste
22 activerecord_error_inclusion: n'est pas inclus dans la liste
23 activerecord_error_exclusion: est reservé
23 activerecord_error_exclusion: est reservé
24 activerecord_error_invalid: est invalide
24 activerecord_error_invalid: est invalide
25 activerecord_error_confirmation: ne correspond pas à la confirmation
25 activerecord_error_confirmation: ne correspond pas à la confirmation
26 activerecord_error_accepted: doit être accepté
26 activerecord_error_accepted: doit être accepté
27 activerecord_error_empty: doit être renseigné
27 activerecord_error_empty: doit être renseigné
28 activerecord_error_blank: doit être renseigné
28 activerecord_error_blank: doit être renseigné
29 activerecord_error_too_long: est trop long
29 activerecord_error_too_long: est trop long
30 activerecord_error_too_short: est trop court
30 activerecord_error_too_short: est trop court
31 activerecord_error_wrong_length: n'est pas de la bonne longueur
31 activerecord_error_wrong_length: n'est pas de la bonne longueur
32 activerecord_error_taken: est déjà utilisé
32 activerecord_error_taken: est déjà utilisé
33 activerecord_error_not_a_number: n'est pas un nombre
33 activerecord_error_not_a_number: n'est pas un nombre
34 activerecord_error_not_a_date: n'est pas une date valide
34 activerecord_error_not_a_date: n'est pas une date valide
35 activerecord_error_greater_than_start_date: doit être postérieur à la date de début
35 activerecord_error_greater_than_start_date: doit être postérieur à la date de début
36
36
37 general_fmt_age: %d an
37 general_fmt_age: %d an
38 general_fmt_age_plural: %d ans
38 general_fmt_age_plural: %d ans
39 general_fmt_date: %%d/%%m/%%Y
39 general_fmt_date: %%d/%%m/%%Y
40 general_fmt_datetime: %%d/%%m/%%Y %%H:%%M
40 general_fmt_datetime: %%d/%%m/%%Y %%H:%%M
41 general_fmt_datetime_short: %%d/%%m %%H:%%M
41 general_fmt_datetime_short: %%d/%%m %%H:%%M
42 general_fmt_time: %%H:%%M
42 general_fmt_time: %%H:%%M
43 general_text_No: 'Non'
43 general_text_No: 'Non'
44 general_text_Yes: 'Oui'
44 general_text_Yes: 'Oui'
45 general_text_no: 'non'
45 general_text_no: 'non'
46 general_text_yes: 'oui'
46 general_text_yes: 'oui'
47 general_lang_fr: 'Français'
47 general_lang_fr: 'Français'
48 general_csv_separator: ';'
48 general_csv_separator: ';'
49 general_day_names: Lundi,Mardi,Mercredi,Jeudi,Vendredi,Samedi,Dimanche
49 general_day_names: Lundi,Mardi,Mercredi,Jeudi,Vendredi,Samedi,Dimanche
50
50
51 notice_account_updated: Le compte a été mis à jour avec succès.
51 notice_account_updated: Le compte a été mis à jour avec succès.
52 notice_account_invalid_creditentials: Identifiant ou mot de passe invalide.
52 notice_account_invalid_creditentials: Identifiant ou mot de passe invalide.
53 notice_account_password_updated: Mot de passe mis à jour avec succès.
53 notice_account_password_updated: Mot de passe mis à jour avec succès.
54 notice_account_wrong_password: Mot de passe incorrect
54 notice_account_wrong_password: Mot de passe incorrect
55 notice_account_register_done: Un message contenant les instructions pour activer votre compte vous a été envoyé.
55 notice_account_register_done: Un message contenant les instructions pour activer votre compte vous a été envoyé.
56 notice_account_unknown_email: Aucun compte ne correspond à cette adresse.
56 notice_account_unknown_email: Aucun compte ne correspond à cette adresse.
57 notice_can_t_change_password: Ce compte utilise une authentification externe. Impossible de changer le mot de passe.
57 notice_can_t_change_password: Ce compte utilise une authentification externe. Impossible de changer le mot de passe.
58 notice_account_lost_email_sent: Un message contenant les instructions pour choisir un nouveau mot de passe vous a été envoyé.
58 notice_account_lost_email_sent: Un message contenant les instructions pour choisir un nouveau mot de passe vous a été envoyé.
59 notice_account_activated: Votre compte a été activé. Vous pouvez à présent vous connecter.
59 notice_account_activated: Votre compte a été activé. Vous pouvez à présent vous connecter.
60 notice_successful_create: Création effectuée avec succès.
60 notice_successful_create: Création effectuée avec succès.
61 notice_successful_update: Mise à jour effectuée avec succès.
61 notice_successful_update: Mise à jour effectuée avec succès.
62 notice_successful_delete: Suppression effectuée avec succès.
62 notice_successful_delete: Suppression effectuée avec succès.
63 notice_successful_connection: Connection réussie.
63 notice_successful_connection: Connection réussie.
64 notice_file_not_found: Le fichier demandé n'existe pas ou a été supprimé.
64 notice_file_not_found: Le fichier demandé n'existe pas ou a été supprimé.
65 notice_locking_conflict: Les données ont été mises à jour par un autre utilisateur. Mise à jour impossible.
65 notice_locking_conflict: Les données ont été mises à jour par un autre utilisateur. Mise à jour impossible.
66
66
67 mail_subject_lost_password: Votre mot de passe redMine
67 mail_subject_lost_password: Votre mot de passe redMine
68 mail_subject_register: Activation de votre compte redMine
68 mail_subject_register: Activation de votre compte redMine
69
69
70 gui_validation_error: 1 erreur
70 gui_validation_error: 1 erreur
71 gui_validation_error_plural: %d erreurs
71 gui_validation_error_plural: %d erreurs
72
72
73 field_name: Nom
73 field_name: Nom
74 field_description: Description
74 field_description: Description
75 field_summary: Résumé
75 field_summary: Résumé
76 field_is_required: Obligatoire
76 field_is_required: Obligatoire
77 field_firstname: Prénom
77 field_firstname: Prénom
78 field_lastname: Nom
78 field_lastname: Nom
79 field_mail: Email
79 field_mail: Email
80 field_filename: Fichier
80 field_filename: Fichier
81 field_filesize: Taille
81 field_filesize: Taille
82 field_downloads: Téléchargements
82 field_downloads: Téléchargements
83 field_author: Auteur
83 field_author: Auteur
84 field_created_on: Créé
84 field_created_on: Créé
85 field_updated_on: Mis à jour
85 field_updated_on: Mis à jour
86 field_field_format: Format
86 field_field_format: Format
87 field_is_for_all: Pour tous les projets
87 field_is_for_all: Pour tous les projets
88 field_possible_values: Valeurs possibles
88 field_possible_values: Valeurs possibles
89 field_regexp: Expression régulière
89 field_regexp: Expression régulière
90 field_min_length: Longueur minimum
90 field_min_length: Longueur minimum
91 field_max_length: Longueur maximum
91 field_max_length: Longueur maximum
92 field_value: Valeur
92 field_value: Valeur
93 field_category: Catégorie
93 field_category: Catégorie
94 field_title: Titre
94 field_title: Titre
95 field_project: Projet
95 field_project: Projet
96 field_issue: Demande
96 field_issue: Demande
97 field_status: Statut
97 field_status: Statut
98 field_notes: Notes
98 field_notes: Notes
99 field_is_closed: Demande fermée
99 field_is_closed: Demande fermée
100 field_is_default: Statut par défaut
100 field_is_default: Statut par défaut
101 field_html_color: Couleur
101 field_html_color: Couleur
102 field_tracker: Tracker
102 field_tracker: Tracker
103 field_subject: Sujet
103 field_subject: Sujet
104 field_due_date: Date d'échéance
104 field_due_date: Date d'échéance
105 field_assigned_to: Assigné à
105 field_assigned_to: Assigné à
106 field_priority: Priorité
106 field_priority: Priorité
107 field_fixed_version: Version corrigée
107 field_fixed_version: Version corrigée
108 field_user: Utilisateur
108 field_user: Utilisateur
109 field_role: Rôle
109 field_role: Rôle
110 field_homepage: Site web
110 field_homepage: Site web
111 field_is_public: Public
111 field_is_public: Public
112 field_parent: Sous-projet de
112 field_parent: Sous-projet de
113 field_is_in_chlog: Demandes affichées dans l'historique
113 field_is_in_chlog: Demandes affichées dans l'historique
114 field_login: Identifiant
114 field_login: Identifiant
115 field_mail_notification: Notifications par mail
115 field_mail_notification: Notifications par mail
116 field_admin: Administrateur
116 field_admin: Administrateur
117 field_locked: Verrouillé
117 field_locked: Verrouillé
118 field_last_login_on: Dernière connexion
118 field_last_login_on: Dernière connexion
119 field_language: Langue
119 field_language: Langue
120 field_effective_date: Date
120 field_effective_date: Date
121 field_password: Mot de passe
121 field_password: Mot de passe
122 field_new_password: Nouveau mot de passe
122 field_new_password: Nouveau mot de passe
123 field_password_confirmation: Confirmation
123 field_password_confirmation: Confirmation
124 field_version: Version
124 field_version: Version
125 field_type: Type
125 field_type: Type
126 field_host: Hôte
126 field_host: Hôte
127 field_port: Port
127 field_port: Port
128 field_account: Compte
128 field_account: Compte
129 field_base_dn: Base DN
129 field_base_dn: Base DN
130 field_attr_login: Attribut Identifiant
130 field_attr_login: Attribut Identifiant
131 field_attr_firstname: Attribut Prénom
131 field_attr_firstname: Attribut Prénom
132 field_attr_lastname: Attribut Nom
132 field_attr_lastname: Attribut Nom
133 field_attr_mail: Attribut Email
133 field_attr_mail: Attribut Email
134 field_onthefly: Création des utilisateurs à la volée
134 field_onthefly: Création des utilisateurs à la volée
135 field_start_date: Début
135 field_start_date: Début
136 field_done_ratio: %% Réalisé
136 field_done_ratio: %% Réalisé
137 field_auth_source: Mode d'authentification
137 field_auth_source: Mode d'authentification
138
138
139 label_user: Utilisateur
139 label_user: Utilisateur
140 label_user_plural: Utilisateurs
140 label_user_plural: Utilisateurs
141 label_user_new: Nouvel utilisateur
141 label_user_new: Nouvel utilisateur
142 label_project: Projet
142 label_project: Projet
143 label_project_new: Nouveau projet
143 label_project_new: Nouveau projet
144 label_project_plural: Projets
144 label_project_plural: Projets
145 label_project_latest: Derniers projets
145 label_project_latest: Derniers projets
146 label_issue: Demande
146 label_issue: Demande
147 label_issue_new: Nouvelle demande
147 label_issue_new: Nouvelle demande
148 label_issue_plural: Demandes
148 label_issue_plural: Demandes
149 label_issue_view_all: Voir toutes les demandes
149 label_issue_view_all: Voir toutes les demandes
150 label_document: Document
150 label_document: Document
151 label_document_new: Nouveau document
151 label_document_new: Nouveau document
152 label_document_plural: Documents
152 label_document_plural: Documents
153 label_role: Rôle
153 label_role: Rôle
154 label_role_plural: Rôles
154 label_role_plural: Rôles
155 label_role_new: Nouveau rôle
155 label_role_new: Nouveau rôle
156 label_role_and_permissions: Rôles et permissions
156 label_role_and_permissions: Rôles et permissions
157 label_member: Membre
157 label_member: Membre
158 label_member_new: Nouveau membre
158 label_member_new: Nouveau membre
159 label_member_plural: Membres
159 label_member_plural: Membres
160 label_tracker: Tracker
160 label_tracker: Tracker
161 label_tracker_plural: Trackers
161 label_tracker_plural: Trackers
162 label_tracker_new: Nouveau tracker
162 label_tracker_new: Nouveau tracker
163 label_workflow: Workflow
163 label_workflow: Workflow
164 label_issue_status: Statut de demandes
164 label_issue_status: Statut de demandes
165 label_issue_status_plural: Statuts de demandes
165 label_issue_status_plural: Statuts de demandes
166 label_issue_status_new: Nouveau statut
166 label_issue_status_new: Nouveau statut
167 label_issue_category: Catégorie de demandes
167 label_issue_category: Catégorie de demandes
168 label_issue_category_plural: Catégories de demandes
168 label_issue_category_plural: Catégories de demandes
169 label_issue_category_new: Nouvelle catégorie
169 label_issue_category_new: Nouvelle catégorie
170 label_custom_field: Champ personnalisé
170 label_custom_field: Champ personnalisé
171 label_custom_field_plural: Champs personnalisés
171 label_custom_field_plural: Champs personnalisés
172 label_custom_field_new: Nouveau champ personnalisé
172 label_custom_field_new: Nouveau champ personnalisé
173 label_enumerations: Listes de valeurs
173 label_enumerations: Listes de valeurs
174 label_enumeration_new: Nouvelle valeur
174 label_enumeration_new: Nouvelle valeur
175 label_information: Information
175 label_information: Information
176 label_information_plural: Informations
176 label_information_plural: Informations
177 label_please_login: Identification
177 label_please_login: Identification
178 label_register: S'enregistrer
178 label_register: S'enregistrer
179 label_password_lost: Mot de passe perdu
179 label_password_lost: Mot de passe perdu
180 label_home: Accueil
180 label_home: Accueil
181 label_my_page: Ma page
181 label_my_page: Ma page
182 label_my_account: Mon compte
182 label_my_account: Mon compte
183 label_my_projects: Mes projets
183 label_my_projects: Mes projets
184 label_administration: Administration
184 label_administration: Administration
185 label_login: Connexion
185 label_login: Connexion
186 label_logout: Déconnexion
186 label_logout: Déconnexion
187 label_help: Aide
187 label_help: Aide
188 label_reported_issues: Demandes soumises
188 label_reported_issues: Demandes soumises
189 label_assigned_to_me_issues: Demandes qui me sont assignées
189 label_assigned_to_me_issues: Demandes qui me sont assignées
190 label_last_login: Dernière connexion
190 label_last_login: Dernière connexion
191 label_last_updates: Dernière mise à jour
191 label_last_updates: Dernière mise à jour
192 label_last_updates_plural: %d dernières mises à jour
192 label_last_updates_plural: %d dernières mises à jour
193 label_registered_on: Inscrit le
193 label_registered_on: Inscrit le
194 label_activity: Activité
194 label_activity: Activité
195 label_new: Nouveau
195 label_new: Nouveau
196 label_logged_as: Connecté en tant que
196 label_logged_as: Connecté en tant que
197 label_environment: Environnement
197 label_environment: Environnement
198 label_authentication: Authentification
198 label_authentication: Authentification
199 label_auth_source: Mode d'authentification
199 label_auth_source: Mode d'authentification
200 label_auth_source_new: Nouveau mode d'authentification
200 label_auth_source_new: Nouveau mode d'authentification
201 label_auth_source_plural: Modes d'authentification
201 label_auth_source_plural: Modes d'authentification
202 label_subproject: Sous-projet
202 label_subproject: Sous-projet
203 label_subproject_plural: Sous-projets
203 label_subproject_plural: Sous-projets
204 label_min_max_length: Longueurs mini - maxi
204 label_min_max_length: Longueurs mini - maxi
205 label_list: Liste
205 label_list: Liste
206 label_date: Date
206 label_date: Date
207 label_integer: Entier
207 label_integer: Entier
208 label_boolean: Booléen
208 label_boolean: Booléen
209 label_string: Texte
209 label_string: Texte
210 label_text: Texte long
210 label_text: Texte long
211 label_attribute: Attribut
211 label_attribute: Attribut
212 label_attribute_plural: Attributs
212 label_attribute_plural: Attributs
213 label_download: %d Téléchargement
213 label_download: %d Téléchargement
214 label_download_plural: %d Téléchargements
214 label_download_plural: %d Téléchargements
215 label_no_data: Aucune donnée à afficher
215 label_no_data: Aucune donnée à afficher
216 label_change_status: Changer le statut
216 label_change_status: Changer le statut
217 label_history: Historique
217 label_history: Historique
218 label_attachment: Fichier
218 label_attachment: Fichier
219 label_attachment_new: Nouveau fichier
219 label_attachment_new: Nouveau fichier
220 label_attachment_delete: Supprimer le fichier
220 label_attachment_delete: Supprimer le fichier
221 label_attachment_plural: Fichiers
221 label_attachment_plural: Fichiers
222 label_report: Rapport
222 label_report: Rapport
223 label_report_plural: Rapports
223 label_report_plural: Rapports
224 label_news: Annonce
224 label_news: Annonce
225 label_news_new: Nouvelle annonce
225 label_news_new: Nouvelle annonce
226 label_news_plural: Annonces
226 label_news_plural: Annonces
227 label_news_latest: Dernières annonces
227 label_news_latest: Dernières annonces
228 label_news_view_all: Voir toutes les annonces
228 label_news_view_all: Voir toutes les annonces
229 label_change_log: Historique
229 label_change_log: Historique
230 label_settings: Configuration
230 label_settings: Configuration
231 label_overview: Aperçu
231 label_overview: Aperçu
232 label_version: Version
232 label_version: Version
233 label_version_new: Nouvelle version
233 label_version_new: Nouvelle version
234 label_version_plural: Versions
234 label_version_plural: Versions
235 label_confirmation: Confirmation
235 label_confirmation: Confirmation
236 label_export_to: Exporter en
236 label_export_to: Exporter en
237 label_read: Lire...
237 label_read: Lire...
238 label_public_projects: Projets publics
238 label_public_projects: Projets publics
239 label_open_issues: Ouverte
239 label_open_issues: Ouverte
240 label_open_issues_plural: Ouvertes
240 label_open_issues_plural: Ouvertes
241 label_closed_issues: Fermée
241 label_closed_issues: Fermée
242 label_closed_issues_plural: Fermées
242 label_closed_issues_plural: Fermées
243 label_total: Total
243 label_total: Total
244 label_permissions: Permissions
244 label_permissions: Permissions
245 label_current_status: Statut actuel
245 label_current_status: Statut actuel
246 label_new_statuses_allowed: Nouveaux statuts autorisés
246 label_new_statuses_allowed: Nouveaux statuts autorisés
247 label_all: Tous
247 label_all: Tous
248 label_none: Aucun
248 label_none: Aucun
249 label_next: Suivant
249 label_next: Suivant
250 label_previous: Précédent
250 label_previous: Précédent
251 label_used_by: Utilisé par
251 label_used_by: Utilisé par
252 label_details: Détails...
252 label_details: Détails...
253 label_add_note: Ajouter une note
253 label_add_note: Ajouter une note
254 label_per_page: Par page
254 label_per_page: Par page
255 label_calendar: Calendrier
255 label_calendar: Calendrier
256 label_months_from: mois depuis
256 label_months_from: mois depuis
257 label_gantt_chart: Diagramme de Gantt
257 label_gantt_chart: Diagramme de Gantt
258 label_internal: Interne
258 label_internal: Interne
259 label_last_changes: %d derniers changements
259 label_last_changes: %d derniers changements
260 label_change_view_all: Voir tous les changements
260 label_change_view_all: Voir tous les changements
261 label_personalize_page: Personnaliser cette page
261
262
262 button_login: Connexion
263 button_login: Connexion
263 button_submit: Soumettre
264 button_submit: Soumettre
264 button_save: Valider
265 button_save: Sauvegarder
265 button_check_all: Tout cocher
266 button_check_all: Tout cocher
266 button_uncheck_all: Tout décocher
267 button_uncheck_all: Tout décocher
267 button_delete: Supprimer
268 button_delete: Supprimer
268 button_create: Créer
269 button_create: Créer
269 button_test: Tester
270 button_test: Tester
270 button_edit: Modifier
271 button_edit: Modifier
271 button_add: Ajouter
272 button_add: Ajouter
272 button_change: Changer
273 button_change: Changer
273 button_apply: Appliquer
274 button_apply: Appliquer
274 button_clear: Effacer
275 button_clear: Effacer
275 button_lock: Verrouiller
276 button_lock: Verrouiller
276 button_unlock: Déverrouiller
277 button_unlock: Déverrouiller
277 button_download: Télécharger
278 button_download: Télécharger
278 button_list: Lister
279 button_list: Lister
279 button_view: Voir
280 button_view: Voir
280 button_move: Déplacer
281 button_move: Déplacer
281 button_back: Retour
282 button_back: Retour
283 button_cancel: Annuler
282
284
283 text_select_mail_notifications: Sélectionner les actions pour lesquelles la notification par mail doit être activée.
285 text_select_mail_notifications: Sélectionner les actions pour lesquelles la notification par mail doit être activée.
284 text_regexp_info: ex. ^[A-Z0-9]+$
286 text_regexp_info: ex. ^[A-Z0-9]+$
285 text_min_max_length_info: 0 pour aucune restriction
287 text_min_max_length_info: 0 pour aucune restriction
286 text_possible_values_info: valeurs séparées par |
288 text_possible_values_info: valeurs séparées par |
287 text_project_destroy_confirmation: Etes-vous sûr de vouloir supprimer ce projet et tout ce qui lui est rattaché ?
289 text_project_destroy_confirmation: Etes-vous sûr de vouloir supprimer ce projet et tout ce qui lui est rattaché ?
288 text_workflow_edit: Sélectionner un tracker et un rôle pour éditer le workflow
290 text_workflow_edit: Sélectionner un tracker et un rôle pour éditer le workflow
289 text_are_you_sure: Etes-vous sûr ?
291 text_are_you_sure: Etes-vous sûr ?
290 text_journal_changed: changé de %s à %s
292 text_journal_changed: changé de %s à %s
291 text_journal_set_to: mis à %s
293 text_journal_set_to: mis à %s
292 text_journal_deleted: supprimé
294 text_journal_deleted: supprimé
293 text_tip_task_begin_day: tâche commençant ce jour
295 text_tip_task_begin_day: tâche commençant ce jour
294 text_tip_task_end_day: tâche finissant ce jour
296 text_tip_task_end_day: tâche finissant ce jour
295 text_tip_task_begin_end_day: tâche commençant et finissant ce jour
297 text_tip_task_begin_end_day: tâche commençant et finissant ce jour
296
298
297 default_role_manager: Manager
299 default_role_manager: Manager
298 default_role_developper: Développeur
300 default_role_developper: Développeur
299 default_role_reporter: Rapporteur
301 default_role_reporter: Rapporteur
300 default_tracker_bug: Anomalie
302 default_tracker_bug: Anomalie
301 default_tracker_feature: Evolution
303 default_tracker_feature: Evolution
302 default_tracker_support: Assistance
304 default_tracker_support: Assistance
303 default_issue_status_new: Nouveau
305 default_issue_status_new: Nouveau
304 default_issue_status_assigned: Assigné
306 default_issue_status_assigned: Assigné
305 default_issue_status_resolved: Résolu
307 default_issue_status_resolved: Résolu
306 default_issue_status_feedback: Commentaire
308 default_issue_status_feedback: Commentaire
307 default_issue_status_closed: Fermé
309 default_issue_status_closed: Fermé
308 default_issue_status_rejected: Rejeté
310 default_issue_status_rejected: Rejeté
309 default_doc_category_user: Documentation utilisateur
311 default_doc_category_user: Documentation utilisateur
310 default_doc_category_tech: Documentation technique
312 default_doc_category_tech: Documentation technique
311 default_priority_low: Bas
313 default_priority_low: Bas
312 default_priority_normal: Normal
314 default_priority_normal: Normal
313 default_priority_high: Haut
315 default_priority_high: Haut
314 default_priority_urgent: Urgent
316 default_priority_urgent: Urgent
315 default_priority_immediate: Immédiat
317 default_priority_immediate: Immédiat
316
318
317 enumeration_issue_priorities: Priorités des demandes
319 enumeration_issue_priorities: Priorités des demandes
318 enumeration_doc_categories: Catégories des documents
320 enumeration_doc_categories: Catégories des documents
@@ -1,448 +1,484
1 /* andreas08 - an open source xhtml/css website layout by Andreas Viklund - http://andreasviklund.com . Free to use in any way and for any purpose as long as the proper credits are given to the original designer. Version: 1.0, November 28, 2005 */
1 /* andreas08 - an open source xhtml/css website layout by Andreas Viklund - http://andreasviklund.com . Free to use in any way and for any purpose as long as the proper credits are given to the original designer. Version: 1.0, November 28, 2005 */
2 /* Edited by Jean-Philippe Lang *>
2 /* Edited by Jean-Philippe Lang *>
3 /**************** Body and tag styles ****************/
3 /**************** Body and tag styles ****************/
4
4
5
5
6 #header * {margin:0; padding:0;}
6 #header * {margin:0; padding:0;}
7 p, ul, ol, li {margin:0; padding:0;}
7 p, ul, ol, li {margin:0; padding:0;}
8
8
9
9
10 body{
10 body{
11 font:76% Verdana,Tahoma,Arial,sans-serif;
11 font:76% Verdana,Tahoma,Arial,sans-serif;
12 line-height:1.4em;
12 line-height:1.4em;
13 text-align:center;
13 text-align:center;
14 color:#303030;
14 color:#303030;
15 background:#e8eaec;
15 background:#e8eaec;
16 margin:0;
16 margin:0;
17 }
17 }
18
18
19
19
20 a{
20 a{
21 color:#467aa7;
21 color:#467aa7;
22 font-weight:bold;
22 font-weight:bold;
23 text-decoration:none;
23 text-decoration:none;
24 background-color:inherit;
24 background-color:inherit;
25 }
25 }
26
26
27 a:hover{color:#2a5a8a; text-decoration:none; background-color:inherit;}
27 a:hover{color:#2a5a8a; text-decoration:none; background-color:inherit;}
28 a img{border:none;}
28 a img{border:none;}
29
29
30 p{padding:0 0 1em 0;}
30 p{padding:0 0 1em 0;}
31 p form{margin-top:0; margin-bottom:20px;}
31 p form{margin-top:0; margin-bottom:20px;}
32
32
33 img.left,img.center,img.right{padding:4px; border:1px solid #a0a0a0;}
33 img.left,img.center,img.right{padding:4px; border:1px solid #a0a0a0;}
34 img.left{float:left; margin:0 12px 5px 0;}
34 img.left{float:left; margin:0 12px 5px 0;}
35 img.center{display:block; margin:0 auto 5px auto;}
35 img.center{display:block; margin:0 auto 5px auto;}
36 img.right{float:right; margin:0 0 5px 12px;}
36 img.right{float:right; margin:0 0 5px 12px;}
37
37
38 /**************** Header and navigation styles ****************/
38 /**************** Header and navigation styles ****************/
39
39
40 #container{
40 #container{
41 width:100%;
41 width:100%;
42 min-width: 800px;
42 min-width: 800px;
43 margin:0;
43 margin:0;
44 padding:0;
44 padding:0;
45 text-align:left;
45 text-align:left;
46 background:#ffffff;
46 background:#ffffff;
47 color:#303030;
47 color:#303030;
48 }
48 }
49
49
50 #header{
50 #header{
51 height:4.5em;
51 height:4.5em;
52 /*width:758px;*/
52 /*width:758px;*/
53 margin:0;
53 margin:0;
54 background:#467aa7;
54 background:#467aa7;
55 color:#ffffff;
55 color:#ffffff;
56 margin-bottom:1px;
56 margin-bottom:1px;
57 }
57 }
58
58
59 #header h1{
59 #header h1{
60 padding:10px 0 0 20px;
60 padding:10px 0 0 20px;
61 font-size:2em;
61 font-size:2em;
62 background-color:inherit;
62 background-color:inherit;
63 color:#fff; /*rgb(152, 26, 33);*/
63 color:#fff; /*rgb(152, 26, 33);*/
64 letter-spacing:-1px;
64 letter-spacing:-1px;
65 font-weight:bold;
65 font-weight:bold;
66 font-family: Trebuchet MS,Georgia,"Times New Roman",serif;
66 font-family: Trebuchet MS,Georgia,"Times New Roman",serif;
67 }
67 }
68
68
69 #header h2{
69 #header h2{
70 margin:3px 0 0 40px;
70 margin:3px 0 0 40px;
71 font-size:1.5em;
71 font-size:1.5em;
72 background-color:inherit;
72 background-color:inherit;
73 color:#f0f2f4;
73 color:#f0f2f4;
74 letter-spacing:-1px;
74 letter-spacing:-1px;
75 font-weight:normal;
75 font-weight:normal;
76 font-family: Trebuchet MS,Georgia,"Times New Roman",serif;
76 font-family: Trebuchet MS,Georgia,"Times New Roman",serif;
77 }
77 }
78
78
79 #navigation{
79 #navigation{
80 height:2.2em;
80 height:2.2em;
81 line-height:2.2em;
81 line-height:2.2em;
82 /*width:758px;*/
82 /*width:758px;*/
83 margin:0;
83 margin:0;
84 background:#578bb8;
84 background:#578bb8;
85 color:#ffffff;
85 color:#ffffff;
86 }
86 }
87
87
88 #navigation li{
88 #navigation li{
89 float:left;
89 float:left;
90 list-style-type:none;
90 list-style-type:none;
91 border-right:1px solid #ffffff;
91 border-right:1px solid #ffffff;
92 white-space:nowrap;
92 white-space:nowrap;
93 }
93 }
94
94
95 #navigation li.right {
95 #navigation li.right {
96 float:right;
96 float:right;
97 list-style-type:none;
97 list-style-type:none;
98 border-right:0;
98 border-right:0;
99 border-left:1px solid #ffffff;
99 border-left:1px solid #ffffff;
100 white-space:nowrap;
100 white-space:nowrap;
101 }
101 }
102
102
103 #navigation li a{
103 #navigation li a{
104 display:block;
104 display:block;
105 padding:0px 10px 0px 22px;
105 padding:0px 10px 0px 22px;
106 font-size:0.8em;
106 font-size:0.8em;
107 font-weight:normal;
107 font-weight:normal;
108 /*text-transform:uppercase;*/
108 /*text-transform:uppercase;*/
109 text-decoration:none;
109 text-decoration:none;
110 background-color:inherit;
110 background-color:inherit;
111 color: #ffffff;
111 color: #ffffff;
112 }
112 }
113
113
114 * html #navigation a {width:1%;}
114 * html #navigation a {width:1%;}
115
115
116 #navigation .selected,#navigation a:hover{
116 #navigation .selected,#navigation a:hover{
117 color:#ffffff;
117 color:#ffffff;
118 text-decoration:none;
118 text-decoration:none;
119 background-color: #80b0da;
119 background-color: #80b0da;
120 }
120 }
121
121
122 /**************** Icons links *******************/
122 /**************** Icons links *******************/
123 .picHome { background: url(../images/home.png) no-repeat 4px 50%; }
123 .picHome { background: url(../images/home.png) no-repeat 4px 50%; }
124 .picUser { background: url(../images/user.png) no-repeat 4px 50%; }
124 .picUser { background: url(../images/user.png) no-repeat 4px 50%; }
125 .picUserPage { background: url(../images/user_page.png) no-repeat 4px 50%; }
125 .picUserPage { background: url(../images/user_page.png) no-repeat 4px 50%; }
126 .picAdmin { background: url(../images/admin.png) no-repeat 4px 50%; }
126 .picAdmin { background: url(../images/admin.png) no-repeat 4px 50%; }
127 .picProject { background: url(../images/projects.png) no-repeat 4px 50%; }
127 .picProject { background: url(../images/projects.png) no-repeat 4px 50%; }
128 .picLogout { background: url(../images/logout.png) no-repeat 4px 50%; }
128 .picLogout { background: url(../images/logout.png) no-repeat 4px 50%; }
129 .picHelp { background: url(../images/help.png) no-repeat 4px 50%; }
129 .picHelp { background: url(../images/help.png) no-repeat 4px 50%; }
130
130
131 /**************** Content styles ****************/
131 /**************** Content styles ****************/
132
132
133 html>body #content {
133 html>body #content {
134 height: auto;
134 height: auto;
135 min-height: 500px;
135 min-height: 500px;
136 }
136 }
137
137
138 #content{
138 #content{
139 /*float:right;*/
139 /*float:right;*/
140 /*width:530px;*/
140 /*width:530px;*/
141 width: auto;
141 width: auto;
142 height:500px;
142 height:500px;
143 font-size:0.9em;
143 font-size:0.9em;
144 padding:20px 10px 10px 20px;
144 padding:20px 10px 10px 20px;
145 /*position: absolute;*/
145 /*position: absolute;*/
146 margin-left: 120px;
146 margin-left: 120px;
147 border-left: 1px dashed #c0c0c0;
147 border-left: 1px dashed #c0c0c0;
148
148
149 }
149 }
150
150
151 #content h2{
151 #content h2{
152 display:block;
152 display:block;
153 margin:0 0 16px 0;
153 margin:0 0 16px 0;
154 font-size:1.7em;
154 font-size:1.7em;
155 font-weight:normal;
155 font-weight:normal;
156 letter-spacing:-1px;
156 letter-spacing:-1px;
157 color:#606060;
157 color:#606060;
158 background-color:inherit;
158 background-color:inherit;
159 font-family: Trebuchet MS,Georgia,"Times New Roman",serif;
159 font-family: Trebuchet MS,Georgia,"Times New Roman",serif;
160 }
160 }
161
161
162 #content h2 a{font-weight:normal;}
162 #content h2 a{font-weight:normal;}
163 #content h3{margin:0 0 12px 0; font-size:1.4em;color:#707070;font-family: Trebuchet MS,Georgia,"Times New Roman",serif;}
163 #content h3{margin:0 0 12px 0; font-size:1.4em;color:#707070;font-family: Trebuchet MS,Georgia,"Times New Roman",serif;}
164 #content a:hover,#subcontent a:hover{text-decoration:underline;}
164 #content a:hover,#subcontent a:hover{text-decoration:underline;}
165 #content ul,#content ol{margin:0 5px 16px 35px;}
165 #content ul,#content ol{margin:0 5px 16px 35px;}
166 #content dl{margin:0 5px 10px 25px;}
166 #content dl{margin:0 5px 10px 25px;}
167 #content dt{font-weight:bold; margin-bottom:5px;}
167 #content dt{font-weight:bold; margin-bottom:5px;}
168 #content dd{margin:0 0 10px 15px;}
168 #content dd{margin:0 0 10px 15px;}
169
169
170
170
171 /***********************************************/
171 /***********************************************/
172
172
173 /*
173 /*
174 form{
174 form{
175 padding:15px;
175 padding:15px;
176 margin:0 0 20px 0;
176 margin:0 0 20px 0;
177 border:1px solid #c0c0c0;
177 border:1px solid #c0c0c0;
178 background-color:#CEE1ED;
178 background-color:#CEE1ED;
179 width:600px;
179 width:600px;
180 }
180 }
181 */
181 */
182
182
183 form {
183 form {
184 display: inline;
184 display: inline;
185 }
185 }
186
186
187 .noborder {
187 .noborder {
188 border:0px;
188 border:0px;
189 background-color:#fff;
189 background-color:#fff;
190 width:100%;
190 width:100%;
191 }
191 }
192
192
193 textarea {
193 textarea {
194 padding:0;
194 padding:0;
195 margin:0;
195 margin:0;
196 }
196 }
197
197
198 input {
198 input {
199 vertical-align: middle;
199 vertical-align: middle;
200 }
200 }
201
201
202 input.button-small
202 input.button-small
203 {
203 {
204 font-size: 0.8em;
204 font-size: 0.8em;
205 }
205 }
206
206
207 select {
207 select {
208 vertical-align: middle;
208 vertical-align: middle;
209 }
209 }
210
210
211 select.select-small
211 select.select-small
212 {
212 {
213 border: 1px solid #7F9DB9;
213 border: 1px solid #7F9DB9;
214 padding: 1px;
214 padding: 1px;
215 font-size: 0.8em;
215 font-size: 0.8em;
216 }
216 }
217
217
218 .active-filter
218 .active-filter
219 {
219 {
220 background-color: #F9FA9E;
220 background-color: #F9FA9E;
221
221
222 }
222 }
223
223
224 label {
224 label {
225 font-weight: bold;
225 font-weight: bold;
226 font-size: 1em;
226 font-size: 1em;
227 }
227 }
228
228
229 fieldset {
229 fieldset {
230 border:1px solid #7F9DB9;
230 border:1px solid #7F9DB9;
231 padding: 6px;
231 padding: 6px;
232 }
232 }
233
233
234 legend {
234 legend {
235 color: #505050;
235 color: #505050;
236
236
237 }
237 }
238
238
239 .required {
239 .required {
240 color: #bb0000;
240 color: #bb0000;
241 }
241 }
242
242
243 table.listTableContent {
243 table.listTableContent {
244 border:1px solid #578bb8;
244 border:1px solid #578bb8;
245 width:99%;
245 width:99%;
246 border-collapse: collapse;
246 border-collapse: collapse;
247 }
247 }
248
248
249 table.listTableContent td {
249 table.listTableContent td {
250 padding:2px;
250 padding:2px;
251 }
251 }
252
252
253 tr.ListHead {
253 tr.ListHead {
254 background-color:#467aa7;
254 background-color:#467aa7;
255 color:#FFFFFF;
255 color:#FFFFFF;
256 text-align:center;
256 text-align:center;
257 }
257 }
258
258
259 tr.ListHead a {
259 tr.ListHead a {
260 color:#FFFFFF;
260 color:#FFFFFF;
261 text-decoration:underline;
261 text-decoration:underline;
262 }
262 }
263
263
264 .odd {
264 .odd {
265 background-color:#f0f1f2;
265 background-color:#f0f1f2;
266 }
266 }
267 .even {
267 .even {
268 background-color: #fff;
268 background-color: #fff;
269 }
269 }
270
270
271 table.reportTableContent {
271 table.reportTableContent {
272 border:1px solid #c0c0c0;
272 border:1px solid #c0c0c0;
273 width:99%;
273 width:99%;
274 border-collapse: collapse;
274 border-collapse: collapse;
275 }
275 }
276
276
277 table.reportTableContent td {
277 table.reportTableContent td {
278 padding:2px;
278 padding:2px;
279 }
279 }
280
280
281 table.calenderTable {
281 table.calenderTable {
282 border:1px solid #578bb8;
282 border:1px solid #578bb8;
283 width:99%;
283 width:99%;
284 border-collapse: collapse;
284 border-collapse: collapse;
285 }
285 }
286
286
287 table.calenderTable td {
287 table.calenderTable td {
288 border:1px solid #578bb8;
288 border:1px solid #578bb8;
289 }
289 }
290
290
291 hr { border:none; border-bottom: dotted 1px #c0c0c0; }
291 hr { border:none; border-bottom: dotted 1px #c0c0c0; }
292
292
293
293
294 /**************** Sidebar styles ****************/
294 /**************** Sidebar styles ****************/
295
295
296 #subcontent{
296 #subcontent{
297 position: absolute;
297 position: absolute;
298 left: 0px;
298 left: 0px;
299 width:110px;
299 width:110px;
300 padding:20px 20px 10px 5px;
300 padding:20px 20px 10px 5px;
301 }
301 }
302
302
303 #subcontent h2{
303 #subcontent h2{
304 display:block;
304 display:block;
305 margin:0 0 5px 0;
305 margin:0 0 5px 0;
306 font-size:1.0em;
306 font-size:1.0em;
307 font-weight:bold;
307 font-weight:bold;
308 text-align:left;
308 text-align:left;
309 color:#606060;
309 color:#606060;
310 background-color:inherit;
310 background-color:inherit;
311 font-family: Trebuchet MS,Georgia,"Times New Roman",serif;
311 font-family: Trebuchet MS,Georgia,"Times New Roman",serif;
312 }
312 }
313
313
314 #subcontent p{margin:0 0 16px 0; font-size:0.9em;}
314 #subcontent p{margin:0 0 16px 0; font-size:0.9em;}
315
315
316 /**************** Menublock styles ****************/
316 /**************** Menublock styles ****************/
317
317
318 .menublock{margin:0 0 20px 8px; font-size:0.8em;}
318 .menublock{margin:0 0 20px 8px; font-size:0.8em;}
319 .menublock li{list-style:none; display:block; padding:1px; margin-bottom:0px;}
319 .menublock li{list-style:none; display:block; padding:1px; margin-bottom:0px;}
320 .menublock li a{font-weight:bold; text-decoration:none;}
320 .menublock li a{font-weight:bold; text-decoration:none;}
321 .menublock li a:hover{text-decoration:none;}
321 .menublock li a:hover{text-decoration:none;}
322 .menublock li ul{margin:0; font-size:1em; font-weight:normal;}
322 .menublock li ul{margin:0; font-size:1em; font-weight:normal;}
323 .menublock li ul li{margin-bottom:0;}
323 .menublock li ul li{margin-bottom:0;}
324 .menublock li ul a{font-weight:normal;}
324 .menublock li ul a{font-weight:normal;}
325
325
326 /**************** Searchbar styles ****************/
326 /**************** Searchbar styles ****************/
327
327
328 #searchbar{margin:0 0 20px 0;}
328 #searchbar{margin:0 0 20px 0;}
329 #searchbar form fieldset{margin-left:10px; border:0 solid;}
329 #searchbar form fieldset{margin-left:10px; border:0 solid;}
330
330
331 #searchbar #s{
331 #searchbar #s{
332 height:1.2em;
332 height:1.2em;
333 width:110px;
333 width:110px;
334 margin:0 5px 0 0;
334 margin:0 5px 0 0;
335 border:1px solid #a0a0a0;
335 border:1px solid #a0a0a0;
336 }
336 }
337
337
338 #searchbar #searchbutton{
338 #searchbar #searchbutton{
339 width:auto;
339 width:auto;
340 padding:0 1px;
340 padding:0 1px;
341 border:1px solid #808080;
341 border:1px solid #808080;
342 font-size:0.9em;
342 font-size:0.9em;
343 text-align:center;
343 text-align:center;
344 }
344 }
345
345
346 /**************** Footer styles ****************/
346 /**************** Footer styles ****************/
347
347
348 #footer{
348 #footer{
349 clear:both;
349 clear:both;
350 /*width:758px;*/
350 /*width:758px;*/
351 padding:5px 0;
351 padding:5px 0;
352 margin:0;
352 margin:0;
353 font-size:0.9em;
353 font-size:0.9em;
354 color:#f0f0f0;
354 color:#f0f0f0;
355 background:#467aa7;
355 background:#467aa7;
356 }
356 }
357
357
358 #footer p{padding:0; margin:0; text-align:center;}
358 #footer p{padding:0; margin:0; text-align:center;}
359 #footer a{color:#f0f0f0; background-color:inherit; font-weight:bold;}
359 #footer a{color:#f0f0f0; background-color:inherit; font-weight:bold;}
360 #footer a:hover{color:#ffffff; background-color:inherit; text-decoration: underline;}
360 #footer a:hover{color:#ffffff; background-color:inherit; text-decoration: underline;}
361
361
362 /**************** Misc classes and styles ****************/
362 /**************** Misc classes and styles ****************/
363
363
364 .splitcontentleft{float:left; width:49%;}
364 .splitcontentleft{float:left; width:49%;}
365 .splitcontentright{float:right; width:49%;}
365 .splitcontentright{float:right; width:49%;}
366 .clear{clear:both;}
366 .clear{clear:both;}
367 .small{font-size:0.8em;line-height:1.4em;padding:0 0 0 0;}
367 .small{font-size:0.8em;line-height:1.4em;padding:0 0 0 0;}
368 .hide{display:none;}
368 .hide{display:none;}
369 .textcenter{text-align:center;}
369 .textcenter{text-align:center;}
370 .textright{text-align:right;}
370 .textright{text-align:right;}
371 .important{color:#f02025; background-color:inherit; font-weight:bold;}
371 .important{color:#f02025; background-color:inherit; font-weight:bold;}
372
372
373 .box{
373 .box{
374 margin:0 0 20px 0;
374 margin:0 0 20px 0;
375 padding:10px;
375 padding:10px;
376 border:1px solid #c0c0c0;
376 border:1px solid #c0c0c0;
377 background-color:#fafbfc;
377 background-color:#fafbfc;
378 color:#505050;
378 color:#505050;
379 line-height:1.5em;
379 line-height:1.5em;
380 }
380 }
381
381
382 a.close-icon {
383 display:block;
384 margin-top:3px;
385 overflow:hidden;
386 width:12px;
387 height:12px;
388 background-repeat: no-repeat;
389 cursor:hand;
390 cursor:pointer;
391 background-image:url('../images/close.png');
392 }
393
394 a.close-icon:hover {
395 background-image:url('../images/close_hl.png');
396 }
397
382 .rightbox{
398 .rightbox{
383 background: #fafbfc;
399 background: #fafbfc;
384 border: 1px solid #c0c0c0;
400 border: 1px solid #c0c0c0;
385 float: right;
401 float: right;
386 padding: 8px;
402 padding: 8px;
387 position: relative;
403 position: relative;
388 margin: 0 5px 5px;
404 margin: 0 5px 5px;
389 }
405 }
390
406
407 .layout-active {
408 background: #ECF3E1;
409 }
410
411 .block-receiver {
412 border:1px dashed #c0c0c0;
413 margin-bottom: 20px;
414 padding: 15px 0 15px 0;
415 }
416
417 .mypage-box {
418 margin:0 0 20px 0;
419 color:#505050;
420 line-height:1.5em;
421 }
422
423 .blocks {
424 cursor: move;
425 }
426
391 .topright{
427 .topright{
392 position: absolute;
428 position: absolute;
393 right: 25px;
429 right: 25px;
394 top: 100px;
430 top: 100px;
395 }
431 }
396
432
397 .login {
433 .login {
398 width: 50%;
434 width: 50%;
399 text-align: left;
435 text-align: left;
400 }
436 }
401
437
402 img.calendar-trigger {
438 img.calendar-trigger {
403 cursor: pointer;
439 cursor: pointer;
404 vertical-align: middle;
440 vertical-align: middle;
405 margin-left: 4px;
441 margin-left: 4px;
406 }
442 }
407
443
408 #history h4 {
444 #history h4 {
409 font-size: 1em;
445 font-size: 1em;
410 margin-bottom: 12px;
446 margin-bottom: 12px;
411 margin-top: 20px;
447 margin-top: 20px;
412 font-weight: normal;
448 font-weight: normal;
413 border-bottom: dotted 1px #c0c0c0;
449 border-bottom: dotted 1px #c0c0c0;
414 }
450 }
415
451
416 #history p {
452 #history p {
417 margin-left: 34px;
453 margin-left: 34px;
418 }
454 }
419
455
420 /***** CSS FORM ******/
456 /***** CSS FORM ******/
421 .tabular p{
457 .tabular p{
422 margin: 0;
458 margin: 0;
423 padding: 5px 0 8px 0;
459 padding: 5px 0 8px 0;
424 padding-left: 180px; /*width of left column containing the label elements*/
460 padding-left: 180px; /*width of left column containing the label elements*/
425 height: 1%;
461 height: 1%;
426 }
462 }
427
463
428 .tabular label{
464 .tabular label{
429 font-weight: bold;
465 font-weight: bold;
430 float: left;
466 float: left;
431 margin-left: -180px; /*width of left column*/
467 margin-left: -180px; /*width of left column*/
432 width: 175px; /*width of labels. Should be smaller than left column to create some right
468 width: 175px; /*width of labels. Should be smaller than left column to create some right
433 margin*/
469 margin*/
434 }
470 }
435
471
436 .error {
472 .error {
437 color: #cc0000;
473 color: #cc0000;
438 }
474 }
439
475
440
476
441 /*.threepxfix class below:
477 /*.threepxfix class below:
442 Targets IE6- ONLY. Adds 3 pixel indent for multi-line form contents.
478 Targets IE6- ONLY. Adds 3 pixel indent for multi-line form contents.
443 to account for 3 pixel bug: http://www.positioniseverything.net/explorer/threepxtest.html
479 to account for 3 pixel bug: http://www.positioniseverything.net/explorer/threepxtest.html
444 */
480 */
445
481
446 * html .threepxfix{
482 * html .threepxfix{
447 margin-left: 3px;
483 margin-left: 3px;
448 } No newline at end of file
484 }
@@ -1,100 +1,100
1 # redMine - project management software
1 # redMine - project management software
2 # Copyright (C) 2006 Jean-Philippe Lang
2 # Copyright (C) 2006 Jean-Philippe Lang
3 #
3 #
4 # This program is free software; you can redistribute it and/or
4 # This program is free software; you can redistribute it and/or
5 # modify it under the terms of the GNU General Public License
5 # modify it under the terms of the GNU General Public License
6 # as published by the Free Software Foundation; either version 2
6 # as published by the Free Software Foundation; either version 2
7 # of the License, or (at your option) any later version.
7 # of the License, or (at your option) any later version.
8 #
8 #
9 # This program is distributed in the hope that it will be useful,
9 # This program is distributed in the hope that it will be useful,
10 # but WITHOUT ANY WARRANTY; without even the implied warranty of
10 # but WITHOUT ANY WARRANTY; without even the implied warranty of
11 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 # GNU General Public License for more details.
12 # GNU General Public License for more details.
13 #
13 #
14 # You should have received a copy of the GNU General Public License
14 # You should have received a copy of the GNU General Public License
15 # along with this program; if not, write to the Free Software
15 # along with this program; if not, write to the Free Software
16 # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
16 # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
17
17
18 require "#{File.dirname(__FILE__)}/../test_helper"
18 require "#{File.dirname(__FILE__)}/../test_helper"
19
19
20 class AccountTest < ActionController::IntegrationTest
20 class AccountTest < ActionController::IntegrationTest
21 fixtures :users
21 fixtures :users
22
22
23 # Replace this with your real tests.
23 # Replace this with your real tests.
24 def test_login
24 def test_login
25 get "account/my_page"
25 get "my/page"
26 assert_redirected_to "account/login"
26 assert_redirected_to "account/login"
27 log_user('jsmith', 'jsmith')
27 log_user('jsmith', 'jsmith')
28
28
29 get "account/my_account"
29 get "my/account"
30 assert_response :success
30 assert_response :success
31 assert_template "account/my_account"
31 assert_template "my/account"
32 end
32 end
33
33
34 def test_change_password
34 def test_change_password
35 log_user('jsmith', 'jsmith')
35 log_user('jsmith', 'jsmith')
36 get "account/my_account"
36 get "my/account"
37 assert_response :success
37 assert_response :success
38 assert_template "account/my_account"
38 assert_template "my/account"
39
39
40 post "account/change_password", :password => 'jsmith', :new_password => "hello", :new_password_confirmation => "hello2"
40 post "my/change_password", :password => 'jsmith', :new_password => "hello", :new_password_confirmation => "hello2"
41 assert_response :success
41 assert_response :success
42 assert_template "account/my_account"
42 assert_template "my/account"
43 assert_tag :tag => "div", :attributes => { :class => "errorExplanation" }
43 assert_tag :tag => "div", :attributes => { :class => "errorExplanation" }
44
44
45 post "account/change_password", :password => 'jsmithZZ', :new_password => "hello", :new_password_confirmation => "hello"
45 post "my/change_password", :password => 'jsmithZZ', :new_password => "hello", :new_password_confirmation => "hello"
46 assert_redirected_to "account/my_account"
46 assert_redirected_to "my/account"
47 assert_equal 'Wrong password', flash[:notice]
47 assert_equal 'Wrong password', flash[:notice]
48
48
49 post "account/change_password", :password => 'jsmith', :new_password => "hello", :new_password_confirmation => "hello"
49 post "my/change_password", :password => 'jsmith', :new_password => "hello", :new_password_confirmation => "hello"
50 assert_redirected_to "account/my_account"
50 assert_redirected_to "my/account"
51 log_user('jsmith', 'hello')
51 log_user('jsmith', 'hello')
52 end
52 end
53
53
54 def test_my_account
54 def test_my_account
55 log_user('jsmith', 'jsmith')
55 log_user('jsmith', 'jsmith')
56 get "account/my_account"
56 get "my/account"
57 assert_response :success
57 assert_response :success
58 assert_template "account/my_account"
58 assert_template "my/account"
59
59
60 post "account/my_account", :user => {:firstname => "Joe", :login => "root", :admin => 1}
60 post "my/account", :user => {:firstname => "Joe", :login => "root", :admin => 1}
61 assert_response :success
61 assert_response :success
62 assert_template "account/my_account"
62 assert_template "my/account"
63 user = User.find(2)
63 user = User.find(2)
64 assert_equal "Joe", user.firstname
64 assert_equal "Joe", user.firstname
65 assert_equal "jsmith", user.login
65 assert_equal "jsmith", user.login
66 assert_equal false, user.admin?
66 assert_equal false, user.admin?
67 end
67 end
68
68
69 def test_my_page
69 def test_my_page
70 log_user('jsmith', 'jsmith')
70 log_user('jsmith', 'jsmith')
71 get "account/my_page"
71 get "my/page"
72 assert_response :success
72 assert_response :success
73 assert_template "account/my_page"
73 assert_template "my/page"
74 end
74 end
75
75
76 def test_lost_password
76 def test_lost_password
77 get "account/lost_password"
77 get "account/lost_password"
78 assert_response :success
78 assert_response :success
79 assert_template "account/lost_password"
79 assert_template "account/lost_password"
80
80
81 post "account/lost_password", :mail => 'jsmith@somenet.foo'
81 post "account/lost_password", :mail => 'jsmith@somenet.foo'
82 assert_redirected_to "account/login"
82 assert_redirected_to "account/login"
83
83
84 token = Token.find(:first)
84 token = Token.find(:first)
85 assert_equal 'recovery', token.action
85 assert_equal 'recovery', token.action
86 assert_equal 'jsmith@somenet.foo', token.user.mail
86 assert_equal 'jsmith@somenet.foo', token.user.mail
87 assert !token.expired?
87 assert !token.expired?
88
88
89 get "account/lost_password", :token => token.value
89 get "account/lost_password", :token => token.value
90 assert_response :success
90 assert_response :success
91 assert_template "account/password_recovery"
91 assert_template "account/password_recovery"
92
92
93 post "account/lost_password", :token => token.value, :new_password => 'newpass', :new_password_confirmation => 'newpass'
93 post "account/lost_password", :token => token.value, :new_password => 'newpass', :new_password_confirmation => 'newpass'
94 assert_redirected_to "account/login"
94 assert_redirected_to "account/login"
95 assert_equal 'Password was successfully updated.', flash[:notice]
95 assert_equal 'Password was successfully updated.', flash[:notice]
96
96
97 log_user('jsmith', 'newpass')
97 log_user('jsmith', 'newpass')
98 assert_equal 0, Token.count
98 assert_equal 0, Token.count
99 end
99 end
100 end
100 end
@@ -1,55 +1,55
1 # redMine - project management software
1 # redMine - project management software
2 # Copyright (C) 2006 Jean-Philippe Lang
2 # Copyright (C) 2006 Jean-Philippe Lang
3 #
3 #
4 # This program is free software; you can redistribute it and/or
4 # This program is free software; you can redistribute it and/or
5 # modify it under the terms of the GNU General Public License
5 # modify it under the terms of the GNU General Public License
6 # as published by the Free Software Foundation; either version 2
6 # as published by the Free Software Foundation; either version 2
7 # of the License, or (at your option) any later version.
7 # of the License, or (at your option) any later version.
8 #
8 #
9 # This program is distributed in the hope that it will be useful,
9 # This program is distributed in the hope that it will be useful,
10 # but WITHOUT ANY WARRANTY; without even the implied warranty of
10 # but WITHOUT ANY WARRANTY; without even the implied warranty of
11 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 # GNU General Public License for more details.
12 # GNU General Public License for more details.
13 #
13 #
14 # You should have received a copy of the GNU General Public License
14 # You should have received a copy of the GNU General Public License
15 # along with this program; if not, write to the Free Software
15 # along with this program; if not, write to the Free Software
16 # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
16 # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
17
17
18 ENV["RAILS_ENV"] ||= "test"
18 ENV["RAILS_ENV"] ||= "test"
19 require File.expand_path(File.dirname(__FILE__) + "/../config/environment")
19 require File.expand_path(File.dirname(__FILE__) + "/../config/environment")
20 require 'test_help'
20 require 'test_help'
21
21
22 class Test::Unit::TestCase
22 class Test::Unit::TestCase
23 # Transactional fixtures accelerate your tests by wrapping each test method
23 # Transactional fixtures accelerate your tests by wrapping each test method
24 # in a transaction that's rolled back on completion. This ensures that the
24 # in a transaction that's rolled back on completion. This ensures that the
25 # test database remains unchanged so your fixtures don't have to be reloaded
25 # test database remains unchanged so your fixtures don't have to be reloaded
26 # between every test method. Fewer database queries means faster tests.
26 # between every test method. Fewer database queries means faster tests.
27 #
27 #
28 # Read Mike Clark's excellent walkthrough at
28 # Read Mike Clark's excellent walkthrough at
29 # http://clarkware.com/cgi/blosxom/2005/10/24#Rails10FastTesting
29 # http://clarkware.com/cgi/blosxom/2005/10/24#Rails10FastTesting
30 #
30 #
31 # Every Active Record database supports transactions except MyISAM tables
31 # Every Active Record database supports transactions except MyISAM tables
32 # in MySQL. Turn off transactional fixtures in this case; however, if you
32 # in MySQL. Turn off transactional fixtures in this case; however, if you
33 # don't care one way or the other, switching from MyISAM to InnoDB tables
33 # don't care one way or the other, switching from MyISAM to InnoDB tables
34 # is recommended.
34 # is recommended.
35 self.use_transactional_fixtures = true
35 self.use_transactional_fixtures = true
36
36
37 # Instantiated fixtures are slow, but give you @david where otherwise you
37 # Instantiated fixtures are slow, but give you @david where otherwise you
38 # would need people(:david). If you don't want to migrate your existing
38 # would need people(:david). If you don't want to migrate your existing
39 # test cases which use the @david style and don't mind the speed hit (each
39 # test cases which use the @david style and don't mind the speed hit (each
40 # instantiated fixtures translates to a database query per test method),
40 # instantiated fixtures translates to a database query per test method),
41 # then set this back to true.
41 # then set this back to true.
42 self.use_instantiated_fixtures = false
42 self.use_instantiated_fixtures = false
43
43
44 # Add more helper methods to be used by all tests here...
44 # Add more helper methods to be used by all tests here...
45
45
46 def log_user(login, password)
46 def log_user(login, password)
47 get "/account/login"
47 get "/account/login"
48 assert_equal nil, session[:user_id]
48 assert_equal nil, session[:user_id]
49 assert_response :success
49 assert_response :success
50 assert_template "account/login"
50 assert_template "account/login"
51 post "/account/login", :login => login, :password => password
51 post "/account/login", :login => login, :password => password
52 assert_redirected_to "account/my_page"
52 assert_redirected_to "my/page"
53 assert_equal login, User.find(session[:user_id]).login
53 assert_equal login, User.find(session[:user_id]).login
54 end
54 end
55 end
55 end
1 NO CONTENT: file was removed
NO CONTENT: file was removed
General Comments 0
You need to be logged in to leave comments. Login now