typus 0.9.27 → 0.9.28
Sign up to get free protection for your applications and to get access to all the features.
- data/README.rdoc +1 -1
- data/Rakefile +1 -1
- data/VERSION +1 -1
- data/app/controllers/admin/master_controller.rb +31 -9
- data/app/controllers/typus_controller.rb +6 -2
- data/app/helpers/admin/form_helper.rb +10 -3
- data/app/helpers/admin/sidebar_helper.rb +30 -14
- data/app/helpers/admin/table_helper.rb +38 -27
- data/app/views/admin/dashboard/_sidebar.html.erb +1 -1
- data/app/views/admin/resources/show.html.erb +18 -3
- data/app/views/admin/shared/_pagination.html.erb +4 -4
- data/config/locales/de.yml +1 -4
- data/config/locales/es.yml +1 -4
- data/config/locales/fr.yml +99 -0
- data/config/locales/language.yml.template +81 -88
- data/config/locales/pt-BR.yml +17 -23
- data/config/locales/ru.yml +1 -6
- data/generators/typus/templates/config/initializers/typus.rb +2 -1
- data/generators/typus/templates/public/stylesheets/admin/screen.css +6 -3
- data/lib/typus/active_record.rb +6 -8
- data/lib/typus/authentication.rb +5 -8
- data/lib/typus/configuration.rb +2 -1
- data/lib/typus/user.rb +22 -22
- data/lib/typus.rb +13 -1
- data/lib/vendor/rss_parser.rb +20 -0
- data/test/functional/admin/assets_controller_test.rb +3 -4
- data/test/functional/admin/categories_controller_test.rb +1 -2
- data/test/functional/admin/comments_controller_test.rb +3 -2
- data/test/functional/admin/master_controller_test.rb +46 -0
- data/test/functional/admin/posts_controller_test.rb +41 -2
- data/test/functional/admin/status_controller_test.rb +1 -2
- data/test/functional/admin/typus_users_controller_test.rb +1 -2
- data/test/functional/typus_controller_test.rb +12 -9
- data/test/helpers/admin/sidebar_helper_test.rb +25 -1
- data/test/helpers/admin/table_helper_test.rb +30 -1
- data/test/lib/active_record_test.rb +5 -0
- data/test/lib/configuration_test.rb +2 -1
- data/test/lib/typus_test.rb +10 -0
- data/test/unit/typus_user_test.rb +2 -2
- data/test/vendor/paginator_test.rb +2 -0
- data/typus.gemspec +4 -2
- 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 (
|
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
|
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.
|
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 @
|
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
|
-
#
|
268
|
+
# By-pass if current_user is root.
|
255
269
|
return if @current_user.is_root?
|
256
270
|
|
257
|
-
|
258
|
-
|
259
|
-
|
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
|
-
#
|
272
|
-
#
|
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
|
-
|
106
|
-
|
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
|
-
|
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 @
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
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
|
-
|
96
|
-
|
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}">#{_("
|
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
|
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
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
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
|
-
|
64
|
-
|
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
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
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 '
|
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.
|
13
|
-
<dt><%=h @resource[:class].human_attribute_name(
|
14
|
-
|
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)) : '—' %></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
|
4
|
+
<%= link_to "← " + _("Previous"), params.merge(:page => @items.prev.number, :anchor => @options[:anchor]) %>
|
5
5
|
<% else %>
|
6
|
-
<span class="disabled"><%=
|
6
|
+
<span class="disabled"><%= "← " + _("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 →"
|
23
|
+
<%= link_to _("Next") + " →", params.merge(:page => @items.next.number, :anchor => @options[:anchor]) %>
|
24
24
|
<% else %>
|
25
|
-
<span class="disabled"><%= _("Next →"
|
25
|
+
<span class="disabled"><%= _("Next") + " →" %></span>
|
26
26
|
<% end %>
|
27
27
|
|
28
28
|
</div>
|
data/config/locales/de.yml
CHANGED
@@ -38,8 +38,6 @@ de:
|
|
38
38
|
"Back to list": "Zur7uuml;ck zur Liste"
|
39
39
|
"Actions": "Aktionen"
|
40
40
|
"Add": "Zufügen"
|
41
|
-
"← Previous": "← Vorheriger"
|
42
|
-
"Next →": "Nächster &rarr"
|
43
41
|
"Previous": "Vorheriger"
|
44
42
|
"Next": "Nächster"
|
45
43
|
"Search": "Suchen"
|
@@ -70,7 +68,7 @@ de:
|
|
70
68
|
"Resources": "Resourcen"
|
71
69
|
"Up": "Hoch"
|
72
70
|
"Down": "Runter"
|
73
|
-
"
|
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önnen Ihre Rolle nicht ändern"
|
@@ -82,7 +80,6 @@ de:
|
|
82
80
|
"{{current_user_role}} can't perform action. ({{action}})": "{{current_user_role}} kann die Aktion nicht ausführen. ({{action}})"
|
83
81
|
"{{current_user_role}} can't go to {{action}} on {{controller}}": "{{current_user_role}} kann {{action}} von {{controller}} nicht asuführen"
|
84
82
|
"{{current_user_role}} can't delete this item": "{{current_user_role}} kann diesen Eintrag nicht löschen"
|
85
|
-
"{{current_user_role}} can't perform action ({{action}})": "{{current_user_role}} kann diese Aktion nicht ausführen"
|
86
83
|
"{{current_user_role}} can't display items": "{{current_user_role}} kann Einträge nicht anzeigen"
|
87
84
|
"You can update your password at": "Sie k7ouml;nnen Ihr Passwort ändern unter"
|
88
85
|
"If you didn't request a password update, you can ignore this message": "Falls Sie keine Passwort Äderung beantragt haben, können Sie diese nachricht ignorieren"
|
data/config/locales/es.yml
CHANGED
@@ -38,8 +38,6 @@ es:
|
|
38
38
|
"Back to list": "Volver al listado"
|
39
39
|
"Actions": "Acciones"
|
40
40
|
"Add": "Añadir"
|
41
|
-
"← Previous": "← Anterior"
|
42
|
-
"Next →": "Siguente →"
|
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
|
-
"
|
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":
|