refinerycms-blog 1.5.2 → 1.6.0
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.
- 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
|