Merge remote-tracking branch 'upstream/develop' into develop

* upstream/develop: (69 commits)
  Bump development version
  Add travis cache
  Test travis cache
  Update history
  Fixing #209
  Test copy relations
  fix error in wizard tests
  Fix test
  Add Django 1.9 to travis
  Django 1.9 compatible admin
  Add support for moved ThumbnailOption
  Update changelog
  use post.get_title() to get fallback title from meta
  don't repeat blog title in search index twice
  remove defunct test
  fix Post.get_keywords to handle empty keywords, cleanup search_indexes
  Fix test
  Fix string formatting
  Fix selecting current menu item according to menu layout
  Update history
  ...

Conflicts:
	djangocms_blog/locale/sl/LC_MESSAGES/django.mo
	djangocms_blog/locale/sl/LC_MESSAGES/django.po
This commit is contained in:
Zan Anderle 2016-03-01 09:31:48 +01:00
commit 2fbb07dc52
73 changed files with 2184 additions and 1075 deletions

4
.checkignore Normal file
View file

@ -0,0 +1,4 @@
tests/*
docs/*
djangocms_blog/south_migrations/*
djangocms_blog/migrations/*

5
.gitlab-ci.yml Normal file
View file

@ -0,0 +1,5 @@
# This file is generated by GitLab CI
ci:
script:
- COMMAND="coverage run" tox -epep8,isort,py35-django19-cms32,py34-django18-cms31,py27-django16-cms30
- if [[ $? -eq 0 ]]; then coverage report; fi

View file

@ -15,6 +15,7 @@ env:
matrix:
- TOXENV='pep8'
- TOXENV='isort'
- DJANGO='django19' CMS='cms32'
- DJANGO='django18' CMS='cms32'
- DJANGO='django18' CMS='cms31'
- DJANGO='django17' CMS='cms32'
@ -27,7 +28,6 @@ env:
# command to install dependencies, e.g. pip install -r requirements.txt --use-mirrors
install:
- pip install -U tox>=1.8 coveralls
- "if [[ $TRAVIS_PYTHON_VERSION == '2.6' ]]; then export PYVER=py26; fi"
- "if [[ $TRAVIS_PYTHON_VERSION == '2.7' ]]; then export PYVER=py27; fi"
- "if [[ $TRAVIS_PYTHON_VERSION == '3.3' ]]; then export PYVER=py33; fi"
@ -39,7 +39,7 @@ install:
script: COMMAND='coverage run' tox -e$TOXENV
before_install:
- pip install codecov
- pip install -U tox>=1.8 coveralls codecov wheel pip
after_success:
- codecov
- coveralls
@ -72,6 +72,10 @@ matrix:
env: DJANGO='django18' CMS='cms31'
- python: 2.6
env: DJANGO='django18' CMS='cms32'
- python: 2.6
env: DJANGO='django19' CMS='cms32'
- python: 3.3
env: DJANGO='django19' CMS='cms32'
- python: 3.5
env: DJANGO='django16' CMS='cms30'
- python: 3.5
@ -85,26 +89,10 @@ matrix:
- python: 3.5
env: DJANGO='django17' CMS='cms32'
allow_failures:
- python: 2.6
env: DJANGO='django16' CMS='cms32'
- python: 2.7
env: DJANGO='django16' CMS='cms32'
- python: 2.7
env: DJANGO='django17' CMS='cms32'
- python: 2.7
env: DJANGO='django18' CMS='cms32'
- python: 3.3
env: DJANGO='django16' CMS='cms32'
- python: 3.3
env: DJANGO='django17' CMS='cms32'
- python: 3.3
env: DJANGO='django18' CMS='cms32'
- python: 3.4
env: DJANGO='django16' CMS='cms32'
- python: 3.4
env: DJANGO='django17' CMS='cms32'
- python: 3.4
env: DJANGO='django18' CMS='cms32'
- python: 3.5
env: DJANGO='django18' CMS='cms32'
cache:
directories:
- $HOME/.pip-accel
- $HOME/.cache/pip

View file

@ -25,3 +25,4 @@ Contributors
* Stefan Wehrmeyer
* Sylvain Fankhauser
* Tadas Dailyda
* Olivier Tabone

View file

@ -3,11 +3,27 @@
History
-------
0.6.3 (XXXX-XX-XX)
0.7.0 (unreleased)
++++++++++++++++++
* Make categories non required
* Fix tests with parler>=1.6
* Use all_languages_column to admin
* Add publish button
* Fix issues in migrations. Thanks @skirsdeda
* Fix selecting current menu item according to menu layout
* Fix some issues with haystack indexes
* Add support for moved ThumbnailOption
* Fix Django 1.9 issues
* Fix copy relations method in plugins
0.6.3 (2015-12-22)
++++++++++++++++++
* Add BLOG_ADMIN_POST_FIELDSET_FILTER to filter admin fieldsets
* Ensure correct creation of full URL for canonical urls
* Move constants to settings
* Fix error when no config is found
0.6.2 (2015-11-16)
++++++++++++++++++

View file

@ -30,7 +30,7 @@ djangocms-blog
:target: https://codeclimate.com/github/nephila/djangocms-blog
:alt: Code Climate
A djangoCMS 3 blog application.
django CMS blog application - Support for multilingual posts, placeholders, social network meta tags and configurable apphooks.
Supported Django versions:
@ -47,6 +47,11 @@ Supported django CMS versions:
A datamigration is in place to migrate the data, but check that
works ok for your project before upgrading, as this might delete
some relevant data.
Some plugins have a broken tag management prior to 0.6, in case
you have issues with tags, upgrade to latest version to have it fixed.
.. warning:: When upgrading to version 0.6, check that every post as an attached
category, or select a menu without categories.
.. warning:: Starting from version 0.5, this package does not declare dependency
on South anymore; please install it separately if using this
@ -88,6 +93,7 @@ Add ``djangocms_blog`` and its dependencies to INSTALLED_APPS::
...
'filer',
'easy_thumbnails',
'aldryn_apphooks_config',
'cmsplugin_filer_image',
'parler',
'taggit',
@ -98,7 +104,7 @@ Add ``djangocms_blog`` and its dependencies to INSTALLED_APPS::
...
]
If you installed the **admin-enhancer** variant, add ``admin_enhancer`` to ``INSTALLED_APPS::
If you installed the **admin-enhancer** variant, add ``admin_enhancer`` to ``INSTALLED_APPS``::
INSTALLED_APPS = [
...
@ -170,6 +176,9 @@ suited for your deployment.
{'code': 'it',},
{'code': 'fr',},
),
'default': {
'fallbacks': ['en', 'it', 'fr'],
}
}
* Add the following to your ``urls.py``::
@ -181,12 +190,17 @@ suited for your deployment.
`Auto setup <auto_setup>`_:
* Create a new django CMS page
* Go to Advanced settings and select Blog from the Application selector and
create an application configuration;
* Go to **Advanced settings** and select Blog from the **Application** selector and
create an **Application configuration**;
* Eventually customise the Application instance name;
* Publish the page
* Restart the project instance to properly load blog urls.
.. warning:: After adding the apphook to the page you **cannot** change the **Instance Namspace**
field for the defined **AppHokConfig**; if you want to change it, create a new one
with the correct namespace, go in the CMS page **Advanced settings** and switch to the
new **Application configuration**
* Add and edit blog by creating them in the admin or using the toolbar,
and the use the `django CMS frontend editor <http://django-cms.readthedocs.org/en/support-3.0.x/user/reference/page_admin.html#the-interface>`_
to edit the blog content:
@ -226,11 +240,14 @@ Menu
``djangocms_blog`` provides support for django CMS menu framework.
By default all the categories and posts are added to the menu, in a hierarcical structure.
By default all the categories and posts are added to the menu, in a hierarchical structure.
Is it possibile to configure per Apphook, whether the menu includes post and categories
(the default), only categorie, only posts or no item.
If "post and categories" or "only categories" are set, all the posts not associated with a
category are not added to the menu.
Templates
+++++++++
@ -363,6 +380,16 @@ Global Settings
used; (default: ``True``)
* BLOG_DEFAULT_PUBLISHED: If posts are marked as published by default;
(default: ``False``)
* BLOG_ADMIN_POST_FIELDSET_FILTER: Callable function to change(add or filter)
fields to fieldsets for admin post edit form; (default: ``False``). Function simple example::
def fieldset_filter_function(fsets, request, obj=None):
if request.user.groups.filter(name='Editor').exists():
fsets[1][1]['fields'][0].append('author') # adding 'author' field if user is Editor
return fsets
* BLOG_AVAILABLE_PERMALINK_STYLES: Choices of permalinks styles;
* BLOG_PERMALINK_URLS: URLConf corresponding to
BLOG_AVAILABLE_PERMALINK_STYLES;

View file

@ -4,7 +4,8 @@ from __future__ import absolute_import, print_function, unicode_literals
from tempfile import mkdtemp
gettext = lambda s: s
def gettext(s): return s
HELPER_SETTINGS = dict(
ROOT_URLCONF='tests.test_utils.urls',
@ -68,7 +69,7 @@ HELPER_SETTINGS = dict(
{'code': 'en'},
),
'default': {
'fallback': 'en',
'fallbacks': ['en'],
'hide_untranslated': False,
}
},

View file

@ -1,6 +1,6 @@
# -*- coding: utf-8 -*-
__author__ = 'Iacopo Spalletti'
__email__ = 'i.spalletti@nephila.it'
__version__ = '0.6.2.post1'
__version__ = '0.7.0.b1'
default_app_config = 'djangocms_blog.apps.BlogAppConfig'

View file

@ -7,9 +7,12 @@ from aldryn_apphooks_config.admin import BaseAppHookConfig, ModelAppHookConfig
from cms.admin.placeholderadmin import FrontendEditableAdminMixin, PlaceholderAdminMixin
from django import forms
from django.conf import settings
from django.conf.urls import url
from django.contrib import admin
from django.contrib.auth import get_user_model
from django.utils.translation import ugettext_lazy as _
from django.core.urlresolvers import reverse
from django.http import HttpResponseRedirect
from django.utils.six import callable
from django.utils.translation import get_language_from_request, ugettext_lazy as _
from parler.admin import TranslatableAdmin
from .cms_appconfig import BlogConfig
@ -25,6 +28,7 @@ except ImportError:
class BlogCategoryAdmin(EnhancedModelAdminMixin, ModelAppHookConfig, TranslatableAdmin):
def get_prepopulated_fields(self, request, obj=None):
app_config_default = self._app_config_select(request, obj)
if app_config_default is None and request.method == 'GET':
@ -41,7 +45,8 @@ class PostAdmin(PlaceholderAdminMixin, FrontendEditableAdminMixin,
ModelAppHookConfig, TranslatableAdmin):
form = PostAdminForm
list_display = [
'title', 'author', 'date_published', 'app_config', 'languages', 'date_published_end'
'title', 'author', 'date_published', 'app_config', 'all_languages_column',
'date_published_end'
]
list_filter = ('app_config',)
date_hierarchy = 'date_published'
@ -71,8 +76,35 @@ class PostAdmin(PlaceholderAdminMixin, FrontendEditableAdminMixin,
'default_published': 'publish'
}
def languages(self, obj):
return ','.join(obj.get_available_languages())
def get_urls(self):
"""
Customize the modeladmin urls
"""
urls = [
url(r'^publish/([0-9]+)/$', self.admin_site.admin_view(self.publish_post),
name='djangocms_blog_publish_article'),
]
urls.extend(super(PostAdmin, self).get_urls())
return urls
def publish_post(self, request, pk):
"""
Admin view to publish a single post
:param request: request
:param pk: primary key of the post to publish
:return: Redirect to the post itself (if found) or fallback urls
"""
language = get_language_from_request(request, check_path=True)
try:
post = Post.objects.get(pk=int(pk))
post.publish = True
post.save()
return HttpResponseRedirect(post.get_absolute_url(language))
except Exception:
try:
return HttpResponseRedirect(request.META['HTTP_REFERER'])
except KeyError:
return HttpResponseRedirect(reverse('djangocms_blog:posts-latest'))
def formfield_for_dbfield(self, db_field, **kwargs):
field = super(PostAdmin, self).formfield_for_dbfield(db_field, **kwargs)
@ -85,6 +117,12 @@ class PostAdmin(PlaceholderAdminMixin, FrontendEditableAdminMixin,
return field
def get_fieldsets(self, request, obj=None):
"""
Customize the fieldsets according to the app settings
:param request: request
:param obj: post
:return: fieldsets configuration
"""
app_config_default = self._app_config_select(request, obj)
if app_config_default is None and request.method == 'GET':
return super(PostAdmin, self).get_fieldsets(request, obj)
@ -108,18 +146,16 @@ class PostAdmin(PlaceholderAdminMixin, FrontendEditableAdminMixin,
fsets[1][1]['fields'][0].append('sites')
if request.user.is_superuser:
fsets[1][1]['fields'][0].append('author')
filter_function = get_setting('ADMIN_POST_FIELDSET_FILTER')
if callable(filter_function):
fsets = filter_function(fsets, request, obj=obj)
return fsets
def get_prepopulated_fields(self, request, obj=None):
return {'slug': ('title',)}
def save_model(self, request, obj, form, change):
if not obj.author_id and obj.app_config.set_author:
if get_setting('AUTHOR_DEFAULT') is True:
user = request.user
else:
user = get_user_model().objects.get(username=get_setting('AUTHOR_DEFAULT'))
obj.author = user
obj._set_default_author(request.user)
super(PostAdmin, self).save_model(request, obj, form, change)
class Media:
@ -132,6 +168,12 @@ class BlogConfigAdmin(BaseAppHookConfig, TranslatableAdmin):
@property
def declared_fieldsets(self):
return self.get_fieldsets(None)
def get_fieldsets(self, request, obj=None):
"""
Fieldsets configuration
"""
return [
(None, {
'fields': ('type', 'namespace', 'app_title', 'object_name')

View file

@ -23,6 +23,10 @@ class BlogConfig(TranslatableModel, AppHookConfig):
),
)
class Meta:
verbose_name = _('blog config')
verbose_name_plural = _('blog configs')
def get_app_title(self):
return getattr(self, 'app_title', _('untitled'))

View file

@ -3,6 +3,7 @@ from __future__ import absolute_import, print_function, unicode_literals
from cms.toolbar_base import CMSToolbar
from cms.toolbar_pool import toolbar_pool
from cms.utils.urlutils import admin_reverse
from django.core.urlresolvers import reverse
from django.utils.translation import override, ugettext_lazy as _
@ -33,6 +34,22 @@ class BlogToolbar(CMSToolbar):
'admin:djangocms_blog_post_change', args=(current_post.pk,)),
active=True)
def add_publish_button(self):
"""
Adds the publish button to the toolbar if the current post is unpublished
"""
current_post = getattr(self.request, get_setting('CURRENT_POST_IDENTIFIER'), None)
if (self.toolbar.edit_mode and current_post and
not current_post.publish and
self.request.user.has_perm('djangocms_blog.change_post')
): # pragma: no cover # NOQA
classes = ['cms-btn-action', 'blog-publish']
title = _('Publish {0} now').format(current_post.app_config.object_name)
url = admin_reverse('djangocms_blog_publish_article', args=(current_post.pk,))
self.toolbar.add_button(title, url=url, extra_classes=classes, side=self.toolbar.RIGHT)
def post_template_populate(self):
current_post = getattr(self.request, get_setting('CURRENT_POST_IDENTIFIER'), None)
if current_post and self.request.user.has_perm('djangocms_blog.change_post'): # pragma: no cover # NOQA
@ -52,3 +69,4 @@ class BlogToolbar(CMSToolbar):
menu.remove_item(pagetags)
except ImportError:
pass
self.add_publish_button()

View file

@ -1,6 +1,8 @@
# -*- coding: utf-8 -*-
from __future__ import absolute_import, print_function, unicode_literals
from cms.utils.permissions import get_current_user
try:
from cms.wizards.wizard_base import Wizard
from cms.wizards.wizard_pool import wizard_pool
@ -35,6 +37,10 @@ try:
class Media:
js = ('admin/js/jquery.js', 'admin/js/jquery.init.js',)
def save(self, commit=True):
self.instance._set_default_author(get_current_user())
return super(PostWizardForm, self).save(commit)
class PostWizard(Wizard):
pass

View file

@ -7,8 +7,8 @@ msgid ""
msgstr ""
"Project-Id-Version: djangocms-blog\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2015-10-31 13:23+0100\n"
"PO-Revision-Date: 2015-10-31 12:23+0000\n"
"POT-Creation-Date: 2015-12-20 17:14+0100\n"
"PO-Revision-Date: 2015-12-20 16:15+0000\n"
"Last-Translator: yakky <i.spalletti@nephila.it>\n"
"Language-Team: Arabic (http://www.transifex.com/nephila/djangocms-blog/language/ar/)\n"
"MIME-Version: 1.0\n"
@ -26,8 +26,7 @@ msgstr ""
msgid "django CMS Blog"
msgstr ""
#: cms_app.py:15 cms_plugins.py:64 cms_plugins.py:77 cms_plugins.py:93
#: cms_plugins.py:108 cms_toolbar.py:18
#: cms_app.py:15 cms_toolbar.py:19 settings.py:111
msgid "Blog"
msgstr "المدونة"
@ -40,155 +39,144 @@ msgid "object name"
msgstr ""
#: cms_appconfig.py:27
#| msgid "blog categories"
msgid "blog config"
msgstr ""
#: cms_appconfig.py:28
#| msgid "blog categories"
msgid "blog configs"
msgstr ""
#: cms_appconfig.py:31
msgid "untitled"
msgstr ""
#: cms_appconfig.py:32
#: cms_appconfig.py:36
msgid "Post published by default"
msgstr ""
#: cms_appconfig.py:36
#: cms_appconfig.py:40
msgid "Permalink structure"
msgstr ""
#: cms_appconfig.py:41
#: cms_appconfig.py:45
msgid "Use placeholder and plugins for article body"
msgstr ""
#: cms_appconfig.py:45
#: cms_appconfig.py:49
msgid "Use abstract field"
msgstr ""
#: cms_appconfig.py:49
#: cms_appconfig.py:53
msgid "Set author"
msgstr ""
#: cms_appconfig.py:49
#: cms_appconfig.py:53
msgid "Set author by default"
msgstr ""
#: cms_appconfig.py:53
#: cms_appconfig.py:57
msgid "Paginate size"
msgstr ""
#: cms_appconfig.py:54
#: cms_appconfig.py:58
msgid "When paginating list views, how many articles per page?"
msgstr ""
#: cms_appconfig.py:57
#: cms_appconfig.py:61
msgid "Template prefix"
msgstr ""
#: cms_appconfig.py:58
#: cms_appconfig.py:62
msgid "Alternative directory to load the blog templates from"
msgstr ""
#: cms_appconfig.py:61
#: cms_appconfig.py:65
msgid "Menu structure"
msgstr ""
#: cms_appconfig.py:63
#: cms_appconfig.py:67
msgid "Structure of the django CMS menu"
msgstr ""
#: cms_appconfig.py:66
#: cms_appconfig.py:70
msgid "Sitemap changefreq"
msgstr ""
#: cms_appconfig.py:69
#: cms_appconfig.py:73
msgid "Changefreq attribute for sitemap items"
msgstr ""
#: cms_appconfig.py:72
#: cms_appconfig.py:76
msgid "Sitemap priority"
msgstr ""
#: cms_appconfig.py:74
#: cms_appconfig.py:78
msgid "Priority attribute for sitemap items"
msgstr ""
#: cms_appconfig.py:77
#: cms_appconfig.py:81
msgid "Object type"
msgstr ""
#: cms_appconfig.py:81
#: cms_appconfig.py:85
msgid "Facebook type"
msgstr ""
#: cms_appconfig.py:85
#: cms_appconfig.py:89
msgid "Facebook application ID"
msgstr ""
#: cms_appconfig.py:89
#: cms_appconfig.py:93
msgid "Facebook profile ID"
msgstr ""
#: cms_appconfig.py:93
#: cms_appconfig.py:97
msgid "Facebook page URL"
msgstr ""
#: cms_appconfig.py:97
#: cms_appconfig.py:101
msgid "Facebook author URL"
msgstr ""
#: cms_appconfig.py:101
#: cms_appconfig.py:105
msgid "Facebook author"
msgstr ""
#: cms_appconfig.py:105
#: cms_appconfig.py:109
msgid "Twitter type"
msgstr ""
#: cms_appconfig.py:109
#: cms_appconfig.py:113
msgid "Twitter site handle"
msgstr ""
#: cms_appconfig.py:113
#: cms_appconfig.py:117
msgid "Twitter author handle"
msgstr ""
#: cms_appconfig.py:117
#: cms_appconfig.py:121
msgid "Google+ type"
msgstr ""
#: cms_appconfig.py:121
#: cms_appconfig.py:125
msgid "Google+ author name"
msgstr ""
#: cms_plugins.py:30 cms_plugins.py:49
msgid "Latest Blog Articles"
msgstr "آخر مواضيع المدونة"
#: cms_plugins.py:65
msgid "Author Blog Articles"
msgstr "ناشر مواضيع المدونة"
#: cms_plugins.py:78 templates/djangocms_blog/plugins/tags.html:3
msgid "Tags"
msgstr "علامات"
#: cms_plugins.py:94 templates/djangocms_blog/plugins/categories.html:3
msgid "Categories"
msgstr "الأقسام"
#: cms_plugins.py:109 templates/djangocms_blog/plugins/archive.html:3
#: templates/djangocms_blog/post_list.html:12
msgid "Archive"
msgstr "الأرشيف"
#: cms_toolbar.py:21
#: cms_toolbar.py:22
msgid "Post list"
msgstr "قائمة المواضيع"
#: cms_toolbar.py:23
#: cms_toolbar.py:24
msgid "Add post"
msgstr "إضافة موضوع"
#: cms_toolbar.py:27
#: cms_toolbar.py:28
msgid "Edit configuration"
msgstr ""
#: cms_toolbar.py:31
#: cms_toolbar.py:32
msgid "Edit Post"
msgstr "التعديل على موضوع"
@ -223,7 +211,7 @@ msgstr ""
msgid "modified at"
msgstr ""
#: models.py:38 models.py:123 models.py:276
#: models.py:38 models.py:123 models.py:275
msgid "app. config"
msgstr ""
@ -333,52 +321,52 @@ msgstr ""
msgid "blog articles"
msgstr ""
#: models.py:293
msgid "generic blog plugin"
msgstr ""
#: models.py:297 models.py:330
#: models.py:294 models.py:328
msgid "articles"
msgstr ""
#: models.py:298
#: models.py:295
msgid "The number of latests articles to be displayed."
msgstr ""
#: models.py:300
#: models.py:297
msgid "filter by tag"
msgstr ""
#: models.py:301
#: models.py:298
msgid "Show only the blog articles tagged with chosen tags."
msgstr ""
#: models.py:304
#: models.py:301
msgid "filter by category"
msgstr ""
#: models.py:305
#: models.py:302
msgid "Show only the blog articles tagged with chosen categories."
msgstr ""
#: models.py:309
#: models.py:306
#, python-format
msgid "%s latest articles by tag"
msgstr ""
#: models.py:326
#: models.py:324
msgid "authors"
msgstr ""
#: models.py:331
#: models.py:329
msgid "The number of author articles to be displayed."
msgstr ""
#: models.py:335
#: models.py:333
#, python-format
msgid "%s latest articles by author"
msgstr ""
#: models.py:362
msgid "generic blog plugin"
msgstr ""
#: settings.py:16
msgid "Full date"
msgstr ""
@ -439,6 +427,27 @@ msgstr ""
msgid "never"
msgstr ""
#: settings.py:113
msgid "Latest Blog Articles"
msgstr "آخر مواضيع المدونة"
#: settings.py:115
msgid "Author Blog Articles"
msgstr "ناشر مواضيع المدونة"
#: settings.py:117 templates/djangocms_blog/plugins/tags.html:3
msgid "Tags"
msgstr "علامات"
#: settings.py:119 templates/djangocms_blog/plugins/categories.html:3
msgid "Categories"
msgstr "الأقسام"
#: settings.py:121 templates/djangocms_blog/plugins/archive.html:3
#: templates/djangocms_blog/post_list.html:12
msgid "Archive"
msgstr "الأرشيف"
#: templates/djangocms_blog/includes/blog_item.html:24
msgid "read more"
msgstr ""

View file

@ -7,8 +7,8 @@ msgid ""
msgstr ""
"Project-Id-Version: djangocms-blog\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2015-10-31 13:23+0100\n"
"PO-Revision-Date: 2015-10-31 12:23+0000\n"
"POT-Creation-Date: 2015-12-20 17:14+0100\n"
"PO-Revision-Date: 2015-12-20 16:15+0000\n"
"Last-Translator: yakky <i.spalletti@nephila.it>\n"
"Language-Team: German (http://www.transifex.com/nephila/djangocms-blog/language/de/)\n"
"MIME-Version: 1.0\n"
@ -26,8 +26,7 @@ msgstr ""
msgid "django CMS Blog"
msgstr ""
#: cms_app.py:15 cms_plugins.py:64 cms_plugins.py:77 cms_plugins.py:93
#: cms_plugins.py:108 cms_toolbar.py:18
#: cms_app.py:15 cms_toolbar.py:19 settings.py:111
msgid "Blog"
msgstr "Blog"
@ -40,155 +39,144 @@ msgid "object name"
msgstr ""
#: cms_appconfig.py:27
#| msgid "blog categories"
msgid "blog config"
msgstr ""
#: cms_appconfig.py:28
#| msgid "blog categories"
msgid "blog configs"
msgstr ""
#: cms_appconfig.py:31
msgid "untitled"
msgstr ""
#: cms_appconfig.py:32
#: cms_appconfig.py:36
msgid "Post published by default"
msgstr ""
#: cms_appconfig.py:36
#: cms_appconfig.py:40
msgid "Permalink structure"
msgstr ""
#: cms_appconfig.py:41
#: cms_appconfig.py:45
msgid "Use placeholder and plugins for article body"
msgstr ""
#: cms_appconfig.py:45
#: cms_appconfig.py:49
msgid "Use abstract field"
msgstr ""
#: cms_appconfig.py:49
#: cms_appconfig.py:53
msgid "Set author"
msgstr ""
#: cms_appconfig.py:49
#: cms_appconfig.py:53
msgid "Set author by default"
msgstr ""
#: cms_appconfig.py:53
#: cms_appconfig.py:57
msgid "Paginate size"
msgstr ""
#: cms_appconfig.py:54
#: cms_appconfig.py:58
msgid "When paginating list views, how many articles per page?"
msgstr ""
#: cms_appconfig.py:57
#: cms_appconfig.py:61
msgid "Template prefix"
msgstr ""
#: cms_appconfig.py:58
#: cms_appconfig.py:62
msgid "Alternative directory to load the blog templates from"
msgstr ""
#: cms_appconfig.py:61
#: cms_appconfig.py:65
msgid "Menu structure"
msgstr ""
#: cms_appconfig.py:63
#: cms_appconfig.py:67
msgid "Structure of the django CMS menu"
msgstr ""
#: cms_appconfig.py:66
#: cms_appconfig.py:70
msgid "Sitemap changefreq"
msgstr ""
#: cms_appconfig.py:69
#: cms_appconfig.py:73
msgid "Changefreq attribute for sitemap items"
msgstr ""
#: cms_appconfig.py:72
#: cms_appconfig.py:76
msgid "Sitemap priority"
msgstr ""
#: cms_appconfig.py:74
#: cms_appconfig.py:78
msgid "Priority attribute for sitemap items"
msgstr ""
#: cms_appconfig.py:77
#: cms_appconfig.py:81
msgid "Object type"
msgstr ""
#: cms_appconfig.py:81
#: cms_appconfig.py:85
msgid "Facebook type"
msgstr ""
#: cms_appconfig.py:85
#: cms_appconfig.py:89
msgid "Facebook application ID"
msgstr ""
#: cms_appconfig.py:89
#: cms_appconfig.py:93
msgid "Facebook profile ID"
msgstr ""
#: cms_appconfig.py:93
#: cms_appconfig.py:97
msgid "Facebook page URL"
msgstr ""
#: cms_appconfig.py:97
#: cms_appconfig.py:101
msgid "Facebook author URL"
msgstr ""
#: cms_appconfig.py:101
#: cms_appconfig.py:105
msgid "Facebook author"
msgstr ""
#: cms_appconfig.py:105
#: cms_appconfig.py:109
msgid "Twitter type"
msgstr ""
#: cms_appconfig.py:109
#: cms_appconfig.py:113
msgid "Twitter site handle"
msgstr ""
#: cms_appconfig.py:113
#: cms_appconfig.py:117
msgid "Twitter author handle"
msgstr ""
#: cms_appconfig.py:117
#: cms_appconfig.py:121
msgid "Google+ type"
msgstr ""
#: cms_appconfig.py:121
#: cms_appconfig.py:125
msgid "Google+ author name"
msgstr ""
#: cms_plugins.py:30 cms_plugins.py:49
msgid "Latest Blog Articles"
msgstr "Letzte Blog-Einträge"
#: cms_plugins.py:65
msgid "Author Blog Articles"
msgstr "Autoren Blog-Artikel"
#: cms_plugins.py:78 templates/djangocms_blog/plugins/tags.html:3
msgid "Tags"
msgstr "Tags"
#: cms_plugins.py:94 templates/djangocms_blog/plugins/categories.html:3
msgid "Categories"
msgstr "Kategorien"
#: cms_plugins.py:109 templates/djangocms_blog/plugins/archive.html:3
#: templates/djangocms_blog/post_list.html:12
msgid "Archive"
msgstr "Archiv"
#: cms_toolbar.py:21
#: cms_toolbar.py:22
msgid "Post list"
msgstr "Post Liste"
#: cms_toolbar.py:23
#: cms_toolbar.py:24
msgid "Add post"
msgstr "Post hinzufügen"
#: cms_toolbar.py:27
#: cms_toolbar.py:28
msgid "Edit configuration"
msgstr ""
#: cms_toolbar.py:31
#: cms_toolbar.py:32
msgid "Edit Post"
msgstr "Post bearbeiten"
@ -223,7 +211,7 @@ msgstr "erstellt am"
msgid "modified at"
msgstr "bearbeitet am"
#: models.py:38 models.py:123 models.py:276
#: models.py:38 models.py:123 models.py:275
msgid "app. config"
msgstr ""
@ -333,52 +321,52 @@ msgstr "Blog-Artikel"
msgid "blog articles"
msgstr "Blog-Artikel"
#: models.py:293
msgid "generic blog plugin"
msgstr ""
#: models.py:297 models.py:330
#: models.py:294 models.py:328
msgid "articles"
msgstr ""
#: models.py:298
#: models.py:295
msgid "The number of latests articles to be displayed."
msgstr "Anzahl der anzuzeigenden letzten Artikel"
#: models.py:300
#: models.py:297
msgid "filter by tag"
msgstr ""
#: models.py:301
#: models.py:298
msgid "Show only the blog articles tagged with chosen tags."
msgstr "Nur die Blog-Einträge mit dem ausgewählten Tag anzeigen"
#: models.py:304
#: models.py:301
msgid "filter by category"
msgstr ""
#: models.py:305
#: models.py:302
msgid "Show only the blog articles tagged with chosen categories."
msgstr "Nur die Blog-Einträge der ausgewählten Kategorie anzeigen"
#: models.py:309
#: models.py:306
#, python-format
msgid "%s latest articles by tag"
msgstr ""
#: models.py:326
#: models.py:324
msgid "authors"
msgstr ""
#: models.py:331
#: models.py:329
msgid "The number of author articles to be displayed."
msgstr "Die Anzahl der anzuzeigenden Autoren-Artikel"
#: models.py:335
#: models.py:333
#, python-format
msgid "%s latest articles by author"
msgstr ""
#: models.py:362
msgid "generic blog plugin"
msgstr ""
#: settings.py:16
msgid "Full date"
msgstr ""
@ -439,6 +427,27 @@ msgstr ""
msgid "never"
msgstr ""
#: settings.py:113
msgid "Latest Blog Articles"
msgstr "Letzte Blog-Einträge"
#: settings.py:115
msgid "Author Blog Articles"
msgstr "Autoren Blog-Artikel"
#: settings.py:117 templates/djangocms_blog/plugins/tags.html:3
msgid "Tags"
msgstr "Tags"
#: settings.py:119 templates/djangocms_blog/plugins/categories.html:3
msgid "Categories"
msgstr "Kategorien"
#: settings.py:121 templates/djangocms_blog/plugins/archive.html:3
#: templates/djangocms_blog/post_list.html:12
msgid "Archive"
msgstr "Archiv"
#: templates/djangocms_blog/includes/blog_item.html:24
msgid "read more"
msgstr "weiterlesen"

View file

@ -6,7 +6,7 @@ msgid ""
msgstr ""
"Project-Id-Version: \n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2015-10-31 13:23+0100\n"
"POT-Creation-Date: 2015-12-20 17:14+0100\n"
"PO-Revision-Date: 2014-03-05 18:09+0100\n"
"Last-Translator: Iacopo Spalletti\n"
"Language-Team: Italian <i.spalletti@nephila.it>\n"
@ -25,8 +25,7 @@ msgstr ""
msgid "django CMS Blog"
msgstr ""
#: cms_app.py:15 cms_plugins.py:64 cms_plugins.py:77 cms_plugins.py:93
#: cms_plugins.py:108 cms_toolbar.py:18
#: cms_app.py:15 cms_toolbar.py:19 settings.py:111
msgid "Blog"
msgstr "Blog"
@ -40,157 +39,148 @@ msgstr ""
#: cms_appconfig.py:27
#, fuzzy
#| msgid "blog categories"
msgid "blog config"
msgstr "blog categories"
#: cms_appconfig.py:28
#, fuzzy
#| msgid "blog categories"
msgid "blog configs"
msgstr "blog categories"
#: cms_appconfig.py:31
#, fuzzy
msgid "untitled"
msgstr "Title"
#: cms_appconfig.py:32
#: cms_appconfig.py:36
msgid "Post published by default"
msgstr ""
#: cms_appconfig.py:36
#: cms_appconfig.py:40
msgid "Permalink structure"
msgstr ""
#: cms_appconfig.py:41
#: cms_appconfig.py:45
msgid "Use placeholder and plugins for article body"
msgstr ""
#: cms_appconfig.py:45
#: cms_appconfig.py:49
msgid "Use abstract field"
msgstr ""
#: cms_appconfig.py:49
#: cms_appconfig.py:53
#, fuzzy
msgid "Set author"
msgstr "Author"
#: cms_appconfig.py:49
#: cms_appconfig.py:53
msgid "Set author by default"
msgstr ""
#: cms_appconfig.py:53
#: cms_appconfig.py:57
msgid "Paginate size"
msgstr ""
#: cms_appconfig.py:54
#: cms_appconfig.py:58
msgid "When paginating list views, how many articles per page?"
msgstr ""
#: cms_appconfig.py:57
#: cms_appconfig.py:61
msgid "Template prefix"
msgstr ""
#: cms_appconfig.py:58
#: cms_appconfig.py:62
msgid "Alternative directory to load the blog templates from"
msgstr ""
#: cms_appconfig.py:61
#: cms_appconfig.py:65
msgid "Menu structure"
msgstr ""
#: cms_appconfig.py:63
#: cms_appconfig.py:67
msgid "Structure of the django CMS menu"
msgstr ""
#: cms_appconfig.py:66
#: cms_appconfig.py:70
msgid "Sitemap changefreq"
msgstr ""
#: cms_appconfig.py:69
#: cms_appconfig.py:73
msgid "Changefreq attribute for sitemap items"
msgstr ""
#: cms_appconfig.py:72
#: cms_appconfig.py:76
msgid "Sitemap priority"
msgstr ""
#: cms_appconfig.py:74
#: cms_appconfig.py:78
msgid "Priority attribute for sitemap items"
msgstr ""
#: cms_appconfig.py:77
#: cms_appconfig.py:81
msgid "Object type"
msgstr ""
#: cms_appconfig.py:81
#: cms_appconfig.py:85
msgid "Facebook type"
msgstr ""
#: cms_appconfig.py:85
#: cms_appconfig.py:89
msgid "Facebook application ID"
msgstr ""
#: cms_appconfig.py:89
#: cms_appconfig.py:93
msgid "Facebook profile ID"
msgstr ""
#: cms_appconfig.py:93
#: cms_appconfig.py:97
msgid "Facebook page URL"
msgstr ""
#: cms_appconfig.py:97
#: cms_appconfig.py:101
msgid "Facebook author URL"
msgstr ""
#: cms_appconfig.py:101
#: cms_appconfig.py:105
#, fuzzy
msgid "Facebook author"
msgstr "Author"
#: cms_appconfig.py:105
#: cms_appconfig.py:109
msgid "Twitter type"
msgstr ""
#: cms_appconfig.py:109
#: cms_appconfig.py:113
msgid "Twitter site handle"
msgstr ""
#: cms_appconfig.py:113
#: cms_appconfig.py:117
msgid "Twitter author handle"
msgstr ""
#: cms_appconfig.py:117
#: cms_appconfig.py:121
msgid "Google+ type"
msgstr ""
#: cms_appconfig.py:121
#: cms_appconfig.py:125
msgid "Google+ author name"
msgstr ""
#: cms_plugins.py:30 cms_plugins.py:49
msgid "Latest Blog Articles"
msgstr "Latest Blog Articles"
#: cms_plugins.py:65
msgid "Author Blog Articles"
msgstr "Author Blog Articles"
#: cms_plugins.py:78 templates/djangocms_blog/plugins/tags.html:3
msgid "Tags"
msgstr "Tags"
#: cms_plugins.py:94 templates/djangocms_blog/plugins/categories.html:3
msgid "Categories"
msgstr "Categories"
#: cms_plugins.py:109 templates/djangocms_blog/plugins/archive.html:3
#: templates/djangocms_blog/post_list.html:12
msgid "Archive"
msgstr "Archive"
#: cms_toolbar.py:21
#: cms_toolbar.py:22
msgid "Post list"
msgstr "Post list"
#: cms_toolbar.py:23
#: cms_toolbar.py:24
msgid "Add post"
msgstr "Add post"
#: cms_toolbar.py:27
#: cms_toolbar.py:28
msgid "Edit configuration"
msgstr ""
#: cms_toolbar.py:31
#: cms_toolbar.py:32
msgid "Edit Post"
msgstr ""
@ -226,7 +216,7 @@ msgstr "created at"
msgid "modified at"
msgstr "modified at"
#: models.py:38 models.py:123 models.py:276
#: models.py:38 models.py:123 models.py:275
msgid "app. config"
msgstr ""
@ -349,55 +339,55 @@ msgstr "blog article"
msgid "blog articles"
msgstr "blog articles"
#: models.py:293
msgid "generic blog plugin"
msgstr ""
#: models.py:297 models.py:330
#: models.py:294 models.py:328
#, fuzzy
msgid "articles"
msgstr "0 articles"
#: models.py:298
#: models.py:295
msgid "The number of latests articles to be displayed."
msgstr "The number of latests articles to be displayed."
#: models.py:300
#: models.py:297
msgid "filter by tag"
msgstr ""
#: models.py:301
#: models.py:298
msgid "Show only the blog articles tagged with chosen tags."
msgstr "Show only the blog articles tagged with chosen tags."
#: models.py:304
#: models.py:301
#, fuzzy
msgid "filter by category"
msgstr "blog category"
#: models.py:305
#: models.py:302
msgid "Show only the blog articles tagged with chosen categories."
msgstr "Show only the blog articles tagged with chosen categories."
#: models.py:309
#: models.py:306
#, python-format
msgid "%s latest articles by tag"
msgstr ""
#: models.py:326
#: models.py:324
#, fuzzy
msgid "authors"
msgstr "Authors"
#: models.py:331
#: models.py:329
msgid "The number of author articles to be displayed."
msgstr "The number of author articles to be displayed."
#: models.py:335
#: models.py:333
#, python-format
msgid "%s latest articles by author"
msgstr ""
#: models.py:362
msgid "generic blog plugin"
msgstr ""
#: settings.py:16
msgid "Full date"
msgstr ""
@ -462,6 +452,27 @@ msgstr ""
msgid "never"
msgstr ""
#: settings.py:113
msgid "Latest Blog Articles"
msgstr "Latest Blog Articles"
#: settings.py:115
msgid "Author Blog Articles"
msgstr "Author Blog Articles"
#: settings.py:117 templates/djangocms_blog/plugins/tags.html:3
msgid "Tags"
msgstr "Tags"
#: settings.py:119 templates/djangocms_blog/plugins/categories.html:3
msgid "Categories"
msgstr "Categories"
#: settings.py:121 templates/djangocms_blog/plugins/archive.html:3
#: templates/djangocms_blog/post_list.html:12
msgid "Archive"
msgstr "Archive"
#: templates/djangocms_blog/includes/blog_item.html:24
msgid "read more"
msgstr "read more"

View file

@ -7,8 +7,8 @@ msgid ""
msgstr ""
"Project-Id-Version: djangocms-blog\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2015-10-31 13:23+0100\n"
"PO-Revision-Date: 2015-10-31 12:23+0000\n"
"POT-Creation-Date: 2015-12-20 17:14+0100\n"
"PO-Revision-Date: 2015-12-20 16:15+0000\n"
"Last-Translator: yakky <i.spalletti@nephila.it>\n"
"Language-Team: Spanish (http://www.transifex.com/nephila/djangocms-blog/language/es/)\n"
"MIME-Version: 1.0\n"
@ -26,8 +26,7 @@ msgstr ""
msgid "django CMS Blog"
msgstr ""
#: cms_app.py:15 cms_plugins.py:64 cms_plugins.py:77 cms_plugins.py:93
#: cms_plugins.py:108 cms_toolbar.py:18
#: cms_app.py:15 cms_toolbar.py:19 settings.py:111
msgid "Blog"
msgstr "Blog"
@ -40,155 +39,144 @@ msgid "object name"
msgstr ""
#: cms_appconfig.py:27
#| msgid "blog categories"
msgid "blog config"
msgstr ""
#: cms_appconfig.py:28
#| msgid "blog categories"
msgid "blog configs"
msgstr ""
#: cms_appconfig.py:31
msgid "untitled"
msgstr ""
#: cms_appconfig.py:32
#: cms_appconfig.py:36
msgid "Post published by default"
msgstr ""
#: cms_appconfig.py:36
#: cms_appconfig.py:40
msgid "Permalink structure"
msgstr ""
#: cms_appconfig.py:41
#: cms_appconfig.py:45
msgid "Use placeholder and plugins for article body"
msgstr ""
#: cms_appconfig.py:45
#: cms_appconfig.py:49
msgid "Use abstract field"
msgstr ""
#: cms_appconfig.py:49
#: cms_appconfig.py:53
msgid "Set author"
msgstr ""
#: cms_appconfig.py:49
#: cms_appconfig.py:53
msgid "Set author by default"
msgstr ""
#: cms_appconfig.py:53
#: cms_appconfig.py:57
msgid "Paginate size"
msgstr ""
#: cms_appconfig.py:54
#: cms_appconfig.py:58
msgid "When paginating list views, how many articles per page?"
msgstr ""
#: cms_appconfig.py:57
#: cms_appconfig.py:61
msgid "Template prefix"
msgstr ""
#: cms_appconfig.py:58
#: cms_appconfig.py:62
msgid "Alternative directory to load the blog templates from"
msgstr ""
#: cms_appconfig.py:61
#: cms_appconfig.py:65
msgid "Menu structure"
msgstr ""
#: cms_appconfig.py:63
#: cms_appconfig.py:67
msgid "Structure of the django CMS menu"
msgstr ""
#: cms_appconfig.py:66
#: cms_appconfig.py:70
msgid "Sitemap changefreq"
msgstr ""
#: cms_appconfig.py:69
#: cms_appconfig.py:73
msgid "Changefreq attribute for sitemap items"
msgstr ""
#: cms_appconfig.py:72
#: cms_appconfig.py:76
msgid "Sitemap priority"
msgstr ""
#: cms_appconfig.py:74
#: cms_appconfig.py:78
msgid "Priority attribute for sitemap items"
msgstr ""
#: cms_appconfig.py:77
#: cms_appconfig.py:81
msgid "Object type"
msgstr ""
#: cms_appconfig.py:81
#: cms_appconfig.py:85
msgid "Facebook type"
msgstr ""
#: cms_appconfig.py:85
#: cms_appconfig.py:89
msgid "Facebook application ID"
msgstr ""
#: cms_appconfig.py:89
#: cms_appconfig.py:93
msgid "Facebook profile ID"
msgstr ""
#: cms_appconfig.py:93
#: cms_appconfig.py:97
msgid "Facebook page URL"
msgstr ""
#: cms_appconfig.py:97
#: cms_appconfig.py:101
msgid "Facebook author URL"
msgstr ""
#: cms_appconfig.py:101
#: cms_appconfig.py:105
msgid "Facebook author"
msgstr ""
#: cms_appconfig.py:105
#: cms_appconfig.py:109
msgid "Twitter type"
msgstr ""
#: cms_appconfig.py:109
#: cms_appconfig.py:113
msgid "Twitter site handle"
msgstr ""
#: cms_appconfig.py:113
#: cms_appconfig.py:117
msgid "Twitter author handle"
msgstr ""
#: cms_appconfig.py:117
#: cms_appconfig.py:121
msgid "Google+ type"
msgstr ""
#: cms_appconfig.py:121
#: cms_appconfig.py:125
msgid "Google+ author name"
msgstr ""
#: cms_plugins.py:30 cms_plugins.py:49
msgid "Latest Blog Articles"
msgstr "Últimos artículos del blog"
#: cms_plugins.py:65
msgid "Author Blog Articles"
msgstr "Artículos del blog por author"
#: cms_plugins.py:78 templates/djangocms_blog/plugins/tags.html:3
msgid "Tags"
msgstr "Etiquetas"
#: cms_plugins.py:94 templates/djangocms_blog/plugins/categories.html:3
msgid "Categories"
msgstr "Categorías"
#: cms_plugins.py:109 templates/djangocms_blog/plugins/archive.html:3
#: templates/djangocms_blog/post_list.html:12
msgid "Archive"
msgstr "Archivo"
#: cms_toolbar.py:21
#: cms_toolbar.py:22
msgid "Post list"
msgstr "Lista de entradas"
#: cms_toolbar.py:23
#: cms_toolbar.py:24
msgid "Add post"
msgstr "Añadir entradas"
#: cms_toolbar.py:27
#: cms_toolbar.py:28
msgid "Edit configuration"
msgstr ""
#: cms_toolbar.py:31
#: cms_toolbar.py:32
msgid "Edit Post"
msgstr "Editar entrada"
@ -223,7 +211,7 @@ msgstr "Creado en"
msgid "modified at"
msgstr "Actualizado en"
#: models.py:38 models.py:123 models.py:276
#: models.py:38 models.py:123 models.py:275
msgid "app. config"
msgstr ""
@ -333,52 +321,52 @@ msgstr "artículo del blog"
msgid "blog articles"
msgstr "artículos del blog"
#: models.py:293
msgid "generic blog plugin"
msgstr ""
#: models.py:297 models.py:330
#: models.py:294 models.py:328
msgid "articles"
msgstr ""
#: models.py:298
#: models.py:295
msgid "The number of latests articles to be displayed."
msgstr "El número de últimos artículos a mostrar."
#: models.py:300
#: models.py:297
msgid "filter by tag"
msgstr ""
#: models.py:301
#: models.py:298
msgid "Show only the blog articles tagged with chosen tags."
msgstr "Mostrar solo los artículos del blog etiquetados con las etiquetas elegidas."
#: models.py:304
#: models.py:301
msgid "filter by category"
msgstr ""
#: models.py:305
#: models.py:302
msgid "Show only the blog articles tagged with chosen categories."
msgstr "Mostrar solo los artículos del blog etiquetados con las categorías elegidas."
#: models.py:309
#: models.py:306
#, python-format
msgid "%s latest articles by tag"
msgstr ""
#: models.py:326
#: models.py:324
msgid "authors"
msgstr ""
#: models.py:331
#: models.py:329
msgid "The number of author articles to be displayed."
msgstr "El número de autores de artículo a mostrar."
#: models.py:335
#: models.py:333
#, python-format
msgid "%s latest articles by author"
msgstr ""
#: models.py:362
msgid "generic blog plugin"
msgstr ""
#: settings.py:16
msgid "Full date"
msgstr ""
@ -439,6 +427,27 @@ msgstr ""
msgid "never"
msgstr ""
#: settings.py:113
msgid "Latest Blog Articles"
msgstr "Últimos artículos del blog"
#: settings.py:115
msgid "Author Blog Articles"
msgstr "Artículos del blog por author"
#: settings.py:117 templates/djangocms_blog/plugins/tags.html:3
msgid "Tags"
msgstr "Etiquetas"
#: settings.py:119 templates/djangocms_blog/plugins/categories.html:3
msgid "Categories"
msgstr "Categorías"
#: settings.py:121 templates/djangocms_blog/plugins/archive.html:3
#: templates/djangocms_blog/post_list.html:12
msgid "Archive"
msgstr "Archivo"
#: templates/djangocms_blog/includes/blog_item.html:24
msgid "read more"
msgstr "leer más"

Binary file not shown.

View file

@ -0,0 +1,541 @@
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
# This file is distributed under the same license as the PACKAGE package.
#
# Iacopo Spalletti, 2014.
msgid ""
msgstr ""
"Project-Id-Version: \n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2015-12-20 17:14+0100\n"
"PO-Revision-Date: 2016-01-20 19:12+0100\n"
"Last-Translator: Olivier Tabone <olivier.tabone@ripplemotion.fr>\n"
"Language-Team: FR <>\n"
"Language: fr\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
"X-Generator: Poedit 1.5.7\n"
#: admin.py:169 admin.py:177 admin.py:185
msgid "You can provide plain strings, Post model attribute or method names"
msgstr ""
"Vous pouvez préciser des chaines de caractères, des attributs ou des "
"methodes du modèle Post"
#: apps.py:15
msgid "django CMS Blog"
msgstr "django CMS Blog"
#: cms_app.py:15 cms_toolbar.py:19 settings.py:111
msgid "Blog"
msgstr "Blog"
#: cms_appconfig.py:20
msgid "application title"
msgstr "TItre de lapplication"
#: cms_appconfig.py:22
msgid "object name"
msgstr "Nom de lobjet"
#: cms_appconfig.py:27
#| msgid "blog categories"
msgid "blog config"
msgstr "Catégorie du blog"
#: cms_appconfig.py:28
#| msgid "blog categories"
msgid "blog configs"
msgstr "Catégories du blog"
#: cms_appconfig.py:31
msgid "untitled"
msgstr "Titre"
#: cms_appconfig.py:36
msgid "Post published by default"
msgstr "Post publié par défaut"
#: cms_appconfig.py:40
msgid "Permalink structure"
msgstr "Structure permalien"
#: cms_appconfig.py:45
msgid "Use placeholder and plugins for article body"
msgstr "Utiliser une balise et des plugins pour le corps de larticle"
#: cms_appconfig.py:49
msgid "Use abstract field"
msgstr "Utiliser un champ abstrait"
#: cms_appconfig.py:53
msgid "Set author"
msgstr "Auteur"
#: cms_appconfig.py:53
msgid "Set author by default"
msgstr "Spécifier lauteur par défaut"
#: cms_appconfig.py:57
msgid "Paginate size"
msgstr "Nombre darticle par page"
#: cms_appconfig.py:58
msgid "When paginating list views, how many articles per page?"
msgstr ""
"Lors de la pagination des listes, combien souhaitez vous afficher darticles "
"par page ?"
#: cms_appconfig.py:61
msgid "Template prefix"
msgstr "Prefixe dans le template"
#: cms_appconfig.py:62
msgid "Alternative directory to load the blog templates from"
msgstr "Répertoire alternatif à partir du quel charger les templates du blog"
#: cms_appconfig.py:65
msgid "Menu structure"
msgstr "Structure du menu"
#: cms_appconfig.py:67
msgid "Structure of the django CMS menu"
msgstr "Structure du menu django CMS"
#: cms_appconfig.py:70
msgid "Sitemap changefreq"
msgstr "changefreq de la Sitemap"
#: cms_appconfig.py:73
msgid "Changefreq attribute for sitemap items"
msgstr "Attribut Changfreq pour chaque entrée de la sitemap."
#: cms_appconfig.py:76
msgid "Sitemap priority"
msgstr "Priorité de la sitemap"
#: cms_appconfig.py:78
msgid "Priority attribute for sitemap items"
msgstr "Priorité de chaque entrée de la sitemap"
#: cms_appconfig.py:81
msgid "Object type"
msgstr "Type de lobjet"
#: cms_appconfig.py:85
msgid "Facebook type"
msgstr "Facebook type"
#: cms_appconfig.py:89
msgid "Facebook application ID"
msgstr "Facebook application ID"
#: cms_appconfig.py:93
msgid "Facebook profile ID"
msgstr "Facebook profile ID"
#: cms_appconfig.py:97
msgid "Facebook page URL"
msgstr "Facebook page URL"
#: cms_appconfig.py:101
msgid "Facebook author URL"
msgstr "Facebook author URL"
#: cms_appconfig.py:105
msgid "Facebook author"
msgstr "Auteur"
#: cms_appconfig.py:109
msgid "Twitter type"
msgstr "Twitter type"
#: cms_appconfig.py:113
msgid "Twitter site handle"
msgstr "Twitter site handle"
#: cms_appconfig.py:117
msgid "Twitter author handle"
msgstr "Twitter author handle"
#: cms_appconfig.py:121
msgid "Google+ type"
msgstr "Google+ type"
#: cms_appconfig.py:125
msgid "Google+ author name"
msgstr "Google+ author name"
#: cms_toolbar.py:22
msgid "Post list"
msgstr "Post list"
#: cms_toolbar.py:24
msgid "Add post"
msgstr "Add post"
#: cms_toolbar.py:28
msgid "Edit configuration"
msgstr "Modifier la configuration"
#: cms_toolbar.py:32
msgid "Edit Post"
msgstr "Modifier Post"
#: cms_wizards.py:47
#, python-brace-format
msgid "New {0}"
msgstr "Nouveau {0}"
#: cms_wizards.py:51
#, python-brace-format
msgid "Create a new {0} in {1}"
msgstr "Ajouter un nouveau {0} dans {1}"
#: feeds.py:24
#, python-format
msgid "Blog articles on %(site_name)s"
msgstr "Articles de blog sur le site %(site_name)s"
#: menu.py:16
msgid "Blog menu"
msgstr "Catégorie du blog"
#: models.py:34
msgid "parent"
msgstr "père"
#: models.py:35
msgid "created at"
msgstr "crée le"
#: models.py:36
msgid "modified at"
msgstr "modifié le"
#: models.py:38 models.py:123 models.py:275
msgid "app. config"
msgstr "app. config"
#: models.py:42
msgid "name"
msgstr "nom"
#: models.py:43 models.py:128
msgid "slug"
msgstr "slug"
#: models.py:50
msgid "blog category"
msgstr "catégorie du blog"
#: models.py:51
msgid "blog categories"
msgstr "catégories du blog"
#: models.py:91
msgid "author"
msgstr "auteur"
#: models.py:94
msgid "created"
msgstr "crée le"
#: models.py:95
msgid "last modified"
msgstr "modifié le"
#: models.py:96
msgid "published since"
msgstr "publié depuis"
#: models.py:98
msgid "published until"
msgstr "publié jusquà"
#: models.py:100
msgid "publish"
msgstr "publier"
#: models.py:101
msgid "category"
msgstr "catégorie"
#: models.py:103
msgid "main image"
msgstr "Image principale"
#: models.py:107
msgid "main image thumbnail"
msgstr "Miniature image principale"
#: models.py:112
msgid "main image full"
msgstr "Image principale taille réelle"
#: models.py:116
msgid "enable comments on post"
msgstr "Activer les commentaires sur larticle"
#: models.py:118
msgid "Site(s)"
msgstr "Site(s)"
#: models.py:119
msgid ""
"Select sites in which to show the post. If none is set it will be visible in "
"all the configured sites."
msgstr ""
"Selectionnez les sites dans lesquels afficher larticle. Si aucun site nest "
"selectionné, larticle sera visible dans tous les sites."
#: models.py:127
msgid "title"
msgstr "Titre"
#: models.py:129
msgid "abstract"
msgstr "abstract"
#: models.py:130
msgid "post meta description"
msgstr "Description meta de larticle"
#: models.py:132
msgid "post meta keywords"
msgstr "Mots clés meta de larticle"
#: models.py:134
msgid "post meta title"
msgstr "Titre meta de larticle"
#: models.py:135
msgid "used in title tag and social sharing"
msgstr "Visible dans le titre et dans le partage sur les réseaux sociaux"
#: models.py:138
msgid "text"
msgstr "texte"
#: models.py:175
msgid "blog article"
msgstr "article du blog"
#: models.py:176
msgid "blog articles"
msgstr "articles du blog"
#: models.py:294 models.py:328
#, fuzzy
msgid "articles"
msgstr "0 articles"
#: models.py:295
msgid "The number of latests articles to be displayed."
msgstr "Nombre darticles récents à afficher."
#: models.py:297
msgid "filter by tag"
msgstr "filtrer par tag"
#: models.py:298
msgid "Show only the blog articles tagged with chosen tags."
msgstr "Afficher seulement les articles qui ont les tags séléctionnés."
#: models.py:301
msgid "filter by category"
msgstr "filtrer par catégorie"
#: models.py:302
msgid "Show only the blog articles tagged with chosen categories."
msgstr "Afficher seulement les articles des catégories séléctionnées"
#: models.py:306
#, python-format
msgid "%s latest articles by tag"
msgstr "%s derniers articles par tag"
#: models.py:324
msgid "authors"
msgstr "Auteurs"
#: models.py:329
msgid "The number of author articles to be displayed."
msgstr "Le nombre darticles de lauteur à afficher"
#: models.py:333
#, python-format
msgid "%s latest articles by author"
msgstr "%s derniers articles par auteur"
#: models.py:362
msgid "generic blog plugin"
msgstr "plugin générique pour le blog"
#: settings.py:16
msgid "Full date"
msgstr "Date complète"
#: settings.py:17
msgid "Year / Month"
msgstr "Année / Mois"
#: settings.py:18 templates/djangocms_blog/post_list.html:14
msgid "Category"
msgstr "Catégorie"
#: settings.py:19
#, fuzzy
msgid "Just slug"
msgstr "slug"
#: settings.py:28
msgid "Categories and posts"
msgstr "Catégories"
#: settings.py:29
msgid "Categories only"
msgstr "Catégories"
#: settings.py:30
msgid "Posts only"
msgstr "Articles"
#: settings.py:31
msgid "None"
msgstr "Aucun"
#: settings.py:34
msgid "always"
msgstr "toujours"
#: settings.py:35
msgid "hourly"
msgstr "toutes les heures"
#: settings.py:36
msgid "daily"
msgstr "quotidien"
#: settings.py:37
msgid "weekly"
msgstr "hebdomadaire"
#: settings.py:38
msgid "monthly"
msgstr "mensuel"
#: settings.py:39
msgid "yearly"
msgstr "annuel"
#: settings.py:40
msgid "never"
msgstr "jamais"
#: settings.py:113
msgid "Latest Blog Articles"
msgstr "Articles récents du blog"
#: settings.py:115
msgid "Author Blog Articles"
msgstr "Articles de lauteur"
#: settings.py:117 templates/djangocms_blog/plugins/tags.html:3
msgid "Tags"
msgstr "Tags"
#: settings.py:119 templates/djangocms_blog/plugins/categories.html:3
msgid "Categories"
msgstr "Catégories"
#: settings.py:121 templates/djangocms_blog/plugins/archive.html:3
#: templates/djangocms_blog/post_list.html:12
msgid "Archive"
msgstr "Archive"
#: templates/djangocms_blog/includes/blog_item.html:24
msgid "read more"
msgstr "lire la suite"
#: templates/djangocms_blog/includes/blog_meta.html:6
msgid "by"
msgstr "par"
#: templates/djangocms_blog/plugins/archive.html:17
#: templates/djangocms_blog/plugins/authors.html:10
#: templates/djangocms_blog/plugins/categories.html:10
#: templates/djangocms_blog/plugins/tags.html:10
#, python-format
msgid "1 article"
msgid_plural "%(articles)s articles"
msgstr[0] "1 article"
msgstr[1] "%(articles)s articles"
#: templates/djangocms_blog/plugins/archive.html:18
#: templates/djangocms_blog/plugins/authors.html:11
#: templates/djangocms_blog/plugins/categories.html:11
#: templates/djangocms_blog/plugins/tags.html:11
msgid "0 articles"
msgstr "0 articles"
#: templates/djangocms_blog/plugins/archive.html:26
#: templates/djangocms_blog/plugins/authors.html:15
#: templates/djangocms_blog/plugins/latest_entries.html:7
#: templates/djangocms_blog/plugins/tags.html:15
#: templates/djangocms_blog/post_list.html:21
msgid "No article found."
msgstr "Aucun article trouvé"
#: templates/djangocms_blog/plugins/authors.html:3
msgid "Authors"
msgstr "Auteurs"
#: templates/djangocms_blog/plugins/categories.html:15
msgid "No categories found."
msgstr "Aucune catégorie trouvé"
#: templates/djangocms_blog/post_list.html:11
msgid "Articles by"
msgstr "Articles écrits par"
#: templates/djangocms_blog/post_list.html:13
msgid "Tag"
msgstr "Tag"
#: templates/djangocms_blog/post_list.html:24
msgid "Back"
msgstr "Retour"
#: templates/djangocms_blog/post_list.html:29
msgid "previous"
msgstr "précédent"
#: templates/djangocms_blog/post_list.html:32
msgid "Page"
msgstr "Page"
#: templates/djangocms_blog/post_list.html:32
msgid "of"
msgstr "sur"
#: templates/djangocms_blog/post_list.html:35
msgid "next"
msgstr "suivant"
#, fuzzy
#~ msgid "Article"
#~ msgstr "Articles"
#~ msgid "Text"
#~ msgstr "Text"
#~ msgid "blog post"
#~ msgstr "blog post"
#~ msgid "Entries by"
#~ msgstr "Entries by"
#~ msgid "No entry found."
#~ msgstr "No entry found."

View file

@ -8,8 +8,8 @@ msgid ""
msgstr ""
"Project-Id-Version: djangocms-blog\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2015-10-31 13:23+0100\n"
"PO-Revision-Date: 2015-10-31 12:24+0000\n"
"POT-Creation-Date: 2015-12-20 17:14+0100\n"
"PO-Revision-Date: 2015-12-20 16:19+0000\n"
"Last-Translator: yakky <i.spalletti@nephila.it>\n"
"Language-Team: Italian (http://www.transifex.com/nephila/djangocms-blog/language/it/)\n"
"MIME-Version: 1.0\n"
@ -27,8 +27,7 @@ msgstr "Puoi inserire stringhe, attributi o metodi del model Post"
msgid "django CMS Blog"
msgstr "django CMS Blog"
#: cms_app.py:15 cms_plugins.py:64 cms_plugins.py:77 cms_plugins.py:93
#: cms_plugins.py:108 cms_toolbar.py:18
#: cms_app.py:15 cms_toolbar.py:19 settings.py:111
msgid "Blog"
msgstr "Blog"
@ -41,155 +40,144 @@ msgid "object name"
msgstr "Nome oggetto"
#: cms_appconfig.py:27
#| msgid "blog categories"
msgid "blog config"
msgstr "Configurazione del blog"
#: cms_appconfig.py:28
#| msgid "blog categories"
msgid "blog configs"
msgstr "Configurazioni del blog"
#: cms_appconfig.py:31
msgid "untitled"
msgstr "Senza titolo"
#: cms_appconfig.py:32
#: cms_appconfig.py:36
msgid "Post published by default"
msgstr "Articoli pubblicati di default"
#: cms_appconfig.py:36
#: cms_appconfig.py:40
msgid "Permalink structure"
msgstr "Struttura permalink"
#: cms_appconfig.py:41
#: cms_appconfig.py:45
msgid "Use placeholder and plugins for article body"
msgstr "Usa placeholder e plugin per il contenuto"
#: cms_appconfig.py:45
#: cms_appconfig.py:49
msgid "Use abstract field"
msgstr "Usa campo abstract"
#: cms_appconfig.py:49
#: cms_appconfig.py:53
msgid "Set author"
msgstr "Imposta autore"
#: cms_appconfig.py:49
#: cms_appconfig.py:53
msgid "Set author by default"
msgstr "Imposta autore di default"
#: cms_appconfig.py:53
#: cms_appconfig.py:57
msgid "Paginate size"
msgstr "Dimensione paginazione"
#: cms_appconfig.py:54
#: cms_appconfig.py:58
msgid "When paginating list views, how many articles per page?"
msgstr "Se la lista è paginata, quanti articoli visualizzati per pagina?"
#: cms_appconfig.py:57
#: cms_appconfig.py:61
msgid "Template prefix"
msgstr "Prefisso template"
#: cms_appconfig.py:58
#: cms_appconfig.py:62
msgid "Alternative directory to load the blog templates from"
msgstr "Directory alternativa da cui caricare i template"
#: cms_appconfig.py:61
#: cms_appconfig.py:65
msgid "Menu structure"
msgstr "Struttura del menu"
#: cms_appconfig.py:63
#: cms_appconfig.py:67
msgid "Structure of the django CMS menu"
msgstr "Struttura del menu django CMS"
#: cms_appconfig.py:66
#: cms_appconfig.py:70
msgid "Sitemap changefreq"
msgstr "Frequenza aggiornamento Sitemap"
#: cms_appconfig.py:69
#: cms_appconfig.py:73
msgid "Changefreq attribute for sitemap items"
msgstr "Attributo Changefreq per gli oggetti della sitemap"
#: cms_appconfig.py:72
#: cms_appconfig.py:76
msgid "Sitemap priority"
msgstr "Priorità sitemap"
#: cms_appconfig.py:74
#: cms_appconfig.py:78
msgid "Priority attribute for sitemap items"
msgstr "Attributo priorità per gli oggetti nella sitemap"
#: cms_appconfig.py:77
#: cms_appconfig.py:81
msgid "Object type"
msgstr "Tipo oggetto"
#: cms_appconfig.py:81
#: cms_appconfig.py:85
msgid "Facebook type"
msgstr "Tipo oggetto Facebook"
#: cms_appconfig.py:85
#: cms_appconfig.py:89
msgid "Facebook application ID"
msgstr "ID Applicazione Facebook"
#: cms_appconfig.py:89
#: cms_appconfig.py:93
msgid "Facebook profile ID"
msgstr "ID Profilo Facebook"
#: cms_appconfig.py:93
#: cms_appconfig.py:97
msgid "Facebook page URL"
msgstr "URL Pagina Facebook"
#: cms_appconfig.py:97
#: cms_appconfig.py:101
msgid "Facebook author URL"
msgstr "URL Autore Facebook"
#: cms_appconfig.py:101
#: cms_appconfig.py:105
msgid "Facebook author"
msgstr "Autore Facebook"
#: cms_appconfig.py:105
#: cms_appconfig.py:109
msgid "Twitter type"
msgstr "Tipo oggetto Twitter"
#: cms_appconfig.py:109
#: cms_appconfig.py:113
msgid "Twitter site handle"
msgstr "Nome Twitter del sito"
#: cms_appconfig.py:113
#: cms_appconfig.py:117
msgid "Twitter author handle"
msgstr "Nome Twitter autore"
#: cms_appconfig.py:117
#: cms_appconfig.py:121
msgid "Google+ type"
msgstr "Tipo oggetto Google+"
#: cms_appconfig.py:121
#: cms_appconfig.py:125
msgid "Google+ author name"
msgstr "Nome Google+ autore"
#: cms_plugins.py:30 cms_plugins.py:49
msgid "Latest Blog Articles"
msgstr "Ultimi articoli"
#: cms_plugins.py:65
msgid "Author Blog Articles"
msgstr "Articoli per autore"
#: cms_plugins.py:78 templates/djangocms_blog/plugins/tags.html:3
msgid "Tags"
msgstr "Tag"
#: cms_plugins.py:94 templates/djangocms_blog/plugins/categories.html:3
msgid "Categories"
msgstr "Categorie"
#: cms_plugins.py:109 templates/djangocms_blog/plugins/archive.html:3
#: templates/djangocms_blog/post_list.html:12
msgid "Archive"
msgstr "Archivio"
#: cms_toolbar.py:21
#: cms_toolbar.py:22
msgid "Post list"
msgstr "Lista degli articoli"
#: cms_toolbar.py:23
#: cms_toolbar.py:24
msgid "Add post"
msgstr "Aggiungi articolo"
#: cms_toolbar.py:27
#: cms_toolbar.py:28
msgid "Edit configuration"
msgstr "Modifica configurazione"
#: cms_toolbar.py:31
#: cms_toolbar.py:32
msgid "Edit Post"
msgstr "Modifica articolo"
@ -224,7 +212,7 @@ msgstr "creato il"
msgid "modified at"
msgstr "modificato il"
#: models.py:38 models.py:123 models.py:276
#: models.py:38 models.py:123 models.py:275
msgid "app. config"
msgstr "config. app."
@ -334,52 +322,52 @@ msgstr "articolo del blog"
msgid "blog articles"
msgstr "articoli del blog"
#: models.py:293
msgid "generic blog plugin"
msgstr "plugin blog"
#: models.py:297 models.py:330
#: models.py:294 models.py:328
msgid "articles"
msgstr "articoli"
#: models.py:298
#: models.py:295
msgid "The number of latests articles to be displayed."
msgstr "Il numero di articoli da mostrare."
#: models.py:300
#: models.py:297
msgid "filter by tag"
msgstr "filtra per tag"
#: models.py:301
#: models.py:298
msgid "Show only the blog articles tagged with chosen tags."
msgstr "Mostra solo gli articoli marcati con i tag selezionati."
#: models.py:304
#: models.py:301
msgid "filter by category"
msgstr "filtra per categoria"
#: models.py:305
#: models.py:302
msgid "Show only the blog articles tagged with chosen categories."
msgstr "Mostra solo gli articoli marcati con i categorie selezionati."
#: models.py:309
#: models.py:306
#, python-format
msgid "%s latest articles by tag"
msgstr "ultimi %s articoli per tag"
#: models.py:326
#: models.py:324
msgid "authors"
msgstr "autori"
#: models.py:331
#: models.py:329
msgid "The number of author articles to be displayed."
msgstr "Numero di elementi per autore da mostrare."
#: models.py:335
#: models.py:333
#, python-format
msgid "%s latest articles by author"
msgstr "ultimi %s articoli per autore"
#: models.py:362
msgid "generic blog plugin"
msgstr "plugin blog"
#: settings.py:16
msgid "Full date"
msgstr "Data completa"
@ -440,6 +428,27 @@ msgstr "ogni anno"
msgid "never"
msgstr "mai"
#: settings.py:113
msgid "Latest Blog Articles"
msgstr "Ultimi articoli"
#: settings.py:115
msgid "Author Blog Articles"
msgstr "Articoli per autore"
#: settings.py:117 templates/djangocms_blog/plugins/tags.html:3
msgid "Tags"
msgstr "Tag"
#: settings.py:119 templates/djangocms_blog/plugins/categories.html:3
msgid "Categories"
msgstr "Categorie"
#: settings.py:121 templates/djangocms_blog/plugins/archive.html:3
#: templates/djangocms_blog/post_list.html:12
msgid "Archive"
msgstr "Archivio"
#: templates/djangocms_blog/includes/blog_item.html:24
msgid "read more"
msgstr "leggi"

View file

@ -7,8 +7,8 @@ msgid ""
msgstr ""
"Project-Id-Version: djangocms-blog\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2015-10-31 13:23+0100\n"
"PO-Revision-Date: 2015-10-31 12:23+0000\n"
"POT-Creation-Date: 2015-12-20 17:14+0100\n"
"PO-Revision-Date: 2015-12-20 16:15+0000\n"
"Last-Translator: yakky <i.spalletti@nephila.it>\n"
"Language-Team: Lithuanian (http://www.transifex.com/nephila/djangocms-blog/language/lt/)\n"
"MIME-Version: 1.0\n"
@ -26,8 +26,7 @@ msgstr "Galite pateikti paprasto teksto eilutes, įrašo modelio atributą arba
msgid "django CMS Blog"
msgstr "django CMS Tinklaraštis"
#: cms_app.py:15 cms_plugins.py:64 cms_plugins.py:77 cms_plugins.py:93
#: cms_plugins.py:108 cms_toolbar.py:18
#: cms_app.py:15 cms_toolbar.py:19 settings.py:111
msgid "Blog"
msgstr "Tinklaraštis"
@ -37,170 +36,159 @@ msgstr "aplikacijos pavadinimas"
#: cms_appconfig.py:22
msgid "object name"
msgstr ""
msgstr "objekto pavadinimas"
#: cms_appconfig.py:27
#| msgid "blog categories"
msgid "blog config"
msgstr ""
#: cms_appconfig.py:28
#| msgid "blog categories"
msgid "blog configs"
msgstr ""
#: cms_appconfig.py:31
msgid "untitled"
msgstr "be pavadinimo"
#: cms_appconfig.py:32
#: cms_appconfig.py:36
msgid "Post published by default"
msgstr "Pagal numatymą įrašas publikuojamas"
#: cms_appconfig.py:36
#: cms_appconfig.py:40
msgid "Permalink structure"
msgstr "Nuolatinės nuorodos struktūra"
#: cms_appconfig.py:41
#: cms_appconfig.py:45
msgid "Use placeholder and plugins for article body"
msgstr "Straipsnio tekstui naudokite rezervuotą vietą ir įskiepiuis"
#: cms_appconfig.py:45
#: cms_appconfig.py:49
msgid "Use abstract field"
msgstr "Naudoti santraukos lauką"
#: cms_appconfig.py:49
#: cms_appconfig.py:53
msgid "Set author"
msgstr "Nustatyti autorių"
#: cms_appconfig.py:49
#: cms_appconfig.py:53
msgid "Set author by default"
msgstr "Pagal numatymą nustatyti autorių"
#: cms_appconfig.py:53
#: cms_appconfig.py:57
msgid "Paginate size"
msgstr "Puslapiavimo dydis"
#: cms_appconfig.py:54
#: cms_appconfig.py:58
msgid "When paginating list views, how many articles per page?"
msgstr "Kai puslapiuojamas sąrašas, kiek straipsnių atvaizduoti puslapyje?"
#: cms_appconfig.py:57
#: cms_appconfig.py:61
msgid "Template prefix"
msgstr "Šablono priešdėlis"
#: cms_appconfig.py:58
#: cms_appconfig.py:62
msgid "Alternative directory to load the blog templates from"
msgstr "Alternatyvus katalogas iš kurio būtų užkraunami šablonai"
#: cms_appconfig.py:61
#: cms_appconfig.py:65
msgid "Menu structure"
msgstr "Meniu struktūra"
#: cms_appconfig.py:63
#: cms_appconfig.py:67
msgid "Structure of the django CMS menu"
msgstr "Django CMS meniu struktūra"
#: cms_appconfig.py:66
#: cms_appconfig.py:70
msgid "Sitemap changefreq"
msgstr ""
msgstr "Tinklalapio medžio keitimo dažnumas"
#: cms_appconfig.py:69
#: cms_appconfig.py:73
msgid "Changefreq attribute for sitemap items"
msgstr ""
msgstr "Keitimo dažnumo atributas tinklalapio medžio objektams"
#: cms_appconfig.py:72
#: cms_appconfig.py:76
msgid "Sitemap priority"
msgstr ""
msgstr "Tinklalapio medžio prioritetas"
#: cms_appconfig.py:74
#: cms_appconfig.py:78
msgid "Priority attribute for sitemap items"
msgstr ""
msgstr "Prioriteto atributas tinklalapio medžio objektams"
#: cms_appconfig.py:77
#: cms_appconfig.py:81
msgid "Object type"
msgstr "Objekto tipas"
#: cms_appconfig.py:81
#: cms_appconfig.py:85
msgid "Facebook type"
msgstr "Facebook tipas"
#: cms_appconfig.py:85
#: cms_appconfig.py:89
msgid "Facebook application ID"
msgstr "Facebook aplikacijos ID"
#: cms_appconfig.py:89
#: cms_appconfig.py:93
msgid "Facebook profile ID"
msgstr "Facebook profilio ID"
#: cms_appconfig.py:93
#: cms_appconfig.py:97
msgid "Facebook page URL"
msgstr "Facebook puslapio URL"
#: cms_appconfig.py:97
#: cms_appconfig.py:101
msgid "Facebook author URL"
msgstr "Facebook autoriaus URL"
#: cms_appconfig.py:101
#: cms_appconfig.py:105
msgid "Facebook author"
msgstr "Facebook autorius"
#: cms_appconfig.py:105
#: cms_appconfig.py:109
msgid "Twitter type"
msgstr "Twitter tipas"
#: cms_appconfig.py:109
#: cms_appconfig.py:113
msgid "Twitter site handle"
msgstr "Twitter tinklalapio vardas"
#: cms_appconfig.py:113
#: cms_appconfig.py:117
msgid "Twitter author handle"
msgstr "Twitter autoriaus vardas"
#: cms_appconfig.py:117
#: cms_appconfig.py:121
msgid "Google+ type"
msgstr "Google+ tipas"
#: cms_appconfig.py:121
#: cms_appconfig.py:125
msgid "Google+ author name"
msgstr "Goggle+ autoriaus vardas"
#: cms_plugins.py:30 cms_plugins.py:49
msgid "Latest Blog Articles"
msgstr "Naujausi tinklaraščio straipsniai"
#: cms_plugins.py:65
msgid "Author Blog Articles"
msgstr "Tinklaraščio straipsnių autorius"
#: cms_plugins.py:78 templates/djangocms_blog/plugins/tags.html:3
msgid "Tags"
msgstr "Žymenos"
#: cms_plugins.py:94 templates/djangocms_blog/plugins/categories.html:3
msgid "Categories"
msgstr "Kategorijos"
#: cms_plugins.py:109 templates/djangocms_blog/plugins/archive.html:3
#: templates/djangocms_blog/post_list.html:12
msgid "Archive"
msgstr "Archyvas"
#: cms_toolbar.py:21
#: cms_toolbar.py:22
msgid "Post list"
msgstr "Straipsnių sąrašas"
#: cms_toolbar.py:23
#: cms_toolbar.py:24
msgid "Add post"
msgstr "Pridėti straipsnį"
#: cms_toolbar.py:27
#: cms_toolbar.py:28
msgid "Edit configuration"
msgstr "Redaguoti nustatymus"
#: cms_toolbar.py:31
#: cms_toolbar.py:32
msgid "Edit Post"
msgstr "Redaguoti straipsnį"
#: cms_wizards.py:47
#, python-brace-format
msgid "New {0}"
msgstr ""
msgstr "Naujas {0}"
#: cms_wizards.py:51
#, python-brace-format
msgid "Create a new {0} in {1}"
msgstr ""
msgstr "Kurti naują {0} viduje {1}"
#: feeds.py:24
#, python-format
@ -223,7 +211,7 @@ msgstr "sukurta"
msgid "modified at"
msgstr "redaguota"
#: models.py:38 models.py:123 models.py:276
#: models.py:38 models.py:123 models.py:275
msgid "app. config"
msgstr "aplikacijos nustatymai"
@ -333,52 +321,52 @@ msgstr "tinklaraščio straipsnis"
msgid "blog articles"
msgstr "tinklaraščio straipsniai"
#: models.py:293
msgid "generic blog plugin"
msgstr "bendras tinklaraščio įskiepis"
#: models.py:297 models.py:330
#: models.py:294 models.py:328
msgid "articles"
msgstr "straipsniai"
#: models.py:298
#: models.py:295
msgid "The number of latests articles to be displayed."
msgstr "Atvaizduojamas naujausių straipsnių kiekis."
#: models.py:300
#: models.py:297
msgid "filter by tag"
msgstr "filtruoti pagal žymeną"
#: models.py:301
#: models.py:298
msgid "Show only the blog articles tagged with chosen tags."
msgstr "Atvaizduoti straipsnius su pasirinktomis žymenomis."
#: models.py:304
#: models.py:301
msgid "filter by category"
msgstr "filtruoti pagal kategoriją"
#: models.py:305
#: models.py:302
msgid "Show only the blog articles tagged with chosen categories."
msgstr "Atvaizduoti straipsnius su pasirinktomis kategorijomis."
#: models.py:309
#: models.py:306
#, python-format
msgid "%s latest articles by tag"
msgstr "%s paskutiniai straipsniai pagal žymeną"
#: models.py:326
#: models.py:324
msgid "authors"
msgstr "autoriai"
#: models.py:331
#: models.py:329
msgid "The number of author articles to be displayed."
msgstr "Atvaizduojamas autoriaus straipsnių kiekis."
#: models.py:335
#: models.py:333
#, python-format
msgid "%s latest articles by author"
msgstr "%s paskutiniai straipsniai pagal autorių"
#: models.py:362
msgid "generic blog plugin"
msgstr "bendras tinklaraščio įskiepis"
#: settings.py:16
msgid "Full date"
msgstr "Pilna data"
@ -413,31 +401,52 @@ msgstr "Niekas"
#: settings.py:34
msgid "always"
msgstr ""
msgstr "visada"
#: settings.py:35
msgid "hourly"
msgstr ""
msgstr "kas valandą"
#: settings.py:36
msgid "daily"
msgstr ""
msgstr "kas dieną"
#: settings.py:37
msgid "weekly"
msgstr ""
msgstr "kas savaitę"
#: settings.py:38
msgid "monthly"
msgstr ""
msgstr "kas mėnesį"
#: settings.py:39
msgid "yearly"
msgstr ""
msgstr "kas metus"
#: settings.py:40
msgid "never"
msgstr ""
msgstr "niekada"
#: settings.py:113
msgid "Latest Blog Articles"
msgstr "Naujausi tinklaraščio straipsniai"
#: settings.py:115
msgid "Author Blog Articles"
msgstr "Tinklaraščio straipsnių autorius"
#: settings.py:117 templates/djangocms_blog/plugins/tags.html:3
msgid "Tags"
msgstr "Žymenos"
#: settings.py:119 templates/djangocms_blog/plugins/categories.html:3
msgid "Categories"
msgstr "Kategorijos"
#: settings.py:121 templates/djangocms_blog/plugins/archive.html:3
#: templates/djangocms_blog/post_list.html:12
msgid "Archive"
msgstr "Archyvas"
#: templates/djangocms_blog/includes/blog_item.html:24
msgid "read more"

View file

@ -6,8 +6,8 @@ msgid ""
msgstr ""
"Project-Id-Version: djangocms-blog\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2015-10-31 13:23+0100\n"
"PO-Revision-Date: 2015-10-31 12:23+0000\n"
"POT-Creation-Date: 2015-12-20 17:14+0100\n"
"PO-Revision-Date: 2015-12-20 16:15+0000\n"
"Last-Translator: yakky <i.spalletti@nephila.it>\n"
"Language-Team: Portuguese (Brazil) (http://www.transifex.com/nephila/djangocms-blog/language/pt_BR/)\n"
"MIME-Version: 1.0\n"
@ -25,8 +25,7 @@ msgstr ""
msgid "django CMS Blog"
msgstr ""
#: cms_app.py:15 cms_plugins.py:64 cms_plugins.py:77 cms_plugins.py:93
#: cms_plugins.py:108 cms_toolbar.py:18
#: cms_app.py:15 cms_toolbar.py:19 settings.py:111
msgid "Blog"
msgstr ""
@ -39,155 +38,144 @@ msgid "object name"
msgstr ""
#: cms_appconfig.py:27
#| msgid "blog categories"
msgid "blog config"
msgstr ""
#: cms_appconfig.py:28
#| msgid "blog categories"
msgid "blog configs"
msgstr ""
#: cms_appconfig.py:31
msgid "untitled"
msgstr ""
#: cms_appconfig.py:32
#: cms_appconfig.py:36
msgid "Post published by default"
msgstr ""
#: cms_appconfig.py:36
#: cms_appconfig.py:40
msgid "Permalink structure"
msgstr ""
#: cms_appconfig.py:41
#: cms_appconfig.py:45
msgid "Use placeholder and plugins for article body"
msgstr ""
#: cms_appconfig.py:45
#: cms_appconfig.py:49
msgid "Use abstract field"
msgstr ""
#: cms_appconfig.py:49
#: cms_appconfig.py:53
msgid "Set author"
msgstr ""
#: cms_appconfig.py:49
#: cms_appconfig.py:53
msgid "Set author by default"
msgstr ""
#: cms_appconfig.py:53
#: cms_appconfig.py:57
msgid "Paginate size"
msgstr ""
#: cms_appconfig.py:54
#: cms_appconfig.py:58
msgid "When paginating list views, how many articles per page?"
msgstr ""
#: cms_appconfig.py:57
#: cms_appconfig.py:61
msgid "Template prefix"
msgstr ""
#: cms_appconfig.py:58
#: cms_appconfig.py:62
msgid "Alternative directory to load the blog templates from"
msgstr ""
#: cms_appconfig.py:61
#: cms_appconfig.py:65
msgid "Menu structure"
msgstr ""
#: cms_appconfig.py:63
#: cms_appconfig.py:67
msgid "Structure of the django CMS menu"
msgstr ""
#: cms_appconfig.py:66
#: cms_appconfig.py:70
msgid "Sitemap changefreq"
msgstr ""
#: cms_appconfig.py:69
#: cms_appconfig.py:73
msgid "Changefreq attribute for sitemap items"
msgstr ""
#: cms_appconfig.py:72
#: cms_appconfig.py:76
msgid "Sitemap priority"
msgstr ""
#: cms_appconfig.py:74
#: cms_appconfig.py:78
msgid "Priority attribute for sitemap items"
msgstr ""
#: cms_appconfig.py:77
#: cms_appconfig.py:81
msgid "Object type"
msgstr ""
#: cms_appconfig.py:81
#: cms_appconfig.py:85
msgid "Facebook type"
msgstr ""
#: cms_appconfig.py:85
#: cms_appconfig.py:89
msgid "Facebook application ID"
msgstr ""
#: cms_appconfig.py:89
#: cms_appconfig.py:93
msgid "Facebook profile ID"
msgstr ""
#: cms_appconfig.py:93
#: cms_appconfig.py:97
msgid "Facebook page URL"
msgstr ""
#: cms_appconfig.py:97
#: cms_appconfig.py:101
msgid "Facebook author URL"
msgstr ""
#: cms_appconfig.py:101
#: cms_appconfig.py:105
msgid "Facebook author"
msgstr ""
#: cms_appconfig.py:105
#: cms_appconfig.py:109
msgid "Twitter type"
msgstr ""
#: cms_appconfig.py:109
#: cms_appconfig.py:113
msgid "Twitter site handle"
msgstr ""
#: cms_appconfig.py:113
#: cms_appconfig.py:117
msgid "Twitter author handle"
msgstr ""
#: cms_appconfig.py:117
#: cms_appconfig.py:121
msgid "Google+ type"
msgstr ""
#: cms_appconfig.py:121
#: cms_appconfig.py:125
msgid "Google+ author name"
msgstr ""
#: cms_plugins.py:30 cms_plugins.py:49
msgid "Latest Blog Articles"
msgstr ""
#: cms_plugins.py:65
msgid "Author Blog Articles"
msgstr ""
#: cms_plugins.py:78 templates/djangocms_blog/plugins/tags.html:3
msgid "Tags"
msgstr ""
#: cms_plugins.py:94 templates/djangocms_blog/plugins/categories.html:3
msgid "Categories"
msgstr ""
#: cms_plugins.py:109 templates/djangocms_blog/plugins/archive.html:3
#: templates/djangocms_blog/post_list.html:12
msgid "Archive"
msgstr ""
#: cms_toolbar.py:21
#: cms_toolbar.py:22
msgid "Post list"
msgstr ""
#: cms_toolbar.py:23
#: cms_toolbar.py:24
msgid "Add post"
msgstr ""
#: cms_toolbar.py:27
#: cms_toolbar.py:28
msgid "Edit configuration"
msgstr ""
#: cms_toolbar.py:31
#: cms_toolbar.py:32
msgid "Edit Post"
msgstr ""
@ -222,7 +210,7 @@ msgstr ""
msgid "modified at"
msgstr ""
#: models.py:38 models.py:123 models.py:276
#: models.py:38 models.py:123 models.py:275
msgid "app. config"
msgstr ""
@ -332,52 +320,52 @@ msgstr ""
msgid "blog articles"
msgstr ""
#: models.py:293
msgid "generic blog plugin"
msgstr ""
#: models.py:297 models.py:330
#: models.py:294 models.py:328
msgid "articles"
msgstr ""
#: models.py:298
#: models.py:295
msgid "The number of latests articles to be displayed."
msgstr ""
#: models.py:300
#: models.py:297
msgid "filter by tag"
msgstr ""
#: models.py:301
#: models.py:298
msgid "Show only the blog articles tagged with chosen tags."
msgstr ""
#: models.py:304
#: models.py:301
msgid "filter by category"
msgstr ""
#: models.py:305
#: models.py:302
msgid "Show only the blog articles tagged with chosen categories."
msgstr ""
#: models.py:309
#: models.py:306
#, python-format
msgid "%s latest articles by tag"
msgstr ""
#: models.py:326
#: models.py:324
msgid "authors"
msgstr ""
#: models.py:331
#: models.py:329
msgid "The number of author articles to be displayed."
msgstr ""
#: models.py:335
#: models.py:333
#, python-format
msgid "%s latest articles by author"
msgstr ""
#: models.py:362
msgid "generic blog plugin"
msgstr ""
#: settings.py:16
msgid "Full date"
msgstr ""
@ -438,6 +426,27 @@ msgstr ""
msgid "never"
msgstr ""
#: settings.py:113
msgid "Latest Blog Articles"
msgstr ""
#: settings.py:115
msgid "Author Blog Articles"
msgstr ""
#: settings.py:117 templates/djangocms_blog/plugins/tags.html:3
msgid "Tags"
msgstr ""
#: settings.py:119 templates/djangocms_blog/plugins/categories.html:3
msgid "Categories"
msgstr ""
#: settings.py:121 templates/djangocms_blog/plugins/archive.html:3
#: templates/djangocms_blog/post_list.html:12
msgid "Archive"
msgstr ""
#: templates/djangocms_blog/includes/blog_item.html:24
msgid "read more"
msgstr ""

View file

@ -3,13 +3,14 @@
#
# Translators:
# Iacopo Spalletti, 2014
# Rüstem Mirzaoğlu, 2015
# Rustam Mirzaev <mirus@2x2.pw>, 2015
# Rustam Mirzaev <mirus@2x2.pw>, 2015
msgid ""
msgstr ""
"Project-Id-Version: djangocms-blog\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2015-10-31 13:23+0100\n"
"PO-Revision-Date: 2015-10-31 12:23+0000\n"
"POT-Creation-Date: 2015-12-20 17:14+0100\n"
"PO-Revision-Date: 2015-12-20 16:15+0000\n"
"Last-Translator: yakky <i.spalletti@nephila.it>\n"
"Language-Team: Russian (http://www.transifex.com/nephila/djangocms-blog/language/ru/)\n"
"MIME-Version: 1.0\n"
@ -21,187 +22,175 @@ msgstr ""
#: admin.py:169 admin.py:177 admin.py:185
msgid "You can provide plain strings, Post model attribute or method names"
msgstr ""
msgstr "Вы можете использовать простую строку, атрибут модели статьи или имена методов"
#: apps.py:15
msgid "django CMS Blog"
msgstr ""
msgstr "django CMS Блог"
#: cms_app.py:15 cms_plugins.py:64 cms_plugins.py:77 cms_plugins.py:93
#: cms_plugins.py:108 cms_toolbar.py:18
#: cms_app.py:15 cms_toolbar.py:19 settings.py:111
msgid "Blog"
msgstr "Блог"
#: cms_appconfig.py:20
msgid "application title"
msgstr ""
msgstr "название приложения"
#: cms_appconfig.py:22
msgid "object name"
msgstr ""
msgstr "название объекта"
#: cms_appconfig.py:27
msgid "untitled"
#| msgid "blog categories"
msgid "blog config"
msgstr ""
#: cms_appconfig.py:32
msgid "Post published by default"
#: cms_appconfig.py:28
#| msgid "blog categories"
msgid "blog configs"
msgstr ""
#: cms_appconfig.py:31
msgid "untitled"
msgstr "безымянный"
#: cms_appconfig.py:36
msgid "Permalink structure"
msgstr ""
msgid "Post published by default"
msgstr "Статья опубликованная по умолчанию"
#: cms_appconfig.py:41
msgid "Use placeholder and plugins for article body"
msgstr ""
#: cms_appconfig.py:40
msgid "Permalink structure"
msgstr "Строение постоянной ссылки"
#: cms_appconfig.py:45
msgid "Use placeholder and plugins for article body"
msgstr "Используйте местозаполнитель и плагины для тела статьи"
#: cms_appconfig.py:49
msgid "Use abstract field"
msgstr ""
#: cms_appconfig.py:49
msgid "Set author"
msgstr ""
#: cms_appconfig.py:49
msgid "Set author by default"
msgstr ""
msgstr "Используйте поле краткого описания"
#: cms_appconfig.py:53
msgid "Paginate size"
msgstr ""
msgid "Set author"
msgstr "Указать автора"
#: cms_appconfig.py:54
msgid "When paginating list views, how many articles per page?"
msgstr ""
#: cms_appconfig.py:53
msgid "Set author by default"
msgstr "Указать автора по умолчанию"
#: cms_appconfig.py:57
msgid "Template prefix"
msgstr ""
msgid "Paginate size"
msgstr "Разбить на части"
#: cms_appconfig.py:58
msgid "Alternative directory to load the blog templates from"
msgstr ""
msgid "When paginating list views, how many articles per page?"
msgstr "Сколько статей на страницу вы бы хотели использовать при разбиении её на части."
#: cms_appconfig.py:61
msgid "Template prefix"
msgstr "Префикс шаблона"
#: cms_appconfig.py:62
msgid "Alternative directory to load the blog templates from"
msgstr "Альтернативная директория загрузки шаблонов блога"
#: cms_appconfig.py:65
msgid "Menu structure"
msgstr ""
msgstr "Структура меню"
#: cms_appconfig.py:63
#: cms_appconfig.py:67
msgid "Structure of the django CMS menu"
msgstr ""
msgstr "Структура меню django CMS "
#: cms_appconfig.py:66
#: cms_appconfig.py:70
msgid "Sitemap changefreq"
msgstr ""
msgstr "Частота обновления карты сайта"
#: cms_appconfig.py:69
#: cms_appconfig.py:73
msgid "Changefreq attribute for sitemap items"
msgstr ""
msgstr "Атрибут частоты изменения объектов карты сайта"
#: cms_appconfig.py:72
#: cms_appconfig.py:76
msgid "Sitemap priority"
msgstr ""
msgstr "Приоритет"
#: cms_appconfig.py:74
#: cms_appconfig.py:78
msgid "Priority attribute for sitemap items"
msgstr ""
#: cms_appconfig.py:77
msgid "Object type"
msgstr ""
msgstr "Приоритет атребута для объектов карты сайта"
#: cms_appconfig.py:81
msgid "Facebook type"
msgstr ""
msgid "Object type"
msgstr "Тип объекта"
#: cms_appconfig.py:85
msgid "Facebook application ID"
msgstr ""
msgid "Facebook type"
msgstr "тип в Facebook"
#: cms_appconfig.py:89
msgid "Facebook profile ID"
msgstr ""
msgid "Facebook application ID"
msgstr "ID приложения на Facebook"
#: cms_appconfig.py:93
msgid "Facebook page URL"
msgstr ""
msgid "Facebook profile ID"
msgstr "ID профиля на Facebook"
#: cms_appconfig.py:97
msgid "Facebook author URL"
msgstr ""
msgid "Facebook page URL"
msgstr "URL страницы на Facebook"
#: cms_appconfig.py:101
msgid "Facebook author"
msgstr ""
msgid "Facebook author URL"
msgstr "URL автора на Facebook "
#: cms_appconfig.py:105
msgid "Twitter type"
msgstr ""
msgid "Facebook author"
msgstr "автор на Facebook "
#: cms_appconfig.py:109
msgid "Twitter site handle"
msgstr ""
msgid "Twitter type"
msgstr "тип на Twitter"
#: cms_appconfig.py:113
msgid "Twitter author handle"
msgstr ""
msgid "Twitter site handle"
msgstr "дескриптор сайта на Twitter"
#: cms_appconfig.py:117
msgid "Google+ type"
msgstr ""
msgid "Twitter author handle"
msgstr "дескриптор автора на Twitter"
#: cms_appconfig.py:121
msgid "Google+ type"
msgstr "тип на Google+"
#: cms_appconfig.py:125
msgid "Google+ author name"
msgstr ""
msgstr "имя автора на Google+"
#: cms_plugins.py:30 cms_plugins.py:49
msgid "Latest Blog Articles"
msgstr "Последние статьи блога"
#: cms_plugins.py:65
msgid "Author Blog Articles"
msgstr "Автор статей блога"
#: cms_plugins.py:78 templates/djangocms_blog/plugins/tags.html:3
msgid "Tags"
msgstr "Метки"
#: cms_plugins.py:94 templates/djangocms_blog/plugins/categories.html:3
msgid "Categories"
msgstr "Категории"
#: cms_plugins.py:109 templates/djangocms_blog/plugins/archive.html:3
#: templates/djangocms_blog/post_list.html:12
msgid "Archive"
msgstr "Архив"
#: cms_toolbar.py:21
#: cms_toolbar.py:22
msgid "Post list"
msgstr "Список статей"
#: cms_toolbar.py:23
#: cms_toolbar.py:24
msgid "Add post"
msgstr "Добавить статью"
#: cms_toolbar.py:27
#: cms_toolbar.py:28
msgid "Edit configuration"
msgstr ""
msgstr "Редактировать настройки"
#: cms_toolbar.py:31
#: cms_toolbar.py:32
msgid "Edit Post"
msgstr "Редактировать статью"
#: cms_wizards.py:47
#, python-brace-format
msgid "New {0}"
msgstr ""
msgstr "Новых {0}"
#: cms_wizards.py:51
#, python-brace-format
msgid "Create a new {0} in {1}"
msgstr ""
msgstr "Создать новых {0} из {1}"
#: feeds.py:24
#, python-format
@ -210,7 +199,7 @@ msgstr "Статьи блога с сайта: %(site_name)s"
#: menu.py:16
msgid "Blog menu"
msgstr ""
msgstr "Меню блога"
#: models.py:34
msgid "parent"
@ -224,9 +213,9 @@ msgstr "время создания"
msgid "modified at"
msgstr "время изменения"
#: models.py:38 models.py:123 models.py:276
#: models.py:38 models.py:123 models.py:275
msgid "app. config"
msgstr ""
msgstr "настройки приложения"
#: models.py:42
msgid "name"
@ -246,27 +235,27 @@ msgstr "категории блога"
#: models.py:91
msgid "author"
msgstr ""
msgstr "автор"
#: models.py:94
msgid "created"
msgstr ""
msgstr "создан(о)"
#: models.py:95
msgid "last modified"
msgstr ""
msgstr "последние изменения"
#: models.py:96
msgid "published since"
msgstr ""
msgstr "опубликовано"
#: models.py:98
msgid "published until"
msgstr ""
msgstr "опубликовано до"
#: models.py:100
msgid "publish"
msgstr ""
msgstr "опубликовать"
#: models.py:101
msgid "category"
@ -274,19 +263,19 @@ msgstr "категория"
#: models.py:103
msgid "main image"
msgstr ""
msgstr "главная страница"
#: models.py:107
msgid "main image thumbnail"
msgstr ""
msgstr "уменьшенная копия главного изображения"
#: models.py:112
msgid "main image full"
msgstr ""
msgstr "Полноразмерное изображение"
#: models.py:116
msgid "enable comments on post"
msgstr ""
msgstr "Разрешить комментарии к статье"
#: models.py:118
msgid "Site(s)"
@ -300,23 +289,23 @@ msgstr "Выберите сайты на которых будет опубли
#: models.py:127
msgid "title"
msgstr ""
msgstr "Заголовок"
#: models.py:129
msgid "abstract"
msgstr ""
msgstr "Краткое описание"
#: models.py:130
msgid "post meta description"
msgstr ""
msgstr "мета-описание статьи"
#: models.py:132
msgid "post meta keywords"
msgstr ""
msgstr "ключевые слова к статье"
#: models.py:134
msgid "post meta title"
msgstr ""
msgstr "мета-заголовок к статье"
#: models.py:135
msgid "used in title tag and social sharing"
@ -324,7 +313,7 @@ msgstr "используется в метках и обмене в социал
#: models.py:138
msgid "text"
msgstr ""
msgstr "текст"
#: models.py:175
msgid "blog article"
@ -334,59 +323,59 @@ msgstr "статья блога"
msgid "blog articles"
msgstr "статьи блога"
#: models.py:293
msgid "generic blog plugin"
msgstr ""
#: models.py:297 models.py:330
#: models.py:294 models.py:328
msgid "articles"
msgstr ""
msgstr "статьи"
#: models.py:298
#: models.py:295
msgid "The number of latests articles to be displayed."
msgstr "Количество последних статей, которые будут показаны."
#: models.py:300
#: models.py:297
msgid "filter by tag"
msgstr ""
msgstr "фильтровать по тегам"
#: models.py:301
#: models.py:298
msgid "Show only the blog articles tagged with chosen tags."
msgstr "Показывать статьи только с выбранными метками."
#: models.py:304
#: models.py:301
msgid "filter by category"
msgstr ""
msgstr "фильтровать по категориям"
#: models.py:305
#: models.py:302
msgid "Show only the blog articles tagged with chosen categories."
msgstr "Показывать статьи только из выбранных категорий."
#: models.py:309
#: models.py:306
#, python-format
msgid "%s latest articles by tag"
msgstr ""
msgstr "%s последних статей по тегам"
#: models.py:326
#: models.py:324
msgid "authors"
msgstr ""
msgstr "авторы"
#: models.py:331
#: models.py:329
msgid "The number of author articles to be displayed."
msgstr "Количество статей автора, которые будут показаны."
#: models.py:335
#: models.py:333
#, python-format
msgid "%s latest articles by author"
msgstr ""
msgstr "%s последних статей по авторам"
#: models.py:362
msgid "generic blog plugin"
msgstr "генерируемый плагин блога"
#: settings.py:16
msgid "Full date"
msgstr ""
msgstr "Полная дата"
#: settings.py:17
msgid "Year / Month"
msgstr ""
msgstr "Год / Месяц"
#: settings.py:18 templates/djangocms_blog/post_list.html:14
msgid "Category"
@ -394,51 +383,72 @@ msgstr "Категория"
#: settings.py:19
msgid "Just slug"
msgstr ""
msgstr "ЧПУ"
#: settings.py:28
msgid "Categories and posts"
msgstr ""
msgstr "Категории и статьи"
#: settings.py:29
msgid "Categories only"
msgstr ""
msgstr "Только категории"
#: settings.py:30
msgid "Posts only"
msgstr ""
msgstr "Только статьи"
#: settings.py:31
msgid "None"
msgstr ""
msgstr "Ничего"
#: settings.py:34
msgid "always"
msgstr ""
msgstr "всегда"
#: settings.py:35
msgid "hourly"
msgstr ""
msgstr "ежечасно"
#: settings.py:36
msgid "daily"
msgstr ""
msgstr "ежедневно"
#: settings.py:37
msgid "weekly"
msgstr ""
msgstr "еженедельно"
#: settings.py:38
msgid "monthly"
msgstr ""
msgstr "ежемесячно"
#: settings.py:39
msgid "yearly"
msgstr ""
msgstr "ежегодно"
#: settings.py:40
msgid "never"
msgstr ""
msgstr "никогда"
#: settings.py:113
msgid "Latest Blog Articles"
msgstr "Последние статьи блога"
#: settings.py:115
msgid "Author Blog Articles"
msgstr "Автор статей блога"
#: settings.py:117 templates/djangocms_blog/plugins/tags.html:3
msgid "Tags"
msgstr "Метки"
#: settings.py:119 templates/djangocms_blog/plugins/categories.html:3
msgid "Categories"
msgstr "Категории"
#: settings.py:121 templates/djangocms_blog/plugins/archive.html:3
#: templates/djangocms_blog/post_list.html:12
msgid "Archive"
msgstr "Архив"
#: templates/djangocms_blog/includes/blog_item.html:24
msgid "read more"
@ -481,7 +491,7 @@ msgstr "Авторы"
#: templates/djangocms_blog/plugins/categories.html:15
msgid "No categories found."
msgstr ""
msgstr "Не найдено ни одной категории."
#: templates/djangocms_blog/post_list.html:11
msgid "Articles by"

View file

@ -1,23 +1,22 @@
# SOME DESCRIPTIVE TITLE.
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
# This file is distributed under the same license as the PACKAGE package.
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
#
#, fuzzy
# Translators:
# Iacopo Spalletti, 2014
msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Project-Id-Version: djangocms-blog\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2015-12-15 13:53+0100\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
"Language: \n"
"POT-Creation-Date: 2015-12-20 17:14+0100\n"
"PO-Revision-Date: 2015-12-20 16:15+0000\n"
"Last-Translator: yakky <i.spalletti@nephila.it>\n"
"Language-Team: Slovenian (http://www.transifex.com/nephila/djangocms-blog/language/sl/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=4; plural=(n%100==1 ? 0 : n%100==2 ? 1 : n%100==3 || n"
"%100==4 ? 2 : 3);\n"
"Language: sl\n"
"Plural-Forms: nplurals=4; plural=(n%100==1 ? 0 : n%100==2 ? 1 : n%100==3 || n%100==4 ? 2 : 3);\n"
"X-Generator: Lokalize 1.5\n"
#: admin.py:169 admin.py:177 admin.py:185
msgid "You can provide plain strings, Post model attribute or method names"
@ -40,118 +39,128 @@ msgid "object name"
msgstr "ime objekta"
#: cms_appconfig.py:27
#| msgid "blog categories"
msgid "blog config"
msgstr ""
#: cms_appconfig.py:28
#| msgid "blog categories"
msgid "blog configs"
msgstr ""
#: cms_appconfig.py:31
msgid "untitled"
msgstr "nepoimenovano"
#: cms_appconfig.py:32
#: cms_appconfig.py:36
msgid "Post published by default"
msgstr "Objava naj bo samodejno objavljena"
#: cms_appconfig.py:36
#: cms_appconfig.py:40
msgid "Permalink structure"
msgstr "Struktura povezav"
#: cms_appconfig.py:41
#: cms_appconfig.py:45
msgid "Use placeholder and plugins for article body"
msgstr "Za objavo naj bodo uporabljeni vtičniki in označbe mest"
#: cms_appconfig.py:45
#: cms_appconfig.py:49
msgid "Use abstract field"
msgstr "Uporaba abstraktnih polj"
#: cms_appconfig.py:49
#: cms_appconfig.py:53
msgid "Set author"
msgstr "Nastavi avtorja"
#: cms_appconfig.py:49
#: cms_appconfig.py:53
msgid "Set author by default"
msgstr "Avtor naj bo nastavljen samodejno"
#: cms_appconfig.py:53
#: cms_appconfig.py:57
msgid "Paginate size"
msgstr "Število objav na stran"
#: cms_appconfig.py:54
#: cms_appconfig.py:58
msgid "When paginating list views, how many articles per page?"
msgstr "Koliko objav naj bo na eni strani?"
#: cms_appconfig.py:57
#: cms_appconfig.py:61
msgid "Template prefix"
msgstr "Predpona predlog"
#: cms_appconfig.py:58
#: cms_appconfig.py:62
msgid "Alternative directory to load the blog templates from"
msgstr "Alternativni direktorij za nalaganje predlog bloga"
#: cms_appconfig.py:61
#: cms_appconfig.py:65
msgid "Menu structure"
msgstr "Struktura menija"
#: cms_appconfig.py:63
#: cms_appconfig.py:67
msgid "Structure of the django CMS menu"
msgstr "Struktura django CMS menija"
#: cms_appconfig.py:66
#: cms_appconfig.py:70
msgid "Sitemap changefreq"
msgstr ""
#: cms_appconfig.py:69
#: cms_appconfig.py:73
msgid "Changefreq attribute for sitemap items"
msgstr ""
#: cms_appconfig.py:72
#: cms_appconfig.py:76
msgid "Sitemap priority"
msgstr "Sitemap prioriteta"
#: cms_appconfig.py:74
#: cms_appconfig.py:78
msgid "Priority attribute for sitemap items"
msgstr "Prioriteta atributov za elemente sitemapa"
#: cms_appconfig.py:77
#: cms_appconfig.py:81
msgid "Object type"
msgstr "Tip objekta"
#: cms_appconfig.py:81
#: cms_appconfig.py:85
msgid "Facebook type"
msgstr ""
#: cms_appconfig.py:85
#: cms_appconfig.py:89
msgid "Facebook application ID"
msgstr ""
#: cms_appconfig.py:89
#: cms_appconfig.py:93
msgid "Facebook profile ID"
msgstr ""
#: cms_appconfig.py:93
#: cms_appconfig.py:97
msgid "Facebook page URL"
msgstr ""
#: cms_appconfig.py:97
#: cms_appconfig.py:101
msgid "Facebook author URL"
msgstr ""
#: cms_appconfig.py:101
#: cms_appconfig.py:105
msgid "Facebook author"
msgstr "Facebook avtor"
#: cms_appconfig.py:105
#: cms_appconfig.py:109
msgid "Twitter type"
msgstr ""
#: cms_appconfig.py:109
#: cms_appconfig.py:113
msgid "Twitter site handle"
msgstr ""
#: cms_appconfig.py:113
#: cms_appconfig.py:117
msgid "Twitter author handle"
msgstr ""
#: cms_appconfig.py:117
#: cms_appconfig.py:121
msgid "Google+ type"
msgstr ""
#: cms_appconfig.py:121
#: cms_appconfig.py:125
msgid "Google+ author name"
msgstr ""
@ -366,7 +375,7 @@ msgstr "Datum (poln)"
msgid "Year / Month"
msgstr "Leto / Mesec"
#: settings.py:18 templates/djangocms_blog/post_list.html.py:14
#: settings.py:18 templates/djangocms_blog/post_list.html:14
msgid "Category"
msgstr "Kategorija"
@ -426,15 +435,15 @@ msgstr "Najnovejše blog objave"
msgid "Author Blog Articles"
msgstr "Avtorjeve blog objave"
#: settings.py:117 templates/djangocms_blog/plugins/tags.html.py:3
#: settings.py:117 templates/djangocms_blog/plugins/tags.html:3
msgid "Tags"
msgstr "Oznake"
#: settings.py:119 templates/djangocms_blog/plugins/categories.html.py:3
#: settings.py:119 templates/djangocms_blog/plugins/categories.html:3
msgid "Categories"
msgstr "Kategorije"
#: settings.py:121 templates/djangocms_blog/plugins/archive.html.py:3
#: settings.py:121 templates/djangocms_blog/plugins/archive.html:3
#: templates/djangocms_blog/post_list.html:12
msgid "Archive"
msgstr "Arhiv"
@ -454,8 +463,10 @@ msgstr ""
#, python-format
msgid "1 article"
msgid_plural "%(articles)s articles"
msgstr[0] "1 objava"
msgstr[0] "%(articles)s objava"
msgstr[1] "%(articles)s objave"
msgstr[2] "%(articles)s objave"
msgstr[3] "%(articles)s objave"
#: templates/djangocms_blog/plugins/archive.html:18
#: templates/djangocms_blog/plugins/authors.html:11
@ -507,3 +518,18 @@ msgstr "od"
#: templates/djangocms_blog/post_list.html:35
msgid "next"
msgstr "naslednji"
#~ msgid "Article"
#~ msgstr "Articles"
#~ msgid "Text"
#~ msgstr "Text"
#~ msgid "blog post"
#~ msgstr "blog post"
#~ msgid "Entries by"
#~ msgstr "Entries by"
#~ msgid "No entry found."
#~ msgstr "No entry found."

View file

@ -2,13 +2,13 @@
# This file is distributed under the same license as the PACKAGE package.
#
# Translators:
# Rüstem Mirzaoğlu, 2015
# Rustam Mirzaev <mirus@2x2.pw>, 2015
msgid ""
msgstr ""
"Project-Id-Version: djangocms-blog\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2015-10-31 13:23+0100\n"
"PO-Revision-Date: 2015-10-31 12:23+0000\n"
"POT-Creation-Date: 2015-12-20 17:14+0100\n"
"PO-Revision-Date: 2015-12-20 16:15+0000\n"
"Last-Translator: yakky <i.spalletti@nephila.it>\n"
"Language-Team: Turkish (http://www.transifex.com/nephila/djangocms-blog/language/tr/)\n"
"MIME-Version: 1.0\n"
@ -26,8 +26,7 @@ msgstr ""
msgid "django CMS Blog"
msgstr ""
#: cms_app.py:15 cms_plugins.py:64 cms_plugins.py:77 cms_plugins.py:93
#: cms_plugins.py:108 cms_toolbar.py:18
#: cms_app.py:15 cms_toolbar.py:19 settings.py:111
msgid "Blog"
msgstr "Blog"
@ -40,155 +39,144 @@ msgid "object name"
msgstr ""
#: cms_appconfig.py:27
#| msgid "blog categories"
msgid "blog config"
msgstr ""
#: cms_appconfig.py:28
#| msgid "blog categories"
msgid "blog configs"
msgstr ""
#: cms_appconfig.py:31
msgid "untitled"
msgstr ""
#: cms_appconfig.py:32
#: cms_appconfig.py:36
msgid "Post published by default"
msgstr ""
#: cms_appconfig.py:36
#: cms_appconfig.py:40
msgid "Permalink structure"
msgstr ""
#: cms_appconfig.py:41
#: cms_appconfig.py:45
msgid "Use placeholder and plugins for article body"
msgstr ""
#: cms_appconfig.py:45
#: cms_appconfig.py:49
msgid "Use abstract field"
msgstr ""
#: cms_appconfig.py:49
#: cms_appconfig.py:53
msgid "Set author"
msgstr ""
#: cms_appconfig.py:49
#: cms_appconfig.py:53
msgid "Set author by default"
msgstr ""
#: cms_appconfig.py:53
#: cms_appconfig.py:57
msgid "Paginate size"
msgstr ""
#: cms_appconfig.py:54
#: cms_appconfig.py:58
msgid "When paginating list views, how many articles per page?"
msgstr ""
#: cms_appconfig.py:57
#: cms_appconfig.py:61
msgid "Template prefix"
msgstr ""
#: cms_appconfig.py:58
#: cms_appconfig.py:62
msgid "Alternative directory to load the blog templates from"
msgstr ""
#: cms_appconfig.py:61
#: cms_appconfig.py:65
msgid "Menu structure"
msgstr ""
#: cms_appconfig.py:63
#: cms_appconfig.py:67
msgid "Structure of the django CMS menu"
msgstr ""
#: cms_appconfig.py:66
#: cms_appconfig.py:70
msgid "Sitemap changefreq"
msgstr ""
#: cms_appconfig.py:69
#: cms_appconfig.py:73
msgid "Changefreq attribute for sitemap items"
msgstr ""
#: cms_appconfig.py:72
#: cms_appconfig.py:76
msgid "Sitemap priority"
msgstr ""
#: cms_appconfig.py:74
#: cms_appconfig.py:78
msgid "Priority attribute for sitemap items"
msgstr ""
#: cms_appconfig.py:77
#: cms_appconfig.py:81
msgid "Object type"
msgstr ""
#: cms_appconfig.py:81
#: cms_appconfig.py:85
msgid "Facebook type"
msgstr ""
#: cms_appconfig.py:85
#: cms_appconfig.py:89
msgid "Facebook application ID"
msgstr ""
#: cms_appconfig.py:89
#: cms_appconfig.py:93
msgid "Facebook profile ID"
msgstr ""
#: cms_appconfig.py:93
#: cms_appconfig.py:97
msgid "Facebook page URL"
msgstr ""
#: cms_appconfig.py:97
#: cms_appconfig.py:101
msgid "Facebook author URL"
msgstr ""
#: cms_appconfig.py:101
#: cms_appconfig.py:105
msgid "Facebook author"
msgstr ""
#: cms_appconfig.py:105
#: cms_appconfig.py:109
msgid "Twitter type"
msgstr ""
#: cms_appconfig.py:109
#: cms_appconfig.py:113
msgid "Twitter site handle"
msgstr ""
#: cms_appconfig.py:113
#: cms_appconfig.py:117
msgid "Twitter author handle"
msgstr ""
#: cms_appconfig.py:117
#: cms_appconfig.py:121
msgid "Google+ type"
msgstr ""
#: cms_appconfig.py:121
#: cms_appconfig.py:125
msgid "Google+ author name"
msgstr ""
#: cms_plugins.py:30 cms_plugins.py:49
msgid "Latest Blog Articles"
msgstr "Blog'un son makaleleri"
#: cms_plugins.py:65
msgid "Author Blog Articles"
msgstr "Blog'un makale yazarı"
#: cms_plugins.py:78 templates/djangocms_blog/plugins/tags.html:3
msgid "Tags"
msgstr "Etiketler"
#: cms_plugins.py:94 templates/djangocms_blog/plugins/categories.html:3
msgid "Categories"
msgstr "Kategoriler"
#: cms_plugins.py:109 templates/djangocms_blog/plugins/archive.html:3
#: templates/djangocms_blog/post_list.html:12
msgid "Archive"
msgstr "Arşiv"
#: cms_toolbar.py:21
#: cms_toolbar.py:22
msgid "Post list"
msgstr "Makale listesi"
#: cms_toolbar.py:23
#: cms_toolbar.py:24
msgid "Add post"
msgstr "Makale ekle"
#: cms_toolbar.py:27
#: cms_toolbar.py:28
msgid "Edit configuration"
msgstr ""
#: cms_toolbar.py:31
#: cms_toolbar.py:32
msgid "Edit Post"
msgstr "Makaleyi düzenle"
@ -223,7 +211,7 @@ msgstr "oluşturma tarihi"
msgid "modified at"
msgstr "düzenleme tarihi"
#: models.py:38 models.py:123 models.py:276
#: models.py:38 models.py:123 models.py:275
msgid "app. config"
msgstr ""
@ -333,52 +321,52 @@ msgstr "blog makalesi"
msgid "blog articles"
msgstr "blog makaleleri"
#: models.py:293
msgid "generic blog plugin"
msgstr ""
#: models.py:297 models.py:330
#: models.py:294 models.py:328
msgid "articles"
msgstr ""
#: models.py:298
#: models.py:295
msgid "The number of latests articles to be displayed."
msgstr "Ğörütülenecek olan makale sayısı"
#: models.py:300
#: models.py:297
msgid "filter by tag"
msgstr ""
#: models.py:301
#: models.py:298
msgid "Show only the blog articles tagged with chosen tags."
msgstr "Sadece seçili etiketlerle işaretlenmiş makaleleri göster."
#: models.py:304
#: models.py:301
msgid "filter by category"
msgstr ""
#: models.py:305
#: models.py:302
msgid "Show only the blog articles tagged with chosen categories."
msgstr "Sadece seçili kategorilerde bulunan makaleleri ğöster"
#: models.py:309
#: models.py:306
#, python-format
msgid "%s latest articles by tag"
msgstr ""
#: models.py:326
#: models.py:324
msgid "authors"
msgstr ""
#: models.py:331
#: models.py:329
msgid "The number of author articles to be displayed."
msgstr "İlgili yazarın gösterilecek olan makale sayısı."
#: models.py:335
#: models.py:333
#, python-format
msgid "%s latest articles by author"
msgstr ""
#: models.py:362
msgid "generic blog plugin"
msgstr ""
#: settings.py:16
msgid "Full date"
msgstr ""
@ -439,6 +427,27 @@ msgstr ""
msgid "never"
msgstr ""
#: settings.py:113
msgid "Latest Blog Articles"
msgstr "Blog'un son makaleleri"
#: settings.py:115
msgid "Author Blog Articles"
msgstr "Blog'un makale yazarı"
#: settings.py:117 templates/djangocms_blog/plugins/tags.html:3
msgid "Tags"
msgstr "Etiketler"
#: settings.py:119 templates/djangocms_blog/plugins/categories.html:3
msgid "Categories"
msgstr "Kategoriler"
#: settings.py:121 templates/djangocms_blog/plugins/archive.html:3
#: templates/djangocms_blog/post_list.html:12
msgid "Archive"
msgstr "Arşiv"
#: templates/djangocms_blog/includes/blog_item.html:24
msgid "read more"
msgstr "devamını oku"

View file

@ -99,8 +99,8 @@ class GenericDateQuerySet(AppHookConfigTranslatableQueryset):
queryset = self.on_site()
if self.end_date_field:
qfilter = (
models.Q(**{'%s__gte' % self.end_date_field: now()})
| models.Q(**{'%s__isnull' % self.end_date_field: True})
models.Q(**{'%s__gte' % self.end_date_field: now()}) |
models.Q(**{'%s__isnull' % self.end_date_field: True})
)
queryset = queryset.filter(qfilter)
return queryset.filter(**{self.publish_field: True})
@ -109,8 +109,8 @@ class GenericDateQuerySet(AppHookConfigTranslatableQueryset):
queryset = self.on_site()
if self.end_date_field:
qfilter = (
models.Q(**{'%s__lte' % self.end_date_field: now()})
| models.Q(**{'%s__isnull' % self.end_date_field: False})
models.Q(**{'%s__lte' % self.end_date_field: now()}) |
models.Q(**{'%s__isnull' % self.end_date_field: False})
)
queryset = queryset.filter(qfilter)
return queryset.filter(**{self.publish_field: True})

View file

@ -1,21 +1,34 @@
# -*- coding: utf-8 -*-
from __future__ import absolute_import, print_function, unicode_literals
from cms.apphook_pool import apphook_pool
from cms.menu_bases import CMSAttachMenu
from django.core.urlresolvers import resolve
from django.db.models.signals import post_delete, post_save
from django.utils.translation import get_language_from_request, ugettext_lazy as _
from menus.base import NavigationNode
from menus.base import Modifier, NavigationNode
from menus.menu_pool import menu_pool
from .cms_appconfig import BlogConfig
from .models import BlogCategory, Post
from .settings import MENU_TYPE_CATEGORIES, MENU_TYPE_COMPLETE, MENU_TYPE_POSTS
from .settings import MENU_TYPE_CATEGORIES, MENU_TYPE_COMPLETE, MENU_TYPE_POSTS, get_setting
class BlogCategoryMenu(CMSAttachMenu):
"""
Main menu class
Handles all types of blog menu
"""
name = _('Blog menu')
def get_nodes(self, request):
"""
Generates the nodelist
:param request:
:return: list of nodes
"""
nodes = []
language = get_language_from_request(request, check_path=True)
@ -25,9 +38,9 @@ class BlogCategoryMenu(CMSAttachMenu):
config = False
if hasattr(self, 'instance') and self.instance:
config = BlogConfig.objects.get(namespace=self.instance.application_namespace)
if config.menu_structure in (MENU_TYPE_COMPLETE, MENU_TYPE_CATEGORIES):
if config and config.menu_structure in (MENU_TYPE_COMPLETE, MENU_TYPE_CATEGORIES):
categories_menu = True
if config.menu_structure in (MENU_TYPE_COMPLETE, MENU_TYPE_POSTS):
if config and config.menu_structure in (MENU_TYPE_COMPLETE, MENU_TYPE_POSTS):
posts_menu = True
if categories_menu:
@ -40,9 +53,12 @@ class BlogCategoryMenu(CMSAttachMenu):
node = NavigationNode(
category.name,
category.get_absolute_url(),
'%s-%s' % (category.__class__.__name__, category.pk),
('%s-%s' % (category.__class__.__name__, category.parent.id) if category.parent
else None)
'{0}-{1}'.format(category.__class__.__name__, category.pk),
(
'{0}-{1}'.format(
category.__class__.__name__, category.parent.id
) if category.parent else None
)
)
nodes.append(node)
@ -52,13 +68,16 @@ class BlogCategoryMenu(CMSAttachMenu):
posts = posts.namespace(self.instance.application_namespace)
posts = posts.active_translations(language).distinct()
for post in posts:
post_id = None
parent = None
if categories_menu:
category = post.categories.first()
parent = '%s-%s' % (category.__class__.__name__, category.pk)
post_id = '%s-%s' % (post.__class__.__name__, post.pk),
if category:
parent = '{0}-{1}'.format(category.__class__.__name__, category.pk)
post_id = '{0}-{1}'.format(post.__class__.__name__, post.pk),
else:
parent = None
post_id = '%s-%s' % (post.__class__.__name__, post.pk),
post_id = '{0}-{1}'.format(post.__class__.__name__, post.pk),
if post_id:
node = NavigationNode(
post.get_title(),
post.get_absolute_url(language),
@ -72,7 +91,54 @@ class BlogCategoryMenu(CMSAttachMenu):
menu_pool.register_menu(BlogCategoryMenu)
class BlogNavModifier(Modifier):
"""
This navigation modifier makes sure that when
a particular blog post is viewed,
a corresponding category is selected in menu
"""
def modify(self, request, nodes, namespace, root_id, post_cut, breadcrumb):
"""
Actual modifier function
:param request: request
:param nodes: complete list of nodes
:param namespace: Menu namespace
:param root_id: eventual root_id
:param post_cut: flag for modifier stage
:param breadcrumb: flag for modifier stage
:return: nodeslist
"""
app = None
config = None
if getattr(request, 'current_page', None) and request.current_page.application_urls:
app = apphook_pool.get_apphook(request.current_page.application_urls)
if app and app.app_config:
namespace = resolve(request.path).namespace
config = app.get_config(namespace)
if config and config.menu_structure != MENU_TYPE_CATEGORIES:
return nodes
if post_cut:
return nodes
current_post = getattr(request, get_setting('CURRENT_POST_IDENTIFIER'), None)
category = None
if current_post and current_post.__class__ == Post:
category = current_post.categories.first()
if not category:
return nodes
for node in nodes:
if '{0}-{1}'.format(category.__class__.__name__, category.pk) == node.id:
node.selected = True
return nodes
menu_pool.register_modifier(BlogNavModifier)
def clear_menu_cache(**kwargs):
"""
Empty menu cache when saving categories
"""
menu_pool.clear(all=True)
post_save.connect(clear_menu_cache, sender=BlogCategory)

View file

@ -8,13 +8,18 @@ import filer.fields.image
import meta_mixin.models
import taggit_autosuggest.managers
from django.conf import settings
from django.db import models, migrations
from django.db import migrations, models
from djangocms_blog.models import thumbnail_model
from filer.settings import FILER_IMAGE_MODEL
ACTUAL_FILER_IMAGE_MODEL = FILER_IMAGE_MODEL or 'filer.Image'
class Migration(migrations.Migration):
dependencies = [
migrations.swappable_dependency(settings.AUTH_USER_MODEL),
migrations.swappable_dependency(ACTUAL_FILER_IMAGE_MODEL),
('cms', '__latest__'),
('taggit', '__latest__'),
('filer', '__latest__'),
@ -90,9 +95,9 @@ class Migration(migrations.Migration):
('author', models.ForeignKey(related_name='djangocms_blog_post_author', verbose_name='Author', blank=True, to=settings.AUTH_USER_MODEL, null=True)),
('categories', models.ManyToManyField(related_name='blog_posts', verbose_name='category', to='djangocms_blog.BlogCategory')),
('content', cms.models.fields.PlaceholderField(slotname='post_content', editable=False, to='cms.Placeholder', null=True)),
('main_image', filer.fields.image.FilerImageField(related_name='djangocms_blog_post_image', verbose_name='Main image', blank=True, to='filer.Image', null=True)),
('main_image_full', models.ForeignKey(related_name='djangocms_blog_post_full', verbose_name='Main image full', blank=True, to='cmsplugin_filer_image.ThumbnailOption', null=True)),
('main_image_thumbnail', models.ForeignKey(related_name='djangocms_blog_post_thumbnail', verbose_name='Main image thumbnail', blank=True, to='cmsplugin_filer_image.ThumbnailOption', null=True)),
('main_image', filer.fields.image.FilerImageField(related_name='djangocms_blog_post_image', verbose_name='Main image', blank=True, to=ACTUAL_FILER_IMAGE_MODEL, null=True)),
('main_image_full', models.ForeignKey(related_name='djangocms_blog_post_full', verbose_name='Main image full', blank=True, to=thumbnail_model, null=True)),
('main_image_thumbnail', models.ForeignKey(related_name='djangocms_blog_post_thumbnail', verbose_name='Main image thumbnail', blank=True, to=thumbnail_model, null=True)),
('tags', taggit_autosuggest.managers.TaggableManager(to='taggit.Tag', through='taggit.TaggedItem', blank=True, help_text='A comma-separated list of tags.', verbose_name='Tags')),
],
options={

View file

@ -1,14 +1,19 @@
# -*- coding: utf-8 -*-
from __future__ import unicode_literals
from django.db import models, migrations
import filer.fields.image
import django.db.models.deletion
import filer.fields.image
from django.db import migrations, models
from djangocms_blog.models import thumbnail_model
from filer.settings import FILER_IMAGE_MODEL
ACTUAL_FILER_IMAGE_MODEL = FILER_IMAGE_MODEL or 'filer.Image'
class Migration(migrations.Migration):
dependencies = [
migrations.swappable_dependency(ACTUAL_FILER_IMAGE_MODEL),
('djangocms_blog', '0003_auto_20141201_2252'),
]
@ -16,19 +21,19 @@ class Migration(migrations.Migration):
migrations.AlterField(
model_name='post',
name='main_image',
field=filer.fields.image.FilerImageField(related_name='djangocms_blog_post_image', on_delete=django.db.models.deletion.SET_NULL, verbose_name='Main image', blank=True, to='filer.Image', null=True),
field=filer.fields.image.FilerImageField(related_name='djangocms_blog_post_image', on_delete=django.db.models.deletion.SET_NULL, verbose_name='Main image', blank=True, to=ACTUAL_FILER_IMAGE_MODEL, null=True),
preserve_default=True,
),
migrations.AlterField(
model_name='post',
name='main_image_full',
field=models.ForeignKey(related_name='djangocms_blog_post_full', on_delete=django.db.models.deletion.SET_NULL, verbose_name='Main image full', blank=True, to='cmsplugin_filer_image.ThumbnailOption', null=True),
field=models.ForeignKey(related_name='djangocms_blog_post_full', on_delete=django.db.models.deletion.SET_NULL, verbose_name='Main image full', blank=True, to=thumbnail_model, null=True),
preserve_default=True,
),
migrations.AlterField(
model_name='post',
name='main_image_thumbnail',
field=models.ForeignKey(related_name='djangocms_blog_post_thumbnail', on_delete=django.db.models.deletion.SET_NULL, verbose_name='Main image thumbnail', blank=True, to='cmsplugin_filer_image.ThumbnailOption', null=True),
field=models.ForeignKey(related_name='djangocms_blog_post_thumbnail', on_delete=django.db.models.deletion.SET_NULL, verbose_name='Main image thumbnail', blank=True, to=thumbnail_model, null=True),
preserve_default=True,
),
]

View file

@ -1,18 +1,23 @@
# -*- coding: utf-8 -*-
from __future__ import unicode_literals
from django.db import models, migrations
import filer.fields.image
import django.utils.timezone
from django.conf import settings
import djangocms_text_ckeditor.fields
import django.db.models.deletion
import django.utils.timezone
import djangocms_text_ckeditor.fields
import filer.fields.image
from django.conf import settings
from django.db import migrations, models
from djangocms_blog.models import thumbnail_model
from filer.settings import FILER_IMAGE_MODEL
ACTUAL_FILER_IMAGE_MODEL = FILER_IMAGE_MODEL or 'filer.Image'
class Migration(migrations.Migration):
dependencies = [
('djangocms_blog', '0006_auto_20150214_1907'),
migrations.swappable_dependency(ACTUAL_FILER_IMAGE_MODEL),
]
operations = [
@ -99,19 +104,19 @@ class Migration(migrations.Migration):
migrations.AlterField(
model_name='post',
name='main_image',
field=filer.fields.image.FilerImageField(on_delete=django.db.models.deletion.SET_NULL, blank=True, verbose_name='main image', to='filer.Image', related_name='djangocms_blog_post_image', null=True),
field=filer.fields.image.FilerImageField(on_delete=django.db.models.deletion.SET_NULL, blank=True, verbose_name='main image', to=ACTUAL_FILER_IMAGE_MODEL, related_name='djangocms_blog_post_image', null=True),
preserve_default=True,
),
migrations.AlterField(
model_name='post',
name='main_image_full',
field=models.ForeignKey(on_delete=django.db.models.deletion.SET_NULL, blank=True, verbose_name='main image full', to='cmsplugin_filer_image.ThumbnailOption', related_name='djangocms_blog_post_full', null=True),
field=models.ForeignKey(on_delete=django.db.models.deletion.SET_NULL, blank=True, verbose_name='main image full', to=thumbnail_model, related_name='djangocms_blog_post_full', null=True),
preserve_default=True,
),
migrations.AlterField(
model_name='post',
name='main_image_thumbnail',
field=models.ForeignKey(on_delete=django.db.models.deletion.SET_NULL, blank=True, verbose_name='main image thumbnail', to='cmsplugin_filer_image.ThumbnailOption', related_name='djangocms_blog_post_thumbnail', null=True),
field=models.ForeignKey(on_delete=django.db.models.deletion.SET_NULL, blank=True, verbose_name='main image thumbnail', to=thumbnail_model, related_name='djangocms_blog_post_thumbnail', null=True),
preserve_default=True,
),
migrations.AlterField(

View file

@ -4,37 +4,9 @@ from __future__ import unicode_literals
import aldryn_apphooks_config.fields
import app_data.fields
import djangocms_text_ckeditor.fields
from cms.models import Page
from cms.utils.i18n import get_language_list
from django.db import models, migrations
def forwards(apps, schema_editor):
BlogConfig = apps.get_model('djangocms_blog', 'BlogConfig')
BlogConfigTranslation = apps.get_model('djangocms_blog', 'BlogConfigTranslation')
Post = apps.get_model('djangocms_blog', 'Post')
BlogCategory = apps.get_model('djangocms_blog', 'BlogCategory')
GenericBlogPlugin = apps.get_model('djangocms_blog', 'GenericBlogPlugin')
LatestPostsPlugin = apps.get_model('djangocms_blog', 'LatestPostsPlugin')
AuthorEntriesPlugin = apps.get_model('djangocms_blog', 'AuthorEntriesPlugin')
config = None
for page in Page.objects.drafts().filter(application_urls='BlogApp'):
config = BlogConfig.objects.create(namespace=page.application_namespace)
for lang in get_language_list():
title = page.get_title(lang)
translation = BlogConfigTranslation.objects.create(language_code=lang, master_id=config.pk, app_title=title)
if config:
for model in (Post, BlogCategory, GenericBlogPlugin, LatestPostsPlugin, AuthorEntriesPlugin):
for item in model.objects.all():
item.app_config = config
item.save()
def backwards(apps, schema_editor):
# No need for backward data migration
pass
class Migration(migrations.Migration):
dependencies = [
@ -120,5 +92,4 @@ class Migration(migrations.Migration):
name='sites',
field=models.ManyToManyField(to='sites.Site', help_text='Select sites in which to show the post. If none is set it will be visible in all the configured sites.', blank=True, verbose_name='Site(s)'),
),
migrations.RunPython(forwards, backwards)
]

View file

@ -0,0 +1,18 @@
# -*- coding: utf-8 -*-
from __future__ import unicode_literals
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('djangocms_blog', '0011_auto_20151024_1809'),
]
operations = [
migrations.AlterModelOptions(
name='blogconfig',
options={'verbose_name': 'blog config', 'verbose_name_plural': 'blog configs'},
),
]

View file

@ -0,0 +1,20 @@
# -*- coding: utf-8 -*-
# Generated by Django 1.9.2 on 2016-02-01 21:35
from __future__ import unicode_literals
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('djangocms_blog', '0012_auto_20151220_1734'),
]
operations = [
migrations.AlterField(
model_name='post',
name='categories',
field=models.ManyToManyField(blank=True, related_name='blog_posts', to='djangocms_blog.BlogCategory', verbose_name='category'),
),
]

View file

@ -0,0 +1,43 @@
# -*- coding: utf-8 -*-
from __future__ import unicode_literals
from cms.models import Page
from cms.utils.i18n import get_language_list
from django.db import migrations, models
def forwards(apps, schema_editor):
BlogConfig = apps.get_model('djangocms_blog', 'BlogConfig')
BlogConfigTranslation = apps.get_model('djangocms_blog', 'BlogConfigTranslation')
Post = apps.get_model('djangocms_blog', 'Post')
BlogCategory = apps.get_model('djangocms_blog', 'BlogCategory')
GenericBlogPlugin = apps.get_model('djangocms_blog', 'GenericBlogPlugin')
LatestPostsPlugin = apps.get_model('djangocms_blog', 'LatestPostsPlugin')
AuthorEntriesPlugin = apps.get_model('djangocms_blog', 'AuthorEntriesPlugin')
config = None
for page in Page.objects.drafts().filter(application_urls='BlogApp'):
config, created = BlogConfig.objects.get_or_create(namespace=page.application_namespace)
if not BlogConfigTranslation.objects.exists():
for lang in get_language_list():
title = page.get_title(lang)
translation = BlogConfigTranslation.objects.create(language_code=lang, master_id=config.pk, app_title=title)
if config:
for model in (Post, BlogCategory, GenericBlogPlugin, LatestPostsPlugin, AuthorEntriesPlugin):
for item in model.objects.filter(app_config__isnull=True):
item.app_config = config
item.save()
def backwards(apps, schema_editor):
# No need for backward data migration
pass
class Migration(migrations.Migration):
dependencies = [
('djangocms_blog', '0013_auto_20160201_2235'),
]
operations = [
migrations.RunPython(forwards, backwards),
]

View file

@ -5,6 +5,7 @@ from aldryn_apphooks_config.fields import AppHookConfigField
from aldryn_apphooks_config.managers.parler import AppHookConfigTranslatableManager
from cms.models import CMSPlugin, PlaceholderField
from django.conf import settings as dj_settings
from django.contrib.auth import get_user_model
from django.core.urlresolvers import reverse
from django.db import models
from django.utils import timezone
@ -25,6 +26,13 @@ from .settings import get_setting
BLOG_CURRENT_POST_IDENTIFIER = get_setting('CURRENT_POST_IDENTIFIER')
BLOG_CURRENT_NAMESPACE = get_setting('CURRENT_NAMESPACE')
try:
from filer.models import ThumbnailOption # NOQA
thumbnail_model = 'filer.ThumbnailOption'
except ImportError:
from cmsplugin_filer_image.models import ThumbnailOption # NOQA
thumbnail_model = 'cmsplugin_filer_image.ThumbnailOption'
@python_2_unicode_compatible
class BlogCategory(TranslatableModel):
@ -99,16 +107,16 @@ class Post(ModelMeta, TranslatableModel):
blank=True)
publish = models.BooleanField(_('publish'), default=False)
categories = models.ManyToManyField('djangocms_blog.BlogCategory', verbose_name=_('category'),
related_name='blog_posts',)
related_name='blog_posts', blank=True)
main_image = FilerImageField(verbose_name=_('main image'), blank=True, null=True,
on_delete=models.SET_NULL,
related_name='djangocms_blog_post_image')
main_image_thumbnail = models.ForeignKey('cmsplugin_filer_image.ThumbnailOption',
main_image_thumbnail = models.ForeignKey(thumbnail_model,
verbose_name=_('main image thumbnail'),
related_name='djangocms_blog_post_thumbnail',
on_delete=models.SET_NULL,
blank=True, null=True)
main_image_full = models.ForeignKey('cmsplugin_filer_image.ThumbnailOption',
main_image_full = models.ForeignKey(thumbnail_model,
verbose_name=_('main image full'),
related_name='djangocms_blog_post_full',
on_delete=models.SET_NULL,
@ -231,7 +239,7 @@ class Post(ModelMeta, TranslatableModel):
return title.strip()
def get_keywords(self):
return self.safe_translation_getter('meta_keywords').strip().split(',')
return self.safe_translation_getter('meta_keywords', default='').strip().split(',')
def get_locale(self):
return self.get_current_language()
@ -254,6 +262,14 @@ class Post(ModelMeta, TranslatableModel):
def get_author(self):
return self.author
def _set_default_author(self, current_user):
if not self.author_id and self.app_config.set_author:
if get_setting('AUTHOR_DEFAULT') is True:
user = current_user
else:
user = get_user_model().objects.get(username=get_setting('AUTHOR_DEFAULT'))
self.author = user
def thumbnail_options(self):
if self.main_image_thumbnail_id:
return self.main_image_thumbnail.as_dict
@ -308,6 +324,8 @@ class LatestPostsPlugin(BasePostPlugin):
def copy_relations(self, oldinstance):
for tag in oldinstance.tags.all():
self.tags.add(tag)
for category in oldinstance.categories.all():
self.categories.add(category)
def get_posts(self, request):
posts = self.post_queryset(request)

View file

@ -15,20 +15,17 @@ class PostIndex(get_index_base()):
author = indexes.CharField(indexed=True, model_attr='get_author')
keywords = indexes.CharField(null=True)
tags = indexes.CharField(null=True)
tags = indexes.CharField(null=True, model_attr='get_tags')
post_text = indexes.CharField(null=True)
def get_keywords(self, post):
return ','.join(post.get_keywords())
def get_title(self, post):
return post.safe_translation_getter('title')
return post.get_title()
def get_description(self, post):
return post.get_description()
def prepare_pub_date(self, post):
return post.date_published.strftime("%Y-%m-%d %H:%M:%S")
return post.date_published
def index_queryset(self, using=None):
self._get_backend(using)
@ -47,32 +44,36 @@ class PostIndex(get_index_base()):
return Post
def get_search_data(self, post, language, request):
optional_attributes = []
abstract = post.safe_translation_getter('abstract')
text_bits = [post.get_title()]
text_bits.append(strip_tags(abstract))
text_bits.append(post.get_description())
text_bits.append(' '.join(post.get_keywords()))
description = post.get_description()
abstract = strip_tags(post.safe_translation_getter('abstract', default=''))
keywords = post.get_keywords()
text_bits = []
if abstract:
text_bits.append(abstract)
if description:
text_bits.append(description)
if keywords:
text_bits.append(' '.join(keywords))
self.prepared_data['keywords'] = ','.join(keywords)
for category in post.categories.all():
text_bits.append(
force_text(category.safe_translation_getter('name')))
for tag in post.tags.all():
text_bits.append(force_text(tag.name))
if post.content:
if get_setting('USE_PLACEHOLDER'):
plugins = post.content.cmsplugin_set.filter(language=language)
content_bits = []
for base_plugin in plugins:
content = get_plugin_index_data(base_plugin, request)
text_bits.append(' '.join(content))
for attribute in optional_attributes:
value = force_text(getattr(post, attribute))
if value and value not in text_bits:
text_bits.append(value)
return ' '.join(text_bits)
content_bits.append(' '.join(content))
post_text = ' '.join(content_bits)
else:
post_text = post.safe_translation_getter('post_text')
if post_text:
post_text = strip_tags(post_text)
self.prepared_data['post_text'] = post_text
text_bits.append(post_text)
def prepare_fields(self, post, language, request):
super(PostIndex, self).prepare_fields(post, language, request)
data = [self.prepared_data['text']]
self.prepared_data['keywords'] = ' '.join(post.get_keywords())
self.prepared_data['tags'] = ' '.join(post.get_tags())
self.prepared_data['post_text'] = ' '.join(post.safe_translation_getter('post_text'))
self.prepared_data['text'] = ' '.join(data)
return ' '.join(text_bits)

View file

@ -80,6 +80,8 @@ def get_setting(name):
'BLOG_MULTISITE': getattr(settings, 'BLOG_MULTISITE', True),
'BLOG_AUTHOR_DEFAULT': getattr(settings, 'BLOG_AUTHOR_DEFAULT', True),
'BLOG_DEFAULT_PUBLISHED': getattr(settings, 'BLOG_DEFAULT_PUBLISHED', False),
'BLOG_ADMIN_POST_FIELDSET_FILTER': getattr(
settings, 'BLOG_ADMIN_POST_FIELDSET_FILTER', False),
'BLOG_AVAILABLE_PERMALINK_STYLES': getattr(
settings, 'BLOG_AVAILABLE_PERMALINK_STYLES', PERMALINKS
),

View file

@ -1,6 +1,7 @@
# -*- coding: utf-8 -*-
from django.contrib.auth import get_user_model
from django.utils import timezone
from djangocms_blog.models import thumbnail_model
from south.db import db
from south.v2 import SchemaMigration
from django.db import models
@ -66,8 +67,8 @@ class Migration(SchemaMigration):
('date_published_end', self.gf('django.db.models.fields.DateTimeField')(null=True, blank=True)),
('publish', self.gf('django.db.models.fields.BooleanField')(default=False)),
('main_image', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['filer.Image'], null=True, blank=True)),
('main_image_thumbnail', self.gf('django.db.models.fields.related.ForeignKey')(blank=True, related_name='blog_post_thumbnail', null=True, to=orm['cmsplugin_filer_image.ThumbnailOption'])),
('main_image_full', self.gf('django.db.models.fields.related.ForeignKey')(blank=True, related_name='blog_post_full', null=True, to=orm['cmsplugin_filer_image.ThumbnailOption'])),
('main_image_thumbnail', self.gf('django.db.models.fields.related.ForeignKey')(blank=True, related_name='blog_post_thumbnail', null=True, to=orm[thumbnail_model])),
('main_image_full', self.gf('django.db.models.fields.related.ForeignKey')(blank=True, related_name='blog_post_full', null=True, to=orm[thumbnail_model])),
('content', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['cms.Placeholder'], null=True)),
))
db.send_create_signal(u'djangocms_blog', ['Post'])
@ -218,7 +219,7 @@ class Migration(SchemaMigration):
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'slot': ('django.db.models.fields.CharField', [], {'max_length': '50', 'db_index': 'True'})
},
u'cmsplugin_filer_image.thumbnailoption': {
thumbnail_model: {
'Meta': {'ordering': "('width', 'height')", 'object_name': 'ThumbnailOption'},
'crop': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
'height': ('django.db.models.fields.IntegerField', [], {}),
@ -273,8 +274,8 @@ class Migration(SchemaMigration):
'date_published_end': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}),
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'main_image': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['filer.Image']", 'null': 'True', 'blank': 'True'}),
'main_image_full': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'blog_post_full'", 'null': 'True', 'to': u"orm['cmsplugin_filer_image.ThumbnailOption']"}),
'main_image_thumbnail': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'blog_post_thumbnail'", 'null': 'True', 'to': u"orm['cmsplugin_filer_image.ThumbnailOption']"}),
'main_image_full': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'blog_post_full'", 'null': 'True', 'to': u"orm['%s']" % thumbnail_model}),
'main_image_thumbnail': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'blog_post_thumbnail'", 'null': 'True', 'to': u"orm['%s']" % thumbnail_model}),
'publish': ('django.db.models.fields.BooleanField', [], {'default': 'False'})
},
u'djangocms_blog.posttranslation': {

View file

@ -1,5 +1,6 @@
# -*- coding: utf-8 -*-
from django.conf import settings as dj_settings
from djangocms_blog.models import thumbnail_model
from south.db import db
from south.v2 import SchemaMigration
@ -68,7 +69,7 @@ class Migration(SchemaMigration):
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'slot': ('django.db.models.fields.CharField', [], {'max_length': '50', 'db_index': 'True'})
},
u'cmsplugin_filer_image.thumbnailoption': {
thumbnail_model: {
'Meta': {'ordering': "('width', 'height')", 'object_name': 'ThumbnailOption'},
'crop': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
'height': ('django.db.models.fields.IntegerField', [], {}),
@ -123,8 +124,8 @@ class Migration(SchemaMigration):
'date_published_end': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}),
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'main_image': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['filer.Image']", 'null': 'True', 'blank': 'True'}),
'main_image_full': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'blog_post_full'", 'null': 'True', 'to': u"orm['cmsplugin_filer_image.ThumbnailOption']"}),
'main_image_thumbnail': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'blog_post_thumbnail'", 'null': 'True', 'to': u"orm['cmsplugin_filer_image.ThumbnailOption']"}),
'main_image_full': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'blog_post_full'", 'null': 'True', 'to': u"orm['%s']" % thumbnail_model}),
'main_image_thumbnail': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'blog_post_thumbnail'", 'null': 'True', 'to': u"orm['%s']" % thumbnail_model}),
'publish': ('django.db.models.fields.BooleanField', [], {'default': 'False'})
},
u'djangocms_blog.post_translation': {

View file

@ -1,5 +1,6 @@
# -*- coding: utf-8 -*-
from django.conf import settings as dj_settings
from djangocms_blog.models import thumbnail_model
from south.db import db
from south.v2 import SchemaMigration
@ -67,7 +68,7 @@ class Migration(SchemaMigration):
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'slot': ('django.db.models.fields.CharField', [], {'max_length': '50', 'db_index': 'True'})
},
u'cmsplugin_filer_image.thumbnailoption': {
thumbnail_model: {
'Meta': {'ordering': "('width', 'height')", 'object_name': 'ThumbnailOption'},
'crop': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
'height': ('django.db.models.fields.IntegerField', [], {}),
@ -122,8 +123,8 @@ class Migration(SchemaMigration):
'date_published_end': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}),
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'main_image': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['filer.Image']", 'null': 'True', 'blank': 'True'}),
'main_image_full': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'blog_post_full'", 'null': 'True', 'to': u"orm['cmsplugin_filer_image.ThumbnailOption']"}),
'main_image_thumbnail': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'blog_post_thumbnail'", 'null': 'True', 'to': u"orm['cmsplugin_filer_image.ThumbnailOption']"}),
'main_image_full': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'blog_post_full'", 'null': 'True', 'to': u"orm['%s']" % thumbnail_model}),
'main_image_thumbnail': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'blog_post_thumbnail'", 'null': 'True', 'to': u"orm['%s']" % thumbnail_model}),
'publish': ('django.db.models.fields.BooleanField', [], {'default': 'False'})
},
u'djangocms_blog.posttranslation': {

View file

@ -1,5 +1,6 @@
# -*- coding: utf-8 -*-
from django.conf import settings as dj_settings
from djangocms_blog.models import thumbnail_model
from south.db import db
from south.v2 import SchemaMigration
@ -69,7 +70,7 @@ class Migration(SchemaMigration):
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'slot': ('django.db.models.fields.CharField', [], {'max_length': '50', 'db_index': 'True'})
},
u'cmsplugin_filer_image.thumbnailoption': {
thumbnail_model: {
'Meta': {'ordering': "('width', 'height')", 'object_name': 'ThumbnailOption'},
'crop': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
'height': ('django.db.models.fields.IntegerField', [], {}),
@ -124,8 +125,8 @@ class Migration(SchemaMigration):
'date_published_end': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}),
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'main_image': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['filer.Image']", 'null': 'True', 'blank': 'True'}),
'main_image_full': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'blog_post_full'", 'null': 'True', 'to': u"orm['cmsplugin_filer_image.ThumbnailOption']"}),
'main_image_thumbnail': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'blog_post_thumbnail'", 'null': 'True', 'to': u"orm['cmsplugin_filer_image.ThumbnailOption']"}),
'main_image_full': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'blog_post_full'", 'null': 'True', 'to': u"orm['%s']" % thumbnail_model}),
'main_image_thumbnail': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'blog_post_thumbnail'", 'null': 'True', 'to': u"orm['%s']" % thumbnail_model}),
'publish': ('django.db.models.fields.BooleanField', [], {'default': 'False'})
},
u'djangocms_blog.posttranslation': {

View file

@ -1,5 +1,6 @@
# -*- coding: utf-8 -*-
from django.conf import settings as dj_settings
from djangocms_blog.models import thumbnail_model
from south.db import db
from south.v2 import SchemaMigration
@ -69,7 +70,7 @@ class Migration(SchemaMigration):
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'slot': ('django.db.models.fields.CharField', [], {'max_length': '50', 'db_index': 'True'})
},
u'cmsplugin_filer_image.thumbnailoption': {
thumbnail_model: {
'Meta': {'ordering': "('width', 'height')", 'object_name': 'ThumbnailOption'},
'crop': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
'height': ('django.db.models.fields.IntegerField', [], {}),
@ -124,8 +125,8 @@ class Migration(SchemaMigration):
'date_published_end': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}),
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'main_image': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['filer.Image']", 'null': 'True', 'blank': 'True'}),
'main_image_full': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'blog_post_full'", 'null': 'True', 'to': u"orm['cmsplugin_filer_image.ThumbnailOption']"}),
'main_image_thumbnail': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'blog_post_thumbnail'", 'null': 'True', 'to': u"orm['cmsplugin_filer_image.ThumbnailOption']"}),
'main_image_full': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'blog_post_full'", 'null': 'True', 'to': u"orm['%s']" % thumbnail_model}),
'main_image_thumbnail': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'blog_post_thumbnail'", 'null': 'True', 'to': u"orm['%s']" % thumbnail_model}),
'publish': ('django.db.models.fields.BooleanField', [], {'default': 'False'})
},
u'djangocms_blog.posttranslation': {

View file

@ -1,5 +1,6 @@
# -*- coding: utf-8 -*-
from django.conf import settings as dj_settings
from djangocms_blog.models import thumbnail_model
from south.db import db
from south.v2 import SchemaMigration
@ -69,7 +70,7 @@ class Migration(SchemaMigration):
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'slot': ('django.db.models.fields.CharField', [], {'max_length': '50', 'db_index': 'True'})
},
u'cmsplugin_filer_image.thumbnailoption': {
thumbnail_model: {
'Meta': {'ordering': "('width', 'height')", 'object_name': 'ThumbnailOption'},
'crop': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
'height': ('django.db.models.fields.IntegerField', [], {}),
@ -125,8 +126,8 @@ class Migration(SchemaMigration):
'enable_comments': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'main_image': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'djangocms_blog_post_image'", 'null': 'True', 'to': "orm['filer.Image']"}),
'main_image_full': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'djangocms_blog_post_full'", 'null': 'True', 'to': u"orm['cmsplugin_filer_image.ThumbnailOption']"}),
'main_image_thumbnail': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'djangocms_blog_post_thumbnail'", 'null': 'True', 'to': u"orm['cmsplugin_filer_image.ThumbnailOption']"}),
'main_image_full': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'djangocms_blog_post_full'", 'null': 'True', 'to': u"orm['%s']" % thumbnail_model}),
'main_image_thumbnail': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'djangocms_blog_post_thumbnail'", 'null': 'True', 'to': u"orm['%s']" % thumbnail_model}),
'publish': ('django.db.models.fields.BooleanField', [], {'default': 'False'})
},
u'djangocms_blog.posttranslation': {

View file

@ -1,5 +1,6 @@
# -*- coding: utf-8 -*-
from django.conf import settings as dj_settings
from djangocms_blog.models import thumbnail_model
from south.db import db
from south.v2 import SchemaMigration
@ -69,7 +70,7 @@ class Migration(SchemaMigration):
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'slot': ('django.db.models.fields.CharField', [], {'max_length': '50', 'db_index': 'True'})
},
u'cmsplugin_filer_image.thumbnailoption': {
thumbnail_model: {
'Meta': {'ordering': "('width', 'height')", 'object_name': 'ThumbnailOption'},
'crop': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
'height': ('django.db.models.fields.IntegerField', [], {}),
@ -125,8 +126,8 @@ class Migration(SchemaMigration):
'enable_comments': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'main_image': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'djangocms_blog_post_image'", 'null': 'True', 'to': "orm['filer.Image']"}),
'main_image_full': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'djangocms_blog_post_full'", 'null': 'True', 'to': u"orm['cmsplugin_filer_image.ThumbnailOption']"}),
'main_image_thumbnail': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'djangocms_blog_post_thumbnail'", 'null': 'True', 'to': u"orm['cmsplugin_filer_image.ThumbnailOption']"}),
'main_image_full': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'djangocms_blog_post_full'", 'null': 'True', 'to': u"orm['%s']" % thumbnail_model}),
'main_image_thumbnail': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'djangocms_blog_post_thumbnail'", 'null': 'True', 'to': u"orm['%s']" % thumbnail_model}),
'publish': ('django.db.models.fields.BooleanField', [], {'default': 'False'})
},
u'djangocms_blog.posttranslation': {

View file

@ -1,4 +1,5 @@
# -*- coding: utf-8 -*-
from djangocms_blog.models import thumbnail_model
from south.utils import datetime_utils as datetime
from south.db import db
from south.v2 import SchemaMigration
@ -70,7 +71,7 @@ class Migration(SchemaMigration):
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'slot': ('django.db.models.fields.CharField', [], {'max_length': '50', 'db_index': 'True'})
},
u'cmsplugin_filer_image.thumbnailoption': {
thumbnail_model: {
'Meta': {'ordering': "(u'width', u'height')", 'object_name': 'ThumbnailOption'},
'crop': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
'height': ('django.db.models.fields.IntegerField', [], {}),
@ -126,8 +127,8 @@ class Migration(SchemaMigration):
'enable_comments': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'main_image': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'djangocms_blog_post_image'", 'null': 'True', 'to': "orm['filer.Image']"}),
'main_image_full': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'djangocms_blog_post_full'", 'null': 'True', 'to': u"orm['cmsplugin_filer_image.ThumbnailOption']"}),
'main_image_thumbnail': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'djangocms_blog_post_thumbnail'", 'null': 'True', 'to': u"orm['cmsplugin_filer_image.ThumbnailOption']"}),
'main_image_full': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'djangocms_blog_post_full'", 'null': 'True', 'to': u"orm['%s']" % thumbnail_model}),
'main_image_thumbnail': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'djangocms_blog_post_thumbnail'", 'null': 'True', 'to': u"orm['%s']" % thumbnail_model}),
'publish': ('django.db.models.fields.BooleanField', [], {'default': 'False'})
},
u'djangocms_blog.posttranslation': {

View file

@ -1,4 +1,5 @@
# -*- coding: utf-8 -*-
from djangocms_blog.models import thumbnail_model
from south.utils import datetime_utils as datetime
from south.db import db
from south.v2 import SchemaMigration
@ -74,7 +75,7 @@ class Migration(SchemaMigration):
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'slot': ('django.db.models.fields.CharField', [], {'max_length': '255', 'db_index': 'True'})
},
u'cmsplugin_filer_image.thumbnailoption': {
thumbnail_model: {
'Meta': {'ordering': "('width', 'height')", 'object_name': 'ThumbnailOption'},
'crop': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
'height': ('django.db.models.fields.IntegerField', [], {}),
@ -130,8 +131,8 @@ class Migration(SchemaMigration):
'enable_comments': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'main_image': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'djangocms_blog_post_image'", 'null': 'True', 'to': "orm['filer.Image']"}),
'main_image_full': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'djangocms_blog_post_full'", 'null': 'True', 'to': u"orm['cmsplugin_filer_image.ThumbnailOption']"}),
'main_image_thumbnail': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'djangocms_blog_post_thumbnail'", 'null': 'True', 'to': u"orm['cmsplugin_filer_image.ThumbnailOption']"}),
'main_image_full': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'djangocms_blog_post_full'", 'null': 'True', 'to': u"orm['%s']" % thumbnail_model}),
'main_image_thumbnail': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'djangocms_blog_post_thumbnail'", 'null': 'True', 'to': u"orm['%s']" % thumbnail_model}),
'publish': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
'sites': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'to': u"orm['sites.Site']", 'null': 'True', 'blank': 'True'})
},

View file

@ -1,4 +1,5 @@
# -*- coding: utf-8 -*-
from djangocms_blog.models import thumbnail_model
from south.utils import datetime_utils as datetime
from south.db import db
from south.v2 import SchemaMigration
@ -10,24 +11,24 @@ class Migration(SchemaMigration):
def forwards(self, orm):
# Changing field 'Post.main_image_full'
db.alter_column(u'djangocms_blog_post', 'main_image_full_id', self.gf('django.db.models.fields.related.ForeignKey')(null=True, on_delete=models.SET_NULL, to=orm['cmsplugin_filer_image.ThumbnailOption']))
db.alter_column(u'djangocms_blog_post', 'main_image_full_id', self.gf('django.db.models.fields.related.ForeignKey')(null=True, on_delete=models.SET_NULL, to=orm[thumbnail_model]))
# Changing field 'Post.main_image'
db.alter_column(u'djangocms_blog_post', 'main_image_id', self.gf('django.db.models.fields.related.ForeignKey')(null=True, on_delete=models.SET_NULL, to=orm['filer.Image']))
# Changing field 'Post.main_image_thumbnail'
db.alter_column(u'djangocms_blog_post', 'main_image_thumbnail_id', self.gf('django.db.models.fields.related.ForeignKey')(null=True, on_delete=models.SET_NULL, to=orm['cmsplugin_filer_image.ThumbnailOption']))
db.alter_column(u'djangocms_blog_post', 'main_image_thumbnail_id', self.gf('django.db.models.fields.related.ForeignKey')(null=True, on_delete=models.SET_NULL, to=orm[thumbnail_model]))
def backwards(self, orm):
# Changing field 'Post.main_image_full'
db.alter_column(u'djangocms_blog_post', 'main_image_full_id', self.gf('django.db.models.fields.related.ForeignKey')(null=True, to=orm['cmsplugin_filer_image.ThumbnailOption']))
db.alter_column(u'djangocms_blog_post', 'main_image_full_id', self.gf('django.db.models.fields.related.ForeignKey')(null=True, to=orm[thumbnail_model]))
# Changing field 'Post.main_image'
db.alter_column(u'djangocms_blog_post', 'main_image_id', self.gf('django.db.models.fields.related.ForeignKey')(null=True, to=orm['filer.Image']))
# Changing field 'Post.main_image_thumbnail'
db.alter_column(u'djangocms_blog_post', 'main_image_thumbnail_id', self.gf('django.db.models.fields.related.ForeignKey')(null=True, to=orm['cmsplugin_filer_image.ThumbnailOption']))
db.alter_column(u'djangocms_blog_post', 'main_image_thumbnail_id', self.gf('django.db.models.fields.related.ForeignKey')(null=True, to=orm[thumbnail_model]))
models = {
u'auth.group': {
@ -80,7 +81,7 @@ class Migration(SchemaMigration):
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'slot': ('django.db.models.fields.CharField', [], {'max_length': '255', 'db_index': 'True'})
},
u'cmsplugin_filer_image.thumbnailoption': {
thumbnail_model: {
'Meta': {'ordering': "(u'width', u'height')", 'object_name': 'ThumbnailOption'},
'crop': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
'height': ('django.db.models.fields.IntegerField', [], {}),
@ -136,8 +137,8 @@ class Migration(SchemaMigration):
'enable_comments': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'main_image': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'djangocms_blog_post_image'", 'null': 'True', 'on_delete': 'models.SET_NULL', 'to': "orm['filer.Image']"}),
'main_image_full': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'djangocms_blog_post_full'", 'null': 'True', 'on_delete': 'models.SET_NULL', 'to': u"orm['cmsplugin_filer_image.ThumbnailOption']"}),
'main_image_thumbnail': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'djangocms_blog_post_thumbnail'", 'null': 'True', 'on_delete': 'models.SET_NULL', 'to': u"orm['cmsplugin_filer_image.ThumbnailOption']"}),
'main_image_full': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'djangocms_blog_post_full'", 'null': 'True', 'on_delete': 'models.SET_NULL', 'to': u"orm['%s']" % thumbnail_model}),
'main_image_thumbnail': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'djangocms_blog_post_thumbnail'", 'null': 'True', 'on_delete': 'models.SET_NULL', 'to': u"orm['%s']" % thumbnail_model}),
'publish': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
'sites': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'to': u"orm['sites.Site']", 'null': 'True', 'blank': 'True'})
},

View file

@ -1,4 +1,5 @@
# -*- coding: utf-8 -*-
from djangocms_blog.models import thumbnail_model
from south.db import db
from south.v2 import SchemaMigration
@ -61,7 +62,7 @@ class Migration(SchemaMigration):
'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'slot': ('django.db.models.fields.CharField', [], {'db_index': 'True', 'max_length': '255'})
},
'cmsplugin_filer_image.thumbnailoption': {
thumbnail_model: {
'Meta': {'object_name': 'ThumbnailOption', 'ordering': "('width', 'height')"},
'crop': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
'height': ('django.db.models.fields.IntegerField', [], {}),
@ -117,8 +118,8 @@ class Migration(SchemaMigration):
'enable_comments': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'main_image': ('django.db.models.fields.related.ForeignKey', [], {'on_delete': 'models.SET_NULL', 'blank': 'True', 'to': "orm['filer.Image']", 'null': 'True', 'related_name': "'djangocms_blog_post_image'"}),
'main_image_full': ('django.db.models.fields.related.ForeignKey', [], {'on_delete': 'models.SET_NULL', 'blank': 'True', 'to': "orm['cmsplugin_filer_image.ThumbnailOption']", 'null': 'True', 'related_name': "'djangocms_blog_post_full'"}),
'main_image_thumbnail': ('django.db.models.fields.related.ForeignKey', [], {'on_delete': 'models.SET_NULL', 'blank': 'True', 'to': "orm['cmsplugin_filer_image.ThumbnailOption']", 'null': 'True', 'related_name': "'djangocms_blog_post_thumbnail'"}),
'main_image_full': ('django.db.models.fields.related.ForeignKey', [], {'on_delete': 'models.SET_NULL', 'blank': 'True', 'to': "orm[thumbnail_model]", 'null': 'True', 'related_name': "'djangocms_blog_post_full'"}),
'main_image_thumbnail': ('django.db.models.fields.related.ForeignKey', [], {'on_delete': 'models.SET_NULL', 'blank': 'True', 'to': "orm[thumbnail_model]", 'null': 'True', 'related_name': "'djangocms_blog_post_thumbnail'"}),
'publish': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
'sites': ('django.db.models.fields.related.ManyToManyField', [], {'blank': 'True', 'to': "orm['sites.Site']", 'null': 'True', 'symmetrical': 'False'})
},

View file

@ -1,4 +1,5 @@
# -*- coding: utf-8 -*-
from djangocms_blog.models import thumbnail_model
from django.contrib.contenttypes.models import ContentType
from south.utils import datetime_utils as datetime
from south.db import db
@ -90,7 +91,7 @@ class Migration(DataMigration):
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'slot': ('django.db.models.fields.CharField', [], {'max_length': '255', 'db_index': 'True'})
},
u'cmsplugin_filer_image.thumbnailoption': {
thumbnail_model: {
'Meta': {'ordering': "(u'width', u'height')", 'object_name': 'ThumbnailOption'},
'crop': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
'height': ('django.db.models.fields.IntegerField', [], {}),
@ -146,8 +147,8 @@ class Migration(DataMigration):
'enable_comments': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'main_image': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'djangocms_blog_post_image'", 'null': 'True', 'on_delete': 'models.SET_NULL', 'to': "orm['filer.Image']"}),
'main_image_full': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'djangocms_blog_post_full'", 'null': 'True', 'on_delete': 'models.SET_NULL', 'to': u"orm['cmsplugin_filer_image.ThumbnailOption']"}),
'main_image_thumbnail': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'djangocms_blog_post_thumbnail'", 'null': 'True', 'on_delete': 'models.SET_NULL', 'to': u"orm['cmsplugin_filer_image.ThumbnailOption']"}),
'main_image_full': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'djangocms_blog_post_full'", 'null': 'True', 'on_delete': 'models.SET_NULL', 'to': u"orm['%s']" % thumbnail_model}),
'main_image_thumbnail': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'djangocms_blog_post_thumbnail'", 'null': 'True', 'on_delete': 'models.SET_NULL', 'to': u"orm['%s']" % thumbnail_model}),
'publish': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
'sites': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'to': u"orm['sites.Site']", 'null': 'True', 'blank': 'True'})
},

View file

@ -1,4 +1,5 @@
# -*- coding: utf-8 -*-
from djangocms_blog.models import thumbnail_model
from south.utils import datetime_utils as datetime
from south.db import db
from south.v2 import SchemaMigration
@ -73,7 +74,7 @@ class Migration(SchemaMigration):
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'slot': ('django.db.models.fields.CharField', [], {'max_length': '255', 'db_index': 'True'})
},
u'cmsplugin_filer_image.thumbnailoption': {
thumbnail_model: {
'Meta': {'ordering': "(u'width', u'height')", 'object_name': 'ThumbnailOption'},
'crop': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
'height': ('django.db.models.fields.IntegerField', [], {}),
@ -128,8 +129,8 @@ class Migration(SchemaMigration):
'enable_comments': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'main_image': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'djangocms_blog_post_image'", 'null': 'True', 'on_delete': 'models.SET_NULL', 'to': "orm['filer.Image']"}),
'main_image_full': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'djangocms_blog_post_full'", 'null': 'True', 'on_delete': 'models.SET_NULL', 'to': u"orm['cmsplugin_filer_image.ThumbnailOption']"}),
'main_image_thumbnail': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'djangocms_blog_post_thumbnail'", 'null': 'True', 'on_delete': 'models.SET_NULL', 'to': u"orm['cmsplugin_filer_image.ThumbnailOption']"}),
'main_image_full': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'djangocms_blog_post_full'", 'null': 'True', 'on_delete': 'models.SET_NULL', 'to': u"orm['%s']" % thumbnail_model}),
'main_image_thumbnail': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'djangocms_blog_post_thumbnail'", 'null': 'True', 'on_delete': 'models.SET_NULL', 'to': u"orm['%s']" % thumbnail_model}),
'publish': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
'sites': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'to': u"orm['sites.Site']", 'null': 'True', 'blank': 'True'})
},

View file

@ -1,4 +1,5 @@
# -*- coding: utf-8 -*-
from djangocms_blog.models import thumbnail_model
from south.utils import datetime_utils as datetime
from south.db import db
from south.v2 import SchemaMigration
@ -133,7 +134,7 @@ class Migration(SchemaMigration):
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'slot': ('django.db.models.fields.CharField', [], {'max_length': '255', 'db_index': 'True'})
},
u'cmsplugin_filer_image.thumbnailoption': {
thumbnail_model: {
'Meta': {'ordering': "(u'width', u'height')", 'object_name': 'ThumbnailOption'},
'crop': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
'height': ('django.db.models.fields.IntegerField', [], {}),
@ -211,8 +212,8 @@ class Migration(SchemaMigration):
'enable_comments': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'main_image': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "u'djangocms_blog_post_image'", 'null': 'True', 'on_delete': 'models.SET_NULL', 'to': "orm['filer.Image']"}),
'main_image_full': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "u'djangocms_blog_post_full'", 'null': 'True', 'on_delete': 'models.SET_NULL', 'to': u"orm['cmsplugin_filer_image.ThumbnailOption']"}),
'main_image_thumbnail': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "u'djangocms_blog_post_thumbnail'", 'null': 'True', 'on_delete': 'models.SET_NULL', 'to': u"orm['cmsplugin_filer_image.ThumbnailOption']"}),
'main_image_full': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "u'djangocms_blog_post_full'", 'null': 'True', 'on_delete': 'models.SET_NULL', 'to': u"orm['%s']" % thumbnail_model}),
'main_image_thumbnail': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "u'djangocms_blog_post_thumbnail'", 'null': 'True', 'on_delete': 'models.SET_NULL', 'to': u"orm['%s']" % thumbnail_model}),
'publish': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
'sites': ('django.db.models.fields.related.ManyToManyField', [], {'to': u"orm['sites.Site']", 'symmetrical': 'False', 'blank': 'True'})
},

View file

@ -1,4 +1,5 @@
# -*- coding: utf-8 -*-
from djangocms_blog.models import thumbnail_model
from south.utils import datetime_utils as datetime
from south.db import db
from south.v2 import DataMigration
@ -84,7 +85,7 @@ class Migration(DataMigration):
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'slot': ('django.db.models.fields.CharField', [], {'max_length': '255', 'db_index': 'True'})
},
u'cmsplugin_filer_image.thumbnailoption': {
thumbnail_model: {
'Meta': {'ordering': "(u'width', u'height')", 'object_name': 'ThumbnailOption'},
'crop': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
'height': ('django.db.models.fields.IntegerField', [], {}),
@ -162,8 +163,8 @@ class Migration(DataMigration):
'enable_comments': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'main_image': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "u'djangocms_blog_post_image'", 'null': 'True', 'on_delete': 'models.SET_NULL', 'to': "orm['filer.Image']"}),
'main_image_full': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "u'djangocms_blog_post_full'", 'null': 'True', 'on_delete': 'models.SET_NULL', 'to': u"orm['cmsplugin_filer_image.ThumbnailOption']"}),
'main_image_thumbnail': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "u'djangocms_blog_post_thumbnail'", 'null': 'True', 'on_delete': 'models.SET_NULL', 'to': u"orm['cmsplugin_filer_image.ThumbnailOption']"}),
'main_image_full': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "u'djangocms_blog_post_full'", 'null': 'True', 'on_delete': 'models.SET_NULL', 'to': u"orm['%s']" % thumbnail_model}),
'main_image_thumbnail': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "u'djangocms_blog_post_thumbnail'", 'null': 'True', 'on_delete': 'models.SET_NULL', 'to': u"orm['%s']" % thumbnail_model}),
'publish': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
'sites': ('django.db.models.fields.related.ManyToManyField', [], {'to': u"orm['sites.Site']", 'symmetrical': 'False', 'blank': 'True'})
},

View file

@ -1,4 +1,5 @@
# -*- coding: utf-8 -*-
from djangocms_blog.models import thumbnail_model
from south.utils import datetime_utils as datetime
from south.db import db
from south.v2 import SchemaMigration
@ -70,7 +71,7 @@ class Migration(SchemaMigration):
'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'slot': ('django.db.models.fields.CharField', [], {'max_length': '255', 'db_index': 'True'})
},
'cmsplugin_filer_image.thumbnailoption': {
thumbnail_model: {
'Meta': {'object_name': 'ThumbnailOption', 'ordering': "('width', 'height')"},
'crop': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
'height': ('django.db.models.fields.IntegerField', [], {}),
@ -149,8 +150,8 @@ class Migration(SchemaMigration):
'enable_comments': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'main_image': ('django.db.models.fields.related.ForeignKey', [], {'on_delete': 'models.SET_NULL', 'null': 'True', 'to': "orm['filer.Image']", 'related_name': "'djangocms_blog_post_image'", 'blank': 'True'}),
'main_image_full': ('django.db.models.fields.related.ForeignKey', [], {'on_delete': 'models.SET_NULL', 'null': 'True', 'to': "orm['cmsplugin_filer_image.ThumbnailOption']", 'related_name': "'djangocms_blog_post_full'", 'blank': 'True'}),
'main_image_thumbnail': ('django.db.models.fields.related.ForeignKey', [], {'on_delete': 'models.SET_NULL', 'null': 'True', 'to': "orm['cmsplugin_filer_image.ThumbnailOption']", 'related_name': "'djangocms_blog_post_thumbnail'", 'blank': 'True'}),
'main_image_full': ('django.db.models.fields.related.ForeignKey', [], {'on_delete': 'models.SET_NULL', 'null': 'True', 'to': "orm[thumbnail_model]", 'related_name': "'djangocms_blog_post_full'", 'blank': 'True'}),
'main_image_thumbnail': ('django.db.models.fields.related.ForeignKey', [], {'on_delete': 'models.SET_NULL', 'null': 'True', 'to': "orm[thumbnail_model]", 'related_name': "'djangocms_blog_post_thumbnail'", 'blank': 'True'}),
'publish': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
'sites': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'to': "orm['sites.Site']", 'blank': 'True'})
},

View file

@ -7,7 +7,7 @@
{% endblock meta %}
{% block content %}
<div class="app app-blog span8">
<div class="app app-blog">
{% block content_blog %}{% endblock %}
</div>
{% endblock content %}

View file

@ -9,3 +9,4 @@ https://github.com/nephila/djangocms-helper/archive/develop.zip
tox>=2.0
wheel
pysolr
django-parler>=1.6

View file

@ -27,7 +27,7 @@ setup(
],
include_package_data=True,
install_requires=[
'django-parler>=1.2',
'django-parler>=1.5',
'django-cms>3.0.11',
'django-taggit>=0.12.2',
'django-filer',
@ -51,7 +51,7 @@ setup(
},
classifiers=[
'Development Status :: 4 - Beta',
'Development Status :: 5 - Production/Stable',
'Framework :: Django',
'Intended Audience :: Developers',
'License :: OSI Approved :: BSD License',

View file

@ -6,6 +6,7 @@ from copy import deepcopy
from cmsplugin_filer_image.models import ThumbnailOption
from django.contrib.auth import get_user_model
from django.contrib.sites.models import Site
from django.core.cache import cache
from djangocms_helper.base_test import BaseTestCase
from haystack import connections
from haystack.constants import DEFAULT_ALIAS
@ -18,7 +19,7 @@ User = get_user_model()
def _get_cat_pk(lang, name):
return lambda: BlogCategory.objects.translated(lang, name=name).get().pk
return lambda: BlogCategory.objects.language(lang).translated(lang, name=name).get().pk
class BaseTest(BaseTestCase):
@ -65,7 +66,8 @@ class BaseTest(BaseTestCase):
'description': 'Descrizione del terzo post', 'keywords': 'keyword5, keyword6',
'text': 'Testo del terzo post'},
},
{'en': {'title': 'Different appconfig', 'abstract': '<p>Different appconfig first line</p>',
{'en': {'title': 'Different appconfig',
'abstract': '<p>Different appconfig first line</p>',
'description': 'Different appconfig description', 'keywords': 'keyword5, keyword6',
'text': 'Different appconfig text', 'app_config': 'sample_app2', 'publish': True},
'it': {'title': 'Altro appconfig', 'abstract': '<p>prima riga del Altro appconfig</p>',
@ -84,17 +86,19 @@ class BaseTest(BaseTestCase):
{'en': {'name': 'Almost', 'app_config': 'sample_app'},
'it': {'name': 'Mezzo'},
},
{'en': {'name': 'Loud', 'parent_id': _get_cat_pk('en', 'Almost'), 'app_config': 'sample_app'},
'it': {'name': 'Forte', 'parent_id': _get_cat_pk('it', 'Mezzo')},
},
{'en': {'name': 'Silent', 'parent_id': _get_cat_pk('en', 'Almost'), 'app_config': 'sample_app'},
},
{'en': {'name': 'Drums', 'app_config': 'sample_app2'},
'it': {'name': 'Tamburi'},
},
{'en': {'name': 'Guitars', 'app_config': 'sample_app2'},
'it': {'name': 'Chitarre'},
},
{'en': {'name': 'Loud', 'parent_id': _get_cat_pk('en', 'Almost'),
'app_config': 'sample_app'},
'it': {'name': 'Forte', 'parent_id': _get_cat_pk('it', 'Mezzo')},
},
{'en': {'name': 'Silent', 'parent_id': _get_cat_pk('en', 'Almost'),
'app_config': 'sample_app'},
},
)
@classmethod
@ -120,11 +124,13 @@ class BaseTest(BaseTestCase):
'sample_app': cls.app_config_1,
'sample_app2': cls.app_config_2,
}
cls.category_1 = BlogCategory.objects.create(name='category 1', app_config=cls.app_config_1)
cls.category_1 = BlogCategory.objects.create(name='category 1',
app_config=cls.app_config_1)
cls.category_1.set_current_language('it', initialize=True)
cls.category_1.name = 'categoria 1'
cls.category_1.save()
cls.site_2 = Site.objects.create(domain='http://example2.com', name='example 2')
cache.clear()
@classmethod
def tearDownClass(cls):
@ -168,7 +174,6 @@ class BaseTest(BaseTestCase):
meta_description=data['description'],
meta_keywords=data['keywords']
)
post = self.reload_model(post)
post.categories.add(self.category_1)
if sites:
for site in sites:
@ -177,6 +182,7 @@ class BaseTest(BaseTestCase):
def get_posts(self, sites=None):
posts = []
cache.clear()
for post in self._post_data:
post1 = self._get_post(post['en'], sites=sites)
post1 = self._get_post(post['it'], post=post1, lang='it')

View file

@ -3,7 +3,7 @@ from __future__ import absolute_import, print_function, unicode_literals
from aldryn_apphooks_config.utils import get_app_instance
from django.core.cache import cache
from django.utils.translation import activate
from django.utils.translation import activate, override
from menus.menu_pool import menu_pool
from parler.utils.context import smart_override, switch_language
@ -21,6 +21,7 @@ class MenuTest(BaseTest):
def setUp(self):
super(MenuTest, self).setUp()
self.cats = [self.category_1]
cache.clear()
for i, lang_data in enumerate(self._categories_data):
cat = self._get_category(lang_data['en'])
if 'it' in lang_data:
@ -28,26 +29,39 @@ class MenuTest(BaseTest):
self.cats.append(cat)
activate('en')
menu_pool.clear(all=True)
menu_pool.discover_menus()
# All cms menu modifiers should be removed from menu_pool.modifiers
# so that they do not interfere with our menu nodes
menu_pool.modifiers = [m for m in menu_pool.modifiers if m.__module__.startswith('djangocms_blog')]
cache.clear()
def test_menu_nodes(self):
"""
Tests if all categories are present in the menu
"""
self.get_posts()
self.get_pages()
posts = self.get_posts()
pages = self.get_pages()
self.reload_urlconf()
for lang in ('en', 'it'):
request = self.get_page_request(None, self.user, r'/%s/page-two/' % lang)
with smart_override(lang):
nodes = menu_pool.get_nodes(request, namespace='BlogCategoryMenu')
request = self.get_page_request(pages[1], self.user, pages[1].get_absolute_url(lang))
nodes = menu_pool.get_nodes(request)
nodes_url = set([node.url for node in nodes])
cats_url = set([cat.get_absolute_url() for cat in self.cats if cat.has_translation(lang)])
self.assertTrue(cats_url.issubset(nodes_url))
cache.clear()
posts[0].categories.clear()
for lang in ('en', 'it'):
with smart_override(lang):
request = self.get_page_request(pages[1], self.user, pages[1].get_absolute_url(lang))
nodes = menu_pool.get_nodes(request)
nodes_url = set([node.url for node in nodes])
self.assertFalse(posts[0].get_absolute_url(lang) in nodes_url)
self.assertTrue(posts[1].get_absolute_url(lang) in nodes_url)
def test_menu_options(self):
"""
Tests menu structure based on menu_structure configuration
@ -72,7 +86,7 @@ class MenuTest(BaseTest):
for lang in languages:
request = self.get_page_request(None, self.user, r'/%s/page-two/' % lang)
with smart_override(lang):
nodes = menu_pool.get_nodes(request, namespace='BlogCategoryMenu')
nodes = menu_pool.get_nodes(request)
nodes_url = set([node.url for node in nodes])
self.assertFalse(cats_url[lang].issubset(nodes_url))
self.assertFalse(posts_url[lang].issubset(nodes_url))
@ -84,7 +98,7 @@ class MenuTest(BaseTest):
for lang in languages:
request = self.get_page_request(None, self.user, r'/%s/page-two/' % lang)
with smart_override(lang):
nodes = menu_pool.get_nodes(request, namespace='BlogCategoryMenu')
nodes = menu_pool.get_nodes(request)
nodes_url = set([node.url for node in nodes])
self.assertFalse(cats_url[lang].issubset(nodes_url))
self.assertTrue(posts_url[lang].issubset(nodes_url))
@ -96,7 +110,7 @@ class MenuTest(BaseTest):
for lang in languages:
request = self.get_page_request(None, self.user, r'/%s/page-two/' % lang)
with smart_override(lang):
nodes = menu_pool.get_nodes(request, namespace='BlogCategoryMenu')
nodes = menu_pool.get_nodes(request)
nodes_url = set([node.url for node in nodes])
self.assertTrue(cats_url[lang].issubset(nodes_url))
self.assertFalse(posts_url[lang].issubset(nodes_url))
@ -108,7 +122,7 @@ class MenuTest(BaseTest):
for lang in languages:
request = self.get_page_request(None, self.user, r'/%s/page-two/' % lang)
with smart_override(lang):
nodes = menu_pool.get_nodes(request, namespace='BlogCategoryMenu')
nodes = menu_pool.get_nodes(request)
nodes_url = set([node.url for node in nodes])
self.assertTrue(cats_url[lang].issubset(nodes_url))
self.assertTrue(posts_url[lang].issubset(nodes_url))
@ -126,22 +140,55 @@ class MenuTest(BaseTest):
(PostDetailView, 'slug', posts[0], posts[0].categories.first()),
(CategoryEntriesView, 'category', self.cats[2], self.cats[2])
)
self.app_config_1.app_data.config.menu_structure = MENU_TYPE_COMPLETE
self.app_config_1.save()
for view_cls, kwarg, obj, cat in tests:
request = self.get_page_request(pages[1], self.user, path=obj.get_absolute_url())
with smart_override('en'):
with switch_language(obj, 'en'):
request = self.get_page_request(
pages[1], self.user, path=obj.get_absolute_url()
)
cache.clear()
menu_pool.clear(all=True)
view_obj = view_cls()
view_obj.request = request
view_obj.namespace, view_obj.config = get_app_instance(request)
view_obj.app_config = self.app_config_1
view_obj.kwargs = {kwarg: obj.slug}
view_obj.get(request)
view_obj.get_context_data()
# check if selected menu node points to cat
nodes = menu_pool.get_nodes(request, namespace='BlogCategoryMenu')
found = False
nodes = menu_pool.get_nodes(request)
found = []
for node in nodes:
if node.selected:
self.assertEqual(node.url, obj.get_absolute_url())
found = True
break
self.assertTrue(found)
found.append(node.get_absolute_url())
self.assertTrue(obj.get_absolute_url() in found)
self.app_config_1.app_data.config.menu_structure = MENU_TYPE_CATEGORIES
self.app_config_1.save()
for view_cls, kwarg, obj, cat in tests:
with smart_override('en'):
with switch_language(obj, 'en'):
request = self.get_page_request(
pages[1], self.user, path=obj.get_absolute_url()
)
cache.clear()
menu_pool.clear(all=True)
view_obj = view_cls()
view_obj.request = request
view_obj.namespace, view_obj.config = get_app_instance(request)
view_obj.app_config = self.app_config_1
view_obj.kwargs = {kwarg: obj.slug}
view_obj.get(request)
view_obj.get_context_data()
# check if selected menu node points to cat
nodes = menu_pool.get_nodes(request)
found = []
for node in nodes:
if node.selected:
found.append(node.get_absolute_url())
self.assertTrue(cat.get_absolute_url() in found)
self.app_config_1.app_data.config.menu_structure = MENU_TYPE_COMPLETE
self.app_config_1.save()

View file

@ -34,6 +34,8 @@ class AdminTest(BaseTest):
admin.autodiscover()
def test_admin_post_views(self):
self.get_pages()
post_admin = admin.site._registry[Post]
request = self.get_page_request('/', self.user, r'/en/blog/', edit=False)
@ -50,6 +52,28 @@ class AdminTest(BaseTest):
self.assertContains(response, '<input id="id_slug" maxlength="50" name="slug" type="text" value="first-post" />')
self.assertContains(response, '<option value="%s" selected="selected">Blog / sample_app</option>' % self.app_config_1.pk)
# Test for publish view
post.publish = False
post.save()
response = post_admin.publish_post(request, str(post.pk))
# Redirects to current post
self.assertEqual(response.status_code, 302)
self.assertEqual(response['Location'], post.get_absolute_url())
post = self.reload_model(post)
# post is publshed
self.assertTrue(post.publish)
# Non-existing post is redirected to posts list
response = post_admin.publish_post(request, str('1000000'))
self.assertEqual(response.status_code, 302)
self.assertEqual(response['Location'], reverse('djangocms_blog:posts-latest'))
# unless a referer is set
request.META['HTTP_REFERER'] = '/'
response = post_admin.publish_post(request, str('1000000'))
self.assertEqual(response.status_code, 302)
self.assertEqual(response['Location'], '/')
def test_admin_blogconfig_views(self):
post_admin = admin.site._registry[BlogConfig]
request = self.get_page_request('/', self.user, r'/en/blog/', edit=False)
@ -67,7 +91,7 @@ class AdminTest(BaseTest):
for fieldname in BlogConfigForm.base_fields:
self.assertContains(response, 'id="id_config-%s"' % fieldname)
self.assertContains(response, '<input id="id_config-og_app_id" maxlength="200" name="config-og_app_id" type="text" />')
self.assertContains(response, '<input class="vTextField" id="id_namespace" maxlength="100" name="namespace" type="text" value="sample_app" />')
self.assertContains(response, 'sample_app')
def test_admin_category_views(self):
post_admin = admin.site._registry[BlogCategory]
@ -191,6 +215,22 @@ class AdminTest(BaseTest):
self.assertEqual(Post.objects.count(), 3)
self.assertEqual(Post.objects.get(translations__slug='third-post').author.username, 'staff')
def test_admin_fieldsets_filter(self):
post_admin = admin.site._registry[Post]
request = self.get_page_request('/', self.user_normal, r'/en/blog/?app_config=%s' % self.app_config_1.pk)
fsets = post_admin.get_fieldsets(request)
self.assertFalse('author' in fsets[1][1]['fields'][0])
def filter_function(fs, request, obj=None):
if request.user == self.user_normal:
fs[1][1]['fields'][0].append('author')
return fs
with self.settings(BLOG_ADMIN_POST_FIELDSET_FILTER=filter_function):
fsets = post_admin.get_fieldsets(request)
self.assertTrue('author' in fsets[1][1]['fields'][0])
def test_admin_post_text(self):
pages = self.get_pages()
post = self._get_post(self._post_data[0]['en'])
@ -252,7 +292,7 @@ class ModelsTest(BaseTest):
url_en = reverse(
'%s:post-detail' % self.app_config_1.namespace,
kwargs=kwargs,
current_app=self.app_config_1
current_app=self.app_config_1.namespace
)
self.assertEqual(url_en, post.get_absolute_url())
@ -265,7 +305,7 @@ class ModelsTest(BaseTest):
url_it = reverse(
'%s:post-detail' % self.app_config_1.namespace,
kwargs=kwargs,
current_app=self.app_config_1
current_app=self.app_config_1.namespace
)
self.assertEqual(url_it, post.get_absolute_url())
self.assertNotEqual(url_it, url_en)

View file

@ -59,6 +59,24 @@ class PluginTest(BaseTest):
self.assertTrue(rendered.find('<article id="post-second-post"') > -1)
self.assertTrue(rendered.find(posts[1].get_absolute_url()) > -1)
# Checking copy relations
ph = pages[0].placeholders.get(slot='content')
original = ph.get_plugins('en')
pages[0].publish('en')
published = pages[0].get_public_object()
ph = published.placeholders.get(slot='content')
new = ph.get_plugins('en')
self.assertNotEqual(original, new)
casted_tags, __ = new[0].get_plugin_instance()
casted_categories, __ = new[1].get_plugin_instance()
self.assertEqual(casted_tags.tags.count(), 1)
self.assertEqual(casted_tags.categories.count(), 0)
self.assertEqual(casted_categories.tags.count(), 0)
self.assertEqual(casted_categories.categories.count(), 1)
def test_plugin_authors(self):
pages = self.get_pages()
posts = self.get_posts()
@ -73,6 +91,36 @@ class PluginTest(BaseTest):
rendered = plugin.render_plugin(context, ph)
self.assertTrue(rendered.find('No article found') > -1)
plugin.authors.add(self.user)
context = self.get_plugin_context(pages[0], 'en', plugin, edit=True)
rendered = plugin.render_plugin(context, ph)
self.assertTrue(rendered.find('/en/blog/author/admin/') > -1)
self.assertTrue(rendered.find('2 articles') > -1)
plugin.authors.add(self.user_staff)
context = self.get_plugin_context(pages[0], 'en', plugin, edit=True)
rendered = plugin.render_plugin(context, ph)
self.assertTrue(rendered.find('/en/blog/author/staff/') > -1)
self.assertTrue(rendered.find('0 articles') > -1)
plugin.authors.add(self.user_normal)
context = self.get_plugin_context(pages[0], 'en', plugin, edit=True)
rendered = plugin.render_plugin(context, ph)
self.assertTrue(rendered.find('/en/blog/author/normal/') > -1)
self.assertTrue(rendered.find('0 articles') > -1)
# Checking copy relations
ph = pages[0].placeholders.get(slot='content')
original = ph.get_plugins('en')
pages[0].publish('en')
published = pages[0].get_public_object()
ph = published.placeholders.get(slot='content')
new = ph.get_plugins('en')
self.assertNotEqual(original, new)
casted_authors, __ = new[0].get_plugin_instance()
self.assertEqual(casted_authors.authors.count(), 3)
def test_plugin_tags(self):
pages = self.get_pages()
posts = self.get_posts()

View file

@ -11,7 +11,7 @@ from .base import BaseTest
class BlogIndexingTests(BaseTest):
sample_text = ('First post First post first line This is the description keyword1 '
sample_text = ('First post first line This is the description keyword1 '
'keyword2 category 1 a tag test body')
def setUp(self):
@ -28,29 +28,12 @@ class BlogIndexingTests(BaseTest):
index.index_queryset(DEFAULT_ALIAS) # initialises index._backend_alias
indexed = index.prepare(post)
self.assertEqual(post.get_title(), indexed['title'])
self.assertEqual(post.get_description(), indexed['description'])
self.assertEqual(post.get_tags(), indexed['tags'])
self.assertEqual(self.sample_text, indexed['text'])
self.assertEqual(post.get_absolute_url(), indexed['url'])
#self.assertEqual(post.date_published.strftime("%Y-%m-%d %H:%M:%S"), indexed['pub_date'])
def test_blog_post_is_indexed_using_update_object(self):
"""This tests the indexing path way used by the RealTimeSignalProcessor"""
post = self._get_post(self._post_data[0]['en'])
post = self._get_post(self._post_data[0]['it'], post, 'it')
post.tags.add('a tag')
add_plugin(post.content, 'TextPlugin', language='en', body='test body')
index = self.get_post_index()
index.update_object(post, using=DEFAULT_ALIAS)
indexed = index.prepared_data
self.assertEqual(post.get_title(), indexed['title'])
self.assertEqual(post.get_description(), indexed['description'])
self.assertEqual(self.sample_text, indexed['text'])
self.assertEqual(post.get_absolute_url(), indexed['url'])
#self.assertEqual(post.date_published.strftime("%Y-%m-%d %H:%M:%S"), indexed['pub_date'])
self.assertEqual(post.date_published, indexed['pub_date'])
def test_searchqueryset(self):
posts = self.get_posts()

View file

@ -1,8 +1,9 @@
# -*- coding: utf-8 -*-
from __future__ import absolute_import, print_function, unicode_literals
from cms.toolbar.items import ModalItem
from cms.toolbar.items import ButtonList, ModalItem
from django.core.urlresolvers import reverse
from django.utils.encoding import force_text
from djangocms_blog.models import BLOG_CURRENT_POST_IDENTIFIER
@ -20,9 +21,39 @@ class ToolbarTest(BaseTest):
pages = self.get_pages()
request = self.get_page_request(pages[0], self.user, r'/en/blog/', edit=True)
setattr(request, BLOG_CURRENT_POST_IDENTIFIER, posts[0])
posts[0].publish = False
posts[0].save()
toolbar = CMSToolbar(request)
toolbar.populate()
toolbar.post_template_populate()
toolbar.get_left_items()
blog_menu = toolbar.menus['djangocms_blog']
self.assertEqual(len(blog_menu.find_items(ModalItem, url=reverse('admin:djangocms_blog_post_changelist'))), 1)
self.assertEqual(len(blog_menu.find_items(ModalItem, url=reverse('admin:djangocms_blog_post_add'))), 1)
self.assertEqual(len(blog_menu.find_items(ModalItem, url=reverse('admin:djangocms_blog_post_change', args=(posts[0].pk,)))), 1)
# Publish button only appears if current post is unpublished
right = toolbar.get_right_items()
buttons = sum([item.buttons for item in right if isinstance(item, ButtonList)], [])
self.assertTrue([button for button in buttons if force_text(button.name) == 'Publish Blog now'])
# Publish button does not appears if current post is published
posts[0].publish = True
posts[0].save()
toolbar = CMSToolbar(request)
toolbar.populate()
toolbar.post_template_populate()
right = toolbar.get_right_items()
buttons = sum([item.buttons for item in right if isinstance(item, ButtonList)], [])
self.assertFalse([button for button in buttons if force_text(button.name) == 'Publish Blog now'])
# Publish button does not appears if other posts but the current one are unpublished
posts[1].publish = True
posts[1].save()
toolbar = CMSToolbar(request)
toolbar.populate()
toolbar.post_template_populate()
right = toolbar.get_right_items()
buttons = sum([item.buttons for item in right if isinstance(item, ButtonList)], [])
self.assertFalse([button for button in buttons if force_text(button.name) == 'Publish Blog now'])

View file

@ -47,25 +47,43 @@ class WizardTest(BaseTest):
@skipIf(LooseVersion(cms.__version__) < LooseVersion('3.2'),
reason='Wizards not available for django CMS < 3.2')
def test_wizard_init(self):
from cms.utils.permissions import current_user
from cms.wizards.wizard_pool import wizard_pool
from djangocms_blog.models import Post
self.get_pages()
with current_user(self.user_staff):
wizs = [entry for entry in wizard_pool.get_entries() if entry.model == Post]
for wiz in wizs:
for index, wiz in enumerate(wizs):
app_config = self.app_config_1.pk if wiz.title == 'New Blog' else self.app_config_2.pk
form = wiz.form()
self.assertTrue(form.initial.get('app_config', False), app_config)
self.assertTrue(form.fields['app_config'].widget.attrs['disabled'])
form = wiz.form(data={
'1-title': 'title',
'1-abstract': 'abstract',
'1-title': 'title{0}'.format(index),
'1-abstract': 'abstract{0}'.format(index),
'1-categories': [self.category_1.pk],
}, prefix=1)
self.assertEqual(form.default_appconfig, app_config)
self.assertTrue(form.is_valid())
self.assertTrue(form.cleaned_data['app_config'], app_config)
self.assertEqual(form.cleaned_data['app_config'].pk, app_config)
instance = form.save()
self.assertEqual(instance.author, self.user_staff)
with self.settings(BLOG_AUTHOR_DEFAULT='normal'):
for index, wiz in enumerate(wizs):
app_config = self.app_config_1.pk if wiz.title == 'New Blog' else self.app_config_2.pk
form = wiz.form(data={
'1-title': 'title-2{0}'.format(index),
'1-abstract': 'abstract-2{0}'.format(index),
'1-categories': [self.category_1.pk],
}, prefix=1)
self.assertEqual(form.default_appconfig, app_config)
self.assertTrue(form.is_valid())
self.assertEqual(form.cleaned_data['app_config'].pk, app_config)
instance = form.save()
self.assertEqual(instance.author, self.user_normal)
def test_wizard_import(self):
# The following import should not fail in any django CMS version

22
tox.ini
View file

@ -1,27 +1,29 @@
[tox]
envlist = pep8,isort,py{35,34,33,27}-django{19,18}-cms{32,31},py{34,33,27}-django{17,16}-cms{32,31,30},py{26}-django16-cms{31,30}
envlist = pep8,isort,py{35,34,27}-django{19}-cms{32},py{35,34,33,27}-django{18}-cms{32,31},py{34,33,27}-django{17,16}-cms{32,31,30},py{26}-django16-cms{31,30}
[testenv]
commands = {env:COMMAND:python} cms_helper.py test djangocms_blog --no-migrate
deps =
-r{toxinidir}/requirements-test.txt
django16: Django>=1.6,<1.7
django16: django-taggit<0.18
django16: django-mptt<0.8
django17: Django>=1.7,<1.8
django18: Django>=1.7,<1.9
django18: https://github.com/stefanfoulis/django-filer/archive/develop.zip
django18: https://github.com/stefanfoulis/cmsplugin-filer/archive/develop.zip
django19: Django==1.9a1
django19: https://github.com/stefanfoulis/django-filer/archive/develop.zip
django19: https://github.com/stefanfoulis/cmsplugin-filer/archive/develop.zip
django17: django-mptt<0.8
django18: Django>=1.8,<1.9
django18: django-mptt>=0.8
django19: Django>=1.9,<1.10
django19: django-mptt>=0.8
django19: https://github.com/divio/django-filer/archive/develop.zip
django19: https://github.com/divio/cmsplugin-filer/archive/develop.zip
cms30: https://github.com/divio/django-cms/archive/support/3.0.x.zip
cms31: https://github.com/divio/django-cms/archive/support/3.1.x.zip
cms32: https://github.com/divio/django-cms/archive/develop.zip
cms32: https://github.com/divio/django-cms/archive/release/3.2.x.zip
https://github.com/nephila/django-meta-mixin/archive/master.zip
https://github.com/nephila/djangocms-helper/archive/develop.zip
py26: unittest2
django-parler<1.5
https://github.com/aldryn/aldryn-apphooks-config/archive/master.zip
https://github.com/nephila/djangocms-apphook-setup/archive/master.zip
-r{toxinidir}/requirements-test.txt
[testenv:isort]
deps = isort