typus 0.9.27 → 0.9.28

Sign up to get free protection for your applications and to get access to all the features.
Files changed (42) hide show
  1. data/README.rdoc +1 -1
  2. data/Rakefile +1 -1
  3. data/VERSION +1 -1
  4. data/app/controllers/admin/master_controller.rb +31 -9
  5. data/app/controllers/typus_controller.rb +6 -2
  6. data/app/helpers/admin/form_helper.rb +10 -3
  7. data/app/helpers/admin/sidebar_helper.rb +30 -14
  8. data/app/helpers/admin/table_helper.rb +38 -27
  9. data/app/views/admin/dashboard/_sidebar.html.erb +1 -1
  10. data/app/views/admin/resources/show.html.erb +18 -3
  11. data/app/views/admin/shared/_pagination.html.erb +4 -4
  12. data/config/locales/de.yml +1 -4
  13. data/config/locales/es.yml +1 -4
  14. data/config/locales/fr.yml +99 -0
  15. data/config/locales/language.yml.template +81 -88
  16. data/config/locales/pt-BR.yml +17 -23
  17. data/config/locales/ru.yml +1 -6
  18. data/generators/typus/templates/config/initializers/typus.rb +2 -1
  19. data/generators/typus/templates/public/stylesheets/admin/screen.css +6 -3
  20. data/lib/typus/active_record.rb +6 -8
  21. data/lib/typus/authentication.rb +5 -8
  22. data/lib/typus/configuration.rb +2 -1
  23. data/lib/typus/user.rb +22 -22
  24. data/lib/typus.rb +13 -1
  25. data/lib/vendor/rss_parser.rb +20 -0
  26. data/test/functional/admin/assets_controller_test.rb +3 -4
  27. data/test/functional/admin/categories_controller_test.rb +1 -2
  28. data/test/functional/admin/comments_controller_test.rb +3 -2
  29. data/test/functional/admin/master_controller_test.rb +46 -0
  30. data/test/functional/admin/posts_controller_test.rb +41 -2
  31. data/test/functional/admin/status_controller_test.rb +1 -2
  32. data/test/functional/admin/typus_users_controller_test.rb +1 -2
  33. data/test/functional/typus_controller_test.rb +12 -9
  34. data/test/helpers/admin/sidebar_helper_test.rb +25 -1
  35. data/test/helpers/admin/table_helper_test.rb +30 -1
  36. data/test/lib/active_record_test.rb +5 -0
  37. data/test/lib/configuration_test.rb +2 -1
  38. data/test/lib/typus_test.rb +10 -0
  39. data/test/unit/typus_user_test.rb +2 -2
  40. data/test/vendor/paginator_test.rb +2 -0
  41. data/typus.gemspec +4 -2
  42. metadata +4 -2
data/README.rdoc CHANGED
@@ -141,7 +141,7 @@ This feature is a work in progress. Only previews images.
141
141
  - Komzák Nándor (Code, bugfixes & feedback) http://github.com/rubymood
142
142
  - Michael Grunewalder (German translation) http://michael.grunewalder.com
143
143
  - Tim Harvey (Code) http://www.timharvey.net/
144
- - Ned Baldessin (Code) http://github.com/nedbaldessin
144
+ - Ned Baldessin (French translation and code) http://github.com/nedbaldessin
145
145
  - Robert Rouse (Code) - Ruby 1.9 compatibility fixes.
146
146
 
147
147
  == Acknowledgments
data/Rakefile CHANGED
@@ -57,5 +57,5 @@ begin
57
57
  gemspec.authors = ["Francesc Esplugas"]
58
58
  end
59
59
  rescue LoadError
60
- puts "Jeweler not available. Install it with: sudo gem install technicalpickles-jeweler -s http://gems.github.com"
60
+ puts "Jeweler not available. Install it with: sudo gem install jeweler -s http://gemcutter.org"
61
61
  end
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.9.27
1
+ 0.9.28
@@ -67,6 +67,8 @@ class Admin::MasterController < ApplicationController
67
67
 
68
68
  def new
69
69
 
70
+ check_ownership_of_referal_item
71
+
70
72
  item_params = params.dup
71
73
  %w( controller action resource resource_id back_to selected ).each do |param|
72
74
  item_params.delete(param)
@@ -87,7 +89,7 @@ class Admin::MasterController < ApplicationController
87
89
 
88
90
  @item = @resource[:class].new(params[:item])
89
91
 
90
- if @item.attributes.include?(Typus.user_fk)
92
+ if @resource[:class].typus_user_id?
91
93
  @item.attributes = { Typus.user_fk => @current_user.id }
92
94
  end
93
95
 
@@ -130,7 +132,13 @@ class Admin::MasterController < ApplicationController
130
132
  end
131
133
 
132
134
  def update
135
+
133
136
  if @item.update_attributes(params[:item])
137
+
138
+ if @resource[:class].typus_user_id? && !@current_user.is_root?
139
+ @item.update_attributes Typus.user_fk => @current_user.id
140
+ end
141
+
134
142
  flash[:success] = _("{{model}} successfully updated.", :model => @resource[:class].typus_human_name)
135
143
  path = if @resource[:class].typus_options_for(:index_after_save)
136
144
  params[:back_to] ? "#{params[:back_to]}##{@resource[:self]}" : { :action => 'index' }
@@ -138,10 +146,14 @@ class Admin::MasterController < ApplicationController
138
146
  { :action => @resource[:class].typus_options_for(:default_action_on_item), :id => @item.id, :back_to => params[:back_to] }
139
147
  end
140
148
  redirect_to path
149
+
141
150
  else
151
+
142
152
  @previous, @next = @item.previous_and_next
143
153
  select_template :edit
154
+
144
155
  end
156
+
145
157
  end
146
158
 
147
159
  def destroy
@@ -247,16 +259,19 @@ private
247
259
  # If item is owned by another user, we only can perform a
248
260
  # show action on the item. Updated item is also blocked.
249
261
  #
250
- # before_filter :check_ownership_of_item, :only => [ :edit, :update, :destroy ]
262
+ # before_filter :check_ownership_of_item, :only => [ :edit, :update, :destroy,
263
+ # :toggle, :position,
264
+ # :relate, :unrelate ]
251
265
  #
252
266
  def check_ownership_of_item
253
267
 
254
- # If current_user is a root user, by-pass.
268
+ # By-pass if current_user is root.
255
269
  return if @current_user.is_root?
256
270
 
257
- # OPTIMIZE: `typus_users` is currently hard-coded. We should find a good name for this option.
258
- if @item.respond_to?('typus_users') && !@item.send('typus_users').include?(@current_user) ||
259
- @item.respond_to?(Typus.user_fk) && !@item.owned_by?(@current_user)
271
+ condition_typus_users = @item.respond_to?(Typus.relationship) && !@item.send(Typus.relationship).include?(@current_user)
272
+ condition_typus_user_id = @item.respond_to?(Typus.user_fk) && !@item.owned_by?(@current_user)
273
+
274
+ if condition_typus_users || condition_typus_user_id
260
275
  flash[:notice] = _("You don't have permission to access this item.")
261
276
  redirect_to request.referer || admin_dashboard_path
262
277
  end
@@ -268,9 +283,8 @@ private
268
283
  # By-pass if current_user is root.
269
284
  return if @current_user.is_root?
270
285
 
271
- # If current user is not root and @resource has a foreign_key which
272
- # is related to the logged user (Typus.user_fk) we only show the user
273
- # related items.
286
+ # Show only related items it @resource has a foreign_key (Typus.user_fk)
287
+ # related to the logged user.
274
288
  if @resource[:class].typus_user_id?
275
289
  condition = { Typus.user_fk => @current_user }
276
290
  @conditions = @resource[:class].merge_conditions(@conditions, condition)
@@ -278,6 +292,14 @@ private
278
292
 
279
293
  end
280
294
 
295
+ def check_ownership_of_referal_item
296
+ return unless params[:resource] && params[:resource_id]
297
+ klass = params[:resource].classify.constantize
298
+ return if !klass.typus_user_id?
299
+ item = klass.find(params[:resource_id])
300
+ raise "You're not owner of this record." unless item.owned_by?(@current_user)
301
+ end
302
+
281
303
  def set_fields
282
304
  @fields = case params[:action]
283
305
  when 'index'
@@ -102,8 +102,12 @@ class TypusController < ApplicationController
102
102
 
103
103
  if request.post?
104
104
 
105
- email, password = params[:user][:email], 'columbia'
106
- user = Typus.user_class.generate(email, password)
105
+ password = 'columbia'
106
+
107
+ user = Typus.user_class.generate(:email => params[:user][:email],
108
+ :password => 'columbia',
109
+ :role => Typus::Configuration.options[:root])
110
+ user.status = true
107
111
 
108
112
  if user.save
109
113
  session[:typus_user_id] = user.id
@@ -203,7 +203,6 @@ module Admin::FormHelper
203
203
 
204
204
  def typus_relationships
205
205
 
206
- # OPTIMIZE
207
206
  @back_to = '/' + [ params[:controller], params[:action], params[:id] ].compact.join('/')
208
207
 
209
208
  returning(String.new) do |html|
@@ -297,16 +296,24 @@ module Admin::FormHelper
297
296
  reflection = @resource[:class].reflect_on_association(field.to_sym)
298
297
  association = reflection.macro
299
298
 
299
+ condition = !(@resource[:class].typus_user_id? && @current_user.id == @item.send(Typus.user_fk))
300
+
301
+ unless condition
302
+ add_new = <<-HTML
303
+ <small>#{link_to _("Add new"), :controller => field, :action => 'new', :back_to => @back_to, :resource => @resource[:self], :resource_id => @item.id if @current_user.can_perform?(model_to_relate, 'create')}</small>
304
+ HTML
305
+ end
306
+
300
307
  html << <<-HTML
301
308
  <a name="#{field}"></a>
302
309
  <div class="box_relationships">
303
310
  <h2>
304
311
  #{link_to model_to_relate.typus_human_name.pluralize, :controller => "admin/#{model_to_relate_as_resource}"}
305
- <small>#{link_to _("Add new"), :controller => field, :action => 'new', :back_to => @back_to, :resource => @resource[:self], :resource_id => @item.id if @current_user.can_perform?(model_to_relate, 'create')}</small>
312
+ #{add_new}
306
313
  </h2>
307
314
  HTML
308
315
  items_to_relate = (model_to_relate.find(:all) - @item.send(field))
309
- unless items_to_relate.empty?
316
+ unless condition || items_to_relate.empty?
310
317
  html << <<-HTML
311
318
  #{form_tag :action => 'relate', :id => @item.id}
312
319
  #{hidden_field :related, :model, :value => model_to_relate}
@@ -28,18 +28,14 @@ module Admin::SidebarHelper
28
28
  end
29
29
  end
30
30
 
31
- # OPTIMIZE
32
31
  case params[:action]
33
32
  when 'show'
34
- if @current_user.can_perform?(@resource[:class], 'update')
35
- if @item.typus_user_id?
36
- if @item.owned_by?(@current_user)
37
- items << (link_to _("Edit entry"), :action => 'edit', :id => @item.id)
38
- end
39
- else
40
- items << (link_to _("Edit entry"), :action => 'edit', :id => @item.id)
41
- end
42
- end
33
+ condition = if @resource[:class].typus_user_id? && !@current_user.is_root?
34
+ @item.owned_by?(@current_user)
35
+ else
36
+ @current_user.can_perform?(@resource[:class], 'destroy')
37
+ end
38
+ items << (link_to _("Edit entry"), :action => 'edit', :id => @item.id) if condition
43
39
  end
44
40
 
45
41
  @resource[:class].typus_actions_for(params[:action]).each do |action|
@@ -89,12 +85,32 @@ module Admin::SidebarHelper
89
85
 
90
86
  end
91
87
 
92
- def previous_and_next
88
+ def previous_and_next(klass = @resource[:class])
89
+
93
90
  return [] unless %w( edit show update ).include?(params[:action])
91
+
92
+ # Verify ownership of record to define the kind of action which can be
93
+ # performed on the record.
94
+
94
95
  returning(Array.new) do |items|
95
- items << (link_to _("Next"), params.merge(:id => @next.id)) if @next
96
- items << (link_to _("Previous"), params.merge(:id => @previous.id)) if @previous
96
+ if @next
97
+ action = if klass.typus_user_id? && !@current_user.is_root?
98
+ @next.owned_by?(@current_user) ? 'edit' : 'show'
99
+ else
100
+ !@current_user.can_perform?(klass, 'edit') ? 'show' : params[:action]
101
+ end
102
+ items << (link_to _("Next"), params.merge(:action => action, :id => @next.id))
103
+ end
104
+ if @previous
105
+ action = if klass.typus_user_id? && !@current_user.is_root?
106
+ @previous.owned_by?(@current_user) ? 'edit' : 'show'
107
+ else
108
+ !@current_user.can_perform?(klass, 'edit') ? 'show' : params[:action]
109
+ end
110
+ items << (link_to _("Previous"), params.merge(:action => action, :id => @previous.id))
111
+ end
97
112
  end
113
+
98
114
  end
99
115
 
100
116
  def search
@@ -178,7 +194,7 @@ function surfto_#{model_pluralized}(form) {
178
194
  <!-- /Embedded JS -->
179
195
  <form class="form" action="#"><p>
180
196
  <select name="#{model_pluralized}" onChange="surfto_#{model_pluralized}(this.form)">
181
- <option value="#{url_for params_without_filter}">#{_("filter by")} #{_(model.typus_human_name)}</option>
197
+ <option value="#{url_for params_without_filter}">#{_("Filter by")} #{_(model.typus_human_name)}</option>
182
198
  #{items.join("\n")}
183
199
  </select>
184
200
  </p></form>
@@ -33,7 +33,7 @@ module Admin::TableHelper
33
33
  end
34
34
  end
35
35
 
36
- action = if item.typus_user_id? && !@current_user.is_root?
36
+ action = if model.typus_user_id? && !@current_user.is_root?
37
37
  # If there's a typus_user_id column on the table and logged user is not root ...
38
38
  item.owned_by?(@current_user) ? 'edit' : 'show'
39
39
  elsif !@current_user.can_perform?(model, 'edit')
@@ -47,46 +47,57 @@ module Admin::TableHelper
47
47
  <td width="10px">#{content}</td>
48
48
  HTML
49
49
 
50
- ##
51
- # This controls the action to perform. If we are on a model list we
52
- # will remove the entry, but if we inside a model we will remove the
53
- # relationship between the models.
54
- #
55
- # Only shown is the user can destroy items.
56
- #
57
- if @current_user.can_perform?(model, 'delete')
50
+ ##
51
+ # This controls the action to perform. If we are on a model list we
52
+ # will remove the entry, but if we inside a model we will remove the
53
+ # relationship between the models.
54
+ #
55
+ # Only shown is the user can destroy/unrelate items.
56
+ #
58
57
 
59
58
  trash = "<div class=\"sprite trash\">Trash</div>"
59
+ unrelate = "<div class=\"sprite unrelate\">Unrelate</div>"
60
60
 
61
61
  case params[:action]
62
62
  when 'index'
63
- perform = link_to trash, { :action => 'destroy',
64
- :id => item.id },
63
+ condition = if model.typus_user_id? && !@current_user.is_root?
64
+ item.owned_by?(@current_user)
65
+ else
66
+ @current_user.can_perform?(model, 'destroy')
67
+ end
68
+ perform = link_to trash, { :action => 'destroy', :id => item.id },
69
+ :title => _("Remove"),
65
70
  :confirm => _("Remove entry?"),
66
- :method => :delete
67
- else
68
- perform = link_to trash, { :action => 'unrelate',
69
- :id => params[:id],
70
- :association => association,
71
- :resource => model,
72
- :resource_id => item.id },
73
- :confirm => _("Unrelate {{unrelate_model}} from {{unrelate_model_from}}?",
74
- :unrelate_model => model.typus_human_name,
75
- :unrelate_model_from => @resource[:class].typus_human_name)
71
+ :method => :delete if condition
72
+ when 'edit'
73
+ # If we are editing content, we can relate and unrelate always!
74
+ perform = link_to unrelate, { :action => 'unrelate', :id => params[:id], :association => association, :resource => model, :resource_id => item.id },
75
+ :title => _("Unrelate"),
76
+ :confirm => _("Unrelate {{unrelate_model}} from {{unrelate_model_from}}?",
77
+ :unrelate_model => model.typus_human_name,
78
+ :unrelate_model_from => @resource[:class].typus_human_name)
79
+ when 'show'
80
+ # If we are showing content, we only can relate and unrelate if we are
81
+ # the owners of the owner record.
82
+ # If the owner record doesn't have a foreign key (Typus.user_fk) we look
83
+ # each item to verify the ownership.
84
+ condition = if @resource[:class].typus_user_id? && !@current_user.is_root?
85
+ @item.owned_by?(@current_user)
86
+ end
87
+ perform = link_to unrelate, { :action => 'unrelate', :id => params[:id], :association => association, :resource => model, :resource_id => item.id },
88
+ :title => _("Unrelate"),
89
+ :confirm => _("Unrelate {{unrelate_model}} from {{unrelate_model_from}}?",
90
+ :unrelate_model => model.typus_human_name,
91
+ :unrelate_model_from => @resource[:class].typus_human_name) if condition
76
92
  end
77
93
 
78
94
  html << <<-HTML
79
95
  <td width="10px">#{perform}</td>
96
+ </tr>
80
97
  HTML
81
98
 
82
99
  end
83
100
 
84
- html << <<-HTML
85
- </tr>
86
- HTML
87
-
88
- end
89
-
90
101
  html << "</table>"
91
102
 
92
103
  end
@@ -2,6 +2,6 @@
2
2
 
3
3
  <p>Documentation is available <%= link_to 'here', 'http://intraducibles.com/projects/typus', :rel => 'external' %>.</p>
4
4
 
5
- <p>If you need help don't hesitate in joining the <%= link_to 'Typus', 'http://groups.google.com/group/typus', :rel => 'external' %> mailing list.</p>
5
+ <p>If you need help don't hesitate in joining the <%= link_to 'mailing list', 'http://groups.google.com/group/typus', :rel => 'external' %>.</p>
6
6
 
7
7
  <p>Replace this sidebar dropping a file named <code>_sidebar.html.erb</code> on the <code>app/views/admin/dashboard</code> folder.</p>
@@ -9,9 +9,24 @@
9
9
  <%= typus_block :location => @resource[:self], :partial => 'show' %>
10
10
 
11
11
  <dl>
12
- <%- @fields.map { |u| u.first }.each do |column| -%>
13
- <dt><%=h @resource[:class].human_attribute_name(column) %></dt>
14
- <dd><%=h (!@item.send(column).blank?) ? @item.send(column) : 'nil' %></dd>
12
+ <%- @fields.each do |field| -%>
13
+ <dt><%=h @resource[:class].human_attribute_name(field.first) %></dt>
14
+ <%-
15
+ data_type = field.last
16
+ raw_data = @item.send(field.first)
17
+ data = case data_type
18
+ when :boolean
19
+ boolean_hash = @resource[:class].typus_boolean(field.first)
20
+ !raw_data.nil? ? boolean_hash["#{raw_data}".to_sym] : @resource[:class].typus_options_for(:nil)
21
+ when :belongs_to
22
+ raw_data.typus_name
23
+ when :text
24
+ defined?(RDiscount) ? markdown(raw_data) : raw_data
25
+ else
26
+ raw_data
27
+ end
28
+ -%>
29
+ <dd><%= !data.blank? ? (data_type.eql?(:text) ? markdown(data) : h(data)) : '&#151;' %></dd>
15
30
  <%- end -%>
16
31
  </dl>
17
32
 
@@ -1,9 +1,9 @@
1
1
  <div class="pagination">
2
2
 
3
3
  <% if @items.prev? %>
4
- <%= link_to _("&larr; Previous"), params.merge(:page => @items.prev.number, :anchor => @options[:anchor]) %>
4
+ <%= link_to "&larr; " + _("Previous"), params.merge(:page => @items.prev.number, :anchor => @options[:anchor]) %>
5
5
  <% else %>
6
- <span class="disabled"><%= _("&larr; Previous") %></span>
6
+ <span class="disabled"><%= "&larr; " + _("Previous") %></span>
7
7
  <% end %>
8
8
 
9
9
  <% last_page = 0 -%>
@@ -20,9 +20,9 @@
20
20
  <% end -%>
21
21
 
22
22
  <% if @items.next? %>
23
- <%= link_to _("Next &rarr;"), params.merge(:page => @items.next.number, :anchor => @options[:anchor]) %>
23
+ <%= link_to _("Next") + " &rarr;", params.merge(:page => @items.next.number, :anchor => @options[:anchor]) %>
24
24
  <% else %>
25
- <span class="disabled"><%= _("Next &rarr;") %></span>
25
+ <span class="disabled"><%= _("Next") + " &rarr;" %></span>
26
26
  <% end %>
27
27
 
28
28
  </div>
@@ -38,8 +38,6 @@ de:
38
38
  "Back to list": "Zur7uuml;ck zur Liste"
39
39
  "Actions": "Aktionen"
40
40
  "Add": "Zuf&uuml;gen"
41
- "&larr; Previous": "&larr; Vorheriger"
42
- "Next &rarr;": "N&auml;chster &rarr"
43
41
  "Previous": "Vorheriger"
44
42
  "Next": "N&auml;chster"
45
43
  "Search": "Suchen"
@@ -70,7 +68,7 @@ de:
70
68
  "Resources": "Resourcen"
71
69
  "Up": "Hoch"
72
70
  "Down": "Runter"
73
- "filter by": "filter nach"
71
+ "Filter by": "filter nach"
74
72
  "Checked if active": "Angekreuzt wenn activiert"
75
73
  "As you're not the admin or the owner of this record you cannot edit it": "Nur der Administrator oder der Eigent7uuml;er des Datensates kann ihn bearbeiten"
76
74
  "You can't change your role": "Sie k&ouml;nnen Ihre Rolle nicht &auml;ndern"
@@ -82,7 +80,6 @@ de:
82
80
  "{{current_user_role}} can't perform action. ({{action}})": "{{current_user_role}} kann die Aktion nicht ausf&uuml;hren. ({{action}})"
83
81
  "{{current_user_role}} can't go to {{action}} on {{controller}}": "{{current_user_role}} kann {{action}} von {{controller}} nicht asuf&uuml;hren"
84
82
  "{{current_user_role}} can't delete this item": "{{current_user_role}} kann diesen Eintrag nicht l&ouml;schen"
85
- "{{current_user_role}} can't perform action ({{action}})": "{{current_user_role}} kann diese Aktion nicht ausf&uuml;hren"
86
83
  "{{current_user_role}} can't display items": "{{current_user_role}} kann Eintr&auml;ge nicht anzeigen"
87
84
  "You can update your password at": "Sie k7ouml;nnen Ihr Passwort &auml;ndern unter"
88
85
  "If you didn't request a password update, you can ignore this message": "Falls Sie keine Passwort &Auml;derung beantragt haben, k&ouml;nnen Sie diese nachricht ignorieren"
@@ -38,8 +38,6 @@ es:
38
38
  "Back to list": "Volver al listado"
39
39
  "Actions": "Acciones"
40
40
  "Add": "Añadir"
41
- "&larr; Previous": "&larr; Anterior"
42
- "Next &rarr;": "Siguente &rarr;"
43
41
  "Previous": "Anterior"
44
42
  "Next": "Siguiente"
45
43
  "Search": "Búsqueda"
@@ -70,7 +68,7 @@ es:
70
68
  "Resources": "Recursos"
71
69
  "Up": "Subir"
72
70
  "Down": "Bajar"
73
- "filter by": "filtrar por"
71
+ "Filter by": "filtrar por"
74
72
  "Checked if active": "Marca para activar"
75
73
  "As you're not the admin or the owner of this record you cannot edit it": "Como no eres el admin o el propietario de este registro no puedes editarlo."
76
74
  "You can't change your role": "No puedes cambiar tu propio rol."
@@ -82,7 +80,6 @@ es:
82
80
  "{{current_user_role}} can't perform action. ({{action}})": "{{current_user_role}} no puede realizar la acción. ({{action}})"
83
81
  "{{current_user_role}} can't go to {{action}} on {{controller}}": "{{current_user_role}} no pude ir a {{action}} en {{controller}}."
84
82
  "{{current_user_role}} can't delete this item": "{{current_user_role}} no puede borrar este elemento."
85
- "{{current_user_role}} can't perform action ({{action}})": "{{current_user_role}} no puede relizar la accion ({{action}})"
86
83
  "{{current_user_role}} can't display items": "{{current_user_role}} no puede mostrar los elementos."
87
84
  "You can update your password at": "Puedes actualizar tu contraseña en"
88
85
  "If you didn't request a password update, you can ignore this message": "Si no pediste una actualización de tu contraseña, puedes ignorar este mensaje."
@@ -0,0 +1,99 @@
1
+ # French translations for Typus
2
+ # by Ned Baldessin <http://github.com/nedbaldessin>
3
+
4
+ fr:
5
+ "Email": "Email"
6
+ "Password": "Mot de passe"
7
+ "Password confirmation": "Confirmation du mot de passe"
8
+ "Sign in": "Entrer"
9
+ "Recover password": "Récupérer le mot de passe"
10
+ "Sign up": "Ouvrir un compte"
11
+ "Enter your email below to create the first user": "Entrez votre adresse email pour créer le premier utilisateur"
12
+ "That doesn't seem like a valid email address": "L'adresse email ne semble pas valide"
13
+ "I remember my password": "Je me souviens du mot de passe"
14
+ "Password recovery link sent to your email": "Un email vous a été envoyé pour la récupération de votre mot de passe"
15
+ "A valid token is required": "Un token valide est nécessaire"
16
+ "The email and/or password you entered is invalid": "L'adresse email et/ou le mot de passe sont incorrects"
17
+ "There are not defined applications in config/typus/*.yml": "Aucune application définie dans config/typus/*.yml"
18
+ "Overview": "Vision générale"
19
+ "Options": "Options"
20
+ "Password confirm": "Confirmation du mot de passe"
21
+ "Change password": "Modifier le mot de passe"
22
+ "There are no {{records}}": "Il n'y aucun(e) {{records}}."
23
+ "There are no {{records}} under this filter": "Il n'y a aucun(e) {{records}} avec ce filtre."
24
+ "Dashboard": "Tableau de bord"
25
+ "Create entry": "Créer"
26
+ "Update entry": "Mettre-à-jour"
27
+ "New": "Nouveau"
28
+ "Show": "Voir"
29
+ "Edit": "Éditer"
30
+ "Login": "Identification"
31
+ "Setup": "Configurer"
32
+ "Create": "Créer"
33
+ "Sign out": "Déconnexion"
34
+ "Update": "Mettre-à-jour"
35
+ "View site": "Voir le site"
36
+ "Logged as": "Identifié comme"
37
+ "Remove filter": "Supprimer le filtre"
38
+ "Back to list": "Retour liste"
39
+ "Actions": "Actions"
40
+ "Add": "Ajouter"
41
+ "Previous": "Précédent"
42
+ "Next": "Suivant"
43
+ "Search": "Recherche"
44
+ "Search by": "Rechercher par"
45
+ "{{model}} successfully updated": "{{model}} correctement mis(e)-à-jour."
46
+ "{{model}} successfully created": "{{model}} correctement créé(e)."
47
+ "{{model}} successfully removed": "{{model}} correctement supprimé(e)."
48
+ "{{model}} {{attribute}} changed": "{{model}} {{attribute}} modifié."
49
+ "You're adding a new {{resource_from}} to {{resource_to}}": "Vous ajoutez un(e) {{resource_from}} à un(e) {{resource_to}}."
50
+ "You're adding a new {{resource_from}}": "Vous ajoutez un nouveau {{resource_from}}."
51
+ "You're updating a {{resource_from}} for {{resource_to}}": "Vous mettez-à-jour un(e) {{resource_from}} pour un(e) {{resource_to}}."
52
+ "You're updating a {{resource_from}}": "Vous mettez-à-jour un(e) {{resource_from}}."
53
+ "Toggle is disabled": "Le basculement est désactivé"
54
+ "Record moved {{to}}": "Entrées réordonnées"
55
+ "{{model_a}} related to {{model_b}}": "{{model_a}} associé à {{model_b}}."
56
+ "{{model_a}} successfully assigned to {{model_b}}": "{{model_a}} associé à {{model_b}}."
57
+ "{{model_a}} unrelated from {{model_b}}": "{{model_a}} dissocié de {{model_b}}."
58
+ "{{model_a}} removed from {{model_b}}": "{{model_a}} retiré de {{model_b}}."
59
+ "Your new password is {{password}}": "Votre nouveau mot-de-passe est {{password}}."
60
+ "Add entry": "Ajouter une entrée"
61
+ "Go to": "Aller"
62
+ "First name": "Prénom"
63
+ "Last name": "Nom de famille"
64
+ "Roles": "Rôles"
65
+ "Status": "État"
66
+ "Typus User": "Utilisateur admin"
67
+ "System Users Administration": "Modifier les utilisateurs de l'admin"
68
+ "Resources": "Ressources"
69
+ "Up": "Monter"
70
+ "Down": "Descendre"
71
+ "Filter by": "Filtrer par"
72
+ "Checked if active": "Coché si actif"
73
+ "As you're not the admin or the owner of this record you cannot edit it": "Vous n'êtes pas le propriétaire de cette entrée, ou un administrateur, par conséquent vous ne pouvez pas le modifier"
74
+ "You can't change your role": "Vous ne pouvez pas changer votre propre rôle."
75
+ "Error! Typus User or role doesn't exist": "Une erreur est survenue. L'utilisateur ou le rôle sont inconnus."
76
+ "You can't toggle your status": "Vous ne pouvez pas basculer votre statut"
77
+ "You're not allowed to toggle status": "Vous n'êtes pas autorisé à basculer votre statut"
78
+ "You can't remove yourself": "Vous ne pouvez pas supprimer votre propre compte"
79
+ "You're not allowed to remove Typus Users": "Vous n'avez pas le droit de supprimer des utilisateurs de l'administration"
80
+ "{{current_user_role}} can't perform action. ({{action}})": "{{current_user_role}} ne peut effectuer l'action ({{action}})"
81
+ "{{current_user_role}} can't go to {{action}} on {{controller}}": "{{current_user_role}} ne peut effectuer {{action}} sur {{controller}}"
82
+ "{{current_user_role}} can't delete this item": "{{current_user_role}} ne peut supprimer cette entrée"
83
+ "{{current_user_role}} can't perform action ({{action}})": "{{current_user_role}} ne peut effectuer l'action ({{action}})"
84
+ "Record owned by another user": "Cette entrée est la propriété d'un autre utilisateur"
85
+ "{{current_user_role}} can't display items": "Un utilisateur de rôle {{current_user_role}} ne peut pas afficher ces éléments."
86
+ "You can update your password at": "Vous pouvez modifier votre mot de passe ici"
87
+ "If you didn't request a password update, you can ignore this message": "Si vous n'avez pas demandé à mettre à jour votre mot de passe, vous pouvez ignorer ce message"
88
+ "Reset password": "Renouveler le mot de passe"
89
+ "Add new": "Ajouter nouveau"
90
+ "Do you want to cancel it?": "Voulez-vous annuler?"
91
+ "Click here": "Cliquer ici"
92
+ "Are you sure you want to leave this page?": "Êtes-vous certain de vouloir quitter cette page?"
93
+ "If you have made any changes to the fields without clicking the Save/Update entry button, your changes will be lost": "Si vous avez effectué des modifications sans cliquer sur le bouton Enregistrer ou Mettre à jour, ces modifications seront perdues."
94
+ "Click OK to continue, or click Cancel to stay on this page": "Cliquez sur Ok pour continuer, ou Annuler pour rester sur cette page."
95
+ "Remove entry?": "Supprimer l'entrée?"
96
+ "Unrelate {{unrelate_model}} from {{unrelate_model_from}}?": "Dissocier {{unrelate_model}} de {{unrelate_model_from}}?"
97
+ "Change {{attribute}}?": "Changer {{attribute}}?"
98
+ "True":
99
+ "False":