refinerycms-blog 1.5.2 → 1.6.0
Sign up to get free protection for your applications and to get access to all the features.
- data/app/controllers/admin/blog/posts_controller.rb +7 -0
- data/app/controllers/blog/categories_controller.rb +4 -0
- data/app/models/blog_category.rb +4 -1
- data/app/models/blog_post.rb +10 -1
- data/app/views/admin/blog/_submenu.html.erb +2 -9
- data/app/views/admin/blog/comments/show.html.erb +2 -5
- data/app/views/admin/blog/posts/_form.html.erb +39 -11
- data/app/views/admin/blog/posts/_form.js.erb +3 -11
- data/app/views/admin/blog/posts/_form_part.html.erb +3 -0
- data/app/views/blog/categories/show.html.erb +5 -4
- data/app/views/blog/posts/_post.html.erb +4 -4
- data/app/views/blog/posts/show.html.erb +8 -21
- data/app/views/blog/posts/tagged.html.erb +1 -1
- data/app/views/blog/shared/_post.html.erb +4 -4
- data/app/views/blog/shared/_tags.html.erb +1 -1
- data/app/views/shared/admin/_autocomplete.html.erb +55 -0
- data/changelog.md +9 -0
- data/config/locales/de.yml +2 -0
- data/config/locales/en.yml +23 -1
- data/config/locales/fr.yml +31 -2
- data/config/locales/nl.yml +3 -3
- data/config/locales/pt-BR.yml +10 -0
- data/config/locales/ru.yml +3 -0
- data/config/routes.rb +4 -1
- data/db/migrate/5_add_cached_slugs.rb +11 -0
- data/db/migrate/6_add_custom_url_field_to_blog_posts.rb +9 -0
- data/features/authors.feature +1 -1
- data/features/category.feature +23 -0
- data/features/support/step_definitions/category_steps.rb +11 -0
- data/features/tags.feature +1 -1
- data/lib/refinery/blog/tabs.rb +28 -0
- data/lib/refinery/blog/version.rb +2 -2
- data/lib/refinerycms-blog.rb +6 -1
- data/public/stylesheets/refinerycms-blog.css +3 -2
- data/public/stylesheets/ui-lightness/images/ui-bg_diagonals-thick_18_b81900_40x40.png +0 -0
- data/public/stylesheets/ui-lightness/images/ui-bg_diagonals-thick_20_666666_40x40.png +0 -0
- data/public/stylesheets/ui-lightness/images/ui-bg_flat_10_000000_40x100.png +0 -0
- data/public/stylesheets/ui-lightness/images/ui-bg_glass_100_f6f6f6_1x400.png +0 -0
- data/public/stylesheets/ui-lightness/images/ui-bg_glass_100_fdf5ce_1x400.png +0 -0
- data/public/stylesheets/ui-lightness/images/ui-bg_glass_65_ffffff_1x400.png +0 -0
- data/public/stylesheets/ui-lightness/images/ui-bg_gloss-wave_35_f6a828_500x100.png +0 -0
- data/public/stylesheets/ui-lightness/images/ui-bg_highlight-soft_100_eeeeee_1x100.png +0 -0
- data/public/stylesheets/ui-lightness/images/ui-bg_highlight-soft_75_ffe45c_1x100.png +0 -0
- data/public/stylesheets/ui-lightness/images/ui-icons_222222_256x240.png +0 -0
- data/public/stylesheets/ui-lightness/images/ui-icons_228ef1_256x240.png +0 -0
- data/public/stylesheets/ui-lightness/images/ui-icons_ef8c08_256x240.png +0 -0
- data/public/stylesheets/ui-lightness/images/ui-icons_ffd27a_256x240.png +0 -0
- data/public/stylesheets/ui-lightness/images/ui-icons_ffffff_256x240.png +0 -0
- data/public/stylesheets/ui-lightness/jquery-ui-1.8.13.custom.css +337 -0
- metadata +77 -62
@@ -11,6 +11,13 @@ class Admin::Blog::PostsController < Admin::BaseController
|
|
11
11
|
})
|
12
12
|
end
|
13
13
|
|
14
|
+
def tags
|
15
|
+
@tags = BlogPost.tag_counts_on(:tags).where(
|
16
|
+
["tags.name LIKE ?", "%#{params[:term].to_s.downcase}%"]
|
17
|
+
).map { |tag| {:id => tag.id, :value => tag.name}}
|
18
|
+
render :json => @tags.flatten
|
19
|
+
end
|
20
|
+
|
14
21
|
def create
|
15
22
|
# if the position field exists, set this object as last object, given the conditions of this class.
|
16
23
|
if BlogPost.column_names.include?("position")
|
@@ -2,6 +2,10 @@ class Blog::CategoriesController < BlogController
|
|
2
2
|
|
3
3
|
def show
|
4
4
|
@category = BlogCategory.find(params[:id])
|
5
|
+
@blog_posts = @category.posts.live.includes(:comments, :categories).paginate({
|
6
|
+
:page => params[:page],
|
7
|
+
:per_page => RefinerySetting.find_or_set(:blog_posts_per_page, 10)
|
8
|
+
})
|
5
9
|
end
|
6
10
|
|
7
11
|
end
|
data/app/models/blog_category.rb
CHANGED
@@ -7,7 +7,10 @@ class BlogCategory < ActiveRecord::Base
|
|
7
7
|
|
8
8
|
validates :title, :presence => true, :uniqueness => true
|
9
9
|
|
10
|
-
has_friendly_id :title, :use_slug => true
|
10
|
+
has_friendly_id :title, :use_slug => true,
|
11
|
+
:default_locale => (::Refinery::I18n.default_frontend_locale rescue :en),
|
12
|
+
:approximate_ascii => RefinerySetting.find_or_set(:approximate_ascii, false, :scoping => 'blog'),
|
13
|
+
:strip_non_ascii => RefinerySetting.find_or_set(:strip_non_ascii, false, :scoping => 'blog')
|
11
14
|
|
12
15
|
def post_count
|
13
16
|
posts.select(&:live?).count
|
data/app/models/blog_post.rb
CHANGED
@@ -21,7 +21,12 @@ class BlogPost < ActiveRecord::Base
|
|
21
21
|
validates :title, :presence => true, :uniqueness => true
|
22
22
|
validates :body, :presence => true
|
23
23
|
|
24
|
-
has_friendly_id :
|
24
|
+
has_friendly_id :friendly_id_source, :use_slug => true,
|
25
|
+
:default_locale => (::Refinery::I18n.default_frontend_locale rescue :en),
|
26
|
+
:approximate_ascii => RefinerySetting.find_or_set(:approximate_ascii, false, :scoping => 'blog'),
|
27
|
+
:strip_non_ascii => RefinerySetting.find_or_set(:strip_non_ascii, false, :scoping => 'blog')
|
28
|
+
|
29
|
+
attr_accessible :title, :body, :tag_list, :draft, :published_at, :browser_title, :meta_keywords, :meta_description, :user_id, :category_ids, :custom_url
|
25
30
|
|
26
31
|
scope :by_archive, lambda { |archive_date|
|
27
32
|
where(['published_at between ? and ?', archive_date.beginning_of_month, archive_date.end_of_month])
|
@@ -56,6 +61,10 @@ class BlogPost < ActiveRecord::Base
|
|
56
61
|
}.compact
|
57
62
|
end
|
58
63
|
|
64
|
+
def friendly_id_source
|
65
|
+
custom_url.present? ? custom_url : title
|
66
|
+
end
|
67
|
+
|
59
68
|
class << self
|
60
69
|
def next current_record
|
61
70
|
self.send(:with_exclusive_scope) do
|
@@ -88,12 +88,5 @@
|
|
88
88
|
</ul>
|
89
89
|
|
90
90
|
</nav>
|
91
|
-
|
92
|
-
|
93
|
-
<%= stylesheet_link_tag('refinery/refinerycms-blog') %>
|
94
|
-
<%# this javascript is not even required in >= 0.9.9 because we made this sort of menu core. %>
|
95
|
-
<%= javascript_include_tag('refinery/refinerycms-blog') %>
|
96
|
-
<% end %>
|
97
|
-
<% else %>
|
98
|
-
<% content_for :stylesheets, stylesheet_link_tag('refinery/refinerycms-blog')%>
|
99
|
-
<% end %>
|
91
|
+
|
92
|
+
<% content_for :stylesheets, stylesheet_link_tag('refinery/refinerycms-blog')%>
|
@@ -59,8 +59,5 @@
|
|
59
59
|
</tr>
|
60
60
|
</table>
|
61
61
|
</div>
|
62
|
-
|
63
|
-
|
64
|
-
<% else %>
|
65
|
-
<% content_for :stylesheets, stylesheet_link_tag('refinery/refinerycms-blog') %>
|
66
|
-
<% end %>
|
62
|
+
|
63
|
+
<% content_for :stylesheets, stylesheet_link_tag('refinery/refinerycms-blog') %>
|
@@ -11,8 +11,33 @@
|
|
11
11
|
</div>
|
12
12
|
|
13
13
|
<div class='field'>
|
14
|
-
|
15
|
-
|
14
|
+
<div id='page-tabs' class='clearfix ui-tabs ui-widget ui-widget-content ui-corner-all'>
|
15
|
+
<ul id='page_parts'>
|
16
|
+
<li class='ui-state-default'>
|
17
|
+
<%= link_to "Body", "#page_part_body" %>
|
18
|
+
</li>
|
19
|
+
<% Refinery::Blog.tabs.each_with_index do |tab, tab_index| %>
|
20
|
+
<li class='ui-state-default' id="custom_<%= tab.name %>_tab">
|
21
|
+
<%= link_to tab.name.titleize, "#custom_tab_#{tab_index}" %>
|
22
|
+
</li>
|
23
|
+
<% end %>
|
24
|
+
</ul>
|
25
|
+
|
26
|
+
<div id='page_part_editors'>
|
27
|
+
|
28
|
+
<% part_index = -1 %>
|
29
|
+
<%= render :partial => 'form_part',
|
30
|
+
:locals => {
|
31
|
+
:f => f,
|
32
|
+
:part_index => (part_index += 1),
|
33
|
+
} -%>
|
34
|
+
<% Refinery::Blog.tabs.each_with_index do |tab, tab_index| %>
|
35
|
+
<div class='page_part' id='<%= "custom_tab_#{tab_index}" %>'>
|
36
|
+
<%= render :partial => tab.partial, :locals => {:f => f} %>
|
37
|
+
</div>
|
38
|
+
<% end %>
|
39
|
+
</div>
|
40
|
+
</div>
|
16
41
|
</div>
|
17
42
|
|
18
43
|
<div class='field'>
|
@@ -48,6 +73,15 @@
|
|
48
73
|
</ul>
|
49
74
|
<h3><%= t('.published_at') %></h3>
|
50
75
|
<%= f.datetime_select :published_at %>
|
76
|
+
|
77
|
+
<div class='field'>
|
78
|
+
<span class='label_with_help'>
|
79
|
+
<%= f.label :custom_url, t('.custom_url') %>
|
80
|
+
<%= refinery_help_tag t('.custom_url_help') %>
|
81
|
+
</span>
|
82
|
+
<%= f.text_field :custom_url, :class => "widest" %>
|
83
|
+
</div>
|
84
|
+
|
51
85
|
</div>
|
52
86
|
<div class='hemisquare right_side'>
|
53
87
|
<%= render :partial => '/seo_meta/form', :locals => {:form => f} %>
|
@@ -61,12 +95,6 @@
|
|
61
95
|
} %>
|
62
96
|
<% end -%>
|
63
97
|
|
64
|
-
<%
|
65
|
-
|
66
|
-
|
67
|
-
<%= render :partial => 'form.js' %>
|
68
|
-
<% end %>
|
69
|
-
<% else %>
|
70
|
-
<% content_for :stylesheets, render(:partial => 'form.css') -%>
|
71
|
-
<% content_for :javascripts, render(:partial => 'form.js') -%>
|
72
|
-
<% end %>
|
98
|
+
<% content_for :stylesheets, render(:partial => 'form.css') -%>
|
99
|
+
<% content_for :javascripts, render(:partial => 'form.js') -%>
|
100
|
+
<%= render 'shared/admin/autocomplete', :dom_id => '#blog_post_tag_list', :url => tags_admin_blog_posts_url %>
|
@@ -1,13 +1,5 @@
|
|
1
1
|
<script>
|
2
|
-
|
3
|
-
$('#
|
4
|
-
|
5
|
-
|
6
|
-
$('#more_options').animate({opacity: 'toggle', height: 'toggle'}, 250);
|
7
|
-
|
8
|
-
$('html,body').animate({
|
9
|
-
scrollTop: $('#toggle_advanced_options').parent().offset().top
|
10
|
-
}, 250);
|
11
|
-
});
|
12
|
-
});
|
2
|
+
(function($) {
|
3
|
+
$('#page-tabs').tabs();
|
4
|
+
})(jQuery);
|
13
5
|
</script>
|
@@ -1,10 +1,11 @@
|
|
1
1
|
<% content_for :body_content_title, @category.title %>
|
2
2
|
|
3
3
|
<% content_for :body_content_left do %>
|
4
|
-
<% if @
|
5
|
-
|
6
|
-
|
7
|
-
|
4
|
+
<% if @blog_posts.any? %>
|
5
|
+
<section id="blog_posts">
|
6
|
+
<%= render :partial => "/blog/shared/post", :collection => @blog_posts %>
|
7
|
+
<%= will_paginate @blog_posts %>
|
8
|
+
</section>
|
8
9
|
<% else %>
|
9
10
|
<p>
|
10
11
|
<%= t('.no_posts') %>
|
@@ -6,10 +6,10 @@
|
|
6
6
|
<article id="blog_post">
|
7
7
|
<header>
|
8
8
|
<h1><%= @blog_post.title %></h1>
|
9
|
-
<details>
|
9
|
+
<section class='details'>
|
10
10
|
<time datetime="<%=l @blog_post.published_at.to_date, :format => :default %>" class='posted_at'>
|
11
|
-
<%= t('blog.shared.posts.created_at', :when => l(@blog_post.published_at.to_date, :format => :short))
|
12
|
-
</time><%= "
|
11
|
+
<%= t('blog.shared.posts.created_at', :when => l(@blog_post.published_at.to_date, :format => :short)) %>
|
12
|
+
</time><%= "#{t('blog.posts.show.by')} #{@blog_post.author.username}" if @blog_post.author.present? %>.
|
13
13
|
<% if (categories = @blog_post.categories).any? %>
|
14
14
|
<aside class='filed_in'>
|
15
15
|
<%= t('blog.posts.show.filed_in') %>
|
@@ -18,7 +18,7 @@
|
|
18
18
|
<% end %>
|
19
19
|
</aside>
|
20
20
|
<% end %>
|
21
|
-
</
|
21
|
+
</section>
|
22
22
|
</header>
|
23
23
|
<%= @blog_post.body.html_safe %>
|
24
24
|
|
@@ -57,24 +57,11 @@
|
|
57
57
|
|
58
58
|
<%= render :partial => "/shared/content_page", :locals => { :remove_automatic_sections => true } %>
|
59
59
|
|
60
|
-
<%
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
<script>stLight.options({publisher:'<%= BlogPost::ShareThis.key %>'});</script>
|
69
|
-
<% end %>
|
70
|
-
<% end %>
|
71
|
-
<% else %>
|
72
|
-
<% content_for :stylesheets, stylesheet_link_tag('refinerycms-blog') %>
|
73
|
-
<% content_for :before_javascript_libraries, jquery_include_tags(:jquery_ui => false) %>
|
74
|
-
<% content_for :javascripts do %>
|
75
|
-
<%# enable AJAX'd post nav at your own risk until html5 history API implemented. %>
|
76
|
-
<%#= javascript_include_tag('refinerycms-blog') %>
|
77
|
-
<script src="http://w.sharethis.com/button/buttons.js"></script>
|
78
|
-
<script>stLight.options({publisher:'<%= BlogPost::ShareThis.key %>'});</script>
|
79
|
-
<% end if BlogPost::ShareThis.enabled? %>
|
80
|
-
<% end %>
|
60
|
+
<% content_for :stylesheets, stylesheet_link_tag('refinerycms-blog') %>
|
61
|
+
<% content_for :before_javascript_libraries, jquery_include_tags(:jquery_ui => false) %>
|
62
|
+
<% content_for :javascripts do %>
|
63
|
+
<%# enable AJAX'd post nav at your own risk until html5 history API implemented. %>
|
64
|
+
<%#= javascript_include_tag('refinerycms-blog') %>
|
65
|
+
<script src="http://w.sharethis.com/button/buttons.js"></script>
|
66
|
+
<script>stLight.options({publisher:'<%= BlogPost::ShareThis.key %>'});</script>
|
67
|
+
<% end if BlogPost::ShareThis.enabled? %>
|
@@ -1,4 +1,4 @@
|
|
1
|
-
<% content_for :body_content_title, "
|
1
|
+
<% content_for :body_content_title, "#{t('.posts_tagged')} “#{@tag_name.titleize}”".html_safe -%>
|
2
2
|
|
3
3
|
<% content_for :body_content_left do %>
|
4
4
|
<% if @blog_posts.any? %>
|
@@ -2,10 +2,10 @@
|
|
2
2
|
<article class="blog_post" id="<%= dom_id(post) %>">
|
3
3
|
<header>
|
4
4
|
<h1><%= link_to post.title, blog_post_url(post) %></h1>
|
5
|
-
<details>
|
5
|
+
<section class='details'>
|
6
6
|
<time datetime="<%=l post.published_at.to_date, :format => :default %>" class='posted_at'>
|
7
|
-
<%= t('blog.shared.posts.created_at', :when => l(post.published_at.to_date, :format => :short))
|
8
|
-
</time><%= "
|
7
|
+
<%= t('blog.shared.posts.created_at', :when => l(post.published_at.to_date, :format => :short)) %>
|
8
|
+
</time><%= "#{t('blog.posts.show.by')} #{post.author.username}" if post.author.present? %>.
|
9
9
|
<% if (categories = post.categories).any? %>
|
10
10
|
<aside class='filed_in'>
|
11
11
|
<%= t('filed_in', :scope => 'blog.posts.show') %>
|
@@ -18,7 +18,7 @@
|
|
18
18
|
<%=raw tags.collect { |tag| link_to tag, tagged_posts_path(tag.parameterize) }.to_sentence %>
|
19
19
|
</aside>
|
20
20
|
<% end %>
|
21
|
-
</
|
21
|
+
</section>
|
22
22
|
</header>
|
23
23
|
<section class='clearfix'>
|
24
24
|
<%= truncate(post.body,
|
@@ -0,0 +1,55 @@
|
|
1
|
+
<% content_for :stylesheets, stylesheet_link_tag("ui-lightness/jquery-ui-1.8.13.custom.css") -%>
|
2
|
+
|
3
|
+
<% content_for :javascripts do %>
|
4
|
+
<%= javascript_include_tag "https://ajax.googleapis.com/ajax/libs/jqueryui/1.8.13/jquery-ui.min.js" %>
|
5
|
+
<script>
|
6
|
+
function split( val ) {
|
7
|
+
return val.split( /,\s*/ );
|
8
|
+
}
|
9
|
+
function extractLast( term ) {
|
10
|
+
return split( term ).pop();
|
11
|
+
}
|
12
|
+
|
13
|
+
|
14
|
+
$(document).ready(function(){
|
15
|
+
page_options.init(false, '', '')
|
16
|
+
|
17
|
+
$('<%= dom_id %>')
|
18
|
+
.bind( "keydown", function( event ) {
|
19
|
+
if ( event.keyCode === $.ui.keyCode.TAB &&
|
20
|
+
$( this ).data( "autocomplete" ).menu.active ) {
|
21
|
+
event.preventDefault()
|
22
|
+
}
|
23
|
+
})
|
24
|
+
.autocomplete({
|
25
|
+
source: function( request, response ) {
|
26
|
+
$.getJSON( "<%= url %>", {
|
27
|
+
term: extractLast( request.term )
|
28
|
+
}, response );
|
29
|
+
},
|
30
|
+
search: function() {
|
31
|
+
// custom minLength
|
32
|
+
var term = extractLast( this.value );
|
33
|
+
if ( term.length < 2 ) {
|
34
|
+
return false;
|
35
|
+
}
|
36
|
+
},
|
37
|
+
focus: function() {
|
38
|
+
// prevent value inserted on focus
|
39
|
+
return false;
|
40
|
+
},
|
41
|
+
select: function( event, ui ) {
|
42
|
+
var terms = split( this.value );
|
43
|
+
// remove the current input
|
44
|
+
terms.pop();
|
45
|
+
// add the selected item
|
46
|
+
terms.push( ui.item.value );
|
47
|
+
// add placeholder to get the comma-and-space at the end
|
48
|
+
terms.push( "" );
|
49
|
+
this.value = terms.join( ", " );
|
50
|
+
return false;
|
51
|
+
}
|
52
|
+
})
|
53
|
+
});
|
54
|
+
</script>
|
55
|
+
<% end %>
|
data/changelog.md
CHANGED
@@ -1,3 +1,12 @@
|
|
1
|
+
## 1.6 [20 June 2011]
|
2
|
+
* Category bug fixes and cleanup [wikyd](https://github.com/wikyd)
|
3
|
+
* Cleaned up deprecated code [ugisozols](https://github.com/ugisozols)
|
4
|
+
* Performance boosts (cached slugs) [joemsak](https://github.com/joemsak)
|
5
|
+
* More translations [cerebroso](https://github.com/cerebroso), [peresleguine](https://github.com/peresleguine)
|
6
|
+
* More testing [wakeless](https://github.com/wakeless)
|
7
|
+
* Tag list autocomplete baked in [joemsak](https://github.com/joemsak)
|
8
|
+
* Customize the URL of your blog post [wikyd](https://github.com/wikyd)
|
9
|
+
|
1
10
|
## 1.5 [28 May 2011]
|
2
11
|
|
3
12
|
* Added Gravatar support. [parndt](https://github.com/parndt)
|
data/config/locales/de.yml
CHANGED
data/config/locales/en.yml
CHANGED
@@ -38,6 +38,8 @@ en:
|
|
38
38
|
toggle_advanced_options: Click to access meta tag settings and menu options
|
39
39
|
save_as_draft: Save as Draft
|
40
40
|
published_at: Publish Date
|
41
|
+
custom_url: Custom Url
|
42
|
+
custom_url_help: Generate the url for the blog post from this text instead of the title.
|
41
43
|
index:
|
42
44
|
no_items_yet: 'There are no Blog Posts yet. Click "%{create}" to add your first blog post.'
|
43
45
|
uncategorized:
|
@@ -126,8 +128,28 @@ en:
|
|
126
128
|
filed_in: Filed in
|
127
129
|
tagged: Tagged
|
128
130
|
submit: Send comment
|
131
|
+
name: Name
|
132
|
+
email: Email
|
133
|
+
message: Message
|
134
|
+
by: by
|
129
135
|
tagged:
|
130
136
|
no_blog_articles_yet: There are no blog articles posted yet. Stay tuned.
|
137
|
+
posts_tagged: Posts tagged
|
131
138
|
archive:
|
132
139
|
blog_archive_for: 'Blog Archive for %{date}'
|
133
|
-
no_blog_articles_posted: 'There are no blog articles posted for %{date}. Stay tuned.'
|
140
|
+
no_blog_articles_posted: 'There are no blog articles posted for %{date}. Stay tuned.'
|
141
|
+
activerecord:
|
142
|
+
models:
|
143
|
+
blog_category: Category
|
144
|
+
blog_comment: Comment
|
145
|
+
blog_post: Blog post
|
146
|
+
attributes:
|
147
|
+
blog_category:
|
148
|
+
title: Title
|
149
|
+
blog_comment:
|
150
|
+
name: Name
|
151
|
+
email: Email
|
152
|
+
message: Message
|
153
|
+
blog_post:
|
154
|
+
title: Title
|
155
|
+
body: Body
|
data/config/locales/fr.yml
CHANGED
@@ -40,6 +40,8 @@ fr:
|
|
40
40
|
published_at: Date de publication
|
41
41
|
index:
|
42
42
|
no_items_yet: 'Il n''y a aucun article pour l''instant. Cliquez sur "%{create}" pour ajouter votre premier article.'
|
43
|
+
uncategorized:
|
44
|
+
no_items_yet: 'Il n''y a aucun article non catégorisé.'
|
43
45
|
post:
|
44
46
|
view_live_html: 'Voir cet article sur le site<br/><em>(Ouvre une nouvelle fenêtre)</em>'
|
45
47
|
edit: Modifier cet article
|
@@ -67,6 +69,7 @@ fr:
|
|
67
69
|
title: Articles
|
68
70
|
manage: Gérer les articles
|
69
71
|
new: Créer un nouvel article
|
72
|
+
uncategorized: Aricles non catégorisés
|
70
73
|
settings:
|
71
74
|
title: Paramêtres
|
72
75
|
moderation: Modération
|
@@ -88,16 +91,19 @@ fr:
|
|
88
91
|
categories:
|
89
92
|
title: Catégories
|
90
93
|
rss_feed:
|
91
|
-
title: RSS
|
94
|
+
title: Flux RSS
|
92
95
|
subscribe: Souscrire
|
93
96
|
posts:
|
94
97
|
other: Autres articles
|
95
98
|
created_at: 'Écrit le %{when}'
|
96
99
|
read_more: Lire la suite
|
100
|
+
by: 'par'
|
97
101
|
comments:
|
98
102
|
singular: commentaire
|
99
103
|
none: aucun commentaire
|
100
104
|
archives: Archives
|
105
|
+
tags:
|
106
|
+
title: "Mots clés"
|
101
107
|
categories:
|
102
108
|
show:
|
103
109
|
no_posts: 'Il n''y a aucun article pour cette catégorie.'
|
@@ -119,7 +125,30 @@ fr:
|
|
119
125
|
add: Ajouter un commentaire
|
120
126
|
other: Autres articles
|
121
127
|
filed_in: Classé dans
|
128
|
+
tagged: Taggé
|
122
129
|
submit: Envoyer le commentaire
|
130
|
+
name: Nom
|
131
|
+
email: Email
|
132
|
+
message: Message
|
133
|
+
by: par
|
134
|
+
tagged:
|
135
|
+
no_blog_articles_yet: "Il n'y a aucun article pour l'instant. Restez en alerte."
|
136
|
+
posts_tagged: Articles taggés
|
123
137
|
archive:
|
124
138
|
blog_archive_for: 'Archive du blog pour le %{date}'
|
125
|
-
no_blog_articles_posted: "Il n'y a aucun article pour la date du %{date}. Restez
|
139
|
+
no_blog_articles_posted: "Il n'y a aucun article pour la date du %{date}. Restez en alerte."
|
140
|
+
activerecord:
|
141
|
+
models:
|
142
|
+
blog_category: Categorie
|
143
|
+
blog_comment: Commentaire
|
144
|
+
blog_post: Article
|
145
|
+
attributes:
|
146
|
+
blog_category:
|
147
|
+
title: Titre
|
148
|
+
blog_comment:
|
149
|
+
name: Nom
|
150
|
+
email: Email
|
151
|
+
message: Message
|
152
|
+
blog_post:
|
153
|
+
title: Titre
|
154
|
+
body: Corps
|