typus 0.9.27 → 0.9.28

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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":