From dccb47178bef5feaae413854f764cb16dfb7d4d2 Mon Sep 17 00:00:00 2001 From: Karl Hobley Date: Tue, 15 Jul 2014 10:38:50 +0100 Subject: [PATCH 001/210] Added tutorial for creating multilingual sites --- docs/index.rst | 1 + docs/multilingual_sites.rst | 145 ++++++++++++++++++++++++++++++++++++ 2 files changed, 146 insertions(+) create mode 100644 docs/multilingual_sites.rst diff --git a/docs/index.rst b/docs/index.rst index 2ab429eb62..582e5aa826 100644 --- a/docs/index.rst +++ b/docs/index.rst @@ -16,6 +16,7 @@ It supports Django 1.6.2+ on Python 2.6, 2.7, 3.2, 3.3 and 3.4. Django 1.7 suppo search/index form_builder model_recipes + multilingual_sites advanced_topics deploying performance diff --git a/docs/multilingual_sites.rst b/docs/multilingual_sites.rst new file mode 100644 index 0000000000..f8f9e1f73d --- /dev/null +++ b/docs/multilingual_sites.rst @@ -0,0 +1,145 @@ +=========================== +Creating multilingual sites +=========================== + +This tutorial will show you a method of creating multilingual sites in Wagtail. + +Currently, Wagtail doesn't support multiple languages in the same page. The recommended way of creating multilingual websites in Wagtail at the moment is to create one section of your website for each language. + +For example:: + + / + en/ + about/ + contact/ + fr/ + about/ + contact/ + + +The root page +============= + +The root page (``/``) should detect the browsers language and forward them to the correct language homepage (``/en/``, ``/fr/``). This page should sit at the site root (where the homepage would normally be). + +We must set Djangos ``LANGUAGES`` setting so we don't redirect non English/French users to pages that don't exist. + + +.. code-block:: python + + # settings.py + LANGUAGES = ( + ('en', _("English")), + ('fr', _("French")), + ) + + # models.py + from django.utils import translation + from django.http import HttpResponseRedirect + + from wagtail.wagtailcore.models import Page + + + class LanguageRedirectionPage(Page): + + def serve(self, request): + # This will only return a language that is in the LANGUAGES Django setting + language = translation.get_language_from_request(request) + + return HttpResponseRedirect(self.url + language + '/') + + +Linking pages together +====================== + +It may be useful to link different versions of the same page together to allow the user to easily switch between languages. But we don't want to increse the burdon on the editor too much so ideally, editors should only need to link one of the pages to the other versions and the links between the other versions should be created implicitly. + +As this behaviour needs to be added to all page types that would be translated, its best to put this behaviour in a mixin. + +Heres an example of how this could be implemented (with English as the main language and French/Spanish as alternative languages): + +.. code-block:: python + + class TranslatablePageMixin(models.Model): + # One link for each alternative language + # These should only be used on the main language page (english) + french_link = models.ForeignKey(Page, null=True, on_delete=models.SET_NULL, blank=True, related_name='+') + spanish_link = models.ForeignKey(Page, null=True, on_delete=models.SET_NULL, blank=True, related_name='+') + + def get_language(self): + """ + This returns the language code for this page. + """ + # Look through ancestors of this pages for its language homepage + # The language homepage is located at depth 3 + language_homepage = self.get_ancestors(inclusive=True).get(depth=3) + + return language_homepage.slug + + + # Method to find the main language version of this page + # This works by reversing the above links + + def english_page(self): + """ + This finds the english version of this page + """ + language = self.get_language() + + if language == 'en': + return self + elif language == 'fr': + return type(self).objects.filter(french_link=self).first().specific + elif language == 'es': + return type(self).objects.filter(spanish_link=self).first().specific + + + # We need a method to find a version of this page for each alternative language. + # These all work the same way. They firstly find the main version of the page + # (english), then from there they can just follow the link to the correct page. + + def french_page(self): + """ + This finds the french version of this page + """ + english_page = self.english_page() + + if english_page and english_page.french_link: + return english_page.french_link.specific + + def spanish_page(self): + """ + This finds the spanish version of this page + """ + english_page = self.english_page() + + if english_page and english_page.spanish_link: + return english_page.spanish_link.specific + + class Meta: + abstract = True + + + class AboutPage(Page, TranslatablePageMixin): + ... + + + class ContactPage(Page, TranslatablePageMixin): + ... + + +You can make use of these methods in your template by doing: + +.. code-block:: django + + {% if self.english_page and self.get_langage != 'en' %} + {% trans "View in English" %} + {% endif %} + + {% if self.french_page and self.get_langage != 'fr' %} + {% trans "View in French" %} + {% endif %} + + {% if self.spanish_page and self.get_langage != 'es' %} + {% trans "View in Spanish" %} + {% endif %} From a4c847c35df418fe4653f110ab816ef0beb8c2ef Mon Sep 17 00:00:00 2001 From: Karl Hobley Date: Tue, 15 Jul 2014 10:43:40 +0100 Subject: [PATCH 002/210] Typo fixes --- docs/multilingual_sites.rst | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/docs/multilingual_sites.rst b/docs/multilingual_sites.rst index f8f9e1f73d..b5aca82fbb 100644 --- a/docs/multilingual_sites.rst +++ b/docs/multilingual_sites.rst @@ -132,14 +132,14 @@ You can make use of these methods in your template by doing: .. code-block:: django - {% if self.english_page and self.get_langage != 'en' %} + {% if self.english_page and self.get_language != 'en' %} {% trans "View in English" %} {% endif %} - {% if self.french_page and self.get_langage != 'fr' %} + {% if self.french_page and self.get_language != 'fr' %} {% trans "View in French" %} {% endif %} - {% if self.spanish_page and self.get_langage != 'es' %} + {% if self.spanish_page and self.get_language != 'es' %} {% trans "View in Spanish" %} {% endif %} From f8a24ae255552f74b5b1f081eb6a79f652af4760 Mon Sep 17 00:00:00 2001 From: Karl Hobley Date: Tue, 15 Jul 2014 10:49:12 +0100 Subject: [PATCH 003/210] Tweaks to multilingual tutorial --- docs/multilingual_sites.rst | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/docs/multilingual_sites.rst b/docs/multilingual_sites.rst index b5aca82fbb..1d73a18fba 100644 --- a/docs/multilingual_sites.rst +++ b/docs/multilingual_sites.rst @@ -70,10 +70,11 @@ Heres an example of how this could be implemented (with English as the main lang """ This returns the language code for this page. """ - # Look through ancestors of this pages for its language homepage + # Look through ancestors of this page for its language homepage # The language homepage is located at depth 3 language_homepage = self.get_ancestors(inclusive=True).get(depth=3) + # The slug of language homepages should always be set to the language code return language_homepage.slug From e777b24baa4e2fd4d536bd08585595656d9fa700 Mon Sep 17 00:00:00 2001 From: Helen Warren Date: Thu, 19 Jun 2014 12:16:22 +0100 Subject: [PATCH 004/210] Add wagtail-project command to wagtail set up which when executed creates a wagtail project based on the wagtail 'template' --- setup.py | 4 ++ wagtail/bin/__init__.py | 0 wagtail/bin/wagtail_project.py | 84 ++++++++++++++++++++++++++++++++++ 3 files changed, 88 insertions(+) create mode 100644 wagtail/bin/__init__.py create mode 100644 wagtail/bin/wagtail_project.py diff --git a/setup.py b/setup.py index 129a48468a..d34358aeaf 100644 --- a/setup.py +++ b/setup.py @@ -74,5 +74,9 @@ setup( 'Topic :: Internet :: WWW/HTTP :: Site Management', ], install_requires=install_requires, + entry_points=""" + [console_scripts] + wagtail-project=wagtail.bin.wagtail_project:create_project + """, zip_safe=False, ) diff --git a/wagtail/bin/__init__.py b/wagtail/bin/__init__.py new file mode 100644 index 0000000000..e69de29bb2 diff --git a/wagtail/bin/wagtail_project.py b/wagtail/bin/wagtail_project.py new file mode 100644 index 0000000000..1a6defb899 --- /dev/null +++ b/wagtail/bin/wagtail_project.py @@ -0,0 +1,84 @@ +#!/usr/bin/env python +import os +import subprocess +import errno +import sys + +from optparse import OptionParser + +TEMPLATE_NAME = 'wagtaildemo' # the name of the folder in wagtail/library + + +def replace_strings_in_file(filename, old_string, new_string): + f = open(filename, 'r') + filedata = f.read() + f.close() + + newdata = filedata.replace(old_string, new_string) + + f = open(filename, 'w') + f.write(newdata) + f.close() + + +def create_project(): + + # collect and analyse the name given for the wagtail project + parser = OptionParser(usage="Usage: %prog project_name") + (options, args) = parser.parse_args() + + if len(args) != 1: + parser.error("Please specify a name for your wagtail installation") + + project_name = args[0] + project_path = os.path.join(os.getcwd(), project_name) + + # Make sure given name is not already in use by another python package/module. + try: + __import__(project_name) + except ImportError: + pass + else: + parser.error("'%s' conflicts with the name of an existing " + "Python module and cannot be used as a project " + "name. Please try another name." % project_name) + + # make sure directory does not already exist + if os.path.exists(project_name): + print 'A directory called %(project_name)s already exists. \ + Please choose another name for your wagtail project or remove the existing directory.' % {'project_name': project_name} + sys.exit(errno.EEXIST) + + print "Creating a wagtail project called %(project_name)s" % {'project_name': project_name} + + # create the project from the wagtail template using startapp + + # first find the path to wagtail + import wagtail + wagtail_path = os.path.dirname(wagtail.__file__) + template_path = os.path.join(wagtail_path, 'library', TEMPLATE_NAME) + + # call django-admin startproject + subprocess.call(['django-admin.py', 'startproject', '--template=' + template_path, project_name]) + + # in newly created project, replace all occurences of TEMPLATE_NAME ('wagtaildemo') + os.chdir(project_name) + + # first within the contents of files + for folder, subs, files in os.walk(os.getcwd()): + for filename in files: + replace_strings_in_file(os.path.join(folder, filename), TEMPLATE_NAME, project_name) + + # then in file and folder names + for folder, subs, files in os.walk(os.getcwd()): + for sub in subs: + if TEMPLATE_NAME in sub: + os.rename(sub, sub.replace(TEMPLATE_NAME, project_name)) + for filename in files: + if TEMPLATE_NAME in filename: + os.rename(filename, filename.replace(TEMPLATE_NAME, project_name)) + + print 'Success! %(project_name)s is created' % {'project_name': project_name} + +if __name__ == "__main__": + create_project() From de94bc277dc23174411ab4445b8af34323461943 Mon Sep 17 00:00:00 2001 From: Karl Hobley Date: Wed, 9 Jul 2014 16:32:25 +0100 Subject: [PATCH 005/210] Imported wagtail-template --- wagtail/project_template/.gitignore | 7 + wagtail/project_template/Vagrantfile | 27 ++ wagtail/project_template/docs/Makefile | 153 +++++++++++ wagtail/project_template/docs/__init__.py | 1 + wagtail/project_template/docs/conf.py | 242 ++++++++++++++++++ wagtail/project_template/docs/deploy.rst | 4 + wagtail/project_template/docs/index.rst | 25 ++ wagtail/project_template/docs/install.rst | 4 + wagtail/project_template/docs/make.bat | 190 ++++++++++++++ wagtail/project_template/fabfile.py | 32 +++ .../project_name/core/__init__.py | 0 .../core/migrations/0001_initial.py | 87 +++++++ .../core/migrations/0002_create_homepage.py | 110 ++++++++ .../project_name/core/migrations/__init__.py | 0 .../project_name/core/models.py | 7 + .../core/templates/core/home_page.html | 13 + .../core/templatetags/__init__.py | 0 .../core/templatetags/core_tags.py | 13 + .../project_template/project_name/manage.py | 10 + .../project_name/project_name/__init__.py | 0 .../project_name/settings/__init__.py | 1 + .../project_name/settings/base.py | 196 ++++++++++++++ .../project_name/project_name/settings/dev.py | 15 ++ .../project_name/settings/production.py | 19 ++ .../project_name/project_name/urls.py | 31 +++ .../project_name/project_name/wsgi.py | 14 + .../project_name/static/css/project_name.scss | 0 .../project_name/static/js/project_name.js | 0 .../project_name/templates/404.html | 9 + .../project_name/templates/500.html | 9 + .../project_name/templates/base.html | 40 +++ wagtail/project_template/readme.rst | 33 +++ wagtail/project_template/requirements.txt | 1 + .../project_template/requirements/base.txt | 7 + wagtail/project_template/requirements/dev.txt | 4 + .../requirements/production.txt | 1 + .../project_template/requirements/test.txt | 1 + wagtail/project_template/vagrant/provision.sh | 39 +++ 38 files changed, 1345 insertions(+) create mode 100644 wagtail/project_template/.gitignore create mode 100644 wagtail/project_template/Vagrantfile create mode 100644 wagtail/project_template/docs/Makefile create mode 100644 wagtail/project_template/docs/__init__.py create mode 100644 wagtail/project_template/docs/conf.py create mode 100644 wagtail/project_template/docs/deploy.rst create mode 100644 wagtail/project_template/docs/index.rst create mode 100644 wagtail/project_template/docs/install.rst create mode 100644 wagtail/project_template/docs/make.bat create mode 100644 wagtail/project_template/fabfile.py create mode 100644 wagtail/project_template/project_name/core/__init__.py create mode 100644 wagtail/project_template/project_name/core/migrations/0001_initial.py create mode 100644 wagtail/project_template/project_name/core/migrations/0002_create_homepage.py create mode 100644 wagtail/project_template/project_name/core/migrations/__init__.py create mode 100644 wagtail/project_template/project_name/core/models.py create mode 100644 wagtail/project_template/project_name/core/templates/core/home_page.html create mode 100644 wagtail/project_template/project_name/core/templatetags/__init__.py create mode 100644 wagtail/project_template/project_name/core/templatetags/core_tags.py create mode 100644 wagtail/project_template/project_name/manage.py create mode 100644 wagtail/project_template/project_name/project_name/__init__.py create mode 100644 wagtail/project_template/project_name/project_name/settings/__init__.py create mode 100644 wagtail/project_template/project_name/project_name/settings/base.py create mode 100644 wagtail/project_template/project_name/project_name/settings/dev.py create mode 100644 wagtail/project_template/project_name/project_name/settings/production.py create mode 100644 wagtail/project_template/project_name/project_name/urls.py create mode 100644 wagtail/project_template/project_name/project_name/wsgi.py create mode 100644 wagtail/project_template/project_name/static/css/project_name.scss create mode 100644 wagtail/project_template/project_name/static/js/project_name.js create mode 100644 wagtail/project_template/project_name/templates/404.html create mode 100644 wagtail/project_template/project_name/templates/500.html create mode 100644 wagtail/project_template/project_name/templates/base.html create mode 100644 wagtail/project_template/readme.rst create mode 100644 wagtail/project_template/requirements.txt create mode 100644 wagtail/project_template/requirements/base.txt create mode 100644 wagtail/project_template/requirements/dev.txt create mode 100644 wagtail/project_template/requirements/production.txt create mode 100644 wagtail/project_template/requirements/test.txt create mode 100755 wagtail/project_template/vagrant/provision.sh diff --git a/wagtail/project_template/.gitignore b/wagtail/project_template/.gitignore new file mode 100644 index 0000000000..1f499b52ea --- /dev/null +++ b/wagtail/project_template/.gitignore @@ -0,0 +1,7 @@ +*.pyc +.DS_Store +/.venv/ +/*/*/settings/local.py +/static/ +/media/ +Vagrantfile.local diff --git a/wagtail/project_template/Vagrantfile b/wagtail/project_template/Vagrantfile new file mode 100644 index 0000000000..146069b27f --- /dev/null +++ b/wagtail/project_template/Vagrantfile @@ -0,0 +1,27 @@ +# -*- mode: ruby -*- +# vi: set ft=ruby : + +Vagrant::Config.run do |config| + # Base box to build off, and download URL for when it doesn't exist on the user's system already + config.vm.box = "wagtail-base-v0.2" + config.vm.box_url = "http://downloads.torchbox.com/wagtail-base-v0.2.box" + + # Forward a port from the guest to the host, which allows for outside + # computers to access the VM, whereas host only networking does not. + config.vm.forward_port 8000, 8111 + + # Share an additional folder to the guest VM. The first argument is + # an identifier, the second is the path on the guest to mount the + # folder, and the third is the path on the host to the actual folder. + config.vm.share_folder "project", "/home/vagrant/{{ project_name }}", "." + + # Enable provisioning with a shell script. + config.vm.provision :shell, :path => "vagrant/provision.sh", :args => "{{ project_name }}" + + # If a 'Vagrantfile.local' file exists, import any configuration settings + # defined there into here. Vagrantfile.local is ignored in version control, + # so this can be used to add configuration specific to this computer. + if File.exist? "Vagrantfile.local" + instance_eval File.read("Vagrantfile.local"), "Vagrantfile.local" + end +end diff --git a/wagtail/project_template/docs/Makefile b/wagtail/project_template/docs/Makefile new file mode 100644 index 0000000000..9842cf5755 --- /dev/null +++ b/wagtail/project_template/docs/Makefile @@ -0,0 +1,153 @@ +# Makefile for Sphinx documentation +# + +# You can set these variables from the command line. +SPHINXOPTS = +SPHINXBUILD = sphinx-build +PAPER = +BUILDDIR = _build + +# Internal variables. +PAPEROPT_a4 = -D latex_paper_size=a4 +PAPEROPT_letter = -D latex_paper_size=letter +ALLSPHINXOPTS = -d $(BUILDDIR)/doctrees $(PAPEROPT_$(PAPER)) $(SPHINXOPTS) . +# the i18n builder cannot share the environment and doctrees with the others +I18NSPHINXOPTS = $(PAPEROPT_$(PAPER)) $(SPHINXOPTS) . + +.PHONY: help clean html dirhtml singlehtml pickle json htmlhelp qthelp devhelp epub latex latexpdf text man changes linkcheck doctest gettext + +help: + @echo "Please use \`make ' where is one of" + @echo " html to make standalone HTML files" + @echo " dirhtml to make HTML files named index.html in directories" + @echo " singlehtml to make a single large HTML file" + @echo " pickle to make pickle files" + @echo " json to make JSON files" + @echo " htmlhelp to make HTML files and a HTML help project" + @echo " qthelp to make HTML files and a qthelp project" + @echo " devhelp to make HTML files and a Devhelp project" + @echo " epub to make an epub" + @echo " latex to make LaTeX files, you can set PAPER=a4 or PAPER=letter" + @echo " latexpdf to make LaTeX files and run them through pdflatex" + @echo " text to make text files" + @echo " man to make manual pages" + @echo " texinfo to make Texinfo files" + @echo " info to make Texinfo files and run them through makeinfo" + @echo " gettext to make PO message catalogs" + @echo " changes to make an overview of all changed/added/deprecated items" + @echo " linkcheck to check all external links for integrity" + @echo " doctest to run all doctests embedded in the documentation (if enabled)" + +clean: + -rm -rf $(BUILDDIR)/* + +html: + $(SPHINXBUILD) -b html $(ALLSPHINXOPTS) $(BUILDDIR)/html + @echo + @echo "Build finished. The HTML pages are in $(BUILDDIR)/html." + +dirhtml: + $(SPHINXBUILD) -b dirhtml $(ALLSPHINXOPTS) $(BUILDDIR)/dirhtml + @echo + @echo "Build finished. The HTML pages are in $(BUILDDIR)/dirhtml." + +singlehtml: + $(SPHINXBUILD) -b singlehtml $(ALLSPHINXOPTS) $(BUILDDIR)/singlehtml + @echo + @echo "Build finished. The HTML page is in $(BUILDDIR)/singlehtml." + +pickle: + $(SPHINXBUILD) -b pickle $(ALLSPHINXOPTS) $(BUILDDIR)/pickle + @echo + @echo "Build finished; now you can process the pickle files." + +json: + $(SPHINXBUILD) -b json $(ALLSPHINXOPTS) $(BUILDDIR)/json + @echo + @echo "Build finished; now you can process the JSON files." + +htmlhelp: + $(SPHINXBUILD) -b htmlhelp $(ALLSPHINXOPTS) $(BUILDDIR)/htmlhelp + @echo + @echo "Build finished; now you can run HTML Help Workshop with the" \ + ".hhp project file in $(BUILDDIR)/htmlhelp." + +qthelp: + $(SPHINXBUILD) -b qthelp $(ALLSPHINXOPTS) $(BUILDDIR)/qthelp + @echo + @echo "Build finished; now you can run "qcollectiongenerator" with the" \ + ".qhcp project file in $(BUILDDIR)/qthelp, like this:" + @echo "# qcollectiongenerator $(BUILDDIR)/qthelp/{{ project_name }}.qhcp" + @echo "To view the help file:" + @echo "# assistant -collectionFile $(BUILDDIR)/qthelp/{{ project_name }}.qhc" + +devhelp: + $(SPHINXBUILD) -b devhelp $(ALLSPHINXOPTS) $(BUILDDIR)/devhelp + @echo + @echo "Build finished." + @echo "To view the help file:" + @echo "# mkdir -p $$HOME/.local/share/devhelp/{{ project_name }}" + @echo "# ln -s $(BUILDDIR)/devhelp $$HOME/.local/share/devhelp/{{ project_name }}" + @echo "# devhelp" + +epub: + $(SPHINXBUILD) -b epub $(ALLSPHINXOPTS) $(BUILDDIR)/epub + @echo + @echo "Build finished. The epub file is in $(BUILDDIR)/epub." + +latex: + $(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex + @echo + @echo "Build finished; the LaTeX files are in $(BUILDDIR)/latex." + @echo "Run \`make' in that directory to run these through (pdf)latex" \ + "(use \`make latexpdf' here to do that automatically)." + +latexpdf: + $(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex + @echo "Running LaTeX files through pdflatex..." + $(MAKE) -C $(BUILDDIR)/latex all-pdf + @echo "pdflatex finished; the PDF files are in $(BUILDDIR)/latex." + +text: + $(SPHINXBUILD) -b text $(ALLSPHINXOPTS) $(BUILDDIR)/text + @echo + @echo "Build finished. The text files are in $(BUILDDIR)/text." + +man: + $(SPHINXBUILD) -b man $(ALLSPHINXOPTS) $(BUILDDIR)/man + @echo + @echo "Build finished. The manual pages are in $(BUILDDIR)/man." + +texinfo: + $(SPHINXBUILD) -b texinfo $(ALLSPHINXOPTS) $(BUILDDIR)/texinfo + @echo + @echo "Build finished. The Texinfo files are in $(BUILDDIR)/texinfo." + @echo "Run \`make' in that directory to run these through makeinfo" \ + "(use \`make info' here to do that automatically)." + +info: + $(SPHINXBUILD) -b texinfo $(ALLSPHINXOPTS) $(BUILDDIR)/texinfo + @echo "Running Texinfo files through makeinfo..." + make -C $(BUILDDIR)/texinfo info + @echo "makeinfo finished; the Info files are in $(BUILDDIR)/texinfo." + +gettext: + $(SPHINXBUILD) -b gettext $(I18NSPHINXOPTS) $(BUILDDIR)/locale + @echo + @echo "Build finished. The message catalogs are in $(BUILDDIR)/locale." + +changes: + $(SPHINXBUILD) -b changes $(ALLSPHINXOPTS) $(BUILDDIR)/changes + @echo + @echo "The overview file is in $(BUILDDIR)/changes." + +linkcheck: + $(SPHINXBUILD) -b linkcheck $(ALLSPHINXOPTS) $(BUILDDIR)/linkcheck + @echo + @echo "Link check complete; look for any errors in the above output " \ + "or in $(BUILDDIR)/linkcheck/output.txt." + +doctest: + $(SPHINXBUILD) -b doctest $(ALLSPHINXOPTS) $(BUILDDIR)/doctest + @echo "Testing of doctests in the sources finished, look at the " \ + "results in $(BUILDDIR)/doctest/output.txt." diff --git a/wagtail/project_template/docs/__init__.py b/wagtail/project_template/docs/__init__.py new file mode 100644 index 0000000000..8772c827b3 --- /dev/null +++ b/wagtail/project_template/docs/__init__.py @@ -0,0 +1 @@ +# Included so that Django's startproject comment runs against the docs directory diff --git a/wagtail/project_template/docs/conf.py b/wagtail/project_template/docs/conf.py new file mode 100644 index 0000000000..0a73709e65 --- /dev/null +++ b/wagtail/project_template/docs/conf.py @@ -0,0 +1,242 @@ +# -*- coding: utf-8 -*- +# +# {{ project_name }} documentation build configuration file, created by +# sphinx-quickstart on Sun Feb 17 11:46:20 2013. +# +# This file is execfile()d with the current directory set to its containing dir. +# +# Note that not all possible configuration values are present in this +# autogenerated file. +# +# All configuration values have a default; values that are commented out +# serve to show the default. + +import sys, os + +# If extensions (or modules to document with autodoc) are in another directory, +# add these directories to sys.path here. If the directory is relative to the +# documentation root, use os.path.abspath to make it absolute, like shown here. +#sys.path.insert(0, os.path.abspath('.')) + +# -- General configuration ----------------------------------------------------- + +# If your documentation needs a minimal Sphinx version, state it here. +#needs_sphinx = '1.0' + +# Add any Sphinx extension module names here, as strings. They can be extensions +# coming with Sphinx (named 'sphinx.ext.*') or your custom ones. +extensions = [] + +# Add any paths that contain templates here, relative to this directory. +templates_path = ['_templates'] + +# The suffix of source filenames. +source_suffix = '.rst' + +# The encoding of source files. +#source_encoding = 'utf-8-sig' + +# The master toctree document. +master_doc = 'index' + +# General information about the project. +project = u'{{ project_name }}' +copyright = u'2014, ChangeMyName' + +# The version info for the project you're documenting, acts as replacement for +# |version| and |release|, also used in various other places throughout the +# built documents. +# +# The short X.Y version. +version = '0.1' +# The full version, including alpha/beta/rc tags. +release = '0.1' + +# The language for content autogenerated by Sphinx. Refer to documentation +# for a list of supported languages. +#language = None + +# There are two options for replacing |today|: either, you set today to some +# non-false value, then it is used: +#today = '' +# Else, today_fmt is used as the format for a strftime call. +#today_fmt = '%B %d, %Y' + +# List of patterns, relative to source directory, that match files and +# directories to ignore when looking for source files. +exclude_patterns = ['_build'] + +# The reST default role (used for this markup: `text`) to use for all documents. +#default_role = None + +# If true, '()' will be appended to :func: etc. cross-reference text. +#add_function_parentheses = True + +# If true, the current module name will be prepended to all description +# unit titles (such as .. function::). +#add_module_names = True + +# If true, sectionauthor and moduleauthor directives will be shown in the +# output. They are ignored by default. +#show_authors = False + +# The name of the Pygments (syntax highlighting) style to use. +pygments_style = 'sphinx' + +# A list of ignored prefixes for module index sorting. +#modindex_common_prefix = [] + + +# -- Options for HTML output --------------------------------------------------- + +# The theme to use for HTML and HTML Help pages. See the documentation for +# a list of builtin themes. +html_theme = 'default' + +# Theme options are theme-specific and customize the look and feel of a theme +# further. For a list of options available for each theme, see the +# documentation. +#html_theme_options = {} + +# Add any paths that contain custom themes here, relative to this directory. +#html_theme_path = [] + +# The name for this set of Sphinx documents. If None, it defaults to +# " v documentation". +#html_title = None + +# A shorter title for the navigation bar. Default is the same as html_title. +#html_short_title = None + +# The name of an image file (relative to this directory) to place at the top +# of the sidebar. +#html_logo = None + +# The name of an image file (within the static path) to use as favicon of the +# docs. This file should be a Windows icon file (.ico) being 16x16 or 32x32 +# pixels large. +#html_favicon = None + +# Add any paths that contain custom static files (such as style sheets) here, +# relative to this directory. They are copied after the builtin static files, +# so a file named "default.css" will overwrite the builtin "default.css". +html_static_path = ['_static'] + +# If not '', a 'Last updated on:' timestamp is inserted at every page bottom, +# using the given strftime format. +#html_last_updated_fmt = '%b %d, %Y' + +# If true, SmartyPants will be used to convert quotes and dashes to +# typographically correct entities. +#html_use_smartypants = True + +# Custom sidebar templates, maps document names to template names. +#html_sidebars = {} + +# Additional templates that should be rendered to pages, maps page names to +# template names. +#html_additional_pages = {} + +# If false, no module index is generated. +#html_domain_indices = True + +# If false, no index is generated. +#html_use_index = True + +# If true, the index is split into individual pages for each letter. +#html_split_index = False + +# If true, links to the reST sources are added to the pages. +#html_show_sourcelink = True + +# If true, "Created using Sphinx" is shown in the HTML footer. Default is True. +#html_show_sphinx = True + +# If true, "(C) Copyright ..." is shown in the HTML footer. Default is True. +#html_show_copyright = True + +# If true, an OpenSearch description file will be output, and all pages will +# contain a tag referring to it. The value of this option must be the +# base URL from which the finished HTML is served. +#html_use_opensearch = '' + +# This is the file name suffix for HTML files (e.g. ".xhtml"). +#html_file_suffix = None + +# Output file base name for HTML help builder. +htmlhelp_basename = '{{ project_name }}doc' + + +# -- Options for LaTeX output -------------------------------------------------- + +latex_elements = { +# The paper size ('letterpaper' or 'a4paper'). +#'papersize': 'letterpaper', + +# The font size ('10pt', '11pt' or '12pt'). +#'pointsize': '10pt', + +# Additional stuff for the LaTeX preamble. +#'preamble': '', +} + +# Grouping the document tree into LaTeX files. List of tuples +# (source start file, target name, title, author, documentclass [howto/manual]). +latex_documents = [ + ('index', '{{ project_name }}.tex', u'{{ project_name }} Documentation', + u'ChangeToMyName', 'manual'), +] + +# The name of an image file (relative to this directory) to place at the top of +# the title page. +#latex_logo = None + +# For "manual" documents, if this is true, then toplevel headings are parts, +# not chapters. +#latex_use_parts = False + +# If true, show page references after internal links. +#latex_show_pagerefs = False + +# If true, show URL addresses after external links. +#latex_show_urls = False + +# Documents to append as an appendix to all manuals. +#latex_appendices = [] + +# If false, no module index is generated. +#latex_domain_indices = True + + +# -- Options for manual page output -------------------------------------------- + +# One entry per manual page. List of tuples +# (source start file, name, description, authors, manual section). +man_pages = [ + ('index', '{{ project_name }}', u'{{ project_name }} Documentation', + [u'ChangeToMyName'], 1) +] + +# If true, show URL addresses after external links. +#man_show_urls = False + + +# -- Options for Texinfo output ------------------------------------------------ + +# Grouping the document tree into Texinfo files. List of tuples +# (source start file, target name, title, author, +# dir menu entry, description, category) +texinfo_documents = [ + ('index', '{{ project_name }}', u'{{ project_name }} Documentation', + u'ChangeToMyName', '{{ project_name }}', 'One line description of project.', + 'Miscellaneous'), +] + +# Documents to append as an appendix to all manuals. +#texinfo_appendices = [] + +# If false, no module index is generated. +#texinfo_domain_indices = True + +# How to display URL addresses: 'footnote', 'no', or 'inline'. +#texinfo_show_urls = 'footnote' diff --git a/wagtail/project_template/docs/deploy.rst b/wagtail/project_template/docs/deploy.rst new file mode 100644 index 0000000000..1e642c7988 --- /dev/null +++ b/wagtail/project_template/docs/deploy.rst @@ -0,0 +1,4 @@ +Deploy +======== + +This is where you describe how the project is deployed in production. diff --git a/wagtail/project_template/docs/index.rst b/wagtail/project_template/docs/index.rst new file mode 100644 index 0000000000..58b9d7f478 --- /dev/null +++ b/wagtail/project_template/docs/index.rst @@ -0,0 +1,25 @@ +.. {{ project_name }} documentation master file, created by + sphinx-quickstart on Sun Feb 17 11:46:20 2013. + You can adapt this file completely to your liking, but it should at least + contain the root `toctree` directive. + +Welcome to {{ project_name }}'s documentation! +==================================== + +Contents: + +.. toctree:: + :maxdepth: 2 + + install + deploy + tests + + + +Indices and tables +================== + +* :ref:`genindex` +* :ref:`modindex` +* :ref:`search` diff --git a/wagtail/project_template/docs/install.rst b/wagtail/project_template/docs/install.rst new file mode 100644 index 0000000000..1bc03335d4 --- /dev/null +++ b/wagtail/project_template/docs/install.rst @@ -0,0 +1,4 @@ +Install +========= + +This is where you write how to get a new laptop to run this project. diff --git a/wagtail/project_template/docs/make.bat b/wagtail/project_template/docs/make.bat new file mode 100644 index 0000000000..c8212a0545 --- /dev/null +++ b/wagtail/project_template/docs/make.bat @@ -0,0 +1,190 @@ +@ECHO OFF + +REM Command file for Sphinx documentation + +if "%SPHINXBUILD%" == "" ( + set SPHINXBUILD=sphinx-build +) +set BUILDDIR=_build +set ALLSPHINXOPTS=-d %BUILDDIR%/doctrees %SPHINXOPTS% . +set I18NSPHINXOPTS=%SPHINXOPTS% . +if NOT "%PAPER%" == "" ( + set ALLSPHINXOPTS=-D latex_paper_size=%PAPER% %ALLSPHINXOPTS% + set I18NSPHINXOPTS=-D latex_paper_size=%PAPER% %I18NSPHINXOPTS% +) + +if "%1" == "" goto help + +if "%1" == "help" ( + :help + echo.Please use `make ^` where ^ is one of + echo. html to make standalone HTML files + echo. dirhtml to make HTML files named index.html in directories + echo. singlehtml to make a single large HTML file + echo. pickle to make pickle files + echo. json to make JSON files + echo. htmlhelp to make HTML files and a HTML help project + echo. qthelp to make HTML files and a qthelp project + echo. devhelp to make HTML files and a Devhelp project + echo. epub to make an epub + echo. latex to make LaTeX files, you can set PAPER=a4 or PAPER=letter + echo. text to make text files + echo. man to make manual pages + echo. texinfo to make Texinfo files + echo. gettext to make PO message catalogs + echo. changes to make an overview over all changed/added/deprecated items + echo. linkcheck to check all external links for integrity + echo. doctest to run all doctests embedded in the documentation if enabled + goto end +) + +if "%1" == "clean" ( + for /d %%i in (%BUILDDIR%\*) do rmdir /q /s %%i + del /q /s %BUILDDIR%\* + goto end +) + +if "%1" == "html" ( + %SPHINXBUILD% -b html %ALLSPHINXOPTS% %BUILDDIR%/html + if errorlevel 1 exit /b 1 + echo. + echo.Build finished. The HTML pages are in %BUILDDIR%/html. + goto end +) + +if "%1" == "dirhtml" ( + %SPHINXBUILD% -b dirhtml %ALLSPHINXOPTS% %BUILDDIR%/dirhtml + if errorlevel 1 exit /b 1 + echo. + echo.Build finished. The HTML pages are in %BUILDDIR%/dirhtml. + goto end +) + +if "%1" == "singlehtml" ( + %SPHINXBUILD% -b singlehtml %ALLSPHINXOPTS% %BUILDDIR%/singlehtml + if errorlevel 1 exit /b 1 + echo. + echo.Build finished. The HTML pages are in %BUILDDIR%/singlehtml. + goto end +) + +if "%1" == "pickle" ( + %SPHINXBUILD% -b pickle %ALLSPHINXOPTS% %BUILDDIR%/pickle + if errorlevel 1 exit /b 1 + echo. + echo.Build finished; now you can process the pickle files. + goto end +) + +if "%1" == "json" ( + %SPHINXBUILD% -b json %ALLSPHINXOPTS% %BUILDDIR%/json + if errorlevel 1 exit /b 1 + echo. + echo.Build finished; now you can process the JSON files. + goto end +) + +if "%1" == "htmlhelp" ( + %SPHINXBUILD% -b htmlhelp %ALLSPHINXOPTS% %BUILDDIR%/htmlhelp + if errorlevel 1 exit /b 1 + echo. + echo.Build finished; now you can run HTML Help Workshop with the ^ +.hhp project file in %BUILDDIR%/htmlhelp. + goto end +) + +if "%1" == "qthelp" ( + %SPHINXBUILD% -b qthelp %ALLSPHINXOPTS% %BUILDDIR%/qthelp + if errorlevel 1 exit /b 1 + echo. + echo.Build finished; now you can run "qcollectiongenerator" with the ^ +.qhcp project file in %BUILDDIR%/qthelp, like this: + echo.^> qcollectiongenerator %BUILDDIR%\qthelp\{{ project_name }}.qhcp + echo.To view the help file: + echo.^> assistant -collectionFile %BUILDDIR%\qthelp\{{ project_name }}.ghc + goto end +) + +if "%1" == "devhelp" ( + %SPHINXBUILD% -b devhelp %ALLSPHINXOPTS% %BUILDDIR%/devhelp + if errorlevel 1 exit /b 1 + echo. + echo.Build finished. + goto end +) + +if "%1" == "epub" ( + %SPHINXBUILD% -b epub %ALLSPHINXOPTS% %BUILDDIR%/epub + if errorlevel 1 exit /b 1 + echo. + echo.Build finished. The epub file is in %BUILDDIR%/epub. + goto end +) + +if "%1" == "latex" ( + %SPHINXBUILD% -b latex %ALLSPHINXOPTS% %BUILDDIR%/latex + if errorlevel 1 exit /b 1 + echo. + echo.Build finished; the LaTeX files are in %BUILDDIR%/latex. + goto end +) + +if "%1" == "text" ( + %SPHINXBUILD% -b text %ALLSPHINXOPTS% %BUILDDIR%/text + if errorlevel 1 exit /b 1 + echo. + echo.Build finished. The text files are in %BUILDDIR%/text. + goto end +) + +if "%1" == "man" ( + %SPHINXBUILD% -b man %ALLSPHINXOPTS% %BUILDDIR%/man + if errorlevel 1 exit /b 1 + echo. + echo.Build finished. The manual pages are in %BUILDDIR%/man. + goto end +) + +if "%1" == "texinfo" ( + %SPHINXBUILD% -b texinfo %ALLSPHINXOPTS% %BUILDDIR%/texinfo + if errorlevel 1 exit /b 1 + echo. + echo.Build finished. The Texinfo files are in %BUILDDIR%/texinfo. + goto end +) + +if "%1" == "gettext" ( + %SPHINXBUILD% -b gettext %I18NSPHINXOPTS% %BUILDDIR%/locale + if errorlevel 1 exit /b 1 + echo. + echo.Build finished. The message catalogs are in %BUILDDIR%/locale. + goto end +) + +if "%1" == "changes" ( + %SPHINXBUILD% -b changes %ALLSPHINXOPTS% %BUILDDIR%/changes + if errorlevel 1 exit /b 1 + echo. + echo.The overview file is in %BUILDDIR%/changes. + goto end +) + +if "%1" == "linkcheck" ( + %SPHINXBUILD% -b linkcheck %ALLSPHINXOPTS% %BUILDDIR%/linkcheck + if errorlevel 1 exit /b 1 + echo. + echo.Link check complete; look for any errors in the above output ^ +or in %BUILDDIR%/linkcheck/output.txt. + goto end +) + +if "%1" == "doctest" ( + %SPHINXBUILD% -b doctest %ALLSPHINXOPTS% %BUILDDIR%/doctest + if errorlevel 1 exit /b 1 + echo. + echo.Testing of doctests in the sources finished, look at the ^ +results in %BUILDDIR%/doctest/output.txt. + goto end +) + +:end diff --git a/wagtail/project_template/fabfile.py b/wagtail/project_template/fabfile.py new file mode 100644 index 0000000000..ca7e788213 --- /dev/null +++ b/wagtail/project_template/fabfile.py @@ -0,0 +1,32 @@ +from fabric.api import * + + +env.roledefs = { + 'app': [], +} + + +@roles('app') +def deploy(): + # Remove this line when you're happy that this Fabfile is correct + raise RuntimeError("Please check the fabfile before using it") + + base_dir = '/usr/local/django/{{ project_name }}' + virtualenv_dir = '/usr/local/django/virtualenvs/{{ project_name }}' + python = virtualenv_dir + '/bin/python' + pip = virtualenv_dir + '/bin/pip' + + user = '{{ project_name }}' + supervisor_task = '{{ project_name }}' + + with cd(base_dir): + with settings(sudo_user=user): + sudo('git pull origin master') + sudo(pip + ' install -r requirements/production.txt') + sudo(python + ' {{ project_name }}/manage.py syncdb --settings={{ project_name }}.settings.production --noinput') + sudo(python + ' {{ project_name }}/manage.py migrate --settings={{ project_name }}.settings.production --noinput') + sudo(python + ' {{ project_name }}/manage.py collectstatic --settings={{ project_name }}.settings.production --noinput') + sudo(python + ' {{ project_name }}/manage.py compress --settings={{ project_name }}.settings.production') + sudo(python + ' {{ project_name }}/manage.py update_index --settings={{ project_name }}.settings.production') + + sudo('supervisorctl restart ' + supervisor_task) diff --git a/wagtail/project_template/project_name/core/__init__.py b/wagtail/project_template/project_name/core/__init__.py new file mode 100644 index 0000000000..e69de29bb2 diff --git a/wagtail/project_template/project_name/core/migrations/0001_initial.py b/wagtail/project_template/project_name/core/migrations/0001_initial.py new file mode 100644 index 0000000000..d750170b0c --- /dev/null +++ b/wagtail/project_template/project_name/core/migrations/0001_initial.py @@ -0,0 +1,87 @@ +# -*- coding: utf-8 -*- +from __future__ import unicode_literals + +from south.utils import datetime_utils as datetime +from south.db import db +from south.v2 import SchemaMigration +from django.db import models + + +class Migration(SchemaMigration): + + def forwards(self, orm): + # Adding model 'HomePage' + db.create_table('core_homepage', ( + ('page_ptr', self.gf('django.db.models.fields.related.OneToOneField')(to=orm['wagtailcore.Page'], unique=True, primary_key=True)), + )) + db.send_create_signal('core', ['HomePage']) + + + def backwards(self, orm): + # Deleting model 'HomePage' + db.delete_table('core_homepage') + + models = { + 'auth.group': { + 'Meta': {'object_name': 'Group'}, + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '80'}), + 'permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'}) + }, + 'auth.permission': { + 'Meta': {'ordering': "('content_type__app_label', 'content_type__model', 'codename')", 'unique_together': "(('content_type', 'codename'),)", 'object_name': 'Permission'}, + 'codename': ('django.db.models.fields.CharField', [], {'max_length': '100'}), + 'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['contenttypes.ContentType']"}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '50'}) + }, + 'auth.user': { + 'Meta': {'object_name': 'User'}, + 'date_joined': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}), + 'email': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'blank': 'True'}), + 'first_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}), + 'groups': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'related_name': "'user_set'", 'blank': 'True', 'to': "orm['auth.Group']"}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'is_active': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), + 'is_staff': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), + 'is_superuser': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), + 'last_login': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}), + 'last_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}), + 'password': ('django.db.models.fields.CharField', [], {'max_length': '128'}), + 'user_permissions': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'related_name': "'user_set'", 'blank': 'True', 'to': "orm['auth.Permission']"}), + 'username': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '30'}) + }, + 'contenttypes.contenttype': { + 'Meta': {'ordering': "('name',)", 'unique_together': "(('app_label', 'model'),)", 'object_name': 'ContentType', 'db_table': "'django_content_type'"}, + 'app_label': ('django.db.models.fields.CharField', [], {'max_length': '100'}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'model': ('django.db.models.fields.CharField', [], {'max_length': '100'}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '100'}) + }, + 'core.homepage': { + 'Meta': {'object_name': 'HomePage', '_ormbases': ['wagtailcore.Page']}, + 'page_ptr': ('django.db.models.fields.related.OneToOneField', [], {'to': "orm['wagtailcore.Page']", 'unique': 'True', 'primary_key': 'True'}) + }, + 'wagtailcore.page': { + 'Meta': {'object_name': 'Page'}, + 'content_type': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'pages'", 'to': "orm['contenttypes.ContentType']"}), + 'depth': ('django.db.models.fields.PositiveIntegerField', [], {}), + 'expire_at': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}), + 'expired': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), + 'go_live_at': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}), + 'has_unpublished_changes': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'live': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), + 'numchild': ('django.db.models.fields.PositiveIntegerField', [], {'default': '0'}), + 'owner': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'owned_pages'", 'null': 'True', 'to': "orm['auth.User']"}), + 'path': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '255'}), + 'search_description': ('django.db.models.fields.TextField', [], {'blank': 'True'}), + 'seo_title': ('django.db.models.fields.CharField', [], {'max_length': '255', 'blank': 'True'}), + 'show_in_menus': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), + 'slug': ('django.db.models.fields.SlugField', [], {'max_length': '50'}), + 'title': ('django.db.models.fields.CharField', [], {'max_length': '255'}), + 'url_path': ('django.db.models.fields.CharField', [], {'max_length': '255', 'blank': 'True'}) + } + } + + complete_apps = ['core'] diff --git a/wagtail/project_template/project_name/core/migrations/0002_create_homepage.py b/wagtail/project_template/project_name/core/migrations/0002_create_homepage.py new file mode 100644 index 0000000000..121cad475b --- /dev/null +++ b/wagtail/project_template/project_name/core/migrations/0002_create_homepage.py @@ -0,0 +1,110 @@ +# -*- coding: utf-8 -*- +from __future__ import unicode_literals + +from south.utils import datetime_utils as datetime +from south.db import db +from south.v2 import DataMigration +from django.db import models + + +class Migration(DataMigration): + + depends_on = ( + ('wagtailcore', '0002_initial_data'), + ) + + def forwards(self, orm): + orm['wagtailcore.Page'].objects.get(id=2).delete() + + homepage_content_type, created = orm['contenttypes.contenttype'].objects.get_or_create( + model='homepage', app_label='core', defaults={'name': 'Homepage'}) + + homepage = orm['core.HomePage'].objects.create( + title="Homepage", + slug='home', + content_type=homepage_content_type, + path='00010001', + depth=2, + numchild=0, + url_path='/home/', + ) + + orm['wagtailcore.site'].objects.create( + hostname='localhost', root_page=homepage, is_default_site=True) + + def backwards(self, orm): + pass + + models = { + 'auth.group': { + 'Meta': {'object_name': 'Group'}, + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '80'}), + 'permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'}) + }, + 'auth.permission': { + 'Meta': {'ordering': "('content_type__app_label', 'content_type__model', 'codename')", 'unique_together': "(('content_type', 'codename'),)", 'object_name': 'Permission'}, + 'codename': ('django.db.models.fields.CharField', [], {'max_length': '100'}), + 'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['contenttypes.ContentType']"}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '50'}) + }, + 'auth.user': { + 'Meta': {'object_name': 'User'}, + 'date_joined': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}), + 'email': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'blank': 'True'}), + 'first_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}), + 'groups': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'related_name': "'user_set'", 'blank': 'True', 'to': "orm['auth.Group']"}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'is_active': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), + 'is_staff': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), + 'is_superuser': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), + 'last_login': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}), + 'last_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}), + 'password': ('django.db.models.fields.CharField', [], {'max_length': '128'}), + 'user_permissions': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'related_name': "'user_set'", 'blank': 'True', 'to': "orm['auth.Permission']"}), + 'username': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '30'}) + }, + 'contenttypes.contenttype': { + 'Meta': {'ordering': "('name',)", 'unique_together': "(('app_label', 'model'),)", 'object_name': 'ContentType', 'db_table': "'django_content_type'"}, + 'app_label': ('django.db.models.fields.CharField', [], {'max_length': '100'}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'model': ('django.db.models.fields.CharField', [], {'max_length': '100'}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '100'}) + }, + 'core.homepage': { + 'Meta': {'object_name': 'HomePage', '_ormbases': ['wagtailcore.Page']}, + 'page_ptr': ('django.db.models.fields.related.OneToOneField', [], {'to': "orm['wagtailcore.Page']", 'unique': 'True', 'primary_key': 'True'}) + }, + 'wagtailcore.page': { + 'Meta': {'object_name': 'Page'}, + 'content_type': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'pages'", 'to': "orm['contenttypes.ContentType']"}), + 'depth': ('django.db.models.fields.PositiveIntegerField', [], {}), + 'expire_at': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}), + 'expired': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), + 'go_live_at': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}), + 'has_unpublished_changes': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'live': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), + 'numchild': ('django.db.models.fields.PositiveIntegerField', [], {'default': '0'}), + 'owner': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'owned_pages'", 'null': 'True', 'to': "orm['auth.User']"}), + 'path': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '255'}), + 'search_description': ('django.db.models.fields.TextField', [], {'blank': 'True'}), + 'seo_title': ('django.db.models.fields.CharField', [], {'max_length': '255', 'blank': 'True'}), + 'show_in_menus': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), + 'slug': ('django.db.models.fields.SlugField', [], {'max_length': '50'}), + 'title': ('django.db.models.fields.CharField', [], {'max_length': '255'}), + 'url_path': ('django.db.models.fields.CharField', [], {'max_length': '255', 'blank': 'True'}) + }, + 'wagtailcore.site': { + 'Meta': {'unique_together': "(('hostname', 'port'),)", 'object_name': 'Site'}, + 'hostname': ('django.db.models.fields.CharField', [], {'max_length': '255', 'db_index': 'True'}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'is_default_site': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), + 'port': ('django.db.models.fields.IntegerField', [], {'default': '80'}), + 'root_page': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'sites_rooted_here'", 'to': "orm['wagtailcore.Page']"}) + } + } + + complete_apps = ['core'] + symmetrical = True diff --git a/wagtail/project_template/project_name/core/migrations/__init__.py b/wagtail/project_template/project_name/core/migrations/__init__.py new file mode 100644 index 0000000000..e69de29bb2 diff --git a/wagtail/project_template/project_name/core/models.py b/wagtail/project_template/project_name/core/models.py new file mode 100644 index 0000000000..e883932992 --- /dev/null +++ b/wagtail/project_template/project_name/core/models.py @@ -0,0 +1,7 @@ +from django.db import models + +from wagtail.wagtailcore.models import Page + + +class HomePage(Page): + pass diff --git a/wagtail/project_template/project_name/core/templates/core/home_page.html b/wagtail/project_template/project_name/core/templates/core/home_page.html new file mode 100644 index 0000000000..97f716590f --- /dev/null +++ b/wagtail/project_template/project_name/core/templates/core/home_page.html @@ -0,0 +1,13 @@ +{% templatetag openblock %} extends "base.html" {% templatetag closeblock %} + +{% templatetag openblock %} load static core_tags {% templatetag closeblock %} + +{% templatetag openblock %} block body_class {% templatetag closeblock %}template-{% templatetag openvariable %} self|content_type_slugified {% templatetag closevariable %}{% templatetag openblock %} endblock {% templatetag closeblock %} + +{% templatetag openblock %} block content {% templatetag closeblock %} +

Welcome to your new Wagtail site!

+ +

You can access the admin interface here (make sure you have run "dj createsuperuser" in the console first). + +

If you haven't already given the documentation a read, head over to http://wagtail.readthedocs.org to start building on Wagtail

+{% templatetag openblock %} endblock {% templatetag closeblock %} diff --git a/wagtail/project_template/project_name/core/templatetags/__init__.py b/wagtail/project_template/project_name/core/templatetags/__init__.py new file mode 100644 index 0000000000..e69de29bb2 diff --git a/wagtail/project_template/project_name/core/templatetags/core_tags.py b/wagtail/project_template/project_name/core/templatetags/core_tags.py new file mode 100644 index 0000000000..cf757e1a4a --- /dev/null +++ b/wagtail/project_template/project_name/core/templatetags/core_tags.py @@ -0,0 +1,13 @@ +from django import template +from django.conf import settings +from django.template.defaultfilters import slugify + + +register = template.Library() + + +# Return the model name/"content type" as a css-friendly string e.g blog-page, news-listing-page +# Usage: {% verbatim %}{{ self|content_type_slugified }}{% endverbatim %} +@register.filter +def content_type_slugified(model): + return slugify(model.__class__.__name__) diff --git a/wagtail/project_template/project_name/manage.py b/wagtail/project_template/project_name/manage.py new file mode 100644 index 0000000000..391dd88ba4 --- /dev/null +++ b/wagtail/project_template/project_name/manage.py @@ -0,0 +1,10 @@ +#!/usr/bin/env python +import os +import sys + +if __name__ == "__main__": + os.environ.setdefault("DJANGO_SETTINGS_MODULE", "{{ project_name }}.settings") + + from django.core.management import execute_from_command_line + + execute_from_command_line(sys.argv) diff --git a/wagtail/project_template/project_name/project_name/__init__.py b/wagtail/project_template/project_name/project_name/__init__.py new file mode 100644 index 0000000000..e69de29bb2 diff --git a/wagtail/project_template/project_name/project_name/settings/__init__.py b/wagtail/project_template/project_name/project_name/settings/__init__.py new file mode 100644 index 0000000000..c7873286aa --- /dev/null +++ b/wagtail/project_template/project_name/project_name/settings/__init__.py @@ -0,0 +1 @@ +from .dev import * diff --git a/wagtail/project_template/project_name/project_name/settings/base.py b/wagtail/project_template/project_name/project_name/settings/base.py new file mode 100644 index 0000000000..bd0b8d5b5b --- /dev/null +++ b/wagtail/project_template/project_name/project_name/settings/base.py @@ -0,0 +1,196 @@ +""" +Django settings for {{ project_name }} project. + +For more information on this file, see +https://docs.djangoproject.com/en/{{ docs_version }}/topics/settings/ + +For the full list of settings and their values, see +https://docs.djangoproject.com/en/{{ docs_version }}/ref/settings/ +""" + +from os.path import abspath, basename, dirname, join, normpath +from sys import path + +# Absolute filesystem path to the Django project directory: +DJANGO_ROOT = dirname(dirname(abspath(__file__))) + +# Absolute filesystem path to the top-level project folder: +PROJECT_ROOT = dirname(DJANGO_ROOT) + +# Site name: +SITE_NAME = basename(DJANGO_ROOT) + +# Add our project to our pythonpath, this way we don't need to type our project +# name in our dotted import paths: +path.append(DJANGO_ROOT) + + +# Quick-start development settings - unsuitable for production +# See https://docs.djangoproject.com/en/{{ docs_version }}/howto/deployment/checklist/ + +# SECURITY WARNING: keep the secret key used in production secret! +SECRET_KEY = '{{ secret_key }}' + +# SECURITY WARNING: don't run with debug turned on in production! +DEBUG = True + +TEMPLATE_DEBUG = True + +ALLOWED_HOSTS = [] + + +# Application definition + +INSTALLED_APPS = ( + 'django.contrib.admin', + 'django.contrib.auth', + 'django.contrib.contenttypes', + 'django.contrib.sessions', + 'django.contrib.messages', + 'django.contrib.staticfiles', + + 'south', + 'compressor', + 'taggit', + 'modelcluster', + + 'wagtail.wagtailcore', + 'wagtail.wagtailadmin', + 'wagtail.wagtaildocs', + 'wagtail.wagtailsnippets', + 'wagtail.wagtailusers', + 'wagtail.wagtailimages', + 'wagtail.wagtailembeds', + 'wagtail.wagtailsearch', + 'wagtail.wagtailredirects', + 'wagtail.wagtailforms', + + 'core', +) + +MIDDLEWARE_CLASSES = ( + 'django.contrib.sessions.middleware.SessionMiddleware', + 'django.middleware.common.CommonMiddleware', + 'django.middleware.csrf.CsrfViewMiddleware', + 'django.contrib.auth.middleware.AuthenticationMiddleware', + 'django.contrib.messages.middleware.MessageMiddleware', + 'django.middleware.clickjacking.XFrameOptionsMiddleware', + + 'wagtail.wagtailcore.middleware.SiteMiddleware', + 'wagtail.wagtailredirects.middleware.RedirectMiddleware', +) + +ROOT_URLCONF = SITE_NAME + '.urls' +WSGI_APPLICATION = SITE_NAME + '.wsgi.application' + + +# Database +# https://docs.djangoproject.com/en/{{ docs_version }}/ref/settings/#databases + +DATABASES = { + 'default': { + 'ENGINE': 'django.db.backends.postgresql_psycopg2', + 'NAME': '{{ project_name }}', + 'USER': 'postgres', + 'PASSWORD': '', + 'HOST': '', # Set to empty string for localhost. + 'PORT': '', # Set to empty string for default. + 'CONN_MAX_AGE': 600, # number of seconds database connections should persist for + } +} + + +# Internationalization +# https://docs.djangoproject.com/en/{{ docs_version }}/topics/i18n/ + +LANGUAGE_CODE = 'en-gb' +TIME_ZONE = 'UTC' +USE_I18N = True +USE_L10N = True +USE_TZ = True + + +# Static files (CSS, JavaScript, Images) +# https://docs.djangoproject.com/en/{{ docs_version }}/howto/static-files/ + +STATIC_ROOT = join(PROJECT_ROOT, 'static') +STATIC_URL = '/static/' + +STATICFILES_FINDERS = ( + 'django.contrib.staticfiles.finders.FileSystemFinder', + 'django.contrib.staticfiles.finders.AppDirectoriesFinder', + 'compressor.finders.CompressorFinder', +) + +MEDIA_ROOT = join(PROJECT_ROOT, 'media') +MEDIA_URL = '/media/' + + +# Django compressor settings +# http://django-compressor.readthedocs.org/en/latest/settings/ + +COMPRESS_PRECOMPILERS = ( + ('text/x-scss', 'django_libsass.SassCompiler'), +) + + +# Taggit 0.12 has moved its south migrations to separate folder +# http://django-taggit.readthedocs.org/en/latest/ + +SOUTH_MIGRATION_MODULES = { + 'taggit': 'taggit.south_migrations', +} + + +# Template configuration + +from django.conf import global_settings + +TEMPLATE_CONTEXT_PROCESSORS = global_settings.TEMPLATE_CONTEXT_PROCESSORS + ( + 'django.core.context_processors.request', +) + +TEMPLATE_DIRS = ( + normpath(join(PROJECT_ROOT, 'templates')), +) + + +# Celery settings +# http://celery.readthedocs.org/en/latest/configuration.html + +import djcelery + +djcelery.setup_loader() + +CELERY_SEND_TASK_ERROR_EMAILS = True +BROKER_URL = 'redis://' + + +# Use Redis as the cache backend for extra performance + +CACHES = { + 'default': { + 'BACKEND': 'redis_cache.cache.RedisCache', + 'LOCATION': '127.0.0.1:6379', + 'KEY_PREFIX': '{{ project_name }}', + 'OPTIONS': { + 'CLIENT_CLASS': 'redis_cache.client.DefaultClient', + } + } +} + + +# Wagtail settings + +LOGIN_URL = 'wagtailadmin_login' +LOGIN_REDIRECT_URL = 'wagtailadmin_home' + +WAGTAIL_SITE_NAME = "{{ project_name }}" + +# Use Elasticsearch as the search backend for extra performance and better search results +WAGTAILSEARCH_BACKENDS = { + 'default': { + 'BACKEND': 'wagtail.wagtailsearch.backends.elasticsearch.ElasticSearch', + 'INDEX': '{{ project_name }}', + }, +} diff --git a/wagtail/project_template/project_name/project_name/settings/dev.py b/wagtail/project_template/project_name/project_name/settings/dev.py new file mode 100644 index 0000000000..7bc4fa0803 --- /dev/null +++ b/wagtail/project_template/project_name/project_name/settings/dev.py @@ -0,0 +1,15 @@ +from .base import * + + +DEBUG = True +TEMPLATE_DEBUG = True + +EMAIL_BACKEND = 'django.core.mail.backends.console.EmailBackend' + +CELERY_ALWAYS_EAGER = True + + +try: + from .local import * +except ImportError: + pass diff --git a/wagtail/project_template/project_name/project_name/settings/production.py b/wagtail/project_template/project_name/project_name/settings/production.py new file mode 100644 index 0000000000..a4b2e8a130 --- /dev/null +++ b/wagtail/project_template/project_name/project_name/settings/production.py @@ -0,0 +1,19 @@ +from .base import * + + +# Disable debug mode + +DEBUG = False +TEMPLATE_DEBUG = False + + +# Compress static files offline +# http://django-compressor.readthedocs.org/en/latest/settings/#django.conf.settings.COMPRESS_OFFLINE + +COMPRESS_OFFLINE = True + + +try: + from .local import * +except ImportError: + pass diff --git a/wagtail/project_template/project_name/project_name/urls.py b/wagtail/project_template/project_name/project_name/urls.py new file mode 100644 index 0000000000..dfb1d40ecf --- /dev/null +++ b/wagtail/project_template/project_name/project_name/urls.py @@ -0,0 +1,31 @@ +import os + +from django.conf.urls import patterns, include, url +from django.conf.urls.static import static +from django.conf import settings +from django.contrib import admin + +from wagtail.wagtailadmin import urls as wagtailadmin_urls +from wagtail.wagtailsearch import urls as wagtailsearch_urls +from wagtail.wagtaildocs import urls as wagtaildocs_urls +from wagtail.wagtailcore import urls as wagtail_urls + + +admin.autodiscover() + +urlpatterns = patterns('', + url(r'^django-admin/', include(admin.site.urls)), + + url(r'^admin/', include(wagtailadmin_urls)), + url(r'^search/', include(wagtailsearch_urls)), + url(r'^documents/', include(wagtaildocs_urls)), + + url(r'', include(wagtail_urls)), +) + + +if settings.DEBUG: + from django.contrib.staticfiles.urls import staticfiles_urlpatterns + + urlpatterns += staticfiles_urlpatterns() + urlpatterns += static(settings.MEDIA_URL + 'images/', document_root=os.path.join(settings.MEDIA_ROOT, 'images')) diff --git a/wagtail/project_template/project_name/project_name/wsgi.py b/wagtail/project_template/project_name/project_name/wsgi.py new file mode 100644 index 0000000000..461771b9da --- /dev/null +++ b/wagtail/project_template/project_name/project_name/wsgi.py @@ -0,0 +1,14 @@ +""" +WSGI config for {{ project_name }} project. + +It exposes the WSGI callable as a module-level variable named ``application``. + +For more information on this file, see +https://docs.djangoproject.com/en/1.6/howto/deployment/wsgi/ +""" + +import os +os.environ.setdefault("DJANGO_SETTINGS_MODULE", "{{ project_name }}.settings.production") + +from django.core.wsgi import get_wsgi_application +application = get_wsgi_application() diff --git a/wagtail/project_template/project_name/static/css/project_name.scss b/wagtail/project_template/project_name/static/css/project_name.scss new file mode 100644 index 0000000000..e69de29bb2 diff --git a/wagtail/project_template/project_name/static/js/project_name.js b/wagtail/project_template/project_name/static/js/project_name.js new file mode 100644 index 0000000000..e69de29bb2 diff --git a/wagtail/project_template/project_name/templates/404.html b/wagtail/project_template/project_name/templates/404.html new file mode 100644 index 0000000000..0c1232f1be --- /dev/null +++ b/wagtail/project_template/project_name/templates/404.html @@ -0,0 +1,9 @@ +{% templatetag openblock %} extends "base.html" {% templatetag closeblock %} + +{% templatetag openblock %} block body_class {% templatetag closeblock %}template-404{% templatetag openblock %} endblock {% templatetag closeblock %} + +{% templatetag openblock %} block content {% templatetag closeblock %} +

Page not found

+ +

Sorry, this page could not be found.

+{% templatetag openblock %} endblock {% templatetag closeblock %} diff --git a/wagtail/project_template/project_name/templates/500.html b/wagtail/project_template/project_name/templates/500.html new file mode 100644 index 0000000000..1550dcd217 --- /dev/null +++ b/wagtail/project_template/project_name/templates/500.html @@ -0,0 +1,9 @@ +{% templatetag openblock %} extends "base.html" {% templatetag closeblock %} + +{% templatetag openblock %} block body_class {% templatetag closeblock %}template-500{% templatetag openblock %} endblock {% templatetag closeblock %} + +{% templatetag openblock %} block content {% templatetag closeblock %} +

Internal server error

+ +

Sorry, there seems to be an error. Please try again soon.

+{% templatetag openblock %} endblock {% templatetag closeblock %} diff --git a/wagtail/project_template/project_name/templates/base.html b/wagtail/project_template/project_name/templates/base.html new file mode 100644 index 0000000000..c686949071 --- /dev/null +++ b/wagtail/project_template/project_name/templates/base.html @@ -0,0 +1,40 @@ +{% templatetag openblock %} load compress static wagtailuserbar {% templatetag closeblock %} + + + + + + + + + + + {% templatetag openblock %} block title %}{% templatetag openblock %} if self.seo_title %}{% templatetag openvariable %} self.seo_title {% templatetag closevariable %}{% templatetag openblock %} else %}{% templatetag openvariable %} self.title {% templatetag closevariable %}{% templatetag openblock %} endif {% templatetag closeblock %}{% templatetag openblock %} endblock {% templatetag closeblock %}{% templatetag openblock %} block title_suffix {% templatetag closeblock %}{% templatetag openblock %} endblock {% templatetag closeblock %} + + + + {% templatetag openblock %} compress css {% templatetag closeblock %} + {# Global stylesheets #} + + {% templatetag openblock %} endcompress {% templatetag closeblock %} + + {% templatetag openblock %} block extra_css {% templatetag closeblock %} + {# Override this in templates to add extra stylesheets #} + {% templatetag openblock %} endblock {% templatetag closeblock %} + + + + {% templatetag openblock %} wagtailuserbar {% templatetag closeblock %} + + {% templatetag openblock %} block content {% templatetag closeblock %}{% templatetag openblock %} endblock {% templatetag closeblock %} + + {% templatetag openblock %} compress js {% templatetag closeblock %} + {# Global javascript #} + + {% templatetag openblock %} endcompress {% templatetag closeblock %} + + {% templatetag openblock %} block extra_js {% templatetag closeblock %} + {# Override this in templates to add extra javascript #} + {% templatetag openblock %} endblock {% templatetag closeblock %} + + diff --git a/wagtail/project_template/readme.rst b/wagtail/project_template/readme.rst new file mode 100644 index 0000000000..118bb5e9c2 --- /dev/null +++ b/wagtail/project_template/readme.rst @@ -0,0 +1,33 @@ +{% if False %} + +================ +Wagtail template +================ + + +Setup +===== + +Install Django 1.6 on your host machine. (Be sure to explicitly uninstall earlier versions first, or use a virtualenv - +having earlier versions around seems to cause pre-1.4-style settings.py and urls.py files to be generated alongside the +new ones.) + +To start a new project, run the following commands:: + + $ django-admin.py startproject my_lovely_website --template=https://github.com/torchbox/wagtail-template/zipball/master --name=Vagrantfile --ext=html,rst + $ cd my_lovely_website + $ vagrant up + $ vagrant ssh + (then, within the SSH session:) + $ dj createsuperuser + $ djrun + + +This will make the app accessible on the host machine as http://localhost:8111/ . The codebase is located on the host +machine, exported to the VM as a shared folder; code editing and Git operations will generally be done on the host. + +{% endif %} + +================== +{{ project_name }} +================== diff --git a/wagtail/project_template/requirements.txt b/wagtail/project_template/requirements.txt new file mode 100644 index 0000000000..b0c35405c5 --- /dev/null +++ b/wagtail/project_template/requirements.txt @@ -0,0 +1 @@ +-r requirements/dev.txt diff --git a/wagtail/project_template/requirements/base.txt b/wagtail/project_template/requirements/base.txt new file mode 100644 index 0000000000..c4a30fe6c5 --- /dev/null +++ b/wagtail/project_template/requirements/base.txt @@ -0,0 +1,7 @@ +Django==1.6.5 +South==0.8.4 +psycopg2==2.5.2 +elasticsearch==1.1.1 +django-redis-cache==0.13.0 +django-celery==3.1.10 +wagtail==0.4 diff --git a/wagtail/project_template/requirements/dev.txt b/wagtail/project_template/requirements/dev.txt new file mode 100644 index 0000000000..d0ed29d34f --- /dev/null +++ b/wagtail/project_template/requirements/dev.txt @@ -0,0 +1,4 @@ +-r base.txt + +Fabric==1.9.0 +Sphinx==1.2.2 diff --git a/wagtail/project_template/requirements/production.txt b/wagtail/project_template/requirements/production.txt new file mode 100644 index 0000000000..a3e81b8dcf --- /dev/null +++ b/wagtail/project_template/requirements/production.txt @@ -0,0 +1 @@ +-r base.txt diff --git a/wagtail/project_template/requirements/test.txt b/wagtail/project_template/requirements/test.txt new file mode 100644 index 0000000000..a3e81b8dcf --- /dev/null +++ b/wagtail/project_template/requirements/test.txt @@ -0,0 +1 @@ +-r base.txt diff --git a/wagtail/project_template/vagrant/provision.sh b/wagtail/project_template/vagrant/provision.sh new file mode 100755 index 0000000000..509bcc9afa --- /dev/null +++ b/wagtail/project_template/vagrant/provision.sh @@ -0,0 +1,39 @@ +#!/bin/bash + +PROJECT_NAME=$1 + +PROJECT_DIR=/home/vagrant/$PROJECT_NAME +DJANGO_DIR=$PROJECT_DIR/$PROJECT_NAME +VIRTUALENV_DIR=/home/vagrant/.virtualenvs/$PROJECT_NAME + +PYTHON=$VIRTUALENV_DIR/bin/python +PIP=$VIRTUALENV_DIR/bin/pip + + +# Create database +createdb -Upostgres $PROJECT_NAME + + +# Virtualenv setup for project +su - vagrant -c "/usr/local/bin/virtualenv $VIRTUALENV_DIR && \ + echo $PROJECT_DIR > $VIRTUALENV_DIR/.project && \ + PIP_DOWNLOAD_CACHE=/home/vagrant/.pip_download_cache $PIP install -r $PROJECT_DIR/requirements/dev.txt" + +echo "workon $PROJECT_NAME" >> /home/vagrant/.bashrc + + +# Set execute permissions on manage.py as they get lost if we build from a zip file +chmod a+x $DJANGO_DIR/manage.py + + +# Run syncdb/migrate/update_index +su - vagrant -c "$PYTHON $DJANGO_DIR/manage.py syncdb --noinput && \ + $PYTHON $DJANGO_DIR/manage.py migrate --noinput && \ + $PYTHON $DJANGO_DIR/manage.py update_index" + + +# Add a couple of aliases to manage.py into .bashrc +cat << EOF >> /home/vagrant/.bashrc +alias dj="$PYTHON $DJANGO_DIR/manage.py" +alias djrun="dj runserver 0.0.0.0:8000" +EOF From aee2869d5a60c772acc10298c426011a69838a7d Mon Sep 17 00:00:00 2001 From: Karl Hobley Date: Tue, 15 Jul 2014 14:38:08 +0100 Subject: [PATCH 006/210] Make wagtail-project command use the project template Also did some cleanup --- wagtail/bin/wagtail_project.py | 53 +++++++++------------------------- 1 file changed, 13 insertions(+), 40 deletions(-) diff --git a/wagtail/bin/wagtail_project.py b/wagtail/bin/wagtail_project.py index 1a6defb899..8cf261a326 100644 --- a/wagtail/bin/wagtail_project.py +++ b/wagtail/bin/wagtail_project.py @@ -6,24 +6,9 @@ import sys from optparse import OptionParser -TEMPLATE_NAME = 'wagtaildemo' # the name of the folder in wagtail/library - - -def replace_strings_in_file(filename, old_string, new_string): - f = open(filename, 'r') - filedata = f.read() - f.close() - - newdata = filedata.replace(old_string, new_string) - - f = open(filename, 'w') - f.write(newdata) - f.close() - def create_project(): - - # collect and analyse the name given for the wagtail project + # Collect and analyse the name given for the wagtail project parser = OptionParser(usage="Usage: %prog project_name") (options, args) = parser.parse_args() @@ -31,7 +16,6 @@ def create_project(): parser.error("Please specify a name for your wagtail installation") project_name = args[0] - project_path = os.path.join(os.getcwd(), project_name) # Make sure given name is not already in use by another python package/module. try: @@ -43,7 +27,7 @@ def create_project(): "Python module and cannot be used as a project " "name. Please try another name." % project_name) - # make sure directory does not already exist + # Make sure directory does not already exist if os.path.exists(project_name): print 'A directory called %(project_name)s already exists. \ Please choose another name for your wagtail project or remove the existing directory.' % {'project_name': project_name} @@ -51,34 +35,23 @@ def create_project(): print "Creating a wagtail project called %(project_name)s" % {'project_name': project_name} - # create the project from the wagtail template using startapp + # Create the project from the wagtail template using startapp - # first find the path to wagtail + # First find the path to wagtail import wagtail wagtail_path = os.path.dirname(wagtail.__file__) - template_path = os.path.join(wagtail_path, 'library', TEMPLATE_NAME) + template_path = os.path.join(wagtail_path, 'project_template') - # call django-admin startproject - subprocess.call(['django-admin.py', 'startproject', '--template=' + template_path, project_name]) + # Call django-admin startproject + subprocess.call([ + 'django-admin.py', 'startproject', + '--template=' + template_path, + '--name=Vagrantfile', '--ext=html,rst', + project_name + ]) - # in newly created project, replace all occurences of TEMPLATE_NAME ('wagtaildemo') - os.chdir(project_name) + print "Success! %(project_name)s is created" % {'project_name': project_name} - # first within the contents of files - for folder, subs, files in os.walk(os.getcwd()): - for filename in files: - replace_strings_in_file(os.path.join(folder, filename), TEMPLATE_NAME, project_name) - - # then in file and folder names - for folder, subs, files in os.walk(os.getcwd()): - for sub in subs: - if TEMPLATE_NAME in sub: - os.rename(sub, sub.replace(TEMPLATE_NAME, project_name)) - for filename in files: - if TEMPLATE_NAME in filename: - os.rename(filename, filename.replace(TEMPLATE_NAME, project_name)) - - print 'Success! %(project_name)s is created' % {'project_name': project_name} if __name__ == "__main__": create_project() From f224e1ca2d1d988f1cb96f9c7b402e6af5b7c19e Mon Sep 17 00:00:00 2001 From: Karl Hobley Date: Tue, 15 Jul 2014 15:05:01 +0100 Subject: [PATCH 007/210] Updated docs to use the new wagtail-project command --- docs/getting_started.rst | 61 +++++++++++++++++++ docs/index.rst | 5 +- ...gettingstarted.rst => trying_the_demo.rst} | 35 ++++------- 3 files changed, 75 insertions(+), 26 deletions(-) create mode 100644 docs/getting_started.rst rename docs/{gettingstarted.rst => trying_the_demo.rst} (77%) diff --git a/docs/getting_started.rst b/docs/getting_started.rst new file mode 100644 index 0000000000..fb9b2bb8cf --- /dev/null +++ b/docs/getting_started.rst @@ -0,0 +1,61 @@ +.. _getting_started: + +=============== +Getting started +=============== + +Installing Wagtail +================== + +From PyPI +--------- + +This is recommended for stability. + +.. code-block:: bash + + pip install wagtail + + +From Github +----------- + +This will give you the latest development version of Wagtail. + +.. code-block:: bash + + pip install -e git://github.com/torchbox/wagtail.git#egg=wagtail + + +The ``wagtail-project`` command +=============================== + +.. versionadded:: 0.5 + +Once you have Wagtail installed on your host machine, you can use the ``wagtail-project`` command. + +Usage: + +.. code-block:: bash + + wagtail-project + + +This command will setup a skeleton Wagtail project with the following features installed: + + - A core app with migrations to replace the default Homepage + - Base templates (base, 404, 500) + - Vagrant configuration + - Fabfile + - Docs directory (with Sphinx configuration) + - Split up settings configuration (different settings for dev and production) + - Requirements + + +Where to look next +================== + +.. toctree:: + :maxdepth: 2 + + building_your_site/index diff --git a/docs/index.rst b/docs/index.rst index 2ab429eb62..4cc3bddfb8 100644 --- a/docs/index.rst +++ b/docs/index.rst @@ -8,9 +8,10 @@ It supports Django 1.6.2+ on Python 2.6, 2.7, 3.2, 3.3 and 3.4. Django 1.7 suppo .. toctree:: :maxdepth: 3 - gettingstarted - settings + trying_the_demo + getting_started building_your_site/index + settings editing_api snippets search/index diff --git a/docs/gettingstarted.rst b/docs/trying_the_demo.rst similarity index 77% rename from docs/gettingstarted.rst rename to docs/trying_the_demo.rst index 04905700e8..865d1d9a24 100644 --- a/docs/gettingstarted.rst +++ b/docs/trying_the_demo.rst @@ -1,4 +1,4 @@ -Getting Started +Trying the demo --------------- On Ubuntu @@ -17,7 +17,6 @@ to your deployment preferences. The canonical version is at `github.com/torchbox/wagtail/blob/master/scripts/install/ubuntu.sh `_. -Once you've experimented with the demo app and are ready to build your pages via your own app you can `remove the demo app`_ if you choose. On Debian ~~~~~~~~~ @@ -35,7 +34,6 @@ to your deployment preferences. The canonical version is at `github.com/torchbox/wagtail/blob/master/scripts/install/debian.sh `_. -Once you've experimented with the demo app and are ready to build your pages via your own app you can `remove the demo app`_ if you choose. On OS X ~~~~~~~ @@ -53,6 +51,7 @@ Edit ``wagtaildemo/settings/base.py``, changing ENGINE to django.db.backends.sql ./manage.py migrate ./manage.py runserver + Using Vagrant ~~~~~~~~~~~~~ @@ -80,6 +79,7 @@ Wagtail instance available as the basis for your new site: is located on the host machine, exported to the VM as a shared folder; code editing and Git operations will generally be done on the host. + Using Docker ~~~~~~~~~~~~ @@ -92,12 +92,14 @@ interface at http://your-ip:8000/admin using admin / test. See https://index.docker.io/u/oyvindsk/wagtail-demo/ for more details. + Other platforms ~~~~~~~~~~~~~~~ If you're not using Ubuntu or Debian, or if you prefer to install Wagtail manually, use the following steps: + Required dependencies ===================== @@ -107,6 +109,7 @@ Required dependencies - `libxslt `_ - `zlib `_ + Optional dependencies ===================== @@ -114,6 +117,7 @@ Optional dependencies - `Elasticsearch`_ - `Redis`_ + Installation ============ @@ -130,6 +134,7 @@ run the following commands:: ./manage.py migrate ./manage.py runserver + SQLite support ============== @@ -144,26 +149,8 @@ with a regular Django project. .. _Elasticsearch: http://www.elasticsearch.org .. _Redis: http://redis.io/ -_`Remove the demo app` -~~~~~~~~~~~~~~~~~~~~~~ -Once you've experimented with the demo app and are ready to build your pages via your own app you can remove the demo app if you choose. +Creating your own site +====================== -``PROJECT_ROOT`` should be where your project is located (e.g. /usr/local/django) and ``PROJECT`` is the name of your project (e.g. mywagtail):: - - export PROJECT_ROOT=/usr/local/django - export PROJECT=mywagtail - cd $PROJECT_ROOT/$PROJECT - ./manage.py sqlclear demo | psql -Upostgres $PROJECT -f - - psql -Upostgres $PROJECT << EOF - BEGIN; - DELETE FROM wagtailcore_site WHERE root_page_id IN (SELECT id FROM wagtailcore_page WHERE content_type_id IN (SELECT id FROM django_content_type where app_label='demo')); - DELETE FROM wagtailcore_page WHERE content_type_id IN (SELECT id FROM django_content_type where app_label='demo'); - DELETE FROM auth_permission WHERE content_type_id IN (SELECT id FROM django_content_type where app_label='demo'); - DELETE FROM django_content_type WHERE app_label='demo'; - DELETE FROM wagtailimages_rendition; - DELETE FROM wagtailimages_image; - COMMIT; - EOF - rm -r demo media/images/* media/original_images/* - perl -pi -e"s/('demo',|WAGTAILSEARCH_RESULTS_TEMPLATE)/#\1/" $PROJECT/settings/base.py +Once you've experimented with the demo app and are ready to build your pages via your own app take a look at the :ref:`getting_started` documentation. From 05bcd96c28f56730e6f07bfe7193cdf7a7d23aa9 Mon Sep 17 00:00:00 2001 From: Karl Hobley Date: Fri, 18 Jul 2014 15:35:29 +0100 Subject: [PATCH 008/210] Updated project template Now on version 5b99f3892732ca84f22ce45001b540f6ba6f353f --- wagtail/project_template/.gitignore | 2 ++ .../project_name/core/templates/core/home_page.html | 2 +- .../project_name/core/templatetags/core_tags.py | 11 +++++------ wagtail/project_template/project_name/manage.py | 0 .../project_name/project_name/settings/base.py | 8 ++++++-- wagtail/project_template/requirements.txt | 12 +++++++++++- wagtail/project_template/requirements/base.txt | 7 ------- wagtail/project_template/requirements/dev.txt | 4 ---- wagtail/project_template/requirements/production.txt | 1 - wagtail/project_template/requirements/test.txt | 1 - wagtail/project_template/vagrant/provision.sh | 2 +- 11 files changed, 26 insertions(+), 24 deletions(-) mode change 100644 => 100755 wagtail/project_template/project_name/manage.py delete mode 100644 wagtail/project_template/requirements/base.txt delete mode 100644 wagtail/project_template/requirements/dev.txt delete mode 100644 wagtail/project_template/requirements/production.txt delete mode 100644 wagtail/project_template/requirements/test.txt diff --git a/wagtail/project_template/.gitignore b/wagtail/project_template/.gitignore index 1f499b52ea..aed6a6dafe 100644 --- a/wagtail/project_template/.gitignore +++ b/wagtail/project_template/.gitignore @@ -4,4 +4,6 @@ /*/*/settings/local.py /static/ /media/ +/.vagrant/ Vagrantfile.local +/docs/_build/ diff --git a/wagtail/project_template/project_name/core/templates/core/home_page.html b/wagtail/project_template/project_name/core/templates/core/home_page.html index 97f716590f..8fc0112bd7 100644 --- a/wagtail/project_template/project_name/core/templates/core/home_page.html +++ b/wagtail/project_template/project_name/core/templates/core/home_page.html @@ -2,7 +2,7 @@ {% templatetag openblock %} load static core_tags {% templatetag closeblock %} -{% templatetag openblock %} block body_class {% templatetag closeblock %}template-{% templatetag openvariable %} self|content_type_slugified {% templatetag closevariable %}{% templatetag openblock %} endblock {% templatetag closeblock %} +{% templatetag openblock %} block body_class {% templatetag closeblock %}template-{% templatetag openvariable %} self|content_type|slugify {% templatetag closevariable %}{% templatetag openblock %} endblock {% templatetag closeblock %} {% templatetag openblock %} block content {% templatetag closeblock %}

Welcome to your new Wagtail site!

diff --git a/wagtail/project_template/project_name/core/templatetags/core_tags.py b/wagtail/project_template/project_name/core/templatetags/core_tags.py index cf757e1a4a..05ebe808d6 100644 --- a/wagtail/project_template/project_name/core/templatetags/core_tags.py +++ b/wagtail/project_template/project_name/core/templatetags/core_tags.py @@ -1,13 +1,12 @@ from django import template from django.conf import settings -from django.template.defaultfilters import slugify - register = template.Library() -# Return the model name/"content type" as a css-friendly string e.g blog-page, news-listing-page -# Usage: {% verbatim %}{{ self|content_type_slugified }}{% endverbatim %} +# Return the model name/"content type" as a string e.g BlogPage, NewsListingPage. +# Can be used with "slugify" to create CSS-friendly classnames +# Usage: {% verbatim %}{{ self|content_type|slugify }}{% endverbatim %} @register.filter -def content_type_slugified(model): - return slugify(model.__class__.__name__) +def content_type(model): + return model.__class__.__name__ diff --git a/wagtail/project_template/project_name/manage.py b/wagtail/project_template/project_name/manage.py old mode 100644 new mode 100755 diff --git a/wagtail/project_template/project_name/project_name/settings/base.py b/wagtail/project_template/project_name/project_name/settings/base.py index bd0b8d5b5b..7d3a3bc73c 100644 --- a/wagtail/project_template/project_name/project_name/settings/base.py +++ b/wagtail/project_template/project_name/project_name/settings/base.py @@ -12,7 +12,7 @@ from os.path import abspath, basename, dirname, join, normpath from sys import path # Absolute filesystem path to the Django project directory: -DJANGO_ROOT = dirname(dirname(abspath(__file__))) +DJANGO_ROOT = dirname(dirname(dirname(abspath(__file__)))) # Absolute filesystem path to the top-level project folder: PROJECT_ROOT = dirname(DJANGO_ROOT) @@ -122,6 +122,10 @@ STATICFILES_FINDERS = ( 'compressor.finders.CompressorFinder', ) +STATICFILES_DIRS = ( + join(DJANGO_ROOT, 'static'), +) + MEDIA_ROOT = join(PROJECT_ROOT, 'media') MEDIA_URL = '/media/' @@ -151,7 +155,7 @@ TEMPLATE_CONTEXT_PROCESSORS = global_settings.TEMPLATE_CONTEXT_PROCESSORS + ( ) TEMPLATE_DIRS = ( - normpath(join(PROJECT_ROOT, 'templates')), + normpath(join(DJANGO_ROOT, 'templates')), ) diff --git a/wagtail/project_template/requirements.txt b/wagtail/project_template/requirements.txt index b0c35405c5..c1eacf044a 100644 --- a/wagtail/project_template/requirements.txt +++ b/wagtail/project_template/requirements.txt @@ -1 +1,11 @@ --r requirements/dev.txt +Django==1.6.5 +South==0.8.4 +psycopg2==2.5.2 +elasticsearch==1.1.1 +django-redis-cache==0.13.0 +django-celery==3.1.10 +wagtail==0.4.1 + +# Developer tools +Fabric==1.9.0 +Sphinx==1.2.2 diff --git a/wagtail/project_template/requirements/base.txt b/wagtail/project_template/requirements/base.txt deleted file mode 100644 index c4a30fe6c5..0000000000 --- a/wagtail/project_template/requirements/base.txt +++ /dev/null @@ -1,7 +0,0 @@ -Django==1.6.5 -South==0.8.4 -psycopg2==2.5.2 -elasticsearch==1.1.1 -django-redis-cache==0.13.0 -django-celery==3.1.10 -wagtail==0.4 diff --git a/wagtail/project_template/requirements/dev.txt b/wagtail/project_template/requirements/dev.txt deleted file mode 100644 index d0ed29d34f..0000000000 --- a/wagtail/project_template/requirements/dev.txt +++ /dev/null @@ -1,4 +0,0 @@ --r base.txt - -Fabric==1.9.0 -Sphinx==1.2.2 diff --git a/wagtail/project_template/requirements/production.txt b/wagtail/project_template/requirements/production.txt deleted file mode 100644 index a3e81b8dcf..0000000000 --- a/wagtail/project_template/requirements/production.txt +++ /dev/null @@ -1 +0,0 @@ --r base.txt diff --git a/wagtail/project_template/requirements/test.txt b/wagtail/project_template/requirements/test.txt deleted file mode 100644 index a3e81b8dcf..0000000000 --- a/wagtail/project_template/requirements/test.txt +++ /dev/null @@ -1 +0,0 @@ --r base.txt diff --git a/wagtail/project_template/vagrant/provision.sh b/wagtail/project_template/vagrant/provision.sh index 509bcc9afa..c10b64e90f 100755 --- a/wagtail/project_template/vagrant/provision.sh +++ b/wagtail/project_template/vagrant/provision.sh @@ -17,7 +17,7 @@ createdb -Upostgres $PROJECT_NAME # Virtualenv setup for project su - vagrant -c "/usr/local/bin/virtualenv $VIRTUALENV_DIR && \ echo $PROJECT_DIR > $VIRTUALENV_DIR/.project && \ - PIP_DOWNLOAD_CACHE=/home/vagrant/.pip_download_cache $PIP install -r $PROJECT_DIR/requirements/dev.txt" + PIP_DOWNLOAD_CACHE=/home/vagrant/.pip_download_cache $PIP install -r $PROJECT_DIR/requirements.txt" echo "workon $PROJECT_NAME" >> /home/vagrant/.bashrc From cd39f305a53b9049245a4c1ef4dc5fe9304ae64c Mon Sep 17 00:00:00 2001 From: Dave Cranwell Date: Fri, 25 Jul 2014 14:36:38 +0100 Subject: [PATCH 009/210] fixing search in page chooser, which would allow selection of any page even if the developer has chosen to restrict to only certain types allowed. --- .../wagtailadmin/chooser/_search_results.html | 22 ++++++++++++++----- .../wagtailadmin/chooser/browse.html | 12 ++++++---- .../templates/wagtailadmin/shared/header.html | 2 +- wagtail/wagtailadmin/views/chooser.py | 14 +++++++++--- 4 files changed, 36 insertions(+), 14 deletions(-) diff --git a/wagtail/wagtailadmin/templates/wagtailadmin/chooser/_search_results.html b/wagtail/wagtailadmin/templates/wagtailadmin/chooser/_search_results.html index 6f575259e7..7554187ebf 100644 --- a/wagtail/wagtailadmin/templates/wagtailadmin/chooser/_search_results.html +++ b/wagtail/wagtailadmin/templates/wagtailadmin/chooser/_search_results.html @@ -1,11 +1,19 @@ {% load i18n %} + +{% if is_restricted %} +

+ {% blocktrans with type=page_type.get_verbose_name %} + Only pages of type "{{ type }}" may be chosen for this field. Search results will exclude pages of other types. + {% endblocktrans %} +

+{% endif %} + {% if not is_searching %}

{% trans "Explorer" %}

{% include "wagtailadmin/shared/breadcrumb.html" with page=parent_page choosing=1 %} - {% else %}

- {% blocktrans count counter=pages.count %} + {% blocktrans count counter=pages|length %} There is one match {% plural %} There are {{ counter }} matches @@ -13,8 +21,10 @@

{% endif %} -{% if is_searching %} - {% include "wagtailadmin/pages/list.html" with choosing=1 show_parent=1 pages=pages parent_page=parent_page %} -{% else %} - {% include "wagtailadmin/pages/list.html" with choosing=1 allow_navigation=1 orderable=0 pages=pages parent_page=parent_page %} +{% if pages %} + {% if is_searching%} + {% include "wagtailadmin/pages/list.html" with choosing=1 show_parent=1 pages=pages parent_page=parent_page %} + {% else %} + {% include "wagtailadmin/pages/list.html" with choosing=1 allow_navigation=1 orderable=0 pages=pages parent_page=parent_page %} + {% endif %} {% endif %} \ No newline at end of file diff --git a/wagtail/wagtailadmin/templates/wagtailadmin/chooser/browse.html b/wagtail/wagtailadmin/templates/wagtailadmin/chooser/browse.html index 5714ddb45e..50e81c0f14 100644 --- a/wagtail/wagtailadmin/templates/wagtailadmin/chooser/browse.html +++ b/wagtail/wagtailadmin/templates/wagtailadmin/chooser/browse.html @@ -1,13 +1,17 @@ {% load i18n %} -{% trans "Choose a page" as choose_str %} -{% include "wagtailadmin/shared/header.html" with title=choose_str search_url="wagtailadmin_choose_page" icon="doc-empty-inverse" %} +{% if is_restricted %} + {% trans "Choose" as choose_str %} + {% trans page_type.get_verbose_name as subtitle %} +{% else %} + {% trans "Choose a page" as choose_str %} +{% endif %} + +{% include "wagtailadmin/shared/header.html" with title=choose_str subtitle=subtitle search_url="wagtailadmin_choose_page" query_parameters="page_type="|add:page_type_string icon="doc-empty-inverse" %}
{% include 'wagtailadmin/chooser/_link_types.html' with current='internal' %}
- {# content in here will be replaced by live search results #} - {% include 'wagtailadmin/chooser/_search_results.html' %}
diff --git a/wagtail/wagtailadmin/templates/wagtailadmin/shared/header.html b/wagtail/wagtailadmin/templates/wagtailadmin/shared/header.html index be391989d2..b5de84832f 100644 --- a/wagtail/wagtailadmin/templates/wagtailadmin/shared/header.html +++ b/wagtail/wagtailadmin/templates/wagtailadmin/shared/header.html @@ -5,7 +5,7 @@

{{ title }} {{ subtitle }}

{% if search_url %} -
+
    {% for field in search_form %} {% include "wagtailadmin/shared/field_as_li.html" with field=field field_classes="field-small iconfield" input_classes="icon-search" %} diff --git a/wagtail/wagtailadmin/views/chooser.py b/wagtail/wagtailadmin/views/chooser.py index 31cad20db2..f075dd5405 100644 --- a/wagtail/wagtailadmin/views/chooser.py +++ b/wagtail/wagtailadmin/views/chooser.py @@ -3,6 +3,7 @@ from django.shortcuts import get_object_or_404, render from django.http import Http404 from django.utils.http import urlencode from django.contrib.auth.decorators import permission_required +from django.core.paginator import Paginator, EmptyPage, PageNotAnInteger from wagtail.wagtailadmin.modal_workflow import render_modal_workflow from wagtail.wagtailadmin.forms import SearchForm, ExternalLinkChooserForm, ExternalLinkChooserWithLinkTextForm, EmailLinkChooserForm, EmailLinkChooserWithLinkTextForm @@ -25,6 +26,7 @@ def browse(request, parent_page_id=None): content_type_app_name, content_type_model_name = page_type.split('.') is_searching = False + is_restricted = page_type != 'wagtailcore.page' try: content_type = ContentType.objects.get_by_natural_key(content_type_app_name, content_type_model_name) @@ -66,8 +68,11 @@ def browse(request, parent_page_id=None): return render(request, 'wagtailadmin/chooser/_search_results.html', { 'querystring': get_querystring(request), 'searchform': search_form, - 'pages': pages, - 'is_searching': is_searching + 'pages': shown_pages, + 'is_searching': is_searching, + 'page_type_string': page_type, + 'page_type': desired_class, + 'is_restricted': is_restricted }) return render_modal_workflow(request, 'wagtailadmin/chooser/browse.html', 'wagtailadmin/chooser/browse.js', { @@ -77,7 +82,10 @@ def browse(request, parent_page_id=None): 'parent_page': parent_page, 'pages': shown_pages, 'search_form': search_form, - 'is_searching': False + 'is_searching': False, + 'page_type_string': page_type, + 'page_type': desired_class, + 'is_restricted': is_restricted }) From 6d50ae5d65d47ce1462547b6b9e9bb06c118792d Mon Sep 17 00:00:00 2001 From: Karl Hobley Date: Wed, 23 Jul 2014 11:36:11 +0100 Subject: [PATCH 010/210] Only enable south in tests if were testing with Django 1.6 --- wagtail/tests/settings.py | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/wagtail/tests/settings.py b/wagtail/tests/settings.py index 1ef1c5ab15..444baca659 100644 --- a/wagtail/tests/settings.py +++ b/wagtail/tests/settings.py @@ -1,5 +1,6 @@ import os +import django from django.conf import global_settings @@ -57,7 +58,6 @@ INSTALLED_APPS = [ 'django.contrib.admin', 'taggit', - 'south', 'compressor', 'wagtail.wagtailcore', @@ -76,6 +76,11 @@ INSTALLED_APPS = [ 'wagtail.tests', ] +# If we are using Django 1.6, add South to INSTALLED_APPS +if django.VERSION[:2] == (1, 6): + INSTALLED_APPS.append('south') + + # Using DatabaseCache to make sure that the cache is cleared between tests. # This prevents false-positives in some wagtail core tests where we are # changing the 'wagtail_root_paths' key which may cause future tests to fail. From fa75a11c61d338271bb1ebd700dddd3093f94fe6 Mon Sep 17 00:00:00 2001 From: Karl Hobley Date: Wed, 23 Jul 2014 11:46:02 +0100 Subject: [PATCH 011/210] Removed 'FakePage' from admin tests (upsets migrations) --- wagtail/wagtailadmin/tests/test_edit_handlers.py | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/wagtail/wagtailadmin/tests/test_edit_handlers.py b/wagtail/wagtailadmin/tests/test_edit_handlers.py index 8b499378cf..0dd699ac1d 100644 --- a/wagtail/wagtailadmin/tests/test_edit_handlers.py +++ b/wagtail/wagtailadmin/tests/test_edit_handlers.py @@ -43,9 +43,6 @@ class TestGetFormForModel(TestCase): class TestExtractPanelDefinitionsFromModelClass(TestCase): - class FakePage(Page): - pass - def test_can_extract_panels(self): mock = MagicMock() mock.panels = 'foo' @@ -58,7 +55,7 @@ class TestExtractPanelDefinitionsFromModelClass(TestCase): self.assertNotEqual(panel.field_name, 'hostname') def test_extracted_objects_are_panels(self): - panels = extract_panel_definitions_from_model_class(self.FakePage) + panels = extract_panel_definitions_from_model_class(Page) for panel in panels: self.assertTrue(issubclass(panel, BaseFieldPanel)) From c5044eb0e500e6408a4e19c57c219f914c165578 Mon Sep 17 00:00:00 2001 From: Karl Hobley Date: Wed, 23 Jul 2014 11:57:23 +0100 Subject: [PATCH 012/210] Moved get_upload_to outside of Image model --- wagtail/wagtailimages/models.py | 28 ++++++++++++++-------------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/wagtail/wagtailimages/models.py b/wagtail/wagtailimages/models.py index c561cdcc5e..cd2b7f111f 100644 --- a/wagtail/wagtailimages/models.py +++ b/wagtail/wagtailimages/models.py @@ -24,23 +24,23 @@ from wagtail.wagtailsearch import indexed from .utils import validate_image_format +def get_upload_to(self, filename): + folder_name = 'original_images' + filename = self.file.field.storage.get_valid_name(filename) + + # do a unidecode in the filename and then + # replace non-ascii characters in filename with _ , to sidestep issues with filesystem encoding + filename = "".join((i if ord(i) < 128 else '_') for i in unidecode(filename)) + + while len(os.path.join(folder_name, filename)) >= 95: + prefix, dot, extension = filename.rpartition('.') + filename = prefix[:-1] + dot + extension + return os.path.join(folder_name, filename) + + @python_2_unicode_compatible class AbstractImage(models.Model, TagSearchable): title = models.CharField(max_length=255, verbose_name=_('Title') ) - - def get_upload_to(self, filename): - folder_name = 'original_images' - filename = self.file.field.storage.get_valid_name(filename) - - # do a unidecode in the filename and then - # replace non-ascii characters in filename with _ , to sidestep issues with filesystem encoding - filename = "".join((i if ord(i) < 128 else '_') for i in unidecode(filename)) - - while len(os.path.join(folder_name, filename)) >= 95: - prefix, dot, extension = filename.rpartition('.') - filename = prefix[:-1] + dot + extension - return os.path.join(folder_name, filename) - file = models.ImageField(verbose_name=_('File'), upload_to=get_upload_to, width_field='width', height_field='height', validators=[validate_image_format]) width = models.IntegerField(editable=False) height = models.IntegerField(editable=False) From 3c642874886f27df8266f55eea80a7fb924158ee Mon Sep 17 00:00:00 2001 From: Karl Hobley Date: Wed, 23 Jul 2014 11:36:25 +0100 Subject: [PATCH 013/210] Created initial Django 1.7 migrations --- wagtail/tests/migrations/0001_initial.py | 298 ++++++++++++++++++ wagtail/tests/migrations/__init__.py | 0 .../wagtailcore/migrations/0001_initial.py | 104 ++++++ wagtail/wagtailcore/migrations/__init__.py | 0 .../wagtaildocs/migrations/0001_initial.py | 33 ++ wagtail/wagtaildocs/migrations/__init__.py | 0 .../wagtailembeds/migrations/0001_initial.py | 37 +++ wagtail/wagtailembeds/migrations/__init__.py | 0 .../wagtailforms/migrations/0001_initial.py | 26 ++ wagtail/wagtailforms/migrations/__init__.py | 0 .../wagtailimages/migrations/0001_initial.py | 66 ++++ wagtail/wagtailimages/migrations/__init__.py | 0 .../migrations/0001_initial.py | 28 ++ .../wagtailredirects/migrations/__init__.py | 0 .../wagtailsearch/migrations/0001_initial.py | 59 ++++ wagtail/wagtailsearch/migrations/__init__.py | 0 .../wagtailusers/migrations/0001_initial.py | 28 ++ wagtail/wagtailusers/migrations/__init__.py | 0 18 files changed, 679 insertions(+) create mode 100644 wagtail/tests/migrations/0001_initial.py create mode 100644 wagtail/tests/migrations/__init__.py create mode 100644 wagtail/wagtailcore/migrations/0001_initial.py create mode 100644 wagtail/wagtailcore/migrations/__init__.py create mode 100644 wagtail/wagtaildocs/migrations/0001_initial.py create mode 100644 wagtail/wagtaildocs/migrations/__init__.py create mode 100644 wagtail/wagtailembeds/migrations/0001_initial.py create mode 100644 wagtail/wagtailembeds/migrations/__init__.py create mode 100644 wagtail/wagtailforms/migrations/0001_initial.py create mode 100644 wagtail/wagtailforms/migrations/__init__.py create mode 100644 wagtail/wagtailimages/migrations/0001_initial.py create mode 100644 wagtail/wagtailimages/migrations/__init__.py create mode 100644 wagtail/wagtailredirects/migrations/0001_initial.py create mode 100644 wagtail/wagtailredirects/migrations/__init__.py create mode 100644 wagtail/wagtailsearch/migrations/0001_initial.py create mode 100644 wagtail/wagtailsearch/migrations/__init__.py create mode 100644 wagtail/wagtailusers/migrations/0001_initial.py create mode 100644 wagtail/wagtailusers/migrations/__init__.py diff --git a/wagtail/tests/migrations/0001_initial.py b/wagtail/tests/migrations/0001_initial.py new file mode 100644 index 0000000000..9b6592118a --- /dev/null +++ b/wagtail/tests/migrations/0001_initial.py @@ -0,0 +1,298 @@ +# -*- coding: utf-8 -*- +from __future__ import unicode_literals + +from django.db import models, migrations +import django.db.models.deletion +import wagtail.wagtailsearch.indexed +import modelcluster.fields +import wagtail.wagtailcore.fields + + +class Migration(migrations.Migration): + + dependencies = [ + ('wagtailimages', '0001_initial'), + ('wagtailcore', '0001_initial'), + ('wagtaildocs', '__latest__'), + ] + + operations = [ + migrations.CreateModel( + name='Advert', + fields=[ + ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)), + ('url', models.URLField(null=True, blank=True)), + ('text', models.CharField(max_length=255)), + ], + options={ + }, + bases=(models.Model,), + ), + migrations.CreateModel( + name='AlphaSnippet', + fields=[ + ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)), + ('text', models.CharField(max_length=255)), + ], + options={ + }, + bases=(models.Model,), + ), + migrations.CreateModel( + name='BusinessChild', + fields=[ + ('page_ptr', models.OneToOneField(auto_created=True, primary_key=True, serialize=False, to='wagtailcore.Page')), + ], + options={ + 'abstract': False, + }, + bases=('wagtailcore.page',), + ), + migrations.CreateModel( + name='BusinessIndex', + fields=[ + ('page_ptr', models.OneToOneField(auto_created=True, primary_key=True, serialize=False, to='wagtailcore.Page')), + ], + options={ + 'abstract': False, + }, + bases=('wagtailcore.page',), + ), + migrations.CreateModel( + name='BusinessSubIndex', + fields=[ + ('page_ptr', models.OneToOneField(auto_created=True, primary_key=True, serialize=False, to='wagtailcore.Page')), + ], + options={ + 'abstract': False, + }, + bases=('wagtailcore.page',), + ), + migrations.CreateModel( + name='EventIndex', + fields=[ + ('page_ptr', models.OneToOneField(auto_created=True, primary_key=True, serialize=False, to='wagtailcore.Page')), + ('intro', wagtail.wagtailcore.fields.RichTextField(blank=True)), + ], + options={ + 'abstract': False, + }, + bases=('wagtailcore.page',), + ), + migrations.CreateModel( + name='EventPage', + fields=[ + ('page_ptr', models.OneToOneField(auto_created=True, primary_key=True, serialize=False, to='wagtailcore.Page')), + ('date_from', models.DateField(null=True, verbose_name=b'Start date')), + ('date_to', models.DateField(help_text=b'Not required if event is on a single day', null=True, verbose_name=b'End date', blank=True)), + ('time_from', models.TimeField(null=True, verbose_name=b'Start time', blank=True)), + ('time_to', models.TimeField(null=True, verbose_name=b'End time', blank=True)), + ('audience', models.CharField(max_length=255, choices=[(b'public', b'Public'), (b'private', b'Private')])), + ('location', models.CharField(max_length=255)), + ('body', wagtail.wagtailcore.fields.RichTextField(blank=True)), + ('cost', models.CharField(max_length=255)), + ('signup_link', models.URLField(blank=True)), + ('feed_image', models.ForeignKey(on_delete=django.db.models.deletion.SET_NULL, blank=True, to='wagtailimages.Image', null=True)), + ], + options={ + 'abstract': False, + }, + bases=('wagtailcore.page',), + ), + migrations.CreateModel( + name='EventPageCarouselItem', + fields=[ + ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)), + ('sort_order', models.IntegerField(null=True, editable=False, blank=True)), + ('link_external', models.URLField(verbose_name=b'External link', blank=True)), + ('embed_url', models.URLField(verbose_name=b'Embed URL', blank=True)), + ('caption', models.CharField(max_length=255, blank=True)), + ('image', models.ForeignKey(on_delete=django.db.models.deletion.SET_NULL, blank=True, to='wagtailimages.Image', null=True)), + ('link_document', models.ForeignKey(blank=True, to='wagtaildocs.Document', null=True)), + ('link_page', models.ForeignKey(blank=True, to='wagtailcore.Page', null=True)), + ('page', modelcluster.fields.ParentalKey(to='tests.EventPage')), + ], + options={ + 'ordering': [b'sort_order'], + 'abstract': False, + }, + bases=(models.Model,), + ), + migrations.CreateModel( + name='EventPageRelatedLink', + fields=[ + ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)), + ('sort_order', models.IntegerField(null=True, editable=False, blank=True)), + ('link_external', models.URLField(verbose_name=b'External link', blank=True)), + ('title', models.CharField(help_text=b'Link title', max_length=255)), + ('link_document', models.ForeignKey(blank=True, to='wagtaildocs.Document', null=True)), + ('link_page', models.ForeignKey(blank=True, to='wagtailcore.Page', null=True)), + ('page', modelcluster.fields.ParentalKey(to='tests.EventPage')), + ], + options={ + 'ordering': [b'sort_order'], + 'abstract': False, + }, + bases=(models.Model,), + ), + migrations.CreateModel( + name='EventPageSpeaker', + fields=[ + ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)), + ('sort_order', models.IntegerField(null=True, editable=False, blank=True)), + ('link_external', models.URLField(verbose_name=b'External link', blank=True)), + ('first_name', models.CharField(max_length=255, verbose_name=b'Name', blank=True)), + ('last_name', models.CharField(max_length=255, verbose_name=b'Surname', blank=True)), + ('image', models.ForeignKey(on_delete=django.db.models.deletion.SET_NULL, blank=True, to='wagtailimages.Image', null=True)), + ('link_document', models.ForeignKey(blank=True, to='wagtaildocs.Document', null=True)), + ('link_page', models.ForeignKey(blank=True, to='wagtailcore.Page', null=True)), + ('page', modelcluster.fields.ParentalKey(to='tests.EventPage')), + ], + options={ + 'ordering': [b'sort_order'], + 'abstract': False, + }, + bases=(models.Model,), + ), + migrations.CreateModel( + name='FormField', + fields=[ + ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)), + ('sort_order', models.IntegerField(null=True, editable=False, blank=True)), + ('label', models.CharField(help_text='The label of the form field', max_length=255)), + ('field_type', models.CharField(max_length=16, choices=[(b'singleline', 'Single line text'), (b'multiline', 'Multi-line text'), (b'email', 'Email'), (b'number', 'Number'), (b'url', 'URL'), (b'checkbox', 'Checkbox'), (b'checkboxes', 'Checkboxes'), (b'dropdown', 'Drop down'), (b'radio', 'Radio buttons'), (b'date', 'Date'), (b'datetime', 'Date/time')])), + ('required', models.BooleanField(default=True)), + ('choices', models.CharField(help_text='Comma seperated list of choices. Only applicable in checkboxes, radio and dropdown.', max_length=512, blank=True)), + ('default_value', models.CharField(help_text='Default value. Comma seperated values supported for checkboxes.', max_length=255, blank=True)), + ('help_text', models.CharField(max_length=255, blank=True)), + ], + options={ + 'ordering': [b'sort_order'], + 'abstract': False, + }, + bases=(models.Model,), + ), + migrations.CreateModel( + name='FormPage', + fields=[ + ('page_ptr', models.OneToOneField(auto_created=True, primary_key=True, serialize=False, to='wagtailcore.Page')), + ('to_address', models.CharField(help_text='Optional - form submissions will be emailed to this address', max_length=255, blank=True)), + ('from_address', models.CharField(max_length=255, blank=True)), + ('subject', models.CharField(max_length=255, blank=True)), + ], + options={ + 'abstract': False, + }, + bases=('wagtailcore.page',), + ), + migrations.AddField( + model_name='formfield', + name='page', + field=modelcluster.fields.ParentalKey(to='tests.FormPage'), + preserve_default=True, + ), + migrations.CreateModel( + name='PageWithOldStyleRouteMethod', + fields=[ + ('page_ptr', models.OneToOneField(auto_created=True, primary_key=True, serialize=False, to='wagtailcore.Page')), + ('content', models.TextField()), + ], + options={ + 'abstract': False, + }, + bases=('wagtailcore.page',), + ), + migrations.CreateModel( + name='RoutablePageTest', + fields=[ + ('page_ptr', models.OneToOneField(auto_created=True, primary_key=True, serialize=False, to='wagtailcore.Page')), + ], + options={ + 'abstract': False, + }, + bases=('wagtailcore.page',), + ), + migrations.CreateModel( + name='SearchTest', + fields=[ + ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)), + ('title', models.CharField(max_length=255)), + ('content', models.TextField()), + ('live', models.BooleanField(default=False)), + ('published_date', models.DateField(null=True)), + ], + options={ + }, + bases=(models.Model, wagtail.wagtailsearch.indexed.Indexed), + ), + migrations.CreateModel( + name='SearchTestChild', + fields=[ + ('searchtest_ptr', models.OneToOneField(auto_created=True, primary_key=True, serialize=False, to='tests.SearchTest')), + ('subtitle', models.CharField(max_length=255, null=True, blank=True)), + ('extra_content', models.TextField()), + ], + options={ + }, + bases=('tests.searchtest',), + ), + migrations.CreateModel( + name='SearchTestOldConfig', + fields=[ + ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)), + ], + options={ + }, + bases=(models.Model, wagtail.wagtailsearch.indexed.Indexed), + ), + migrations.CreateModel( + name='SearchTestOldConfigList', + fields=[ + ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)), + ], + options={ + }, + bases=(models.Model, wagtail.wagtailsearch.indexed.Indexed), + ), + migrations.CreateModel( + name='SimplePage', + fields=[ + ('page_ptr', models.OneToOneField(auto_created=True, primary_key=True, serialize=False, to='wagtailcore.Page')), + ('content', models.TextField()), + ], + options={ + 'abstract': False, + }, + bases=('wagtailcore.page',), + ), + migrations.CreateModel( + name='StandardChild', + fields=[ + ('page_ptr', models.OneToOneField(auto_created=True, primary_key=True, serialize=False, to='wagtailcore.Page')), + ], + options={ + 'abstract': False, + }, + bases=('wagtailcore.page',), + ), + migrations.CreateModel( + name='StandardIndex', + fields=[ + ('page_ptr', models.OneToOneField(auto_created=True, primary_key=True, serialize=False, to='wagtailcore.Page')), + ], + options={ + 'abstract': False, + }, + bases=('wagtailcore.page',), + ), + migrations.CreateModel( + name='ZuluSnippet', + fields=[ + ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)), + ('text', models.CharField(max_length=255)), + ], + options={ + }, + bases=(models.Model,), + ), + ] diff --git a/wagtail/tests/migrations/__init__.py b/wagtail/tests/migrations/__init__.py new file mode 100644 index 0000000000..e69de29bb2 diff --git a/wagtail/wagtailcore/migrations/0001_initial.py b/wagtail/wagtailcore/migrations/0001_initial.py new file mode 100644 index 0000000000..3cb27f59bc --- /dev/null +++ b/wagtail/wagtailcore/migrations/0001_initial.py @@ -0,0 +1,104 @@ +# -*- coding: utf-8 -*- +from __future__ import unicode_literals + +from django.db import models, migrations +from django.conf import settings +import wagtail.wagtailsearch.indexed + + +class Migration(migrations.Migration): + + dependencies = [ + ('contenttypes', '0001_initial'), + migrations.swappable_dependency(settings.AUTH_USER_MODEL), + ('auth', '0001_initial'), + ] + + operations = [ + migrations.CreateModel( + name='GroupPagePermission', + fields=[ + ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)), + ('permission_type', models.CharField(max_length=20, choices=[(b'add', b'Add'), (b'edit', b'Edit'), (b'publish', b'Publish')])), + ('group', models.ForeignKey(to='auth.Group')), + ], + options={ + }, + bases=(models.Model,), + ), + migrations.CreateModel( + name='Page', + fields=[ + ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)), + ('path', models.CharField(unique=True, max_length=255)), + ('depth', models.PositiveIntegerField()), + ('numchild', models.PositiveIntegerField(default=0)), + ('title', models.CharField(help_text="The page title as you'd like it to be seen by the public", max_length=255)), + ('slug', models.SlugField(help_text='The name of the page as it will appear in URLs e.g http://domain.com/blog/[my-slug]/')), + ('live', models.BooleanField(default=True, editable=False)), + ('has_unpublished_changes', models.BooleanField(default=False, editable=False)), + ('url_path', models.CharField(max_length=255, editable=False, blank=True)), + ('seo_title', models.CharField(help_text="Optional. 'Search Engine Friendly' title. This will appear at the top of the browser window.", max_length=255, verbose_name='Page title', blank=True)), + ('show_in_menus', models.BooleanField(default=False, help_text='Whether a link to this page will appear in automatically generated menus')), + ('search_description', models.TextField(blank=True)), + ('go_live_at', models.DateTimeField(help_text='Please add a date-time in the form YYYY-MM-DD hh:mm.', null=True, verbose_name='Go live date/time', blank=True)), + ('expire_at', models.DateTimeField(help_text='Please add a date-time in the form YYYY-MM-DD hh:mm.', null=True, verbose_name='Expiry date/time', blank=True)), + ('expired', models.BooleanField(default=False, editable=False)), + ('content_type', models.ForeignKey(to='contenttypes.ContentType')), + ('owner', models.ForeignKey(blank=True, editable=False, to=settings.AUTH_USER_MODEL, null=True)), + ], + options={ + 'abstract': False, + }, + bases=(models.Model, wagtail.wagtailsearch.indexed.Indexed), + ), + migrations.AddField( + model_name='grouppagepermission', + name='page', + field=models.ForeignKey(to='wagtailcore.Page'), + preserve_default=True, + ), + migrations.CreateModel( + name='PageRevision', + fields=[ + ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)), + ('submitted_for_moderation', models.BooleanField(default=False)), + ('created_at', models.DateTimeField(auto_now_add=True)), + ('content_json', models.TextField()), + ('approved_go_live_at', models.DateTimeField(null=True, blank=True)), + ('page', models.ForeignKey(to='wagtailcore.Page')), + ('user', models.ForeignKey(blank=True, to=settings.AUTH_USER_MODEL, null=True)), + ], + options={ + }, + bases=(models.Model,), + ), + migrations.CreateModel( + name='PageViewRestriction', + fields=[ + ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)), + ('password', models.CharField(max_length=255)), + ('page', models.ForeignKey(to='wagtailcore.Page')), + ], + options={ + }, + bases=(models.Model,), + ), + migrations.CreateModel( + name='Site', + fields=[ + ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)), + ('hostname', models.CharField(max_length=255, db_index=True)), + ('port', models.IntegerField(default=80, help_text='Set this to something other than 80 if you need a specific port number to appear in URLs (e.g. development on port 8000). Does not affect request handling (so port forwarding still works).')), + ('is_default_site', models.BooleanField(default=False, help_text='If true, this site will handle requests for all other hostnames that do not have a site entry of their own')), + ('root_page', models.ForeignKey(to='wagtailcore.Page')), + ], + options={ + }, + bases=(models.Model,), + ), + migrations.AlterUniqueTogether( + name='site', + unique_together=set([(b'hostname', b'port')]), + ), + ] diff --git a/wagtail/wagtailcore/migrations/__init__.py b/wagtail/wagtailcore/migrations/__init__.py new file mode 100644 index 0000000000..e69de29bb2 diff --git a/wagtail/wagtaildocs/migrations/0001_initial.py b/wagtail/wagtaildocs/migrations/0001_initial.py new file mode 100644 index 0000000000..2ca7257170 --- /dev/null +++ b/wagtail/wagtaildocs/migrations/0001_initial.py @@ -0,0 +1,33 @@ +# -*- coding: utf-8 -*- +from __future__ import unicode_literals + +from django.db import models, migrations +from django.conf import settings +import taggit.models +import wagtail.wagtailadmin.taggable +import taggit.managers + + +class Migration(migrations.Migration): + + dependencies = [ + ('taggit', '__latest__'), + migrations.swappable_dependency(settings.AUTH_USER_MODEL), + ] + + operations = [ + migrations.CreateModel( + name='Document', + fields=[ + ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)), + ('title', models.CharField(max_length=255, verbose_name='Title')), + ('file', models.FileField(upload_to=b'documents', verbose_name='File')), + ('created_at', models.DateTimeField(auto_now_add=True)), + ('tags', taggit.managers.TaggableManager(to=taggit.models.Tag, through=taggit.models.TaggedItem, blank=True, help_text=None, verbose_name='Tags')), + ('uploaded_by_user', models.ForeignKey(blank=True, editable=False, to=settings.AUTH_USER_MODEL, null=True)), + ], + options={ + }, + bases=(models.Model, wagtail.wagtailadmin.taggable.TagSearchable), + ), + ] diff --git a/wagtail/wagtaildocs/migrations/__init__.py b/wagtail/wagtaildocs/migrations/__init__.py new file mode 100644 index 0000000000..e69de29bb2 diff --git a/wagtail/wagtailembeds/migrations/0001_initial.py b/wagtail/wagtailembeds/migrations/0001_initial.py new file mode 100644 index 0000000000..e042c074cc --- /dev/null +++ b/wagtail/wagtailembeds/migrations/0001_initial.py @@ -0,0 +1,37 @@ +# -*- coding: utf-8 -*- +from __future__ import unicode_literals + +from django.db import models, migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ] + + operations = [ + migrations.CreateModel( + name='Embed', + fields=[ + ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)), + ('url', models.URLField()), + ('max_width', models.SmallIntegerField(null=True, blank=True)), + ('type', models.CharField(max_length=10, choices=[(b'video', b'Video'), (b'photo', b'Photo'), (b'link', b'Link'), (b'rich', b'Rich')])), + ('html', models.TextField(blank=True)), + ('title', models.TextField(blank=True)), + ('author_name', models.TextField(blank=True)), + ('provider_name', models.TextField(blank=True)), + ('thumbnail_url', models.URLField(null=True, blank=True)), + ('width', models.IntegerField(null=True, blank=True)), + ('height', models.IntegerField(null=True, blank=True)), + ('last_updated', models.DateTimeField(auto_now=True)), + ], + options={ + }, + bases=(models.Model,), + ), + migrations.AlterUniqueTogether( + name='embed', + unique_together=set([(b'url', b'max_width')]), + ), + ] diff --git a/wagtail/wagtailembeds/migrations/__init__.py b/wagtail/wagtailembeds/migrations/__init__.py new file mode 100644 index 0000000000..e69de29bb2 diff --git a/wagtail/wagtailforms/migrations/0001_initial.py b/wagtail/wagtailforms/migrations/0001_initial.py new file mode 100644 index 0000000000..868defc9e4 --- /dev/null +++ b/wagtail/wagtailforms/migrations/0001_initial.py @@ -0,0 +1,26 @@ +# -*- coding: utf-8 -*- +from __future__ import unicode_literals + +from django.db import models, migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ('wagtailcore', '0001_initial'), + ] + + operations = [ + migrations.CreateModel( + name='FormSubmission', + fields=[ + ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)), + ('form_data', models.TextField()), + ('submit_time', models.DateTimeField(auto_now_add=True)), + ('page', models.ForeignKey(to='wagtailcore.Page')), + ], + options={ + }, + bases=(models.Model,), + ), + ] diff --git a/wagtail/wagtailforms/migrations/__init__.py b/wagtail/wagtailforms/migrations/__init__.py new file mode 100644 index 0000000000..e69de29bb2 diff --git a/wagtail/wagtailimages/migrations/0001_initial.py b/wagtail/wagtailimages/migrations/0001_initial.py new file mode 100644 index 0000000000..0a72088d9b --- /dev/null +++ b/wagtail/wagtailimages/migrations/0001_initial.py @@ -0,0 +1,66 @@ +# -*- coding: utf-8 -*- +from __future__ import unicode_literals + +from django.db import models, migrations +import taggit.models +import wagtail.wagtailimages.models +import wagtail.wagtailimages.utils +import wagtail.wagtailadmin.taggable +from django.conf import settings +import taggit.managers + + +class Migration(migrations.Migration): + + dependencies = [ + ('taggit', '__latest__'), + migrations.swappable_dependency(settings.AUTH_USER_MODEL), + ] + + operations = [ + migrations.CreateModel( + name='Filter', + fields=[ + ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)), + ('spec', models.CharField(max_length=255, db_index=True)), + ], + options={ + }, + bases=(models.Model,), + ), + migrations.CreateModel( + name='Image', + fields=[ + ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)), + ('title', models.CharField(max_length=255, verbose_name='Title')), + ('file', models.ImageField(upload_to=wagtail.wagtailimages.models.get_upload_to, width_field=b'width', height_field=b'height', validators=[wagtail.wagtailimages.utils.validate_image_format], verbose_name='File')), + ('width', models.IntegerField(editable=False)), + ('height', models.IntegerField(editable=False)), + ('created_at', models.DateTimeField(auto_now_add=True)), + ('tags', taggit.managers.TaggableManager(to=taggit.models.Tag, through=taggit.models.TaggedItem, blank=True, help_text=None, verbose_name='Tags')), + ('uploaded_by_user', models.ForeignKey(blank=True, editable=False, to=settings.AUTH_USER_MODEL, null=True)), + ], + options={ + 'abstract': False, + }, + bases=(models.Model, wagtail.wagtailadmin.taggable.TagSearchable), + ), + migrations.CreateModel( + name='Rendition', + fields=[ + ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)), + ('file', models.ImageField(height_field=b'height', width_field=b'width', upload_to=b'images')), + ('width', models.IntegerField(editable=False)), + ('height', models.IntegerField(editable=False)), + ('filter', models.ForeignKey(to='wagtailimages.Filter')), + ('image', models.ForeignKey(to='wagtailimages.Image')), + ], + options={ + }, + bases=(models.Model,), + ), + migrations.AlterUniqueTogether( + name='rendition', + unique_together=set([(b'image', b'filter')]), + ), + ] diff --git a/wagtail/wagtailimages/migrations/__init__.py b/wagtail/wagtailimages/migrations/__init__.py new file mode 100644 index 0000000000..e69de29bb2 diff --git a/wagtail/wagtailredirects/migrations/0001_initial.py b/wagtail/wagtailredirects/migrations/0001_initial.py new file mode 100644 index 0000000000..5fb2680207 --- /dev/null +++ b/wagtail/wagtailredirects/migrations/0001_initial.py @@ -0,0 +1,28 @@ +# -*- coding: utf-8 -*- +from __future__ import unicode_literals + +from django.db import models, migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ('wagtailcore', '0001_initial'), + ] + + operations = [ + migrations.CreateModel( + name='Redirect', + fields=[ + ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)), + ('old_path', models.CharField(unique=True, max_length=255, verbose_name='Redirect from', db_index=True)), + ('is_permanent', models.BooleanField(default=True, help_text="Recommended. Permanent redirects ensure search engines forget the old page (the 'Redirect from') and index the new page instead.", verbose_name='Permanent')), + ('redirect_link', models.URLField(verbose_name='Redirect to any URL', blank=True)), + ('redirect_page', models.ForeignKey(verbose_name='Redirect to a page', blank=True, to='wagtailcore.Page', null=True)), + ('site', models.ForeignKey(blank=True, editable=False, to='wagtailcore.Site', null=True)), + ], + options={ + }, + bases=(models.Model,), + ), + ] diff --git a/wagtail/wagtailredirects/migrations/__init__.py b/wagtail/wagtailredirects/migrations/__init__.py new file mode 100644 index 0000000000..e69de29bb2 diff --git a/wagtail/wagtailsearch/migrations/0001_initial.py b/wagtail/wagtailsearch/migrations/0001_initial.py new file mode 100644 index 0000000000..ccf27a376d --- /dev/null +++ b/wagtail/wagtailsearch/migrations/0001_initial.py @@ -0,0 +1,59 @@ +# -*- coding: utf-8 -*- +from __future__ import unicode_literals + +from django.db import models, migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ('wagtailcore', '0001_initial'), + ] + + operations = [ + migrations.CreateModel( + name='EditorsPick', + fields=[ + ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)), + ('sort_order', models.IntegerField(null=True, editable=False, blank=True)), + ('description', models.TextField(blank=True)), + ('page', models.ForeignKey(to='wagtailcore.Page')), + ], + options={ + 'ordering': (b'sort_order',), + }, + bases=(models.Model,), + ), + migrations.CreateModel( + name='Query', + fields=[ + ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)), + ('query_string', models.CharField(unique=True, max_length=255)), + ], + options={ + }, + bases=(models.Model,), + ), + migrations.AddField( + model_name='editorspick', + name='query', + field=models.ForeignKey(to='wagtailsearch.Query'), + preserve_default=True, + ), + migrations.CreateModel( + name='QueryDailyHits', + fields=[ + ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)), + ('date', models.DateField()), + ('hits', models.IntegerField(default=0)), + ('query', models.ForeignKey(to='wagtailsearch.Query')), + ], + options={ + }, + bases=(models.Model,), + ), + migrations.AlterUniqueTogether( + name='querydailyhits', + unique_together=set([(b'query', b'date')]), + ), + ] diff --git a/wagtail/wagtailsearch/migrations/__init__.py b/wagtail/wagtailsearch/migrations/__init__.py new file mode 100644 index 0000000000..e69de29bb2 diff --git a/wagtail/wagtailusers/migrations/0001_initial.py b/wagtail/wagtailusers/migrations/0001_initial.py new file mode 100644 index 0000000000..6855c6c576 --- /dev/null +++ b/wagtail/wagtailusers/migrations/0001_initial.py @@ -0,0 +1,28 @@ +# -*- coding: utf-8 -*- +from __future__ import unicode_literals + +from django.db import models, migrations +from django.conf import settings + + +class Migration(migrations.Migration): + + dependencies = [ + migrations.swappable_dependency(settings.AUTH_USER_MODEL), + ] + + operations = [ + migrations.CreateModel( + name='UserProfile', + fields=[ + ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)), + ('submitted_notifications', models.BooleanField(default=True, help_text='Receive notification when a page is submitted for moderation')), + ('approved_notifications', models.BooleanField(default=True, help_text='Receive notification when your page edit is approved')), + ('rejected_notifications', models.BooleanField(default=True, help_text='Receive notification when your page edit is rejected')), + ('user', models.OneToOneField(to=settings.AUTH_USER_MODEL)), + ], + options={ + }, + bases=(models.Model,), + ), + ] diff --git a/wagtail/wagtailusers/migrations/__init__.py b/wagtail/wagtailusers/migrations/__init__.py new file mode 100644 index 0000000000..e69de29bb2 From 78643d40cdbb0ed289a478e1afd5455925c65759 Mon Sep 17 00:00:00 2001 From: Karl Hobley Date: Wed, 23 Jul 2014 12:21:08 +0100 Subject: [PATCH 014/210] Created initial data migrations --- .../0001_create_admin_access_permissions.py | 41 +++++++++ wagtail/wagtailadmin/migrations/__init__.py | 0 .../migrations/0002_initial_data.py | 91 +++++++++++++++++++ .../migrations/0002_initial_data.py | 52 +++++++++++ .../migrations/0002_initial_data.py | 52 +++++++++++ 5 files changed, 236 insertions(+) create mode 100644 wagtail/wagtailadmin/migrations/0001_create_admin_access_permissions.py create mode 100644 wagtail/wagtailadmin/migrations/__init__.py create mode 100644 wagtail/wagtailcore/migrations/0002_initial_data.py create mode 100644 wagtail/wagtaildocs/migrations/0002_initial_data.py create mode 100644 wagtail/wagtailimages/migrations/0002_initial_data.py diff --git a/wagtail/wagtailadmin/migrations/0001_create_admin_access_permissions.py b/wagtail/wagtailadmin/migrations/0001_create_admin_access_permissions.py new file mode 100644 index 0000000000..5f198a01df --- /dev/null +++ b/wagtail/wagtailadmin/migrations/0001_create_admin_access_permissions.py @@ -0,0 +1,41 @@ +# -*- coding: utf-8 -*- +from __future__ import unicode_literals + +from django.db import models, migrations + + +def create_admin_access_permissions(apps, schema_editor): + ContentType = apps.get_model('contenttypes.ContentType') + Permission = apps.get_model('auth.Permission') + Group = apps.get_model('auth.Group') + + # Add a fake content type to hang the 'can access Wagtail admin' permission off. + # The fact that this doesn't correspond to an actual defined model shouldn't matter, I hope... + wagtailadmin_content_type = ContentType.objects.create( + app_label='wagtailadmin', + model='admin', + name='Wagtail admin' + ) + + # Create admin permission + admin_permission = Permission.objects.create( + content_type=wagtailadmin_content_type, + codename='access_admin', + name='Can access Wagtail admin' + ) + + # Assign it to Editors and Moderators groups + for group in Group.objects.filter(name__in=['Editors', 'Moderators']): + group.permissions.add(admin_permission) + + +class Migration(migrations.Migration): + + dependencies = [ + # Need to run wagtailcores initial data migration to make sure the groups are created + ('wagtailcore', '0002_initial_data'), + ] + + operations = [ + migrations.RunPython(create_admin_access_permissions), + ] diff --git a/wagtail/wagtailadmin/migrations/__init__.py b/wagtail/wagtailadmin/migrations/__init__.py new file mode 100644 index 0000000000..e69de29bb2 diff --git a/wagtail/wagtailcore/migrations/0002_initial_data.py b/wagtail/wagtailcore/migrations/0002_initial_data.py new file mode 100644 index 0000000000..10244c24c0 --- /dev/null +++ b/wagtail/wagtailcore/migrations/0002_initial_data.py @@ -0,0 +1,91 @@ +# -*- coding: utf-8 -*- +from __future__ import unicode_literals + +from django.db import models, migrations + + +def initial_data(apps, schema_editor): + ContentType = apps.get_model('contenttypes.ContentType') + Group = apps.get_model('auth.Group') + Page = apps.get_model('wagtailcore.Page') + Site = apps.get_model('wagtailcore.Site') + GroupPagePermission = apps.get_model('wagtailcore.GroupPagePermission') + + # Create page content type + page_content_type, created = ContentType.objects.get_or_create( + model='page', + app_label='wagtailcore', + defaults={'name': 'page'} + ) + + # Create root page + root = Page.objects.create( + title="Root", + slug='root', + content_type=page_content_type, + path='0001', + depth=1, + numchild=1, + url_path='/', + ) + + # Create homepage + homepage = Page.objects.create( + title="Welcome to your new Wagtail site!", + slug='home', + content_type=page_content_type, + path='00010001', + depth=2, + numchild=0, + url_path='/home/', + ) + + # Create default site + Site.objects.create( + hostname='localhost', + root_page_id=homepage.id, + is_default_site=True + ) + + # Create auth groups + moderators_group = Group.objects.create(name='Moderators') + editors_group = Group.objects.create(name='Editors') + + # Create group permissions + GroupPagePermission.objects.create( + group=moderators_group, + page=root, + permission_type='add', + ) + GroupPagePermission.objects.create( + group=moderators_group, + page=root, + permission_type='edit', + ) + GroupPagePermission.objects.create( + group=moderators_group, + page=root, + permission_type='publish', + ) + + GroupPagePermission.objects.create( + group=editors_group, + page=root, + permission_type='add', + ) + GroupPagePermission.objects.create( + group=editors_group, + page=root, + permission_type='edit', + ) + + +class Migration(migrations.Migration): + + dependencies = [ + ('wagtailcore', '0001_initial'), + ] + + operations = [ + migrations.RunPython(initial_data), + ] diff --git a/wagtail/wagtaildocs/migrations/0002_initial_data.py b/wagtail/wagtaildocs/migrations/0002_initial_data.py new file mode 100644 index 0000000000..6ca3a0fbd8 --- /dev/null +++ b/wagtail/wagtaildocs/migrations/0002_initial_data.py @@ -0,0 +1,52 @@ +# -*- coding: utf-8 -*- +from __future__ import unicode_literals + +from django.db import models, migrations + + +def add_document_permissions_to_admin_groups(apps, schema_editor): + ContentType = apps.get_model('contenttypes.ContentType') + Permission = apps.get_model('auth.Permission') + Group = apps.get_model('auth.Group') + Document = apps.get_model('wagtaildocs.Document') + + # Get document permissions + document_content_type, _created = ContentType.objects.get_or_create( + model='document', + app_label='wagtaildocs', + defaults={'name': 'document'} + ) + + add_document_permission, _created = Permission.objects.get_or_create( + content_type=document_content_type, + codename='add_document', + defaults={'name': 'Can add document'} + ) + change_document_permission, _created = Permission.objects.get_or_create( + content_type=document_content_type, + codename='change_document', + defaults={'name': 'Can change document'} + ) + delete_document_permission, _created = Permission.objects.get_or_create( + content_type=document_content_type, + codename='delete_document', + defaults={'name': 'Can delete document'} + ) + + # Assign it to Editors and Moderators groups + for group in Group.objects.filter(name__in=['Editors', 'Moderators']): + group.permissions.add(add_document_permission, change_document_permission, delete_document_permission) + + +class Migration(migrations.Migration): + + dependencies = [ + ('wagtaildocs', '0001_initial'), + + # Need to run wagtailcores initial data migration to make sure the groups are created + ('wagtailcore', '0002_initial_data'), + ] + + operations = [ + migrations.RunPython(add_document_permissions_to_admin_groups), + ] diff --git a/wagtail/wagtailimages/migrations/0002_initial_data.py b/wagtail/wagtailimages/migrations/0002_initial_data.py new file mode 100644 index 0000000000..7451ba7d73 --- /dev/null +++ b/wagtail/wagtailimages/migrations/0002_initial_data.py @@ -0,0 +1,52 @@ +# -*- coding: utf-8 -*- +from __future__ import unicode_literals + +from django.db import models, migrations + + +def add_image_permissions_to_admin_groups(apps, schema_editor): + ContentType = apps.get_model('contenttypes.ContentType') + Permission = apps.get_model('auth.Permission') + Group = apps.get_model('auth.Group') + Image = apps.get_model('wagtailimages.Image') + + # Get image permissions + image_content_type, _created = ContentType.objects.get_or_create( + model='image', + app_label='wagtailimages', + defaults={'name': 'image'} + ) + + add_image_permission, _created = Permission.objects.get_or_create( + content_type=image_content_type, + codename='add_image', + defaults={'name': 'Can add image'} + ) + change_image_permission, _created = Permission.objects.get_or_create( + content_type=image_content_type, + codename='change_image', + defaults={'name': 'Can change image'} + ) + delete_image_permission, _created = Permission.objects.get_or_create( + content_type=image_content_type, + codename='delete_image', + defaults={'name': 'Can delete image'} + ) + + # Assign it to Editors and Moderators groups + for group in Group.objects.filter(name__in=['Editors', 'Moderators']): + group.permissions.add(add_image_permission, change_image_permission, delete_image_permission) + + +class Migration(migrations.Migration): + + dependencies = [ + ('wagtailimages', '0001_initial'), + + # Need to run wagtailcores initial data migration to make sure the groups are created + ('wagtailcore', '0002_initial_data'), + ] + + operations = [ + migrations.RunPython(add_image_permissions_to_admin_groups), + ] From 0e2b621d39b3b54725d92ae20ad755f486a3a2a3 Mon Sep 17 00:00:00 2001 From: Karl Hobley Date: Wed, 23 Jul 2014 13:12:01 +0100 Subject: [PATCH 015/210] Added Django 1.7 support into Elasticsearch query building --- .../wagtailsearch/backends/elasticsearch.py | 219 ++++++++++-------- 1 file changed, 120 insertions(+), 99 deletions(-) diff --git a/wagtail/wagtailsearch/backends/elasticsearch.py b/wagtail/wagtailsearch/backends/elasticsearch.py index 8f8a78dbbc..9e0d9b6122 100644 --- a/wagtail/wagtailsearch/backends/elasticsearch.py +++ b/wagtail/wagtailsearch/backends/elasticsearch.py @@ -5,7 +5,13 @@ import json from six.moves.urllib.parse import urlparse from django.db import models -from django.db.models.sql.where import SubqueryConstraint +from django.db.models.sql.where import SubqueryConstraint, WhereNode + +# Django 1.7 lookups +try: + from django.db.models.lookups import Lookup +except ImportError: + Lookup = None from elasticsearch import Elasticsearch, NotFoundError, RequestError from elasticsearch.helpers import bulk @@ -125,118 +131,133 @@ class ElasticSearchQuery(object): self.query_string = query_string self.fields = fields + def _process_lookup(self, field_attname, lookup, value): + # Get field + field = dict( + (field.get_attname(self.queryset.model), field) + for field in self.queryset.model.get_filterable_search_fields() + ).get(field_attname, None) + + # Give error if the field doesn't exist + if field is None: + raise FieldError('Cannot filter ElasticSearch results with field "' + field_name + '". Please add FilterField(\'' + field_name + '\') to ' + self.queryset.model.__name__ + '.search_fields.') + + # Get the name of the field in the index + field_index_name = field.get_index_name(self.queryset.model) + + if lookup == 'exact': + if value is None: + return { + 'missing': { + 'field': field_index_name, + } + } + else: + return { + 'term': { + field_index_name: value, + } + } + + if lookup == 'isnull': + if value: + return { + 'missing': { + 'field': field_index_name, + } + } + else: + return { + 'not': { + 'missing': { + 'field': field_index_name, + } + } + } + + if lookup in ['startswith', 'prefix']: + return { + 'prefix': { + field_index_name: value, + } + } + + if lookup in ['gt', 'gte', 'lt', 'lte']: + return { + 'range': { + field_index_name: { + lookup: value, + } + } + } + + if lookup == 'range': + lower, upper = value + + return { + 'range': { + field_index_name: { + 'gte': lower, + 'lte': upper, + } + } + } + + if lookup == 'in': + return { + 'terms': { + field_index_name: value, + } + } + + raise FilterError('Could not apply filter on ElasticSearch results: "' + field_name + '__' + lookup + ' = ' + unicode(value) + '". Lookup "' + lookup + '"" not recognosed.') + def _get_filters_from_where(self, where_node): # Check if this is a leaf node - if isinstance(where_node, tuple): - field_name = where_node[0].col + if isinstance(where_node, tuple): # Django 1.6 and below + field_attname = where_node[0].col lookup = where_node[1] value = where_node[3] - # Get field - field = dict( - (field.get_attname(self.queryset.model), field) - for field in self.queryset.model.get_filterable_search_fields() - ).get(field_name, None) + # Process the filter + return self._process_lookup(field_attname, lookup, value) - # Give error if the field doesn't exist - if field is None: - raise FieldError('Cannot filter ElasticSearch results with field "' + field_name + '". Please add FilterField(\'' + field_name + '\') to ' + self.queryset.model.__name__ + '.search_fields.') + elif Lookup is not None and isinstance(where_node, Lookup): # Django 1.7 and above + field_attname = where_node.lhs.target.attname + lookup = where_node.lookup_name + value = where_node.rhs - # Get the name of the field in the index - field_index_name = field.get_index_name(self.queryset.model) + # Process the filter + return self._process_lookup(field_attname, lookup, value) - # Find lookup - if lookup == 'exact': - if value is None: - return { - 'missing': { - 'field': field_index_name, - } - } - else: - return { - 'term': { - field_index_name: value, - } - } - - if lookup == 'isnull': - if value: - return { - 'missing': { - 'field': field_index_name, - } - } - else: - return { - 'not': { - 'missing': { - 'field': field_index_name, - } - } - } - - if lookup in ['startswith', 'prefix']: - return { - 'prefix': { - field_index_name: value, - } - } - - if lookup in ['gt', 'gte', 'lt', 'lte']: - return { - 'range': { - field_index_name: { - lookup: value, - } - } - } - - if lookup == 'range': - lower, upper = value - - return { - 'range': { - field_index_name: { - 'gte': lower, - 'lte': upper, - } - } - } - - if lookup == 'in': - return { - 'terms': { - field_index_name: value, - } - } - - raise FilterError('Could not apply filter on ElasticSearch results: "' + field_name + '__' + lookup + ' = ' + unicode(value) + '". Lookup "' + lookup + '"" not recognosed.') elif isinstance(where_node, SubqueryConstraint): raise FilterError('Could not apply filter on ElasticSearch results: Subqueries are not allowed.') - # Get child filters - connector = where_node.connector - child_filters = [self._get_filters_from_where(child) for child in where_node.children] - child_filters = [child_filter for child_filter in child_filters if child_filter] + elif isinstance(where_node, WhereNode): + # Get child filters + connector = where_node.connector + child_filters = [self._get_filters_from_where(child) for child in where_node.children] + child_filters = [child_filter for child_filter in child_filters if child_filter] - # Connect them - if child_filters: - if len(child_filters) == 1: - filter_out = child_filters[0] - else: - filter_out = { - connector.lower(): [ - fil for fil in child_filters if fil is not None - ] - } + # Connect them + if child_filters: + if len(child_filters) == 1: + filter_out = child_filters[0] + else: + filter_out = { + connector.lower(): [ + fil for fil in child_filters if fil is not None + ] + } - if where_node.negated: - filter_out = { - 'not': filter_out - } + if where_node.negated: + filter_out = { + 'not': filter_out + } - return filter_out + return filter_out + else: + raise FilterError('Could not apply filter on ElasticSearch results: Unknown where node: ' + str(type(where_node))) def _get_filters(self): # Filters From b7901aa026fe15b98ba3ab0e8799f8b50878485a Mon Sep 17 00:00:00 2001 From: Karl Hobley Date: Wed, 23 Jul 2014 13:16:11 +0100 Subject: [PATCH 016/210] Fixed test failure --- wagtail/tests/settings.py | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/wagtail/tests/settings.py b/wagtail/tests/settings.py index 444baca659..32426dba64 100644 --- a/wagtail/tests/settings.py +++ b/wagtail/tests/settings.py @@ -81,6 +81,13 @@ if django.VERSION[:2] == (1, 6): INSTALLED_APPS.append('south') +# As we don't have south migrations for tests, South thinks +# the Django 1.7 migrations are South migrations. +SOUTH_MIGRATION_MODULES = { + 'tests': 'ignore', +} + + # Using DatabaseCache to make sure that the cache is cleared between tests. # This prevents false-positives in some wagtail core tests where we are # changing the 'wagtail_root_paths' key which may cause future tests to fail. From d817396e2bc0bdf55552906b10a8aa0b14acdf9a Mon Sep 17 00:00:00 2001 From: Karl Hobley Date: Wed, 23 Jul 2014 13:17:46 +0100 Subject: [PATCH 017/210] Allow Django 1.7 to be installed in setup.py --- setup.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/setup.py b/setup.py index b591bbc71e..bf9a35500f 100644 --- a/setup.py +++ b/setup.py @@ -23,7 +23,7 @@ PY3 = sys.version_info[0] == 3 install_requires = [ - "Django>=1.6.2,<1.7", + "Django>=1.6.2,<1.8", "South==1.0.0", "django-compressor>=1.4", "django-libsass>=0.2", From a7afdd52aab8675f72979c54d8d233bebc48f616 Mon Sep 17 00:00:00 2001 From: Karl Hobley Date: Wed, 23 Jul 2014 13:36:03 +0100 Subject: [PATCH 018/210] Catch LookupError when finding target model in PageChooserPanel --- wagtail/wagtailadmin/edit_handlers.py | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/wagtail/wagtailadmin/edit_handlers.py b/wagtail/wagtailadmin/edit_handlers.py index d2eb181c39..3e463523d4 100644 --- a/wagtail/wagtailadmin/edit_handlers.py +++ b/wagtail/wagtailadmin/edit_handlers.py @@ -491,7 +491,11 @@ class BasePageChooserPanel(BaseChooserPanel): except ValueError: raise ImproperlyConfigured("The page_type passed to PageChooserPanel must be of the form 'app_label.model_name'") - page_type = get_model(app_label, model_name) + try: + page_type = get_model(app_label, model_name) + except LookupError: + page_type = None + if page_type is None: raise ImproperlyConfigured("PageChooserPanel refers to model '%s' that has not been installed" % cls.page_type) else: From 26171746921102a3fe2b328d7cae7fee529baf86 Mon Sep 17 00:00:00 2001 From: Karl Hobley Date: Wed, 23 Jul 2014 14:48:42 +0100 Subject: [PATCH 019/210] Don't ignore DeprecationWarnings This was previously done for us in Django 1.6. But they reverted back to the default Python configuration to ignore these warnings causing a test to break https://github.com/django/django/commit/0c6a3399523d850cfbd20de54cd089419a47383d --- runtests.py | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/runtests.py b/runtests.py index 3a7399233e..7961d2e192 100755 --- a/runtests.py +++ b/runtests.py @@ -2,6 +2,7 @@ import sys import os import shutil +import warnings from django.core.management import execute_from_command_line @@ -12,6 +13,9 @@ os.environ['DJANGO_SETTINGS_MODULE'] = 'wagtail.tests.settings' def runtests(): + # Don't ignore DeprecationWarnings + warnings.simplefilter('default', DeprecationWarning) + argv = sys.argv[:1] + ['test'] + sys.argv[1:] try: execute_from_command_line(argv) From 10217a9e1840f65ea75a4047c02d3d4d19a327a6 Mon Sep 17 00:00:00 2001 From: Tom Talbot Date: Mon, 28 Jul 2014 10:05:58 +0100 Subject: [PATCH 020/210] Fixed broken edit handlers test --- .../wagtailadmin/tests/test_edit_handlers.py | 20 +++++++++++++++++-- 1 file changed, 18 insertions(+), 2 deletions(-) diff --git a/wagtail/wagtailadmin/tests/test_edit_handlers.py b/wagtail/wagtailadmin/tests/test_edit_handlers.py index 0dd699ac1d..eaedccc2cd 100644 --- a/wagtail/wagtailadmin/tests/test_edit_handlers.py +++ b/wagtail/wagtailadmin/tests/test_edit_handlers.py @@ -343,11 +343,27 @@ class TestInlinePanel(TestCase): fake_page = self.FakePage() self.barbecue = fake_page + class FakePanel(object): + name = 'mock panel' + + class FakeChild(object): + def render_js(self): + return "rendered js" + + def rendered_fields(self): + return ["rendered fields"] + + def init(*args, **kwargs): + pass + + def __call__(self, *args, **kwargs): + fake_child = self.FakeChild() + return fake_child + def setUp(self): self.fake_field = self.FakeField() self.fake_instance = self.FakeInstance() - self.mock_panel = MagicMock() - self.mock_panel.name = 'mock panel' + self.mock_panel = self.FakePanel() self.mock_model = MagicMock() self.mock_model.formset.related.model.panels = [self.mock_panel] From 8423c557be7c0bd46494291009fb2ccc69d68f76 Mon Sep 17 00:00:00 2001 From: Karl Hobley Date: Mon, 28 Jul 2014 13:29:03 +0100 Subject: [PATCH 021/210] Added AppConfig classes for all modules --- wagtail/contrib/wagtailfrontendcache/__init__.py | 1 + wagtail/contrib/wagtailfrontendcache/apps.py | 7 +++++++ wagtail/contrib/wagtailmedusa/__init__.py | 1 + wagtail/contrib/wagtailmedusa/apps.py | 7 +++++++ wagtail/contrib/wagtailroutablepage/__init__.py | 1 + wagtail/contrib/wagtailroutablepage/apps.py | 7 +++++++ wagtail/contrib/wagtailsitemaps/__init__.py | 1 + wagtail/contrib/wagtailsitemaps/apps.py | 7 +++++++ wagtail/contrib/wagtailstyleguide/__init__.py | 1 + wagtail/contrib/wagtailstyleguide/apps.py | 7 +++++++ wagtail/wagtailadmin/__init__.py | 1 + wagtail/wagtailadmin/apps.py | 7 +++++++ wagtail/wagtailcore/__init__.py | 1 + wagtail/wagtailcore/apps.py | 7 +++++++ wagtail/wagtaildocs/__init__.py | 1 + wagtail/wagtaildocs/apps.py | 7 +++++++ wagtail/wagtailembeds/__init__.py | 2 ++ wagtail/wagtailembeds/apps.py | 7 +++++++ wagtail/wagtailforms/__init__.py | 1 + wagtail/wagtailforms/apps.py | 7 +++++++ wagtail/wagtailimages/__init__.py | 1 + wagtail/wagtailimages/apps.py | 7 +++++++ wagtail/wagtailredirects/__init__.py | 1 + wagtail/wagtailredirects/apps.py | 7 +++++++ wagtail/wagtailsearch/__init__.py | 4 +++- wagtail/wagtailsearch/apps.py | 7 +++++++ wagtail/wagtailsnippets/__init__.py | 1 + wagtail/wagtailsnippets/apps.py | 7 +++++++ wagtail/wagtailusers/__init__.py | 1 + wagtail/wagtailusers/apps.py | 7 +++++++ 30 files changed, 123 insertions(+), 1 deletion(-) create mode 100644 wagtail/contrib/wagtailfrontendcache/apps.py create mode 100644 wagtail/contrib/wagtailmedusa/apps.py create mode 100644 wagtail/contrib/wagtailroutablepage/apps.py create mode 100644 wagtail/contrib/wagtailsitemaps/apps.py create mode 100644 wagtail/contrib/wagtailstyleguide/apps.py create mode 100644 wagtail/wagtailadmin/apps.py create mode 100644 wagtail/wagtailcore/apps.py create mode 100644 wagtail/wagtaildocs/apps.py create mode 100644 wagtail/wagtailembeds/apps.py create mode 100644 wagtail/wagtailforms/apps.py create mode 100644 wagtail/wagtailimages/apps.py create mode 100644 wagtail/wagtailredirects/apps.py create mode 100644 wagtail/wagtailsearch/apps.py create mode 100644 wagtail/wagtailsnippets/apps.py create mode 100644 wagtail/wagtailusers/apps.py diff --git a/wagtail/contrib/wagtailfrontendcache/__init__.py b/wagtail/contrib/wagtailfrontendcache/__init__.py index e69de29bb2..2cd2d60cb0 100644 --- a/wagtail/contrib/wagtailfrontendcache/__init__.py +++ b/wagtail/contrib/wagtailfrontendcache/__init__.py @@ -0,0 +1 @@ +default_app_config = 'wagtail.contrib.wagtailfrontendcache.apps.WagtailFrontendCacheAppConfig' diff --git a/wagtail/contrib/wagtailfrontendcache/apps.py b/wagtail/contrib/wagtailfrontendcache/apps.py new file mode 100644 index 0000000000..2fa34a0da9 --- /dev/null +++ b/wagtail/contrib/wagtailfrontendcache/apps.py @@ -0,0 +1,7 @@ +from django.apps import AppConfig + + +class WagtailFrontendCacheAppConfig(AppConfig): + name = 'wagtail.contrib.wagtailfrontendcache' + label = 'wagtailfrontendcache' + verbose_name = "Wagtail frontend cache" diff --git a/wagtail/contrib/wagtailmedusa/__init__.py b/wagtail/contrib/wagtailmedusa/__init__.py index e69de29bb2..5d5f8ce966 100644 --- a/wagtail/contrib/wagtailmedusa/__init__.py +++ b/wagtail/contrib/wagtailmedusa/__init__.py @@ -0,0 +1 @@ +default_app_config = 'wagtail.contrib.wagtailmedusa.apps.WagtailMedusaAppConfig' diff --git a/wagtail/contrib/wagtailmedusa/apps.py b/wagtail/contrib/wagtailmedusa/apps.py new file mode 100644 index 0000000000..46143d1374 --- /dev/null +++ b/wagtail/contrib/wagtailmedusa/apps.py @@ -0,0 +1,7 @@ +from django.apps import AppConfig + + +class WagtailMedusaAppConfig(AppConfig): + name = 'wagtail.contrib.wagtailmedusa' + label = 'wagtailmedusa' + verbose_name = "Wagtail medusa" diff --git a/wagtail/contrib/wagtailroutablepage/__init__.py b/wagtail/contrib/wagtailroutablepage/__init__.py index e69de29bb2..286151ff05 100644 --- a/wagtail/contrib/wagtailroutablepage/__init__.py +++ b/wagtail/contrib/wagtailroutablepage/__init__.py @@ -0,0 +1 @@ +default_app_config = 'wagtail.contrib.wagtailroutablepage.apps.WagtailRoutablePageAppConfig' diff --git a/wagtail/contrib/wagtailroutablepage/apps.py b/wagtail/contrib/wagtailroutablepage/apps.py new file mode 100644 index 0000000000..c3b9c9573a --- /dev/null +++ b/wagtail/contrib/wagtailroutablepage/apps.py @@ -0,0 +1,7 @@ +from django.apps import AppConfig + + +class WagtailRoutablePageAppConfig(AppConfig): + name = 'wagtail.contrib.wagtailroutablepage' + label = 'wagtailroutablepage' + verbose_name = "Wagtail routablepage" diff --git a/wagtail/contrib/wagtailsitemaps/__init__.py b/wagtail/contrib/wagtailsitemaps/__init__.py index e69de29bb2..e647b7be1a 100644 --- a/wagtail/contrib/wagtailsitemaps/__init__.py +++ b/wagtail/contrib/wagtailsitemaps/__init__.py @@ -0,0 +1 @@ +default_app_config = 'wagtail.contrib.wagtailsitemaps.apps.WagtailSitemapsAppConfig' diff --git a/wagtail/contrib/wagtailsitemaps/apps.py b/wagtail/contrib/wagtailsitemaps/apps.py new file mode 100644 index 0000000000..d8b249a2aa --- /dev/null +++ b/wagtail/contrib/wagtailsitemaps/apps.py @@ -0,0 +1,7 @@ +from django.apps import AppConfig + + +class WagtailSitemapsAppConfig(AppConfig): + name = 'wagtail.contrib.wagtailsitemaps' + label = 'wagtailsitemaps' + verbose_name = "Wagtail sitemaps" diff --git a/wagtail/contrib/wagtailstyleguide/__init__.py b/wagtail/contrib/wagtailstyleguide/__init__.py index e69de29bb2..18ff63cfe2 100644 --- a/wagtail/contrib/wagtailstyleguide/__init__.py +++ b/wagtail/contrib/wagtailstyleguide/__init__.py @@ -0,0 +1 @@ +default_app_config = 'wagtail.contrib.wagtailstyleguide.apps.WagtailStyleGuideAppConfig' diff --git a/wagtail/contrib/wagtailstyleguide/apps.py b/wagtail/contrib/wagtailstyleguide/apps.py new file mode 100644 index 0000000000..093003ac85 --- /dev/null +++ b/wagtail/contrib/wagtailstyleguide/apps.py @@ -0,0 +1,7 @@ +from django.apps import AppConfig + + +class WagtailStyleGuideAppConfig(AppConfig): + name = 'wagtail.contrib.wagtailstyleguide' + label = 'wagtailstyleguide' + verbose_name = "Wagtail style guide" diff --git a/wagtail/wagtailadmin/__init__.py b/wagtail/wagtailadmin/__init__.py index e69de29bb2..c0779fd931 100644 --- a/wagtail/wagtailadmin/__init__.py +++ b/wagtail/wagtailadmin/__init__.py @@ -0,0 +1 @@ +default_app_config = 'wagtail.wagtailadmin.apps.WagtailAdminAppConfig' diff --git a/wagtail/wagtailadmin/apps.py b/wagtail/wagtailadmin/apps.py new file mode 100644 index 0000000000..c963dadef3 --- /dev/null +++ b/wagtail/wagtailadmin/apps.py @@ -0,0 +1,7 @@ +from django.apps import AppConfig + + +class WagtailAdminAppConfig(AppConfig): + name = 'wagtail.wagtailadmin' + label = 'wagtailadmin' + verbose_name = "Wagtail admin" diff --git a/wagtail/wagtailcore/__init__.py b/wagtail/wagtailcore/__init__.py index e69de29bb2..160f57430d 100644 --- a/wagtail/wagtailcore/__init__.py +++ b/wagtail/wagtailcore/__init__.py @@ -0,0 +1 @@ +default_app_config = 'wagtail.wagtailcore.apps.WagtailCoreAppConfig' diff --git a/wagtail/wagtailcore/apps.py b/wagtail/wagtailcore/apps.py new file mode 100644 index 0000000000..b4ef506dca --- /dev/null +++ b/wagtail/wagtailcore/apps.py @@ -0,0 +1,7 @@ +from django.apps import AppConfig + + +class WagtailCoreAppConfig(AppConfig): + name = 'wagtail.wagtailcore' + label = 'wagtailcore' + verbose_name = "Wagtail core" diff --git a/wagtail/wagtaildocs/__init__.py b/wagtail/wagtaildocs/__init__.py index e69de29bb2..9c5f852400 100644 --- a/wagtail/wagtaildocs/__init__.py +++ b/wagtail/wagtaildocs/__init__.py @@ -0,0 +1 @@ +default_app_config = 'wagtail.wagtaildocs.apps.WagtailDocsAppConfig' diff --git a/wagtail/wagtaildocs/apps.py b/wagtail/wagtaildocs/apps.py new file mode 100644 index 0000000000..eef820d18e --- /dev/null +++ b/wagtail/wagtaildocs/apps.py @@ -0,0 +1,7 @@ +from django.apps import AppConfig + + +class WagtailDocsAppConfig(AppConfig): + name = 'wagtail.wagtaildocs' + label = 'wagtaildocs' + verbose_name = "Wagtail documents" diff --git a/wagtail/wagtailembeds/__init__.py b/wagtail/wagtailembeds/__init__.py index b75cbc491d..54d9556086 100644 --- a/wagtail/wagtailembeds/__init__.py +++ b/wagtail/wagtailembeds/__init__.py @@ -1,2 +1,4 @@ from .models import Embed from .embeds import get_embed + +default_app_config = 'wagtail.wagtailembeds.apps.WagtailEmbedsAppConfig' diff --git a/wagtail/wagtailembeds/apps.py b/wagtail/wagtailembeds/apps.py new file mode 100644 index 0000000000..ecbaf6cb50 --- /dev/null +++ b/wagtail/wagtailembeds/apps.py @@ -0,0 +1,7 @@ +from django.apps import AppConfig + + +class WagtailEmbedsAppConfig(AppConfig): + name = 'wagtail.wagtailembeds' + label = 'wagtailembeds' + verbose_name = "Wagtail embeds" diff --git a/wagtail/wagtailforms/__init__.py b/wagtail/wagtailforms/__init__.py index e69de29bb2..7be37b5f1c 100644 --- a/wagtail/wagtailforms/__init__.py +++ b/wagtail/wagtailforms/__init__.py @@ -0,0 +1 @@ +default_app_config = 'wagtail.wagtailforms.apps.WagtailFormsAppConfig' diff --git a/wagtail/wagtailforms/apps.py b/wagtail/wagtailforms/apps.py new file mode 100644 index 0000000000..7336f20e00 --- /dev/null +++ b/wagtail/wagtailforms/apps.py @@ -0,0 +1,7 @@ +from django.apps import AppConfig + + +class WagtailFormsAppConfig(AppConfig): + name = 'wagtail.wagtailforms' + label = 'wagtailforms' + verbose_name = "Wagtail forms" diff --git a/wagtail/wagtailimages/__init__.py b/wagtail/wagtailimages/__init__.py index e69de29bb2..61397a9116 100644 --- a/wagtail/wagtailimages/__init__.py +++ b/wagtail/wagtailimages/__init__.py @@ -0,0 +1 @@ +default_app_config = 'wagtail.wagtailimages.apps.WagtailImagesAppConfig' diff --git a/wagtail/wagtailimages/apps.py b/wagtail/wagtailimages/apps.py new file mode 100644 index 0000000000..88cd6e3f03 --- /dev/null +++ b/wagtail/wagtailimages/apps.py @@ -0,0 +1,7 @@ +from django.apps import AppConfig + + +class WagtailImagesAppConfig(AppConfig): + name = 'wagtail.wagtailimages' + label = 'wagtailimages' + verbose_name = "Wagtail images" diff --git a/wagtail/wagtailredirects/__init__.py b/wagtail/wagtailredirects/__init__.py index e69de29bb2..b192b1b243 100644 --- a/wagtail/wagtailredirects/__init__.py +++ b/wagtail/wagtailredirects/__init__.py @@ -0,0 +1 @@ +default_app_config = 'wagtail.wagtailredirects.apps.WagtailRedirectsAppConfig' diff --git a/wagtail/wagtailredirects/apps.py b/wagtail/wagtailredirects/apps.py new file mode 100644 index 0000000000..400299f027 --- /dev/null +++ b/wagtail/wagtailredirects/apps.py @@ -0,0 +1,7 @@ +from django.apps import AppConfig + + +class WagtailRedirectsAppConfig(AppConfig): + name = 'wagtail.wagtailredirects' + label = 'wagtailredirects' + verbose_name = "Wagtail redirects" diff --git a/wagtail/wagtailsearch/__init__.py b/wagtail/wagtailsearch/__init__.py index ed896f4451..8f53f7c4a2 100644 --- a/wagtail/wagtailsearch/__init__.py +++ b/wagtail/wagtailsearch/__init__.py @@ -1,3 +1,5 @@ from wagtail.wagtailsearch.indexed import Indexed from wagtail.wagtailsearch.signal_handlers import register_signal_handlers -from wagtail.wagtailsearch.backends import get_search_backend \ No newline at end of file +from wagtail.wagtailsearch.backends import get_search_backend + +default_app_config = 'wagtail.wagtailsearch.apps.WagtailSearchAppConfig' diff --git a/wagtail/wagtailsearch/apps.py b/wagtail/wagtailsearch/apps.py new file mode 100644 index 0000000000..e3b07c7210 --- /dev/null +++ b/wagtail/wagtailsearch/apps.py @@ -0,0 +1,7 @@ +from django.apps import AppConfig + + +class WagtailSearchAppConfig(AppConfig): + name = 'wagtail.wagtailsearch' + label = 'wagtailsearch' + verbose_name = "Wagtail search" diff --git a/wagtail/wagtailsnippets/__init__.py b/wagtail/wagtailsnippets/__init__.py index e69de29bb2..4b8d21cd75 100644 --- a/wagtail/wagtailsnippets/__init__.py +++ b/wagtail/wagtailsnippets/__init__.py @@ -0,0 +1 @@ +default_app_config = 'wagtail.wagtailsnippets.apps.WagtailSnippetsAppConfig' diff --git a/wagtail/wagtailsnippets/apps.py b/wagtail/wagtailsnippets/apps.py new file mode 100644 index 0000000000..f63d407599 --- /dev/null +++ b/wagtail/wagtailsnippets/apps.py @@ -0,0 +1,7 @@ +from django.apps import AppConfig + + +class WagtailSnippetsAppConfig(AppConfig): + name = 'wagtail.wagtailsnippets' + label = 'wagtailsnippets' + verbose_name = "Wagtail snippets" diff --git a/wagtail/wagtailusers/__init__.py b/wagtail/wagtailusers/__init__.py index e69de29bb2..088b3cb696 100644 --- a/wagtail/wagtailusers/__init__.py +++ b/wagtail/wagtailusers/__init__.py @@ -0,0 +1 @@ +default_app_config = 'wagtail.wagtailusers.apps.WagtailUsersAppConfig' diff --git a/wagtail/wagtailusers/apps.py b/wagtail/wagtailusers/apps.py new file mode 100644 index 0000000000..055e18d99a --- /dev/null +++ b/wagtail/wagtailusers/apps.py @@ -0,0 +1,7 @@ +from django.apps import AppConfig + + +class WagtailUsersAppConfig(AppConfig): + name = 'wagtail.wagtailusers' + label = 'wagtailusers' + verbose_name = "Wagtail users" From 43ebd845b698351f93fd54373396bea50d2948c3 Mon Sep 17 00:00:00 2001 From: Karl Hobley Date: Mon, 28 Jul 2014 15:01:21 +0100 Subject: [PATCH 022/210] Added Django 1.7 to tox settings. Use tox on travis --- .travis.yml | 31 +++++++---- tox.ini | 154 ++++++++++++++++++++++++++++++++++++++++++++++++++-- 2 files changed, 170 insertions(+), 15 deletions(-) diff --git a/.travis.yml b/.travis.yml index 326c22d015..f54d1392ec 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,29 +1,38 @@ language: python -# Test matrix -python: - - 2.7 - - 3.2 - - 3.4 env: - - DJANGO_VERSION=Django==1.6.5 - #- DJANGO_VERSION=Django==1.7.0 +# - TOXENV=py26-dj16-postgres + - TOXENV=py26-dj16-sqlite + - TOXENV=py27-dj16-postgres +# - TOXENV=py27-dj16-sqlite + - TOXENV=py32-dj16-postgres +# - TOXENV=py33-dj16-postgres + - TOXENV=py34-dj16-postgres + - TOXENV=py27-dj17-postgres +# - TOXENV=py27-dj17-sqlite +# - TOXENV=py32-dj17-postgres +# - TOXENV=py33-dj17-postgres + - TOXENV=py34-dj17-postgres + # Services services: - redis-server - elasticsearch + # Package installation install: - - python setup.py install - - pip install psycopg2 elasticsearch wand embedly - - pip install coveralls + - pip install tox coveralls + # Pre-test configuration before_script: - psql -c 'create database wagtaildemo;' -U postgres + # Run the tests script: - coverage run runtests.py + tox + after_success: coveralls + # Who to notify about build results notifications: email: diff --git a/tox.ini b/tox.ini index 2b17c65baf..30632a2212 100644 --- a/tox.ini +++ b/tox.ini @@ -1,10 +1,39 @@ [deps] -dj16= - Django>=1.6,<1.7 +base = + South==1.0.0 + django-compressor>=1.4 + django-libsass>=0.2 + django-modelcluster>=0.3 + django-taggit==0.12.0 + django-treebeard==2.0 + Pillow>=2.3.0 + beautifulsoup4>=4.3.2 + html5lib==0.999 + Unidecode>=0.04.14 + six==1.7.3 + requests==2.3.0 elasticsearch==1.1.0 mock==1.0.1 + Embedly + coverage + +dj16 = + Django>=1.6,<1.7 + + +dj17 = + https://github.com/django/django/archive/stable/1.7.x.zip#egg=django + +py2 = + unicodecsv>=0.9.4 + +py3 = + [tox] +skipsdist = True +usedevelop = True + envlist = py26-dj16-postgres, py26-dj16-sqlite, @@ -12,7 +41,13 @@ envlist = py27-dj16-sqlite, py32-dj16-postgres, py33-dj16-postgres, - py34-dj16-postgres + py34-dj16-postgres, + + py27-dj17-postgres, + py27-dj17-sqlite, + py32-dj17-postgres, + py33-dj17-postgres, + py34-dj17-postgres # mysql not currently supported # (wagtail.wagtailimages.tests.TestImageEditView currently fails with a @@ -27,11 +62,13 @@ envlist = [testenv] -commands=./runtests.py +commands=coverage run runtests.py [testenv:py26-dj16-postgres] basepython=python2.6 deps = + {[deps]base} + {[deps]py2} {[deps]dj16} psycopg2==2.5.3 setenv = @@ -40,6 +77,8 @@ setenv = [testenv:py26-dj16-sqlite] basepython=python2.6 deps = + {[deps]base} + {[deps]py2} {[deps]dj16} setenv = DATABASE_ENGINE=django.db.backends.sqlite3 @@ -47,6 +86,8 @@ setenv = [testenv:py26-dj16-mysql] basepython=python2.6 deps = + {[deps]base} + {[deps]py2} {[deps]dj16} MySQL-python==1.2.5 setenv = @@ -56,6 +97,8 @@ setenv = [testenv:py27-dj16-postgres] basepython=python2.7 deps = + {[deps]base} + {[deps]py2} {[deps]dj16} psycopg2==2.5.3 setenv = @@ -64,6 +107,8 @@ setenv = [testenv:py27-dj16-sqlite] basepython=python2.7 deps = + {[deps]base} + {[deps]py2} {[deps]dj16} setenv = DATABASE_ENGINE=django.db.backends.sqlite3 @@ -71,6 +116,8 @@ setenv = [testenv:py27-dj16-mysql] basepython=python2.7 deps = + {[deps]base} + {[deps]py2} {[deps]dj16} MySQL-python==1.2.5 setenv = @@ -80,6 +127,8 @@ setenv = [testenv:py32-dj16-postgres] basepython=python3.2 deps = + {[deps]base} + {[deps]py3} {[deps]dj16} psycopg2==2.5.3 setenv = @@ -88,6 +137,8 @@ setenv = [testenv:py32-dj16-sqlite] basepython=python3.2 deps = + {[deps]base} + {[deps]py3} {[deps]dj16} setenv = DATABASE_ENGINE=django.db.backends.sqlite3 @@ -95,6 +146,8 @@ setenv = [testenv:py33-dj16-postgres] basepython=python3.3 deps = + {[deps]base} + {[deps]py3} {[deps]dj16} psycopg2==2.5.3 setenv = @@ -103,6 +156,8 @@ setenv = [testenv:py33-dj16-sqlite] basepython=python3.3 deps = + {[deps]base} + {[deps]py3} {[deps]dj16} setenv = DATABASE_ENGINE=django.db.backends.sqlite3 @@ -110,6 +165,8 @@ setenv = [testenv:py34-dj16-postgres] basepython=python3.4 deps = + {[deps]base} + {[deps]py3} {[deps]dj16} psycopg2==2.5.3 setenv = @@ -118,6 +175,95 @@ setenv = [testenv:py34-dj16-sqlite] basepython=python3.4 deps = + {[deps]base} + {[deps]py3} {[deps]dj16} setenv = DATABASE_ENGINE=django.db.backends.sqlite3 + +[testenv:py27-dj17-postgres] +basepython=python2.7 +deps = + {[deps]base} + {[deps]py2} + {[deps]dj17} + psycopg2==2.5.3 +setenv = + DATABASE_ENGINE=django.db.backends.postgresql_psycopg2 + +[testenv:py27-dj17-sqlite] +basepython=python2.7 +deps = + {[deps]base} + {[deps]py2} + {[deps]dj17} +setenv = + DATABASE_ENGINE=django.db.backends.sqlite3 + +[testenv:py27-dj17-mysql] +basepython=python2.7 +deps = + {[deps]base} + {[deps]py2} + {[deps]dj17} + MySQL-python==1.2.5 +setenv = + DATABASE_ENGINE=django.db.backends.mysql + DATABASE_USER=wagtail + +[testenv:py32-dj17-postgres] +basepython=python3.2 +deps = + {[deps]base} + {[deps]py3} + {[deps]dj17} + psycopg2==2.5.3 +setenv = + DATABASE_ENGINE=django.db.backends.postgresql_psycopg2 + +[testenv:py32-dj17-sqlite] +basepython=python3.2 +deps = + {[deps]base} + {[deps]py3} + {[deps]dj17} +setenv = + DATABASE_ENGINE=django.db.backends.sqlite3 + +[testenv:py33-dj17-postgres] +basepython=python3.3 +deps = + {[deps]base} + {[deps]py3} + {[deps]dj17} + psycopg2==2.5.3 +setenv = + DATABASE_ENGINE=django.db.backends.postgresql_psycopg2 + +[testenv:py33-dj17-sqlite] +basepython=python3.3 +deps = + {[deps]base} + {[deps]py3} + {[deps]dj17} +setenv = + DATABASE_ENGINE=django.db.backends.sqlite3 + +[testenv:py34-dj17-postgres] +basepython=python3.4 +deps = + {[deps]base} + {[deps]py3} + {[deps]dj17} + psycopg2==2.5.3 +setenv = + DATABASE_ENGINE=django.db.backends.postgresql_psycopg2 + +[testenv:py34-dj17-sqlite] +basepython=python3.4 +deps = + {[deps]base} + {[deps]py3} + {[deps]dj17} +setenv = + DATABASE_ENGINE=django.db.backends.sqlite3 From 9501662ead4b616e8a2502c85c7cc388afca70aa Mon Sep 17 00:00:00 2001 From: Karl Hobley Date: Mon, 28 Jul 2014 16:37:46 +0100 Subject: [PATCH 023/210] Updated tests migrations --- wagtail/tests/migrations/0001_initial.py | 290 +-------------- .../migrations/0002_auto_20140728_1636.py | 341 ++++++++++++++++++ 2 files changed, 355 insertions(+), 276 deletions(-) create mode 100644 wagtail/tests/migrations/0002_auto_20140728_1636.py diff --git a/wagtail/tests/migrations/0001_initial.py b/wagtail/tests/migrations/0001_initial.py index 9b6592118a..c1dd942f57 100644 --- a/wagtail/tests/migrations/0001_initial.py +++ b/wagtail/tests/migrations/0001_initial.py @@ -2,297 +2,35 @@ from __future__ import unicode_literals from django.db import models, migrations -import django.db.models.deletion -import wagtail.wagtailsearch.indexed -import modelcluster.fields -import wagtail.wagtailcore.fields +import django.utils.timezone class Migration(migrations.Migration): dependencies = [ - ('wagtailimages', '0001_initial'), - ('wagtailcore', '0001_initial'), - ('wagtaildocs', '__latest__'), + ('auth', '0001_initial'), ] operations = [ migrations.CreateModel( - name='Advert', + name='CustomUser', fields=[ ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)), - ('url', models.URLField(null=True, blank=True)), - ('text', models.CharField(max_length=255)), - ], - options={ - }, - bases=(models.Model,), - ), - migrations.CreateModel( - name='AlphaSnippet', - fields=[ - ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)), - ('text', models.CharField(max_length=255)), - ], - options={ - }, - bases=(models.Model,), - ), - migrations.CreateModel( - name='BusinessChild', - fields=[ - ('page_ptr', models.OneToOneField(auto_created=True, primary_key=True, serialize=False, to='wagtailcore.Page')), + ('password', models.CharField(max_length=128, verbose_name='password')), + ('last_login', models.DateTimeField(default=django.utils.timezone.now, verbose_name='last login')), + ('is_superuser', models.BooleanField(default=False, help_text='Designates that this user has all permissions without explicitly assigning them.', verbose_name='superuser status')), + ('username', models.CharField(unique=True, max_length=100)), + ('email', models.EmailField(max_length=255, blank=True)), + ('is_staff', models.BooleanField(default=True)), + ('is_active', models.BooleanField(default=True)), + ('first_name', models.CharField(max_length=50, blank=True)), + ('last_name', models.CharField(max_length=50, blank=True)), + ('groups', models.ManyToManyField(to='auth.Group', verbose_name='groups', blank=True)), + ('user_permissions', models.ManyToManyField(to='auth.Permission', verbose_name='user permissions', blank=True)), ], options={ 'abstract': False, }, - bases=('wagtailcore.page',), - ), - migrations.CreateModel( - name='BusinessIndex', - fields=[ - ('page_ptr', models.OneToOneField(auto_created=True, primary_key=True, serialize=False, to='wagtailcore.Page')), - ], - options={ - 'abstract': False, - }, - bases=('wagtailcore.page',), - ), - migrations.CreateModel( - name='BusinessSubIndex', - fields=[ - ('page_ptr', models.OneToOneField(auto_created=True, primary_key=True, serialize=False, to='wagtailcore.Page')), - ], - options={ - 'abstract': False, - }, - bases=('wagtailcore.page',), - ), - migrations.CreateModel( - name='EventIndex', - fields=[ - ('page_ptr', models.OneToOneField(auto_created=True, primary_key=True, serialize=False, to='wagtailcore.Page')), - ('intro', wagtail.wagtailcore.fields.RichTextField(blank=True)), - ], - options={ - 'abstract': False, - }, - bases=('wagtailcore.page',), - ), - migrations.CreateModel( - name='EventPage', - fields=[ - ('page_ptr', models.OneToOneField(auto_created=True, primary_key=True, serialize=False, to='wagtailcore.Page')), - ('date_from', models.DateField(null=True, verbose_name=b'Start date')), - ('date_to', models.DateField(help_text=b'Not required if event is on a single day', null=True, verbose_name=b'End date', blank=True)), - ('time_from', models.TimeField(null=True, verbose_name=b'Start time', blank=True)), - ('time_to', models.TimeField(null=True, verbose_name=b'End time', blank=True)), - ('audience', models.CharField(max_length=255, choices=[(b'public', b'Public'), (b'private', b'Private')])), - ('location', models.CharField(max_length=255)), - ('body', wagtail.wagtailcore.fields.RichTextField(blank=True)), - ('cost', models.CharField(max_length=255)), - ('signup_link', models.URLField(blank=True)), - ('feed_image', models.ForeignKey(on_delete=django.db.models.deletion.SET_NULL, blank=True, to='wagtailimages.Image', null=True)), - ], - options={ - 'abstract': False, - }, - bases=('wagtailcore.page',), - ), - migrations.CreateModel( - name='EventPageCarouselItem', - fields=[ - ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)), - ('sort_order', models.IntegerField(null=True, editable=False, blank=True)), - ('link_external', models.URLField(verbose_name=b'External link', blank=True)), - ('embed_url', models.URLField(verbose_name=b'Embed URL', blank=True)), - ('caption', models.CharField(max_length=255, blank=True)), - ('image', models.ForeignKey(on_delete=django.db.models.deletion.SET_NULL, blank=True, to='wagtailimages.Image', null=True)), - ('link_document', models.ForeignKey(blank=True, to='wagtaildocs.Document', null=True)), - ('link_page', models.ForeignKey(blank=True, to='wagtailcore.Page', null=True)), - ('page', modelcluster.fields.ParentalKey(to='tests.EventPage')), - ], - options={ - 'ordering': [b'sort_order'], - 'abstract': False, - }, - bases=(models.Model,), - ), - migrations.CreateModel( - name='EventPageRelatedLink', - fields=[ - ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)), - ('sort_order', models.IntegerField(null=True, editable=False, blank=True)), - ('link_external', models.URLField(verbose_name=b'External link', blank=True)), - ('title', models.CharField(help_text=b'Link title', max_length=255)), - ('link_document', models.ForeignKey(blank=True, to='wagtaildocs.Document', null=True)), - ('link_page', models.ForeignKey(blank=True, to='wagtailcore.Page', null=True)), - ('page', modelcluster.fields.ParentalKey(to='tests.EventPage')), - ], - options={ - 'ordering': [b'sort_order'], - 'abstract': False, - }, - bases=(models.Model,), - ), - migrations.CreateModel( - name='EventPageSpeaker', - fields=[ - ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)), - ('sort_order', models.IntegerField(null=True, editable=False, blank=True)), - ('link_external', models.URLField(verbose_name=b'External link', blank=True)), - ('first_name', models.CharField(max_length=255, verbose_name=b'Name', blank=True)), - ('last_name', models.CharField(max_length=255, verbose_name=b'Surname', blank=True)), - ('image', models.ForeignKey(on_delete=django.db.models.deletion.SET_NULL, blank=True, to='wagtailimages.Image', null=True)), - ('link_document', models.ForeignKey(blank=True, to='wagtaildocs.Document', null=True)), - ('link_page', models.ForeignKey(blank=True, to='wagtailcore.Page', null=True)), - ('page', modelcluster.fields.ParentalKey(to='tests.EventPage')), - ], - options={ - 'ordering': [b'sort_order'], - 'abstract': False, - }, - bases=(models.Model,), - ), - migrations.CreateModel( - name='FormField', - fields=[ - ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)), - ('sort_order', models.IntegerField(null=True, editable=False, blank=True)), - ('label', models.CharField(help_text='The label of the form field', max_length=255)), - ('field_type', models.CharField(max_length=16, choices=[(b'singleline', 'Single line text'), (b'multiline', 'Multi-line text'), (b'email', 'Email'), (b'number', 'Number'), (b'url', 'URL'), (b'checkbox', 'Checkbox'), (b'checkboxes', 'Checkboxes'), (b'dropdown', 'Drop down'), (b'radio', 'Radio buttons'), (b'date', 'Date'), (b'datetime', 'Date/time')])), - ('required', models.BooleanField(default=True)), - ('choices', models.CharField(help_text='Comma seperated list of choices. Only applicable in checkboxes, radio and dropdown.', max_length=512, blank=True)), - ('default_value', models.CharField(help_text='Default value. Comma seperated values supported for checkboxes.', max_length=255, blank=True)), - ('help_text', models.CharField(max_length=255, blank=True)), - ], - options={ - 'ordering': [b'sort_order'], - 'abstract': False, - }, - bases=(models.Model,), - ), - migrations.CreateModel( - name='FormPage', - fields=[ - ('page_ptr', models.OneToOneField(auto_created=True, primary_key=True, serialize=False, to='wagtailcore.Page')), - ('to_address', models.CharField(help_text='Optional - form submissions will be emailed to this address', max_length=255, blank=True)), - ('from_address', models.CharField(max_length=255, blank=True)), - ('subject', models.CharField(max_length=255, blank=True)), - ], - options={ - 'abstract': False, - }, - bases=('wagtailcore.page',), - ), - migrations.AddField( - model_name='formfield', - name='page', - field=modelcluster.fields.ParentalKey(to='tests.FormPage'), - preserve_default=True, - ), - migrations.CreateModel( - name='PageWithOldStyleRouteMethod', - fields=[ - ('page_ptr', models.OneToOneField(auto_created=True, primary_key=True, serialize=False, to='wagtailcore.Page')), - ('content', models.TextField()), - ], - options={ - 'abstract': False, - }, - bases=('wagtailcore.page',), - ), - migrations.CreateModel( - name='RoutablePageTest', - fields=[ - ('page_ptr', models.OneToOneField(auto_created=True, primary_key=True, serialize=False, to='wagtailcore.Page')), - ], - options={ - 'abstract': False, - }, - bases=('wagtailcore.page',), - ), - migrations.CreateModel( - name='SearchTest', - fields=[ - ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)), - ('title', models.CharField(max_length=255)), - ('content', models.TextField()), - ('live', models.BooleanField(default=False)), - ('published_date', models.DateField(null=True)), - ], - options={ - }, - bases=(models.Model, wagtail.wagtailsearch.indexed.Indexed), - ), - migrations.CreateModel( - name='SearchTestChild', - fields=[ - ('searchtest_ptr', models.OneToOneField(auto_created=True, primary_key=True, serialize=False, to='tests.SearchTest')), - ('subtitle', models.CharField(max_length=255, null=True, blank=True)), - ('extra_content', models.TextField()), - ], - options={ - }, - bases=('tests.searchtest',), - ), - migrations.CreateModel( - name='SearchTestOldConfig', - fields=[ - ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)), - ], - options={ - }, - bases=(models.Model, wagtail.wagtailsearch.indexed.Indexed), - ), - migrations.CreateModel( - name='SearchTestOldConfigList', - fields=[ - ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)), - ], - options={ - }, - bases=(models.Model, wagtail.wagtailsearch.indexed.Indexed), - ), - migrations.CreateModel( - name='SimplePage', - fields=[ - ('page_ptr', models.OneToOneField(auto_created=True, primary_key=True, serialize=False, to='wagtailcore.Page')), - ('content', models.TextField()), - ], - options={ - 'abstract': False, - }, - bases=('wagtailcore.page',), - ), - migrations.CreateModel( - name='StandardChild', - fields=[ - ('page_ptr', models.OneToOneField(auto_created=True, primary_key=True, serialize=False, to='wagtailcore.Page')), - ], - options={ - 'abstract': False, - }, - bases=('wagtailcore.page',), - ), - migrations.CreateModel( - name='StandardIndex', - fields=[ - ('page_ptr', models.OneToOneField(auto_created=True, primary_key=True, serialize=False, to='wagtailcore.Page')), - ], - options={ - 'abstract': False, - }, - bases=('wagtailcore.page',), - ), - migrations.CreateModel( - name='ZuluSnippet', - fields=[ - ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)), - ('text', models.CharField(max_length=255)), - ], - options={ - }, bases=(models.Model,), ), ] diff --git a/wagtail/tests/migrations/0002_auto_20140728_1636.py b/wagtail/tests/migrations/0002_auto_20140728_1636.py new file mode 100644 index 0000000000..9725c0ebc3 --- /dev/null +++ b/wagtail/tests/migrations/0002_auto_20140728_1636.py @@ -0,0 +1,341 @@ +# -*- coding: utf-8 -*- +from __future__ import unicode_literals + +from django.db import models, migrations +import django.db.models.deletion +import taggit.models +import wagtail.wagtailsearch.indexed +import modelcluster.fields +import wagtail.wagtailcore.fields +import modelcluster.tags +import wagtail.tests.models + + +class Migration(migrations.Migration): + + dependencies = [ + ('wagtailcore', '0002_initial_data'), + ('wagtaildocs', '0002_initial_data'), + ('wagtailimages', '0002_initial_data'), + ('taggit', '0001_initial'), + ('tests', '0001_initial'), + ] + + operations = [ + migrations.CreateModel( + name='Advert', + fields=[ + ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)), + ('url', models.URLField(null=True, blank=True)), + ('text', models.CharField(max_length=255)), + ], + options={ + }, + bases=(models.Model,), + ), + migrations.CreateModel( + name='AlphaSnippet', + fields=[ + ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)), + ('text', models.CharField(max_length=255)), + ], + options={ + }, + bases=(models.Model,), + ), + migrations.CreateModel( + name='BusinessChild', + fields=[ + ('page_ptr', models.OneToOneField(auto_created=True, primary_key=True, serialize=False, to='wagtailcore.Page')), + ], + options={ + 'abstract': False, + }, + bases=('wagtailcore.page',), + ), + migrations.CreateModel( + name='BusinessIndex', + fields=[ + ('page_ptr', models.OneToOneField(auto_created=True, primary_key=True, serialize=False, to='wagtailcore.Page')), + ], + options={ + 'abstract': False, + }, + bases=('wagtailcore.page',), + ), + migrations.CreateModel( + name='BusinessSubIndex', + fields=[ + ('page_ptr', models.OneToOneField(auto_created=True, primary_key=True, serialize=False, to='wagtailcore.Page')), + ], + options={ + 'abstract': False, + }, + bases=('wagtailcore.page',), + ), + migrations.CreateModel( + name='EventIndex', + fields=[ + ('page_ptr', models.OneToOneField(auto_created=True, primary_key=True, serialize=False, to='wagtailcore.Page')), + ('intro', wagtail.wagtailcore.fields.RichTextField(blank=True)), + ], + options={ + 'abstract': False, + }, + bases=('wagtailcore.page',), + ), + migrations.CreateModel( + name='EventPage', + fields=[ + ('page_ptr', models.OneToOneField(auto_created=True, primary_key=True, serialize=False, to='wagtailcore.Page')), + ('date_from', models.DateField(null=True, verbose_name=b'Start date')), + ('date_to', models.DateField(help_text=b'Not required if event is on a single day', null=True, verbose_name=b'End date', blank=True)), + ('time_from', models.TimeField(null=True, verbose_name=b'Start time', blank=True)), + ('time_to', models.TimeField(null=True, verbose_name=b'End time', blank=True)), + ('audience', models.CharField(max_length=255, choices=[(b'public', b'Public'), (b'private', b'Private')])), + ('location', models.CharField(max_length=255)), + ('body', wagtail.wagtailcore.fields.RichTextField(blank=True)), + ('cost', models.CharField(max_length=255)), + ('signup_link', models.URLField(blank=True)), + ('feed_image', models.ForeignKey(on_delete=django.db.models.deletion.SET_NULL, blank=True, to='wagtailimages.Image', null=True)), + ], + options={ + 'abstract': False, + }, + bases=('wagtailcore.page',), + ), + migrations.CreateModel( + name='EventPageCarouselItem', + fields=[ + ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)), + ('sort_order', models.IntegerField(null=True, editable=False, blank=True)), + ('link_external', models.URLField(verbose_name=b'External link', blank=True)), + ('embed_url', models.URLField(verbose_name=b'Embed URL', blank=True)), + ('caption', models.CharField(max_length=255, blank=True)), + ('image', models.ForeignKey(on_delete=django.db.models.deletion.SET_NULL, blank=True, to='wagtailimages.Image', null=True)), + ('link_document', models.ForeignKey(blank=True, to='wagtaildocs.Document', null=True)), + ('link_page', models.ForeignKey(blank=True, to='wagtailcore.Page', null=True)), + ('page', modelcluster.fields.ParentalKey(to='tests.EventPage')), + ], + options={ + 'ordering': [b'sort_order'], + 'abstract': False, + }, + bases=(models.Model,), + ), + migrations.CreateModel( + name='EventPageRelatedLink', + fields=[ + ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)), + ('sort_order', models.IntegerField(null=True, editable=False, blank=True)), + ('link_external', models.URLField(verbose_name=b'External link', blank=True)), + ('title', models.CharField(help_text=b'Link title', max_length=255)), + ('link_document', models.ForeignKey(blank=True, to='wagtaildocs.Document', null=True)), + ('link_page', models.ForeignKey(blank=True, to='wagtailcore.Page', null=True)), + ('page', modelcluster.fields.ParentalKey(to='tests.EventPage')), + ], + options={ + 'ordering': [b'sort_order'], + 'abstract': False, + }, + bases=(models.Model,), + ), + migrations.CreateModel( + name='EventPageSpeaker', + fields=[ + ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)), + ('sort_order', models.IntegerField(null=True, editable=False, blank=True)), + ('link_external', models.URLField(verbose_name=b'External link', blank=True)), + ('first_name', models.CharField(max_length=255, verbose_name=b'Name', blank=True)), + ('last_name', models.CharField(max_length=255, verbose_name=b'Surname', blank=True)), + ('image', models.ForeignKey(on_delete=django.db.models.deletion.SET_NULL, blank=True, to='wagtailimages.Image', null=True)), + ('link_document', models.ForeignKey(blank=True, to='wagtaildocs.Document', null=True)), + ('link_page', models.ForeignKey(blank=True, to='wagtailcore.Page', null=True)), + ('page', modelcluster.fields.ParentalKey(to='tests.EventPage')), + ], + options={ + 'ordering': [b'sort_order'], + 'abstract': False, + }, + bases=(models.Model,), + ), + migrations.CreateModel( + name='FormField', + fields=[ + ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)), + ('sort_order', models.IntegerField(null=True, editable=False, blank=True)), + ('label', models.CharField(help_text='The label of the form field', max_length=255)), + ('field_type', models.CharField(max_length=16, choices=[(b'singleline', 'Single line text'), (b'multiline', 'Multi-line text'), (b'email', 'Email'), (b'number', 'Number'), (b'url', 'URL'), (b'checkbox', 'Checkbox'), (b'checkboxes', 'Checkboxes'), (b'dropdown', 'Drop down'), (b'radio', 'Radio buttons'), (b'date', 'Date'), (b'datetime', 'Date/time')])), + ('required', models.BooleanField(default=True)), + ('choices', models.CharField(help_text='Comma seperated list of choices. Only applicable in checkboxes, radio and dropdown.', max_length=512, blank=True)), + ('default_value', models.CharField(help_text='Default value. Comma seperated values supported for checkboxes.', max_length=255, blank=True)), + ('help_text', models.CharField(max_length=255, blank=True)), + ], + options={ + 'ordering': [b'sort_order'], + 'abstract': False, + }, + bases=(models.Model,), + ), + migrations.CreateModel( + name='FormPage', + fields=[ + ('page_ptr', models.OneToOneField(auto_created=True, primary_key=True, serialize=False, to='wagtailcore.Page')), + ('to_address', models.CharField(help_text='Optional - form submissions will be emailed to this address', max_length=255, blank=True)), + ('from_address', models.CharField(max_length=255, blank=True)), + ('subject', models.CharField(max_length=255, blank=True)), + ], + options={ + 'abstract': False, + }, + bases=('wagtailcore.page',), + ), + migrations.AddField( + model_name='formfield', + name='page', + field=modelcluster.fields.ParentalKey(to='tests.FormPage'), + preserve_default=True, + ), + migrations.CreateModel( + name='PageWithOldStyleRouteMethod', + fields=[ + ('page_ptr', models.OneToOneField(auto_created=True, primary_key=True, serialize=False, to='wagtailcore.Page')), + ('content', models.TextField()), + ], + options={ + 'abstract': False, + }, + bases=('wagtailcore.page',), + ), + migrations.CreateModel( + name='RoutablePageTest', + fields=[ + ('page_ptr', models.OneToOneField(auto_created=True, primary_key=True, serialize=False, to='wagtailcore.Page')), + ], + options={ + 'abstract': False, + }, + bases=('wagtailcore.page',), + ), + migrations.CreateModel( + name='SearchTest', + fields=[ + ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)), + ('title', models.CharField(max_length=255)), + ('content', models.TextField()), + ('live', models.BooleanField(default=False)), + ('published_date', models.DateField(null=True)), + ], + options={ + }, + bases=(models.Model, wagtail.wagtailsearch.indexed.Indexed), + ), + migrations.CreateModel( + name='SearchTestChild', + fields=[ + ('searchtest_ptr', models.OneToOneField(auto_created=True, primary_key=True, serialize=False, to='tests.SearchTest')), + ('subtitle', models.CharField(max_length=255, null=True, blank=True)), + ('extra_content', models.TextField()), + ], + options={ + }, + bases=('tests.searchtest',), + ), + migrations.CreateModel( + name='SearchTestOldConfig', + fields=[ + ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)), + ], + options={ + }, + bases=(models.Model, wagtail.wagtailsearch.indexed.Indexed), + ), + migrations.CreateModel( + name='SearchTestOldConfigList', + fields=[ + ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)), + ], + options={ + }, + bases=(models.Model, wagtail.wagtailsearch.indexed.Indexed), + ), + migrations.CreateModel( + name='SimplePage', + fields=[ + ('page_ptr', models.OneToOneField(auto_created=True, primary_key=True, serialize=False, to='wagtailcore.Page')), + ('content', models.TextField()), + ], + options={ + 'abstract': False, + }, + bases=('wagtailcore.page',), + ), + migrations.CreateModel( + name='StandardChild', + fields=[ + ('page_ptr', models.OneToOneField(auto_created=True, primary_key=True, serialize=False, to='wagtailcore.Page')), + ], + options={ + 'abstract': False, + }, + bases=('wagtailcore.page',), + ), + migrations.CreateModel( + name='StandardIndex', + fields=[ + ('page_ptr', models.OneToOneField(auto_created=True, primary_key=True, serialize=False, to='wagtailcore.Page')), + ], + options={ + 'abstract': False, + }, + bases=('wagtailcore.page',), + ), + migrations.CreateModel( + name='TaggedPage', + fields=[ + ('page_ptr', models.OneToOneField(auto_created=True, primary_key=True, serialize=False, to='wagtailcore.Page')), + ], + options={ + 'abstract': False, + }, + bases=('wagtailcore.page',), + ), + migrations.CreateModel( + name='TaggedPageTag', + fields=[ + ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)), + ], + options={ + 'abstract': False, + }, + bases=(models.Model,), + ), + migrations.AddField( + model_name='taggedpage', + name='tags', + field=modelcluster.tags.ClusterTaggableManager(to=taggit.models.Tag, through=wagtail.tests.models.TaggedPageTag, blank=True, help_text='A comma-separated list of tags.', verbose_name='Tags'), + preserve_default=True, + ), + migrations.AddField( + model_name='taggedpagetag', + name='content_object', + field=modelcluster.fields.ParentalKey(to='tests.TaggedPage'), + preserve_default=True, + ), + migrations.AddField( + model_name='taggedpagetag', + name='tag', + field=models.ForeignKey(to='taggit.Tag'), + preserve_default=True, + ), + migrations.CreateModel( + name='ZuluSnippet', + fields=[ + ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)), + ('text', models.CharField(max_length=255)), + ], + options={ + }, + bases=(models.Model,), + ), + ] From 0d8157f872516641e06cea2b1ca01e311c80e088 Mon Sep 17 00:00:00 2001 From: Karl Hobley Date: Thu, 31 Jul 2014 10:31:00 +0100 Subject: [PATCH 024/210] Changed 'wagtail-project' to 'wagtail start' --- setup.py | 2 +- .../bin/{wagtail_project.py => wagtail.py} | 31 ++++++++++++++----- 2 files changed, 24 insertions(+), 9 deletions(-) rename wagtail/bin/{wagtail_project.py => wagtail.py} (75%) diff --git a/setup.py b/setup.py index 1812dc8db9..8786403626 100644 --- a/setup.py +++ b/setup.py @@ -76,7 +76,7 @@ setup( install_requires=install_requires, entry_points=""" [console_scripts] - wagtail-project=wagtail.bin.wagtail_project:create_project + wagtail=wagtail.bin.wagtail:main """, zip_safe=False, ) diff --git a/wagtail/bin/wagtail_project.py b/wagtail/bin/wagtail.py similarity index 75% rename from wagtail/bin/wagtail_project.py rename to wagtail/bin/wagtail.py index 8cf261a326..6d7e71c7c3 100644 --- a/wagtail/bin/wagtail_project.py +++ b/wagtail/bin/wagtail.py @@ -7,15 +7,14 @@ import sys from optparse import OptionParser -def create_project(): - # Collect and analyse the name given for the wagtail project - parser = OptionParser(usage="Usage: %prog project_name") - (options, args) = parser.parse_args() - - if len(args) != 1: +def create_project(parser, options, args): + # Validate args + if len(args) < 2: parser.error("Please specify a name for your wagtail installation") + elif len(args) > 2: + parser.error("Too many arguments") - project_name = args[0] + project_name = args[1] # Make sure given name is not already in use by another python package/module. try: @@ -53,5 +52,21 @@ def create_project(): print "Success! %(project_name)s is created" % {'project_name': project_name} +COMMANDS = { + 'start': create_project, +} + +def main(): + # Parse options + parser = OptionParser(usage="Usage: %prog start project_name") + (options, args) = parser.parse_args() + + # Find command + command = args[0] + if command in COMMANDS: + COMMANDS[command](parser, options, args) + else: + parser.error("Unrecognised command: " + command) + if __name__ == "__main__": - create_project() + main() From 1ec76703227caf73b83020b0dde29dd1461033ce Mon Sep 17 00:00:00 2001 From: Karl Hobley Date: Thu, 31 Jul 2014 10:33:06 +0100 Subject: [PATCH 025/210] Python 3 support for wagtail command --- wagtail/bin/wagtail.py | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/wagtail/bin/wagtail.py b/wagtail/bin/wagtail.py index 6d7e71c7c3..d5026d1671 100644 --- a/wagtail/bin/wagtail.py +++ b/wagtail/bin/wagtail.py @@ -1,4 +1,6 @@ #!/usr/bin/env python +from __future__ import print_function + import os import subprocess import errno @@ -28,11 +30,11 @@ def create_project(parser, options, args): # Make sure directory does not already exist if os.path.exists(project_name): - print 'A directory called %(project_name)s already exists. \ - Please choose another name for your wagtail project or remove the existing directory.' % {'project_name': project_name} + print('A directory called %(project_name)s already exists. \ + Please choose another name for your wagtail project or remove the existing directory.' % {'project_name': project_name}) sys.exit(errno.EEXIST) - print "Creating a wagtail project called %(project_name)s" % {'project_name': project_name} + print("Creating a wagtail project called %(project_name)s" % {'project_name': project_name}) # Create the project from the wagtail template using startapp @@ -49,7 +51,7 @@ def create_project(parser, options, args): project_name ]) - print "Success! %(project_name)s is created" % {'project_name': project_name} + print("Success! %(project_name)s is created" % {'project_name': project_name}) COMMANDS = { From 36e05307fecb9eff796d1993e8a4c30e48c4ef5c Mon Sep 17 00:00:00 2001 From: Matt Westcott Date: Thu, 31 Jul 2014 14:36:46 +0100 Subject: [PATCH 026/210] print help message when 'wagtail' command is invoked with no args --- wagtail/bin/wagtail.py | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/wagtail/bin/wagtail.py b/wagtail/bin/wagtail.py index d5026d1671..7afd503b83 100644 --- a/wagtail/bin/wagtail.py +++ b/wagtail/bin/wagtail.py @@ -64,7 +64,12 @@ def main(): (options, args) = parser.parse_args() # Find command - command = args[0] + try: + command = args[0] + except IndexError: + parser.print_help() + return + if command in COMMANDS: COMMANDS[command](parser, options, args) else: From 0f4191f7a951d54c4a76b7030d61e9f4b697de56 Mon Sep 17 00:00:00 2001 From: Matt Westcott Date: Thu, 31 Jul 2014 14:40:51 +0100 Subject: [PATCH 027/210] Only print the Success! message if the command actually succeeded :-P --- wagtail/bin/wagtail.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/wagtail/bin/wagtail.py b/wagtail/bin/wagtail.py index 7afd503b83..458b0b3993 100644 --- a/wagtail/bin/wagtail.py +++ b/wagtail/bin/wagtail.py @@ -44,14 +44,15 @@ def create_project(parser, options, args): template_path = os.path.join(wagtail_path, 'project_template') # Call django-admin startproject - subprocess.call([ + result = subprocess.call([ 'django-admin.py', 'startproject', '--template=' + template_path, '--name=Vagrantfile', '--ext=html,rst', project_name ]) - print("Success! %(project_name)s is created" % {'project_name': project_name}) + if result == 0: + print("Success! %(project_name)s is created" % {'project_name': project_name}) COMMANDS = { From f6faf34afc6f0deb8ebfe36e30f9984d2b7f8320 Mon Sep 17 00:00:00 2001 From: Matt Westcott Date: Thu, 31 Jul 2014 14:51:05 +0100 Subject: [PATCH 028/210] use absolute_import in bin/wagtail.py so that 'import wagtail' doesn't try to import itself --- wagtail/bin/wagtail.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/wagtail/bin/wagtail.py b/wagtail/bin/wagtail.py index 458b0b3993..0987f80842 100644 --- a/wagtail/bin/wagtail.py +++ b/wagtail/bin/wagtail.py @@ -1,5 +1,5 @@ #!/usr/bin/env python -from __future__ import print_function +from __future__ import print_function, absolute_import import os import subprocess From 62f0b2079e1362a41281005005e358d55a85b2ee Mon Sep 17 00:00:00 2001 From: Matt Westcott Date: Thu, 31 Jul 2014 15:18:02 +0100 Subject: [PATCH 029/210] update docs to refer to the 'wagtail' command rather than 'wagtail-project' --- docs/getting_started.rst | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/docs/getting_started.rst b/docs/getting_started.rst index 4410a89aa2..23828dd013 100644 --- a/docs/getting_started.rst +++ b/docs/getting_started.rst @@ -27,18 +27,18 @@ This will give you the latest development version of Wagtail. pip install -e git://github.com/torchbox/wagtail.git#egg=wagtail -The ``wagtail-project`` command -=============================== +The ``wagtail`` command +======================= .. versionadded:: 0.5 -Once you have Wagtail installed on your host machine, you can use the ``wagtail-project`` command. +Once you have Wagtail installed on your host machine, you can use the ``wagtail`` command. Usage: .. code-block:: bash - wagtail-project + wagtail start This command will setup a skeleton Wagtail project with the following features installed: From 574f618148f05c48105a4299caa04aece6608b6e Mon Sep 17 00:00:00 2001 From: Matt Westcott Date: Thu, 31 Jul 2014 15:19:40 +0100 Subject: [PATCH 030/210] Remove wagtail template documentation from wagtail/project_template/readme.rst, as that's now covered by the main wagtail docs --- wagtail/project_template/readme.rst | 30 ----------------------------- 1 file changed, 30 deletions(-) diff --git a/wagtail/project_template/readme.rst b/wagtail/project_template/readme.rst index 118bb5e9c2..172e810eff 100644 --- a/wagtail/project_template/readme.rst +++ b/wagtail/project_template/readme.rst @@ -1,33 +1,3 @@ -{% if False %} - -================ -Wagtail template -================ - - -Setup -===== - -Install Django 1.6 on your host machine. (Be sure to explicitly uninstall earlier versions first, or use a virtualenv - -having earlier versions around seems to cause pre-1.4-style settings.py and urls.py files to be generated alongside the -new ones.) - -To start a new project, run the following commands:: - - $ django-admin.py startproject my_lovely_website --template=https://github.com/torchbox/wagtail-template/zipball/master --name=Vagrantfile --ext=html,rst - $ cd my_lovely_website - $ vagrant up - $ vagrant ssh - (then, within the SSH session:) - $ dj createsuperuser - $ djrun - - -This will make the app accessible on the host machine as http://localhost:8111/ . The codebase is located on the host -machine, exported to the VM as a shared folder; code editing and Git operations will generally be done on the host. - -{% endif %} - ================== {{ project_name }} ================== From a9b5d81e74d457e591563f9e5d987340d8edbb5b Mon Sep 17 00:00:00 2001 From: Matt Westcott Date: Thu, 31 Jul 2014 15:39:26 +0100 Subject: [PATCH 031/210] Update Django, South and wagtail version requirements --- wagtail/project_template/requirements.txt | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/wagtail/project_template/requirements.txt b/wagtail/project_template/requirements.txt index c1eacf044a..70fc4ef20c 100644 --- a/wagtail/project_template/requirements.txt +++ b/wagtail/project_template/requirements.txt @@ -1,10 +1,10 @@ -Django==1.6.5 -South==0.8.4 +Django>=1.6.2,<1.7 +South==1.0.0 +wagtail==0.5 psycopg2==2.5.2 elasticsearch==1.1.1 django-redis-cache==0.13.0 django-celery==3.1.10 -wagtail==0.4.1 # Developer tools Fabric==1.9.0 From 03700d65ed8a27f8e63e39532d84b543e73d7813 Mon Sep 17 00:00:00 2001 From: Matt Westcott Date: Thu, 31 Jul 2014 16:11:02 +0100 Subject: [PATCH 032/210] Use sqlite by default --- wagtail/project_template/.gitignore | 1 + .../project_name/settings/base.py | 23 +++++++++++++------ wagtail/project_template/requirements.txt | 5 +++- 3 files changed, 21 insertions(+), 8 deletions(-) diff --git a/wagtail/project_template/.gitignore b/wagtail/project_template/.gitignore index aed6a6dafe..6e41f3871b 100644 --- a/wagtail/project_template/.gitignore +++ b/wagtail/project_template/.gitignore @@ -7,3 +7,4 @@ /.vagrant/ Vagrantfile.local /docs/_build/ +/db.sqlite3 diff --git a/wagtail/project_template/project_name/project_name/settings/base.py b/wagtail/project_template/project_name/project_name/settings/base.py index 7d3a3bc73c..7054ff91a2 100644 --- a/wagtail/project_template/project_name/project_name/settings/base.py +++ b/wagtail/project_template/project_name/project_name/settings/base.py @@ -87,18 +87,27 @@ WSGI_APPLICATION = SITE_NAME + '.wsgi.application' # Database # https://docs.djangoproject.com/en/{{ docs_version }}/ref/settings/#databases +# SQLite (simplest install) DATABASES = { 'default': { - 'ENGINE': 'django.db.backends.postgresql_psycopg2', - 'NAME': '{{ project_name }}', - 'USER': 'postgres', - 'PASSWORD': '', - 'HOST': '', # Set to empty string for localhost. - 'PORT': '', # Set to empty string for default. - 'CONN_MAX_AGE': 600, # number of seconds database connections should persist for + 'ENGINE': 'django.db.backends.sqlite3', + 'NAME': join(PROJECT_ROOT, 'db.sqlite3'), } } +# PostgreSQL (Recommended, but requires the psycopg2 library and Postgresql development headers) +# DATABASES = { +# 'default': { +# 'ENGINE': 'django.db.backends.postgresql_psycopg2', +# 'NAME': '{{ project_name }}', +# 'USER': 'postgres', +# 'PASSWORD': '', +# 'HOST': '', # Set to empty string for localhost. +# 'PORT': '', # Set to empty string for default. +# 'CONN_MAX_AGE': 600, # number of seconds database connections should persist for +# } +# } + # Internationalization # https://docs.djangoproject.com/en/{{ docs_version }}/topics/i18n/ diff --git a/wagtail/project_template/requirements.txt b/wagtail/project_template/requirements.txt index 70fc4ef20c..fb6837e2d8 100644 --- a/wagtail/project_template/requirements.txt +++ b/wagtail/project_template/requirements.txt @@ -1,7 +1,10 @@ +# Minimal requirements Django>=1.6.2,<1.7 South==1.0.0 wagtail==0.5 -psycopg2==2.5.2 + +# Recommended components (require additional setup) +# psycopg2==2.5.2 elasticsearch==1.1.1 django-redis-cache==0.13.0 django-celery==3.1.10 From ae7ca004d28513d1b4cbb3ab377d3356979ad591 Mon Sep 17 00:00:00 2001 From: Matt Westcott Date: Thu, 31 Jul 2014 16:57:47 +0100 Subject: [PATCH 033/210] Fix initial migrations on project template for sqlite, as per #60 --- .../project_name/core/migrations/0002_create_homepage.py | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/wagtail/project_template/project_name/core/migrations/0002_create_homepage.py b/wagtail/project_template/project_name/core/migrations/0002_create_homepage.py index 121cad475b..7d57af66ea 100644 --- a/wagtail/project_template/project_name/core/migrations/0002_create_homepage.py +++ b/wagtail/project_template/project_name/core/migrations/0002_create_homepage.py @@ -4,7 +4,8 @@ from __future__ import unicode_literals from south.utils import datetime_utils as datetime from south.db import db from south.v2 import DataMigration -from django.db import models +from django.db import models, connection +from django.db.transaction import set_autocommit class Migration(DataMigration): @@ -14,6 +15,9 @@ class Migration(DataMigration): ) def forwards(self, orm): + if connection.vendor == 'sqlite': + set_autocommit(True) + orm['wagtailcore.Page'].objects.get(id=2).delete() homepage_content_type, created = orm['contenttypes.contenttype'].objects.get_or_create( From 7a2898d436855cec876bed7a1d856c097d391100 Mon Sep 17 00:00:00 2001 From: Matt Westcott Date: Thu, 31 Jul 2014 21:10:14 +0100 Subject: [PATCH 034/210] disable elasticsearch by default in project template --- .../project_name/project_name/settings/base.py | 15 ++++++++------- wagtail/project_template/requirements.txt | 2 +- 2 files changed, 9 insertions(+), 8 deletions(-) diff --git a/wagtail/project_template/project_name/project_name/settings/base.py b/wagtail/project_template/project_name/project_name/settings/base.py index 7054ff91a2..6022fb9eb6 100644 --- a/wagtail/project_template/project_name/project_name/settings/base.py +++ b/wagtail/project_template/project_name/project_name/settings/base.py @@ -200,10 +200,11 @@ LOGIN_REDIRECT_URL = 'wagtailadmin_home' WAGTAIL_SITE_NAME = "{{ project_name }}" -# Use Elasticsearch as the search backend for extra performance and better search results -WAGTAILSEARCH_BACKENDS = { - 'default': { - 'BACKEND': 'wagtail.wagtailsearch.backends.elasticsearch.ElasticSearch', - 'INDEX': '{{ project_name }}', - }, -} +# Use Elasticsearch as the search backend for extra performance and better search results: +# http://wagtail.readthedocs.org/en/latest/core_components/search/backends.html#elasticsearch-backend +# WAGTAILSEARCH_BACKENDS = { +# 'default': { +# 'BACKEND': 'wagtail.wagtailsearch.backends.elasticsearch.ElasticSearch', +# 'INDEX': '{{ project_name }}', +# }, +# } diff --git a/wagtail/project_template/requirements.txt b/wagtail/project_template/requirements.txt index fb6837e2d8..8f76e36a40 100644 --- a/wagtail/project_template/requirements.txt +++ b/wagtail/project_template/requirements.txt @@ -5,7 +5,7 @@ wagtail==0.5 # Recommended components (require additional setup) # psycopg2==2.5.2 -elasticsearch==1.1.1 +# elasticsearch==1.1.1 django-redis-cache==0.13.0 django-celery==3.1.10 From 586ed19162506be4d965302b8c6efd914a5687fe Mon Sep 17 00:00:00 2001 From: Matt Westcott Date: Thu, 31 Jul 2014 21:13:15 +0100 Subject: [PATCH 035/210] disable redis cache by default in project template --- .../project_name/settings/base.py | 27 ++++++++++--------- wagtail/project_template/requirements.txt | 2 +- 2 files changed, 16 insertions(+), 13 deletions(-) diff --git a/wagtail/project_template/project_name/project_name/settings/base.py b/wagtail/project_template/project_name/project_name/settings/base.py index 6022fb9eb6..fe47cf9568 100644 --- a/wagtail/project_template/project_name/project_name/settings/base.py +++ b/wagtail/project_template/project_name/project_name/settings/base.py @@ -179,18 +179,19 @@ CELERY_SEND_TASK_ERROR_EMAILS = True BROKER_URL = 'redis://' -# Use Redis as the cache backend for extra performance - -CACHES = { - 'default': { - 'BACKEND': 'redis_cache.cache.RedisCache', - 'LOCATION': '127.0.0.1:6379', - 'KEY_PREFIX': '{{ project_name }}', - 'OPTIONS': { - 'CLIENT_CLASS': 'redis_cache.client.DefaultClient', - } - } -} +# Use Redis as the cache backend for extra performance: +# http://wagtail.readthedocs.org/en/latest/howto/performance.html#cache +# +# CACHES = { +# 'default': { +# 'BACKEND': 'redis_cache.cache.RedisCache', +# 'LOCATION': '127.0.0.1:6379', +# 'KEY_PREFIX': '{{ project_name }}', +# 'OPTIONS': { +# 'CLIENT_CLASS': 'redis_cache.client.DefaultClient', +# } +# } +# } # Wagtail settings @@ -201,7 +202,9 @@ LOGIN_REDIRECT_URL = 'wagtailadmin_home' WAGTAIL_SITE_NAME = "{{ project_name }}" # Use Elasticsearch as the search backend for extra performance and better search results: +# http://wagtail.readthedocs.org/en/latest/howto/performance.html#search # http://wagtail.readthedocs.org/en/latest/core_components/search/backends.html#elasticsearch-backend +# # WAGTAILSEARCH_BACKENDS = { # 'default': { # 'BACKEND': 'wagtail.wagtailsearch.backends.elasticsearch.ElasticSearch', diff --git a/wagtail/project_template/requirements.txt b/wagtail/project_template/requirements.txt index 8f76e36a40..fac9d25482 100644 --- a/wagtail/project_template/requirements.txt +++ b/wagtail/project_template/requirements.txt @@ -6,7 +6,7 @@ wagtail==0.5 # Recommended components (require additional setup) # psycopg2==2.5.2 # elasticsearch==1.1.1 -django-redis-cache==0.13.0 +# django-redis-cache==0.13.0 django-celery==3.1.10 # Developer tools From 5cdb9c86965bdd4ee7ad5d6fb03306a6f39c8eb4 Mon Sep 17 00:00:00 2001 From: Nathan Brizendine Date: Fri, 8 Aug 2014 14:30:48 +0700 Subject: [PATCH 036/210] Change page url functions to use reverse Fixes issue #69 --- wagtail/wagtailcore/models.py | 7 ++++--- wagtail/wagtailcore/urls.py | 2 +- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/wagtail/wagtailcore/models.py b/wagtail/wagtailcore/models.py index a6d3c1f07a..e3a80161d1 100644 --- a/wagtail/wagtailcore/models.py +++ b/wagtail/wagtailcore/models.py @@ -13,6 +13,7 @@ from django.http import Http404 from django.core.cache import cache from django.core.handlers.wsgi import WSGIRequest from django.core.handlers.base import BaseHandler +from django.core.urlresolvers import reverse from django.contrib.contenttypes.models import ContentType from django.contrib.auth.models import Group from django.conf import settings @@ -488,7 +489,7 @@ class Page(six.with_metaclass(PageBase, MP_Node, ClusterableModel, indexed.Index """Return the full URL (including protocol / domain) to this page, or None if it is not routable""" for (id, root_path, root_url) in Site.get_site_root_paths(): if self.url_path.startswith(root_path): - return root_url + self.url_path[len(root_path) - 1:] + return root_url + reverse('wagtail', args=(self.url_path[len(root_path):],)) @property def url(self): @@ -503,7 +504,7 @@ class Page(six.with_metaclass(PageBase, MP_Node, ClusterableModel, indexed.Index root_paths = Site.get_site_root_paths() for (id, root_path, root_url) in Site.get_site_root_paths(): if self.url_path.startswith(root_path): - return ('' if len(root_paths) == 1 else root_url) + self.url_path[len(root_path) - 1:] + return ('' if len(root_paths) == 1 else root_url) + reverse('wagtail', args=(self.url_path[len(root_path):],)) def relative_url(self, current_site): """ @@ -513,7 +514,7 @@ class Page(six.with_metaclass(PageBase, MP_Node, ClusterableModel, indexed.Index """ for (id, root_path, root_url) in Site.get_site_root_paths(): if self.url_path.startswith(root_path): - return ('' if current_site.id == id else root_url) + self.url_path[len(root_path) - 1:] + return ('' if current_site.id == id else root_url) + reverse('wagtail', args=(self.url_path[len(root_path):],)) @classmethod def search(cls, query_string, show_unpublished=False, search_title_only=False, extra_filters={}, prefetch_related=[], path=None): diff --git a/wagtail/wagtailcore/urls.py b/wagtail/wagtailcore/urls.py index 9777dea8a0..9cc9ddfcf2 100644 --- a/wagtail/wagtailcore/urls.py +++ b/wagtail/wagtailcore/urls.py @@ -10,5 +10,5 @@ urlpatterns = [ # a '/'. If a trailing slash is not present, we leave CommonMiddleware to # handle it as usual (i.e. redirect it to the trailing slash version if # settings.APPEND_SLASH is True) - url(r'^((?:[\w\-]+/)*)$', views.serve) + url(r'^((?:[\w\-]+/)*)$', views.serve, name="wagtail") ] From 07a48abf58ffb4e807684809457996405421f396 Mon Sep 17 00:00:00 2001 From: Matt Westcott Date: Tue, 12 Aug 2014 15:36:11 +0100 Subject: [PATCH 037/210] use 'wagtail_serve' as the url name rather than 'wagtail' --- wagtail/wagtailcore/models.py | 6 +++--- wagtail/wagtailcore/urls.py | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/wagtail/wagtailcore/models.py b/wagtail/wagtailcore/models.py index e3a80161d1..a237e16e6d 100644 --- a/wagtail/wagtailcore/models.py +++ b/wagtail/wagtailcore/models.py @@ -489,7 +489,7 @@ class Page(six.with_metaclass(PageBase, MP_Node, ClusterableModel, indexed.Index """Return the full URL (including protocol / domain) to this page, or None if it is not routable""" for (id, root_path, root_url) in Site.get_site_root_paths(): if self.url_path.startswith(root_path): - return root_url + reverse('wagtail', args=(self.url_path[len(root_path):],)) + return root_url + reverse('wagtail_serve', args=(self.url_path[len(root_path):],)) @property def url(self): @@ -504,7 +504,7 @@ class Page(six.with_metaclass(PageBase, MP_Node, ClusterableModel, indexed.Index root_paths = Site.get_site_root_paths() for (id, root_path, root_url) in Site.get_site_root_paths(): if self.url_path.startswith(root_path): - return ('' if len(root_paths) == 1 else root_url) + reverse('wagtail', args=(self.url_path[len(root_path):],)) + return ('' if len(root_paths) == 1 else root_url) + reverse('wagtail_serve', args=(self.url_path[len(root_path):],)) def relative_url(self, current_site): """ @@ -514,7 +514,7 @@ class Page(six.with_metaclass(PageBase, MP_Node, ClusterableModel, indexed.Index """ for (id, root_path, root_url) in Site.get_site_root_paths(): if self.url_path.startswith(root_path): - return ('' if current_site.id == id else root_url) + reverse('wagtail', args=(self.url_path[len(root_path):],)) + return ('' if current_site.id == id else root_url) + reverse('wagtail_serve', args=(self.url_path[len(root_path):],)) @classmethod def search(cls, query_string, show_unpublished=False, search_title_only=False, extra_filters={}, prefetch_related=[], path=None): diff --git a/wagtail/wagtailcore/urls.py b/wagtail/wagtailcore/urls.py index 9cc9ddfcf2..2e01bbfe03 100644 --- a/wagtail/wagtailcore/urls.py +++ b/wagtail/wagtailcore/urls.py @@ -10,5 +10,5 @@ urlpatterns = [ # a '/'. If a trailing slash is not present, we leave CommonMiddleware to # handle it as usual (i.e. redirect it to the trailing slash version if # settings.APPEND_SLASH is True) - url(r'^((?:[\w\-]+/)*)$', views.serve, name="wagtail") + url(r'^((?:[\w\-]+/)*)$', views.serve, name='wagtail_serve') ] From 8f7cb58f0f10a38309d0a394df6a0451d1343555 Mon Sep 17 00:00:00 2001 From: Matt Westcott Date: Tue, 12 Aug 2014 16:57:08 +0100 Subject: [PATCH 038/210] Add tests for urlconfs that have wagtail_serve at a non-root path --- wagtail/tests/non_root_urls.py | 19 ++++++++ wagtail/wagtailcore/tests/test_page_model.py | 48 ++++++++++++++++++++ 2 files changed, 67 insertions(+) create mode 100644 wagtail/tests/non_root_urls.py diff --git a/wagtail/tests/non_root_urls.py b/wagtail/tests/non_root_urls.py new file mode 100644 index 0000000000..badea652a1 --- /dev/null +++ b/wagtail/tests/non_root_urls.py @@ -0,0 +1,19 @@ +"""An alternative urlconf module where Wagtail front-end URLs +are rooted at '/site/' rather than '/'""" + +from django.conf.urls import patterns, include, url + +from wagtail.wagtailcore import urls as wagtail_urls +from wagtail.wagtailadmin import urls as wagtailadmin_urls +from wagtail.wagtaildocs import urls as wagtaildocs_urls +from wagtail.wagtailimages import urls as wagtailimages_urls +from wagtail.wagtailsearch import urls as wagtailsearch_urls + + +urlpatterns = patterns('', + url(r'^admin/', include(wagtailadmin_urls)), + url(r'^search/', include(wagtailsearch_urls)), + url(r'^documents/', include(wagtaildocs_urls)), + url(r'^images/', include(wagtailimages_urls)), + url(r'^site/', include(wagtail_urls)), +) diff --git a/wagtail/wagtailcore/tests/test_page_model.py b/wagtail/wagtailcore/tests/test_page_model.py index 8a542d5941..d494b26548 100644 --- a/wagtail/wagtailcore/tests/test_page_model.py +++ b/wagtail/wagtailcore/tests/test_page_model.py @@ -1,6 +1,7 @@ import warnings from django.test import TestCase, Client +from django.test.utils import override_settings from django.http import HttpRequest, Http404 from wagtail.utils.deprecation import RemovedInWagtail06Warning @@ -100,6 +101,16 @@ class TestSiteRouting(TestCase): class TestRouting(TestCase): fixtures = ['test.json'] + # need to clear urlresolver caches before/after tests, because we override ROOT_URLCONF + # in some tests here + def setUp(self): + from django.core.urlresolvers import clear_url_caches + clear_url_caches() + + def tearDown(self): + from django.core.urlresolvers import clear_url_caches + clear_url_caches() + def test_urls(self): default_site = Site.objects.get(is_default_site=True) homepage = Page.objects.get(url_path='/home/') @@ -134,6 +145,21 @@ class TestRouting(TestCase): self.assertEqual(christmas_page.relative_url(default_site), 'http://events.example.com/christmas/') self.assertEqual(christmas_page.relative_url(events_site), '/christmas/') + @override_settings(ROOT_URLCONF='wagtail.tests.non_root_urls') + def test_urls_with_non_root_urlconf(self): + default_site = Site.objects.get(is_default_site=True) + homepage = Page.objects.get(url_path='/home/') + christmas_page = Page.objects.get(url_path='/home/events/christmas/') + + # Basic installation only has one site configured, so page.url will return local URLs + self.assertEqual(homepage.full_url, 'http://localhost/site/') + self.assertEqual(homepage.url, '/site/') + self.assertEqual(homepage.relative_url(default_site), '/site/') + + self.assertEqual(christmas_page.full_url, 'http://localhost/site/events/christmas/') + self.assertEqual(christmas_page.url, '/site/events/christmas/') + self.assertEqual(christmas_page.relative_url(default_site), '/site/events/christmas/') + def test_request_routing(self): homepage = Page.objects.get(url_path='/home/') christmas_page = EventPage.objects.get(url_path='/home/events/christmas/') @@ -179,6 +205,16 @@ class TestServeView(TestCase): from django.core.cache import cache cache.delete('wagtail_site_root_paths') + # also need to clear urlresolver caches before/after tests, because we override + # ROOT_URLCONF in some tests here + from django.core.urlresolvers import clear_url_caches + clear_url_caches() + + def tearDown(self): + from django.core.urlresolvers import clear_url_caches + clear_url_caches() + + def test_serve(self): response = self.client.get('/events/christmas/') @@ -190,6 +226,18 @@ class TestServeView(TestCase): self.assertContains(response, '

    Christmas

    ') self.assertContains(response, '

    Event

    ') + @override_settings(ROOT_URLCONF='wagtail.tests.non_root_urls') + def test_serve_with_non_root_urls(self): + response = self.client.get('/site/events/christmas/') + + self.assertEqual(response.status_code, 200) + self.assertEqual(response.templates[0].name, 'tests/event_page.html') + christmas_page = EventPage.objects.get(url_path='/home/events/christmas/') + self.assertEqual(response.context['self'], christmas_page) + + self.assertContains(response, '

    Christmas

    ') + self.assertContains(response, '

    Event

    ') + def test_serve_unknown_page_returns_404(self): response = self.client.get('/events/quinquagesima/') self.assertEqual(response.status_code, 404) From a926bf4fe3c80cc3a8bc42f1d05d88d30e548ec3 Mon Sep 17 00:00:00 2001 From: Matt Westcott Date: Tue, 12 Aug 2014 17:17:21 +0100 Subject: [PATCH 039/210] changelog entry for #531 --- CHANGELOG.txt | 4 ++++ CONTRIBUTORS.rst | 1 + docs/releases/0.6.rst | 22 ++++++++++++++++++++++ docs/releases/index.rst | 1 + 4 files changed, 28 insertions(+) create mode 100644 docs/releases/0.6.rst diff --git a/CHANGELOG.txt b/CHANGELOG.txt index bc53b8931f..6517434962 100644 --- a/CHANGELOG.txt +++ b/CHANGELOG.txt @@ -1,6 +1,10 @@ Changelog ========= +0.6 (xx.xx.20xx) +~~~~~~~~~~~~~~~~ + * Fix: Page URL generation now returns correct URLs for sites that have the main 'serve' view rooted somewhere other than '/' + 0.5 (01.08.2014) ~~~~~~~~~~~~~~~~ * Added multiple image uploader diff --git a/CONTRIBUTORS.rst b/CONTRIBUTORS.rst index df81741c9b..b69fdb539c 100644 --- a/CONTRIBUTORS.rst +++ b/CONTRIBUTORS.rst @@ -30,6 +30,7 @@ Contributors * Jeffrey Hearn * Robert Clark * Tim Heap +* Nathan Brizendine Translators =========== diff --git a/docs/releases/0.6.rst b/docs/releases/0.6.rst new file mode 100644 index 0000000000..4b798cd5e7 --- /dev/null +++ b/docs/releases/0.6.rst @@ -0,0 +1,22 @@ +========================================== +Wagtail 0.6 release notes - IN DEVELOPMENT +========================================== + +.. contents:: + :local: + :depth: 1 + + +What's new +========== + +Minor features +~~~~~~~~~~~~~~ + +Bug fixes +~~~~~~~~~ + + * Page URL generation now returns correct URLs for sites that have the main 'serve' view rooted somewhere other than '/'. + +Upgrade considerations +====================== diff --git a/docs/releases/index.rst b/docs/releases/index.rst index fbe12ecb2b..a9760c2392 100644 --- a/docs/releases/index.rst +++ b/docs/releases/index.rst @@ -5,6 +5,7 @@ Release notes :maxdepth: 1 roadmap + 0.6 0.5 0.4.1 0.4 From f2756ca43913e7fb87f664ba4ebaec8175340854 Mon Sep 17 00:00:00 2001 From: Matt Westcott Date: Wed, 13 Aug 2014 16:18:37 +0100 Subject: [PATCH 040/210] Mention South 1.0 requirement in 0.5 release notes --- docs/releases/0.5.rst | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/docs/releases/0.5.rst b/docs/releases/0.5.rst index 91ccf06c1d..1e440e27fd 100644 --- a/docs/releases/0.5.rst +++ b/docs/releases/0.5.rst @@ -122,3 +122,11 @@ Several new fields have been added to the Image and Rendition models to support ./manage.py schemamigration myapp --auto add_image_focal_point_fields (with 'myapp' replaced with your app name) will generate the necessary migration file. + + +South upgraded to 1.0 +~~~~~~~~~~~~~~~~~~~~~ + +In preparation for Django 1.7 support in a future release, Wagtail now depends on South 1.0, and its migration files have been moved from ``migrations`` to ``south_migrations``. Older versions of South will fail to find the migrations in the new location. + +If your project's requirements file (most commonly requirements.txt or requirements/base.txt) references a specific older version of South, this must be updated to South 1.0. \ No newline at end of file From 98698ef8d469745fea3a6bc8daaedfcb8ad76420 Mon Sep 17 00:00:00 2001 From: Tim Heap Date: Thu, 14 Aug 2014 10:28:50 +1000 Subject: [PATCH 041/210] Add `routablepageurl` template tag It is similar to `pageurl`, but works with `RoutablePage`s. Functions like a hybrid between `reverse` and `pageurl`. For example: {% load wagtailroutablepage_tags %} {% routablepageurl self "feed" %} {% routablepageurl self "archive" 2014 08 14 %} {% routablepageurl self "food" foo="bar" baz="quux" %} --- .../pages/advanced_topics/routable_page.rst | 16 ++++++++ .../templatetags/__init__.py | 0 .../templatetags/wagtailroutablepage_tags.py | 24 ++++++++++++ wagtail/contrib/wagtailroutablepage/tests.py | 37 ++++++++++++++++++- 4 files changed, 75 insertions(+), 2 deletions(-) create mode 100644 wagtail/contrib/wagtailroutablepage/templatetags/__init__.py create mode 100644 wagtail/contrib/wagtailroutablepage/templatetags/wagtailroutablepage_tags.py diff --git a/docs/core_components/pages/advanced_topics/routable_page.rst b/docs/core_components/pages/advanced_topics/routable_page.rst index 438c9625ee..95b859b72d 100644 --- a/docs/core_components/pages/advanced_topics/routable_page.rst +++ b/docs/core_components/pages/advanced_topics/routable_page.rst @@ -86,3 +86,19 @@ The ``RoutablePage`` class .. code-block:: python url = page.url + page.reverse_subpage('events_for_year', args=('2014', )) + +The ``routablepageurl`` template tag +==================================== + +.. currentmodule:: wagtail.contrib.wagtailroutablepage.templatetags.wagtailroutablepage_tags +.. autofunction:: routablepageurl + + Example: + + .. code-block:: html+django + + {% load wagtailroutablepage_tags %} + + {% routablepageurl self "feed" %} + {% routablepageurl self "archive" 2014 08 14 %} + {% routablepageurl self "food" foo="bar" baz="quux" %} diff --git a/wagtail/contrib/wagtailroutablepage/templatetags/__init__.py b/wagtail/contrib/wagtailroutablepage/templatetags/__init__.py new file mode 100644 index 0000000000..e69de29bb2 diff --git a/wagtail/contrib/wagtailroutablepage/templatetags/wagtailroutablepage_tags.py b/wagtail/contrib/wagtailroutablepage/templatetags/wagtailroutablepage_tags.py new file mode 100644 index 0000000000..6af38c245d --- /dev/null +++ b/wagtail/contrib/wagtailroutablepage/templatetags/wagtailroutablepage_tags.py @@ -0,0 +1,24 @@ +from django import template + + +register = template.Library() + + +@register.simple_tag(takes_context=True) +def routablepageurl(context, page, url_name, *args, **kwargs): + """ + ``routablepageurl`` is similar to ``pageurl``, but works with + ``RoutablePage``\s. It behaves like a hybrid between the built-in + ``reverse``, and ``pageurl`` from Wagtail. + + ``page`` is the RoutablePage that URLs will be generated from. + + ``url_name`` is a URL name defined in ``page.subpage_urls``. + + Positional arguments and keyword arguments should be passed as normal + positional arguments and keyword arguments. + """ + request = context['request'] + base_url = page.relative_url(request.site) + routed_url = page.reverse_subpage(url_name, args=args, kwargs=kwargs) + return base_url + routed_url diff --git a/wagtail/contrib/wagtailroutablepage/tests.py b/wagtail/contrib/wagtailroutablepage/tests.py index 505df45b37..1aa8f53d1d 100644 --- a/wagtail/contrib/wagtailroutablepage/tests.py +++ b/wagtail/contrib/wagtailroutablepage/tests.py @@ -1,7 +1,8 @@ -from django.test import TestCase +from django.test import TestCase, RequestFactory -from wagtail.wagtailcore.models import Page +from wagtail.wagtailcore.models import Page, Site from wagtail.tests.models import RoutablePageTest, routable_page_external_view +from wagtail.contrib.wagtailroutablepage.templatetags.wagtailroutablepage_tags import routablepageurl class TestRoutablePage(TestCase): @@ -80,3 +81,35 @@ class TestRoutablePage(TestCase): response = self.client.get(self.routable_page.url + 'external/joe-bloggs/') self.assertContains(response, "EXTERNAL VIEW: joe-bloggs") + + +class TestRoutablePageTemplateTag(TestRoutablePage): + def setUp(self): + super(TestRoutablePageTemplateTag, self).setUp() + self.rf = RequestFactory() + self.request = self.rf.get(self.routable_page.url) + self.request.site = Site.find_for_request(self.request) + self.context = {'request': self.request} + + def test_templatetag_reverse_main_view(self): + url = routablepageurl(self.context, self.routable_page, + 'main') + self.assertEqual(url, self.routable_page.url) + + def test_templatetag_reverse_archive_by_year_view(self): + url = routablepageurl(self.context, self.routable_page, + 'archive_by_year', '2014') + + self.assertEqual(url, self.routable_page.url + 'archive/year/2014/') + + def test_templatetag_reverse_archive_by_author_view(self): + url = routablepageurl(self.context, self.routable_page, + 'archive_by_author', author_slug='joe-bloggs') + + self.assertEqual(url, self.routable_page.url + 'archive/author/joe-bloggs/') + + def test_templatetag_reverse_external_view(self): + url = routablepageurl(self.context, self.routable_page, + 'external_view', 'joe-bloggs') + + self.assertEqual(url, self.routable_page.url + 'external/joe-bloggs/') From ba6ade482e38003a40656f7f6fa57caaea03408d Mon Sep 17 00:00:00 2001 From: Karl Hobley Date: Mon, 18 Aug 2014 09:18:15 +0100 Subject: [PATCH 042/210] Changelog and release notes for #538 --- CHANGELOG.txt | 1 + docs/core_components/pages/advanced_topics/routable_page.rst | 4 ++++ docs/releases/0.6.rst | 1 + 3 files changed, 6 insertions(+) diff --git a/CHANGELOG.txt b/CHANGELOG.txt index 6517434962..7530812f61 100644 --- a/CHANGELOG.txt +++ b/CHANGELOG.txt @@ -3,6 +3,7 @@ Changelog 0.6 (xx.xx.20xx) ~~~~~~~~~~~~~~~~ + * Added {% routablepageurl %} template tag (@timheap) * Fix: Page URL generation now returns correct URLs for sites that have the main 'serve' view rooted somewhere other than '/' 0.5 (01.08.2014) diff --git a/docs/core_components/pages/advanced_topics/routable_page.rst b/docs/core_components/pages/advanced_topics/routable_page.rst index 95b859b72d..8c8d13e581 100644 --- a/docs/core_components/pages/advanced_topics/routable_page.rst +++ b/docs/core_components/pages/advanced_topics/routable_page.rst @@ -87,9 +87,13 @@ The ``RoutablePage`` class url = page.url + page.reverse_subpage('events_for_year', args=('2014', )) + .. _routablepageurl_template_tag: + The ``routablepageurl`` template tag ==================================== +.. versionadded:: 0.6 + .. currentmodule:: wagtail.contrib.wagtailroutablepage.templatetags.wagtailroutablepage_tags .. autofunction:: routablepageurl diff --git a/docs/releases/0.6.rst b/docs/releases/0.6.rst index 4b798cd5e7..5ab1769daa 100644 --- a/docs/releases/0.6.rst +++ b/docs/releases/0.6.rst @@ -12,6 +12,7 @@ What's new Minor features ~~~~~~~~~~~~~~ + * A new template tag has been added for reversing URLs inside routable pages. See :ref:`routablepageurl_template_tag`. Bug fixes ~~~~~~~~~ From 75e0d32b60dac8ddd41d6cf3958b134190ce6fde Mon Sep 17 00:00:00 2001 From: Karl Hobley Date: Mon, 18 Aug 2014 11:40:48 +0100 Subject: [PATCH 043/210] Improved example for 'subpage_urls' in RoutablePage documentation --- .../pages/advanced_topics/routable_page.rst | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/docs/core_components/pages/advanced_topics/routable_page.rst b/docs/core_components/pages/advanced_topics/routable_page.rst index 8c8d13e581..465b0b148c 100644 --- a/docs/core_components/pages/advanced_topics/routable_page.rst +++ b/docs/core_components/pages/advanced_topics/routable_page.rst @@ -65,10 +65,17 @@ The ``RoutablePage`` class from django.conf.urls import url - subpage_urls = ( - url(r'^$', 'serve', name='main'), - url(r'^archive/$', 'archive', name='archive'), - ) + class MyPage(RoutablePage): + subpage_urls = ( + url(r'^$', 'serve', name='main'), + url(r'^archive/$', 'archive', name='archive'), + ) + + def serve(self, request): + ... + + def archive(self, request): + ... .. automethod:: resolve_subpage @@ -87,6 +94,7 @@ The ``RoutablePage`` class url = page.url + page.reverse_subpage('events_for_year', args=('2014', )) + .. _routablepageurl_template_tag: The ``routablepageurl`` template tag From 72ffe88d38f425474a37dab09ed89c979a4b3841 Mon Sep 17 00:00:00 2001 From: Karl Hobley Date: Mon, 18 Aug 2014 15:13:35 +0100 Subject: [PATCH 044/210] Deleted files that were moved in Wagtail 0.4 --- wagtail/wagtailadmin/hooks.py | 14 -------------- wagtail/wagtailcore/templatetags/pageurl.py | 11 ----------- wagtail/wagtailcore/templatetags/rich_text.py | 11 ----------- wagtail/wagtailcore/util.py | 10 ---------- .../wagtailembeds/templatetags/embed_filters.py | 11 ----------- wagtail/wagtailimages/templatetags/image_tags.py | 11 ----------- 6 files changed, 68 deletions(-) delete mode 100644 wagtail/wagtailadmin/hooks.py delete mode 100644 wagtail/wagtailcore/templatetags/pageurl.py delete mode 100644 wagtail/wagtailcore/templatetags/rich_text.py delete mode 100644 wagtail/wagtailcore/util.py delete mode 100644 wagtail/wagtailembeds/templatetags/embed_filters.py delete mode 100644 wagtail/wagtailimages/templatetags/image_tags.py diff --git a/wagtail/wagtailadmin/hooks.py b/wagtail/wagtailadmin/hooks.py deleted file mode 100644 index 8c8a2374a5..0000000000 --- a/wagtail/wagtailadmin/hooks.py +++ /dev/null @@ -1,14 +0,0 @@ -# The 'hooks' module is now part of wagtailcore. -# Imports are provided here for backwards compatibility - -import warnings - -from wagtail.utils.deprecation import RemovedInWagtail06Warning - - -warnings.warn( - "The wagtail.wagtailadmin.hooks module has been moved. " - "Use wagtail.wagtailcore.hooks instead.", RemovedInWagtail06Warning) - - -from wagtail.wagtailcore.hooks import register, get_hooks diff --git a/wagtail/wagtailcore/templatetags/pageurl.py b/wagtail/wagtailcore/templatetags/pageurl.py deleted file mode 100644 index 016a777590..0000000000 --- a/wagtail/wagtailcore/templatetags/pageurl.py +++ /dev/null @@ -1,11 +0,0 @@ -import warnings - -from wagtail.utils.deprecation import RemovedInWagtail06Warning - - -warnings.warn( - "The pageurl tag library has been moved to wagtailcore_tags. " - "Use {% load wagtailcore_tags %} instead.", RemovedInWagtail06Warning) - - -from wagtail.wagtailcore.templatetags.wagtailcore_tags import register, pageurl diff --git a/wagtail/wagtailcore/templatetags/rich_text.py b/wagtail/wagtailcore/templatetags/rich_text.py deleted file mode 100644 index 09e93d846e..0000000000 --- a/wagtail/wagtailcore/templatetags/rich_text.py +++ /dev/null @@ -1,11 +0,0 @@ -import warnings - -from wagtail.utils.deprecation import RemovedInWagtail06Warning - - -warnings.warn( - "The rich_text tag library has been moved to wagtailcore_tags. " - "Use {% load wagtailcore_tags %} instead.", RemovedInWagtail06Warning) - - -from wagtail.wagtailcore.templatetags.wagtailcore_tags import register, richtext diff --git a/wagtail/wagtailcore/util.py b/wagtail/wagtailcore/util.py deleted file mode 100644 index 7bbe82f57d..0000000000 --- a/wagtail/wagtailcore/util.py +++ /dev/null @@ -1,10 +0,0 @@ -import warnings - -from wagtail.utils.deprecation import RemovedInWagtail06Warning - - -warnings.warn( - "The wagtail.wagtailcore.util module has been renamed. " - "Use wagtail.wagtailcore.utils instead.", RemovedInWagtail06Warning) - -from .utils import * diff --git a/wagtail/wagtailembeds/templatetags/embed_filters.py b/wagtail/wagtailembeds/templatetags/embed_filters.py deleted file mode 100644 index 1eef037e81..0000000000 --- a/wagtail/wagtailembeds/templatetags/embed_filters.py +++ /dev/null @@ -1,11 +0,0 @@ -import warnings - -from wagtail.utils.deprecation import RemovedInWagtail06Warning - - -warnings.warn( - "The embed_filters tag library has been moved to wagtailembeds_tags. " - "Use {% load wagtailembeds_tags %} instead.", RemovedInWagtail06Warning) - - -from wagtail.wagtailembeds.templatetags.wagtailembeds_tags import register, embed diff --git a/wagtail/wagtailimages/templatetags/image_tags.py b/wagtail/wagtailimages/templatetags/image_tags.py deleted file mode 100644 index 00e59aca0d..0000000000 --- a/wagtail/wagtailimages/templatetags/image_tags.py +++ /dev/null @@ -1,11 +0,0 @@ -import warnings - -from wagtail.utils.deprecation import RemovedInWagtail06Warning - - -warnings.warn( - "The image_tags tag library has been moved to wagtailimages_tags. " - "Use {% load wagtailimages_tags %} instead.", RemovedInWagtail06Warning) - - -from wagtail.wagtailimages.templatetags.wagtailimages_tags import register, image From a05419bfd1c135db21d1c87a2e2850a52b7b9211 Mon Sep 17 00:00:00 2001 From: Karl Hobley Date: Mon, 18 Aug 2014 15:15:11 +0100 Subject: [PATCH 045/210] Removed css_path argument from wagtailuserbar template tag --- wagtail/wagtailadmin/templatetags/wagtailuserbar.py | 8 +------- 1 file changed, 1 insertion(+), 7 deletions(-) diff --git a/wagtail/wagtailadmin/templatetags/wagtailuserbar.py b/wagtail/wagtailadmin/templatetags/wagtailuserbar.py index c7861185e1..99449665ba 100644 --- a/wagtail/wagtailadmin/templatetags/wagtailuserbar.py +++ b/wagtail/wagtailadmin/templatetags/wagtailuserbar.py @@ -12,13 +12,7 @@ register = template.Library() @register.simple_tag(takes_context=True) -def wagtailuserbar(context, css_path=None): - if css_path is not None: - warnings.warn( - "Passing a CSS path to the wagtailuserbar tag is no longer required; use {% wagtailuserbar %} instead", - RemovedInWagtail06Warning - ) - +def wagtailuserbar(context): # Find request object request = context['request'] From b32ba7fee9533aec1aca84f7b168332f96b54ce5 Mon Sep 17 00:00:00 2001 From: Karl Hobley Date: Mon, 18 Aug 2014 15:26:00 +0100 Subject: [PATCH 046/210] Use of old style routing will now raise a RuntimeError --- wagtail/wagtailcore/tests/test_page_model.py | 15 +++------------ wagtail/wagtailcore/views.py | 6 +----- 2 files changed, 4 insertions(+), 17 deletions(-) diff --git a/wagtail/wagtailcore/tests/test_page_model.py b/wagtail/wagtailcore/tests/test_page_model.py index d494b26548..848691440e 100644 --- a/wagtail/wagtailcore/tests/test_page_model.py +++ b/wagtail/wagtailcore/tests/test_page_model.py @@ -286,19 +286,10 @@ class TestServeView(TestCase): def test_old_style_routing(self): """ Test that route() methods that return an HttpResponse are correctly handled + + Old style routing was deprecated in Wagtail 0.4 and removed in 0.6 """ - with warnings.catch_warnings(record=True) as w: - response = self.client.get('/old-style-route/') - - # Check that a RemovedInWagtail06Warning has been triggered - self.assertEqual(len(w), 1) - self.assertTrue(issubclass(w[-1].category, RemovedInWagtail06Warning)) - self.assertTrue("Page.route should return an instance of wagtailcore.url_routing.RouteResult" in str(w[-1].message)) - - expected_page = PageWithOldStyleRouteMethod.objects.get(url_path='/home/old-style-route/') - self.assertEqual(response.status_code, 200) - self.assertEqual(response.context['self'], expected_page) - self.assertEqual(response.templates[0].name, 'tests/simple_page.html') + self.assertRaises(RuntimeError, self.client.get, '/old-style-route/') def test_before_serve_hook(self): response = self.client.get('/events/', HTTP_USER_AGENT='GoogleBot') diff --git a/wagtail/wagtailcore/views.py b/wagtail/wagtailcore/views.py index 5daa642b98..14fdba8e71 100644 --- a/wagtail/wagtailcore/views.py +++ b/wagtail/wagtailcore/views.py @@ -21,11 +21,7 @@ def serve(request, path): path_components = [component for component in path.split('/') if component] route_result = request.site.root_page.specific.route(request, path_components) if isinstance(route_result, HttpResponse): - warnings.warn( - "Page.route should return an instance of wagtailcore.url_routing.RouteResult, not an HttpResponse", - RemovedInWagtail06Warning - ) - return route_result + raise RuntimeError("Page.route should return an instance of wagtailcore.url_routing.RouteResult, not an HttpResponse") (page, args, kwargs) = route_result for fn in hooks.get_hooks('before_serve_page'): From 9cd1acd4a96753db43704dce0eac729cf8c7b92d Mon Sep 17 00:00:00 2001 From: Karl Hobley Date: Mon, 18 Aug 2014 16:02:33 +0100 Subject: [PATCH 047/210] Raise error when indexed_fields setting is used --- wagtail/tests/models.py | 20 ++++- wagtail/wagtailsearch/indexed.py | 81 +++---------------- .../wagtailsearch/tests/test_indexed_class.py | 40 ++------- 3 files changed, 35 insertions(+), 106 deletions(-) diff --git a/wagtail/tests/models.py b/wagtail/tests/models.py index a38d889bd7..eab72d2323 100644 --- a/wagtail/tests/models.py +++ b/wagtail/tests/models.py @@ -420,6 +420,8 @@ class SearchTestOldConfig(models.Model, indexed.Indexed): """ This tests that the Indexed class can correctly handle models that use the old "indexed_fields" configuration format. + + This format was deprecated in 0.4 and removed in 0.6 """ indexed_fields = { # A search field with predictive search and boosting @@ -437,13 +439,27 @@ class SearchTestOldConfig(models.Model, indexed.Indexed): } -class SearchTestOldConfigList(models.Model, indexed.Indexed): +class SearchTestOldConfigAndNewConfig(models.Model, indexed.Indexed): """ This tests that the Indexed class can correctly handle models that - use the old "indexed_fields" configuration format using a list. + use both the old "indexed_fields" and the new "search_fields" configuration + format. + + Usually, when wagtailsearch detects that "indexed_fields" is being used, it + will raise a RuntimeError. + + This behaviour may get in the way of people developing apps that support + older versions of Wagtail. So Wagtail allows "indexed_fields" to be defined + on a classes as long as they also define "search_fields" as well. Wagtail 0.4+ + will simply ignore the "indexed_fields" attribute in this case. """ indexed_fields = ['title', 'content'] + search_fields = ( + indexed.SearchField('title'), + indexed.SearchField('content'), + ) + def routable_page_external_view(request, arg): return HttpResponse("EXTERNAL VIEW: " + arg) diff --git a/wagtail/wagtailsearch/indexed.py b/wagtail/wagtailsearch/indexed.py index e775ff5c70..eb59337514 100644 --- a/wagtail/wagtailsearch/indexed.py +++ b/wagtail/wagtailsearch/indexed.py @@ -37,80 +37,19 @@ class Indexed(object): # At toplevel, return this content type return (cls._meta.app_label + '_' + cls.__name__).lower() - @classmethod - def indexed_get_indexed_fields(cls): - # Get indexed fields for this class as dictionary - indexed_fields = cls.indexed_fields - if isinstance(indexed_fields, dict): - # Make sure we have a copy to prevent us accidentally changing the configuration - indexed_fields = indexed_fields.copy() - else: - # Convert to dict - if isinstance(indexed_fields, tuple): - indexed_fields = list(indexed_fields) - if isinstance(indexed_fields, string_types): - indexed_fields = [indexed_fields] - if isinstance(indexed_fields, list): - indexed_fields = dict((field, dict(type='string')) for field in indexed_fields) - if not isinstance(indexed_fields, dict): - raise ValueError() - - # Get indexed fields for parent class - parent = cls.indexed_get_parent(require_model=False) - if parent: - # Add parent fields into this list - parent_indexed_fields = parent.indexed_get_indexed_fields().copy() - parent_indexed_fields.update(indexed_fields) - indexed_fields = parent_indexed_fields - return indexed_fields - @classmethod def get_search_fields(cls): - search_fields = [] + # Raise an error if the 'indexed_fields' attribute is being used on a class without 'search_fields' + # Note: We still allow people to define 'indexed_fields' as long as they also define 'search_fields' + # on the same class. This allows people to still write code that is compatible with older versions + # of Wagtail and we still catch issues where code using the old 'indexed_fields' setting hasn't been + # updated. + if 'indexed_fields' in cls.__dict__ and not 'search_fields' in cls.__dict__: + raise RuntimeError("The indexed_fields attribute has been replaced with search_fields. " \ + "Please update %s.%s to use the search_fields setting." % (cls._meta.app_label, cls.__name__)) - if hasattr(cls, 'search_fields'): - search_fields.extend(cls.search_fields) - - # Backwards compatibility with old indexed_fields setting - - # Get indexed fields - indexed_fields = cls.indexed_get_indexed_fields() - - # Display deprecation warning if indexed_fields has been used - if indexed_fields: - warnings.warn("'indexed_fields' setting is now deprecated." - "Use 'search_fields' instead.", RemovedInWagtail06Warning) - - # Convert them into search fields - for field_name, _config in indexed_fields.items(): - # Copy the config to prevent is trashing anything accidentally - config = _config.copy() - - # Check if this is a filter field - if config.get('index', None) == 'not_analyzed': - config.pop('index') - search_fields.append(FilterField(field_name, es_extra=config)) - continue - - # Must be a search field, check for boosting and partial matching - boost = config.pop('boost', None) - - partial_match = False - if config.get('analyzer', None) == 'edgengram_analyzer': - partial_match = True - config.pop('analyzer') - - # Add the field - search_fields.append(SearchField(field_name, boost=boost, partial_match=partial_match, es_extra=config)) - - # Remove any duplicate entries into search fields - # We need to take into account that fields can be indexed as both a SearchField and as a FilterField - search_fields_dict = {} - for field in search_fields: - search_fields_dict[(field.field_name, type(field))] = field - search_fields = search_fields_dict.values() - - return search_fields + # Return value of 'search_fields' attribute + return getattr(cls, 'search_fields', tuple()) @classmethod def get_searchable_search_fields(cls): diff --git a/wagtail/wagtailsearch/tests/test_indexed_class.py b/wagtail/wagtailsearch/tests/test_indexed_class.py index 983d8e0bab..b89b94a032 100644 --- a/wagtail/wagtailsearch/tests/test_indexed_class.py +++ b/wagtail/wagtailsearch/tests/test_indexed_class.py @@ -17,37 +17,11 @@ class TestContentTypeNames(TestCase): self.assertEqual(name, 'tests_searchtest_tests_searchtestchild') -class TestIndexedFieldsBackwardsCompatibility(TestCase, WagtailTestUtils): - def test_indexed_fields_backwards_compatibility(self): - # Get search fields - with self.ignore_deprecation_warnings(): - search_fields = models.SearchTestOldConfig.get_search_fields() +class TestIndexedFieldsBackwardsIncompatibility(TestCase, WagtailTestUtils): + def test_use_of_indexed_fields_raises_error(self): + # SearchTestOldConfig.get_search_fields should raise a RuntimeError + self.assertRaises(RuntimeError, models.SearchTestOldConfig.get_search_fields) - search_fields_dict = dict( - ((field.field_name, type(field)), field) - for field in search_fields - ) - - # Check that the fields were found - self.assertEqual(len(search_fields_dict), 2) - self.assertIn(('title', indexed.SearchField), search_fields_dict.keys()) - self.assertIn(('live', indexed.FilterField), search_fields_dict.keys()) - - # Check that the title field has the correct settings - self.assertTrue(search_fields_dict[('title', indexed.SearchField)].partial_match) - self.assertEqual(search_fields_dict[('title', indexed.SearchField)].boost, 100) - - def test_indexed_fields_backwards_compatibility_list(self): - # Get search fields - with self.ignore_deprecation_warnings(): - search_fields = models.SearchTestOldConfigList.get_search_fields() - - search_fields_dict = dict( - ((field.field_name, type(field)), field) - for field in search_fields - ) - - # Check that the fields were found - self.assertEqual(len(search_fields_dict), 2) - self.assertIn(('title', indexed.SearchField), search_fields_dict.keys()) - self.assertIn(('content', indexed.SearchField), search_fields_dict.keys()) + def test_use_of_indexed_fields_with_search_fields_doesnt_raise_error(self): + # SearchTestOldConfigAndNewConfig.get_search_fields shouldnt raise an error + search_fields = models.SearchTestOldConfigAndNewConfig.get_search_fields() From 269d156a26ed5759e76208b8a4c0fb44990bdf9c Mon Sep 17 00:00:00 2001 From: Karl Hobley Date: Mon, 18 Aug 2014 16:06:00 +0100 Subject: [PATCH 048/210] Make tests.EventPage use search_fields --- wagtail/tests/models.py | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/wagtail/tests/models.py b/wagtail/tests/models.py index eab72d2323..feb5b31568 100644 --- a/wagtail/tests/models.py +++ b/wagtail/tests/models.py @@ -228,8 +228,11 @@ class EventPage(Page): related_name='+' ) - indexed_fields = ('get_audience_display', 'location', 'body') - search_name = "Event" + search_fields = ( + indexed.SearchField('get_audience_display'), + indexed.SearchField('location'), + indexed.SearchField('body'), + ) password_required_template = 'tests/event_page_password_required.html' From df31e2942812151ddfe733d182a4de5b8ac08b59 Mon Sep 17 00:00:00 2001 From: Karl Hobley Date: Mon, 18 Aug 2014 16:20:19 +0100 Subject: [PATCH 049/210] Make sure that update_index doesn't attempt to index the SearchTestOldConfig model --- wagtail/wagtailsearch/management/commands/update_index.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/wagtail/wagtailsearch/management/commands/update_index.py b/wagtail/wagtailsearch/management/commands/update_index.py index c52b756398..8c587f2fdb 100644 --- a/wagtail/wagtailsearch/management/commands/update_index.py +++ b/wagtail/wagtailsearch/management/commands/update_index.py @@ -12,6 +12,9 @@ class Command(BaseCommand): # Get list of indexed models indexed_models = [model for model in models.get_models() if issubclass(model, Indexed)] + # HACK: Make sure SearchTestOldConfig model is not in indexed_models to prevent test failures + indexed_models = [model for model in indexed_models if model.__name__ != 'SearchTestOldConfig'] + # Object set object_set = {} From 11c2829e7985fdb9da312b5a148bf81ca94ceb91 Mon Sep 17 00:00:00 2001 From: Karl Hobley Date: Mon, 18 Aug 2014 16:29:30 +0100 Subject: [PATCH 050/210] Removed features deprecated in wagtailcore models --- wagtail/wagtailcore/models.py | 45 ++++++----------------------------- 1 file changed, 7 insertions(+), 38 deletions(-) diff --git a/wagtail/wagtailcore/models.py b/wagtail/wagtailcore/models.py index a237e16e6d..74429e0ab2 100644 --- a/wagtail/wagtailcore/models.py +++ b/wagtail/wagtailcore/models.py @@ -26,8 +26,6 @@ from django.utils.encoding import python_2_unicode_compatible from treebeard.mp_tree import MP_Node -from wagtail.utils.deprecation import RemovedInWagtail06Warning - from wagtail.wagtailcore.utils import camelcase_to_underscore from wagtail.wagtailcore.query import PageQuerySet from wagtail.wagtailcore.url_routing import RouteResult @@ -149,31 +147,6 @@ def get_page_types(): return _PAGE_CONTENT_TYPES -def get_leaf_page_content_type_ids(): - warnings.warn(""" - get_leaf_page_content_type_ids is deprecated, as it treats pages without an explicit subpage_types - setting as 'leaf' pages. Code that calls get_leaf_page_content_type_ids must be rewritten to avoid - this incorrect assumption. - """, RemovedInWagtail06Warning) - return [ - content_type.id - for content_type in get_page_types() - if not getattr(content_type.model_class(), 'subpage_types', None) - ] - -def get_navigable_page_content_type_ids(): - warnings.warn(""" - get_navigable_page_content_type_ids is deprecated, as it treats pages without an explicit subpage_types - setting as 'leaf' pages. Code that calls get_navigable_page_content_type_ids must be rewritten to avoid - this incorrect assumption. - """, RemovedInWagtail06Warning) - return [ - content_type.id - for content_type in get_page_types() - if getattr(content_type.model_class(), 'subpage_types', None) - ] - - class PageManager(models.Manager): def get_queryset(self): return PageQuerySet(self.model).order_by('path') @@ -476,14 +449,6 @@ class Page(six.with_metaclass(PageBase, MP_Node, ClusterableModel, indexed.Index """ return (not self.is_leaf()) or self.depth == 2 - def get_other_siblings(self): - warnings.warn( - "The 'Page.get_other_siblings()' method has been replaced. " - "Use 'Page.get_siblings(inclusive=False)' instead.", RemovedInWagtail06Warning) - - # get sibling pages excluding self - return self.get_siblings().exclude(id=self.id) - @property def full_url(self): """Return the full URL (including protocol / domain) to this page, or None if it is not routable""" @@ -728,14 +693,18 @@ class Page(six.with_metaclass(PageBase, MP_Node, ClusterableModel, indexed.Index for example, a page containing a form might have a default view of the form, and a post-submission 'thankyou' page """ - modes = self.get_page_modes() + modes = self.get_page_modes(i_know_what_im_doing=True) if modes is not Page.DEFAULT_PREVIEW_MODES: # User has overriden get_page_modes instead of using preview_modes - warnings.warn("Overriding get_page_modes is deprecated. Define a preview_modes property instead", RemovedInWagtail06Warning) + raise RuntimeError("get_page_modes has been removed. Define a preview_modes property instead.") return modes - def get_page_modes(self): + def get_page_modes(self, i_know_what_im_doing=False): + # Raise error if this was called directly + if not i_know_what_im_doing: + raise RuntimeError("get_page_modes has been removed. Use the preview_modes property instead.") + # Deprecated accessor for the preview_modes property return Page.DEFAULT_PREVIEW_MODES From ec7dfb0e84437d21fb00d82cb5d9a7c8d17a6318 Mon Sep 17 00:00:00 2001 From: Karl Hobley Date: Mon, 18 Aug 2014 16:34:36 +0100 Subject: [PATCH 051/210] Removed show_as_mode --- wagtail/wagtailadmin/views/pages.py | 29 ++--------------------------- 1 file changed, 2 insertions(+), 27 deletions(-) diff --git a/wagtail/wagtailadmin/views/pages.py b/wagtail/wagtailadmin/views/pages.py index 3de6f7cb56..a7212cc3e2 100644 --- a/wagtail/wagtailadmin/views/pages.py +++ b/wagtail/wagtailadmin/views/pages.py @@ -12,8 +12,6 @@ from django.utils.translation import ugettext as _ from django.views.decorators.http import require_GET from django.views.decorators.vary import vary_on_headers -from wagtail.utils.deprecation import RemovedInWagtail06Warning - from wagtail.wagtailadmin.edit_handlers import TabbedInterface, ObjectList from wagtail.wagtailadmin.forms import SearchForm, CopyForm from wagtail.wagtailadmin import tasks, signals @@ -427,27 +425,6 @@ def view_draft(request, page_id): return page.serve_preview(page.dummy_request(), page.default_preview_mode) -def get_preview_response(page, preview_mode): - """ - Helper function for preview_on_edit and preview_on_create - - return a page's preview response via either serve_preview or the deprecated - show_as_mode method - """ - # Check the deprecated Page.show_as_mode method, as subclasses of Page - # might be overriding that to return a response - response = page.show_as_mode(preview_mode) - if response: - warnings.warn( - "Defining 'show_as_mode' on a page model is deprecated. Use 'serve_preview' instead", - RemovedInWagtail06Warning - ) - return response - else: - # show_as_mode did not return a response, so go ahead and use the 'proper' - # serve_preview method - return page.serve_preview(page.dummy_request(), preview_mode) - - @permission_required('wagtailadmin.access_admin') def preview_on_edit(request, page_id): # Receive the form submission that would typically be posted to the 'edit' view. If submission is valid, @@ -462,8 +439,7 @@ def preview_on_edit(request, page_id): form.save(commit=False) preview_mode = request.GET.get('mode', page.default_preview_mode) - response = get_preview_response(page, preview_mode) - + response = page.serve_preview(page.dummy_request(), preview_mode) response['X-Wagtail-Preview'] = 'ok' return response @@ -507,8 +483,7 @@ def preview_on_create(request, content_type_app_name, content_type_model_name, p page.path = Page._get_children_path_interval(parent_page.path)[1] preview_mode = request.GET.get('mode', page.default_preview_mode) - response = get_preview_response(page, preview_mode) - + response = page.serve_preview(page.dummy_request(), preview_mode) response['X-Wagtail-Preview'] = 'ok' return response From f7325ca4194d15535092767ed1de3e2bc00964e1 Mon Sep 17 00:00:00 2001 From: Karl Hobley Date: Mon, 18 Aug 2014 16:40:19 +0100 Subject: [PATCH 052/210] Updated deprecation warning classes Also removed some occurances of RemovedInWagtail06Warning --- wagtail/utils/deprecation.py | 4 ++-- wagtail/wagtailadmin/templatetags/wagtailuserbar.py | 2 -- wagtail/wagtailcore/tests/test_page_model.py | 2 -- wagtail/wagtailcore/views.py | 2 -- wagtail/wagtailsearch/indexed.py | 2 -- 5 files changed, 2 insertions(+), 10 deletions(-) diff --git a/wagtail/utils/deprecation.py b/wagtail/utils/deprecation.py index 24dc4e589a..dd8d89e918 100644 --- a/wagtail/utils/deprecation.py +++ b/wagtail/utils/deprecation.py @@ -1,6 +1,6 @@ -class RemovedInWagtail06Warning(DeprecationWarning): +class RemovedInWagtail07Warning(DeprecationWarning): pass -class RemovedInWagtail07Warning(PendingDeprecationWarning): +class RemovedInWagtail08Warning(PendingDeprecationWarning): pass diff --git a/wagtail/wagtailadmin/templatetags/wagtailuserbar.py b/wagtail/wagtailadmin/templatetags/wagtailuserbar.py index 99449665ba..2846d95064 100644 --- a/wagtail/wagtailadmin/templatetags/wagtailuserbar.py +++ b/wagtail/wagtailadmin/templatetags/wagtailuserbar.py @@ -3,8 +3,6 @@ import warnings from django import template from django.template.loader import render_to_string -from wagtail.utils.deprecation import RemovedInWagtail06Warning - from wagtail.wagtailcore.models import Page diff --git a/wagtail/wagtailcore/tests/test_page_model.py b/wagtail/wagtailcore/tests/test_page_model.py index 848691440e..5cb21152a4 100644 --- a/wagtail/wagtailcore/tests/test_page_model.py +++ b/wagtail/wagtailcore/tests/test_page_model.py @@ -4,8 +4,6 @@ from django.test import TestCase, Client from django.test.utils import override_settings from django.http import HttpRequest, Http404 -from wagtail.utils.deprecation import RemovedInWagtail06Warning - from wagtail.wagtailcore.models import Page, Site from wagtail.tests.models import EventPage, EventIndex, SimplePage, PageWithOldStyleRouteMethod diff --git a/wagtail/wagtailcore/views.py b/wagtail/wagtailcore/views.py index 14fdba8e71..e4c370ff60 100644 --- a/wagtail/wagtailcore/views.py +++ b/wagtail/wagtailcore/views.py @@ -5,8 +5,6 @@ from django.shortcuts import get_object_or_404, redirect from django.core.urlresolvers import reverse from django.conf import settings -from wagtail.utils.deprecation import RemovedInWagtail06Warning - from wagtail.wagtailcore import hooks from wagtail.wagtailcore.models import Page, PageViewRestriction from wagtail.wagtailcore.forms import PasswordPageViewRestrictionForm diff --git a/wagtail/wagtailsearch/indexed.py b/wagtail/wagtailsearch/indexed.py index eb59337514..a8e5c5e424 100644 --- a/wagtail/wagtailsearch/indexed.py +++ b/wagtail/wagtailsearch/indexed.py @@ -4,8 +4,6 @@ from six import string_types from django.db import models -from wagtail.utils.deprecation import RemovedInWagtail06Warning - class Indexed(object): @classmethod From bfd83ecefb6def80fc5df6be03b891ff4b6396cf Mon Sep 17 00:00:00 2001 From: Jose Lourenco Date: Mon, 18 Aug 2014 17:27:58 +0100 Subject: [PATCH 053/210] (re-)add pt_PT localization to wagtail 0.5.0. --- .../locale/pt_PT/LC_MESSAGES/django.mo | Bin 0 -> 17850 bytes .../locale/pt_PT/LC_MESSAGES/django.po | 1127 +++++++++++++++++ .../locale/pt_PT/LC_MESSAGES/django.mo | Bin 0 -> 2638 bytes .../locale/pt_PT/LC_MESSAGES/django.po | 97 ++ .../locale/pt_PT/LC_MESSAGES/django.mo | Bin 0 -> 2800 bytes .../locale/pt_PT/LC_MESSAGES/django.po | 196 +++ .../locale/pt_PT/LC_MESSAGES/django.mo | Bin 0 -> 1158 bytes .../locale/pt_PT/LC_MESSAGES/django.po | 57 + .../locale/pt_PT/LC_MESSAGES/django.mo | Bin 0 -> 5148 bytes .../locale/pt_PT/LC_MESSAGES/django.po | 314 +++++ .../locale/pt_PT/LC_MESSAGES/django.mo | Bin 0 -> 2874 bytes .../locale/pt_PT/LC_MESSAGES/django.po | 169 +++ .../locale/pt_PT/LC_MESSAGES/django.mo | Bin 0 -> 4993 bytes .../locale/pt_PT/LC_MESSAGES/django.po | 237 ++++ .../locale/pt_PT/LC_MESSAGES/django.mo | Bin 0 -> 2708 bytes .../locale/pt_PT/LC_MESSAGES/django.po | 153 +++ .../locale/pt_PT/LC_MESSAGES/django.mo | Bin 0 -> 3794 bytes .../locale/pt_PT/LC_MESSAGES/django.po | 206 +++ 18 files changed, 2556 insertions(+) create mode 100644 wagtail/wagtailadmin/locale/pt_PT/LC_MESSAGES/django.mo create mode 100644 wagtail/wagtailadmin/locale/pt_PT/LC_MESSAGES/django.po create mode 100644 wagtail/wagtailcore/locale/pt_PT/LC_MESSAGES/django.mo create mode 100644 wagtail/wagtailcore/locale/pt_PT/LC_MESSAGES/django.po create mode 100644 wagtail/wagtaildocs/locale/pt_PT/LC_MESSAGES/django.mo create mode 100644 wagtail/wagtaildocs/locale/pt_PT/LC_MESSAGES/django.po create mode 100644 wagtail/wagtailembeds/locale/pt_PT/LC_MESSAGES/django.mo create mode 100644 wagtail/wagtailembeds/locale/pt_PT/LC_MESSAGES/django.po create mode 100644 wagtail/wagtailimages/locale/pt_PT/LC_MESSAGES/django.mo create mode 100644 wagtail/wagtailimages/locale/pt_PT/LC_MESSAGES/django.po create mode 100644 wagtail/wagtailredirects/locale/pt_PT/LC_MESSAGES/django.mo create mode 100644 wagtail/wagtailredirects/locale/pt_PT/LC_MESSAGES/django.po create mode 100644 wagtail/wagtailsearch/locale/pt_PT/LC_MESSAGES/django.mo create mode 100644 wagtail/wagtailsearch/locale/pt_PT/LC_MESSAGES/django.po create mode 100644 wagtail/wagtailsnippets/locale/pt_PT/LC_MESSAGES/django.mo create mode 100644 wagtail/wagtailsnippets/locale/pt_PT/LC_MESSAGES/django.po create mode 100644 wagtail/wagtailusers/locale/pt_PT/LC_MESSAGES/django.mo create mode 100644 wagtail/wagtailusers/locale/pt_PT/LC_MESSAGES/django.po diff --git a/wagtail/wagtailadmin/locale/pt_PT/LC_MESSAGES/django.mo b/wagtail/wagtailadmin/locale/pt_PT/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..6568f80a993552f7c5ef2690712aa93973ee0339 GIT binary patch literal 17850 zcmb`N3zQ{AdB+Qp6;@D?hdiYLm)+5w*;!uVukFaj1VOnSy6e3k{|@ZR~%FlpMhiI;~bCXM9I-eJmhhriJtuaRn>j_&dk0{ z`ph@~uIhSx_0{)%^;OmV(Mz6xo8fs1IvM)p0%J}%$e0yJDA$-fk22<6;BN2%u=gd# z+zkE@d@DF|v@th<&w%T|@nfh9J^;P}{5g0v_}XKQ`2=_msB&A6Gv++-{oo70uY*T| zPlE@8{{)^2{xe9|=FpcKLsRBN@MYjK@I~My;0wWPz#G9BRC_-I4*{PAUjhC*cqw@5 z@y5IwybkOI?*|#O`9An!@W&p11)fRToZ$Fc3`!*DgX(t!$dJu8k1@EE^e%82cprE; z_ydqX^9=u<4<2-)tG@tLd&m0p8KB007RaAj%fG|G*Mq7z4ju|NLGe2Ys{Afc^!QCs{67UQ0e=Fjy@e+^IUfZ|zGr|7!8Ja;1=Khipz7ZYYMi%$ zlEYU($?N-|(D%@Ep*}4b=E!|9#4*Zvr*{w}8vR_kpK?PkkU5rc2M%(4WcUM9#H(ufc%-K_;)t=94Nle4BR;SK&4;haTO?i*$Aq=DNx_v2#SxJ zLA84asPFgs^n;+je-V_Np9VGG{{Tuqe+tSk{0daPLr!!29}b>L`gl9)Ca(yueh5AY?gEbk`)F(vxE@>zz8CBVKL-wgzXUZeOM0-i zgRooh4$_YxgfD=XzS5X?fJajKX7Ga^1BAJe^xfbp@L$0QT-JvV1#bht1Rl&F67UId z4R|)4YrK=7?DIxY^12OVip)nq&C3iZ{(lH+oX`3E)v9|MmBZv>A9-vf%T-5`JF zQU0mje*tA*r=Wb8s#yxEpUt4^4}nL6b&os2V@SUn)coxRH4k3`rAJSLhl1bp_!IyA z=b-$@Z$YNc9ENeoPR{~W{z8u%K=r>BRKJ&l4BhMiC9e;I>hI&A_%+RKH&XWjEge#m|3(D!1TOZk#=!>|iCR`F<^^acl#n z_aUfxia^!79~7V8^7!|l>i@{&FMR%gftq)7zQYBe^yqL<{q%#9=Yapd3Y1*d`~1xw zF9pTN<)GSo9r$AK4WQ<4!l&O1s=Zr5$?tYh^L{TV{vHJ-kFS8T$8Uj>|Ib0q^Y1*K z@@iLZ1*mbZ2i5Nu(CQ1Q`K^PJ>wCcCz(+yN$G5@b!Jqo{?|k|gj9TS;LFx0Ap!m26 zJOTU=sCFI!HSga9HO^mxERp87p!z@Q0=FJ51*I1oL6zSIG6d5GHSSM=8t>;p&F5D^ zjpr#){QtmzKX`>JcQ`1%j|J6FpU+6#fzsD+gVMX_JRY~or3b*X$$vd~5%@lkKl3#IaINNOGEW6pfhU36!3?|sls!BP z$_~$AP_F^60yU2x1vi7A1I5>2YnANrH7_p%CC68Q8t+A*>|-m)l$)zS z$^HGH^!Of7?K}*g34Rtt#mtXE$>YSePLIw4Pb0kv#1zf7;2GdupvLtz@Nw`NQ1$Lw zhtCEd2N!|QW00D+C7{N44JbZ70UiW4pf5st^j*(R2iEU0O;&$%pC@=d^v6E^R~`jh zAkFQcL#IP;fFz^pvz^4n&?hUIlG}HnH~YM|fM4?Of9LV*;6>0MLRUanL$bpMAU%gT zurl}y|BkAdC!pofhoKuFJ;Tsfp%bA$f<~cpp?jgPKyQci91KZTdSn}4hA=nt5VQ@t z9eO9E2XW4MM+#j7ZH4rl4D~^eL+^lM=yOo< z+~r?nOM2Eq-?ne=pKMppQs^VlA3(Q3vdL4S4bW?$1<>oDUPw;@ErCWL`By!cLC4rP z_wRmS6Ep=abXnFmKI-4!2u?%tch^E|pwB}ehkBr!pfTt@&^Mt!frg;Rpf)rPErTA0 zu7V=y4rmh6^OsN)3LrhFK#QOkLAOFTLT5l9fW85}1ky7I-3@&T+6+AiJqZ=hE?!Q9 z&W3J=z5waD5;_yQMG60W7F-3r9}1yIAw7pdheCg=gnv!|uZP~})9(da(B(c|2fqfb zfYw28h4j1-T5aE)5A&}UUe5pHq216U(5E3i8=>dfH~(*8FwZkQ9%WGw=Rul8K{IUC z#^Yoxml=v{XQb1k%-)A3OOJ?JQ#^IgjzZg z!!mZ*h$o}I;EJ@}s0Y(&oAk9&&`N`e_DCbn$Ah?)tMv4${c2EL?W;w2i8IGRzRIi^ zS$Rp?iUw9J8(A4lWbtHJn+|H@VS;`I;lxB^THJ&<3tU#Co<)fp53Fm-`Iz>Z)pVL% ztAbgSM=cE`<8z)*rCB`~4>fEmM$Is8Fl@?Ef@(GE843)j+Cn_?mQ{?Dv#*mhb>5JJ%0)WRfa zC&kPZbJ~Y*roAj`rjy95$PPxcwCSd?7D#o2FmY3?W}o}z?OLaZR_(}0 zQ;LLcqKj0*=%Z%&F>#7AU!J5^l$#olYvWFx1FFQMaV>1cX~OKw1Zt6ty1Q^|dV)1} z)afAnF0P}W&eUsJ#H3Tc5rr7$cpBH}DQ!0KUUsf(X)+p*wKLlXUnZvQKU|ylgD&Y6 zH+QL0C(K&gz8^WlnUhgzXkD0(kECH%H|yZZtYa+l^t>oY@K7!9f`_K4>r zM;dBXIpx~#Rtq0FnDuf)&O5A6_R8~mg;@wLXJVLe63rkSkzKkkrBb@2W!h?65Y};( zxz~p|F40%F<u!<*YIrve;})5hl)MF6SfBs6xJI z*2q)?L%AXxYiTCJdXpjIKB8kqNHuMq-1Go^{=8# zHd#-n+}EHzVJ?ZLM3j+rZkJ`#gL3jld(6IAyX0+W%Ur@*PBD}=q+PoXI)ktGb-tkl zBsz{H80=_!_lJrZ@L|$f=hj*)m6dLl?U}81v2!{b~+o5a9txw%~T8O%H{319jH;Z;eH3fF)kY7iw z1MKRcjQ4CQ<~nj-va3+J+|25sJt37Xc=5rHWuMSzDs)by)29E@&aso~dm&t}2!jM+ zNs9u0adN>F(yZaS^3isq^T|d_W)Q#6$~3AS*<2UGNc{J-(MYGPE3nblNMw`q##{#d zQOw~mZKDM)v~!3jx9L{2GzcwQv0V35+``Ebs*c*Og0RW-R361r~v<)Tlcz zH<#J@1LXe7c3jd9v&Vw`eoi5s0+?I z!4N0x99YA%iqTmc_F8NY3&v11L69H=8)7J9SvVQCLYJ@uaXq@}Hbe24oLPYtM@JU> z?7ZD<%8w4ESvI|tHO_MBxAMV?sJZg=MN6)0N7?lDyrqS-CqI3~GO~*rbg4*`xMTik zTL%pY(sHK7MKi1e1MN1NVZuz=y;A679ZF0p;v8y)E%ao_?x$v16S;{Q_IsEB{xsk4 z)d}tQWQV_Bt-h{mKFF!`#=b<+aeY6F?W?)M)9j+C1S}S%Ca=eJ3Mt&%Q2VwzA8D5#HLc)TT{nQeSvo; zEn*G3R&*4Tnv1diLKOCB3enW#e4-Ifmwia-IvUpu>+GrJ)i5gd{tE0R zerryiTU!Ix_Bu0eU`5e=?VgMMxJ+y+YBW~4>RS0FmaxGpSf5tRrZwHl%#KHUcoqt4 zi9LC-wt7DIQi7#dM%?b8#eh=_ zyCazU%^zqKCku2oP_{rQW%uQKXk-uH@Tb=O2lfE4T64poQ_nkV%G&b=EuNeg_&ya1g$ZJ{=WmMl-G;TRQDRNiW~%!%)(n{v z7;9UKbx3Tv%P!Vm^|RPHBfIzJ#0F`WjzU%%+Lcuk?V|OVr73KsEE~3ivZeB<#|1t0 zO4QSsKFt^IgtnEK*vDe?RbU`?hh$}1c2$q-;u?oCzf-fvfyHjXo(2;0qzWl}H`RMD zN1Jg(1Es?D_nq6)1Hr<`T z=k)fU-`l@DSbpBX+2_Bqe|djD1$!?;snqoBa%Ttq%LmTwcjdHI=^f6(B1}k=uyr|)meN*|$g_}8%Yh${-!%^6Tr7fGbtnZ9sIlQlR-n3T^Vt|-v zXKNYmGfpmGix_6;(S_TFH}sz0DW~q)QunT>%Q}I^Kydy@+$wt-2qs$F2Zt99HaK}` z^lrd;=L119VUziVXI&7u*9(^!tN8);(lcP zPV^`W+D&}-%x?B%oc9qGMfpUU)KS*%Q+3taTRY9dz1o9m-=Hk8+G6K`wqRoZCO74B zZ((y}=H6xyHDY$CVK%ed@``P7f?$1kZ_!Qnx%Zw~-BY`+#d&W{2(1pNn=**q%cV(L zo^8+1>VCD+Ez7xb>~3Vcz#1yGe;;UY)$X-K12^x?_AZ z_a(JBEalwIm#fijz_Y7%P5@{SM%}}aOyfJFI_@+>B5IlR}JCJ-7^ofb{Ao7jg0{B zg%e^C)S$u%w&5BR!)>J&Ddw`|@IrM$mQ%%O4N6C1|ZZGa_ z5K5IApn@qM+iqLH*|dTH{dWh^1*>7;KCG_CHP*Z^;|9gQ74xEV4Y~+XpCUf(l(7dH z4ARCgmAW>c6^w;Htz@%lfU#n&2sP1Bkjy;bZgS@BxKg{~NI3&`f=JkpOomI*c}|Y- z??}!bGt^L{vZuaab)Lsf&PvL@>ruSZE(l^?n#C1QZW$@GOLx;8uc%>J+GJXrxsU%1 zm4$P{u$kSx4aD5`HC)oJER?AeyscJbDVdJw5@;9`tZ^6`T^|OV4~W%h2QB%<$+A)K z$F79ZsPx?O3b3t-bOxhX-fNQ8(_&F`Q>TkQq^<=y(~VR0h}reCf4%%3tyE{Ds?uB* zjbYEIhBcfl7?K*7DXY{jr3)XY;}TiB70dIv0ckuT5iFq~C&v0*(Ri~yuceqoR*g=o zneN`GEG5lM=gBLD?CWak6gyy~901shqr#TF6~M4Ubxxc5$~uH1@r0Fqq5EQ2A}Cy1 z4cA76&2bYkqY7fa+g|YxLei)qE^7FcEN!H^Y6`hpx}Gz(EH&%BLYFU<%I=%B6e{G_cr$zDl*oND#?I(+ zufFBYQ<|I0!o1c_#!;LsBLrvc>oLR@DqTHA49+m62s`)y)6Gj z(ax^1(5PP$oQC-!>0pFgc$^2}(#)On4Bl+gPY#eq=>+^$7fRsINs#Nz1FW3xx-0Sb zUHm*l3n12vO2q1eRgn8G%PRL>=r0#u{GYj_!3j?2FTHBc1ZLfQ*%NyrhLj`rIP2Vf z&D@=G`9;_E_G>5_vlm~P`(F{G?!WvvM#6X}#6 zk@}(pZfxd(RvU{S%w`_iDdoHb$6fUwL?WC65{8D{j?Mbk&O<8d7I;rqxUbLd!i@Re z%3Z2_jV{cZO5qKH32!%CmduH>d#uT$Ty|6CcK}??_=4^nI12o=S-D?x5h-iy?4mYO z)gZfDD2Cph>zDYs#aYV<5@$E!wRP?X9bn__>V5&NYW3_kTqNiVx+^fN{j@AP6S??8l^;-c3U3?E}4I3)p$Yi1%WXmS@ z>^Hl1T=+=uFi=$e(#p!iz1OANrcibgQReq}Fas5b!6nyq1ELd^Eg% zuUC7W>TaKq*!?S8hk3VaiZ!%LR}knpRw!k+ww?7jn7KC?V|9|Xp}j6ZWzoW8=-hTa z(T@TZ?fJcXuNvOEw8Jj>ffxGCl_EKSN zR&D1JnZbS3Cq$K}18fK!+aF4`BF;UAttCmJ?S9lUTWmCJXK0Bo`4WCE2Z#Q9Eo`#g z;8V)Zb1ZDlJVcb^zbTjQ*tO0HeH$QJ(4L`s);hOs zTc$jVo%?;YcAf5ykqE%uIAVHS0CJyLIQ8<@kRdq#L}rJI8mN(lNPg6#P1o zcJ3S9dSj(fk4EE!MNtLqQG403U5RDck|O@_v8EHI+pOmHILb9-FCB+;*g5l<-J9^k zf_m)i9zUlsSy$zps_j;8vIx=o;MCqWDl({CHKIjYYNa#s^_^zyLSYYqoI5DuyVK0- zdH3zeFQnlzGSz&RLE&j;s}mt$B6Fw@qYo% CZ;*Ka literal 0 HcmV?d00001 diff --git a/wagtail/wagtailadmin/locale/pt_PT/LC_MESSAGES/django.po b/wagtail/wagtailadmin/locale/pt_PT/LC_MESSAGES/django.po new file mode 100644 index 0000000000..cb6f0a69ef --- /dev/null +++ b/wagtail/wagtailadmin/locale/pt_PT/LC_MESSAGES/django.po @@ -0,0 +1,1127 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# +# Translators: +# Douglas Miranda , 2014 +# Gladson , 2014 +msgid "" +msgstr "" +"Project-Id-Version: Wagtail 0.5.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2014-08-01 16:38+0100\n" +"PO-Revision-Date: 2014-08-03 01:50+0100\n" +"Last-Translator: Jose Lourenco \n" +"Language-Team: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: pt_PT\n" +"Plural-Forms: nplurals=2; plural=(n > 1);\n" +"X-Generator: Poedit 1.5.4\n" + +#: edit_handlers.py:627 +msgid "Scheduled publishing" +msgstr "Publicação agendada" + +#: edit_handlers.py:641 +msgid "Common page configuration" +msgstr "Configuração comum de página" + +#: forms.py:19 +msgid "Search term" +msgstr "Procurar termo" + +#: forms.py:43 +msgid "Enter your username" +msgstr "Introduza o seu nome de utilizador" + +#: forms.py:46 +msgid "Enter password" +msgstr "Introduza a sua senha" + +#: forms.py:51 +msgid "Enter your email address to reset your password" +msgstr "Introduza o seu email para alterar a sua senha" + +#: forms.py:60 +msgid "Please fill your email address." +msgstr "Por favor, insira o seu e-mail." + +#: forms.py:73 +msgid "" +"Sorry, you cannot reset your password here as your user account is managed " +"by another server." +msgstr "" +"Desculpe, você não pode alterar a sua senha aqui porque a sua conta de " +"utilizador é gerida por outro servidor." + +#: forms.py:76 +msgid "This email address is not recognised." +msgstr "Este email não é reconhecido." + +#: forms.py:88 +msgid "New title" +msgstr "Novo título" + +#: forms.py:89 +msgid "New slug" +msgstr "Novo endereço" + +#: forms.py:95 +msgid "Copy subpages" +msgstr "Copiar sub-páginas" + +#: forms.py:97 +#, python-format +msgid "This will copy %(count)s subpage." +msgid_plural "This will copy %(count)s subpages." +msgstr[0] "Será copiada %(count)s sub-página." +msgstr[1] "Serão copiadas %(count)s sub-páginas." + +#: forms.py:106 +msgid "Publish copied page" +msgstr "Publicar página copiada" + +#: forms.py:107 +msgid "This page is live. Would you like to publish its copy as well?" +msgstr "Esta página está publicada. Gostaria de publicar também a sua cópia?" + +#: forms.py:109 +msgid "Publish copies" +msgstr "Publicar cópias" + +#: forms.py:111 +#, python-format +msgid "" +"%(count)s of the pages being copied is live. Would you like to publish its " +"copy?" +msgid_plural "" +"%(count)s of the pages being copied are live. Would you like to publish " +"their copies?" +msgstr[0] "" +"%(count)s das páginas a copiar estão publicadas. Gostaria de publicar " +"também a sua cópia?" +msgstr[1] "" +"%(count)s das páginas a copiar estão publicadas. Gostaria de publicar " +"também as suas cópias?" + +#: forms.py:124 views/pages.py:155 views/pages.py:272 +msgid "This slug is already in use" +msgstr "Esse endereço já existe" + +#: forms.py:130 templates/wagtailadmin/pages/_privacy_indicator.html:13 +#: templates/wagtailadmin/pages/_privacy_indicator.html:18 +msgid "Public" +msgstr "Público" + +#: forms.py:131 +msgid "Private, accessible with the following password" +msgstr "Privado, acessível com a seguinte senha" + +#: forms.py:139 +msgid "This field is required." +msgstr "Este campo é obrigatório." + +#: templates/wagtailadmin/base.html:7 templates/wagtailadmin/home.html:4 +msgid "Dashboard" +msgstr "Painel de controlo" + +#: templates/wagtailadmin/base.html:27 +msgid "Menu" +msgstr "Menu" + +#: templates/wagtailadmin/home.html:22 +#, python-format +msgid "Welcome to the %(site_name)s Wagtail CMS" +msgstr "Bem vindo ao %(site_name)s Wagtail CMS" + +#: templates/wagtailadmin/home.html:33 +msgid "" +"This is your dashboard on which helpful information about content you've " +"created will be displayed." +msgstr "" +"Este é o seu painel de controlo no qual serão mostradas informações úteis " +"sobre os conteúdos criados por si." + +#: templates/wagtailadmin/login.html:4 templates/wagtailadmin/login.html:59 +msgid "Sign in" +msgstr "Entrar" + +#: templates/wagtailadmin/login.html:18 +msgid "Your username and password didn't match. Please try again." +msgstr "O seu nome de utilizador ou senha não estão corretos. Tente novamente." + +#: templates/wagtailadmin/login.html:26 +msgid "Sign in to Wagtail" +msgstr "Entrar no Wagtail" + +#: templates/wagtailadmin/login.html:46 +msgid "Forgotten it?" +msgstr "Esqueceu-a?" + +#: templates/wagtailadmin/account/account.html:4 +#: templates/wagtailadmin/account/account.html:6 +msgid "Account" +msgstr "Conta" + +#: templates/wagtailadmin/account/account.html:13 +msgid "Set gravatar" +msgstr "Atribuir gravatar" + +#: templates/wagtailadmin/account/account.html:17 +msgid "" +"Your avatar image is provided by Gravatar and is connected to your email " +"address. With a Gravatar account you can set an avatar for any number of " +"other email addresses you use." +msgstr "" +"A sua imagem avatar é fornecida por Gravatar e está associada ao seu email. " +"Com uma conta do Gravatar você pode definir uma imagem avatar para qualquer " +"número de emails que você use." + +#: templates/wagtailadmin/account/account.html:25 +#: templates/wagtailadmin/account/change_password.html:4 +#: templates/wagtailadmin/account/change_password.html:6 +msgid "Change password" +msgstr "Alterar senha" + +#: templates/wagtailadmin/account/account.html:29 +msgid "Change the password you use to log in." +msgstr "Altere a senha que utiliza para entrar." + +#: templates/wagtailadmin/account/account.html:36 +msgid "Notification preferences" +msgstr "Preferências de notificação" + +#: templates/wagtailadmin/account/account.html:40 +msgid "Choose which email notifications to receive." +msgstr "Escolha quais as notificações de email a receber." + +#: templates/wagtailadmin/account/change_password.html:18 +msgid "Change Password" +msgstr "Alterar Senha" + +#: templates/wagtailadmin/account/change_password.html:21 +msgid "" +"Your password can't be changed here. Please contact a site administrator." +msgstr "A sua senha não pode ser alterada. Contacte um administrador do site." + +#: templates/wagtailadmin/account/notification_preferences.html:4 +#: templates/wagtailadmin/account/notification_preferences.html:6 +msgid "Notification Preferences" +msgstr "Preferências de notificação" + +#: templates/wagtailadmin/account/notification_preferences.html:16 +msgid "Update" +msgstr "Atualizar" + +#: templates/wagtailadmin/account/password_reset/complete.html:4 +#: templates/wagtailadmin/account/password_reset/confirm.html:42 +#: templates/wagtailadmin/account/password_reset/done.html:4 +#: templates/wagtailadmin/account/password_reset/form.html:4 +#: templates/wagtailadmin/account/password_reset/form.html:37 +msgid "Reset password" +msgstr "Alterar senha" + +#: templates/wagtailadmin/account/password_reset/complete.html:15 +msgid "Password change successful" +msgstr "Senha alterada com sucesso" + +#: templates/wagtailadmin/account/password_reset/complete.html:16 +msgid "Login" +msgstr "Login" + +#: templates/wagtailadmin/account/password_reset/confirm.html:4 +#: templates/wagtailadmin/account/password_reset/confirm.html:26 +msgid "Set your new password" +msgstr "Insira a sua nova senha" + +#: templates/wagtailadmin/account/password_reset/confirm.html:19 +msgid "The passwords do not match. Please try again." +msgstr "As senhas são diferentes. Tente novamente." + +#: templates/wagtailadmin/account/password_reset/done.html:15 +msgid "Check your email" +msgstr "Verifique o seu email" + +#: templates/wagtailadmin/account/password_reset/done.html:16 +msgid "A link to reset your password has been emailed to you." +msgstr "Um link para alterar a sua senha foi-lhe enviado para o seu email." + +#: templates/wagtailadmin/account/password_reset/email.txt:2 +msgid "Please follow the link below to reset your password" +msgstr "Por favor clique no link abaixo para alterar a sua senha" + +#: templates/wagtailadmin/account/password_reset/email_subject.txt:2 +msgid "Password reset" +msgstr "Alterar senha" + +#: templates/wagtailadmin/account/password_reset/form.html:27 +msgid "Reset your password" +msgstr "Alterar a sua senha" + +#: templates/wagtailadmin/chooser/_link_types.html:5 +#: templates/wagtailadmin/chooser/_link_types.html:7 +msgid "Internal link" +msgstr "Link interno" + +#: templates/wagtailadmin/chooser/_link_types.html:11 +#: templates/wagtailadmin/chooser/_link_types.html:13 +msgid "External link" +msgstr "Link externo" + +#: templates/wagtailadmin/chooser/_link_types.html:17 +#: templates/wagtailadmin/chooser/_link_types.html:19 +msgid "Email link" +msgstr "Link de email" + +#: templates/wagtailadmin/chooser/_search_form.html:7 +#: templates/wagtailadmin/pages/search.html:3 +#: templates/wagtailadmin/pages/search.html:16 +#: templatetags/wagtailadmin_tags.py:36 +msgid "Search" +msgstr "Procurar" + +#: templates/wagtailadmin/chooser/_search_results.html:3 +#: templatetags/wagtailadmin_tags.py:35 +msgid "Explorer" +msgstr "Explorador" + +#: templates/wagtailadmin/chooser/_search_results.html:8 +#, python-format +msgid "" +"\n" +" There is one match\n" +" " +msgid_plural "" +"\n" +" There are %(counter)s matches\n" +" " +msgstr[0] "" +"\n" +" Existe uma correspondência\n" +" " +msgstr[1] "" +"\n" +" Existem %(counter)s correspondências\n" +" " + +#: templates/wagtailadmin/chooser/browse.html:2 +#: templates/wagtailadmin/chooser/search.html:2 +#: templates/wagtailadmin/edit_handlers/page_chooser_panel.html:13 +msgid "Choose a page" +msgstr "Escolher uma página" + +#: templates/wagtailadmin/chooser/email_link.html:2 +msgid "Add an email link" +msgstr "Adicionar link de email" + +#: templates/wagtailadmin/chooser/email_link.html:14 +#: templates/wagtailadmin/chooser/external_link.html:14 +msgid "Insert link" +msgstr "Inserir link" + +#: templates/wagtailadmin/chooser/external_link.html:2 +msgid "Add an external link" +msgstr "Adicionar link externo" + +#: templates/wagtailadmin/edit_handlers/chooser_panel.html:20 +msgid "Clear choice" +msgstr "Limpar escolha" + +#: templates/wagtailadmin/edit_handlers/chooser_panel.html:22 +msgid "Choose another item" +msgstr "Escolher outro item" + +#: templates/wagtailadmin/edit_handlers/chooser_panel.html:27 +msgid "Choose an item" +msgstr "Escolher um item" + +#: templates/wagtailadmin/edit_handlers/inline_panel_child.html:5 +msgid "Move up" +msgstr "Mover para cima" + +#: templates/wagtailadmin/edit_handlers/inline_panel_child.html:6 +msgid "Move down" +msgstr "Mover para baixo" + +#: templates/wagtailadmin/edit_handlers/inline_panel_child.html:8 +#: templates/wagtailadmin/pages/confirm_delete.html:7 +#: templates/wagtailadmin/pages/edit.html:45 +#: templates/wagtailadmin/pages/list.html:84 +#: templates/wagtailadmin/pages/list.html:205 +msgid "Delete" +msgstr "Eliminar" + +#: templates/wagtailadmin/edit_handlers/page_chooser_panel.html:12 +msgid "Choose another page" +msgstr "Escolher outra página" + +#: templates/wagtailadmin/home/pages_for_moderation.html:5 +msgid "Pages awaiting moderation" +msgstr "Páginas a aguardar moderação" + +#: templates/wagtailadmin/home/pages_for_moderation.html:13 +#: templates/wagtailadmin/home/recent_edits.html:12 +#: templates/wagtailadmin/pages/list.html:121 +#: templates/wagtailadmin/pages/list.html:124 +msgid "Title" +msgstr "Título" + +#: templates/wagtailadmin/home/pages_for_moderation.html:14 +#: templates/wagtailadmin/pages/list.html:22 +msgid "Parent" +msgstr "Ascendente (pai)" + +#: templates/wagtailadmin/home/pages_for_moderation.html:15 +#: templates/wagtailadmin/pages/list.html:24 +#: templates/wagtailadmin/pages/list.html:133 +#: templates/wagtailadmin/pages/list.html:136 +msgid "Type" +msgstr "Tipo" + +#: templates/wagtailadmin/home/pages_for_moderation.html:16 +msgid "Edited" +msgstr "Editado" + +#: templates/wagtailadmin/home/pages_for_moderation.html:23 +#: templates/wagtailadmin/home/recent_edits.html:21 +#: templates/wagtailadmin/pages/list.html:176 +#: templates/wagtailadmin/pages/list.html:190 +msgid "Edit this page" +msgstr "Editar esta página" + +#: templates/wagtailadmin/home/pages_for_moderation.html:28 +#: templates/wagtailadmin/pages/_moderator_userbar.html:12 +#: templates/wagtailadmin/userbar/item_page_approve.html:8 +msgid "Approve" +msgstr "Aprovar" + +#: templates/wagtailadmin/home/pages_for_moderation.html:34 +#: templates/wagtailadmin/pages/_moderator_userbar.html:17 +#: templates/wagtailadmin/userbar/item_page_reject.html:8 +msgid "Reject" +msgstr "Rejeitar" + +#: templates/wagtailadmin/home/pages_for_moderation.html:37 +#: templates/wagtailadmin/home/recent_edits.html:23 +#: templates/wagtailadmin/pages/_moderator_userbar.html:9 +#: templates/wagtailadmin/pages/list.html:72 +#: templates/wagtailadmin/pages/list.html:190 +#: templates/wagtailadmin/userbar/item_page_edit.html:5 +msgid "Edit" +msgstr "Editar" + +#: templates/wagtailadmin/home/pages_for_moderation.html:38 +#: templates/wagtailadmin/pages/create.html:41 +#: templates/wagtailadmin/pages/edit.html:56 +#: templates/wagtailadmin/pages/preview.html:5 +msgid "Preview" +msgstr "Pre-visualizar" + +#: templates/wagtailadmin/home/recent_edits.html:5 +msgid "Your most recent edits" +msgstr "Suas últimas edições" + +#: templates/wagtailadmin/home/recent_edits.html:13 +msgid "Date" +msgstr "Data" + +#: templates/wagtailadmin/home/recent_edits.html:14 +#: templates/wagtailadmin/pages/edit.html:18 +#: templates/wagtailadmin/pages/list.html:25 +#: templates/wagtailadmin/pages/list.html:142 +#: templates/wagtailadmin/pages/list.html:145 +msgid "Status" +msgstr "Estado" + +#: templates/wagtailadmin/home/recent_edits.html:25 +#: templates/wagtailadmin/pages/list.html:75 +#: templates/wagtailadmin/pages/list.html:193 +msgid "Draft" +msgstr "Rascunho" + +#: templates/wagtailadmin/home/recent_edits.html:28 +#: templates/wagtailadmin/pages/list.html:78 +#: templates/wagtailadmin/pages/list.html:196 +msgid "Live" +msgstr "Publicado" + +#: templates/wagtailadmin/home/site_summary.html:3 +msgid "Site summary" +msgstr "Resumo do Site" + +#: templates/wagtailadmin/home/site_summary.html:7 +#, python-format +msgid "" +"\n" +" %(total_pages)s Page\n" +" " +msgid_plural "" +"\n" +" %(total_pages)s Pages\n" +" " +msgstr[0] "" +"\n" +" %(total_pages)s Página\n" +" " +msgstr[1] "" +"\n" +" %(total_pages)s Páginas\n" +" " + +#: templates/wagtailadmin/home/site_summary.html:16 +#, python-format +msgid "" +"\n" +" %(total_images)s Image\n" +" " +msgid_plural "" +"\n" +" %(total_images)s Images\n" +" " +msgstr[0] "" +"\n" +" %(total_images)s Imagem\n" +" " +msgstr[1] "" +"\n" +" %(total_images)s Imagens\n" +" " + +#: templates/wagtailadmin/home/site_summary.html:25 +#, python-format +msgid "" +"\n" +" %(total_docs)s Document\n" +" " +msgid_plural "" +"\n" +" %(total_docs)s Documents\n" +" " +msgstr[0] "" +"\n" +" %(total_docs)s Documento\n" +" " +msgstr[1] "" +"\n" +" %(total_docs)s Documentos\n" +" " + +#: templates/wagtailadmin/notifications/approved.html:1 +#, python-format +msgid "The page \"%(title)s\" has been approved" +msgstr "A página \"%(title)s\" foi aprovada" + +#: templates/wagtailadmin/notifications/approved.html:2 +#, python-format +msgid "The page \"%(title)s\" has been approved." +msgstr "A página \"%(title)s\" foi aprovada." + +#: templates/wagtailadmin/notifications/approved.html:4 +msgid "You can view the page here:" +msgstr "Pode visualizar a página aqui:" + +#: templates/wagtailadmin/notifications/base_notification.html:3 +msgid "Edit your notification preferences here:" +msgstr "Edite as suas preferências de notificação aqui:" + +#: templates/wagtailadmin/notifications/rejected.html:1 +#, python-format +msgid "The page \"%(title)s\" has been rejected" +msgstr "A página \"%(title)s\" foi rejeitada" + +#: templates/wagtailadmin/notifications/rejected.html:2 +#, python-format +msgid "The page \"%(title)s\" has been rejected." +msgstr "A página \"%(title)s\" foi rejeitada" + +#: templates/wagtailadmin/notifications/rejected.html:4 +#: templates/wagtailadmin/notifications/submitted.html:5 +msgid "You can edit the page here:" +msgstr "Você pode editar a página aqui:" + +#: templates/wagtailadmin/notifications/submitted.html:1 +#, python-format +msgid "The page \"%(page)s\" has been submitted for moderation" +msgstr "A página \"%(page)s\" foi enviada para moderação" + +#: templates/wagtailadmin/notifications/submitted.html:2 +#, python-format +msgid "The page \"%(page)s\" has been submitted for moderation." +msgstr "A página \"%(page)s\" foi enviada para moderação." + +#: templates/wagtailadmin/notifications/submitted.html:4 +msgid "You can preview the page here:" +msgstr "Pode pre-visualizar a página aqui:" + +#: templates/wagtailadmin/page_privacy/ancestor_privacy.html:2 +#: templates/wagtailadmin/page_privacy/set_privacy.html:2 +msgid "Page privacy" +msgstr "Privacidade da página" + +#: templates/wagtailadmin/page_privacy/ancestor_privacy.html:6 +msgid "This page has been made private by a parent page." +msgstr "Esta página foi classificada como privada por uma página ascendente" + +#: templates/wagtailadmin/page_privacy/ancestor_privacy.html:7 +msgid "You can edit the privacy settings on:" +msgstr "Você pode editar as configurações de privacidade em:" + +#: templates/wagtailadmin/page_privacy/set_privacy.html:6 +msgid "Note: privacy changes apply to all children of this page too." +msgstr "" +"Nota: as alterações de privacidade também serão aplicadas a todas as " +"páginas filhas desta página." + +#: templates/wagtailadmin/pages/_moderator_userbar.html:4 +#, python-format +msgid "" +"\n" +" Previewing '%(title)s', submitted by %(submitted_by)s on " +"%(submitted_on)s.\n" +" " +msgstr "" +"\n" +" Pre-visualizando '%(title)s', enviado por %(submitted_by)s em " +"%(submitted_on)s.\n" +" " + +#: templates/wagtailadmin/pages/_privacy_indicator.html:9 +msgid "Privacy" +msgstr "Privacidade" + +#: templates/wagtailadmin/pages/_privacy_indicator.html:14 +#: templates/wagtailadmin/pages/_privacy_indicator.html:20 +msgid "Private" +msgstr "Privada" + +#: templates/wagtailadmin/pages/add_subpage.html:6 +#, python-format +msgid "Create a page in %(title)s" +msgstr "Criar uma página em %(title)s" + +#: templates/wagtailadmin/pages/add_subpage.html:9 +msgid "Create a page in" +msgstr "Criar uma página em" + +#: templates/wagtailadmin/pages/add_subpage.html:13 +msgid "Choose which type of page you'd like to create." +msgstr "Escolha o tipo de página que gostaria de criar." + +#: templates/wagtailadmin/pages/add_subpage.html:26 +#, python-format +msgid "Pages using %(page_type)s" +msgstr "Páginas usando %(page_type)s" + +#: templates/wagtailadmin/pages/confirm_delete.html:3 +#, python-format +msgid "Delete %(title)s" +msgstr "Eliminar %(title)s" + +#: templates/wagtailadmin/pages/confirm_delete.html:12 +msgid "Are you sure you want to delete this page?" +msgstr "Tem certeza que deseja eliminar esta página?" + +#: templates/wagtailadmin/pages/confirm_delete.html:14 +#, python-format +msgid "" +"\n" +" This will also delete one more subpage.\n" +" " +msgid_plural "" +"\n" +" This will also delete %(descendant_count)s more " +"subpages.\n" +" " +msgstr[0] "" +"\n" +" Isto também eliminará uma ou mais sub-páginas.\n" +" " +msgstr[1] "" +"\n" +" Isto também eliminará mais %(descendant_count)s sub-" +"páginas.\n" +" " + +#: templates/wagtailadmin/pages/confirm_delete.html:22 +msgid "" +"Alternatively you can unpublish the page. This removes the page from public " +"view and you can edit or publish it again later." +msgstr "" +"Em alternativa, poderá despublicar a página. Assim, a página deixará de " +"estar visível publicamente, podendo você voltar a editá-la ou publicá-la " +"mais tarde." + +#: templates/wagtailadmin/pages/confirm_delete.html:26 +msgid "Delete it" +msgstr "Eliminá-la" + +#: templates/wagtailadmin/pages/confirm_delete.html:26 +msgid "Unpublish it" +msgstr "Despublicá-la" + +#: templates/wagtailadmin/pages/confirm_move.html:3 +#, python-format +msgid "Move %(title)s" +msgstr "Mover %(title)s" + +#: templates/wagtailadmin/pages/confirm_move.html:6 +#: templates/wagtailadmin/pages/list.html:81 +#: templates/wagtailadmin/pages/list.html:199 +msgid "Move" +msgstr "Mover" + +#: templates/wagtailadmin/pages/confirm_move.html:11 +#, python-format +msgid "Are you sure you want to move this page into '%(title)s'?" +msgstr "Tem certeza que deseja mover esta página para dentro de '%(title)s'?" + +#: templates/wagtailadmin/pages/confirm_move.html:13 +#, python-format +msgid "" +"Are you sure you want to move this page and all of its children into " +"'%(title)s'?" +msgstr "" +"Tem a certeza que deseja mover esta página e todas as suas páginas filhas " +"para dentro de '%(title)s'?" + +#: templates/wagtailadmin/pages/confirm_move.html:18 +msgid "Yes, move this page" +msgstr "Sim, mover esta página" + +#: templates/wagtailadmin/pages/confirm_unpublish.html:3 +#, python-format +msgid "Unpublish %(title)s" +msgstr "Despublicar %(title)s" + +#: templates/wagtailadmin/pages/confirm_unpublish.html:6 +#: templates/wagtailadmin/pages/edit.html:42 +#: templates/wagtailadmin/pages/list.html:87 +#: templates/wagtailadmin/pages/list.html:208 +msgid "Unpublish" +msgstr "Despublicar" + +#: templates/wagtailadmin/pages/confirm_unpublish.html:10 +msgid "Are you sure you want to unpublish this page?" +msgstr "Tem certeza que deseja despublicar esta página?" + +#: templates/wagtailadmin/pages/confirm_unpublish.html:13 +msgid "Yes, unpublish it" +msgstr "Sim, quero despublicar" + +#: templates/wagtailadmin/pages/content_type_use.html:7 +msgid "Pages using" +msgstr "Páginas usando" + +#: templates/wagtailadmin/pages/copy.html:3 +#, python-format +msgid "Copy %(title)s" +msgstr "Copiar %(title)s" + +#: templates/wagtailadmin/pages/copy.html:6 +#: templates/wagtailadmin/pages/list.html:202 +msgid "Copy" +msgstr "Copiar" + +#: templates/wagtailadmin/pages/copy.html:26 +msgid "Copy this page" +msgstr "Copiar esta página" + +#: templates/wagtailadmin/pages/create.html:5 +#, python-format +msgid "New %(page_type)s" +msgstr "Nova %(page_type)s" + +#: templates/wagtailadmin/pages/create.html:15 +msgid "New" +msgstr "Nova" + +#: templates/wagtailadmin/pages/create.html:29 +msgid "Save as draft" +msgstr "Guardar como rascunho" + +#: templates/wagtailadmin/pages/create.html:33 +#: templates/wagtailadmin/pages/edit.html:48 +msgid "Publish" +msgstr "Publicar" + +#: templates/wagtailadmin/pages/create.html:35 +#: templates/wagtailadmin/pages/edit.html:50 +msgid "Submit for moderation" +msgstr "Enviar para moderação" + +#: templates/wagtailadmin/pages/edit.html:5 +#, python-format +msgid "Editing %(title)s" +msgstr "Editando %(title)s" + +#: templates/wagtailadmin/pages/edit.html:15 +#, python-format +msgid "Editing %(title)s" +msgstr "Editando %(title)s" + +#: templates/wagtailadmin/pages/edit.html:38 +msgid "Save draft" +msgstr "Guardar rascunho" + +#: templates/wagtailadmin/pages/edit.html:77 +#, python-format +msgid "Last modified: %(last_mod)s" +msgstr "Última modificação: %(last_mod)s" + +#: templates/wagtailadmin/pages/edit.html:79 +#, python-format +msgid "by %(modified_by)s" +msgstr "por %(modified_by)s" + +#: templates/wagtailadmin/pages/index.html:3 +#, python-format +msgid "Exploring %(title)s" +msgstr "Explorando %(title)s" + +#: templates/wagtailadmin/pages/list.html:90 +#: templates/wagtailadmin/pages/list.html:211 +msgid "Add child page" +msgstr "Adicionar página filha" + +#: templates/wagtailadmin/pages/list.html:112 +msgid "Disable ordering of child pages" +msgstr "Desativar ordenação de páginas filhas" + +#: templates/wagtailadmin/pages/list.html:112 +#: templates/wagtailadmin/pages/list.html:114 +msgid "Order" +msgstr "Ordem" + +#: templates/wagtailadmin/pages/list.html:114 +msgid "Enable ordering of child pages" +msgstr "Ativar ordenação de páginas filhas" + +#: templates/wagtailadmin/pages/list.html:158 +msgid "Drag" +msgstr "Arrastar" + +#: templates/wagtailadmin/pages/list.html:237 +#: templates/wagtailadmin/pages/list.html:241 +#, python-format +msgid "Explorer subpages of '%(title)s'" +msgstr "Explorar sub-páginas de %(title)s" + +#: templates/wagtailadmin/pages/list.html:237 +#: templates/wagtailadmin/pages/list.html:241 +#: templates/wagtailadmin/pages/list.html:245 +msgid "Explore" +msgstr "Explorar" + +#: templates/wagtailadmin/pages/list.html:245 +#, python-format +msgid "Explore child pages of '%(title)s'" +msgstr "Explorar as páginas filhas de '%(title)s'" + +#: templates/wagtailadmin/pages/list.html:247 +#, python-format +msgid "Add a child page to '%(title)s'" +msgstr "Adicionar página filha a %(title)s" + +#: templates/wagtailadmin/pages/list.html:247 +msgid "Add subpage" +msgstr "Adicionar sub-página" + +#: templates/wagtailadmin/pages/list.html:256 +msgid "No pages have been created." +msgstr "Nenhuma página foi criada." + +#: templates/wagtailadmin/pages/list.html:256 +#, python-format +msgid "Why not add one?" +msgstr "Porque não adicionar uma?" + +#: templates/wagtailadmin/pages/list.html:263 +#, python-format +msgid "" +"\n" +" Page %(page_number)s of %(num_pages)s.\n" +" " +msgstr "" +"\n" +" Página %(page_number)s de %(num_pages)s.\n" +" " + +#: templates/wagtailadmin/pages/list.html:269 +#: templates/wagtailadmin/pages/search_results.html:35 +#: templates/wagtailadmin/pages/search_results.html:37 +#: templates/wagtailadmin/pages/usage_results.html:13 +#: templates/wagtailadmin/shared/pagination_nav.html:21 +#: templates/wagtailadmin/shared/pagination_nav.html:23 +#: templates/wagtailadmin/shared/pagination_nav.html:25 +msgid "Previous" +msgstr "Anterior" + +#: templates/wagtailadmin/pages/list.html:274 +#: templates/wagtailadmin/pages/search_results.html:44 +#: templates/wagtailadmin/pages/search_results.html:46 +#: templates/wagtailadmin/pages/usage_results.html:18 +#: templates/wagtailadmin/shared/pagination_nav.html:32 +#: templates/wagtailadmin/shared/pagination_nav.html:34 +#: templates/wagtailadmin/shared/pagination_nav.html:36 +msgid "Next" +msgstr "Próxima" + +#: templates/wagtailadmin/pages/move_choose_destination.html:3 +#, python-format +msgid "Select a new parent page for %(title)s" +msgstr "Selecione uma nova página ascendente para %(title)s" + +#: templates/wagtailadmin/pages/move_choose_destination.html:7 +#, python-format +msgid "Select a new parent page for %(title)s" +msgstr "Selecione uma nova página ascendente para %(title)s" + +#: templates/wagtailadmin/pages/search_results.html:6 +#, python-format +msgid "" +"\n" +" There is one matching page\n" +" " +msgid_plural "" +"\n" +" There are %(counter)s matching pages\n" +" " +msgstr[0] "" +"\n" +" Existe uma página correspondente\n" +" " +msgstr[1] "" +"\n" +" Existem %(counter)s páginas correspondentes\n" +" " + +#: templates/wagtailadmin/pages/search_results.html:16 +msgid "Other searches" +msgstr "Outras pesquisas" + +#: templates/wagtailadmin/pages/search_results.html:18 +msgid "Images" +msgstr "Imagens" + +#: templates/wagtailadmin/pages/search_results.html:19 +msgid "Documents" +msgstr "Documentos" + +#: templates/wagtailadmin/pages/search_results.html:20 +msgid "Users" +msgstr "Utilizadores" + +#: templates/wagtailadmin/pages/search_results.html:28 +#: templates/wagtailadmin/pages/usage_results.html:7 +#, python-format +msgid "" +"\n" +" Page %(page_number)s of %(num_pages)s.\n" +" " +msgstr "" +"\n" +" Página %(page_number)s de %(num_pages)s.\n" +" " + +#: templates/wagtailadmin/pages/search_results.html:54 +#, python-format +msgid "Sorry, no pages match \"%(query_string)s\"" +msgstr "Desculpe, nenhuma página satisfaz \"%(query_string)s\"" + +#: templates/wagtailadmin/pages/search_results.html:56 +msgid "Enter a search term above" +msgstr "Introduza um termo de pesquisa acima" + +#: templates/wagtailadmin/pages/usage_results.html:24 +msgid "No pages use" +msgstr "Nenhuma página usa" + +#: templates/wagtailadmin/shared/breadcrumb.html:6 +msgid "Home" +msgstr "Início" + +#: templates/wagtailadmin/shared/datetimepicker_translations.html:6 +msgid "January" +msgstr "Janeiro" + +#: templates/wagtailadmin/shared/datetimepicker_translations.html:7 +msgid "February" +msgstr "Fevereiro" + +#: templates/wagtailadmin/shared/datetimepicker_translations.html:8 +msgid "March" +msgstr "Março" + +#: templates/wagtailadmin/shared/datetimepicker_translations.html:9 +msgid "April" +msgstr "Abril" + +#: templates/wagtailadmin/shared/datetimepicker_translations.html:10 +msgid "May" +msgstr "Maio" + +#: templates/wagtailadmin/shared/datetimepicker_translations.html:11 +msgid "June" +msgstr "Junho" + +#: templates/wagtailadmin/shared/datetimepicker_translations.html:12 +msgid "July" +msgstr "Julho" + +#: templates/wagtailadmin/shared/datetimepicker_translations.html:13 +msgid "August" +msgstr "Agosto" + +#: templates/wagtailadmin/shared/datetimepicker_translations.html:14 +msgid "September" +msgstr "Setembro" + +#: templates/wagtailadmin/shared/datetimepicker_translations.html:15 +msgid "October" +msgstr "Outubro" + +#: templates/wagtailadmin/shared/datetimepicker_translations.html:16 +msgid "November" +msgstr "Novembro" + +#: templates/wagtailadmin/shared/datetimepicker_translations.html:17 +msgid "December" +msgstr "Dezembro" + +#: templates/wagtailadmin/shared/datetimepicker_translations.html:20 +msgid "Sun" +msgstr "Dom" + +#: templates/wagtailadmin/shared/datetimepicker_translations.html:21 +msgid "Mon" +msgstr "Seg" + +#: templates/wagtailadmin/shared/datetimepicker_translations.html:22 +msgid "Tue" +msgstr "Ter" + +#: templates/wagtailadmin/shared/datetimepicker_translations.html:23 +msgid "Wed" +msgstr "Qua" + +#: templates/wagtailadmin/shared/datetimepicker_translations.html:24 +msgid "Thu" +msgstr "Qui" + +#: templates/wagtailadmin/shared/datetimepicker_translations.html:25 +msgid "Fri" +msgstr "Sex" + +#: templates/wagtailadmin/shared/datetimepicker_translations.html:26 +msgid "Sat" +msgstr "Sáb" + +#: templates/wagtailadmin/shared/header.html:23 +#, python-format +msgid "Used %(useage_count)s time" +msgid_plural "Used %(useage_count)s times" +msgstr[0] "Em uso %(useage_count)s time" +msgstr[1] "Em uso %(useage_count)s times" + +#: templates/wagtailadmin/shared/main_nav.html:10 +msgid "Account settings" +msgstr "Configurações da Conta" + +#: templates/wagtailadmin/shared/main_nav.html:11 +msgid "Log out" +msgstr "Sair" + +#: templates/wagtailadmin/shared/pagination_nav.html:16 +#, python-format +msgid "Page %(page_num)s of %(total_pages)s." +msgstr "Página %(page_num)s de %(total_pages)s." + +#: templates/wagtailadmin/userbar/base.html:4 +msgid "User bar" +msgstr "Barra de utilizador" + +#: templates/wagtailadmin/userbar/base.html:14 +msgid "Go to Wagtail admin interface" +msgstr "Ir para a página admin do Wagtail" + +#: templates/wagtailadmin/userbar/item_page_add.html:5 +msgid "Add another page at this level" +msgstr "Adicionar outra página a este nível" + +#: templates/wagtailadmin/userbar/item_page_add.html:5 +msgid "Add" +msgstr "Adicionar" + +#: views/account.py:39 +msgid "Your password has been changed successfully!" +msgstr "A sua senha foi alterada com sucesso!" + +#: views/account.py:60 +msgid "Your preferences have been updated successfully!" +msgstr "As suas preferências foram atualizadas com sucesso!" + +#: views/pages.py:169 views/pages.py:286 +msgid "Go live date/time must be before expiry date/time" +msgstr "A data/hora de publicação tem de ser anterior à data/hora terminal" + +#: views/pages.py:179 views/pages.py:296 +msgid "Expiry date/time must be in the future" +msgstr "A data/hora terminal tem de ocorrer no futuro" + +#: views/pages.py:219 views/pages.py:351 views/pages.py:791 +msgid "Page '{0}' published." +msgstr "Página '{0}' publicada." + +#: views/pages.py:221 views/pages.py:353 +msgid "Page '{0}' submitted for moderation." +msgstr "Página '{0}' enviada para moderação." + +#: views/pages.py:224 +msgid "Page '{0}' created." +msgstr "Página '{0}' criada." + +#: views/pages.py:233 +msgid "The page could not be created due to validation errors" +msgstr "Esta página não pôde ser criada devido a erros na validação" + +#: views/pages.py:356 +msgid "Page '{0}' updated." +msgstr "Página '{0}' atualizada." + +#: views/pages.py:365 +msgid "The page could not be saved due to validation errors" +msgstr "A página não pôde ser guardada devido a erros na validação" + +#: views/pages.py:378 +msgid "This page is currently awaiting moderation" +msgstr "Essa página aguarda por moderação" + +#: views/pages.py:409 +msgid "Page '{0}' deleted." +msgstr "Página '{0}' eliminada." + +#: views/pages.py:575 +msgid "Page '{0}' unpublished." +msgstr "Página '{0}' despublicada." + +#: views/pages.py:627 +msgid "Page '{0}' moved." +msgstr "Página '{0}' movida." + +#: views/pages.py:709 +msgid "Page '{0}' and {1} subpages copied." +msgstr "Página '{0}' e {1} sub-páginas copiadas." + +#: views/pages.py:711 +msgid "Page '{0}' copied." +msgstr "Página '{0}' copiada." + +#: views/pages.py:785 views/pages.py:804 views/pages.py:824 +msgid "The page '{0}' is not currently awaiting moderation." +msgstr "A página '{0}' já não está aguarda moderação." + +#: views/pages.py:810 +msgid "Page '{0}' rejected for publication." +msgstr "Página '{0}' rejeitada para publicação." diff --git a/wagtail/wagtailcore/locale/pt_PT/LC_MESSAGES/django.mo b/wagtail/wagtailcore/locale/pt_PT/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..51a033d0561cdeee3856abfbd526185968279272 GIT binary patch literal 2638 zcma)8J&zkj7@k1*G9W=jgM`G}pt}>d>vcZhq{d#w2-g(~Vedbv|IC1=2 zhT~j=h8vu-G#= zv3%f&y|p~j)+t_!6-&|*FO1;Xlv1sRGOvxuh+A?aL75oxx^QHr6EWS?HI=n>R4XeS z25?6MG1NxT6pvD_$nvqk10?lRe42TRm~HG=(o8AiPPCmY1-qiDkQjb+XKP5#)ME9a z3=>%tG~y~N1R3#pEv&PIB>}o14UC2s#dyd-lxb4hVGdIB28K`$D{EvQ328`A6x*$w z)QT4|Eqx@oNk_Dya;XGu8Y!^abcvjF1*-1*Y61*iRTxTG!*k+3Wcb<47AZOlFj1Y>2V$?8&o zQ4D#Vnq;A1_(*zG<+3IEj&`-F@{5|V@pC;Pewkt8~gB~xh1wWPN z16q*o5h53mfQUxURo!+w(xa%0Kmx<>Y7q6lrWHMM&PNo zER?kLMe^kmE!P&eF~imapXipGR-mnr)~)z070&|wJ7OO=bi4U zwYQT_l3-wTRg9%i{rI?3lytghPB!DVxph(BaAgbbwCU0Z8sgm6*z+pY^xhsWFBJ33 zcw*1Dwzh)VYTRR&^RdrCyWvv`!74^YLmz>yl?W#ai&r&+# z2F7vjT7NTII~wQV426j{0Kto?OKSt^o>-|@)P@()Cbo?2lB&X`J$LdfH9yZSD>_e| zm9woI(UqoizQUds8Pw4M&!<~#mmV>{z1ac5QSiO+J`VeU`mpJ|e^qAoLlpWbGYu;c zCAtdhanOaqOv{fZ&hE^<$8JOM-t@3TGH4FmnJf%NwvaL;e>5*cYk7O54F_GOl(40T zZuwk6$ULk7XP~h_(hOFnS3UfBW@%7IWpwIsnXqr62u%8=LF9C%E%{IF48oCb!d6Ln z^l03OmsFRB<^NO}so|FC+%5aFyRI%YEnO^SK0APmP{jd!M?+7|I+tpj@}-!zEVfzz z#W6&rphIB^U1=C0?QtavSR&jSPMw2y1LK%y$Mb4-06*re2d^LUv3LATdK3cif|c?p zP==h|MxkfAh~o(-z37Y_)Z7;}<^}R(5^94&{p-!!D0aYDr?VeP0i#8eK%Qp=6V&Wp zDGc!Xej2PGyvxq+!e+g(qN>>)json$Tlc-STA{|e7{likrT||vckZtr2AK?n;{-O~ zFEC0!4r}-q+)>MxIlz>w7=<^o1cAN*eR9LV28qwF*NF9C#PY!her=Y(y>a z7JaNE3+!S)?*0!K-X-@$kDA;KhdKUPa3gtOaHy>(7p4df@V-G)?|DnsUc{g`_;HXA zRD9U-#}PuR!GGb$1~S3_l|z^IY=}j%bZE_f6Dx1`J}Y>2vcfd{fLlj%VcC^N^3C=? H+~e#&PwiY_ literal 0 HcmV?d00001 diff --git a/wagtail/wagtailcore/locale/pt_PT/LC_MESSAGES/django.po b/wagtail/wagtailcore/locale/pt_PT/LC_MESSAGES/django.po new file mode 100644 index 0000000000..5da56cf9ab --- /dev/null +++ b/wagtail/wagtailcore/locale/pt_PT/LC_MESSAGES/django.po @@ -0,0 +1,97 @@ +# 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 , YEAR. +# +# Translators: +# Thiago Cangussu , 2014 +msgid "" +msgstr "" +"Project-Id-Version: Wagtail 0.5.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2014-08-01 16:38+0100\n" +"PO-Revision-Date: 2014-08-03 01:52+0100\n" +"Last-Translator: Jose Lourenco \n" +"Language-Team: \n" +"Language: pt_PT\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: pt_PT\n" +"Plural-Forms: nplurals=2; plural=(n > 1);\n" +"X-Generator: Poedit 1.5.4\n" + +#: models.py:46 +msgid "" +"Set this to something other than 80 if you need a specific port number to " +"appear in URLs (e.g. development on port 8000). Does not affect request " +"handling (so port forwarding still works)." +msgstr "" +"Atribua um valor diferente de 80 se você necessitar que um número de porto " +"específico apareça nas URLs (ex. desenvolvimento no porto 8000). Não afeta o " +"tratamento de requisições (assim, o redirecionamento de portos continua a " +"funcionar)." + +#: models.py:48 +msgid "" +"If true, this site will handle requests for all other hostnames that do not " +"have a site entry of their own" +msgstr "" +"Se verdadeiro, este site irá processar requisições de todos os outros " +"hostnames que não tenham um site próprio" + +#: models.py:109 +#, python-format +msgid "" +"%(hostname)s is already configured as the default site. You must unset that " +"before you can save this site as default." +msgstr "" +"O %(hostname)s já está configurado como site pré-definido. Tem de alterar " +"essa configuração antes de poder guardar este site como pré-definido." + +#: models.py:277 +msgid "The page title as you'd like it to be seen by the public" +msgstr "O título da página como você gostaria que fosse visto pelo público" + +#: models.py:278 +msgid "" +"The name of the page as it will appear in URLs e.g http://domain.com/blog/" +"[my-slug]/" +msgstr "" +"O nome da página como ele irá aparecer nas URLs ex.: http://domain.com/blog/" +"[my-slug]/" + +#: models.py:287 +msgid "Page title" +msgstr "Título da página" + +#: models.py:287 +msgid "" +"Optional. 'Search Engine Friendly' title. This will appear at the top of the " +"browser window." +msgstr "" +"Opcional. Título 'Amigável para Motores de Busca'. Isto irá aparecer no topo " +"da janela do navegador." + +#: models.py:288 +msgid "" +"Whether a link to this page will appear in automatically generated menus" +msgstr "" +"Se um link para esta página irá aparecer nos menus gerados automaticamente" + +#: models.py:291 +msgid "Go live date/time" +msgstr "Data/hora de publicação" + +#: models.py:291 models.py:292 +msgid "Please add a date-time in the form YYYY-MM-DD hh:mm:ss." +msgstr "Por favor adicione uma data-hora no formato AAAA-MM-DD hh:mm:ss." + +#: models.py:292 +msgid "Expiry date/time" +msgstr "Data/hora terminal" + +#: models.py:564 +msgid "name '{0}' (used in subpage_types list) is not defined." +msgstr "" +"O nome '{0}' (usado na lista de tipos de sub-páginas) não está definido." diff --git a/wagtail/wagtaildocs/locale/pt_PT/LC_MESSAGES/django.mo b/wagtail/wagtaildocs/locale/pt_PT/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..2ed7e9aaff75b4f2c9bf62b9bbcdd905a1010568 GIT binary patch literal 2800 zcmb7^J8T?97{><)uj8GBXLw9ZjBW5|6m<_7`z5P2!0Ay!5iSC;4k1~;2+?V;4P5W z?cA2l?*<=1e;@cbcod{{XTT@G7`z{R52SNG0Ph7q14-_65D)tvA3E;`@E-7|eEjFU z|7$+~J4kl?m5;xCcecL{lHLbFJWS@}Z-FE)2JZvcb6y3vqyIkm0Qd=b0lW@ghOc&D zQy2YfP?qet1?~WMK!^v9fTaH_NOrfur@$*9+4&Jj^1sUY9k>hqA3<7o6MP0F=Tv}Q zAgzB1#1uP}_mAfNRglhq6QuP9BtKrs=ikleuYn5~{{ketZ-RK(pZH9Ge}lAd975ni zwjZQ*hd>%X0#ZC*1)m1bfDeHN)ZkSR?n!N=d1`Q3+DLCqvz>T{(h z-Liwt8#>`O$$!>GaOR?~g>uaH2l^+mgk8E^TZWI}xfO9yvK5%&cXAA@S<%L9jPnSt%XQB~ z!H1?~cV>9>?L?Z5HR}vc9F*w9loN$R{Ez!oOQ+k#oo?!rKj-Qj<;$Q?VK|C~< z#%N=!tVOP4t&Lc+)i~55$N|GwEv)4FeDO12;aO?N^XRg(hL$L!EdCMr$eNUu-r6*IGJ+2{+> zci!>9dtDl@WNQ>rdL~w-ekFsjz2Gr*Tj(l5~9H;&nZ_~4ih6nZ&91BZSW{gyLNitVV?a? zk4Aik*T)W5&UnXUBu!?)vX+$Kb@*|Ap>2c5Zf&_$*<3T4mz2f5PPzgqW{kA4j)LBe z$XBAQ7{wn|rEEucQ;pfWbyKxbK0<)Io^*>m(x^K9;eNJg){A1QFN6pe2wK6Q0CyA+X&s|7*89dKA(BDG5EWfi z&^QGouR29;>wQhK0@S(9{Q>8!sP1@?I&4lwfygwFkccX`)ygVg)`oH}Rr7z;Hj;;+ M!DFJWjmV1IKi#I(pa1{> literal 0 HcmV?d00001 diff --git a/wagtail/wagtaildocs/locale/pt_PT/LC_MESSAGES/django.po b/wagtail/wagtaildocs/locale/pt_PT/LC_MESSAGES/django.po new file mode 100644 index 0000000000..c352afd292 --- /dev/null +++ b/wagtail/wagtaildocs/locale/pt_PT/LC_MESSAGES/django.po @@ -0,0 +1,196 @@ +# 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 , YEAR. +# +# Translators: +# Thiago Cangussu , 2014 +msgid "" +msgstr "" +"Project-Id-Version: Wagtail 0.5.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2014-08-01 16:38+0100\n" +"PO-Revision-Date: 2014-08-03 01:53+0100\n" +"Last-Translator: Jose Lourenco \n" +"Language-Team: \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.4\n" +"Language: pt_PT\n" + +#: models.py:21 templates/wagtaildocs/documents/list.html:11 +#: templates/wagtaildocs/documents/list.html:14 +#: templates/wagtaildocs/documents/usage.html:16 +msgid "Title" +msgstr "Título" + +#: models.py:22 templates/wagtaildocs/documents/list.html:17 +msgid "File" +msgstr "Ficheiro" + +#: models.py:26 +msgid "Tags" +msgstr "Etiquetas" + +#: wagtail_hooks.py:24 templates/wagtaildocs/documents/index.html:16 +msgid "Documents" +msgstr "Documentos" + +#: templates/wagtaildocs/chooser/chooser.html:2 +#: templates/wagtaildocs/edit_handlers/document_chooser_panel.html:11 +msgid "Choose a document" +msgstr "Escolher um documento" + +#: templates/wagtaildocs/chooser/chooser.html:7 +#: templates/wagtaildocs/chooser/chooser.html:19 +msgid "Search" +msgstr "Procurar" + +#: templates/wagtaildocs/chooser/chooser.html:8 +msgid "Upload" +msgstr "Enviar" + +#: templates/wagtaildocs/chooser/chooser.html:34 +#: templates/wagtaildocs/documents/add.html:25 +#: templates/wagtaildocs/documents/edit.html:29 +msgid "Save" +msgstr "Guardar" + +#: templates/wagtaildocs/chooser/results.html:5 +#: templates/wagtaildocs/documents/results.html:5 +#, python-format +msgid "" +"\n" +" There is one match\n" +" " +msgid_plural "" +"\n" +" There are %(counter)s matches\n" +" " +msgstr[0] "" +"\n" +" Existe uma correspondência\n" +" " +msgstr[1] "" +"\n" +" Existem %(counter)s correspondências\n" +" " + +#: templates/wagtaildocs/chooser/results.html:12 +msgid "Latest documents" +msgstr "Últimos documentos" + +#: templates/wagtaildocs/chooser/results.html:19 +#: templates/wagtaildocs/documents/results.html:18 +#, python-format +msgid "Sorry, no documents match \"%(query_string)s\"" +msgstr "Desculpe, nenhum documento corresponde a \"%(query_string)s\"" + +#: templates/wagtaildocs/documents/_file_field.html:5 +msgid "Change document:" +msgstr "Alterar documento" + +#: templates/wagtaildocs/documents/add.html:4 +#: templates/wagtaildocs/documents/index.html:17 +msgid "Add a document" +msgstr "Adicionar um documento" + +#: templates/wagtaildocs/documents/add.html:15 +msgid "Add document" +msgstr "Adicionar documento" + +#: templates/wagtaildocs/documents/confirm_delete.html:3 +#, python-format +msgid "Delete %(title)s" +msgstr "Eliminar %(title)s" + +#: templates/wagtaildocs/documents/confirm_delete.html:6 +#: templates/wagtaildocs/documents/edit.html:29 +msgid "Delete document" +msgstr "Eliminar documento" + +#: templates/wagtaildocs/documents/confirm_delete.html:10 +msgid "Are you sure you want to delete this document?" +msgstr "Tem certeza que quer eliminar este documento?" + +#: templates/wagtaildocs/documents/confirm_delete.html:13 +msgid "Yes, delete" +msgstr "Sim, eliminar" + +#: templates/wagtaildocs/documents/edit.html:4 +#, python-format +msgid "Editing %(title)s" +msgstr "Editando %(title)s" + +#: templates/wagtaildocs/documents/edit.html:15 +msgid "Editing" +msgstr "Editando" + +#: templates/wagtaildocs/documents/list.html:21 +#: templates/wagtaildocs/documents/list.html:24 +msgid "Uploaded" +msgstr "Enviado" + +#: templates/wagtaildocs/documents/results.html:21 +#, python-format +msgid "" +"You haven't uploaded any documents. Why not upload one now?" +msgstr "" +"Ainda não enviou nenhum documento. Porque não enviar um agora?" + +#: templates/wagtaildocs/documents/usage.html:3 +#, python-format +msgid "Usage of %(title)s" +msgstr "Utilização de %(title)s" + +#: templates/wagtaildocs/documents/usage.html:5 +msgid "Usage of" +msgstr "Utilização de" + +#: templates/wagtaildocs/documents/usage.html:17 +msgid "Parent" +msgstr "Ascendente" + +#: templates/wagtaildocs/documents/usage.html:18 +msgid "Type" +msgstr "Tipo" + +#: templates/wagtaildocs/documents/usage.html:19 +msgid "Status" +msgstr "Estado" + +#: templates/wagtaildocs/documents/usage.html:26 +msgid "Edit this page" +msgstr "Editar esta ágina" + +#: templates/wagtaildocs/edit_handlers/document_chooser_panel.html:9 +msgid "Clear choice" +msgstr "Limpar escolha" + +#: templates/wagtaildocs/edit_handlers/document_chooser_panel.html:10 +msgid "Choose another document" +msgstr "Escolher outro documento" + +#: views/documents.py:37 views/documents.py:46 +msgid "Search documents" +msgstr "Procurar documentos" + +#: views/documents.py:86 +msgid "Document '{0}' added." +msgstr "Documento '{0}' adicionado." + +#: views/documents.py:89 views/documents.py:118 +msgid "The document could not be saved due to errors." +msgstr "O documento não pôde ser guardado devido a erros." + +#: views/documents.py:115 +msgid "Document '{0}' updated" +msgstr "Documento '{0}' atualizado" + +#: views/documents.py:137 +msgid "Document '{0}' deleted." +msgstr "Documento '{0}' apagado." diff --git a/wagtail/wagtailembeds/locale/pt_PT/LC_MESSAGES/django.mo b/wagtail/wagtailembeds/locale/pt_PT/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..0236ea963d4debabb4901e8eddc0dea6cebf0f36 GIT binary patch literal 1158 zcmZuv%We}f6dj;E6kx*&q%N*t140ufeV}McE1=9nR6e$KEJNaybrK00JFdw;3Dt=@ar3J z9rzBM1AYUSfIq-hAUG8SP0%&)7B~l=0sjE+13!T(&QI~@dGJ2?GWY;|1N;u0fxmzm zJUdgyAAk`$S=de%B*AIG=Q#`bo_$Y~wJMa-j=EB%BouMK%_()YA=i_ZUNkqVK|@(K zZc3#hNOBgIiIrnRf`%fOsaFTB9vddh+_&U3wHaRrMz?eB)2?(q8tKB6N%9drNE)=m zqbg1Fb$Z;{DJ7PjlPa^-|D{Bu#-Pbb#x>tFlI`|n&g9GpVZL^Gm!o?e)_{OSCZwWV zp!;gz+fIz$=8g*+Y509M+NS1KDqWrfH%Y_aI0rOn3X+VL%F=zUe=ofOiJ2I$Z6 zp1U*1F@YuO^n}5rmtVBj!}_t#m+!I(*HALWIAf}}rK==)VMHFTYty$eslnuEm*8OS|E*y0m)4**dtxE80{7F+sD=Ra+844s^^)FyqhTuMEFV>v&C17s%$X n0=ps|9eOo|9&du8{$b#rp`gQp$Co`(*UOlc9*Vx-m9G5@n>bV> literal 0 HcmV?d00001 diff --git a/wagtail/wagtailembeds/locale/pt_PT/LC_MESSAGES/django.po b/wagtail/wagtailembeds/locale/pt_PT/LC_MESSAGES/django.po new file mode 100644 index 0000000000..9b6c937f63 --- /dev/null +++ b/wagtail/wagtailembeds/locale/pt_PT/LC_MESSAGES/django.po @@ -0,0 +1,57 @@ +# 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 , YEAR. +# +# Translators: +# Thiago Cangussu , 2014 +msgid "" +msgstr "" +"Project-Id-Version: Wagtail 0.5.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2014-08-01 16:38+0100\n" +"PO-Revision-Date: 2014-08-03 01:53+0100\n" +"Last-Translator: Jose Lourenco \n" +"Language-Team: \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.4\n" +"Language: pt_PT\n" + +#: forms.py:11 +msgid "Please enter a valid URL" +msgstr "Por favor introduza uma URL válida" + +#: forms.py:15 +msgid "URL" +msgstr "URL" + +#: templates/wagtailembeds/chooser/chooser.html:3 +msgid "Insert embed" +msgstr "Inserir embed" + +#: templates/wagtailembeds/chooser/chooser.html:14 +msgid "Insert" +msgstr "Inserir" + +#: views/chooser.py:33 +msgid "" +"There seems to be a problem with your embedly API key. Please check your " +"settings." +msgstr "" +"Parece existir um problema com a sua chave API de embedly. Por favor " +"verifique as suas configurações." + +#: views/chooser.py:35 +msgid "Cannot find an embed for this URL." +msgstr "Não consigo encontrar um embed para esta URL." + +#: views/chooser.py:37 +msgid "" +"There seems to be an error with Embedly while trying to embed this URL. " +"Please try again later." +msgstr "" +"Parece que houve um erro em Embedly durante a tentativa de embed esta URL. " +"Por favor tente novamente." diff --git a/wagtail/wagtailimages/locale/pt_PT/LC_MESSAGES/django.mo b/wagtail/wagtailimages/locale/pt_PT/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..dfde945b64a955cd02c5e0512e281a45be5d6caa GIT binary patch literal 5148 zcmc(hTWnlM8Gt8{6fl86OAE9VhEUgb;@#M}6ldckbrUO(?=q6S4m(2A;n6lv9$C=VbI5-$jN0SO*>La0KB@1Jw_Vy8jk z0dcgm-~%U+{RDgzu9x4x1*QKh zumWF&qSw0+m8!p&-~S2ah_-MDGVivM+u=3pk3hDhUWcNWpFk4ZH~d2-mkL zHBVzm{SHEk{;CKeavg&og>@+Q(S(!m>rmwTA(ZpKQ}WkP|;C1lKziE zIpTK1Z3R zAfmHr;B+GACO)&DLRfJzM#Ehcc|_mxAcE7e*v%nn7<$;YI}g$2IOS=|rzv8~y+`yR zIv*<=X5cfFCnyIgpQTJtM4zHVIahf^uVRbxJVg<`iESOAh>gp6$Wtlc&ihH;N2NZZ zhn{-dCRY2Yjw7o>lQr7?&+pdJ(0O#c5$926lZmt#Vbj5wInUE3(tc=KR!L>kTk0Ca zJjnb`z{1jxHl|&RbDiep%c_YooyFR-fz7PW+U(HvJ*tkiP1Gt!)~LmCYPHeLIAQz! zdT$H8?@^o~X}OzYfi=DN<8B32p!|M3F)gIbNqwnfTRKj3hut;Vv|jbIHiBB+h?B%NvZB>q$!wJRaiqt0Ro%c{ z)k_^Wa#xkH6V(kXx+DFcFDLe6dJ^kap=Rspz$7hff{&4tByA+tMo1O}+H^W%BWY-Y zfIh2jK6Dbh;@ee5iqlN$RP4d7A-Np6)y4R#I+N%|VV2D#4#lu(h{H}Ur+g;yTYh8$ zo%-umEn!Phrk3JP&Te#OTB%wpmQiP|bP+>C;lWU~U0BB8duXlTC~97omHI#!93 zoO6~A#1l&pMH&s8rp-JUn3n6uDfQw=VZTO)F%gHu#?ce;VeLF~Qu|FES((KoYgPRM zu_-ib+60_=KPC-i42fmp|1wN0p;XPPNu#k$C-!pgC!(WssW@}o?7s|!g7fa6Ua;w8 zxq@QVu@&o-S4@aHOvEBCXjb+4_L}=RYjiuY&BHrK$5%}&<2;HU7l;=Z-0Our2`18= zM`&u1=kius zsmC=vvUH|iIVQ)+kjilsSJQi^ruSE-W-3$Ddit5#zJt4`rl+RpSUHQ^$kdzr?bB1! zwF3u=ev2l}D)q!fX<)KAsp;n>t}o&{HfqFr_7c@+gR)v(O^=K$k_U41S*cqSvZYfe zPt6acm}c+CV$xK^w3tgxX9TA`oxu3fA^g)Msm%_bt1nb$2K{9DrcEmIEa_qLH9d3D z&qkJlJTXCKffSS0bkuRx^zhz8x_CW29_b@`dg9Q?mnvlx7YUYP@#cQE%}J7@ zu~@36=F>(TNKVefGI__tZM}hmwm8p{e(RzicKVa4`EtenOJBky!LDR0F534-L@C}a zo9kYeT+U2J+i1m?An0;=Tx4k_nG8s}cXMmbn{Dc2ct;|0G#d`@DQ)xjJI zN5qzBg$gjFB7cYdoL(r{Gi74$eJHhfUprBjY`t#!A2F$kK zcV8Pid(Gatg2j^bSGw0p|At^mf^V7?{w4Dd45i<>e-)V2L`3rWq$Dvlo$()@v%tdYwAzCWNa$m@?GI0hYjj7FLRc;H$ixYLc zSe(h@^5&rC(uR#Z0vq?s%xCV5xto$@q|IF*2D?bO3lstr?(g=%K8dP0-{y}tFeEu= zrJIJ?Al6~`x?D6iOy}C&jbl@@aULi3ej+!CXA(&^4eEoJ!h5jacNH!f@v!fe4sM6Tr|V0g z%!;WCyE5gih0Wrw#dU>%<}+K}gcrN7g}M_XTR$F)S#eP@m@^jNi={HSr!%J!;+0r3 zsnbId+*&ej6zisYv+(cD^`YRm$c, YEAR. +# +# Translators: +# Thiago Cangussu , 2014 +msgid "" +msgstr "" +"Project-Id-Version: Wagtail 0.5.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2014-08-01 16:39+0100\n" +"PO-Revision-Date: 2014-08-03 01:55+0100\n" +"Last-Translator: Jose Lourenco \n" +"Language-Team: \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.4\n" +"Language: pt_PT\n" + +#: forms.py:37 +msgid "Filter" +msgstr "Filtro" + +#: forms.py:39 +msgid "Original size" +msgstr "Dimensão original" + +#: forms.py:40 +msgid "Resize to width" +msgstr "Redimensionar pela largura" + +#: forms.py:41 +msgid "Resize to height" +msgstr "Redimensionar pela altura" + +#: forms.py:42 +msgid "Resize to min" +msgstr "Redimensionar pelo min" + +#: forms.py:43 +msgid "Resize to max" +msgstr "Redimensionar pelo máx" + +#: forms.py:44 +msgid "Resize to fill" +msgstr "Redimensionar para preencher" + +#: forms.py:47 +msgid "Width" +msgstr "Largura" + +#: forms.py:48 +msgid "Height" +msgstr "Altura" + +#: models.py:34 templates/wagtailimages/images/usage.html:16 +msgid "Title" +msgstr "Título" + +#: models.py:49 +msgid "File" +msgstr "Ficheiro" + +#: models.py:55 +msgid "Tags" +msgstr "Etiquetas" + +#: wagtail_hooks.py:64 templates/wagtailimages/images/index.html:5 +#: templates/wagtailimages/images/index.html:18 +msgid "Images" +msgstr "Imagens" + +#: templates/wagtailimages/chooser/chooser.html:3 +#: templates/wagtailimages/edit_handlers/image_chooser_panel.html:19 +msgid "Choose an image" +msgstr "Escolher uma imagem" + +#: templates/wagtailimages/chooser/chooser.html:8 +#: templates/wagtailimages/chooser/chooser.html:20 +msgid "Search" +msgstr "Procurar" + +#: templates/wagtailimages/chooser/chooser.html:9 +#: templates/wagtailimages/chooser/chooser.html:43 +msgid "Upload" +msgstr "Enviar" + +#: templates/wagtailimages/chooser/chooser.html:23 +msgid "Popular tags" +msgstr "Etiquetas frequentes" + +#: templates/wagtailimages/chooser/results.html:6 +#: templates/wagtailimages/images/results.html:6 +#, python-format +msgid "" +"\n" +" There is one match\n" +" " +msgid_plural "" +"\n" +" There are %(counter)s matches\n" +" " +msgstr[0] "" +"\n" +" Existe uma correspondência\n" +" " +msgstr[1] "" +"\n" +" Existem %(counter)s correspondências\n" +" " + +#: templates/wagtailimages/chooser/results.html:13 +#: templates/wagtailimages/images/results.html:13 +msgid "Latest images" +msgstr "Últimas imagens" + +#: templates/wagtailimages/chooser/select_format.html:3 +msgid "Choose a format" +msgstr "Escolher um formato" + +#: templates/wagtailimages/chooser/select_format.html:17 +msgid "Insert image" +msgstr "Inserir imagem" + +#: templates/wagtailimages/edit_handlers/image_chooser_panel.html:17 +msgid "Clear image" +msgstr "Limpar imagem" + +#: templates/wagtailimages/edit_handlers/image_chooser_panel.html:18 +msgid "Choose another image" +msgstr "Escolher outra imagem" + +#: templates/wagtailimages/images/_file_field.html:6 +msgid "Change image:" +msgstr "Alterar imagem:" + +#: templates/wagtailimages/images/add.html:4 +#: templates/wagtailimages/images/index.html:19 +msgid "Add an image" +msgstr "Adicionar uma imagem" + +#: templates/wagtailimages/images/add.html:15 +msgid "Add image" +msgstr "Adicionar imagem" + +#: templates/wagtailimages/images/add.html:25 +#: templates/wagtailimages/images/edit.html:33 +msgid "Save" +msgstr "Guardar" + +#: templates/wagtailimages/images/confirm_delete.html:4 +#: templates/wagtailimages/images/confirm_delete.html:8 +#: templates/wagtailimages/images/edit.html:33 +msgid "Delete image" +msgstr "Eliminar imagem" + +#: templates/wagtailimages/images/confirm_delete.html:16 +msgid "Are you sure you want to delete this image?" +msgstr "Tem a certeza que quer eliminar esta imagem?" + +#: templates/wagtailimages/images/confirm_delete.html:19 +msgid "Yes, delete" +msgstr "Sim, eliminar" + +#: templates/wagtailimages/images/edit.html:4 +#: templates/wagtailimages/images/url_generator.html:4 +#, python-format +msgid "Editing image %(title)s" +msgstr "Editando imagem %(title)s" + +#: templates/wagtailimages/images/edit.html:15 +msgid "Editing" +msgstr "Editando" + +#: templates/wagtailimages/images/results.html:31 +#, python-format +msgid "Sorry, no images match \"%(query_string)s\"" +msgstr "Desculpe, nenhuma imagem corresponde a \"%(query_string)s\"" + +#: templates/wagtailimages/images/results.html:34 +#, python-format +msgid "" +"You've not uploaded any images. Why not add one now?" +msgstr "" +"Ainda não enviou qualquer imagem. Porque não adicionar uma agora?" + +#: templates/wagtailimages/images/url_generator.html:9 +msgid "Generating URL" +msgstr "A gerar URL" + +#: templates/wagtailimages/images/url_generator.html:25 +msgid "URL" +msgstr "URL" + +#: templates/wagtailimages/images/url_generator.html:28 +msgid "Preview" +msgstr "Pre-visualizar" + +#: templates/wagtailimages/images/url_generator.html:34 +msgid "" +"Note that images generated larger than the screen will appear smaller when " +"previewed here, so they fit the screen." +msgstr "" +"Note que as imagens criadas com dimensões superiores às do ecrã serão pre-" +"visualizadas mais pequenas para caberem no ecrã." + +#: templates/wagtailimages/images/usage.html:3 +#, python-format +msgid "Usage of %(title)s" +msgstr "Utilização de %(title)s" + +#: templates/wagtailimages/images/usage.html:5 +msgid "Usage of" +msgstr "Utilização de" + +#: templates/wagtailimages/images/usage.html:17 +msgid "Parent" +msgstr "Ascendente" + +#: templates/wagtailimages/images/usage.html:18 +msgid "Type" +msgstr "Tipo" + +#: templates/wagtailimages/images/usage.html:19 +msgid "Status" +msgstr "Estado" + +#: templates/wagtailimages/images/usage.html:26 +msgid "Edit this page" +msgstr "Editar esta página" + +#: templates/wagtailimages/multiple/add.html:3 +msgid "Add multiple images" +msgstr "Adicionar múltiplas imagens" + +#: templates/wagtailimages/multiple/add.html:13 +msgid "Add images" +msgstr "Adicionar imagens" + +#: templates/wagtailimages/multiple/add.html:18 +msgid "Drag and drop images into this area to upload immediately." +msgstr "Arrastar e largar imagens nesta área para envio imediato." + +#: templates/wagtailimages/multiple/add.html:22 +msgid "Or choose from your computer" +msgstr "Ou escolha no seu computador" + +#: templates/wagtailimages/multiple/add.html:47 +msgid "" +"Upload successful. Please update this image with a more appropriate title, " +"if necessary. You may also delete the image completely if the upload wasn't " +"required." +msgstr "" +"Envio com sucesso. Por favor atualize esta imagem com um título mais " +"apropriado se necessário. Também pode eliminar completamente a imagem se o " +"envio não era pretendido." + +#: templates/wagtailimages/multiple/add.html:48 +msgid "Sorry, upload failed." +msgstr "Desculpe, o envio falhou." + +#: templates/wagtailimages/multiple/edit_form.html:10 +msgid "Update" +msgstr "Atualizar" + +#: templates/wagtailimages/multiple/edit_form.html:11 +msgid "Delete" +msgstr "Eliminar" + +#: utils/validators.py:17 utils/validators.py:28 +msgid "" +"Not a valid image. Please use a gif, jpeg or png file with the correct file " +"extension (*.gif, *.jpg or *.png)." +msgstr "" +"Não é uma imagem válida. Por favor use uma imagem do tipo gif, jpeg, ou " +"png, com a extensão de nome correta (*.gif, *.jpg or *.png)." + +#: utils/validators.py:35 +#, python-format +msgid "" +"Not a valid %s image. Please use a gif, jpeg or png file with the correct " +"file extension (*.gif, *.jpg or *.png)." +msgstr "" +"Não é uma imagem do tipo %s válida. Por favor use uma imagem do tipo gif, " +"jpeg, ou png, com a extensão de nome correta (*.gif, *.jpg or *.png)." + +#: views/images.py:37 views/images.py:47 +msgid "Search images" +msgstr "Procurar imagens" + +#: views/images.py:99 +msgid "Image '{0}' updated." +msgstr "Imagem '{0}' atualizada." + +#: views/images.py:102 +msgid "The image could not be saved due to errors." +msgstr "A imagem não pôde ser guardada devido a erros." + +#: views/images.py:188 +msgid "Image '{0}' deleted." +msgstr "Imagem '{0}' eliminada." + +#: views/images.py:206 +msgid "Image '{0}' added." +msgstr "Imagem '{0}' adicionada." + +#: views/images.py:209 +msgid "The image could not be created due to errors." +msgstr "A imagem não pôde ser criada devido a erros." diff --git a/wagtail/wagtailredirects/locale/pt_PT/LC_MESSAGES/django.mo b/wagtail/wagtailredirects/locale/pt_PT/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..e6fb7e2b6559538f746b3ec181e4ca50d4600eb5 GIT binary patch literal 2874 zcmbW2&x;&I6vxXLHBO?@_#^R0q*w?$i|NTsei3JX#5KE#kxd*o6Qdw5wbO5BI!;%0 zs;YN05hWma6HgH@f*}XNgBSHA2r}SV^rQzt{{Sy~l;HPu&-Bi2mK-d$=hIdFs_NBy zufF^Hp6xdT+H-iG#k1=kAtu0oL2jRK6XGrKCb$c{4OYON_X=@8SO<55v*1(UYv3O6 z9qyzU?1W8gm^&);!h zzV06I5%l+h$G|dJ1>XkQ-;Y7KF1`mbRr~<%1b+nC&!53-IP-5{jQ&LovOj&0*ZURR z0q(}nu<5JFxw z&LR5=_wrVfBdysXOEPlOXp*t=txoY-6mM*w8!8wdD7Q?iJ=qDD&mdP=irFxfmcqzV z%Zpi9_e?5XI(S)A+DmU_NL}(IeFqy4txt-%Y;=HPd~+ZB`^a}`!io7X!g8aFWJ8f| z4>@9d+L~CLH^sV6cGN1#Wg;zGmXxQkA}@7%QX4O)lw zY1mszZFjbRvC^cySfrMTW6~k7T?~)7Kst+!BV}71NxB_ra&pDk zHu1?wnrSUQ z;mPLFJR5h8r%9MaW!;{4UGE{0D%)@4knYKgiwnh=6BiI?aUnnAFmM<(*7gn}+9Tn} z3Q&$sQ9N^?d?h8@TXNnapA&BC5C+Et%CNAPs6&K@^R-OF9Lg|7VHru*8tW=|nc(17 zc!#+W&0a#{O>zeZWhxRI#me?X!)>n{yiV3dM%U$~ygFpHa;#D;VYOPv@VX#Q65ih;j z?ue|`>c@`fb_>e+plOwMUFD6f%U6sexnOY5bj!%8%jmw?9ds*eZl<)LbUQ^I1x->h zTsn95-2D0}YViG(!JXDv7RRqkPgnh+q^lx5DO(+79r@{t&C|h&bvxdEg={d7Ekop} zE>A2+zSQWZR&|5Z#>TELb&_@6^x;XFzfPC6oRPJO$r=BXP*ENUSI$_`4c z|3&{6>Vjg_dyA~6Yf7RzWn!UXxP6kkQ5>;7Ij=@1ofPwfPsPjV=Pd_EG>Zjpi&Zmq z!__y%%gCHL66Z;GI6C=d%e;rCM7Sc63ROkQhOz9w#LI}sz$#K61w$Az!NP&Y-dA%SZt5L{W&zcHJz3UvP4BQUY9kUt;hG<5K5f`HPU~y$w LU2$_0)fN8%cfTv& literal 0 HcmV?d00001 diff --git a/wagtail/wagtailredirects/locale/pt_PT/LC_MESSAGES/django.po b/wagtail/wagtailredirects/locale/pt_PT/LC_MESSAGES/django.po new file mode 100644 index 0000000000..759a4906a2 --- /dev/null +++ b/wagtail/wagtailredirects/locale/pt_PT/LC_MESSAGES/django.po @@ -0,0 +1,169 @@ +# 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 , YEAR. +# +# Translators: +# Thiago Cangussu , 2014 +msgid "" +msgstr "" +"Project-Id-Version: Wagtail 0.5.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2014-08-01 16:39+0100\n" +"PO-Revision-Date: 2014-08-03 01:56+0100\n" +"Last-Translator: Jose Lourenco \n" +"Language-Team: \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.4\n" +"Language: pt_PT\n" + +#: models.py:10 +msgid "Redirect from" +msgstr "Redirecionar de" + +#: models.py:12 +msgid "Permanent" +msgstr "Permanente" + +#: models.py:12 +msgid "" +"Recommended. Permanent redirects ensure search engines forget the old page " +"(the 'Redirect from') and index the new page instead." +msgstr "" +"Recomendado. Redirecionamentos permanentes garantem que os motores de busca " +"esqueçam a página antiga (o 'Redirecionar de') e indexem a nova página." + +#: models.py:13 +msgid "Redirect to a page" +msgstr "Redirecionar para uma página" + +#: models.py:14 +msgid "Redirect to any URL" +msgstr "Redirecionar para qualquer URL" + +#: views.py:58 +msgid "Search redirects" +msgstr "Procurar redireções" + +#: views.py:71 +msgid "Redirect '{0}' updated." +msgstr "Redireção '{0}' atualizada." + +#: views.py:74 +msgid "The redirect could not be saved due to errors." +msgstr "A redireção não pôde ser guardada devido a erros." + +#: views.py:92 +msgid "Redirect '{0}' deleted." +msgstr "Redireção '{0}' eliminada." + +#: views.py:112 +msgid "Redirect '{0}' added." +msgstr "Redireção '{0}' adicionada." + +#: views.py:115 +msgid "The redirect could not be created due to errors." +msgstr "A redireção não pôde ser criada devido a erros." + +#: wagtail_hooks.py:22 templates/wagtailredirects/index.html:3 +#: templates/wagtailredirects/index.html:17 +msgid "Redirects" +msgstr "Redireções" + +#: templates/wagtailredirects/add.html:3 templates/wagtailredirects/add.html:6 +#: templates/wagtailredirects/index.html:18 +msgid "Add redirect" +msgstr "Adicionar redireção" + +#: templates/wagtailredirects/add.html:14 +#: templates/wagtailredirects/edit.html:14 +msgid "Save" +msgstr "Guardar" + +#: templates/wagtailredirects/confirm_delete.html:4 +#, python-format +msgid "Delete redirect %(title)s" +msgstr "Eliminar redireção %(title)s" + +#: templates/wagtailredirects/confirm_delete.html:6 +msgid "Delete" +msgstr "Eliminar" + +#: templates/wagtailredirects/confirm_delete.html:10 +msgid "Are you sure you want to delete this redirect?" +msgstr "Tem a certeza que pretende eliminar esta redireção?" + +#: templates/wagtailredirects/confirm_delete.html:13 +msgid "Yes, delete" +msgstr "Sim, eliminar" + +#: templates/wagtailredirects/edit.html:4 +#, python-format +msgid "Editing %(title)s" +msgstr "Editando %(title)s" + +#: templates/wagtailredirects/edit.html:6 +msgid "Editing" +msgstr "Editando" + +#: templates/wagtailredirects/edit.html:15 +msgid "Delete redirect" +msgstr "Eliminar redireção" + +#: templates/wagtailredirects/list.html:11 +#: templates/wagtailredirects/list.html:14 +msgid "From" +msgstr "De" + +#: templates/wagtailredirects/list.html:17 +msgid "To" +msgstr "Para" + +#: templates/wagtailredirects/list.html:18 +msgid "Type" +msgstr "Tipo" + +#: templates/wagtailredirects/list.html:25 +msgid "Edit this redirect" +msgstr "Editar esta redireção" + +#: templates/wagtailredirects/list.html:34 +msgid "primary" +msgstr "principal" + +#: templates/wagtailredirects/results.html:5 +#, python-format +msgid "" +"\n" +" There is one match\n" +" " +msgid_plural "" +"\n" +" There are %(counter)s matches\n" +" " +msgstr[0] "" +"\n" +" Existe uma correspondência\n" +" " +msgstr[1] "" +"\n" +" Existem %(counter)s correspondências\n" +" " + +#: templates/wagtailredirects/results.html:18 +#, python-format +msgid "Sorry, no redirects match \"%(query_string)s\"" +msgstr "" +"Desculpe, nenhuma redireção corresponde a \"%(query_string)s\"" + +#: templates/wagtailredirects/results.html:21 +#, python-format +msgid "" +"No redirects have been created. Why not add one?" +msgstr "" +"Nenhuma redireção foi criada. Porque não adicionar uma?" diff --git a/wagtail/wagtailsearch/locale/pt_PT/LC_MESSAGES/django.mo b/wagtail/wagtailsearch/locale/pt_PT/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..1b03459c4fd57bdaa1f4683609b7085a8297a5d5 GIT binary patch literal 4993 zcmbW4O^h5z6~_x40$Dvi?`#N5S8MkAr_|@GVgGeT>QX zgD1fEf#<*0@4(aFK;bK5Fa}>{(}?%~!H7q} zud=BI$Kd1OkHN2jZ-A(#9(})34}yom4}qTpW&HVOybnIc^8oxb_#N;G@Ry+M{|8X? z`WGns+zToH03Qa0pZj>pEA@?N;teC3k;n{W)e3t#Oe zI)8-kQN9wt&=>shF;Fhi@l)YWsToi>!!_YTq#~>Xf1;Q2g9phq-x# z?*dZoW!O z-_>i~!S1cct}1k1BqLLdb?h=zCN2wdbm>s2^0sJp5lyy|a>!_Ey%$*{=9ab?=`^`z z_3Vlrtqzh+Cax@UJKJ4Z%vblBuJ(;UMt{iqtF^YW1gPjN1?)vS~bLy#$Q9TX|cgV zuFI>`pr3FlI|hdbNBE?)`$^kP7)%i=35znTN2ZL16Fv``C~-Q8^@RvvWh)u3T1Y!u2#dn`OQ%&|Sz0UhC>}nVz_zj^6M>d|TKTtE7Ns zQ8o<{=cyUnc!8)&S7iR0^4kY5Bt(}?X!u+=r`pup*>^(L8iM3Yxn+Ts~jHbzOQ z4Efg>rsK+rGeSDQ-5O8!#(P#=WlUWSC9475mway@YFgTmY)2*DDQv)>?b*)vk>}!eL@_H^861S|qHLt#G{X&xuYQ1nbZB%xii#yk- zJCyom{X*?a-Rqw0_GYfw+!bZ#q8}u2=kwLTclvHw&#YhWcb=AvVM*s1(qdU3>n)w= z^iFkpOM2HqbM!0i?Q)T< zNV3zEW>a`up7~<`+0LoyJQ2TPi_RJ%rRp#1Q#X=wW<9M6lXjkUICEKNd3f|^j-A%^ z?U}huuj-}w(=%V{oVS@RY75q#cw8^RBa)iXTNX$rQ+dp-(f^SNX!1*0BC9F04+K5-O zne)l^&t$GiOCuw7E}GZ{;kotH8*jRLoqA($cNcbwHk5bMDj>~57A3h!MeDj_*kqR= zQ#5J!iluqrV0NKHUJ|^E5ObUc z({{Nh_#O?1c-|*43&G;S4LL4YWTBWtmkicZd4v=*z2%VJ*In!;dF^)MSze8db`gbW z`xiLcOpd67CXaUY7CTn$YA})znGjRQdoVF{9JCtkyUcCkl)Fq2wVEWD24`%jdm|i7 zpqKWJsk5VXqfL_$IYX2!4cOuq2Y)Z#T`9M6yJhOr503e!E*~JDf3<-yT0I zArf6&K`ap~88%HIywN0KS8uE**E#BNMngLcHFq z_Jx!D1Yy!5QNkoaLm}BY5b-BTT_XD=5*tFN?9tUEG?n6`P({Ut zP@VsewyDht1U1c5kUA|#R0t_;*z8)3=!6Q2%BIxs=KrFoz+V^o%}{wo?MW4@PlJOZ zzjj17^b>U%Yy3=I34dIyuNy2WhK*-}p)_bXrKUjG=dYIhgACQMd$%PV>jiZcXYXBf zKD;R=aXh)veX09?`Yb2o0YN@VfDmcYckLUgPY(Wi_^3*AOY`+VT`Zh$zc#ARt-G{g hD0VF&dL<7VhUT_kPfG%b&>fk~(ElZ)g*N*O^, YEAR. +# +# Translators: +# Gladson , 2014 +msgid "" +msgstr "" +"Project-Id-Version: Wagtail 0.5.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2014-08-01 16:39+0100\n" +"PO-Revision-Date: 2014-08-03 01:58+0100\n" +"Last-Translator: Jose Lourenco \n" +"Language-Team: \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.4\n" +"Language: pt_PT\n" + +#: forms.py:9 +msgid "Search term(s)/phrase" +msgstr "Procurar termo(s)/frase" + +#: forms.py:10 +msgid "" +"Enter the full search string to match. An \n" +" exact match is required for your Editors Picks to be \n" +" displayed, wildcards are NOT allowed." +msgstr "" +"introduza a frase completa a procurar. É \n" +" necessária uma coincidência exacta com os termos de procura para que " +"as suas Seleções de Editor sejam \n" +" mostradas, caracteres de substituição (wildcards) NÃO são permitidos." + +#: forms.py:36 +msgid "Please specify at least one recommendation for this search term." +msgstr "" +"Por favor especifique pelo menos uma recomendação para este termo de procura." + +#: wagtail_hooks.py:23 templates/wagtailsearch/editorspicks/list.html:9 +msgid "Editors picks" +msgstr "Escolhas do editor" + +#: templates/wagtailsearch/editorspicks/add.html:3 +#: templates/wagtailsearch/editorspicks/add.html:5 +msgid "Add editor's pick" +msgstr "Adicionar escolha de editor" + +#: templates/wagtailsearch/editorspicks/add.html:10 +msgid "" +"\n" +"

    Editors picks are a means of recommending specific pages " +"that might not organically come high up in search results. E.g recommending " +"your primary donation page to a user searching with a less common term like " +"\"giving\".

    \n" +" " +msgstr "" +"\n" +"

    Escolhas de Editores servem para recomendar páginas que " +"poderiam não ser selecionadas para aparecer em posição alta em resultados de " +"pesquisa. Por ex., recomendar a sua página principal de donativos para ser " +"pesquisada usando termos menos comuns como \"dar\".

    \n" +" " + +#: templates/wagtailsearch/editorspicks/add.html:13 +msgid "" +"\n" +"

    The \"Search term(s)/phrase\" field below must contain " +"the full and exact search for which you wish to provide recommended results, " +"including any misspellings/user error. To help, you can choose from " +"search terms that have been popular with users of your site.

    \n" +" " +msgstr "" +"\n" +"

    O campo \"Procurar termo(s)/frase\" abaixo tem de conter " +"a pesquisa completa e exata para a qual pretende indicar resultados " +"recomendados, incluindo quaisquer erros de ortografia/utilizador. " +"Para facilitar, pode escolher de entre termos de pesquisa que tenham sido " +"usados frequentemente por utilizadores do seu site.

    \n" +" " + +#: templates/wagtailsearch/editorspicks/add.html:27 +#: templates/wagtailsearch/editorspicks/edit.html:19 +msgid "Save" +msgstr "Guardar" + +#: templates/wagtailsearch/editorspicks/confirm_delete.html:3 +#, python-format +msgid "Delete %(query)s" +msgstr "Eliminar %(query)s" + +#: templates/wagtailsearch/editorspicks/confirm_delete.html:5 +#: templates/wagtailsearch/editorspicks/edit.html:20 +#: templates/wagtailsearch/editorspicks/includes/editorspicks_form.html:6 +msgid "Delete" +msgstr "Eliminar" + +#: templates/wagtailsearch/editorspicks/confirm_delete.html:9 +msgid "Are you sure you want to delete all editors picks for this search term?" +msgstr "" +"Tem a certeza que pretende eliminar todas as escolhas de editores para este " +"termo de pesquisa?" + +#: templates/wagtailsearch/editorspicks/confirm_delete.html:12 +msgid "Yes, delete" +msgstr "Sim, eliminar" + +#: templates/wagtailsearch/editorspicks/edit.html:3 +#, python-format +msgid "Editing %(query)s" +msgstr "Editando %(query)s" + +#: templates/wagtailsearch/editorspicks/edit.html:5 +msgid "Editing" +msgstr "Editando" + +#: templates/wagtailsearch/editorspicks/index.html:3 +msgid "Search Terms" +msgstr "Procurar Termos" + +#: templates/wagtailsearch/editorspicks/index.html:17 +msgid "Editor's search picks" +msgstr "Procurar escolhas de editor" + +#: templates/wagtailsearch/editorspicks/index.html:18 +msgid "Add new editor's pick" +msgstr "Adicionar nova escolha de editor" + +#: templates/wagtailsearch/editorspicks/list.html:8 +msgid "Search term(s)" +msgstr "Procurar termo(s)" + +#: templates/wagtailsearch/editorspicks/list.html:10 +#: templates/wagtailsearch/queries/chooser/results.html:8 +msgid "Views (past week)" +msgstr "Visualizações (última semana)" + +#: templates/wagtailsearch/editorspicks/list.html:17 +msgid "Edit this pick" +msgstr "Editar esta escolha" + +#: templates/wagtailsearch/editorspicks/list.html:23 +msgid "None" +msgstr "Nenhuma" + +#: templates/wagtailsearch/editorspicks/results.html:5 +#, python-format +msgid "" +"\n" +" There is one match\n" +" " +msgid_plural "" +"\n" +" There are %(counter)s matches\n" +" " +msgstr[0] "" +"\n" +" Existe uma ocorrência\n" +" " +msgstr[1] "" +"\n" +" Existem %(counter)s ocorrências\n" +" " + +#: templates/wagtailsearch/editorspicks/results.html:18 +#, python-format +msgid "Sorry, no editor's picks match \"%(query_string)s\"" +msgstr "" +"Desculpe, nenhuma escolha de editor contém \"%(query_string)s\"" + +#: templates/wagtailsearch/editorspicks/results.html:21 +#, python-format +msgid "" +"No editor's picks have been created. Why not add one?" +msgstr "" +"Nenhuma escolha de editor foi criada. Porque não adicionar uma?" + +#: templates/wagtailsearch/editorspicks/includes/editorspicks_form.html:4 +msgid "Move up" +msgstr "Mover para cima" + +#: templates/wagtailsearch/editorspicks/includes/editorspicks_form.html:5 +msgid "Move down" +msgstr "Mover para baixo" + +#: templates/wagtailsearch/editorspicks/includes/editorspicks_form.html:10 +msgid "Editors pick" +msgstr "Escolha de editor" + +#: templates/wagtailsearch/editorspicks/includes/editorspicks_formset.html:14 +msgid "Add recommended page" +msgstr "Adicionar uma página recomendada" + +#: templates/wagtailsearch/queries/chooser/chooser.html:2 +msgid "Popular search terms" +msgstr "Termos de procura populares" + +#: templates/wagtailsearch/queries/chooser/chooser.html:11 +msgid "Search" +msgstr "Procurar" + +#: templates/wagtailsearch/queries/chooser/results.html:7 +msgid "Terms" +msgstr "Termos" + +#: templates/wagtailsearch/queries/chooser/results.html:22 +msgid "No results found" +msgstr "Nenhum resultado encontrado" + +#: views/editorspicks.py:47 +msgid "Search editor's picks" +msgstr "Procurar nas escolhas de editor" + +#: views/editorspicks.py:83 +msgid "Editor's picks for '{0}' created." +msgstr "Escolhas de editor para '{0}' criadas." + +#: views/editorspicks.py:89 +msgid "Recommendations have not been created due to errors" +msgstr "Recomendações não foram criadas devido a erros." + +#: views/editorspicks.py:117 +msgid "Editor's picks for '{0}' updated." +msgstr "Escolhas de editor para '{0}' atualizadas." + +#: views/editorspicks.py:123 +msgid "Recommendations have not been saved due to errors" +msgstr "Recomendações não foram guardadas devido a erros." + +#: views/editorspicks.py:142 +msgid "Editor's picks deleted." +msgstr "Escolhas de editor eliminadas." diff --git a/wagtail/wagtailsnippets/locale/pt_PT/LC_MESSAGES/django.mo b/wagtail/wagtailsnippets/locale/pt_PT/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..eeab056130f7fc84e4da93cc2c99bc009355e43c GIT binary patch literal 2708 zcma)-&u<$=6vqc>`C(cL1zKn+jH-qtO4hN{6oT`sA$6moB()lcfP`dCyc2t?^~^Fe z>yT8vlp9xsxNx9Cf)h6?4(%=f1LA~w;ef;yAt8kLKJVIT%f@8n+0V@Gn>X*xd-MFu z@k3uQwAayJLqGBuW5eLzAhoX_XY5t*HaG>|1)l`}1WEoM@EmyhiRAr7a0K&3@HxQ!oeq1!5^X{7ka$C^&%m36T7q2FYIylD}=R z2!0FFx}QPPe;+&s{t8mO{s51H$FRvDcm{kEET{7jOhb&fj3JEd1@sd%K_g$N!94a7 zI-MQGi(+>K9qQT3=;RaGcLx0xbZRHj>8!eq@&wy;?4oziqf<;MKgi~e{~-B6Hb2zn zeV-2uSrtT)bTzjf$(j-^Ic(Xyk$hXn+{Wo(ODM;k=DrN2liW1}o4s_7Ei|>ZGDWsf z_oGnSHKo}{=u&4dmLOY(dw3rx>x8P4-DN+3nPglf8nQDDRHMs-=~$6l44r37vlX57 zp%#U)5#g}qP0^NoLrTT#MhYkWJYR2ab9l<91#cR;IdgVkXiGGl2*UL2Z7q?l#Re+Q z&I$xZD>*$TX6IN%7^xgvgn`^#IH?f*wQaG_*XBph3_2o%?wy#YLO^cm6oP}hoWj8%-jF6+*_;(PB)V*{;9d_9R7FXS)e z3%P4D(#Cnqwh{Q=yK%#MRbAq_%GIj3K!L{+?-G=i_;{f>;T0ymLXj8WDxH64q);pr zAn09_?SNE2DtDe2ilqyaiQJN~&Z`=sY$%*ICH@|67hlr2nX0b&^mR-xhUqlFWoL6s zLN#KXs#lew1(TMqESLAZD8lvytsHX7qX?9^lb^V;C=`L3;`OF5R=SzB>Sb?oPmZ?V zl*TJ#OCL9?#3wfbm#cJ=-n*<#%a*uG?tq;cpW?}IW=Qc_UL2mvec&xhB~9W%MN7J; zMV#YA&)O1?T&+^gv3WnJ<50wYWuYotT=2RyPVNZ)G4c@Ia2W=zfL2M10+o^K!*-69 zZC!_`IK4r(;NE8)JCk|gso11D_6FI?vT9Ufrr^=;?FNkQ6eyv5-5VTC)rxLw6r{G^ zw^&Klj9XdCdKaH>>Hs$=5WddyiZ*nhYWEvt*1@Y)H(+rqDOvNjE|rfAlWZ{-#uuhn zih6^-M(s%*ymFQCFMt!g+N)a~FQVNae3UXINa7>vNjva0GKfkSD%Za9xI?fUqK~eq z?tbs$P_t?fX}0EqFxU~h-_eozsAmt);bpg)tp=^pUY7PPRj9y%lp-R1<{f+, YEAR. +# +msgid "" +msgstr "" +"Project-Id-Version: Wagtail 0.5.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2014-08-01 16:39+0100\n" +"PO-Revision-Date: 2014-08-03 01:58+0100\n" +"Last-Translator: Jose Lourenco \n" +"Language-Team: \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.4\n" +"Language: pt_PT\n" + +#: wagtail_hooks.py:25 templates/wagtailsnippets/snippets/index.html:3 +msgid "Snippets" +msgstr "Snippets" + +#: templates/wagtailsnippets/chooser/choose.html:2 +msgid "Choose" +msgstr "Escolher" + +#: templates/wagtailsnippets/edit_handlers/snippet_chooser_panel.html:10 +#, python-format +msgid "Choose another %(snippet_type_name)s" +msgstr "Escolher outro %(snippet_type_name)s" + +#: templates/wagtailsnippets/edit_handlers/snippet_chooser_panel.html:11 +#, python-format +msgid "Choose %(snippet_type_name)s" +msgstr "Escolher %(snippet_type_name)s" + +#: templates/wagtailsnippets/snippets/confirm_delete.html:3 +#, python-format +msgid "Delete %(snippet_type_name)s - %(instance)s" +msgstr "Eliminar %(snippet_type_name)s - %(instance)s" + +#: templates/wagtailsnippets/snippets/confirm_delete.html:6 +#: templates/wagtailsnippets/snippets/edit.html:20 +msgid "Delete" +msgstr "Eliminar" + +#: templates/wagtailsnippets/snippets/confirm_delete.html:10 +#, python-format +msgid "Are you sure you want to delete this %(snippet_type_name)s?" +msgstr "Tem a certeza que quer eliminar este %(snippet_type_name)s?" + +#: templates/wagtailsnippets/snippets/confirm_delete.html:13 +msgid "Yes, delete" +msgstr "Sim, eliminar" + +#: templates/wagtailsnippets/snippets/create.html:3 +#, python-format +msgid "New %(snippet_type_name)s" +msgstr "Novo %(snippet_type_name)s" + +#: templates/wagtailsnippets/snippets/create.html:6 +msgid "New" +msgstr "Novo" + +#: templates/wagtailsnippets/snippets/create.html:17 +#: templates/wagtailsnippets/snippets/edit.html:17 +msgid "Save" +msgstr "Guardar" + +#: templates/wagtailsnippets/snippets/edit.html:3 +#, python-format +msgid "Editing %(snippet_type_name)s - %(instance)s" +msgstr "Editando %(snippet_type_name)s - %(instance)s" + +#: templates/wagtailsnippets/snippets/edit.html:6 +msgid "Editing" +msgstr "Editando" + +#: templates/wagtailsnippets/snippets/list.html:8 +#: templates/wagtailsnippets/snippets/usage.html:16 +msgid "Title" +msgstr "Título" + +#: templates/wagtailsnippets/snippets/type_index.html:3 +#, python-format +msgid "Snippets %(snippet_type_name_plural)s" +msgstr "Snippets %(snippet_type_name_plural)s" + +#: templates/wagtailsnippets/snippets/type_index.html:10 +#, python-format +msgid "Snippets %(snippet_type_name_plural)s" +msgstr "Snippets %(snippet_type_name_plural)s" + +#: templates/wagtailsnippets/snippets/type_index.html:13 +#, python-format +msgid "Add %(snippet_type_name)s" +msgstr "Adicionar %(snippet_type_name)s" + +#: templates/wagtailsnippets/snippets/type_index.html:23 +#, python-format +msgid "" +"No %(snippet_type_name_plural)s have been created. Why not add one?" +msgstr "" +"Nenhum %(snippet_type_name_plural)s foi criado. Porque não adicionar um?" + +#: templates/wagtailsnippets/snippets/usage.html:3 +#, python-format +msgid "Usage of %(title)s" +msgstr "Utilização de %(title)s" + +#: templates/wagtailsnippets/snippets/usage.html:5 +msgid "Usage of" +msgstr "Utilização de" + +#: templates/wagtailsnippets/snippets/usage.html:17 +msgid "Parent" +msgstr "Ascendente" + +#: templates/wagtailsnippets/snippets/usage.html:18 +msgid "Type" +msgstr "Tipo" + +#: templates/wagtailsnippets/snippets/usage.html:19 +msgid "Status" +msgstr "Estado" + +#: templates/wagtailsnippets/snippets/usage.html:26 +msgid "Edit this page" +msgstr "Editar esta página" + +#: views/snippets.py:129 +msgid "{snippet_type} '{instance}' created." +msgstr "{snippet_type} '{instance}' atualizado." + +#: views/snippets.py:136 +msgid "The snippet could not be created due to errors." +msgstr "O snippet não pôde ser criado devido a erros." + +#: views/snippets.py:170 +msgid "{snippet_type} '{instance}' updated." +msgstr "{snippet_type} '{instance}' atualizado." + +#: views/snippets.py:177 +msgid "The snippet could not be saved due to errors." +msgstr "O snippet não pôde ser guardado devido a erros." + +#: views/snippets.py:206 +msgid "{snippet_type} '{instance}' deleted." +msgstr "{snippet_type} '{instance}' eliminado." diff --git a/wagtail/wagtailusers/locale/pt_PT/LC_MESSAGES/django.mo b/wagtail/wagtailusers/locale/pt_PT/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..0698c96aa40041b05ba97214c645fab76c3ed8ac GIT binary patch literal 3794 zcmb7`%WoV>8Ndrzc3JZdj|G-Tt(Rb%c*bKVS%PDmgv5yqPGZ>(i&h}3JYAmYY2#=j|(@1a)3W!Ie>%&zpr{cwl~3AT5kWk zy6gMudsTgN|HLCNDy~WHPjY|bZAzVmKYcs@xO(s49lQ;v;Gf`Q@SpHes2)*j3_J$k z1y8_t!YAQ-;ZyJ&oPi?O9e(e@(~SF2Z z;J2XU_eFRD{u-i6y$%VVdO!DPxMi;B{{*+#FBhst*Emm-54psz4{$%tjhdKGpgzSd zYl!`nZ>&36Tl|ts{CSdF*8ep3$GPR2s1ft@S)NJN=+eWdr$%q;cuq2wd=W+^TS;>J zIc_zk4_%vG>#a_Mc7@fsDcjxA=Z8%+Og=f;c2!YYKNV^T8xCYH>MB^Tchj<~%dRQo zurRsRCiB)Ld)nSfLm8UtVmqpVW!ksuVv=YRXU9j;!b6@G^?zi%Dc$hh{wV0K>01^; z{dStA<(@7bMir)GYeP)E3hON=X_*!swVazYQ_JE&6bxcq&xEk+JSGG*xxSs&JI?FA z_32L9Hf8FHrn-{)Q0nWf)ruqAnJJ#v z>5eX3soPysbg;OoR&C#ADlWV>G*sDam}$^i0o8YnBnEP+9*v~1;u92<*qxZhMm-ANx+7r zm?&#K%{VLOoBGX?n5u27+f=v2G^x6R&Bsm<+G_UzGT==!R2;g#w>jaD@a-2WZ0IQJt-OF ziWo+n?MJ$(@@+}N(NG^`r>Snr)}DBw_3ep$caOZQdWnRfekXfA3Iw(0o#ef-k~F@? z0+iakezrDUx0+|0t+936bG~d`3!OA+e7Wj`#-^LsV{11y8XUDyrW+@3d~s&YvC5ll|7%^ri@z947PnD=t{QN_E?! z?exMeh8MEou(=zS##Y&b6&t6qX-$qv*H*4AA9yi~?Ux9qEl|7H!@knqDQ9{a(LEmv zJJ@pZ=H`{gxr2GK{EqdFWtL2+!g+meJ1xi7vdWvRamD#O% zd)g*##$(qZ>BH|wDj#SFETe8vvC=1EPvC{+5FXsi<-oH(PeT~|Om?(4y2EKMX0bSX znm~*c+hKp8^xd#QtQ4hpNp;ttD7S%_1zU6(N#jUyFRI*c5QCqyN|Q=YbDMgnuj4X@ z5;B>M?j>%TU`X^wi&86|p!|PU(mG<;20zKlGatDm5I~#jZHkLRmY|E+z$apoWgr`JtW2*?(-4S`IkEhM|K?B?dA>89Pq)w#j=u$CS5S z%7#vC-c&aZSy6xN4So~z%P#Qb%aQGV3J4d zO8-KN;I6T2Xuq{7Z?%o>pAIJLRC(Ra2!xexhC0);1(E3SBPMQa>h&S1BR1`WY>$3M g(5OaP8nrbE%R@f!`@qx(TT{vAK6-u}QbfA{3-W9~YXATM literal 0 HcmV?d00001 diff --git a/wagtail/wagtailusers/locale/pt_PT/LC_MESSAGES/django.po b/wagtail/wagtailusers/locale/pt_PT/LC_MESSAGES/django.po new file mode 100644 index 0000000000..abd1de9406 --- /dev/null +++ b/wagtail/wagtailusers/locale/pt_PT/LC_MESSAGES/django.po @@ -0,0 +1,206 @@ +# 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 , YEAR. +# +# Translators: +# Thiago Cangussu , 2014 +msgid "" +msgstr "" +"Project-Id-Version: Wagtail 0.5.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2014-08-01 16:39+0100\n" +"PO-Revision-Date: 2014-08-03 01:59+0100\n" +"Last-Translator: Jose Lourenco \n" +"Language-Team: \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.4\n" +"Language: pt_PT\n" + +#: forms.py:18 forms.py:95 +msgid "Administrator" +msgstr "Administrador" + +#: forms.py:20 +msgid "If ticked, this user has the ability to manage user accounts." +msgstr "" +"Se selecionado, este utilizador terá permissão para gerir contas de " +"utilizadores." + +#: forms.py:23 forms.py:80 +msgid "Email" +msgstr "Email" + +#: forms.py:24 forms.py:81 +msgid "First Name" +msgstr "Primeiro Nome" + +#: forms.py:25 forms.py:82 +msgid "Last Name" +msgstr "Último nome" + +#: forms.py:68 +msgid "A user with that username already exists." +msgstr "Um utilizador com esse nome já existe." + +#: forms.py:69 +msgid "The two password fields didn't match." +msgstr "As senhas nos dois campos não coincidem." + +#: forms.py:72 templates/wagtailusers/list.html:15 +msgid "Username" +msgstr "Nome de utilizador" + +#: forms.py:75 +msgid "Required. 30 characters or fewer. Letters, digits and @/./+/-/_ only." +msgstr "" +"Obrigatório. 30 caracteres ou menos. Somente letras, números e @/./+/-/_." + +#: forms.py:77 +msgid "This value may contain only letters, numbers and @/./+/-/_ characters." +msgstr "" +"Este valor apenas pode conter letras, números e os caracteres @/./+/-/_." + +#: forms.py:85 +msgid "Password" +msgstr "Senha" + +#: forms.py:88 +msgid "Leave blank if not changing." +msgstr "Deixar em branco se não houver alteração" + +#: forms.py:90 +msgid "Password confirmation" +msgstr "Confirmação de senha" + +#: forms.py:92 +msgid "Enter the same password as above, for verification." +msgstr "Introduza a mesma senha anterior para verificação." + +#: forms.py:97 +msgid "Administrators have the ability to manage user accounts." +msgstr "Os administradores têm a permissão para gerir contas de utilizadores." + +#: models.py:13 +msgid "Receive notification when a page is submitted for moderation" +msgstr "Receber notificação quando uma página for enviada para moderação" + +#: models.py:18 +msgid "Receive notification when your page edit is approved" +msgstr "Receber notificação quando a edição da sua página for aprovada" + +#: models.py:23 +msgid "Receive notification when your page edit is rejected" +msgstr "Receber notificação quando a edição da sua página for rejeitada" + +#: wagtail_hooks.py:22 templates/wagtailusers/index.html:4 +#: templates/wagtailusers/index.html:17 +msgid "Users" +msgstr "Utilizadores" + +#: templates/wagtailusers/create.html:4 templates/wagtailusers/create.html:8 +#: templates/wagtailusers/create.html:35 +msgid "Add user" +msgstr "Adicionar utilizador" + +#: templates/wagtailusers/create.html:12 templates/wagtailusers/edit.html:12 +msgid "Account" +msgstr "Conta" + +#: templates/wagtailusers/create.html:13 templates/wagtailusers/create.html:28 +#: templates/wagtailusers/edit.html:13 +msgid "Roles" +msgstr "Funções (roles)" + +#: templates/wagtailusers/edit.html:4 templates/wagtailusers/edit.html.py:8 +msgid "Editing" +msgstr "Editando" + +#: templates/wagtailusers/edit.html:30 templates/wagtailusers/edit.html:37 +msgid "Save" +msgstr "Guardar" + +#: templates/wagtailusers/index.html:18 +msgid "Add a user" +msgstr "Adicionar um utilizador" + +#: templates/wagtailusers/list.html:7 +msgid "Name" +msgstr "Nome" + +#: templates/wagtailusers/list.html:22 +msgid "Level" +msgstr "Nível" + +#: templates/wagtailusers/list.html:23 +msgid "Status" +msgstr "Estado" + +#: templates/wagtailusers/list.html:36 +msgid "Admin" +msgstr "Admin" + +#: templates/wagtailusers/list.html:37 +msgid "Active" +msgstr "Ativo" + +#: templates/wagtailusers/list.html:37 +msgid "Inactive" +msgstr "Inativo" + +#: templates/wagtailusers/results.html:5 +#, python-format +msgid "" +"\n" +" There is one match\n" +" " +msgid_plural "" +"\n" +" There are %(counter)s matches\n" +" " +msgstr[0] "" +"\n" +" Existe uma correspondência\n" +" " +msgstr[1] "" +"\n" +" Existem %(counter)s correspondências\n" +" " + +#: templates/wagtailusers/results.html:18 +#, python-format +msgid "Sorry, no users match \"%(query_string)s\"" +msgstr "" +"Desculpe, nenhum utilizador corresponde a \"%(query_string)s\"" + +#: templates/wagtailusers/results.html:21 +#, python-format +msgid "" +"There are no users configured. Why not add some?" +msgstr "" +"Não existem utilizadores configurados. Por que não adicionar algum?" + +#: views/users.py:30 views/users.py:37 +msgid "Search users" +msgstr "Procurar utilizadores" + +#: views/users.py:84 +msgid "User '{0}' created." +msgstr "Utilizador '{0}' criado." + +#: views/users.py:87 +msgid "The user could not be created due to errors." +msgstr "O utilizador não pôde ser criado devido a erros." + +#: views/users.py:103 +msgid "User '{0}' updated." +msgstr "Utilizador '{0}' atualizado." + +#: views/users.py:106 +msgid "The user could not be saved due to errors." +msgstr "O utilizador não pôde ser guardado devido a erros." From 2afb9fe84e79bd07b2479fc2a1dce8c21c5e08c0 Mon Sep 17 00:00:00 2001 From: Karl Hobley Date: Tue, 19 Aug 2014 10:31:02 +0100 Subject: [PATCH 054/210] Completely removed all features deprecated in 0.4 --- wagtail/tests/models.py | 45 ------------------- wagtail/wagtailcore/models.py | 19 -------- wagtail/wagtailcore/tests/test_page_model.py | 9 ---- wagtail/wagtailcore/views.py | 5 +-- wagtail/wagtailsearch/indexed.py | 10 ----- .../management/commands/update_index.py | 3 -- .../wagtailsearch/tests/test_indexed_class.py | 10 ----- 7 files changed, 1 insertion(+), 100 deletions(-) diff --git a/wagtail/tests/models.py b/wagtail/tests/models.py index feb5b31568..26c1af8477 100644 --- a/wagtail/tests/models.py +++ b/wagtail/tests/models.py @@ -419,51 +419,6 @@ class SearchTestChild(SearchTest): ] -class SearchTestOldConfig(models.Model, indexed.Indexed): - """ - This tests that the Indexed class can correctly handle models that - use the old "indexed_fields" configuration format. - - This format was deprecated in 0.4 and removed in 0.6 - """ - indexed_fields = { - # A search field with predictive search and boosting - 'title': { - 'type': 'string', - 'analyzer': 'edgengram_analyzer', - 'boost': 100, - }, - - # A filter field - 'live': { - 'type': 'boolean', - 'index': 'not_analyzed', - }, - } - - -class SearchTestOldConfigAndNewConfig(models.Model, indexed.Indexed): - """ - This tests that the Indexed class can correctly handle models that - use both the old "indexed_fields" and the new "search_fields" configuration - format. - - Usually, when wagtailsearch detects that "indexed_fields" is being used, it - will raise a RuntimeError. - - This behaviour may get in the way of people developing apps that support - older versions of Wagtail. So Wagtail allows "indexed_fields" to be defined - on a classes as long as they also define "search_fields" as well. Wagtail 0.4+ - will simply ignore the "indexed_fields" attribute in this case. - """ - indexed_fields = ['title', 'content'] - - search_fields = ( - indexed.SearchField('title'), - indexed.SearchField('content'), - ) - - def routable_page_external_view(request, arg): return HttpResponse("EXTERNAL VIEW: " + arg) diff --git a/wagtail/wagtailcore/models.py b/wagtail/wagtailcore/models.py index 74429e0ab2..305e07c230 100644 --- a/wagtail/wagtailcore/models.py +++ b/wagtail/wagtailcore/models.py @@ -693,19 +693,6 @@ class Page(six.with_metaclass(PageBase, MP_Node, ClusterableModel, indexed.Index for example, a page containing a form might have a default view of the form, and a post-submission 'thankyou' page """ - modes = self.get_page_modes(i_know_what_im_doing=True) - if modes is not Page.DEFAULT_PREVIEW_MODES: - # User has overriden get_page_modes instead of using preview_modes - raise RuntimeError("get_page_modes has been removed. Define a preview_modes property instead.") - - return modes - - def get_page_modes(self, i_know_what_im_doing=False): - # Raise error if this was called directly - if not i_know_what_im_doing: - raise RuntimeError("get_page_modes has been removed. Use the preview_modes property instead.") - - # Deprecated accessor for the preview_modes property return Page.DEFAULT_PREVIEW_MODES @property @@ -739,12 +726,6 @@ class Page(six.with_metaclass(PageBase, MP_Node, ClusterableModel, indexed.Index """ return self.serve(request) - def show_as_mode(self, mode_name): - # Deprecated API for rendering previews. If this returns something other than None, - # we know that a subclass of Page has overridden this, and we should try to work with - # that response if possible. - return None - def get_cached_paths(self): """ This returns a list of paths to invalidate in a frontend cache diff --git a/wagtail/wagtailcore/tests/test_page_model.py b/wagtail/wagtailcore/tests/test_page_model.py index 5cb21152a4..211c8f8a30 100644 --- a/wagtail/wagtailcore/tests/test_page_model.py +++ b/wagtail/wagtailcore/tests/test_page_model.py @@ -280,15 +280,6 @@ class TestServeView(TestCase): self.assertNotContains(response, '

    Events

    ') self.assertContains(response, 'Christmas') - - def test_old_style_routing(self): - """ - Test that route() methods that return an HttpResponse are correctly handled - - Old style routing was deprecated in Wagtail 0.4 and removed in 0.6 - """ - self.assertRaises(RuntimeError, self.client.get, '/old-style-route/') - def test_before_serve_hook(self): response = self.client.get('/events/', HTTP_USER_AGENT='GoogleBot') self.assertContains(response, 'bad googlebot no cookie') diff --git a/wagtail/wagtailcore/views.py b/wagtail/wagtailcore/views.py index e4c370ff60..f01390b838 100644 --- a/wagtail/wagtailcore/views.py +++ b/wagtail/wagtailcore/views.py @@ -17,11 +17,8 @@ def serve(request, path): raise Http404 path_components = [component for component in path.split('/') if component] - route_result = request.site.root_page.specific.route(request, path_components) - if isinstance(route_result, HttpResponse): - raise RuntimeError("Page.route should return an instance of wagtailcore.url_routing.RouteResult, not an HttpResponse") + page, args, kwargs = request.site.root_page.specific.route(request, path_components) - (page, args, kwargs) = route_result for fn in hooks.get_hooks('before_serve_page'): result = fn(page, request, args, kwargs) if isinstance(result, HttpResponse): diff --git a/wagtail/wagtailsearch/indexed.py b/wagtail/wagtailsearch/indexed.py index a8e5c5e424..09eed9d94b 100644 --- a/wagtail/wagtailsearch/indexed.py +++ b/wagtail/wagtailsearch/indexed.py @@ -37,16 +37,6 @@ class Indexed(object): @classmethod def get_search_fields(cls): - # Raise an error if the 'indexed_fields' attribute is being used on a class without 'search_fields' - # Note: We still allow people to define 'indexed_fields' as long as they also define 'search_fields' - # on the same class. This allows people to still write code that is compatible with older versions - # of Wagtail and we still catch issues where code using the old 'indexed_fields' setting hasn't been - # updated. - if 'indexed_fields' in cls.__dict__ and not 'search_fields' in cls.__dict__: - raise RuntimeError("The indexed_fields attribute has been replaced with search_fields. " \ - "Please update %s.%s to use the search_fields setting." % (cls._meta.app_label, cls.__name__)) - - # Return value of 'search_fields' attribute return getattr(cls, 'search_fields', tuple()) @classmethod diff --git a/wagtail/wagtailsearch/management/commands/update_index.py b/wagtail/wagtailsearch/management/commands/update_index.py index 8c587f2fdb..c52b756398 100644 --- a/wagtail/wagtailsearch/management/commands/update_index.py +++ b/wagtail/wagtailsearch/management/commands/update_index.py @@ -12,9 +12,6 @@ class Command(BaseCommand): # Get list of indexed models indexed_models = [model for model in models.get_models() if issubclass(model, Indexed)] - # HACK: Make sure SearchTestOldConfig model is not in indexed_models to prevent test failures - indexed_models = [model for model in indexed_models if model.__name__ != 'SearchTestOldConfig'] - # Object set object_set = {} diff --git a/wagtail/wagtailsearch/tests/test_indexed_class.py b/wagtail/wagtailsearch/tests/test_indexed_class.py index b89b94a032..c2cbc2935d 100644 --- a/wagtail/wagtailsearch/tests/test_indexed_class.py +++ b/wagtail/wagtailsearch/tests/test_indexed_class.py @@ -15,13 +15,3 @@ class TestContentTypeNames(TestCase): def test_qualified_content_type_name(self): name = models.SearchTestChild.indexed_get_content_type() self.assertEqual(name, 'tests_searchtest_tests_searchtestchild') - - -class TestIndexedFieldsBackwardsIncompatibility(TestCase, WagtailTestUtils): - def test_use_of_indexed_fields_raises_error(self): - # SearchTestOldConfig.get_search_fields should raise a RuntimeError - self.assertRaises(RuntimeError, models.SearchTestOldConfig.get_search_fields) - - def test_use_of_indexed_fields_with_search_fields_doesnt_raise_error(self): - # SearchTestOldConfigAndNewConfig.get_search_fields shouldnt raise an error - search_fields = models.SearchTestOldConfigAndNewConfig.get_search_fields() From 470a9e43962c69896fe60110eae2dfa187073d75 Mon Sep 17 00:00:00 2001 From: pvetch Date: Tue, 19 Aug 2014 10:51:52 +0100 Subject: [PATCH 055/210] Update routable_page.rst tiny text fix --- docs/core_components/pages/advanced_topics/routable_page.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/core_components/pages/advanced_topics/routable_page.rst b/docs/core_components/pages/advanced_topics/routable_page.rst index 465b0b148c..c3e2625c91 100644 --- a/docs/core_components/pages/advanced_topics/routable_page.rst +++ b/docs/core_components/pages/advanced_topics/routable_page.rst @@ -40,7 +40,7 @@ Here's an example of an ``EventPage`` with three views: def past_events(self, request): """ - View function for the current events page + View function for the past events page """ ... From 26314bdfc7abec48685aafca6752f99721763330 Mon Sep 17 00:00:00 2001 From: pvetch Date: Tue, 19 Aug 2014 10:52:49 +0100 Subject: [PATCH 056/210] Update using_images_outside_wagtail.rst Fix to code block syntax --- docs/core_components/images/using_images_outside_wagtail.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/core_components/images/using_images_outside_wagtail.rst b/docs/core_components/images/using_images_outside_wagtail.rst index 5671e8504c..d3b63126be 100644 --- a/docs/core_components/images/using_images_outside_wagtail.rst +++ b/docs/core_components/images/using_images_outside_wagtail.rst @@ -71,7 +71,7 @@ Using the URLs on your website or blog Once you have generated a URL, you can put it straight into the ``src`` attribute of an ```` tag: -..code-block:: html + .. code-block:: html From 15419f4d0e405141e5388f1909e86acca872b0ed Mon Sep 17 00:00:00 2001 From: Tim Heap Date: Thu, 21 Aug 2014 10:08:29 +1000 Subject: [PATCH 057/210] Make RoutablePage a mixin If a developer wanted to have a site-wide base page class, and also have some pages be `RoutablePage`s, a conflict between the automatically generated `page_ptr` fields would occur. ```python from wagtail.wagtailcore.models import Page from wagtail.contrib.wagtailroutablepage.models import RoutablePage class SitePageBase(Page): # common functionality is_abstract = True class Meta: abstract = True class MyPage(RoutablePage, SitePageBase): # This model is invalid pass ``` `RoutablePage` has been changed to be a mixin `RoutablePageMixin`. Page classes can use this to gain the `RoutablePage` functionality while still retaining the ability to subclass other models. A `RoutablePage` class that derives from both `RoutablePageMixin` and `Page` has been left in for backwards compatibility, so old code will continue to function without any modifications. --- ...table_page.rst => routable_page_mixin.rst} | 23 +++++++++++-------- docs/core_components/pages/index.rst | 2 +- docs/releases/0.5.rst | 4 ++-- wagtail/contrib/wagtailroutablepage/models.py | 14 ++++++++--- 4 files changed, 27 insertions(+), 16 deletions(-) rename docs/core_components/pages/advanced_topics/{routable_page.rst => routable_page_mixin.rst} (66%) diff --git a/docs/core_components/pages/advanced_topics/routable_page.rst b/docs/core_components/pages/advanced_topics/routable_page_mixin.rst similarity index 66% rename from docs/core_components/pages/advanced_topics/routable_page.rst rename to docs/core_components/pages/advanced_topics/routable_page_mixin.rst index c3e2625c91..36ca024c3d 100644 --- a/docs/core_components/pages/advanced_topics/routable_page.rst +++ b/docs/core_components/pages/advanced_topics/routable_page_mixin.rst @@ -1,4 +1,4 @@ -.. _routable_page: +.. _routable_page_mixin: ==================================== Embedding URL configuration in Pages @@ -6,15 +6,15 @@ Embedding URL configuration in Pages .. versionadded:: 0.5 -The ``RoutablePage`` class provides a convenient way for a page to respond on multiple sub-URLs with different views. For example, a blog section on a site might provide several different types of index page at URLs like ``/blog/2013/06/``, ``/blog/authors/bob/``, ``/blog/tagged/python/``, all served by the same ``BlogIndex`` page. +The ``RoutablePageMixin`` mixin provides a convenient way for a page to respond on multiple sub-URLs with different views. For example, a blog section on a site might provide several different types of index page at URLs like ``/blog/2013/06/``, ``/blog/authors/bob/``, ``/blog/tagged/python/``, all served by the same ``BlogIndex`` page. -A ``RoutablePage`` exists within the page tree like any other page, but URL paths underneath it are checked against a list of patterns, using Django's urlconf scheme. If none of the patterns match, control is passed to subpages as usual (or failing that, a 404 error is thrown). +A ``Page`` using ``RoutablePageMixin`` exists within the page tree like any other page, but URL paths underneath it are checked against a list of patterns, using Django's urlconf scheme. If none of the patterns match, control is passed to subpages as usual (or failing that, a 404 error is thrown). The basics ========== -To use ``RoutablePage``, you need to make your class inherit from :class:`wagtail.contrib.wagtailroutablepage.models.RoutablePage` and configure the ``subpage_urls`` attribute with your URL configuration. +To use ``RoutablePageMixin``, you need to make your class inherit from both :class:`wagtail.contrib.wagtailroutablepage.models.RoutablePageMixin` and :class:`wagtail.wagtailcore.models.Page`, and configure the ``subpage_urls`` attribute with your URL configuration. Here's an example of an ``EventPage`` with three views: @@ -22,10 +22,11 @@ Here's an example of an ``EventPage`` with three views: from django.conf.urls import url - from wagtail.contrib.wagtailroutablepage.models import RoutablePage + from wagtail.contrib.wagtailroutablepage.models import RoutablePageMixin + from wagtail.wagtailcore.models import Page - class EventPage(RoutablePage): + class EventPage(RoutablePageMixin, Page): subpage_urls = ( url(r'^$', 'current_events', name='current_events'), url(r'^past/$', 'past_events', name='past_events'), @@ -51,11 +52,11 @@ Here's an example of an ``EventPage`` with three views: ... -The ``RoutablePage`` class -========================== +The ``RoutablePageMixin`` class +=============================== .. automodule:: wagtail.contrib.wagtailroutablepage.models -.. autoclass:: RoutablePage +.. autoclass:: RoutablePageMixin .. autoattribute:: subpage_urls @@ -65,7 +66,9 @@ The ``RoutablePage`` class from django.conf.urls import url - class MyPage(RoutablePage): + from wagtail.wagtailcore.models import Page + + class MyPage(RoutablePageMixin, Page): subpage_urls = ( url(r'^$', 'serve', name='main'), url(r'^archive/$', 'archive', name='archive'), diff --git a/docs/core_components/pages/index.rst b/docs/core_components/pages/index.rst index 1f350f35ce..70d20d1169 100644 --- a/docs/core_components/pages/index.rst +++ b/docs/core_components/pages/index.rst @@ -21,4 +21,4 @@ The presentation of your content, the actual webpages, includes the normal use o editing_api advanced_topics/queryset_methods advanced_topics/private_pages - advanced_topics/routable_page + advanced_topics/routable_page_mixin diff --git a/docs/releases/0.5.rst b/docs/releases/0.5.rst index 1e440e27fd..6f4912de59 100644 --- a/docs/releases/0.5.rst +++ b/docs/releases/0.5.rst @@ -37,7 +37,7 @@ RoutablePage A ``RoutablePage`` model has been added to allow embedding Django-style URL routing within a page. -:ref:`routable_page` +:ref:`routable_page_mixin` Usage stats for images, documents and snippets @@ -129,4 +129,4 @@ South upgraded to 1.0 In preparation for Django 1.7 support in a future release, Wagtail now depends on South 1.0, and its migration files have been moved from ``migrations`` to ``south_migrations``. Older versions of South will fail to find the migrations in the new location. -If your project's requirements file (most commonly requirements.txt or requirements/base.txt) references a specific older version of South, this must be updated to South 1.0. \ No newline at end of file +If your project's requirements file (most commonly requirements.txt or requirements/base.txt) references a specific older version of South, this must be updated to South 1.0. diff --git a/wagtail/contrib/wagtailroutablepage/models.py b/wagtail/contrib/wagtailroutablepage/models.py index 926e5f48a1..88379b37a3 100644 --- a/wagtail/contrib/wagtailroutablepage/models.py +++ b/wagtail/contrib/wagtailroutablepage/models.py @@ -8,9 +8,10 @@ from wagtail.wagtailcore.models import Page from wagtail.wagtailcore.url_routing import RouteResult -class RoutablePage(Page): +class RoutablePageMixin(object): """ - This class extends Page by adding methods to allow urlconfs to be embedded inside pages + This class can be mixed in to a Page subclass to allow urlconfs to be + embedded inside pages. """ #: Set this to a tuple of ``django.conf.urls.url`` objects. subpage_urls = None @@ -59,7 +60,7 @@ class RoutablePage(Page): except Http404: pass - return super(RoutablePage, self).route(request, path_components) + return super(RoutablePageMixin, self).route(request, path_components) def serve(self, request, view, args, kwargs): return view(request, *args, **kwargs) @@ -68,6 +69,13 @@ class RoutablePage(Page): view, args, kwargs = self.resolve_subpage('/') return view(*args, **kwargs) + +class RoutablePage(RoutablePageMixin, Page): + """ + This class extends Page by adding methods to allow urlconfs + to be embedded inside pages + """ + is_abstract = True class Meta: From 8a19552033e26cf437308165d4b8c9bdd73e1b12 Mon Sep 17 00:00:00 2001 From: Karl Hobley Date: Thu, 21 Aug 2014 12:19:39 +0100 Subject: [PATCH 058/210] Changelog and release notes for #560 --- CHANGELOG.txt | 1 + docs/releases/0.6.rst | 1 + 2 files changed, 2 insertions(+) diff --git a/CHANGELOG.txt b/CHANGELOG.txt index 7530812f61..803ad742d3 100644 --- a/CHANGELOG.txt +++ b/CHANGELOG.txt @@ -4,6 +4,7 @@ Changelog 0.6 (xx.xx.20xx) ~~~~~~~~~~~~~~~~ * Added {% routablepageurl %} template tag (@timheap) + * Added RoutablePageMixin (@timheap) * Fix: Page URL generation now returns correct URLs for sites that have the main 'serve' view rooted somewhere other than '/' 0.5 (01.08.2014) diff --git a/docs/releases/0.6.rst b/docs/releases/0.6.rst index 5ab1769daa..321c437306 100644 --- a/docs/releases/0.6.rst +++ b/docs/releases/0.6.rst @@ -13,6 +13,7 @@ What's new Minor features ~~~~~~~~~~~~~~ * A new template tag has been added for reversing URLs inside routable pages. See :ref:`routablepageurl_template_tag`. + * RoutablePage can now be used as a mixin. See :class:`wagtail.contrib.wagtailroutablepage.models.RoutablePageMixin`. Bug fixes ~~~~~~~~~ From c5fef182e5892517895dc062eb23939e1c186ee8 Mon Sep 17 00:00:00 2001 From: Karl Hobley Date: Thu, 21 Aug 2014 12:19:57 +0100 Subject: [PATCH 059/210] Fixed a couple of documentation links in the readme --- README.rst | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.rst b/README.rst index 5fa7f47f9c..f067762218 100644 --- a/README.rst +++ b/README.rst @@ -24,8 +24,8 @@ Wagtail is a Django content management system built originally for the `Royal Co * Support for tree-based content organisation * Optional preview->submit->approve workflow * Fast out of the box. `Varnish `_-friendly if you need it -* A simple `form builder `_ -* Optional `static site generation `_ +* A simple `form builder `_ +* Optional `static site generation `_ * Excellent `test coverage `_ Find out more at `wagtail.io `_. From 521d753a361b762c68d9afe6af1b7c3268d92b24 Mon Sep 17 00:00:00 2001 From: Karl Hobley Date: Thu, 21 Aug 2014 14:51:05 +0100 Subject: [PATCH 060/210] Cleaned up bad imports. Fixes #544 --- wagtail/wagtailembeds/__init__.py | 2 -- wagtail/wagtailsearch/__init__.py | 3 --- 2 files changed, 5 deletions(-) diff --git a/wagtail/wagtailembeds/__init__.py b/wagtail/wagtailembeds/__init__.py index b75cbc491d..e69de29bb2 100644 --- a/wagtail/wagtailembeds/__init__.py +++ b/wagtail/wagtailembeds/__init__.py @@ -1,2 +0,0 @@ -from .models import Embed -from .embeds import get_embed diff --git a/wagtail/wagtailsearch/__init__.py b/wagtail/wagtailsearch/__init__.py index ed896f4451..e69de29bb2 100644 --- a/wagtail/wagtailsearch/__init__.py +++ b/wagtail/wagtailsearch/__init__.py @@ -1,3 +0,0 @@ -from wagtail.wagtailsearch.indexed import Indexed -from wagtail.wagtailsearch.signal_handlers import register_signal_handlers -from wagtail.wagtailsearch.backends import get_search_backend \ No newline at end of file From ccf89700d7152581e2b3fa2c9bdae8eeec28effd Mon Sep 17 00:00:00 2001 From: Karl Hobley Date: Thu, 21 Aug 2014 14:54:42 +0100 Subject: [PATCH 061/210] Renamed wagtailsearch.indexed to wagtailsearch.index --- wagtail/wagtailsearch/index.py | 182 +++++++++++++++++++++++++++++++ wagtail/wagtailsearch/indexed.py | 182 +------------------------------ 2 files changed, 187 insertions(+), 177 deletions(-) create mode 100644 wagtail/wagtailsearch/index.py diff --git a/wagtail/wagtailsearch/index.py b/wagtail/wagtailsearch/index.py new file mode 100644 index 0000000000..e775ff5c70 --- /dev/null +++ b/wagtail/wagtailsearch/index.py @@ -0,0 +1,182 @@ +import warnings + +from six import string_types + +from django.db import models + +from wagtail.utils.deprecation import RemovedInWagtail06Warning + + +class Indexed(object): + @classmethod + def indexed_get_parent(cls, require_model=True): + for base in cls.__bases__: + if issubclass(base, Indexed) and (issubclass(base, models.Model) or require_model is False): + return base + + @classmethod + def indexed_get_content_type(cls): + # Work out content type + content_type = (cls._meta.app_label + '_' + cls.__name__).lower() + + # Get parent content type + parent = cls.indexed_get_parent() + if parent: + parent_content_type = parent.indexed_get_content_type() + return parent_content_type + '_' + content_type + else: + return content_type + + @classmethod + def indexed_get_toplevel_content_type(cls): + # Get parent content type + parent = cls.indexed_get_parent() + if parent: + return parent.indexed_get_content_type() + else: + # At toplevel, return this content type + return (cls._meta.app_label + '_' + cls.__name__).lower() + + @classmethod + def indexed_get_indexed_fields(cls): + # Get indexed fields for this class as dictionary + indexed_fields = cls.indexed_fields + if isinstance(indexed_fields, dict): + # Make sure we have a copy to prevent us accidentally changing the configuration + indexed_fields = indexed_fields.copy() + else: + # Convert to dict + if isinstance(indexed_fields, tuple): + indexed_fields = list(indexed_fields) + if isinstance(indexed_fields, string_types): + indexed_fields = [indexed_fields] + if isinstance(indexed_fields, list): + indexed_fields = dict((field, dict(type='string')) for field in indexed_fields) + if not isinstance(indexed_fields, dict): + raise ValueError() + + # Get indexed fields for parent class + parent = cls.indexed_get_parent(require_model=False) + if parent: + # Add parent fields into this list + parent_indexed_fields = parent.indexed_get_indexed_fields().copy() + parent_indexed_fields.update(indexed_fields) + indexed_fields = parent_indexed_fields + return indexed_fields + + @classmethod + def get_search_fields(cls): + search_fields = [] + + if hasattr(cls, 'search_fields'): + search_fields.extend(cls.search_fields) + + # Backwards compatibility with old indexed_fields setting + + # Get indexed fields + indexed_fields = cls.indexed_get_indexed_fields() + + # Display deprecation warning if indexed_fields has been used + if indexed_fields: + warnings.warn("'indexed_fields' setting is now deprecated." + "Use 'search_fields' instead.", RemovedInWagtail06Warning) + + # Convert them into search fields + for field_name, _config in indexed_fields.items(): + # Copy the config to prevent is trashing anything accidentally + config = _config.copy() + + # Check if this is a filter field + if config.get('index', None) == 'not_analyzed': + config.pop('index') + search_fields.append(FilterField(field_name, es_extra=config)) + continue + + # Must be a search field, check for boosting and partial matching + boost = config.pop('boost', None) + + partial_match = False + if config.get('analyzer', None) == 'edgengram_analyzer': + partial_match = True + config.pop('analyzer') + + # Add the field + search_fields.append(SearchField(field_name, boost=boost, partial_match=partial_match, es_extra=config)) + + # Remove any duplicate entries into search fields + # We need to take into account that fields can be indexed as both a SearchField and as a FilterField + search_fields_dict = {} + for field in search_fields: + search_fields_dict[(field.field_name, type(field))] = field + search_fields = search_fields_dict.values() + + return search_fields + + @classmethod + def get_searchable_search_fields(cls): + return filter(lambda field: isinstance(field, SearchField), cls.get_search_fields()) + + @classmethod + def get_filterable_search_fields(cls): + return filter(lambda field: isinstance(field, FilterField), cls.get_search_fields()) + + @classmethod + def get_indexed_objects(cls): + return cls.objects.all() + + indexed_fields = () + + +class BaseField(object): + suffix = '' + + def __init__(self, field_name, **kwargs): + self.field_name = field_name + self.kwargs = kwargs + + def get_field(self, cls): + return cls._meta.get_field_by_name(self.field_name)[0] + + def get_attname(self, cls): + try: + field = self.get_field(cls) + return field.attname + except models.fields.FieldDoesNotExist: + return self.field_name + + def get_index_name(self, cls): + return self.get_attname(cls) + self.suffix + + def get_type(self, cls): + if 'type' in self.kwargs: + return self.kwargs['type'] + + try: + field = self.get_field(cls) + return field.get_internal_type() + except models.fields.FieldDoesNotExist: + return 'CharField' + + def get_value(self, obj): + try: + field = self.get_field(obj.__class__) + return field._get_val_from_obj(obj) + except models.fields.FieldDoesNotExist: + value = getattr(obj, self.field_name, None) + if hasattr(value, '__call__'): + value = value() + return value + + def __repr__(self): + return '<%s: %s>' % (self.__class__.__name__, self.field_name) + + +class SearchField(BaseField): + def __init__(self, field_name, boost=None, partial_match=False, **kwargs): + super(SearchField, self).__init__(field_name, **kwargs) + self.boost = boost + self.partial_match = partial_match + + +class FilterField(BaseField): + suffix = '_filter' diff --git a/wagtail/wagtailsearch/indexed.py b/wagtail/wagtailsearch/indexed.py index e775ff5c70..2828d5e3cd 100644 --- a/wagtail/wagtailsearch/indexed.py +++ b/wagtail/wagtailsearch/indexed.py @@ -1,182 +1,10 @@ import warnings -from six import string_types - -from django.db import models - -from wagtail.utils.deprecation import RemovedInWagtail06Warning +from wagtail.utils.deprecation import RemovedInWagtail08Warning -class Indexed(object): - @classmethod - def indexed_get_parent(cls, require_model=True): - for base in cls.__bases__: - if issubclass(base, Indexed) and (issubclass(base, models.Model) or require_model is False): - return base +warnings.warn( + "The wagtail.wagtailsearch.indexed module has been renamed. " + "Use wagtail.wagtailsearch.index instead.", RemovedInWagtail08Warning) - @classmethod - def indexed_get_content_type(cls): - # Work out content type - content_type = (cls._meta.app_label + '_' + cls.__name__).lower() - - # Get parent content type - parent = cls.indexed_get_parent() - if parent: - parent_content_type = parent.indexed_get_content_type() - return parent_content_type + '_' + content_type - else: - return content_type - - @classmethod - def indexed_get_toplevel_content_type(cls): - # Get parent content type - parent = cls.indexed_get_parent() - if parent: - return parent.indexed_get_content_type() - else: - # At toplevel, return this content type - return (cls._meta.app_label + '_' + cls.__name__).lower() - - @classmethod - def indexed_get_indexed_fields(cls): - # Get indexed fields for this class as dictionary - indexed_fields = cls.indexed_fields - if isinstance(indexed_fields, dict): - # Make sure we have a copy to prevent us accidentally changing the configuration - indexed_fields = indexed_fields.copy() - else: - # Convert to dict - if isinstance(indexed_fields, tuple): - indexed_fields = list(indexed_fields) - if isinstance(indexed_fields, string_types): - indexed_fields = [indexed_fields] - if isinstance(indexed_fields, list): - indexed_fields = dict((field, dict(type='string')) for field in indexed_fields) - if not isinstance(indexed_fields, dict): - raise ValueError() - - # Get indexed fields for parent class - parent = cls.indexed_get_parent(require_model=False) - if parent: - # Add parent fields into this list - parent_indexed_fields = parent.indexed_get_indexed_fields().copy() - parent_indexed_fields.update(indexed_fields) - indexed_fields = parent_indexed_fields - return indexed_fields - - @classmethod - def get_search_fields(cls): - search_fields = [] - - if hasattr(cls, 'search_fields'): - search_fields.extend(cls.search_fields) - - # Backwards compatibility with old indexed_fields setting - - # Get indexed fields - indexed_fields = cls.indexed_get_indexed_fields() - - # Display deprecation warning if indexed_fields has been used - if indexed_fields: - warnings.warn("'indexed_fields' setting is now deprecated." - "Use 'search_fields' instead.", RemovedInWagtail06Warning) - - # Convert them into search fields - for field_name, _config in indexed_fields.items(): - # Copy the config to prevent is trashing anything accidentally - config = _config.copy() - - # Check if this is a filter field - if config.get('index', None) == 'not_analyzed': - config.pop('index') - search_fields.append(FilterField(field_name, es_extra=config)) - continue - - # Must be a search field, check for boosting and partial matching - boost = config.pop('boost', None) - - partial_match = False - if config.get('analyzer', None) == 'edgengram_analyzer': - partial_match = True - config.pop('analyzer') - - # Add the field - search_fields.append(SearchField(field_name, boost=boost, partial_match=partial_match, es_extra=config)) - - # Remove any duplicate entries into search fields - # We need to take into account that fields can be indexed as both a SearchField and as a FilterField - search_fields_dict = {} - for field in search_fields: - search_fields_dict[(field.field_name, type(field))] = field - search_fields = search_fields_dict.values() - - return search_fields - - @classmethod - def get_searchable_search_fields(cls): - return filter(lambda field: isinstance(field, SearchField), cls.get_search_fields()) - - @classmethod - def get_filterable_search_fields(cls): - return filter(lambda field: isinstance(field, FilterField), cls.get_search_fields()) - - @classmethod - def get_indexed_objects(cls): - return cls.objects.all() - - indexed_fields = () - - -class BaseField(object): - suffix = '' - - def __init__(self, field_name, **kwargs): - self.field_name = field_name - self.kwargs = kwargs - - def get_field(self, cls): - return cls._meta.get_field_by_name(self.field_name)[0] - - def get_attname(self, cls): - try: - field = self.get_field(cls) - return field.attname - except models.fields.FieldDoesNotExist: - return self.field_name - - def get_index_name(self, cls): - return self.get_attname(cls) + self.suffix - - def get_type(self, cls): - if 'type' in self.kwargs: - return self.kwargs['type'] - - try: - field = self.get_field(cls) - return field.get_internal_type() - except models.fields.FieldDoesNotExist: - return 'CharField' - - def get_value(self, obj): - try: - field = self.get_field(obj.__class__) - return field._get_val_from_obj(obj) - except models.fields.FieldDoesNotExist: - value = getattr(obj, self.field_name, None) - if hasattr(value, '__call__'): - value = value() - return value - - def __repr__(self): - return '<%s: %s>' % (self.__class__.__name__, self.field_name) - - -class SearchField(BaseField): - def __init__(self, field_name, boost=None, partial_match=False, **kwargs): - super(SearchField, self).__init__(field_name, **kwargs) - self.boost = boost - self.partial_match = partial_match - - -class FilterField(BaseField): - suffix = '_filter' +from .index import * From e898bc1d7829490ba3c02ab890f4cc48de320a14 Mon Sep 17 00:00:00 2001 From: Karl Hobley Date: Thu, 21 Aug 2014 15:16:06 +0100 Subject: [PATCH 062/210] Updated references to old indexed class to point to index instead --- wagtail/tests/models.py | 24 +++++++++---------- wagtail/utils/deprecation.py | 4 ++++ wagtail/wagtailadmin/taggable.py | 8 +++---- wagtail/wagtailcore/models.py | 18 +++++++------- wagtail/wagtaildocs/models.py | 4 ++-- wagtail/wagtailimages/models.py | 4 ++-- wagtail/wagtailsearch/__init__.py | 2 +- wagtail/wagtailsearch/backends/base.py | 2 +- wagtail/wagtailsearch/backends/db.py | 1 - .../wagtailsearch/backends/elasticsearch.py | 2 +- wagtail/wagtailsearch/indexed.py | 1 + wagtail/wagtailsearch/models.py | 1 - wagtail/wagtailsearch/signal_handlers.py | 2 +- .../wagtailsearch/tests/test_indexed_class.py | 14 +++++------ 14 files changed, 45 insertions(+), 42 deletions(-) diff --git a/wagtail/tests/models.py b/wagtail/tests/models.py index a38d889bd7..27a89b307f 100644 --- a/wagtail/tests/models.py +++ b/wagtail/tests/models.py @@ -17,7 +17,7 @@ from wagtail.wagtailimages.edit_handlers import ImageChooserPanel from wagtail.wagtaildocs.edit_handlers import DocumentChooserPanel from wagtail.wagtailforms.models import AbstractEmailForm, AbstractFormField from wagtail.wagtailsnippets.models import register_snippet -from wagtail.wagtailsearch import indexed +from wagtail.wagtailsearch import index from wagtail.contrib.wagtailroutablepage.models import RoutablePage @@ -387,19 +387,19 @@ class BusinessChild(Page): subpage_types = [] -class SearchTest(models.Model, indexed.Indexed): +class SearchTest(models.Model, index.Indexed): title = models.CharField(max_length=255) content = models.TextField() live = models.BooleanField(default=False) published_date = models.DateField(null=True) search_fields = [ - indexed.SearchField('title', partial_match=True), - indexed.SearchField('content'), - indexed.SearchField('callable_indexed_field'), - indexed.FilterField('title'), - indexed.FilterField('live'), - indexed.FilterField('published_date'), + index.SearchField('title', partial_match=True), + index.SearchField('content'), + index.SearchField('callable_indexed_field'), + index.FilterField('title'), + index.FilterField('live'), + index.FilterField('published_date'), ] def callable_indexed_field(self): @@ -411,12 +411,12 @@ class SearchTestChild(SearchTest): extra_content = models.TextField() search_fields = SearchTest.search_fields + [ - indexed.SearchField('subtitle', partial_match=True), - indexed.SearchField('extra_content'), + index.SearchField('subtitle', partial_match=True), + index.SearchField('extra_content'), ] -class SearchTestOldConfig(models.Model, indexed.Indexed): +class SearchTestOldConfig(models.Model, index.Indexed): """ This tests that the Indexed class can correctly handle models that use the old "indexed_fields" configuration format. @@ -437,7 +437,7 @@ class SearchTestOldConfig(models.Model, indexed.Indexed): } -class SearchTestOldConfigList(models.Model, indexed.Indexed): +class SearchTestOldConfigList(models.Model, index.Indexed): """ This tests that the Indexed class can correctly handle models that use the old "indexed_fields" configuration format using a list. diff --git a/wagtail/utils/deprecation.py b/wagtail/utils/deprecation.py index 24dc4e589a..4a5fb9382e 100644 --- a/wagtail/utils/deprecation.py +++ b/wagtail/utils/deprecation.py @@ -4,3 +4,7 @@ class RemovedInWagtail06Warning(DeprecationWarning): class RemovedInWagtail07Warning(PendingDeprecationWarning): pass + + +class RemovedInWagtail08Warning(PendingDeprecationWarning): + pass diff --git a/wagtail/wagtailadmin/taggable.py b/wagtail/wagtailadmin/taggable.py index 3b7de479c4..ce86982319 100644 --- a/wagtail/wagtailadmin/taggable.py +++ b/wagtail/wagtailadmin/taggable.py @@ -4,19 +4,19 @@ from django.contrib.contenttypes.models import ContentType from django.db.models import Count from django.core.paginator import Paginator, EmptyPage, PageNotAnInteger -from wagtail.wagtailsearch import indexed +from wagtail.wagtailsearch import index from wagtail.wagtailsearch.backends import get_search_backend -class TagSearchable(indexed.Indexed): +class TagSearchable(index.Indexed): """ Mixin to provide a 'search' method, searching on the 'title' field and tags, for models that provide those things. """ search_fields = ( - indexed.SearchField('title', partial_match=True, boost=10), - indexed.SearchField('get_tags', partial_match=True, boost=10) + index.SearchField('title', partial_match=True, boost=10), + index.SearchField('get_tags', partial_match=True, boost=10) ) @property diff --git a/wagtail/wagtailcore/models.py b/wagtail/wagtailcore/models.py index a237e16e6d..2919b809c6 100644 --- a/wagtail/wagtailcore/models.py +++ b/wagtail/wagtailcore/models.py @@ -32,7 +32,7 @@ from wagtail.wagtailcore.utils import camelcase_to_underscore from wagtail.wagtailcore.query import PageQuerySet from wagtail.wagtailcore.url_routing import RouteResult -from wagtail.wagtailsearch import indexed +from wagtail.wagtailsearch import index from wagtail.wagtailsearch.backends import get_search_backend @@ -274,7 +274,7 @@ class PageBase(models.base.ModelBase): @python_2_unicode_compatible -class Page(six.with_metaclass(PageBase, MP_Node, ClusterableModel, indexed.Indexed)): +class Page(six.with_metaclass(PageBase, MP_Node, ClusterableModel, index.Indexed)): title = models.CharField(max_length=255, help_text=_("The page title as you'd like it to be seen by the public")) slug = models.SlugField(help_text=_("The name of the page as it will appear in URLs e.g http://domain.com/blog/[my-slug]/")) # TODO: enforce uniqueness on slug field per parent (will have to be done at the Django @@ -294,13 +294,13 @@ class Page(six.with_metaclass(PageBase, MP_Node, ClusterableModel, indexed.Index expired = models.BooleanField(default=False, editable=False) search_fields = ( - indexed.SearchField('title', partial_match=True, boost=100), - indexed.FilterField('id'), - indexed.FilterField('live'), - indexed.FilterField('owner'), - indexed.FilterField('content_type'), - indexed.FilterField('path'), - indexed.FilterField('depth'), + index.SearchField('title', partial_match=True, boost=100), + index.FilterField('id'), + index.FilterField('live'), + index.FilterField('owner'), + index.FilterField('content_type'), + index.FilterField('path'), + index.FilterField('depth'), ) def __init__(self, *args, **kwargs): diff --git a/wagtail/wagtaildocs/models.py b/wagtail/wagtaildocs/models.py index f930a493c1..5f9b374f29 100644 --- a/wagtail/wagtaildocs/models.py +++ b/wagtail/wagtaildocs/models.py @@ -13,7 +13,7 @@ from django.utils.encoding import python_2_unicode_compatible from wagtail.wagtailadmin.taggable import TagSearchable from wagtail.wagtailadmin.utils import get_object_usage -from wagtail.wagtailsearch import indexed +from wagtail.wagtailsearch import index @python_2_unicode_compatible @@ -26,7 +26,7 @@ class Document(models.Model, TagSearchable): tags = TaggableManager(help_text=None, blank=True, verbose_name=_('Tags')) search_fields = TagSearchable.search_fields + ( - indexed.FilterField('uploaded_by_user'), + index.FilterField('uploaded_by_user'), ) def __str__(self): diff --git a/wagtail/wagtailimages/models.py b/wagtail/wagtailimages/models.py index b29d50e0c8..63151b6022 100644 --- a/wagtail/wagtailimages/models.py +++ b/wagtail/wagtailimages/models.py @@ -22,7 +22,7 @@ from unidecode import unidecode from wagtail.wagtailadmin.taggable import TagSearchable from wagtail.wagtailimages.backends import get_image_backend -from wagtail.wagtailsearch import indexed +from wagtail.wagtailsearch import index from wagtail.wagtailimages.utils.validators import validate_image_format from wagtail.wagtailimages.utils.focal_point import FocalPoint from wagtail.wagtailimages.utils.feature_detection import FeatureDetector, opencv_available @@ -68,7 +68,7 @@ class AbstractImage(models.Model, TagSearchable): args=(self.id,)) search_fields = TagSearchable.search_fields + ( - indexed.FilterField('uploaded_by_user'), + index.FilterField('uploaded_by_user'), ) def __str__(self): diff --git a/wagtail/wagtailsearch/__init__.py b/wagtail/wagtailsearch/__init__.py index ed896f4451..71cc69f060 100644 --- a/wagtail/wagtailsearch/__init__.py +++ b/wagtail/wagtailsearch/__init__.py @@ -1,3 +1,3 @@ -from wagtail.wagtailsearch.indexed import Indexed +from wagtail.wagtailsearch.index import Indexed from wagtail.wagtailsearch.signal_handlers import register_signal_handlers from wagtail.wagtailsearch.backends import get_search_backend \ No newline at end of file diff --git a/wagtail/wagtailsearch/backends/base.py b/wagtail/wagtailsearch/backends/base.py index 82e2e8d563..1928a7bbe7 100644 --- a/wagtail/wagtailsearch/backends/base.py +++ b/wagtail/wagtailsearch/backends/base.py @@ -2,7 +2,7 @@ from django.db import models from django.db.models.query import QuerySet from django.core.exceptions import ImproperlyConfigured -from wagtail.wagtailsearch.indexed import Indexed +from wagtail.wagtailsearch.index import Indexed from wagtail.wagtailsearch.utils import normalise_query_string diff --git a/wagtail/wagtailsearch/backends/db.py b/wagtail/wagtailsearch/backends/db.py index a94fe3c584..3f7e64f42c 100644 --- a/wagtail/wagtailsearch/backends/db.py +++ b/wagtail/wagtailsearch/backends/db.py @@ -1,7 +1,6 @@ from django.db import models from wagtail.wagtailsearch.backends.base import BaseSearch -from wagtail.wagtailsearch.indexed import Indexed class DBSearch(BaseSearch): diff --git a/wagtail/wagtailsearch/backends/elasticsearch.py b/wagtail/wagtailsearch/backends/elasticsearch.py index 8f8a78dbbc..9e82fe66a3 100644 --- a/wagtail/wagtailsearch/backends/elasticsearch.py +++ b/wagtail/wagtailsearch/backends/elasticsearch.py @@ -11,7 +11,7 @@ from elasticsearch import Elasticsearch, NotFoundError, RequestError from elasticsearch.helpers import bulk from wagtail.wagtailsearch.backends.base import BaseSearch -from wagtail.wagtailsearch.indexed import Indexed, SearchField, FilterField +from wagtail.wagtailsearch.index import Indexed, SearchField, FilterField class ElasticSearchMapping(object): diff --git a/wagtail/wagtailsearch/indexed.py b/wagtail/wagtailsearch/indexed.py index 2828d5e3cd..4ff8e7ba01 100644 --- a/wagtail/wagtailsearch/indexed.py +++ b/wagtail/wagtailsearch/indexed.py @@ -7,4 +7,5 @@ warnings.warn( "The wagtail.wagtailsearch.indexed module has been renamed. " "Use wagtail.wagtailsearch.index instead.", RemovedInWagtail08Warning) + from .index import * diff --git a/wagtail/wagtailsearch/models.py b/wagtail/wagtailsearch/models.py index f82bb2462c..a24183ad9e 100644 --- a/wagtail/wagtailsearch/models.py +++ b/wagtail/wagtailsearch/models.py @@ -4,7 +4,6 @@ from django.db import models from django.utils import timezone from django.utils.encoding import python_2_unicode_compatible -from wagtail.wagtailsearch import indexed from wagtail.wagtailsearch.utils import normalise_query_string, MAX_QUERY_STRING_LENGTH diff --git a/wagtail/wagtailsearch/signal_handlers.py b/wagtail/wagtailsearch/signal_handlers.py index 3550e51750..1c55eb59f0 100644 --- a/wagtail/wagtailsearch/signal_handlers.py +++ b/wagtail/wagtailsearch/signal_handlers.py @@ -2,7 +2,7 @@ from django.db.models.signals import post_save, post_delete from django.db import models from django.conf import settings -from wagtail.wagtailsearch.indexed import Indexed +from wagtail.wagtailsearch.index import Indexed from wagtail.wagtailsearch.backends import get_search_backend diff --git a/wagtail/wagtailsearch/tests/test_indexed_class.py b/wagtail/wagtailsearch/tests/test_indexed_class.py index 983d8e0bab..54eb2f1611 100644 --- a/wagtail/wagtailsearch/tests/test_indexed_class.py +++ b/wagtail/wagtailsearch/tests/test_indexed_class.py @@ -2,7 +2,7 @@ import warnings from django.test import TestCase -from wagtail.wagtailsearch import indexed +from wagtail.wagtailsearch import index from wagtail.tests import models from wagtail.tests.utils import WagtailTestUtils @@ -30,12 +30,12 @@ class TestIndexedFieldsBackwardsCompatibility(TestCase, WagtailTestUtils): # Check that the fields were found self.assertEqual(len(search_fields_dict), 2) - self.assertIn(('title', indexed.SearchField), search_fields_dict.keys()) - self.assertIn(('live', indexed.FilterField), search_fields_dict.keys()) + self.assertIn(('title', index.SearchField), search_fields_dict.keys()) + self.assertIn(('live', index.FilterField), search_fields_dict.keys()) # Check that the title field has the correct settings - self.assertTrue(search_fields_dict[('title', indexed.SearchField)].partial_match) - self.assertEqual(search_fields_dict[('title', indexed.SearchField)].boost, 100) + self.assertTrue(search_fields_dict[('title', index.SearchField)].partial_match) + self.assertEqual(search_fields_dict[('title', index.SearchField)].boost, 100) def test_indexed_fields_backwards_compatibility_list(self): # Get search fields @@ -49,5 +49,5 @@ class TestIndexedFieldsBackwardsCompatibility(TestCase, WagtailTestUtils): # Check that the fields were found self.assertEqual(len(search_fields_dict), 2) - self.assertIn(('title', indexed.SearchField), search_fields_dict.keys()) - self.assertIn(('content', indexed.SearchField), search_fields_dict.keys()) + self.assertIn(('title', index.SearchField), search_fields_dict.keys()) + self.assertIn(('content', index.SearchField), search_fields_dict.keys()) From 628f94519c27197923e4f7fc0608048c5829a123 Mon Sep 17 00:00:00 2001 From: Dave Cranwell Date: Thu, 21 Aug 2014 15:17:14 +0100 Subject: [PATCH 063/210] added more Page model information about previouslly missing attributes like subpage_types --- docs/core_components/index.rst | 1 + docs/core_components/pages/creating_pages.rst | 90 ++++++++++--------- docs/core_components/pages/editing_api.rst | 1 + docs/core_components/pages/theory.rst | 2 + docs/core_components/sites.rst | 10 +++ 5 files changed, 63 insertions(+), 41 deletions(-) create mode 100644 docs/core_components/sites.rst diff --git a/docs/core_components/index.rst b/docs/core_components/index.rst index cfa67d366c..a28ddf1b77 100644 --- a/docs/core_components/index.rst +++ b/docs/core_components/index.rst @@ -4,6 +4,7 @@ Core components .. toctree:: :maxdepth: 2 + sites pages/index images/index snippets diff --git a/docs/core_components/pages/creating_pages.rst b/docs/core_components/pages/creating_pages.rst index 7806274fa4..fe1f7f8535 100644 --- a/docs/core_components/pages/creating_pages.rst +++ b/docs/core_components/pages/creating_pages.rst @@ -2,40 +2,15 @@ Creating page models ==================== +Wagtail provides a ``Page`` class to represent types of page (a.k.a Content types). Developers should subclass ``Page`` for their own page models. -The Page Class -~~~~~~~~~~~~~~ - -``Page`` uses Django's model interface, so you can include any field type and field options that Django allows. Wagtail provides some fields and editing handlers that simplify data entry in the Wagtail admin interface, so you may want to keep those in mind when deciding what properties to add to your models in addition to those already provided by ``Page``. +``Page`` uses Django's model interface, so you can include any field type and field options that Django allows. Wagtail provides some field types of its own which simplify data entry in the Wagtail admin interface. Wagtail also wraps Django's field types and widgets with its own concept of "Edit Handlers" and "Panels". These further improve the data entry experience. -Built-in Properties of the Page Class -------------------------------------- +An example Wagtail Page Model +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -Wagtail provides some properties in the ``Page`` class which are common to most webpages. Since you'll be subclassing ``Page``, you don't have to worry about implementing them. - -Public Properties -````````````````` - - ``title`` (string, required) - Human-readable title for the content - - ``slug`` (string, required) - Machine-readable URL component for this piece of content. The name of the page as it will appear in URLs e.g ``http://domain.com/blog/[my-slug]/`` - - ``seo_title`` (string) - Alternate SEO-crafted title which overrides the normal title for use in the ```` of a page - - ``search_description`` (string) - A SEO-crafted description of the content, used in both internal search indexing and for the meta description read by search engines - -The ``Page`` class actually has alot more to it, but these are probably the only built-in properties you'll need to worry about when creating templates for your models. - - -Anatomy of a Wagtail Model -~~~~~~~~~~~~~~~~~~~~~~~~~~ - -So what does a Wagtail model definition look like? Here's a model representing a typical blog post: +This example represents a typical blog post: .. code-block:: python @@ -72,17 +47,48 @@ So what does a Wagtail model definition look like? Here's a model representing a ImageChooserPanel('feed_image'), ] -To keep track of your ``Page``-derived models, it might be helpful to include "Page" as the last part of your class name. ``BlogPage`` defines three properties: ``body``, ``date``, and ``feed_image``. These are a mix of basic Django models (``DateField``), Wagtail fields (``RichTextField``), and a pointer to a Wagtail model (``Image``). +.. tip:: + To keep track of ``Page`` models and avoid class name clashes, it can be helpful to suffix model class names with "Page" e.g BlogPage, ListingIndexPage. -Next, the ``content_panels`` and ``promote_panels`` lists define the capabilities and layout of the Wagtail admin page edit interface. The lists are filled with "panels" and "choosers", which will provide a fine-grain interface for inputting the model's content. The ``ImageChooserPanel``, for instance, lets one browse the image library, upload new images, and input image metadata. The ``RichTextField`` is the basic field for creating web-ready website rich text, including text formatting and embedded media like images and video. The Wagtail admin offers other choices for fields, Panels, and Choosers, with the option of creating your own to precisely fit your content without workarounds or other compromises. +In the example above the ``BlogPage`` class defines three properties: ``body``, ``date``, and ``feed_image``. These are a mix of basic Django models (``DateField``), Wagtail fields (``RichTextField``), and a pointer to a Wagtail model (``Image``). + +Below that the ``content_panels`` and ``promote_panels`` lists define the capabilities and layout of the page editing interface in the Wagtail admin. The lists are filled with "panels" and "choosers", which will provide a fine-grain interface for inputting the model's content. The ``ImageChooserPanel``, for instance, lets one browse the image library, upload new images and input image metadata. The ``RichTextField`` is the basic field for creating web-ready website rich text, including text formatting and embedded media like images and video. The Wagtail admin offers other choices for fields, Panels, and Choosers, with the option of creating your own to precisely fit your content without workarounds or other compromises. Your models may be even more complex, with methods overriding the built-in functionality of the ``Page`` to achieve webdev magic. Or, you can keep your models simple and let Wagtail's built-in functionality do the work. -Now that we have a basic idea of how our content is defined, lets look at relationships between pieces of content. + +``Page`` Class Reference +~~~~~~~~~~~~~~~~~~~~~~~~ + +Default fields +-------------- + +Wagtail provides some fields for the ``Page`` class by default, which will be common to all your pages. You don't need to add these fields to your own page models however you do need to allocate them to ``content_panels``, ``promote_panels`` or ``settings_panels``. See above example and for further information on the panels see :ref:`editing-api`. + + ``title`` (string, required) + Human-readable title of the page - what you'd probably use as your ``

    `` tag. + + ``slug`` (string, required) + Machine-readable URL component for this page. The name of the page as it will appear in URLs e.g ``http://domain.com/blog/[my-slug]/`` + + ``seo_title`` (string) + Alternate SEO-crafted title, mainly for use in the page ```` tag. + + ``search_description`` (string) + SEO-crafted description of the content, used for internal search indexing, suitable for your page's ``<meta name="description">`` tag. + + ``show_in_menus`` (boolean) + Toggles whether the page should be considered for inclusion in any site-wide menus you create. + + ``go_live_at`` (datetime) + A datetime on which the page should be automatically made published (made publicly accessible) + + ``expire_at`` (datetime) + A datetime on which the page should be unpublished, rendering it inaccessible to the public. -Page Properties and Methods Reference -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +Page Attributes, Properties and Methods Reference +------------------------------------------------- In addition to the model fields provided, ``Page`` has many properties and methods that you may wish to reference, use, or override in creating your own models. Those listed here are relatively straightforward to use, but consult the Wagtail source code for a full view of what's possible. @@ -121,14 +127,16 @@ In addition to the model fields provided, ``Page`` has many properties and metho .. automethod:: search + .. attribute:: search_fields + + A list of fields to be indexed by the search engine. See Search docs :ref:`wagtailsearch_for_python_developers` -.. _wagtail_site_admin: + .. attribute:: subpage_types -Site -~~~~ + A whitelist of page models which can be created as children of this page type e.g a ``BlogIndex`` page might allow ``BlogPage``, but not ``JobPage``. -Django's built-in admin interface provides the way to map a "site" (hostname or domain) to any node in the wagtail tree, using that node as the site's root. + .. attribute:: password_required_template + + Defines which template file should be used to render the login form for Protected pages using this model. This overrides the default, defined using ``PASSWORD_REQUIRED_TEMPLATE`` in your settings. See :ref:`private_pages` -Access this by going to ``/django-admin/`` and then "Home › Wagtailcore › Sites." To try out a development site, add a single site with the hostname ``localhost`` at port ``8000`` and map it to one of the pieces of content you have created. -Wagtail's developers plan to move the site settings into the Wagtail admin interface. diff --git a/docs/core_components/pages/editing_api.rst b/docs/core_components/pages/editing_api.rst index 4d346a8150..f1025cbcb3 100644 --- a/docs/core_components/pages/editing_api.rst +++ b/docs/core_components/pages/editing_api.rst @@ -1,3 +1,4 @@ +.. _editing-api: Defining models with the Editing API ==================================== diff --git a/docs/core_components/pages/theory.rst b/docs/core_components/pages/theory.rst index 272ca3d1d5..bcea079bb4 100644 --- a/docs/core_components/pages/theory.rst +++ b/docs/core_components/pages/theory.rst @@ -1,3 +1,5 @@ +.. _pages-theory: + ====== Theory ====== diff --git a/docs/core_components/sites.rst b/docs/core_components/sites.rst new file mode 100644 index 0000000000..89c490b656 --- /dev/null +++ b/docs/core_components/sites.rst @@ -0,0 +1,10 @@ +.. _wagtail_site_admin: + +Sites +===== + +Django's built-in admin interface provides the way to map a "site" (hostname or domain) to any node in the wagtail tree, using that node as the site's root. See :ref:`pages-theory`. + +Access this by going to ``/django-admin/`` and then "Home › Wagtailcore › Sites." To try out a development site, add a single site with the hostname ``localhost`` at port ``8000`` and map it to one of the pieces of content you have created. + +Wagtail's developers plan to move the site settings into the Wagtail admin interface. From 6eb5f821ed4e808329c37f78a3acdf1cf77bef57 Mon Sep 17 00:00:00 2001 From: Dave Cranwell <david@torchbox.com> Date: Thu, 21 Aug 2014 15:56:55 +0100 Subject: [PATCH 064/210] added quick django example --- docs/core_components/pages/creating_pages.rst | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/docs/core_components/pages/creating_pages.rst b/docs/core_components/pages/creating_pages.rst index fe1f7f8535..e6fb9a14b1 100644 --- a/docs/core_components/pages/creating_pages.rst +++ b/docs/core_components/pages/creating_pages.rst @@ -33,6 +33,8 @@ This example represents a typical blog post: related_name='+' ) + + BlogPage.content_panels = [ FieldPanel('title', classname="full title"), FieldPanel('date'), @@ -133,7 +135,12 @@ In addition to the model fields provided, ``Page`` has many properties and metho .. attribute:: subpage_types - A whitelist of page models which can be created as children of this page type e.g a ``BlogIndex`` page might allow ``BlogPage``, but not ``JobPage``. + A whitelist of page models which can be created as children of this page type e.g a ``BlogIndex`` page might allow ``BlogPage``, but not ``JobPage`` e.g + + .. code-block:: python + + class BlogIndex(Page): + subpage_types = ['mysite.BlogPage', 'mysite.BlogArchivePage'] .. attribute:: password_required_template From cecfe9f3cc692856354d1e36f64ebbe16f49b0a8 Mon Sep 17 00:00:00 2001 From: Karl Hobley <karl@torchbox.com> Date: Thu, 21 Aug 2014 15:41:19 +0100 Subject: [PATCH 065/210] Fixed some references to the bad imports --- wagtail/wagtailembeds/format.py | 2 +- wagtail/wagtailembeds/templatetags/wagtailembeds_tags.py | 2 +- wagtail/wagtailembeds/tests.py | 5 +++-- wagtail/wagtailsearch/management/commands/update_index.py | 3 ++- 4 files changed, 7 insertions(+), 5 deletions(-) diff --git a/wagtail/wagtailembeds/format.py b/wagtail/wagtailembeds/format.py index 8a73ff5242..abbb6b54b3 100644 --- a/wagtail/wagtailembeds/format.py +++ b/wagtail/wagtailembeds/format.py @@ -2,7 +2,7 @@ from __future__ import division # Use true division from django.template.loader import render_to_string -from wagtail.wagtailembeds import get_embed +from wagtail.wagtailembeds.embeds import get_embed def embed_to_frontend_html(url): diff --git a/wagtail/wagtailembeds/templatetags/wagtailembeds_tags.py b/wagtail/wagtailembeds/templatetags/wagtailembeds_tags.py index f021d5761e..2aa4fdc49f 100644 --- a/wagtail/wagtailembeds/templatetags/wagtailembeds_tags.py +++ b/wagtail/wagtailembeds/templatetags/wagtailembeds_tags.py @@ -3,7 +3,7 @@ import warnings from django import template from django.utils.safestring import mark_safe -from wagtail.wagtailembeds import get_embed +from wagtail.wagtailembeds.embeds import get_embed register = template.Library() diff --git a/wagtail/wagtailembeds/tests.py b/wagtail/wagtailembeds/tests.py index 91e41d420a..8fc135faa2 100644 --- a/wagtail/wagtailembeds/tests.py +++ b/wagtail/wagtailembeds/tests.py @@ -15,13 +15,14 @@ from django.test import TestCase from wagtail.tests.utils import WagtailTestUtils, unittest -from wagtail.wagtailembeds import get_embed from wagtail.wagtailembeds.embeds import ( EmbedNotFoundException, EmbedlyException, AccessDeniedEmbedlyException, + get_embed, + embedly as wagtail_embedly, + oembed as wagtail_oembed, ) -from wagtail.wagtailembeds.embeds import embedly as wagtail_embedly, oembed as wagtail_oembed from wagtail.wagtailembeds.templatetags.wagtailembeds_tags import embed as embed_filter diff --git a/wagtail/wagtailsearch/management/commands/update_index.py b/wagtail/wagtailsearch/management/commands/update_index.py index c52b756398..d03ed1c6b3 100644 --- a/wagtail/wagtailsearch/management/commands/update_index.py +++ b/wagtail/wagtailsearch/management/commands/update_index.py @@ -1,7 +1,8 @@ from django.core.management.base import BaseCommand from django.db import models -from wagtail.wagtailsearch import Indexed, get_search_backend +from wagtail.wagtailsearch.indexed import Indexed +from wagtail.wagtailsearch.backends import get_search_backend class Command(BaseCommand): From f5c57607ed4bcb30e124bc3309f1bfa83a0808ef Mon Sep 17 00:00:00 2001 From: Dave Cranwell <david@torchbox.com> Date: Fri, 22 Aug 2014 11:28:05 +0100 Subject: [PATCH 066/210] added progress indicator to styleguide --- .../templates/wagtailstyleguide/base.html | 26 ++++++++++++++++++- 1 file changed, 25 insertions(+), 1 deletion(-) diff --git a/wagtail/contrib/wagtailstyleguide/templates/wagtailstyleguide/base.html b/wagtail/contrib/wagtailstyleguide/templates/wagtailstyleguide/base.html index bca7ce8a13..667798c805 100644 --- a/wagtail/contrib/wagtailstyleguide/templates/wagtailstyleguide/base.html +++ b/wagtail/contrib/wagtailstyleguide/templates/wagtailstyleguide/base.html @@ -30,6 +30,7 @@ <li><a href="#editor">Page editor</a></li> <li><a href="#tabs">Tabs</a></li> <li><a href="#breadcrumbs">Breadcrumbs</a></li> + <li><a href="#progress">Progress indicators</a></li> <li><a href="#misc">Misc formatters</a></li> <li><a href="#icons">Icons</a></li> </ul> @@ -406,6 +407,20 @@ </section> + <section id="progress"> + <h2>Progress indicators</h2> + + <div id="progress-example" class="progress active"> + <div class="bar">60%</div> + </div> + + <p> </p> + + <div id="progress-example2" class="progress active"> + <div class="bar" style="width: 50%;">50%</div> + </div> + </section> + <section id="misc"> <h2>Misc formatters</h2> <h3>Avatar icons</h3> @@ -506,7 +521,16 @@ {% block extra_js %} <script> $(function(){ - + (function runprogress(){ + var to = setTimeout(function(){ + runprogress(); + clearTimeout(to); + var to2 = setTimeout(function(){ + $('#progress-example .bar').css('width', '20%'); + }, 2000); + }, 3000); + $('#progress-example .bar').css('width', '80%'); + })(); }) </script> {% endblock %} \ No newline at end of file From f45795ef4c687245a5615fbdd35bdbc1eb6debcf Mon Sep 17 00:00:00 2001 From: Karl Hobley <karl@torchbox.com> Date: Tue, 26 Aug 2014 12:13:08 +0100 Subject: [PATCH 067/210] Changelog and release notes for #562 --- CHANGELOG.txt | 1 + docs/releases/0.6.rst | 7 +++++++ 2 files changed, 8 insertions(+) diff --git a/CHANGELOG.txt b/CHANGELOG.txt index 803ad742d3..14b1bcd1fb 100644 --- a/CHANGELOG.txt +++ b/CHANGELOG.txt @@ -5,6 +5,7 @@ Changelog ~~~~~~~~~~~~~~~~ * Added {% routablepageurl %} template tag (@timheap) * Added RoutablePageMixin (@timheap) + * Renamed wagtailsearch.indexed to wagtailsearch.index * Fix: Page URL generation now returns correct URLs for sites that have the main 'serve' view rooted somewhere other than '/' 0.5 (01.08.2014) diff --git a/docs/releases/0.6.rst b/docs/releases/0.6.rst index 321c437306..aa0b29960b 100644 --- a/docs/releases/0.6.rst +++ b/docs/releases/0.6.rst @@ -22,3 +22,10 @@ Bug fixes Upgrade considerations ====================== + + +Deprecated features +=================== + + * The ``wagtail.wagtailsearch.indexed`` module has been renamed to ``wagtail.wagtailsearch.index`` + \ No newline at end of file From 09086b13b2c9835d52d75884da2be5c4ec311849 Mon Sep 17 00:00:00 2001 From: Karl Hobley <karl@torchbox.com> Date: Tue, 26 Aug 2014 12:14:39 +0100 Subject: [PATCH 068/210] Docs changes for #562 --- .../search/for_python_developers.rst | 32 +++++++++---------- 1 file changed, 16 insertions(+), 16 deletions(-) diff --git a/docs/core_components/search/for_python_developers.rst b/docs/core_components/search/for_python_developers.rst index b99795e7bf..5b572ec3ef 100644 --- a/docs/core_components/search/for_python_developers.rst +++ b/docs/core_components/search/for_python_developers.rst @@ -56,15 +56,15 @@ This creates an ``EventPage`` model with two fields ``description`` and ``date`` .. code-block:: python - from wagtail.wagtailsearch import indexed + from wagtail.wagtailsearch import index class EventPage(Page): description = models.TextField() date = models.DateField() search_fields = Page.search_fields + ( # Inherit search_fields from Page - indexed.SearchField('description'), - indexed.FilterField('date'), + index.SearchField('description'), + index.FilterField('date'), ) @@ -72,7 +72,7 @@ This creates an ``EventPage`` model with two fields ``description`` and ``date`` >>> EventPage.objects.filter(date__gt=timezone.now()).search("Christmas") -``indexed.SearchField`` +``index.SearchField`` ----------------------- These are added to the search index and are used for performing full-text searches on your models. These would usually be text fields. @@ -86,7 +86,7 @@ Options - **es_extra** (dict) - This field is to allow the developer to set or override any setting on the field in the ElasticSearch mapping. Use this if you want to make use of any ElasticSearch features that are not yet supported in Wagtail. -``indexed.FilterField`` +``index.FilterField`` ----------------------- These are added to the search index but are not used for full-text searches. Instead, they allow you to run filters on your search results. @@ -107,7 +107,7 @@ One use for this is indexing ``get_*_display`` methods Django creates automatica .. code-block:: python - from wagtail.wagtailsearch import indexed + from wagtail.wagtailsearch import index class EventPage(Page): IS_PRIVATE_CHOICES = ( @@ -119,10 +119,10 @@ One use for this is indexing ``get_*_display`` methods Django creates automatica search_fields = Page.search_fields + ( # Index the human-readable string for searching - indexed.SearchField('get_is_private_display'), + index.SearchField('get_is_private_display'), # Index the boolean value for filtering - indexed.FilterField('is_private'), + index.FilterField('is_private'), ) @@ -131,25 +131,25 @@ Indexing non-page models Any Django model can be indexed and searched. -To do this, inherit from ``indexed.Indexed`` and add some ``search_fields`` to the model. +To do this, inherit from ``index.Indexed`` and add some ``search_fields`` to the model. .. code-block:: python - from wagtail.wagtailsearch import indexed + from wagtail.wagtailsearch import index - class Book(models.Model, indexed.Indexed): + class Book(models.Model, index.Indexed): title = models.CharField(max_length=255) genre = models.CharField(max_length=255, choices=GENRE_CHOICES) author = models.ForeignKey(Author) published_date = models.DateTimeField() search_fields = ( - indexed.SearchField('title', partial_match=True, boost=10), - indexed.SearchField('get_genre_display'), + index.SearchField('title', partial_match=True, boost=10), + index.SearchField('get_genre_display'), - indexed.FilterField('genre'), - indexed.FilterField('author'), - indexed.FilterField('published_date'), + index.FilterField('genre'), + index.FilterField('author'), + index.FilterField('published_date'), ) # As this model doesn't have a search method in its QuerySet, we have to call search directly on the backend From 053a75ef9daabe92b4ca74d99e1fdda15f1363a3 Mon Sep 17 00:00:00 2001 From: Dave Cranwell <davecranwell@users.noreply.github.com> Date: Tue, 26 Aug 2014 13:26:56 +0100 Subject: [PATCH 069/210] clarify ElasticSearch dependency --- docs/core_components/search/for_python_developers.rst | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/core_components/search/for_python_developers.rst b/docs/core_components/search/for_python_developers.rst index 5b572ec3ef..784da92fce 100644 --- a/docs/core_components/search/for_python_developers.rst +++ b/docs/core_components/search/for_python_developers.rst @@ -36,9 +36,9 @@ Indexing extra fields The ``indexed_fields`` configuration format was replaced with ``search_fields`` -.. note:: +.. warning:: - Searching on extra fields with the database backend is not currently supported. + Searching on extra fields by overriding ``search_fields`` is only supported with ElasticSearch. If you're using the database backend, any other fields you define via ``search_fields`` will be ignored. Fields need to be explicitly added to the search configuration in order for you to be able to search/filter on them. From 15ba294bcd5e409cca380901c015d56a4e065d33 Mon Sep 17 00:00:00 2001 From: Dave Cranwell <davecranwell@users.noreply.github.com> Date: Tue, 26 Aug 2014 13:40:37 +0100 Subject: [PATCH 070/210] index -> indexed, plus other tweaks --- .../search/for_python_developers.rst | 40 +++++++++---------- 1 file changed, 19 insertions(+), 21 deletions(-) diff --git a/docs/core_components/search/for_python_developers.rst b/docs/core_components/search/for_python_developers.rst index 784da92fce..af7c49af78 100644 --- a/docs/core_components/search/for_python_developers.rst +++ b/docs/core_components/search/for_python_developers.rst @@ -10,6 +10,8 @@ For Python developers Basic usage =========== +By default using the database backend, Wagtail's search will only index the ``title`` field of pages. + All searches are performed on Django QuerySets. Wagtail provides a ``search`` method on the queryset for all page models: .. code-block:: python @@ -38,17 +40,13 @@ Indexing extra fields .. warning:: - Searching on extra fields by overriding ``search_fields`` is only supported with ElasticSearch. If you're using the database backend, any other fields you define via ``search_fields`` will be ignored. + Indexing extra fields is only supported with ElasticSearch as your backend. If you're using the database backend, any other fields you define via ``search_fields`` will be ignored. -Fields need to be explicitly added to the search configuration in order for you to be able to search/filter on them. - -You can add new fields to the search index by overriding the ``search_fields`` property and appending a list of extra ``SearchField``/``FilterField`` objects to it. - -The default value of ``search_fields`` (as set in ``Page``) indexes the ``title`` field as a ``SearchField`` and some other generally useful fields as ``FilterField`` rules. +Fields must be explicitly added to the ``search_fields`` property of your ``Page``-derived model, in order for you to be able to search/filter on them. This is done by overriding ``search_fields`` to append a list of extra ``SearchField``/``FilterField`` objects to it. -Quick example +Example ------------- This creates an ``EventPage`` model with two fields ``description`` and ``date``. ``description`` is indexed as a ``SearchField`` and ``date`` is indexed as a ``FilterField`` @@ -56,15 +54,15 @@ This creates an ``EventPage`` model with two fields ``description`` and ``date`` .. code-block:: python - from wagtail.wagtailsearch import index + from wagtail.wagtailsearch import indexed class EventPage(Page): description = models.TextField() date = models.DateField() search_fields = Page.search_fields + ( # Inherit search_fields from Page - index.SearchField('description'), - index.FilterField('date'), + indexed.SearchField('description'), + indexed.FilterField('date'), ) @@ -72,7 +70,7 @@ This creates an ``EventPage`` model with two fields ``description`` and ``date`` >>> EventPage.objects.filter(date__gt=timezone.now()).search("Christmas") -``index.SearchField`` +``indexed.SearchField`` ----------------------- These are added to the search index and are used for performing full-text searches on your models. These would usually be text fields. @@ -86,7 +84,7 @@ Options - **es_extra** (dict) - This field is to allow the developer to set or override any setting on the field in the ElasticSearch mapping. Use this if you want to make use of any ElasticSearch features that are not yet supported in Wagtail. -``index.FilterField`` +``indexed.FilterField`` ----------------------- These are added to the search index but are not used for full-text searches. Instead, they allow you to run filters on your search results. @@ -107,7 +105,7 @@ One use for this is indexing ``get_*_display`` methods Django creates automatica .. code-block:: python - from wagtail.wagtailsearch import index + from wagtail.wagtailsearch import indexed class EventPage(Page): IS_PRIVATE_CHOICES = ( @@ -119,10 +117,10 @@ One use for this is indexing ``get_*_display`` methods Django creates automatica search_fields = Page.search_fields + ( # Index the human-readable string for searching - index.SearchField('get_is_private_display'), + indexed.SearchField('get_is_private_display'), # Index the boolean value for filtering - index.FilterField('is_private'), + indexed.FilterField('is_private'), ) @@ -135,7 +133,7 @@ To do this, inherit from ``index.Indexed`` and add some ``search_fields`` to the .. code-block:: python - from wagtail.wagtailsearch import index + from wagtail.wagtailsearch import indexed class Book(models.Model, index.Indexed): title = models.CharField(max_length=255) @@ -144,12 +142,12 @@ To do this, inherit from ``index.Indexed`` and add some ``search_fields`` to the published_date = models.DateTimeField() search_fields = ( - index.SearchField('title', partial_match=True, boost=10), - index.SearchField('get_genre_display'), + indexed.SearchField('title', partial_match=True, boost=10), + indexed.SearchField('get_genre_display'), - index.FilterField('genre'), - index.FilterField('author'), - index.FilterField('published_date'), + indexed.FilterField('genre'), + indexed.FilterField('author'), + indexed.FilterField('published_date'), ) # As this model doesn't have a search method in its QuerySet, we have to call search directly on the backend From 504732433bbf365d3ba6b9eae2b56e388c37f6b3 Mon Sep 17 00:00:00 2001 From: Dave Cranwell <davecranwell@users.noreply.github.com> Date: Tue, 26 Aug 2014 13:41:02 +0100 Subject: [PATCH 071/210] Update for_python_developers.rst --- docs/core_components/search/for_python_developers.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/core_components/search/for_python_developers.rst b/docs/core_components/search/for_python_developers.rst index af7c49af78..27a39b4aa3 100644 --- a/docs/core_components/search/for_python_developers.rst +++ b/docs/core_components/search/for_python_developers.rst @@ -10,7 +10,7 @@ For Python developers Basic usage =========== -By default using the database backend, Wagtail's search will only index the ``title`` field of pages. +By default using the :ref:`wagtailsearch_backends_database`, Wagtail's search will only index the ``title`` field of pages. All searches are performed on Django QuerySets. Wagtail provides a ``search`` method on the queryset for all page models: From b9c6a0a8024d27ffdb6794570fb81f007d659c1b Mon Sep 17 00:00:00 2001 From: Karl Hobley <karl@torchbox.com> Date: Tue, 26 Aug 2014 16:03:59 +0100 Subject: [PATCH 072/210] Renamed indexed to index --- .../search/for_python_developers.rst | 28 +++++++++---------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/docs/core_components/search/for_python_developers.rst b/docs/core_components/search/for_python_developers.rst index 27a39b4aa3..eecd5646a3 100644 --- a/docs/core_components/search/for_python_developers.rst +++ b/docs/core_components/search/for_python_developers.rst @@ -54,15 +54,15 @@ This creates an ``EventPage`` model with two fields ``description`` and ``date`` .. code-block:: python - from wagtail.wagtailsearch import indexed + from wagtail.wagtailsearch import index class EventPage(Page): description = models.TextField() date = models.DateField() search_fields = Page.search_fields + ( # Inherit search_fields from Page - indexed.SearchField('description'), - indexed.FilterField('date'), + index.SearchField('description'), + index.FilterField('date'), ) @@ -70,7 +70,7 @@ This creates an ``EventPage`` model with two fields ``description`` and ``date`` >>> EventPage.objects.filter(date__gt=timezone.now()).search("Christmas") -``indexed.SearchField`` +``index.SearchField`` ----------------------- These are added to the search index and are used for performing full-text searches on your models. These would usually be text fields. @@ -84,7 +84,7 @@ Options - **es_extra** (dict) - This field is to allow the developer to set or override any setting on the field in the ElasticSearch mapping. Use this if you want to make use of any ElasticSearch features that are not yet supported in Wagtail. -``indexed.FilterField`` +``index.FilterField`` ----------------------- These are added to the search index but are not used for full-text searches. Instead, they allow you to run filters on your search results. @@ -105,7 +105,7 @@ One use for this is indexing ``get_*_display`` methods Django creates automatica .. code-block:: python - from wagtail.wagtailsearch import indexed + from wagtail.wagtailsearch import index class EventPage(Page): IS_PRIVATE_CHOICES = ( @@ -117,10 +117,10 @@ One use for this is indexing ``get_*_display`` methods Django creates automatica search_fields = Page.search_fields + ( # Index the human-readable string for searching - indexed.SearchField('get_is_private_display'), + index.SearchField('get_is_private_display'), # Index the boolean value for filtering - indexed.FilterField('is_private'), + index.FilterField('is_private'), ) @@ -133,7 +133,7 @@ To do this, inherit from ``index.Indexed`` and add some ``search_fields`` to the .. code-block:: python - from wagtail.wagtailsearch import indexed + from wagtail.wagtailsearch import index class Book(models.Model, index.Indexed): title = models.CharField(max_length=255) @@ -142,12 +142,12 @@ To do this, inherit from ``index.Indexed`` and add some ``search_fields`` to the published_date = models.DateTimeField() search_fields = ( - indexed.SearchField('title', partial_match=True, boost=10), - indexed.SearchField('get_genre_display'), + index.SearchField('title', partial_match=True, boost=10), + index.SearchField('get_genre_display'), - indexed.FilterField('genre'), - indexed.FilterField('author'), - indexed.FilterField('published_date'), + index.FilterField('genre'), + index.FilterField('author'), + index.FilterField('published_date'), ) # As this model doesn't have a search method in its QuerySet, we have to call search directly on the backend From c300477c7723c7fee46d656b48088caafc6c74a0 Mon Sep 17 00:00:00 2001 From: Dave Cranwell <david@torchbox.com> Date: Tue, 26 Aug 2014 16:23:53 +0100 Subject: [PATCH 073/210] reinstated missing modernizr test used by edit bird --- .../static/wagtailadmin/js/vendor/modernizr-2.6.2.min.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/wagtail/wagtailadmin/static/wagtailadmin/js/vendor/modernizr-2.6.2.min.js b/wagtail/wagtailadmin/static/wagtailadmin/js/vendor/modernizr-2.6.2.min.js index 7eb2abe757..f18b5c2c97 100644 --- a/wagtail/wagtailadmin/static/wagtailadmin/js/vendor/modernizr-2.6.2.min.js +++ b/wagtail/wagtailadmin/static/wagtailadmin/js/vendor/modernizr-2.6.2.min.js @@ -1,4 +1,4 @@ /* Modernizr 2.8.3 (Custom Build) | MIT & BSD - * Build: http://modernizr.com/download/#-cssanimations-cssreflections-csstransforms-csstransforms3d-csstransitions-draganddrop-shiv-mq-cssclasses-addtest-prefixed-teststyles-testprop-testallprops-hasevent-prefixes-domprefixes-file_api-load + * Build: http://modernizr.com/download/#-cssanimations-cssreflections-csstransforms-csstransforms3d-csstransitions-draganddrop-touch-shiv-mq-cssclasses-addtest-prefixed-teststyles-testprop-testallprops-hasevent-prefixes-domprefixes-file_api-load */ -;window.Modernizr=function(a,b,c){function B(a){j.cssText=a}function C(a,b){return B(m.join(a+";")+(b||""))}function D(a,b){return typeof a===b}function E(a,b){return!!~(""+a).indexOf(b)}function F(a,b){for(var d in a){var e=a[d];if(!E(e,"-")&&j[e]!==c)return b=="pfx"?e:!0}return!1}function G(a,b,d){for(var e in a){var f=b[a[e]];if(f!==c)return d===!1?a[e]:D(f,"function")?f.bind(d||b):f}return!1}function H(a,b,c){var d=a.charAt(0).toUpperCase()+a.slice(1),e=(a+" "+o.join(d+" ")+d).split(" ");return D(b,"string")||D(b,"undefined")?F(e,b):(e=(a+" "+p.join(d+" ")+d).split(" "),G(e,b,c))}var d="2.8.3",e={},f=!0,g=b.documentElement,h="modernizr",i=b.createElement(h),j=i.style,k,l={}.toString,m=" -webkit- -moz- -o- -ms- ".split(" "),n="Webkit Moz O ms",o=n.split(" "),p=n.toLowerCase().split(" "),q={},r={},s={},t=[],u=t.slice,v,w=function(a,c,d,e){var f,i,j,k,l=b.createElement("div"),m=b.body,n=m||b.createElement("body");if(parseInt(d,10))while(d--)j=b.createElement("div"),j.id=e?e[d]:h+(d+1),l.appendChild(j);return f=["­",'<style id="s',h,'">',a,"</style>"].join(""),l.id=h,(m?l:n).innerHTML+=f,n.appendChild(l),m||(n.style.background="",n.style.overflow="hidden",k=g.style.overflow,g.style.overflow="hidden",g.appendChild(n)),i=c(l,a),m?l.parentNode.removeChild(l):(n.parentNode.removeChild(n),g.style.overflow=k),!!i},x=function(b){var c=a.matchMedia||a.msMatchMedia;if(c)return c(b)&&c(b).matches||!1;var d;return w("@media "+b+" { #"+h+" { position: absolute; } }",function(b){d=(a.getComputedStyle?getComputedStyle(b,null):b.currentStyle)["position"]=="absolute"}),d},y=function(){function d(d,e){e=e||b.createElement(a[d]||"div"),d="on"+d;var f=d in e;return f||(e.setAttribute||(e=b.createElement("div")),e.setAttribute&&e.removeAttribute&&(e.setAttribute(d,""),f=D(e[d],"function"),D(e[d],"undefined")||(e[d]=c),e.removeAttribute(d))),e=null,f}var a={select:"input",change:"input",submit:"form",reset:"form",error:"img",load:"img",abort:"img"};return d}(),z={}.hasOwnProperty,A;!D(z,"undefined")&&!D(z.call,"undefined")?A=function(a,b){return z.call(a,b)}:A=function(a,b){return b in a&&D(a.constructor.prototype[b],"undefined")},Function.prototype.bind||(Function.prototype.bind=function(b){var c=this;if(typeof c!="function")throw new TypeError;var d=u.call(arguments,1),e=function(){if(this instanceof e){var a=function(){};a.prototype=c.prototype;var f=new a,g=c.apply(f,d.concat(u.call(arguments)));return Object(g)===g?g:f}return c.apply(b,d.concat(u.call(arguments)))};return e}),q.draganddrop=function(){var a=b.createElement("div");return"draggable"in a||"ondragstart"in a&&"ondrop"in a},q.cssanimations=function(){return H("animationName")},q.cssreflections=function(){return H("boxReflect")},q.csstransforms=function(){return!!H("transform")},q.csstransforms3d=function(){var a=!!H("perspective");return a&&"webkitPerspective"in g.style&&w("@media (transform-3d),(-webkit-transform-3d){#modernizr{left:9px;position:absolute;height:3px;}}",function(b,c){a=b.offsetLeft===9&&b.offsetHeight===3}),a},q.csstransitions=function(){return H("transition")};for(var I in q)A(q,I)&&(v=I.toLowerCase(),e[v]=q[I](),t.push((e[v]?"":"no-")+v));return e.addTest=function(a,b){if(typeof a=="object")for(var d in a)A(a,d)&&e.addTest(d,a[d]);else{a=a.toLowerCase();if(e[a]!==c)return e;b=typeof b=="function"?b():b,typeof f!="undefined"&&f&&(g.className+=" "+(b?"":"no-")+a),e[a]=b}return e},B(""),i=k=null,function(a,b){function l(a,b){var c=a.createElement("p"),d=a.getElementsByTagName("head")[0]||a.documentElement;return c.innerHTML="x<style>"+b+"</style>",d.insertBefore(c.lastChild,d.firstChild)}function m(){var a=s.elements;return typeof a=="string"?a.split(" "):a}function n(a){var b=j[a[h]];return b||(b={},i++,a[h]=i,j[i]=b),b}function o(a,c,d){c||(c=b);if(k)return c.createElement(a);d||(d=n(c));var g;return d.cache[a]?g=d.cache[a].cloneNode():f.test(a)?g=(d.cache[a]=d.createElem(a)).cloneNode():g=d.createElem(a),g.canHaveChildren&&!e.test(a)&&!g.tagUrn?d.frag.appendChild(g):g}function p(a,c){a||(a=b);if(k)return a.createDocumentFragment();c=c||n(a);var d=c.frag.cloneNode(),e=0,f=m(),g=f.length;for(;e<g;e++)d.createElement(f[e]);return d}function q(a,b){b.cache||(b.cache={},b.createElem=a.createElement,b.createFrag=a.createDocumentFragment,b.frag=b.createFrag()),a.createElement=function(c){return s.shivMethods?o(c,a,b):b.createElem(c)},a.createDocumentFragment=Function("h,f","return function(){var n=f.cloneNode(),c=n.createElement;h.shivMethods&&("+m().join().replace(/[\w\-]+/g,function(a){return b.createElem(a),b.frag.createElement(a),'c("'+a+'")'})+");return n}")(s,b.frag)}function r(a){a||(a=b);var c=n(a);return s.shivCSS&&!g&&!c.hasCSS&&(c.hasCSS=!!l(a,"article,aside,dialog,figcaption,figure,footer,header,hgroup,main,nav,section{display:block}mark{background:#FF0;color:#000}template{display:none}")),k||q(a,c),a}var c="3.7.0",d=a.html5||{},e=/^<|^(?:button|map|select|textarea|object|iframe|option|optgroup)$/i,f=/^(?:a|b|code|div|fieldset|h1|h2|h3|h4|h5|h6|i|label|li|ol|p|q|span|strong|style|table|tbody|td|th|tr|ul)$/i,g,h="_html5shiv",i=0,j={},k;(function(){try{var a=b.createElement("a");a.innerHTML="<xyz></xyz>",g="hidden"in a,k=a.childNodes.length==1||function(){b.createElement("a");var a=b.createDocumentFragment();return typeof a.cloneNode=="undefined"||typeof a.createDocumentFragment=="undefined"||typeof a.createElement=="undefined"}()}catch(c){g=!0,k=!0}})();var s={elements:d.elements||"abbr article aside audio bdi canvas data datalist details dialog figcaption figure footer header hgroup main mark meter nav output progress section summary template time video",version:c,shivCSS:d.shivCSS!==!1,supportsUnknownElements:k,shivMethods:d.shivMethods!==!1,type:"default",shivDocument:r,createElement:o,createDocumentFragment:p};a.html5=s,r(b)}(this,b),e._version=d,e._prefixes=m,e._domPrefixes=p,e._cssomPrefixes=o,e.mq=x,e.hasEvent=y,e.testProp=function(a){return F([a])},e.testAllProps=H,e.testStyles=w,e.prefixed=function(a,b,c){return b?H(a,b,c):H(a,"pfx")},g.className=g.className.replace(/(^|\s)no-js(\s|$)/,"$1$2")+(f?" js "+t.join(" "):""),e}(this,this.document),function(a,b,c){function d(a){return"[object Function]"==o.call(a)}function e(a){return"string"==typeof a}function f(){}function g(a){return!a||"loaded"==a||"complete"==a||"uninitialized"==a}function h(){var a=p.shift();q=1,a?a.t?m(function(){("c"==a.t?B.injectCss:B.injectJs)(a.s,0,a.a,a.x,a.e,1)},0):(a(),h()):q=0}function i(a,c,d,e,f,i,j){function k(b){if(!o&&g(l.readyState)&&(u.r=o=1,!q&&h(),l.onload=l.onreadystatechange=null,b)){"img"!=a&&m(function(){t.removeChild(l)},50);for(var d in y[c])y[c].hasOwnProperty(d)&&y[c][d].onload()}}var j=j||B.errorTimeout,l=b.createElement(a),o=0,r=0,u={t:d,s:c,e:f,a:i,x:j};1===y[c]&&(r=1,y[c]=[]),"object"==a?l.data=c:(l.src=c,l.type=a),l.width=l.height="0",l.onerror=l.onload=l.onreadystatechange=function(){k.call(this,r)},p.splice(e,0,u),"img"!=a&&(r||2===y[c]?(t.insertBefore(l,s?null:n),m(k,j)):y[c].push(l))}function j(a,b,c,d,f){return q=0,b=b||"j",e(a)?i("c"==b?v:u,a,b,this.i++,c,d,f):(p.splice(this.i++,0,a),1==p.length&&h()),this}function k(){var a=B;return a.loader={load:j,i:0},a}var l=b.documentElement,m=a.setTimeout,n=b.getElementsByTagName("script")[0],o={}.toString,p=[],q=0,r="MozAppearance"in l.style,s=r&&!!b.createRange().compareNode,t=s?l:n.parentNode,l=a.opera&&"[object Opera]"==o.call(a.opera),l=!!b.attachEvent&&!l,u=r?"object":l?"script":"img",v=l?"script":u,w=Array.isArray||function(a){return"[object Array]"==o.call(a)},x=[],y={},z={timeout:function(a,b){return b.length&&(a.timeout=b[0]),a}},A,B;B=function(a){function b(a){var a=a.split("!"),b=x.length,c=a.pop(),d=a.length,c={url:c,origUrl:c,prefixes:a},e,f,g;for(f=0;f<d;f++)g=a[f].split("="),(e=z[g.shift()])&&(c=e(c,g));for(f=0;f<b;f++)c=x[f](c);return c}function g(a,e,f,g,h){var i=b(a),j=i.autoCallback;i.url.split(".").pop().split("?").shift(),i.bypass||(e&&(e=d(e)?e:e[a]||e[g]||e[a.split("/").pop().split("?")[0]]),i.instead?i.instead(a,e,f,g,h):(y[i.url]?i.noexec=!0:y[i.url]=1,f.load(i.url,i.forceCSS||!i.forceJS&&"css"==i.url.split(".").pop().split("?").shift()?"c":c,i.noexec,i.attrs,i.timeout),(d(e)||d(j))&&f.load(function(){k(),e&&e(i.origUrl,h,g),j&&j(i.origUrl,h,g),y[i.url]=2})))}function h(a,b){function c(a,c){if(a){if(e(a))c||(j=function(){var a=[].slice.call(arguments);k.apply(this,a),l()}),g(a,j,b,0,h);else if(Object(a)===a)for(n in m=function(){var b=0,c;for(c in a)a.hasOwnProperty(c)&&b++;return b}(),a)a.hasOwnProperty(n)&&(!c&&!--m&&(d(j)?j=function(){var a=[].slice.call(arguments);k.apply(this,a),l()}:j[n]=function(a){return function(){var b=[].slice.call(arguments);a&&a.apply(this,b),l()}}(k[n])),g(a[n],j,b,n,h))}else!c&&l()}var h=!!a.test,i=a.load||a.both,j=a.callback||f,k=j,l=a.complete||f,m,n;c(h?a.yep:a.nope,!!i),i&&c(i)}var i,j,l=this.yepnope.loader;if(e(a))g(a,0,l,0);else if(w(a))for(i=0;i<a.length;i++)j=a[i],e(j)?g(j,0,l,0):w(j)?B(j):Object(j)===j&&h(j,l);else Object(a)===a&&h(a,l)},B.addPrefix=function(a,b){z[a]=b},B.addFilter=function(a){x.push(a)},B.errorTimeout=1e4,null==b.readyState&&b.addEventListener&&(b.readyState="loading",b.addEventListener("DOMContentLoaded",A=function(){b.removeEventListener("DOMContentLoaded",A,0),b.readyState="complete"},0)),a.yepnope=k(),a.yepnope.executeStack=h,a.yepnope.injectJs=function(a,c,d,e,i,j){var k=b.createElement("script"),l,o,e=e||B.errorTimeout;k.src=a;for(o in d)k.setAttribute(o,d[o]);c=j?h:c||f,k.onreadystatechange=k.onload=function(){!l&&g(k.readyState)&&(l=1,c(),k.onload=k.onreadystatechange=null)},m(function(){l||(l=1,c(1))},e),i?k.onload():n.parentNode.insertBefore(k,n)},a.yepnope.injectCss=function(a,c,d,e,g,i){var e=b.createElement("link"),j,c=i?h:c||f;e.href=a,e.rel="stylesheet",e.type="text/css";for(j in d)e.setAttribute(j,d[j]);g||(n.parentNode.insertBefore(e,n),m(c,0))}}(this,document),Modernizr.load=function(){yepnope.apply(window,[].slice.call(arguments,0))},Modernizr.addTest("filereader",function(){return!!(window.File&&window.FileList&&window.FileReader)}); \ No newline at end of file +;window.Modernizr=function(a,b,c){function B(a){j.cssText=a}function C(a,b){return B(m.join(a+";")+(b||""))}function D(a,b){return typeof a===b}function E(a,b){return!!~(""+a).indexOf(b)}function F(a,b){for(var d in a){var e=a[d];if(!E(e,"-")&&j[e]!==c)return b=="pfx"?e:!0}return!1}function G(a,b,d){for(var e in a){var f=b[a[e]];if(f!==c)return d===!1?a[e]:D(f,"function")?f.bind(d||b):f}return!1}function H(a,b,c){var d=a.charAt(0).toUpperCase()+a.slice(1),e=(a+" "+o.join(d+" ")+d).split(" ");return D(b,"string")||D(b,"undefined")?F(e,b):(e=(a+" "+p.join(d+" ")+d).split(" "),G(e,b,c))}var d="2.8.3",e={},f=!0,g=b.documentElement,h="modernizr",i=b.createElement(h),j=i.style,k,l={}.toString,m=" -webkit- -moz- -o- -ms- ".split(" "),n="Webkit Moz O ms",o=n.split(" "),p=n.toLowerCase().split(" "),q={},r={},s={},t=[],u=t.slice,v,w=function(a,c,d,e){var f,i,j,k,l=b.createElement("div"),m=b.body,n=m||b.createElement("body");if(parseInt(d,10))while(d--)j=b.createElement("div"),j.id=e?e[d]:h+(d+1),l.appendChild(j);return f=["­",'<style id="s',h,'">',a,"</style>"].join(""),l.id=h,(m?l:n).innerHTML+=f,n.appendChild(l),m||(n.style.background="",n.style.overflow="hidden",k=g.style.overflow,g.style.overflow="hidden",g.appendChild(n)),i=c(l,a),m?l.parentNode.removeChild(l):(n.parentNode.removeChild(n),g.style.overflow=k),!!i},x=function(b){var c=a.matchMedia||a.msMatchMedia;if(c)return c(b)&&c(b).matches||!1;var d;return w("@media "+b+" { #"+h+" { position: absolute; } }",function(b){d=(a.getComputedStyle?getComputedStyle(b,null):b.currentStyle)["position"]=="absolute"}),d},y=function(){function d(d,e){e=e||b.createElement(a[d]||"div"),d="on"+d;var f=d in e;return f||(e.setAttribute||(e=b.createElement("div")),e.setAttribute&&e.removeAttribute&&(e.setAttribute(d,""),f=D(e[d],"function"),D(e[d],"undefined")||(e[d]=c),e.removeAttribute(d))),e=null,f}var a={select:"input",change:"input",submit:"form",reset:"form",error:"img",load:"img",abort:"img"};return d}(),z={}.hasOwnProperty,A;!D(z,"undefined")&&!D(z.call,"undefined")?A=function(a,b){return z.call(a,b)}:A=function(a,b){return b in a&&D(a.constructor.prototype[b],"undefined")},Function.prototype.bind||(Function.prototype.bind=function(b){var c=this;if(typeof c!="function")throw new TypeError;var d=u.call(arguments,1),e=function(){if(this instanceof e){var a=function(){};a.prototype=c.prototype;var f=new a,g=c.apply(f,d.concat(u.call(arguments)));return Object(g)===g?g:f}return c.apply(b,d.concat(u.call(arguments)))};return e}),q.touch=function(){var c;return"ontouchstart"in a||a.DocumentTouch&&b instanceof DocumentTouch?c=!0:w(["@media (",m.join("touch-enabled),("),h,")","{#modernizr{top:9px;position:absolute}}"].join(""),function(a){c=a.offsetTop===9}),c},q.draganddrop=function(){var a=b.createElement("div");return"draggable"in a||"ondragstart"in a&&"ondrop"in a},q.cssanimations=function(){return H("animationName")},q.cssreflections=function(){return H("boxReflect")},q.csstransforms=function(){return!!H("transform")},q.csstransforms3d=function(){var a=!!H("perspective");return a&&"webkitPerspective"in g.style&&w("@media (transform-3d),(-webkit-transform-3d){#modernizr{left:9px;position:absolute;height:3px;}}",function(b,c){a=b.offsetLeft===9&&b.offsetHeight===3}),a},q.csstransitions=function(){return H("transition")};for(var I in q)A(q,I)&&(v=I.toLowerCase(),e[v]=q[I](),t.push((e[v]?"":"no-")+v));return e.addTest=function(a,b){if(typeof a=="object")for(var d in a)A(a,d)&&e.addTest(d,a[d]);else{a=a.toLowerCase();if(e[a]!==c)return e;b=typeof b=="function"?b():b,typeof f!="undefined"&&f&&(g.className+=" "+(b?"":"no-")+a),e[a]=b}return e},B(""),i=k=null,function(a,b){function l(a,b){var c=a.createElement("p"),d=a.getElementsByTagName("head")[0]||a.documentElement;return c.innerHTML="x<style>"+b+"</style>",d.insertBefore(c.lastChild,d.firstChild)}function m(){var a=s.elements;return typeof a=="string"?a.split(" "):a}function n(a){var b=j[a[h]];return b||(b={},i++,a[h]=i,j[i]=b),b}function o(a,c,d){c||(c=b);if(k)return c.createElement(a);d||(d=n(c));var g;return d.cache[a]?g=d.cache[a].cloneNode():f.test(a)?g=(d.cache[a]=d.createElem(a)).cloneNode():g=d.createElem(a),g.canHaveChildren&&!e.test(a)&&!g.tagUrn?d.frag.appendChild(g):g}function p(a,c){a||(a=b);if(k)return a.createDocumentFragment();c=c||n(a);var d=c.frag.cloneNode(),e=0,f=m(),g=f.length;for(;e<g;e++)d.createElement(f[e]);return d}function q(a,b){b.cache||(b.cache={},b.createElem=a.createElement,b.createFrag=a.createDocumentFragment,b.frag=b.createFrag()),a.createElement=function(c){return s.shivMethods?o(c,a,b):b.createElem(c)},a.createDocumentFragment=Function("h,f","return function(){var n=f.cloneNode(),c=n.createElement;h.shivMethods&&("+m().join().replace(/[\w\-]+/g,function(a){return b.createElem(a),b.frag.createElement(a),'c("'+a+'")'})+");return n}")(s,b.frag)}function r(a){a||(a=b);var c=n(a);return s.shivCSS&&!g&&!c.hasCSS&&(c.hasCSS=!!l(a,"article,aside,dialog,figcaption,figure,footer,header,hgroup,main,nav,section{display:block}mark{background:#FF0;color:#000}template{display:none}")),k||q(a,c),a}var c="3.7.0",d=a.html5||{},e=/^<|^(?:button|map|select|textarea|object|iframe|option|optgroup)$/i,f=/^(?:a|b|code|div|fieldset|h1|h2|h3|h4|h5|h6|i|label|li|ol|p|q|span|strong|style|table|tbody|td|th|tr|ul)$/i,g,h="_html5shiv",i=0,j={},k;(function(){try{var a=b.createElement("a");a.innerHTML="<xyz></xyz>",g="hidden"in a,k=a.childNodes.length==1||function(){b.createElement("a");var a=b.createDocumentFragment();return typeof a.cloneNode=="undefined"||typeof a.createDocumentFragment=="undefined"||typeof a.createElement=="undefined"}()}catch(c){g=!0,k=!0}})();var s={elements:d.elements||"abbr article aside audio bdi canvas data datalist details dialog figcaption figure footer header hgroup main mark meter nav output progress section summary template time video",version:c,shivCSS:d.shivCSS!==!1,supportsUnknownElements:k,shivMethods:d.shivMethods!==!1,type:"default",shivDocument:r,createElement:o,createDocumentFragment:p};a.html5=s,r(b)}(this,b),e._version=d,e._prefixes=m,e._domPrefixes=p,e._cssomPrefixes=o,e.mq=x,e.hasEvent=y,e.testProp=function(a){return F([a])},e.testAllProps=H,e.testStyles=w,e.prefixed=function(a,b,c){return b?H(a,b,c):H(a,"pfx")},g.className=g.className.replace(/(^|\s)no-js(\s|$)/,"$1$2")+(f?" js "+t.join(" "):""),e}(this,this.document),function(a,b,c){function d(a){return"[object Function]"==o.call(a)}function e(a){return"string"==typeof a}function f(){}function g(a){return!a||"loaded"==a||"complete"==a||"uninitialized"==a}function h(){var a=p.shift();q=1,a?a.t?m(function(){("c"==a.t?B.injectCss:B.injectJs)(a.s,0,a.a,a.x,a.e,1)},0):(a(),h()):q=0}function i(a,c,d,e,f,i,j){function k(b){if(!o&&g(l.readyState)&&(u.r=o=1,!q&&h(),l.onload=l.onreadystatechange=null,b)){"img"!=a&&m(function(){t.removeChild(l)},50);for(var d in y[c])y[c].hasOwnProperty(d)&&y[c][d].onload()}}var j=j||B.errorTimeout,l=b.createElement(a),o=0,r=0,u={t:d,s:c,e:f,a:i,x:j};1===y[c]&&(r=1,y[c]=[]),"object"==a?l.data=c:(l.src=c,l.type=a),l.width=l.height="0",l.onerror=l.onload=l.onreadystatechange=function(){k.call(this,r)},p.splice(e,0,u),"img"!=a&&(r||2===y[c]?(t.insertBefore(l,s?null:n),m(k,j)):y[c].push(l))}function j(a,b,c,d,f){return q=0,b=b||"j",e(a)?i("c"==b?v:u,a,b,this.i++,c,d,f):(p.splice(this.i++,0,a),1==p.length&&h()),this}function k(){var a=B;return a.loader={load:j,i:0},a}var l=b.documentElement,m=a.setTimeout,n=b.getElementsByTagName("script")[0],o={}.toString,p=[],q=0,r="MozAppearance"in l.style,s=r&&!!b.createRange().compareNode,t=s?l:n.parentNode,l=a.opera&&"[object Opera]"==o.call(a.opera),l=!!b.attachEvent&&!l,u=r?"object":l?"script":"img",v=l?"script":u,w=Array.isArray||function(a){return"[object Array]"==o.call(a)},x=[],y={},z={timeout:function(a,b){return b.length&&(a.timeout=b[0]),a}},A,B;B=function(a){function b(a){var a=a.split("!"),b=x.length,c=a.pop(),d=a.length,c={url:c,origUrl:c,prefixes:a},e,f,g;for(f=0;f<d;f++)g=a[f].split("="),(e=z[g.shift()])&&(c=e(c,g));for(f=0;f<b;f++)c=x[f](c);return c}function g(a,e,f,g,h){var i=b(a),j=i.autoCallback;i.url.split(".").pop().split("?").shift(),i.bypass||(e&&(e=d(e)?e:e[a]||e[g]||e[a.split("/").pop().split("?")[0]]),i.instead?i.instead(a,e,f,g,h):(y[i.url]?i.noexec=!0:y[i.url]=1,f.load(i.url,i.forceCSS||!i.forceJS&&"css"==i.url.split(".").pop().split("?").shift()?"c":c,i.noexec,i.attrs,i.timeout),(d(e)||d(j))&&f.load(function(){k(),e&&e(i.origUrl,h,g),j&&j(i.origUrl,h,g),y[i.url]=2})))}function h(a,b){function c(a,c){if(a){if(e(a))c||(j=function(){var a=[].slice.call(arguments);k.apply(this,a),l()}),g(a,j,b,0,h);else if(Object(a)===a)for(n in m=function(){var b=0,c;for(c in a)a.hasOwnProperty(c)&&b++;return b}(),a)a.hasOwnProperty(n)&&(!c&&!--m&&(d(j)?j=function(){var a=[].slice.call(arguments);k.apply(this,a),l()}:j[n]=function(a){return function(){var b=[].slice.call(arguments);a&&a.apply(this,b),l()}}(k[n])),g(a[n],j,b,n,h))}else!c&&l()}var h=!!a.test,i=a.load||a.both,j=a.callback||f,k=j,l=a.complete||f,m,n;c(h?a.yep:a.nope,!!i),i&&c(i)}var i,j,l=this.yepnope.loader;if(e(a))g(a,0,l,0);else if(w(a))for(i=0;i<a.length;i++)j=a[i],e(j)?g(j,0,l,0):w(j)?B(j):Object(j)===j&&h(j,l);else Object(a)===a&&h(a,l)},B.addPrefix=function(a,b){z[a]=b},B.addFilter=function(a){x.push(a)},B.errorTimeout=1e4,null==b.readyState&&b.addEventListener&&(b.readyState="loading",b.addEventListener("DOMContentLoaded",A=function(){b.removeEventListener("DOMContentLoaded",A,0),b.readyState="complete"},0)),a.yepnope=k(),a.yepnope.executeStack=h,a.yepnope.injectJs=function(a,c,d,e,i,j){var k=b.createElement("script"),l,o,e=e||B.errorTimeout;k.src=a;for(o in d)k.setAttribute(o,d[o]);c=j?h:c||f,k.onreadystatechange=k.onload=function(){!l&&g(k.readyState)&&(l=1,c(),k.onload=k.onreadystatechange=null)},m(function(){l||(l=1,c(1))},e),i?k.onload():n.parentNode.insertBefore(k,n)},a.yepnope.injectCss=function(a,c,d,e,g,i){var e=b.createElement("link"),j,c=i?h:c||f;e.href=a,e.rel="stylesheet",e.type="text/css";for(j in d)e.setAttribute(j,d[j]);g||(n.parentNode.insertBefore(e,n),m(c,0))}}(this,document),Modernizr.load=function(){yepnope.apply(window,[].slice.call(arguments,0))},Modernizr.addTest("filereader",function(){return!!(window.File&&window.FileList&&window.FileReader)}); \ No newline at end of file From c3360408bb6dbf98776770a68d6b3628a90a18e1 Mon Sep 17 00:00:00 2001 From: Dave Cranwell <david@torchbox.com> Date: Tue, 26 Aug 2014 17:11:44 +0100 Subject: [PATCH 074/210] added use of help-block. reformatted help blocks not to float, too much of a pain --- .../static/wagtailadmin/scss/components/typography.scss | 1 - .../templates/wagtailadmin/page_privacy/set_privacy.html | 2 +- 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/wagtail/wagtailadmin/static/wagtailadmin/scss/components/typography.scss b/wagtail/wagtailadmin/static/wagtailadmin/scss/components/typography.scss index 1b7e36324d..059392aaf8 100644 --- a/wagtail/wagtailadmin/static/wagtailadmin/scss/components/typography.scss +++ b/wagtail/wagtailadmin/static/wagtailadmin/scss/components/typography.scss @@ -56,7 +56,6 @@ kbd{ /* Help text formatters */ .help-block{ - float:left; padding:1em; margin:1em 0; clear:both; diff --git a/wagtail/wagtailadmin/templates/wagtailadmin/page_privacy/set_privacy.html b/wagtail/wagtailadmin/templates/wagtailadmin/page_privacy/set_privacy.html index 6298d6f5ff..263908a266 100644 --- a/wagtail/wagtailadmin/templates/wagtailadmin/page_privacy/set_privacy.html +++ b/wagtail/wagtailadmin/templates/wagtailadmin/page_privacy/set_privacy.html @@ -3,7 +3,7 @@ {% include "wagtailadmin/shared/header.html" with title=title_str icon="locked" %} <div class="nice-padding"> - <p>{% trans "<b>Note:</b> privacy changes apply to all children of this page too." %}</p> + <p class="help-block help-warning">{% trans "Privacy changes apply to all children of this page too." %}</p> <form action="{% url 'wagtailadmin_pages_set_privacy' page.id %}" method="POST"> {% csrf_token %} <ul class="fields"> From 53d3afe8dfa0ad17436cf87a0af25c6cd8bc53bd Mon Sep 17 00:00:00 2001 From: Dave Cranwell <david@torchbox.com> Date: Tue, 26 Aug 2014 17:18:42 +0100 Subject: [PATCH 075/210] is_restricted -> page_types_restricted. missing space added --- .../templates/wagtailadmin/chooser/_search_results.html | 4 ++-- .../wagtailadmin/templates/wagtailadmin/chooser/browse.html | 2 +- wagtail/wagtailadmin/views/chooser.py | 6 +++--- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/wagtail/wagtailadmin/templates/wagtailadmin/chooser/_search_results.html b/wagtail/wagtailadmin/templates/wagtailadmin/chooser/_search_results.html index 7554187ebf..62f911bf02 100644 --- a/wagtail/wagtailadmin/templates/wagtailadmin/chooser/_search_results.html +++ b/wagtail/wagtailadmin/templates/wagtailadmin/chooser/_search_results.html @@ -1,6 +1,6 @@ {% load i18n %} -{% if is_restricted %} +{% if page_types_restricted %} <p class="help-block help-warning"> {% blocktrans with type=page_type.get_verbose_name %} Only pages of type "{{ type }}" may be chosen for this field. Search results will exclude pages of other types. @@ -22,7 +22,7 @@ {% endif %} {% if pages %} - {% if is_searching%} + {% if is_searching %} {% include "wagtailadmin/pages/list.html" with choosing=1 show_parent=1 pages=pages parent_page=parent_page %} {% else %} {% include "wagtailadmin/pages/list.html" with choosing=1 allow_navigation=1 orderable=0 pages=pages parent_page=parent_page %} diff --git a/wagtail/wagtailadmin/templates/wagtailadmin/chooser/browse.html b/wagtail/wagtailadmin/templates/wagtailadmin/chooser/browse.html index 50e81c0f14..98f7582044 100644 --- a/wagtail/wagtailadmin/templates/wagtailadmin/chooser/browse.html +++ b/wagtail/wagtailadmin/templates/wagtailadmin/chooser/browse.html @@ -1,5 +1,5 @@ {% load i18n %} -{% if is_restricted %} +{% if page_types_restricted %} {% trans "Choose" as choose_str %} {% trans page_type.get_verbose_name as subtitle %} {% else %} diff --git a/wagtail/wagtailadmin/views/chooser.py b/wagtail/wagtailadmin/views/chooser.py index f075dd5405..1a2c9a1094 100644 --- a/wagtail/wagtailadmin/views/chooser.py +++ b/wagtail/wagtailadmin/views/chooser.py @@ -26,7 +26,7 @@ def browse(request, parent_page_id=None): content_type_app_name, content_type_model_name = page_type.split('.') is_searching = False - is_restricted = page_type != 'wagtailcore.page' + page_types_restricted = page_type != 'wagtailcore.page' try: content_type = ContentType.objects.get_by_natural_key(content_type_app_name, content_type_model_name) @@ -72,7 +72,7 @@ def browse(request, parent_page_id=None): 'is_searching': is_searching, 'page_type_string': page_type, 'page_type': desired_class, - 'is_restricted': is_restricted + 'page_types_restricted': page_types_restricted }) return render_modal_workflow(request, 'wagtailadmin/chooser/browse.html', 'wagtailadmin/chooser/browse.js', { @@ -85,7 +85,7 @@ def browse(request, parent_page_id=None): 'is_searching': False, 'page_type_string': page_type, 'page_type': desired_class, - 'is_restricted': is_restricted + 'page_types_restricted': page_types_restricted }) From bcff4958276d32251df8ba0accf921fdde04671a Mon Sep 17 00:00:00 2001 From: Karl Hobley <karl@torchbox.com> Date: Tue, 26 Aug 2014 17:22:32 +0100 Subject: [PATCH 076/210] Added versionchanged comment for indexed->index rename --- docs/core_components/search/for_python_developers.rst | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/docs/core_components/search/for_python_developers.rst b/docs/core_components/search/for_python_developers.rst index eecd5646a3..b254a2e1f9 100644 --- a/docs/core_components/search/for_python_developers.rst +++ b/docs/core_components/search/for_python_developers.rst @@ -37,6 +37,10 @@ Indexing extra fields The ``indexed_fields`` configuration format was replaced with ``search_fields`` +.. versionchanged:: 0.6 + + The ``wagtail.wagtailsearch.indexed`` module was renamed to ``wagtail.wagtailsearch.index`` + .. warning:: From 61278ddfcdc27b45fede3929a7d649e8a2433f4e Mon Sep 17 00:00:00 2001 From: Karl Hobley <karl@torchbox.com> Date: Wed, 27 Aug 2014 09:46:05 +0100 Subject: [PATCH 077/210] Updated migrations --- .../migrations/0003_auto_20140827_0401.py | 259 ++++++++++++++++++ .../wagtailcore/migrations/0001_initial.py | 62 ++--- .../wagtaildocs/migrations/0001_initial.py | 15 +- .../wagtailembeds/migrations/0001_initial.py | 6 +- .../wagtailforms/migrations/0001_initial.py | 4 +- .../wagtailimages/migrations/0001_initial.py | 36 +-- .../migrations/0001_initial.py | 14 +- .../wagtailsearch/migrations/0001_initial.py | 28 +- .../wagtailusers/migrations/0001_initial.py | 2 +- 9 files changed, 344 insertions(+), 82 deletions(-) create mode 100644 wagtail/tests/migrations/0003_auto_20140827_0401.py diff --git a/wagtail/tests/migrations/0003_auto_20140827_0401.py b/wagtail/tests/migrations/0003_auto_20140827_0401.py new file mode 100644 index 0000000000..61d7f2d5cd --- /dev/null +++ b/wagtail/tests/migrations/0003_auto_20140827_0401.py @@ -0,0 +1,259 @@ +# -*- coding: utf-8 -*- +from __future__ import unicode_literals + +from django.db import models, migrations +import modelcluster.fields +import django.db.models.deletion + + +class Migration(migrations.Migration): + + dependencies = [ + ('wagtailcore', '0002_initial_data'), + ('tests', '0002_auto_20140728_1636'), + ] + + operations = [ + migrations.CreateModel( + name='AdvertPlacement', + fields=[ + ('id', models.AutoField(auto_created=True, serialize=False, verbose_name='ID', primary_key=True)), + ('advert', models.ForeignKey(to='tests.Advert', related_name='+')), + ('page', modelcluster.fields.ParentalKey(to='wagtailcore.Page', related_name='advert_placements')), + ], + options={ + }, + bases=(models.Model,), + ), + migrations.AlterModelOptions( + name='eventpagecarouselitem', + options={'ordering': ['sort_order']}, + ), + migrations.AlterModelOptions( + name='eventpagerelatedlink', + options={'ordering': ['sort_order']}, + ), + migrations.AlterModelOptions( + name='eventpagespeaker', + options={'ordering': ['sort_order']}, + ), + migrations.AlterModelOptions( + name='formfield', + options={'ordering': ['sort_order']}, + ), + migrations.AlterField( + model_name='businesschild', + name='page_ptr', + field=models.OneToOneField(serialize=False, to='wagtailcore.Page', parent_link=True, auto_created=True, primary_key=True), + ), + migrations.AlterField( + model_name='businessindex', + name='page_ptr', + field=models.OneToOneField(serialize=False, to='wagtailcore.Page', parent_link=True, auto_created=True, primary_key=True), + ), + migrations.AlterField( + model_name='businesssubindex', + name='page_ptr', + field=models.OneToOneField(serialize=False, to='wagtailcore.Page', parent_link=True, auto_created=True, primary_key=True), + ), + migrations.AlterField( + model_name='customuser', + name='groups', + field=models.ManyToManyField(help_text='The groups this user belongs to. A user will get all permissions granted to each of his/her group.', to='auth.Group', related_name='user_set', related_query_name='user', blank=True, verbose_name='groups'), + ), + migrations.AlterField( + model_name='customuser', + name='user_permissions', + field=models.ManyToManyField(help_text='Specific permissions for this user.', to='auth.Permission', related_name='user_set', related_query_name='user', blank=True, verbose_name='user permissions'), + ), + migrations.AlterField( + model_name='eventindex', + name='page_ptr', + field=models.OneToOneField(serialize=False, to='wagtailcore.Page', parent_link=True, auto_created=True, primary_key=True), + ), + migrations.AlterField( + model_name='eventpage', + name='audience', + field=models.CharField(choices=[('public', 'Public'), ('private', 'Private')], max_length=255), + ), + migrations.AlterField( + model_name='eventpage', + name='date_from', + field=models.DateField(verbose_name='Start date', null=True), + ), + migrations.AlterField( + model_name='eventpage', + name='date_to', + field=models.DateField(help_text='Not required if event is on a single day', verbose_name='End date', null=True, blank=True), + ), + migrations.AlterField( + model_name='eventpage', + name='feed_image', + field=models.ForeignKey(to='wagtailimages.Image', on_delete=django.db.models.deletion.SET_NULL, related_name='+', null=True, blank=True), + ), + migrations.AlterField( + model_name='eventpage', + name='page_ptr', + field=models.OneToOneField(serialize=False, to='wagtailcore.Page', parent_link=True, auto_created=True, primary_key=True), + ), + migrations.AlterField( + model_name='eventpage', + name='time_from', + field=models.TimeField(verbose_name='Start time', null=True, blank=True), + ), + migrations.AlterField( + model_name='eventpage', + name='time_to', + field=models.TimeField(verbose_name='End time', null=True, blank=True), + ), + migrations.AlterField( + model_name='eventpagecarouselitem', + name='embed_url', + field=models.URLField(verbose_name='Embed URL', blank=True), + ), + migrations.AlterField( + model_name='eventpagecarouselitem', + name='image', + field=models.ForeignKey(to='wagtailimages.Image', on_delete=django.db.models.deletion.SET_NULL, related_name='+', null=True, blank=True), + ), + migrations.AlterField( + model_name='eventpagecarouselitem', + name='link_document', + field=models.ForeignKey(to='wagtaildocs.Document', related_name='+', null=True, blank=True), + ), + migrations.AlterField( + model_name='eventpagecarouselitem', + name='link_external', + field=models.URLField(verbose_name='External link', blank=True), + ), + migrations.AlterField( + model_name='eventpagecarouselitem', + name='link_page', + field=models.ForeignKey(to='wagtailcore.Page', related_name='+', null=True, blank=True), + ), + migrations.AlterField( + model_name='eventpagecarouselitem', + name='page', + field=modelcluster.fields.ParentalKey(to='tests.EventPage', related_name='carousel_items'), + ), + migrations.AlterField( + model_name='eventpagerelatedlink', + name='link_document', + field=models.ForeignKey(to='wagtaildocs.Document', related_name='+', null=True, blank=True), + ), + migrations.AlterField( + model_name='eventpagerelatedlink', + name='link_external', + field=models.URLField(verbose_name='External link', blank=True), + ), + migrations.AlterField( + model_name='eventpagerelatedlink', + name='link_page', + field=models.ForeignKey(to='wagtailcore.Page', related_name='+', null=True, blank=True), + ), + migrations.AlterField( + model_name='eventpagerelatedlink', + name='page', + field=modelcluster.fields.ParentalKey(to='tests.EventPage', related_name='related_links'), + ), + migrations.AlterField( + model_name='eventpagerelatedlink', + name='title', + field=models.CharField(max_length=255, help_text='Link title'), + ), + migrations.AlterField( + model_name='eventpagespeaker', + name='first_name', + field=models.CharField(max_length=255, verbose_name='Name', blank=True), + ), + migrations.AlterField( + model_name='eventpagespeaker', + name='image', + field=models.ForeignKey(to='wagtailimages.Image', on_delete=django.db.models.deletion.SET_NULL, related_name='+', null=True, blank=True), + ), + migrations.AlterField( + model_name='eventpagespeaker', + name='last_name', + field=models.CharField(max_length=255, verbose_name='Surname', blank=True), + ), + migrations.AlterField( + model_name='eventpagespeaker', + name='link_document', + field=models.ForeignKey(to='wagtaildocs.Document', related_name='+', null=True, blank=True), + ), + migrations.AlterField( + model_name='eventpagespeaker', + name='link_external', + field=models.URLField(verbose_name='External link', blank=True), + ), + migrations.AlterField( + model_name='eventpagespeaker', + name='link_page', + field=models.ForeignKey(to='wagtailcore.Page', related_name='+', null=True, blank=True), + ), + migrations.AlterField( + model_name='eventpagespeaker', + name='page', + field=modelcluster.fields.ParentalKey(to='tests.EventPage', related_name='speakers'), + ), + migrations.AlterField( + model_name='formfield', + name='field_type', + field=models.CharField(choices=[('singleline', 'Single line text'), ('multiline', 'Multi-line text'), ('email', 'Email'), ('number', 'Number'), ('url', 'URL'), ('checkbox', 'Checkbox'), ('checkboxes', 'Checkboxes'), ('dropdown', 'Drop down'), ('radio', 'Radio buttons'), ('date', 'Date'), ('datetime', 'Date/time')], max_length=16), + ), + migrations.AlterField( + model_name='formfield', + name='page', + field=modelcluster.fields.ParentalKey(to='tests.FormPage', related_name='form_fields'), + ), + migrations.AlterField( + model_name='formpage', + name='page_ptr', + field=models.OneToOneField(serialize=False, to='wagtailcore.Page', parent_link=True, auto_created=True, primary_key=True), + ), + migrations.AlterField( + model_name='pagewitholdstyleroutemethod', + name='page_ptr', + field=models.OneToOneField(serialize=False, to='wagtailcore.Page', parent_link=True, auto_created=True, primary_key=True), + ), + migrations.AlterField( + model_name='routablepagetest', + name='page_ptr', + field=models.OneToOneField(serialize=False, to='wagtailcore.Page', parent_link=True, auto_created=True, primary_key=True), + ), + migrations.AlterField( + model_name='searchtestchild', + name='searchtest_ptr', + field=models.OneToOneField(serialize=False, to='tests.SearchTest', parent_link=True, auto_created=True, primary_key=True), + ), + migrations.AlterField( + model_name='simplepage', + name='page_ptr', + field=models.OneToOneField(serialize=False, to='wagtailcore.Page', parent_link=True, auto_created=True, primary_key=True), + ), + migrations.AlterField( + model_name='standardchild', + name='page_ptr', + field=models.OneToOneField(serialize=False, to='wagtailcore.Page', parent_link=True, auto_created=True, primary_key=True), + ), + migrations.AlterField( + model_name='standardindex', + name='page_ptr', + field=models.OneToOneField(serialize=False, to='wagtailcore.Page', parent_link=True, auto_created=True, primary_key=True), + ), + migrations.AlterField( + model_name='taggedpage', + name='page_ptr', + field=models.OneToOneField(serialize=False, to='wagtailcore.Page', parent_link=True, auto_created=True, primary_key=True), + ), + migrations.AlterField( + model_name='taggedpagetag', + name='content_object', + field=modelcluster.fields.ParentalKey(to='tests.TaggedPage', related_name='tagged_items'), + ), + migrations.AlterField( + model_name='taggedpagetag', + name='tag', + field=models.ForeignKey(to='taggit.Tag', related_name='tests_taggedpagetag_items'), + ), + ] diff --git a/wagtail/wagtailcore/migrations/0001_initial.py b/wagtail/wagtailcore/migrations/0001_initial.py index 3cb27f59bc..304d533227 100644 --- a/wagtail/wagtailcore/migrations/0001_initial.py +++ b/wagtail/wagtailcore/migrations/0001_initial.py @@ -3,24 +3,24 @@ from __future__ import unicode_literals from django.db import models, migrations from django.conf import settings -import wagtail.wagtailsearch.indexed +import wagtail.wagtailsearch.index class Migration(migrations.Migration): dependencies = [ - ('contenttypes', '0001_initial'), - migrations.swappable_dependency(settings.AUTH_USER_MODEL), ('auth', '0001_initial'), + migrations.swappable_dependency(settings.AUTH_USER_MODEL), + ('contenttypes', '0001_initial'), ] operations = [ migrations.CreateModel( name='GroupPagePermission', fields=[ - ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)), - ('permission_type', models.CharField(max_length=20, choices=[(b'add', b'Add'), (b'edit', b'Edit'), (b'publish', b'Publish')])), - ('group', models.ForeignKey(to='auth.Group')), + ('id', models.AutoField(serialize=False, verbose_name='ID', primary_key=True, auto_created=True)), + ('permission_type', models.CharField(choices=[('add', 'Add'), ('edit', 'Edit'), ('publish', 'Publish')], max_length=20)), + ('group', models.ForeignKey(to='auth.Group', related_name='page_permissions')), ], options={ }, @@ -29,45 +29,39 @@ class Migration(migrations.Migration): migrations.CreateModel( name='Page', fields=[ - ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)), - ('path', models.CharField(unique=True, max_length=255)), + ('id', models.AutoField(serialize=False, verbose_name='ID', primary_key=True, auto_created=True)), + ('path', models.CharField(max_length=255, unique=True)), ('depth', models.PositiveIntegerField()), ('numchild', models.PositiveIntegerField(default=0)), - ('title', models.CharField(help_text="The page title as you'd like it to be seen by the public", max_length=255)), + ('title', models.CharField(max_length=255, help_text="The page title as you'd like it to be seen by the public")), ('slug', models.SlugField(help_text='The name of the page as it will appear in URLs e.g http://domain.com/blog/[my-slug]/')), ('live', models.BooleanField(default=True, editable=False)), ('has_unpublished_changes', models.BooleanField(default=False, editable=False)), - ('url_path', models.CharField(max_length=255, editable=False, blank=True)), - ('seo_title', models.CharField(help_text="Optional. 'Search Engine Friendly' title. This will appear at the top of the browser window.", max_length=255, verbose_name='Page title', blank=True)), + ('url_path', models.CharField(blank=True, max_length=255, editable=False)), + ('seo_title', models.CharField(blank=True, max_length=255, help_text="Optional. 'Search Engine Friendly' title. This will appear at the top of the browser window.", verbose_name='Page title')), ('show_in_menus', models.BooleanField(default=False, help_text='Whether a link to this page will appear in automatically generated menus')), ('search_description', models.TextField(blank=True)), - ('go_live_at', models.DateTimeField(help_text='Please add a date-time in the form YYYY-MM-DD hh:mm.', null=True, verbose_name='Go live date/time', blank=True)), - ('expire_at', models.DateTimeField(help_text='Please add a date-time in the form YYYY-MM-DD hh:mm.', null=True, verbose_name='Expiry date/time', blank=True)), + ('go_live_at', models.DateTimeField(blank=True, verbose_name='Go live date/time', null=True, help_text='Please add a date-time in the form YYYY-MM-DD hh:mm:ss.')), + ('expire_at', models.DateTimeField(blank=True, verbose_name='Expiry date/time', null=True, help_text='Please add a date-time in the form YYYY-MM-DD hh:mm:ss.')), ('expired', models.BooleanField(default=False, editable=False)), - ('content_type', models.ForeignKey(to='contenttypes.ContentType')), - ('owner', models.ForeignKey(blank=True, editable=False, to=settings.AUTH_USER_MODEL, null=True)), + ('content_type', models.ForeignKey(to='contenttypes.ContentType', related_name='pages')), + ('owner', models.ForeignKey(blank=True, null=True, to=settings.AUTH_USER_MODEL, editable=False, related_name='owned_pages')), ], options={ 'abstract': False, }, - bases=(models.Model, wagtail.wagtailsearch.indexed.Indexed), - ), - migrations.AddField( - model_name='grouppagepermission', - name='page', - field=models.ForeignKey(to='wagtailcore.Page'), - preserve_default=True, + bases=(models.Model, wagtail.wagtailsearch.index.Indexed), ), migrations.CreateModel( name='PageRevision', fields=[ - ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)), + ('id', models.AutoField(serialize=False, verbose_name='ID', primary_key=True, auto_created=True)), ('submitted_for_moderation', models.BooleanField(default=False)), ('created_at', models.DateTimeField(auto_now_add=True)), ('content_json', models.TextField()), - ('approved_go_live_at', models.DateTimeField(null=True, blank=True)), - ('page', models.ForeignKey(to='wagtailcore.Page')), - ('user', models.ForeignKey(blank=True, to=settings.AUTH_USER_MODEL, null=True)), + ('approved_go_live_at', models.DateTimeField(blank=True, null=True)), + ('page', models.ForeignKey(to='wagtailcore.Page', related_name='revisions')), + ('user', models.ForeignKey(blank=True, null=True, to=settings.AUTH_USER_MODEL)), ], options={ }, @@ -76,9 +70,9 @@ class Migration(migrations.Migration): migrations.CreateModel( name='PageViewRestriction', fields=[ - ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)), + ('id', models.AutoField(serialize=False, verbose_name='ID', primary_key=True, auto_created=True)), ('password', models.CharField(max_length=255)), - ('page', models.ForeignKey(to='wagtailcore.Page')), + ('page', models.ForeignKey(to='wagtailcore.Page', related_name='view_restrictions')), ], options={ }, @@ -87,11 +81,11 @@ class Migration(migrations.Migration): migrations.CreateModel( name='Site', fields=[ - ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)), + ('id', models.AutoField(serialize=False, verbose_name='ID', primary_key=True, auto_created=True)), ('hostname', models.CharField(max_length=255, db_index=True)), ('port', models.IntegerField(default=80, help_text='Set this to something other than 80 if you need a specific port number to appear in URLs (e.g. development on port 8000). Does not affect request handling (so port forwarding still works).')), ('is_default_site', models.BooleanField(default=False, help_text='If true, this site will handle requests for all other hostnames that do not have a site entry of their own')), - ('root_page', models.ForeignKey(to='wagtailcore.Page')), + ('root_page', models.ForeignKey(to='wagtailcore.Page', related_name='sites_rooted_here')), ], options={ }, @@ -99,6 +93,12 @@ class Migration(migrations.Migration): ), migrations.AlterUniqueTogether( name='site', - unique_together=set([(b'hostname', b'port')]), + unique_together=set([('hostname', 'port')]), + ), + migrations.AddField( + model_name='grouppagepermission', + name='page', + field=models.ForeignKey(to='wagtailcore.Page', related_name='group_permissions'), + preserve_default=True, ), ] diff --git a/wagtail/wagtaildocs/migrations/0001_initial.py b/wagtail/wagtaildocs/migrations/0001_initial.py index 2ca7257170..83eac36eab 100644 --- a/wagtail/wagtaildocs/migrations/0001_initial.py +++ b/wagtail/wagtaildocs/migrations/0001_initial.py @@ -2,16 +2,15 @@ from __future__ import unicode_literals from django.db import models, migrations -from django.conf import settings -import taggit.models -import wagtail.wagtailadmin.taggable import taggit.managers +from django.conf import settings +import wagtail.wagtailadmin.taggable class Migration(migrations.Migration): dependencies = [ - ('taggit', '__latest__'), + ('taggit', '0002_auto_20140827_0349'), migrations.swappable_dependency(settings.AUTH_USER_MODEL), ] @@ -19,12 +18,12 @@ class Migration(migrations.Migration): migrations.CreateModel( name='Document', fields=[ - ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)), + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), ('title', models.CharField(max_length=255, verbose_name='Title')), - ('file', models.FileField(upload_to=b'documents', verbose_name='File')), + ('file', models.FileField(upload_to='documents', verbose_name='File')), ('created_at', models.DateTimeField(auto_now_add=True)), - ('tags', taggit.managers.TaggableManager(to=taggit.models.Tag, through=taggit.models.TaggedItem, blank=True, help_text=None, verbose_name='Tags')), - ('uploaded_by_user', models.ForeignKey(blank=True, editable=False, to=settings.AUTH_USER_MODEL, null=True)), + ('tags', taggit.managers.TaggableManager(to='taggit.Tag', verbose_name='Tags', help_text=None, blank=True, through='taggit.TaggedItem')), + ('uploaded_by_user', models.ForeignKey(editable=False, null=True, blank=True, to=settings.AUTH_USER_MODEL)), ], options={ }, diff --git a/wagtail/wagtailembeds/migrations/0001_initial.py b/wagtail/wagtailembeds/migrations/0001_initial.py index e042c074cc..86b9e8d4b6 100644 --- a/wagtail/wagtailembeds/migrations/0001_initial.py +++ b/wagtail/wagtailembeds/migrations/0001_initial.py @@ -13,10 +13,10 @@ class Migration(migrations.Migration): migrations.CreateModel( name='Embed', fields=[ - ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)), + ('id', models.AutoField(verbose_name='ID', primary_key=True, auto_created=True, serialize=False)), ('url', models.URLField()), ('max_width', models.SmallIntegerField(null=True, blank=True)), - ('type', models.CharField(max_length=10, choices=[(b'video', b'Video'), (b'photo', b'Photo'), (b'link', b'Link'), (b'rich', b'Rich')])), + ('type', models.CharField(max_length=10, choices=[('video', 'Video'), ('photo', 'Photo'), ('link', 'Link'), ('rich', 'Rich')])), ('html', models.TextField(blank=True)), ('title', models.TextField(blank=True)), ('author_name', models.TextField(blank=True)), @@ -32,6 +32,6 @@ class Migration(migrations.Migration): ), migrations.AlterUniqueTogether( name='embed', - unique_together=set([(b'url', b'max_width')]), + unique_together=set([('url', 'max_width')]), ), ] diff --git a/wagtail/wagtailforms/migrations/0001_initial.py b/wagtail/wagtailforms/migrations/0001_initial.py index 868defc9e4..4b28f0ddf8 100644 --- a/wagtail/wagtailforms/migrations/0001_initial.py +++ b/wagtail/wagtailforms/migrations/0001_initial.py @@ -7,14 +7,14 @@ from django.db import models, migrations class Migration(migrations.Migration): dependencies = [ - ('wagtailcore', '0001_initial'), + ('wagtailcore', '0002_initial_data'), ] operations = [ migrations.CreateModel( name='FormSubmission', fields=[ - ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)), + ('id', models.AutoField(serialize=False, verbose_name='ID', primary_key=True, auto_created=True)), ('form_data', models.TextField()), ('submit_time', models.DateTimeField(auto_now_add=True)), ('page', models.ForeignKey(to='wagtailcore.Page')), diff --git a/wagtail/wagtailimages/migrations/0001_initial.py b/wagtail/wagtailimages/migrations/0001_initial.py index 0a72088d9b..64bb962573 100644 --- a/wagtail/wagtailimages/migrations/0001_initial.py +++ b/wagtail/wagtailimages/migrations/0001_initial.py @@ -2,12 +2,11 @@ from __future__ import unicode_literals from django.db import models, migrations -import taggit.models +import wagtail.wagtailimages.utils.validators import wagtail.wagtailimages.models -import wagtail.wagtailimages.utils -import wagtail.wagtailadmin.taggable -from django.conf import settings import taggit.managers +from django.conf import settings +import wagtail.wagtailadmin.taggable class Migration(migrations.Migration): @@ -21,8 +20,8 @@ class Migration(migrations.Migration): migrations.CreateModel( name='Filter', fields=[ - ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)), - ('spec', models.CharField(max_length=255, db_index=True)), + ('id', models.AutoField(primary_key=True, serialize=False, auto_created=True, verbose_name='ID')), + ('spec', models.CharField(db_index=True, max_length=255)), ], options={ }, @@ -31,14 +30,18 @@ class Migration(migrations.Migration): migrations.CreateModel( name='Image', fields=[ - ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)), - ('title', models.CharField(max_length=255, verbose_name='Title')), - ('file', models.ImageField(upload_to=wagtail.wagtailimages.models.get_upload_to, width_field=b'width', height_field=b'height', validators=[wagtail.wagtailimages.utils.validate_image_format], verbose_name='File')), + ('id', models.AutoField(primary_key=True, serialize=False, auto_created=True, verbose_name='ID')), + ('title', models.CharField(verbose_name='Title', max_length=255)), + ('file', models.ImageField(width_field='width', upload_to=wagtail.wagtailimages.models.get_upload_to, verbose_name='File', height_field='height', validators=[wagtail.wagtailimages.utils.validators.validate_image_format])), ('width', models.IntegerField(editable=False)), ('height', models.IntegerField(editable=False)), ('created_at', models.DateTimeField(auto_now_add=True)), - ('tags', taggit.managers.TaggableManager(to=taggit.models.Tag, through=taggit.models.TaggedItem, blank=True, help_text=None, verbose_name='Tags')), - ('uploaded_by_user', models.ForeignKey(blank=True, editable=False, to=settings.AUTH_USER_MODEL, null=True)), + ('focal_point_x', models.PositiveIntegerField(editable=False, null=True)), + ('focal_point_y', models.PositiveIntegerField(editable=False, null=True)), + ('focal_point_width', models.PositiveIntegerField(editable=False, null=True)), + ('focal_point_height', models.PositiveIntegerField(editable=False, null=True)), + ('tags', taggit.managers.TaggableManager(verbose_name='Tags', blank=True, help_text=None, to='taggit.Tag', through='taggit.TaggedItem')), + ('uploaded_by_user', models.ForeignKey(editable=False, blank=True, null=True, to=settings.AUTH_USER_MODEL)), ], options={ 'abstract': False, @@ -48,12 +51,13 @@ class Migration(migrations.Migration): migrations.CreateModel( name='Rendition', fields=[ - ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)), - ('file', models.ImageField(height_field=b'height', width_field=b'width', upload_to=b'images')), + ('id', models.AutoField(primary_key=True, serialize=False, auto_created=True, verbose_name='ID')), + ('file', models.ImageField(width_field='width', upload_to='images', height_field='height')), ('width', models.IntegerField(editable=False)), ('height', models.IntegerField(editable=False)), - ('filter', models.ForeignKey(to='wagtailimages.Filter')), - ('image', models.ForeignKey(to='wagtailimages.Image')), + ('focal_point_key', models.CharField(editable=False, max_length=255, null=True)), + ('filter', models.ForeignKey(related_name='+', to='wagtailimages.Filter')), + ('image', models.ForeignKey(related_name='renditions', to='wagtailimages.Image')), ], options={ }, @@ -61,6 +65,6 @@ class Migration(migrations.Migration): ), migrations.AlterUniqueTogether( name='rendition', - unique_together=set([(b'image', b'filter')]), + unique_together=set([('image', 'filter', 'focal_point_key')]), ), ] diff --git a/wagtail/wagtailredirects/migrations/0001_initial.py b/wagtail/wagtailredirects/migrations/0001_initial.py index 5fb2680207..98289544d0 100644 --- a/wagtail/wagtailredirects/migrations/0001_initial.py +++ b/wagtail/wagtailredirects/migrations/0001_initial.py @@ -7,19 +7,19 @@ from django.db import models, migrations class Migration(migrations.Migration): dependencies = [ - ('wagtailcore', '0001_initial'), + ('wagtailcore', '0002_initial_data'), ] operations = [ migrations.CreateModel( name='Redirect', fields=[ - ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)), - ('old_path', models.CharField(unique=True, max_length=255, verbose_name='Redirect from', db_index=True)), - ('is_permanent', models.BooleanField(default=True, help_text="Recommended. Permanent redirects ensure search engines forget the old page (the 'Redirect from') and index the new page instead.", verbose_name='Permanent')), - ('redirect_link', models.URLField(verbose_name='Redirect to any URL', blank=True)), - ('redirect_page', models.ForeignKey(verbose_name='Redirect to a page', blank=True, to='wagtailcore.Page', null=True)), - ('site', models.ForeignKey(blank=True, editable=False, to='wagtailcore.Site', null=True)), + ('id', models.AutoField(verbose_name='ID', auto_created=True, serialize=False, primary_key=True)), + ('old_path', models.CharField(verbose_name='Redirect from', max_length=255, unique=True, db_index=True)), + ('is_permanent', models.BooleanField(verbose_name='Permanent', default=True, help_text="Recommended. Permanent redirects ensure search engines forget the old page (the 'Redirect from') and index the new page instead.")), + ('redirect_link', models.URLField(blank=True, verbose_name='Redirect to any URL')), + ('redirect_page', models.ForeignKey(blank=True, null=True, verbose_name='Redirect to a page', to='wagtailcore.Page')), + ('site', models.ForeignKey(blank=True, to='wagtailcore.Site', editable=False, null=True, related_name='redirects')), ], options={ }, diff --git a/wagtail/wagtailsearch/migrations/0001_initial.py b/wagtail/wagtailsearch/migrations/0001_initial.py index ccf27a376d..eebd11a6a7 100644 --- a/wagtail/wagtailsearch/migrations/0001_initial.py +++ b/wagtail/wagtailsearch/migrations/0001_initial.py @@ -7,46 +7,40 @@ from django.db import models, migrations class Migration(migrations.Migration): dependencies = [ - ('wagtailcore', '0001_initial'), + ('wagtailcore', '0002_initial_data'), ] operations = [ migrations.CreateModel( name='EditorsPick', fields=[ - ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)), - ('sort_order', models.IntegerField(null=True, editable=False, blank=True)), + ('id', models.AutoField(serialize=False, auto_created=True, verbose_name='ID', primary_key=True)), + ('sort_order', models.IntegerField(blank=True, null=True, editable=False)), ('description', models.TextField(blank=True)), ('page', models.ForeignKey(to='wagtailcore.Page')), ], options={ - 'ordering': (b'sort_order',), + 'ordering': ('sort_order',), }, bases=(models.Model,), ), migrations.CreateModel( name='Query', fields=[ - ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)), + ('id', models.AutoField(serialize=False, auto_created=True, verbose_name='ID', primary_key=True)), ('query_string', models.CharField(unique=True, max_length=255)), ], options={ }, bases=(models.Model,), ), - migrations.AddField( - model_name='editorspick', - name='query', - field=models.ForeignKey(to='wagtailsearch.Query'), - preserve_default=True, - ), migrations.CreateModel( name='QueryDailyHits', fields=[ - ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)), + ('id', models.AutoField(serialize=False, auto_created=True, verbose_name='ID', primary_key=True)), ('date', models.DateField()), ('hits', models.IntegerField(default=0)), - ('query', models.ForeignKey(to='wagtailsearch.Query')), + ('query', models.ForeignKey(to='wagtailsearch.Query', related_name='daily_hits')), ], options={ }, @@ -54,6 +48,12 @@ class Migration(migrations.Migration): ), migrations.AlterUniqueTogether( name='querydailyhits', - unique_together=set([(b'query', b'date')]), + unique_together=set([('query', 'date')]), + ), + migrations.AddField( + model_name='editorspick', + name='query', + field=models.ForeignKey(to='wagtailsearch.Query', related_name='editors_picks'), + preserve_default=True, ), ] diff --git a/wagtail/wagtailusers/migrations/0001_initial.py b/wagtail/wagtailusers/migrations/0001_initial.py index 6855c6c576..e1968c0f1b 100644 --- a/wagtail/wagtailusers/migrations/0001_initial.py +++ b/wagtail/wagtailusers/migrations/0001_initial.py @@ -15,7 +15,7 @@ class Migration(migrations.Migration): migrations.CreateModel( name='UserProfile', fields=[ - ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)), + ('id', models.AutoField(serialize=False, verbose_name='ID', auto_created=True, primary_key=True)), ('submitted_notifications', models.BooleanField(default=True, help_text='Receive notification when a page is submitted for moderation')), ('approved_notifications', models.BooleanField(default=True, help_text='Receive notification when your page edit is approved')), ('rejected_notifications', models.BooleanField(default=True, help_text='Receive notification when your page edit is rejected')), From f4b247d8a5d5b5ce1fe6562ffa8618dc34dd91ab Mon Sep 17 00:00:00 2001 From: pvetch <paul.vetch@torchbox.com> Date: Wed, 27 Aug 2014 10:28:35 +0100 Subject: [PATCH 078/210] Update README.rst Fixed broken link to form builder docs --- README.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.rst b/README.rst index f067762218..88106719b7 100644 --- a/README.rst +++ b/README.rst @@ -24,7 +24,7 @@ Wagtail is a Django content management system built originally for the `Royal Co * Support for tree-based content organisation * Optional preview->submit->approve workflow * Fast out of the box. `Varnish <https://www.varnish-cache.org/>`_-friendly if you need it -* A simple `form builder <file:///home/karl/projects/wagtaildemo/wagtail/docs/_build/html/core_components/form_builder.html>`_ +* A simple `form builder <http://docs.wagtail.io/en/latest/core_components/form_builder.html>`_ * Optional `static site generation <http://docs.wagtail.io/en/latest/contrib_components/static_site_generation.html>`_ * Excellent `test coverage <https://coveralls.io/r/torchbox/wagtail?branch=master>`_ From 3a1099e33080e42e7f4f17e9c91b9576ff912627 Mon Sep 17 00:00:00 2001 From: Karl Hobley <karl@torchbox.com> Date: Wed, 27 Aug 2014 10:54:58 +0100 Subject: [PATCH 079/210] Make hooks and image formats importing work with Django 1.7 AppConfigs This also fixes #398 --- wagtail/tests/settings.py | 10 ++++++++- wagtail/utils/apps.py | 35 ++++++++++++++++++++++++++++++++ wagtail/wagtailcore/hooks.py | 15 +++----------- wagtail/wagtailimages/formats.py | 14 ++----------- 4 files changed, 49 insertions(+), 25 deletions(-) create mode 100644 wagtail/utils/apps.py diff --git a/wagtail/tests/settings.py b/wagtail/tests/settings.py index 32426dba64..da8863e668 100644 --- a/wagtail/tests/settings.py +++ b/wagtail/tests/settings.py @@ -68,7 +68,6 @@ INSTALLED_APPS = [ 'wagtail.wagtailimages', 'wagtail.wagtailembeds', 'wagtail.wagtailsearch', - 'wagtail.wagtailredirects', 'wagtail.wagtailforms', 'wagtail.contrib.wagtailstyleguide', 'wagtail.contrib.wagtailsitemaps', @@ -81,6 +80,15 @@ if django.VERSION[:2] == (1, 6): INSTALLED_APPS.append('south') +# If we are using Django 1.7 install wagtailredirects with its appconfig +# Theres nothing special about wagtailredirects, we just need to have one +# app which uses AppConfigs to test that hooks load properly + +if django.VERSION[:2] == (1, 6): + INSTALLED_APPS.append('wagtail.wagtailredirects') +else: + INSTALLED_APPS.append('wagtail.wagtailredirects.apps.WagtailRedirectsAppConfig') + # As we don't have south migrations for tests, South thinks # the Django 1.7 migrations are South migrations. SOUTH_MIGRATION_MODULES = { diff --git a/wagtail/utils/apps.py b/wagtail/utils/apps.py new file mode 100644 index 0000000000..05bf8aa756 --- /dev/null +++ b/wagtail/utils/apps.py @@ -0,0 +1,35 @@ +try: + from importlib import import_module +except ImportError: + # for Python 2.6, fall back on django.utils.importlib (deprecated as of Django 1.7) + from django.utils.importlib import import_module + +import django +from django.conf import settings +from django.utils.module_loading import module_has_submodule + + +def get_app_modules(): + """ + Generator function that yields a module object for each installed app + yields tuples of (app_name, module) + """ + if django.VERSION[:2] == (1, 6): + # Django 1.6 + for app in settings.INSTALLED_APPS: + yield app, import_module(app) + else: + # Django 1.7+ + from django.apps import apps + for app in apps.get_app_configs(): + yield app.name, app.module + + +def get_app_submodules(submodule_name): + """ + Searches each app module for the specified submodule + yields tuples of (app_name, module) + """ + for name, module in get_app_modules(): + if module_has_submodule(module, submodule_name): + yield name, import_module('%s.%s' % (name, submodule_name)) diff --git a/wagtail/wagtailcore/hooks.py b/wagtail/wagtailcore/hooks.py index 958675b973..41955b9d30 100644 --- a/wagtail/wagtailcore/hooks.py +++ b/wagtail/wagtailcore/hooks.py @@ -1,9 +1,5 @@ -from django.conf import settings -try: - from importlib import import_module -except ImportError: - # for Python 2.6, fall back on django.utils.importlib (deprecated as of Django 1.7) - from django.utils.importlib import import_module +from wagtail.utils.apps import get_app_submodules + _hooks = {} @@ -40,12 +36,7 @@ _searched_for_hooks = False def search_for_hooks(): global _searched_for_hooks if not _searched_for_hooks: - for app_module in settings.INSTALLED_APPS: - try: - import_module('%s.wagtail_hooks' % app_module) - except ImportError: - continue - + list(get_app_submodules('wagtail_hooks')) _searched_for_hooks = True diff --git a/wagtail/wagtailimages/formats.py b/wagtail/wagtailimages/formats.py index d00b65b44d..3c5644a078 100644 --- a/wagtail/wagtailimages/formats.py +++ b/wagtail/wagtailimages/formats.py @@ -1,11 +1,6 @@ -from django.conf import settings from django.utils.html import escape -try: - from importlib import import_module -except ImportError: - # for Python 2.6, fall back on django.utils.importlib (deprecated as of Django 1.7) - from django.utils.importlib import import_module +from wagtail.utils.apps import get_app_submodules class Format(object): @@ -85,12 +80,7 @@ _searched_for_image_formats = False def search_for_image_formats(): global _searched_for_image_formats if not _searched_for_image_formats: - for app_module in settings.INSTALLED_APPS: - try: - import_module('%s.image_formats' % app_module) - except ImportError: - continue - + list(get_app_submodules('image_formats')) _searched_for_image_formats = True From 1e0bd57415846e8f2b1abe8f203c42d85612e7fa Mon Sep 17 00:00:00 2001 From: Karl Hobley <karl@torchbox.com> Date: Wed, 27 Aug 2014 11:00:22 +0100 Subject: [PATCH 080/210] Fixed bad migration dependency --- wagtail/wagtaildocs/migrations/0001_initial.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/wagtail/wagtaildocs/migrations/0001_initial.py b/wagtail/wagtaildocs/migrations/0001_initial.py index 83eac36eab..dd8e4ac620 100644 --- a/wagtail/wagtaildocs/migrations/0001_initial.py +++ b/wagtail/wagtaildocs/migrations/0001_initial.py @@ -10,7 +10,7 @@ import wagtail.wagtailadmin.taggable class Migration(migrations.Migration): dependencies = [ - ('taggit', '0002_auto_20140827_0349'), + ('taggit', '__latest__'), migrations.swappable_dependency(settings.AUTH_USER_MODEL), ] From bab28400de8b04a9991ab4906a0be19c7db6caa0 Mon Sep 17 00:00:00 2001 From: Karl Hobley <karl@torchbox.com> Date: Wed, 27 Aug 2014 11:11:00 +0100 Subject: [PATCH 081/210] Updated django-taggit to 0.12.1 --- setup.py | 2 +- tox.ini | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/setup.py b/setup.py index 109db840a6..c722911ad2 100644 --- a/setup.py +++ b/setup.py @@ -28,7 +28,7 @@ install_requires = [ "django-compressor>=1.4", "django-libsass>=0.2", "django-modelcluster>=0.3", - "django-taggit==0.12.0", + "django-taggit==0.12.1", "django-treebeard==2.0", "Pillow>=2.3.0", "beautifulsoup4>=4.3.2", diff --git a/tox.ini b/tox.ini index c99af4570c..6377c0862b 100644 --- a/tox.ini +++ b/tox.ini @@ -4,7 +4,7 @@ base = django-compressor>=1.4 django-libsass>=0.2 django-modelcluster>=0.3 - django-taggit==0.12.0 + django-taggit==0.12.1 django-treebeard==2.0 Pillow>=2.3.0 beautifulsoup4>=4.3.2 From 68559e5cc1ad044b492b1042e1ff5eea8f165ae4 Mon Sep 17 00:00:00 2001 From: Matt Westcott <matt@west.co.tt> Date: Wed, 27 Aug 2014 11:22:05 +0100 Subject: [PATCH 082/210] release note for #506 --- docs/releases/0.6.rst | 1 + 1 file changed, 1 insertion(+) diff --git a/docs/releases/0.6.rst b/docs/releases/0.6.rst index aa0b29960b..2b86b58e87 100644 --- a/docs/releases/0.6.rst +++ b/docs/releases/0.6.rst @@ -19,6 +19,7 @@ Bug fixes ~~~~~~~~~ * Page URL generation now returns correct URLs for sites that have the main 'serve' view rooted somewhere other than '/'. + * Search results in the page chooser now respect the page_type parameter on PageChooserPanel. Upgrade considerations ====================== From 2db38a18c1902aff01ca5c59754ed392b195e4b2 Mon Sep 17 00:00:00 2001 From: Matt Westcott <matt@west.co.tt> Date: Wed, 27 Aug 2014 11:28:42 +0100 Subject: [PATCH 083/210] changelog entry for #506 --- CHANGELOG.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.txt b/CHANGELOG.txt index 14b1bcd1fb..c8b078992d 100644 --- a/CHANGELOG.txt +++ b/CHANGELOG.txt @@ -7,6 +7,7 @@ Changelog * Added RoutablePageMixin (@timheap) * Renamed wagtailsearch.indexed to wagtailsearch.index * Fix: Page URL generation now returns correct URLs for sites that have the main 'serve' view rooted somewhere other than '/' + * Fix: Search results in the page chooser now respect the page_type parameter on PageChooserPanel 0.5 (01.08.2014) ~~~~~~~~~~~~~~~~ From 52d7f2c6faf3672da0e6b9079d622698f4b88371 Mon Sep 17 00:00:00 2001 From: Karl Hobley <karl@torchbox.com> Date: Wed, 27 Aug 2014 12:12:03 +0100 Subject: [PATCH 084/210] Added failing test for #573 --- wagtail/wagtailimages/tests.py | 25 +++++++++++++++++++++++-- 1 file changed, 23 insertions(+), 2 deletions(-) diff --git a/wagtail/wagtailimages/tests.py b/wagtail/wagtailimages/tests.py index dabd5e0e8d..d040a922d8 100644 --- a/wagtail/wagtailimages/tests.py +++ b/wagtail/wagtailimages/tests.py @@ -32,7 +32,7 @@ from wagtail.tests.models import EventPage, EventPageCarouselItem from wagtail.wagtailcore.models import Page -def get_test_image_file(): +def get_test_image_file(filename='test.png'): from six import BytesIO from PIL import Image from django.core.files.images import ImageFile @@ -40,7 +40,7 @@ def get_test_image_file(): f = BytesIO() image = Image.new('RGB', (640, 480), 'white') image.save(f, 'PNG') - return ImageFile(f, name='test.png') + return ImageFile(f, name=filename) Image = get_image_model() @@ -1016,3 +1016,24 @@ class TestCropToPoint(TestCase): CropBox(125, 25, 275, 175), ) + +class TestIssue573(TestCase): + """ + This tests for a bug which causes filename limit on Renditions to be reached + when the Image has a long original filename and a big focal point key + """ + def test_issue_573(self): + # Create an image with a big filename and focal point + image = Image.objects.create( + title="Test image", + file=get_test_image_file('thisisaverylongfilename-abcdefghijklmnopqrstuvwxyz-supercalifragilisticexpialidocious.png'), + focal_point_x=1000, + focal_point_y=1000, + focal_point_width=1000, + focal_point_height=1000, + ) + + # Try creating a rendition from that image + # This would crash if the bug is present + image.get_rendition('fill-800x600') + From 01daf3fb74974429a733e8014e52d0733ae30f22 Mon Sep 17 00:00:00 2001 From: Karl Hobley <karl@torchbox.com> Date: Wed, 27 Aug 2014 12:28:08 +0100 Subject: [PATCH 085/210] Prevent rendition filenames going over 60 chars even with large focal point key. Fixes #573 --- wagtail/wagtailimages/models.py | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/wagtail/wagtailimages/models.py b/wagtail/wagtailimages/models.py index 63151b6022..88aa1ee1c3 100644 --- a/wagtail/wagtailimages/models.py +++ b/wagtail/wagtailimages/models.py @@ -161,10 +161,9 @@ class AbstractImage(models.Model, TagSearchable): input_filename_parts = os.path.basename(file_field.file.name).split('.') filename_without_extension = '.'.join(input_filename_parts[:-1]) - filename_without_extension = filename_without_extension[:60] # trim filename base so that we're well under 100 chars - output_filename_parts = [filename_without_extension, focal_point_key, filter.spec] + input_filename_parts[-1:] - output_filename = '.'.join(output_filename_parts) - + extension = '.'.join([focal_point_key, filter.spec] + input_filename_parts[-1:]) + filename_without_extension = filename_without_extension[:(59-len(extension))] # Truncate filename to prevent it going over 60 chars + output_filename = filename_without_extension + '.' + extension generated_image_file = File(generated_image, name=output_filename) if self.focal_point: From fa482d372ddc97529b3d96dff9a9dec10fd26fe9 Mon Sep 17 00:00:00 2001 From: Matt Westcott <matt@west.co.tt> Date: Wed, 27 Aug 2014 12:46:33 +0100 Subject: [PATCH 086/210] indexed -> index in EventPage --- wagtail/tests/models.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/wagtail/tests/models.py b/wagtail/tests/models.py index 1365d5213e..0fc74441ed 100644 --- a/wagtail/tests/models.py +++ b/wagtail/tests/models.py @@ -229,9 +229,9 @@ class EventPage(Page): ) search_fields = ( - indexed.SearchField('get_audience_display'), - indexed.SearchField('location'), - indexed.SearchField('body'), + index.SearchField('get_audience_display'), + index.SearchField('location'), + index.SearchField('body'), ) password_required_template = 'tests/event_page_password_required.html' From 558a8c829f66621ff79d0152c188deee9c356578 Mon Sep 17 00:00:00 2001 From: Karl Hobley <karl@torchbox.com> Date: Wed, 27 Aug 2014 12:49:43 +0100 Subject: [PATCH 087/210] Minor tweak to Indexed.get_search_fields() --- wagtail/wagtailsearch/index.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/wagtail/wagtailsearch/index.py b/wagtail/wagtailsearch/index.py index 52c53a6ae8..82790c5804 100644 --- a/wagtail/wagtailsearch/index.py +++ b/wagtail/wagtailsearch/index.py @@ -37,7 +37,7 @@ class Indexed(object): @classmethod def get_search_fields(cls): - return getattr(cls, 'search_fields', tuple()) + return cls.search_fields @classmethod def get_searchable_search_fields(cls): @@ -51,7 +51,7 @@ class Indexed(object): def get_indexed_objects(cls): return cls.objects.all() - indexed_fields = () + search_fields = () class BaseField(object): From e15134ecb3666e040cef427a4dc2a86067d671f9 Mon Sep 17 00:00:00 2001 From: Karl Hobley <karl@torchbox.com> Date: Wed, 27 Aug 2014 15:09:52 +0100 Subject: [PATCH 088/210] Remade migrations for tests app --- .../migrations/0002_auto_20140728_1636.py | 341 ---------------- .../migrations/0002_auto_20140827_0908.py | 386 ++++++++++++++++++ .../migrations/0003_auto_20140827_0401.py | 259 ------------ 3 files changed, 386 insertions(+), 600 deletions(-) delete mode 100644 wagtail/tests/migrations/0002_auto_20140728_1636.py create mode 100644 wagtail/tests/migrations/0002_auto_20140827_0908.py delete mode 100644 wagtail/tests/migrations/0003_auto_20140827_0401.py diff --git a/wagtail/tests/migrations/0002_auto_20140728_1636.py b/wagtail/tests/migrations/0002_auto_20140728_1636.py deleted file mode 100644 index 9725c0ebc3..0000000000 --- a/wagtail/tests/migrations/0002_auto_20140728_1636.py +++ /dev/null @@ -1,341 +0,0 @@ -# -*- coding: utf-8 -*- -from __future__ import unicode_literals - -from django.db import models, migrations -import django.db.models.deletion -import taggit.models -import wagtail.wagtailsearch.indexed -import modelcluster.fields -import wagtail.wagtailcore.fields -import modelcluster.tags -import wagtail.tests.models - - -class Migration(migrations.Migration): - - dependencies = [ - ('wagtailcore', '0002_initial_data'), - ('wagtaildocs', '0002_initial_data'), - ('wagtailimages', '0002_initial_data'), - ('taggit', '0001_initial'), - ('tests', '0001_initial'), - ] - - operations = [ - migrations.CreateModel( - name='Advert', - fields=[ - ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)), - ('url', models.URLField(null=True, blank=True)), - ('text', models.CharField(max_length=255)), - ], - options={ - }, - bases=(models.Model,), - ), - migrations.CreateModel( - name='AlphaSnippet', - fields=[ - ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)), - ('text', models.CharField(max_length=255)), - ], - options={ - }, - bases=(models.Model,), - ), - migrations.CreateModel( - name='BusinessChild', - fields=[ - ('page_ptr', models.OneToOneField(auto_created=True, primary_key=True, serialize=False, to='wagtailcore.Page')), - ], - options={ - 'abstract': False, - }, - bases=('wagtailcore.page',), - ), - migrations.CreateModel( - name='BusinessIndex', - fields=[ - ('page_ptr', models.OneToOneField(auto_created=True, primary_key=True, serialize=False, to='wagtailcore.Page')), - ], - options={ - 'abstract': False, - }, - bases=('wagtailcore.page',), - ), - migrations.CreateModel( - name='BusinessSubIndex', - fields=[ - ('page_ptr', models.OneToOneField(auto_created=True, primary_key=True, serialize=False, to='wagtailcore.Page')), - ], - options={ - 'abstract': False, - }, - bases=('wagtailcore.page',), - ), - migrations.CreateModel( - name='EventIndex', - fields=[ - ('page_ptr', models.OneToOneField(auto_created=True, primary_key=True, serialize=False, to='wagtailcore.Page')), - ('intro', wagtail.wagtailcore.fields.RichTextField(blank=True)), - ], - options={ - 'abstract': False, - }, - bases=('wagtailcore.page',), - ), - migrations.CreateModel( - name='EventPage', - fields=[ - ('page_ptr', models.OneToOneField(auto_created=True, primary_key=True, serialize=False, to='wagtailcore.Page')), - ('date_from', models.DateField(null=True, verbose_name=b'Start date')), - ('date_to', models.DateField(help_text=b'Not required if event is on a single day', null=True, verbose_name=b'End date', blank=True)), - ('time_from', models.TimeField(null=True, verbose_name=b'Start time', blank=True)), - ('time_to', models.TimeField(null=True, verbose_name=b'End time', blank=True)), - ('audience', models.CharField(max_length=255, choices=[(b'public', b'Public'), (b'private', b'Private')])), - ('location', models.CharField(max_length=255)), - ('body', wagtail.wagtailcore.fields.RichTextField(blank=True)), - ('cost', models.CharField(max_length=255)), - ('signup_link', models.URLField(blank=True)), - ('feed_image', models.ForeignKey(on_delete=django.db.models.deletion.SET_NULL, blank=True, to='wagtailimages.Image', null=True)), - ], - options={ - 'abstract': False, - }, - bases=('wagtailcore.page',), - ), - migrations.CreateModel( - name='EventPageCarouselItem', - fields=[ - ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)), - ('sort_order', models.IntegerField(null=True, editable=False, blank=True)), - ('link_external', models.URLField(verbose_name=b'External link', blank=True)), - ('embed_url', models.URLField(verbose_name=b'Embed URL', blank=True)), - ('caption', models.CharField(max_length=255, blank=True)), - ('image', models.ForeignKey(on_delete=django.db.models.deletion.SET_NULL, blank=True, to='wagtailimages.Image', null=True)), - ('link_document', models.ForeignKey(blank=True, to='wagtaildocs.Document', null=True)), - ('link_page', models.ForeignKey(blank=True, to='wagtailcore.Page', null=True)), - ('page', modelcluster.fields.ParentalKey(to='tests.EventPage')), - ], - options={ - 'ordering': [b'sort_order'], - 'abstract': False, - }, - bases=(models.Model,), - ), - migrations.CreateModel( - name='EventPageRelatedLink', - fields=[ - ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)), - ('sort_order', models.IntegerField(null=True, editable=False, blank=True)), - ('link_external', models.URLField(verbose_name=b'External link', blank=True)), - ('title', models.CharField(help_text=b'Link title', max_length=255)), - ('link_document', models.ForeignKey(blank=True, to='wagtaildocs.Document', null=True)), - ('link_page', models.ForeignKey(blank=True, to='wagtailcore.Page', null=True)), - ('page', modelcluster.fields.ParentalKey(to='tests.EventPage')), - ], - options={ - 'ordering': [b'sort_order'], - 'abstract': False, - }, - bases=(models.Model,), - ), - migrations.CreateModel( - name='EventPageSpeaker', - fields=[ - ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)), - ('sort_order', models.IntegerField(null=True, editable=False, blank=True)), - ('link_external', models.URLField(verbose_name=b'External link', blank=True)), - ('first_name', models.CharField(max_length=255, verbose_name=b'Name', blank=True)), - ('last_name', models.CharField(max_length=255, verbose_name=b'Surname', blank=True)), - ('image', models.ForeignKey(on_delete=django.db.models.deletion.SET_NULL, blank=True, to='wagtailimages.Image', null=True)), - ('link_document', models.ForeignKey(blank=True, to='wagtaildocs.Document', null=True)), - ('link_page', models.ForeignKey(blank=True, to='wagtailcore.Page', null=True)), - ('page', modelcluster.fields.ParentalKey(to='tests.EventPage')), - ], - options={ - 'ordering': [b'sort_order'], - 'abstract': False, - }, - bases=(models.Model,), - ), - migrations.CreateModel( - name='FormField', - fields=[ - ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)), - ('sort_order', models.IntegerField(null=True, editable=False, blank=True)), - ('label', models.CharField(help_text='The label of the form field', max_length=255)), - ('field_type', models.CharField(max_length=16, choices=[(b'singleline', 'Single line text'), (b'multiline', 'Multi-line text'), (b'email', 'Email'), (b'number', 'Number'), (b'url', 'URL'), (b'checkbox', 'Checkbox'), (b'checkboxes', 'Checkboxes'), (b'dropdown', 'Drop down'), (b'radio', 'Radio buttons'), (b'date', 'Date'), (b'datetime', 'Date/time')])), - ('required', models.BooleanField(default=True)), - ('choices', models.CharField(help_text='Comma seperated list of choices. Only applicable in checkboxes, radio and dropdown.', max_length=512, blank=True)), - ('default_value', models.CharField(help_text='Default value. Comma seperated values supported for checkboxes.', max_length=255, blank=True)), - ('help_text', models.CharField(max_length=255, blank=True)), - ], - options={ - 'ordering': [b'sort_order'], - 'abstract': False, - }, - bases=(models.Model,), - ), - migrations.CreateModel( - name='FormPage', - fields=[ - ('page_ptr', models.OneToOneField(auto_created=True, primary_key=True, serialize=False, to='wagtailcore.Page')), - ('to_address', models.CharField(help_text='Optional - form submissions will be emailed to this address', max_length=255, blank=True)), - ('from_address', models.CharField(max_length=255, blank=True)), - ('subject', models.CharField(max_length=255, blank=True)), - ], - options={ - 'abstract': False, - }, - bases=('wagtailcore.page',), - ), - migrations.AddField( - model_name='formfield', - name='page', - field=modelcluster.fields.ParentalKey(to='tests.FormPage'), - preserve_default=True, - ), - migrations.CreateModel( - name='PageWithOldStyleRouteMethod', - fields=[ - ('page_ptr', models.OneToOneField(auto_created=True, primary_key=True, serialize=False, to='wagtailcore.Page')), - ('content', models.TextField()), - ], - options={ - 'abstract': False, - }, - bases=('wagtailcore.page',), - ), - migrations.CreateModel( - name='RoutablePageTest', - fields=[ - ('page_ptr', models.OneToOneField(auto_created=True, primary_key=True, serialize=False, to='wagtailcore.Page')), - ], - options={ - 'abstract': False, - }, - bases=('wagtailcore.page',), - ), - migrations.CreateModel( - name='SearchTest', - fields=[ - ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)), - ('title', models.CharField(max_length=255)), - ('content', models.TextField()), - ('live', models.BooleanField(default=False)), - ('published_date', models.DateField(null=True)), - ], - options={ - }, - bases=(models.Model, wagtail.wagtailsearch.indexed.Indexed), - ), - migrations.CreateModel( - name='SearchTestChild', - fields=[ - ('searchtest_ptr', models.OneToOneField(auto_created=True, primary_key=True, serialize=False, to='tests.SearchTest')), - ('subtitle', models.CharField(max_length=255, null=True, blank=True)), - ('extra_content', models.TextField()), - ], - options={ - }, - bases=('tests.searchtest',), - ), - migrations.CreateModel( - name='SearchTestOldConfig', - fields=[ - ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)), - ], - options={ - }, - bases=(models.Model, wagtail.wagtailsearch.indexed.Indexed), - ), - migrations.CreateModel( - name='SearchTestOldConfigList', - fields=[ - ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)), - ], - options={ - }, - bases=(models.Model, wagtail.wagtailsearch.indexed.Indexed), - ), - migrations.CreateModel( - name='SimplePage', - fields=[ - ('page_ptr', models.OneToOneField(auto_created=True, primary_key=True, serialize=False, to='wagtailcore.Page')), - ('content', models.TextField()), - ], - options={ - 'abstract': False, - }, - bases=('wagtailcore.page',), - ), - migrations.CreateModel( - name='StandardChild', - fields=[ - ('page_ptr', models.OneToOneField(auto_created=True, primary_key=True, serialize=False, to='wagtailcore.Page')), - ], - options={ - 'abstract': False, - }, - bases=('wagtailcore.page',), - ), - migrations.CreateModel( - name='StandardIndex', - fields=[ - ('page_ptr', models.OneToOneField(auto_created=True, primary_key=True, serialize=False, to='wagtailcore.Page')), - ], - options={ - 'abstract': False, - }, - bases=('wagtailcore.page',), - ), - migrations.CreateModel( - name='TaggedPage', - fields=[ - ('page_ptr', models.OneToOneField(auto_created=True, primary_key=True, serialize=False, to='wagtailcore.Page')), - ], - options={ - 'abstract': False, - }, - bases=('wagtailcore.page',), - ), - migrations.CreateModel( - name='TaggedPageTag', - fields=[ - ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)), - ], - options={ - 'abstract': False, - }, - bases=(models.Model,), - ), - migrations.AddField( - model_name='taggedpage', - name='tags', - field=modelcluster.tags.ClusterTaggableManager(to=taggit.models.Tag, through=wagtail.tests.models.TaggedPageTag, blank=True, help_text='A comma-separated list of tags.', verbose_name='Tags'), - preserve_default=True, - ), - migrations.AddField( - model_name='taggedpagetag', - name='content_object', - field=modelcluster.fields.ParentalKey(to='tests.TaggedPage'), - preserve_default=True, - ), - migrations.AddField( - model_name='taggedpagetag', - name='tag', - field=models.ForeignKey(to='taggit.Tag'), - preserve_default=True, - ), - migrations.CreateModel( - name='ZuluSnippet', - fields=[ - ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)), - ('text', models.CharField(max_length=255)), - ], - options={ - }, - bases=(models.Model,), - ), - ] diff --git a/wagtail/tests/migrations/0002_auto_20140827_0908.py b/wagtail/tests/migrations/0002_auto_20140827_0908.py new file mode 100644 index 0000000000..c5f12fa72e --- /dev/null +++ b/wagtail/tests/migrations/0002_auto_20140827_0908.py @@ -0,0 +1,386 @@ +# -*- coding: utf-8 -*- +from __future__ import unicode_literals + +from django.db import models, migrations +import django.db.models.deletion +import modelcluster.fields +import wagtail.contrib.wagtailroutablepage.models +import wagtail.wagtailcore.fields +import wagtail.wagtailsearch.index +import modelcluster.tags + + +class Migration(migrations.Migration): + + dependencies = [ + ('wagtailcore', '0002_initial_data'), + ('wagtaildocs', '0002_initial_data'), + ('taggit', '0002_auto_20140827_0349'), + ('wagtailimages', '0002_initial_data'), + ('tests', '0001_initial'), + ] + + operations = [ + migrations.CreateModel( + name='Advert', + fields=[ + ('id', models.AutoField(auto_created=True, verbose_name='ID', primary_key=True, serialize=False)), + ('url', models.URLField(null=True, blank=True)), + ('text', models.CharField(max_length=255)), + ], + options={ + }, + bases=(models.Model,), + ), + migrations.CreateModel( + name='AdvertPlacement', + fields=[ + ('id', models.AutoField(auto_created=True, verbose_name='ID', primary_key=True, serialize=False)), + ('advert', models.ForeignKey(to='tests.Advert', related_name='+')), + ], + options={ + }, + bases=(models.Model,), + ), + migrations.CreateModel( + name='AlphaSnippet', + fields=[ + ('id', models.AutoField(auto_created=True, verbose_name='ID', primary_key=True, serialize=False)), + ('text', models.CharField(max_length=255)), + ], + options={ + }, + bases=(models.Model,), + ), + migrations.CreateModel( + name='BusinessChild', + fields=[ + ('page_ptr', models.OneToOneField(parent_link=True, to='wagtailcore.Page', serialize=False, auto_created=True, primary_key=True)), + ], + options={ + 'abstract': False, + }, + bases=('wagtailcore.page',), + ), + migrations.CreateModel( + name='BusinessIndex', + fields=[ + ('page_ptr', models.OneToOneField(parent_link=True, to='wagtailcore.Page', serialize=False, auto_created=True, primary_key=True)), + ], + options={ + 'abstract': False, + }, + bases=('wagtailcore.page',), + ), + migrations.CreateModel( + name='BusinessSubIndex', + fields=[ + ('page_ptr', models.OneToOneField(parent_link=True, to='wagtailcore.Page', serialize=False, auto_created=True, primary_key=True)), + ], + options={ + 'abstract': False, + }, + bases=('wagtailcore.page',), + ), + migrations.CreateModel( + name='EventIndex', + fields=[ + ('page_ptr', models.OneToOneField(parent_link=True, to='wagtailcore.Page', serialize=False, auto_created=True, primary_key=True)), + ('intro', wagtail.wagtailcore.fields.RichTextField(blank=True)), + ], + options={ + 'abstract': False, + }, + bases=('wagtailcore.page',), + ), + migrations.CreateModel( + name='EventPage', + fields=[ + ('page_ptr', models.OneToOneField(parent_link=True, to='wagtailcore.Page', serialize=False, auto_created=True, primary_key=True)), + ('date_from', models.DateField(null=True, verbose_name='Start date')), + ('date_to', models.DateField(null=True, help_text='Not required if event is on a single day', blank=True, verbose_name='End date')), + ('time_from', models.TimeField(null=True, blank=True, verbose_name='Start time')), + ('time_to', models.TimeField(null=True, blank=True, verbose_name='End time')), + ('audience', models.CharField(choices=[('public', 'Public'), ('private', 'Private')], max_length=255)), + ('location', models.CharField(max_length=255)), + ('body', wagtail.wagtailcore.fields.RichTextField(blank=True)), + ('cost', models.CharField(max_length=255)), + ('signup_link', models.URLField(blank=True)), + ('feed_image', models.ForeignKey(related_name='+', blank=True, to='wagtailimages.Image', on_delete=django.db.models.deletion.SET_NULL, null=True)), + ], + options={ + 'abstract': False, + }, + bases=('wagtailcore.page',), + ), + migrations.CreateModel( + name='EventPageCarouselItem', + fields=[ + ('id', models.AutoField(auto_created=True, verbose_name='ID', primary_key=True, serialize=False)), + ('sort_order', models.IntegerField(null=True, blank=True, editable=False)), + ('link_external', models.URLField(blank=True, verbose_name='External link')), + ('embed_url', models.URLField(blank=True, verbose_name='Embed URL')), + ('caption', models.CharField(blank=True, max_length=255)), + ('image', models.ForeignKey(related_name='+', blank=True, to='wagtailimages.Image', on_delete=django.db.models.deletion.SET_NULL, null=True)), + ('link_document', models.ForeignKey(related_name='+', blank=True, to='wagtaildocs.Document', null=True)), + ], + options={ + 'abstract': False, + 'ordering': ['sort_order'], + }, + bases=(models.Model,), + ), + migrations.CreateModel( + name='EventPageRelatedLink', + fields=[ + ('id', models.AutoField(auto_created=True, verbose_name='ID', primary_key=True, serialize=False)), + ('sort_order', models.IntegerField(null=True, blank=True, editable=False)), + ('link_external', models.URLField(blank=True, verbose_name='External link')), + ('title', models.CharField(help_text='Link title', max_length=255)), + ('link_document', models.ForeignKey(related_name='+', blank=True, to='wagtaildocs.Document', null=True)), + ], + options={ + 'abstract': False, + 'ordering': ['sort_order'], + }, + bases=(models.Model,), + ), + migrations.CreateModel( + name='EventPageSpeaker', + fields=[ + ('id', models.AutoField(auto_created=True, verbose_name='ID', primary_key=True, serialize=False)), + ('sort_order', models.IntegerField(null=True, blank=True, editable=False)), + ('link_external', models.URLField(blank=True, verbose_name='External link')), + ('first_name', models.CharField(blank=True, verbose_name='Name', max_length=255)), + ('last_name', models.CharField(blank=True, verbose_name='Surname', max_length=255)), + ('image', models.ForeignKey(related_name='+', blank=True, to='wagtailimages.Image', on_delete=django.db.models.deletion.SET_NULL, null=True)), + ('link_document', models.ForeignKey(related_name='+', blank=True, to='wagtaildocs.Document', null=True)), + ], + options={ + 'abstract': False, + 'ordering': ['sort_order'], + }, + bases=(models.Model,), + ), + migrations.CreateModel( + name='FormField', + fields=[ + ('id', models.AutoField(auto_created=True, verbose_name='ID', primary_key=True, serialize=False)), + ('sort_order', models.IntegerField(null=True, blank=True, editable=False)), + ('label', models.CharField(help_text='The label of the form field', max_length=255)), + ('field_type', models.CharField(choices=[('singleline', 'Single line text'), ('multiline', 'Multi-line text'), ('email', 'Email'), ('number', 'Number'), ('url', 'URL'), ('checkbox', 'Checkbox'), ('checkboxes', 'Checkboxes'), ('dropdown', 'Drop down'), ('radio', 'Radio buttons'), ('date', 'Date'), ('datetime', 'Date/time')], max_length=16)), + ('required', models.BooleanField(default=True)), + ('choices', models.CharField(blank=True, help_text='Comma seperated list of choices. Only applicable in checkboxes, radio and dropdown.', max_length=512)), + ('default_value', models.CharField(blank=True, help_text='Default value. Comma seperated values supported for checkboxes.', max_length=255)), + ('help_text', models.CharField(blank=True, max_length=255)), + ], + options={ + 'abstract': False, + 'ordering': ['sort_order'], + }, + bases=(models.Model,), + ), + migrations.CreateModel( + name='FormPage', + fields=[ + ('page_ptr', models.OneToOneField(parent_link=True, to='wagtailcore.Page', serialize=False, auto_created=True, primary_key=True)), + ('to_address', models.CharField(blank=True, help_text='Optional - form submissions will be emailed to this address', max_length=255)), + ('from_address', models.CharField(blank=True, max_length=255)), + ('subject', models.CharField(blank=True, max_length=255)), + ], + options={ + 'abstract': False, + }, + bases=('wagtailcore.page',), + ), + migrations.CreateModel( + name='PageWithOldStyleRouteMethod', + fields=[ + ('page_ptr', models.OneToOneField(parent_link=True, to='wagtailcore.Page', serialize=False, auto_created=True, primary_key=True)), + ('content', models.TextField()), + ], + options={ + 'abstract': False, + }, + bases=('wagtailcore.page',), + ), + migrations.CreateModel( + name='RoutablePageTest', + fields=[ + ('page_ptr', models.OneToOneField(parent_link=True, to='wagtailcore.Page', serialize=False, auto_created=True, primary_key=True)), + ], + options={ + 'abstract': False, + }, + bases=(wagtail.contrib.wagtailroutablepage.models.RoutablePageMixin, 'wagtailcore.page'), + ), + migrations.CreateModel( + name='SearchTest', + fields=[ + ('id', models.AutoField(auto_created=True, verbose_name='ID', primary_key=True, serialize=False)), + ('title', models.CharField(max_length=255)), + ('content', models.TextField()), + ('live', models.BooleanField(default=False)), + ('published_date', models.DateField(null=True)), + ], + options={ + }, + bases=(models.Model, wagtail.wagtailsearch.index.Indexed), + ), + migrations.CreateModel( + name='SearchTestChild', + fields=[ + ('searchtest_ptr', models.OneToOneField(parent_link=True, to='tests.SearchTest', serialize=False, auto_created=True, primary_key=True)), + ('subtitle', models.CharField(null=True, blank=True, max_length=255)), + ('extra_content', models.TextField()), + ], + options={ + }, + bases=('tests.searchtest',), + ), + migrations.CreateModel( + name='SearchTestOldConfig', + fields=[ + ('id', models.AutoField(auto_created=True, verbose_name='ID', primary_key=True, serialize=False)), + ], + options={ + }, + bases=(models.Model, wagtail.wagtailsearch.index.Indexed), + ), + migrations.CreateModel( + name='SearchTestOldConfigList', + fields=[ + ('id', models.AutoField(auto_created=True, verbose_name='ID', primary_key=True, serialize=False)), + ], + options={ + }, + bases=(models.Model, wagtail.wagtailsearch.index.Indexed), + ), + migrations.CreateModel( + name='SimplePage', + fields=[ + ('page_ptr', models.OneToOneField(parent_link=True, to='wagtailcore.Page', serialize=False, auto_created=True, primary_key=True)), + ('content', models.TextField()), + ], + options={ + 'abstract': False, + }, + bases=('wagtailcore.page',), + ), + migrations.CreateModel( + name='StandardChild', + fields=[ + ('page_ptr', models.OneToOneField(parent_link=True, to='wagtailcore.Page', serialize=False, auto_created=True, primary_key=True)), + ], + options={ + 'abstract': False, + }, + bases=('wagtailcore.page',), + ), + migrations.CreateModel( + name='StandardIndex', + fields=[ + ('page_ptr', models.OneToOneField(parent_link=True, to='wagtailcore.Page', serialize=False, auto_created=True, primary_key=True)), + ], + options={ + 'abstract': False, + }, + bases=('wagtailcore.page',), + ), + migrations.CreateModel( + name='TaggedPage', + fields=[ + ('page_ptr', models.OneToOneField(parent_link=True, to='wagtailcore.Page', serialize=False, auto_created=True, primary_key=True)), + ], + options={ + 'abstract': False, + }, + bases=('wagtailcore.page',), + ), + migrations.CreateModel( + name='TaggedPageTag', + fields=[ + ('id', models.AutoField(auto_created=True, verbose_name='ID', primary_key=True, serialize=False)), + ('content_object', modelcluster.fields.ParentalKey(to='tests.TaggedPage', related_name='tagged_items')), + ('tag', models.ForeignKey(to='taggit.Tag', related_name='tests_taggedpagetag_items')), + ], + options={ + 'abstract': False, + }, + bases=(models.Model,), + ), + migrations.CreateModel( + name='ZuluSnippet', + fields=[ + ('id', models.AutoField(auto_created=True, verbose_name='ID', primary_key=True, serialize=False)), + ('text', models.CharField(max_length=255)), + ], + options={ + }, + bases=(models.Model,), + ), + migrations.AddField( + model_name='taggedpage', + name='tags', + field=modelcluster.tags.ClusterTaggableManager(through='tests.TaggedPageTag', blank=True, verbose_name='Tags', to='taggit.Tag', help_text='A comma-separated list of tags.'), + preserve_default=True, + ), + migrations.AddField( + model_name='formfield', + name='page', + field=modelcluster.fields.ParentalKey(to='tests.FormPage', related_name='form_fields'), + preserve_default=True, + ), + migrations.AddField( + model_name='eventpagespeaker', + name='link_page', + field=models.ForeignKey(related_name='+', blank=True, to='wagtailcore.Page', null=True), + preserve_default=True, + ), + migrations.AddField( + model_name='eventpagespeaker', + name='page', + field=modelcluster.fields.ParentalKey(to='tests.EventPage', related_name='speakers'), + preserve_default=True, + ), + migrations.AddField( + model_name='eventpagerelatedlink', + name='link_page', + field=models.ForeignKey(related_name='+', blank=True, to='wagtailcore.Page', null=True), + preserve_default=True, + ), + migrations.AddField( + model_name='eventpagerelatedlink', + name='page', + field=modelcluster.fields.ParentalKey(to='tests.EventPage', related_name='related_links'), + preserve_default=True, + ), + migrations.AddField( + model_name='eventpagecarouselitem', + name='link_page', + field=models.ForeignKey(related_name='+', blank=True, to='wagtailcore.Page', null=True), + preserve_default=True, + ), + migrations.AddField( + model_name='eventpagecarouselitem', + name='page', + field=modelcluster.fields.ParentalKey(to='tests.EventPage', related_name='carousel_items'), + preserve_default=True, + ), + migrations.AddField( + model_name='advertplacement', + name='page', + field=modelcluster.fields.ParentalKey(to='wagtailcore.Page', related_name='advert_placements'), + preserve_default=True, + ), + migrations.AlterField( + model_name='customuser', + name='groups', + field=models.ManyToManyField(related_name='user_set', blank=True, verbose_name='groups', to='auth.Group', related_query_name='user', help_text='The groups this user belongs to. A user will get all permissions granted to each of his/her group.'), + ), + migrations.AlterField( + model_name='customuser', + name='user_permissions', + field=models.ManyToManyField(related_name='user_set', blank=True, verbose_name='user permissions', to='auth.Permission', related_query_name='user', help_text='Specific permissions for this user.'), + ), + ] diff --git a/wagtail/tests/migrations/0003_auto_20140827_0401.py b/wagtail/tests/migrations/0003_auto_20140827_0401.py deleted file mode 100644 index 61d7f2d5cd..0000000000 --- a/wagtail/tests/migrations/0003_auto_20140827_0401.py +++ /dev/null @@ -1,259 +0,0 @@ -# -*- coding: utf-8 -*- -from __future__ import unicode_literals - -from django.db import models, migrations -import modelcluster.fields -import django.db.models.deletion - - -class Migration(migrations.Migration): - - dependencies = [ - ('wagtailcore', '0002_initial_data'), - ('tests', '0002_auto_20140728_1636'), - ] - - operations = [ - migrations.CreateModel( - name='AdvertPlacement', - fields=[ - ('id', models.AutoField(auto_created=True, serialize=False, verbose_name='ID', primary_key=True)), - ('advert', models.ForeignKey(to='tests.Advert', related_name='+')), - ('page', modelcluster.fields.ParentalKey(to='wagtailcore.Page', related_name='advert_placements')), - ], - options={ - }, - bases=(models.Model,), - ), - migrations.AlterModelOptions( - name='eventpagecarouselitem', - options={'ordering': ['sort_order']}, - ), - migrations.AlterModelOptions( - name='eventpagerelatedlink', - options={'ordering': ['sort_order']}, - ), - migrations.AlterModelOptions( - name='eventpagespeaker', - options={'ordering': ['sort_order']}, - ), - migrations.AlterModelOptions( - name='formfield', - options={'ordering': ['sort_order']}, - ), - migrations.AlterField( - model_name='businesschild', - name='page_ptr', - field=models.OneToOneField(serialize=False, to='wagtailcore.Page', parent_link=True, auto_created=True, primary_key=True), - ), - migrations.AlterField( - model_name='businessindex', - name='page_ptr', - field=models.OneToOneField(serialize=False, to='wagtailcore.Page', parent_link=True, auto_created=True, primary_key=True), - ), - migrations.AlterField( - model_name='businesssubindex', - name='page_ptr', - field=models.OneToOneField(serialize=False, to='wagtailcore.Page', parent_link=True, auto_created=True, primary_key=True), - ), - migrations.AlterField( - model_name='customuser', - name='groups', - field=models.ManyToManyField(help_text='The groups this user belongs to. A user will get all permissions granted to each of his/her group.', to='auth.Group', related_name='user_set', related_query_name='user', blank=True, verbose_name='groups'), - ), - migrations.AlterField( - model_name='customuser', - name='user_permissions', - field=models.ManyToManyField(help_text='Specific permissions for this user.', to='auth.Permission', related_name='user_set', related_query_name='user', blank=True, verbose_name='user permissions'), - ), - migrations.AlterField( - model_name='eventindex', - name='page_ptr', - field=models.OneToOneField(serialize=False, to='wagtailcore.Page', parent_link=True, auto_created=True, primary_key=True), - ), - migrations.AlterField( - model_name='eventpage', - name='audience', - field=models.CharField(choices=[('public', 'Public'), ('private', 'Private')], max_length=255), - ), - migrations.AlterField( - model_name='eventpage', - name='date_from', - field=models.DateField(verbose_name='Start date', null=True), - ), - migrations.AlterField( - model_name='eventpage', - name='date_to', - field=models.DateField(help_text='Not required if event is on a single day', verbose_name='End date', null=True, blank=True), - ), - migrations.AlterField( - model_name='eventpage', - name='feed_image', - field=models.ForeignKey(to='wagtailimages.Image', on_delete=django.db.models.deletion.SET_NULL, related_name='+', null=True, blank=True), - ), - migrations.AlterField( - model_name='eventpage', - name='page_ptr', - field=models.OneToOneField(serialize=False, to='wagtailcore.Page', parent_link=True, auto_created=True, primary_key=True), - ), - migrations.AlterField( - model_name='eventpage', - name='time_from', - field=models.TimeField(verbose_name='Start time', null=True, blank=True), - ), - migrations.AlterField( - model_name='eventpage', - name='time_to', - field=models.TimeField(verbose_name='End time', null=True, blank=True), - ), - migrations.AlterField( - model_name='eventpagecarouselitem', - name='embed_url', - field=models.URLField(verbose_name='Embed URL', blank=True), - ), - migrations.AlterField( - model_name='eventpagecarouselitem', - name='image', - field=models.ForeignKey(to='wagtailimages.Image', on_delete=django.db.models.deletion.SET_NULL, related_name='+', null=True, blank=True), - ), - migrations.AlterField( - model_name='eventpagecarouselitem', - name='link_document', - field=models.ForeignKey(to='wagtaildocs.Document', related_name='+', null=True, blank=True), - ), - migrations.AlterField( - model_name='eventpagecarouselitem', - name='link_external', - field=models.URLField(verbose_name='External link', blank=True), - ), - migrations.AlterField( - model_name='eventpagecarouselitem', - name='link_page', - field=models.ForeignKey(to='wagtailcore.Page', related_name='+', null=True, blank=True), - ), - migrations.AlterField( - model_name='eventpagecarouselitem', - name='page', - field=modelcluster.fields.ParentalKey(to='tests.EventPage', related_name='carousel_items'), - ), - migrations.AlterField( - model_name='eventpagerelatedlink', - name='link_document', - field=models.ForeignKey(to='wagtaildocs.Document', related_name='+', null=True, blank=True), - ), - migrations.AlterField( - model_name='eventpagerelatedlink', - name='link_external', - field=models.URLField(verbose_name='External link', blank=True), - ), - migrations.AlterField( - model_name='eventpagerelatedlink', - name='link_page', - field=models.ForeignKey(to='wagtailcore.Page', related_name='+', null=True, blank=True), - ), - migrations.AlterField( - model_name='eventpagerelatedlink', - name='page', - field=modelcluster.fields.ParentalKey(to='tests.EventPage', related_name='related_links'), - ), - migrations.AlterField( - model_name='eventpagerelatedlink', - name='title', - field=models.CharField(max_length=255, help_text='Link title'), - ), - migrations.AlterField( - model_name='eventpagespeaker', - name='first_name', - field=models.CharField(max_length=255, verbose_name='Name', blank=True), - ), - migrations.AlterField( - model_name='eventpagespeaker', - name='image', - field=models.ForeignKey(to='wagtailimages.Image', on_delete=django.db.models.deletion.SET_NULL, related_name='+', null=True, blank=True), - ), - migrations.AlterField( - model_name='eventpagespeaker', - name='last_name', - field=models.CharField(max_length=255, verbose_name='Surname', blank=True), - ), - migrations.AlterField( - model_name='eventpagespeaker', - name='link_document', - field=models.ForeignKey(to='wagtaildocs.Document', related_name='+', null=True, blank=True), - ), - migrations.AlterField( - model_name='eventpagespeaker', - name='link_external', - field=models.URLField(verbose_name='External link', blank=True), - ), - migrations.AlterField( - model_name='eventpagespeaker', - name='link_page', - field=models.ForeignKey(to='wagtailcore.Page', related_name='+', null=True, blank=True), - ), - migrations.AlterField( - model_name='eventpagespeaker', - name='page', - field=modelcluster.fields.ParentalKey(to='tests.EventPage', related_name='speakers'), - ), - migrations.AlterField( - model_name='formfield', - name='field_type', - field=models.CharField(choices=[('singleline', 'Single line text'), ('multiline', 'Multi-line text'), ('email', 'Email'), ('number', 'Number'), ('url', 'URL'), ('checkbox', 'Checkbox'), ('checkboxes', 'Checkboxes'), ('dropdown', 'Drop down'), ('radio', 'Radio buttons'), ('date', 'Date'), ('datetime', 'Date/time')], max_length=16), - ), - migrations.AlterField( - model_name='formfield', - name='page', - field=modelcluster.fields.ParentalKey(to='tests.FormPage', related_name='form_fields'), - ), - migrations.AlterField( - model_name='formpage', - name='page_ptr', - field=models.OneToOneField(serialize=False, to='wagtailcore.Page', parent_link=True, auto_created=True, primary_key=True), - ), - migrations.AlterField( - model_name='pagewitholdstyleroutemethod', - name='page_ptr', - field=models.OneToOneField(serialize=False, to='wagtailcore.Page', parent_link=True, auto_created=True, primary_key=True), - ), - migrations.AlterField( - model_name='routablepagetest', - name='page_ptr', - field=models.OneToOneField(serialize=False, to='wagtailcore.Page', parent_link=True, auto_created=True, primary_key=True), - ), - migrations.AlterField( - model_name='searchtestchild', - name='searchtest_ptr', - field=models.OneToOneField(serialize=False, to='tests.SearchTest', parent_link=True, auto_created=True, primary_key=True), - ), - migrations.AlterField( - model_name='simplepage', - name='page_ptr', - field=models.OneToOneField(serialize=False, to='wagtailcore.Page', parent_link=True, auto_created=True, primary_key=True), - ), - migrations.AlterField( - model_name='standardchild', - name='page_ptr', - field=models.OneToOneField(serialize=False, to='wagtailcore.Page', parent_link=True, auto_created=True, primary_key=True), - ), - migrations.AlterField( - model_name='standardindex', - name='page_ptr', - field=models.OneToOneField(serialize=False, to='wagtailcore.Page', parent_link=True, auto_created=True, primary_key=True), - ), - migrations.AlterField( - model_name='taggedpage', - name='page_ptr', - field=models.OneToOneField(serialize=False, to='wagtailcore.Page', parent_link=True, auto_created=True, primary_key=True), - ), - migrations.AlterField( - model_name='taggedpagetag', - name='content_object', - field=modelcluster.fields.ParentalKey(to='tests.TaggedPage', related_name='tagged_items'), - ), - migrations.AlterField( - model_name='taggedpagetag', - name='tag', - field=models.ForeignKey(to='taggit.Tag', related_name='tests_taggedpagetag_items'), - ), - ] From e8ea53f8e3165df0ab6c96114cd9ab7745d4d143 Mon Sep 17 00:00:00 2001 From: Karl Hobley <karl@torchbox.com> Date: Wed, 27 Aug 2014 15:14:06 +0100 Subject: [PATCH 089/210] Fixed reference to non existant migration --- wagtail/tests/migrations/0002_auto_20140827_0908.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/wagtail/tests/migrations/0002_auto_20140827_0908.py b/wagtail/tests/migrations/0002_auto_20140827_0908.py index c5f12fa72e..66c85ffb09 100644 --- a/wagtail/tests/migrations/0002_auto_20140827_0908.py +++ b/wagtail/tests/migrations/0002_auto_20140827_0908.py @@ -15,7 +15,7 @@ class Migration(migrations.Migration): dependencies = [ ('wagtailcore', '0002_initial_data'), ('wagtaildocs', '0002_initial_data'), - ('taggit', '0002_auto_20140827_0349'), + ('taggit', '0001_initial'), ('wagtailimages', '0002_initial_data'), ('tests', '0001_initial'), ] From 075c9e8da03945195149c605dddfbfb63d3e70b7 Mon Sep 17 00:00:00 2001 From: Matt Westcott <matt@west.co.tt> Date: Wed, 27 Aug 2014 15:43:46 +0100 Subject: [PATCH 090/210] add python3 + django 1.7 + sqlite as valid tox config --- tox.ini | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/tox.ini b/tox.ini index 6377c0862b..a3a691f2d4 100644 --- a/tox.ini +++ b/tox.ini @@ -47,8 +47,11 @@ envlist = py27-dj17-postgres, py27-dj17-sqlite, py32-dj17-postgres, + py32-dj17-sqlite, py33-dj17-postgres, - py34-dj17-postgres + py33-dj17-sqlite, + py34-dj17-postgres, + py34-dj17-sqlite # mysql not currently supported # (wagtail.wagtailimages.tests.TestImageEditView currently fails with a From 2640258450bd3edf6eccbf9d32cd1b7fe26b1a77 Mon Sep 17 00:00:00 2001 From: Matt Westcott <matt@west.co.tt> Date: Wed, 27 Aug 2014 15:54:00 +0100 Subject: [PATCH 091/210] use the more natural 'django.VERSION < (1.7)' for version tests --- wagtail/tests/settings.py | 4 ++-- wagtail/utils/apps.py | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/wagtail/tests/settings.py b/wagtail/tests/settings.py index da8863e668..e9c1172b4e 100644 --- a/wagtail/tests/settings.py +++ b/wagtail/tests/settings.py @@ -76,7 +76,7 @@ INSTALLED_APPS = [ ] # If we are using Django 1.6, add South to INSTALLED_APPS -if django.VERSION[:2] == (1, 6): +if django.VERSION < (1, 7): INSTALLED_APPS.append('south') @@ -84,7 +84,7 @@ if django.VERSION[:2] == (1, 6): # Theres nothing special about wagtailredirects, we just need to have one # app which uses AppConfigs to test that hooks load properly -if django.VERSION[:2] == (1, 6): +if django.VERSION < (1, 7): INSTALLED_APPS.append('wagtail.wagtailredirects') else: INSTALLED_APPS.append('wagtail.wagtailredirects.apps.WagtailRedirectsAppConfig') diff --git a/wagtail/utils/apps.py b/wagtail/utils/apps.py index 05bf8aa756..2bee7484e0 100644 --- a/wagtail/utils/apps.py +++ b/wagtail/utils/apps.py @@ -14,7 +14,7 @@ def get_app_modules(): Generator function that yields a module object for each installed app yields tuples of (app_name, module) """ - if django.VERSION[:2] == (1, 6): + if django.VERSION < (1, 7): # Django 1.6 for app in settings.INSTALLED_APPS: yield app, import_module(app) From f471f0bbf6478fe4c54f1b3006ea146d3d8ae0db Mon Sep 17 00:00:00 2001 From: Matt Westcott <matt@west.co.tt> Date: Wed, 27 Aug 2014 15:56:22 +0100 Subject: [PATCH 092/210] avoid using 'self' as a parameter to the non-method form of get_upload_to --- wagtail/wagtailimages/models.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/wagtail/wagtailimages/models.py b/wagtail/wagtailimages/models.py index bee887289b..04ae37ad0d 100644 --- a/wagtail/wagtailimages/models.py +++ b/wagtail/wagtailimages/models.py @@ -29,9 +29,9 @@ from wagtail.wagtailimages.utils.feature_detection import FeatureDetector, openc from wagtail.wagtailadmin.utils import get_object_usage -def get_upload_to(self, filename): +def get_upload_to(instance, filename): folder_name = 'original_images' - filename = self.file.field.storage.get_valid_name(filename) + filename = instance.file.field.storage.get_valid_name(filename) # do a unidecode in the filename and then # replace non-ascii characters in filename with _ , to sidestep issues with filesystem encoding From 48401244ea90e030de090d34650c78988388f72c Mon Sep 17 00:00:00 2001 From: Karl Hobley <karl@torchbox.com> Date: Wed, 27 Aug 2014 16:08:10 +0100 Subject: [PATCH 093/210] Changelog, readme, docs and release notes for Django 1.7 support --- CHANGELOG.txt | 1 + README.rst | 4 +--- docs/index.rst | 2 +- docs/releases/0.6.rst | 6 ++++++ 4 files changed, 9 insertions(+), 4 deletions(-) diff --git a/CHANGELOG.txt b/CHANGELOG.txt index c8b078992d..5122b8d1dc 100644 --- a/CHANGELOG.txt +++ b/CHANGELOG.txt @@ -3,6 +3,7 @@ Changelog 0.6 (xx.xx.20xx) ~~~~~~~~~~~~~~~~ + * Added Django 1.7 support * Added {% routablepageurl %} template tag (@timheap) * Added RoutablePageMixin (@timheap) * Renamed wagtailsearch.indexed to wagtailsearch.index diff --git a/README.rst b/README.rst index 88106719b7..a2c11cb160 100644 --- a/README.rst +++ b/README.rst @@ -45,9 +45,7 @@ Available at `wagtail.readthedocs.org <http://wagtail.readthedocs.org/>`_ and al Compatibility ~~~~~~~~~~~~~ -Wagtail supports Django 1.6.2+ on Python 2.6, 2.7, 3.2, 3.3 and 3.4. - -Django 1.7 support is in progress pending further release candidate testing. +Wagtail supports Django 1.6.2+ and 1.7rc3+ on Python 2.6, 2.7, 3.2, 3.3 and 3.4. Wagtail's dependencies are summarised at `requirements.io <https://requires.io/github/torchbox/wagtail/requirements>`_. diff --git a/docs/index.rst b/docs/index.rst index 0ce7b02fab..55575fbffa 100644 --- a/docs/index.rst +++ b/docs/index.rst @@ -3,7 +3,7 @@ Welcome to Wagtail's documentation Wagtail is a modern, flexible CMS, built on Django. -It supports Django 1.6.2+ on Python 2.6, 2.7, 3.2, 3.3 and 3.4. Django 1.7 support is in progress pending further release candidate testing. +It supports Django 1.6.2+ and 1.7rc3+ on Python 2.6, 2.7, 3.2, 3.3 and 3.4. .. toctree:: :maxdepth: 3 diff --git a/docs/releases/0.6.rst b/docs/releases/0.6.rst index 2b86b58e87..a5fbad5915 100644 --- a/docs/releases/0.6.rst +++ b/docs/releases/0.6.rst @@ -10,6 +10,12 @@ Wagtail 0.6 release notes - IN DEVELOPMENT What's new ========== +Django 1.7 support +~~~~~~~~~~~~~~~~~~ + +Wagtail can now be used with Django 1.7. + + Minor features ~~~~~~~~~~~~~~ * A new template tag has been added for reversing URLs inside routable pages. See :ref:`routablepageurl_template_tag`. From f75ec76b3aa71b99111ea47134dacd44ef2c76e1 Mon Sep 17 00:00:00 2001 From: Matt Westcott <matt@west.co.tt> Date: Wed, 27 Aug 2014 17:10:30 +0100 Subject: [PATCH 094/210] fix more documentation links in the readme --- README.rst | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.rst b/README.rst index a2c11cb160..77d153f26d 100644 --- a/README.rst +++ b/README.rst @@ -53,8 +53,8 @@ Contributing ~~~~~~~~~~~~ If you're a Python or Django developer, fork the repo and get stuck in! -We suggest you start by checking the `Help develop me! <https://github.com/torchbox/wagtail/issues?labels=Help+develop+me%21>`_ label and the `coding guidelines <http://wagtail.readthedocs.org/en/latest/contributing.html#coding-guidelines>`_. +We suggest you start by checking the `Help develop me! <https://github.com/torchbox/wagtail/issues?labels=Help+develop+me%21>`_ label and the `coding guidelines <http://wagtail.readthedocs.org/en/latest/howto/contributing.html#coding-guidelines>`_. Send us a useful pull request and we'll post you a `t-shirt <https://twitter.com/WagtailCMS/status/432166799464210432/photo/1>`_. -We also welcome `translations <http://wagtail.readthedocs.org/en/latest/contributing.html#translations>`_ for Wagtail's interface. +We also welcome `translations <http://wagtail.readthedocs.org/en/latest/howto/contributing.html#translations>`_ for Wagtail's interface. From 0aee07fd5a204cbbafab3092c69e88d62644ff83 Mon Sep 17 00:00:00 2001 From: Karl Hobley <karl@torchbox.com> Date: Thu, 28 Aug 2014 10:33:42 +0100 Subject: [PATCH 095/210] Exclude south_migrations from test coverage --- .coveragerc | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.coveragerc b/.coveragerc index 7f6f849cd0..b49e59cd53 100644 --- a/.coveragerc +++ b/.coveragerc @@ -5,6 +5,7 @@ branch = True source = wagtail omit = + */south_migrations/* */migrations/* wagtail/vendor/* @@ -31,4 +32,4 @@ exclude_lines = ignore_errors = True [html] -directory = coverage_html_report \ No newline at end of file +directory = coverage_html_report From 4b79f3c428f28aabbf5c712209dae11c4eec28a6 Mon Sep 17 00:00:00 2001 From: vzvenyach <vdavez@gmail.com> Date: Fri, 29 Aug 2014 23:00:20 -0400 Subject: [PATCH 096/210] Update ubuntu.sh bump to postgresql 9.3.5 --- scripts/install/ubuntu.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/install/ubuntu.sh b/scripts/install/ubuntu.sh index 45adaa5f24..805cafd555 100644 --- a/scripts/install/ubuntu.sh +++ b/scripts/install/ubuntu.sh @@ -36,7 +36,7 @@ aptitude update aptitude -y install git python-pip nginx postgresql redis-server aptitude -y install postgresql-server-dev-all python-dev libjpeg62-dev -perl -pi -e "s/^(local\s+all\s+postgres\s+)peer$/\1trust/" /etc/postgresql/9.1/main/pg_hba.conf +perl -pi -e "s/^(local\s+all\s+postgres\s+)peer$/\1trust/" /etc/postgresql/9.3/main/pg_hba.conf service postgresql reload aptitude -y install openjdk-7-jre-headless From b0e97c954a1342c3092c015467e1979fc83ed8be Mon Sep 17 00:00:00 2001 From: Matt Westcott <matt@west.co.tt> Date: Mon, 1 Sep 2014 10:44:42 +0100 Subject: [PATCH 097/210] release notes / changelog for #574 --- CHANGELOG.txt | 1 + docs/releases/0.6.rst | 1 + 2 files changed, 2 insertions(+) diff --git a/CHANGELOG.txt b/CHANGELOG.txt index 5122b8d1dc..88d2211005 100644 --- a/CHANGELOG.txt +++ b/CHANGELOG.txt @@ -9,6 +9,7 @@ Changelog * Renamed wagtailsearch.indexed to wagtailsearch.index * Fix: Page URL generation now returns correct URLs for sites that have the main 'serve' view rooted somewhere other than '/' * Fix: Search results in the page chooser now respect the page_type parameter on PageChooserPanel + * Fix: Rendition filenames are now prevented from going over 60 chars, even with a large focal_point_key 0.5 (01.08.2014) ~~~~~~~~~~~~~~~~ diff --git a/docs/releases/0.6.rst b/docs/releases/0.6.rst index a5fbad5915..ebd97fc056 100644 --- a/docs/releases/0.6.rst +++ b/docs/releases/0.6.rst @@ -26,6 +26,7 @@ Bug fixes * Page URL generation now returns correct URLs for sites that have the main 'serve' view rooted somewhere other than '/'. * Search results in the page chooser now respect the page_type parameter on PageChooserPanel. + * Rendition filenames are now prevented from going over 60 chars, even with a large focal_point_key. Upgrade considerations ====================== From f0db8082c830a7c075390996bb53fe4f5151cac5 Mon Sep 17 00:00:00 2001 From: Dave Cranwell <davecranwell@users.noreply.github.com> Date: Mon, 1 Sep 2014 16:09:22 +0100 Subject: [PATCH 098/210] Better description of purpose --- docs/core_components/pages/editing_api.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/core_components/pages/editing_api.rst b/docs/core_components/pages/editing_api.rst index f1025cbcb3..aa1db2efec 100644 --- a/docs/core_components/pages/editing_api.rst +++ b/docs/core_components/pages/editing_api.rst @@ -1,6 +1,6 @@ .. _editing-api: -Defining models with the Editing API +Displaying fields with the Editing API ==================================== .. note:: From 0b3515a91669f229469ea80c0a77f810760afb29 Mon Sep 17 00:00:00 2001 From: Dave Cranwell <davecranwell@users.noreply.github.com> Date: Mon, 1 Sep 2014 16:16:15 +0100 Subject: [PATCH 099/210] Update creating_pages.rst --- docs/core_components/pages/creating_pages.rst | 23 +++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/docs/core_components/pages/creating_pages.rst b/docs/core_components/pages/creating_pages.rst index e6fb9a14b1..e5e4d740db 100644 --- a/docs/core_components/pages/creating_pages.rst +++ b/docs/core_components/pages/creating_pages.rst @@ -147,3 +147,26 @@ In addition to the model fields provided, ``Page`` has many properties and metho Defines which template file should be used to render the login form for Protected pages using this model. This overrides the default, defined using ``PASSWORD_REQUIRED_TEMPLATE`` in your settings. See :ref:`private_pages` +Tips +~~~~ + +Friendly model names +-------------------- + +Make your model names more friendly to users of Wagtail using Django's ``Meta`` class with a ``verbose_name`` e.g + +.. code-block:: python + + class HomePage(Page): + ... + + class Meta: + verbose_name = "Homepage" + +When users are given a choice of pages to create, the list of page types is generated by splitting your model names on each of their capital letters. Thus a ``HomePage`` model would be named "Home Page" which is a little clumsy. ``verbose_name`` as in the example above, would change this to read "Homepage" which is slightly more conventional. + +The above example also ensures the name of the + +Describing your models +---------------------- + From 2ddf8fd3b657fa3cb1d6d0af39f585844ae9c3c3 Mon Sep 17 00:00:00 2001 From: Karl Hobley <karl@torchbox.com> Date: Mon, 1 Sep 2014 16:21:15 +0100 Subject: [PATCH 100/210] Enabled ASCIIFolding in Elasticsearch backend --- .../wagtailsearch/backends/elasticsearch.py | 4 ++-- .../tests/test_elasticsearch_backend.py | 22 +++++++++++++++++++ 2 files changed, 24 insertions(+), 2 deletions(-) diff --git a/wagtail/wagtailsearch/backends/elasticsearch.py b/wagtail/wagtailsearch/backends/elasticsearch.py index 341cc342e3..ae2a07822b 100644 --- a/wagtail/wagtailsearch/backends/elasticsearch.py +++ b/wagtail/wagtailsearch/backends/elasticsearch.py @@ -510,12 +510,12 @@ class ElasticSearch(BaseSearch): 'ngram_analyzer': { 'type': 'custom', 'tokenizer': 'lowercase', - 'filter': ['ngram'] + 'filter': ['asciifolding', 'ngram'] }, 'edgengram_analyzer': { 'type': 'custom', 'tokenizer': 'lowercase', - 'filter': ['edgengram'] + 'filter': ['asciifolding', 'edgengram'] } }, 'tokenizer': { diff --git a/wagtail/wagtailsearch/tests/test_elasticsearch_backend.py b/wagtail/wagtailsearch/tests/test_elasticsearch_backend.py index 3ddce5618b..ff200fb70f 100644 --- a/wagtail/wagtailsearch/tests/test_elasticsearch_backend.py +++ b/wagtail/wagtailsearch/tests/test_elasticsearch_backend.py @@ -65,6 +65,28 @@ class TestElasticSearchBackend(BackendTests, TestCase): self.assertEqual(len(results), 1) self.assertEqual(results[0].id, obj.id) + def test_ascii_folding(self): + # Reset the index + self.backend.reset_index() + self.backend.add_type(models.SearchTest) + self.backend.add_type(models.SearchTestChild) + + # Add some test data + obj = models.SearchTest() + obj.title = "Ĥéỻø" + obj.live = True + obj.save() + self.backend.add(obj) + + # Refresh the index + self.backend.refresh_index() + + # Search and check + results = self.backend.search("Hello", models.SearchTest.objects.all()) + + self.assertEqual(len(results), 1) + self.assertEqual(results[0].id, obj.id) + class TestElasticSearchQuery(TestCase): def assertDictEqual(self, a, b): From e2a3d549f875bdb0d0aa62b362c52c8f1a2a173d Mon Sep 17 00:00:00 2001 From: Dave Cranwell <davecranwell@users.noreply.github.com> Date: Mon, 1 Sep 2014 16:30:43 +0100 Subject: [PATCH 101/210] Added how to add model descriptions --- docs/core_components/pages/creating_pages.rst | 21 +++++++++++++++++-- 1 file changed, 19 insertions(+), 2 deletions(-) diff --git a/docs/core_components/pages/creating_pages.rst b/docs/core_components/pages/creating_pages.rst index e5e4d740db..5d98581a9e 100644 --- a/docs/core_components/pages/creating_pages.rst +++ b/docs/core_components/pages/creating_pages.rst @@ -167,6 +167,23 @@ When users are given a choice of pages to create, the list of page types is gene The above example also ensures the name of the -Describing your models ----------------------- +Helpful model descriptions +-------------------------- +As your site becomes more complex users may require some prompting in deciding which content type to use when creating a new page. Developers can add a description to their Models by extending Django's in-built model meta class. + +Insert the following once at the top of your models.py: + +.. code-block:: python + import django.db.models.options as options + options.DEFAULT_NAMES = options.DEFAULT_NAMES + ('description',) + +Then for each model as necessary, add a description attribute to the model ``Meta``: + +.. code-block:: python + class HomePage(Page): + ... + + class Meta: + description = "The top level homepage for your site" + verbose_name = "Homepage" From 04c65833f01981c75ef53455bc383b1abe257824 Mon Sep 17 00:00:00 2001 From: Dave Cranwell <davecranwell@users.noreply.github.com> Date: Mon, 1 Sep 2014 16:31:41 +0100 Subject: [PATCH 102/210] Update creating_pages.rst --- docs/core_components/pages/creating_pages.rst | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/docs/core_components/pages/creating_pages.rst b/docs/core_components/pages/creating_pages.rst index 5d98581a9e..c65ad2e6be 100644 --- a/docs/core_components/pages/creating_pages.rst +++ b/docs/core_components/pages/creating_pages.rst @@ -160,8 +160,8 @@ Make your model names more friendly to users of Wagtail using Django's ``Meta`` class HomePage(Page): ... - class Meta: - verbose_name = "Homepage" + class Meta: + verbose_name = "Homepage" When users are given a choice of pages to create, the list of page types is generated by splitting your model names on each of their capital letters. Thus a ``HomePage`` model would be named "Home Page" which is a little clumsy. ``verbose_name`` as in the example above, would change this to read "Homepage" which is slightly more conventional. @@ -184,6 +184,6 @@ Then for each model as necessary, add a description attribute to the model ``Met class HomePage(Page): ... - class Meta: - description = "The top level homepage for your site" - verbose_name = "Homepage" + class Meta: + description = "The top level homepage for your site" + verbose_name = "Homepage" From 98fd81e910927455dfb971c11d011cb6e1f35396 Mon Sep 17 00:00:00 2001 From: Dave Cranwell <davecranwell@users.noreply.github.com> Date: Mon, 1 Sep 2014 16:33:15 +0100 Subject: [PATCH 103/210] Update creating_pages.rst --- docs/core_components/pages/creating_pages.rst | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/docs/core_components/pages/creating_pages.rst b/docs/core_components/pages/creating_pages.rst index c65ad2e6be..b55edb2813 100644 --- a/docs/core_components/pages/creating_pages.rst +++ b/docs/core_components/pages/creating_pages.rst @@ -178,7 +178,9 @@ Insert the following once at the top of your models.py: import django.db.models.options as options options.DEFAULT_NAMES = options.DEFAULT_NAMES + ('description',) -Then for each model as necessary, add a description attribute to the model ``Meta``: + +Then for each model as necessary, add a description attribute to the model ``Meta`` class + .. code-block:: python class HomePage(Page): From 84aa8a18872539540f05bf50dee7f9f564e7b14e Mon Sep 17 00:00:00 2001 From: Dave Cranwell <davecranwell@users.noreply.github.com> Date: Mon, 1 Sep 2014 16:34:32 +0100 Subject: [PATCH 104/210] Update creating_pages.rst --- docs/core_components/pages/creating_pages.rst | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/docs/core_components/pages/creating_pages.rst b/docs/core_components/pages/creating_pages.rst index b55edb2813..a8c5e7bf00 100644 --- a/docs/core_components/pages/creating_pages.rst +++ b/docs/core_components/pages/creating_pages.rst @@ -183,9 +183,10 @@ Then for each model as necessary, add a description attribute to the model ``Met .. code-block:: python + class HomePage(Page): ... - + class Meta: description = "The top level homepage for your site" verbose_name = "Homepage" From 6c159bee59202839e63937e9314e92e79a4c97f5 Mon Sep 17 00:00:00 2001 From: Dave Cranwell <davecranwell@users.noreply.github.com> Date: Mon, 1 Sep 2014 16:39:07 +0100 Subject: [PATCH 105/210] Update creating_pages.rst --- docs/core_components/pages/creating_pages.rst | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/docs/core_components/pages/creating_pages.rst b/docs/core_components/pages/creating_pages.rst index a8c5e7bf00..b859f16f66 100644 --- a/docs/core_components/pages/creating_pages.rst +++ b/docs/core_components/pages/creating_pages.rst @@ -153,7 +153,7 @@ Tips Friendly model names -------------------- -Make your model names more friendly to users of Wagtail using Django's ``Meta`` class with a ``verbose_name`` e.g +Make your model names more friendly to users of Wagtail using Django's internal ``Meta`` class with a ``verbose_name`` e.g .. code-block:: python @@ -170,7 +170,7 @@ The above example also ensures the name of the Helpful model descriptions -------------------------- -As your site becomes more complex users may require some prompting in deciding which content type to use when creating a new page. Developers can add a description to their Models by extending Django's in-built model meta class. +As your site becomes more complex users may require some prompting in deciding which content type to use when creating a new page. Developers can add a description to their Models by extending Django's internal model ``Meta`` class. Insert the following once at the top of your models.py: @@ -179,7 +179,7 @@ Insert the following once at the top of your models.py: options.DEFAULT_NAMES = options.DEFAULT_NAMES + ('description',) -Then for each model as necessary, add a description attribute to the model ``Meta`` class +Then for each model as necessary, add a description option to the model ``Meta`` class .. code-block:: python @@ -190,3 +190,6 @@ Then for each model as necessary, add a description attribute to the model ``Met class Meta: description = "The top level homepage for your site" verbose_name = "Homepage" + + +(This method can be used to extend the Model Meta class in various ways however Wagtail only supports the addition of a ``description`` option). From 22f81498b5c96949f48a315fac1e90cc8c88cad9 Mon Sep 17 00:00:00 2001 From: Dave Cranwell <davecranwell@users.noreply.github.com> Date: Mon, 1 Sep 2014 16:39:33 +0100 Subject: [PATCH 106/210] Update creating_pages.rst --- docs/core_components/pages/creating_pages.rst | 1 + 1 file changed, 1 insertion(+) diff --git a/docs/core_components/pages/creating_pages.rst b/docs/core_components/pages/creating_pages.rst index b859f16f66..a8038f36bb 100644 --- a/docs/core_components/pages/creating_pages.rst +++ b/docs/core_components/pages/creating_pages.rst @@ -175,6 +175,7 @@ As your site becomes more complex users may require some prompting in deciding w Insert the following once at the top of your models.py: .. code-block:: python + import django.db.models.options as options options.DEFAULT_NAMES = options.DEFAULT_NAMES + ('description',) From 95d249918bc06956e1c9259fdeb7158e06cba6e1 Mon Sep 17 00:00:00 2001 From: Dave Cranwell <davecranwell@users.noreply.github.com> Date: Mon, 1 Sep 2014 16:39:48 +0100 Subject: [PATCH 107/210] Update creating_pages.rst --- docs/core_components/pages/creating_pages.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/core_components/pages/creating_pages.rst b/docs/core_components/pages/creating_pages.rst index a8038f36bb..40dfa6439f 100644 --- a/docs/core_components/pages/creating_pages.rst +++ b/docs/core_components/pages/creating_pages.rst @@ -172,7 +172,7 @@ Helpful model descriptions As your site becomes more complex users may require some prompting in deciding which content type to use when creating a new page. Developers can add a description to their Models by extending Django's internal model ``Meta`` class. -Insert the following once at the top of your models.py: +Insert the following once at the top of your ``models.py``: .. code-block:: python From d67242bf7dfbfc278eb42f5077d3bddb388d835f Mon Sep 17 00:00:00 2001 From: Karl Hobley <karl@torchbox.com> Date: Mon, 1 Sep 2014 16:51:39 +0100 Subject: [PATCH 108/210] Fixed unicode encoding issues on Python 2 --- wagtail/wagtailsearch/tests/test_elasticsearch_backend.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/wagtail/wagtailsearch/tests/test_elasticsearch_backend.py b/wagtail/wagtailsearch/tests/test_elasticsearch_backend.py index ff200fb70f..027c686fc3 100644 --- a/wagtail/wagtailsearch/tests/test_elasticsearch_backend.py +++ b/wagtail/wagtailsearch/tests/test_elasticsearch_backend.py @@ -1,3 +1,6 @@ +# -*- coding: utf-8 -*- +from __future__ import unicode_literals + from wagtail.tests.utils import unittest import datetime import json From a314285a1d9a242e717756792608ef19a18a7fdc Mon Sep 17 00:00:00 2001 From: Karl Hobley <karl@torchbox.com> Date: Thu, 4 Sep 2014 09:18:13 +0100 Subject: [PATCH 109/210] Changed versionadded for RoutablePageMixin to 0.6 --- .../pages/advanced_topics/routable_page_mixin.rst | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/docs/core_components/pages/advanced_topics/routable_page_mixin.rst b/docs/core_components/pages/advanced_topics/routable_page_mixin.rst index 36ca024c3d..d34c33a69b 100644 --- a/docs/core_components/pages/advanced_topics/routable_page_mixin.rst +++ b/docs/core_components/pages/advanced_topics/routable_page_mixin.rst @@ -4,7 +4,7 @@ Embedding URL configuration in Pages ==================================== -.. versionadded:: 0.5 +.. versionadded:: 0.6 The ``RoutablePageMixin`` mixin provides a convenient way for a page to respond on multiple sub-URLs with different views. For example, a blog section on a site might provide several different types of index page at URLs like ``/blog/2013/06/``, ``/blog/authors/bob/``, ``/blog/tagged/python/``, all served by the same ``BlogIndex`` page. @@ -103,8 +103,6 @@ The ``RoutablePageMixin`` class The ``routablepageurl`` template tag ==================================== -.. versionadded:: 0.6 - .. currentmodule:: wagtail.contrib.wagtailroutablepage.templatetags.wagtailroutablepage_tags .. autofunction:: routablepageurl From 73d29b99c0a4ea96270dcd3f9475357d82c97a99 Mon Sep 17 00:00:00 2001 From: Karl Hobley <karl@torchbox.com> Date: Thu, 4 Sep 2014 09:20:53 +0100 Subject: [PATCH 110/210] Fixes to RoutablePageMixin examples --- .../pages/advanced_topics/routable_page_mixin.rst | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/docs/core_components/pages/advanced_topics/routable_page_mixin.rst b/docs/core_components/pages/advanced_topics/routable_page_mixin.rst index d34c33a69b..1fb9dab625 100644 --- a/docs/core_components/pages/advanced_topics/routable_page_mixin.rst +++ b/docs/core_components/pages/advanced_topics/routable_page_mixin.rst @@ -68,16 +68,18 @@ The ``RoutablePageMixin`` class from wagtail.wagtailcore.models import Page + class MyPage(RoutablePageMixin, Page): subpage_urls = ( - url(r'^$', 'serve', name='main'), + url(r'^$', 'main', name='main'), url(r'^archive/$', 'archive', name='archive'), + url(r'^archive/(?P<year>[0-9]{4})/$', 'archive', name='archive'), ) - def serve(self, request): + def main(self, request): ... - def archive(self, request): + def archive(self, request, year=None): ... .. automethod:: resolve_subpage @@ -86,7 +88,7 @@ The ``RoutablePageMixin`` class .. code-block:: python - view, args, kwargs = page.resolve_subpage('/past/') + view, args, kwargs = page.resolve_subpage('/archive/') response = view(request, *args, **kwargs) .. automethod:: reverse_subpage @@ -95,7 +97,7 @@ The ``RoutablePageMixin`` class .. code-block:: python - url = page.url + page.reverse_subpage('events_for_year', args=('2014', )) + url = page.url + page.reverse_subpage('archive', kwargs={'year': '2014'}) .. _routablepageurl_template_tag: From 36d5d747aa1cfcfa804b736be4d0c4b2e7ce57aa Mon Sep 17 00:00:00 2001 From: Dave Cranwell <davecranwell@users.noreply.github.com> Date: Thu, 4 Sep 2014 11:01:24 +0100 Subject: [PATCH 111/210] Detail about image renditions and abstractimage fields --- docs/core_components/pages/writing_templates.rst | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/docs/core_components/pages/writing_templates.rst b/docs/core_components/pages/writing_templates.rst index 9374cca32d..3d13801151 100644 --- a/docs/core_components/pages/writing_templates.rst +++ b/docs/core_components/pages/writing_templates.rst @@ -112,13 +112,16 @@ For example: <!-- or a square thumbnail: --> {% image self.photo fill-80x80 %} -In the above syntax ``[image]`` is the Django object refering to the image. If your page model defined a field called "photo" then ``[image]`` would probably be ``self.photo``. The ``[resize-rule]`` defines how the image is to be resized when inserted into the page; various resizing methods are supported, to cater for different usage cases (e.g. lead images that span the whole width of the page, or thumbnails to be cropped to a fixed size). +In the above syntax example ``[image]`` is the Django object refering to the image. If your page model defined a field called "photo" then ``[image]`` would probably be ``self.photo``. The ``[resize-rule]`` defines how the image is to be resized when inserted into the page; various resizing methods are supported, to cater for different usage cases (e.g. lead images that span the whole width of the page, or thumbnails to be cropped to a fixed size). Note that a space separates ``[image]`` and ``[resize-rule]``, but the resize rule must not contain spaces. + The available resizing methods are: + .. glossary:: + ``max`` (takes two dimensions) @@ -182,6 +185,7 @@ The available resizing methods are: Leaves the image at its original size - no resizing is performed. + .. Note:: Wagtail does not allow deforming or stretching images. Image dimension ratios will always be kept. Wagtail also *does not support upscaling*. Small images forced to appear at larger sizes will "max out" at their their native dimensions. @@ -218,6 +222,15 @@ Wagtail can assign the image data to another variable using Django's ``as`` synt height="{{ tmp_photo.height }}" alt="{{ tmp_photo.alt }}" class="my-custom-class" /> +This syntax exposes the underlying image "Rendition" (``tmp_photo``) to the developer. A "Rendition" contains just the information specific to the way you've requested to format the image i.e dimensions and source URL. + +If your site defines a custom image model using ``AbstractImage``, then any additional fields you add to an image e.g a copyright holder, are **not** part of the image *rendition*, they're part of the image *model*. + +Therefore in the above example, if you'd added the field ``foo`` to your AbstractImage you'd access it using ``{{ self.photo.foo }}`` not ``{{ tmp_photo.foo }}``. + +(Due to the links in the database between renditions and their parent image, you could also access it as ``{{ tmp_photo.image.foo }}`` but this is clearly confusing.) + + .. Note:: The image property used for the ``src`` attribute is actually ``image.url``, not ``image.src``. From db41badd8c490c62959179f8a29621741e49bcff Mon Sep 17 00:00:00 2001 From: Matt Westcott <matt@west.co.tt> Date: Thu, 4 Sep 2014 16:04:59 +0100 Subject: [PATCH 112/210] add tests for accessing advert_placements on a subclass of Page - these require modelcluster 0.4 to pass --- wagtail/tests/models.py | 6 ++ .../wagtailadmin/tests/test_pages_views.py | 87 ++++++++++++++++++- 2 files changed, 92 insertions(+), 1 deletion(-) diff --git a/wagtail/tests/models.py b/wagtail/tests/models.py index 0fc74441ed..c7979273c4 100644 --- a/wagtail/tests/models.py +++ b/wagtail/tests/models.py @@ -377,6 +377,12 @@ class ZuluSnippet(models.Model): class StandardIndex(Page): pass +StandardIndex.content_panels = [ + FieldPanel('title', classname="full title"), + InlinePanel(StandardIndex, 'advert_placements', label="Adverts"), +] + + class StandardChild(Page): pass diff --git a/wagtail/wagtailadmin/tests/test_pages_views.py b/wagtail/wagtailadmin/tests/test_pages_views.py index 765c217866..d142b6daf6 100644 --- a/wagtail/wagtailadmin/tests/test_pages_views.py +++ b/wagtail/wagtailadmin/tests/test_pages_views.py @@ -8,7 +8,7 @@ from django.core import mail from django.core.paginator import Paginator from django.utils import timezone -from wagtail.tests.models import SimplePage, EventPage, EventPageCarouselItem, StandardIndex, BusinessIndex, BusinessChild, BusinessSubIndex, TaggedPage +from wagtail.tests.models import SimplePage, EventPage, EventPageCarouselItem, StandardIndex, BusinessIndex, BusinessChild, BusinessSubIndex, TaggedPage, Advert, AdvertPlacement from wagtail.tests.utils import unittest, WagtailTestUtils from wagtail.wagtailcore.models import Page, PageRevision from wagtail.wagtailcore.signals import page_published, page_unpublished @@ -1699,3 +1699,88 @@ class TestIssue197(TestCase, WagtailTestUtils): page = TaggedPage.objects.get(id=self.tagged_page.id) self.assertIn('hello', page.tags.slugs()) self.assertIn('world', page.tags.slugs()) + + +class TestChildRelationsOnSuperclass(TestCase, WagtailTestUtils): + # In our test models we define AdvertPlacement as a child relation on the Page model. + # Here we check that this behaves correctly when exposed on the edit form of a Page + # subclass (StandardIndex here). + fixtures = ['test.json'] + + def setUp(self): + # Find root page + self.root_page = Page.objects.get(id=2) + self.test_advert = Advert.objects.get(id=1) + + # Add child page + self.index_page = StandardIndex( + title="My lovely index", + slug="my-lovely-index", + advert_placements=[AdvertPlacement(advert=self.test_advert)] + ) + self.root_page.add_child(instance=self.index_page) + + # Login + self.login() + + def test_get_create_form(self): + response = self.client.get(reverse('wagtailadmin_pages_create', args=('tests', 'standardindex', self.root_page.id))) + self.assertEqual(response.status_code, 200) + # Response should include an advert_placements formset labelled Adverts + self.assertContains(response, "Adverts") + self.assertContains(response, "id_advert_placements-TOTAL_FORMS") + + def test_post_create_form(self): + post_data = { + 'title': "New index!", + 'slug': 'new-index', + 'advert_placements-TOTAL_FORMS': '1', + 'advert_placements-INITIAL_FORMS': '0', + 'advert_placements-MAX_NUM_FORMS': '1000', + 'advert_placements-0-advert': '1', + 'advert_placements-0-id': '', + } + response = self.client.post(reverse('wagtailadmin_pages_create', args=('tests', 'standardindex', self.root_page.id)), post_data) + + # Should be redirected to explorer page + self.assertRedirects(response, reverse('wagtailadmin_explore', args=(self.root_page.id, ))) + + # Find the page and check it + page = Page.objects.get(path__startswith=self.root_page.path, slug='new-index').specific + self.assertEqual(page.advert_placements.count(), 1) + self.assertEqual(page.advert_placements.first().advert.text, 'test_advert') + + def test_get_edit_form(self): + response = self.client.get(reverse('wagtailadmin_pages_edit', args=(self.index_page.id, ))) + self.assertEqual(response.status_code, 200) + + # Response should include an advert_placements formset labelled Adverts + self.assertContains(response, "Adverts") + self.assertContains(response, "id_advert_placements-TOTAL_FORMS") + # the formset should be populated with an existing form + self.assertContains(response, "id_advert_placements-0-advert") + self.assertContains(response, '<option value="1" selected="selected">test_advert</option>') + + def test_post_edit_form(self): + post_data = { + 'title': "My lovely index", + 'slug': 'my-lovely-index', + 'advert_placements-TOTAL_FORMS': '2', + 'advert_placements-INITIAL_FORMS': '1', + 'advert_placements-MAX_NUM_FORMS': '1000', + 'advert_placements-0-advert': '1', + 'advert_placements-0-id': self.index_page.advert_placements.first().id, + 'advert_placements-1-advert': '1', + 'advert_placements-1-id': '', + 'action-publish': "Publish", + } + response = self.client.post(reverse('wagtailadmin_pages_edit', args=(self.index_page.id, )), post_data) + + # Should be redirected to explorer page + self.assertRedirects(response, reverse('wagtailadmin_explore', args=(self.root_page.id, ))) + + # Find the page and check it + page = Page.objects.get(id=self.index_page.id).specific + self.assertEqual(page.advert_placements.count(), 2) + self.assertEqual(page.advert_placements.all()[0].advert.text, 'test_advert') + self.assertEqual(page.advert_placements.all()[1].advert.text, 'test_advert') From 2e20faa094bc903a68001d4d25705c716a1aafee Mon Sep 17 00:00:00 2001 From: Matt Westcott <matt@west.co.tt> Date: Thu, 4 Sep 2014 21:32:39 +0100 Subject: [PATCH 113/210] upgrade modelcluster to 0.4 - fixes #545 --- setup.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/setup.py b/setup.py index c722911ad2..abd6bb61e0 100644 --- a/setup.py +++ b/setup.py @@ -27,7 +27,7 @@ install_requires = [ "South==1.0.0", "django-compressor>=1.4", "django-libsass>=0.2", - "django-modelcluster>=0.3", + "django-modelcluster>=0.4", "django-taggit==0.12.1", "django-treebeard==2.0", "Pillow>=2.3.0", From 339aff802642f2a72bbbf1229d862810db986115 Mon Sep 17 00:00:00 2001 From: Matt Westcott <matt@west.co.tt> Date: Fri, 5 Sep 2014 10:26:14 +0100 Subject: [PATCH 114/210] Test the register_admin_menu_item hook, including the use of classnames/attrs and is_shown --- wagtail/tests/wagtail_hooks.py | 10 ++++++++++ wagtail/wagtailadmin/tests/tests.py | 6 ++++++ 2 files changed, 16 insertions(+) diff --git a/wagtail/tests/wagtail_hooks.py b/wagtail/tests/wagtail_hooks.py index bb879ebe56..a7ff2804cb 100644 --- a/wagtail/tests/wagtail_hooks.py +++ b/wagtail/tests/wagtail_hooks.py @@ -2,6 +2,7 @@ from django.http import HttpResponse from wagtail.wagtailcore import hooks from wagtail.wagtailcore.whitelist import attribute_rule, check_url, allow_without_attributes +from wagtail.wagtailadmin.menu import MenuItem # Register one hook using decorators... @@ -28,3 +29,12 @@ def block_googlebot(page, request, serve_args, serve_kwargs): if request.META.get('HTTP_USER_AGENT') == 'GoogleBot': return HttpResponse("<h1>bad googlebot no cookie</h1>") hooks.register('before_serve_page', block_googlebot) + + +class KittensMenuItem(MenuItem): + def is_shown(self, request): + return not request.GET.get('hide-kittens', False) + +@hooks.register('register_admin_menu_item') +def register_kittens_menu_item(): + return KittensMenuItem('Kittens!', 'http://www.tomroyal.com/teaandkittens/', classnames='icon icon-kitten', attrs={'data-fluffy': 'yes'}, order=10000) diff --git a/wagtail/wagtailadmin/tests/tests.py b/wagtail/wagtailadmin/tests/tests.py index aaf1e0bc59..9c8dc95df9 100644 --- a/wagtail/wagtailadmin/tests/tests.py +++ b/wagtail/wagtailadmin/tests/tests.py @@ -21,6 +21,12 @@ class TestHome(TestCase, WagtailTestUtils): self.assertEqual(response.status_code, 200) # check that media attached to menu items is correctly pulled in self.assertContains(response, '<script type="text/javascript" src="/static/wagtailadmin/js/explorer-menu.js"></script>') + # check that custom menu items (including classname / attrs parameters) are pulled in + self.assertContains(response, '<a href="http://www.tomroyal.com/teaandkittens/" class="icon icon-kitten" data-fluffy="yes">Kittens!</a>') + + # check that is_shown is respected on menu items + response = self.client.get(reverse('wagtailadmin_home') + '?hide-kittens=true') + self.assertNotContains(response, '<a href="http://www.tomroyal.com/teaandkittens/" class="icon icon-kitten" data-fluffy="yes">Kittens!</a>') class TestEditorHooks(TestCase, WagtailTestUtils): From 609b22f722807b6e3c7a3ef4017b97a5c364c520 Mon Sep 17 00:00:00 2001 From: Matt Westcott <matt@west.co.tt> Date: Fri, 5 Sep 2014 11:24:43 +0100 Subject: [PATCH 115/210] Fix Page.copy() to copy child objects that are defined on a superclass of the model --- wagtail/tests/fixtures/test.json | 2 +- wagtail/wagtailcore/models.py | 4 ++-- wagtail/wagtailcore/tests/test_page_model.py | 5 +++++ 3 files changed, 8 insertions(+), 3 deletions(-) diff --git a/wagtail/tests/fixtures/test.json b/wagtail/tests/fixtures/test.json index 00e621f48b..9fc7b17e08 100644 --- a/wagtail/tests/fixtures/test.json +++ b/wagtail/tests/fixtures/test.json @@ -566,7 +566,7 @@ "pk": 1, "model": "tests.AdvertPlacement", "fields": { - "page": 2, + "page": 4, "advert": 1 } }, diff --git a/wagtail/wagtailcore/models.py b/wagtail/wagtailcore/models.py index 9151c98db6..ed6a3bb3f0 100644 --- a/wagtail/wagtailcore/models.py +++ b/wagtail/wagtailcore/models.py @@ -5,7 +5,7 @@ from six import string_types from six import StringIO from six.moves.urllib.parse import urlparse -from modelcluster.models import ClusterableModel +from modelcluster.models import ClusterableModel, get_all_child_relations from django.db import models, connection, transaction from django.db.models import get_model, Q @@ -618,7 +618,7 @@ class Page(six.with_metaclass(PageBase, MP_Node, ClusterableModel, index.Indexed # Copy child objects specific_self = self.specific - for child_relation in getattr(specific_self._meta, 'child_relations', []): + for child_relation in get_all_child_relations(specific_self): parental_key_name = child_relation.field.attname child_objects = getattr(specific_self, child_relation.get_accessor_name(), None) diff --git a/wagtail/wagtailcore/tests/test_page_model.py b/wagtail/wagtailcore/tests/test_page_model.py index 211c8f8a30..1f7c44aa32 100644 --- a/wagtail/wagtailcore/tests/test_page_model.py +++ b/wagtail/wagtailcore/tests/test_page_model.py @@ -400,6 +400,11 @@ class TestCopyPage(TestCase): # Check that the speakers weren't removed from old page self.assertEqual(christmas_event.speakers.count(), 1, "Child objects were removed from the original page") + # Check that advert placements were also copied (there's a gotcha here, since the advert_placements + # relation is defined on Page, not EventPage) + self.assertEqual(new_christmas_event.advert_placements.count(), 1, "Child objects defined on the superclass weren't copied") + self.assertEqual(christmas_event.advert_placements.count(), 1, "Child objects defined on the superclass were removed from the original page") + def test_copy_page_copies_child_objects_with_nonspecific_class(self): # Get chrismas page as Page instead of EventPage christmas_event = Page.objects.get(url_path='/home/events/christmas/') From fb23878ccba48e205d718849b628d203db1426e2 Mon Sep 17 00:00:00 2001 From: Karl Hobley <karl@torchbox.com> Date: Fri, 5 Sep 2014 11:29:20 +0100 Subject: [PATCH 116/210] Changelog and release notes for #535 --- CHANGELOG.txt | 2 ++ docs/releases/0.6.rst | 4 +++- 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.txt b/CHANGELOG.txt index 88d2211005..6d7f01c8ca 100644 --- a/CHANGELOG.txt +++ b/CHANGELOG.txt @@ -6,6 +6,8 @@ Changelog * Added Django 1.7 support * Added {% routablepageurl %} template tag (@timheap) * Added RoutablePageMixin (@timheap) + * MenuItems can now have bundled JavaScript + * Added a new hook for registering admin menu items * Renamed wagtailsearch.indexed to wagtailsearch.index * Fix: Page URL generation now returns correct URLs for sites that have the main 'serve' view rooted somewhere other than '/' * Fix: Search results in the page chooser now respect the page_type parameter on PageChooserPanel diff --git a/docs/releases/0.6.rst b/docs/releases/0.6.rst index ebd97fc056..9210b2c5dc 100644 --- a/docs/releases/0.6.rst +++ b/docs/releases/0.6.rst @@ -20,6 +20,8 @@ Minor features ~~~~~~~~~~~~~~ * A new template tag has been added for reversing URLs inside routable pages. See :ref:`routablepageurl_template_tag`. * RoutablePage can now be used as a mixin. See :class:`wagtail.contrib.wagtailroutablepage.models.RoutablePageMixin`. + * MenuItems can now have bundled JavaScript + * Added a new hook for registering admin menu items. See :ref:`register_admin_menu_item` Bug fixes ~~~~~~~~~ @@ -36,4 +38,4 @@ Deprecated features =================== * The ``wagtail.wagtailsearch.indexed`` module has been renamed to ``wagtail.wagtailsearch.index`` - \ No newline at end of file + From 35035d7339bb39f2433f5fadbb16637eee0adf12 Mon Sep 17 00:00:00 2001 From: Karl Hobley <karl@torchbox.com> Date: Fri, 5 Sep 2014 11:33:19 +0100 Subject: [PATCH 117/210] Added note to 0.6 saying that all features deprecated in 0.4 have been removed --- docs/releases/0.4.rst | 2 ++ docs/releases/0.6.rst | 5 +++++ 2 files changed, 7 insertions(+) diff --git a/docs/releases/0.4.rst b/docs/releases/0.4.rst index 0929935f60..4438af87e7 100644 --- a/docs/releases/0.4.rst +++ b/docs/releases/0.4.rst @@ -158,6 +158,8 @@ The scheduled publishing mechanism adds an ``expired`` field to wagtailcore.Page 'expired': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), +.. _04_deprecated_features: + Deprecated features =================== diff --git a/docs/releases/0.6.rst b/docs/releases/0.6.rst index 9210b2c5dc..fadf71fb67 100644 --- a/docs/releases/0.6.rst +++ b/docs/releases/0.6.rst @@ -33,6 +33,11 @@ Bug fixes Upgrade considerations ====================== +All features deprecated in 0.4 have been removed +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +See: :ref:`04_deprecated_features` + Deprecated features =================== From 626526fe8c774b198ab5c7b5b7653fa7f420f115 Mon Sep 17 00:00:00 2001 From: Matt Westcott <matt@west.co.tt> Date: Fri, 5 Sep 2014 11:38:40 +0100 Subject: [PATCH 118/210] Fix replace_text to catch child relations that are defined on a superclass --- wagtail/tests/fixtures/test.json | 7 ++++--- wagtail/tests/models.py | 1 + .../management/commands/replace_text.py | 7 +++---- .../tests/test_management_commands.py | 16 ++++++++++++---- 4 files changed, 20 insertions(+), 11 deletions(-) diff --git a/wagtail/tests/fixtures/test.json b/wagtail/tests/fixtures/test.json index 9fc7b17e08..4ec2565456 100644 --- a/wagtail/tests/fixtures/test.json +++ b/wagtail/tests/fixtures/test.json @@ -90,8 +90,8 @@ "model": "tests.eventpagespeaker", "fields": { "page": 4, - "first_name": "Santa", - "last_name": "Claus", + "first_name": "Father", + "last_name": "Christmas", "sort_order": 0 } }, @@ -567,7 +567,8 @@ "model": "tests.AdvertPlacement", "fields": { "page": 4, - "advert": 1 + "advert": 1, + "colour": "greener than a Christmas tree" } }, { diff --git a/wagtail/tests/models.py b/wagtail/tests/models.py index c7979273c4..c708c452b8 100644 --- a/wagtail/tests/models.py +++ b/wagtail/tests/models.py @@ -333,6 +333,7 @@ FormPage.content_panels = [ class AdvertPlacement(models.Model): page = ParentalKey('wagtailcore.Page', related_name='advert_placements') advert = models.ForeignKey('tests.Advert', related_name='+') + colour = models.CharField(max_length=255) @python_2_unicode_compatible class Advert(models.Model): diff --git a/wagtail/wagtailcore/management/commands/replace_text.py b/wagtail/wagtailcore/management/commands/replace_text.py index d654a61d68..0eb0ea77b0 100644 --- a/wagtail/wagtailcore/management/commands/replace_text.py +++ b/wagtail/wagtailcore/management/commands/replace_text.py @@ -1,6 +1,8 @@ from django.core.management.base import BaseCommand from django.db import models +from modelcluster.models import get_all_child_relations + from wagtail.wagtailcore.models import PageRevision, get_page_types @@ -27,10 +29,7 @@ class Command(BaseCommand): self.stdout.write("scanning %s" % content_type.name) page_class = content_type.model_class() - try: - child_relation_names = [rel.get_accessor_name() for rel in page_class._meta.child_relations] - except AttributeError: - child_relation_names = [] + child_relation_names = [rel.get_accessor_name() for rel in get_all_child_relations(page_class)] for page in page_class.objects.all(): replace_in_model(page, from_text, to_text) diff --git a/wagtail/wagtailcore/tests/test_management_commands.py b/wagtail/wagtailcore/tests/test_management_commands.py index d521497dd8..31c09a1f0d 100644 --- a/wagtail/wagtailcore/tests/test_management_commands.py +++ b/wagtail/wagtailcore/tests/test_management_commands.py @@ -8,7 +8,7 @@ from django.utils import timezone from wagtail.wagtailcore.models import Page, PageRevision from wagtail.wagtailcore.signals import page_published, page_unpublished -from wagtail.tests.models import SimplePage +from wagtail.tests.models import SimplePage, EventPage class TestFixTreeCommand(TestCase): @@ -82,13 +82,21 @@ class TestReplaceTextCommand(TestCase): def test_replace_text(self): # Check that the christmas page is definitely about christmas - self.assertEqual(Page.objects.get(url_path='/home/events/christmas/').title, "Christmas") + christmas_page = EventPage.objects.get(url_path='/home/events/christmas/') + self.assertEqual(christmas_page.title, "Christmas") + self.assertEqual(christmas_page.speakers.first().last_name, "Christmas") + self.assertEqual(christmas_page.advert_placements.first().colour, "greener than a Christmas tree") # Make it about easter self.run_command("Christmas", "Easter") - # Check that its now about easter - self.assertEqual(Page.objects.get(url_path='/home/events/christmas/').title, "Easter") + # Check that it's now about easter + easter_page = EventPage.objects.get(url_path='/home/events/christmas/') + self.assertEqual(easter_page.title, "Easter") + + # Check that we also update the child objects (including advert_placements, which is defined on the superclass) + self.assertEqual(easter_page.speakers.first().last_name, "Easter") + self.assertEqual(easter_page.advert_placements.first().colour, "greener than a Easter tree") class TestPublishScheduledPagesCommand(TestCase): From e94f610241dc4605ee2c3baa984a58f7edd8e54d Mon Sep 17 00:00:00 2001 From: Matt Westcott <matt@west.co.tt> Date: Fri, 5 Sep 2014 11:46:49 +0100 Subject: [PATCH 119/210] changelog entry for child_relations bugfixes --- CHANGELOG.txt | 1 + docs/releases/0.6.rst | 1 + 2 files changed, 2 insertions(+) diff --git a/CHANGELOG.txt b/CHANGELOG.txt index 88d2211005..c01074b7ae 100644 --- a/CHANGELOG.txt +++ b/CHANGELOG.txt @@ -10,6 +10,7 @@ Changelog * Fix: Page URL generation now returns correct URLs for sites that have the main 'serve' view rooted somewhere other than '/' * Fix: Search results in the page chooser now respect the page_type parameter on PageChooserPanel * Fix: Rendition filenames are now prevented from going over 60 chars, even with a large focal_point_key + * Fix: Child relations that are defined on a model's superclass (such as the base Page model) are now picked up correctly by the page editing form, page copy operations and the replace_text management command 0.5 (01.08.2014) ~~~~~~~~~~~~~~~~ diff --git a/docs/releases/0.6.rst b/docs/releases/0.6.rst index ebd97fc056..86d1bc91f4 100644 --- a/docs/releases/0.6.rst +++ b/docs/releases/0.6.rst @@ -27,6 +27,7 @@ Bug fixes * Page URL generation now returns correct URLs for sites that have the main 'serve' view rooted somewhere other than '/'. * Search results in the page chooser now respect the page_type parameter on PageChooserPanel. * Rendition filenames are now prevented from going over 60 chars, even with a large focal_point_key. + * Child relations that are defined on a model's superclass (such as the base Page model) are now picked up correctly by the page editing form, page copy operations and the replace_text management command. Upgrade considerations ====================== From 47fca3fac672bcc35aac9fc3b3679223075d9e3f Mon Sep 17 00:00:00 2001 From: Karl Hobley <karl@torchbox.com> Date: Fri, 5 Sep 2014 11:47:00 +0100 Subject: [PATCH 120/210] Improved consisntancy of spacing in 0.6 release notes --- docs/releases/0.6.rst | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/docs/releases/0.6.rst b/docs/releases/0.6.rst index fadf71fb67..d627e6bd94 100644 --- a/docs/releases/0.6.rst +++ b/docs/releases/0.6.rst @@ -23,6 +23,7 @@ Minor features * MenuItems can now have bundled JavaScript * Added a new hook for registering admin menu items. See :ref:`register_admin_menu_item` + Bug fixes ~~~~~~~~~ @@ -30,6 +31,7 @@ Bug fixes * Search results in the page chooser now respect the page_type parameter on PageChooserPanel. * Rendition filenames are now prevented from going over 60 chars, even with a large focal_point_key. + Upgrade considerations ====================== @@ -43,4 +45,4 @@ Deprecated features =================== * The ``wagtail.wagtailsearch.indexed`` module has been renamed to ``wagtail.wagtailsearch.index`` - + \ No newline at end of file From 663218c458473ff080b5a79d44236d34230d3798 Mon Sep 17 00:00:00 2001 From: Matt Westcott <matt@west.co.tt> Date: Fri, 5 Sep 2014 12:17:26 +0100 Subject: [PATCH 121/210] fix tests I broke by fiddling with the AdvertPlacement test model --- wagtail/tests/fixtures/test.json | 9 +++++++++ wagtail/wagtailadmin/tests/test_pages_views.py | 3 +++ wagtail/wagtailsnippets/tests.py | 2 +- 3 files changed, 13 insertions(+), 1 deletion(-) diff --git a/wagtail/tests/fixtures/test.json b/wagtail/tests/fixtures/test.json index 4ec2565456..9408744353 100644 --- a/wagtail/tests/fixtures/test.json +++ b/wagtail/tests/fixtures/test.json @@ -565,6 +565,15 @@ { "pk": 1, "model": "tests.AdvertPlacement", + "fields": { + "page": 2, + "advert": 1, + "colour": "yellow" + } +}, +{ + "pk": 2, + "model": "tests.AdvertPlacement", "fields": { "page": 4, "advert": 1, diff --git a/wagtail/wagtailadmin/tests/test_pages_views.py b/wagtail/wagtailadmin/tests/test_pages_views.py index d142b6daf6..ab231cc7ea 100644 --- a/wagtail/wagtailadmin/tests/test_pages_views.py +++ b/wagtail/wagtailadmin/tests/test_pages_views.py @@ -1738,6 +1738,7 @@ class TestChildRelationsOnSuperclass(TestCase, WagtailTestUtils): 'advert_placements-INITIAL_FORMS': '0', 'advert_placements-MAX_NUM_FORMS': '1000', 'advert_placements-0-advert': '1', + 'advert_placements-0-colour': 'yellow', 'advert_placements-0-id': '', } response = self.client.post(reverse('wagtailadmin_pages_create', args=('tests', 'standardindex', self.root_page.id)), post_data) @@ -1769,8 +1770,10 @@ class TestChildRelationsOnSuperclass(TestCase, WagtailTestUtils): 'advert_placements-INITIAL_FORMS': '1', 'advert_placements-MAX_NUM_FORMS': '1000', 'advert_placements-0-advert': '1', + 'advert_placements-0-colour': 'yellow', 'advert_placements-0-id': self.index_page.advert_placements.first().id, 'advert_placements-1-advert': '1', + 'advert_placements-1-colour': 'purple', 'advert_placements-1-id': '', 'action-publish': "Publish", } diff --git a/wagtail/wagtailsnippets/tests.py b/wagtail/wagtailsnippets/tests.py index 1b3431730f..0255925ab6 100644 --- a/wagtail/wagtailsnippets/tests.py +++ b/wagtail/wagtailsnippets/tests.py @@ -195,7 +195,7 @@ class TestUsageCount(TestCase): @override_settings(WAGTAIL_USAGE_COUNT_ENABLED=True) def test_snippet_usage_count(self): advert = Advert.objects.get(id=1) - self.assertEqual(advert.get_usage().count(), 1) + self.assertEqual(advert.get_usage().count(), 2) class TestUsedBy(TestCase): From ecd865752357b6a23ecfb535a4d432ef26d11f46 Mon Sep 17 00:00:00 2001 From: Matt Westcott <matt@west.co.tt> Date: Fri, 5 Sep 2014 12:37:58 +0100 Subject: [PATCH 122/210] add dj1.7 migration for adding 'colour' to AdvertPlacement test model --- .../migrations/0003_auto_20140905_0634.py | 20 +++++++++++++++++++ 1 file changed, 20 insertions(+) create mode 100644 wagtail/tests/migrations/0003_auto_20140905_0634.py diff --git a/wagtail/tests/migrations/0003_auto_20140905_0634.py b/wagtail/tests/migrations/0003_auto_20140905_0634.py new file mode 100644 index 0000000000..c1f69f5297 --- /dev/null +++ b/wagtail/tests/migrations/0003_auto_20140905_0634.py @@ -0,0 +1,20 @@ +# -*- coding: utf-8 -*- +from __future__ import unicode_literals + +from django.db import models, migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ('tests', '0002_auto_20140827_0908'), + ] + + operations = [ + migrations.AddField( + model_name='advertplacement', + name='colour', + field=models.CharField(default='blue', max_length=255), + preserve_default=False, + ), + ] From 9f96f676fda4817c62a6d5f29aff82c3665841e1 Mon Sep 17 00:00:00 2001 From: gordon <wgordonw1@gmail.com> Date: Sat, 6 Sep 2014 18:03:22 -0400 Subject: [PATCH 123/210] do not import south for dj17 --- wagtail/wagtailcore/fields.py | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/wagtail/wagtailcore/fields.py b/wagtail/wagtailcore/fields.py index 64235a4130..a1362b0743 100644 --- a/wagtail/wagtailcore/fields.py +++ b/wagtail/wagtailcore/fields.py @@ -1,6 +1,10 @@ +import django from django.db import models from django.forms import Textarea -from south.modelsinspector import add_introspection_rules + +if django.VERSION < (1, 7): + from south.modelsinspector import add_introspection_rules + add_introspection_rules([], ["^wagtail\.wagtailcore\.fields\.RichTextField"]) from wagtail.wagtailcore.rich_text import DbWhitelister, expand_db_html @@ -29,5 +33,3 @@ class RichTextField(models.TextField): defaults = {'widget': RichTextArea} defaults.update(kwargs) return super(RichTextField, self).formfield(**defaults) - -add_introspection_rules([], ["^wagtail\.wagtailcore\.fields\.RichTextField"]) From 82d60e514e3945b8f0295fc8100211a9235afa6d Mon Sep 17 00:00:00 2001 From: Karl Hobley <karl@torchbox.com> Date: Mon, 8 Sep 2014 09:19:37 +0100 Subject: [PATCH 124/210] Changelog and contributers files updates --- CHANGELOG.txt | 7 ++++--- CONTRIBUTORS.rst | 1 + 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/CHANGELOG.txt b/CHANGELOG.txt index eb07a2bddc..a977ccd452 100644 --- a/CHANGELOG.txt +++ b/CHANGELOG.txt @@ -4,15 +4,16 @@ Changelog 0.6 (xx.xx.20xx) ~~~~~~~~~~~~~~~~ * Added Django 1.7 support - * Added {% routablepageurl %} template tag (@timheap) - * Added RoutablePageMixin (@timheap) + * Added {% routablepageurl %} template tag (Tim Heap) + * Added RoutablePageMixin (Tim Heap) * MenuItems can now have bundled JavaScript * Added a new hook for registering admin menu items * Renamed wagtailsearch.indexed to wagtailsearch.index - * Fix: Page URL generation now returns correct URLs for sites that have the main 'serve' view rooted somewhere other than '/' + * Fix: Page URL generation now returns correct URLs for sites that have the main 'serve' view rooted somewhere other than '/' (Nathan Brizendine) * Fix: Search results in the page chooser now respect the page_type parameter on PageChooserPanel * Fix: Rendition filenames are now prevented from going over 60 chars, even with a large focal_point_key * Fix: Child relations that are defined on a model's superclass (such as the base Page model) are now picked up correctly by the page editing form, page copy operations and the replace_text management command + * Fix: (For Django 1.7 support) Do not import South when using Django 1.7 (thenewguy) 0.5 (01.08.2014) ~~~~~~~~~~~~~~~~ diff --git a/CONTRIBUTORS.rst b/CONTRIBUTORS.rst index b69fdb539c..64c72ff0ca 100644 --- a/CONTRIBUTORS.rst +++ b/CONTRIBUTORS.rst @@ -31,6 +31,7 @@ Contributors * Robert Clark * Tim Heap * Nathan Brizendine +* thenewguy Translators =========== From 807aa1ebb18186511c1f8f0b93570348a2f51f38 Mon Sep 17 00:00:00 2001 From: Karl Hobley <karl@torchbox.com> Date: Fri, 5 Sep 2014 17:52:08 +0100 Subject: [PATCH 125/210] Started work on manual image cropping --- wagtail/wagtailimages/admin_urls.py | 4 +- wagtail/wagtailimages/forms.py | 15 +++- wagtail/wagtailimages/models.py | 8 +-- .../static/wagtailimages/js/add-multiple.js | 4 ++ .../wagtailimages/js/focal-point-chooser.js | 52 ++++++++++++++ .../js/vendor/jquery.Jcrop.min.js | 22 ++++++ .../wagtailimages/scss/vendor/Jcrop.gif | Bin 0 -> 329 bytes .../scss/vendor/jquery.Jcrop.min.css | 29 ++++++++ .../focal_point_chooser/chooser.html | 11 +++ .../focal_point_chooser/chooser.js | 67 ++++++++++++++++++ .../images/_focal_point_chooser.html | 41 +++++++++++ .../templates/wagtailimages/images/edit.html | 14 ++++ .../templates/wagtailimages/multiple/add.html | 8 +++ .../wagtailimages/multiple/edit_form.html | 10 ++- .../views/focal_point_chooser.py | 21 ++++++ 15 files changed, 298 insertions(+), 8 deletions(-) create mode 100644 wagtail/wagtailimages/static/wagtailimages/js/focal-point-chooser.js create mode 100644 wagtail/wagtailimages/static/wagtailimages/js/vendor/jquery.Jcrop.min.js create mode 100644 wagtail/wagtailimages/static/wagtailimages/scss/vendor/Jcrop.gif create mode 100644 wagtail/wagtailimages/static/wagtailimages/scss/vendor/jquery.Jcrop.min.css create mode 100644 wagtail/wagtailimages/templates/wagtailimages/focal_point_chooser/chooser.html create mode 100644 wagtail/wagtailimages/templates/wagtailimages/focal_point_chooser/chooser.js create mode 100644 wagtail/wagtailimages/templates/wagtailimages/images/_focal_point_chooser.html create mode 100644 wagtail/wagtailimages/views/focal_point_chooser.py diff --git a/wagtail/wagtailimages/admin_urls.py b/wagtail/wagtailimages/admin_urls.py index 44bc61224c..1d04bcbfe3 100644 --- a/wagtail/wagtailimages/admin_urls.py +++ b/wagtail/wagtailimages/admin_urls.py @@ -1,6 +1,6 @@ from django.conf.urls import url -from wagtail.wagtailimages.views import images, chooser, multiple +from wagtail.wagtailimages.views import images, chooser, multiple, focal_point_chooser urlpatterns = [ @@ -20,4 +20,6 @@ urlpatterns = [ url(r'^chooser/(\d+)/$', chooser.image_chosen, name='wagtailimages_image_chosen'), url(r'^chooser/upload/$', chooser.chooser_upload, name='wagtailimages_chooser_upload'), url(r'^chooser/(\d+)/select_format/$', chooser.chooser_select_format, name='wagtailimages_chooser_select_format'), + + url(r'focal_point_chooser/(\d+)/$', focal_point_chooser.chooser, name='wagtailimages_focal_point_chooser') ] diff --git a/wagtail/wagtailimages/forms.py b/wagtail/wagtailimages/forms.py index 5f98fd1b02..af3b3ce838 100644 --- a/wagtail/wagtailimages/forms.py +++ b/wagtail/wagtailimages/forms.py @@ -12,12 +12,23 @@ def get_image_form(): # set the 'file' widget to a FileInput rather than the default ClearableFileInput # so that when editing, we don't get the 'currently: ...' banner which is # a bit pointless here - widgets={'file': forms.FileInput()}) + widgets={ + 'file': forms.FileInput(), + 'focal_point_x': forms.HiddenInput(attrs={'class': 'focal_point_x'}), + 'focal_point_y': forms.HiddenInput(attrs={'class': 'focal_point_y'}), + 'focal_point_width': forms.HiddenInput(attrs={'class': 'focal_point_width'}), + 'focal_point_height': forms.HiddenInput(attrs={'class': 'focal_point_height'}), + }) def get_image_form_for_multi(): # exclude the file widget - return modelform_factory(get_image_model(), exclude=('file',)) + return modelform_factory(get_image_model(), exclude=('file',), widgets={ + 'focal_point_x': forms.HiddenInput(attrs={'class': 'focal_point_x'}), + 'focal_point_y': forms.HiddenInput(attrs={'class': 'focal_point_y'}), + 'focal_point_width': forms.HiddenInput(attrs={'class': 'focal_point_width'}), + 'focal_point_height': forms.HiddenInput(attrs={'class': 'focal_point_height'}), + }) class ImageInsertionForm(forms.Form): diff --git a/wagtail/wagtailimages/models.py b/wagtail/wagtailimages/models.py index 404cc7210f..abd7c06a70 100644 --- a/wagtail/wagtailimages/models.py +++ b/wagtail/wagtailimages/models.py @@ -54,10 +54,10 @@ class AbstractImage(models.Model, TagSearchable): tags = TaggableManager(help_text=None, blank=True, verbose_name=_('Tags')) - focal_point_x = models.PositiveIntegerField(null=True, editable=False) - focal_point_y = models.PositiveIntegerField(null=True, editable=False) - focal_point_width = models.PositiveIntegerField(null=True, editable=False) - focal_point_height = models.PositiveIntegerField(null=True, editable=False) + focal_point_x = models.PositiveIntegerField(null=True, blank=True) + focal_point_y = models.PositiveIntegerField(null=True, blank=True) + focal_point_width = models.PositiveIntegerField(null=True, blank=True) + focal_point_height = models.PositiveIntegerField(null=True, blank=True) def get_usage(self): return get_object_usage(self) diff --git a/wagtail/wagtailimages/static/wagtailimages/js/add-multiple.js b/wagtail/wagtailimages/static/wagtailimages/js/add-multiple.js index 05c72feb43..ce6d355fa8 100644 --- a/wagtail/wagtailimages/static/wagtailimages/js/add-multiple.js +++ b/wagtail/wagtailimages/static/wagtailimages/js/add-multiple.js @@ -97,6 +97,10 @@ $(function(){ // run tagit enhancement $('.tag_field input', itemElement).tagit(window.tagit_opts); + + $('.focal-point-chooser', itemElement).each(function() { + createFocalPointCooser($(this)); + }); } else { itemElement.addClass('upload-failure'); $('.right .error_messages', itemElement).append(response.error_message); diff --git a/wagtail/wagtailimages/static/wagtailimages/js/focal-point-chooser.js b/wagtail/wagtailimages/static/wagtailimages/js/focal-point-chooser.js new file mode 100644 index 0000000000..6d0f385dbb --- /dev/null +++ b/wagtail/wagtailimages/static/wagtailimages/js/focal-point-chooser.js @@ -0,0 +1,52 @@ +function createFocalPointCooser($chooser) { + var $chosenText = $('.chosen-text', $chooser); + var $focalPointX = $('input.focal_point_x', $chooser); + var $focalPointY = $('input.focal_point_y', $chooser); + var $focalPointWidth = $('input.focal_point_width', $chooser); + var $focalPointHeight = $('input.focal_point_height', $chooser); + var chooserUrl = $chooser.data('chooserUrl'); + + $('.action-choose', $chooser).click(function() { + if (!$chooser.hasClass('blank')) { + window.focalPointChooserInitial = { + x: $focalPointX.val(), + y: $focalPointY.val(), + w: $focalPointWidth.val(), + h: $focalPointHeight.val(), + } + } else { + window.focalPointChooserInitial = undefined; + } + + ModalWorkflow({ + 'url': chooserUrl, + 'responses': { + 'focalPointChosen': function(focalPointData) { + $focalPointX.val(focalPointData.x); + $focalPointY.val(focalPointData.y); + $focalPointWidth.val(focalPointData.w); + $focalPointHeight.val(focalPointData.h); + + $chosenText.text(focalPointData.x + ", " + focalPointData.y + " " + focalPointData.w + "x" + focalPointData.h); + + $chooser.removeClass('blank'); + } + } + }); + }); + + $('.action-clear', $chooser).click(function() { + $focalPointX.val(''); + $focalPointY.val(''); + $focalPointWidth.val(''); + $focalPointHeight.val(''); + + $chooser.addClass('blank'); + }); +} + +$(function() { + $('.focal-point-chooser').each(function() { + createFocalPointCooser($(this)); + }); +}); diff --git a/wagtail/wagtailimages/static/wagtailimages/js/vendor/jquery.Jcrop.min.js b/wagtail/wagtailimages/static/wagtailimages/js/vendor/jquery.Jcrop.min.js new file mode 100644 index 0000000000..4c9c7adb6e --- /dev/null +++ b/wagtail/wagtailimages/static/wagtailimages/js/vendor/jquery.Jcrop.min.js @@ -0,0 +1,22 @@ +/** + * jquery.Jcrop.min.js v0.9.12 (build:20130202) + * jQuery Image Cropping Plugin - released under MIT License + * Copyright (c) 2008-2013 Tapmodo Interactive LLC + * https://github.com/tapmodo/Jcrop + */ +(function(a){a.Jcrop=function(b,c){function i(a){return Math.round(a)+"px"}function j(a){return d.baseClass+"-"+a}function k(){return a.fx.step.hasOwnProperty("backgroundColor")}function l(b){var c=a(b).offset();return[c.left,c.top]}function m(a){return[a.pageX-e[0],a.pageY-e[1]]}function n(b){typeof b!="object"&&(b={}),d=a.extend(d,b),a.each(["onChange","onSelect","onRelease","onDblClick"],function(a,b){typeof d[b]!="function"&&(d[b]=function(){})})}function o(a,b,c){e=l(D),bc.setCursor(a==="move"?a:a+"-resize");if(a==="move")return bc.activateHandlers(q(b),v,c);var d=_.getFixed(),f=r(a),g=_.getCorner(r(f));_.setPressed(_.getCorner(f)),_.setCurrent(g),bc.activateHandlers(p(a,d),v,c)}function p(a,b){return function(c){if(!d.aspectRatio)switch(a){case"e":c[1]=b.y2;break;case"w":c[1]=b.y2;break;case"n":c[0]=b.x2;break;case"s":c[0]=b.x2}else switch(a){case"e":c[1]=b.y+1;break;case"w":c[1]=b.y+1;break;case"n":c[0]=b.x+1;break;case"s":c[0]=b.x+1}_.setCurrent(c),bb.update()}}function q(a){var b=a;return bd.watchKeys +(),function(a){_.moveOffset([a[0]-b[0],a[1]-b[1]]),b=a,bb.update()}}function r(a){switch(a){case"n":return"sw";case"s":return"nw";case"e":return"nw";case"w":return"ne";case"ne":return"sw";case"nw":return"se";case"se":return"nw";case"sw":return"ne"}}function s(a){return function(b){return d.disabled?!1:a==="move"&&!d.allowMove?!1:(e=l(D),W=!0,o(a,m(b)),b.stopPropagation(),b.preventDefault(),!1)}}function t(a,b,c){var d=a.width(),e=a.height();d>b&&b>0&&(d=b,e=b/a.width()*a.height()),e>c&&c>0&&(e=c,d=c/a.height()*a.width()),T=a.width()/d,U=a.height()/e,a.width(d).height(e)}function u(a){return{x:a.x*T,y:a.y*U,x2:a.x2*T,y2:a.y2*U,w:a.w*T,h:a.h*U}}function v(a){var b=_.getFixed();b.w>d.minSelect[0]&&b.h>d.minSelect[1]?(bb.enableHandles(),bb.done()):bb.release(),bc.setCursor(d.allowSelect?"crosshair":"default")}function w(a){if(d.disabled)return!1;if(!d.allowSelect)return!1;W=!0,e=l(D),bb.disableHandles(),bc.setCursor("crosshair");var b=m(a);return _.setPressed(b),bb.update(),bc.activateHandlers(x,v,a.type.substring +(0,5)==="touch"),bd.watchKeys(),a.stopPropagation(),a.preventDefault(),!1}function x(a){_.setCurrent(a),bb.update()}function y(){var b=a("<div></div>").addClass(j("tracker"));return g&&b.css({opacity:0,backgroundColor:"white"}),b}function be(a){G.removeClass().addClass(j("holder")).addClass(a)}function bf(a,b){function t(){window.setTimeout(u,l)}var c=a[0]/T,e=a[1]/U,f=a[2]/T,g=a[3]/U;if(X)return;var h=_.flipCoords(c,e,f,g),i=_.getFixed(),j=[i.x,i.y,i.x2,i.y2],k=j,l=d.animationDelay,m=h[0]-j[0],n=h[1]-j[1],o=h[2]-j[2],p=h[3]-j[3],q=0,r=d.swingSpeed;c=k[0],e=k[1],f=k[2],g=k[3],bb.animMode(!0);var s,u=function(){return function(){q+=(100-q)/r,k[0]=Math.round(c+q/100*m),k[1]=Math.round(e+q/100*n),k[2]=Math.round(f+q/100*o),k[3]=Math.round(g+q/100*p),q>=99.8&&(q=100),q<100?(bh(k),t()):(bb.done(),bb.animMode(!1),typeof b=="function"&&b.call(bs))}}();t()}function bg(a){bh([a[0]/T,a[1]/U,a[2]/T,a[3]/U]),d.onSelect.call(bs,u(_.getFixed())),bb.enableHandles()}function bh(a){_.setPressed([a[0],a[1]]),_.setCurrent([a[2], +a[3]]),bb.update()}function bi(){return u(_.getFixed())}function bj(){return _.getFixed()}function bk(a){n(a),br()}function bl(){d.disabled=!0,bb.disableHandles(),bb.setCursor("default"),bc.setCursor("default")}function bm(){d.disabled=!1,br()}function bn(){bb.done(),bc.activateHandlers(null,null)}function bo(){G.remove(),A.show(),A.css("visibility","visible"),a(b).removeData("Jcrop")}function bp(a,b){bb.release(),bl();var c=new Image;c.onload=function(){var e=c.width,f=c.height,g=d.boxWidth,h=d.boxHeight;D.width(e).height(f),D.attr("src",a),H.attr("src",a),t(D,g,h),E=D.width(),F=D.height(),H.width(E).height(F),M.width(E+L*2).height(F+L*2),G.width(E).height(F),ba.resize(E,F),bm(),typeof b=="function"&&b.call(bs)},c.src=a}function bq(a,b,c){var e=b||d.bgColor;d.bgFade&&k()&&d.fadeTime&&!c?a.animate({backgroundColor:e},{queue:!1,duration:d.fadeTime}):a.css("backgroundColor",e)}function br(a){d.allowResize?a?bb.enableOnly():bb.enableHandles():bb.disableHandles(),bc.setCursor(d.allowSelect?"crosshair":"default"),bb +.setCursor(d.allowMove?"move":"default"),d.hasOwnProperty("trueSize")&&(T=d.trueSize[0]/E,U=d.trueSize[1]/F),d.hasOwnProperty("setSelect")&&(bg(d.setSelect),bb.done(),delete d.setSelect),ba.refresh(),d.bgColor!=N&&(bq(d.shade?ba.getShades():G,d.shade?d.shadeColor||d.bgColor:d.bgColor),N=d.bgColor),O!=d.bgOpacity&&(O=d.bgOpacity,d.shade?ba.refresh():bb.setBgOpacity(O)),P=d.maxSize[0]||0,Q=d.maxSize[1]||0,R=d.minSize[0]||0,S=d.minSize[1]||0,d.hasOwnProperty("outerImage")&&(D.attr("src",d.outerImage),delete d.outerImage),bb.refresh()}var d=a.extend({},a.Jcrop.defaults),e,f=navigator.userAgent.toLowerCase(),g=/msie/.test(f),h=/msie [1-6]\./.test(f);typeof b!="object"&&(b=a(b)[0]),typeof c!="object"&&(c={}),n(c);var z={border:"none",visibility:"visible",margin:0,padding:0,position:"absolute",top:0,left:0},A=a(b),B=!0;if(b.tagName=="IMG"){if(A[0].width!=0&&A[0].height!=0)A.width(A[0].width),A.height(A[0].height);else{var C=new Image;C.src=A[0].src,A.width(C.width),A.height(C.height)}var D=A.clone().removeAttr("id"). +css(z).show();D.width(A.width()),D.height(A.height()),A.after(D).hide()}else D=A.css(z).show(),B=!1,d.shade===null&&(d.shade=!0);t(D,d.boxWidth,d.boxHeight);var E=D.width(),F=D.height(),G=a("<div />").width(E).height(F).addClass(j("holder")).css({position:"relative",backgroundColor:d.bgColor}).insertAfter(A).append(D);d.addClass&&G.addClass(d.addClass);var H=a("<div />"),I=a("<div />").width("100%").height("100%").css({zIndex:310,position:"absolute",overflow:"hidden"}),J=a("<div />").width("100%").height("100%").css("zIndex",320),K=a("<div />").css({position:"absolute",zIndex:600}).dblclick(function(){var a=_.getFixed();d.onDblClick.call(bs,a)}).insertBefore(D).append(I,J);B&&(H=a("<img />").attr("src",D.attr("src")).css(z).width(E).height(F),I.append(H)),h&&K.css({overflowY:"hidden"});var L=d.boundary,M=y().width(E+L*2).height(F+L*2).css({position:"absolute",top:i(-L),left:i(-L),zIndex:290}).mousedown(w),N=d.bgColor,O=d.bgOpacity,P,Q,R,S,T,U,V=!0,W,X,Y;e=l(D);var Z=function(){function a(){var a={},b=["touchstart" +,"touchmove","touchend"],c=document.createElement("div"),d;try{for(d=0;d<b.length;d++){var e=b[d];e="on"+e;var f=e in c;f||(c.setAttribute(e,"return;"),f=typeof c[e]=="function"),a[b[d]]=f}return a.touchstart&&a.touchend&&a.touchmove}catch(g){return!1}}function b(){return d.touchSupport===!0||d.touchSupport===!1?d.touchSupport:a()}return{createDragger:function(a){return function(b){return d.disabled?!1:a==="move"&&!d.allowMove?!1:(e=l(D),W=!0,o(a,m(Z.cfilter(b)),!0),b.stopPropagation(),b.preventDefault(),!1)}},newSelection:function(a){return w(Z.cfilter(a))},cfilter:function(a){return a.pageX=a.originalEvent.changedTouches[0].pageX,a.pageY=a.originalEvent.changedTouches[0].pageY,a},isSupported:a,support:b()}}(),_=function(){function h(d){d=n(d),c=a=d[0],e=b=d[1]}function i(a){a=n(a),f=a[0]-c,g=a[1]-e,c=a[0],e=a[1]}function j(){return[f,g]}function k(d){var f=d[0],g=d[1];0>a+f&&(f-=f+a),0>b+g&&(g-=g+b),F<e+g&&(g+=F-(e+g)),E<c+f&&(f+=E-(c+f)),a+=f,c+=f,b+=g,e+=g}function l(a){var b=m();switch(a){case"ne":return[ +b.x2,b.y];case"nw":return[b.x,b.y];case"se":return[b.x2,b.y2];case"sw":return[b.x,b.y2]}}function m(){if(!d.aspectRatio)return p();var f=d.aspectRatio,g=d.minSize[0]/T,h=d.maxSize[0]/T,i=d.maxSize[1]/U,j=c-a,k=e-b,l=Math.abs(j),m=Math.abs(k),n=l/m,r,s,t,u;return h===0&&(h=E*10),i===0&&(i=F*10),n<f?(s=e,t=m*f,r=j<0?a-t:t+a,r<0?(r=0,u=Math.abs((r-a)/f),s=k<0?b-u:u+b):r>E&&(r=E,u=Math.abs((r-a)/f),s=k<0?b-u:u+b)):(r=c,u=l/f,s=k<0?b-u:b+u,s<0?(s=0,t=Math.abs((s-b)*f),r=j<0?a-t:t+a):s>F&&(s=F,t=Math.abs(s-b)*f,r=j<0?a-t:t+a)),r>a?(r-a<g?r=a+g:r-a>h&&(r=a+h),s>b?s=b+(r-a)/f:s=b-(r-a)/f):r<a&&(a-r<g?r=a-g:a-r>h&&(r=a-h),s>b?s=b+(a-r)/f:s=b-(a-r)/f),r<0?(a-=r,r=0):r>E&&(a-=r-E,r=E),s<0?(b-=s,s=0):s>F&&(b-=s-F,s=F),q(o(a,b,r,s))}function n(a){return a[0]<0&&(a[0]=0),a[1]<0&&(a[1]=0),a[0]>E&&(a[0]=E),a[1]>F&&(a[1]=F),[Math.round(a[0]),Math.round(a[1])]}function o(a,b,c,d){var e=a,f=c,g=b,h=d;return c<a&&(e=c,f=a),d<b&&(g=d,h=b),[e,g,f,h]}function p(){var d=c-a,f=e-b,g;return P&&Math.abs(d)>P&&(c=d>0?a+P:a-P),Q&&Math.abs +(f)>Q&&(e=f>0?b+Q:b-Q),S/U&&Math.abs(f)<S/U&&(e=f>0?b+S/U:b-S/U),R/T&&Math.abs(d)<R/T&&(c=d>0?a+R/T:a-R/T),a<0&&(c-=a,a-=a),b<0&&(e-=b,b-=b),c<0&&(a-=c,c-=c),e<0&&(b-=e,e-=e),c>E&&(g=c-E,a-=g,c-=g),e>F&&(g=e-F,b-=g,e-=g),a>E&&(g=a-F,e-=g,b-=g),b>F&&(g=b-F,e-=g,b-=g),q(o(a,b,c,e))}function q(a){return{x:a[0],y:a[1],x2:a[2],y2:a[3],w:a[2]-a[0],h:a[3]-a[1]}}var a=0,b=0,c=0,e=0,f,g;return{flipCoords:o,setPressed:h,setCurrent:i,getOffset:j,moveOffset:k,getCorner:l,getFixed:m}}(),ba=function(){function f(a,b){e.left.css({height:i(b)}),e.right.css({height:i(b)})}function g(){return h(_.getFixed())}function h(a){e.top.css({left:i(a.x),width:i(a.w),height:i(a.y)}),e.bottom.css({top:i(a.y2),left:i(a.x),width:i(a.w),height:i(F-a.y2)}),e.right.css({left:i(a.x2),width:i(E-a.x2)}),e.left.css({width:i(a.x)})}function j(){return a("<div />").css({position:"absolute",backgroundColor:d.shadeColor||d.bgColor}).appendTo(c)}function k(){b||(b=!0,c.insertBefore(D),g(),bb.setBgOpacity(1,0,1),H.hide(),l(d.shadeColor||d.bgColor,1),bb. +isAwake()?n(d.bgOpacity,1):n(1,1))}function l(a,b){bq(p(),a,b)}function m(){b&&(c.remove(),H.show(),b=!1,bb.isAwake()?bb.setBgOpacity(d.bgOpacity,1,1):(bb.setBgOpacity(1,1,1),bb.disableHandles()),bq(G,0,1))}function n(a,e){b&&(d.bgFade&&!e?c.animate({opacity:1-a},{queue:!1,duration:d.fadeTime}):c.css({opacity:1-a}))}function o(){d.shade?k():m(),bb.isAwake()&&n(d.bgOpacity)}function p(){return c.children()}var b=!1,c=a("<div />").css({position:"absolute",zIndex:240,opacity:0}),e={top:j(),left:j().height(F),right:j().height(F),bottom:j()};return{update:g,updateRaw:h,getShades:p,setBgColor:l,enable:k,disable:m,resize:f,refresh:o,opacity:n}}(),bb=function(){function k(b){var c=a("<div />").css({position:"absolute",opacity:d.borderOpacity}).addClass(j(b));return I.append(c),c}function l(b,c){var d=a("<div />").mousedown(s(b)).css({cursor:b+"-resize",position:"absolute",zIndex:c}).addClass("ord-"+b);return Z.support&&d.bind("touchstart.jcrop",Z.createDragger(b)),J.append(d),d}function m(a){var b=d.handleSize,e=l(a,c++ +).css({opacity:d.handleOpacity}).addClass(j("handle"));return b&&e.width(b).height(b),e}function n(a){return l(a,c++).addClass("jcrop-dragbar")}function o(a){var b;for(b=0;b<a.length;b++)g[a[b]]=n(a[b])}function p(a){var b,c;for(c=0;c<a.length;c++){switch(a[c]){case"n":b="hline";break;case"s":b="hline bottom";break;case"e":b="vline right";break;case"w":b="vline"}e[a[c]]=k(b)}}function q(a){var b;for(b=0;b<a.length;b++)f[a[b]]=m(a[b])}function r(a,b){d.shade||H.css({top:i(-b),left:i(-a)}),K.css({top:i(b),left:i(a)})}function t(a,b){K.width(Math.round(a)).height(Math.round(b))}function v(){var a=_.getFixed();_.setPressed([a.x,a.y]),_.setCurrent([a.x2,a.y2]),w()}function w(a){if(b)return x(a)}function x(a){var c=_.getFixed();t(c.w,c.h),r(c.x,c.y),d.shade&&ba.updateRaw(c),b||A(),a?d.onSelect.call(bs,u(c)):d.onChange.call(bs,u(c))}function z(a,c,e){if(!b&&!c)return;d.bgFade&&!e?D.animate({opacity:a},{queue:!1,duration:d.fadeTime}):D.css("opacity",a)}function A(){K.show(),d.shade?ba.opacity(O):z(O,!0),b=!0}function B +(){F(),K.hide(),d.shade?ba.opacity(1):z(1),b=!1,d.onRelease.call(bs)}function C(){h&&J.show()}function E(){h=!0;if(d.allowResize)return J.show(),!0}function F(){h=!1,J.hide()}function G(a){a?(X=!0,F()):(X=!1,E())}function L(){G(!1),v()}var b,c=370,e={},f={},g={},h=!1;d.dragEdges&&a.isArray(d.createDragbars)&&o(d.createDragbars),a.isArray(d.createHandles)&&q(d.createHandles),d.drawBorders&&a.isArray(d.createBorders)&&p(d.createBorders),a(document).bind("touchstart.jcrop-ios",function(b){a(b.currentTarget).hasClass("jcrop-tracker")&&b.stopPropagation()});var M=y().mousedown(s("move")).css({cursor:"move",position:"absolute",zIndex:360});return Z.support&&M.bind("touchstart.jcrop",Z.createDragger("move")),I.append(M),F(),{updateVisible:w,update:x,release:B,refresh:v,isAwake:function(){return b},setCursor:function(a){M.css("cursor",a)},enableHandles:E,enableOnly:function(){h=!0},showHandles:C,disableHandles:F,animMode:G,setBgOpacity:z,done:L}}(),bc=function(){function f(b){M.css({zIndex:450}),b?a(document).bind("touchmove.jcrop" +,k).bind("touchend.jcrop",l):e&&a(document).bind("mousemove.jcrop",h).bind("mouseup.jcrop",i)}function g(){M.css({zIndex:290}),a(document).unbind(".jcrop")}function h(a){return b(m(a)),!1}function i(a){return a.preventDefault(),a.stopPropagation(),W&&(W=!1,c(m(a)),bb.isAwake()&&d.onSelect.call(bs,u(_.getFixed())),g(),b=function(){},c=function(){}),!1}function j(a,d,e){return W=!0,b=a,c=d,f(e),!1}function k(a){return b(m(Z.cfilter(a))),!1}function l(a){return i(Z.cfilter(a))}function n(a){M.css("cursor",a)}var b=function(){},c=function(){},e=d.trackDocument;return e||M.mousemove(h).mouseup(i).mouseout(i),D.before(M),{activateHandlers:j,setCursor:n}}(),bd=function(){function e(){d.keySupport&&(b.show(),b.focus())}function f(a){b.hide()}function g(a,b,c){d.allowMove&&(_.moveOffset([b,c]),bb.updateVisible(!0)),a.preventDefault(),a.stopPropagation()}function i(a){if(a.ctrlKey||a.metaKey)return!0;Y=a.shiftKey?!0:!1;var b=Y?10:1;switch(a.keyCode){case 37:g(a,-b,0);break;case 39:g(a,b,0);break;case 38:g(a,0,-b);break; +case 40:g(a,0,b);break;case 27:d.allowSelect&&bb.release();break;case 9:return!0}return!1}var b=a('<input type="radio" />').css({position:"fixed",left:"-120px",width:"12px"}).addClass("jcrop-keymgr"),c=a("<div />").css({position:"absolute",overflow:"hidden"}).append(b);return d.keySupport&&(b.keydown(i).blur(f),h||!d.fixedSupport?(b.css({position:"absolute",left:"-20px"}),c.append(b).insertBefore(D)):b.insertBefore(D)),{watchKeys:e}}();Z.support&&M.bind("touchstart.jcrop",Z.newSelection),J.hide(),br(!0);var bs={setImage:bp,animateTo:bf,setSelect:bg,setOptions:bk,tellSelect:bi,tellScaled:bj,setClass:be,disable:bl,enable:bm,cancel:bn,release:bb.release,destroy:bo,focus:bd.watchKeys,getBounds:function(){return[E*T,F*U]},getWidgetSize:function(){return[E,F]},getScaleFactor:function(){return[T,U]},getOptions:function(){return d},ui:{holder:G,selection:K}};return g&&G.bind("selectstart",function(){return!1}),A.data("Jcrop",bs),bs},a.fn.Jcrop=function(b,c){var d;return this.each(function(){if(a(this).data("Jcrop")){if( +b==="api")return a(this).data("Jcrop");a(this).data("Jcrop").setOptions(b)}else this.tagName=="IMG"?a.Jcrop.Loader(this,function(){a(this).css({display:"block",visibility:"hidden"}),d=a.Jcrop(this,b),a.isFunction(c)&&c.call(d)}):(a(this).css({display:"block",visibility:"hidden"}),d=a.Jcrop(this,b),a.isFunction(c)&&c.call(d))}),this},a.Jcrop.Loader=function(b,c,d){function g(){f.complete?(e.unbind(".jcloader"),a.isFunction(c)&&c.call(f)):window.setTimeout(g,50)}var e=a(b),f=e[0];e.bind("load.jcloader",g).bind("error.jcloader",function(b){e.unbind(".jcloader"),a.isFunction(d)&&d.call(f)}),f.complete&&a.isFunction(c)&&(e.unbind(".jcloader"),c.call(f))},a.Jcrop.defaults={allowSelect:!0,allowMove:!0,allowResize:!0,trackDocument:!0,baseClass:"jcrop",addClass:null,bgColor:"black",bgOpacity:.6,bgFade:!1,borderOpacity:.4,handleOpacity:.5,handleSize:null,aspectRatio:0,keySupport:!0,createHandles:["n","s","e","w","nw","ne","se","sw"],createDragbars:["n","s","e","w"],createBorders:["n","s","e","w"],drawBorders:!0,dragEdges +:!0,fixedSupport:!0,touchSupport:null,shade:null,boxWidth:0,boxHeight:0,boundary:2,fadeTime:400,animationDelay:20,swingSpeed:3,minSelect:[0,0],maxSize:[0,0],minSize:[0,0],onChange:function(){},onSelect:function(){},onDblClick:function(){},onRelease:function(){}}})(jQuery); \ No newline at end of file diff --git a/wagtail/wagtailimages/static/wagtailimages/scss/vendor/Jcrop.gif b/wagtail/wagtailimages/static/wagtailimages/scss/vendor/Jcrop.gif new file mode 100644 index 0000000000000000000000000000000000000000..72ea7ccb5321d5384d70437cfaac73011237901e GIT binary patch literal 329 zcmZ?wbhEHb<Y3@nn8?7eYSpU$|Nk?9f#QE|Ki808XU70nBRvCVMxdbLPZmxtAgu#Z z0Mf$1#5;wRb9wgJ5Fhr7kxzB7so-zXTQDQ*d0g~`g(u!D-HO!|ewLP`>9b#5NV>2k zBC~b@b~P=nNfWAe-b%_i6tS^-1y(h@EsB~1TqDA_h@fkxG$bHgvj}VxE1JLgr!*!^ ILUxTc0Q$^Q5C8xG literal 0 HcmV?d00001 diff --git a/wagtail/wagtailimages/static/wagtailimages/scss/vendor/jquery.Jcrop.min.css b/wagtail/wagtailimages/static/wagtailimages/scss/vendor/jquery.Jcrop.min.css new file mode 100644 index 0000000000..edc76b2b3f --- /dev/null +++ b/wagtail/wagtailimages/static/wagtailimages/scss/vendor/jquery.Jcrop.min.css @@ -0,0 +1,29 @@ +/* jquery.Jcrop.min.css v0.9.12 (build:20130126) */ +.jcrop-holder{direction:ltr;text-align:left;} +.jcrop-vline,.jcrop-hline{background:#FFF url(Jcrop.gif);font-size:0;position:absolute;} +.jcrop-vline{height:100%;width:1px!important;} +.jcrop-vline.right{right:0;} +.jcrop-hline{height:1px!important;width:100%;} +.jcrop-hline.bottom{bottom:0;} +.jcrop-tracker{-webkit-tap-highlight-color:transparent;-webkit-touch-callout:none;-webkit-user-select:none;height:100%;width:100%;} +.jcrop-handle{background-color:#333;border:1px #EEE solid;font-size:1px;height:7px;width:7px;} +.jcrop-handle.ord-n{left:50%;margin-left:-4px;margin-top:-4px;top:0;} +.jcrop-handle.ord-s{bottom:0;left:50%;margin-bottom:-4px;margin-left:-4px;} +.jcrop-handle.ord-e{margin-right:-4px;margin-top:-4px;right:0;top:50%;} +.jcrop-handle.ord-w{left:0;margin-left:-4px;margin-top:-4px;top:50%;} +.jcrop-handle.ord-nw{left:0;margin-left:-4px;margin-top:-4px;top:0;} +.jcrop-handle.ord-ne{margin-right:-4px;margin-top:-4px;right:0;top:0;} +.jcrop-handle.ord-se{bottom:0;margin-bottom:-4px;margin-right:-4px;right:0;} +.jcrop-handle.ord-sw{bottom:0;left:0;margin-bottom:-4px;margin-left:-4px;} +.jcrop-dragbar.ord-n,.jcrop-dragbar.ord-s{height:7px;width:100%;} +.jcrop-dragbar.ord-e,.jcrop-dragbar.ord-w{height:100%;width:7px;} +.jcrop-dragbar.ord-n{margin-top:-4px;} +.jcrop-dragbar.ord-s{bottom:0;margin-bottom:-4px;} +.jcrop-dragbar.ord-e{margin-right:-4px;right:0;} +.jcrop-dragbar.ord-w{margin-left:-4px;} +.jcrop-light .jcrop-vline,.jcrop-light .jcrop-hline{background:#FFF;filter:alpha(opacity=70)!important;opacity:.70!important;} +.jcrop-light .jcrop-handle{-moz-border-radius:3px;-webkit-border-radius:3px;background-color:#000;border-color:#FFF;border-radius:3px;} +.jcrop-dark .jcrop-vline,.jcrop-dark .jcrop-hline{background:#000;filter:alpha(opacity=70)!important;opacity:.7!important;} +.jcrop-dark .jcrop-handle{-moz-border-radius:3px;-webkit-border-radius:3px;background-color:#FFF;border-color:#000;border-radius:3px;} +.solid-line .jcrop-vline,.solid-line .jcrop-hline{background:#FFF;} +.jcrop-holder img,img.jcrop-preview{max-width:none;} diff --git a/wagtail/wagtailimages/templates/wagtailimages/focal_point_chooser/chooser.html b/wagtail/wagtailimages/templates/wagtailimages/focal_point_chooser/chooser.html new file mode 100644 index 0000000000..dcb13504fd --- /dev/null +++ b/wagtail/wagtailimages/templates/wagtailimages/focal_point_chooser/chooser.html @@ -0,0 +1,11 @@ +{% load wagtailimages_tags i18n %} + +{% trans "Choose focal point" as title_str %} +{% include "wagtailadmin/shared/header.html" with title=title_str %} + +<div class="nice-padding"> + <div class="focal-point-chooser-image"> + {% image image max-800x600 %} + </div> + <a class="choose-focal-point">Done</a> +</div> \ No newline at end of file diff --git a/wagtail/wagtailimages/templates/wagtailimages/focal_point_chooser/chooser.js b/wagtail/wagtailimages/templates/wagtailimages/focal_point_chooser/chooser.js new file mode 100644 index 0000000000..a01807b14b --- /dev/null +++ b/wagtail/wagtailimages/templates/wagtailimages/focal_point_chooser/chooser.js @@ -0,0 +1,67 @@ +function(modal) { + var jcapi; + + function ajaxifyLinks (context) { + $('.listing a', context).click(function() { + modal.loadUrl(this.href); + return false; + }); + + $('.pagination a', context).click(function() { + var page = this.getAttribute("data-page"); + setPage(page); + return false; + }); + } + + ajaxifyLinks(modal.body); + + // Find image element + var $image = $('.focal-point-chooser-image img'); + + // Switch on Jcrop + $image.Jcrop({}, function() { + jcapi = this; + }); + + // Set initial select box + if (window.focalPointChooserInitial) { + var scaleX = {{ image.width }} / $image.width(); + var scaleY = {{ image.height }} / $image.height(); + + var x = window.focalPointChooserInitial.x / scaleX; + var y = window.focalPointChooserInitial.y / scaleY; + var w = window.focalPointChooserInitial.w / scaleX; + var h = window.focalPointChooserInitial.h / scaleY; + + jcapi.setSelect([ + x - w / 2, + y - h / 2, + x + w / 2, + y + h / 2, + ]); + } + + $('a.choose-focal-point', modal.body).click(function() { + var selectBox = jcapi.tellSelect(); + var scaleX = {{ image.width }} / $image.width(); + var scaleY = {{ image.height }} / $image.height(); + + modal.respond('focalPointChosen', { + x: Math.floor(scaleX * (selectBox.x + selectBox.x2) / 2), + y: Math.floor(scaleY * (selectBox.y + selectBox.y2) / 2), + w: Math.floor(scaleX * selectBox.w), + h: Math.floor(scaleY * selectBox.h), + }); + + modal.close(); + + return false; + }); + + $('#id_q').on('input', function() { + clearTimeout($.data(this, 'timer')); + var wait = setTimeout(search, 200); + $(this).data('timer', wait); + }); +} \ No newline at end of file diff --git a/wagtail/wagtailimages/templates/wagtailimages/images/_focal_point_chooser.html b/wagtail/wagtailimages/templates/wagtailimages/images/_focal_point_chooser.html new file mode 100644 index 0000000000..797444947b --- /dev/null +++ b/wagtail/wagtailimages/templates/wagtailimages/images/_focal_point_chooser.html @@ -0,0 +1,41 @@ +{% load wagtailadmin_tags i18n %} + +<div class="field"> + <label>{% trans "Focal point" %}</label> + <div class="field-content"> + <div class="input"> + + <div class="chooser focal-point-chooser{% if not image.focal_point %} blank{% endif %}" data-chooser-url="{% url 'wagtailimages_focal_point_chooser' image.id %}"> + <div class="chosen"> + <div class="chosen-text"> + {% if image.focal_point %} + {{ image.focal_point_x }}, {{ image.focal_point_y }} {{ image.focal_point_width }}x{{ image.focal_point_height }} + {% endif %} + </div> + <div class="actions"> + <input type="button" class="action-clear button-small button-secondary" value="{% trans "Clear" %}"> + <input type="button" class="action-choose button-small button-secondary" value="{% trans "Change" %}"> + </div> + </div> + + <div class="unchosen"> + <div class="unchosen-text">{% trans "Not set" %}</div> + <input type="button" class="action-choose button-small button-secondary" value="{% trans "Set" %}"> + </div> + + {{ form.focal_point_x }} + {{ form.focal_point_y }} + {{ form.focal_point_width }} + {{ form.focal_point_height }} + </div> + </div> + + <p class="help"></p> + + {% if field.errors %} + <p class="error-message"> + <span>Invalid input</span> + </p> + {% endif %} + </div> +</div> diff --git a/wagtail/wagtailimages/templates/wagtailimages/images/edit.html b/wagtail/wagtailimages/templates/wagtailimages/images/edit.html index e904bd426e..1a91959fb1 100644 --- a/wagtail/wagtailimages/templates/wagtailimages/images/edit.html +++ b/wagtail/wagtailimages/templates/wagtailimages/images/edit.html @@ -5,10 +5,18 @@ {% block bodyclass %}menu-images{% endblock %} {% block extra_css %} {% include "wagtailadmin/shared/tag_field_css.html" %} + + <!-- Focal point chooser --> + <link rel="stylesheet" href="{{ STATIC_URL }}wagtailimages/scss/vendor/jquery.Jcrop.min.css" type="text/css"> {% endblock %} {% block extra_js %} {% include "wagtailadmin/shared/tag_field_js.html" %} + + <!-- Focal point chooser --> + <script src="{{ STATIC_URL }}wagtailimages/js/vendor/jquery.Jcrop.min.js"></script> + <script src="{{ STATIC_URL }}wagtailadmin/js/modal-workflow.js"></script> + <script src="{{ STATIC_URL }}wagtailimages/js/focal-point-chooser.js"></script> {% endblock %} {% block content %} @@ -25,6 +33,12 @@ {% if field.name == 'file' %} {% include "wagtailimages/images/_file_field.html" %} + {% elif field.name == 'focal_point_x' %} + {% include "wagtailimages/images/_focal_point_chooser.html" %} + {% elif field.name == 'focal_point_y' or field.name == 'focal_point_width' or field.name == 'focal_point_height' %} + {# These fields are included in the focal point chooser above #} + {% elif field.is_hidden %} + {{ field }} {% else %} {% include "wagtailadmin/shared/field_as_li.html" %} {% endif %} diff --git a/wagtail/wagtailimages/templates/wagtailimages/multiple/add.html b/wagtail/wagtailimages/templates/wagtailimages/multiple/add.html index 9bde36d091..426ef04fe0 100644 --- a/wagtail/wagtailimages/templates/wagtailimages/multiple/add.html +++ b/wagtail/wagtailimages/templates/wagtailimages/multiple/add.html @@ -7,6 +7,9 @@ <link rel="stylesheet" href="{{ STATIC_URL }}wagtailimages/scss/add-multiple.scss" type="text/x-scss" /> {% endcompress %} {% include "wagtailadmin/shared/tag_field_css.html" %} + + <!-- Focal point chooser --> + <link rel="stylesheet" href="{{ STATIC_URL }}wagtailimages/scss/vendor/jquery.Jcrop.min.css" type="text/css"> {% endblock %} {% block content %} @@ -62,6 +65,11 @@ <script src="{{ STATIC_URL }}wagtailimages/js/vendor/jquery.fileupload-process.js"></script> <script src="{{ STATIC_URL }}wagtailimages/js/vendor/jquery.fileupload-image.js"></script> <script src="{{ STATIC_URL }}wagtailadmin/js/vendor/tag-it.js"></script> + + <!-- Focal point chooser --> + <script src="{{ STATIC_URL }}wagtailimages/js/vendor/jquery.Jcrop.min.js"></script> + <script src="{{ STATIC_URL }}wagtailadmin/js/modal-workflow.js"></script> + <script src="{{ STATIC_URL }}wagtailimages/js/focal-point-chooser.js"></script> <!-- Main script --> <script src="{{ STATIC_URL }}wagtailimages/js/add-multiple.js"></script> diff --git a/wagtail/wagtailimages/templates/wagtailimages/multiple/edit_form.html b/wagtail/wagtailimages/templates/wagtailimages/multiple/edit_form.html index 9fdebacc17..a07fc0d9e9 100644 --- a/wagtail/wagtailimages/templates/wagtailimages/multiple/edit_form.html +++ b/wagtail/wagtailimages/templates/wagtailimages/multiple/edit_form.html @@ -4,7 +4,15 @@ <ul class="fields"> {% csrf_token %} {% for field in form %} - {% include "wagtailadmin/shared/field_as_li.html" %} + {% if field.name == 'focal_point_x' %} + {% include "wagtailimages/images/_focal_point_chooser.html" %} + {% elif field.name == 'focal_point_y' or field.name == 'focal_point_width' or field.name == 'focal_point_height' %} + {# These fields are included in the focal point chooser above #} + {% elif field.is_hidden %} + {{ field }} + {% else %} + {% include "wagtailadmin/shared/field_as_li.html" %} + {% endif %} {% endfor %} <li> <input type="submit" value="{% trans 'Update' %}" /> diff --git a/wagtail/wagtailimages/views/focal_point_chooser.py b/wagtail/wagtailimages/views/focal_point_chooser.py new file mode 100644 index 0000000000..21ca26c790 --- /dev/null +++ b/wagtail/wagtailimages/views/focal_point_chooser.py @@ -0,0 +1,21 @@ +import json + +from django.shortcuts import get_object_or_404, render +from django.core.paginator import Paginator, EmptyPage, PageNotAnInteger +from django.contrib.auth.decorators import permission_required + +from wagtail.wagtailadmin.modal_workflow import render_modal_workflow +from wagtail.wagtailadmin.forms import SearchForm + +from wagtail.wagtailimages.models import get_image_model +from wagtail.wagtailimages.forms import get_image_form, ImageInsertionForm +from wagtail.wagtailimages.formats import get_image_format + + +@permission_required('wagtailadmin.access_admin') +def chooser(request, image_id): + image = get_object_or_404(get_image_model(), id=image_id) + + return render_modal_workflow(request, 'wagtailimages/focal_point_chooser/chooser.html', 'wagtailimages/focal_point_chooser/chooser.js', { + 'image': image, + }) From b4c7b3fbc2b6ade34d018496de6d8e6cd5e7f521 Mon Sep 17 00:00:00 2001 From: Karl Hobley <karl@torchbox.com> Date: Mon, 8 Sep 2014 11:34:25 +0100 Subject: [PATCH 126/210] Made 'done' link a button --- .../templates/wagtailimages/focal_point_chooser/chooser.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/wagtail/wagtailimages/templates/wagtailimages/focal_point_chooser/chooser.html b/wagtail/wagtailimages/templates/wagtailimages/focal_point_chooser/chooser.html index dcb13504fd..aced6b6b84 100644 --- a/wagtail/wagtailimages/templates/wagtailimages/focal_point_chooser/chooser.html +++ b/wagtail/wagtailimages/templates/wagtailimages/focal_point_chooser/chooser.html @@ -7,5 +7,5 @@ <div class="focal-point-chooser-image"> {% image image max-800x600 %} </div> - <a class="choose-focal-point">Done</a> + <a class="choose-focal-point button buttom-secondary" href="#">Done</a> </div> \ No newline at end of file From afec066013346b943852e823fc7d8f7c0b25c794 Mon Sep 17 00:00:00 2001 From: Karl Hobley <karl@torchbox.com> Date: Mon, 8 Sep 2014 14:36:37 +0100 Subject: [PATCH 127/210] Imports cleanup --- wagtail/wagtailimages/views/focal_point_chooser.py | 9 +-------- 1 file changed, 1 insertion(+), 8 deletions(-) diff --git a/wagtail/wagtailimages/views/focal_point_chooser.py b/wagtail/wagtailimages/views/focal_point_chooser.py index 21ca26c790..ec98733033 100644 --- a/wagtail/wagtailimages/views/focal_point_chooser.py +++ b/wagtail/wagtailimages/views/focal_point_chooser.py @@ -1,15 +1,8 @@ -import json - -from django.shortcuts import get_object_or_404, render -from django.core.paginator import Paginator, EmptyPage, PageNotAnInteger +from django.shortcuts import get_object_or_404 from django.contrib.auth.decorators import permission_required from wagtail.wagtailadmin.modal_workflow import render_modal_workflow -from wagtail.wagtailadmin.forms import SearchForm - from wagtail.wagtailimages.models import get_image_model -from wagtail.wagtailimages.forms import get_image_form, ImageInsertionForm -from wagtail.wagtailimages.formats import get_image_format @permission_required('wagtailadmin.access_admin') From 8f87a5ff81441eef95dba41b3a07d446af139e6d Mon Sep 17 00:00:00 2001 From: Karl Hobley <karl@torchbox.com> Date: Mon, 8 Sep 2014 14:47:21 +0100 Subject: [PATCH 128/210] Don't allow users without permission to edit the image to see its focal point chooser --- wagtail/wagtailimages/views/focal_point_chooser.py | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/wagtail/wagtailimages/views/focal_point_chooser.py b/wagtail/wagtailimages/views/focal_point_chooser.py index ec98733033..439c9ca8b4 100644 --- a/wagtail/wagtailimages/views/focal_point_chooser.py +++ b/wagtail/wagtailimages/views/focal_point_chooser.py @@ -1,5 +1,6 @@ from django.shortcuts import get_object_or_404 from django.contrib.auth.decorators import permission_required +from django.core.exceptions import PermissionDenied from wagtail.wagtailadmin.modal_workflow import render_modal_workflow from wagtail.wagtailimages.models import get_image_model @@ -9,6 +10,9 @@ from wagtail.wagtailimages.models import get_image_model def chooser(request, image_id): image = get_object_or_404(get_image_model(), id=image_id) + if not image.is_editable_by_user(request.user): + raise PermissionDenied + return render_modal_workflow(request, 'wagtailimages/focal_point_chooser/chooser.html', 'wagtailimages/focal_point_chooser/chooser.js', { 'image': image, }) From f24a9240d31e4c44e8353293bf720b83caff9329 Mon Sep 17 00:00:00 2001 From: Karl Hobley <karl@torchbox.com> Date: Mon, 8 Sep 2014 14:47:41 +0100 Subject: [PATCH 129/210] Tests for focal point chooser view --- wagtail/wagtailimages/tests.py | 50 ++++++++++++++++++++++++++++++++++ 1 file changed, 50 insertions(+) diff --git a/wagtail/wagtailimages/tests.py b/wagtail/wagtailimages/tests.py index d040a922d8..0142b78e39 100644 --- a/wagtail/wagtailimages/tests.py +++ b/wagtail/wagtailimages/tests.py @@ -1037,3 +1037,53 @@ class TestIssue573(TestCase): # This would crash if the bug is present image.get_rendition('fill-800x600') + +class TestFocalPointChooserView(TestCase, WagtailTestUtils): + def setUp(self): + # Create an image for running tests on + self.image = Image.objects.create( + title="Test image", + file=get_test_image_file(), + ) + + # Login + self.user = self.login() + + def test_get(self): + """ + This tests that the view responds correctly for a user with edit permissions on this image + """ + # Get + response = self.client.get(reverse('wagtailimages_focal_point_chooser', args=(self.image.id, ))) + + # Check response + self.assertEqual(response.status_code, 200) + self.assertTemplateUsed(response, 'wagtailimages/focal_point_chooser/chooser.html') + self.assertTemplateUsed(response, 'wagtailimages/focal_point_chooser/chooser.js') + + def test_get_bad_permissions(self): + """ + This tests that the view gives a 403 if a user without correct permissions attempts to access it + """ + # Remove privileges from user + self.user.is_superuser = False + self.user.user_permissions.add( + Permission.objects.get(content_type__app_label='wagtailadmin', codename='access_admin') + ) + self.user.save() + + # Get + response = self.client.get(reverse('wagtailimages_focal_point_chooser', args=(self.image.id, ))) + + # Check response + self.assertEqual(response.status_code, 403) + + def test_get_bad_image(self): + """ + This tests that the view gives a 404 if the image doesn't exist + """ + # Get + response = self.client.get(reverse('wagtailimages_focal_point_chooser', args=(9999, ))) + + # Check response + self.assertEqual(response.status_code, 404) From 3264d92db307dc37476c95403cacba3e8f1eb94f Mon Sep 17 00:00:00 2001 From: Karl Hobley <karl@torchbox.com> Date: Tue, 9 Sep 2014 09:12:50 +0100 Subject: [PATCH 130/210] Fixed merge issue --- wagtail/utils/deprecation.py | 4 ---- 1 file changed, 4 deletions(-) diff --git a/wagtail/utils/deprecation.py b/wagtail/utils/deprecation.py index 6b4765a5eb..dd8d89e918 100644 --- a/wagtail/utils/deprecation.py +++ b/wagtail/utils/deprecation.py @@ -4,7 +4,3 @@ class RemovedInWagtail07Warning(DeprecationWarning): class RemovedInWagtail08Warning(PendingDeprecationWarning): pass - - -class RemovedInWagtail08Warning(PendingDeprecationWarning): - pass From 69f9f484888a1f4dcae6fc14e5fa0605f85eec5c Mon Sep 17 00:00:00 2001 From: Karl Hobley <karl@torchbox.com> Date: Tue, 9 Sep 2014 12:56:10 +0100 Subject: [PATCH 131/210] Added __version__ to wagtailcore --- wagtail/wagtailcore/__init__.py | 1 + 1 file changed, 1 insertion(+) diff --git a/wagtail/wagtailcore/__init__.py b/wagtail/wagtailcore/__init__.py index 160f57430d..c45294088d 100644 --- a/wagtail/wagtailcore/__init__.py +++ b/wagtail/wagtailcore/__init__.py @@ -1 +1,2 @@ +__version__ = '0.6' default_app_config = 'wagtail.wagtailcore.apps.WagtailCoreAppConfig' From 1d7ca5a685af18f4bda1d771e2bd09299fa53baf Mon Sep 17 00:00:00 2001 From: Karl Hobley <karl@torchbox.com> Date: Tue, 9 Sep 2014 12:56:26 +0100 Subject: [PATCH 132/210] Made docs look at wagtailcore.__version__ --- docs/conf.py | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/docs/conf.py b/docs/conf.py index 64f4ab9342..b8ff46164c 100644 --- a/docs/conf.py +++ b/docs/conf.py @@ -29,6 +29,9 @@ if not on_rtd: # only import and set the theme if we're building docs locally # documentation root, use os.path.abspath to make it absolute, like shown here. sys.path.insert(0, os.path.abspath('..')) +# Get Wagtail version +from wagtail.wagtailcore import __version__ + # Autodoc may need to import some models modules which require django settings # be configured os.environ['DJANGO_SETTINGS_MODULE'] = 'wagtail.tests.settings' @@ -70,9 +73,9 @@ copyright = u'2014, Torchbox' # built documents. # # The short X.Y version. -version = '0.5' +version = __version__ # The full version, including alpha/beta/rc tags. -release = '0.5' +release = __version__ # The language for content autogenerated by Sphinx. Refer to documentation # for a list of supported languages. From bce455a5cce822709d086cea86c74f3957cb92cc Mon Sep 17 00:00:00 2001 From: Karl Hobley <karl@torchbox.com> Date: Tue, 9 Sep 2014 12:57:01 +0100 Subject: [PATCH 133/210] Made setup.py look at wagtailcore.__version__ --- setup.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/setup.py b/setup.py index abd6bb61e0..08b7dfd1b1 100644 --- a/setup.py +++ b/setup.py @@ -2,6 +2,8 @@ import sys +from wagtail.wagtailcore import __version__ + try: from setuptools import setup, find_packages @@ -47,7 +49,7 @@ if not PY3: setup( name='wagtail', - version='0.5', + version=__version__, description='A Django content management system focused on flexibility and user experience', author='Matthew Westcott', author_email='matthew.westcott@torchbox.com', From 74686ccbeec9c79c8fa2cd6e74dd253f6d691f48 Mon Sep 17 00:00:00 2001 From: Karl Hobley <karl@torchbox.com> Date: Tue, 9 Sep 2014 13:00:56 +0100 Subject: [PATCH 134/210] Added wagtail version indicator to the dashboard --- wagtail/wagtailadmin/templates/wagtailadmin/home.html | 5 ++++- wagtail/wagtailcore/templatetags/wagtailcore_tags.py | 6 ++++++ 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/wagtail/wagtailadmin/templates/wagtailadmin/home.html b/wagtail/wagtailadmin/templates/wagtailadmin/home.html index 65c6b8bc03..4e766ac48c 100644 --- a/wagtail/wagtailadmin/templates/wagtailadmin/home.html +++ b/wagtail/wagtailadmin/templates/wagtailadmin/home.html @@ -1,5 +1,5 @@ {% extends "wagtailadmin/base.html" %} -{% load gravatar compress %} +{% load gravatar compress wagtailcore_tags %} {% load i18n %} {% block titletag %}{% trans "Dashboard" %}{% endblock %} {% block bodyclass %}homepage{% endblock %} @@ -22,6 +22,9 @@ <h1>{% blocktrans %}Welcome to the {{ site_name }} Wagtail CMS{% endblocktrans %}</h1> <h2>{{ user.get_full_name|default:user.username }}</h2> </div> + <div class="col1"> + Wagtail Version: {% wagtail_version %} + </div> </div> </header> diff --git a/wagtail/wagtailcore/templatetags/wagtailcore_tags.py b/wagtail/wagtailcore/templatetags/wagtailcore_tags.py index 5e137c7a2e..b68a66d636 100644 --- a/wagtail/wagtailcore/templatetags/wagtailcore_tags.py +++ b/wagtail/wagtailcore/templatetags/wagtailcore_tags.py @@ -3,6 +3,7 @@ from django.utils.safestring import mark_safe from wagtail.wagtailcore.models import Page from wagtail.wagtailcore.rich_text import expand_db_html +from wagtail.wagtailcore import __version__ register = template.Library() @@ -27,6 +28,11 @@ def slugurl(context, slug): return None +@register.simple_tag +def wagtail_version(): + return __version__ + + @register.filter def richtext(value): return mark_safe('<div class="rich-text">' + expand_db_html(value) + '</div>') From 97959b8f4dd88ccf2abb8d67ea09abf204de4ca5 Mon Sep 17 00:00:00 2001 From: Karl Hobley <karl@torchbox.com> Date: Tue, 9 Sep 2014 13:01:31 +0100 Subject: [PATCH 135/210] Changed version to 0.5 --- wagtail/wagtailcore/__init__.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/wagtail/wagtailcore/__init__.py b/wagtail/wagtailcore/__init__.py index c45294088d..8055a55e9f 100644 --- a/wagtail/wagtailcore/__init__.py +++ b/wagtail/wagtailcore/__init__.py @@ -1,2 +1,2 @@ -__version__ = '0.6' +__version__ = '0.5' default_app_config = 'wagtail.wagtailcore.apps.WagtailCoreAppConfig' From 743717a46c8550b8923e117e2bb75dab21cdb057 Mon Sep 17 00:00:00 2001 From: Matt Westcott <matt@west.co.tt> Date: Tue, 9 Sep 2014 14:24:49 +0100 Subject: [PATCH 136/210] Add unit test to verify that URL methods on non-routable pages return None --- wagtail/wagtailcore/tests/test_page_model.py | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/wagtail/wagtailcore/tests/test_page_model.py b/wagtail/wagtailcore/tests/test_page_model.py index 1f7c44aa32..c91c00964d 100644 --- a/wagtail/wagtailcore/tests/test_page_model.py +++ b/wagtail/wagtailcore/tests/test_page_model.py @@ -123,6 +123,14 @@ class TestRouting(TestCase): self.assertEqual(christmas_page.url, '/events/christmas/') self.assertEqual(christmas_page.relative_url(default_site), '/events/christmas/') + def test_page_with_no_url(self): + root = Page.objects.get(url_path='/') + default_site = Site.objects.get(is_default_site=True) + + self.assertEqual(root.full_url, None) + self.assertEqual(root.url, None) + self.assertEqual(root.relative_url(default_site), None) + def test_urls_with_multiple_sites(self): events_page = Page.objects.get(url_path='/home/events/') events_site = Site.objects.create(hostname='events.example.com', root_page=events_page) From 6d5747b6dad4e81e0c2c50eec514b57ae7574c88 Mon Sep 17 00:00:00 2001 From: Dave Cranwell <david@torchbox.com> Date: Tue, 9 Sep 2014 15:22:30 +0100 Subject: [PATCH 137/210] moved version into title tag on logo --- wagtail/wagtailadmin/templates/wagtailadmin/base.html | 4 ++-- wagtail/wagtailadmin/templates/wagtailadmin/home.html | 7 ++----- 2 files changed, 4 insertions(+), 7 deletions(-) diff --git a/wagtail/wagtailadmin/templates/wagtailadmin/base.html b/wagtail/wagtailadmin/templates/wagtailadmin/base.html index c7a89def7a..130fe47d6c 100644 --- a/wagtail/wagtailadmin/templates/wagtailadmin/base.html +++ b/wagtail/wagtailadmin/templates/wagtailadmin/base.html @@ -1,10 +1,10 @@ {% extends "wagtailadmin/admin_base.html" %} -{% load wagtailadmin_tags %} +{% load wagtailadmin_tags wagtailcore_tags %} {% load i18n %} {% block furniture %} <div class="nav-wrapper"> <div class="inner"> - <a href="{% url 'wagtailadmin_home' %}" class="logo"><img src="{{ STATIC_URL }}wagtailadmin/images/wagtail-logo.svg" alt="Wagtail" width="80" /><span>{% trans "Dashboard" %}</span></a> + <a href="{% url 'wagtailadmin_home' %}" class="logo" title="Wagtail v.{% wagtail_version %}"><img src="{{ STATIC_URL }}wagtailadmin/images/wagtail-logo.svg" alt="Wagtail" width="80" /><span>{% trans "Dashboard" %}</span></a> {% main_nav %} </div> diff --git a/wagtail/wagtailadmin/templates/wagtailadmin/home.html b/wagtail/wagtailadmin/templates/wagtailadmin/home.html index 4e766ac48c..ab855154e4 100644 --- a/wagtail/wagtailadmin/templates/wagtailadmin/home.html +++ b/wagtail/wagtailadmin/templates/wagtailadmin/home.html @@ -1,5 +1,5 @@ {% extends "wagtailadmin/base.html" %} -{% load gravatar compress wagtailcore_tags %} +{% load gravatar compress %} {% load i18n %} {% block titletag %}{% trans "Dashboard" %}{% endblock %} {% block bodyclass %}homepage{% endblock %} @@ -18,13 +18,10 @@ <div class="avatar icon icon-user"><img src="{% gravatar_url user.email %}" /></div> </div> {% endif %} - <div class="col10"> + <div class="col9"> <h1>{% blocktrans %}Welcome to the {{ site_name }} Wagtail CMS{% endblocktrans %}</h1> <h2>{{ user.get_full_name|default:user.username }}</h2> </div> - <div class="col1"> - Wagtail Version: {% wagtail_version %} - </div> </div> </header> From 03745d01cbf654bcf69c38c0c66fcaea087089ab Mon Sep 17 00:00:00 2001 From: Dave Cranwell <david@torchbox.com> Date: Tue, 9 Sep 2014 16:47:35 +0100 Subject: [PATCH 138/210] added docstring to get_verbose_name, which is a particularly handy method for front enders --- wagtail/wagtailcore/models.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/wagtail/wagtailcore/models.py b/wagtail/wagtailcore/models.py index ed6a3bb3f0..3db7a71a0e 100644 --- a/wagtail/wagtailcore/models.py +++ b/wagtail/wagtailcore/models.py @@ -553,6 +553,9 @@ class Page(six.with_metaclass(PageBase, MP_Node, ClusterableModel, index.Indexed @classmethod def get_verbose_name(cls): + """ + Returns the human-readable "verbose name" of this page model e.g "Blog page". + """ # This is similar to doing cls._meta.verbose_name.title() # except this doesn't convert any characters to lowercase return ' '.join([word[0].upper() + word[1:] for word in cls._meta.verbose_name.split()]) From 6d05fd79fe39c6bb8da1391d7bb3050b20b6031e Mon Sep 17 00:00:00 2001 From: Dave Cranwell <davecranwell@users.noreply.github.com> Date: Tue, 9 Sep 2014 16:46:44 +0100 Subject: [PATCH 139/210] Added get_verbose_name --- docs/core_components/pages/creating_pages.rst | 2 ++ 1 file changed, 2 insertions(+) diff --git a/docs/core_components/pages/creating_pages.rst b/docs/core_components/pages/creating_pages.rst index 40dfa6439f..52d187890f 100644 --- a/docs/core_components/pages/creating_pages.rst +++ b/docs/core_components/pages/creating_pages.rst @@ -104,6 +104,8 @@ In addition to the model fields provided, ``Page`` has many properties and metho .. autoattribute:: url .. autoattribute:: full_url + + .. automethod:: get_verbose_name .. automethod:: relative_url From 42e175392e1248184e3addeccc4081ebb62bb45b Mon Sep 17 00:00:00 2001 From: Tim Heap <tim@timheap.me> Date: Tue, 22 Jul 2014 17:11:58 +1000 Subject: [PATCH 140/210] Implement `Page.parent_page_types` Similar to `Page.subpage_types`, but restricts which pages can have a specific page type as a child. Useful for Blog posts being restricted to Blog list pages, or similar things. --- wagtail/wagtailadmin/views/pages.py | 2 +- wagtail/wagtailcore/models.py | 78 +++++++++++++++++++++-------- wagtail/wagtailcore/utils.py | 28 +++++++++++ 3 files changed, 85 insertions(+), 23 deletions(-) diff --git a/wagtail/wagtailadmin/views/pages.py b/wagtail/wagtailadmin/views/pages.py index a7212cc3e2..20ddead472 100644 --- a/wagtail/wagtailadmin/views/pages.py +++ b/wagtail/wagtailadmin/views/pages.py @@ -68,7 +68,7 @@ def add_subpage(request, parent_page_id): if not parent_page.permissions_for_user(request.user).can_add_subpage(): raise PermissionDenied - page_types = sorted(parent_page.clean_subpage_types(), key=lambda pagetype: pagetype.name.lower()) + page_types = sorted(parent_page.allowed_subpage_types(), key=lambda pagetype: pagetype.name.lower()) if len(page_types) == 1: # Only one page type is available - redirect straight to the create form rather than diff --git a/wagtail/wagtailcore/models.py b/wagtail/wagtailcore/models.py index 3db7a71a0e..9ce0061447 100644 --- a/wagtail/wagtailcore/models.py +++ b/wagtail/wagtailcore/models.py @@ -8,7 +8,7 @@ from six.moves.urllib.parse import urlparse from modelcluster.models import ClusterableModel, get_all_child_relations from django.db import models, connection, transaction -from django.db.models import get_model, Q +from django.db.models import Q from django.http import Http404 from django.core.cache import cache from django.core.handlers.wsgi import WSGIRequest @@ -26,7 +26,7 @@ from django.utils.encoding import python_2_unicode_compatible from treebeard.mp_tree import MP_Node -from wagtail.wagtailcore.utils import camelcase_to_underscore +from wagtail.wagtailcore.utils import camelcase_to_underscore, resolve_model_string from wagtail.wagtailcore.query import PageQuerySet from wagtail.wagtailcore.url_routing import RouteResult @@ -236,6 +236,7 @@ class PageBase(models.base.ModelBase): cls.ajax_template = None cls._clean_subpage_types = None # to be filled in on first call to cls.clean_subpage_types + cls._clean_parent_page_types = None # to be filled in on first call to cls.clean_parent_page_types if not dct.get('is_abstract'): # subclasses are only abstract if the subclass itself defines itself so @@ -513,36 +514,62 @@ class Page(six.with_metaclass(PageBase, MP_Node, ClusterableModel, index.Indexed # if subpage_types is not specified on the Page class, allow all page types as subpages res = get_page_types() else: - res = [] - for page_type in cls.subpage_types: - if isinstance(page_type, string_types): - try: - app_label, model_name = page_type.split(".") - except ValueError: - # If we can't split, assume a model in current app - app_label = cls._meta.app_label - model_name = page_type - - model = get_model(app_label, model_name) - if model: - res.append(ContentType.objects.get_for_model(model)) - else: - raise NameError(_("name '{0}' (used in subpage_types list) is not defined.").format(page_type)) - - else: - # assume it's already a model class - res.append(ContentType.objects.get_for_model(page_type)) + try: + models = [resolve_model_string(model_string, cls._meta.app_label) + for model_string in subpage_types] + except (NameError,) as err: + raise NameError(err.args[0] + ' (used in subpage_types') + res = map(ContentType.objects.get_for_model, models) cls._clean_subpage_types = res return cls._clean_subpage_types + @classmethod + def clean_parent_page_types(cls): + """ + Returns the list of parent page types, with strings converted to + class objects where required + """ + if cls._clean_parent_page_types is None: + parent_page_types = getattr(cls, 'parent_page_types', None) + if parent_page_types is None: + # if parent_page_types is not specified on the Page class, allow all page types as subpages + res = get_page_types() + else: + try: + models = [resolve_model_string(model_string, cls._meta.app_label) + for model_string in parent_page_types] + except NameError as err: + raise NameError(err.args[0] + ' (used in parent_page_types)') + res = map(ContentType.objects.get_for_model, models) + + cls._clean_parent_page_types = res + + return cls._clean_parent_page_types + @classmethod def allowed_parent_page_types(cls): """ Returns the list of page types that this page type can be a subpage of """ - return [ct for ct in get_page_types() if cls in ct.model_class().clean_subpage_types()] + cls_ct = ContentType.objects.get_for_model(cls) + return [ct for ct in cls.clean_parent_page_types() + if cls_ct in ct.model_class().clean_subpage_types()] + + @classmethod + def allowed_subpage_types(cls): + """ + Returns the list of page types that this page type can be a subpage of + """ + # Special case the 'Page' class, such as the Root page or Home page - + # otherwise you can not add initial pages when setting up a site + if cls == Page: + return get_page_types() + + cls_ct = ContentType.objects.get_for_model(cls) + return [ct for ct in cls.clean_subpage_types() + if cls_ct in ct.model_class().clean_parent_page_types()] @classmethod def allowed_parent_pages(cls): @@ -551,6 +578,13 @@ class Page(six.with_metaclass(PageBase, MP_Node, ClusterableModel, index.Indexed """ return Page.objects.filter(content_type__in=cls.allowed_parent_page_types()) + @classmethod + def allowed_subpages(cls): + """ + Returns the list of pages that this page type can be a parent page of + """ + return Page.objects.filter(content_type__in=cls.allowed_subpage_types()) + @classmethod def get_verbose_name(cls): """ diff --git a/wagtail/wagtailcore/utils.py b/wagtail/wagtailcore/utils.py index c5ad7ea8da..37691f547e 100644 --- a/wagtail/wagtailcore/utils.py +++ b/wagtail/wagtailcore/utils.py @@ -1,6 +1,34 @@ import re +from django.db.models import Model, get_model +from django.utils.translation import ugettext_lazy as _ +from six import string_types def camelcase_to_underscore(str): # http://djangosnippets.org/snippets/585/ return re.sub('(((?<=[a-z])[A-Z])|([A-Z](?![A-Z]|$)))', '_\\1', str).lower().strip('_') + + +def resolve_model_string(model_string, default_app): + """ + Resolve an 'app_label.model_name' string in to an actual model class. + If a model class is passed in, just return that. + """ + if isinstance(model_string, string_types): + try: + app_label, model_name = model_string.split(".") + except ValueError: + # If we can't split, assume a model in current app + app_label = default_app + model_name = model_string + + model = get_model(app_label, model_name) + if not model: + raise NameError(_("name '{0}' is not defined.").format(model_string)) + return model + + elif issubclass(model_string, Model): + return model + + else: + raise ValueError(_("Can not resolve '{0!r}' in to a model").format(model_string)) From 4bcacfabf24df6c52f5f2b1dfeb8fd1013d94883 Mon Sep 17 00:00:00 2001 From: Tim Heap <tim@timheap.me> Date: Wed, 23 Jul 2014 12:25:07 +1000 Subject: [PATCH 141/210] Add tests for new `Page.parent_page_types` setting --- wagtail/tests/models.py | 12 ++++++- .../wagtailadmin/tests/test_pages_views.py | 31 +++++++++++++------ 2 files changed, 33 insertions(+), 10 deletions(-) diff --git a/wagtail/tests/models.py b/wagtail/tests/models.py index c708c452b8..66709b8978 100644 --- a/wagtail/tests/models.py +++ b/wagtail/tests/models.py @@ -376,7 +376,9 @@ class ZuluSnippet(models.Model): class StandardIndex(Page): - pass + """ Index for the site, not allowed to be placed anywhere """ + parent_page_types = [] + StandardIndex.content_panels = [ FieldPanel('title', classname="full title"), @@ -387,14 +389,22 @@ StandardIndex.content_panels = [ class StandardChild(Page): pass + class BusinessIndex(Page): + """ Can be placed anywhere, can only have Business children """ subpage_types = ['tests.BusinessChild', 'tests.BusinessSubIndex'] + class BusinessSubIndex(Page): + """ Can be placed under BusinessIndex, and have BusinessChild children """ subpage_types = ['tests.BusinessChild'] + parent_page_types = ['tests.BusinessIndex'] + class BusinessChild(Page): + """ Can only be placed under Business indexes, no children allowed """ subpage_types = [] + parent_page_types = ['tests.BusinessIndex', 'tests.BusinessSubIndex'] class SearchTest(models.Model, index.Indexed): diff --git a/wagtail/wagtailadmin/tests/test_pages_views.py b/wagtail/wagtailadmin/tests/test_pages_views.py index ab231cc7ea..eb7668a6d9 100644 --- a/wagtail/wagtailadmin/tests/test_pages_views.py +++ b/wagtail/wagtailadmin/tests/test_pages_views.py @@ -8,7 +8,11 @@ from django.core import mail from django.core.paginator import Paginator from django.utils import timezone -from wagtail.tests.models import SimplePage, EventPage, EventPageCarouselItem, StandardIndex, BusinessIndex, BusinessChild, BusinessSubIndex, TaggedPage, Advert, AdvertPlacement +from wagtail.tests.models import ( + SimplePage, EventPage, EventPageCarouselItem, + StandardIndex, StandardChild, + BusinessIndex, BusinessChild, BusinessSubIndex, + TaggedPage, Advert, AdvertPlacement) from wagtail.tests.utils import unittest, WagtailTestUtils from wagtail.wagtailcore.models import Page, PageRevision from wagtail.wagtailcore.signals import page_published, page_unpublished @@ -1483,11 +1487,14 @@ class TestSubpageBusinessRules(TestCase, WagtailTestUtils): self.assertEqual(response.status_code, 200) self.assertContains(response, add_subpage_url) - # add_subpage should give us the full set of page types to choose + # add_subpage should give us choices of StandardChild, and BusinessIndex. + # BusinessSubIndex and BusinessChild are not allowed response = self.client.get(add_subpage_url) self.assertEqual(response.status_code, 200) - self.assertContains(response, 'Standard Child') - self.assertContains(response, 'Business Child') + self.assertContains(response, StandardChild.get_verbose_name()) + self.assertContains(response, BusinessIndex.get_verbose_name()) + self.assertNotContains(response, BusinessSubIndex.get_verbose_name()) + self.assertNotContains(response, BusinessChild.get_verbose_name()) def test_business_subpage(self): add_subpage_url = reverse('wagtailadmin_pages_add_subpage', args=(self.business_index.id, )) @@ -1500,8 +1507,10 @@ class TestSubpageBusinessRules(TestCase, WagtailTestUtils): # add_subpage should give us a cut-down set of page types to choose response = self.client.get(add_subpage_url) self.assertEqual(response.status_code, 200) - self.assertNotContains(response, 'Standard Child') - self.assertContains(response, 'Business Child') + self.assertNotContains(response, StandardIndex.get_verbose_name()) + self.assertNotContains(response, StandardChild.get_verbose_name()) + self.assertContains(response, BusinessSubIndex.get_verbose_name()) + self.assertContains(response, BusinessChild.get_verbose_name()) def test_business_child_subpage(self): add_subpage_url = reverse('wagtailadmin_pages_add_subpage', args=(self.business_child.id, )) @@ -1516,12 +1525,16 @@ class TestSubpageBusinessRules(TestCase, WagtailTestUtils): self.assertEqual(response.status_code, 403) def test_cannot_add_invalid_subpage_type(self): - # cannot add SimplePage as a child of BusinessIndex, as SimplePage is not present in subpage_types - response = self.client.get(reverse('wagtailadmin_pages_create', args=('tests', 'simplepage', self.business_index.id))) + # cannot add StandardChild as a child of BusinessIndex, as StandardChild is not present in subpage_types + response = self.client.get(reverse('wagtailadmin_pages_create', args=('tests', 'standardchild', self.business_index.id))) self.assertEqual(response.status_code, 403) # likewise for BusinessChild which has an empty subpage_types list - response = self.client.get(reverse('wagtailadmin_pages_create', args=('tests', 'simplepage', self.business_child.id))) + response = self.client.get(reverse('wagtailadmin_pages_create', args=('tests', 'standardchild', self.business_child.id))) + self.assertEqual(response.status_code, 403) + + # cannot add BusinessChild to StandardIndex, as BusinessChild restricts is parent page types + response = self.client.get(reverse('wagtailadmin_pages_create', args=('tests', 'businesschild', self.standard_index.id))) self.assertEqual(response.status_code, 403) # but we can add a BusinessChild to BusinessIndex From 9aae3a1a23062ae763c66ef413746d9fd14e59dd Mon Sep 17 00:00:00 2001 From: Tim Heap <tim@timheap.me> Date: Wed, 23 Jul 2014 12:29:00 +1000 Subject: [PATCH 142/210] Restrict child page types when creating them The list of allowed child page types was restricted, but if you could guess the URL to create a disallowed page type, nothing would stop you creating it. Fixes a failing test case. --- wagtail/wagtailadmin/views/pages.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/wagtail/wagtailadmin/views/pages.py b/wagtail/wagtailadmin/views/pages.py index 20ddead472..53810fa3cc 100644 --- a/wagtail/wagtailadmin/views/pages.py +++ b/wagtail/wagtailadmin/views/pages.py @@ -136,7 +136,7 @@ def create(request, content_type_app_name, content_type_model_name, parent_page_ raise Http404 # page must be in the list of allowed subpage types for this parent ID - if content_type not in parent_page.clean_subpage_types(): + if content_type not in parent_page.allowed_subpage_types(): raise PermissionDenied page = page_class(owner=request.user) From 7b89f283db0932c98031a7caf875b8be52b48dd5 Mon Sep 17 00:00:00 2001 From: Tim Heap <tim@timheap.me> Date: Wed, 23 Jul 2014 16:45:12 +1000 Subject: [PATCH 143/210] Force `Page._clean_sub/parent_page_types` to be a list --- wagtail/wagtailcore/models.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/wagtail/wagtailcore/models.py b/wagtail/wagtailcore/models.py index 9ce0061447..65d2930d27 100644 --- a/wagtail/wagtailcore/models.py +++ b/wagtail/wagtailcore/models.py @@ -519,7 +519,7 @@ class Page(six.with_metaclass(PageBase, MP_Node, ClusterableModel, index.Indexed for model_string in subpage_types] except (NameError,) as err: raise NameError(err.args[0] + ' (used in subpage_types') - res = map(ContentType.objects.get_for_model, models) + res = list(map(ContentType.objects.get_for_model, models)) cls._clean_subpage_types = res @@ -542,7 +542,7 @@ class Page(six.with_metaclass(PageBase, MP_Node, ClusterableModel, index.Indexed for model_string in parent_page_types] except NameError as err: raise NameError(err.args[0] + ' (used in parent_page_types)') - res = map(ContentType.objects.get_for_model, models) + res = list(map(ContentType.objects.get_for_model, models)) cls._clean_parent_page_types = res From 96e907989080bed7d35544dee6376a3a3fc277f4 Mon Sep 17 00:00:00 2001 From: Tim Heap <tim@timheap.me> Date: Thu, 24 Jul 2014 10:40:39 +1000 Subject: [PATCH 144/210] Add `Page.parent_page_types` to the docs --- docs/core_components/pages/theory.rst | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/core_components/pages/theory.rst b/docs/core_components/pages/theory.rst index bcea079bb4..f4929f2926 100644 --- a/docs/core_components/pages/theory.rst +++ b/docs/core_components/pages/theory.rst @@ -52,7 +52,7 @@ A Parent node could provide its own function returning its descendant objects. return events -This example makes sure to limit the returned objects to pieces of content which make sense, specifically ones which have been published through Wagtail's admin interface (``live()``) and are children of this node (``descendant_of(self)``). By setting a ``subpage_types`` class property in your model, you can specify which models are allowed to be set as children, but Wagtail will allow any ``Page``-derived model by default. Regardless, it's smart for a parent model to provide an index filtered to make sense. +This example makes sure to limit the returned objects to pieces of content which make sense, specifically ones which have been published through Wagtail's admin interface (``live()``) and are children of this node (``descendant_of(self)``). By setting a ``subpage_types`` class property in your model, you can specify which models are allowed to be set as children, and by settings a ``parent_page_types`` class property, you can specify which models are allowed to parent certain children. Wagtail will allow any ``Page``-derived model by default. Regardless, it's smart for a parent model to provide an index filtered to make sense. Leaves @@ -71,7 +71,7 @@ The model for the leaf could provide a function that traverses the tree in the o # Find closest ancestor which is an event index return self.get_ancestors().type(EventIndexPage).last() -If defined, ``subpage_types`` will also limit the parent models allowed to contain a leaf. If not, Wagtail will allow any combination of parents and leafs to be associated in the Wagtail tree. Like with index pages, it's a good idea to make sure that the index is actually of the expected model to contain the leaf. +If defined, ``subpage_types`` and ``parent_page_types`` will also limit the parent models allowed to contain a leaf. If not, Wagtail will allow any combination of parents and leafs to be associated in the Wagtail tree. Like with index pages, it's a good idea to make sure that the index is actually of the expected model to contain the leaf. Other Relationships From 18909c834f11e5a1682c56088bd40daffb49aa74 Mon Sep 17 00:00:00 2001 From: Tim Heap <tim@timheap.me> Date: Thu, 24 Jul 2014 10:49:30 +1000 Subject: [PATCH 145/210] Replace all calls to clean_subpage_types with allowed_subpage_types `clean_subpage_types` should not be part of the public API any more, and `allowed_subpage_types` should replace it in all instances. --- wagtail/wagtailcore/models.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/wagtail/wagtailcore/models.py b/wagtail/wagtailcore/models.py index 65d2930d27..dd1bdb52c0 100644 --- a/wagtail/wagtailcore/models.py +++ b/wagtail/wagtailcore/models.py @@ -1057,7 +1057,7 @@ class PagePermissionTester(object): def can_add_subpage(self): if not self.user.is_active: return False - if not self.page.specific_class.clean_subpage_types(): # this page model has an empty subpage_types list, so no subpages are allowed + if not self.page.specific_class.allowed_subpage_types(): # this page model has an empty subpage_types list, so no subpages are allowed return False return self.user.is_superuser or ('add' in self.permissions) @@ -1121,7 +1121,7 @@ class PagePermissionTester(object): """ if not self.user.is_active: return False - if not self.page.specific_class.clean_subpage_types(): # this page model has an empty subpage_types list, so no subpages are allowed + if not self.page.specific_class.allowed_subpage_types(): # this page model has an empty subpage_types list, so no subpages are allowed return False return self.user.is_superuser or ('publish' in self.permissions) From 999b052fe5b674f2928b67cb91762b16e4d5b137 Mon Sep 17 00:00:00 2001 From: Tim Heap <tim@timheap.me> Date: Fri, 22 Aug 2014 09:18:00 +1000 Subject: [PATCH 146/210] Fix indentation of docstings --- wagtail/wagtailcore/models.py | 34 +++++++++++++++++----------------- wagtail/wagtailcore/utils.py | 4 ++-- 2 files changed, 19 insertions(+), 19 deletions(-) diff --git a/wagtail/wagtailcore/models.py b/wagtail/wagtailcore/models.py index dd1bdb52c0..1fa436014a 100644 --- a/wagtail/wagtailcore/models.py +++ b/wagtail/wagtailcore/models.py @@ -58,15 +58,15 @@ class Site(models.Model): @staticmethod def find_for_request(request): """ - Find the site object responsible for responding to this HTTP - request object. Try: - - unique hostname first - - then hostname and port - - if there is no matching hostname at all, or no matching - hostname:port combination, fall back to the unique default site, - or raise an exception - NB this means that high-numbered ports on an extant hostname may - still be routed to a different hostname which is set as the default + Find the site object responsible for responding to this HTTP + request object. Try: + - unique hostname first + - then hostname and port + - if there is no matching hostname at all, or no matching + hostname:port combination, fall back to the unique default site, + or raise an exception + NB this means that high-numbered ports on an extant hostname may + still be routed to a different hostname which is set as the default """ try: hostname = request.META['HTTP_HOST'].split(':')[0] # KeyError here goes to the final except clause @@ -505,8 +505,8 @@ class Page(six.with_metaclass(PageBase, MP_Node, ClusterableModel, index.Indexed @classmethod def clean_subpage_types(cls): """ - Returns the list of subpage types, with strings converted to class objects - where required + Returns the list of subpage types, with strings converted to class objects + where required """ if cls._clean_subpage_types is None: subpage_types = getattr(cls, 'subpage_types', None) @@ -528,8 +528,8 @@ class Page(six.with_metaclass(PageBase, MP_Node, ClusterableModel, index.Indexed @classmethod def clean_parent_page_types(cls): """ - Returns the list of parent page types, with strings converted to - class objects where required + Returns the list of parent page types, with strings converted to class + objects where required """ if cls._clean_parent_page_types is None: parent_page_types = getattr(cls, 'parent_page_types', None) @@ -551,7 +551,7 @@ class Page(six.with_metaclass(PageBase, MP_Node, ClusterableModel, index.Indexed @classmethod def allowed_parent_page_types(cls): """ - Returns the list of page types that this page type can be a subpage of + Returns the list of page types that this page type can be a subpage of """ cls_ct = ContentType.objects.get_for_model(cls) return [ct for ct in cls.clean_parent_page_types() @@ -560,7 +560,7 @@ class Page(six.with_metaclass(PageBase, MP_Node, ClusterableModel, index.Indexed @classmethod def allowed_subpage_types(cls): """ - Returns the list of page types that this page type can be a subpage of + Returns the list of page types that this page type can be a subpage of """ # Special case the 'Page' class, such as the Root page or Home page - # otherwise you can not add initial pages when setting up a site @@ -574,14 +574,14 @@ class Page(six.with_metaclass(PageBase, MP_Node, ClusterableModel, index.Indexed @classmethod def allowed_parent_pages(cls): """ - Returns the list of pages that this page type can be a subpage of + Returns the list of pages that this page type can be a subpage of """ return Page.objects.filter(content_type__in=cls.allowed_parent_page_types()) @classmethod def allowed_subpages(cls): """ - Returns the list of pages that this page type can be a parent page of + Returns the list of pages that this page type can be a parent page of """ return Page.objects.filter(content_type__in=cls.allowed_subpage_types()) diff --git a/wagtail/wagtailcore/utils.py b/wagtail/wagtailcore/utils.py index 37691f547e..52913bedac 100644 --- a/wagtail/wagtailcore/utils.py +++ b/wagtail/wagtailcore/utils.py @@ -11,8 +11,8 @@ def camelcase_to_underscore(str): def resolve_model_string(model_string, default_app): """ - Resolve an 'app_label.model_name' string in to an actual model class. - If a model class is passed in, just return that. + Resolve an 'app_label.model_name' string in to an actual model class. + If a model class is passed in, just return that. """ if isinstance(model_string, string_types): try: From 7921abe924ed1c97ecf7df171c59f15983155b0e Mon Sep 17 00:00:00 2001 From: Tim Heap <tim@timheap.me> Date: Fri, 22 Aug 2014 10:06:09 +1000 Subject: [PATCH 147/210] Fix errors raised with `resolve_model_string` It now raises `ValueError` for a badly formatted string, and `NameError` if it can not find the model. Error messages are not translated. Edit handlers now use the function. --- wagtail/wagtailadmin/edit_handlers.py | 29 +++++++++------------------ wagtail/wagtailcore/models.py | 10 +++++---- wagtail/wagtailcore/utils.py | 20 ++++++++++-------- 3 files changed, 28 insertions(+), 31 deletions(-) diff --git a/wagtail/wagtailadmin/edit_handlers.py b/wagtail/wagtailadmin/edit_handlers.py index 3e463523d4..1c5ec6a098 100644 --- a/wagtail/wagtailadmin/edit_handlers.py +++ b/wagtail/wagtailadmin/edit_handlers.py @@ -19,8 +19,8 @@ from django.core.urlresolvers import reverse from django.utils.translation import ugettext_lazy from wagtail.wagtailcore.models import Page -from wagtail.wagtailcore.utils import camelcase_to_underscore from wagtail.wagtailcore.fields import RichTextArea +from wagtail.wagtailcore.utils import camelcase_to_underscore, resolve_model_string FORM_FIELD_OVERRIDES = {} @@ -483,25 +483,16 @@ class BasePageChooserPanel(BaseChooserPanel): def target_content_type(cls): if cls._target_content_type is None: if cls.page_type: - if isinstance(cls.page_type, string_types): - # translate the passed model name into an actual model class - from django.db.models import get_model - try: - app_label, model_name = cls.page_type.split('.') - except ValueError: - raise ImproperlyConfigured("The page_type passed to PageChooserPanel must be of the form 'app_label.model_name'") + try: + model = resolve_model_string(cls.page_type) + except NameError: + raise ImproperlyConfigured("{0}.page_type must be of the form 'app_label.model_name', given {1!r}".format( + cls.__name__, cls.page_type)) + except ValueError: + raise ImproperlyConfigured("{0}.page_type refers to model {1!r} that has not been installed".format( + cls.__name__, cls.page_type)) - try: - page_type = get_model(app_label, model_name) - except LookupError: - page_type = None - - if page_type is None: - raise ImproperlyConfigured("PageChooserPanel refers to model '%s' that has not been installed" % cls.page_type) - else: - page_type = cls.page_type - - cls._target_content_type = ContentType.objects.get_for_model(page_type) + cls._target_content_type = ContentType.objects.get_for_model(model) else: # TODO: infer the content type by introspection on the foreign key cls._target_content_type = ContentType.objects.get_by_natural_key('wagtailcore', 'page') diff --git a/wagtail/wagtailcore/models.py b/wagtail/wagtailcore/models.py index 1fa436014a..6b13c61de6 100644 --- a/wagtail/wagtailcore/models.py +++ b/wagtail/wagtailcore/models.py @@ -20,7 +20,7 @@ from django.conf import settings from django.template.response import TemplateResponse from django.utils import timezone from django.utils.translation import ugettext_lazy as _ -from django.core.exceptions import ValidationError +from django.core.exceptions import ValidationError, ImproperlyConfigured from django.utils.functional import cached_property from django.utils.encoding import python_2_unicode_compatible @@ -517,8 +517,9 @@ class Page(six.with_metaclass(PageBase, MP_Node, ClusterableModel, index.Indexed try: models = [resolve_model_string(model_string, cls._meta.app_label) for model_string in subpage_types] - except (NameError,) as err: - raise NameError(err.args[0] + ' (used in subpage_types') + except NameError as err: + raise ImproperlyConfigured("{0}.subpage_types must be a list of 'app_label.model_name' strings, given {1!r}".format( + cls.__name__, err.args[1])) res = list(map(ContentType.objects.get_for_model, models)) cls._clean_subpage_types = res @@ -541,7 +542,8 @@ class Page(six.with_metaclass(PageBase, MP_Node, ClusterableModel, index.Indexed models = [resolve_model_string(model_string, cls._meta.app_label) for model_string in parent_page_types] except NameError as err: - raise NameError(err.args[0] + ' (used in parent_page_types)') + raise ImproperlyConfigured("{0}.parent_page_types must be a list of 'app_label.model_name' strings, given {1!r}".format( + cls.__name__, err.args[1])) res = list(map(ContentType.objects.get_for_model, models)) cls._clean_parent_page_types = res diff --git a/wagtail/wagtailcore/utils.py b/wagtail/wagtailcore/utils.py index 52913bedac..d03d5ae756 100644 --- a/wagtail/wagtailcore/utils.py +++ b/wagtail/wagtailcore/utils.py @@ -1,6 +1,5 @@ import re from django.db.models import Model, get_model -from django.utils.translation import ugettext_lazy as _ from six import string_types @@ -9,7 +8,7 @@ def camelcase_to_underscore(str): return re.sub('(((?<=[a-z])[A-Z])|([A-Z](?![A-Z]|$)))', '_\\1', str).lower().strip('_') -def resolve_model_string(model_string, default_app): +def resolve_model_string(model_string, default_app=None): """ Resolve an 'app_label.model_name' string in to an actual model class. If a model class is passed in, just return that. @@ -18,17 +17,22 @@ def resolve_model_string(model_string, default_app): try: app_label, model_name = model_string.split(".") except ValueError: - # If we can't split, assume a model in current app - app_label = default_app - model_name = model_string + if default_app is not None: + # If we can't split, assume a model in current app + app_label = default_app + model_name = model_string + else: + raise ValueError("Can not resolve {0!r} in to a model. Model names " + "should be in the form app_label.model_name".format( + model_string), model_string) model = get_model(app_label, model_name) if not model: - raise NameError(_("name '{0}' is not defined.").format(model_string)) + raise NameError("Can not resolve {0!r} in to a model".format(model_string), model_string) return model - elif issubclass(model_string, Model): + elif model_string is not None and issubclass(model_string, Model): return model else: - raise ValueError(_("Can not resolve '{0!r}' in to a model").format(model_string)) + raise NameError("Can not resolve {0!r} in to a model".format(model_string), model_string) From b8b79cd151f8c01bf1137e9ab148d62dffd2f2ea Mon Sep 17 00:00:00 2001 From: Tim Heap <tim@timheap.me> Date: Fri, 5 Sep 2014 09:59:53 +1000 Subject: [PATCH 148/210] `resolve_model_string` now raises `LookupError` Django 1.7 raises a `LookupError` when looking for a model that does not exist. This brings the code in to line with Django. The `LookupError` from Django is allowed to propagate in 1.7, and a `LookupError` is now raised instead of a `NameError` in 1.6. All code using `resolve_model_string` has been changed to catch the new errors. --- wagtail/wagtailadmin/edit_handlers.py | 2 +- wagtail/wagtailcore/models.py | 4 ++-- wagtail/wagtailcore/utils.py | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/wagtail/wagtailadmin/edit_handlers.py b/wagtail/wagtailadmin/edit_handlers.py index 1c5ec6a098..137bb207a4 100644 --- a/wagtail/wagtailadmin/edit_handlers.py +++ b/wagtail/wagtailadmin/edit_handlers.py @@ -485,7 +485,7 @@ class BasePageChooserPanel(BaseChooserPanel): if cls.page_type: try: model = resolve_model_string(cls.page_type) - except NameError: + except LookupError: raise ImproperlyConfigured("{0}.page_type must be of the form 'app_label.model_name', given {1!r}".format( cls.__name__, cls.page_type)) except ValueError: diff --git a/wagtail/wagtailcore/models.py b/wagtail/wagtailcore/models.py index 6b13c61de6..2c5bcaa158 100644 --- a/wagtail/wagtailcore/models.py +++ b/wagtail/wagtailcore/models.py @@ -517,7 +517,7 @@ class Page(six.with_metaclass(PageBase, MP_Node, ClusterableModel, index.Indexed try: models = [resolve_model_string(model_string, cls._meta.app_label) for model_string in subpage_types] - except NameError as err: + except LookupError as err: raise ImproperlyConfigured("{0}.subpage_types must be a list of 'app_label.model_name' strings, given {1!r}".format( cls.__name__, err.args[1])) res = list(map(ContentType.objects.get_for_model, models)) @@ -541,7 +541,7 @@ class Page(six.with_metaclass(PageBase, MP_Node, ClusterableModel, index.Indexed try: models = [resolve_model_string(model_string, cls._meta.app_label) for model_string in parent_page_types] - except NameError as err: + except LookupError as err: raise ImproperlyConfigured("{0}.parent_page_types must be a list of 'app_label.model_name' strings, given {1!r}".format( cls.__name__, err.args[1])) res = list(map(ContentType.objects.get_for_model, models)) diff --git a/wagtail/wagtailcore/utils.py b/wagtail/wagtailcore/utils.py index d03d5ae756..403c79bf38 100644 --- a/wagtail/wagtailcore/utils.py +++ b/wagtail/wagtailcore/utils.py @@ -28,11 +28,11 @@ def resolve_model_string(model_string, default_app=None): model = get_model(app_label, model_name) if not model: - raise NameError("Can not resolve {0!r} in to a model".format(model_string), model_string) + raise LookupError("Can not resolve {0!r} in to a model".format(model_string), model_string) return model elif model_string is not None and issubclass(model_string, Model): return model else: - raise NameError("Can not resolve {0!r} in to a model".format(model_string), model_string) + raise LookupError("Can not resolve {0!r} in to a model".format(model_string), model_string) From 4daafb61a64207d5afe0e1518fcd7a5d0a417d30 Mon Sep 17 00:00:00 2001 From: Karl Hobley <karl@torchbox.com> Date: Wed, 10 Sep 2014 09:02:39 +0100 Subject: [PATCH 149/210] Removed focal point chooser modal and field --- wagtail/wagtailimages/admin_urls.py | 4 +- .../static/wagtailimages/js/add-multiple.js | 4 -- .../wagtailimages/js/focal-point-chooser.js | 51 +------------- .../focal_point_chooser/chooser.html | 11 --- .../focal_point_chooser/chooser.js | 67 ------------------- .../images/_focal_point_chooser.html | 41 ------------ .../templates/wagtailimages/images/edit.html | 7 +- .../templates/wagtailimages/multiple/add.html | 8 --- .../wagtailimages/multiple/edit_form.html | 6 +- wagtail/wagtailimages/tests.py | 51 -------------- .../views/focal_point_chooser.py | 18 ----- 11 files changed, 5 insertions(+), 263 deletions(-) delete mode 100644 wagtail/wagtailimages/templates/wagtailimages/focal_point_chooser/chooser.html delete mode 100644 wagtail/wagtailimages/templates/wagtailimages/focal_point_chooser/chooser.js delete mode 100644 wagtail/wagtailimages/templates/wagtailimages/images/_focal_point_chooser.html delete mode 100644 wagtail/wagtailimages/views/focal_point_chooser.py diff --git a/wagtail/wagtailimages/admin_urls.py b/wagtail/wagtailimages/admin_urls.py index 1d04bcbfe3..44bc61224c 100644 --- a/wagtail/wagtailimages/admin_urls.py +++ b/wagtail/wagtailimages/admin_urls.py @@ -1,6 +1,6 @@ from django.conf.urls import url -from wagtail.wagtailimages.views import images, chooser, multiple, focal_point_chooser +from wagtail.wagtailimages.views import images, chooser, multiple urlpatterns = [ @@ -20,6 +20,4 @@ urlpatterns = [ url(r'^chooser/(\d+)/$', chooser.image_chosen, name='wagtailimages_image_chosen'), url(r'^chooser/upload/$', chooser.chooser_upload, name='wagtailimages_chooser_upload'), url(r'^chooser/(\d+)/select_format/$', chooser.chooser_select_format, name='wagtailimages_chooser_select_format'), - - url(r'focal_point_chooser/(\d+)/$', focal_point_chooser.chooser, name='wagtailimages_focal_point_chooser') ] diff --git a/wagtail/wagtailimages/static/wagtailimages/js/add-multiple.js b/wagtail/wagtailimages/static/wagtailimages/js/add-multiple.js index ce6d355fa8..05c72feb43 100644 --- a/wagtail/wagtailimages/static/wagtailimages/js/add-multiple.js +++ b/wagtail/wagtailimages/static/wagtailimages/js/add-multiple.js @@ -97,10 +97,6 @@ $(function(){ // run tagit enhancement $('.tag_field input', itemElement).tagit(window.tagit_opts); - - $('.focal-point-chooser', itemElement).each(function() { - createFocalPointCooser($(this)); - }); } else { itemElement.addClass('upload-failure'); $('.right .error_messages', itemElement).append(response.error_message); diff --git a/wagtail/wagtailimages/static/wagtailimages/js/focal-point-chooser.js b/wagtail/wagtailimages/static/wagtailimages/js/focal-point-chooser.js index 6d0f385dbb..60cc8871c1 100644 --- a/wagtail/wagtailimages/static/wagtailimages/js/focal-point-chooser.js +++ b/wagtail/wagtailimages/static/wagtailimages/js/focal-point-chooser.js @@ -1,52 +1,5 @@ -function createFocalPointCooser($chooser) { - var $chosenText = $('.chosen-text', $chooser); - var $focalPointX = $('input.focal_point_x', $chooser); - var $focalPointY = $('input.focal_point_y', $chooser); - var $focalPointWidth = $('input.focal_point_width', $chooser); - var $focalPointHeight = $('input.focal_point_height', $chooser); - var chooserUrl = $chooser.data('chooserUrl'); - - $('.action-choose', $chooser).click(function() { - if (!$chooser.hasClass('blank')) { - window.focalPointChooserInitial = { - x: $focalPointX.val(), - y: $focalPointY.val(), - w: $focalPointWidth.val(), - h: $focalPointHeight.val(), - } - } else { - window.focalPointChooserInitial = undefined; - } - - ModalWorkflow({ - 'url': chooserUrl, - 'responses': { - 'focalPointChosen': function(focalPointData) { - $focalPointX.val(focalPointData.x); - $focalPointY.val(focalPointData.y); - $focalPointWidth.val(focalPointData.w); - $focalPointHeight.val(focalPointData.h); - - $chosenText.text(focalPointData.x + ", " + focalPointData.y + " " + focalPointData.w + "x" + focalPointData.h); - - $chooser.removeClass('blank'); - } - } - }); - }); - - $('.action-clear', $chooser).click(function() { - $focalPointX.val(''); - $focalPointY.val(''); - $focalPointWidth.val(''); - $focalPointHeight.val(''); - - $chooser.addClass('blank'); - }); -} - $(function() { - $('.focal-point-chooser').each(function() { - createFocalPointCooser($(this)); + $('img.focal-point-chooser').each(function() { + }); }); diff --git a/wagtail/wagtailimages/templates/wagtailimages/focal_point_chooser/chooser.html b/wagtail/wagtailimages/templates/wagtailimages/focal_point_chooser/chooser.html deleted file mode 100644 index aced6b6b84..0000000000 --- a/wagtail/wagtailimages/templates/wagtailimages/focal_point_chooser/chooser.html +++ /dev/null @@ -1,11 +0,0 @@ -{% load wagtailimages_tags i18n %} - -{% trans "Choose focal point" as title_str %} -{% include "wagtailadmin/shared/header.html" with title=title_str %} - -<div class="nice-padding"> - <div class="focal-point-chooser-image"> - {% image image max-800x600 %} - </div> - <a class="choose-focal-point button buttom-secondary" href="#">Done</a> -</div> \ No newline at end of file diff --git a/wagtail/wagtailimages/templates/wagtailimages/focal_point_chooser/chooser.js b/wagtail/wagtailimages/templates/wagtailimages/focal_point_chooser/chooser.js deleted file mode 100644 index a01807b14b..0000000000 --- a/wagtail/wagtailimages/templates/wagtailimages/focal_point_chooser/chooser.js +++ /dev/null @@ -1,67 +0,0 @@ -function(modal) { - var jcapi; - - function ajaxifyLinks (context) { - $('.listing a', context).click(function() { - modal.loadUrl(this.href); - return false; - }); - - $('.pagination a', context).click(function() { - var page = this.getAttribute("data-page"); - setPage(page); - return false; - }); - } - - ajaxifyLinks(modal.body); - - // Find image element - var $image = $('.focal-point-chooser-image img'); - - // Switch on Jcrop - $image.Jcrop({}, function() { - jcapi = this; - }); - - // Set initial select box - if (window.focalPointChooserInitial) { - var scaleX = {{ image.width }} / $image.width(); - var scaleY = {{ image.height }} / $image.height(); - - var x = window.focalPointChooserInitial.x / scaleX; - var y = window.focalPointChooserInitial.y / scaleY; - var w = window.focalPointChooserInitial.w / scaleX; - var h = window.focalPointChooserInitial.h / scaleY; - - jcapi.setSelect([ - x - w / 2, - y - h / 2, - x + w / 2, - y + h / 2, - ]); - } - - $('a.choose-focal-point', modal.body).click(function() { - var selectBox = jcapi.tellSelect(); - var scaleX = {{ image.width }} / $image.width(); - var scaleY = {{ image.height }} / $image.height(); - - modal.respond('focalPointChosen', { - x: Math.floor(scaleX * (selectBox.x + selectBox.x2) / 2), - y: Math.floor(scaleY * (selectBox.y + selectBox.y2) / 2), - w: Math.floor(scaleX * selectBox.w), - h: Math.floor(scaleY * selectBox.h), - }); - - modal.close(); - - return false; - }); - - $('#id_q').on('input', function() { - clearTimeout($.data(this, 'timer')); - var wait = setTimeout(search, 200); - $(this).data('timer', wait); - }); -} \ No newline at end of file diff --git a/wagtail/wagtailimages/templates/wagtailimages/images/_focal_point_chooser.html b/wagtail/wagtailimages/templates/wagtailimages/images/_focal_point_chooser.html deleted file mode 100644 index 797444947b..0000000000 --- a/wagtail/wagtailimages/templates/wagtailimages/images/_focal_point_chooser.html +++ /dev/null @@ -1,41 +0,0 @@ -{% load wagtailadmin_tags i18n %} - -<div class="field"> - <label>{% trans "Focal point" %}</label> - <div class="field-content"> - <div class="input"> - - <div class="chooser focal-point-chooser{% if not image.focal_point %} blank{% endif %}" data-chooser-url="{% url 'wagtailimages_focal_point_chooser' image.id %}"> - <div class="chosen"> - <div class="chosen-text"> - {% if image.focal_point %} - {{ image.focal_point_x }}, {{ image.focal_point_y }} {{ image.focal_point_width }}x{{ image.focal_point_height }} - {% endif %} - </div> - <div class="actions"> - <input type="button" class="action-clear button-small button-secondary" value="{% trans "Clear" %}"> - <input type="button" class="action-choose button-small button-secondary" value="{% trans "Change" %}"> - </div> - </div> - - <div class="unchosen"> - <div class="unchosen-text">{% trans "Not set" %}</div> - <input type="button" class="action-choose button-small button-secondary" value="{% trans "Set" %}"> - </div> - - {{ form.focal_point_x }} - {{ form.focal_point_y }} - {{ form.focal_point_width }} - {{ form.focal_point_height }} - </div> - </div> - - <p class="help"></p> - - {% if field.errors %} - <p class="error-message"> - <span>Invalid input</span> - </p> - {% endif %} - </div> -</div> diff --git a/wagtail/wagtailimages/templates/wagtailimages/images/edit.html b/wagtail/wagtailimages/templates/wagtailimages/images/edit.html index 1a91959fb1..53d708afb2 100644 --- a/wagtail/wagtailimages/templates/wagtailimages/images/edit.html +++ b/wagtail/wagtailimages/templates/wagtailimages/images/edit.html @@ -15,7 +15,6 @@ <!-- Focal point chooser --> <script src="{{ STATIC_URL }}wagtailimages/js/vendor/jquery.Jcrop.min.js"></script> - <script src="{{ STATIC_URL }}wagtailadmin/js/modal-workflow.js"></script> <script src="{{ STATIC_URL }}wagtailimages/js/focal-point-chooser.js"></script> {% endblock %} @@ -33,10 +32,6 @@ {% if field.name == 'file' %} {% include "wagtailimages/images/_file_field.html" %} - {% elif field.name == 'focal_point_x' %} - {% include "wagtailimages/images/_focal_point_chooser.html" %} - {% elif field.name == 'focal_point_y' or field.name == 'focal_point_width' or field.name == 'focal_point_height' %} - {# These fields are included in the focal point chooser above #} {% elif field.is_hidden %} {{ field }} {% else %} @@ -49,7 +44,7 @@ </form> </div> <div class="col5"> - {% image image max-800x600 %} + {% image image max-800x600 class="focal-point-chooser" %} {% if url_generator_enabled %} <a href="{% url 'wagtailimages_url_generator' image.id %}" class="button bicolor icon icon-link">URL Generator</a> diff --git a/wagtail/wagtailimages/templates/wagtailimages/multiple/add.html b/wagtail/wagtailimages/templates/wagtailimages/multiple/add.html index 426ef04fe0..066650d836 100644 --- a/wagtail/wagtailimages/templates/wagtailimages/multiple/add.html +++ b/wagtail/wagtailimages/templates/wagtailimages/multiple/add.html @@ -7,9 +7,6 @@ <link rel="stylesheet" href="{{ STATIC_URL }}wagtailimages/scss/add-multiple.scss" type="text/x-scss" /> {% endcompress %} {% include "wagtailadmin/shared/tag_field_css.html" %} - - <!-- Focal point chooser --> - <link rel="stylesheet" href="{{ STATIC_URL }}wagtailimages/scss/vendor/jquery.Jcrop.min.css" type="text/css"> {% endblock %} {% block content %} @@ -66,11 +63,6 @@ <script src="{{ STATIC_URL }}wagtailimages/js/vendor/jquery.fileupload-image.js"></script> <script src="{{ STATIC_URL }}wagtailadmin/js/vendor/tag-it.js"></script> - <!-- Focal point chooser --> - <script src="{{ STATIC_URL }}wagtailimages/js/vendor/jquery.Jcrop.min.js"></script> - <script src="{{ STATIC_URL }}wagtailadmin/js/modal-workflow.js"></script> - <script src="{{ STATIC_URL }}wagtailimages/js/focal-point-chooser.js"></script> - <!-- Main script --> <script src="{{ STATIC_URL }}wagtailimages/js/add-multiple.js"></script> {% endcompress %} diff --git a/wagtail/wagtailimages/templates/wagtailimages/multiple/edit_form.html b/wagtail/wagtailimages/templates/wagtailimages/multiple/edit_form.html index a07fc0d9e9..eb39a1bdd9 100644 --- a/wagtail/wagtailimages/templates/wagtailimages/multiple/edit_form.html +++ b/wagtail/wagtailimages/templates/wagtailimages/multiple/edit_form.html @@ -4,11 +4,7 @@ <ul class="fields"> {% csrf_token %} {% for field in form %} - {% if field.name == 'focal_point_x' %} - {% include "wagtailimages/images/_focal_point_chooser.html" %} - {% elif field.name == 'focal_point_y' or field.name == 'focal_point_width' or field.name == 'focal_point_height' %} - {# These fields are included in the focal point chooser above #} - {% elif field.is_hidden %} + {% if field.is_hidden %} {{ field }} {% else %} {% include "wagtailadmin/shared/field_as_li.html" %} diff --git a/wagtail/wagtailimages/tests.py b/wagtail/wagtailimages/tests.py index 0142b78e39..85c4f957b6 100644 --- a/wagtail/wagtailimages/tests.py +++ b/wagtail/wagtailimages/tests.py @@ -1036,54 +1036,3 @@ class TestIssue573(TestCase): # Try creating a rendition from that image # This would crash if the bug is present image.get_rendition('fill-800x600') - - -class TestFocalPointChooserView(TestCase, WagtailTestUtils): - def setUp(self): - # Create an image for running tests on - self.image = Image.objects.create( - title="Test image", - file=get_test_image_file(), - ) - - # Login - self.user = self.login() - - def test_get(self): - """ - This tests that the view responds correctly for a user with edit permissions on this image - """ - # Get - response = self.client.get(reverse('wagtailimages_focal_point_chooser', args=(self.image.id, ))) - - # Check response - self.assertEqual(response.status_code, 200) - self.assertTemplateUsed(response, 'wagtailimages/focal_point_chooser/chooser.html') - self.assertTemplateUsed(response, 'wagtailimages/focal_point_chooser/chooser.js') - - def test_get_bad_permissions(self): - """ - This tests that the view gives a 403 if a user without correct permissions attempts to access it - """ - # Remove privileges from user - self.user.is_superuser = False - self.user.user_permissions.add( - Permission.objects.get(content_type__app_label='wagtailadmin', codename='access_admin') - ) - self.user.save() - - # Get - response = self.client.get(reverse('wagtailimages_focal_point_chooser', args=(self.image.id, ))) - - # Check response - self.assertEqual(response.status_code, 403) - - def test_get_bad_image(self): - """ - This tests that the view gives a 404 if the image doesn't exist - """ - # Get - response = self.client.get(reverse('wagtailimages_focal_point_chooser', args=(9999, ))) - - # Check response - self.assertEqual(response.status_code, 404) diff --git a/wagtail/wagtailimages/views/focal_point_chooser.py b/wagtail/wagtailimages/views/focal_point_chooser.py deleted file mode 100644 index 439c9ca8b4..0000000000 --- a/wagtail/wagtailimages/views/focal_point_chooser.py +++ /dev/null @@ -1,18 +0,0 @@ -from django.shortcuts import get_object_or_404 -from django.contrib.auth.decorators import permission_required -from django.core.exceptions import PermissionDenied - -from wagtail.wagtailadmin.modal_workflow import render_modal_workflow -from wagtail.wagtailimages.models import get_image_model - - -@permission_required('wagtailadmin.access_admin') -def chooser(request, image_id): - image = get_object_or_404(get_image_model(), id=image_id) - - if not image.is_editable_by_user(request.user): - raise PermissionDenied - - return render_modal_workflow(request, 'wagtailimages/focal_point_chooser/chooser.html', 'wagtailimages/focal_point_chooser/chooser.js', { - 'image': image, - }) From 293864b26071e06fd94d7c1fc2964cea4fd491db Mon Sep 17 00:00:00 2001 From: Matt Westcott <matt@west.co.tt> Date: Wed, 10 Sep 2014 10:09:30 +0100 Subject: [PATCH 150/210] SOUTH_MIGRATION_MODULES setting not needed with South 1.0 --- .../project_name/project_name/settings/base.py | 8 -------- 1 file changed, 8 deletions(-) diff --git a/wagtail/project_template/project_name/project_name/settings/base.py b/wagtail/project_template/project_name/project_name/settings/base.py index fe47cf9568..53312d0700 100644 --- a/wagtail/project_template/project_name/project_name/settings/base.py +++ b/wagtail/project_template/project_name/project_name/settings/base.py @@ -147,14 +147,6 @@ COMPRESS_PRECOMPILERS = ( ) -# Taggit 0.12 has moved its south migrations to separate folder -# http://django-taggit.readthedocs.org/en/latest/ - -SOUTH_MIGRATION_MODULES = { - 'taggit': 'taggit.south_migrations', -} - - # Template configuration from django.conf import global_settings From 7ee1a67413b4cbefbf95768edc070016345090c3 Mon Sep 17 00:00:00 2001 From: Matt Westcott <matt@west.co.tt> Date: Wed, 10 Sep 2014 10:10:24 +0100 Subject: [PATCH 151/210] remove celery from default setup, and suggest celery/redis in production.py instead --- .../project_name/settings/base.py | 26 ----------------- .../project_name/settings/production.py | 29 +++++++++++++++++++ wagtail/project_template/requirements.txt | 6 ++-- 3 files changed, 33 insertions(+), 28 deletions(-) diff --git a/wagtail/project_template/project_name/project_name/settings/base.py b/wagtail/project_template/project_name/project_name/settings/base.py index 53312d0700..4afa4b28fd 100644 --- a/wagtail/project_template/project_name/project_name/settings/base.py +++ b/wagtail/project_template/project_name/project_name/settings/base.py @@ -160,32 +160,6 @@ TEMPLATE_DIRS = ( ) -# Celery settings -# http://celery.readthedocs.org/en/latest/configuration.html - -import djcelery - -djcelery.setup_loader() - -CELERY_SEND_TASK_ERROR_EMAILS = True -BROKER_URL = 'redis://' - - -# Use Redis as the cache backend for extra performance: -# http://wagtail.readthedocs.org/en/latest/howto/performance.html#cache -# -# CACHES = { -# 'default': { -# 'BACKEND': 'redis_cache.cache.RedisCache', -# 'LOCATION': '127.0.0.1:6379', -# 'KEY_PREFIX': '{{ project_name }}', -# 'OPTIONS': { -# 'CLIENT_CLASS': 'redis_cache.client.DefaultClient', -# } -# } -# } - - # Wagtail settings LOGIN_URL = 'wagtailadmin_login' diff --git a/wagtail/project_template/project_name/project_name/settings/production.py b/wagtail/project_template/project_name/project_name/settings/production.py index a4b2e8a130..e9e9e1971b 100644 --- a/wagtail/project_template/project_name/project_name/settings/production.py +++ b/wagtail/project_template/project_name/project_name/settings/production.py @@ -13,6 +13,35 @@ TEMPLATE_DEBUG = False COMPRESS_OFFLINE = True +# Send notification emails as a background task using Celery, +# to prevent this from blocking web server threads +# (requires the django-celery package): +# http://celery.readthedocs.org/en/latest/configuration.html + +# import djcelery +# +# djcelery.setup_loader() +# +# CELERY_SEND_TASK_ERROR_EMAILS = True +# BROKER_URL = 'redis://' + + +# Use Redis as the cache backend for extra performance +# (requires the django-redis-cache package): +# http://wagtail.readthedocs.org/en/latest/howto/performance.html#cache + +# CACHES = { +# 'default': { +# 'BACKEND': 'redis_cache.cache.RedisCache', +# 'LOCATION': '127.0.0.1:6379', +# 'KEY_PREFIX': '{{ project_name }}', +# 'OPTIONS': { +# 'CLIENT_CLASS': 'redis_cache.client.DefaultClient', +# } +# } +# } + + try: from .local import * except ImportError: diff --git a/wagtail/project_template/requirements.txt b/wagtail/project_template/requirements.txt index fac9d25482..71202ab19d 100644 --- a/wagtail/project_template/requirements.txt +++ b/wagtail/project_template/requirements.txt @@ -3,11 +3,13 @@ Django>=1.6.2,<1.7 South==1.0.0 wagtail==0.5 -# Recommended components (require additional setup) +# Recommended components (require additional setup): # psycopg2==2.5.2 # elasticsearch==1.1.1 + +# Recommended components to improve performance in production: # django-redis-cache==0.13.0 -django-celery==3.1.10 +# django-celery==3.1.10 # Developer tools Fabric==1.9.0 From 5b54b1f177fbfb4937c5eb0484f9064001547717 Mon Sep 17 00:00:00 2001 From: Karl Hobley <karl@torchbox.com> Date: Wed, 10 Sep 2014 10:14:18 +0100 Subject: [PATCH 152/210] Implemented manual image cropping in edit preview --- .../wagtailimages/js/focal-point-chooser.js | 40 ++++++++++++++++++- .../scss/focal-point-chooser.scss | 13 ++++++ .../templates/wagtailimages/images/edit.html | 15 ++++++- 3 files changed, 65 insertions(+), 3 deletions(-) create mode 100644 wagtail/wagtailimages/static/wagtailimages/scss/focal-point-chooser.scss diff --git a/wagtail/wagtailimages/static/wagtailimages/js/focal-point-chooser.js b/wagtail/wagtailimages/static/wagtailimages/js/focal-point-chooser.js index 60cc8871c1..2b974f2716 100644 --- a/wagtail/wagtailimages/static/wagtailimages/js/focal-point-chooser.js +++ b/wagtail/wagtailimages/static/wagtailimages/js/focal-point-chooser.js @@ -1,5 +1,43 @@ $(function() { - $('img.focal-point-chooser').each(function() { + var $chooser = $('div.focal-point-chooser'); + var $indicator = $('.current-focal-point-indicator', $chooser); + var $image = $('img', $chooser); + var $focalPointXField = $('input.focal_point_x'); + var $focalPointYField = $('input.focal_point_y'); + var $focalPointWidthField = $('input.focal_point_width'); + var $focalPointHeightField = $('input.focal_point_height'); + var originalWidth = $image.data('originalWidth'); + var originalHeight = $image.data('originalHeight'); + + var focalPointXOriginal = $chooser.data('focalPointX'); + var focalPointYOriginal = $chooser.data('focalPointY'); + var focalPointWidthOriginal = $chooser.data('focalPointWidth'); + var focalPointHeightOriginal = $chooser.data('focalPointHeight'); + + $image.Jcrop({ + trueSize: [originalWidth, originalHeight], + onSelect: function(box) { + var x = Math.floor((box.x + box.x2) / 2); + var y = Math.floor((box.y + box.y2) / 2); + var w = Math.floor(box.w); + var h = Math.floor(box.h); + + $focalPointXField.val(x); + $focalPointYField.val(y); + $focalPointWidthField.val(w); + $focalPointHeightField.val(h); + }, + onRelease: function() { + $focalPointXField.val(focalPointXOriginal); + $focalPointYField.val(focalPointYOriginal); + $focalPointWidthField.val(focalPointWidthOriginal); + $focalPointHeightField.val(focalPointHeightOriginal); + }, }); + + $indicator.css('left', ((focalPointXOriginal - focalPointWidthOriginal / 2) * 100 / originalWidth) + '%'); + $indicator.css('top', ((focalPointYOriginal - focalPointHeightOriginal / 2) * 100 / originalHeight) + '%'); + $indicator.css('width', (focalPointWidthOriginal * 100 / originalWidth) + '%'); + $indicator.css('height', (focalPointHeightOriginal * 100 / originalHeight) + '%'); }); diff --git a/wagtail/wagtailimages/static/wagtailimages/scss/focal-point-chooser.scss b/wagtail/wagtailimages/static/wagtailimages/scss/focal-point-chooser.scss new file mode 100644 index 0000000000..8f4a4105aa --- /dev/null +++ b/wagtail/wagtailimages/static/wagtailimages/scss/focal-point-chooser.scss @@ -0,0 +1,13 @@ +div.focal-point-chooser { + position: relative; +} + +div.current-focal-point-indicator { + position: absolute; + border: 1px solid #FFF; + opacity: 0.5; + + .hidden { + display: none; + } +} \ No newline at end of file diff --git a/wagtail/wagtailimages/templates/wagtailimages/images/edit.html b/wagtail/wagtailimages/templates/wagtailimages/images/edit.html index 53d708afb2..dd96ddd8d2 100644 --- a/wagtail/wagtailimages/templates/wagtailimages/images/edit.html +++ b/wagtail/wagtailimages/templates/wagtailimages/images/edit.html @@ -1,5 +1,5 @@ {% extends "wagtailadmin/base.html" %} -{% load wagtailimages_tags %} +{% load wagtailimages_tags compress %} {% load i18n %} {% block titletag %}{% blocktrans with title=image.title %}Editing image {{ title }}{% endblocktrans %}{% endblock %} {% block bodyclass %}menu-images{% endblock %} @@ -8,6 +8,9 @@ <!-- Focal point chooser --> <link rel="stylesheet" href="{{ STATIC_URL }}wagtailimages/scss/vendor/jquery.Jcrop.min.css" type="text/css"> + {% compress css %} + <link rel="stylesheet" href="{{ STATIC_URL }}wagtailimages/scss/focal-point-chooser.scss" type="text/x-scss"> + {% endcompress %} {% endblock %} {% block extra_js %} @@ -44,7 +47,15 @@ </form> </div> <div class="col5"> - {% image image max-800x600 class="focal-point-chooser" %} + <div class="focal-point-chooser" + data-focal-point-x="{{ image.focal_point_x }}" + data-focal-point-y="{{ image.focal_point_y }}" + data-focal-point-width="{{ image.focal_point_width }}" + data-focal-point-height="{{ image.focal_point_height }}"> + + {% image image max-800x600 data-original-width=image.width data-original-height=image.height %} + <div class="current-focal-point-indicator{% if not image.focal_point %} hidden{% endif %}"></div> + </div> {% if url_generator_enabled %} <a href="{% url 'wagtailimages_url_generator' image.id %}" class="button bicolor icon icon-link">URL Generator</a> From 510e932ad4caa0add31d81d9e63a00c0d0f60791 Mon Sep 17 00:00:00 2001 From: Karl Hobley <karl@torchbox.com> Date: Wed, 10 Sep 2014 10:25:54 +0100 Subject: [PATCH 153/210] Minor code tweaks --- .../static/wagtailimages/js/focal-point-chooser.js | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/wagtail/wagtailimages/static/wagtailimages/js/focal-point-chooser.js b/wagtail/wagtailimages/static/wagtailimages/js/focal-point-chooser.js index 2b974f2716..b67adda99d 100644 --- a/wagtail/wagtailimages/static/wagtailimages/js/focal-point-chooser.js +++ b/wagtail/wagtailimages/static/wagtailimages/js/focal-point-chooser.js @@ -36,8 +36,13 @@ $(function() { }, }); - $indicator.css('left', ((focalPointXOriginal - focalPointWidthOriginal / 2) * 100 / originalWidth) + '%'); - $indicator.css('top', ((focalPointYOriginal - focalPointHeightOriginal / 2) * 100 / originalHeight) + '%'); - $indicator.css('width', (focalPointWidthOriginal * 100 / originalWidth) + '%'); - $indicator.css('height', (focalPointHeightOriginal * 100 / originalHeight) + '%'); + var left = focalPointXOriginal - focalPointWidthOriginal / 2 + var top = focalPointYOriginal - focalPointHeightOriginal / 2 + var width = focalPointWidthOriginal; + var height = focalPointHeightOriginal; + + $indicator.css('left', (left * 100 / originalWidth) + '%'); + $indicator.css('top', (top * 100 / originalHeight) + '%'); + $indicator.css('width', (width * 100 / originalWidth) + '%'); + $indicator.css('height', (height * 100 / originalHeight) + '%'); }); From 24aefc417b849af89a0b1c45f568aaa169352715 Mon Sep 17 00:00:00 2001 From: Matt Westcott <matt@west.co.tt> Date: Wed, 10 Sep 2014 10:46:43 +0100 Subject: [PATCH 154/210] restructure project_template to be less opinionated and closer to what django itself does --- wagtail/project_template/.gitignore | 2 +- .../{project_name => }/core/__init__.py | 0 .../core/migrations/0001_initial.py | 0 .../core/migrations/0002_create_homepage.py | 0 .../core/migrations/__init__.py | 0 .../{project_name => }/core/models.py | 0 .../static/css/project_name.scss | 0 .../static/js/project_name.js | 0 .../{project_name => core}/templates/404.html | 0 .../{project_name => core}/templates/500.html | 0 .../templates/base.html | 0 .../core/templates/core/home_page.html | 0 .../core/templatetags/__init__.py | 0 .../core/templatetags/core_tags.py | 0 wagtail/project_template/docs/Makefile | 153 ----------- wagtail/project_template/docs/__init__.py | 1 - wagtail/project_template/docs/conf.py | 242 ------------------ wagtail/project_template/docs/deploy.rst | 4 - wagtail/project_template/docs/index.rst | 25 -- wagtail/project_template/docs/install.rst | 4 - wagtail/project_template/docs/make.bat | 190 -------------- wagtail/project_template/fabfile.py | 32 --- .../{project_name => }/manage.py | 0 .../{project_name => }/__init__.py | 0 .../{project_name => }/settings/__init__.py | 0 .../{project_name => }/settings/base.py | 27 +- .../{project_name => }/settings/dev.py | 2 - .../{project_name => }/settings/production.py | 0 .../project_name/{project_name => }/urls.py | 0 .../project_name/{project_name => }/wsgi.py | 0 30 files changed, 5 insertions(+), 677 deletions(-) rename wagtail/project_template/{project_name => }/core/__init__.py (100%) rename wagtail/project_template/{project_name => }/core/migrations/0001_initial.py (100%) rename wagtail/project_template/{project_name => }/core/migrations/0002_create_homepage.py (100%) rename wagtail/project_template/{project_name => }/core/migrations/__init__.py (100%) rename wagtail/project_template/{project_name => }/core/models.py (100%) rename wagtail/project_template/{project_name => core}/static/css/project_name.scss (100%) rename wagtail/project_template/{project_name => core}/static/js/project_name.js (100%) rename wagtail/project_template/{project_name => core}/templates/404.html (100%) rename wagtail/project_template/{project_name => core}/templates/500.html (100%) rename wagtail/project_template/{project_name => core}/templates/base.html (100%) rename wagtail/project_template/{project_name => }/core/templates/core/home_page.html (100%) rename wagtail/project_template/{project_name => }/core/templatetags/__init__.py (100%) rename wagtail/project_template/{project_name => }/core/templatetags/core_tags.py (100%) delete mode 100644 wagtail/project_template/docs/Makefile delete mode 100644 wagtail/project_template/docs/__init__.py delete mode 100644 wagtail/project_template/docs/conf.py delete mode 100644 wagtail/project_template/docs/deploy.rst delete mode 100644 wagtail/project_template/docs/index.rst delete mode 100644 wagtail/project_template/docs/install.rst delete mode 100644 wagtail/project_template/docs/make.bat delete mode 100644 wagtail/project_template/fabfile.py rename wagtail/project_template/{project_name => }/manage.py (100%) rename wagtail/project_template/project_name/{project_name => }/__init__.py (100%) rename wagtail/project_template/project_name/{project_name => }/settings/__init__.py (100%) rename wagtail/project_template/project_name/{project_name => }/settings/base.py (86%) rename wagtail/project_template/project_name/{project_name => }/settings/dev.py (86%) rename wagtail/project_template/project_name/{project_name => }/settings/production.py (100%) rename wagtail/project_template/project_name/{project_name => }/urls.py (100%) rename wagtail/project_template/project_name/{project_name => }/wsgi.py (100%) diff --git a/wagtail/project_template/.gitignore b/wagtail/project_template/.gitignore index 6e41f3871b..64f5e14ddf 100644 --- a/wagtail/project_template/.gitignore +++ b/wagtail/project_template/.gitignore @@ -1,7 +1,7 @@ *.pyc .DS_Store /.venv/ -/*/*/settings/local.py +/*/settings/local.py /static/ /media/ /.vagrant/ diff --git a/wagtail/project_template/project_name/core/__init__.py b/wagtail/project_template/core/__init__.py similarity index 100% rename from wagtail/project_template/project_name/core/__init__.py rename to wagtail/project_template/core/__init__.py diff --git a/wagtail/project_template/project_name/core/migrations/0001_initial.py b/wagtail/project_template/core/migrations/0001_initial.py similarity index 100% rename from wagtail/project_template/project_name/core/migrations/0001_initial.py rename to wagtail/project_template/core/migrations/0001_initial.py diff --git a/wagtail/project_template/project_name/core/migrations/0002_create_homepage.py b/wagtail/project_template/core/migrations/0002_create_homepage.py similarity index 100% rename from wagtail/project_template/project_name/core/migrations/0002_create_homepage.py rename to wagtail/project_template/core/migrations/0002_create_homepage.py diff --git a/wagtail/project_template/project_name/core/migrations/__init__.py b/wagtail/project_template/core/migrations/__init__.py similarity index 100% rename from wagtail/project_template/project_name/core/migrations/__init__.py rename to wagtail/project_template/core/migrations/__init__.py diff --git a/wagtail/project_template/project_name/core/models.py b/wagtail/project_template/core/models.py similarity index 100% rename from wagtail/project_template/project_name/core/models.py rename to wagtail/project_template/core/models.py diff --git a/wagtail/project_template/project_name/static/css/project_name.scss b/wagtail/project_template/core/static/css/project_name.scss similarity index 100% rename from wagtail/project_template/project_name/static/css/project_name.scss rename to wagtail/project_template/core/static/css/project_name.scss diff --git a/wagtail/project_template/project_name/static/js/project_name.js b/wagtail/project_template/core/static/js/project_name.js similarity index 100% rename from wagtail/project_template/project_name/static/js/project_name.js rename to wagtail/project_template/core/static/js/project_name.js diff --git a/wagtail/project_template/project_name/templates/404.html b/wagtail/project_template/core/templates/404.html similarity index 100% rename from wagtail/project_template/project_name/templates/404.html rename to wagtail/project_template/core/templates/404.html diff --git a/wagtail/project_template/project_name/templates/500.html b/wagtail/project_template/core/templates/500.html similarity index 100% rename from wagtail/project_template/project_name/templates/500.html rename to wagtail/project_template/core/templates/500.html diff --git a/wagtail/project_template/project_name/templates/base.html b/wagtail/project_template/core/templates/base.html similarity index 100% rename from wagtail/project_template/project_name/templates/base.html rename to wagtail/project_template/core/templates/base.html diff --git a/wagtail/project_template/project_name/core/templates/core/home_page.html b/wagtail/project_template/core/templates/core/home_page.html similarity index 100% rename from wagtail/project_template/project_name/core/templates/core/home_page.html rename to wagtail/project_template/core/templates/core/home_page.html diff --git a/wagtail/project_template/project_name/core/templatetags/__init__.py b/wagtail/project_template/core/templatetags/__init__.py similarity index 100% rename from wagtail/project_template/project_name/core/templatetags/__init__.py rename to wagtail/project_template/core/templatetags/__init__.py diff --git a/wagtail/project_template/project_name/core/templatetags/core_tags.py b/wagtail/project_template/core/templatetags/core_tags.py similarity index 100% rename from wagtail/project_template/project_name/core/templatetags/core_tags.py rename to wagtail/project_template/core/templatetags/core_tags.py diff --git a/wagtail/project_template/docs/Makefile b/wagtail/project_template/docs/Makefile deleted file mode 100644 index 9842cf5755..0000000000 --- a/wagtail/project_template/docs/Makefile +++ /dev/null @@ -1,153 +0,0 @@ -# Makefile for Sphinx documentation -# - -# You can set these variables from the command line. -SPHINXOPTS = -SPHINXBUILD = sphinx-build -PAPER = -BUILDDIR = _build - -# Internal variables. -PAPEROPT_a4 = -D latex_paper_size=a4 -PAPEROPT_letter = -D latex_paper_size=letter -ALLSPHINXOPTS = -d $(BUILDDIR)/doctrees $(PAPEROPT_$(PAPER)) $(SPHINXOPTS) . -# the i18n builder cannot share the environment and doctrees with the others -I18NSPHINXOPTS = $(PAPEROPT_$(PAPER)) $(SPHINXOPTS) . - -.PHONY: help clean html dirhtml singlehtml pickle json htmlhelp qthelp devhelp epub latex latexpdf text man changes linkcheck doctest gettext - -help: - @echo "Please use \`make <target>' where <target> is one of" - @echo " html to make standalone HTML files" - @echo " dirhtml to make HTML files named index.html in directories" - @echo " singlehtml to make a single large HTML file" - @echo " pickle to make pickle files" - @echo " json to make JSON files" - @echo " htmlhelp to make HTML files and a HTML help project" - @echo " qthelp to make HTML files and a qthelp project" - @echo " devhelp to make HTML files and a Devhelp project" - @echo " epub to make an epub" - @echo " latex to make LaTeX files, you can set PAPER=a4 or PAPER=letter" - @echo " latexpdf to make LaTeX files and run them through pdflatex" - @echo " text to make text files" - @echo " man to make manual pages" - @echo " texinfo to make Texinfo files" - @echo " info to make Texinfo files and run them through makeinfo" - @echo " gettext to make PO message catalogs" - @echo " changes to make an overview of all changed/added/deprecated items" - @echo " linkcheck to check all external links for integrity" - @echo " doctest to run all doctests embedded in the documentation (if enabled)" - -clean: - -rm -rf $(BUILDDIR)/* - -html: - $(SPHINXBUILD) -b html $(ALLSPHINXOPTS) $(BUILDDIR)/html - @echo - @echo "Build finished. The HTML pages are in $(BUILDDIR)/html." - -dirhtml: - $(SPHINXBUILD) -b dirhtml $(ALLSPHINXOPTS) $(BUILDDIR)/dirhtml - @echo - @echo "Build finished. The HTML pages are in $(BUILDDIR)/dirhtml." - -singlehtml: - $(SPHINXBUILD) -b singlehtml $(ALLSPHINXOPTS) $(BUILDDIR)/singlehtml - @echo - @echo "Build finished. The HTML page is in $(BUILDDIR)/singlehtml." - -pickle: - $(SPHINXBUILD) -b pickle $(ALLSPHINXOPTS) $(BUILDDIR)/pickle - @echo - @echo "Build finished; now you can process the pickle files." - -json: - $(SPHINXBUILD) -b json $(ALLSPHINXOPTS) $(BUILDDIR)/json - @echo - @echo "Build finished; now you can process the JSON files." - -htmlhelp: - $(SPHINXBUILD) -b htmlhelp $(ALLSPHINXOPTS) $(BUILDDIR)/htmlhelp - @echo - @echo "Build finished; now you can run HTML Help Workshop with the" \ - ".hhp project file in $(BUILDDIR)/htmlhelp." - -qthelp: - $(SPHINXBUILD) -b qthelp $(ALLSPHINXOPTS) $(BUILDDIR)/qthelp - @echo - @echo "Build finished; now you can run "qcollectiongenerator" with the" \ - ".qhcp project file in $(BUILDDIR)/qthelp, like this:" - @echo "# qcollectiongenerator $(BUILDDIR)/qthelp/{{ project_name }}.qhcp" - @echo "To view the help file:" - @echo "# assistant -collectionFile $(BUILDDIR)/qthelp/{{ project_name }}.qhc" - -devhelp: - $(SPHINXBUILD) -b devhelp $(ALLSPHINXOPTS) $(BUILDDIR)/devhelp - @echo - @echo "Build finished." - @echo "To view the help file:" - @echo "# mkdir -p $$HOME/.local/share/devhelp/{{ project_name }}" - @echo "# ln -s $(BUILDDIR)/devhelp $$HOME/.local/share/devhelp/{{ project_name }}" - @echo "# devhelp" - -epub: - $(SPHINXBUILD) -b epub $(ALLSPHINXOPTS) $(BUILDDIR)/epub - @echo - @echo "Build finished. The epub file is in $(BUILDDIR)/epub." - -latex: - $(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex - @echo - @echo "Build finished; the LaTeX files are in $(BUILDDIR)/latex." - @echo "Run \`make' in that directory to run these through (pdf)latex" \ - "(use \`make latexpdf' here to do that automatically)." - -latexpdf: - $(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex - @echo "Running LaTeX files through pdflatex..." - $(MAKE) -C $(BUILDDIR)/latex all-pdf - @echo "pdflatex finished; the PDF files are in $(BUILDDIR)/latex." - -text: - $(SPHINXBUILD) -b text $(ALLSPHINXOPTS) $(BUILDDIR)/text - @echo - @echo "Build finished. The text files are in $(BUILDDIR)/text." - -man: - $(SPHINXBUILD) -b man $(ALLSPHINXOPTS) $(BUILDDIR)/man - @echo - @echo "Build finished. The manual pages are in $(BUILDDIR)/man." - -texinfo: - $(SPHINXBUILD) -b texinfo $(ALLSPHINXOPTS) $(BUILDDIR)/texinfo - @echo - @echo "Build finished. The Texinfo files are in $(BUILDDIR)/texinfo." - @echo "Run \`make' in that directory to run these through makeinfo" \ - "(use \`make info' here to do that automatically)." - -info: - $(SPHINXBUILD) -b texinfo $(ALLSPHINXOPTS) $(BUILDDIR)/texinfo - @echo "Running Texinfo files through makeinfo..." - make -C $(BUILDDIR)/texinfo info - @echo "makeinfo finished; the Info files are in $(BUILDDIR)/texinfo." - -gettext: - $(SPHINXBUILD) -b gettext $(I18NSPHINXOPTS) $(BUILDDIR)/locale - @echo - @echo "Build finished. The message catalogs are in $(BUILDDIR)/locale." - -changes: - $(SPHINXBUILD) -b changes $(ALLSPHINXOPTS) $(BUILDDIR)/changes - @echo - @echo "The overview file is in $(BUILDDIR)/changes." - -linkcheck: - $(SPHINXBUILD) -b linkcheck $(ALLSPHINXOPTS) $(BUILDDIR)/linkcheck - @echo - @echo "Link check complete; look for any errors in the above output " \ - "or in $(BUILDDIR)/linkcheck/output.txt." - -doctest: - $(SPHINXBUILD) -b doctest $(ALLSPHINXOPTS) $(BUILDDIR)/doctest - @echo "Testing of doctests in the sources finished, look at the " \ - "results in $(BUILDDIR)/doctest/output.txt." diff --git a/wagtail/project_template/docs/__init__.py b/wagtail/project_template/docs/__init__.py deleted file mode 100644 index 8772c827b3..0000000000 --- a/wagtail/project_template/docs/__init__.py +++ /dev/null @@ -1 +0,0 @@ -# Included so that Django's startproject comment runs against the docs directory diff --git a/wagtail/project_template/docs/conf.py b/wagtail/project_template/docs/conf.py deleted file mode 100644 index 0a73709e65..0000000000 --- a/wagtail/project_template/docs/conf.py +++ /dev/null @@ -1,242 +0,0 @@ -# -*- coding: utf-8 -*- -# -# {{ project_name }} documentation build configuration file, created by -# sphinx-quickstart on Sun Feb 17 11:46:20 2013. -# -# This file is execfile()d with the current directory set to its containing dir. -# -# Note that not all possible configuration values are present in this -# autogenerated file. -# -# All configuration values have a default; values that are commented out -# serve to show the default. - -import sys, os - -# If extensions (or modules to document with autodoc) are in another directory, -# add these directories to sys.path here. If the directory is relative to the -# documentation root, use os.path.abspath to make it absolute, like shown here. -#sys.path.insert(0, os.path.abspath('.')) - -# -- General configuration ----------------------------------------------------- - -# If your documentation needs a minimal Sphinx version, state it here. -#needs_sphinx = '1.0' - -# Add any Sphinx extension module names here, as strings. They can be extensions -# coming with Sphinx (named 'sphinx.ext.*') or your custom ones. -extensions = [] - -# Add any paths that contain templates here, relative to this directory. -templates_path = ['_templates'] - -# The suffix of source filenames. -source_suffix = '.rst' - -# The encoding of source files. -#source_encoding = 'utf-8-sig' - -# The master toctree document. -master_doc = 'index' - -# General information about the project. -project = u'{{ project_name }}' -copyright = u'2014, ChangeMyName' - -# The version info for the project you're documenting, acts as replacement for -# |version| and |release|, also used in various other places throughout the -# built documents. -# -# The short X.Y version. -version = '0.1' -# The full version, including alpha/beta/rc tags. -release = '0.1' - -# The language for content autogenerated by Sphinx. Refer to documentation -# for a list of supported languages. -#language = None - -# There are two options for replacing |today|: either, you set today to some -# non-false value, then it is used: -#today = '' -# Else, today_fmt is used as the format for a strftime call. -#today_fmt = '%B %d, %Y' - -# List of patterns, relative to source directory, that match files and -# directories to ignore when looking for source files. -exclude_patterns = ['_build'] - -# The reST default role (used for this markup: `text`) to use for all documents. -#default_role = None - -# If true, '()' will be appended to :func: etc. cross-reference text. -#add_function_parentheses = True - -# If true, the current module name will be prepended to all description -# unit titles (such as .. function::). -#add_module_names = True - -# If true, sectionauthor and moduleauthor directives will be shown in the -# output. They are ignored by default. -#show_authors = False - -# The name of the Pygments (syntax highlighting) style to use. -pygments_style = 'sphinx' - -# A list of ignored prefixes for module index sorting. -#modindex_common_prefix = [] - - -# -- Options for HTML output --------------------------------------------------- - -# The theme to use for HTML and HTML Help pages. See the documentation for -# a list of builtin themes. -html_theme = 'default' - -# Theme options are theme-specific and customize the look and feel of a theme -# further. For a list of options available for each theme, see the -# documentation. -#html_theme_options = {} - -# Add any paths that contain custom themes here, relative to this directory. -#html_theme_path = [] - -# The name for this set of Sphinx documents. If None, it defaults to -# "<project> v<release> documentation". -#html_title = None - -# A shorter title for the navigation bar. Default is the same as html_title. -#html_short_title = None - -# The name of an image file (relative to this directory) to place at the top -# of the sidebar. -#html_logo = None - -# The name of an image file (within the static path) to use as favicon of the -# docs. This file should be a Windows icon file (.ico) being 16x16 or 32x32 -# pixels large. -#html_favicon = None - -# Add any paths that contain custom static files (such as style sheets) here, -# relative to this directory. They are copied after the builtin static files, -# so a file named "default.css" will overwrite the builtin "default.css". -html_static_path = ['_static'] - -# If not '', a 'Last updated on:' timestamp is inserted at every page bottom, -# using the given strftime format. -#html_last_updated_fmt = '%b %d, %Y' - -# If true, SmartyPants will be used to convert quotes and dashes to -# typographically correct entities. -#html_use_smartypants = True - -# Custom sidebar templates, maps document names to template names. -#html_sidebars = {} - -# Additional templates that should be rendered to pages, maps page names to -# template names. -#html_additional_pages = {} - -# If false, no module index is generated. -#html_domain_indices = True - -# If false, no index is generated. -#html_use_index = True - -# If true, the index is split into individual pages for each letter. -#html_split_index = False - -# If true, links to the reST sources are added to the pages. -#html_show_sourcelink = True - -# If true, "Created using Sphinx" is shown in the HTML footer. Default is True. -#html_show_sphinx = True - -# If true, "(C) Copyright ..." is shown in the HTML footer. Default is True. -#html_show_copyright = True - -# If true, an OpenSearch description file will be output, and all pages will -# contain a <link> tag referring to it. The value of this option must be the -# base URL from which the finished HTML is served. -#html_use_opensearch = '' - -# This is the file name suffix for HTML files (e.g. ".xhtml"). -#html_file_suffix = None - -# Output file base name for HTML help builder. -htmlhelp_basename = '{{ project_name }}doc' - - -# -- Options for LaTeX output -------------------------------------------------- - -latex_elements = { -# The paper size ('letterpaper' or 'a4paper'). -#'papersize': 'letterpaper', - -# The font size ('10pt', '11pt' or '12pt'). -#'pointsize': '10pt', - -# Additional stuff for the LaTeX preamble. -#'preamble': '', -} - -# Grouping the document tree into LaTeX files. List of tuples -# (source start file, target name, title, author, documentclass [howto/manual]). -latex_documents = [ - ('index', '{{ project_name }}.tex', u'{{ project_name }} Documentation', - u'ChangeToMyName', 'manual'), -] - -# The name of an image file (relative to this directory) to place at the top of -# the title page. -#latex_logo = None - -# For "manual" documents, if this is true, then toplevel headings are parts, -# not chapters. -#latex_use_parts = False - -# If true, show page references after internal links. -#latex_show_pagerefs = False - -# If true, show URL addresses after external links. -#latex_show_urls = False - -# Documents to append as an appendix to all manuals. -#latex_appendices = [] - -# If false, no module index is generated. -#latex_domain_indices = True - - -# -- Options for manual page output -------------------------------------------- - -# One entry per manual page. List of tuples -# (source start file, name, description, authors, manual section). -man_pages = [ - ('index', '{{ project_name }}', u'{{ project_name }} Documentation', - [u'ChangeToMyName'], 1) -] - -# If true, show URL addresses after external links. -#man_show_urls = False - - -# -- Options for Texinfo output ------------------------------------------------ - -# Grouping the document tree into Texinfo files. List of tuples -# (source start file, target name, title, author, -# dir menu entry, description, category) -texinfo_documents = [ - ('index', '{{ project_name }}', u'{{ project_name }} Documentation', - u'ChangeToMyName', '{{ project_name }}', 'One line description of project.', - 'Miscellaneous'), -] - -# Documents to append as an appendix to all manuals. -#texinfo_appendices = [] - -# If false, no module index is generated. -#texinfo_domain_indices = True - -# How to display URL addresses: 'footnote', 'no', or 'inline'. -#texinfo_show_urls = 'footnote' diff --git a/wagtail/project_template/docs/deploy.rst b/wagtail/project_template/docs/deploy.rst deleted file mode 100644 index 1e642c7988..0000000000 --- a/wagtail/project_template/docs/deploy.rst +++ /dev/null @@ -1,4 +0,0 @@ -Deploy -======== - -This is where you describe how the project is deployed in production. diff --git a/wagtail/project_template/docs/index.rst b/wagtail/project_template/docs/index.rst deleted file mode 100644 index 58b9d7f478..0000000000 --- a/wagtail/project_template/docs/index.rst +++ /dev/null @@ -1,25 +0,0 @@ -.. {{ project_name }} documentation master file, created by - sphinx-quickstart on Sun Feb 17 11:46:20 2013. - You can adapt this file completely to your liking, but it should at least - contain the root `toctree` directive. - -Welcome to {{ project_name }}'s documentation! -==================================== - -Contents: - -.. toctree:: - :maxdepth: 2 - - install - deploy - tests - - - -Indices and tables -================== - -* :ref:`genindex` -* :ref:`modindex` -* :ref:`search` diff --git a/wagtail/project_template/docs/install.rst b/wagtail/project_template/docs/install.rst deleted file mode 100644 index 1bc03335d4..0000000000 --- a/wagtail/project_template/docs/install.rst +++ /dev/null @@ -1,4 +0,0 @@ -Install -========= - -This is where you write how to get a new laptop to run this project. diff --git a/wagtail/project_template/docs/make.bat b/wagtail/project_template/docs/make.bat deleted file mode 100644 index c8212a0545..0000000000 --- a/wagtail/project_template/docs/make.bat +++ /dev/null @@ -1,190 +0,0 @@ -@ECHO OFF - -REM Command file for Sphinx documentation - -if "%SPHINXBUILD%" == "" ( - set SPHINXBUILD=sphinx-build -) -set BUILDDIR=_build -set ALLSPHINXOPTS=-d %BUILDDIR%/doctrees %SPHINXOPTS% . -set I18NSPHINXOPTS=%SPHINXOPTS% . -if NOT "%PAPER%" == "" ( - set ALLSPHINXOPTS=-D latex_paper_size=%PAPER% %ALLSPHINXOPTS% - set I18NSPHINXOPTS=-D latex_paper_size=%PAPER% %I18NSPHINXOPTS% -) - -if "%1" == "" goto help - -if "%1" == "help" ( - :help - echo.Please use `make ^<target^>` where ^<target^> is one of - echo. html to make standalone HTML files - echo. dirhtml to make HTML files named index.html in directories - echo. singlehtml to make a single large HTML file - echo. pickle to make pickle files - echo. json to make JSON files - echo. htmlhelp to make HTML files and a HTML help project - echo. qthelp to make HTML files and a qthelp project - echo. devhelp to make HTML files and a Devhelp project - echo. epub to make an epub - echo. latex to make LaTeX files, you can set PAPER=a4 or PAPER=letter - echo. text to make text files - echo. man to make manual pages - echo. texinfo to make Texinfo files - echo. gettext to make PO message catalogs - echo. changes to make an overview over all changed/added/deprecated items - echo. linkcheck to check all external links for integrity - echo. doctest to run all doctests embedded in the documentation if enabled - goto end -) - -if "%1" == "clean" ( - for /d %%i in (%BUILDDIR%\*) do rmdir /q /s %%i - del /q /s %BUILDDIR%\* - goto end -) - -if "%1" == "html" ( - %SPHINXBUILD% -b html %ALLSPHINXOPTS% %BUILDDIR%/html - if errorlevel 1 exit /b 1 - echo. - echo.Build finished. The HTML pages are in %BUILDDIR%/html. - goto end -) - -if "%1" == "dirhtml" ( - %SPHINXBUILD% -b dirhtml %ALLSPHINXOPTS% %BUILDDIR%/dirhtml - if errorlevel 1 exit /b 1 - echo. - echo.Build finished. The HTML pages are in %BUILDDIR%/dirhtml. - goto end -) - -if "%1" == "singlehtml" ( - %SPHINXBUILD% -b singlehtml %ALLSPHINXOPTS% %BUILDDIR%/singlehtml - if errorlevel 1 exit /b 1 - echo. - echo.Build finished. The HTML pages are in %BUILDDIR%/singlehtml. - goto end -) - -if "%1" == "pickle" ( - %SPHINXBUILD% -b pickle %ALLSPHINXOPTS% %BUILDDIR%/pickle - if errorlevel 1 exit /b 1 - echo. - echo.Build finished; now you can process the pickle files. - goto end -) - -if "%1" == "json" ( - %SPHINXBUILD% -b json %ALLSPHINXOPTS% %BUILDDIR%/json - if errorlevel 1 exit /b 1 - echo. - echo.Build finished; now you can process the JSON files. - goto end -) - -if "%1" == "htmlhelp" ( - %SPHINXBUILD% -b htmlhelp %ALLSPHINXOPTS% %BUILDDIR%/htmlhelp - if errorlevel 1 exit /b 1 - echo. - echo.Build finished; now you can run HTML Help Workshop with the ^ -.hhp project file in %BUILDDIR%/htmlhelp. - goto end -) - -if "%1" == "qthelp" ( - %SPHINXBUILD% -b qthelp %ALLSPHINXOPTS% %BUILDDIR%/qthelp - if errorlevel 1 exit /b 1 - echo. - echo.Build finished; now you can run "qcollectiongenerator" with the ^ -.qhcp project file in %BUILDDIR%/qthelp, like this: - echo.^> qcollectiongenerator %BUILDDIR%\qthelp\{{ project_name }}.qhcp - echo.To view the help file: - echo.^> assistant -collectionFile %BUILDDIR%\qthelp\{{ project_name }}.ghc - goto end -) - -if "%1" == "devhelp" ( - %SPHINXBUILD% -b devhelp %ALLSPHINXOPTS% %BUILDDIR%/devhelp - if errorlevel 1 exit /b 1 - echo. - echo.Build finished. - goto end -) - -if "%1" == "epub" ( - %SPHINXBUILD% -b epub %ALLSPHINXOPTS% %BUILDDIR%/epub - if errorlevel 1 exit /b 1 - echo. - echo.Build finished. The epub file is in %BUILDDIR%/epub. - goto end -) - -if "%1" == "latex" ( - %SPHINXBUILD% -b latex %ALLSPHINXOPTS% %BUILDDIR%/latex - if errorlevel 1 exit /b 1 - echo. - echo.Build finished; the LaTeX files are in %BUILDDIR%/latex. - goto end -) - -if "%1" == "text" ( - %SPHINXBUILD% -b text %ALLSPHINXOPTS% %BUILDDIR%/text - if errorlevel 1 exit /b 1 - echo. - echo.Build finished. The text files are in %BUILDDIR%/text. - goto end -) - -if "%1" == "man" ( - %SPHINXBUILD% -b man %ALLSPHINXOPTS% %BUILDDIR%/man - if errorlevel 1 exit /b 1 - echo. - echo.Build finished. The manual pages are in %BUILDDIR%/man. - goto end -) - -if "%1" == "texinfo" ( - %SPHINXBUILD% -b texinfo %ALLSPHINXOPTS% %BUILDDIR%/texinfo - if errorlevel 1 exit /b 1 - echo. - echo.Build finished. The Texinfo files are in %BUILDDIR%/texinfo. - goto end -) - -if "%1" == "gettext" ( - %SPHINXBUILD% -b gettext %I18NSPHINXOPTS% %BUILDDIR%/locale - if errorlevel 1 exit /b 1 - echo. - echo.Build finished. The message catalogs are in %BUILDDIR%/locale. - goto end -) - -if "%1" == "changes" ( - %SPHINXBUILD% -b changes %ALLSPHINXOPTS% %BUILDDIR%/changes - if errorlevel 1 exit /b 1 - echo. - echo.The overview file is in %BUILDDIR%/changes. - goto end -) - -if "%1" == "linkcheck" ( - %SPHINXBUILD% -b linkcheck %ALLSPHINXOPTS% %BUILDDIR%/linkcheck - if errorlevel 1 exit /b 1 - echo. - echo.Link check complete; look for any errors in the above output ^ -or in %BUILDDIR%/linkcheck/output.txt. - goto end -) - -if "%1" == "doctest" ( - %SPHINXBUILD% -b doctest %ALLSPHINXOPTS% %BUILDDIR%/doctest - if errorlevel 1 exit /b 1 - echo. - echo.Testing of doctests in the sources finished, look at the ^ -results in %BUILDDIR%/doctest/output.txt. - goto end -) - -:end diff --git a/wagtail/project_template/fabfile.py b/wagtail/project_template/fabfile.py deleted file mode 100644 index ca7e788213..0000000000 --- a/wagtail/project_template/fabfile.py +++ /dev/null @@ -1,32 +0,0 @@ -from fabric.api import * - - -env.roledefs = { - 'app': [], -} - - -@roles('app') -def deploy(): - # Remove this line when you're happy that this Fabfile is correct - raise RuntimeError("Please check the fabfile before using it") - - base_dir = '/usr/local/django/{{ project_name }}' - virtualenv_dir = '/usr/local/django/virtualenvs/{{ project_name }}' - python = virtualenv_dir + '/bin/python' - pip = virtualenv_dir + '/bin/pip' - - user = '{{ project_name }}' - supervisor_task = '{{ project_name }}' - - with cd(base_dir): - with settings(sudo_user=user): - sudo('git pull origin master') - sudo(pip + ' install -r requirements/production.txt') - sudo(python + ' {{ project_name }}/manage.py syncdb --settings={{ project_name }}.settings.production --noinput') - sudo(python + ' {{ project_name }}/manage.py migrate --settings={{ project_name }}.settings.production --noinput') - sudo(python + ' {{ project_name }}/manage.py collectstatic --settings={{ project_name }}.settings.production --noinput') - sudo(python + ' {{ project_name }}/manage.py compress --settings={{ project_name }}.settings.production') - sudo(python + ' {{ project_name }}/manage.py update_index --settings={{ project_name }}.settings.production') - - sudo('supervisorctl restart ' + supervisor_task) diff --git a/wagtail/project_template/project_name/manage.py b/wagtail/project_template/manage.py similarity index 100% rename from wagtail/project_template/project_name/manage.py rename to wagtail/project_template/manage.py diff --git a/wagtail/project_template/project_name/project_name/__init__.py b/wagtail/project_template/project_name/__init__.py similarity index 100% rename from wagtail/project_template/project_name/project_name/__init__.py rename to wagtail/project_template/project_name/__init__.py diff --git a/wagtail/project_template/project_name/project_name/settings/__init__.py b/wagtail/project_template/project_name/settings/__init__.py similarity index 100% rename from wagtail/project_template/project_name/project_name/settings/__init__.py rename to wagtail/project_template/project_name/settings/__init__.py diff --git a/wagtail/project_template/project_name/project_name/settings/base.py b/wagtail/project_template/project_name/settings/base.py similarity index 86% rename from wagtail/project_template/project_name/project_name/settings/base.py rename to wagtail/project_template/project_name/settings/base.py index 4afa4b28fd..1571036c68 100644 --- a/wagtail/project_template/project_name/project_name/settings/base.py +++ b/wagtail/project_template/project_name/settings/base.py @@ -8,21 +8,10 @@ For the full list of settings and their values, see https://docs.djangoproject.com/en/{{ docs_version }}/ref/settings/ """ -from os.path import abspath, basename, dirname, join, normpath -from sys import path +from os.path import abspath, dirname, join # Absolute filesystem path to the Django project directory: -DJANGO_ROOT = dirname(dirname(dirname(abspath(__file__)))) - -# Absolute filesystem path to the top-level project folder: -PROJECT_ROOT = dirname(DJANGO_ROOT) - -# Site name: -SITE_NAME = basename(DJANGO_ROOT) - -# Add our project to our pythonpath, this way we don't need to type our project -# name in our dotted import paths: -path.append(DJANGO_ROOT) +PROJECT_ROOT = dirname(dirname(dirname(abspath(__file__)))) # Quick-start development settings - unsuitable for production @@ -80,8 +69,8 @@ MIDDLEWARE_CLASSES = ( 'wagtail.wagtailredirects.middleware.RedirectMiddleware', ) -ROOT_URLCONF = SITE_NAME + '.urls' -WSGI_APPLICATION = SITE_NAME + '.wsgi.application' +ROOT_URLCONF = '{{ project_name }}.urls' +WSGI_APPLICATION = '{{ project_name }}.wsgi.application' # Database @@ -131,10 +120,6 @@ STATICFILES_FINDERS = ( 'compressor.finders.CompressorFinder', ) -STATICFILES_DIRS = ( - join(DJANGO_ROOT, 'static'), -) - MEDIA_ROOT = join(PROJECT_ROOT, 'media') MEDIA_URL = '/media/' @@ -155,10 +140,6 @@ TEMPLATE_CONTEXT_PROCESSORS = global_settings.TEMPLATE_CONTEXT_PROCESSORS + ( 'django.core.context_processors.request', ) -TEMPLATE_DIRS = ( - normpath(join(DJANGO_ROOT, 'templates')), -) - # Wagtail settings diff --git a/wagtail/project_template/project_name/project_name/settings/dev.py b/wagtail/project_template/project_name/settings/dev.py similarity index 86% rename from wagtail/project_template/project_name/project_name/settings/dev.py rename to wagtail/project_template/project_name/settings/dev.py index 7bc4fa0803..0430df7e6c 100644 --- a/wagtail/project_template/project_name/project_name/settings/dev.py +++ b/wagtail/project_template/project_name/settings/dev.py @@ -6,8 +6,6 @@ TEMPLATE_DEBUG = True EMAIL_BACKEND = 'django.core.mail.backends.console.EmailBackend' -CELERY_ALWAYS_EAGER = True - try: from .local import * diff --git a/wagtail/project_template/project_name/project_name/settings/production.py b/wagtail/project_template/project_name/settings/production.py similarity index 100% rename from wagtail/project_template/project_name/project_name/settings/production.py rename to wagtail/project_template/project_name/settings/production.py diff --git a/wagtail/project_template/project_name/project_name/urls.py b/wagtail/project_template/project_name/urls.py similarity index 100% rename from wagtail/project_template/project_name/project_name/urls.py rename to wagtail/project_template/project_name/urls.py diff --git a/wagtail/project_template/project_name/project_name/wsgi.py b/wagtail/project_template/project_name/wsgi.py similarity index 100% rename from wagtail/project_template/project_name/project_name/wsgi.py rename to wagtail/project_template/project_name/wsgi.py From 74a57077dbef6398f2b10219c64f57288229e985 Mon Sep 17 00:00:00 2001 From: Dave Cranwell <david@torchbox.com> Date: Wed, 10 Sep 2014 13:04:28 +0100 Subject: [PATCH 155/210] styling and responsive solution for focal point chooser --- .../wagtailadmin/scss/components/forms.scss | 4 +- .../scss/components/typography.scss | 4 + .../wagtailimages/js/focal-point-chooser.js | 95 ++++++++++++------- .../scss/focal-point-chooser.scss | 25 +++-- .../templates/wagtailimages/images/edit.html | 5 +- 5 files changed, 89 insertions(+), 44 deletions(-) diff --git a/wagtail/wagtailadmin/static/wagtailadmin/scss/components/forms.scss b/wagtail/wagtailadmin/static/wagtailadmin/scss/components/forms.scss index 534e4ec8d4..7cbe1f9eed 100644 --- a/wagtail/wagtailadmin/static/wagtailadmin/scss/components/forms.scss +++ b/wagtail/wagtailadmin/static/wagtailadmin/scss/components/forms.scss @@ -24,12 +24,14 @@ legend{ @include visuallyhidden(); } -label{ +label, .label{ + text-transform:none; font-weight:bold; color:$color-grey-1; font-size:1.1em; display:block; padding:0 0 0.8em 0; + margin:0; line-height:1.3em; .checkbox &, diff --git a/wagtail/wagtailadmin/static/wagtailadmin/scss/components/typography.scss b/wagtail/wagtailadmin/static/wagtailadmin/scss/components/typography.scss index 059392aaf8..360a0dc127 100644 --- a/wagtail/wagtailadmin/static/wagtailadmin/scss/components/typography.scss +++ b/wagtail/wagtailadmin/static/wagtailadmin/scss/components/typography.scss @@ -29,6 +29,10 @@ h2{ text-transform:none; } } +p{ + margin-top:0; +} + a{ outline:none; color:$color-link; diff --git a/wagtail/wagtailimages/static/wagtailimages/js/focal-point-chooser.js b/wagtail/wagtailimages/static/wagtailimages/js/focal-point-chooser.js index b67adda99d..c68986d116 100644 --- a/wagtail/wagtailimages/static/wagtailimages/js/focal-point-chooser.js +++ b/wagtail/wagtailimages/static/wagtailimages/js/focal-point-chooser.js @@ -1,48 +1,75 @@ -$(function() { - var $chooser = $('div.focal-point-chooser'); - var $indicator = $('.current-focal-point-indicator', $chooser); - var $image = $('img', $chooser); - var $focalPointXField = $('input.focal_point_x'); - var $focalPointYField = $('input.focal_point_y'); - var $focalPointWidthField = $('input.focal_point_width'); - var $focalPointHeightField = $('input.focal_point_height'); +var jcropapi; - var originalWidth = $image.data('originalWidth'); - var originalHeight = $image.data('originalHeight'); - - var focalPointXOriginal = $chooser.data('focalPointX'); - var focalPointYOriginal = $chooser.data('focalPointY'); - var focalPointWidthOriginal = $chooser.data('focalPointWidth'); - var focalPointHeightOriginal = $chooser.data('focalPointHeight'); - - $image.Jcrop({ - trueSize: [originalWidth, originalHeight], +function setupJcrop(image, original, focalPointOriginal, fields){ + image.Jcrop({ + trueSize: [original.width, original.height], onSelect: function(box) { var x = Math.floor((box.x + box.x2) / 2); var y = Math.floor((box.y + box.y2) / 2); var w = Math.floor(box.w); var h = Math.floor(box.h); - $focalPointXField.val(x); - $focalPointYField.val(y); - $focalPointWidthField.val(w); - $focalPointHeightField.val(h); + fields.x.val(x); + fields.y.val(y); + fields.width.val(w); + fields.height.val(h); }, onRelease: function() { - $focalPointXField.val(focalPointXOriginal); - $focalPointYField.val(focalPointYOriginal); - $focalPointWidthField.val(focalPointWidthOriginal); - $focalPointHeightField.val(focalPointHeightOriginal); + fields.x.val(focalPointOriginal.x); + fields.y.val(focalPointOriginal.y); + fields.width.val(focalPointOriginal.width); + fields.height.val(focalPointOriginal.height); }, + }, function(){ + jcropapi = this }); +} - var left = focalPointXOriginal - focalPointWidthOriginal / 2 - var top = focalPointYOriginal - focalPointHeightOriginal / 2 - var width = focalPointWidthOriginal; - var height = focalPointHeightOriginal; +$(function() { + var $chooser = $('div.focal-point-chooser'); + var $indicator = $('.current-focal-point-indicator', $chooser); + var $image = $('img', $chooser); - $indicator.css('left', (left * 100 / originalWidth) + '%'); - $indicator.css('top', (top * 100 / originalHeight) + '%'); - $indicator.css('width', (width * 100 / originalWidth) + '%'); - $indicator.css('height', (height * 100 / originalHeight) + '%'); + var original = { + width: $image.data('originalWidth'), + height: $image.data('originalHeight') + } + + var focalPointOriginal = { + x: $chooser.data('focalPointX'), + y: $chooser.data('focalPointY'), + width: $chooser.data('focalPointWidth'), + height: $chooser.data('focalPointHeight') + } + + var fields = { + x: $('input.focal_point_x'), + y: $('input.focal_point_y'), + width: $('input.focal_point_width'), + height: $('input.focal_point_height') + } + + var left = focalPointOriginal.x - focalPointOriginal.width / 2 + var top = focalPointOriginal.y - focalPointOriginal.height / 2 + var width = focalPointOriginal.width; + var height = focalPointOriginal.height; + + $indicator.css('left', (left * 100 / original.width) + '%'); + $indicator.css('top', (top * 100 / original.height) + '%'); + $indicator.css('width', (width * 100 / original.width) + '%'); + $indicator.css('height', (height * 100 / original.height) + '%'); + + var params = [$image, original, focalPointOriginal, fields]; + + setupJcrop.apply(this, params) + + $(window).resize($.debounce(300, function(){ + // jcrop doesn't support responsive images so to cater for resizing the browser + // we have to destroy() it, which doesn't properly do it, + // so destory it some more, then re-apply it + jcropapi.destroy(); + $image.removeAttr('style'); + $('.jcrop-holder').remove(); + setupJcrop.apply(this, params) + })); }); diff --git a/wagtail/wagtailimages/static/wagtailimages/scss/focal-point-chooser.scss b/wagtail/wagtailimages/static/wagtailimages/scss/focal-point-chooser.scss index 8f4a4105aa..f26177a999 100644 --- a/wagtail/wagtailimages/static/wagtailimages/scss/focal-point-chooser.scss +++ b/wagtail/wagtailimages/static/wagtailimages/scss/focal-point-chooser.scss @@ -1,13 +1,22 @@ -div.focal-point-chooser { +@import "../../wagtailadmin/static/wagtailadmin/scss/variables.scss"; +@import "../../wagtailadmin/static/wagtailadmin/scss/mixins.scss"; + +.focal-point-chooser { position: relative; -} -div.current-focal-point-indicator { - position: absolute; - border: 1px solid #FFF; - opacity: 0.5; + .current-focal-point-indicator { + @include transition(opacity 0.2s ease); + @include box-shadow(1px 1px 10px 0px rgba(0,0,0,1)); + position: absolute; + border: 1px solid $color-teal; + opacity: 0.5; - .hidden { - display: none; + .hidden { + display: none; + } + } + + &:hover .current-focal-point-indicator{ + opacity:0; } } \ No newline at end of file diff --git a/wagtail/wagtailimages/templates/wagtailimages/images/edit.html b/wagtail/wagtailimages/templates/wagtailimages/images/edit.html index dd96ddd8d2..20a00511dd 100644 --- a/wagtail/wagtailimages/templates/wagtailimages/images/edit.html +++ b/wagtail/wagtailimages/templates/wagtailimages/images/edit.html @@ -17,6 +17,7 @@ {% include "wagtailadmin/shared/tag_field_js.html" %} <!-- Focal point chooser --> + <script src="{{ STATIC_URL }}wagtailadmin/js/vendor/jquery.ba-throttle-debounce.min.js"></script> <script src="{{ STATIC_URL }}wagtailimages/js/vendor/jquery.Jcrop.min.js"></script> <script src="{{ STATIC_URL }}wagtailimages/js/focal-point-chooser.js"></script> {% endblock %} @@ -47,6 +48,8 @@ </form> </div> <div class="col5"> + <h2 class="label">{% trans "Focal point (optional)" %}</h2> + <p>{% trans "To define this image's most important region, drag a box over the image below." %} {% if image.focal_point %}({% trans "Current focal point shown" %}){% endif %}</p> <div class="focal-point-chooser" data-focal-point-x="{{ image.focal_point_x }}" data-focal-point-y="{{ image.focal_point_y }}" @@ -58,7 +61,7 @@ </div> {% if url_generator_enabled %} - <a href="{% url 'wagtailimages_url_generator' image.id %}" class="button bicolor icon icon-link">URL Generator</a> + <a href="{% url 'wagtailimages_url_generator' image.id %}" class="button bicolor icon icon-link">{% trans "URL Generator" %}</a> {% endif %} </div> </div> From 14173f36476b39b9d4618eb0b86eeafc09c81b8f Mon Sep 17 00:00:00 2001 From: Karl Hobley <karl@torchbox.com> Date: Wed, 10 Sep 2014 13:57:17 +0100 Subject: [PATCH 156/210] Changelog and release notes for #611 --- CHANGELOG.txt | 1 + docs/releases/0.6.rst | 3 ++- 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.txt b/CHANGELOG.txt index a977ccd452..6a17e5be84 100644 --- a/CHANGELOG.txt +++ b/CHANGELOG.txt @@ -8,6 +8,7 @@ Changelog * Added RoutablePageMixin (Tim Heap) * MenuItems can now have bundled JavaScript * Added a new hook for registering admin menu items + * Added version indicator to the admin interface * Renamed wagtailsearch.indexed to wagtailsearch.index * Fix: Page URL generation now returns correct URLs for sites that have the main 'serve' view rooted somewhere other than '/' (Nathan Brizendine) * Fix: Search results in the page chooser now respect the page_type parameter on PageChooserPanel diff --git a/docs/releases/0.6.rst b/docs/releases/0.6.rst index 04e856a1ff..d16040089a 100644 --- a/docs/releases/0.6.rst +++ b/docs/releases/0.6.rst @@ -22,6 +22,7 @@ Minor features * RoutablePage can now be used as a mixin. See :class:`wagtail.contrib.wagtailroutablepage.models.RoutablePageMixin`. * MenuItems can now have bundled JavaScript * Added a new hook for registering admin menu items. See :ref:`register_admin_menu_item` + * Added a version indicator into the admin interface (hover over the wagtail to see it) Bug fixes @@ -46,4 +47,4 @@ Deprecated features =================== * The ``wagtail.wagtailsearch.indexed`` module has been renamed to ``wagtail.wagtailsearch.index`` - \ No newline at end of file + From 4d5570bea6ac74c12ad3a17a6e166f39877b5018 Mon Sep 17 00:00:00 2001 From: Matt Westcott <matt@west.co.tt> Date: Wed, 10 Sep 2014 17:37:57 +0100 Subject: [PATCH 157/210] Disable parallel builds to avoid issue with Pillow 2.5 monkeypatching the build process --- setup.py | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/setup.py b/setup.py index c29f21df2f..351a31ff8e 100644 --- a/setup.py +++ b/setup.py @@ -1,6 +1,6 @@ #!/usr/bin/env python -import sys +import sys, os try: @@ -9,16 +9,19 @@ except ImportError: from distutils.core import setup -# Hack to prevent stupid TypeError: 'NoneType' object is not callable error on -# exit of python setup.py test # in multiprocessing/util.py _exit_function when -# running python setup.py test (see -# http://www.eby-sarna.com/pipermail/peak/2010-May/003357.html) +# Hack to prevent "TypeError: 'NoneType' object is not callable" error +# in multiprocessing/util.py _exit_function when setup.py exits +# (see http://www.eby-sarna.com/pipermail/peak/2010-May/003357.html) try: import multiprocessing except ImportError: pass +# Disable parallel builds, because Pillow 2.5.3 does some crazy monkeypatching of +# the build process on multicore systems, which breaks installation of libsass +os.environ['MAX_CONCURRENCY'] = '1' + PY3 = sys.version_info[0] == 3 From c221a04afac2b4348dc4792b9c01c6757b103fb0 Mon Sep 17 00:00:00 2001 From: Matt Westcott <matt@west.co.tt> Date: Wed, 10 Sep 2014 17:38:19 +0100 Subject: [PATCH 158/210] fix Vagrant config for new project structure --- wagtail/project_template/vagrant/provision.sh | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/wagtail/project_template/vagrant/provision.sh b/wagtail/project_template/vagrant/provision.sh index c10b64e90f..4a6c8cae3c 100755 --- a/wagtail/project_template/vagrant/provision.sh +++ b/wagtail/project_template/vagrant/provision.sh @@ -3,7 +3,6 @@ PROJECT_NAME=$1 PROJECT_DIR=/home/vagrant/$PROJECT_NAME -DJANGO_DIR=$PROJECT_DIR/$PROJECT_NAME VIRTUALENV_DIR=/home/vagrant/.virtualenvs/$PROJECT_NAME PYTHON=$VIRTUALENV_DIR/bin/python @@ -23,17 +22,17 @@ echo "workon $PROJECT_NAME" >> /home/vagrant/.bashrc # Set execute permissions on manage.py as they get lost if we build from a zip file -chmod a+x $DJANGO_DIR/manage.py +chmod a+x $PROJECT_DIR/manage.py # Run syncdb/migrate/update_index -su - vagrant -c "$PYTHON $DJANGO_DIR/manage.py syncdb --noinput && \ - $PYTHON $DJANGO_DIR/manage.py migrate --noinput && \ - $PYTHON $DJANGO_DIR/manage.py update_index" +su - vagrant -c "$PYTHON $PROJECT_DIR/manage.py syncdb --noinput && \ + $PYTHON $PROJECT_DIR/manage.py migrate --noinput && \ + $PYTHON $PROJECT_DIR/manage.py update_index" # Add a couple of aliases to manage.py into .bashrc cat << EOF >> /home/vagrant/.bashrc -alias dj="$PYTHON $DJANGO_DIR/manage.py" +alias dj="$PYTHON $PROJECT_DIR/manage.py" alias djrun="dj runserver 0.0.0.0:8000" EOF From 07455a846969396271b25607ff303dcfe638d50c Mon Sep 17 00:00:00 2001 From: Matt Westcott <matt@west.co.tt> Date: Wed, 10 Sep 2014 18:53:06 +0100 Subject: [PATCH 159/210] do not create a postgres database on vagrant provisioning, since the template assumes sqlite by default --- wagtail/project_template/vagrant/provision.sh | 4 ---- 1 file changed, 4 deletions(-) diff --git a/wagtail/project_template/vagrant/provision.sh b/wagtail/project_template/vagrant/provision.sh index 4a6c8cae3c..ed3f362841 100755 --- a/wagtail/project_template/vagrant/provision.sh +++ b/wagtail/project_template/vagrant/provision.sh @@ -9,10 +9,6 @@ PYTHON=$VIRTUALENV_DIR/bin/python PIP=$VIRTUALENV_DIR/bin/pip -# Create database -createdb -Upostgres $PROJECT_NAME - - # Virtualenv setup for project su - vagrant -c "/usr/local/bin/virtualenv $VIRTUALENV_DIR && \ echo $PROJECT_DIR > $VIRTUALENV_DIR/.project && \ From bb23a495899195d09716ba4a68fa0026aaaa587a Mon Sep 17 00:00:00 2001 From: Matt Westcott <matt@west.co.tt> Date: Wed, 10 Sep 2014 19:24:18 +0100 Subject: [PATCH 160/210] Add Celery documentation (and additional advice on Redis) to the Performance howto, since it isn't going to be a default part of the project template / VM --- docs/howto/performance.rst | 19 +++++++++++++++++-- 1 file changed, 17 insertions(+), 2 deletions(-) diff --git a/docs/howto/performance.rst b/docs/howto/performance.rst index 68c6425205..f87e405c03 100644 --- a/docs/howto/performance.rst +++ b/docs/howto/performance.rst @@ -13,7 +13,7 @@ We have tried to minimise external dependencies for a working installation of Wa Cache ----- -We recommend `Redis <http://redis.io/>`_ as a fast, persistent cache. Install Redis through package manager and enable it as a cache backend:: +We recommend `Redis <http://redis.io/>`_ as a fast, persistent cache. Install Redis through your package manager (on Debian or Ubuntu: ``sudo apt-get install redis-server``), add ``django-redis-cache`` to your requirements.txt, and enable it as a cache backend:: CACHES = { 'default': { @@ -25,7 +25,22 @@ We recommend `Redis <http://redis.io/>`_ as a fast, persistent cache. Install Re } } -Without a persistent cache, Wagtail will recreate all compressable assets at each server start, e.g. when any files change under ```./manage.py runserver```. +Without a persistent cache, Wagtail will recreate all compressable assets at each server start, e.g. when any files change under ``./manage.py runserver``. + + +Sending emails in the background using Celery +--------------------------------------------- + +Various actions in the Wagtail admin backend can trigger notification emails - for example, submitting a page for moderation. In Wagtail's default configuration, these are sent as part of the page request/response cycle, which means that web server threads can get tied up for long periods if a large number of emails is being sent. To avoid this, Wagtail can be configured to do this as a background task, using `Celery <http://www.celeryproject.org/>`_ as a task queue. To install Celery, add ``django-celery`` to your requirements.txt. A sample configuration, using Redis as the queue backend, would look like:: + + import djcelery + + djcelery.setup_loader() + + CELERY_SEND_TASK_ERROR_EMAILS = True + BROKER_URL = 'redis://' + +See the Celery documentation for instructions on running the worker process in development or production. Search From 5328a2d98af87ebdc53fe27d2d79f5d2ffd62104 Mon Sep 17 00:00:00 2001 From: Karl Hobley <karl@torchbox.com> Date: Thu, 11 Sep 2014 10:10:43 +0100 Subject: [PATCH 161/210] Added failing tests for #613 --- wagtail/wagtaildocs/tests.py | 104 +++++++++++++++++++++++++++++++++ wagtail/wagtailimages/tests.py | 98 +++++++++++++++++++++++++++++++ 2 files changed, 202 insertions(+) diff --git a/wagtail/wagtaildocs/tests.py b/wagtail/wagtaildocs/tests.py index 5592635f22..e4ec7f1ee3 100644 --- a/wagtail/wagtaildocs/tests.py +++ b/wagtail/wagtaildocs/tests.py @@ -417,3 +417,107 @@ class TestGetUsage(TestCase, WagtailTestUtils): args=(1,))) # There's no usage so there should be no table rows self.assertRegex(response.content, b'<tbody>(\s|\n)*</tbody>') + + +class TestIssue613(TestCase, WagtailTestUtils): + def get_elasticsearch_backend(self): + from django.conf import settings + from wagtail.wagtailsearch.backends import get_search_backend + + backend_path = 'wagtail.wagtailsearch.backends.elasticsearch.ElasticSearch' + + # Search WAGTAILSEARCH_BACKENDS for an entry that uses the given backend path + for backend_name, backend_conf in settings.WAGTAILSEARCH_BACKENDS.items(): + if backend_conf['BACKEND'] == backend_path: + return get_search_backend(backend_name) + else: + # no conf entry found - skip tests for this backend + raise unittest.SkipTest("No WAGTAILSEARCH_BACKENDS entry for the backend %s" % self.backend_path) + + def setUp(self): + self.search_backend = self.get_elasticsearch_backend() + self.login() + + from wagtail.wagtailsearch.signal_handlers import register_signal_handlers + register_signal_handlers() + + def add_document(self, **params): + # Build a fake file + fake_file = ContentFile(b("A boring example document")) + fake_file.name = 'test.txt' + + # Submit + post_data = { + 'title': "Test document", + 'file': fake_file, + } + post_data.update(params) + response = self.client.post(reverse('wagtaildocs_add_document'), post_data) + + # User should be redirected back to the index + self.assertRedirects(response, reverse('wagtaildocs_index')) + + # Document should be created + doc = models.Document.objects.filter(title=post_data['title']) + self.assertTrue(doc.exists()) + return doc.first() + + def edit_document(self, **params): + # Build a fake file + fake_file = ContentFile(b("A boring example document")) + fake_file.name = 'test.txt' + + # Create a document without tags to edit + document = models.Document.objects.create(title="Test document", file=fake_file) + + # Build another fake file + another_fake_file = ContentFile(b("A boring example document")) + another_fake_file.name = 'test.txt' + + # Submit + post_data = { + 'title': "Test document changed!", + 'file': another_fake_file, + } + post_data.update(params) + response = self.client.post(reverse('wagtaildocs_edit_document', args=(document.id,)), post_data) + + # User should be redirected back to the index + self.assertRedirects(response, reverse('wagtaildocs_index')) + + # Document should be changed + doc = models.Document.objects.filter(title=post_data['title']) + self.assertTrue(doc.exists()) + return doc.first() + + def test_issue_613_on_add(self): + # Reset the search index + self.search_backend.reset_index() + self.search_backend.add_type(Document) + + # Add a document with some tags + document = self.add_document(tags="hello") + self.search_backend.refresh_index() + + # Search for it by tag + results = self.search_backend.search("hello", Document) + + # Check + self.assertEqual(len(results), 1) + self.assertEqual(results[0].id, document.id) + + def test_issue_613_on_edit(self): + # Reset the search index + self.search_backend.reset_index() + self.search_backend.add_type(Document) + + # Add a document with some tags + document = self.edit_document(tags="hello") + self.search_backend.refresh_index() + + # Search for it by tag + results = self.search_backend.search("hello", Document) + + # Check + self.assertEqual(len(results), 1) + self.assertEqual(results[0].id, document.id) diff --git a/wagtail/wagtailimages/tests.py b/wagtail/wagtailimages/tests.py index d040a922d8..aa161282b8 100644 --- a/wagtail/wagtailimages/tests.py +++ b/wagtail/wagtailimages/tests.py @@ -1037,3 +1037,101 @@ class TestIssue573(TestCase): # This would crash if the bug is present image.get_rendition('fill-800x600') + +class TestIssue613(TestCase, WagtailTestUtils): + def get_elasticsearch_backend(self): + from django.conf import settings + from wagtail.wagtailsearch.backends import get_search_backend + + backend_path = 'wagtail.wagtailsearch.backends.elasticsearch.ElasticSearch' + + # Search WAGTAILSEARCH_BACKENDS for an entry that uses the given backend path + for backend_name, backend_conf in settings.WAGTAILSEARCH_BACKENDS.items(): + if backend_conf['BACKEND'] == backend_path: + return get_search_backend(backend_name) + else: + # no conf entry found - skip tests for this backend + raise unittest.SkipTest("No WAGTAILSEARCH_BACKENDS entry for the backend %s" % self.backend_path) + + def setUp(self): + self.search_backend = self.get_elasticsearch_backend() + self.login() + + from wagtail.wagtailsearch.signal_handlers import register_signal_handlers + register_signal_handlers() + + def add_image(self, **params): + post_data = { + 'title': "Test image", + 'file': SimpleUploadedFile('test.png', get_test_image_file().file.getvalue()), + } + post_data.update(params) + response = self.client.post(reverse('wagtailimages_add_image'), post_data) + + # Should redirect back to index + self.assertRedirects(response, reverse('wagtailimages_index')) + + # Check that the image was created + images = Image.objects.filter(title="Test image") + self.assertEqual(images.count(), 1) + + # Test that size was populated correctly + image = images.first() + self.assertEqual(image.width, 640) + self.assertEqual(image.height, 480) + + return image + + def edit_image(self, **params): + # Create an image to edit + self.image = Image.objects.create( + title="Test image", + file=get_test_image_file(), + ) + + # Edit it + post_data = { + 'title': "Edited", + } + post_data.update(params) + response = self.client.post(reverse('wagtailimages_edit_image', args=(self.image.id,)), post_data) + + # Should redirect back to index + self.assertRedirects(response, reverse('wagtailimages_index')) + + # Check that the image was edited + image = Image.objects.get(id=self.image.id) + self.assertEqual(image.title, "Edited") + return image + + def test_issue_613_on_add(self): + # Reset the search index + self.search_backend.reset_index() + self.search_backend.add_type(Image) + + # Add an image with some tags + image = self.add_image(tags="hello") + self.search_backend.refresh_index() + + # Search for it by tag + results = self.search_backend.search("hello", Image) + + # Check + self.assertEqual(len(results), 1) + self.assertEqual(results[0].id, image.id) + + def test_issue_613_on_edit(self): + # Reset the search index + self.search_backend.reset_index() + self.search_backend.add_type(Image) + + # Add an image with some tags + image = self.edit_image(tags="hello") + self.search_backend.refresh_index() + + # Search for it by tag + results = self.search_backend.search("hello", Image) + + # Check + self.assertEqual(len(results), 1) + self.assertEqual(results[0].id, image.id) \ No newline at end of file From 82cd9242d4908c359bc763aa9b21d3ced64f4886 Mon Sep 17 00:00:00 2001 From: Matt Westcott <matt@west.co.tt> Date: Thu, 11 Sep 2014 10:18:34 +0100 Subject: [PATCH 162/210] fix documentation build warnings --- CHANGELOG.txt | 2 +- docs/core_components/pages/editing_api.rst | 4 +++- docs/releases/0.6.rst | 2 +- 3 files changed, 5 insertions(+), 3 deletions(-) diff --git a/CHANGELOG.txt b/CHANGELOG.txt index 6a17e5be84..1bad9fa751 100644 --- a/CHANGELOG.txt +++ b/CHANGELOG.txt @@ -7,7 +7,7 @@ Changelog * Added {% routablepageurl %} template tag (Tim Heap) * Added RoutablePageMixin (Tim Heap) * MenuItems can now have bundled JavaScript - * Added a new hook for registering admin menu items + * Added the register_admin_menu_item hook for registering menu items at startup * Added version indicator to the admin interface * Renamed wagtailsearch.indexed to wagtailsearch.index * Fix: Page URL generation now returns correct URLs for sites that have the main 'serve' view rooted somewhere other than '/' (Nathan Brizendine) diff --git a/docs/core_components/pages/editing_api.rst b/docs/core_components/pages/editing_api.rst index c712982678..e94792b598 100644 --- a/docs/core_components/pages/editing_api.rst +++ b/docs/core_components/pages/editing_api.rst @@ -1,7 +1,7 @@ .. _editing-api: Displaying fields with the Editing API -==================================== +====================================== .. note:: This documentation is currently being written. @@ -388,6 +388,8 @@ For information on developing custom hallo.js plugins, see the project's page: h Edit Handler API ~~~~~~~~~~~~~~~~ +.. _admin_hooks: + Admin Hooks ----------- diff --git a/docs/releases/0.6.rst b/docs/releases/0.6.rst index d16040089a..f8895850ec 100644 --- a/docs/releases/0.6.rst +++ b/docs/releases/0.6.rst @@ -21,7 +21,7 @@ Minor features * A new template tag has been added for reversing URLs inside routable pages. See :ref:`routablepageurl_template_tag`. * RoutablePage can now be used as a mixin. See :class:`wagtail.contrib.wagtailroutablepage.models.RoutablePageMixin`. * MenuItems can now have bundled JavaScript - * Added a new hook for registering admin menu items. See :ref:`register_admin_menu_item` + * Added the ``register_admin_menu_item`` hook for registering menu items at startup. See :ref:`admin_hooks` * Added a version indicator into the admin interface (hover over the wagtail to see it) From 0a55e0814ea92ed1d590d6904a266e24af8a99b0 Mon Sep 17 00:00:00 2001 From: Karl Hobley <karl@torchbox.com> Date: Thu, 11 Sep 2014 10:20:33 +0100 Subject: [PATCH 163/210] Make sure images/documents are reindexed after saving tags. Fixes #613 --- wagtail/wagtaildocs/views/chooser.py | 6 ++++++ wagtail/wagtaildocs/views/documents.py | 11 +++++++++++ wagtail/wagtailimages/views/chooser.py | 6 ++++++ wagtail/wagtailimages/views/images.py | 11 +++++++++++ wagtail/wagtailimages/views/multiple.py | 7 +++++++ wagtail/wagtailsearch/backends/__init__.py | 8 ++++++++ wagtail/wagtailsearch/signal_handlers.py | 11 +---------- 7 files changed, 50 insertions(+), 10 deletions(-) diff --git a/wagtail/wagtaildocs/views/chooser.py b/wagtail/wagtaildocs/views/chooser.py index 55066c9dc1..bf081715d3 100644 --- a/wagtail/wagtaildocs/views/chooser.py +++ b/wagtail/wagtaildocs/views/chooser.py @@ -6,6 +6,7 @@ from django.contrib.auth.decorators import permission_required from wagtail.wagtailadmin.modal_workflow import render_modal_workflow from wagtail.wagtailadmin.forms import SearchForm +from wagtail.wagtailsearch.backends import get_search_backends from wagtail.wagtaildocs.models import Document from wagtail.wagtaildocs.forms import DocumentForm @@ -96,6 +97,11 @@ def chooser_upload(request): if form.is_valid(): form.save() + + # Reindex the document to make sure all tags are indexed + for backend in get_search_backends(): + backend.add(document) + document_json = json.dumps({'id': document.id, 'title': document.title}) return render_modal_workflow( request, None, 'wagtaildocs/chooser/document_chosen.js', diff --git a/wagtail/wagtaildocs/views/documents.py b/wagtail/wagtaildocs/views/documents.py index 488e2ff9a2..51a759ae40 100644 --- a/wagtail/wagtaildocs/views/documents.py +++ b/wagtail/wagtaildocs/views/documents.py @@ -8,6 +8,7 @@ from django.views.decorators.vary import vary_on_headers from django.core.urlresolvers import reverse from wagtail.wagtailadmin.forms import SearchForm +from wagtail.wagtailsearch.backends import get_search_backends from wagtail.wagtaildocs.models import Document from wagtail.wagtaildocs.forms import DocumentForm @@ -83,6 +84,11 @@ def add(request): form = DocumentForm(request.POST, request.FILES, instance=doc) if form.is_valid(): form.save() + + # Reindex the document to make sure all tags are indexed + for backend in get_search_backends(): + backend.add(doc) + messages.success(request, _("Document '{0}' added.").format(doc.title)) return redirect('wagtaildocs_index') else: @@ -112,6 +118,11 @@ def edit(request, document_id): # which definitely isn't what we want... original_file.storage.delete(original_file.name) doc = form.save() + + # Reindex the document to make sure all tags are indexed + for backend in get_search_backends(): + backend.add(doc) + messages.success(request, _("Document '{0}' updated").format(doc.title)) return redirect('wagtaildocs_index') else: diff --git a/wagtail/wagtailimages/views/chooser.py b/wagtail/wagtailimages/views/chooser.py index 221a75581d..0312b3a2e2 100644 --- a/wagtail/wagtailimages/views/chooser.py +++ b/wagtail/wagtailimages/views/chooser.py @@ -6,6 +6,7 @@ from django.contrib.auth.decorators import permission_required from wagtail.wagtailadmin.modal_workflow import render_modal_workflow from wagtail.wagtailadmin.forms import SearchForm +from wagtail.wagtailsearch.backends import get_search_backends from wagtail.wagtailimages.models import get_image_model from wagtail.wagtailimages.forms import get_image_form, ImageInsertionForm @@ -121,6 +122,11 @@ def chooser_upload(request): if form.is_valid(): form.save() + + # Reindex the image to make sure all tags are indexed + for backend in get_search_backends(): + backend.add(image) + if request.GET.get('select_format'): form = ImageInsertionForm(initial={'alt_text': image.default_alt_text}) return render_modal_workflow( diff --git a/wagtail/wagtailimages/views/images.py b/wagtail/wagtailimages/views/images.py index 27ad96a474..d3713f1cf4 100644 --- a/wagtail/wagtailimages/views/images.py +++ b/wagtail/wagtailimages/views/images.py @@ -12,6 +12,7 @@ from django.http import HttpResponse from wagtail.wagtailcore.models import Site from wagtail.wagtailadmin.forms import SearchForm +from wagtail.wagtailsearch.backends import get_search_backends from wagtail.wagtailimages.models import get_image_model, Filter from wagtail.wagtailimages.forms import get_image_form, URLGeneratorForm @@ -96,6 +97,11 @@ def edit(request, image_id): original_file.storage.delete(original_file.name) image.renditions.all().delete() form.save() + + # Reindex the image to make sure all tags are indexed + for backend in get_search_backends(): + backend.add(image) + messages.success(request, _("Image '{0}' updated.").format(image.title)) return redirect('wagtailimages_index') else: @@ -203,6 +209,11 @@ def add(request): form = ImageForm(request.POST, request.FILES, instance=image) if form.is_valid(): form.save() + + # Reindex the image to make sure all tags are indexed + for backend in get_search_backends(): + backend.add(image) + messages.success(request, _("Image '{0}' added.").format(image.title)) return redirect('wagtailimages_index') else: diff --git a/wagtail/wagtailimages/views/multiple.py b/wagtail/wagtailimages/views/multiple.py index 5bc76fa7ce..2fcaa5f588 100644 --- a/wagtail/wagtailimages/views/multiple.py +++ b/wagtail/wagtailimages/views/multiple.py @@ -10,6 +10,8 @@ from django.template import RequestContext from django.template.loader import render_to_string from django.utils.translation import ugettext as _ +from wagtail.wagtailsearch.backends import get_search_backends + from wagtail.wagtailimages.models import get_image_model from wagtail.wagtailimages.forms import get_image_form_for_multi from wagtail.wagtailimages.utils.validators import validate_image_format @@ -79,6 +81,11 @@ def edit(request, image_id, callback=None): if form.is_valid(): form.save() + + # Reindex the image to make sure all tags are indexed + for backend in get_search_backends(): + backend.add(image) + return json_response({ 'success': True, 'image_id': int(image_id), diff --git a/wagtail/wagtailsearch/backends/__init__.py b/wagtail/wagtailsearch/backends/__init__.py index cf33cf5c12..a06f7a4f88 100644 --- a/wagtail/wagtailsearch/backends/__init__.py +++ b/wagtail/wagtailsearch/backends/__init__.py @@ -80,3 +80,11 @@ def get_search_backend(backend='default', **kwargs): # Create backend return backend_cls(params) + + +def get_search_backends(): + if hasattr(settings, 'WAGTAILSEARCH_BACKENDS'): + for backend in settings.WAGTAILSEARCH_BACKENDS.keys(): + yield get_search_backend(backend) + else: + yield get_search_backend('default') diff --git a/wagtail/wagtailsearch/signal_handlers.py b/wagtail/wagtailsearch/signal_handlers.py index 1c55eb59f0..decbfdb514 100644 --- a/wagtail/wagtailsearch/signal_handlers.py +++ b/wagtail/wagtailsearch/signal_handlers.py @@ -1,17 +1,8 @@ from django.db.models.signals import post_save, post_delete from django.db import models -from django.conf import settings from wagtail.wagtailsearch.index import Indexed -from wagtail.wagtailsearch.backends import get_search_backend - - -def get_search_backends(): - if hasattr(settings, 'WAGTAILSEARCH_BACKENDS'): - for backend in settings.WAGTAILSEARCH_BACKENDS.keys(): - yield get_search_backend(backend) - else: - yield get_search_backend('default') +from wagtail.wagtailsearch.backends import get_search_backends def post_save_signal_handler(instance, **kwargs): From c442ddefdeac56b0ff014c2775fa606e51f1437f Mon Sep 17 00:00:00 2001 From: Matt Westcott <matt@west.co.tt> Date: Thu, 11 Sep 2014 11:14:16 +0100 Subject: [PATCH 164/210] New installation docs --- docs/getting_started.rst | 166 ++++++++++++++++++++++++++++++++------- docs/index.rst | 2 - docs/trying_the_demo.rst | 156 ------------------------------------ 3 files changed, 138 insertions(+), 186 deletions(-) delete mode 100644 docs/trying_the_demo.rst diff --git a/docs/getting_started.rst b/docs/getting_started.rst index 23828dd013..e218386c26 100644 --- a/docs/getting_started.rst +++ b/docs/getting_started.rst @@ -4,50 +4,160 @@ Getting started =============== -Installing Wagtail -================== +Before you start +================ -From PyPI ---------- +A basic Wagtail setup can be installed on your machine with only a few prerequisites - see `A basic Wagtail installation`_. However, there are various optional components that will improve the performance and feature set of Wagtail, and our recommended software stack includes the PostgreSQL database, ElasticSearch (for free-text searching), the OpenCV library (for image feature detection), and Redis (as a cache and message queue backend). This would be a lot to install in one go, and for this reason, we provide a virtual machine image, for use with `Vagrant <http://www.vagrantup.com/>`__, with all of these components ready installed. -This is recommended for stability. +Whether you just want to try out the demo site, or you're ready to dive in and create a Wagtail site with all bells and whistles enabled, we strongly recommend the Vagrant approach. Nevertheless, if you're the sort of person who balks at the idea of downloading a whole operating system just to run a web app, we've got you covered too. Start from `A basic Wagtail installation`_ below. -.. code-block:: bash + +The no-installation route +========================= + +If you're happy to use Vagrant, and you just want to set up the Wagtail demo site, or any other pre-existing Wagtail site that ships with Vagrant support, you don't need to install Wagtail at all. Install `Vagrant <http://www.vagrantup.com/>`__ and `VirtualBox <https://www.virtualbox.org/>`__, and run:: + + git clone https://github.com/torchbox/wagtaildemo.git + cd wagtaildemo + vagrant up + vagrant ssh + + +Then, within the SSH session:: + + ./manage.py createsuperuser + ./manage.py runserver 0.0.0.0:8000 + + +This will make the demo site available on your host machine at the URL http://localhost:8111/ - you can access the Wagtail admin interface at http://localhost:8111/admin/ . + +Once you’ve experimented with the demo site and are ready to build your own site, it's time to install Wagtail on your host machine. Even if you intend to do all further Wagtail work within Vagrant, installing the Wagtail package on your host machine will provide the ``wagtail start`` command that sets up the initial file structure for your project. + + +A basic Wagtail installation +============================ + +You will need Python's `pip <http://pip.readthedocs.org/en/latest/installing.html>`__ package manager. We also recommend `virtualenvwrapper <http://virtualenvwrapper.readthedocs.org/en/latest/>`_ so that you can manage multiple independent Python environments for different projects - although this is not strictly necessary if you intend to do all your development under Vagrant. + +Wagtail is based on the Django web framework and various other Python libraries. Most of these are pure Python and will install automatically using ``pip``, but there are a few native-code components that require further attention: + + * libsass-python (for compiling SASS stylesheets) - requires a C++ compiler and the Python development headers. + * Pillow (for image processing) - additionally requires libjpeg and zlib. + +On Debian or Ubuntu, these can be installed with the command:: + + sudo apt-get install python-dev python-pip g++ libjpeg62-dev zlib1g-dev + +With these dependencies installed, Wagtail can then be installed with the command:: pip install wagtail +(or if you're not using virtualenvwrapper: ``sudo pip install wagtail``.) -From Github ------------ +You will now be able to run the following command to set up an initial file structure for your Wagtail project (replace ``myprojectname`` with a name of your choice):: -This will give you the latest development version of Wagtail. + wagtail start myprojectname -.. code-block:: bash +**Without Vagrant:** Run the following steps to complete setup of your project (the ``migrate`` step will prompt you to set up a superuser account):: - pip install -e git://github.com/torchbox/wagtail.git#egg=wagtail + cd myprojectname + ./manage.py syncdb + ./manage.py migrate + ./manage.py runserver + +Your site is now accessible at http://localhost:8000, with the admin backend available at http://localhost:8000/admin/ . + +**With Vagrant:** Run the following steps to bring up the virtual machine and complete setup of your project (the ``createsuperuser`` step will prompt you to set up a superuser account):: + + cd myprojectname + vagrant up + vagrant ssh + ./manage.py createsuperuser + ./manage.py runserver 0.0.0.0:8000 + +Your site is now accessible at http://localhost:8111, with the admin backend available at http://localhost:8111/admin/ . + +Optional extras +=============== + +For the best possible performance and feature set, we recommend setting up the following components. If you're using Vagrant, these are provided as part of the virtual machine image and just need to be enabled in the settings for your project. If you're using Wagtail without Vagrant, this will involve additional installation. -The ``wagtail`` command -======================= +PostgreSQL +---------- +PostgreSQL is a mature database engine suitable for production use, and is recommended by the Django development team. Non-Vagrant users will need to install the PostgreSQL development headers in addition to Postgres itself; on Debian or Ubuntu, this can be done with the following command:: -.. versionadded:: 0.5 + sudo apt-get install postgresql postgresql-server-dev-all -Once you have Wagtail installed on your host machine, you can use the ``wagtail`` command. +To enable Postgres for your project, uncomment the ``psycopg2`` line from your project's requirements.txt, and in ``myprojectname/settings/base.py``, uncomment the DATABASES section for PostgreSQL, commenting out the SQLite one instead. Then run:: -Usage: + pip install -r requirements.txt + createdb -Upostgres myprojectname + ./manage.py syncdb + ./manage.py migrate -.. code-block:: bash - - wagtail start <project name> +This assumes that your PostgreSQL instance is configured to allow you to connect as the 'postgres' user - if not, you'll need to adjust the ``createdb`` line and the database settings in settings/base.py accordingly. -This command will setup a skeleton Wagtail project with the following features installed: +ElasticSearch +------------- +Wagtail integrates with ElasticSearch to provide full-text searching of your content, both within the Wagtail interface and on your site's front-end. If ElasticSearch is not available, Wagtail will fall back to much more basic search functionality using database queries. ElasticSearch is pre-installed as part of the Vagrant virtual machine image; non-Vagrant users can use the `debian.sh <https://github.com/torchbox/wagtail/blob/master/scripts/install/debian.sh>`__ or `ubuntu.sh <https://github.com/torchbox/wagtail/blob/master/scripts/install/ubuntu.sh>`__ installation scripts as a guide. - - A core app with migrations to replace the default Homepage - - Base templates (base, 404, 500) - - Vagrant configuration - - Fabfile - - Docs directory (with Sphinx configuration) - - Split up settings configuration (different settings for dev and production) - - Requirements - +To enable ElasticSearch for your project, uncomment the ``elasticsearch`` line from your project's requirements.txt, and in ``myprojectname/settings/base.py``, uncomment the WAGTAILSEARCH_BACKENDS section. Then run:: + + pip install -r requirements.txt + ./manage.py update_index + + +Image feature detection +----------------------- +Wagtail can use the OpenCV computer vision library to detect faces and other features in images, and use this information to select the most appropriate centre point when cropping the image. See :ref:`image_feature_detection` for details on setting this up. + + +Alternative installation methods +================================ + +Ubuntu +------ + +If you have a fresh instance of Ubuntu 13.04 or later, you can install Wagtail, +along with a demonstration site containing a set of standard templates and page +types, in one step. As the root user:: + + curl -O https://wagtail.io/ubuntu.sh; bash ubuntu.sh + +This script installs all the dependencies for a production-ready Wagtail site, +including PostgreSQL, Redis, Elasticsearch, Nginx and uwsgi. We +recommend you check through the script before running it, and adapt it according +to your deployment preferences. The canonical version is at +`github.com/torchbox/wagtail/blob/master/scripts/install/ubuntu.sh +<https://github.com/torchbox/wagtail/blob/master/scripts/install/ubuntu.sh>`_. + + +Debian +------ + +If you have a fresh instance of Debian 7, you can install Wagtail, along with a +demonstration site containing a set of standard templates and page types, in one +step. As the root user:: + + curl -O https://wagtail.io/debian.sh; bash debian.sh + +This script installs all the dependencies for a production-ready Wagtail site, +including PostgreSQL, Redis, Elasticsearch, Nginx and uwsgi. We +recommend you check through the script before running it, and adapt it according +to your deployment preferences. The canonical version is at +`github.com/torchbox/wagtail/blob/master/scripts/install/debian.sh +<https://github.com/torchbox/wagtail/blob/master/scripts/install/debian.sh>`_. + +Docker +------ + +`@oyvindsk <https://github.com/oyvindsk>`_ has built a Dockerfile for the Wagtail demo. Simply run:: + + docker run -p 8000:8000 -d oyvindsk/wagtail-demo + +then access the site at http://your-ip:8000 and the admin +interface at http://your-ip:8000/admin using admin / test. + +See https://index.docker.io/u/oyvindsk/wagtail-demo/ for more details. diff --git a/docs/index.rst b/docs/index.rst index a9a9ec25a1..5b70ff6789 100644 --- a/docs/index.rst +++ b/docs/index.rst @@ -8,9 +8,7 @@ It supports Django 1.6.2+ and 1.7rc3+ on Python 2.6, 2.7, 3.2, 3.3 and 3.4. .. toctree:: :maxdepth: 3 - trying_the_demo getting_started - gettingstarted core_components/index contrib_components/index howto/index diff --git a/docs/trying_the_demo.rst b/docs/trying_the_demo.rst deleted file mode 100644 index 865d1d9a24..0000000000 --- a/docs/trying_the_demo.rst +++ /dev/null @@ -1,156 +0,0 @@ -Trying the demo ---------------- - -On Ubuntu -~~~~~~~~~ - -If you have a fresh instance of Ubuntu 13.04 or later, you can install Wagtail, -along with a demonstration site containing a set of standard templates and page -types, in one step. As the root user:: - - curl -O https://wagtail.io/ubuntu.sh; bash ubuntu.sh - -This script installs all the dependencies for a production-ready Wagtail site, -including PostgreSQL, Redis, Elasticsearch, Nginx and uwsgi. We -recommend you check through the script before running it, and adapt it according -to your deployment preferences. The canonical version is at -`github.com/torchbox/wagtail/blob/master/scripts/install/ubuntu.sh -<https://github.com/torchbox/wagtail/blob/master/scripts/install/ubuntu.sh>`_. - - -On Debian -~~~~~~~~~ - -If you have a fresh instance of Debian 7, you can install Wagtail, along with a -demonstration site containing a set of standard templates and page types, in one -step. As the root user:: - - curl -O https://wagtail.io/debian.sh; bash debian.sh - -This script installs all the dependencies for a production-ready Wagtail site, -including PostgreSQL, Redis, Elasticsearch, Nginx and uwsgi. We -recommend you check through the script before running it, and adapt it according -to your deployment preferences. The canonical version is at -`github.com/torchbox/wagtail/blob/master/scripts/install/debian.sh -<https://github.com/torchbox/wagtail/blob/master/scripts/install/debian.sh>`_. - - -On OS X -~~~~~~~ - -Install `pip <http://pip.readthedocs.org/en/latest/installing.html>`__ and `virtualenvwrapper <http://virtualenvwrapper.readthedocs.org/en/latest/>`_ if you don't have them already. Then, in your terminal:: - - mkvirtualenv wagtaildemo - git clone https://github.com/torchbox/wagtaildemo.git - cd wagtaildemo - pip install -r requirements/dev.txt - -Edit ``wagtaildemo/settings/base.py``, changing ENGINE to django.db.backends.sqlite3 and NAME to wagtail.db. Finally, setup the database and run the local server:: - - ./manage.py syncdb - ./manage.py migrate - ./manage.py runserver - - -Using Vagrant -~~~~~~~~~~~~~ - -We provide a Vagrant box which includes all the dependencies for a fully-fledged -Wagtail environment, bundled with a demonstration site containing a set of -standard templates and page types. If you have a good internet connection we recommend -the following steps, which will download the 650MB Vagrant box and make a running -Wagtail instance available as the basis for your new site: - -- Install `Vagrant <http://www.vagrantup.com/>`_ 1.1+ -- Clone the demonstration site, create the Vagrant box and initialise Wagtail:: - - git clone https://github.com/torchbox/wagtaildemo.git - cd wagtaildemo - vagrant up - vagrant ssh - # within the SSH session - ./manage.py createsuperuser - ./manage.py update_index - ./manage.py runserver 0.0.0.0:8000 - -- This will make the app accessible on the host machine as - `localhost:8111 <http://localhost:8111>`_ - you can access the Wagtail admin - interface at `localhost:8111/admin <http://localhost:8111/admin>`_. The codebase - is located on the host machine, exported to the VM as a shared folder; code - editing and Git operations will generally be done on the host. - - -Using Docker -~~~~~~~~~~~~ - -`@oyvindsk <https://github.com/oyvindsk>`_ has built a Dockerfile for the Wagtail demo. Simply run:: - - docker run -p 8000:8000 -d oyvindsk/wagtail-demo - -then access the site at http://your-ip:8000 and the admin -interface at http://your-ip:8000/admin using admin / test. - -See https://index.docker.io/u/oyvindsk/wagtail-demo/ for more details. - - -Other platforms -~~~~~~~~~~~~~~~ - -If you're not using Ubuntu or Debian, or if you prefer to install Wagtail manually, -use the following steps: - - -Required dependencies -===================== - -- `pip <https://github.com/pypa/pip>`__ -- `libjpeg <http://ijg.org/>`_ -- `libxml2 <http://xmlsoft.org/>`_ -- `libxslt <http://xmlsoft.org/XSLT/>`_ -- `zlib <http://www.zlib.net/>`_ - - -Optional dependencies -===================== - -- `PostgreSQL`_ -- `Elasticsearch`_ -- `Redis`_ - - -Installation -============ - -With PostgreSQL running (and configured to allow you to connect as the -'postgres' user - if not, you'll need to adjust the ``createdb`` line -and the database settings in wagtaildemo/settings/base.py accordingly), -run the following commands:: - - git clone https://github.com/torchbox/wagtaildemo.git - cd wagtaildemo - pip install -r requirements/dev.txt - createdb -Upostgres wagtaildemo - ./manage.py syncdb - ./manage.py migrate - ./manage.py runserver - - -SQLite support -============== - -SQLite is supported as an alternative to PostgreSQL - update the DATABASES setting -in wagtaildemo/settings/base.py to use 'django.db.backends.sqlite3', as you would -with a regular Django project. - -.. _Wagtail: http://wagtail.io -.. _VirtualBox: https://www.virtualbox.org/ -.. _the Wagtail codebase: https://github.com/torchbox/wagtail -.. _PostgreSQL: http://www.postgresql.org -.. _Elasticsearch: http://www.elasticsearch.org -.. _Redis: http://redis.io/ - - -Creating your own site -====================== - -Once you've experimented with the demo app and are ready to build your pages via your own app take a look at the :ref:`getting_started` documentation. From b9e9eb305d741a8a3c596959bb166d761233a56c Mon Sep 17 00:00:00 2001 From: Matt Westcott <matt@west.co.tt> Date: Thu, 11 Sep 2014 13:21:12 +0100 Subject: [PATCH 165/210] use wagtail-base-v0.3 as the base box for the project template --- wagtail/project_template/Vagrantfile | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/wagtail/project_template/Vagrantfile b/wagtail/project_template/Vagrantfile index 146069b27f..81f62e993e 100644 --- a/wagtail/project_template/Vagrantfile +++ b/wagtail/project_template/Vagrantfile @@ -3,8 +3,8 @@ Vagrant::Config.run do |config| # Base box to build off, and download URL for when it doesn't exist on the user's system already - config.vm.box = "wagtail-base-v0.2" - config.vm.box_url = "http://downloads.torchbox.com/wagtail-base-v0.2.box" + config.vm.box = "wagtail-base-v0.3" + config.vm.box_url = "http://downloads.torchbox.com/wagtail-base-v0.3.box" # Forward a port from the guest to the host, which allows for outside # computers to access the VM, whereas host only networking does not. From 6dddd73c42af81e99fdc63b90306834f4084e492 Mon Sep 17 00:00:00 2001 From: Matt Westcott <matt@west.co.tt> Date: Thu, 11 Sep 2014 13:32:01 +0100 Subject: [PATCH 166/210] create virtualenv with system-site-packages enabled so that opencv is available --- wagtail/project_template/vagrant/provision.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/wagtail/project_template/vagrant/provision.sh b/wagtail/project_template/vagrant/provision.sh index ed3f362841..03d28a89b5 100755 --- a/wagtail/project_template/vagrant/provision.sh +++ b/wagtail/project_template/vagrant/provision.sh @@ -10,7 +10,7 @@ PIP=$VIRTUALENV_DIR/bin/pip # Virtualenv setup for project -su - vagrant -c "/usr/local/bin/virtualenv $VIRTUALENV_DIR && \ +su - vagrant -c "/usr/local/bin/virtualenv --system-site-packages $VIRTUALENV_DIR && \ echo $PROJECT_DIR > $VIRTUALENV_DIR/.project && \ PIP_DOWNLOAD_CACHE=/home/vagrant/.pip_download_cache $PIP install -r $PROJECT_DIR/requirements.txt" From 1cc64b9478c2c9c5f06bf9b12d13815365293a3d Mon Sep 17 00:00:00 2001 From: Matt Westcott <matt@west.co.tt> Date: Thu, 11 Sep 2014 13:46:36 +0100 Subject: [PATCH 167/210] need to register search signal handlers in urls.py --- wagtail/project_template/project_name/urls.py | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/wagtail/project_template/project_name/urls.py b/wagtail/project_template/project_name/urls.py index dfb1d40ecf..3859bc7221 100644 --- a/wagtail/project_template/project_name/urls.py +++ b/wagtail/project_template/project_name/urls.py @@ -13,6 +13,12 @@ from wagtail.wagtailcore import urls as wagtail_urls admin.autodiscover() + +# Register search signal handlers +from wagtail.wagtailsearch.signal_handlers import register_signal_handlers as wagtailsearch_register_signal_handlers +wagtailsearch_register_signal_handlers() + + urlpatterns = patterns('', url(r'^django-admin/', include(admin.site.urls)), From 39ab06722b289b1c4def329b7d547c12c96081cc Mon Sep 17 00:00:00 2001 From: Matt Westcott <matt@west.co.tt> Date: Thu, 11 Sep 2014 14:22:38 +0100 Subject: [PATCH 168/210] Set WAGTAILIMAGES_FEATURE_DETECTION_ENABLED to False by default in project template, and avoid importing OpenCV if it's false to avoid spurious errors about libdc1394 --- .../project_name/settings/base.py | 4 ++++ .../wagtailimages/utils/feature_detection.py | 21 ++++++++++++------- 2 files changed, 18 insertions(+), 7 deletions(-) diff --git a/wagtail/project_template/project_name/settings/base.py b/wagtail/project_template/project_name/settings/base.py index 1571036c68..b0ad25c3b2 100644 --- a/wagtail/project_template/project_name/settings/base.py +++ b/wagtail/project_template/project_name/settings/base.py @@ -158,3 +158,7 @@ WAGTAIL_SITE_NAME = "{{ project_name }}" # 'INDEX': '{{ project_name }}', # }, # } + + +# Whether to use face/feature detection to improve image cropping - requires OpenCV +WAGTAILIMAGES_FEATURE_DETECTION_ENABLED = False diff --git a/wagtail/wagtailimages/utils/feature_detection.py b/wagtail/wagtailimages/utils/feature_detection.py index 6381fabf7a..6aab45c976 100644 --- a/wagtail/wagtailimages/utils/feature_detection.py +++ b/wagtail/wagtailimages/utils/feature_detection.py @@ -1,16 +1,23 @@ import os +from django.conf import settings -try: - import cv - - opencv_available = True -except ImportError: +# only try to import OpenCV if WAGTAILIMAGES_FEATURE_DETECTION_ENABLED is True - +# avoids spurious "libdc1394 error: Failed to initialize libdc1394" errors on sites that +# don't even use OpenCV +if getattr(settings, 'WAGTAILIMAGES_FEATURE_DETECTION_ENABLED', False): try: - import cv2.cv as cv + import cv opencv_available = True except ImportError: - opencv_available = False + try: + import cv2.cv as cv + + opencv_available = True + except ImportError: + opencv_available = False +else: + opencv_available = False from wagtail.wagtailimages.utils.focal_point import FocalPoint, combine_focal_points From d7651adc5b9dd53d80adbe9d74fc0803b3deba67 Mon Sep 17 00:00:00 2001 From: Matt Westcott <matt@west.co.tt> Date: Thu, 11 Sep 2014 14:30:38 +0100 Subject: [PATCH 169/210] side-step the 'a large number of emails is' vs 'a large number of emails are' grammatical debate --- docs/howto/performance.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/howto/performance.rst b/docs/howto/performance.rst index f87e405c03..57bac2131b 100644 --- a/docs/howto/performance.rst +++ b/docs/howto/performance.rst @@ -31,7 +31,7 @@ Without a persistent cache, Wagtail will recreate all compressable assets at eac Sending emails in the background using Celery --------------------------------------------- -Various actions in the Wagtail admin backend can trigger notification emails - for example, submitting a page for moderation. In Wagtail's default configuration, these are sent as part of the page request/response cycle, which means that web server threads can get tied up for long periods if a large number of emails is being sent. To avoid this, Wagtail can be configured to do this as a background task, using `Celery <http://www.celeryproject.org/>`_ as a task queue. To install Celery, add ``django-celery`` to your requirements.txt. A sample configuration, using Redis as the queue backend, would look like:: +Various actions in the Wagtail admin backend can trigger notification emails - for example, submitting a page for moderation. In Wagtail's default configuration, these are sent as part of the page request/response cycle, which means that web server threads can get tied up for long periods if many emails are being sent. To avoid this, Wagtail can be configured to do this as a background task, using `Celery <http://www.celeryproject.org/>`_ as a task queue. To install Celery, add ``django-celery`` to your requirements.txt. A sample configuration, using Redis as the queue backend, would look like:: import djcelery From edbe7f59194a3c3bef509e020a53f71335adab12 Mon Sep 17 00:00:00 2001 From: Matt Westcott <matt@west.co.tt> Date: Thu, 11 Sep 2014 14:40:47 +0100 Subject: [PATCH 170/210] OpenCV now installed in vagrant base image --- docs/getting_started.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/getting_started.rst b/docs/getting_started.rst index e218386c26..dfd9b0fe48 100644 --- a/docs/getting_started.rst +++ b/docs/getting_started.rst @@ -111,7 +111,7 @@ To enable ElasticSearch for your project, uncomment the ``elasticsearch`` line f Image feature detection ----------------------- -Wagtail can use the OpenCV computer vision library to detect faces and other features in images, and use this information to select the most appropriate centre point when cropping the image. See :ref:`image_feature_detection` for details on setting this up. +Wagtail can use the OpenCV computer vision library to detect faces and other features in images, and use this information to select the most appropriate centre point when cropping the image. OpenCV is pre-installed as part of the Vagrant virtual machine image, and Vagrant users can enable this by setting ``WAGTAILIMAGES_FEATURE_DETECTION_ENABLED`` to True in ``myprojectname/settings/base.py``. For installation outside of Vagrant, see :ref:`image_feature_detection`. Alternative installation methods From cf0b08084e97d094b8b58c79dfddd9a2905ccf88 Mon Sep 17 00:00:00 2001 From: Matt Westcott <matt@west.co.tt> Date: Thu, 11 Sep 2014 14:52:17 +0100 Subject: [PATCH 171/210] avoid using the 'dj' alias on the homepage template, because non-Vagrant users won't have it --- wagtail/project_template/core/templates/core/home_page.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/wagtail/project_template/core/templates/core/home_page.html b/wagtail/project_template/core/templates/core/home_page.html index 8fc0112bd7..6660bb30a9 100644 --- a/wagtail/project_template/core/templates/core/home_page.html +++ b/wagtail/project_template/core/templates/core/home_page.html @@ -7,7 +7,7 @@ {% templatetag openblock %} block content {% templatetag closeblock %} <h1>Welcome to your new Wagtail site!</h1> - <p>You can access the admin interface <a href="{% templatetag openblock %} url 'wagtailadmin_home' {% templatetag closeblock %}">here</a> (make sure you have run "dj createsuperuser" in the console first). + <p>You can access the admin interface <a href="{% templatetag openblock %} url 'wagtailadmin_home' {% templatetag closeblock %}">here</a> (make sure you have run "./manage.py createsuperuser" in the console first). <p>If you haven't already given the documentation a read, head over to <a href="http://wagtail.readthedocs.org/">http://wagtail.readthedocs.org</a> to start building on Wagtail</p> {% templatetag openblock %} endblock {% templatetag closeblock %} From 2a6679c12b9c4452fbce64bcdc0a27e75c30a471 Mon Sep 17 00:00:00 2001 From: Matt Westcott <matt@west.co.tt> Date: Thu, 11 Sep 2014 15:34:34 +0100 Subject: [PATCH 172/210] remove developer tools from template's requirements.txt as per https://github.com/torchbox/wagtail/pull/456#discussion_r17422724 --- wagtail/project_template/requirements.txt | 4 ---- 1 file changed, 4 deletions(-) diff --git a/wagtail/project_template/requirements.txt b/wagtail/project_template/requirements.txt index 71202ab19d..dc93a9ad77 100644 --- a/wagtail/project_template/requirements.txt +++ b/wagtail/project_template/requirements.txt @@ -10,7 +10,3 @@ wagtail==0.5 # Recommended components to improve performance in production: # django-redis-cache==0.13.0 # django-celery==3.1.10 - -# Developer tools -Fabric==1.9.0 -Sphinx==1.2.2 From 5ded4ff7405b0bcf690fd87ce958447937d1ac72 Mon Sep 17 00:00:00 2001 From: Matt Westcott <matt@west.co.tt> Date: Thu, 11 Sep 2014 15:37:43 +0100 Subject: [PATCH 173/210] make 500.html a standalone template to avoid knock-on errors occurring in base.html --- .../project_template/core/templates/500.html | 25 +++++++++++++------ 1 file changed, 17 insertions(+), 8 deletions(-) diff --git a/wagtail/project_template/core/templates/500.html b/wagtail/project_template/core/templates/500.html index 1550dcd217..b1dc89cc18 100644 --- a/wagtail/project_template/core/templates/500.html +++ b/wagtail/project_template/core/templates/500.html @@ -1,9 +1,18 @@ -{% templatetag openblock %} extends "base.html" {% templatetag closeblock %} +<!DOCTYPE html> +<!--[if lt IE 7]> <html class="no-js lt-ie9 lt-ie8 lt-ie7"> <![endif]--> +<!--[if IE 7]> <html class="no-js lt-ie9 lt-ie8"> <![endif]--> +<!--[if IE 8]> <html class="no-js lt-ie9"> <![endif]--> +<!--[if gt IE 8]><!--> <html class="no-js"> <!--<![endif]--> +<html> + <head> + <meta charset="utf-8" /> + <meta http-equiv="X-UA-Compatible" content="IE=edge" /> + <title>Internal server error + + + +

    Internal server error

    -{% templatetag openblock %} block body_class {% templatetag closeblock %}template-500{% templatetag openblock %} endblock {% templatetag closeblock %} - -{% templatetag openblock %} block content {% templatetag closeblock %} -

    Internal server error

    - -

    Sorry, there seems to be an error. Please try again soon.

    -{% templatetag openblock %} endblock {% templatetag closeblock %} +

    Sorry, there seems to be an error. Please try again soon.

    + + From fa6cf7bcb95a5f60381fc25df1c7ad3e2bc0e0ba Mon Sep 17 00:00:00 2001 From: Matt Westcott Date: Thu, 11 Sep 2014 16:01:22 +0100 Subject: [PATCH 174/210] Move getting_started page to an 'installation' page within a Getting Started section --- docs/getting_started/index.rst | 8 ++++++++ .../installation.rst} | 8 +++----- docs/index.rst | 2 +- 3 files changed, 12 insertions(+), 6 deletions(-) create mode 100644 docs/getting_started/index.rst rename docs/{getting_started.rst => getting_started/installation.rst} (99%) diff --git a/docs/getting_started/index.rst b/docs/getting_started/index.rst new file mode 100644 index 0000000000..01b6325c4b --- /dev/null +++ b/docs/getting_started/index.rst @@ -0,0 +1,8 @@ +Getting started +=============== + + +.. toctree:: + :maxdepth: 2 + + installation diff --git a/docs/getting_started.rst b/docs/getting_started/installation.rst similarity index 99% rename from docs/getting_started.rst rename to docs/getting_started/installation.rst index dfd9b0fe48..ad161b0220 100644 --- a/docs/getting_started.rst +++ b/docs/getting_started/installation.rst @@ -1,8 +1,6 @@ -.. _getting_started: - -=============== -Getting started -=============== +============ +Installation +============ Before you start ================ diff --git a/docs/index.rst b/docs/index.rst index 5b70ff6789..7c56fc8273 100644 --- a/docs/index.rst +++ b/docs/index.rst @@ -8,7 +8,7 @@ It supports Django 1.6.2+ and 1.7rc3+ on Python 2.6, 2.7, 3.2, 3.3 and 3.4. .. toctree:: :maxdepth: 3 - getting_started + getting_started/index core_components/index contrib_components/index howto/index From 0c29f75f90316d6e70a2547b90e6ec865ef90f90 Mon Sep 17 00:00:00 2001 From: Karl Hobley Date: Thu, 11 Sep 2014 16:12:30 +0100 Subject: [PATCH 175/210] Changelog and release notes for wagtail start command --- CHANGELOG.txt | 1 + docs/releases/0.6.rst | 7 +++++++ 2 files changed, 8 insertions(+) diff --git a/CHANGELOG.txt b/CHANGELOG.txt index 1bad9fa751..e2842e12e6 100644 --- a/CHANGELOG.txt +++ b/CHANGELOG.txt @@ -3,6 +3,7 @@ Changelog 0.6 (xx.xx.20xx) ~~~~~~~~~~~~~~~~ + * Added 'wagtail start' command and project template * Added Django 1.7 support * Added {% routablepageurl %} template tag (Tim Heap) * Added RoutablePageMixin (Tim Heap) diff --git a/docs/releases/0.6.rst b/docs/releases/0.6.rst index f8895850ec..5899a3b39a 100644 --- a/docs/releases/0.6.rst +++ b/docs/releases/0.6.rst @@ -10,6 +10,13 @@ Wagtail 0.6 release notes - IN DEVELOPMENT What's new ========== +Project template and start project command +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +Wagtail now has a basic project template built in to make starting new projects much easier. + +To use it, install ``wagtail`` onto your machine and run ``wagtail start project_name``. + Django 1.7 support ~~~~~~~~~~~~~~~~~~ From 5c24a92598d5546a9f436667e6762a3624da7a25 Mon Sep 17 00:00:00 2001 From: Matt Westcott Date: Thu, 11 Sep 2014 16:13:43 +0100 Subject: [PATCH 176/210] Incorporate the 'creating your project' docs from #512 --- docs/getting_started/index.rst | 1 + 1 file changed, 1 insertion(+) diff --git a/docs/getting_started/index.rst b/docs/getting_started/index.rst index 01b6325c4b..c614276e8f 100644 --- a/docs/getting_started/index.rst +++ b/docs/getting_started/index.rst @@ -6,3 +6,4 @@ Getting started :maxdepth: 2 installation + creating_your_project From 229944c11831373cf71840fb6105cd78f532e946 Mon Sep 17 00:00:00 2001 From: Matt Westcott Date: Thu, 11 Sep 2014 16:18:45 +0100 Subject: [PATCH 177/210] actually add creating_your_project.rst this time... --- .../getting_started/creating_your_project.rst | 148 ++++++++++++++++++ 1 file changed, 148 insertions(+) create mode 100644 docs/getting_started/creating_your_project.rst diff --git a/docs/getting_started/creating_your_project.rst b/docs/getting_started/creating_your_project.rst new file mode 100644 index 0000000000..18aaa89be6 --- /dev/null +++ b/docs/getting_started/creating_your_project.rst @@ -0,0 +1,148 @@ +===================== +Creating your project +===================== + +.. contents:: Contents + :local: + + +The ``wagtail start`` command +============================= + +The easiest way to start a new project with wagtail is to use the ``wagtail start`` command. This command is installed into your environment when you install Wagtail (see: :doc:`installation`). + +The command works the same way as ``django-admin.py startproject`` except that the produced project is pre-configured for Wagtail. It also contains some useful extras which we will look at in the next section. + +To create a project, cd into a directory where you would like to create your project and run the following command: + + .. code-block:: bash + + wagtail start mysite + + +The project +=========== + +Lets look at what ``wagtail start`` created:: + + mysite/ + core/ + static/ + templates/ + base.html + 404.html + 500.html + mysite/ + settings/ + base.py + dev.py + production.py + manage.py + vagrant/ + provision.sh + Vagrantfile + readme.rst + requirements.txt + + +The "core" app +---------------- + +Location: ``/mysite/core/`` + +This app is here to help get you started quicker by providing a ``HomePage`` model with migrations to create one when you first setup your app. + + +Default templates and static files +---------------------------------- + +Location: ``/mysite/core/templates/`` and ``/mysite/core/static/`` + +The templates directory contains ``base.html``, ``404.html`` and ``500.html``. These files are very commonly needed on Wagtail sites to they have been added into the template. + +The static directory contains an empty javascript and sass file. Wagtail uses ``django-compressor`` for compiling and compressing static files. For more information, see: `Django Compressor Documentation `_ + + +Vagrant configuration +--------------------- + +Location: ``/Vagrantfile`` and ``/vagrant/`` + +If you have Vagrant installed, these files let you easily setup a development environment with PostgreSQL and Elasticsearch inside a virtual machine. + +See below section `With Vagrant`_ for info on how to use Vagrant in development + +If you do not want to use Vagrant, you can just delete these files. + + +Django settings +--------------- + +Location: ``/mysite/mysite/settings/`` + +The Django settings files are split up into ``base.py``, ``dev.py``, ``production.py`` and ``local.py``. + +.. glossary:: + + ``base.py`` + + This file is for global settings that will be used in both development and production. Aim to keep most of your configuration in this file. + + ``dev.py`` + + This file is for settings that will only be used by developers. For example: ``DEBUG = True`` + + ``production.py`` + + This file is for settings that will only run on a production server. For example: ``DEBUG = False`` + + ``local.py`` + + This file is used for settings local to a particular machine. This file should never be tracked by a version control system. + + .. tip:: + + On production servers, we recommend that you only store secrets in local.py (such as API keys and passwords). This can save you headaches in the future if you are ever trying to debug why a server is behaving badly. If you are using multiple servers which need different settings then we recommend that you create a different ``production.py`` file for each one. + + +Getting it running +================== + + +With Vagrant +------------ + +This is the easiest way to get the project running. Vagrant runs your project locally in a virtual machine so you can use PostgreSQL and Elasticsearch in development without having to install them on your host machine. If you haven't yet installed Vagrant, see: `Installing Vagrant `_. + + +To setup the Vagrant box, run the following commands + + .. code-block:: bash + + vagrant up # This may take some time on first run + vagrant ssh + # within the ssh session + dj createsuperuser + djrun + + +If you now visit http://localhost:8111 you should see a very basic "Welcome to your new Wagtail site!" page. + +You can browse the Wagtail admin interface at: http://localhost:8111/admin + +You can read more about how Vagrant works at: https://docs.vagrantup.com/v2/ + + +.. topic:: The ``dj`` and ``djrun`` aliases + + When using Vagrant, the Wagtail template provides two aliases: ``dj`` and ``djrun`` which can be used in the ``vagrant ssh`` session. + + .. glossary:: + + ``dj`` + + This is short for ``python manage.py`` so you can use it to reduce typing. For example: ``python manage.py syncdb`` becomes ``dj syncdb``. + + ``djrun`` + + This is short for ``python manage.py runserver 0.0.0.0:8000``. This is used to run the testing server which is accessible from ``http://localhost:8111`` (note that the port number gets changed by Vagrant) From 701f26de9966776ba9362368ae1c8a669ae63d59 Mon Sep 17 00:00:00 2001 From: Karl Hobley Date: Thu, 11 Sep 2014 16:39:34 +0100 Subject: [PATCH 178/210] Rerun makemessages --- .../locale/bg/LC_MESSAGES/django.po | 172 ++++++++++----- .../locale/ca/LC_MESSAGES/django.po | 170 +++++++++----- .../locale/de/LC_MESSAGES/django.po | 185 ++++++++++------ .../locale/el/LC_MESSAGES/django.po | 178 ++++++++++----- .../locale/en/LC_MESSAGES/django.po | 77 ++++--- .../locale/es/LC_MESSAGES/django.po | 184 +++++++++++----- .../locale/eu/LC_MESSAGES/django.po | 113 ++++++---- .../locale/fr/LC_MESSAGES/django.po | 170 +++++++++----- .../locale/gl/LC_MESSAGES/django.po | 187 +++++++++++----- .../locale/mn/LC_MESSAGES/django.po | 90 ++++---- .../locale/pl/LC_MESSAGES/django.po | 208 ++++++++++++------ .../locale/pt_BR/LC_MESSAGES/django.po | 190 +++++++++++----- .../locale/pt_PT/LC_MESSAGES/django.po | 83 ++++--- .../locale/ro/LC_MESSAGES/django.po | 191 ++++++++++------ .../locale/zh/LC_MESSAGES/django.po | 107 +++++---- .../locale/zh_TW/LC_MESSAGES/django.po | 80 ++++--- .../locale/bg/LC_MESSAGES/django.po | 61 ++--- .../locale/ca/LC_MESSAGES/django.po | 61 ++--- .../locale/de/LC_MESSAGES/django.po | 61 ++--- .../locale/el/LC_MESSAGES/django.po | 63 +++--- .../locale/en/LC_MESSAGES/django.po | 26 +-- .../locale/es/LC_MESSAGES/django.po | 58 +++-- .../locale/eu/LC_MESSAGES/django.po | 41 ++-- .../locale/fr/LC_MESSAGES/django.po | 55 +++-- .../locale/gl/LC_MESSAGES/django.po | 58 +++-- .../locale/mn/LC_MESSAGES/django.po | 41 ++-- .../locale/pl/LC_MESSAGES/django.po | 64 +++--- .../locale/pt_PT/LC_MESSAGES/django.po | 27 ++- .../locale/ro/LC_MESSAGES/django.po | 66 +++--- .../locale/zh/LC_MESSAGES/django.po | 48 ++-- .../locale/zh_TW/LC_MESSAGES/django.po | 26 +-- .../locale/bg/LC_MESSAGES/django.po | 38 ++-- .../locale/ca/LC_MESSAGES/django.po | 37 ++-- .../locale/de/LC_MESSAGES/django.po | 42 ++-- .../locale/el/LC_MESSAGES/django.po | 42 ++-- .../locale/en/LC_MESSAGES/django.po | 14 +- .../locale/es/LC_MESSAGES/django.po | 39 ++-- .../locale/eu/LC_MESSAGES/django.po | 25 ++- .../locale/fr/LC_MESSAGES/django.po | 25 ++- .../locale/gl/LC_MESSAGES/django.po | 39 ++-- .../locale/mn/LC_MESSAGES/django.po | 25 ++- .../locale/pl/LC_MESSAGES/django.po | 50 +++-- .../locale/pt_PT/LC_MESSAGES/django.po | 16 +- .../locale/ro/LC_MESSAGES/django.po | 48 ++-- .../locale/zh/LC_MESSAGES/django.po | 29 +-- .../locale/zh_TW/LC_MESSAGES/django.po | 14 +- .../locale/bg/LC_MESSAGES/django.po | 2 +- .../locale/ca/LC_MESSAGES/django.po | 2 +- .../locale/de/LC_MESSAGES/django.po | 2 +- .../locale/el/LC_MESSAGES/django.po | 2 +- .../locale/en/LC_MESSAGES/django.po | 2 +- .../locale/es/LC_MESSAGES/django.po | 2 +- .../locale/eu/LC_MESSAGES/django.po | 2 +- .../locale/fr/LC_MESSAGES/django.po | 2 +- .../locale/gl/LC_MESSAGES/django.po | 2 +- .../locale/mn/LC_MESSAGES/django.po | 2 +- .../locale/pl/LC_MESSAGES/django.po | 2 +- .../locale/pt_PT/LC_MESSAGES/django.po | 4 +- .../locale/ro/LC_MESSAGES/django.po | 2 +- .../locale/zh/LC_MESSAGES/django.po | 2 +- .../locale/zh_TW/LC_MESSAGES/django.po | 2 +- .../locale/en/LC_MESSAGES/django.po | 4 +- .../locale/bg/LC_MESSAGES/django.po | 42 ++-- .../locale/ca/LC_MESSAGES/django.po | 41 ++-- .../locale/de/LC_MESSAGES/django.po | 46 ++-- .../locale/el/LC_MESSAGES/django.po | 45 ++-- .../locale/en/LC_MESSAGES/django.po | 18 +- .../locale/es/LC_MESSAGES/django.po | 47 ++-- .../locale/eu/LC_MESSAGES/django.po | 29 +-- .../locale/fr/LC_MESSAGES/django.po | 39 ++-- .../locale/gl/LC_MESSAGES/django.po | 43 ++-- .../locale/mn/LC_MESSAGES/django.po | 41 ++-- .../locale/pl/LC_MESSAGES/django.po | 51 +++-- .../locale/pt_PT/LC_MESSAGES/django.po | 20 +- .../locale/ro/LC_MESSAGES/django.po | 51 +++-- .../locale/zh/LC_MESSAGES/django.po | 33 +-- .../locale/zh_TW/LC_MESSAGES/django.po | 18 +- .../locale/bg/LC_MESSAGES/django.po | 4 +- .../locale/ca/LC_MESSAGES/django.po | 4 +- .../locale/de/LC_MESSAGES/django.po | 4 +- .../locale/el/LC_MESSAGES/django.po | 4 +- .../locale/en/LC_MESSAGES/django.po | 4 +- .../locale/es/LC_MESSAGES/django.po | 4 +- .../locale/eu/LC_MESSAGES/django.po | 4 +- .../locale/fr/LC_MESSAGES/django.po | 4 +- .../locale/gl/LC_MESSAGES/django.po | 4 +- .../locale/mn/LC_MESSAGES/django.po | 4 +- .../locale/pl/LC_MESSAGES/django.po | 4 +- .../locale/pt_PT/LC_MESSAGES/django.po | 6 +- .../locale/ro/LC_MESSAGES/django.po | 4 +- .../locale/zh/LC_MESSAGES/django.po | 4 +- .../locale/zh_TW/LC_MESSAGES/django.po | 4 +- .../locale/bg/LC_MESSAGES/django.po | 47 ++-- .../locale/ca/LC_MESSAGES/django.po | 53 +++-- .../locale/de/LC_MESSAGES/django.po | 55 +++-- .../locale/el/LC_MESSAGES/django.po | 54 +++-- .../locale/en/LC_MESSAGES/django.po | 4 +- .../locale/es/LC_MESSAGES/django.po | 56 +++-- .../locale/eu/LC_MESSAGES/django.po | 28 ++- .../locale/fr/LC_MESSAGES/django.po | 32 ++- .../locale/gl/LC_MESSAGES/django.po | 55 +++-- .../locale/mn/LC_MESSAGES/django.po | 28 ++- .../locale/pl/LC_MESSAGES/django.po | 64 ++++-- .../locale/pt_PT/LC_MESSAGES/django.po | 6 +- .../locale/ro/LC_MESSAGES/django.po | 60 +++-- .../locale/zh/LC_MESSAGES/django.po | 37 ++-- .../locale/zh_TW/LC_MESSAGES/django.po | 4 +- .../locale/bg/LC_MESSAGES/django.po | 19 +- .../locale/ca/LC_MESSAGES/django.po | 19 +- .../locale/de/LC_MESSAGES/django.po | 19 +- .../locale/el/LC_MESSAGES/django.po | 19 +- .../locale/en/LC_MESSAGES/django.po | 4 +- .../locale/es/LC_MESSAGES/django.po | 19 +- .../locale/eu/LC_MESSAGES/django.po | 15 +- .../locale/fr/LC_MESSAGES/django.po | 19 +- .../locale/gl/LC_MESSAGES/django.po | 19 +- .../locale/mn/LC_MESSAGES/django.po | 15 +- .../locale/pl/LC_MESSAGES/django.po | 22 +- .../locale/pt_PT/LC_MESSAGES/django.po | 6 +- .../locale/ro/LC_MESSAGES/django.po | 22 +- .../locale/zh/LC_MESSAGES/django.po | 19 +- .../locale/zh_TW/LC_MESSAGES/django.po | 4 +- .../locale/bg/LC_MESSAGES/django.po | 4 +- .../locale/ca/LC_MESSAGES/django.po | 4 +- .../locale/de/LC_MESSAGES/django.po | 4 +- .../locale/el/LC_MESSAGES/django.po | 4 +- .../locale/en/LC_MESSAGES/django.po | 4 +- .../locale/es/LC_MESSAGES/django.po | 4 +- .../locale/eu/LC_MESSAGES/django.po | 4 +- .../locale/fr/LC_MESSAGES/django.po | 4 +- .../locale/gl/LC_MESSAGES/django.po | 4 +- .../locale/mn/LC_MESSAGES/django.po | 4 +- .../locale/pl/LC_MESSAGES/django.po | 4 +- .../locale/pt_PT/LC_MESSAGES/django.po | 6 +- .../locale/ro/LC_MESSAGES/django.po | 4 +- .../locale/zh/LC_MESSAGES/django.po | 4 +- .../locale/zh_TW/LC_MESSAGES/django.po | 4 +- 137 files changed, 3218 insertions(+), 1953 deletions(-) diff --git a/wagtail/wagtailadmin/locale/bg/LC_MESSAGES/django.po b/wagtail/wagtailadmin/locale/bg/LC_MESSAGES/django.po index 1a6739d185..217f2028b4 100644 --- a/wagtail/wagtailadmin/locale/bg/LC_MESSAGES/django.po +++ b/wagtail/wagtailadmin/locale/bg/LC_MESSAGES/django.po @@ -1,7 +1,7 @@ # SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. -# +# # Translators: # Lyuboslav Petrov , 2014 # Lyuboslav Petrov , 2014 @@ -9,21 +9,22 @@ msgid "" msgstr "" "Project-Id-Version: Wagtail\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2014-08-01 16:38+0100\n" +"POT-Creation-Date: 2014-09-11 16:37+0100\n" "PO-Revision-Date: 2014-08-01 15:43+0000\n" "Last-Translator: Karl Hobley \n" -"Language-Team: Bulgarian (http://www.transifex.com/projects/p/wagtail/language/bg/)\n" +"Language-Team: Bulgarian (http://www.transifex.com/projects/p/wagtail/" +"language/bg/)\n" +"Language: bg\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"Language: bg\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: edit_handlers.py:627 +#: edit_handlers.py:631 msgid "Scheduled publishing" msgstr "" -#: edit_handlers.py:641 +#: edit_handlers.py:645 msgid "Common page configuration" msgstr "" @@ -51,7 +52,9 @@ msgstr "Моля въведете вашият имейл адрес." msgid "" "Sorry, you cannot reset your password here as your user account is managed " "by another server." -msgstr "Не можете да възстановите паролата си тук, понеже акаунта ви се менижира от друг сървър." +msgstr "" +"Не можете да възстановите паролата си тук, понеже акаунта ви се менижира от " +"друг сървър." #: forms.py:76 msgid "This email address is not recognised." @@ -99,7 +102,7 @@ msgid_plural "" msgstr[0] "" msgstr[1] "" -#: forms.py:124 views/pages.py:155 views/pages.py:272 +#: forms.py:124 views/pages.py:153 views/pages.py:270 msgid "This slug is already in use" msgstr "Този слъг е вече в употреба" @@ -116,6 +119,16 @@ msgstr "" msgid "This field is required." msgstr "" +#: wagtail_hooks.py:15 templates/wagtailadmin/chooser/_search_results.html:12 +msgid "Explorer" +msgstr "Файлов мениджър" + +#: wagtail_hooks.py:23 templates/wagtailadmin/chooser/_search_form.html:7 +#: templates/wagtailadmin/pages/search.html:3 +#: templates/wagtailadmin/pages/search.html:16 +msgid "Search" +msgstr "Търсене" + #: templates/wagtailadmin/base.html:7 templates/wagtailadmin/home.html:4 msgid "Dashboard" msgstr "Работно Табло" @@ -133,7 +146,9 @@ msgstr "Добре дошъл в %(site_name)s Wagtail CMS" msgid "" "This is your dashboard on which helpful information about content you've " "created will be displayed." -msgstr "Това е вашето работно табло, където ще бъде показана полезна информация за контент, който сте създали." +msgstr "" +"Това е вашето работно табло, където ще бъде показана полезна информация за " +"контент, който сте създали." #: templates/wagtailadmin/login.html:4 templates/wagtailadmin/login.html:59 msgid "Sign in" @@ -165,7 +180,10 @@ msgid "" "Your avatar image is provided by Gravatar and is connected to your email " "address. With a Gravatar account you can set an avatar for any number of " "other email addresses you use." -msgstr "Снимката за вашият Аватар е предоставена от Gravatar и е свързана с вашия имейл адрес. Със сметка в Gravatar можете да зададете аватар за произволен брой други имейл адреси, които използвате." +msgstr "" +"Снимката за вашият Аватар е предоставена от Gravatar и е свързана с вашия " +"имейл адрес. Със сметка в Gravatar можете да зададете аватар за произволен " +"брой други имейл адреси, които използвате." #: templates/wagtailadmin/account/account.html:25 #: templates/wagtailadmin/account/change_password.html:4 @@ -192,7 +210,9 @@ msgstr "Смени парола" #: templates/wagtailadmin/account/change_password.html:21 msgid "" "Your password can't be changed here. Please contact a site administrator." -msgstr "Вашата парола не може да бъде променена тук. Моля свържете се с администратора на сайта." +msgstr "" +"Вашата парола не може да бъде променена тук. Моля свържете се с " +"администратора на сайта." #: templates/wagtailadmin/account/notification_preferences.html:4 #: templates/wagtailadmin/account/notification_preferences.html:6 @@ -263,19 +283,16 @@ msgstr "Външен линк" msgid "Email link" msgstr "Имейл линк" -#: templates/wagtailadmin/chooser/_search_form.html:7 -#: templates/wagtailadmin/pages/search.html:3 -#: templates/wagtailadmin/pages/search.html:16 -#: templatetags/wagtailadmin_tags.py:36 -msgid "Search" -msgstr "Търсене" +#: templates/wagtailadmin/chooser/_search_results.html:5 +#, python-format +msgid "" +"\n" +" Only pages of type \"%(type)s\" may be chosen for this field. " +"Search results will exclude pages of other types.\n" +" " +msgstr "" -#: templates/wagtailadmin/chooser/_search_results.html:3 -#: templatetags/wagtailadmin_tags.py:35 -msgid "Explorer" -msgstr "Файлов мениджър" - -#: templates/wagtailadmin/chooser/_search_results.html:8 +#: templates/wagtailadmin/chooser/_search_results.html:16 #, python-format msgid "" "\n" @@ -285,10 +302,19 @@ msgid_plural "" "\n" " There are %(counter)s matches\n" " " -msgstr[0] "\nИма едно съвпадение" -msgstr[1] "\nИма %(counter)s съвпадения" +msgstr[0] "" +"\n" +"Има едно съвпадение" +msgstr[1] "" +"\n" +"Има %(counter)s съвпадения" -#: templates/wagtailadmin/chooser/browse.html:2 +#: templates/wagtailadmin/chooser/browse.html:3 +#, fuzzy +msgid "Choose" +msgstr "Изберете страница" + +#: templates/wagtailadmin/chooser/browse.html:6 #: templates/wagtailadmin/chooser/search.html:2 #: templates/wagtailadmin/edit_handlers/page_chooser_panel.html:13 msgid "Choose a page" @@ -443,8 +469,14 @@ msgid_plural "" "\n" " %(total_pages)s Pages\n" " " -msgstr[0] "\n %(total_pages)s Страница\n " -msgstr[1] "\n %(total_pages)s Страници\n " +msgstr[0] "" +"\n" +" %(total_pages)s Страница\n" +" " +msgstr[1] "" +"\n" +" %(total_pages)s Страници\n" +" " #: templates/wagtailadmin/home/site_summary.html:16 #, python-format @@ -456,8 +488,12 @@ msgid_plural "" "\n" " %(total_images)s Images\n" " " -msgstr[0] "\n%(total_images)s Изображение" -msgstr[1] "\n%(total_images)s Изображения" +msgstr[0] "" +"\n" +"%(total_images)s Изображение" +msgstr[1] "" +"\n" +"%(total_images)s Изображения" #: templates/wagtailadmin/home/site_summary.html:25 #, python-format @@ -469,8 +505,12 @@ msgid_plural "" "\n" " %(total_docs)s Documents\n" " " -msgstr[0] "\n%(total_docs)s Документ" -msgstr[1] "\n%(total_docs)s Документи" +msgstr[0] "" +"\n" +"%(total_docs)s Документ" +msgstr[1] "" +"\n" +"%(total_docs)s Документи" #: templates/wagtailadmin/notifications/approved.html:1 #, python-format @@ -533,16 +573,19 @@ msgid "You can edit the privacy settings on:" msgstr "" #: templates/wagtailadmin/page_privacy/set_privacy.html:6 -msgid "Note: privacy changes apply to all children of this page too." +msgid "Privacy changes apply to all children of this page too." msgstr "" #: templates/wagtailadmin/pages/_moderator_userbar.html:4 #, python-format msgid "" "\n" -" Previewing '%(title)s', submitted by %(submitted_by)s on %(submitted_on)s.\n" +" Previewing '%(title)s', submitted by %(submitted_by)s on " +"%(submitted_on)s.\n" " " -msgstr "\nПреглед на '%(title)s', предоставена от %(submitted_by)s на %(submitted_on)s." +msgstr "" +"\n" +"Преглед на '%(title)s', предоставена от %(submitted_by)s на %(submitted_on)s." #: templates/wagtailadmin/pages/_privacy_indicator.html:9 msgid "Privacy" @@ -588,16 +631,26 @@ msgid "" " " msgid_plural "" "\n" -" This will also delete %(descendant_count)s more subpages.\n" +" This will also delete %(descendant_count)s more " +"subpages.\n" +" " +msgstr[0] "" +"\n" +" Това ще изтрие още една подстраница.\n" +" " +msgstr[1] "" +"\n" +" Това ще изтрие още %(descendant_count)s подстраници.\n" " " -msgstr[0] "\n Това ще изтрие още една подстраница.\n " -msgstr[1] "\n Това ще изтрие още %(descendant_count)s подстраници.\n " #: templates/wagtailadmin/pages/confirm_delete.html:22 msgid "" "Alternatively you can unpublish the page. This removes the page from public " "view and you can edit or publish it again later." -msgstr "Като алтернатива можете да прекратите публикуването на страницата. Това премахва страницата от обществен достъп и ще можете да редактирате или да го публикувате отново по-късно." +msgstr "" +"Като алтернатива можете да прекратите публикуването на страницата. Това " +"премахва страницата от обществен достъп и ще можете да редактирате или да го " +"публикувате отново по-късно." #: templates/wagtailadmin/pages/confirm_delete.html:26 msgid "Delete it" @@ -628,7 +681,9 @@ msgstr "Сигурни ли сте, че желаете да преместит msgid "" "Are you sure you want to move this page and all of its children into " "'%(title)s'?" -msgstr "Сигурни ли сте, че искате да преместите страницата и принадлежащите към нея дъщерни страници в '%(title)s'?" +msgstr "" +"Сигурни ли сте, че искате да преместите страницата и принадлежащите към нея " +"дъщерни страници в '%(title)s'?" #: templates/wagtailadmin/pages/confirm_move.html:18 msgid "Yes, move this page" @@ -855,7 +910,10 @@ msgid "" "\n" " Page %(page_number)s of %(num_pages)s.\n" " " -msgstr "\n Страница %(page_number)s от %(num_pages)s.\n " +msgstr "" +"\n" +" Страница %(page_number)s от %(num_pages)s.\n" +" " #: templates/wagtailadmin/pages/search_results.html:54 #, python-format @@ -994,66 +1052,66 @@ msgstr "Паролата ви бе променена успешно!" msgid "Your preferences have been updated successfully!" msgstr "" -#: views/pages.py:169 views/pages.py:286 +#: views/pages.py:167 views/pages.py:284 msgid "Go live date/time must be before expiry date/time" msgstr "" -#: views/pages.py:179 views/pages.py:296 +#: views/pages.py:177 views/pages.py:294 msgid "Expiry date/time must be in the future" msgstr "" -#: views/pages.py:219 views/pages.py:351 views/pages.py:791 +#: views/pages.py:217 views/pages.py:349 views/pages.py:766 msgid "Page '{0}' published." msgstr "Страница '{0}' е публикувана." -#: views/pages.py:221 views/pages.py:353 +#: views/pages.py:219 views/pages.py:351 msgid "Page '{0}' submitted for moderation." msgstr "Страница '{0}' е предоставена за модерация." -#: views/pages.py:224 +#: views/pages.py:222 msgid "Page '{0}' created." msgstr "Страница '{0}' е създадена." -#: views/pages.py:233 +#: views/pages.py:231 msgid "The page could not be created due to validation errors" msgstr "" -#: views/pages.py:356 +#: views/pages.py:354 msgid "Page '{0}' updated." msgstr "Страница '{0}' обновена." -#: views/pages.py:365 +#: views/pages.py:363 msgid "The page could not be saved due to validation errors" msgstr "Тази страница не можеше да бъде запазена поради валидационни грешки" -#: views/pages.py:378 +#: views/pages.py:376 msgid "This page is currently awaiting moderation" msgstr "Тази страница очаква да бъде модерирана" -#: views/pages.py:409 +#: views/pages.py:407 msgid "Page '{0}' deleted." msgstr "Страница '{0}' е изтрита." -#: views/pages.py:575 +#: views/pages.py:550 msgid "Page '{0}' unpublished." msgstr "Страница '{0}' отменена от публикуване." -#: views/pages.py:627 +#: views/pages.py:602 msgid "Page '{0}' moved." msgstr "Страница '{0}' преместена." -#: views/pages.py:709 +#: views/pages.py:684 msgid "Page '{0}' and {1} subpages copied." msgstr "" -#: views/pages.py:711 +#: views/pages.py:686 msgid "Page '{0}' copied." msgstr "" -#: views/pages.py:785 views/pages.py:804 views/pages.py:824 +#: views/pages.py:760 views/pages.py:779 views/pages.py:799 msgid "The page '{0}' is not currently awaiting moderation." msgstr "Страница '{0}' не очаква да бъде модерирана." -#: views/pages.py:810 +#: views/pages.py:785 msgid "Page '{0}' rejected for publication." msgstr "Страница '{0}' отхвърлена от публикуване." diff --git a/wagtail/wagtailadmin/locale/ca/LC_MESSAGES/django.po b/wagtail/wagtailadmin/locale/ca/LC_MESSAGES/django.po index b24a5c00ab..73c6529c7f 100644 --- a/wagtail/wagtailadmin/locale/ca/LC_MESSAGES/django.po +++ b/wagtail/wagtailadmin/locale/ca/LC_MESSAGES/django.po @@ -1,28 +1,29 @@ # SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. -# +# # Translators: # David Llop , 2014 msgid "" msgstr "" "Project-Id-Version: Wagtail\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2014-08-01 16:38+0100\n" +"POT-Creation-Date: 2014-09-11 16:37+0100\n" "PO-Revision-Date: 2014-08-01 15:43+0000\n" "Last-Translator: Karl Hobley \n" -"Language-Team: Catalan (http://www.transifex.com/projects/p/wagtail/language/ca/)\n" +"Language-Team: Catalan (http://www.transifex.com/projects/p/wagtail/language/" +"ca/)\n" +"Language: ca\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"Language: ca\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: edit_handlers.py:627 +#: edit_handlers.py:631 msgid "Scheduled publishing" msgstr "" -#: edit_handlers.py:641 +#: edit_handlers.py:645 msgid "Common page configuration" msgstr "Configuració de la pàgina comú" @@ -50,7 +51,9 @@ msgstr "Si us plau escriu el teu correu" msgid "" "Sorry, you cannot reset your password here as your user account is managed " "by another server." -msgstr "Ho sentim, no pots reiniciar la teva contrasenya aquí ja que la teva conta d'usuari es administrada per un altre servidor" +msgstr "" +"Ho sentim, no pots reiniciar la teva contrasenya aquí ja que la teva conta " +"d'usuari es administrada per un altre servidor" #: forms.py:76 msgid "This email address is not recognised." @@ -98,7 +101,7 @@ msgid_plural "" msgstr[0] "" msgstr[1] "" -#: forms.py:124 views/pages.py:155 views/pages.py:272 +#: forms.py:124 views/pages.py:153 views/pages.py:270 msgid "This slug is already in use" msgstr "Aquest llimac ja està en ús" @@ -115,6 +118,16 @@ msgstr "" msgid "This field is required." msgstr "" +#: wagtail_hooks.py:15 templates/wagtailadmin/chooser/_search_results.html:12 +msgid "Explorer" +msgstr "Explorador" + +#: wagtail_hooks.py:23 templates/wagtailadmin/chooser/_search_form.html:7 +#: templates/wagtailadmin/pages/search.html:3 +#: templates/wagtailadmin/pages/search.html:16 +msgid "Search" +msgstr "Cercar" + #: templates/wagtailadmin/base.html:7 templates/wagtailadmin/home.html:4 msgid "Dashboard" msgstr "Tauler de control" @@ -132,7 +145,9 @@ msgstr "Benvingut al Wagtail CMS del lloc %(site_name)s" msgid "" "This is your dashboard on which helpful information about content you've " "created will be displayed." -msgstr "Aquest es el teu tauler de control on es mostrarà informació útil sobre el contingut que has creat" +msgstr "" +"Aquest es el teu tauler de control on es mostrarà informació útil sobre el " +"contingut que has creat" #: templates/wagtailadmin/login.html:4 templates/wagtailadmin/login.html:59 msgid "Sign in" @@ -140,7 +155,9 @@ msgstr "Registra't" #: templates/wagtailadmin/login.html:18 msgid "Your username and password didn't match. Please try again." -msgstr "El teu nom d'usuari i la teva contrasenya no coincideixen. Si us plau torna-ho a intentar" +msgstr "" +"El teu nom d'usuari i la teva contrasenya no coincideixen. Si us plau torna-" +"ho a intentar" #: templates/wagtailadmin/login.html:26 msgid "Sign in to Wagtail" @@ -164,7 +181,10 @@ msgid "" "Your avatar image is provided by Gravatar and is connected to your email " "address. With a Gravatar account you can set an avatar for any number of " "other email addresses you use." -msgstr "La teva imatge de perfil és subministrada per Gravatar i està conectada al teu correu. Amb una conta de Gravatar pots definir una imatge de perfil per cadascuna de la resta d'adreces de correu que fas servir." +msgstr "" +"La teva imatge de perfil és subministrada per Gravatar i està conectada al " +"teu correu. Amb una conta de Gravatar pots definir una imatge de perfil per " +"cadascuna de la resta d'adreces de correu que fas servir." #: templates/wagtailadmin/account/account.html:25 #: templates/wagtailadmin/account/change_password.html:4 @@ -191,7 +211,9 @@ msgstr "Canvia la contrasenya" #: templates/wagtailadmin/account/change_password.html:21 msgid "" "Your password can't be changed here. Please contact a site administrator." -msgstr "La teva contrasenya no es pot canviar des d'aquí. Si us plau contacta amb l'administrador de la web" +msgstr "" +"La teva contrasenya no es pot canviar des d'aquí. Si us plau contacta amb " +"l'administrador de la web" #: templates/wagtailadmin/account/notification_preferences.html:4 #: templates/wagtailadmin/account/notification_preferences.html:6 @@ -262,19 +284,16 @@ msgstr "Enllaç extern" msgid "Email link" msgstr "Enllaç de correu electrònic" -#: templates/wagtailadmin/chooser/_search_form.html:7 -#: templates/wagtailadmin/pages/search.html:3 -#: templates/wagtailadmin/pages/search.html:16 -#: templatetags/wagtailadmin_tags.py:36 -msgid "Search" -msgstr "Cercar" +#: templates/wagtailadmin/chooser/_search_results.html:5 +#, python-format +msgid "" +"\n" +" Only pages of type \"%(type)s\" may be chosen for this field. " +"Search results will exclude pages of other types.\n" +" " +msgstr "" -#: templates/wagtailadmin/chooser/_search_results.html:3 -#: templatetags/wagtailadmin_tags.py:35 -msgid "Explorer" -msgstr "Explorador" - -#: templates/wagtailadmin/chooser/_search_results.html:8 +#: templates/wagtailadmin/chooser/_search_results.html:16 #, python-format msgid "" "\n" @@ -284,10 +303,19 @@ msgid_plural "" "\n" " There are %(counter)s matches\n" " " -msgstr[0] "\nHi ha un resultat" -msgstr[1] "\nHi han %(counter)s resultats" +msgstr[0] "" +"\n" +"Hi ha un resultat" +msgstr[1] "" +"\n" +"Hi han %(counter)s resultats" -#: templates/wagtailadmin/chooser/browse.html:2 +#: templates/wagtailadmin/chooser/browse.html:3 +#, fuzzy +msgid "Choose" +msgstr "Escull una pàgina" + +#: templates/wagtailadmin/chooser/browse.html:6 #: templates/wagtailadmin/chooser/search.html:2 #: templates/wagtailadmin/edit_handlers/page_chooser_panel.html:13 msgid "Choose a page" @@ -442,8 +470,12 @@ msgid_plural "" "\n" " %(total_pages)s Pages\n" " " -msgstr[0] "\n%(total_pages)s Pàgina" -msgstr[1] "\n%(total_pages)sPàgines" +msgstr[0] "" +"\n" +"%(total_pages)s Pàgina" +msgstr[1] "" +"\n" +"%(total_pages)sPàgines" #: templates/wagtailadmin/home/site_summary.html:16 #, python-format @@ -455,8 +487,12 @@ msgid_plural "" "\n" " %(total_images)s Images\n" " " -msgstr[0] "\n%(total_images)s Imatge" -msgstr[1] "\n%(total_images)s Imatges" +msgstr[0] "" +"\n" +"%(total_images)s Imatge" +msgstr[1] "" +"\n" +"%(total_images)s Imatges" #: templates/wagtailadmin/home/site_summary.html:25 #, python-format @@ -468,8 +504,12 @@ msgid_plural "" "\n" " %(total_docs)s Documents\n" " " -msgstr[0] "\n%(total_docs)s Document" -msgstr[1] "\n%(total_docs)s Documents" +msgstr[0] "" +"\n" +"%(total_docs)s Document" +msgstr[1] "" +"\n" +"%(total_docs)s Documents" #: templates/wagtailadmin/notifications/approved.html:1 #, python-format @@ -532,16 +572,19 @@ msgid "You can edit the privacy settings on:" msgstr "" #: templates/wagtailadmin/page_privacy/set_privacy.html:6 -msgid "Note: privacy changes apply to all children of this page too." +msgid "Privacy changes apply to all children of this page too." msgstr "" #: templates/wagtailadmin/pages/_moderator_userbar.html:4 #, python-format msgid "" "\n" -" Previewing '%(title)s', submitted by %(submitted_by)s on %(submitted_on)s.\n" +" Previewing '%(title)s', submitted by %(submitted_by)s on " +"%(submitted_on)s.\n" " " -msgstr "\nPrevisualitzant '%(title)s, enviada per %(submitted_by)s el %(submitted_on)s." +msgstr "" +"\n" +"Previsualitzant '%(title)s, enviada per %(submitted_by)s el %(submitted_on)s." #: templates/wagtailadmin/pages/_privacy_indicator.html:9 msgid "Privacy" @@ -587,16 +630,23 @@ msgid "" " " msgid_plural "" "\n" -" This will also delete %(descendant_count)s more subpages.\n" +" This will also delete %(descendant_count)s more " +"subpages.\n" " " -msgstr[0] "\nAixò també esborrarà una subpàgina més." -msgstr[1] "\nAixò també esborrarà %(descendant_count)s subpàgines més." +msgstr[0] "" +"\n" +"Això també esborrarà una subpàgina més." +msgstr[1] "" +"\n" +"Això també esborrarà %(descendant_count)s subpàgines més." #: templates/wagtailadmin/pages/confirm_delete.html:22 msgid "" "Alternatively you can unpublish the page. This removes the page from public " "view and you can edit or publish it again later." -msgstr "Alternativament pots despublicar la pàgina. Això treu la pàgina de la vista pública i podràs editar-la o tornar-la a publicar desprès." +msgstr "" +"Alternativament pots despublicar la pàgina. Això treu la pàgina de la vista " +"pública i podràs editar-la o tornar-la a publicar desprès." #: templates/wagtailadmin/pages/confirm_delete.html:26 msgid "Delete it" @@ -627,7 +677,9 @@ msgstr "Estàs segur que vols moure aquesta pàgina dins de '%(title)s'?" msgid "" "Are you sure you want to move this page and all of its children into " "'%(title)s'?" -msgstr "Estàs segur que vols moure aquesta pàgina i els seus fills dins de '%(title)s'?" +msgstr "" +"Estàs segur que vols moure aquesta pàgina i els seus fills dins de " +"'%(title)s'?" #: templates/wagtailadmin/pages/confirm_move.html:18 msgid "Yes, move this page" @@ -854,7 +906,9 @@ msgid "" "\n" " Page %(page_number)s of %(num_pages)s.\n" " " -msgstr "\nPàgina %(page_number)s de %(num_pages)s." +msgstr "" +"\n" +"Pàgina %(page_number)s de %(num_pages)s." #: templates/wagtailadmin/pages/search_results.html:54 #, python-format @@ -993,66 +1047,66 @@ msgstr "S'ha canviat la teva contrasenya!" msgid "Your preferences have been updated successfully!" msgstr "" -#: views/pages.py:169 views/pages.py:286 +#: views/pages.py:167 views/pages.py:284 msgid "Go live date/time must be before expiry date/time" msgstr "" -#: views/pages.py:179 views/pages.py:296 +#: views/pages.py:177 views/pages.py:294 msgid "Expiry date/time must be in the future" msgstr "" -#: views/pages.py:219 views/pages.py:351 views/pages.py:791 +#: views/pages.py:217 views/pages.py:349 views/pages.py:766 msgid "Page '{0}' published." msgstr "Pàgina '{0}' publicada." -#: views/pages.py:221 views/pages.py:353 +#: views/pages.py:219 views/pages.py:351 msgid "Page '{0}' submitted for moderation." msgstr "Pàgina '{0}' enviada per revisió" -#: views/pages.py:224 +#: views/pages.py:222 msgid "Page '{0}' created." msgstr "Pàgina '{0}' creada." -#: views/pages.py:233 +#: views/pages.py:231 msgid "The page could not be created due to validation errors" msgstr "" -#: views/pages.py:356 +#: views/pages.py:354 msgid "Page '{0}' updated." msgstr "Pàgina '{0}' actualitzada." -#: views/pages.py:365 +#: views/pages.py:363 msgid "The page could not be saved due to validation errors" msgstr "La pàgina no s'ha pogut guardar degut a errors de validació" -#: views/pages.py:378 +#: views/pages.py:376 msgid "This page is currently awaiting moderation" msgstr "Aquesta pàgina està esperant moderació" -#: views/pages.py:409 +#: views/pages.py:407 msgid "Page '{0}' deleted." msgstr "Pàgina '{0}' eliminada." -#: views/pages.py:575 +#: views/pages.py:550 msgid "Page '{0}' unpublished." msgstr "Pàgina '{0}' despublicada." -#: views/pages.py:627 +#: views/pages.py:602 msgid "Page '{0}' moved." msgstr "Pàgina '{0}' moguda." -#: views/pages.py:709 +#: views/pages.py:684 msgid "Page '{0}' and {1} subpages copied." msgstr "" -#: views/pages.py:711 +#: views/pages.py:686 msgid "Page '{0}' copied." msgstr "" -#: views/pages.py:785 views/pages.py:804 views/pages.py:824 +#: views/pages.py:760 views/pages.py:779 views/pages.py:799 msgid "The page '{0}' is not currently awaiting moderation." msgstr "La pàgina '{0}' ja no es troba esperant moderació." -#: views/pages.py:810 +#: views/pages.py:785 msgid "Page '{0}' rejected for publication." msgstr "La pàgina '{0}' ha estat rebutjada per publicació" diff --git a/wagtail/wagtailadmin/locale/de/LC_MESSAGES/django.po b/wagtail/wagtailadmin/locale/de/LC_MESSAGES/django.po index 589af7b7fa..ae1adf6170 100644 --- a/wagtail/wagtailadmin/locale/de/LC_MESSAGES/django.po +++ b/wagtail/wagtailadmin/locale/de/LC_MESSAGES/django.po @@ -1,7 +1,7 @@ # SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. -# +# # Translators: # Johannes Spielmann , 2014 # karlsander , 2014 @@ -10,21 +10,22 @@ msgid "" msgstr "" "Project-Id-Version: Wagtail\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2014-08-01 16:38+0100\n" +"POT-Creation-Date: 2014-09-11 16:37+0100\n" "PO-Revision-Date: 2014-08-01 15:43+0000\n" "Last-Translator: Karl Hobley \n" -"Language-Team: German (http://www.transifex.com/projects/p/wagtail/language/de/)\n" +"Language-Team: German (http://www.transifex.com/projects/p/wagtail/language/" +"de/)\n" +"Language: de\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"Language: de\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: edit_handlers.py:627 +#: edit_handlers.py:631 msgid "Scheduled publishing" msgstr "" -#: edit_handlers.py:641 +#: edit_handlers.py:645 msgid "Common page configuration" msgstr "Allgemeine Seiten Konfiguration" @@ -52,7 +53,9 @@ msgstr "Bitte geben Sie ihre Email Adresse ein." msgid "" "Sorry, you cannot reset your password here as your user account is managed " "by another server." -msgstr "Sie können Ihr Passwort hier leider nicht zurücksetzen, da Ihr Benutzerkonto von einem anderen Server verwaltet wird." +msgstr "" +"Sie können Ihr Passwort hier leider nicht zurücksetzen, da Ihr Benutzerkonto " +"von einem anderen Server verwaltet wird." #: forms.py:76 msgid "This email address is not recognised." @@ -100,7 +103,7 @@ msgid_plural "" msgstr[0] "" msgstr[1] "" -#: forms.py:124 views/pages.py:155 views/pages.py:272 +#: forms.py:124 views/pages.py:153 views/pages.py:270 msgid "This slug is already in use" msgstr "Der Kurztitel wird bereits verwendet" @@ -117,6 +120,16 @@ msgstr "" msgid "This field is required." msgstr "" +#: wagtail_hooks.py:15 templates/wagtailadmin/chooser/_search_results.html:12 +msgid "Explorer" +msgstr "Explorer" + +#: wagtail_hooks.py:23 templates/wagtailadmin/chooser/_search_form.html:7 +#: templates/wagtailadmin/pages/search.html:3 +#: templates/wagtailadmin/pages/search.html:16 +msgid "Search" +msgstr "Suche" + #: templates/wagtailadmin/base.html:7 templates/wagtailadmin/home.html:4 msgid "Dashboard" msgstr "Dashboard" @@ -134,7 +147,9 @@ msgstr "Willkommen zum %(site_name)s Wagtail CMS" msgid "" "This is your dashboard on which helpful information about content you've " "created will be displayed." -msgstr "Das ist Ihr Dashboard, auf dem nützliche Informationen zu den Inhalten, die Sie erstellen, zusammengestellt werden." +msgstr "" +"Das ist Ihr Dashboard, auf dem nützliche Informationen zu den Inhalten, die " +"Sie erstellen, zusammengestellt werden." #: templates/wagtailadmin/login.html:4 templates/wagtailadmin/login.html:59 msgid "Sign in" @@ -142,7 +157,9 @@ msgstr "Anmelden" #: templates/wagtailadmin/login.html:18 msgid "Your username and password didn't match. Please try again." -msgstr "Ihr Benutzername und Ihr Passwort wurden nicht erkannt. Bitte versuchen Sie es erneut." +msgstr "" +"Ihr Benutzername und Ihr Passwort wurden nicht erkannt. Bitte versuchen Sie " +"es erneut." #: templates/wagtailadmin/login.html:26 msgid "Sign in to Wagtail" @@ -166,7 +183,10 @@ msgid "" "Your avatar image is provided by Gravatar and is connected to your email " "address. With a Gravatar account you can set an avatar for any number of " "other email addresses you use." -msgstr "Ihr Profilbild wird von Gravatar zur Verfügung gestellt und ist mit Ihrer Email Adresse verknüpft. Mit einem Gravatar Benutzerkonto können Sie die Profilbilder für all Ihre Email Adressen verwalten." +msgstr "" +"Ihr Profilbild wird von Gravatar zur Verfügung gestellt und ist mit Ihrer " +"Email Adresse verknüpft. Mit einem Gravatar Benutzerkonto können Sie die " +"Profilbilder für all Ihre Email Adressen verwalten." #: templates/wagtailadmin/account/account.html:25 #: templates/wagtailadmin/account/change_password.html:4 @@ -193,7 +213,9 @@ msgstr "Password ändern" #: templates/wagtailadmin/account/change_password.html:21 msgid "" "Your password can't be changed here. Please contact a site administrator." -msgstr "Sie können Ihr Passwort hier nicht ändern. Bitte kontaktieren Sie einen Administrator der Seite." +msgstr "" +"Sie können Ihr Passwort hier nicht ändern. Bitte kontaktieren Sie einen " +"Administrator der Seite." #: templates/wagtailadmin/account/notification_preferences.html:4 #: templates/wagtailadmin/account/notification_preferences.html:6 @@ -235,7 +257,8 @@ msgstr "Überprüfen Sie ihre Emails." #: templates/wagtailadmin/account/password_reset/done.html:16 msgid "A link to reset your password has been emailed to you." -msgstr "Ein Link zum Zurücksetzen Ihres Passwortes wurde Ihnen per Email zugesandt." +msgstr "" +"Ein Link zum Zurücksetzen Ihres Passwortes wurde Ihnen per Email zugesandt." #: templates/wagtailadmin/account/password_reset/email.txt:2 msgid "Please follow the link below to reset your password" @@ -264,19 +287,16 @@ msgstr "Externer Link" msgid "Email link" msgstr "Email-Link" -#: templates/wagtailadmin/chooser/_search_form.html:7 -#: templates/wagtailadmin/pages/search.html:3 -#: templates/wagtailadmin/pages/search.html:16 -#: templatetags/wagtailadmin_tags.py:36 -msgid "Search" -msgstr "Suche" +#: templates/wagtailadmin/chooser/_search_results.html:5 +#, python-format +msgid "" +"\n" +" Only pages of type \"%(type)s\" may be chosen for this field. " +"Search results will exclude pages of other types.\n" +" " +msgstr "" -#: templates/wagtailadmin/chooser/_search_results.html:3 -#: templatetags/wagtailadmin_tags.py:35 -msgid "Explorer" -msgstr "Explorer" - -#: templates/wagtailadmin/chooser/_search_results.html:8 +#: templates/wagtailadmin/chooser/_search_results.html:16 #, python-format msgid "" "\n" @@ -286,10 +306,19 @@ msgid_plural "" "\n" " There are %(counter)s matches\n" " " -msgstr[0] "\nEs gibt ein Ergebnis." -msgstr[1] "\nEs gibt %(counter)s Ergebnisse." +msgstr[0] "" +"\n" +"Es gibt ein Ergebnis." +msgstr[1] "" +"\n" +"Es gibt %(counter)s Ergebnisse." -#: templates/wagtailadmin/chooser/browse.html:2 +#: templates/wagtailadmin/chooser/browse.html:3 +#, fuzzy +msgid "Choose" +msgstr "Seite auswählen" + +#: templates/wagtailadmin/chooser/browse.html:6 #: templates/wagtailadmin/chooser/search.html:2 #: templates/wagtailadmin/edit_handlers/page_chooser_panel.html:13 msgid "Choose a page" @@ -444,8 +473,12 @@ msgid_plural "" "\n" " %(total_pages)s Pages\n" " " -msgstr[0] "\n%(total_pages)s Seite" -msgstr[1] "\n%(total_pages)s Seiten" +msgstr[0] "" +"\n" +"%(total_pages)s Seite" +msgstr[1] "" +"\n" +"%(total_pages)s Seiten" #: templates/wagtailadmin/home/site_summary.html:16 #, python-format @@ -457,8 +490,12 @@ msgid_plural "" "\n" " %(total_images)s Images\n" " " -msgstr[0] "\n%(total_images)s Bild" -msgstr[1] "\n%(total_images)s Bilder" +msgstr[0] "" +"\n" +"%(total_images)s Bild" +msgstr[1] "" +"\n" +"%(total_images)s Bilder" #: templates/wagtailadmin/home/site_summary.html:25 #, python-format @@ -470,8 +507,12 @@ msgid_plural "" "\n" " %(total_docs)s Documents\n" " " -msgstr[0] "\n%(total_docs)s Dokument" -msgstr[1] "\n%(total_docs)s Dokumente" +msgstr[0] "" +"\n" +"%(total_docs)s Dokument" +msgstr[1] "" +"\n" +"%(total_docs)s Dokumente" #: templates/wagtailadmin/notifications/approved.html:1 #, python-format @@ -534,16 +575,20 @@ msgid "You can edit the privacy settings on:" msgstr "" #: templates/wagtailadmin/page_privacy/set_privacy.html:6 -msgid "Note: privacy changes apply to all children of this page too." +msgid "Privacy changes apply to all children of this page too." msgstr "" #: templates/wagtailadmin/pages/_moderator_userbar.html:4 #, python-format msgid "" "\n" -" Previewing '%(title)s', submitted by %(submitted_by)s on %(submitted_on)s.\n" +" Previewing '%(title)s', submitted by %(submitted_by)s on " +"%(submitted_on)s.\n" " " -msgstr "\nVorschau für '%(title)s', eingereicht von %(submitted_by)s am %(submitted_on)s." +msgstr "" +"\n" +"Vorschau für '%(title)s', eingereicht von %(submitted_by)s am " +"%(submitted_on)s." #: templates/wagtailadmin/pages/_privacy_indicator.html:9 msgid "Privacy" @@ -589,16 +634,24 @@ msgid "" " " msgid_plural "" "\n" -" This will also delete %(descendant_count)s more subpages.\n" +" This will also delete %(descendant_count)s more " +"subpages.\n" " " -msgstr[0] "\nEine weitere Unterseite wird auch gelöscht." -msgstr[1] "\n%(descendant_count)s Unterseiten werden auch gelöscht." +msgstr[0] "" +"\n" +"Eine weitere Unterseite wird auch gelöscht." +msgstr[1] "" +"\n" +"%(descendant_count)s Unterseiten werden auch gelöscht." #: templates/wagtailadmin/pages/confirm_delete.html:22 msgid "" "Alternatively you can unpublish the page. This removes the page from public " "view and you can edit or publish it again later." -msgstr "Alternativ können Sie die Seite depublizieren. Die Seite wird aus der öffentlichen Ansicht entfernt und Sie können sie später noch bearbeiten oder erneut veröffentlichen." +msgstr "" +"Alternativ können Sie die Seite depublizieren. Die Seite wird aus der " +"öffentlichen Ansicht entfernt und Sie können sie später noch bearbeiten oder " +"erneut veröffentlichen." #: templates/wagtailadmin/pages/confirm_delete.html:26 msgid "Delete it" @@ -622,14 +675,17 @@ msgstr "Verschieben" #: templates/wagtailadmin/pages/confirm_move.html:11 #, python-format msgid "Are you sure you want to move this page into '%(title)s'?" -msgstr "Sind Sie sicher, dass Sie diese Seite nach '%(title)s' verschieben wollen?" +msgstr "" +"Sind Sie sicher, dass Sie diese Seite nach '%(title)s' verschieben wollen?" #: templates/wagtailadmin/pages/confirm_move.html:13 #, python-format msgid "" "Are you sure you want to move this page and all of its children into " "'%(title)s'?" -msgstr "Sind Sie sicher, dass Sie diese Seite und alle untergeordneten Seiten nach '%(title)s' verschieben wollen?" +msgstr "" +"Sind Sie sicher, dass Sie diese Seite und alle untergeordneten Seiten nach " +"'%(title)s' verschieben wollen?" #: templates/wagtailadmin/pages/confirm_move.html:18 msgid "Yes, move this page" @@ -856,12 +912,15 @@ msgid "" "\n" " Page %(page_number)s of %(num_pages)s.\n" " " -msgstr "\nSeite %(page_number)s von %(num_pages)s." +msgstr "" +"\n" +"Seite %(page_number)s von %(num_pages)s." #: templates/wagtailadmin/pages/search_results.html:54 #, python-format msgid "Sorry, no pages match \"%(query_string)s\"" -msgstr "Es gibt leider keine Seiten zum Suchbegriff \"%(query_string)s\"" +msgstr "" +"Es gibt leider keine Seiten zum Suchbegriff \"%(query_string)s\"" #: templates/wagtailadmin/pages/search_results.html:56 msgid "Enter a search term above" @@ -995,66 +1054,68 @@ msgstr "Ihr Passwort wurde erfolgreich geändert." msgid "Your preferences have been updated successfully!" msgstr "" -#: views/pages.py:169 views/pages.py:286 +#: views/pages.py:167 views/pages.py:284 msgid "Go live date/time must be before expiry date/time" msgstr "" -#: views/pages.py:179 views/pages.py:296 +#: views/pages.py:177 views/pages.py:294 msgid "Expiry date/time must be in the future" msgstr "" -#: views/pages.py:219 views/pages.py:351 views/pages.py:791 +#: views/pages.py:217 views/pages.py:349 views/pages.py:766 msgid "Page '{0}' published." msgstr "Seite '{0}' veröffentlicht." -#: views/pages.py:221 views/pages.py:353 +#: views/pages.py:219 views/pages.py:351 msgid "Page '{0}' submitted for moderation." msgstr "Seite '{0}' zur Freischaltung eingereicht." -#: views/pages.py:224 +#: views/pages.py:222 msgid "Page '{0}' created." msgstr "Seite '{0}' erstellt." -#: views/pages.py:233 +#: views/pages.py:231 msgid "The page could not be created due to validation errors" msgstr "" -#: views/pages.py:356 +#: views/pages.py:354 msgid "Page '{0}' updated." msgstr "Seite '{0}' geändert." -#: views/pages.py:365 +#: views/pages.py:363 msgid "The page could not be saved due to validation errors" -msgstr "Aufgrund von Fehlern bei der Validierung konnte die Seite nicht gespeichert werden." +msgstr "" +"Aufgrund von Fehlern bei der Validierung konnte die Seite nicht gespeichert " +"werden." -#: views/pages.py:378 +#: views/pages.py:376 msgid "This page is currently awaiting moderation" msgstr "Diese Seite wartet derzeit auf Freischaltung" -#: views/pages.py:409 +#: views/pages.py:407 msgid "Page '{0}' deleted." msgstr "Seite '{0}' gelöscht." -#: views/pages.py:575 +#: views/pages.py:550 msgid "Page '{0}' unpublished." msgstr "Seite '{0}' depubliziert." -#: views/pages.py:627 +#: views/pages.py:602 msgid "Page '{0}' moved." msgstr "Seite '{0}' verschoben." -#: views/pages.py:709 +#: views/pages.py:684 msgid "Page '{0}' and {1} subpages copied." msgstr "" -#: views/pages.py:711 +#: views/pages.py:686 msgid "Page '{0}' copied." msgstr "" -#: views/pages.py:785 views/pages.py:804 views/pages.py:824 +#: views/pages.py:760 views/pages.py:779 views/pages.py:799 msgid "The page '{0}' is not currently awaiting moderation." msgstr "Die Seite '{0}' wartet derzeit nicht auf Freischaltung." -#: views/pages.py:810 +#: views/pages.py:785 msgid "Page '{0}' rejected for publication." msgstr "Die Veröffentlichung der Seite '{0}' wurde abgelehnt." diff --git a/wagtail/wagtailadmin/locale/el/LC_MESSAGES/django.po b/wagtail/wagtailadmin/locale/el/LC_MESSAGES/django.po index 1ab108d027..7d4331ee47 100644 --- a/wagtail/wagtailadmin/locale/el/LC_MESSAGES/django.po +++ b/wagtail/wagtailadmin/locale/el/LC_MESSAGES/django.po @@ -1,7 +1,7 @@ # SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. -# +# # Translators: # serafeim , 2014 # serafeim , 2014 @@ -9,21 +9,22 @@ msgid "" msgstr "" "Project-Id-Version: Wagtail\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2014-08-01 16:38+0100\n" +"POT-Creation-Date: 2014-09-11 16:37+0100\n" "PO-Revision-Date: 2014-08-01 15:43+0000\n" "Last-Translator: Karl Hobley \n" -"Language-Team: Greek (http://www.transifex.com/projects/p/wagtail/language/el/)\n" +"Language-Team: Greek (http://www.transifex.com/projects/p/wagtail/language/" +"el/)\n" +"Language: el\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"Language: el\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: edit_handlers.py:627 +#: edit_handlers.py:631 msgid "Scheduled publishing" msgstr "" -#: edit_handlers.py:641 +#: edit_handlers.py:645 msgid "Common page configuration" msgstr "Κοινές ρυθμίσεις σελίδων" @@ -51,7 +52,9 @@ msgstr "Συμπληρώσατε τη διεύθυνση email σας." msgid "" "Sorry, you cannot reset your password here as your user account is managed " "by another server." -msgstr "Λυπούμαστε, δε μπορείτε να αλλάξετε τον κωδικό σας διότι το λογαριασμό χρήστη σας τον διαχειρίζεται ένας διαφορετικός εξυπηρετητής." +msgstr "" +"Λυπούμαστε, δε μπορείτε να αλλάξετε τον κωδικό σας διότι το λογαριασμό " +"χρήστη σας τον διαχειρίζεται ένας διαφορετικός εξυπηρετητής." #: forms.py:76 msgid "This email address is not recognised." @@ -99,7 +102,7 @@ msgid_plural "" msgstr[0] "" msgstr[1] "" -#: forms.py:124 views/pages.py:155 views/pages.py:272 +#: forms.py:124 views/pages.py:153 views/pages.py:270 msgid "This slug is already in use" msgstr "Το slug χρησιμοποιείται" @@ -116,6 +119,16 @@ msgstr "" msgid "This field is required." msgstr "" +#: wagtail_hooks.py:15 templates/wagtailadmin/chooser/_search_results.html:12 +msgid "Explorer" +msgstr "Εξερευνητής" + +#: wagtail_hooks.py:23 templates/wagtailadmin/chooser/_search_form.html:7 +#: templates/wagtailadmin/pages/search.html:3 +#: templates/wagtailadmin/pages/search.html:16 +msgid "Search" +msgstr "Αναζήτηση" + #: templates/wagtailadmin/base.html:7 templates/wagtailadmin/home.html:4 msgid "Dashboard" msgstr "Πίνακας ελέγχου" @@ -133,7 +146,9 @@ msgstr "Καλώς ήρθατε στο %(site_name)s Wagtail CMS" msgid "" "This is your dashboard on which helpful information about content you've " "created will be displayed." -msgstr "Αυτός είναι ο πίνακας ελέγχου στον οποίο εμφανίζονται πληροφορίες σχετικές με το περιεχόμενου που έχετε δημιουργήσει." +msgstr "" +"Αυτός είναι ο πίνακας ελέγχου στον οποίο εμφανίζονται πληροφορίες σχετικές " +"με το περιεχόμενου που έχετε δημιουργήσει." #: templates/wagtailadmin/login.html:4 templates/wagtailadmin/login.html:59 msgid "Sign in" @@ -165,7 +180,10 @@ msgid "" "Your avatar image is provided by Gravatar and is connected to your email " "address. With a Gravatar account you can set an avatar for any number of " "other email addresses you use." -msgstr "Η εικόνα σας παρέχετε από το Gravatar και συσχετίζεται με τη διεύθυνση email σας. Με το λογαριασμό σας στο Gravatar μπορείτε να δημιουργήσετε εικόνα και για τις άλλες διευθύνσεις email που έχετε." +msgstr "" +"Η εικόνα σας παρέχετε από το Gravatar και συσχετίζεται με τη διεύθυνση email " +"σας. Με το λογαριασμό σας στο Gravatar μπορείτε να δημιουργήσετε εικόνα και " +"για τις άλλες διευθύνσεις email που έχετε." #: templates/wagtailadmin/account/account.html:25 #: templates/wagtailadmin/account/change_password.html:4 @@ -192,7 +210,8 @@ msgstr "Αλλαγή κωδικού" #: templates/wagtailadmin/account/change_password.html:21 msgid "" "Your password can't be changed here. Please contact a site administrator." -msgstr "Ο κωδικός σας δε μπορεί να αλλαχτεί εδώ. Παρακαλώ ενημερώστε το διαχειριστή." +msgstr "" +"Ο κωδικός σας δε μπορεί να αλλαχτεί εδώ. Παρακαλώ ενημερώστε το διαχειριστή." #: templates/wagtailadmin/account/notification_preferences.html:4 #: templates/wagtailadmin/account/notification_preferences.html:6 @@ -238,7 +257,8 @@ msgstr "Μια σύνδεση για ανανέωση του κωδικού σα #: templates/wagtailadmin/account/password_reset/email.txt:2 msgid "Please follow the link below to reset your password" -msgstr "Παρακαλούμε ακολουθήστε τη σύνδεση παρακάτω για να ανανεώσετε τον κωδικό σας" +msgstr "" +"Παρακαλούμε ακολουθήστε τη σύνδεση παρακάτω για να ανανεώσετε τον κωδικό σας" #: templates/wagtailadmin/account/password_reset/email_subject.txt:2 msgid "Password reset" @@ -263,19 +283,16 @@ msgstr "Εξωτερική σύνδεση" msgid "Email link" msgstr "Σύνδεση με email" -#: templates/wagtailadmin/chooser/_search_form.html:7 -#: templates/wagtailadmin/pages/search.html:3 -#: templates/wagtailadmin/pages/search.html:16 -#: templatetags/wagtailadmin_tags.py:36 -msgid "Search" -msgstr "Αναζήτηση" +#: templates/wagtailadmin/chooser/_search_results.html:5 +#, python-format +msgid "" +"\n" +" Only pages of type \"%(type)s\" may be chosen for this field. " +"Search results will exclude pages of other types.\n" +" " +msgstr "" -#: templates/wagtailadmin/chooser/_search_results.html:3 -#: templatetags/wagtailadmin_tags.py:35 -msgid "Explorer" -msgstr "Εξερευνητής" - -#: templates/wagtailadmin/chooser/_search_results.html:8 +#: templates/wagtailadmin/chooser/_search_results.html:16 #, python-format msgid "" "\n" @@ -285,10 +302,19 @@ msgid_plural "" "\n" " There are %(counter)s matches\n" " " -msgstr[0] "\nΒρέθηκε ένα αποτέλεσμα" -msgstr[1] "\nΒρέθηκαν %(counter)s αποτελέσματα" +msgstr[0] "" +"\n" +"Βρέθηκε ένα αποτέλεσμα" +msgstr[1] "" +"\n" +"Βρέθηκαν %(counter)s αποτελέσματα" -#: templates/wagtailadmin/chooser/browse.html:2 +#: templates/wagtailadmin/chooser/browse.html:3 +#, fuzzy +msgid "Choose" +msgstr "Επιλογή σελίδας" + +#: templates/wagtailadmin/chooser/browse.html:6 #: templates/wagtailadmin/chooser/search.html:2 #: templates/wagtailadmin/edit_handlers/page_chooser_panel.html:13 msgid "Choose a page" @@ -443,8 +469,12 @@ msgid_plural "" "\n" " %(total_pages)s Pages\n" " " -msgstr[0] "\n%(total_pages)s Σελίδα" -msgstr[1] "\n%(total_pages)s Σελίδες" +msgstr[0] "" +"\n" +"%(total_pages)s Σελίδα" +msgstr[1] "" +"\n" +"%(total_pages)s Σελίδες" #: templates/wagtailadmin/home/site_summary.html:16 #, python-format @@ -456,8 +486,12 @@ msgid_plural "" "\n" " %(total_images)s Images\n" " " -msgstr[0] "\n%(total_images)s Εικόνα" -msgstr[1] "\n%(total_images)s Εικόνες" +msgstr[0] "" +"\n" +"%(total_images)s Εικόνα" +msgstr[1] "" +"\n" +"%(total_images)s Εικόνες" #: templates/wagtailadmin/home/site_summary.html:25 #, python-format @@ -469,8 +503,14 @@ msgid_plural "" "\n" " %(total_docs)s Documents\n" " " -msgstr[0] "\n\n%(total_docs)s Έγγραφο" -msgstr[1] "\n\n%(total_docs)s Έγγραφα" +msgstr[0] "" +"\n" +"\n" +"%(total_docs)s Έγγραφο" +msgstr[1] "" +"\n" +"\n" +"%(total_docs)s Έγγραφα" #: templates/wagtailadmin/notifications/approved.html:1 #, python-format @@ -533,16 +573,21 @@ msgid "You can edit the privacy settings on:" msgstr "" #: templates/wagtailadmin/page_privacy/set_privacy.html:6 -msgid "Note: privacy changes apply to all children of this page too." +msgid "Privacy changes apply to all children of this page too." msgstr "" #: templates/wagtailadmin/pages/_moderator_userbar.html:4 #, python-format msgid "" "\n" -" Previewing '%(title)s', submitted by %(submitted_by)s on %(submitted_on)s.\n" +" Previewing '%(title)s', submitted by %(submitted_by)s on " +"%(submitted_on)s.\n" +" " +msgstr "" +"\n" +" Προεπισκόπηση της '%(title)s', που δημιουργήθηκε από τον " +"%(submitted_by)s στις %(submitted_on)s.\n" " " -msgstr "\n Προεπισκόπηση της '%(title)s', που δημιουργήθηκε από τον %(submitted_by)s στις %(submitted_on)s.\n " #: templates/wagtailadmin/pages/_privacy_indicator.html:9 msgid "Privacy" @@ -588,16 +633,26 @@ msgid "" " " msgid_plural "" "\n" -" This will also delete %(descendant_count)s more subpages.\n" +" This will also delete %(descendant_count)s more " +"subpages.\n" +" " +msgstr[0] "" +"\n" +" Επίσης θα διαγραφεί και μια ακόμα σελίδα.\n" +" " +msgstr[1] "" +"\n" +" Επίσης θα διαγραφούν και %(descendant_count)s ακόμα " +"σελίδες.\n" " " -msgstr[0] "\n Επίσης θα διαγραφεί και μια ακόμα σελίδα.\n " -msgstr[1] "\n Επίσης θα διαγραφούν και %(descendant_count)s ακόμα σελίδες.\n " #: templates/wagtailadmin/pages/confirm_delete.html:22 msgid "" "Alternatively you can unpublish the page. This removes the page from public " "view and you can edit or publish it again later." -msgstr "Εναλλακτικά μπορείτε να αποεκδόσετε τη σελίδα ώστε να μην εμφανίζεται στο κοινό. Στη συνέχεια μπορείτε να τη διορθώστε και να την εκδόσετε ." +msgstr "" +"Εναλλακτικά μπορείτε να αποεκδόσετε τη σελίδα ώστε να μην εμφανίζεται στο " +"κοινό. Στη συνέχεια μπορείτε να τη διορθώστε και να την εκδόσετε ." #: templates/wagtailadmin/pages/confirm_delete.html:26 msgid "Delete it" @@ -628,7 +683,9 @@ msgstr "Είστε σίγουρος ότι θέλετε να μετακινήσ msgid "" "Are you sure you want to move this page and all of its children into " "'%(title)s'?" -msgstr "Είστε σίγουρος ότι θέλετε να μετακινήσετε τη σελίδα και όλα τα παιδιά της στο '%(title)s';" +msgstr "" +"Είστε σίγουρος ότι θέλετε να μετακινήσετε τη σελίδα και όλα τα παιδιά της " +"στο '%(title)s';" #: templates/wagtailadmin/pages/confirm_move.html:18 msgid "Yes, move this page" @@ -855,12 +912,15 @@ msgid "" "\n" " Page %(page_number)s of %(num_pages)s.\n" " " -msgstr "\nΣελίδα %(page_number)s of %(num_pages)s." +msgstr "" +"\n" +"Σελίδα %(page_number)s of %(num_pages)s." #: templates/wagtailadmin/pages/search_results.html:54 #, python-format msgid "Sorry, no pages match \"%(query_string)s\"" -msgstr "Λυπούμαστε, καμία σελίδα δε ταιριάζει με το \"%(query_string)s\"" +msgstr "" +"Λυπούμαστε, καμία σελίδα δε ταιριάζει με το \"%(query_string)s\"" #: templates/wagtailadmin/pages/search_results.html:56 msgid "Enter a search term above" @@ -994,66 +1054,66 @@ msgstr "Ο κωδικός σας αλλάχτηκε με επιτυχία!" msgid "Your preferences have been updated successfully!" msgstr "" -#: views/pages.py:169 views/pages.py:286 +#: views/pages.py:167 views/pages.py:284 msgid "Go live date/time must be before expiry date/time" msgstr "" -#: views/pages.py:179 views/pages.py:296 +#: views/pages.py:177 views/pages.py:294 msgid "Expiry date/time must be in the future" msgstr "" -#: views/pages.py:219 views/pages.py:351 views/pages.py:791 +#: views/pages.py:217 views/pages.py:349 views/pages.py:766 msgid "Page '{0}' published." msgstr "Η σελίδα '{0}' δημοσιεύθηκε." -#: views/pages.py:221 views/pages.py:353 +#: views/pages.py:219 views/pages.py:351 msgid "Page '{0}' submitted for moderation." msgstr "Η σελίδα '{0}' στάλθηκε προς έλεγχο." -#: views/pages.py:224 +#: views/pages.py:222 msgid "Page '{0}' created." msgstr "Η σελίδα '{0}' δημιουργήθηκε." -#: views/pages.py:233 +#: views/pages.py:231 msgid "The page could not be created due to validation errors" msgstr "" -#: views/pages.py:356 +#: views/pages.py:354 msgid "Page '{0}' updated." msgstr "Έγινε η αποθήκευση της σελίδας '{0}'." -#: views/pages.py:365 +#: views/pages.py:363 msgid "The page could not be saved due to validation errors" msgstr "Δε ήταν δυνατή η αποθήκευση της σελίδας λόγω σφαλμάτων ελέγχου" -#: views/pages.py:378 +#: views/pages.py:376 msgid "This page is currently awaiting moderation" msgstr "Η σελίδα δεν είναι προς έλεγχο" -#: views/pages.py:409 +#: views/pages.py:407 msgid "Page '{0}' deleted." msgstr "Έγινε διαγραφή της σελίδας '{0}'." -#: views/pages.py:575 +#: views/pages.py:550 msgid "Page '{0}' unpublished." msgstr "Έγινε αποδημοσίευση της '{0}'." -#: views/pages.py:627 +#: views/pages.py:602 msgid "Page '{0}' moved." msgstr "Έγινε η μετακίνηση της σελίδας '{0}'." -#: views/pages.py:709 +#: views/pages.py:684 msgid "Page '{0}' and {1} subpages copied." msgstr "" -#: views/pages.py:711 +#: views/pages.py:686 msgid "Page '{0}' copied." msgstr "" -#: views/pages.py:785 views/pages.py:804 views/pages.py:824 +#: views/pages.py:760 views/pages.py:779 views/pages.py:799 msgid "The page '{0}' is not currently awaiting moderation." msgstr "Η σελίδα '{0}' δεν είναι για έλεγχο." -#: views/pages.py:810 +#: views/pages.py:785 msgid "Page '{0}' rejected for publication." msgstr "Η δημοσίευση της σελίδας '{0}' απορρίφθηκε." diff --git a/wagtail/wagtailadmin/locale/en/LC_MESSAGES/django.po b/wagtail/wagtailadmin/locale/en/LC_MESSAGES/django.po index 999e25a1a3..d9b5af87f6 100644 --- a/wagtail/wagtailadmin/locale/en/LC_MESSAGES/django.po +++ b/wagtail/wagtailadmin/locale/en/LC_MESSAGES/django.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2014-08-01 16:38+0100\n" +"POT-Creation-Date: 2014-09-11 16:37+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -17,11 +17,11 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -#: edit_handlers.py:627 +#: edit_handlers.py:631 msgid "Scheduled publishing" msgstr "" -#: edit_handlers.py:641 +#: edit_handlers.py:645 msgid "Common page configuration" msgstr "" @@ -97,7 +97,7 @@ msgid_plural "" msgstr[0] "" msgstr[1] "" -#: forms.py:124 views/pages.py:155 views/pages.py:272 +#: forms.py:124 views/pages.py:153 views/pages.py:270 msgid "This slug is already in use" msgstr "" @@ -114,6 +114,16 @@ msgstr "" msgid "This field is required." msgstr "" +#: wagtail_hooks.py:15 templates/wagtailadmin/chooser/_search_results.html:12 +msgid "Explorer" +msgstr "" + +#: wagtail_hooks.py:23 templates/wagtailadmin/chooser/_search_form.html:7 +#: templates/wagtailadmin/pages/search.html:3 +#: templates/wagtailadmin/pages/search.html:16 +msgid "Search" +msgstr "" + #: templates/wagtailadmin/base.html:7 templates/wagtailadmin/home.html:4 msgid "Dashboard" msgstr "" @@ -261,19 +271,16 @@ msgstr "" msgid "Email link" msgstr "" -#: templates/wagtailadmin/chooser/_search_form.html:7 -#: templates/wagtailadmin/pages/search.html:3 -#: templates/wagtailadmin/pages/search.html:16 -#: templatetags/wagtailadmin_tags.py:36 -msgid "Search" +#: templates/wagtailadmin/chooser/_search_results.html:5 +#, python-format +msgid "" +"\n" +" Only pages of type \"%(type)s\" may be chosen for this field. " +"Search results will exclude pages of other types.\n" +" " msgstr "" -#: templates/wagtailadmin/chooser/_search_results.html:3 -#: templatetags/wagtailadmin_tags.py:35 -msgid "Explorer" -msgstr "" - -#: templates/wagtailadmin/chooser/_search_results.html:8 +#: templates/wagtailadmin/chooser/_search_results.html:16 #, python-format msgid "" "\n" @@ -286,7 +293,11 @@ msgid_plural "" msgstr[0] "" msgstr[1] "" -#: templates/wagtailadmin/chooser/browse.html:2 +#: templates/wagtailadmin/chooser/browse.html:3 +msgid "Choose" +msgstr "" + +#: templates/wagtailadmin/chooser/browse.html:6 #: templates/wagtailadmin/chooser/search.html:2 #: templates/wagtailadmin/edit_handlers/page_chooser_panel.html:13 msgid "Choose a page" @@ -531,7 +542,7 @@ msgid "You can edit the privacy settings on:" msgstr "" #: templates/wagtailadmin/page_privacy/set_privacy.html:6 -msgid "Note: privacy changes apply to all children of this page too." +msgid "Privacy changes apply to all children of this page too." msgstr "" #: templates/wagtailadmin/pages/_moderator_userbar.html:4 @@ -994,66 +1005,66 @@ msgstr "" msgid "Your preferences have been updated successfully!" msgstr "" -#: views/pages.py:169 views/pages.py:286 +#: views/pages.py:167 views/pages.py:284 msgid "Go live date/time must be before expiry date/time" msgstr "" -#: views/pages.py:179 views/pages.py:296 +#: views/pages.py:177 views/pages.py:294 msgid "Expiry date/time must be in the future" msgstr "" -#: views/pages.py:219 views/pages.py:351 views/pages.py:791 +#: views/pages.py:217 views/pages.py:349 views/pages.py:766 msgid "Page '{0}' published." msgstr "" -#: views/pages.py:221 views/pages.py:353 +#: views/pages.py:219 views/pages.py:351 msgid "Page '{0}' submitted for moderation." msgstr "" -#: views/pages.py:224 +#: views/pages.py:222 msgid "Page '{0}' created." msgstr "" -#: views/pages.py:233 +#: views/pages.py:231 msgid "The page could not be created due to validation errors" msgstr "" -#: views/pages.py:356 +#: views/pages.py:354 msgid "Page '{0}' updated." msgstr "" -#: views/pages.py:365 +#: views/pages.py:363 msgid "The page could not be saved due to validation errors" msgstr "" -#: views/pages.py:378 +#: views/pages.py:376 msgid "This page is currently awaiting moderation" msgstr "" -#: views/pages.py:409 +#: views/pages.py:407 msgid "Page '{0}' deleted." msgstr "" -#: views/pages.py:575 +#: views/pages.py:550 msgid "Page '{0}' unpublished." msgstr "" -#: views/pages.py:627 +#: views/pages.py:602 msgid "Page '{0}' moved." msgstr "" -#: views/pages.py:709 +#: views/pages.py:684 msgid "Page '{0}' and {1} subpages copied." msgstr "" -#: views/pages.py:711 +#: views/pages.py:686 msgid "Page '{0}' copied." msgstr "" -#: views/pages.py:785 views/pages.py:804 views/pages.py:824 +#: views/pages.py:760 views/pages.py:779 views/pages.py:799 msgid "The page '{0}' is not currently awaiting moderation." msgstr "" -#: views/pages.py:810 +#: views/pages.py:785 msgid "Page '{0}' rejected for publication." msgstr "" diff --git a/wagtail/wagtailadmin/locale/es/LC_MESSAGES/django.po b/wagtail/wagtailadmin/locale/es/LC_MESSAGES/django.po index 36aa5f4024..5e16a14299 100644 --- a/wagtail/wagtailadmin/locale/es/LC_MESSAGES/django.po +++ b/wagtail/wagtailadmin/locale/es/LC_MESSAGES/django.po @@ -1,7 +1,7 @@ # SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. -# +# # Translators: # fooflare , 2014 # Unai Zalakain , 2014 @@ -9,21 +9,22 @@ msgid "" msgstr "" "Project-Id-Version: Wagtail\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2014-08-01 16:38+0100\n" +"POT-Creation-Date: 2014-09-11 16:37+0100\n" "PO-Revision-Date: 2014-08-01 15:43+0000\n" "Last-Translator: Karl Hobley \n" -"Language-Team: Spanish (http://www.transifex.com/projects/p/wagtail/language/es/)\n" +"Language-Team: Spanish (http://www.transifex.com/projects/p/wagtail/language/" +"es/)\n" +"Language: es\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"Language: es\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: edit_handlers.py:627 +#: edit_handlers.py:631 msgid "Scheduled publishing" msgstr "" -#: edit_handlers.py:641 +#: edit_handlers.py:645 msgid "Common page configuration" msgstr "Configuración común de página" @@ -51,7 +52,9 @@ msgstr "Rellena tu dirección de correo por favor." msgid "" "Sorry, you cannot reset your password here as your user account is managed " "by another server." -msgstr "Lo sentimos, no puedes restablecer tu contraseña aquí porque tu cuenta es gestionada por otro servidor." +msgstr "" +"Lo sentimos, no puedes restablecer tu contraseña aquí porque tu cuenta es " +"gestionada por otro servidor." #: forms.py:76 msgid "This email address is not recognised." @@ -99,7 +102,7 @@ msgid_plural "" msgstr[0] "" msgstr[1] "" -#: forms.py:124 views/pages.py:155 views/pages.py:272 +#: forms.py:124 views/pages.py:153 views/pages.py:270 msgid "This slug is already in use" msgstr "Este slug ya está en uso" @@ -116,6 +119,16 @@ msgstr "" msgid "This field is required." msgstr "" +#: wagtail_hooks.py:15 templates/wagtailadmin/chooser/_search_results.html:12 +msgid "Explorer" +msgstr "Explorador" + +#: wagtail_hooks.py:23 templates/wagtailadmin/chooser/_search_form.html:7 +#: templates/wagtailadmin/pages/search.html:3 +#: templates/wagtailadmin/pages/search.html:16 +msgid "Search" +msgstr "Búsqueda" + #: templates/wagtailadmin/base.html:7 templates/wagtailadmin/home.html:4 msgid "Dashboard" msgstr "Panel de control" @@ -133,7 +146,9 @@ msgstr "Bienvenido al CMS Wagtail %(site_name)s" msgid "" "This is your dashboard on which helpful information about content you've " "created will be displayed." -msgstr "Este es tu panel de control donde aparecerá información útil sobre el contenido que has creado." +msgstr "" +"Este es tu panel de control donde aparecerá información útil sobre el " +"contenido que has creado." #: templates/wagtailadmin/login.html:4 templates/wagtailadmin/login.html:59 msgid "Sign in" @@ -165,7 +180,10 @@ msgid "" "Your avatar image is provided by Gravatar and is connected to your email " "address. With a Gravatar account you can set an avatar for any number of " "other email addresses you use." -msgstr "Tu avatar es provisto por Gravatar y está conectado a tu dirección de correo. Con una cuenta Gravatar puedes establecer un avatar para cualquier número de correos electrónicos." +msgstr "" +"Tu avatar es provisto por Gravatar y está conectado a tu dirección de " +"correo. Con una cuenta Gravatar puedes establecer un avatar para cualquier " +"número de correos electrónicos." #: templates/wagtailadmin/account/account.html:25 #: templates/wagtailadmin/account/change_password.html:4 @@ -192,7 +210,9 @@ msgstr "Cambiar Contraseña" #: templates/wagtailadmin/account/change_password.html:21 msgid "" "Your password can't be changed here. Please contact a site administrator." -msgstr "Tu contraseña no puede cambiarse aquí. Por favor, contacta con el administrador." +msgstr "" +"Tu contraseña no puede cambiarse aquí. Por favor, contacta con el " +"administrador." #: templates/wagtailadmin/account/notification_preferences.html:4 #: templates/wagtailadmin/account/notification_preferences.html:6 @@ -234,7 +254,9 @@ msgstr "Revisa tu correo electrónico" #: templates/wagtailadmin/account/password_reset/done.html:16 msgid "A link to reset your password has been emailed to you." -msgstr "Un enlace para restablecer tu contraseña, te ha sido enviado por correo electrónico." +msgstr "" +"Un enlace para restablecer tu contraseña, te ha sido enviado por correo " +"electrónico." #: templates/wagtailadmin/account/password_reset/email.txt:2 msgid "Please follow the link below to reset your password" @@ -263,19 +285,16 @@ msgstr "Enlace externo" msgid "Email link" msgstr "Enlace de correo electrónico" -#: templates/wagtailadmin/chooser/_search_form.html:7 -#: templates/wagtailadmin/pages/search.html:3 -#: templates/wagtailadmin/pages/search.html:16 -#: templatetags/wagtailadmin_tags.py:36 -msgid "Search" -msgstr "Búsqueda" +#: templates/wagtailadmin/chooser/_search_results.html:5 +#, python-format +msgid "" +"\n" +" Only pages of type \"%(type)s\" may be chosen for this field. " +"Search results will exclude pages of other types.\n" +" " +msgstr "" -#: templates/wagtailadmin/chooser/_search_results.html:3 -#: templatetags/wagtailadmin_tags.py:35 -msgid "Explorer" -msgstr "Explorador" - -#: templates/wagtailadmin/chooser/_search_results.html:8 +#: templates/wagtailadmin/chooser/_search_results.html:16 #, python-format msgid "" "\n" @@ -285,10 +304,21 @@ msgid_plural "" "\n" " There are %(counter)s matches\n" " " -msgstr[0] "\n Hay una coincidencia\n " -msgstr[1] "\n Hay %(counter)s coincidencias\n " +msgstr[0] "" +"\n" +" Hay una coincidencia\n" +" " +msgstr[1] "" +"\n" +" Hay %(counter)s coincidencias\n" +" " -#: templates/wagtailadmin/chooser/browse.html:2 +#: templates/wagtailadmin/chooser/browse.html:3 +#, fuzzy +msgid "Choose" +msgstr "Elige una página" + +#: templates/wagtailadmin/chooser/browse.html:6 #: templates/wagtailadmin/chooser/search.html:2 #: templates/wagtailadmin/edit_handlers/page_chooser_panel.html:13 msgid "Choose a page" @@ -443,8 +473,14 @@ msgid_plural "" "\n" " %(total_pages)s Pages\n" " " -msgstr[0] "\n %(total_pages)s Página\n " -msgstr[1] "\n %(total_pages)s Páginas\n " +msgstr[0] "" +"\n" +" %(total_pages)s Página\n" +" " +msgstr[1] "" +"\n" +" %(total_pages)s Páginas\n" +" " #: templates/wagtailadmin/home/site_summary.html:16 #, python-format @@ -456,8 +492,14 @@ msgid_plural "" "\n" " %(total_images)s Images\n" " " -msgstr[0] "\n %(total_images)s Imagen\n " -msgstr[1] "\n %(total_images)s Imágenes\n " +msgstr[0] "" +"\n" +" %(total_images)s Imagen\n" +" " +msgstr[1] "" +"\n" +" %(total_images)s Imágenes\n" +" " #: templates/wagtailadmin/home/site_summary.html:25 #, python-format @@ -469,8 +511,14 @@ msgid_plural "" "\n" " %(total_docs)s Documents\n" " " -msgstr[0] "\n %(total_docs)s Documento\n " -msgstr[1] "\n %(total_docs)s Documentos\n " +msgstr[0] "" +"\n" +" %(total_docs)s Documento\n" +" " +msgstr[1] "" +"\n" +" %(total_docs)s Documentos\n" +" " #: templates/wagtailadmin/notifications/approved.html:1 #, python-format @@ -533,16 +581,21 @@ msgid "You can edit the privacy settings on:" msgstr "" #: templates/wagtailadmin/page_privacy/set_privacy.html:6 -msgid "Note: privacy changes apply to all children of this page too." +msgid "Privacy changes apply to all children of this page too." msgstr "" #: templates/wagtailadmin/pages/_moderator_userbar.html:4 #, python-format msgid "" "\n" -" Previewing '%(title)s', submitted by %(submitted_by)s on %(submitted_on)s.\n" +" Previewing '%(title)s', submitted by %(submitted_by)s on " +"%(submitted_on)s.\n" +" " +msgstr "" +"\n" +" Previsualizando '%(title)s', enviada por %(submitted_by)s en " +"%(submitted_on)s.\n" " " -msgstr "\n Previsualizando '%(title)s', enviada por %(submitted_by)s en %(submitted_on)s.\n " #: templates/wagtailadmin/pages/_privacy_indicator.html:9 msgid "Privacy" @@ -588,16 +641,26 @@ msgid "" " " msgid_plural "" "\n" -" This will also delete %(descendant_count)s more subpages.\n" +" This will also delete %(descendant_count)s more " +"subpages.\n" +" " +msgstr[0] "" +"\n" +" Esto también borrará otra subpágina.\n" +" " +msgstr[1] "" +"\n" +" Esto también eliminará %(descendant_count)s subpáginas " +"más.\n" " " -msgstr[0] "\n Esto también borrará otra subpágina.\n " -msgstr[1] "\n Esto también eliminará %(descendant_count)s subpáginas más.\n " #: templates/wagtailadmin/pages/confirm_delete.html:22 msgid "" "Alternatively you can unpublish the page. This removes the page from public " "view and you can edit or publish it again later." -msgstr "Otra opción es no publicar la página. Esto no permite que el público la vea y la puedes editar o volver a publicar más tarde." +msgstr "" +"Otra opción es no publicar la página. Esto no permite que el público la vea " +"y la puedes editar o volver a publicar más tarde." #: templates/wagtailadmin/pages/confirm_delete.html:26 msgid "Delete it" @@ -628,7 +691,9 @@ msgstr "Estás seguro de que quieres mover esta página a dentro de '%(title)s'? msgid "" "Are you sure you want to move this page and all of its children into " "'%(title)s'?" -msgstr "Estás seguro de que quieres mover esta página y todas sus páginas hijas a '%(title)s'?" +msgstr "" +"Estás seguro de que quieres mover esta página y todas sus páginas hijas a " +"'%(title)s'?" #: templates/wagtailadmin/pages/confirm_move.html:18 msgid "Yes, move this page" @@ -855,7 +920,10 @@ msgid "" "\n" " Page %(page_number)s of %(num_pages)s.\n" " " -msgstr "\n Página %(page_number)s de %(num_pages)s.\n " +msgstr "" +"\n" +" Página %(page_number)s de %(num_pages)s.\n" +" " #: templates/wagtailadmin/pages/search_results.html:54 #, python-format @@ -994,66 +1062,66 @@ msgstr "¡Tu contraseña ha sido cambiada con éxito!" msgid "Your preferences have been updated successfully!" msgstr "" -#: views/pages.py:169 views/pages.py:286 +#: views/pages.py:167 views/pages.py:284 msgid "Go live date/time must be before expiry date/time" msgstr "" -#: views/pages.py:179 views/pages.py:296 +#: views/pages.py:177 views/pages.py:294 msgid "Expiry date/time must be in the future" msgstr "" -#: views/pages.py:219 views/pages.py:351 views/pages.py:791 +#: views/pages.py:217 views/pages.py:349 views/pages.py:766 msgid "Page '{0}' published." msgstr "Página '{0}' publicada." -#: views/pages.py:221 views/pages.py:353 +#: views/pages.py:219 views/pages.py:351 msgid "Page '{0}' submitted for moderation." msgstr "Página '{0}' enviada para ser moderada." -#: views/pages.py:224 +#: views/pages.py:222 msgid "Page '{0}' created." msgstr "Página '{0}' creada." -#: views/pages.py:233 +#: views/pages.py:231 msgid "The page could not be created due to validation errors" msgstr "" -#: views/pages.py:356 +#: views/pages.py:354 msgid "Page '{0}' updated." msgstr "Página '{0}' actualizada." -#: views/pages.py:365 +#: views/pages.py:363 msgid "The page could not be saved due to validation errors" msgstr "La página no ha podido ser guardada debido a errores de validación" -#: views/pages.py:378 +#: views/pages.py:376 msgid "This page is currently awaiting moderation" msgstr "La página está a la espera de ser moderada" -#: views/pages.py:409 +#: views/pages.py:407 msgid "Page '{0}' deleted." msgstr "Página '{0}' eliminada." -#: views/pages.py:575 +#: views/pages.py:550 msgid "Page '{0}' unpublished." msgstr "Página '{0}' no publicada." -#: views/pages.py:627 +#: views/pages.py:602 msgid "Page '{0}' moved." msgstr "Página '{0}' movida." -#: views/pages.py:709 +#: views/pages.py:684 msgid "Page '{0}' and {1} subpages copied." msgstr "" -#: views/pages.py:711 +#: views/pages.py:686 msgid "Page '{0}' copied." msgstr "" -#: views/pages.py:785 views/pages.py:804 views/pages.py:824 +#: views/pages.py:760 views/pages.py:779 views/pages.py:799 msgid "The page '{0}' is not currently awaiting moderation." msgstr "La página '{0}' no está esperando a ser moderada." -#: views/pages.py:810 +#: views/pages.py:785 msgid "Page '{0}' rejected for publication." msgstr "Rechazada la publicación de la página '{0}'." diff --git a/wagtail/wagtailadmin/locale/eu/LC_MESSAGES/django.po b/wagtail/wagtailadmin/locale/eu/LC_MESSAGES/django.po index 85ab69320a..6e2facaa02 100644 --- a/wagtail/wagtailadmin/locale/eu/LC_MESSAGES/django.po +++ b/wagtail/wagtailadmin/locale/eu/LC_MESSAGES/django.po @@ -1,28 +1,29 @@ # SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. -# +# # Translators: # Unai Zalakain , 2014 msgid "" msgstr "" "Project-Id-Version: Wagtail\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2014-08-01 16:38+0100\n" +"POT-Creation-Date: 2014-09-11 16:37+0100\n" "PO-Revision-Date: 2014-08-01 15:43+0000\n" "Last-Translator: Karl Hobley \n" -"Language-Team: Basque (http://www.transifex.com/projects/p/wagtail/language/eu/)\n" +"Language-Team: Basque (http://www.transifex.com/projects/p/wagtail/language/" +"eu/)\n" +"Language: eu\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"Language: eu\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: edit_handlers.py:627 +#: edit_handlers.py:631 msgid "Scheduled publishing" msgstr "" -#: edit_handlers.py:641 +#: edit_handlers.py:645 msgid "Common page configuration" msgstr "" @@ -50,7 +51,9 @@ msgstr "Idatzi zure eposta helbidea mesedez." msgid "" "Sorry, you cannot reset your password here as your user account is managed " "by another server." -msgstr "Sentitzen dugu, ezin duzu zure pasahitza hemen berrezarri zure kontua beste zerbitzari batek kudeatzen duelako." +msgstr "" +"Sentitzen dugu, ezin duzu zure pasahitza hemen berrezarri zure kontua beste " +"zerbitzari batek kudeatzen duelako." #: forms.py:76 msgid "This email address is not recognised." @@ -98,7 +101,7 @@ msgid_plural "" msgstr[0] "" msgstr[1] "" -#: forms.py:124 views/pages.py:155 views/pages.py:272 +#: forms.py:124 views/pages.py:153 views/pages.py:270 msgid "This slug is already in use" msgstr "" @@ -115,6 +118,16 @@ msgstr "" msgid "This field is required." msgstr "" +#: wagtail_hooks.py:15 templates/wagtailadmin/chooser/_search_results.html:12 +msgid "Explorer" +msgstr "Arakatzailea" + +#: wagtail_hooks.py:23 templates/wagtailadmin/chooser/_search_form.html:7 +#: templates/wagtailadmin/pages/search.html:3 +#: templates/wagtailadmin/pages/search.html:16 +msgid "Search" +msgstr "Bilatu" + #: templates/wagtailadmin/base.html:7 templates/wagtailadmin/home.html:4 msgid "Dashboard" msgstr "Kontrol panela" @@ -132,7 +145,9 @@ msgstr "Ongi etorri %(site_name)s Wagtail CMSra" msgid "" "This is your dashboard on which helpful information about content you've " "created will be displayed." -msgstr "Kontrol panel honetan sortu duzun edukiekin erlazionaturiko informazio baliagarria agertuko da." +msgstr "" +"Kontrol panel honetan sortu duzun edukiekin erlazionaturiko informazio " +"baliagarria agertuko da." #: templates/wagtailadmin/login.html:4 templates/wagtailadmin/login.html:59 msgid "Sign in" @@ -140,7 +155,9 @@ msgstr "" #: templates/wagtailadmin/login.html:18 msgid "Your username and password didn't match. Please try again." -msgstr "Zure erabiltzaileak eta pasahitzak ez dute bat egin. Mesedez saiatu beranduago." +msgstr "" +"Zure erabiltzaileak eta pasahitzak ez dute bat egin. Mesedez saiatu " +"beranduago." #: templates/wagtailadmin/login.html:26 msgid "Sign in to Wagtail" @@ -164,7 +181,10 @@ msgid "" "Your avatar image is provided by Gravatar and is connected to your email " "address. With a Gravatar account you can set an avatar for any number of " "other email addresses you use." -msgstr "Zure avatar irudia Gravatar-ek hornitzen du eta zure eposta helbidera konektatua dago. Gravatar kontu batekin erabiltzen duzun eposta helbide bakoitzeko avatar bat ezarri dezakezu." +msgstr "" +"Zure avatar irudia Gravatar-ek hornitzen du eta zure eposta helbidera " +"konektatua dago. Gravatar kontu batekin erabiltzen duzun eposta helbide " +"bakoitzeko avatar bat ezarri dezakezu." #: templates/wagtailadmin/account/account.html:25 #: templates/wagtailadmin/account/change_password.html:4 @@ -191,7 +211,8 @@ msgstr "" #: templates/wagtailadmin/account/change_password.html:21 msgid "" "Your password can't be changed here. Please contact a site administrator." -msgstr "Zure pasahitza ezin da hemen aldatu. Mesedez kontaktatu administratzailea." +msgstr "" +"Zure pasahitza ezin da hemen aldatu. Mesedez kontaktatu administratzailea." #: templates/wagtailadmin/account/notification_preferences.html:4 #: templates/wagtailadmin/account/notification_preferences.html:6 @@ -262,19 +283,16 @@ msgstr "Kanpo esteka" msgid "Email link" msgstr "Eposta esteka" -#: templates/wagtailadmin/chooser/_search_form.html:7 -#: templates/wagtailadmin/pages/search.html:3 -#: templates/wagtailadmin/pages/search.html:16 -#: templatetags/wagtailadmin_tags.py:36 -msgid "Search" -msgstr "Bilatu" +#: templates/wagtailadmin/chooser/_search_results.html:5 +#, python-format +msgid "" +"\n" +" Only pages of type \"%(type)s\" may be chosen for this field. " +"Search results will exclude pages of other types.\n" +" " +msgstr "" -#: templates/wagtailadmin/chooser/_search_results.html:3 -#: templatetags/wagtailadmin_tags.py:35 -msgid "Explorer" -msgstr "Arakatzailea" - -#: templates/wagtailadmin/chooser/_search_results.html:8 +#: templates/wagtailadmin/chooser/_search_results.html:16 #, python-format msgid "" "\n" @@ -287,7 +305,12 @@ msgid_plural "" msgstr[0] "" msgstr[1] "" -#: templates/wagtailadmin/chooser/browse.html:2 +#: templates/wagtailadmin/chooser/browse.html:3 +#, fuzzy +msgid "Choose" +msgstr "Orrialde bat aukeratu" + +#: templates/wagtailadmin/chooser/browse.html:6 #: templates/wagtailadmin/chooser/search.html:2 #: templates/wagtailadmin/edit_handlers/page_chooser_panel.html:13 msgid "Choose a page" @@ -532,14 +555,15 @@ msgid "You can edit the privacy settings on:" msgstr "" #: templates/wagtailadmin/page_privacy/set_privacy.html:6 -msgid "Note: privacy changes apply to all children of this page too." +msgid "Privacy changes apply to all children of this page too." msgstr "" #: templates/wagtailadmin/pages/_moderator_userbar.html:4 #, python-format msgid "" "\n" -" Previewing '%(title)s', submitted by %(submitted_by)s on %(submitted_on)s.\n" +" Previewing '%(title)s', submitted by %(submitted_by)s on " +"%(submitted_on)s.\n" " " msgstr "" @@ -587,7 +611,8 @@ msgid "" " " msgid_plural "" "\n" -" This will also delete %(descendant_count)s more subpages.\n" +" This will also delete %(descendant_count)s more " +"subpages.\n" " " msgstr[0] "" msgstr[1] "" @@ -993,66 +1018,66 @@ msgstr "" msgid "Your preferences have been updated successfully!" msgstr "" -#: views/pages.py:169 views/pages.py:286 +#: views/pages.py:167 views/pages.py:284 msgid "Go live date/time must be before expiry date/time" msgstr "" -#: views/pages.py:179 views/pages.py:296 +#: views/pages.py:177 views/pages.py:294 msgid "Expiry date/time must be in the future" msgstr "" -#: views/pages.py:219 views/pages.py:351 views/pages.py:791 +#: views/pages.py:217 views/pages.py:349 views/pages.py:766 msgid "Page '{0}' published." msgstr "" -#: views/pages.py:221 views/pages.py:353 +#: views/pages.py:219 views/pages.py:351 msgid "Page '{0}' submitted for moderation." msgstr "" -#: views/pages.py:224 +#: views/pages.py:222 msgid "Page '{0}' created." msgstr "" -#: views/pages.py:233 +#: views/pages.py:231 msgid "The page could not be created due to validation errors" msgstr "" -#: views/pages.py:356 +#: views/pages.py:354 msgid "Page '{0}' updated." msgstr "" -#: views/pages.py:365 +#: views/pages.py:363 msgid "The page could not be saved due to validation errors" msgstr "" -#: views/pages.py:378 +#: views/pages.py:376 msgid "This page is currently awaiting moderation" msgstr "" -#: views/pages.py:409 +#: views/pages.py:407 msgid "Page '{0}' deleted." msgstr "" -#: views/pages.py:575 +#: views/pages.py:550 msgid "Page '{0}' unpublished." msgstr "" -#: views/pages.py:627 +#: views/pages.py:602 msgid "Page '{0}' moved." msgstr "" -#: views/pages.py:709 +#: views/pages.py:684 msgid "Page '{0}' and {1} subpages copied." msgstr "" -#: views/pages.py:711 +#: views/pages.py:686 msgid "Page '{0}' copied." msgstr "" -#: views/pages.py:785 views/pages.py:804 views/pages.py:824 +#: views/pages.py:760 views/pages.py:779 views/pages.py:799 msgid "The page '{0}' is not currently awaiting moderation." msgstr "" -#: views/pages.py:810 +#: views/pages.py:785 msgid "Page '{0}' rejected for publication." msgstr "" diff --git a/wagtail/wagtailadmin/locale/fr/LC_MESSAGES/django.po b/wagtail/wagtailadmin/locale/fr/LC_MESSAGES/django.po index 8e10df1d29..2fc201c261 100644 --- a/wagtail/wagtailadmin/locale/fr/LC_MESSAGES/django.po +++ b/wagtail/wagtailadmin/locale/fr/LC_MESSAGES/django.po @@ -1,28 +1,29 @@ # SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. -# +# # Translators: # nahuel, 2014 msgid "" msgstr "" "Project-Id-Version: Wagtail\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2014-08-01 16:38+0100\n" +"POT-Creation-Date: 2014-09-11 16:37+0100\n" "PO-Revision-Date: 2014-08-01 15:43+0000\n" "Last-Translator: Karl Hobley \n" -"Language-Team: French (http://www.transifex.com/projects/p/wagtail/language/fr/)\n" +"Language-Team: French (http://www.transifex.com/projects/p/wagtail/language/" +"fr/)\n" +"Language: fr\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"Language: fr\n" "Plural-Forms: nplurals=2; plural=(n > 1);\n" -#: edit_handlers.py:627 +#: edit_handlers.py:631 msgid "Scheduled publishing" msgstr "" -#: edit_handlers.py:641 +#: edit_handlers.py:645 msgid "Common page configuration" msgstr "" @@ -50,7 +51,9 @@ msgstr "Entrez votre adresse e-mail." msgid "" "Sorry, you cannot reset your password here as your user account is managed " "by another server." -msgstr "Désolé, vous ne pouvez pas réinitialiser votre mot de passe ici alors que votre compte utilisateur est géré par un autre serveur." +msgstr "" +"Désolé, vous ne pouvez pas réinitialiser votre mot de passe ici alors que " +"votre compte utilisateur est géré par un autre serveur." #: forms.py:76 msgid "This email address is not recognised." @@ -98,7 +101,7 @@ msgid_plural "" msgstr[0] "" msgstr[1] "" -#: forms.py:124 views/pages.py:155 views/pages.py:272 +#: forms.py:124 views/pages.py:153 views/pages.py:270 msgid "This slug is already in use" msgstr "" @@ -115,6 +118,16 @@ msgstr "" msgid "This field is required." msgstr "" +#: wagtail_hooks.py:15 templates/wagtailadmin/chooser/_search_results.html:12 +msgid "Explorer" +msgstr "" + +#: wagtail_hooks.py:23 templates/wagtailadmin/chooser/_search_form.html:7 +#: templates/wagtailadmin/pages/search.html:3 +#: templates/wagtailadmin/pages/search.html:16 +msgid "Search" +msgstr "" + #: templates/wagtailadmin/base.html:7 templates/wagtailadmin/home.html:4 msgid "Dashboard" msgstr "Tableau de bord" @@ -132,7 +145,9 @@ msgstr "" msgid "" "This is your dashboard on which helpful information about content you've " "created will be displayed." -msgstr "Ceci est votre tableau de bord sur lequel des informations importantes sur le contenu que vous avez créé seront affichées." +msgstr "" +"Ceci est votre tableau de bord sur lequel des informations importantes sur " +"le contenu que vous avez créé seront affichées." #: templates/wagtailadmin/login.html:4 templates/wagtailadmin/login.html:59 msgid "Sign in" @@ -140,7 +155,8 @@ msgstr "S'identifier" #: templates/wagtailadmin/login.html:18 msgid "Your username and password didn't match. Please try again." -msgstr "Vos identifiant et mot de passe ne correspondent pas. Essayez de nouveau." +msgstr "" +"Vos identifiant et mot de passe ne correspondent pas. Essayez de nouveau." #: templates/wagtailadmin/login.html:26 msgid "Sign in to Wagtail" @@ -164,7 +180,10 @@ msgid "" "Your avatar image is provided by Gravatar and is connected to your email " "address. With a Gravatar account you can set an avatar for any number of " "other email addresses you use." -msgstr "Votre avatar est fourni par Gravatar et est relié à votre adresse e-mail. Avec un compte Gravatar vous pouvez définir un avatar pour toutes les adresses e-mail que vous utilisez." +msgstr "" +"Votre avatar est fourni par Gravatar et est relié à votre adresse e-mail. " +"Avec un compte Gravatar vous pouvez définir un avatar pour toutes les " +"adresses e-mail que vous utilisez." #: templates/wagtailadmin/account/account.html:25 #: templates/wagtailadmin/account/change_password.html:4 @@ -191,7 +210,8 @@ msgstr "" #: templates/wagtailadmin/account/change_password.html:21 msgid "" "Your password can't be changed here. Please contact a site administrator." -msgstr "Votre mot de passe ne peut être changé ici. Contactez un administrateur." +msgstr "" +"Votre mot de passe ne peut être changé ici. Contactez un administrateur." #: templates/wagtailadmin/account/notification_preferences.html:4 #: templates/wagtailadmin/account/notification_preferences.html:6 @@ -262,19 +282,16 @@ msgstr "Lien externe" msgid "Email link" msgstr "" -#: templates/wagtailadmin/chooser/_search_form.html:7 -#: templates/wagtailadmin/pages/search.html:3 -#: templates/wagtailadmin/pages/search.html:16 -#: templatetags/wagtailadmin_tags.py:36 -msgid "Search" +#: templates/wagtailadmin/chooser/_search_results.html:5 +#, python-format +msgid "" +"\n" +" Only pages of type \"%(type)s\" may be chosen for this field. " +"Search results will exclude pages of other types.\n" +" " msgstr "" -#: templates/wagtailadmin/chooser/_search_results.html:3 -#: templatetags/wagtailadmin_tags.py:35 -msgid "Explorer" -msgstr "" - -#: templates/wagtailadmin/chooser/_search_results.html:8 +#: templates/wagtailadmin/chooser/_search_results.html:16 #, python-format msgid "" "\n" @@ -287,7 +304,12 @@ msgid_plural "" msgstr[0] "" msgstr[1] "" -#: templates/wagtailadmin/chooser/browse.html:2 +#: templates/wagtailadmin/chooser/browse.html:3 +#, fuzzy +msgid "Choose" +msgstr "Choisissez une page" + +#: templates/wagtailadmin/chooser/browse.html:6 #: templates/wagtailadmin/chooser/search.html:2 #: templates/wagtailadmin/edit_handlers/page_chooser_panel.html:13 msgid "Choose a page" @@ -442,8 +464,14 @@ msgid_plural "" "\n" " %(total_pages)s Pages\n" " " -msgstr[0] "\n %(total_pages)s page\n " -msgstr[1] "\n %(total_pages)s pages\n " +msgstr[0] "" +"\n" +" %(total_pages)s page\n" +" " +msgstr[1] "" +"\n" +" %(total_pages)s pages\n" +" " #: templates/wagtailadmin/home/site_summary.html:16 #, python-format @@ -455,8 +483,14 @@ msgid_plural "" "\n" " %(total_images)s Images\n" " " -msgstr[0] "\n %(total_images)s image\n " -msgstr[1] "\n %(total_images)s images\n " +msgstr[0] "" +"\n" +" %(total_images)s image\n" +" " +msgstr[1] "" +"\n" +" %(total_images)s images\n" +" " #: templates/wagtailadmin/home/site_summary.html:25 #, python-format @@ -468,8 +502,14 @@ msgid_plural "" "\n" " %(total_docs)s Documents\n" " " -msgstr[0] "\n %(total_docs)s document\n " -msgstr[1] "\n %(total_docs)s documents\n " +msgstr[0] "" +"\n" +" %(total_docs)s document\n" +" " +msgstr[1] "" +"\n" +" %(total_docs)s documents\n" +" " #: templates/wagtailadmin/notifications/approved.html:1 #, python-format @@ -532,16 +572,21 @@ msgid "You can edit the privacy settings on:" msgstr "" #: templates/wagtailadmin/page_privacy/set_privacy.html:6 -msgid "Note: privacy changes apply to all children of this page too." +msgid "Privacy changes apply to all children of this page too." msgstr "" #: templates/wagtailadmin/pages/_moderator_userbar.html:4 #, python-format msgid "" "\n" -" Previewing '%(title)s', submitted by %(submitted_by)s on %(submitted_on)s.\n" +" Previewing '%(title)s', submitted by %(submitted_by)s on " +"%(submitted_on)s.\n" +" " +msgstr "" +"\n" +" Prévisualisation de '%(title)s', soumis par %(submitted_by)s le " +"%(submitted_on)s.\n" " " -msgstr "\n Prévisualisation de '%(title)s', soumis par %(submitted_by)s le %(submitted_on)s.\n " #: templates/wagtailadmin/pages/_privacy_indicator.html:9 msgid "Privacy" @@ -587,16 +632,26 @@ msgid "" " " msgid_plural "" "\n" -" This will also delete %(descendant_count)s more subpages.\n" +" This will also delete %(descendant_count)s more " +"subpages.\n" +" " +msgstr[0] "" +"\n" +" Ceci supprime aussi une sous-pages supplémentaire.\n" +" " +msgstr[1] "" +"\n" +" Ceci supprimer aussi %(descendant_count)s sous-pages " +"supplémentaires.\n" " " -msgstr[0] "\n Ceci supprime aussi une sous-pages supplémentaire.\n " -msgstr[1] "\n Ceci supprimer aussi %(descendant_count)s sous-pages supplémentaires.\n " #: templates/wagtailadmin/pages/confirm_delete.html:22 msgid "" "Alternatively you can unpublish the page. This removes the page from public " "view and you can edit or publish it again later." -msgstr "Vous pouvez également dé-publier la page. Cela enlèvera la page des vues publiques et vous pourrez l'éditer ou la publier de nouveau plus tard." +msgstr "" +"Vous pouvez également dé-publier la page. Cela enlèvera la page des vues " +"publiques et vous pourrez l'éditer ou la publier de nouveau plus tard." #: templates/wagtailadmin/pages/confirm_delete.html:26 msgid "Delete it" @@ -627,7 +682,9 @@ msgstr "Êtes-vous sûr de vouloir déplacer cette page dans '%(title)s'?" msgid "" "Are you sure you want to move this page and all of its children into " "'%(title)s'?" -msgstr "Êtes-vous sûr de vouloir déplacer cette page et l'ensemble de ses enfants dans '%(title)s'?" +msgstr "" +"Êtes-vous sûr de vouloir déplacer cette page et l'ensemble de ses enfants " +"dans '%(title)s'?" #: templates/wagtailadmin/pages/confirm_move.html:18 msgid "Yes, move this page" @@ -854,7 +911,10 @@ msgid "" "\n" " Page %(page_number)s of %(num_pages)s.\n" " " -msgstr "\n Page %(page_number)s sur %(num_pages)s.\n " +msgstr "" +"\n" +" Page %(page_number)s sur %(num_pages)s.\n" +" " #: templates/wagtailadmin/pages/search_results.html:54 #, python-format @@ -993,66 +1053,66 @@ msgstr "Votre mot de passe a été changé avec succès!" msgid "Your preferences have been updated successfully!" msgstr "" -#: views/pages.py:169 views/pages.py:286 +#: views/pages.py:167 views/pages.py:284 msgid "Go live date/time must be before expiry date/time" msgstr "" -#: views/pages.py:179 views/pages.py:296 +#: views/pages.py:177 views/pages.py:294 msgid "Expiry date/time must be in the future" msgstr "" -#: views/pages.py:219 views/pages.py:351 views/pages.py:791 +#: views/pages.py:217 views/pages.py:349 views/pages.py:766 msgid "Page '{0}' published." msgstr "Page '{0}' publiée." -#: views/pages.py:221 views/pages.py:353 +#: views/pages.py:219 views/pages.py:351 msgid "Page '{0}' submitted for moderation." msgstr "Page '{0}' soumise pour modération." -#: views/pages.py:224 +#: views/pages.py:222 msgid "Page '{0}' created." msgstr "Page '{0}' créée." -#: views/pages.py:233 +#: views/pages.py:231 msgid "The page could not be created due to validation errors" msgstr "" -#: views/pages.py:356 +#: views/pages.py:354 msgid "Page '{0}' updated." msgstr "Page '{0}' mise à jour." -#: views/pages.py:365 +#: views/pages.py:363 msgid "The page could not be saved due to validation errors" msgstr "La page n'a pu être enregistré à cause d'erreurs de validation." -#: views/pages.py:378 +#: views/pages.py:376 msgid "This page is currently awaiting moderation" msgstr "Cette page est actuellement en attente de modération" -#: views/pages.py:409 +#: views/pages.py:407 msgid "Page '{0}' deleted." msgstr "Page '{0}' supprimée." -#: views/pages.py:575 +#: views/pages.py:550 msgid "Page '{0}' unpublished." msgstr "Page '{0}' dé-publiée." -#: views/pages.py:627 +#: views/pages.py:602 msgid "Page '{0}' moved." msgstr "Page '{0}' déplacée." -#: views/pages.py:709 +#: views/pages.py:684 msgid "Page '{0}' and {1} subpages copied." msgstr "" -#: views/pages.py:711 +#: views/pages.py:686 msgid "Page '{0}' copied." msgstr "" -#: views/pages.py:785 views/pages.py:804 views/pages.py:824 +#: views/pages.py:760 views/pages.py:779 views/pages.py:799 msgid "The page '{0}' is not currently awaiting moderation." msgstr "La page '{0}' est actuellement en attente de modération." -#: views/pages.py:810 +#: views/pages.py:785 msgid "Page '{0}' rejected for publication." msgstr "Page '{0}' refusée à la publication." diff --git a/wagtail/wagtailadmin/locale/gl/LC_MESSAGES/django.po b/wagtail/wagtailadmin/locale/gl/LC_MESSAGES/django.po index b589564232..15dfaa06ed 100644 --- a/wagtail/wagtailadmin/locale/gl/LC_MESSAGES/django.po +++ b/wagtail/wagtailadmin/locale/gl/LC_MESSAGES/django.po @@ -1,7 +1,7 @@ # SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. -# +# # Translators: # fooflare , 2014 # fooflare , 2014 @@ -9,21 +9,22 @@ msgid "" msgstr "" "Project-Id-Version: Wagtail\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2014-08-01 16:38+0100\n" +"POT-Creation-Date: 2014-09-11 16:37+0100\n" "PO-Revision-Date: 2014-08-01 15:43+0000\n" "Last-Translator: Karl Hobley \n" -"Language-Team: Galician (http://www.transifex.com/projects/p/wagtail/language/gl/)\n" +"Language-Team: Galician (http://www.transifex.com/projects/p/wagtail/" +"language/gl/)\n" +"Language: gl\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"Language: gl\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: edit_handlers.py:627 +#: edit_handlers.py:631 msgid "Scheduled publishing" msgstr "" -#: edit_handlers.py:641 +#: edit_handlers.py:645 msgid "Common page configuration" msgstr "Configuración común de páxina" @@ -51,7 +52,9 @@ msgstr "Por favor, enche a túa dirección de correo." msgid "" "Sorry, you cannot reset your password here as your user account is managed " "by another server." -msgstr "Sentímolo, non podes restablecer o teu contrasinal aquí porque a túa conta é xestionada por outro servidor." +msgstr "" +"Sentímolo, non podes restablecer o teu contrasinal aquí porque a túa conta é " +"xestionada por outro servidor." #: forms.py:76 msgid "This email address is not recognised." @@ -99,7 +102,7 @@ msgid_plural "" msgstr[0] "" msgstr[1] "" -#: forms.py:124 views/pages.py:155 views/pages.py:272 +#: forms.py:124 views/pages.py:153 views/pages.py:270 msgid "This slug is already in use" msgstr "Este slug ya está en uso" @@ -116,6 +119,16 @@ msgstr "" msgid "This field is required." msgstr "" +#: wagtail_hooks.py:15 templates/wagtailadmin/chooser/_search_results.html:12 +msgid "Explorer" +msgstr "Explorador" + +#: wagtail_hooks.py:23 templates/wagtailadmin/chooser/_search_form.html:7 +#: templates/wagtailadmin/pages/search.html:3 +#: templates/wagtailadmin/pages/search.html:16 +msgid "Search" +msgstr "Busca" + #: templates/wagtailadmin/base.html:7 templates/wagtailadmin/home.html:4 msgid "Dashboard" msgstr "Panel de control" @@ -133,7 +146,9 @@ msgstr "Benvido ao CMS Wagtail %(site_name)s" msgid "" "This is your dashboard on which helpful information about content you've " "created will be displayed." -msgstr "Este é o teu panel de control onde aparecerá información útil sobre o contido que creaches." +msgstr "" +"Este é o teu panel de control onde aparecerá información útil sobre o " +"contido que creaches." #: templates/wagtailadmin/login.html:4 templates/wagtailadmin/login.html:59 msgid "Sign in" @@ -165,7 +180,10 @@ msgid "" "Your avatar image is provided by Gravatar and is connected to your email " "address. With a Gravatar account you can set an avatar for any number of " "other email addresses you use." -msgstr "O teu avatar é provisto por Gravatar e está conectado á túa dirección de correo. Cunha conta Gravatar podes establecer un avatar para calquera número de correos electrónicos." +msgstr "" +"O teu avatar é provisto por Gravatar e está conectado á túa dirección de " +"correo. Cunha conta Gravatar podes establecer un avatar para calquera número " +"de correos electrónicos." #: templates/wagtailadmin/account/account.html:25 #: templates/wagtailadmin/account/change_password.html:4 @@ -192,7 +210,9 @@ msgstr "Cambiar Contrasinal" #: templates/wagtailadmin/account/change_password.html:21 msgid "" "Your password can't be changed here. Please contact a site administrator." -msgstr "O teu contrasinal non pode cambiarse aquí. Por favor, contacta co administrador." +msgstr "" +"O teu contrasinal non pode cambiarse aquí. Por favor, contacta co " +"administrador." #: templates/wagtailadmin/account/notification_preferences.html:4 #: templates/wagtailadmin/account/notification_preferences.html:6 @@ -234,11 +254,14 @@ msgstr "Revisa o teu correo electrónico" #: templates/wagtailadmin/account/password_reset/done.html:16 msgid "A link to reset your password has been emailed to you." -msgstr "Unha ligazón para restablecer o teu contrasinal foiche enviado por correo electrónico." +msgstr "" +"Unha ligazón para restablecer o teu contrasinal foiche enviado por correo " +"electrónico." #: templates/wagtailadmin/account/password_reset/email.txt:2 msgid "Please follow the link below to reset your password" -msgstr "Por favor, segue a ligazón de abaixo para restablecer e teu contrasinal" +msgstr "" +"Por favor, segue a ligazón de abaixo para restablecer e teu contrasinal" #: templates/wagtailadmin/account/password_reset/email_subject.txt:2 msgid "Password reset" @@ -263,19 +286,16 @@ msgstr "Ligazón externa" msgid "Email link" msgstr "Ligazón de correo electrónico" -#: templates/wagtailadmin/chooser/_search_form.html:7 -#: templates/wagtailadmin/pages/search.html:3 -#: templates/wagtailadmin/pages/search.html:16 -#: templatetags/wagtailadmin_tags.py:36 -msgid "Search" -msgstr "Busca" +#: templates/wagtailadmin/chooser/_search_results.html:5 +#, python-format +msgid "" +"\n" +" Only pages of type \"%(type)s\" may be chosen for this field. " +"Search results will exclude pages of other types.\n" +" " +msgstr "" -#: templates/wagtailadmin/chooser/_search_results.html:3 -#: templatetags/wagtailadmin_tags.py:35 -msgid "Explorer" -msgstr "Explorador" - -#: templates/wagtailadmin/chooser/_search_results.html:8 +#: templates/wagtailadmin/chooser/_search_results.html:16 #, python-format msgid "" "\n" @@ -285,10 +305,21 @@ msgid_plural "" "\n" " There are %(counter)s matches\n" " " -msgstr[0] "\n Hai unha coincidencia\n " -msgstr[1] "\n Hai %(counter)s coincidencias\n " +msgstr[0] "" +"\n" +" Hai unha coincidencia\n" +" " +msgstr[1] "" +"\n" +" Hai %(counter)s coincidencias\n" +" " -#: templates/wagtailadmin/chooser/browse.html:2 +#: templates/wagtailadmin/chooser/browse.html:3 +#, fuzzy +msgid "Choose" +msgstr "Elixe unha páxina" + +#: templates/wagtailadmin/chooser/browse.html:6 #: templates/wagtailadmin/chooser/search.html:2 #: templates/wagtailadmin/edit_handlers/page_chooser_panel.html:13 msgid "Choose a page" @@ -443,8 +474,14 @@ msgid_plural "" "\n" " %(total_pages)s Pages\n" " " -msgstr[0] "\n %(total_pages)s Páxina\n " -msgstr[1] "\n %(total_pages)s Páginas\n " +msgstr[0] "" +"\n" +" %(total_pages)s Páxina\n" +" " +msgstr[1] "" +"\n" +" %(total_pages)s Páginas\n" +" " #: templates/wagtailadmin/home/site_summary.html:16 #, python-format @@ -456,8 +493,14 @@ msgid_plural "" "\n" " %(total_images)s Images\n" " " -msgstr[0] "\n %(total_images)s Imaxe\n " -msgstr[1] "\n %(total_images)s Imágenes\n " +msgstr[0] "" +"\n" +" %(total_images)s Imaxe\n" +" " +msgstr[1] "" +"\n" +" %(total_images)s Imágenes\n" +" " #: templates/wagtailadmin/home/site_summary.html:25 #, python-format @@ -469,8 +512,14 @@ msgid_plural "" "\n" " %(total_docs)s Documents\n" " " -msgstr[0] "\n %(total_docs)s Documento\n " -msgstr[1] "\n %(total_docs)s Documentos\n " +msgstr[0] "" +"\n" +" %(total_docs)s Documento\n" +" " +msgstr[1] "" +"\n" +" %(total_docs)s Documentos\n" +" " #: templates/wagtailadmin/notifications/approved.html:1 #, python-format @@ -533,16 +582,21 @@ msgid "You can edit the privacy settings on:" msgstr "" #: templates/wagtailadmin/page_privacy/set_privacy.html:6 -msgid "Note: privacy changes apply to all children of this page too." +msgid "Privacy changes apply to all children of this page too." msgstr "" #: templates/wagtailadmin/pages/_moderator_userbar.html:4 #, python-format msgid "" "\n" -" Previewing '%(title)s', submitted by %(submitted_by)s on %(submitted_on)s.\n" +" Previewing '%(title)s', submitted by %(submitted_by)s on " +"%(submitted_on)s.\n" +" " +msgstr "" +"\n" +" Previsualizando '%(title)s', enviada por %(submitted_by)s en " +"%(submitted_on)s.\n" " " -msgstr "\n Previsualizando '%(title)s', enviada por %(submitted_by)s en %(submitted_on)s.\n " #: templates/wagtailadmin/pages/_privacy_indicator.html:9 msgid "Privacy" @@ -588,16 +642,26 @@ msgid "" " " msgid_plural "" "\n" -" This will also delete %(descendant_count)s more subpages.\n" +" This will also delete %(descendant_count)s more " +"subpages.\n" +" " +msgstr[0] "" +"\n" +" Isto tamén eliminará outra subpáxina.\n" +" " +msgstr[1] "" +"\n" +" Isto tamén eliminará %(descendant_count)s subpáxinas " +"máis.\n" " " -msgstr[0] "\n Isto tamén eliminará outra subpáxina.\n " -msgstr[1] "\n Isto tamén eliminará %(descendant_count)s subpáxinas máis.\n " #: templates/wagtailadmin/pages/confirm_delete.html:22 msgid "" "Alternatively you can unpublish the page. This removes the page from public " "view and you can edit or publish it again later." -msgstr "Outra opción é non publicar a páxina. Isto non permite que o público a vexa e a podes editar ou voltar a publicala máis tarde." +msgstr "" +"Outra opción é non publicar a páxina. Isto non permite que o público a vexa " +"e a podes editar ou voltar a publicala máis tarde." #: templates/wagtailadmin/pages/confirm_delete.html:26 msgid "Delete it" @@ -628,7 +692,9 @@ msgstr "¿Seguro que queres mover esta páxina a '%(title)s'?" msgid "" "Are you sure you want to move this page and all of its children into " "'%(title)s'?" -msgstr "¿Seguro que queres mover esta páxina e todas as súas páxinas filla a '%(title)s'?" +msgstr "" +"¿Seguro que queres mover esta páxina e todas as súas páxinas filla a " +"'%(title)s'?" #: templates/wagtailadmin/pages/confirm_move.html:18 msgid "Yes, move this page" @@ -855,7 +921,10 @@ msgid "" "\n" " Page %(page_number)s of %(num_pages)s.\n" " " -msgstr "\n Páxina %(page_number)s de %(num_pages)s.\n " +msgstr "" +"\n" +" Páxina %(page_number)s de %(num_pages)s.\n" +" " #: templates/wagtailadmin/pages/search_results.html:54 #, python-format @@ -994,66 +1063,66 @@ msgstr "¡O teu contrasinal foi cambiado correctamente!" msgid "Your preferences have been updated successfully!" msgstr "" -#: views/pages.py:169 views/pages.py:286 +#: views/pages.py:167 views/pages.py:284 msgid "Go live date/time must be before expiry date/time" msgstr "" -#: views/pages.py:179 views/pages.py:296 +#: views/pages.py:177 views/pages.py:294 msgid "Expiry date/time must be in the future" msgstr "" -#: views/pages.py:219 views/pages.py:351 views/pages.py:791 +#: views/pages.py:217 views/pages.py:349 views/pages.py:766 msgid "Page '{0}' published." msgstr "Páxina '{0}' publicada." -#: views/pages.py:221 views/pages.py:353 +#: views/pages.py:219 views/pages.py:351 msgid "Page '{0}' submitted for moderation." msgstr "Páxina '{0}' enviada para ser moderada." -#: views/pages.py:224 +#: views/pages.py:222 msgid "Page '{0}' created." msgstr "Páxina '{0}' creada." -#: views/pages.py:233 +#: views/pages.py:231 msgid "The page could not be created due to validation errors" msgstr "" -#: views/pages.py:356 +#: views/pages.py:354 msgid "Page '{0}' updated." msgstr "Páxina '{0}' actualizada." -#: views/pages.py:365 +#: views/pages.py:363 msgid "The page could not be saved due to validation errors" msgstr "A páxina non puido ser gardada debido a erros de validación" -#: views/pages.py:378 +#: views/pages.py:376 msgid "This page is currently awaiting moderation" msgstr "A páxina está á espera de ser moderada" -#: views/pages.py:409 +#: views/pages.py:407 msgid "Page '{0}' deleted." msgstr "Páxina '{0}' eliminada." -#: views/pages.py:575 +#: views/pages.py:550 msgid "Page '{0}' unpublished." msgstr "Páxina '{0}' non publicada." -#: views/pages.py:627 +#: views/pages.py:602 msgid "Page '{0}' moved." msgstr "Páxina '{0}' movida." -#: views/pages.py:709 +#: views/pages.py:684 msgid "Page '{0}' and {1} subpages copied." msgstr "" -#: views/pages.py:711 +#: views/pages.py:686 msgid "Page '{0}' copied." msgstr "" -#: views/pages.py:785 views/pages.py:804 views/pages.py:824 +#: views/pages.py:760 views/pages.py:779 views/pages.py:799 msgid "The page '{0}' is not currently awaiting moderation." msgstr "A páxina '{0}' non está esperando a ser moderada." -#: views/pages.py:810 +#: views/pages.py:785 msgid "Page '{0}' rejected for publication." msgstr "Rexeitada a publicación da página '{0}'." diff --git a/wagtail/wagtailadmin/locale/mn/LC_MESSAGES/django.po b/wagtail/wagtailadmin/locale/mn/LC_MESSAGES/django.po index e8d0f5045d..c62b5e4a31 100644 --- a/wagtail/wagtailadmin/locale/mn/LC_MESSAGES/django.po +++ b/wagtail/wagtailadmin/locale/mn/LC_MESSAGES/django.po @@ -1,28 +1,29 @@ # SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. -# +# # Translators: # Delgermurun Purevkhuuu , 2014 msgid "" msgstr "" "Project-Id-Version: Wagtail\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2014-08-01 16:38+0100\n" +"POT-Creation-Date: 2014-09-11 16:37+0100\n" "PO-Revision-Date: 2014-08-01 15:43+0000\n" "Last-Translator: Karl Hobley \n" -"Language-Team: Mongolian (http://www.transifex.com/projects/p/wagtail/language/mn/)\n" +"Language-Team: Mongolian (http://www.transifex.com/projects/p/wagtail/" +"language/mn/)\n" +"Language: mn\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"Language: mn\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: edit_handlers.py:627 +#: edit_handlers.py:631 msgid "Scheduled publishing" msgstr "" -#: edit_handlers.py:641 +#: edit_handlers.py:645 msgid "Common page configuration" msgstr "" @@ -98,7 +99,7 @@ msgid_plural "" msgstr[0] "" msgstr[1] "" -#: forms.py:124 views/pages.py:155 views/pages.py:272 +#: forms.py:124 views/pages.py:153 views/pages.py:270 msgid "This slug is already in use" msgstr "" @@ -115,6 +116,16 @@ msgstr "" msgid "This field is required." msgstr "" +#: wagtail_hooks.py:15 templates/wagtailadmin/chooser/_search_results.html:12 +msgid "Explorer" +msgstr "" + +#: wagtail_hooks.py:23 templates/wagtailadmin/chooser/_search_form.html:7 +#: templates/wagtailadmin/pages/search.html:3 +#: templates/wagtailadmin/pages/search.html:16 +msgid "Search" +msgstr "" + #: templates/wagtailadmin/base.html:7 templates/wagtailadmin/home.html:4 msgid "Dashboard" msgstr "Хянах самбар" @@ -262,19 +273,16 @@ msgstr "" msgid "Email link" msgstr "" -#: templates/wagtailadmin/chooser/_search_form.html:7 -#: templates/wagtailadmin/pages/search.html:3 -#: templates/wagtailadmin/pages/search.html:16 -#: templatetags/wagtailadmin_tags.py:36 -msgid "Search" +#: templates/wagtailadmin/chooser/_search_results.html:5 +#, python-format +msgid "" +"\n" +" Only pages of type \"%(type)s\" may be chosen for this field. " +"Search results will exclude pages of other types.\n" +" " msgstr "" -#: templates/wagtailadmin/chooser/_search_results.html:3 -#: templatetags/wagtailadmin_tags.py:35 -msgid "Explorer" -msgstr "" - -#: templates/wagtailadmin/chooser/_search_results.html:8 +#: templates/wagtailadmin/chooser/_search_results.html:16 #, python-format msgid "" "\n" @@ -287,7 +295,11 @@ msgid_plural "" msgstr[0] "" msgstr[1] "" -#: templates/wagtailadmin/chooser/browse.html:2 +#: templates/wagtailadmin/chooser/browse.html:3 +msgid "Choose" +msgstr "" + +#: templates/wagtailadmin/chooser/browse.html:6 #: templates/wagtailadmin/chooser/search.html:2 #: templates/wagtailadmin/edit_handlers/page_chooser_panel.html:13 msgid "Choose a page" @@ -532,14 +544,15 @@ msgid "You can edit the privacy settings on:" msgstr "" #: templates/wagtailadmin/page_privacy/set_privacy.html:6 -msgid "Note: privacy changes apply to all children of this page too." +msgid "Privacy changes apply to all children of this page too." msgstr "" #: templates/wagtailadmin/pages/_moderator_userbar.html:4 #, python-format msgid "" "\n" -" Previewing '%(title)s', submitted by %(submitted_by)s on %(submitted_on)s.\n" +" Previewing '%(title)s', submitted by %(submitted_by)s on " +"%(submitted_on)s.\n" " " msgstr "" @@ -587,7 +600,8 @@ msgid "" " " msgid_plural "" "\n" -" This will also delete %(descendant_count)s more subpages.\n" +" This will also delete %(descendant_count)s more " +"subpages.\n" " " msgstr[0] "" msgstr[1] "" @@ -993,66 +1007,66 @@ msgstr "" msgid "Your preferences have been updated successfully!" msgstr "" -#: views/pages.py:169 views/pages.py:286 +#: views/pages.py:167 views/pages.py:284 msgid "Go live date/time must be before expiry date/time" msgstr "" -#: views/pages.py:179 views/pages.py:296 +#: views/pages.py:177 views/pages.py:294 msgid "Expiry date/time must be in the future" msgstr "" -#: views/pages.py:219 views/pages.py:351 views/pages.py:791 +#: views/pages.py:217 views/pages.py:349 views/pages.py:766 msgid "Page '{0}' published." msgstr "" -#: views/pages.py:221 views/pages.py:353 +#: views/pages.py:219 views/pages.py:351 msgid "Page '{0}' submitted for moderation." msgstr "" -#: views/pages.py:224 +#: views/pages.py:222 msgid "Page '{0}' created." msgstr "" -#: views/pages.py:233 +#: views/pages.py:231 msgid "The page could not be created due to validation errors" msgstr "" -#: views/pages.py:356 +#: views/pages.py:354 msgid "Page '{0}' updated." msgstr "" -#: views/pages.py:365 +#: views/pages.py:363 msgid "The page could not be saved due to validation errors" msgstr "" -#: views/pages.py:378 +#: views/pages.py:376 msgid "This page is currently awaiting moderation" msgstr "" -#: views/pages.py:409 +#: views/pages.py:407 msgid "Page '{0}' deleted." msgstr "" -#: views/pages.py:575 +#: views/pages.py:550 msgid "Page '{0}' unpublished." msgstr "" -#: views/pages.py:627 +#: views/pages.py:602 msgid "Page '{0}' moved." msgstr "" -#: views/pages.py:709 +#: views/pages.py:684 msgid "Page '{0}' and {1} subpages copied." msgstr "" -#: views/pages.py:711 +#: views/pages.py:686 msgid "Page '{0}' copied." msgstr "" -#: views/pages.py:785 views/pages.py:804 views/pages.py:824 +#: views/pages.py:760 views/pages.py:779 views/pages.py:799 msgid "The page '{0}' is not currently awaiting moderation." msgstr "" -#: views/pages.py:810 +#: views/pages.py:785 msgid "Page '{0}' rejected for publication." msgstr "" diff --git a/wagtail/wagtailadmin/locale/pl/LC_MESSAGES/django.po b/wagtail/wagtailadmin/locale/pl/LC_MESSAGES/django.po index b2a49d04fb..acbf3ce1d3 100644 --- a/wagtail/wagtailadmin/locale/pl/LC_MESSAGES/django.po +++ b/wagtail/wagtailadmin/locale/pl/LC_MESSAGES/django.po @@ -1,7 +1,7 @@ # SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. -# +# # Translators: # utek , 2014 # utek , 2014 @@ -9,21 +9,23 @@ msgid "" msgstr "" "Project-Id-Version: Wagtail\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2014-08-01 16:38+0100\n" +"POT-Creation-Date: 2014-09-11 16:37+0100\n" "PO-Revision-Date: 2014-08-01 15:43+0000\n" "Last-Translator: Karl Hobley \n" -"Language-Team: Polish (http://www.transifex.com/projects/p/wagtail/language/pl/)\n" +"Language-Team: Polish (http://www.transifex.com/projects/p/wagtail/language/" +"pl/)\n" +"Language: pl\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"Language: pl\n" -"Plural-Forms: nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" +"Plural-Forms: nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 " +"|| n%100>=20) ? 1 : 2);\n" -#: edit_handlers.py:627 +#: edit_handlers.py:631 msgid "Scheduled publishing" msgstr "" -#: edit_handlers.py:641 +#: edit_handlers.py:645 msgid "Common page configuration" msgstr "Wspólna konfiguracja stron" @@ -51,7 +53,9 @@ msgstr "Podaj swój adres email." msgid "" "Sorry, you cannot reset your password here as your user account is managed " "by another server." -msgstr "Przepraszamy, nie możesz zresetować hasła tutaj ponieważ Twoje konto jest zarządzane przez inny serwer." +msgstr "" +"Przepraszamy, nie możesz zresetować hasła tutaj ponieważ Twoje konto jest " +"zarządzane przez inny serwer." #: forms.py:76 msgid "This email address is not recognised." @@ -101,7 +105,7 @@ msgstr[0] "" msgstr[1] "" msgstr[2] "" -#: forms.py:124 views/pages.py:155 views/pages.py:272 +#: forms.py:124 views/pages.py:153 views/pages.py:270 msgid "This slug is already in use" msgstr "Ten slug jest już w użyciu" @@ -118,6 +122,16 @@ msgstr "" msgid "This field is required." msgstr "" +#: wagtail_hooks.py:15 templates/wagtailadmin/chooser/_search_results.html:12 +msgid "Explorer" +msgstr "Przeglądarka" + +#: wagtail_hooks.py:23 templates/wagtailadmin/chooser/_search_form.html:7 +#: templates/wagtailadmin/pages/search.html:3 +#: templates/wagtailadmin/pages/search.html:16 +msgid "Search" +msgstr "Szukaj" + #: templates/wagtailadmin/base.html:7 templates/wagtailadmin/home.html:4 msgid "Dashboard" msgstr "Kokpit" @@ -135,7 +149,9 @@ msgstr "Witamy na %(site_name)s Wagtail CMS" msgid "" "This is your dashboard on which helpful information about content you've " "created will be displayed." -msgstr "To jest twój kokpit, na którym będą wyświetlane pomocne informacje o treści, którą stworzono." +msgstr "" +"To jest twój kokpit, na którym będą wyświetlane pomocne informacje o treści, " +"którą stworzono." #: templates/wagtailadmin/login.html:4 templates/wagtailadmin/login.html:59 msgid "Sign in" @@ -167,7 +183,10 @@ msgid "" "Your avatar image is provided by Gravatar and is connected to your email " "address. With a Gravatar account you can set an avatar for any number of " "other email addresses you use." -msgstr "Twoje zdjęcie jest dostarczane przez Gravatar i jest skojarzone z Twoim adresem email. Z konta Gravatar możesz ustawić zdjęcie dla dowolnej ilości adresów email, których używasz." +msgstr "" +"Twoje zdjęcie jest dostarczane przez Gravatar i jest skojarzone z Twoim " +"adresem email. Z konta Gravatar możesz ustawić zdjęcie dla dowolnej ilości " +"adresów email, których używasz." #: templates/wagtailadmin/account/account.html:25 #: templates/wagtailadmin/account/change_password.html:4 @@ -194,7 +213,9 @@ msgstr "Zmień hasło" #: templates/wagtailadmin/account/change_password.html:21 msgid "" "Your password can't be changed here. Please contact a site administrator." -msgstr "Twoje hasło nie może być zmienione. Proszę skontaktować się z administratorem." +msgstr "" +"Twoje hasło nie może być zmienione. Proszę skontaktować się z " +"administratorem." #: templates/wagtailadmin/account/notification_preferences.html:4 #: templates/wagtailadmin/account/notification_preferences.html:6 @@ -265,19 +286,16 @@ msgstr "Link zewnętrzny" msgid "Email link" msgstr "Wyślij link pocztą email" -#: templates/wagtailadmin/chooser/_search_form.html:7 -#: templates/wagtailadmin/pages/search.html:3 -#: templates/wagtailadmin/pages/search.html:16 -#: templatetags/wagtailadmin_tags.py:36 -msgid "Search" -msgstr "Szukaj" +#: templates/wagtailadmin/chooser/_search_results.html:5 +#, python-format +msgid "" +"\n" +" Only pages of type \"%(type)s\" may be chosen for this field. " +"Search results will exclude pages of other types.\n" +" " +msgstr "" -#: templates/wagtailadmin/chooser/_search_results.html:3 -#: templatetags/wagtailadmin_tags.py:35 -msgid "Explorer" -msgstr "Przeglądarka" - -#: templates/wagtailadmin/chooser/_search_results.html:8 +#: templates/wagtailadmin/chooser/_search_results.html:16 #, python-format msgid "" "\n" @@ -287,11 +305,25 @@ msgid_plural "" "\n" " There are %(counter)s matches\n" " " -msgstr[0] "\n Jedno dopasowanie\n " -msgstr[1] "\n Są %(counter)s dopasowania\n " -msgstr[2] "\n Jest %(counter)s dopasowań\n " +msgstr[0] "" +"\n" +" Jedno dopasowanie\n" +" " +msgstr[1] "" +"\n" +" Są %(counter)s dopasowania\n" +" " +msgstr[2] "" +"\n" +" Jest %(counter)s dopasowań\n" +" " -#: templates/wagtailadmin/chooser/browse.html:2 +#: templates/wagtailadmin/chooser/browse.html:3 +#, fuzzy +msgid "Choose" +msgstr "Wybierz stronę" + +#: templates/wagtailadmin/chooser/browse.html:6 #: templates/wagtailadmin/chooser/search.html:2 #: templates/wagtailadmin/edit_handlers/page_chooser_panel.html:13 msgid "Choose a page" @@ -446,9 +478,18 @@ msgid_plural "" "\n" " %(total_pages)s Pages\n" " " -msgstr[0] "\n %(total_pages)s Strona\n " -msgstr[1] "\n %(total_pages)s Strony\n " -msgstr[2] "\n %(total_pages)s Stron\n " +msgstr[0] "" +"\n" +" %(total_pages)s Strona\n" +" " +msgstr[1] "" +"\n" +" %(total_pages)s Strony\n" +" " +msgstr[2] "" +"\n" +" %(total_pages)s Stron\n" +" " #: templates/wagtailadmin/home/site_summary.html:16 #, python-format @@ -460,9 +501,18 @@ msgid_plural "" "\n" " %(total_images)s Images\n" " " -msgstr[0] "\n %(total_images)s Obraz\n " -msgstr[1] "\n %(total_images)s Obrazy\n " -msgstr[2] "\n %(total_images)s Obrazów\n " +msgstr[0] "" +"\n" +" %(total_images)s Obraz\n" +" " +msgstr[1] "" +"\n" +" %(total_images)s Obrazy\n" +" " +msgstr[2] "" +"\n" +" %(total_images)s Obrazów\n" +" " #: templates/wagtailadmin/home/site_summary.html:25 #, python-format @@ -474,9 +524,18 @@ msgid_plural "" "\n" " %(total_docs)s Documents\n" " " -msgstr[0] "\n %(total_docs)s Dokument\n " -msgstr[1] "\n %(total_docs)s Dokumenty\n " -msgstr[2] "\n %(total_docs)s Dokumentów\n " +msgstr[0] "" +"\n" +" %(total_docs)s Dokument\n" +" " +msgstr[1] "" +"\n" +" %(total_docs)s Dokumenty\n" +" " +msgstr[2] "" +"\n" +" %(total_docs)s Dokumentów\n" +" " #: templates/wagtailadmin/notifications/approved.html:1 #, python-format @@ -539,16 +598,19 @@ msgid "You can edit the privacy settings on:" msgstr "" #: templates/wagtailadmin/page_privacy/set_privacy.html:6 -msgid "Note: privacy changes apply to all children of this page too." +msgid "Privacy changes apply to all children of this page too." msgstr "" #: templates/wagtailadmin/pages/_moderator_userbar.html:4 #, python-format msgid "" "\n" -" Previewing '%(title)s', submitted by %(submitted_by)s on %(submitted_on)s.\n" +" Previewing '%(title)s', submitted by %(submitted_by)s on " +"%(submitted_on)s.\n" " " -msgstr "\nPodgląd '%(title)s', Wysłano przez %(submitted_by)s, %(submitted_on)s." +msgstr "" +"\n" +"Podgląd '%(title)s', Wysłano przez %(submitted_by)s, %(submitted_on)s." #: templates/wagtailadmin/pages/_privacy_indicator.html:9 msgid "Privacy" @@ -594,17 +656,32 @@ msgid "" " " msgid_plural "" "\n" -" This will also delete %(descendant_count)s more subpages.\n" +" This will also delete %(descendant_count)s more " +"subpages.\n" +" " +msgstr[0] "" +"\n" +" Zostanie usunięta również jedna strona podrzędna\n" +" " +msgstr[1] "" +"\n" +" Zostaną usunięte również %(descendant_count)s strony " +"podrzędne.\n" +" " +msgstr[2] "" +"\n" +" Zostanie usuniętych również %(descendant_count)s stron " +"podrzędnych.\n" " " -msgstr[0] "\n Zostanie usunięta również jedna strona podrzędna\n " -msgstr[1] "\n Zostaną usunięte również %(descendant_count)s strony podrzędne.\n " -msgstr[2] "\n Zostanie usuniętych również %(descendant_count)s stron podrzędnych.\n " #: templates/wagtailadmin/pages/confirm_delete.html:22 msgid "" "Alternatively you can unpublish the page. This removes the page from public " "view and you can edit or publish it again later." -msgstr "Możesz dodatkowo cofnąć publikację tej strony. To spowoduje usunięcie jej z widoku publicznego. Istnieje możliwość późniejszej edycji lub ponownej publikacji." +msgstr "" +"Możesz dodatkowo cofnąć publikację tej strony. To spowoduje usunięcie jej z " +"widoku publicznego. Istnieje możliwość późniejszej edycji lub ponownej " +"publikacji." #: templates/wagtailadmin/pages/confirm_delete.html:26 msgid "Delete it" @@ -635,7 +712,9 @@ msgstr "Czy na pewno chcesz przesunąć tę stronę do '%(title)s'?" msgid "" "Are you sure you want to move this page and all of its children into " "'%(title)s'?" -msgstr "Czy na pewno chcesz przesunąć tę stronę i wszystkie strony podrzędne do '%(title)s'?" +msgstr "" +"Czy na pewno chcesz przesunąć tę stronę i wszystkie strony podrzędne do " +"'%(title)s'?" #: templates/wagtailadmin/pages/confirm_move.html:18 msgid "Yes, move this page" @@ -863,7 +942,10 @@ msgid "" "\n" " Page %(page_number)s of %(num_pages)s.\n" " " -msgstr "\n Strona %(page_number)s z %(num_pages)s.\n " +msgstr "" +"\n" +" Strona %(page_number)s z %(num_pages)s.\n" +" " #: templates/wagtailadmin/pages/search_results.html:54 #, python-format @@ -1003,66 +1085,66 @@ msgstr "Twoje hasło zostało zmienione poprawnie!" msgid "Your preferences have been updated successfully!" msgstr "" -#: views/pages.py:169 views/pages.py:286 +#: views/pages.py:167 views/pages.py:284 msgid "Go live date/time must be before expiry date/time" msgstr "" -#: views/pages.py:179 views/pages.py:296 +#: views/pages.py:177 views/pages.py:294 msgid "Expiry date/time must be in the future" msgstr "" -#: views/pages.py:219 views/pages.py:351 views/pages.py:791 +#: views/pages.py:217 views/pages.py:349 views/pages.py:766 msgid "Page '{0}' published." msgstr "Strona '{0}' została opublikowana." -#: views/pages.py:221 views/pages.py:353 +#: views/pages.py:219 views/pages.py:351 msgid "Page '{0}' submitted for moderation." msgstr "Przesłano stronę '{0}' do przeglądu." -#: views/pages.py:224 +#: views/pages.py:222 msgid "Page '{0}' created." msgstr "Stworzono stronę '{0}'." -#: views/pages.py:233 +#: views/pages.py:231 msgid "The page could not be created due to validation errors" msgstr "" -#: views/pages.py:356 +#: views/pages.py:354 msgid "Page '{0}' updated." msgstr "Uaktualniono stronę '{0}'." -#: views/pages.py:365 +#: views/pages.py:363 msgid "The page could not be saved due to validation errors" msgstr "Strona nie mogła zostać zapisana z powodu błędów poprawności." -#: views/pages.py:378 +#: views/pages.py:376 msgid "This page is currently awaiting moderation" msgstr "Ta strona oczekuje na przejrzenie." -#: views/pages.py:409 +#: views/pages.py:407 msgid "Page '{0}' deleted." msgstr "Usunięto stronę '{0}'." -#: views/pages.py:575 +#: views/pages.py:550 msgid "Page '{0}' unpublished." msgstr "Cofnięto publikację strony '{0}'." -#: views/pages.py:627 +#: views/pages.py:602 msgid "Page '{0}' moved." msgstr "Przesunięto stronę '{0}'." -#: views/pages.py:709 +#: views/pages.py:684 msgid "Page '{0}' and {1} subpages copied." msgstr "" -#: views/pages.py:711 +#: views/pages.py:686 msgid "Page '{0}' copied." msgstr "" -#: views/pages.py:785 views/pages.py:804 views/pages.py:824 +#: views/pages.py:760 views/pages.py:779 views/pages.py:799 msgid "The page '{0}' is not currently awaiting moderation." msgstr "Strona '{0}' nie oczekuje na przejrzenie." -#: views/pages.py:810 +#: views/pages.py:785 msgid "Page '{0}' rejected for publication." msgstr "Strona '{0}' została odrzucona." diff --git a/wagtail/wagtailadmin/locale/pt_BR/LC_MESSAGES/django.po b/wagtail/wagtailadmin/locale/pt_BR/LC_MESSAGES/django.po index d30aaa5f0f..d9b326e2a3 100644 --- a/wagtail/wagtailadmin/locale/pt_BR/LC_MESSAGES/django.po +++ b/wagtail/wagtailadmin/locale/pt_BR/LC_MESSAGES/django.po @@ -1,7 +1,7 @@ # SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. -# +# # Translators: # Douglas Miranda , 2014 # Gladson , 2014 @@ -9,21 +9,22 @@ msgid "" msgstr "" "Project-Id-Version: Wagtail\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2014-08-01 16:38+0100\n" +"POT-Creation-Date: 2014-09-11 16:37+0100\n" "PO-Revision-Date: 2014-08-01 15:43+0000\n" "Last-Translator: Karl Hobley \n" -"Language-Team: Portuguese (Brazil) (http://www.transifex.com/projects/p/wagtail/language/pt_BR/)\n" +"Language-Team: Portuguese (Brazil) (http://www.transifex.com/projects/p/" +"wagtail/language/pt_BR/)\n" +"Language: pt_BR\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"Language: pt_BR\n" "Plural-Forms: nplurals=2; plural=(n > 1);\n" -#: edit_handlers.py:627 +#: edit_handlers.py:631 msgid "Scheduled publishing" msgstr "" -#: edit_handlers.py:641 +#: edit_handlers.py:645 msgid "Common page configuration" msgstr "Configuração comum de página" @@ -51,7 +52,9 @@ msgstr "Por favor, insira o seu e-mail." msgid "" "Sorry, you cannot reset your password here as your user account is managed " "by another server." -msgstr "Desculpe, você não pode redefinir sua senha aqui com seu usuário, que é gerenciado por outro servidor." +msgstr "" +"Desculpe, você não pode redefinir sua senha aqui com seu usuário, que é " +"gerenciado por outro servidor." #: forms.py:76 msgid "This email address is not recognised." @@ -99,7 +102,7 @@ msgid_plural "" msgstr[0] "" msgstr[1] "" -#: forms.py:124 views/pages.py:155 views/pages.py:272 +#: forms.py:124 views/pages.py:153 views/pages.py:270 msgid "This slug is already in use" msgstr "Esse endereço já existe" @@ -116,6 +119,16 @@ msgstr "Privado, acessível com a seguinte senha" msgid "This field is required." msgstr "Este campo é obrigatório." +#: wagtail_hooks.py:15 templates/wagtailadmin/chooser/_search_results.html:12 +msgid "Explorer" +msgstr "Explorar" + +#: wagtail_hooks.py:23 templates/wagtailadmin/chooser/_search_form.html:7 +#: templates/wagtailadmin/pages/search.html:3 +#: templates/wagtailadmin/pages/search.html:16 +msgid "Search" +msgstr "Pesquisa" + #: templates/wagtailadmin/base.html:7 templates/wagtailadmin/home.html:4 msgid "Dashboard" msgstr "Painel" @@ -133,7 +146,9 @@ msgstr "Bem vindo ao %(site_name)s Wagtail CMS" msgid "" "This is your dashboard on which helpful information about content you've " "created will be displayed." -msgstr "Este é o seu painel aonde possui informações úteis sobre os conteúdos que criou." +msgstr "" +"Este é o seu painel aonde possui informações úteis sobre os conteúdos que " +"criou." #: templates/wagtailadmin/login.html:4 templates/wagtailadmin/login.html:59 msgid "Sign in" @@ -165,7 +180,10 @@ msgid "" "Your avatar image is provided by Gravatar and is connected to your email " "address. With a Gravatar account you can set an avatar for any number of " "other email addresses you use." -msgstr "Sua imagem é fornecido pelo Gravatar e está ligado ao seu e-mail. Com sua conta do Gravatar você pode definir um avatar para qualquer quantidade de e-mails que você usa." +msgstr "" +"Sua imagem é fornecido pelo Gravatar e está ligado ao seu e-mail. Com sua " +"conta do Gravatar você pode definir um avatar para qualquer quantidade de e-" +"mails que você usa." #: templates/wagtailadmin/account/account.html:25 #: templates/wagtailadmin/account/change_password.html:4 @@ -263,19 +281,16 @@ msgstr "Link externo" msgid "Email link" msgstr "Link de e-mail" -#: templates/wagtailadmin/chooser/_search_form.html:7 -#: templates/wagtailadmin/pages/search.html:3 -#: templates/wagtailadmin/pages/search.html:16 -#: templatetags/wagtailadmin_tags.py:36 -msgid "Search" -msgstr "Pesquisa" +#: templates/wagtailadmin/chooser/_search_results.html:5 +#, python-format +msgid "" +"\n" +" Only pages of type \"%(type)s\" may be chosen for this field. " +"Search results will exclude pages of other types.\n" +" " +msgstr "" -#: templates/wagtailadmin/chooser/_search_results.html:3 -#: templatetags/wagtailadmin_tags.py:35 -msgid "Explorer" -msgstr "Explorar" - -#: templates/wagtailadmin/chooser/_search_results.html:8 +#: templates/wagtailadmin/chooser/_search_results.html:16 #, python-format msgid "" "\n" @@ -285,10 +300,21 @@ msgid_plural "" "\n" " There are %(counter)s matches\n" " " -msgstr[0] "\n Existe uma combinação\n " -msgstr[1] "\n Existem %(counter)s combinações\n " +msgstr[0] "" +"\n" +" Existe uma combinação\n" +" " +msgstr[1] "" +"\n" +" Existem %(counter)s combinações\n" +" " -#: templates/wagtailadmin/chooser/browse.html:2 +#: templates/wagtailadmin/chooser/browse.html:3 +#, fuzzy +msgid "Choose" +msgstr "Escolha uma página" + +#: templates/wagtailadmin/chooser/browse.html:6 #: templates/wagtailadmin/chooser/search.html:2 #: templates/wagtailadmin/edit_handlers/page_chooser_panel.html:13 msgid "Choose a page" @@ -443,8 +469,14 @@ msgid_plural "" "\n" " %(total_pages)s Pages\n" " " -msgstr[0] "\n %(total_pages)s Página\n " -msgstr[1] "\n %(total_pages)s Páginas\n " +msgstr[0] "" +"\n" +" %(total_pages)s Página\n" +" " +msgstr[1] "" +"\n" +" %(total_pages)s Páginas\n" +" " #: templates/wagtailadmin/home/site_summary.html:16 #, python-format @@ -456,8 +488,14 @@ msgid_plural "" "\n" " %(total_images)s Images\n" " " -msgstr[0] "\n %(total_images)s Imagem\n " -msgstr[1] "\n %(total_images)s Imagens\n " +msgstr[0] "" +"\n" +" %(total_images)s Imagem\n" +" " +msgstr[1] "" +"\n" +" %(total_images)s Imagens\n" +" " #: templates/wagtailadmin/home/site_summary.html:25 #, python-format @@ -469,8 +507,14 @@ msgid_plural "" "\n" " %(total_docs)s Documents\n" " " -msgstr[0] "\n %(total_docs)s Documento\n " -msgstr[1] "\n %(total_docs)s Documentos\n " +msgstr[0] "" +"\n" +" %(total_docs)s Documento\n" +" " +msgstr[1] "" +"\n" +" %(total_docs)s Documentos\n" +" " #: templates/wagtailadmin/notifications/approved.html:1 #, python-format @@ -533,16 +577,21 @@ msgid "You can edit the privacy settings on:" msgstr "Você pode editar as configurações de privacidade em:" #: templates/wagtailadmin/page_privacy/set_privacy.html:6 -msgid "Note: privacy changes apply to all children of this page too." +msgid "Privacy changes apply to all children of this page too." msgstr "" #: templates/wagtailadmin/pages/_moderator_userbar.html:4 #, python-format msgid "" "\n" -" Previewing '%(title)s', submitted by %(submitted_by)s on %(submitted_on)s.\n" +" Previewing '%(title)s', submitted by %(submitted_by)s on " +"%(submitted_on)s.\n" +" " +msgstr "" +"\n" +" Visualizando '%(title)s', enviado por %(submitted_by)s em " +"%(submitted_on)s.\n" " " -msgstr "\n Visualizando '%(title)s', enviado por %(submitted_by)s em %(submitted_on)s.\n " #: templates/wagtailadmin/pages/_privacy_indicator.html:9 msgid "Privacy" @@ -588,16 +637,26 @@ msgid "" " " msgid_plural "" "\n" -" This will also delete %(descendant_count)s more subpages.\n" +" This will also delete %(descendant_count)s more " +"subpages.\n" +" " +msgstr[0] "" +"\n" +" Isso deverá excluir mais de uma sub-página.\n" +" " +msgstr[1] "" +"\n" +" Isso deverá excluir mais de %(descendant_count)s sub-" +"páginas.\n" " " -msgstr[0] "\n Isso deverá excluir mais de uma sub-página.\n " -msgstr[1] "\n Isso deverá excluir mais de %(descendant_count)s sub-páginas.\n " #: templates/wagtailadmin/pages/confirm_delete.html:22 msgid "" "Alternatively you can unpublish the page. This removes the page from public " "view and you can edit or publish it again later." -msgstr "Você pode cancelar a publicaçåo da página de outra forma. Isso vai remover a página de publicação e então pode editar e publicá-lo mais tarde." +msgstr "" +"Você pode cancelar a publicaçåo da página de outra forma. Isso vai remover a " +"página de publicação e então pode editar e publicá-lo mais tarde." #: templates/wagtailadmin/pages/confirm_delete.html:26 msgid "Delete it" @@ -628,7 +687,8 @@ msgstr "Tem certeza que deseja mover a página dentro de '%(title)s'?" msgid "" "Are you sure you want to move this page and all of its children into " "'%(title)s'?" -msgstr "Tem certeza que deseja mover essa página e suas filhas dentro de '%(title)s'?" +msgstr "" +"Tem certeza que deseja mover essa página e suas filhas dentro de '%(title)s'?" #: templates/wagtailadmin/pages/confirm_move.html:18 msgid "Yes, move this page" @@ -787,7 +847,10 @@ msgid "" "\n" " Page %(page_number)s of %(num_pages)s.\n" " " -msgstr "\n Página %(page_number)s de %(num_pages)s.\n " +msgstr "" +"\n" +" Página %(page_number)s de %(num_pages)s.\n" +" " #: templates/wagtailadmin/pages/list.html:269 #: templates/wagtailadmin/pages/search_results.html:35 @@ -829,8 +892,14 @@ msgid_plural "" "\n" " There are %(counter)s matching pages\n" " " -msgstr[0] "\n Há uma página correspondente\n " -msgstr[1] "\n Existem %(counter)s páginas que correspondem\n " +msgstr[0] "" +"\n" +" Há uma página correspondente\n" +" " +msgstr[1] "" +"\n" +" Existem %(counter)s páginas que correspondem\n" +" " #: templates/wagtailadmin/pages/search_results.html:16 msgid "Other searches" @@ -855,7 +924,10 @@ msgid "" "\n" " Page %(page_number)s of %(num_pages)s.\n" " " -msgstr "\n Página %(page_number)s de %(num_pages)s.\n " +msgstr "" +"\n" +" Página %(page_number)s de %(num_pages)s.\n" +" " #: templates/wagtailadmin/pages/search_results.html:54 #, python-format @@ -994,66 +1066,66 @@ msgstr "Sua senha foi alterada com sucesso!" msgid "Your preferences have been updated successfully!" msgstr "" -#: views/pages.py:169 views/pages.py:286 +#: views/pages.py:167 views/pages.py:284 msgid "Go live date/time must be before expiry date/time" msgstr "" -#: views/pages.py:179 views/pages.py:296 +#: views/pages.py:177 views/pages.py:294 msgid "Expiry date/time must be in the future" msgstr "" -#: views/pages.py:219 views/pages.py:351 views/pages.py:791 +#: views/pages.py:217 views/pages.py:349 views/pages.py:766 msgid "Page '{0}' published." msgstr "Página '{0}' publicada." -#: views/pages.py:221 views/pages.py:353 +#: views/pages.py:219 views/pages.py:351 msgid "Page '{0}' submitted for moderation." msgstr "Página '{0}' enviada para moderação." -#: views/pages.py:224 +#: views/pages.py:222 msgid "Page '{0}' created." msgstr "Página '{0}' criada." -#: views/pages.py:233 +#: views/pages.py:231 msgid "The page could not be created due to validation errors" msgstr "" -#: views/pages.py:356 +#: views/pages.py:354 msgid "Page '{0}' updated." msgstr "Página '{0}' atualizada." -#: views/pages.py:365 +#: views/pages.py:363 msgid "The page could not be saved due to validation errors" msgstr "A página não pode ser salva devido a erros de validação" -#: views/pages.py:378 +#: views/pages.py:376 msgid "This page is currently awaiting moderation" msgstr "Essa página está atualmente esperando moderação" -#: views/pages.py:409 +#: views/pages.py:407 msgid "Page '{0}' deleted." msgstr "Página '{0}' excluida." -#: views/pages.py:575 +#: views/pages.py:550 msgid "Page '{0}' unpublished." msgstr "Página '{0}' despublicada." -#: views/pages.py:627 +#: views/pages.py:602 msgid "Page '{0}' moved." msgstr "Página '{0}' movida." -#: views/pages.py:709 +#: views/pages.py:684 msgid "Page '{0}' and {1} subpages copied." msgstr "" -#: views/pages.py:711 +#: views/pages.py:686 msgid "Page '{0}' copied." msgstr "" -#: views/pages.py:785 views/pages.py:804 views/pages.py:824 +#: views/pages.py:760 views/pages.py:779 views/pages.py:799 msgid "The page '{0}' is not currently awaiting moderation." msgstr "A página '{0}' não está mais esperando moderação." -#: views/pages.py:810 +#: views/pages.py:785 msgid "Page '{0}' rejected for publication." msgstr "Página '{0}' rejeitada para publicação." diff --git a/wagtail/wagtailadmin/locale/pt_PT/LC_MESSAGES/django.po b/wagtail/wagtailadmin/locale/pt_PT/LC_MESSAGES/django.po index cb6f0a69ef..2607ee15a2 100644 --- a/wagtail/wagtailadmin/locale/pt_PT/LC_MESSAGES/django.po +++ b/wagtail/wagtailadmin/locale/pt_PT/LC_MESSAGES/django.po @@ -9,22 +9,22 @@ msgid "" msgstr "" "Project-Id-Version: Wagtail 0.5.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2014-08-01 16:38+0100\n" +"POT-Creation-Date: 2014-09-11 16:37+0100\n" "PO-Revision-Date: 2014-08-03 01:50+0100\n" "Last-Translator: Jose Lourenco \n" "Language-Team: \n" +"Language: pt_PT\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"Language: pt_PT\n" "Plural-Forms: nplurals=2; plural=(n > 1);\n" "X-Generator: Poedit 1.5.4\n" -#: edit_handlers.py:627 +#: edit_handlers.py:631 msgid "Scheduled publishing" msgstr "Publicação agendada" -#: edit_handlers.py:641 +#: edit_handlers.py:645 msgid "Common page configuration" msgstr "Configuração comum de página" @@ -106,7 +106,7 @@ msgstr[1] "" "%(count)s das páginas a copiar estão publicadas. Gostaria de publicar " "também as suas cópias?" -#: forms.py:124 views/pages.py:155 views/pages.py:272 +#: forms.py:124 views/pages.py:153 views/pages.py:270 msgid "This slug is already in use" msgstr "Esse endereço já existe" @@ -123,6 +123,16 @@ msgstr "Privado, acessível com a seguinte senha" msgid "This field is required." msgstr "Este campo é obrigatório." +#: wagtail_hooks.py:15 templates/wagtailadmin/chooser/_search_results.html:12 +msgid "Explorer" +msgstr "Explorador" + +#: wagtail_hooks.py:23 templates/wagtailadmin/chooser/_search_form.html:7 +#: templates/wagtailadmin/pages/search.html:3 +#: templates/wagtailadmin/pages/search.html:16 +msgid "Search" +msgstr "Procurar" + #: templates/wagtailadmin/base.html:7 templates/wagtailadmin/home.html:4 msgid "Dashboard" msgstr "Painel de controlo" @@ -275,19 +285,16 @@ msgstr "Link externo" msgid "Email link" msgstr "Link de email" -#: templates/wagtailadmin/chooser/_search_form.html:7 -#: templates/wagtailadmin/pages/search.html:3 -#: templates/wagtailadmin/pages/search.html:16 -#: templatetags/wagtailadmin_tags.py:36 -msgid "Search" -msgstr "Procurar" +#: templates/wagtailadmin/chooser/_search_results.html:5 +#, python-format +msgid "" +"\n" +" Only pages of type \"%(type)s\" may be chosen for this field. " +"Search results will exclude pages of other types.\n" +" " +msgstr "" -#: templates/wagtailadmin/chooser/_search_results.html:3 -#: templatetags/wagtailadmin_tags.py:35 -msgid "Explorer" -msgstr "Explorador" - -#: templates/wagtailadmin/chooser/_search_results.html:8 +#: templates/wagtailadmin/chooser/_search_results.html:16 #, python-format msgid "" "\n" @@ -306,7 +313,12 @@ msgstr[1] "" " Existem %(counter)s correspondências\n" " " -#: templates/wagtailadmin/chooser/browse.html:2 +#: templates/wagtailadmin/chooser/browse.html:3 +#, fuzzy +msgid "Choose" +msgstr "Escolher uma página" + +#: templates/wagtailadmin/chooser/browse.html:6 #: templates/wagtailadmin/chooser/search.html:2 #: templates/wagtailadmin/edit_handlers/page_chooser_panel.html:13 msgid "Choose a page" @@ -569,7 +581,8 @@ msgid "You can edit the privacy settings on:" msgstr "Você pode editar as configurações de privacidade em:" #: templates/wagtailadmin/page_privacy/set_privacy.html:6 -msgid "Note: privacy changes apply to all children of this page too." +#, fuzzy +msgid "Privacy changes apply to all children of this page too." msgstr "" "Nota: as alterações de privacidade também serão aplicadas a todas as " "páginas filhas desta página." @@ -1062,66 +1075,66 @@ msgstr "A sua senha foi alterada com sucesso!" msgid "Your preferences have been updated successfully!" msgstr "As suas preferências foram atualizadas com sucesso!" -#: views/pages.py:169 views/pages.py:286 +#: views/pages.py:167 views/pages.py:284 msgid "Go live date/time must be before expiry date/time" msgstr "A data/hora de publicação tem de ser anterior à data/hora terminal" -#: views/pages.py:179 views/pages.py:296 +#: views/pages.py:177 views/pages.py:294 msgid "Expiry date/time must be in the future" msgstr "A data/hora terminal tem de ocorrer no futuro" -#: views/pages.py:219 views/pages.py:351 views/pages.py:791 +#: views/pages.py:217 views/pages.py:349 views/pages.py:766 msgid "Page '{0}' published." msgstr "Página '{0}' publicada." -#: views/pages.py:221 views/pages.py:353 +#: views/pages.py:219 views/pages.py:351 msgid "Page '{0}' submitted for moderation." msgstr "Página '{0}' enviada para moderação." -#: views/pages.py:224 +#: views/pages.py:222 msgid "Page '{0}' created." msgstr "Página '{0}' criada." -#: views/pages.py:233 +#: views/pages.py:231 msgid "The page could not be created due to validation errors" msgstr "Esta página não pôde ser criada devido a erros na validação" -#: views/pages.py:356 +#: views/pages.py:354 msgid "Page '{0}' updated." msgstr "Página '{0}' atualizada." -#: views/pages.py:365 +#: views/pages.py:363 msgid "The page could not be saved due to validation errors" msgstr "A página não pôde ser guardada devido a erros na validação" -#: views/pages.py:378 +#: views/pages.py:376 msgid "This page is currently awaiting moderation" msgstr "Essa página aguarda por moderação" -#: views/pages.py:409 +#: views/pages.py:407 msgid "Page '{0}' deleted." msgstr "Página '{0}' eliminada." -#: views/pages.py:575 +#: views/pages.py:550 msgid "Page '{0}' unpublished." msgstr "Página '{0}' despublicada." -#: views/pages.py:627 +#: views/pages.py:602 msgid "Page '{0}' moved." msgstr "Página '{0}' movida." -#: views/pages.py:709 +#: views/pages.py:684 msgid "Page '{0}' and {1} subpages copied." msgstr "Página '{0}' e {1} sub-páginas copiadas." -#: views/pages.py:711 +#: views/pages.py:686 msgid "Page '{0}' copied." msgstr "Página '{0}' copiada." -#: views/pages.py:785 views/pages.py:804 views/pages.py:824 +#: views/pages.py:760 views/pages.py:779 views/pages.py:799 msgid "The page '{0}' is not currently awaiting moderation." msgstr "A página '{0}' já não está aguarda moderação." -#: views/pages.py:810 +#: views/pages.py:785 msgid "Page '{0}' rejected for publication." msgstr "Página '{0}' rejeitada para publicação." diff --git a/wagtail/wagtailadmin/locale/ro/LC_MESSAGES/django.po b/wagtail/wagtailadmin/locale/ro/LC_MESSAGES/django.po index 4967b5f5fc..e531f902cb 100644 --- a/wagtail/wagtailadmin/locale/ro/LC_MESSAGES/django.po +++ b/wagtail/wagtailadmin/locale/ro/LC_MESSAGES/django.po @@ -1,28 +1,30 @@ # SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. -# +# # Translators: # Dan Braghis, 2014 msgid "" msgstr "" "Project-Id-Version: Wagtail\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2014-08-01 16:38+0100\n" +"POT-Creation-Date: 2014-09-11 16:37+0100\n" "PO-Revision-Date: 2014-08-01 15:43+0000\n" "Last-Translator: Karl Hobley \n" -"Language-Team: Romanian (http://www.transifex.com/projects/p/wagtail/language/ro/)\n" +"Language-Team: Romanian (http://www.transifex.com/projects/p/wagtail/" +"language/ro/)\n" +"Language: ro\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"Language: ro\n" -"Plural-Forms: nplurals=3; plural=(n==1?0:(((n%100>19)||((n%100==0)&&(n!=0)))?2:1));\n" +"Plural-Forms: nplurals=3; plural=(n==1?0:(((n%100>19)||((n%100==0)&&(n!=0)))?" +"2:1));\n" -#: edit_handlers.py:627 +#: edit_handlers.py:631 msgid "Scheduled publishing" msgstr "" -#: edit_handlers.py:641 +#: edit_handlers.py:645 msgid "Common page configuration" msgstr "Configurație de pagini generală" @@ -50,7 +52,9 @@ msgstr "Introduceți adresa de e-mail." msgid "" "Sorry, you cannot reset your password here as your user account is managed " "by another server." -msgstr "Ne pare rău, dar nu puteți reseta parola aici. Contul dvs. de utilizator este gestionat de un alt server." +msgstr "" +"Ne pare rău, dar nu puteți reseta parola aici. Contul dvs. de utilizator " +"este gestionat de un alt server." #: forms.py:76 msgid "This email address is not recognised." @@ -100,7 +104,7 @@ msgstr[0] "" msgstr[1] "" msgstr[2] "" -#: forms.py:124 views/pages.py:155 views/pages.py:272 +#: forms.py:124 views/pages.py:153 views/pages.py:270 msgid "This slug is already in use" msgstr "Această fisă a fost deja folosită" @@ -117,6 +121,16 @@ msgstr "" msgid "This field is required." msgstr "" +#: wagtail_hooks.py:15 templates/wagtailadmin/chooser/_search_results.html:12 +msgid "Explorer" +msgstr "Explorator" + +#: wagtail_hooks.py:23 templates/wagtailadmin/chooser/_search_form.html:7 +#: templates/wagtailadmin/pages/search.html:3 +#: templates/wagtailadmin/pages/search.html:16 +msgid "Search" +msgstr "Căutare" + #: templates/wagtailadmin/base.html:7 templates/wagtailadmin/home.html:4 msgid "Dashboard" msgstr "Bord" @@ -142,7 +156,8 @@ msgstr "Conectare" #: templates/wagtailadmin/login.html:18 msgid "Your username and password didn't match. Please try again." -msgstr "Numele de utilizator și parola nu corespund. Vă rugăm să încercați din nou." +msgstr "" +"Numele de utilizator și parola nu corespund. Vă rugăm să încercați din nou." #: templates/wagtailadmin/login.html:26 msgid "Sign in to Wagtail" @@ -166,7 +181,10 @@ msgid "" "Your avatar image is provided by Gravatar and is connected to your email " "address. With a Gravatar account you can set an avatar for any number of " "other email addresses you use." -msgstr "Avatarul este oferit de Gravatar și este legat de adresa dvs. de e-mail. Având un cont Gravatar, puteți seta un avatar pentru orice număr de adrese e-mail folosite." +msgstr "" +"Avatarul este oferit de Gravatar și este legat de adresa dvs. de e-mail. " +"Având un cont Gravatar, puteți seta un avatar pentru orice număr de adrese e-" +"mail folosite." #: templates/wagtailadmin/account/account.html:25 #: templates/wagtailadmin/account/change_password.html:4 @@ -193,7 +211,9 @@ msgstr "Schimbă parola" #: templates/wagtailadmin/account/change_password.html:21 msgid "" "Your password can't be changed here. Please contact a site administrator." -msgstr "Parola nu poate fi schimbată aici. Vă rugăm să contactați administratorii sitului." +msgstr "" +"Parola nu poate fi schimbată aici. Vă rugăm să contactați administratorii " +"sitului." #: templates/wagtailadmin/account/notification_preferences.html:4 #: templates/wagtailadmin/account/notification_preferences.html:6 @@ -264,19 +284,16 @@ msgstr "Link extern" msgid "Email link" msgstr "Link e-mail" -#: templates/wagtailadmin/chooser/_search_form.html:7 -#: templates/wagtailadmin/pages/search.html:3 -#: templates/wagtailadmin/pages/search.html:16 -#: templatetags/wagtailadmin_tags.py:36 -msgid "Search" -msgstr "Căutare" +#: templates/wagtailadmin/chooser/_search_results.html:5 +#, python-format +msgid "" +"\n" +" Only pages of type \"%(type)s\" may be chosen for this field. " +"Search results will exclude pages of other types.\n" +" " +msgstr "" -#: templates/wagtailadmin/chooser/_search_results.html:3 -#: templatetags/wagtailadmin_tags.py:35 -msgid "Explorer" -msgstr "Explorator" - -#: templates/wagtailadmin/chooser/_search_results.html:8 +#: templates/wagtailadmin/chooser/_search_results.html:16 #, python-format msgid "" "\n" @@ -286,11 +303,22 @@ msgid_plural "" "\n" " There are %(counter)s matches\n" " " -msgstr[0] "\nExistă o potrivire" -msgstr[1] "\nSunt %(counter)s potriviri" -msgstr[2] "\nSunt %(counter)s potriviri" +msgstr[0] "" +"\n" +"Există o potrivire" +msgstr[1] "" +"\n" +"Sunt %(counter)s potriviri" +msgstr[2] "" +"\n" +"Sunt %(counter)s potriviri" -#: templates/wagtailadmin/chooser/browse.html:2 +#: templates/wagtailadmin/chooser/browse.html:3 +#, fuzzy +msgid "Choose" +msgstr "Selectează o pagină" + +#: templates/wagtailadmin/chooser/browse.html:6 #: templates/wagtailadmin/chooser/search.html:2 #: templates/wagtailadmin/edit_handlers/page_chooser_panel.html:13 msgid "Choose a page" @@ -445,9 +473,15 @@ msgid_plural "" "\n" " %(total_pages)s Pages\n" " " -msgstr[0] "\n%(total_pages)s pagină" -msgstr[1] "\n%(total_pages)s pagini" -msgstr[2] "\n%(total_pages)s pagini" +msgstr[0] "" +"\n" +"%(total_pages)s pagină" +msgstr[1] "" +"\n" +"%(total_pages)s pagini" +msgstr[2] "" +"\n" +"%(total_pages)s pagini" #: templates/wagtailadmin/home/site_summary.html:16 #, python-format @@ -459,9 +493,15 @@ msgid_plural "" "\n" " %(total_images)s Images\n" " " -msgstr[0] "\n%(total_images)s imagine" -msgstr[1] "\n%(total_images)s imagini" -msgstr[2] "\n%(total_images)s imagini" +msgstr[0] "" +"\n" +"%(total_images)s imagine" +msgstr[1] "" +"\n" +"%(total_images)s imagini" +msgstr[2] "" +"\n" +"%(total_images)s imagini" #: templates/wagtailadmin/home/site_summary.html:25 #, python-format @@ -473,9 +513,15 @@ msgid_plural "" "\n" " %(total_docs)s Documents\n" " " -msgstr[0] "\n%(total_docs)s document" -msgstr[1] "\n%(total_docs)s documente" -msgstr[2] "\n%(total_docs)s documente" +msgstr[0] "" +"\n" +"%(total_docs)s document" +msgstr[1] "" +"\n" +"%(total_docs)s documente" +msgstr[2] "" +"\n" +"%(total_docs)s documente" #: templates/wagtailadmin/notifications/approved.html:1 #, python-format @@ -538,16 +584,20 @@ msgid "You can edit the privacy settings on:" msgstr "" #: templates/wagtailadmin/page_privacy/set_privacy.html:6 -msgid "Note: privacy changes apply to all children of this page too." +msgid "Privacy changes apply to all children of this page too." msgstr "" #: templates/wagtailadmin/pages/_moderator_userbar.html:4 #, python-format msgid "" "\n" -" Previewing '%(title)s', submitted by %(submitted_by)s on %(submitted_on)s.\n" +" Previewing '%(title)s', submitted by %(submitted_by)s on " +"%(submitted_on)s.\n" " " -msgstr "\nExaminare '%(title)s', trimisă de %(submitted_by)s pe data de %(submitted_on)s." +msgstr "" +"\n" +"Examinare '%(title)s', trimisă de %(submitted_by)s pe data de " +"%(submitted_on)s." #: templates/wagtailadmin/pages/_privacy_indicator.html:9 msgid "Privacy" @@ -593,17 +643,26 @@ msgid "" " " msgid_plural "" "\n" -" This will also delete %(descendant_count)s more subpages.\n" +" This will also delete %(descendant_count)s more " +"subpages.\n" " " -msgstr[0] "\nAceastă acțiune va șterge și o subpagină." -msgstr[1] "\nAceastă acțiune va șterge %(descendant_count)s subpagini." -msgstr[2] "\nAceastă acțiune va șterge %(descendant_count)s subpagini." +msgstr[0] "" +"\n" +"Această acțiune va șterge și o subpagină." +msgstr[1] "" +"\n" +"Această acțiune va șterge %(descendant_count)s subpagini." +msgstr[2] "" +"\n" +"Această acțiune va șterge %(descendant_count)s subpagini." #: templates/wagtailadmin/pages/confirm_delete.html:22 msgid "" "Alternatively you can unpublish the page. This removes the page from public " "view and you can edit or publish it again later." -msgstr "Puteți să anulați pagina ca alternativă. Această acțiune retrage pagina din domeniul public, dar puteți edita sau publica pagina ulterior." +msgstr "" +"Puteți să anulați pagina ca alternativă. Această acțiune retrage pagina din " +"domeniul public, dar puteți edita sau publica pagina ulterior." #: templates/wagtailadmin/pages/confirm_delete.html:26 msgid "Delete it" @@ -634,7 +693,8 @@ msgstr "Sigur doriți să mutați această pagină în '%(title)s'?" msgid "" "Are you sure you want to move this page and all of its children into " "'%(title)s'?" -msgstr "Sigur doriți să mutați această pagină și paginile dependente în '%(title)s'?" +msgstr "" +"Sigur doriți să mutați această pagină și paginile dependente în '%(title)s'?" #: templates/wagtailadmin/pages/confirm_move.html:18 msgid "Yes, move this page" @@ -862,12 +922,15 @@ msgid "" "\n" " Page %(page_number)s of %(num_pages)s.\n" " " -msgstr "\nPagina %(page_number)s din %(num_pages)s." +msgstr "" +"\n" +"Pagina %(page_number)s din %(num_pages)s." #: templates/wagtailadmin/pages/search_results.html:54 #, python-format msgid "Sorry, no pages match \"%(query_string)s\"" -msgstr "Ne pare rău, \"%(query_string)s\" nu se potrivește cu nici o pagină" +msgstr "" +"Ne pare rău, \"%(query_string)s\" nu se potrivește cu nici o pagină" #: templates/wagtailadmin/pages/search_results.html:56 msgid "Enter a search term above" @@ -1002,66 +1065,66 @@ msgstr "Parola a fost schimbată cu succes!" msgid "Your preferences have been updated successfully!" msgstr "" -#: views/pages.py:169 views/pages.py:286 +#: views/pages.py:167 views/pages.py:284 msgid "Go live date/time must be before expiry date/time" msgstr "" -#: views/pages.py:179 views/pages.py:296 +#: views/pages.py:177 views/pages.py:294 msgid "Expiry date/time must be in the future" msgstr "" -#: views/pages.py:219 views/pages.py:351 views/pages.py:791 +#: views/pages.py:217 views/pages.py:349 views/pages.py:766 msgid "Page '{0}' published." msgstr "Pagina '{0}' a fost publicată." -#: views/pages.py:221 views/pages.py:353 +#: views/pages.py:219 views/pages.py:351 msgid "Page '{0}' submitted for moderation." msgstr "Pagina '{0}' a fost trimisă pentru moderare." -#: views/pages.py:224 +#: views/pages.py:222 msgid "Page '{0}' created." msgstr "Pagina '{0}' a fost creată." -#: views/pages.py:233 +#: views/pages.py:231 msgid "The page could not be created due to validation errors" msgstr "" -#: views/pages.py:356 +#: views/pages.py:354 msgid "Page '{0}' updated." msgstr "Pagina '{0}' a fost actualizată." -#: views/pages.py:365 +#: views/pages.py:363 msgid "The page could not be saved due to validation errors" msgstr "Pagina nu a fost salvată din cauza erorilor de validare." -#: views/pages.py:378 +#: views/pages.py:376 msgid "This page is currently awaiting moderation" msgstr "Această pagină este în moderare" -#: views/pages.py:409 +#: views/pages.py:407 msgid "Page '{0}' deleted." msgstr "Pagina '{0}' a fost ștearsă." -#: views/pages.py:575 +#: views/pages.py:550 msgid "Page '{0}' unpublished." msgstr "Publicare anulată pentru pagina '{0}'." -#: views/pages.py:627 +#: views/pages.py:602 msgid "Page '{0}' moved." msgstr "Pagina '{0}' a fost mutată." -#: views/pages.py:709 +#: views/pages.py:684 msgid "Page '{0}' and {1} subpages copied." msgstr "" -#: views/pages.py:711 +#: views/pages.py:686 msgid "Page '{0}' copied." msgstr "" -#: views/pages.py:785 views/pages.py:804 views/pages.py:824 +#: views/pages.py:760 views/pages.py:779 views/pages.py:799 msgid "The page '{0}' is not currently awaiting moderation." msgstr "Pagina '{0}' nu este în moderare la moment." -#: views/pages.py:810 +#: views/pages.py:785 msgid "Page '{0}' rejected for publication." msgstr "Publicare paginii '{0}' a fost refuzată." diff --git a/wagtail/wagtailadmin/locale/zh/LC_MESSAGES/django.po b/wagtail/wagtailadmin/locale/zh/LC_MESSAGES/django.po index 7aa5b5fece..5ab3d95c40 100644 --- a/wagtail/wagtailadmin/locale/zh/LC_MESSAGES/django.po +++ b/wagtail/wagtailadmin/locale/zh/LC_MESSAGES/django.po @@ -1,27 +1,28 @@ # SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. -# +# # Translators: msgid "" msgstr "" "Project-Id-Version: Wagtail\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2014-08-01 16:38+0100\n" +"POT-Creation-Date: 2014-09-11 16:37+0100\n" "PO-Revision-Date: 2014-08-01 15:43+0000\n" "Last-Translator: Karl Hobley \n" -"Language-Team: Chinese (http://www.transifex.com/projects/p/wagtail/language/zh/)\n" +"Language-Team: Chinese (http://www.transifex.com/projects/p/wagtail/language/" +"zh/)\n" +"Language: zh\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"Language: zh\n" "Plural-Forms: nplurals=1; plural=0;\n" -#: edit_handlers.py:627 +#: edit_handlers.py:631 msgid "Scheduled publishing" msgstr "" -#: edit_handlers.py:641 +#: edit_handlers.py:645 msgid "Common page configuration" msgstr "" @@ -95,7 +96,7 @@ msgid_plural "" "their copies?" msgstr[0] "" -#: forms.py:124 views/pages.py:155 views/pages.py:272 +#: forms.py:124 views/pages.py:153 views/pages.py:270 msgid "This slug is already in use" msgstr "这个唯一的地址已被占用" @@ -112,6 +113,16 @@ msgstr "" msgid "This field is required." msgstr "" +#: wagtail_hooks.py:15 templates/wagtailadmin/chooser/_search_results.html:12 +msgid "Explorer" +msgstr "浏览" + +#: wagtail_hooks.py:23 templates/wagtailadmin/chooser/_search_form.html:7 +#: templates/wagtailadmin/pages/search.html:3 +#: templates/wagtailadmin/pages/search.html:16 +msgid "Search" +msgstr "搜索" + #: templates/wagtailadmin/base.html:7 templates/wagtailadmin/home.html:4 msgid "Dashboard" msgstr "仪表板" @@ -161,7 +172,9 @@ msgid "" "Your avatar image is provided by Gravatar and is connected to your email " "address. With a Gravatar account you can set an avatar for any number of " "other email addresses you use." -msgstr "您的头像图片是由Gravatar提供的,并且关联了您的电子邮件地址。一个Gravatar账号可以设置多个电子邮件地址的头像图片。" +msgstr "" +"您的头像图片是由Gravatar提供的,并且关联了您的电子邮件地址。一个Gravatar账号" +"可以设置多个电子邮件地址的头像图片。" #: templates/wagtailadmin/account/account.html:25 #: templates/wagtailadmin/account/change_password.html:4 @@ -259,19 +272,16 @@ msgstr "外部链接" msgid "Email link" msgstr "电子邮件链接" -#: templates/wagtailadmin/chooser/_search_form.html:7 -#: templates/wagtailadmin/pages/search.html:3 -#: templates/wagtailadmin/pages/search.html:16 -#: templatetags/wagtailadmin_tags.py:36 -msgid "Search" -msgstr "搜索" +#: templates/wagtailadmin/chooser/_search_results.html:5 +#, python-format +msgid "" +"\n" +" Only pages of type \"%(type)s\" may be chosen for this field. " +"Search results will exclude pages of other types.\n" +" " +msgstr "" -#: templates/wagtailadmin/chooser/_search_results.html:3 -#: templatetags/wagtailadmin_tags.py:35 -msgid "Explorer" -msgstr "浏览" - -#: templates/wagtailadmin/chooser/_search_results.html:8 +#: templates/wagtailadmin/chooser/_search_results.html:16 #, python-format msgid "" "\n" @@ -283,7 +293,12 @@ msgid_plural "" " " msgstr[0] "" -#: templates/wagtailadmin/chooser/browse.html:2 +#: templates/wagtailadmin/chooser/browse.html:3 +#, fuzzy +msgid "Choose" +msgstr "选择一个页面" + +#: templates/wagtailadmin/chooser/browse.html:6 #: templates/wagtailadmin/chooser/search.html:2 #: templates/wagtailadmin/edit_handlers/page_chooser_panel.html:13 msgid "Choose a page" @@ -525,16 +540,20 @@ msgid "You can edit the privacy settings on:" msgstr "" #: templates/wagtailadmin/page_privacy/set_privacy.html:6 -msgid "Note: privacy changes apply to all children of this page too." +msgid "Privacy changes apply to all children of this page too." msgstr "" #: templates/wagtailadmin/pages/_moderator_userbar.html:4 #, python-format msgid "" "\n" -" Previewing '%(title)s', submitted by %(submitted_by)s on %(submitted_on)s.\n" +" Previewing '%(title)s', submitted by %(submitted_by)s on " +"%(submitted_on)s.\n" +" " +msgstr "" +"\n" +" 预览 '%(title)s', %(submitted_by)s 在 %(submitted_on)s 提交.\n" " " -msgstr "\n 预览 '%(title)s', %(submitted_by)s 在 %(submitted_on)s 提交.\n " #: templates/wagtailadmin/pages/_privacy_indicator.html:9 msgid "Privacy" @@ -580,7 +599,8 @@ msgid "" " " msgid_plural "" "\n" -" This will also delete %(descendant_count)s more subpages.\n" +" This will also delete %(descendant_count)s more " +"subpages.\n" " " msgstr[0] "" @@ -845,7 +865,10 @@ msgid "" "\n" " Page %(page_number)s of %(num_pages)s.\n" " " -msgstr "\n 第 %(page_number)s / %(num_pages)s页.\n " +msgstr "" +"\n" +" 第 %(page_number)s / %(num_pages)s页.\n" +" " #: templates/wagtailadmin/pages/search_results.html:54 #, python-format @@ -983,66 +1006,66 @@ msgstr "您的密码已经更改成功。" msgid "Your preferences have been updated successfully!" msgstr "" -#: views/pages.py:169 views/pages.py:286 +#: views/pages.py:167 views/pages.py:284 msgid "Go live date/time must be before expiry date/time" msgstr "" -#: views/pages.py:179 views/pages.py:296 +#: views/pages.py:177 views/pages.py:294 msgid "Expiry date/time must be in the future" msgstr "" -#: views/pages.py:219 views/pages.py:351 views/pages.py:791 +#: views/pages.py:217 views/pages.py:349 views/pages.py:766 msgid "Page '{0}' published." msgstr "第 '{0}' 页已发布。" -#: views/pages.py:221 views/pages.py:353 +#: views/pages.py:219 views/pages.py:351 msgid "Page '{0}' submitted for moderation." msgstr "第 '{0}' 页已提交审核。" -#: views/pages.py:224 +#: views/pages.py:222 msgid "Page '{0}' created." msgstr "第 '{0}' 页已创建。" -#: views/pages.py:233 +#: views/pages.py:231 msgid "The page could not be created due to validation errors" msgstr "" -#: views/pages.py:356 +#: views/pages.py:354 msgid "Page '{0}' updated." msgstr "第 '{0}' 页已更新" -#: views/pages.py:365 +#: views/pages.py:363 msgid "The page could not be saved due to validation errors" msgstr "这页无法保存,因为页面发生验证错误" -#: views/pages.py:378 +#: views/pages.py:376 msgid "This page is currently awaiting moderation" msgstr "这页正在等待审核" -#: views/pages.py:409 +#: views/pages.py:407 msgid "Page '{0}' deleted." msgstr "第 '{0}' 页已删除" -#: views/pages.py:575 +#: views/pages.py:550 msgid "Page '{0}' unpublished." msgstr "第 '{0}' 页已停止发布" -#: views/pages.py:627 +#: views/pages.py:602 msgid "Page '{0}' moved." msgstr "第 '{0}' 页已移动。" -#: views/pages.py:709 +#: views/pages.py:684 msgid "Page '{0}' and {1} subpages copied." msgstr "" -#: views/pages.py:711 +#: views/pages.py:686 msgid "Page '{0}' copied." msgstr "" -#: views/pages.py:785 views/pages.py:804 views/pages.py:824 +#: views/pages.py:760 views/pages.py:779 views/pages.py:799 msgid "The page '{0}' is not currently awaiting moderation." msgstr "第 '{0}' 页当前不需要等待审核。" -#: views/pages.py:810 +#: views/pages.py:785 msgid "Page '{0}' rejected for publication." msgstr "第 '{0}' 页已被拒绝发布。" diff --git a/wagtail/wagtailadmin/locale/zh_TW/LC_MESSAGES/django.po b/wagtail/wagtailadmin/locale/zh_TW/LC_MESSAGES/django.po index 95b8e929dd..a9c2422f89 100644 --- a/wagtail/wagtailadmin/locale/zh_TW/LC_MESSAGES/django.po +++ b/wagtail/wagtailadmin/locale/zh_TW/LC_MESSAGES/django.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: Wagtail\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2014-08-01 16:38+0100\n" +"POT-Creation-Date: 2014-09-11 16:37+0100\n" "PO-Revision-Date: 2014-05-01 12:09+0000\n" "Last-Translator: wdv4758h \n" "Language-Team: \n" @@ -17,11 +17,11 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=1; plural=0;\n" -#: edit_handlers.py:627 +#: edit_handlers.py:631 msgid "Scheduled publishing" msgstr "" -#: edit_handlers.py:641 +#: edit_handlers.py:645 msgid "Common page configuration" msgstr "一般頁面設定" @@ -98,7 +98,7 @@ msgid_plural "" "their copies?" msgstr[0] "" -#: forms.py:124 views/pages.py:155 views/pages.py:272 +#: forms.py:124 views/pages.py:153 views/pages.py:270 msgid "This slug is already in use" msgstr "這個地址已被使用" @@ -117,6 +117,16 @@ msgstr "" msgid "This field is required." msgstr "找不到這個電子信箱。" +#: wagtail_hooks.py:15 templates/wagtailadmin/chooser/_search_results.html:12 +msgid "Explorer" +msgstr "瀏覽" + +#: wagtail_hooks.py:23 templates/wagtailadmin/chooser/_search_form.html:7 +#: templates/wagtailadmin/pages/search.html:3 +#: templates/wagtailadmin/pages/search.html:16 +msgid "Search" +msgstr "搜尋" + #: templates/wagtailadmin/base.html:7 templates/wagtailadmin/home.html:4 msgid "Dashboard" msgstr "Dashboard" @@ -266,19 +276,16 @@ msgstr "外部連結" msgid "Email link" msgstr "電子信箱連結" -#: templates/wagtailadmin/chooser/_search_form.html:7 -#: templates/wagtailadmin/pages/search.html:3 -#: templates/wagtailadmin/pages/search.html:16 -#: templatetags/wagtailadmin_tags.py:36 -msgid "Search" -msgstr "搜尋" +#: templates/wagtailadmin/chooser/_search_results.html:5 +#, python-format +msgid "" +"\n" +" Only pages of type \"%(type)s\" may be chosen for this field. " +"Search results will exclude pages of other types.\n" +" " +msgstr "" -#: templates/wagtailadmin/chooser/_search_results.html:3 -#: templatetags/wagtailadmin_tags.py:35 -msgid "Explorer" -msgstr "瀏覽" - -#: templates/wagtailadmin/chooser/_search_results.html:8 +#: templates/wagtailadmin/chooser/_search_results.html:16 #, python-format msgid "" "\n" @@ -295,7 +302,12 @@ msgstr[1] "" "\n" " 有 $(counter)s 個符合" -#: templates/wagtailadmin/chooser/browse.html:2 +#: templates/wagtailadmin/chooser/browse.html:3 +#, fuzzy +msgid "Choose" +msgstr "選擇一個頁面" + +#: templates/wagtailadmin/chooser/browse.html:6 #: templates/wagtailadmin/chooser/search.html:2 #: templates/wagtailadmin/edit_handlers/page_chooser_panel.html:13 msgid "Choose a page" @@ -559,7 +571,7 @@ msgid "You can edit the privacy settings on:" msgstr "你可以在此編輯這個頁面:" #: templates/wagtailadmin/page_privacy/set_privacy.html:6 -msgid "Note: privacy changes apply to all children of this page too." +msgid "Privacy changes apply to all children of this page too." msgstr "" #: templates/wagtailadmin/pages/_moderator_userbar.html:4 @@ -1046,70 +1058,70 @@ msgstr "您的密碼已經更改成功。" msgid "Your preferences have been updated successfully!" msgstr "您的密碼已經更改成功。" -#: views/pages.py:169 views/pages.py:286 +#: views/pages.py:167 views/pages.py:284 msgid "Go live date/time must be before expiry date/time" msgstr "" -#: views/pages.py:179 views/pages.py:296 +#: views/pages.py:177 views/pages.py:294 msgid "Expiry date/time must be in the future" msgstr "" -#: views/pages.py:219 views/pages.py:351 views/pages.py:791 +#: views/pages.py:217 views/pages.py:349 views/pages.py:766 msgid "Page '{0}' published." msgstr "第 '{0}' 頁已發佈。" -#: views/pages.py:221 views/pages.py:353 +#: views/pages.py:219 views/pages.py:351 msgid "Page '{0}' submitted for moderation." msgstr "第 '{0}' 頁已送審。" -#: views/pages.py:224 +#: views/pages.py:222 msgid "Page '{0}' created." msgstr "第 '{0}' 頁已建立。" -#: views/pages.py:233 +#: views/pages.py:231 #, fuzzy msgid "The page could not be created due to validation errors" msgstr "這頁面因有驗證錯誤而無法儲存。" -#: views/pages.py:356 +#: views/pages.py:354 msgid "Page '{0}' updated." msgstr "第 '{0}' 頁已更新" -#: views/pages.py:365 +#: views/pages.py:363 msgid "The page could not be saved due to validation errors" msgstr "這頁面因有驗證錯誤而無法儲存。" -#: views/pages.py:378 +#: views/pages.py:376 msgid "This page is currently awaiting moderation" msgstr "這頁正等待審核" -#: views/pages.py:409 +#: views/pages.py:407 msgid "Page '{0}' deleted." msgstr "第 '{0}' 頁已刪除" -#: views/pages.py:575 +#: views/pages.py:550 msgid "Page '{0}' unpublished." msgstr "第 '{0}' 頁已取消發佈" -#: views/pages.py:627 +#: views/pages.py:602 msgid "Page '{0}' moved." msgstr "第 '{0}' 頁已移動。" -#: views/pages.py:709 +#: views/pages.py:684 #, fuzzy msgid "Page '{0}' and {1} subpages copied." msgstr "第 '{0}' 頁已更新" -#: views/pages.py:711 +#: views/pages.py:686 #, fuzzy msgid "Page '{0}' copied." msgstr "第 '{0}' 頁已移動。" -#: views/pages.py:785 views/pages.py:804 views/pages.py:824 +#: views/pages.py:760 views/pages.py:779 views/pages.py:799 msgid "The page '{0}' is not currently awaiting moderation." msgstr "第 '{0}' 頁目前不需要等待審核。" -#: views/pages.py:810 +#: views/pages.py:785 msgid "Page '{0}' rejected for publication." msgstr "第 '{0}' 頁已被拒絕發佈。" diff --git a/wagtail/wagtailcore/locale/bg/LC_MESSAGES/django.po b/wagtail/wagtailcore/locale/bg/LC_MESSAGES/django.po index 3d3cfb9bb5..ff1a42d163 100644 --- a/wagtail/wagtailcore/locale/bg/LC_MESSAGES/django.po +++ b/wagtail/wagtailcore/locale/bg/LC_MESSAGES/django.po @@ -1,80 +1,91 @@ # SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. -# +# # Translators: # Lyuboslav Petrov , 2014 msgid "" msgstr "" "Project-Id-Version: Wagtail\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2014-08-01 16:38+0100\n" +"POT-Creation-Date: 2014-09-11 16:37+0100\n" "PO-Revision-Date: 2014-08-01 15:43+0000\n" "Last-Translator: Karl Hobley \n" -"Language-Team: Bulgarian (http://www.transifex.com/projects/p/wagtail/language/bg/)\n" +"Language-Team: Bulgarian (http://www.transifex.com/projects/p/wagtail/" +"language/bg/)\n" +"Language: bg\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"Language: bg\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: models.py:46 +#: models.py:45 msgid "" "Set this to something other than 80 if you need a specific port number to " "appear in URLs (e.g. development on port 8000). Does not affect request " "handling (so port forwarding still works)." -msgstr "Задайте това като нещо различно от 80, в случай че имате нужда от определен порт да се появи в URL адресите ви (напр. код-разработка на порт 8000). Не се отнася за боравене със заявки (така Port Forwarding ще работи)." +msgstr "" +"Задайте това като нещо различно от 80, в случай че имате нужда от определен " +"порт да се появи в URL адресите ви (напр. код-разработка на порт 8000). Не " +"се отнася за боравене със заявки (така Port Forwarding ще работи)." -#: models.py:48 +#: models.py:47 msgid "" "If true, this site will handle requests for all other hostnames that do not " "have a site entry of their own" -msgstr "Ако е Вярно, този сайт ще борави със заявки за всички останали хостове, които нямат собствен сайт." +msgstr "" +"Ако е Вярно, този сайт ще борави със заявки за всички останали хостове, " +"които нямат собствен сайт." -#: models.py:109 +#: models.py:108 #, python-format msgid "" "%(hostname)s is already configured as the default site. You must unset that " "before you can save this site as default." msgstr "" -#: models.py:277 +#: models.py:251 msgid "The page title as you'd like it to be seen by the public" msgstr "Заглавието на страницата както желаете да се вижда" -#: models.py:278 +#: models.py:252 msgid "" -"The name of the page as it will appear in URLs e.g http://domain.com/blog" -"/[my-slug]/" -msgstr "Името на страницата както ще изглежда в URL-ите. Например http://domain.com/blog/[my-slug]/" +"The name of the page as it will appear in URLs e.g http://domain.com/blog/" +"[my-slug]/" +msgstr "" +"Името на страницата както ще изглежда в URL-ите. Например http://domain.com/" +"blog/[my-slug]/" -#: models.py:287 +#: models.py:261 msgid "Page title" msgstr "Заглавие на Страница" -#: models.py:287 +#: models.py:261 msgid "" -"Optional. 'Search Engine Friendly' title. This will appear at the top of the" -" browser window." -msgstr "Незадължителен. 'Оптимизирано за Търсачки' заглавие. Това ще се появи най-отгоре на браузър прозореца." +"Optional. 'Search Engine Friendly' title. This will appear at the top of the " +"browser window." +msgstr "" +"Незадължителен. 'Оптимизирано за Търсачки' заглавие. Това ще се появи най-" +"отгоре на браузър прозореца." -#: models.py:288 +#: models.py:262 msgid "" "Whether a link to this page will appear in automatically generated menus" -msgstr "Дали линк към тази страница ще се появи в автоматично генерираните менюта" +msgstr "" +"Дали линк към тази страница ще се появи в автоматично генерираните менюта" -#: models.py:291 +#: models.py:265 msgid "Go live date/time" msgstr "" -#: models.py:291 models.py:292 +#: models.py:265 models.py:266 msgid "Please add a date-time in the form YYYY-MM-DD hh:mm:ss." msgstr "" -#: models.py:292 +#: models.py:266 msgid "Expiry date/time" msgstr "" -#: models.py:564 +#: models.py:530 msgid "name '{0}' (used in subpage_types list) is not defined." msgstr "" diff --git a/wagtail/wagtailcore/locale/ca/LC_MESSAGES/django.po b/wagtail/wagtailcore/locale/ca/LC_MESSAGES/django.po index aa3525fd6a..366d341158 100644 --- a/wagtail/wagtailcore/locale/ca/LC_MESSAGES/django.po +++ b/wagtail/wagtailcore/locale/ca/LC_MESSAGES/django.po @@ -1,80 +1,91 @@ # SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. -# +# # Translators: # David Llop , 2014 msgid "" msgstr "" "Project-Id-Version: Wagtail\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2014-08-01 16:38+0100\n" +"POT-Creation-Date: 2014-09-11 16:37+0100\n" "PO-Revision-Date: 2014-08-01 15:43+0000\n" "Last-Translator: Karl Hobley \n" -"Language-Team: Catalan (http://www.transifex.com/projects/p/wagtail/language/ca/)\n" +"Language-Team: Catalan (http://www.transifex.com/projects/p/wagtail/language/" +"ca/)\n" +"Language: ca\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"Language: ca\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: models.py:46 +#: models.py:45 msgid "" "Set this to something other than 80 if you need a specific port number to " "appear in URLs (e.g. development on port 8000). Does not affect request " "handling (so port forwarding still works)." -msgstr "Canvia això per un número diferent de 80 si necessites que aparegui un port específic en les URLs (per ex: port de desenvolupament al 8000). No afecta a la petició actual (el port de reenviament encara funciona)." +msgstr "" +"Canvia això per un número diferent de 80 si necessites que aparegui un port " +"específic en les URLs (per ex: port de desenvolupament al 8000). No afecta a " +"la petició actual (el port de reenviament encara funciona)." -#: models.py:48 +#: models.py:47 msgid "" "If true, this site will handle requests for all other hostnames that do not " "have a site entry of their own" -msgstr "Si és cert, aquest lloc s'encarregarà de les peticions de totes les altres màquines que no tenen un lloc establert." +msgstr "" +"Si és cert, aquest lloc s'encarregarà de les peticions de totes les altres " +"màquines que no tenen un lloc establert." -#: models.py:109 +#: models.py:108 #, python-format msgid "" "%(hostname)s is already configured as the default site. You must unset that " "before you can save this site as default." msgstr "" -#: models.py:277 +#: models.py:251 msgid "The page title as you'd like it to be seen by the public" msgstr "El títol de la pàgina que vols que sigui vist pel públic" -#: models.py:278 +#: models.py:252 msgid "" -"The name of the page as it will appear in URLs e.g http://domain.com/blog" -"/[my-slug]/" -msgstr "El nom de la pàgina que apareixerà en la URL. Per exemple: http://domini.com/blog/[nom]/" +"The name of the page as it will appear in URLs e.g http://domain.com/blog/" +"[my-slug]/" +msgstr "" +"El nom de la pàgina que apareixerà en la URL. Per exemple: http://domini.com/" +"blog/[nom]/" -#: models.py:287 +#: models.py:261 msgid "Page title" msgstr "Títol de la pàgina" -#: models.py:287 +#: models.py:261 msgid "" -"Optional. 'Search Engine Friendly' title. This will appear at the top of the" -" browser window." -msgstr "Opcional. Títol de 'Motor de cerca amigable'. Això apareixerà al cap damunt de la finetra del navegador" +"Optional. 'Search Engine Friendly' title. This will appear at the top of the " +"browser window." +msgstr "" +"Opcional. Títol de 'Motor de cerca amigable'. Això apareixerà al cap damunt " +"de la finetra del navegador" -#: models.py:288 +#: models.py:262 msgid "" "Whether a link to this page will appear in automatically generated menus" -msgstr "Si s'enllaça cap aquesta pàgina apareixerà automàticament als menús generats" +msgstr "" +"Si s'enllaça cap aquesta pàgina apareixerà automàticament als menús generats" -#: models.py:291 +#: models.py:265 msgid "Go live date/time" msgstr "" -#: models.py:291 models.py:292 +#: models.py:265 models.py:266 msgid "Please add a date-time in the form YYYY-MM-DD hh:mm:ss." msgstr "" -#: models.py:292 +#: models.py:266 msgid "Expiry date/time" msgstr "" -#: models.py:564 +#: models.py:530 msgid "name '{0}' (used in subpage_types list) is not defined." msgstr "" diff --git a/wagtail/wagtailcore/locale/de/LC_MESSAGES/django.po b/wagtail/wagtailcore/locale/de/LC_MESSAGES/django.po index 543a13b5b0..f16ce33a30 100644 --- a/wagtail/wagtailcore/locale/de/LC_MESSAGES/django.po +++ b/wagtail/wagtailcore/locale/de/LC_MESSAGES/django.po @@ -1,80 +1,91 @@ # SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. -# +# # Translators: # Johannes Spielmann , 2014 msgid "" msgstr "" "Project-Id-Version: Wagtail\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2014-08-01 16:38+0100\n" +"POT-Creation-Date: 2014-09-11 16:37+0100\n" "PO-Revision-Date: 2014-08-01 15:43+0000\n" "Last-Translator: Karl Hobley \n" -"Language-Team: German (http://www.transifex.com/projects/p/wagtail/language/de/)\n" +"Language-Team: German (http://www.transifex.com/projects/p/wagtail/language/" +"de/)\n" +"Language: de\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"Language: de\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: models.py:46 +#: models.py:45 msgid "" "Set this to something other than 80 if you need a specific port number to " "appear in URLs (e.g. development on port 8000). Does not affect request " "handling (so port forwarding still works)." -msgstr "Geben Sie hier einen anderen Wert als 80 ein, wenn dieser in URLs auftauchen soll (z.B. Development Port auf 8000). Dies bezieht sich nicht auf Request Handling, so dass Port Forwarding weiterhin funktioniert." +msgstr "" +"Geben Sie hier einen anderen Wert als 80 ein, wenn dieser in URLs auftauchen " +"soll (z.B. Development Port auf 8000). Dies bezieht sich nicht auf Request " +"Handling, so dass Port Forwarding weiterhin funktioniert." -#: models.py:48 +#: models.py:47 msgid "" "If true, this site will handle requests for all other hostnames that do not " "have a site entry of their own" -msgstr "Falls ausgewählt wird diese Seite Anfragen für alle Hostnamen annehmen, die keinen eigenen Seiteneintrag haben." +msgstr "" +"Falls ausgewählt wird diese Seite Anfragen für alle Hostnamen annehmen, die " +"keinen eigenen Seiteneintrag haben." -#: models.py:109 +#: models.py:108 #, python-format msgid "" "%(hostname)s is already configured as the default site. You must unset that " "before you can save this site as default." msgstr "" -#: models.py:277 +#: models.py:251 msgid "The page title as you'd like it to be seen by the public" msgstr "Der Seitentitel, der öffentlich angezeigt werden soll" -#: models.py:278 +#: models.py:252 msgid "" -"The name of the page as it will appear in URLs e.g http://domain.com/blog" -"/[my-slug]/" -msgstr "Der Name der Seite, wie er in URLs angezeigt werden soll, z.B. http://domain.com/blog/[my-slug]/" +"The name of the page as it will appear in URLs e.g http://domain.com/blog/" +"[my-slug]/" +msgstr "" +"Der Name der Seite, wie er in URLs angezeigt werden soll, z.B. http://domain." +"com/blog/[my-slug]/" -#: models.py:287 +#: models.py:261 msgid "Page title" msgstr "Seitentitel" -#: models.py:287 +#: models.py:261 msgid "" -"Optional. 'Search Engine Friendly' title. This will appear at the top of the" -" browser window." -msgstr "Optional. Suchmaschinenfreundlicher Titel. Wird in der Titelleiste des Browsers angezeigt." +"Optional. 'Search Engine Friendly' title. This will appear at the top of the " +"browser window." +msgstr "" +"Optional. Suchmaschinenfreundlicher Titel. Wird in der Titelleiste des " +"Browsers angezeigt." -#: models.py:288 +#: models.py:262 msgid "" "Whether a link to this page will appear in automatically generated menus" -msgstr "Ob ein Link zu dieser Seite in automatisch generierten Menüs auftaucht." +msgstr "" +"Ob ein Link zu dieser Seite in automatisch generierten Menüs auftaucht." -#: models.py:291 +#: models.py:265 msgid "Go live date/time" msgstr "" -#: models.py:291 models.py:292 +#: models.py:265 models.py:266 msgid "Please add a date-time in the form YYYY-MM-DD hh:mm:ss." msgstr "" -#: models.py:292 +#: models.py:266 msgid "Expiry date/time" msgstr "" -#: models.py:564 +#: models.py:530 msgid "name '{0}' (used in subpage_types list) is not defined." msgstr "" diff --git a/wagtail/wagtailcore/locale/el/LC_MESSAGES/django.po b/wagtail/wagtailcore/locale/el/LC_MESSAGES/django.po index bed0ba05d8..810e0571ab 100644 --- a/wagtail/wagtailcore/locale/el/LC_MESSAGES/django.po +++ b/wagtail/wagtailcore/locale/el/LC_MESSAGES/django.po @@ -1,80 +1,93 @@ # SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. -# +# # Translators: # serafeim , 2014 msgid "" msgstr "" "Project-Id-Version: Wagtail\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2014-08-01 16:38+0100\n" +"POT-Creation-Date: 2014-09-11 16:37+0100\n" "PO-Revision-Date: 2014-08-01 15:43+0000\n" "Last-Translator: Karl Hobley \n" -"Language-Team: Greek (http://www.transifex.com/projects/p/wagtail/language/el/)\n" +"Language-Team: Greek (http://www.transifex.com/projects/p/wagtail/language/" +"el/)\n" +"Language: el\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"Language: el\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: models.py:46 +#: models.py:45 msgid "" "Set this to something other than 80 if you need a specific port number to " "appear in URLs (e.g. development on port 8000). Does not affect request " "handling (so port forwarding still works)." -msgstr "Μπορείτε να χρησιμοποιήσετε κάτι διαφορετικό από το 80 αν θέλετε να εμφανίζεται στις διευθύνσεις μια συγκεκριμένη θύρα (π.χ. ανάπτυξη στη θύρα 8000). Δεν επηρεάζει τον τρόπο που χειρίζονται τις αιτήσεις (οπότε η προώθηση θύρας δουλεύει ακόμα)" +msgstr "" +"Μπορείτε να χρησιμοποιήσετε κάτι διαφορετικό από το 80 αν θέλετε να " +"εμφανίζεται στις διευθύνσεις μια συγκεκριμένη θύρα (π.χ. ανάπτυξη στη θύρα " +"8000). Δεν επηρεάζει τον τρόπο που χειρίζονται τις αιτήσεις (οπότε η " +"προώθηση θύρας δουλεύει ακόμα)" -#: models.py:48 +#: models.py:47 msgid "" "If true, this site will handle requests for all other hostnames that do not " "have a site entry of their own" -msgstr "Αν είναι αληθές, το εν λόγω site θα χειρίζεται και τις αιτήσεις για όλα τα άλλα ονόματα που δεν έχουν δική τους εγγραφή" +msgstr "" +"Αν είναι αληθές, το εν λόγω site θα χειρίζεται και τις αιτήσεις για όλα τα " +"άλλα ονόματα που δεν έχουν δική τους εγγραφή" -#: models.py:109 +#: models.py:108 #, python-format msgid "" "%(hostname)s is already configured as the default site. You must unset that " "before you can save this site as default." msgstr "" -#: models.py:277 +#: models.py:251 msgid "The page title as you'd like it to be seen by the public" msgstr "Ο τίτλος της σελίδας έτσι όπως θα εμφανίζεται στο κοινό" -#: models.py:278 +#: models.py:252 msgid "" -"The name of the page as it will appear in URLs e.g http://domain.com/blog" -"/[my-slug]/" -msgstr "Το όνομα της σελίδας έτσι όπως θα εμφανίζεται στις διευθύνσεις, π.χ http://domain.com/blog/[my-slug]/" +"The name of the page as it will appear in URLs e.g http://domain.com/blog/" +"[my-slug]/" +msgstr "" +"Το όνομα της σελίδας έτσι όπως θα εμφανίζεται στις διευθύνσεις, π.χ http://" +"domain.com/blog/[my-slug]/" -#: models.py:287 +#: models.py:261 msgid "Page title" msgstr "Τίτλος σελίδας" -#: models.py:287 +#: models.py:261 msgid "" -"Optional. 'Search Engine Friendly' title. This will appear at the top of the" -" browser window." -msgstr "Προαιρετικό. Τίτλος που είναι 'φιλικός προς τις μηχανές αναζήτησης'. Θα εμφανιστεί στην κορυφή του παραθύρου." +"Optional. 'Search Engine Friendly' title. This will appear at the top of the " +"browser window." +msgstr "" +"Προαιρετικό. Τίτλος που είναι 'φιλικός προς τις μηχανές αναζήτησης'. Θα " +"εμφανιστεί στην κορυφή του παραθύρου." -#: models.py:288 +#: models.py:262 msgid "" "Whether a link to this page will appear in automatically generated menus" -msgstr "Επιλέξτε αν μια σύνδεση σε αυτή τη σελίδα θα εμφανιστεί στα μενού που δημιουργούνται αυτόματα" +msgstr "" +"Επιλέξτε αν μια σύνδεση σε αυτή τη σελίδα θα εμφανιστεί στα μενού που " +"δημιουργούνται αυτόματα" -#: models.py:291 +#: models.py:265 msgid "Go live date/time" msgstr "" -#: models.py:291 models.py:292 +#: models.py:265 models.py:266 msgid "Please add a date-time in the form YYYY-MM-DD hh:mm:ss." msgstr "" -#: models.py:292 +#: models.py:266 msgid "Expiry date/time" msgstr "" -#: models.py:564 +#: models.py:530 msgid "name '{0}' (used in subpage_types list) is not defined." msgstr "" diff --git a/wagtail/wagtailcore/locale/en/LC_MESSAGES/django.po b/wagtail/wagtailcore/locale/en/LC_MESSAGES/django.po index c4bf27524c..f6691b8660 100644 --- a/wagtail/wagtailcore/locale/en/LC_MESSAGES/django.po +++ b/wagtail/wagtailcore/locale/en/LC_MESSAGES/django.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2014-08-01 16:38+0100\n" +"POT-Creation-Date: 2014-09-11 16:37+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -17,63 +17,63 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -#: models.py:46 +#: models.py:45 msgid "" "Set this to something other than 80 if you need a specific port number to " "appear in URLs (e.g. development on port 8000). Does not affect request " "handling (so port forwarding still works)." msgstr "" -#: models.py:48 +#: models.py:47 msgid "" "If true, this site will handle requests for all other hostnames that do not " "have a site entry of their own" msgstr "" -#: models.py:109 +#: models.py:108 #, python-format msgid "" "%(hostname)s is already configured as the default site. You must unset that " "before you can save this site as default." msgstr "" -#: models.py:277 +#: models.py:251 msgid "The page title as you'd like it to be seen by the public" msgstr "" -#: models.py:278 +#: models.py:252 msgid "" "The name of the page as it will appear in URLs e.g http://domain.com/blog/" "[my-slug]/" msgstr "" -#: models.py:287 +#: models.py:261 msgid "Page title" msgstr "" -#: models.py:287 +#: models.py:261 msgid "" "Optional. 'Search Engine Friendly' title. This will appear at the top of the " "browser window." msgstr "" -#: models.py:288 +#: models.py:262 msgid "" "Whether a link to this page will appear in automatically generated menus" msgstr "" -#: models.py:291 +#: models.py:265 msgid "Go live date/time" msgstr "" -#: models.py:291 models.py:292 +#: models.py:265 models.py:266 msgid "Please add a date-time in the form YYYY-MM-DD hh:mm:ss." msgstr "" -#: models.py:292 +#: models.py:266 msgid "Expiry date/time" msgstr "" -#: models.py:564 +#: models.py:530 msgid "name '{0}' (used in subpage_types list) is not defined." msgstr "" diff --git a/wagtail/wagtailcore/locale/es/LC_MESSAGES/django.po b/wagtail/wagtailcore/locale/es/LC_MESSAGES/django.po index 05bc602869..6544cf2986 100644 --- a/wagtail/wagtailcore/locale/es/LC_MESSAGES/django.po +++ b/wagtail/wagtailcore/locale/es/LC_MESSAGES/django.po @@ -1,7 +1,7 @@ # SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. -# +# # Translators: # fooflare , 2014 # fooflare , 2014 @@ -12,73 +12,83 @@ msgid "" msgstr "" "Project-Id-Version: Wagtail\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2014-08-01 16:38+0100\n" +"POT-Creation-Date: 2014-09-11 16:37+0100\n" "PO-Revision-Date: 2014-08-01 15:43+0000\n" "Last-Translator: Karl Hobley \n" -"Language-Team: Spanish (http://www.transifex.com/projects/p/wagtail/language/es/)\n" +"Language-Team: Spanish (http://www.transifex.com/projects/p/wagtail/language/" +"es/)\n" +"Language: es\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"Language: es\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: models.py:46 +#: models.py:45 msgid "" "Set this to something other than 80 if you need a specific port number to " "appear in URLs (e.g. development on port 8000). Does not affect request " "handling (so port forwarding still works)." -msgstr "Cambia esto a algo que no sea 80 si necesitas que un puerto específico aparezca en las URLs (p.e. desarrollo en el puerto 8000). Esto no afecta al manejo de solicitudes (así que la redirección de puertos sigue funcionando)." +msgstr "" +"Cambia esto a algo que no sea 80 si necesitas que un puerto específico " +"aparezca en las URLs (p.e. desarrollo en el puerto 8000). Esto no afecta al " +"manejo de solicitudes (así que la redirección de puertos sigue funcionando)." -#: models.py:48 +#: models.py:47 msgid "" "If true, this site will handle requests for all other hostnames that do not " "have a site entry of their own" -msgstr "Si afirmativo, este sitio manejará solicitudes para todos los demás hostnames que no tengan un site por sí mismos" +msgstr "" +"Si afirmativo, este sitio manejará solicitudes para todos los demás " +"hostnames que no tengan un site por sí mismos" -#: models.py:109 +#: models.py:108 #, python-format msgid "" "%(hostname)s is already configured as the default site. You must unset that " "before you can save this site as default." msgstr "" -#: models.py:277 +#: models.py:251 msgid "The page title as you'd like it to be seen by the public" msgstr "El título de la página como quieres que sea visto por el público" -#: models.py:278 +#: models.py:252 msgid "" -"The name of the page as it will appear in URLs e.g http://domain.com/blog" -"/[my-slug]/" -msgstr "El nombre de la página tal como aparecerá en URLs p.ej. http://domain.com/blog/[my-slug]/" +"The name of the page as it will appear in URLs e.g http://domain.com/blog/" +"[my-slug]/" +msgstr "" +"El nombre de la página tal como aparecerá en URLs p.ej. http://domain.com/" +"blog/[my-slug]/" -#: models.py:287 +#: models.py:261 msgid "Page title" msgstr "Título de la página" -#: models.py:287 +#: models.py:261 msgid "" -"Optional. 'Search Engine Friendly' title. This will appear at the top of the" -" browser window." -msgstr "Opcional. Título 'Amigable para el Motor de Búsqueda'. Aparecerá en la parte superior de la ventana del navegador." +"Optional. 'Search Engine Friendly' title. This will appear at the top of the " +"browser window." +msgstr "" +"Opcional. Título 'Amigable para el Motor de Búsqueda'. Aparecerá en la parte " +"superior de la ventana del navegador." -#: models.py:288 +#: models.py:262 msgid "" "Whether a link to this page will appear in automatically generated menus" msgstr "Un enlace a esta página aparecerá en menús generados automáticamente" -#: models.py:291 +#: models.py:265 msgid "Go live date/time" msgstr "" -#: models.py:291 models.py:292 +#: models.py:265 models.py:266 msgid "Please add a date-time in the form YYYY-MM-DD hh:mm:ss." msgstr "" -#: models.py:292 +#: models.py:266 msgid "Expiry date/time" msgstr "" -#: models.py:564 +#: models.py:530 msgid "name '{0}' (used in subpage_types list) is not defined." msgstr "" diff --git a/wagtail/wagtailcore/locale/eu/LC_MESSAGES/django.po b/wagtail/wagtailcore/locale/eu/LC_MESSAGES/django.po index cbe69e3381..1379abf17f 100644 --- a/wagtail/wagtailcore/locale/eu/LC_MESSAGES/django.po +++ b/wagtail/wagtailcore/locale/eu/LC_MESSAGES/django.po @@ -1,79 +1,80 @@ # SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. -# +# # Translators: msgid "" msgstr "" "Project-Id-Version: Wagtail\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2014-08-01 16:38+0100\n" +"POT-Creation-Date: 2014-09-11 16:37+0100\n" "PO-Revision-Date: 2014-08-01 15:43+0000\n" "Last-Translator: Karl Hobley \n" -"Language-Team: Basque (http://www.transifex.com/projects/p/wagtail/language/eu/)\n" +"Language-Team: Basque (http://www.transifex.com/projects/p/wagtail/language/" +"eu/)\n" +"Language: eu\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"Language: eu\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: models.py:46 +#: models.py:45 msgid "" "Set this to something other than 80 if you need a specific port number to " "appear in URLs (e.g. development on port 8000). Does not affect request " "handling (so port forwarding still works)." msgstr "" -#: models.py:48 +#: models.py:47 msgid "" "If true, this site will handle requests for all other hostnames that do not " "have a site entry of their own" msgstr "" -#: models.py:109 +#: models.py:108 #, python-format msgid "" "%(hostname)s is already configured as the default site. You must unset that " "before you can save this site as default." msgstr "" -#: models.py:277 +#: models.py:251 msgid "The page title as you'd like it to be seen by the public" msgstr "" -#: models.py:278 +#: models.py:252 msgid "" -"The name of the page as it will appear in URLs e.g http://domain.com/blog" -"/[my-slug]/" +"The name of the page as it will appear in URLs e.g http://domain.com/blog/" +"[my-slug]/" msgstr "" -#: models.py:287 +#: models.py:261 msgid "Page title" msgstr "" -#: models.py:287 +#: models.py:261 msgid "" -"Optional. 'Search Engine Friendly' title. This will appear at the top of the" -" browser window." +"Optional. 'Search Engine Friendly' title. This will appear at the top of the " +"browser window." msgstr "" -#: models.py:288 +#: models.py:262 msgid "" "Whether a link to this page will appear in automatically generated menus" msgstr "" -#: models.py:291 +#: models.py:265 msgid "Go live date/time" msgstr "" -#: models.py:291 models.py:292 +#: models.py:265 models.py:266 msgid "Please add a date-time in the form YYYY-MM-DD hh:mm:ss." msgstr "" -#: models.py:292 +#: models.py:266 msgid "Expiry date/time" msgstr "" -#: models.py:564 +#: models.py:530 msgid "name '{0}' (used in subpage_types list) is not defined." msgstr "" diff --git a/wagtail/wagtailcore/locale/fr/LC_MESSAGES/django.po b/wagtail/wagtailcore/locale/fr/LC_MESSAGES/django.po index cc75fb902c..7a089f274f 100644 --- a/wagtail/wagtailcore/locale/fr/LC_MESSAGES/django.po +++ b/wagtail/wagtailcore/locale/fr/LC_MESSAGES/django.po @@ -1,80 +1,89 @@ # SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. -# +# # Translators: # nahuel, 2014 msgid "" msgstr "" "Project-Id-Version: Wagtail\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2014-08-01 16:38+0100\n" +"POT-Creation-Date: 2014-09-11 16:37+0100\n" "PO-Revision-Date: 2014-08-01 15:43+0000\n" "Last-Translator: Karl Hobley \n" -"Language-Team: French (http://www.transifex.com/projects/p/wagtail/language/fr/)\n" +"Language-Team: French (http://www.transifex.com/projects/p/wagtail/language/" +"fr/)\n" +"Language: fr\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"Language: fr\n" "Plural-Forms: nplurals=2; plural=(n > 1);\n" -#: models.py:46 +#: models.py:45 msgid "" "Set this to something other than 80 if you need a specific port number to " "appear in URLs (e.g. development on port 8000). Does not affect request " "handling (so port forwarding still works)." -msgstr "Définissez cette valeur à autre chose que 80 si vous avez besoin qu'un port spécifique apparaisse dans les URLs (e.g. développement sur le port 8000). Ceci n'affecte pas la prise en charge des requêtes (les redirections de port continuent de fonctionner)." +msgstr "" +"Définissez cette valeur à autre chose que 80 si vous avez besoin qu'un port " +"spécifique apparaisse dans les URLs (e.g. développement sur le port 8000). " +"Ceci n'affecte pas la prise en charge des requêtes (les redirections de port " +"continuent de fonctionner)." -#: models.py:48 +#: models.py:47 msgid "" "If true, this site will handle requests for all other hostnames that do not " "have a site entry of their own" msgstr "" -#: models.py:109 +#: models.py:108 #, python-format msgid "" "%(hostname)s is already configured as the default site. You must unset that " "before you can save this site as default." msgstr "" -#: models.py:277 +#: models.py:251 msgid "The page title as you'd like it to be seen by the public" msgstr "Le titre de la page comme vous souhaiteriez que les lecteurs la voient" -#: models.py:278 +#: models.py:252 msgid "" -"The name of the page as it will appear in URLs e.g http://domain.com/blog" -"/[my-slug]/" -msgstr "Le nom de la page comme elle apparaîtra dans l'URL e.g http://domain.com/blog/[my-slug]/" +"The name of the page as it will appear in URLs e.g http://domain.com/blog/" +"[my-slug]/" +msgstr "" +"Le nom de la page comme elle apparaîtra dans l'URL e.g http://domain.com/" +"blog/[my-slug]/" -#: models.py:287 +#: models.py:261 msgid "Page title" msgstr "Titre de la page" -#: models.py:287 +#: models.py:261 msgid "" -"Optional. 'Search Engine Friendly' title. This will appear at the top of the" -" browser window." +"Optional. 'Search Engine Friendly' title. This will appear at the top of the " +"browser window." msgstr "" -#: models.py:288 +#: models.py:262 msgid "" "Whether a link to this page will appear in automatically generated menus" -msgstr "Si un lien vers cette page devra apparaître dans les menus générés automatiquement" +msgstr "" +"Si un lien vers cette page devra apparaître dans les menus générés " +"automatiquement" -#: models.py:291 +#: models.py:265 msgid "Go live date/time" msgstr "" -#: models.py:291 models.py:292 +#: models.py:265 models.py:266 msgid "Please add a date-time in the form YYYY-MM-DD hh:mm:ss." msgstr "" -#: models.py:292 +#: models.py:266 msgid "Expiry date/time" msgstr "" -#: models.py:564 +#: models.py:530 msgid "name '{0}' (used in subpage_types list) is not defined." msgstr "" diff --git a/wagtail/wagtailcore/locale/gl/LC_MESSAGES/django.po b/wagtail/wagtailcore/locale/gl/LC_MESSAGES/django.po index 4201d9b9e9..10ba92d155 100644 --- a/wagtail/wagtailcore/locale/gl/LC_MESSAGES/django.po +++ b/wagtail/wagtailcore/locale/gl/LC_MESSAGES/django.po @@ -1,80 +1,90 @@ # SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. -# +# # Translators: # fooflare , 2014 msgid "" msgstr "" "Project-Id-Version: Wagtail\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2014-08-01 16:38+0100\n" +"POT-Creation-Date: 2014-09-11 16:37+0100\n" "PO-Revision-Date: 2014-08-01 15:43+0000\n" "Last-Translator: Karl Hobley \n" -"Language-Team: Galician (http://www.transifex.com/projects/p/wagtail/language/gl/)\n" +"Language-Team: Galician (http://www.transifex.com/projects/p/wagtail/" +"language/gl/)\n" +"Language: gl\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"Language: gl\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: models.py:46 +#: models.py:45 msgid "" "Set this to something other than 80 if you need a specific port number to " "appear in URLs (e.g. development on port 8000). Does not affect request " "handling (so port forwarding still works)." -msgstr "Cambia isto a algo que non sexa o 80 se necesitas que un porto específico apareza nas URLs (p.e. desenvolvemento no porto 8000). Isto non afecta ao manexo de solicitudes (así que a redirección de portos segue funcionando)." +msgstr "" +"Cambia isto a algo que non sexa o 80 se necesitas que un porto específico " +"apareza nas URLs (p.e. desenvolvemento no porto 8000). Isto non afecta ao " +"manexo de solicitudes (así que a redirección de portos segue funcionando)." -#: models.py:48 +#: models.py:47 msgid "" "If true, this site will handle requests for all other hostnames that do not " "have a site entry of their own" -msgstr "Se é afirmativo, este sitio manexará solicitudes para todos os demais nomes de host que non teñan unha entrada por si mesmos" +msgstr "" +"Se é afirmativo, este sitio manexará solicitudes para todos os demais nomes " +"de host que non teñan unha entrada por si mesmos" -#: models.py:109 +#: models.py:108 #, python-format msgid "" "%(hostname)s is already configured as the default site. You must unset that " "before you can save this site as default." msgstr "" -#: models.py:277 +#: models.py:251 msgid "The page title as you'd like it to be seen by the public" msgstr "O título da páxina como queres que sexa visto polo público" -#: models.py:278 +#: models.py:252 msgid "" -"The name of the page as it will appear in URLs e.g http://domain.com/blog" -"/[my-slug]/" -msgstr "O nome da páxina tal como aparecerá nas URLs p.ex. http://domain.com/blog/[my-slug]/" +"The name of the page as it will appear in URLs e.g http://domain.com/blog/" +"[my-slug]/" +msgstr "" +"O nome da páxina tal como aparecerá nas URLs p.ex. http://domain.com/blog/" +"[my-slug]/" -#: models.py:287 +#: models.py:261 msgid "Page title" msgstr "Título da páxina" -#: models.py:287 +#: models.py:261 msgid "" -"Optional. 'Search Engine Friendly' title. This will appear at the top of the" -" browser window." -msgstr "Opcional. Título 'Amigable para o Motor de Busca'. Aparecerá na parte superior da ventá do navegador." +"Optional. 'Search Engine Friendly' title. This will appear at the top of the " +"browser window." +msgstr "" +"Opcional. Título 'Amigable para o Motor de Busca'. Aparecerá na parte " +"superior da ventá do navegador." -#: models.py:288 +#: models.py:262 msgid "" "Whether a link to this page will appear in automatically generated menus" msgstr "Un enlace a esta página aparecerá en menús xerados automáticamente" -#: models.py:291 +#: models.py:265 msgid "Go live date/time" msgstr "" -#: models.py:291 models.py:292 +#: models.py:265 models.py:266 msgid "Please add a date-time in the form YYYY-MM-DD hh:mm:ss." msgstr "" -#: models.py:292 +#: models.py:266 msgid "Expiry date/time" msgstr "" -#: models.py:564 +#: models.py:530 msgid "name '{0}' (used in subpage_types list) is not defined." msgstr "" diff --git a/wagtail/wagtailcore/locale/mn/LC_MESSAGES/django.po b/wagtail/wagtailcore/locale/mn/LC_MESSAGES/django.po index 064a1dabbf..9c3137352a 100644 --- a/wagtail/wagtailcore/locale/mn/LC_MESSAGES/django.po +++ b/wagtail/wagtailcore/locale/mn/LC_MESSAGES/django.po @@ -1,80 +1,81 @@ # SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. -# +# # Translators: # Delgermurun Purevkhuuu , 2014 msgid "" msgstr "" "Project-Id-Version: Wagtail\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2014-08-01 16:38+0100\n" +"POT-Creation-Date: 2014-09-11 16:37+0100\n" "PO-Revision-Date: 2014-08-01 15:43+0000\n" "Last-Translator: Karl Hobley \n" -"Language-Team: Mongolian (http://www.transifex.com/projects/p/wagtail/language/mn/)\n" +"Language-Team: Mongolian (http://www.transifex.com/projects/p/wagtail/" +"language/mn/)\n" +"Language: mn\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"Language: mn\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: models.py:46 +#: models.py:45 msgid "" "Set this to something other than 80 if you need a specific port number to " "appear in URLs (e.g. development on port 8000). Does not affect request " "handling (so port forwarding still works)." msgstr "" -#: models.py:48 +#: models.py:47 msgid "" "If true, this site will handle requests for all other hostnames that do not " "have a site entry of their own" msgstr "" -#: models.py:109 +#: models.py:108 #, python-format msgid "" "%(hostname)s is already configured as the default site. You must unset that " "before you can save this site as default." msgstr "" -#: models.py:277 +#: models.py:251 msgid "The page title as you'd like it to be seen by the public" msgstr "" -#: models.py:278 +#: models.py:252 msgid "" -"The name of the page as it will appear in URLs e.g http://domain.com/blog" -"/[my-slug]/" +"The name of the page as it will appear in URLs e.g http://domain.com/blog/" +"[my-slug]/" msgstr "" -#: models.py:287 +#: models.py:261 msgid "Page title" msgstr "Хуудасны гарчиг" -#: models.py:287 +#: models.py:261 msgid "" -"Optional. 'Search Engine Friendly' title. This will appear at the top of the" -" browser window." +"Optional. 'Search Engine Friendly' title. This will appear at the top of the " +"browser window." msgstr "" -#: models.py:288 +#: models.py:262 msgid "" "Whether a link to this page will appear in automatically generated menus" msgstr "" -#: models.py:291 +#: models.py:265 msgid "Go live date/time" msgstr "" -#: models.py:291 models.py:292 +#: models.py:265 models.py:266 msgid "Please add a date-time in the form YYYY-MM-DD hh:mm:ss." msgstr "" -#: models.py:292 +#: models.py:266 msgid "Expiry date/time" msgstr "" -#: models.py:564 +#: models.py:530 msgid "name '{0}' (used in subpage_types list) is not defined." msgstr "" diff --git a/wagtail/wagtailcore/locale/pl/LC_MESSAGES/django.po b/wagtail/wagtailcore/locale/pl/LC_MESSAGES/django.po index d0a696b891..ef130db6b1 100644 --- a/wagtail/wagtailcore/locale/pl/LC_MESSAGES/django.po +++ b/wagtail/wagtailcore/locale/pl/LC_MESSAGES/django.po @@ -1,7 +1,7 @@ # SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. -# +# # Translators: # utek , 2014 # utek , 2014 @@ -9,73 +9,85 @@ msgid "" msgstr "" "Project-Id-Version: Wagtail\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2014-08-01 16:38+0100\n" +"POT-Creation-Date: 2014-09-11 16:37+0100\n" "PO-Revision-Date: 2014-08-01 15:43+0000\n" "Last-Translator: Karl Hobley \n" -"Language-Team: Polish (http://www.transifex.com/projects/p/wagtail/language/pl/)\n" +"Language-Team: Polish (http://www.transifex.com/projects/p/wagtail/language/" +"pl/)\n" +"Language: pl\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"Language: pl\n" -"Plural-Forms: nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" +"Plural-Forms: nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 " +"|| n%100>=20) ? 1 : 2);\n" -#: models.py:46 +#: models.py:45 msgid "" "Set this to something other than 80 if you need a specific port number to " "appear in URLs (e.g. development on port 8000). Does not affect request " "handling (so port forwarding still works)." -msgstr "Ustaw na inną wartość niż 80 jeżeli istnieje potrzeba pojawienia się konkretnego portu w URLach (np. port wersji roboczej 8000). Nie ma wpływu na obsługę żądań (przekierowanie portów będzie nadal działało)." +msgstr "" +"Ustaw na inną wartość niż 80 jeżeli istnieje potrzeba pojawienia się " +"konkretnego portu w URLach (np. port wersji roboczej 8000). Nie ma wpływu na " +"obsługę żądań (przekierowanie portów będzie nadal działało)." -#: models.py:48 +#: models.py:47 msgid "" "If true, this site will handle requests for all other hostnames that do not " "have a site entry of their own" -msgstr "Wartość true sprawi, że ta strona będzie obsługiwała żądania wszystkich innych hostów, które nie mają ustawionej strony." +msgstr "" +"Wartość true sprawi, że ta strona będzie obsługiwała żądania wszystkich " +"innych hostów, które nie mają ustawionej strony." -#: models.py:109 +#: models.py:108 #, python-format msgid "" "%(hostname)s is already configured as the default site. You must unset that " "before you can save this site as default." msgstr "" -#: models.py:277 +#: models.py:251 msgid "The page title as you'd like it to be seen by the public" msgstr "Tytuł strony jaki chcesz żeby był widoczny publicznie." -#: models.py:278 +#: models.py:252 msgid "" -"The name of the page as it will appear in URLs e.g http://domain.com/blog" -"/[my-slug]/" -msgstr "Nazwa strony, która będzie wyświetlana w URLach np. http://domain.com/blog/[my-slug]/" +"The name of the page as it will appear in URLs e.g http://domain.com/blog/" +"[my-slug]/" +msgstr "" +"Nazwa strony, która będzie wyświetlana w URLach np. http://domain.com/blog/" +"[my-slug]/" -#: models.py:287 +#: models.py:261 msgid "Page title" msgstr "Tytuł strony" -#: models.py:287 +#: models.py:261 msgid "" -"Optional. 'Search Engine Friendly' title. This will appear at the top of the" -" browser window." -msgstr "Opcjonalne. Tytuł 'przyjazny wyszukiwarkom'. Będzie widoczny się na górze okna przeglądarki." +"Optional. 'Search Engine Friendly' title. This will appear at the top of the " +"browser window." +msgstr "" +"Opcjonalne. Tytuł 'przyjazny wyszukiwarkom'. Będzie widoczny się na górze " +"okna przeglądarki." -#: models.py:288 +#: models.py:262 msgid "" "Whether a link to this page will appear in automatically generated menus" -msgstr "Czy link do tej strony zostanie wyświetlony w menu tworzonym automatycznie." +msgstr "" +"Czy link do tej strony zostanie wyświetlony w menu tworzonym automatycznie." -#: models.py:291 +#: models.py:265 msgid "Go live date/time" msgstr "" -#: models.py:291 models.py:292 +#: models.py:265 models.py:266 msgid "Please add a date-time in the form YYYY-MM-DD hh:mm:ss." msgstr "" -#: models.py:292 +#: models.py:266 msgid "Expiry date/time" msgstr "" -#: models.py:564 +#: models.py:530 msgid "name '{0}' (used in subpage_types list) is not defined." msgstr "" diff --git a/wagtail/wagtailcore/locale/pt_PT/LC_MESSAGES/django.po b/wagtail/wagtailcore/locale/pt_PT/LC_MESSAGES/django.po index 5da56cf9ab..37a7023c7a 100644 --- a/wagtail/wagtailcore/locale/pt_PT/LC_MESSAGES/django.po +++ b/wagtail/wagtailcore/locale/pt_PT/LC_MESSAGES/django.po @@ -9,7 +9,7 @@ msgid "" msgstr "" "Project-Id-Version: Wagtail 0.5.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2014-08-01 16:38+0100\n" +"POT-Creation-Date: 2014-09-11 16:37+0100\n" "PO-Revision-Date: 2014-08-03 01:52+0100\n" "Last-Translator: Jose Lourenco \n" "Language-Team: \n" @@ -17,11 +17,10 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"Language: pt_PT\n" "Plural-Forms: nplurals=2; plural=(n > 1);\n" "X-Generator: Poedit 1.5.4\n" -#: models.py:46 +#: models.py:45 msgid "" "Set this to something other than 80 if you need a specific port number to " "appear in URLs (e.g. development on port 8000). Does not affect request " @@ -32,7 +31,7 @@ msgstr "" "tratamento de requisições (assim, o redirecionamento de portos continua a " "funcionar)." -#: models.py:48 +#: models.py:47 msgid "" "If true, this site will handle requests for all other hostnames that do not " "have a site entry of their own" @@ -40,7 +39,7 @@ msgstr "" "Se verdadeiro, este site irá processar requisições de todos os outros " "hostnames que não tenham um site próprio" -#: models.py:109 +#: models.py:108 #, python-format msgid "" "%(hostname)s is already configured as the default site. You must unset that " @@ -49,11 +48,11 @@ msgstr "" "O %(hostname)s já está configurado como site pré-definido. Tem de alterar " "essa configuração antes de poder guardar este site como pré-definido." -#: models.py:277 +#: models.py:251 msgid "The page title as you'd like it to be seen by the public" msgstr "O título da página como você gostaria que fosse visto pelo público" -#: models.py:278 +#: models.py:252 msgid "" "The name of the page as it will appear in URLs e.g http://domain.com/blog/" "[my-slug]/" @@ -61,11 +60,11 @@ msgstr "" "O nome da página como ele irá aparecer nas URLs ex.: http://domain.com/blog/" "[my-slug]/" -#: models.py:287 +#: models.py:261 msgid "Page title" msgstr "Título da página" -#: models.py:287 +#: models.py:261 msgid "" "Optional. 'Search Engine Friendly' title. This will appear at the top of the " "browser window." @@ -73,25 +72,25 @@ msgstr "" "Opcional. Título 'Amigável para Motores de Busca'. Isto irá aparecer no topo " "da janela do navegador." -#: models.py:288 +#: models.py:262 msgid "" "Whether a link to this page will appear in automatically generated menus" msgstr "" "Se um link para esta página irá aparecer nos menus gerados automaticamente" -#: models.py:291 +#: models.py:265 msgid "Go live date/time" msgstr "Data/hora de publicação" -#: models.py:291 models.py:292 +#: models.py:265 models.py:266 msgid "Please add a date-time in the form YYYY-MM-DD hh:mm:ss." msgstr "Por favor adicione uma data-hora no formato AAAA-MM-DD hh:mm:ss." -#: models.py:292 +#: models.py:266 msgid "Expiry date/time" msgstr "Data/hora terminal" -#: models.py:564 +#: models.py:530 msgid "name '{0}' (used in subpage_types list) is not defined." msgstr "" "O nome '{0}' (usado na lista de tipos de sub-páginas) não está definido." diff --git a/wagtail/wagtailcore/locale/ro/LC_MESSAGES/django.po b/wagtail/wagtailcore/locale/ro/LC_MESSAGES/django.po index d6c9a19020..8343ea1305 100644 --- a/wagtail/wagtailcore/locale/ro/LC_MESSAGES/django.po +++ b/wagtail/wagtailcore/locale/ro/LC_MESSAGES/django.po @@ -1,80 +1,94 @@ # SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. -# +# # Translators: # Dan Braghis, 2014 msgid "" msgstr "" "Project-Id-Version: Wagtail\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2014-08-01 16:38+0100\n" +"POT-Creation-Date: 2014-09-11 16:37+0100\n" "PO-Revision-Date: 2014-08-01 15:43+0000\n" "Last-Translator: Karl Hobley \n" -"Language-Team: Romanian (http://www.transifex.com/projects/p/wagtail/language/ro/)\n" +"Language-Team: Romanian (http://www.transifex.com/projects/p/wagtail/" +"language/ro/)\n" +"Language: ro\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"Language: ro\n" -"Plural-Forms: nplurals=3; plural=(n==1?0:(((n%100>19)||((n%100==0)&&(n!=0)))?2:1));\n" +"Plural-Forms: nplurals=3; plural=(n==1?0:(((n%100>19)||((n%100==0)&&(n!=0)))?" +"2:1));\n" -#: models.py:46 +#: models.py:45 msgid "" "Set this to something other than 80 if you need a specific port number to " "appear in URLs (e.g. development on port 8000). Does not affect request " "handling (so port forwarding still works)." -msgstr "Dacă aveți nevoie ca un număr de port specific să apară în adrese de internet (de exemplu, dezvoltare pe portul 8000) setați aceasta la altceva decât 80. Nu influențează gestionarea solicitărilor și transmiterile de port vor continua să funcționeze." +msgstr "" +"Dacă aveți nevoie ca un număr de port specific să apară în adrese de " +"internet (de exemplu, dezvoltare pe portul 8000) setați aceasta la altceva " +"decât 80. Nu influențează gestionarea solicitărilor și transmiterile de port " +"vor continua să funcționeze." -#: models.py:48 +#: models.py:47 msgid "" "If true, this site will handle requests for all other hostnames that do not " "have a site entry of their own" -msgstr "Dacă e 'true', acest sit va gestiona solicitări pentru toate hostname-urile fără setări separate" +msgstr "" +"Dacă e 'true', acest sit va gestiona solicitări pentru toate hostname-urile " +"fără setări separate" -#: models.py:109 +#: models.py:108 #, python-format msgid "" "%(hostname)s is already configured as the default site. You must unset that " "before you can save this site as default." msgstr "" -#: models.py:277 +#: models.py:251 msgid "The page title as you'd like it to be seen by the public" msgstr "Titlul paginii așa cum doriți să fie vizibil public" -#: models.py:278 +#: models.py:252 msgid "" -"The name of the page as it will appear in URLs e.g http://domain.com/blog" -"/[my-slug]/" -msgstr "Numele paginii așa cum va apărea în adrese. De exemplu, http://domain.com/blog/[my-slug]/" +"The name of the page as it will appear in URLs e.g http://domain.com/blog/" +"[my-slug]/" +msgstr "" +"Numele paginii așa cum va apărea în adrese. De exemplu, http://domain.com/" +"blog/[my-slug]/" -#: models.py:287 +#: models.py:261 msgid "Page title" msgstr "Titlu pagină" -#: models.py:287 +#: models.py:261 msgid "" -"Optional. 'Search Engine Friendly' title. This will appear at the top of the" -" browser window." -msgstr "Opțional. Titlu favorabil motoarelor de căutare. Apare în partea de sus a browserului." +"Optional. 'Search Engine Friendly' title. This will appear at the top of the " +"browser window." +msgstr "" +"Opțional. Titlu favorabil motoarelor de căutare. Apare în partea de sus a " +"browserului." -#: models.py:288 +#: models.py:262 msgid "" "Whether a link to this page will appear in automatically generated menus" -msgstr "Dacă un link către această pagină va apărea în meniurile generate în mod automat" +msgstr "" +"Dacă un link către această pagină va apărea în meniurile generate în mod " +"automat" -#: models.py:291 +#: models.py:265 msgid "Go live date/time" msgstr "" -#: models.py:291 models.py:292 +#: models.py:265 models.py:266 msgid "Please add a date-time in the form YYYY-MM-DD hh:mm:ss." msgstr "" -#: models.py:292 +#: models.py:266 msgid "Expiry date/time" msgstr "" -#: models.py:564 +#: models.py:530 msgid "name '{0}' (used in subpage_types list) is not defined." msgstr "" diff --git a/wagtail/wagtailcore/locale/zh/LC_MESSAGES/django.po b/wagtail/wagtailcore/locale/zh/LC_MESSAGES/django.po index 4dc9d01ee1..6cc34c60c0 100644 --- a/wagtail/wagtailcore/locale/zh/LC_MESSAGES/django.po +++ b/wagtail/wagtailcore/locale/zh/LC_MESSAGES/django.po @@ -1,79 +1,83 @@ # SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. -# +# # Translators: msgid "" msgstr "" "Project-Id-Version: Wagtail\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2014-08-01 16:38+0100\n" +"POT-Creation-Date: 2014-09-11 16:37+0100\n" "PO-Revision-Date: 2014-08-01 15:43+0000\n" "Last-Translator: Karl Hobley \n" -"Language-Team: Chinese (http://www.transifex.com/projects/p/wagtail/language/zh/)\n" +"Language-Team: Chinese (http://www.transifex.com/projects/p/wagtail/language/" +"zh/)\n" +"Language: zh\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"Language: zh\n" "Plural-Forms: nplurals=1; plural=0;\n" -#: models.py:46 +#: models.py:45 msgid "" "Set this to something other than 80 if you need a specific port number to " "appear in URLs (e.g. development on port 8000). Does not affect request " "handling (so port forwarding still works)." -msgstr "如果你需要指定端口,请选择一个有别于80的端口(比如开发端口8000)。 不影响接受请求 (端口转发仍然有效)" +msgstr "" +"如果你需要指定端口,请选择一个有别于80的端口(比如开发端口8000)。 不影响接受请" +"求 (端口转发仍然有效)" -#: models.py:48 +#: models.py:47 msgid "" "If true, this site will handle requests for all other hostnames that do not " "have a site entry of their own" -msgstr "如果是真的,这个网站将处理没有一个属于自己的主机名的其他所有主机名的请求" +msgstr "" +"如果是真的,这个网站将处理没有一个属于自己的主机名的其他所有主机名的请求" -#: models.py:109 +#: models.py:108 #, python-format msgid "" "%(hostname)s is already configured as the default site. You must unset that " "before you can save this site as default." msgstr "" -#: models.py:277 +#: models.py:251 msgid "The page title as you'd like it to be seen by the public" msgstr "页面标题,你想被大众所看到的" -#: models.py:278 +#: models.py:252 msgid "" -"The name of the page as it will appear in URLs e.g http://domain.com/blog" -"/[my-slug]/" +"The name of the page as it will appear in URLs e.g http://domain.com/blog/" +"[my-slug]/" msgstr "一个出现在URL的名字 比如 http://domain.com/blog/[my-slug]/" -#: models.py:287 +#: models.py:261 msgid "Page title" msgstr "页面标题" -#: models.py:287 +#: models.py:261 msgid "" -"Optional. 'Search Engine Friendly' title. This will appear at the top of the" -" browser window." +"Optional. 'Search Engine Friendly' title. This will appear at the top of the " +"browser window." msgstr "可选 ‘搜索引擎友好’ 标题。 这会显示在浏览器窗口顶部" -#: models.py:288 +#: models.py:262 msgid "" "Whether a link to this page will appear in automatically generated menus" msgstr "一个链接到这页的链接会显示在自动生成的菜单中" -#: models.py:291 +#: models.py:265 msgid "Go live date/time" msgstr "" -#: models.py:291 models.py:292 +#: models.py:265 models.py:266 msgid "Please add a date-time in the form YYYY-MM-DD hh:mm:ss." msgstr "" -#: models.py:292 +#: models.py:266 msgid "Expiry date/time" msgstr "" -#: models.py:564 +#: models.py:530 msgid "name '{0}' (used in subpage_types list) is not defined." msgstr "" diff --git a/wagtail/wagtailcore/locale/zh_TW/LC_MESSAGES/django.po b/wagtail/wagtailcore/locale/zh_TW/LC_MESSAGES/django.po index 3a3a2bfa64..fa861030bf 100644 --- a/wagtail/wagtailcore/locale/zh_TW/LC_MESSAGES/django.po +++ b/wagtail/wagtailcore/locale/zh_TW/LC_MESSAGES/django.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: Wagtail\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2014-08-01 16:38+0100\n" +"POT-Creation-Date: 2014-09-11 16:37+0100\n" "PO-Revision-Date: 2014-02-28 16:07+0000\n" "Last-Translator: wdv4758h \n" "Language-Team: \n" @@ -17,7 +17,7 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=1; plural=0;\n" -#: models.py:46 +#: models.py:45 msgid "" "Set this to something other than 80 if you need a specific port number to " "appear in URLs (e.g. development on port 8000). Does not affect request " @@ -26,58 +26,58 @@ msgstr "" "如果你需要指定 port,請選擇一個非 80 的 port number (例如: 開發中用 8000 " "port)。 不影響 request 處理 (port forwarding 仍然有效)" -#: models.py:48 +#: models.py:47 msgid "" "If true, this site will handle requests for all other hostnames that do not " "have a site entry of their own" msgstr "" "如果這是 Ture 的話,這個網站將處理其他沒有自己網站的 hostname 的 request。" -#: models.py:109 +#: models.py:108 #, python-format msgid "" "%(hostname)s is already configured as the default site. You must unset that " "before you can save this site as default." msgstr "" -#: models.py:277 +#: models.py:251 msgid "The page title as you'd like it to be seen by the public" msgstr "頁面標題 (你想讓外界看到的)" -#: models.py:278 +#: models.py:252 msgid "" "The name of the page as it will appear in URLs e.g http://domain.com/blog/" "[my-slug]/" msgstr "一個出現在 URL 的名字,例如 http://domain.com/blog/[my-slug]/" -#: models.py:287 +#: models.py:261 msgid "Page title" msgstr "頁面標題" -#: models.py:287 +#: models.py:261 msgid "" "Optional. 'Search Engine Friendly' title. This will appear at the top of the " "browser window." msgstr "(可選) '搜尋引擎友善' 標題。 這會顯示在瀏覽器的視窗最上方" -#: models.py:288 +#: models.py:262 msgid "" "Whether a link to this page will appear in automatically generated menus" msgstr "是否在自動生成的 Menu 裡顯示一個連結到此頁面" -#: models.py:291 +#: models.py:265 msgid "Go live date/time" msgstr "" -#: models.py:291 models.py:292 +#: models.py:265 models.py:266 msgid "Please add a date-time in the form YYYY-MM-DD hh:mm:ss." msgstr "" -#: models.py:292 +#: models.py:266 msgid "Expiry date/time" msgstr "" -#: models.py:564 +#: models.py:530 #, fuzzy msgid "name '{0}' (used in subpage_types list) is not defined." msgstr "'%s' (用於子頁面類型列表) 沒有被建立。" diff --git a/wagtail/wagtaildocs/locale/bg/LC_MESSAGES/django.po b/wagtail/wagtaildocs/locale/bg/LC_MESSAGES/django.po index ff8ce4bd16..c857634554 100644 --- a/wagtail/wagtaildocs/locale/bg/LC_MESSAGES/django.po +++ b/wagtail/wagtaildocs/locale/bg/LC_MESSAGES/django.po @@ -1,21 +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. -# +# # Translators: # Lyuboslav Petrov , 2014 msgid "" msgstr "" "Project-Id-Version: Wagtail\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2014-08-01 16:38+0100\n" +"POT-Creation-Date: 2014-09-11 16:38+0100\n" "PO-Revision-Date: 2014-08-01 15:43+0000\n" "Last-Translator: Karl Hobley \n" -"Language-Team: Bulgarian (http://www.transifex.com/projects/p/wagtail/language/bg/)\n" +"Language-Team: Bulgarian (http://www.transifex.com/projects/p/wagtail/" +"language/bg/)\n" +"Language: bg\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"Language: bg\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" #: models.py:21 templates/wagtaildocs/documents/list.html:11 @@ -32,7 +33,7 @@ msgstr "Файл" msgid "Tags" msgstr "Тагове" -#: wagtail_hooks.py:24 templates/wagtaildocs/documents/index.html:16 +#: wagtail_hooks.py:26 templates/wagtaildocs/documents/index.html:16 msgid "Documents" msgstr "Документи" @@ -67,8 +68,13 @@ msgid_plural "" "\n" " There are %(counter)s matches\n" " " -msgstr[0] "\n Има едно съвпадение\n " -msgstr[1] "\nИма %(counter)s съвпадения" +msgstr[0] "" +"\n" +" Има едно съвпадение\n" +" " +msgstr[1] "" +"\n" +"Има %(counter)s съвпадения" #: templates/wagtaildocs/chooser/results.html:12 msgid "Latest documents" @@ -128,9 +134,11 @@ msgstr "Качени" #: templates/wagtaildocs/documents/results.html:21 #, python-format msgid "" -"You haven't uploaded any documents. Why not upload one now?" -msgstr "Не сте качили никакви документи. Защо не качите един сега?" +"You haven't uploaded any documents. Why not upload one now?" +msgstr "" +"Не сте качили никакви документи. Защо не качите един сега?" #: templates/wagtaildocs/documents/usage.html:3 #, python-format @@ -165,22 +173,22 @@ msgstr "Изчисти избора" msgid "Choose another document" msgstr "Избери друг документ" -#: views/documents.py:37 views/documents.py:46 +#: views/documents.py:38 views/documents.py:47 msgid "Search documents" msgstr "" -#: views/documents.py:86 +#: views/documents.py:92 msgid "Document '{0}' added." msgstr "Документ '{0}' добавен." -#: views/documents.py:89 views/documents.py:118 +#: views/documents.py:95 views/documents.py:129 msgid "The document could not be saved due to errors." msgstr "Документа не бе запазен поради грешки." -#: views/documents.py:115 +#: views/documents.py:126 msgid "Document '{0}' updated" msgstr "Документа '{0}' е обновен." -#: views/documents.py:137 +#: views/documents.py:148 msgid "Document '{0}' deleted." msgstr "Документа '{0}' е изтрит." diff --git a/wagtail/wagtaildocs/locale/ca/LC_MESSAGES/django.po b/wagtail/wagtaildocs/locale/ca/LC_MESSAGES/django.po index 03625463e2..fe2f957a82 100644 --- a/wagtail/wagtaildocs/locale/ca/LC_MESSAGES/django.po +++ b/wagtail/wagtaildocs/locale/ca/LC_MESSAGES/django.po @@ -1,21 +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. -# +# # Translators: # David Llop , 2014 msgid "" msgstr "" "Project-Id-Version: Wagtail\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2014-08-01 16:38+0100\n" +"POT-Creation-Date: 2014-09-11 16:38+0100\n" "PO-Revision-Date: 2014-08-01 15:43+0000\n" "Last-Translator: Karl Hobley \n" -"Language-Team: Catalan (http://www.transifex.com/projects/p/wagtail/language/ca/)\n" +"Language-Team: Catalan (http://www.transifex.com/projects/p/wagtail/language/" +"ca/)\n" +"Language: ca\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"Language: ca\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" #: models.py:21 templates/wagtaildocs/documents/list.html:11 @@ -32,7 +33,7 @@ msgstr "Arxiu" msgid "Tags" msgstr "Tags" -#: wagtail_hooks.py:24 templates/wagtaildocs/documents/index.html:16 +#: wagtail_hooks.py:26 templates/wagtaildocs/documents/index.html:16 msgid "Documents" msgstr "Documents" @@ -67,8 +68,12 @@ msgid_plural "" "\n" " There are %(counter)s matches\n" " " -msgstr[0] "\nHi ha un resultat" -msgstr[1] "\nHi han %(counter)s resultats" +msgstr[0] "" +"\n" +"Hi ha un resultat" +msgstr[1] "" +"\n" +"Hi han %(counter)s resultats" #: templates/wagtaildocs/chooser/results.html:12 msgid "Latest documents" @@ -128,9 +133,11 @@ msgstr "Pujat" #: templates/wagtaildocs/documents/results.html:21 #, python-format msgid "" -"You haven't uploaded any documents. Why not upload one now?" -msgstr "No has pujat cap document. Per què no pujes un ara?" +"You haven't uploaded any documents. Why not upload one now?" +msgstr "" +"No has pujat cap document. Per què no pujes un ara?" #: templates/wagtaildocs/documents/usage.html:3 #, python-format @@ -165,22 +172,22 @@ msgstr "Opció clara" msgid "Choose another document" msgstr "Escull un altre document" -#: views/documents.py:37 views/documents.py:46 +#: views/documents.py:38 views/documents.py:47 msgid "Search documents" msgstr "Cercar documents" -#: views/documents.py:86 +#: views/documents.py:92 msgid "Document '{0}' added." msgstr "Document '{0}' afegit." -#: views/documents.py:89 views/documents.py:118 +#: views/documents.py:95 views/documents.py:129 msgid "The document could not be saved due to errors." msgstr "El document no s'ha pogut desar." -#: views/documents.py:115 +#: views/documents.py:126 msgid "Document '{0}' updated" msgstr "Document '{0}' actualitzat" -#: views/documents.py:137 +#: views/documents.py:148 msgid "Document '{0}' deleted." msgstr "Document '{0}' esborrat." diff --git a/wagtail/wagtaildocs/locale/de/LC_MESSAGES/django.po b/wagtail/wagtaildocs/locale/de/LC_MESSAGES/django.po index ae5dccc633..e5e53a0056 100644 --- a/wagtail/wagtaildocs/locale/de/LC_MESSAGES/django.po +++ b/wagtail/wagtaildocs/locale/de/LC_MESSAGES/django.po @@ -1,7 +1,7 @@ # SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. -# +# # Translators: # Johannes Spielmann , 2014 # karlsander , 2014 @@ -10,14 +10,15 @@ msgid "" msgstr "" "Project-Id-Version: Wagtail\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2014-08-01 16:38+0100\n" +"POT-Creation-Date: 2014-09-11 16:38+0100\n" "PO-Revision-Date: 2014-08-01 15:43+0000\n" "Last-Translator: Karl Hobley \n" -"Language-Team: German (http://www.transifex.com/projects/p/wagtail/language/de/)\n" +"Language-Team: German (http://www.transifex.com/projects/p/wagtail/language/" +"de/)\n" +"Language: de\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"Language: de\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" #: models.py:21 templates/wagtaildocs/documents/list.html:11 @@ -34,7 +35,7 @@ msgstr "Datei" msgid "Tags" msgstr "Schlagwörter" -#: wagtail_hooks.py:24 templates/wagtaildocs/documents/index.html:16 +#: wagtail_hooks.py:26 templates/wagtaildocs/documents/index.html:16 msgid "Documents" msgstr "Dokumente" @@ -69,8 +70,14 @@ msgid_plural "" "\n" " There are %(counter)s matches\n" " " -msgstr[0] "\n Es gibt ein Ergebnis\n " -msgstr[1] "\n Es gibt %(counter)s Ergebnisse\n " +msgstr[0] "" +"\n" +" Es gibt ein Ergebnis\n" +" " +msgstr[1] "" +"\n" +" Es gibt %(counter)s Ergebnisse\n" +" " #: templates/wagtaildocs/chooser/results.html:12 msgid "Latest documents" @@ -80,7 +87,8 @@ msgstr "Neueste Dokumente" #: templates/wagtaildocs/documents/results.html:18 #, python-format msgid "Sorry, no documents match \"%(query_string)s\"" -msgstr "Es gibt leider keine Dokumente zum Suchbegriff \"%(query_string)s\"" +msgstr "" +"Es gibt leider keine Dokumente zum Suchbegriff \"%(query_string)s\"" #: templates/wagtaildocs/documents/_file_field.html:5 msgid "Change document:" @@ -130,9 +138,11 @@ msgstr "Hochgeladen" #: templates/wagtaildocs/documents/results.html:21 #, python-format msgid "" -"You haven't uploaded any documents. Why not upload one now?" -msgstr "Sie haben noch keine Dokumente hochgeladen. Laden Sie doch jetzt eins hoch!" +"You haven't uploaded any documents. Why not upload one now?" +msgstr "" +"Sie haben noch keine Dokumente hochgeladen. Laden Sie doch jetzt eins hoch!" #: templates/wagtaildocs/documents/usage.html:3 #, python-format @@ -167,22 +177,22 @@ msgstr "Auswahl zurücksetzen" msgid "Choose another document" msgstr "Anderes Dokument wählen" -#: views/documents.py:37 views/documents.py:46 +#: views/documents.py:38 views/documents.py:47 msgid "Search documents" msgstr "Nach Dokumenten suchen" -#: views/documents.py:86 +#: views/documents.py:92 msgid "Document '{0}' added." msgstr "Dokument '{0}' wurde hinzugefügt." -#: views/documents.py:89 views/documents.py:118 +#: views/documents.py:95 views/documents.py:129 msgid "The document could not be saved due to errors." msgstr "Aufgrund eines Fehlers konnte das Dokument nicht gespeichert werden." -#: views/documents.py:115 +#: views/documents.py:126 msgid "Document '{0}' updated" msgstr "Dokument '{0}' wurde hochgeladen" -#: views/documents.py:137 +#: views/documents.py:148 msgid "Document '{0}' deleted." msgstr "Dokument '{0}' wurde gelöscht." diff --git a/wagtail/wagtaildocs/locale/el/LC_MESSAGES/django.po b/wagtail/wagtaildocs/locale/el/LC_MESSAGES/django.po index 15b8a82e96..7819194fdd 100644 --- a/wagtail/wagtaildocs/locale/el/LC_MESSAGES/django.po +++ b/wagtail/wagtaildocs/locale/el/LC_MESSAGES/django.po @@ -1,21 +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. -# +# # Translators: # serafeim , 2014 msgid "" msgstr "" "Project-Id-Version: Wagtail\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2014-08-01 16:38+0100\n" +"POT-Creation-Date: 2014-09-11 16:38+0100\n" "PO-Revision-Date: 2014-08-01 15:43+0000\n" "Last-Translator: Karl Hobley \n" -"Language-Team: Greek (http://www.transifex.com/projects/p/wagtail/language/el/)\n" +"Language-Team: Greek (http://www.transifex.com/projects/p/wagtail/language/" +"el/)\n" +"Language: el\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"Language: el\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" #: models.py:21 templates/wagtaildocs/documents/list.html:11 @@ -32,7 +33,7 @@ msgstr "Αρχείο" msgid "Tags" msgstr "Ετικέτες" -#: wagtail_hooks.py:24 templates/wagtaildocs/documents/index.html:16 +#: wagtail_hooks.py:26 templates/wagtaildocs/documents/index.html:16 msgid "Documents" msgstr "Έγγραφα" @@ -67,8 +68,14 @@ msgid_plural "" "\n" " There are %(counter)s matches\n" " " -msgstr[0] "\n Βρέθηκε ένα αποτέλεσμα\n " -msgstr[1] "\n Βρέθηκαν %(counter)s αποτελέσματα\n " +msgstr[0] "" +"\n" +" Βρέθηκε ένα αποτέλεσμα\n" +" " +msgstr[1] "" +"\n" +" Βρέθηκαν %(counter)s αποτελέσματα\n" +" " #: templates/wagtaildocs/chooser/results.html:12 msgid "Latest documents" @@ -78,7 +85,8 @@ msgstr "Τελευταία έγγραφα" #: templates/wagtaildocs/documents/results.html:18 #, python-format msgid "Sorry, no documents match \"%(query_string)s\"" -msgstr "Δε βρέθηκαν έγγραφα που να ταιριάζουν με το \"%(query_string)s\"" +msgstr "" +"Δε βρέθηκαν έγγραφα που να ταιριάζουν με το \"%(query_string)s\"" #: templates/wagtaildocs/documents/_file_field.html:5 msgid "Change document:" @@ -128,9 +136,11 @@ msgstr "Ανεβασμένο" #: templates/wagtaildocs/documents/results.html:21 #, python-format msgid "" -"You haven't uploaded any documents. Why not upload one now?" -msgstr "Δεν υπάρχουν έγγραφα. Θέλετε να ανεβάσετε μερικά;" +"You haven't uploaded any documents. Why not upload one now?" +msgstr "" +"Δεν υπάρχουν έγγραφα. Θέλετε να ανεβάσετε μερικά;" #: templates/wagtaildocs/documents/usage.html:3 #, python-format @@ -165,22 +175,22 @@ msgstr "Καθαρισμός επιλογής" msgid "Choose another document" msgstr "Επιλογή άλλου εγγράφου" -#: views/documents.py:37 views/documents.py:46 +#: views/documents.py:38 views/documents.py:47 msgid "Search documents" msgstr "Αναζήτηση εγγράφων" -#: views/documents.py:86 +#: views/documents.py:92 msgid "Document '{0}' added." msgstr "Το έγγραφο '{0}' προστέθηκε." -#: views/documents.py:89 views/documents.py:118 +#: views/documents.py:95 views/documents.py:129 msgid "The document could not be saved due to errors." msgstr "Δεν ήταν δυνατή η αποθήκευση του εγγράφου." -#: views/documents.py:115 +#: views/documents.py:126 msgid "Document '{0}' updated" msgstr "Έγινε διόρθωση του εγγράφου '{0}'" -#: views/documents.py:137 +#: views/documents.py:148 msgid "Document '{0}' deleted." msgstr "Το έγγραφο '{0}' διαγράφηκε." diff --git a/wagtail/wagtaildocs/locale/en/LC_MESSAGES/django.po b/wagtail/wagtaildocs/locale/en/LC_MESSAGES/django.po index 88d049cda9..8ed1d8ba0c 100644 --- a/wagtail/wagtaildocs/locale/en/LC_MESSAGES/django.po +++ b/wagtail/wagtaildocs/locale/en/LC_MESSAGES/django.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2014-08-01 16:38+0100\n" +"POT-Creation-Date: 2014-09-11 16:38+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -31,7 +31,7 @@ msgstr "" msgid "Tags" msgstr "" -#: wagtail_hooks.py:24 templates/wagtaildocs/documents/index.html:16 +#: wagtail_hooks.py:26 templates/wagtaildocs/documents/index.html:16 msgid "Documents" msgstr "" @@ -164,22 +164,22 @@ msgstr "" msgid "Choose another document" msgstr "" -#: views/documents.py:37 views/documents.py:46 +#: views/documents.py:38 views/documents.py:47 msgid "Search documents" msgstr "" -#: views/documents.py:86 +#: views/documents.py:92 msgid "Document '{0}' added." msgstr "" -#: views/documents.py:89 views/documents.py:118 +#: views/documents.py:95 views/documents.py:129 msgid "The document could not be saved due to errors." msgstr "" -#: views/documents.py:115 +#: views/documents.py:126 msgid "Document '{0}' updated" msgstr "" -#: views/documents.py:137 +#: views/documents.py:148 msgid "Document '{0}' deleted." msgstr "" diff --git a/wagtail/wagtaildocs/locale/es/LC_MESSAGES/django.po b/wagtail/wagtaildocs/locale/es/LC_MESSAGES/django.po index a8b711977e..a122936a0d 100644 --- a/wagtail/wagtaildocs/locale/es/LC_MESSAGES/django.po +++ b/wagtail/wagtaildocs/locale/es/LC_MESSAGES/django.po @@ -1,7 +1,7 @@ # SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. -# +# # Translators: # fooflare , 2014 # fooflare , 2014 @@ -9,14 +9,15 @@ msgid "" msgstr "" "Project-Id-Version: Wagtail\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2014-08-01 16:38+0100\n" +"POT-Creation-Date: 2014-09-11 16:38+0100\n" "PO-Revision-Date: 2014-08-01 15:43+0000\n" "Last-Translator: Karl Hobley \n" -"Language-Team: Spanish (http://www.transifex.com/projects/p/wagtail/language/es/)\n" +"Language-Team: Spanish (http://www.transifex.com/projects/p/wagtail/language/" +"es/)\n" +"Language: es\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"Language: es\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" #: models.py:21 templates/wagtaildocs/documents/list.html:11 @@ -33,7 +34,7 @@ msgstr "Archivo" msgid "Tags" msgstr "Etiquetas" -#: wagtail_hooks.py:24 templates/wagtaildocs/documents/index.html:16 +#: wagtail_hooks.py:26 templates/wagtaildocs/documents/index.html:16 msgid "Documents" msgstr "Documentos" @@ -68,8 +69,14 @@ msgid_plural "" "\n" " There are %(counter)s matches\n" " " -msgstr[0] "\n Hay una coincidencia\n " -msgstr[1] "\n Hay %(counter)s coincidencias\n " +msgstr[0] "" +"\n" +" Hay una coincidencia\n" +" " +msgstr[1] "" +"\n" +" Hay %(counter)s coincidencias\n" +" " #: templates/wagtaildocs/chooser/results.html:12 msgid "Latest documents" @@ -129,9 +136,11 @@ msgstr "Subidos" #: templates/wagtaildocs/documents/results.html:21 #, python-format msgid "" -"You haven't uploaded any documents. Why not upload one now?" -msgstr "No has subido documentos. ¿Por qué no subir uno ahora?" +"You haven't uploaded any documents. Why not upload one now?" +msgstr "" +"No has subido documentos. ¿Por qué no subir uno ahora?" #: templates/wagtaildocs/documents/usage.html:3 #, python-format @@ -166,22 +175,22 @@ msgstr "Borrar selección" msgid "Choose another document" msgstr "Elegir otro documento" -#: views/documents.py:37 views/documents.py:46 +#: views/documents.py:38 views/documents.py:47 msgid "Search documents" msgstr "Buscar documentos" -#: views/documents.py:86 +#: views/documents.py:92 msgid "Document '{0}' added." msgstr "Documento '{0}' añadido." -#: views/documents.py:89 views/documents.py:118 +#: views/documents.py:95 views/documents.py:129 msgid "The document could not be saved due to errors." msgstr "El documento no pudo ser guardado debido a errores." -#: views/documents.py:115 +#: views/documents.py:126 msgid "Document '{0}' updated" msgstr "Documento '{0}' actualizado" -#: views/documents.py:137 +#: views/documents.py:148 msgid "Document '{0}' deleted." msgstr "Documento '{0}' eliminado." diff --git a/wagtail/wagtaildocs/locale/eu/LC_MESSAGES/django.po b/wagtail/wagtaildocs/locale/eu/LC_MESSAGES/django.po index aa6f5d81bb..17e5726b59 100644 --- a/wagtail/wagtaildocs/locale/eu/LC_MESSAGES/django.po +++ b/wagtail/wagtaildocs/locale/eu/LC_MESSAGES/django.po @@ -1,20 +1,21 @@ # SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. -# +# # Translators: msgid "" msgstr "" "Project-Id-Version: Wagtail\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2014-08-01 16:38+0100\n" +"POT-Creation-Date: 2014-09-11 16:38+0100\n" "PO-Revision-Date: 2014-08-01 15:43+0000\n" "Last-Translator: Karl Hobley \n" -"Language-Team: Basque (http://www.transifex.com/projects/p/wagtail/language/eu/)\n" +"Language-Team: Basque (http://www.transifex.com/projects/p/wagtail/language/" +"eu/)\n" +"Language: eu\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"Language: eu\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" #: models.py:21 templates/wagtaildocs/documents/list.html:11 @@ -31,7 +32,7 @@ msgstr "" msgid "Tags" msgstr "" -#: wagtail_hooks.py:24 templates/wagtaildocs/documents/index.html:16 +#: wagtail_hooks.py:26 templates/wagtaildocs/documents/index.html:16 msgid "Documents" msgstr "" @@ -127,8 +128,8 @@ msgstr "" #: templates/wagtaildocs/documents/results.html:21 #, python-format msgid "" -"You haven't uploaded any documents. Why not upload one now?" +"You haven't uploaded any documents. Why not upload one now?" msgstr "" #: templates/wagtaildocs/documents/usage.html:3 @@ -164,22 +165,22 @@ msgstr "" msgid "Choose another document" msgstr "" -#: views/documents.py:37 views/documents.py:46 +#: views/documents.py:38 views/documents.py:47 msgid "Search documents" msgstr "" -#: views/documents.py:86 +#: views/documents.py:92 msgid "Document '{0}' added." msgstr "" -#: views/documents.py:89 views/documents.py:118 +#: views/documents.py:95 views/documents.py:129 msgid "The document could not be saved due to errors." msgstr "" -#: views/documents.py:115 +#: views/documents.py:126 msgid "Document '{0}' updated" msgstr "" -#: views/documents.py:137 +#: views/documents.py:148 msgid "Document '{0}' deleted." msgstr "" diff --git a/wagtail/wagtaildocs/locale/fr/LC_MESSAGES/django.po b/wagtail/wagtaildocs/locale/fr/LC_MESSAGES/django.po index ec5c5f9bf2..ec8da90b8f 100644 --- a/wagtail/wagtaildocs/locale/fr/LC_MESSAGES/django.po +++ b/wagtail/wagtaildocs/locale/fr/LC_MESSAGES/django.po @@ -1,21 +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. -# +# # Translators: # nahuel, 2014 msgid "" msgstr "" "Project-Id-Version: Wagtail\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2014-08-01 16:38+0100\n" +"POT-Creation-Date: 2014-09-11 16:38+0100\n" "PO-Revision-Date: 2014-08-01 15:43+0000\n" "Last-Translator: Karl Hobley \n" -"Language-Team: French (http://www.transifex.com/projects/p/wagtail/language/fr/)\n" +"Language-Team: French (http://www.transifex.com/projects/p/wagtail/language/" +"fr/)\n" +"Language: fr\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"Language: fr\n" "Plural-Forms: nplurals=2; plural=(n > 1);\n" #: models.py:21 templates/wagtaildocs/documents/list.html:11 @@ -32,7 +33,7 @@ msgstr "Fichier" msgid "Tags" msgstr "Mots-clés" -#: wagtail_hooks.py:24 templates/wagtaildocs/documents/index.html:16 +#: wagtail_hooks.py:26 templates/wagtaildocs/documents/index.html:16 msgid "Documents" msgstr "Documents" @@ -128,8 +129,8 @@ msgstr "" #: templates/wagtaildocs/documents/results.html:21 #, python-format msgid "" -"You haven't uploaded any documents. Why not upload one now?" +"You haven't uploaded any documents. Why not upload one now?" msgstr "" #: templates/wagtaildocs/documents/usage.html:3 @@ -165,22 +166,22 @@ msgstr "" msgid "Choose another document" msgstr "" -#: views/documents.py:37 views/documents.py:46 +#: views/documents.py:38 views/documents.py:47 msgid "Search documents" msgstr "" -#: views/documents.py:86 +#: views/documents.py:92 msgid "Document '{0}' added." msgstr "Document '{0}' ajouté." -#: views/documents.py:89 views/documents.py:118 +#: views/documents.py:95 views/documents.py:129 msgid "The document could not be saved due to errors." msgstr "Le document ne peut être enregistré du fait d'erreurs." -#: views/documents.py:115 +#: views/documents.py:126 msgid "Document '{0}' updated" msgstr "Document '{0}' mis à jour" -#: views/documents.py:137 +#: views/documents.py:148 msgid "Document '{0}' deleted." msgstr "Document '{0}' supprimé." diff --git a/wagtail/wagtaildocs/locale/gl/LC_MESSAGES/django.po b/wagtail/wagtaildocs/locale/gl/LC_MESSAGES/django.po index 4a2ce5bef1..c7dd8fc564 100644 --- a/wagtail/wagtaildocs/locale/gl/LC_MESSAGES/django.po +++ b/wagtail/wagtaildocs/locale/gl/LC_MESSAGES/django.po @@ -1,7 +1,7 @@ # SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. -# +# # Translators: # fooflare , 2014 # fooflare , 2014 @@ -9,14 +9,15 @@ msgid "" msgstr "" "Project-Id-Version: Wagtail\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2014-08-01 16:38+0100\n" +"POT-Creation-Date: 2014-09-11 16:38+0100\n" "PO-Revision-Date: 2014-08-01 15:43+0000\n" "Last-Translator: Karl Hobley \n" -"Language-Team: Galician (http://www.transifex.com/projects/p/wagtail/language/gl/)\n" +"Language-Team: Galician (http://www.transifex.com/projects/p/wagtail/" +"language/gl/)\n" +"Language: gl\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"Language: gl\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" #: models.py:21 templates/wagtaildocs/documents/list.html:11 @@ -33,7 +34,7 @@ msgstr "Arquivo" msgid "Tags" msgstr "Etiquetas" -#: wagtail_hooks.py:24 templates/wagtaildocs/documents/index.html:16 +#: wagtail_hooks.py:26 templates/wagtaildocs/documents/index.html:16 msgid "Documents" msgstr "Documentos" @@ -68,8 +69,14 @@ msgid_plural "" "\n" " There are %(counter)s matches\n" " " -msgstr[0] "\n Hai unha coincidencia\n " -msgstr[1] "\n Hai %(counter)s coincidencias\n " +msgstr[0] "" +"\n" +" Hai unha coincidencia\n" +" " +msgstr[1] "" +"\n" +" Hai %(counter)s coincidencias\n" +" " #: templates/wagtaildocs/chooser/results.html:12 msgid "Latest documents" @@ -129,9 +136,11 @@ msgstr "Subidos" #: templates/wagtaildocs/documents/results.html:21 #, python-format msgid "" -"You haven't uploaded any documents. Why not upload one now?" -msgstr "Non subiches documentos. ¿Por qué non subir un agora?" +"You haven't uploaded any documents. Why not upload one now?" +msgstr "" +"Non subiches documentos. ¿Por qué non subir un agora?" #: templates/wagtaildocs/documents/usage.html:3 #, python-format @@ -166,22 +175,22 @@ msgstr "Borrar selección" msgid "Choose another document" msgstr "Elixir outro documento" -#: views/documents.py:37 views/documents.py:46 +#: views/documents.py:38 views/documents.py:47 msgid "Search documents" msgstr "Buscar documentos" -#: views/documents.py:86 +#: views/documents.py:92 msgid "Document '{0}' added." msgstr "Documento '{0}' engadido." -#: views/documents.py:89 views/documents.py:118 +#: views/documents.py:95 views/documents.py:129 msgid "The document could not be saved due to errors." msgstr "O documento non puido ser gardado debido a erros." -#: views/documents.py:115 +#: views/documents.py:126 msgid "Document '{0}' updated" msgstr "Documento '{0}' actualizado" -#: views/documents.py:137 +#: views/documents.py:148 msgid "Document '{0}' deleted." msgstr "Documento '{0}' eliminado." diff --git a/wagtail/wagtaildocs/locale/mn/LC_MESSAGES/django.po b/wagtail/wagtaildocs/locale/mn/LC_MESSAGES/django.po index 5e127bb885..9a59b5afa7 100644 --- a/wagtail/wagtaildocs/locale/mn/LC_MESSAGES/django.po +++ b/wagtail/wagtaildocs/locale/mn/LC_MESSAGES/django.po @@ -1,20 +1,21 @@ # SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. -# +# # Translators: msgid "" msgstr "" "Project-Id-Version: Wagtail\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2014-08-01 16:38+0100\n" +"POT-Creation-Date: 2014-09-11 16:38+0100\n" "PO-Revision-Date: 2014-08-01 15:43+0000\n" "Last-Translator: Karl Hobley \n" -"Language-Team: Mongolian (http://www.transifex.com/projects/p/wagtail/language/mn/)\n" +"Language-Team: Mongolian (http://www.transifex.com/projects/p/wagtail/" +"language/mn/)\n" +"Language: mn\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"Language: mn\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" #: models.py:21 templates/wagtaildocs/documents/list.html:11 @@ -31,7 +32,7 @@ msgstr "" msgid "Tags" msgstr "" -#: wagtail_hooks.py:24 templates/wagtaildocs/documents/index.html:16 +#: wagtail_hooks.py:26 templates/wagtaildocs/documents/index.html:16 msgid "Documents" msgstr "" @@ -127,8 +128,8 @@ msgstr "" #: templates/wagtaildocs/documents/results.html:21 #, python-format msgid "" -"You haven't uploaded any documents. Why not upload one now?" +"You haven't uploaded any documents. Why not upload one now?" msgstr "" #: templates/wagtaildocs/documents/usage.html:3 @@ -164,22 +165,22 @@ msgstr "" msgid "Choose another document" msgstr "" -#: views/documents.py:37 views/documents.py:46 +#: views/documents.py:38 views/documents.py:47 msgid "Search documents" msgstr "" -#: views/documents.py:86 +#: views/documents.py:92 msgid "Document '{0}' added." msgstr "" -#: views/documents.py:89 views/documents.py:118 +#: views/documents.py:95 views/documents.py:129 msgid "The document could not be saved due to errors." msgstr "" -#: views/documents.py:115 +#: views/documents.py:126 msgid "Document '{0}' updated" msgstr "" -#: views/documents.py:137 +#: views/documents.py:148 msgid "Document '{0}' deleted." msgstr "" diff --git a/wagtail/wagtaildocs/locale/pl/LC_MESSAGES/django.po b/wagtail/wagtaildocs/locale/pl/LC_MESSAGES/django.po index 81db484718..19dd430fe4 100644 --- a/wagtail/wagtaildocs/locale/pl/LC_MESSAGES/django.po +++ b/wagtail/wagtaildocs/locale/pl/LC_MESSAGES/django.po @@ -1,7 +1,7 @@ # SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. -# +# # Translators: # utek , 2014 # utek , 2014 @@ -9,15 +9,17 @@ msgid "" msgstr "" "Project-Id-Version: Wagtail\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2014-08-01 16:38+0100\n" +"POT-Creation-Date: 2014-09-11 16:38+0100\n" "PO-Revision-Date: 2014-08-01 15:43+0000\n" "Last-Translator: Karl Hobley \n" -"Language-Team: Polish (http://www.transifex.com/projects/p/wagtail/language/pl/)\n" +"Language-Team: Polish (http://www.transifex.com/projects/p/wagtail/language/" +"pl/)\n" +"Language: pl\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"Language: pl\n" -"Plural-Forms: nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" +"Plural-Forms: nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 " +"|| n%100>=20) ? 1 : 2);\n" #: models.py:21 templates/wagtaildocs/documents/list.html:11 #: templates/wagtaildocs/documents/list.html:14 @@ -33,7 +35,7 @@ msgstr "Plik" msgid "Tags" msgstr "Tagi" -#: wagtail_hooks.py:24 templates/wagtaildocs/documents/index.html:16 +#: wagtail_hooks.py:26 templates/wagtaildocs/documents/index.html:16 msgid "Documents" msgstr "Dokumenty" @@ -68,9 +70,18 @@ msgid_plural "" "\n" " There are %(counter)s matches\n" " " -msgstr[0] "\n Jedno dopasowanie\n " -msgstr[1] "\n Są %(counter)s dopasowania\n " -msgstr[2] "\n Jest %(counter)s dopasowań\n " +msgstr[0] "" +"\n" +" Jedno dopasowanie\n" +" " +msgstr[1] "" +"\n" +" Są %(counter)s dopasowania\n" +" " +msgstr[2] "" +"\n" +" Jest %(counter)s dopasowań\n" +" " #: templates/wagtaildocs/chooser/results.html:12 msgid "Latest documents" @@ -80,7 +91,8 @@ msgstr "Najnowsze dokumenty" #: templates/wagtaildocs/documents/results.html:18 #, python-format msgid "Sorry, no documents match \"%(query_string)s\"" -msgstr "Przepraszamy, żaden dokument nie pasuje do \"%(query_string)s\"" +msgstr "" +"Przepraszamy, żaden dokument nie pasuje do \"%(query_string)s\"" #: templates/wagtaildocs/documents/_file_field.html:5 msgid "Change document:" @@ -130,9 +142,11 @@ msgstr "Przesłano" #: templates/wagtaildocs/documents/results.html:21 #, python-format msgid "" -"You haven't uploaded any documents. Why not upload one now?" -msgstr "Nie przesłano żadnych dokumentów. Czemu nie dodać jednego teraz?" +"You haven't uploaded any documents. Why not upload one now?" +msgstr "" +"Nie przesłano żadnych dokumentów. Czemu nie dodać jednego teraz?" #: templates/wagtaildocs/documents/usage.html:3 #, python-format @@ -167,22 +181,22 @@ msgstr "Wyczyść wybór" msgid "Choose another document" msgstr "Wybierz inny dokument" -#: views/documents.py:37 views/documents.py:46 +#: views/documents.py:38 views/documents.py:47 msgid "Search documents" msgstr "Szukaj dokumentów" -#: views/documents.py:86 +#: views/documents.py:92 msgid "Document '{0}' added." msgstr "Dodano dokument '{0}'." -#: views/documents.py:89 views/documents.py:118 +#: views/documents.py:95 views/documents.py:129 msgid "The document could not be saved due to errors." msgstr "Dokument nie mógł zostać zapisany z powodu błędów." -#: views/documents.py:115 +#: views/documents.py:126 msgid "Document '{0}' updated" msgstr "Uaktualniono dokument '{0}'" -#: views/documents.py:137 +#: views/documents.py:148 msgid "Document '{0}' deleted." msgstr "Usunięto dokument '{0}'" diff --git a/wagtail/wagtaildocs/locale/pt_PT/LC_MESSAGES/django.po b/wagtail/wagtaildocs/locale/pt_PT/LC_MESSAGES/django.po index c352afd292..c80f8fa557 100644 --- a/wagtail/wagtaildocs/locale/pt_PT/LC_MESSAGES/django.po +++ b/wagtail/wagtaildocs/locale/pt_PT/LC_MESSAGES/django.po @@ -9,16 +9,16 @@ msgid "" msgstr "" "Project-Id-Version: Wagtail 0.5.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2014-08-01 16:38+0100\n" +"POT-Creation-Date: 2014-09-11 16:38+0100\n" "PO-Revision-Date: 2014-08-03 01:53+0100\n" "Last-Translator: Jose Lourenco \n" "Language-Team: \n" +"Language: pt_PT\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.4\n" -"Language: pt_PT\n" #: models.py:21 templates/wagtaildocs/documents/list.html:11 #: templates/wagtaildocs/documents/list.html:14 @@ -34,7 +34,7 @@ msgstr "Ficheiro" msgid "Tags" msgstr "Etiquetas" -#: wagtail_hooks.py:24 templates/wagtaildocs/documents/index.html:16 +#: wagtail_hooks.py:26 templates/wagtaildocs/documents/index.html:16 msgid "Documents" msgstr "Documentos" @@ -175,22 +175,22 @@ msgstr "Limpar escolha" msgid "Choose another document" msgstr "Escolher outro documento" -#: views/documents.py:37 views/documents.py:46 +#: views/documents.py:38 views/documents.py:47 msgid "Search documents" msgstr "Procurar documentos" -#: views/documents.py:86 +#: views/documents.py:92 msgid "Document '{0}' added." msgstr "Documento '{0}' adicionado." -#: views/documents.py:89 views/documents.py:118 +#: views/documents.py:95 views/documents.py:129 msgid "The document could not be saved due to errors." msgstr "O documento não pôde ser guardado devido a erros." -#: views/documents.py:115 +#: views/documents.py:126 msgid "Document '{0}' updated" msgstr "Documento '{0}' atualizado" -#: views/documents.py:137 +#: views/documents.py:148 msgid "Document '{0}' deleted." msgstr "Documento '{0}' apagado." diff --git a/wagtail/wagtaildocs/locale/ro/LC_MESSAGES/django.po b/wagtail/wagtaildocs/locale/ro/LC_MESSAGES/django.po index 15b64f26e6..631545a942 100644 --- a/wagtail/wagtaildocs/locale/ro/LC_MESSAGES/django.po +++ b/wagtail/wagtaildocs/locale/ro/LC_MESSAGES/django.po @@ -1,22 +1,24 @@ # SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. -# +# # Translators: # Dan Braghis, 2014 msgid "" msgstr "" "Project-Id-Version: Wagtail\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2014-08-01 16:38+0100\n" +"POT-Creation-Date: 2014-09-11 16:38+0100\n" "PO-Revision-Date: 2014-08-01 15:43+0000\n" "Last-Translator: Karl Hobley \n" -"Language-Team: Romanian (http://www.transifex.com/projects/p/wagtail/language/ro/)\n" +"Language-Team: Romanian (http://www.transifex.com/projects/p/wagtail/" +"language/ro/)\n" +"Language: ro\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"Language: ro\n" -"Plural-Forms: nplurals=3; plural=(n==1?0:(((n%100>19)||((n%100==0)&&(n!=0)))?2:1));\n" +"Plural-Forms: nplurals=3; plural=(n==1?0:(((n%100>19)||((n%100==0)&&(n!=0)))?" +"2:1));\n" #: models.py:21 templates/wagtaildocs/documents/list.html:11 #: templates/wagtaildocs/documents/list.html:14 @@ -32,7 +34,7 @@ msgstr "Fișier" msgid "Tags" msgstr "Etichete" -#: wagtail_hooks.py:24 templates/wagtaildocs/documents/index.html:16 +#: wagtail_hooks.py:26 templates/wagtaildocs/documents/index.html:16 msgid "Documents" msgstr "Documente" @@ -67,9 +69,15 @@ msgid_plural "" "\n" " There are %(counter)s matches\n" " " -msgstr[0] "\nExistă o potrivire" -msgstr[1] "\nSunt %(counter)s potriviri" -msgstr[2] "\nSunt %(counter)s potriviri" +msgstr[0] "" +"\n" +"Există o potrivire" +msgstr[1] "" +"\n" +"Sunt %(counter)s potriviri" +msgstr[2] "" +"\n" +"Sunt %(counter)s potriviri" #: templates/wagtaildocs/chooser/results.html:12 msgid "Latest documents" @@ -79,7 +87,9 @@ msgstr "Documente recente" #: templates/wagtaildocs/documents/results.html:18 #, python-format msgid "Sorry, no documents match \"%(query_string)s\"" -msgstr "Ne pare rău, \"%(query_string)s\" nu se potrivește cu nici un document" +msgstr "" +"Ne pare rău, \"%(query_string)s\" nu se potrivește cu nici un " +"document" #: templates/wagtaildocs/documents/_file_field.html:5 msgid "Change document:" @@ -129,9 +139,11 @@ msgstr "Încărcat" #: templates/wagtaildocs/documents/results.html:21 #, python-format msgid "" -"You haven't uploaded any documents. Why not upload one now?" -msgstr "Nu ați încărcat nici un document. De ce să nu adăugați unul?" +"You haven't uploaded any documents. Why not upload one now?" +msgstr "" +"Nu ați încărcat nici un document. De ce să nu adăugați unul?" #: templates/wagtaildocs/documents/usage.html:3 #, python-format @@ -166,22 +178,22 @@ msgstr "Curăță selecție" msgid "Choose another document" msgstr "Alege alt document" -#: views/documents.py:37 views/documents.py:46 +#: views/documents.py:38 views/documents.py:47 msgid "Search documents" msgstr "Caută documente" -#: views/documents.py:86 +#: views/documents.py:92 msgid "Document '{0}' added." msgstr "Documentul '{0}' a fost adăugat." -#: views/documents.py:89 views/documents.py:118 +#: views/documents.py:95 views/documents.py:129 msgid "The document could not be saved due to errors." msgstr "Documentul nu a fost salvat din cauza erorilor." -#: views/documents.py:115 +#: views/documents.py:126 msgid "Document '{0}' updated" msgstr "Documentul '{0}' a fost actualizat." -#: views/documents.py:137 +#: views/documents.py:148 msgid "Document '{0}' deleted." msgstr "Documentul '{0}' a fost șters." diff --git a/wagtail/wagtaildocs/locale/zh/LC_MESSAGES/django.po b/wagtail/wagtaildocs/locale/zh/LC_MESSAGES/django.po index 3ad210f18e..fb5109588d 100644 --- a/wagtail/wagtaildocs/locale/zh/LC_MESSAGES/django.po +++ b/wagtail/wagtaildocs/locale/zh/LC_MESSAGES/django.po @@ -1,20 +1,21 @@ # SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. -# +# # Translators: msgid "" msgstr "" "Project-Id-Version: Wagtail\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2014-08-01 16:38+0100\n" +"POT-Creation-Date: 2014-09-11 16:38+0100\n" "PO-Revision-Date: 2014-08-01 15:43+0000\n" "Last-Translator: Karl Hobley \n" -"Language-Team: Chinese (http://www.transifex.com/projects/p/wagtail/language/zh/)\n" +"Language-Team: Chinese (http://www.transifex.com/projects/p/wagtail/language/" +"zh/)\n" +"Language: zh\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"Language: zh\n" "Plural-Forms: nplurals=1; plural=0;\n" #: models.py:21 templates/wagtaildocs/documents/list.html:11 @@ -31,7 +32,7 @@ msgstr "文件" msgid "Tags" msgstr "标签" -#: wagtail_hooks.py:24 templates/wagtaildocs/documents/index.html:16 +#: wagtail_hooks.py:26 templates/wagtaildocs/documents/index.html:16 msgid "Documents" msgstr "文档" @@ -126,9 +127,11 @@ msgstr "已上传" #: templates/wagtaildocs/documents/results.html:21 #, python-format msgid "" -"You haven't uploaded any documents. Why not upload one now?" -msgstr "你没有上传任何文档。 为什么不 上传一份?" +"You haven't uploaded any documents. Why not upload one now?" +msgstr "" +"你没有上传任何文档。 为什么不 上" +"传一份?" #: templates/wagtaildocs/documents/usage.html:3 #, python-format @@ -163,22 +166,22 @@ msgstr "清除选择" msgid "Choose another document" msgstr "选择另外一份文档" -#: views/documents.py:37 views/documents.py:46 +#: views/documents.py:38 views/documents.py:47 msgid "Search documents" msgstr "" -#: views/documents.py:86 +#: views/documents.py:92 msgid "Document '{0}' added." msgstr "文档'{0}'已添加" -#: views/documents.py:89 views/documents.py:118 +#: views/documents.py:95 views/documents.py:129 msgid "The document could not be saved due to errors." msgstr "有错,文档无法保存。" -#: views/documents.py:115 +#: views/documents.py:126 msgid "Document '{0}' updated" msgstr "文档'{0}'已更新" -#: views/documents.py:137 +#: views/documents.py:148 msgid "Document '{0}' deleted." msgstr "文档'{0}'已删除" diff --git a/wagtail/wagtaildocs/locale/zh_TW/LC_MESSAGES/django.po b/wagtail/wagtaildocs/locale/zh_TW/LC_MESSAGES/django.po index cb2c41a374..e4c6b76202 100644 --- a/wagtail/wagtaildocs/locale/zh_TW/LC_MESSAGES/django.po +++ b/wagtail/wagtaildocs/locale/zh_TW/LC_MESSAGES/django.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: Wagtail\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2014-08-01 16:38+0100\n" +"POT-Creation-Date: 2014-09-11 16:38+0100\n" "PO-Revision-Date: 2014-03-14 21:12+0000\n" "Last-Translator: wdv4758h \n" "Language-Team: \n" @@ -31,7 +31,7 @@ msgstr "文件" msgid "Tags" msgstr "標籤" -#: wagtail_hooks.py:24 templates/wagtaildocs/documents/index.html:16 +#: wagtail_hooks.py:26 templates/wagtaildocs/documents/index.html:16 msgid "Documents" msgstr "文件" @@ -170,22 +170,22 @@ msgstr "清除選擇" msgid "Choose another document" msgstr "選擇另外一份文件" -#: views/documents.py:37 views/documents.py:46 +#: views/documents.py:38 views/documents.py:47 msgid "Search documents" msgstr "搜尋文件" -#: views/documents.py:86 +#: views/documents.py:92 msgid "Document '{0}' added." msgstr "文件 '{0}' 已加入" -#: views/documents.py:89 views/documents.py:118 +#: views/documents.py:95 views/documents.py:129 msgid "The document could not be saved due to errors." msgstr "這文件因有錯誤而無法建立。" -#: views/documents.py:115 +#: views/documents.py:126 msgid "Document '{0}' updated" msgstr "文件 '{0}' 已更新" -#: views/documents.py:137 +#: views/documents.py:148 msgid "Document '{0}' deleted." msgstr "文件 '{0}' 已刪除" diff --git a/wagtail/wagtailembeds/locale/bg/LC_MESSAGES/django.po b/wagtail/wagtailembeds/locale/bg/LC_MESSAGES/django.po index c90c66ff4a..a61bb2d20c 100644 --- a/wagtail/wagtailembeds/locale/bg/LC_MESSAGES/django.po +++ b/wagtail/wagtailembeds/locale/bg/LC_MESSAGES/django.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: Wagtail\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2014-08-01 16:38+0100\n" +"POT-Creation-Date: 2014-09-11 16:38+0100\n" "PO-Revision-Date: 2014-02-24 20:14+0000\n" "Last-Translator: LyuboslavPetrov \n" "Language-Team: Bulgarian (http://www.transifex.com/projects/p/wagtail/" diff --git a/wagtail/wagtailembeds/locale/ca/LC_MESSAGES/django.po b/wagtail/wagtailembeds/locale/ca/LC_MESSAGES/django.po index f1605c4738..0a5d0f9d64 100644 --- a/wagtail/wagtailembeds/locale/ca/LC_MESSAGES/django.po +++ b/wagtail/wagtailembeds/locale/ca/LC_MESSAGES/django.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: Wagtail\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2014-08-01 16:38+0100\n" +"POT-Creation-Date: 2014-09-11 16:38+0100\n" "PO-Revision-Date: 2014-02-22 12:45+0000\n" "Last-Translator: Lloople \n" "Language-Team: Catalan (http://www.transifex.com/projects/p/wagtail/language/" diff --git a/wagtail/wagtailembeds/locale/de/LC_MESSAGES/django.po b/wagtail/wagtailembeds/locale/de/LC_MESSAGES/django.po index d608913fb8..f94c83557c 100644 --- a/wagtail/wagtailembeds/locale/de/LC_MESSAGES/django.po +++ b/wagtail/wagtailembeds/locale/de/LC_MESSAGES/django.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: Wagtail\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2014-08-01 16:38+0100\n" +"POT-Creation-Date: 2014-09-11 16:38+0100\n" "PO-Revision-Date: 2014-02-25 17:30+0000\n" "Last-Translator: jspielmann \n" "Language-Team: German (http://www.transifex.com/projects/p/wagtail/language/" diff --git a/wagtail/wagtailembeds/locale/el/LC_MESSAGES/django.po b/wagtail/wagtailembeds/locale/el/LC_MESSAGES/django.po index cbc6c634be..1552895721 100644 --- a/wagtail/wagtailembeds/locale/el/LC_MESSAGES/django.po +++ b/wagtail/wagtailembeds/locale/el/LC_MESSAGES/django.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: Wagtail\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2014-08-01 16:38+0100\n" +"POT-Creation-Date: 2014-09-11 16:38+0100\n" "PO-Revision-Date: 2014-02-22 12:34+0000\n" "Last-Translator: serafeim \n" "Language-Team: Greek (http://www.transifex.com/projects/p/wagtail/language/" diff --git a/wagtail/wagtailembeds/locale/en/LC_MESSAGES/django.po b/wagtail/wagtailembeds/locale/en/LC_MESSAGES/django.po index d656d1d635..a064306ad5 100644 --- a/wagtail/wagtailembeds/locale/en/LC_MESSAGES/django.po +++ b/wagtail/wagtailembeds/locale/en/LC_MESSAGES/django.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2014-08-01 16:38+0100\n" +"POT-Creation-Date: 2014-09-11 16:38+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" diff --git a/wagtail/wagtailembeds/locale/es/LC_MESSAGES/django.po b/wagtail/wagtailembeds/locale/es/LC_MESSAGES/django.po index 05e4915e16..b30e2ebd26 100644 --- a/wagtail/wagtailembeds/locale/es/LC_MESSAGES/django.po +++ b/wagtail/wagtailembeds/locale/es/LC_MESSAGES/django.po @@ -9,7 +9,7 @@ msgid "" msgstr "" "Project-Id-Version: Wagtail\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2014-08-01 16:38+0100\n" +"POT-Creation-Date: 2014-09-11 16:38+0100\n" "PO-Revision-Date: 2014-02-27 09:34+0000\n" "Last-Translator: fooflare \n" "Language-Team: Spanish (http://www.transifex.com/projects/p/wagtail/language/" diff --git a/wagtail/wagtailembeds/locale/eu/LC_MESSAGES/django.po b/wagtail/wagtailembeds/locale/eu/LC_MESSAGES/django.po index 0b62bb6eb9..a28023d3ec 100644 --- a/wagtail/wagtailembeds/locale/eu/LC_MESSAGES/django.po +++ b/wagtail/wagtailembeds/locale/eu/LC_MESSAGES/django.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: Wagtail\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2014-08-01 16:38+0100\n" +"POT-Creation-Date: 2014-09-11 16:38+0100\n" "PO-Revision-Date: 2014-02-24 22:36+0000\n" "Last-Translator: tomdyson \n" "Language-Team: Basque (http://www.transifex.com/projects/p/wagtail/language/" diff --git a/wagtail/wagtailembeds/locale/fr/LC_MESSAGES/django.po b/wagtail/wagtailembeds/locale/fr/LC_MESSAGES/django.po index dce212991b..67692c8dde 100644 --- a/wagtail/wagtailembeds/locale/fr/LC_MESSAGES/django.po +++ b/wagtail/wagtailembeds/locale/fr/LC_MESSAGES/django.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: Wagtail\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2014-08-01 16:38+0100\n" +"POT-Creation-Date: 2014-09-11 16:38+0100\n" "PO-Revision-Date: 2014-03-18 22:04+0000\n" "Last-Translator: nahuel\n" "Language-Team: French (http://www.transifex.com/projects/p/wagtail/language/" diff --git a/wagtail/wagtailembeds/locale/gl/LC_MESSAGES/django.po b/wagtail/wagtailembeds/locale/gl/LC_MESSAGES/django.po index bc48c912b9..443bb4a2cf 100644 --- a/wagtail/wagtailembeds/locale/gl/LC_MESSAGES/django.po +++ b/wagtail/wagtailembeds/locale/gl/LC_MESSAGES/django.po @@ -9,7 +9,7 @@ msgid "" msgstr "" "Project-Id-Version: Wagtail\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2014-08-01 16:38+0100\n" +"POT-Creation-Date: 2014-09-11 16:38+0100\n" "PO-Revision-Date: 2014-03-23 10:32+0000\n" "Last-Translator: fooflare \n" "Language-Team: Galician (http://www.transifex.com/projects/p/wagtail/" diff --git a/wagtail/wagtailembeds/locale/mn/LC_MESSAGES/django.po b/wagtail/wagtailembeds/locale/mn/LC_MESSAGES/django.po index a910cdb90a..1a2040f53f 100644 --- a/wagtail/wagtailembeds/locale/mn/LC_MESSAGES/django.po +++ b/wagtail/wagtailembeds/locale/mn/LC_MESSAGES/django.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: Wagtail\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2014-08-01 16:38+0100\n" +"POT-Creation-Date: 2014-09-11 16:38+0100\n" "PO-Revision-Date: 2014-03-01 17:11+0000\n" "Last-Translator: delgermurun \n" "Language-Team: Mongolian (http://www.transifex.com/projects/p/wagtail/" diff --git a/wagtail/wagtailembeds/locale/pl/LC_MESSAGES/django.po b/wagtail/wagtailembeds/locale/pl/LC_MESSAGES/django.po index 1b4b899994..6801568015 100644 --- a/wagtail/wagtailembeds/locale/pl/LC_MESSAGES/django.po +++ b/wagtail/wagtailembeds/locale/pl/LC_MESSAGES/django.po @@ -9,7 +9,7 @@ msgid "" msgstr "" "Project-Id-Version: Wagtail\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2014-08-01 16:38+0100\n" +"POT-Creation-Date: 2014-09-11 16:38+0100\n" "PO-Revision-Date: 2014-02-23 10:22+0000\n" "Last-Translator: utek \n" "Language-Team: Polish (http://www.transifex.com/projects/p/wagtail/language/" diff --git a/wagtail/wagtailembeds/locale/pt_PT/LC_MESSAGES/django.po b/wagtail/wagtailembeds/locale/pt_PT/LC_MESSAGES/django.po index 9b6c937f63..2eaf0c992a 100644 --- a/wagtail/wagtailembeds/locale/pt_PT/LC_MESSAGES/django.po +++ b/wagtail/wagtailembeds/locale/pt_PT/LC_MESSAGES/django.po @@ -9,16 +9,16 @@ msgid "" msgstr "" "Project-Id-Version: Wagtail 0.5.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2014-08-01 16:38+0100\n" +"POT-Creation-Date: 2014-09-11 16:38+0100\n" "PO-Revision-Date: 2014-08-03 01:53+0100\n" "Last-Translator: Jose Lourenco \n" "Language-Team: \n" +"Language: pt_PT\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.4\n" -"Language: pt_PT\n" #: forms.py:11 msgid "Please enter a valid URL" diff --git a/wagtail/wagtailembeds/locale/ro/LC_MESSAGES/django.po b/wagtail/wagtailembeds/locale/ro/LC_MESSAGES/django.po index 38e848315c..4d51bc3821 100644 --- a/wagtail/wagtailembeds/locale/ro/LC_MESSAGES/django.po +++ b/wagtail/wagtailembeds/locale/ro/LC_MESSAGES/django.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: Wagtail\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2014-08-01 16:38+0100\n" +"POT-Creation-Date: 2014-09-11 16:38+0100\n" "PO-Revision-Date: 2014-02-24 22:27+0000\n" "Last-Translator: zerolab\n" "Language-Team: Romanian (http://www.transifex.com/projects/p/wagtail/" diff --git a/wagtail/wagtailembeds/locale/zh/LC_MESSAGES/django.po b/wagtail/wagtailembeds/locale/zh/LC_MESSAGES/django.po index 4514379b6c..e7b5a37876 100644 --- a/wagtail/wagtailembeds/locale/zh/LC_MESSAGES/django.po +++ b/wagtail/wagtailembeds/locale/zh/LC_MESSAGES/django.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: Wagtail\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2014-08-01 16:38+0100\n" +"POT-Creation-Date: 2014-09-11 16:38+0100\n" "PO-Revision-Date: 2014-02-24 17:34+0000\n" "Last-Translator: tomdyson \n" "Language-Team: Chinese (http://www.transifex.com/projects/p/wagtail/language/" diff --git a/wagtail/wagtailembeds/locale/zh_TW/LC_MESSAGES/django.po b/wagtail/wagtailembeds/locale/zh_TW/LC_MESSAGES/django.po index df6f4e891c..32776be546 100644 --- a/wagtail/wagtailembeds/locale/zh_TW/LC_MESSAGES/django.po +++ b/wagtail/wagtailembeds/locale/zh_TW/LC_MESSAGES/django.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: Wagtail\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2014-08-01 16:38+0100\n" +"POT-Creation-Date: 2014-09-11 16:38+0100\n" "PO-Revision-Date: 2014-02-24 17:34+0000\n" "Last-Translator: wdv4758h \n" "Language-Team: \n" diff --git a/wagtail/wagtailforms/locale/en/LC_MESSAGES/django.po b/wagtail/wagtailforms/locale/en/LC_MESSAGES/django.po index 4b64a68e9e..e9065b0e5e 100644 --- a/wagtail/wagtailforms/locale/en/LC_MESSAGES/django.po +++ b/wagtail/wagtailforms/locale/en/LC_MESSAGES/django.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2014-08-01 16:38+0100\n" +"POT-Creation-Date: 2014-09-11 16:38+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -79,7 +79,7 @@ msgstr "" msgid "Optional - form submissions will be emailed to this address" msgstr "" -#: wagtail_hooks.py:23 templates/wagtailforms/index.html:3 +#: wagtail_hooks.py:25 templates/wagtailforms/index.html:3 #: templates/wagtailforms/index.html:6 msgid "Forms" msgstr "" diff --git a/wagtail/wagtailimages/locale/bg/LC_MESSAGES/django.po b/wagtail/wagtailimages/locale/bg/LC_MESSAGES/django.po index d065aad7e5..a918ad772d 100644 --- a/wagtail/wagtailimages/locale/bg/LC_MESSAGES/django.po +++ b/wagtail/wagtailimages/locale/bg/LC_MESSAGES/django.po @@ -1,21 +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. -# +# # Translators: # Lyuboslav Petrov , 2014 msgid "" msgstr "" "Project-Id-Version: Wagtail\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2014-08-01 16:39+0100\n" +"POT-Creation-Date: 2014-09-11 16:38+0100\n" "PO-Revision-Date: 2014-08-01 15:43+0000\n" "Last-Translator: Karl Hobley \n" -"Language-Team: Bulgarian (http://www.transifex.com/projects/p/wagtail/language/bg/)\n" +"Language-Team: Bulgarian (http://www.transifex.com/projects/p/wagtail/" +"language/bg/)\n" +"Language: bg\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"Language: bg\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" #: forms.py:37 @@ -54,7 +55,7 @@ msgstr "" msgid "Height" msgstr "" -#: models.py:34 templates/wagtailimages/images/usage.html:16 +#: models.py:48 templates/wagtailimages/images/usage.html:16 msgid "Title" msgstr "Заглавие" @@ -66,7 +67,7 @@ msgstr "Файл" msgid "Tags" msgstr "Тагове" -#: wagtail_hooks.py:64 templates/wagtailimages/images/index.html:5 +#: wagtail_hooks.py:69 templates/wagtailimages/images/index.html:5 #: templates/wagtailimages/images/index.html:18 msgid "Images" msgstr "Изображения" @@ -101,8 +102,13 @@ msgid_plural "" "\n" " There are %(counter)s matches\n" " " -msgstr[0] "\n Има едно съвпадение\n " -msgstr[1] "\nИма %(counter)s съвпадения" +msgstr[0] "" +"\n" +" Има едно съвпадение\n" +" " +msgstr[1] "" +"\n" +"Има %(counter)s съвпадения" #: templates/wagtailimages/chooser/results.html:13 #: templates/wagtailimages/images/results.html:13 @@ -175,9 +181,11 @@ msgstr "" #: templates/wagtailimages/images/results.html:34 #, python-format msgid "" -"You've not uploaded any images. Why not add one now?" -msgstr "Не сте качили никакви изображения. Защо не качите едно сега?" +"You've not uploaded any images. Why not add one now?" +msgstr "" +"Не сте качили никакви изображения. Защо не качите едно сега?" #: templates/wagtailimages/images/url_generator.html:9 msgid "Generating URL" @@ -270,26 +278,26 @@ msgid "" "file extension (*.gif, *.jpg or *.png)." msgstr "" -#: views/images.py:37 views/images.py:47 +#: views/images.py:38 views/images.py:48 msgid "Search images" msgstr "" -#: views/images.py:99 +#: views/images.py:105 msgid "Image '{0}' updated." msgstr "Изображение '{0}' обновено." -#: views/images.py:102 +#: views/images.py:108 msgid "The image could not be saved due to errors." msgstr "Изображението не можеше да бъде запазено поради грешки." -#: views/images.py:188 +#: views/images.py:194 msgid "Image '{0}' deleted." msgstr "Изображение '{0}' изтрито." -#: views/images.py:206 +#: views/images.py:217 msgid "Image '{0}' added." msgstr "Изображение '{0}' добавено." -#: views/images.py:209 +#: views/images.py:220 msgid "The image could not be created due to errors." msgstr "Изображението не можеше да бъде създадено поради грешки." diff --git a/wagtail/wagtailimages/locale/ca/LC_MESSAGES/django.po b/wagtail/wagtailimages/locale/ca/LC_MESSAGES/django.po index d43082fd65..442ff78bff 100644 --- a/wagtail/wagtailimages/locale/ca/LC_MESSAGES/django.po +++ b/wagtail/wagtailimages/locale/ca/LC_MESSAGES/django.po @@ -1,21 +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. -# +# # Translators: # David Llop , 2014 msgid "" msgstr "" "Project-Id-Version: Wagtail\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2014-08-01 16:39+0100\n" +"POT-Creation-Date: 2014-09-11 16:38+0100\n" "PO-Revision-Date: 2014-08-01 15:43+0000\n" "Last-Translator: Karl Hobley \n" -"Language-Team: Catalan (http://www.transifex.com/projects/p/wagtail/language/ca/)\n" +"Language-Team: Catalan (http://www.transifex.com/projects/p/wagtail/language/" +"ca/)\n" +"Language: ca\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"Language: ca\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" #: forms.py:37 @@ -54,7 +55,7 @@ msgstr "" msgid "Height" msgstr "" -#: models.py:34 templates/wagtailimages/images/usage.html:16 +#: models.py:48 templates/wagtailimages/images/usage.html:16 msgid "Title" msgstr "Títol" @@ -66,7 +67,7 @@ msgstr "Arxiu" msgid "Tags" msgstr "Tags" -#: wagtail_hooks.py:64 templates/wagtailimages/images/index.html:5 +#: wagtail_hooks.py:69 templates/wagtailimages/images/index.html:5 #: templates/wagtailimages/images/index.html:18 msgid "Images" msgstr "Imatges" @@ -101,8 +102,12 @@ msgid_plural "" "\n" " There are %(counter)s matches\n" " " -msgstr[0] "\nHi ha un resultat" -msgstr[1] "\nHi han %(counter)s resultats" +msgstr[0] "" +"\n" +"Hi ha un resultat" +msgstr[1] "" +"\n" +"Hi han %(counter)s resultats" #: templates/wagtailimages/chooser/results.html:13 #: templates/wagtailimages/images/results.html:13 @@ -175,9 +180,11 @@ msgstr "Ho sentim, cap imatge coincideix amb \"%(query_string)s\"" #: templates/wagtailimages/images/results.html:34 #, python-format msgid "" -"You've not uploaded any images. Why not add one now?" -msgstr "No has pujat cap imatge. Per què no afegeixes una ara?" +"You've not uploaded any images. Why not add one now?" +msgstr "" +"No has pujat cap imatge. Per què no afegeixes una ara?" #: templates/wagtailimages/images/url_generator.html:9 msgid "Generating URL" @@ -270,26 +277,26 @@ msgid "" "file extension (*.gif, *.jpg or *.png)." msgstr "" -#: views/images.py:37 views/images.py:47 +#: views/images.py:38 views/images.py:48 msgid "Search images" msgstr "Cercar imatges" -#: views/images.py:99 +#: views/images.py:105 msgid "Image '{0}' updated." msgstr "Imatge '{0}' actualitzada." -#: views/images.py:102 +#: views/images.py:108 msgid "The image could not be saved due to errors." msgstr "No s'ha pogut desar la imatge." -#: views/images.py:188 +#: views/images.py:194 msgid "Image '{0}' deleted." msgstr "Imatge '{0}' eliminada." -#: views/images.py:206 +#: views/images.py:217 msgid "Image '{0}' added." msgstr "Imatge '{0}' afegida." -#: views/images.py:209 +#: views/images.py:220 msgid "The image could not be created due to errors." msgstr "No s'ha pogut crear la imatge." diff --git a/wagtail/wagtailimages/locale/de/LC_MESSAGES/django.po b/wagtail/wagtailimages/locale/de/LC_MESSAGES/django.po index 9f186eb443..283c79506f 100644 --- a/wagtail/wagtailimages/locale/de/LC_MESSAGES/django.po +++ b/wagtail/wagtailimages/locale/de/LC_MESSAGES/django.po @@ -1,7 +1,7 @@ # SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. -# +# # Translators: # Johannes Spielmann , 2014 # pcraston , 2014 @@ -9,14 +9,15 @@ msgid "" msgstr "" "Project-Id-Version: Wagtail\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2014-08-01 16:39+0100\n" +"POT-Creation-Date: 2014-09-11 16:38+0100\n" "PO-Revision-Date: 2014-08-01 15:43+0000\n" "Last-Translator: Karl Hobley \n" -"Language-Team: German (http://www.transifex.com/projects/p/wagtail/language/de/)\n" +"Language-Team: German (http://www.transifex.com/projects/p/wagtail/language/" +"de/)\n" +"Language: de\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"Language: de\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" #: forms.py:37 @@ -55,7 +56,7 @@ msgstr "" msgid "Height" msgstr "" -#: models.py:34 templates/wagtailimages/images/usage.html:16 +#: models.py:48 templates/wagtailimages/images/usage.html:16 msgid "Title" msgstr "Titel" @@ -67,7 +68,7 @@ msgstr "Datei" msgid "Tags" msgstr "Schlagwörter" -#: wagtail_hooks.py:64 templates/wagtailimages/images/index.html:5 +#: wagtail_hooks.py:69 templates/wagtailimages/images/index.html:5 #: templates/wagtailimages/images/index.html:18 msgid "Images" msgstr "Bilder" @@ -102,8 +103,14 @@ msgid_plural "" "\n" " There are %(counter)s matches\n" " " -msgstr[0] "\n Es gibt ein Ergebnis\n " -msgstr[1] "\n Es gibt %(counter)s Ergebnisse\n " +msgstr[0] "" +"\n" +" Es gibt ein Ergebnis\n" +" " +msgstr[1] "" +"\n" +" Es gibt %(counter)s Ergebnisse\n" +" " #: templates/wagtailimages/chooser/results.html:13 #: templates/wagtailimages/images/results.html:13 @@ -171,14 +178,17 @@ msgstr "Bearbeiten" #: templates/wagtailimages/images/results.html:31 #, python-format msgid "Sorry, no images match \"%(query_string)s\"" -msgstr "Es gibt leider keine Bilder zum Suchbegriff \"%(query_string)s\"" +msgstr "" +"Es gibt leider keine Bilder zum Suchbegriff \"%(query_string)s\"" #: templates/wagtailimages/images/results.html:34 #, python-format msgid "" -"You've not uploaded any images. Why not add one now?" -msgstr "Sie haben noch keine Bilder hochgeladen. Laden Sie doch jetzt eins hoch!" +"You've not uploaded any images. Why not add one now?" +msgstr "" +"Sie haben noch keine Bilder hochgeladen. Laden Sie doch jetzt eins hoch!" #: templates/wagtailimages/images/url_generator.html:9 msgid "Generating URL" @@ -271,26 +281,26 @@ msgid "" "file extension (*.gif, *.jpg or *.png)." msgstr "" -#: views/images.py:37 views/images.py:47 +#: views/images.py:38 views/images.py:48 msgid "Search images" msgstr "Nach Bildern suchen" -#: views/images.py:99 +#: views/images.py:105 msgid "Image '{0}' updated." msgstr "Bild '{0}' geändert." -#: views/images.py:102 +#: views/images.py:108 msgid "The image could not be saved due to errors." msgstr "Aufgrund von Fehlern konnte das Bild nicht gespeichert werden." -#: views/images.py:188 +#: views/images.py:194 msgid "Image '{0}' deleted." msgstr "Bild '{0}' gelöscht." -#: views/images.py:206 +#: views/images.py:217 msgid "Image '{0}' added." msgstr "Bild '{0}' hinzugefügt." -#: views/images.py:209 +#: views/images.py:220 msgid "The image could not be created due to errors." msgstr "Aufgrund von Fehlern konnte das Bild nicht erstellt werden." diff --git a/wagtail/wagtailimages/locale/el/LC_MESSAGES/django.po b/wagtail/wagtailimages/locale/el/LC_MESSAGES/django.po index 92bb5f8aff..f0b526b0d6 100644 --- a/wagtail/wagtailimages/locale/el/LC_MESSAGES/django.po +++ b/wagtail/wagtailimages/locale/el/LC_MESSAGES/django.po @@ -1,21 +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. -# +# # Translators: # serafeim , 2014 msgid "" msgstr "" "Project-Id-Version: Wagtail\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2014-08-01 16:39+0100\n" +"POT-Creation-Date: 2014-09-11 16:38+0100\n" "PO-Revision-Date: 2014-08-01 15:43+0000\n" "Last-Translator: Karl Hobley \n" -"Language-Team: Greek (http://www.transifex.com/projects/p/wagtail/language/el/)\n" +"Language-Team: Greek (http://www.transifex.com/projects/p/wagtail/language/" +"el/)\n" +"Language: el\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"Language: el\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" #: forms.py:37 @@ -54,7 +55,7 @@ msgstr "" msgid "Height" msgstr "" -#: models.py:34 templates/wagtailimages/images/usage.html:16 +#: models.py:48 templates/wagtailimages/images/usage.html:16 msgid "Title" msgstr "Τίτλος" @@ -66,7 +67,7 @@ msgstr "Αρχείο" msgid "Tags" msgstr "Ετικέτες" -#: wagtail_hooks.py:64 templates/wagtailimages/images/index.html:5 +#: wagtail_hooks.py:69 templates/wagtailimages/images/index.html:5 #: templates/wagtailimages/images/index.html:18 msgid "Images" msgstr "Εικόνες" @@ -101,8 +102,13 @@ msgid_plural "" "\n" " There are %(counter)s matches\n" " " -msgstr[0] "\nΒρέθηκε ένα αποτέλεσμα" -msgstr[1] "\n Βρέθηκαν %(counter)s αποτελέσματα\n " +msgstr[0] "" +"\n" +"Βρέθηκε ένα αποτέλεσμα" +msgstr[1] "" +"\n" +" Βρέθηκαν %(counter)s αποτελέσματα\n" +" " #: templates/wagtailimages/chooser/results.html:13 #: templates/wagtailimages/images/results.html:13 @@ -170,14 +176,17 @@ msgstr "Διόρθωση" #: templates/wagtailimages/images/results.html:31 #, python-format msgid "Sorry, no images match \"%(query_string)s\"" -msgstr "Λυπούμαστε, καμία εικόνα δε ταιριάζει με το \"%(query_string)s\"" +msgstr "" +"Λυπούμαστε, καμία εικόνα δε ταιριάζει με το \"%(query_string)s\"" #: templates/wagtailimages/images/results.html:34 #, python-format msgid "" -"You've not uploaded any images. Why not add one now?" -msgstr "Δεν υπάρχουν εικόνες. Θέλετε να προσθέσετε μερικές;" +"You've not uploaded any images. Why not add one now?" +msgstr "" +"Δεν υπάρχουν εικόνες. Θέλετε να προσθέσετε μερικές;" #: templates/wagtailimages/images/url_generator.html:9 msgid "Generating URL" @@ -270,26 +279,26 @@ msgid "" "file extension (*.gif, *.jpg or *.png)." msgstr "" -#: views/images.py:37 views/images.py:47 +#: views/images.py:38 views/images.py:48 msgid "Search images" msgstr "Αναζήτηση εικόνων" -#: views/images.py:99 +#: views/images.py:105 msgid "Image '{0}' updated." msgstr "Η εικόνα '{0}' ενημερώθηκε." -#: views/images.py:102 +#: views/images.py:108 msgid "The image could not be saved due to errors." msgstr "Δεν ήταν δυνατή η αποθήκευση της εικόνας." -#: views/images.py:188 +#: views/images.py:194 msgid "Image '{0}' deleted." msgstr "Η εικόνα '{0}' διαγράφηκε." -#: views/images.py:206 +#: views/images.py:217 msgid "Image '{0}' added." msgstr "Η εικόνα '{0}' δημιουργήθηκε." -#: views/images.py:209 +#: views/images.py:220 msgid "The image could not be created due to errors." msgstr "Δεν ήταν δυνατή η δημιουργία της εικόνας." diff --git a/wagtail/wagtailimages/locale/en/LC_MESSAGES/django.po b/wagtail/wagtailimages/locale/en/LC_MESSAGES/django.po index 3fddd59f3b..11f37f87dc 100644 --- a/wagtail/wagtailimages/locale/en/LC_MESSAGES/django.po +++ b/wagtail/wagtailimages/locale/en/LC_MESSAGES/django.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2014-08-01 16:39+0100\n" +"POT-Creation-Date: 2014-09-11 16:38+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -53,7 +53,7 @@ msgstr "" msgid "Height" msgstr "" -#: models.py:34 templates/wagtailimages/images/usage.html:16 +#: models.py:48 templates/wagtailimages/images/usage.html:16 msgid "Title" msgstr "" @@ -65,7 +65,7 @@ msgstr "" msgid "Tags" msgstr "" -#: wagtail_hooks.py:64 templates/wagtailimages/images/index.html:5 +#: wagtail_hooks.py:69 templates/wagtailimages/images/index.html:5 #: templates/wagtailimages/images/index.html:18 msgid "Images" msgstr "" @@ -269,26 +269,26 @@ msgid "" "file extension (*.gif, *.jpg or *.png)." msgstr "" -#: views/images.py:37 views/images.py:47 +#: views/images.py:38 views/images.py:48 msgid "Search images" msgstr "" -#: views/images.py:99 +#: views/images.py:105 msgid "Image '{0}' updated." msgstr "" -#: views/images.py:102 +#: views/images.py:108 msgid "The image could not be saved due to errors." msgstr "" -#: views/images.py:188 +#: views/images.py:194 msgid "Image '{0}' deleted." msgstr "" -#: views/images.py:206 +#: views/images.py:217 msgid "Image '{0}' added." msgstr "" -#: views/images.py:209 +#: views/images.py:220 msgid "The image could not be created due to errors." msgstr "" diff --git a/wagtail/wagtailimages/locale/es/LC_MESSAGES/django.po b/wagtail/wagtailimages/locale/es/LC_MESSAGES/django.po index 9f87433119..fda07c66d0 100644 --- a/wagtail/wagtailimages/locale/es/LC_MESSAGES/django.po +++ b/wagtail/wagtailimages/locale/es/LC_MESSAGES/django.po @@ -1,7 +1,7 @@ # SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. -# +# # Translators: # fooflare , 2014 # fooflare , 2014 @@ -9,14 +9,15 @@ msgid "" msgstr "" "Project-Id-Version: Wagtail\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2014-08-01 16:39+0100\n" +"POT-Creation-Date: 2014-09-11 16:38+0100\n" "PO-Revision-Date: 2014-08-01 15:43+0000\n" "Last-Translator: Karl Hobley \n" -"Language-Team: Spanish (http://www.transifex.com/projects/p/wagtail/language/es/)\n" +"Language-Team: Spanish (http://www.transifex.com/projects/p/wagtail/language/" +"es/)\n" +"Language: es\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"Language: es\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" #: forms.py:37 @@ -55,7 +56,7 @@ msgstr "" msgid "Height" msgstr "" -#: models.py:34 templates/wagtailimages/images/usage.html:16 +#: models.py:48 templates/wagtailimages/images/usage.html:16 msgid "Title" msgstr "Título" @@ -67,7 +68,7 @@ msgstr "Archivo" msgid "Tags" msgstr "Etiquetas" -#: wagtail_hooks.py:64 templates/wagtailimages/images/index.html:5 +#: wagtail_hooks.py:69 templates/wagtailimages/images/index.html:5 #: templates/wagtailimages/images/index.html:18 msgid "Images" msgstr "Imágenes" @@ -102,8 +103,14 @@ msgid_plural "" "\n" " There are %(counter)s matches\n" " " -msgstr[0] "\n Hay una coincidencia\n " -msgstr[1] "\n Hay %(counter)s coincidencias\n " +msgstr[0] "" +"\n" +" Hay una coincidencia\n" +" " +msgstr[1] "" +"\n" +" Hay %(counter)s coincidencias\n" +" " #: templates/wagtailimages/chooser/results.html:13 #: templates/wagtailimages/images/results.html:13 @@ -171,14 +178,18 @@ msgstr "Editando" #: templates/wagtailimages/images/results.html:31 #, python-format msgid "Sorry, no images match \"%(query_string)s\"" -msgstr "Lo sentimos, no hay coincidencias en las imágenes \"%(query_string)s\"" +msgstr "" +"Lo sentimos, no hay coincidencias en las imágenes \"%(query_string)s" +"\"" #: templates/wagtailimages/images/results.html:34 #, python-format msgid "" -"You've not uploaded any images. Why not add one now?" -msgstr "No has subido imágenes. ¿Por qué no añadir una ahora?" +"You've not uploaded any images. Why not add one now?" +msgstr "" +"No has subido imágenes. ¿Por qué no añadir una ahora?" #: templates/wagtailimages/images/url_generator.html:9 msgid "Generating URL" @@ -271,26 +282,26 @@ msgid "" "file extension (*.gif, *.jpg or *.png)." msgstr "" -#: views/images.py:37 views/images.py:47 +#: views/images.py:38 views/images.py:48 msgid "Search images" msgstr "Buscar imágenes" -#: views/images.py:99 +#: views/images.py:105 msgid "Image '{0}' updated." msgstr "Imagen '{0}' actualizada." -#: views/images.py:102 +#: views/images.py:108 msgid "The image could not be saved due to errors." msgstr "La imagen no puedo ser guardada debido a errores" -#: views/images.py:188 +#: views/images.py:194 msgid "Image '{0}' deleted." msgstr "Imagen '{0}' eliminada." -#: views/images.py:206 +#: views/images.py:217 msgid "Image '{0}' added." msgstr "Imagen '{0}' añadida." -#: views/images.py:209 +#: views/images.py:220 msgid "The image could not be created due to errors." msgstr "La imagen no pudo ser creada debido a errores." diff --git a/wagtail/wagtailimages/locale/eu/LC_MESSAGES/django.po b/wagtail/wagtailimages/locale/eu/LC_MESSAGES/django.po index c07a35c6d1..988a5ab0bb 100644 --- a/wagtail/wagtailimages/locale/eu/LC_MESSAGES/django.po +++ b/wagtail/wagtailimages/locale/eu/LC_MESSAGES/django.po @@ -1,20 +1,21 @@ # SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. -# +# # Translators: msgid "" msgstr "" "Project-Id-Version: Wagtail\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2014-08-01 16:39+0100\n" +"POT-Creation-Date: 2014-09-11 16:38+0100\n" "PO-Revision-Date: 2014-08-01 15:43+0000\n" "Last-Translator: Karl Hobley \n" -"Language-Team: Basque (http://www.transifex.com/projects/p/wagtail/language/eu/)\n" +"Language-Team: Basque (http://www.transifex.com/projects/p/wagtail/language/" +"eu/)\n" +"Language: eu\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"Language: eu\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" #: forms.py:37 @@ -53,7 +54,7 @@ msgstr "" msgid "Height" msgstr "" -#: models.py:34 templates/wagtailimages/images/usage.html:16 +#: models.py:48 templates/wagtailimages/images/usage.html:16 msgid "Title" msgstr "" @@ -65,7 +66,7 @@ msgstr "" msgid "Tags" msgstr "" -#: wagtail_hooks.py:64 templates/wagtailimages/images/index.html:5 +#: wagtail_hooks.py:69 templates/wagtailimages/images/index.html:5 #: templates/wagtailimages/images/index.html:18 msgid "Images" msgstr "" @@ -174,8 +175,8 @@ msgstr "" #: templates/wagtailimages/images/results.html:34 #, python-format msgid "" -"You've not uploaded any images. Why not add one now?" +"You've not uploaded any images. Why not add one now?" msgstr "" #: templates/wagtailimages/images/url_generator.html:9 @@ -269,26 +270,26 @@ msgid "" "file extension (*.gif, *.jpg or *.png)." msgstr "" -#: views/images.py:37 views/images.py:47 +#: views/images.py:38 views/images.py:48 msgid "Search images" msgstr "" -#: views/images.py:99 +#: views/images.py:105 msgid "Image '{0}' updated." msgstr "" -#: views/images.py:102 +#: views/images.py:108 msgid "The image could not be saved due to errors." msgstr "" -#: views/images.py:188 +#: views/images.py:194 msgid "Image '{0}' deleted." msgstr "" -#: views/images.py:206 +#: views/images.py:217 msgid "Image '{0}' added." msgstr "" -#: views/images.py:209 +#: views/images.py:220 msgid "The image could not be created due to errors." msgstr "" diff --git a/wagtail/wagtailimages/locale/fr/LC_MESSAGES/django.po b/wagtail/wagtailimages/locale/fr/LC_MESSAGES/django.po index fe6d971b6f..9e439ac0f7 100644 --- a/wagtail/wagtailimages/locale/fr/LC_MESSAGES/django.po +++ b/wagtail/wagtailimages/locale/fr/LC_MESSAGES/django.po @@ -1,21 +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. -# +# # Translators: # nahuel, 2014 msgid "" msgstr "" "Project-Id-Version: Wagtail\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2014-08-01 16:39+0100\n" +"POT-Creation-Date: 2014-09-11 16:38+0100\n" "PO-Revision-Date: 2014-08-01 15:43+0000\n" "Last-Translator: Karl Hobley \n" -"Language-Team: French (http://www.transifex.com/projects/p/wagtail/language/fr/)\n" +"Language-Team: French (http://www.transifex.com/projects/p/wagtail/language/" +"fr/)\n" +"Language: fr\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"Language: fr\n" "Plural-Forms: nplurals=2; plural=(n > 1);\n" #: forms.py:37 @@ -54,7 +55,7 @@ msgstr "" msgid "Height" msgstr "" -#: models.py:34 templates/wagtailimages/images/usage.html:16 +#: models.py:48 templates/wagtailimages/images/usage.html:16 msgid "Title" msgstr "Titre" @@ -66,7 +67,7 @@ msgstr "Fichier" msgid "Tags" msgstr "Mots-clés" -#: wagtail_hooks.py:64 templates/wagtailimages/images/index.html:5 +#: wagtail_hooks.py:69 templates/wagtailimages/images/index.html:5 #: templates/wagtailimages/images/index.html:18 msgid "Images" msgstr "Images" @@ -101,8 +102,14 @@ msgid_plural "" "\n" " There are %(counter)s matches\n" " " -msgstr[0] "\n Il y a une correspondance\n " -msgstr[1] "\n Il y a %(counter)s correspondances\n " +msgstr[0] "" +"\n" +" Il y a une correspondance\n" +" " +msgstr[1] "" +"\n" +" Il y a %(counter)s correspondances\n" +" " #: templates/wagtailimages/chooser/results.html:13 #: templates/wagtailimages/images/results.html:13 @@ -175,8 +182,8 @@ msgstr "Désolé, aucune image ne correspond à \"%(query_string)s\"" #: templates/wagtailimages/images/results.html:34 #, python-format msgid "" -"You've not uploaded any images. Why not add one now?" +"You've not uploaded any images. Why not add one now?" msgstr "" #: templates/wagtailimages/images/url_generator.html:9 @@ -270,26 +277,26 @@ msgid "" "file extension (*.gif, *.jpg or *.png)." msgstr "" -#: views/images.py:37 views/images.py:47 +#: views/images.py:38 views/images.py:48 msgid "Search images" msgstr "" -#: views/images.py:99 +#: views/images.py:105 msgid "Image '{0}' updated." msgstr "Image '{0}' mise à jour." -#: views/images.py:102 +#: views/images.py:108 msgid "The image could not be saved due to errors." msgstr "" -#: views/images.py:188 +#: views/images.py:194 msgid "Image '{0}' deleted." msgstr "Image '{0}' supprimée." -#: views/images.py:206 +#: views/images.py:217 msgid "Image '{0}' added." msgstr "Image '{0}' ajoutée." -#: views/images.py:209 +#: views/images.py:220 msgid "The image could not be created due to errors." msgstr "" diff --git a/wagtail/wagtailimages/locale/gl/LC_MESSAGES/django.po b/wagtail/wagtailimages/locale/gl/LC_MESSAGES/django.po index 1208c799e6..ff7ee9f2fb 100644 --- a/wagtail/wagtailimages/locale/gl/LC_MESSAGES/django.po +++ b/wagtail/wagtailimages/locale/gl/LC_MESSAGES/django.po @@ -1,7 +1,7 @@ # SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. -# +# # Translators: # fooflare , 2014 # fooflare , 2014 @@ -9,14 +9,15 @@ msgid "" msgstr "" "Project-Id-Version: Wagtail\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2014-08-01 16:39+0100\n" +"POT-Creation-Date: 2014-09-11 16:38+0100\n" "PO-Revision-Date: 2014-08-01 15:43+0000\n" "Last-Translator: Karl Hobley \n" -"Language-Team: Galician (http://www.transifex.com/projects/p/wagtail/language/gl/)\n" +"Language-Team: Galician (http://www.transifex.com/projects/p/wagtail/" +"language/gl/)\n" +"Language: gl\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"Language: gl\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" #: forms.py:37 @@ -55,7 +56,7 @@ msgstr "" msgid "Height" msgstr "" -#: models.py:34 templates/wagtailimages/images/usage.html:16 +#: models.py:48 templates/wagtailimages/images/usage.html:16 msgid "Title" msgstr "Título" @@ -67,7 +68,7 @@ msgstr "Arquivo" msgid "Tags" msgstr "Etiquetas" -#: wagtail_hooks.py:64 templates/wagtailimages/images/index.html:5 +#: wagtail_hooks.py:69 templates/wagtailimages/images/index.html:5 #: templates/wagtailimages/images/index.html:18 msgid "Images" msgstr "Imaxes" @@ -102,8 +103,14 @@ msgid_plural "" "\n" " There are %(counter)s matches\n" " " -msgstr[0] "\n Hai unha coincidencia\n " -msgstr[1] "\n Hai %(counter)s coincidencias\n " +msgstr[0] "" +"\n" +" Hai unha coincidencia\n" +" " +msgstr[1] "" +"\n" +" Hai %(counter)s coincidencias\n" +" " #: templates/wagtailimages/chooser/results.html:13 #: templates/wagtailimages/images/results.html:13 @@ -176,9 +183,11 @@ msgstr "Sentímolo, ningunha imaxe contén \"%(query_string)s\"" #: templates/wagtailimages/images/results.html:34 #, python-format msgid "" -"You've not uploaded any images. Why not add one now?" -msgstr "No subiches imaxes. ¿Por qué non engadir unha agora?" +"You've not uploaded any images. Why not add one now?" +msgstr "" +"No subiches imaxes. ¿Por qué non engadir unha agora?" #: templates/wagtailimages/images/url_generator.html:9 msgid "Generating URL" @@ -271,26 +280,26 @@ msgid "" "file extension (*.gif, *.jpg or *.png)." msgstr "" -#: views/images.py:37 views/images.py:47 +#: views/images.py:38 views/images.py:48 msgid "Search images" msgstr "Buscar imaxes" -#: views/images.py:99 +#: views/images.py:105 msgid "Image '{0}' updated." msgstr "Imaxe '{0}' actualizada." -#: views/images.py:102 +#: views/images.py:108 msgid "The image could not be saved due to errors." msgstr "A imaxe non puido ser gardada debido a erros" -#: views/images.py:188 +#: views/images.py:194 msgid "Image '{0}' deleted." msgstr "Imaxe '{0}' eliminada." -#: views/images.py:206 +#: views/images.py:217 msgid "Image '{0}' added." msgstr "Imaxe '{0}' engadida." -#: views/images.py:209 +#: views/images.py:220 msgid "The image could not be created due to errors." msgstr "A imaxe non puido ser creada debido a erros." diff --git a/wagtail/wagtailimages/locale/mn/LC_MESSAGES/django.po b/wagtail/wagtailimages/locale/mn/LC_MESSAGES/django.po index f641c1c3ed..f3fb422c56 100644 --- a/wagtail/wagtailimages/locale/mn/LC_MESSAGES/django.po +++ b/wagtail/wagtailimages/locale/mn/LC_MESSAGES/django.po @@ -1,21 +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. -# +# # Translators: # Delgermurun Purevkhuuu , 2014 msgid "" msgstr "" "Project-Id-Version: Wagtail\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2014-08-01 16:39+0100\n" +"POT-Creation-Date: 2014-09-11 16:38+0100\n" "PO-Revision-Date: 2014-08-01 15:43+0000\n" "Last-Translator: Karl Hobley \n" -"Language-Team: Mongolian (http://www.transifex.com/projects/p/wagtail/language/mn/)\n" +"Language-Team: Mongolian (http://www.transifex.com/projects/p/wagtail/" +"language/mn/)\n" +"Language: mn\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"Language: mn\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" #: forms.py:37 @@ -54,7 +55,7 @@ msgstr "" msgid "Height" msgstr "" -#: models.py:34 templates/wagtailimages/images/usage.html:16 +#: models.py:48 templates/wagtailimages/images/usage.html:16 msgid "Title" msgstr "Гарчиг" @@ -66,7 +67,7 @@ msgstr "Файл" msgid "Tags" msgstr "Шошго" -#: wagtail_hooks.py:64 templates/wagtailimages/images/index.html:5 +#: wagtail_hooks.py:69 templates/wagtailimages/images/index.html:5 #: templates/wagtailimages/images/index.html:18 msgid "Images" msgstr "Зургууд" @@ -101,8 +102,12 @@ msgid_plural "" "\n" " There are %(counter)s matches\n" " " -msgstr[0] "\n1 зураг олдлоо" -msgstr[1] "\n%(counter)s зураг олдлоо" +msgstr[0] "" +"\n" +"1 зураг олдлоо" +msgstr[1] "" +"\n" +"%(counter)s зураг олдлоо" #: templates/wagtailimages/chooser/results.html:13 #: templates/wagtailimages/images/results.html:13 @@ -175,9 +180,11 @@ msgstr "" #: templates/wagtailimages/images/results.html:34 #, python-format msgid "" -"You've not uploaded any images. Why not add one now?" -msgstr "Та зураг оруулаагүй байна. Яагаад одоо нэгийг оруулж болохгүй гэж?" +"You've not uploaded any images. Why not add one now?" +msgstr "" +"Та зураг оруулаагүй байна. Яагаад одоо нэгийг оруулж болохгүй гэж?" #: templates/wagtailimages/images/url_generator.html:9 msgid "Generating URL" @@ -270,26 +277,26 @@ msgid "" "file extension (*.gif, *.jpg or *.png)." msgstr "" -#: views/images.py:37 views/images.py:47 +#: views/images.py:38 views/images.py:48 msgid "Search images" msgstr "Зураг хайх" -#: views/images.py:99 +#: views/images.py:105 msgid "Image '{0}' updated." msgstr "'{0}' зураг засагдлаа." -#: views/images.py:102 +#: views/images.py:108 msgid "The image could not be saved due to errors." msgstr "Зураг энэ алдаануудаас шалтгаалан хадгалагдсангүй." -#: views/images.py:188 +#: views/images.py:194 msgid "Image '{0}' deleted." msgstr "'{0}' зураг устлаа." -#: views/images.py:206 +#: views/images.py:217 msgid "Image '{0}' added." msgstr "'{0}' зураг нэмэгдлээ." -#: views/images.py:209 +#: views/images.py:220 msgid "The image could not be created due to errors." msgstr "Зураг энэ алдаануудаас шалтгаалан хадгалагдсангүй." diff --git a/wagtail/wagtailimages/locale/pl/LC_MESSAGES/django.po b/wagtail/wagtailimages/locale/pl/LC_MESSAGES/django.po index 5cdbdd5c8d..53e25c13df 100644 --- a/wagtail/wagtailimages/locale/pl/LC_MESSAGES/django.po +++ b/wagtail/wagtailimages/locale/pl/LC_MESSAGES/django.po @@ -1,7 +1,7 @@ # SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. -# +# # Translators: # utek , 2014 # utek , 2014 @@ -9,15 +9,17 @@ msgid "" msgstr "" "Project-Id-Version: Wagtail\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2014-08-01 16:39+0100\n" +"POT-Creation-Date: 2014-09-11 16:38+0100\n" "PO-Revision-Date: 2014-08-01 15:43+0000\n" "Last-Translator: Karl Hobley \n" -"Language-Team: Polish (http://www.transifex.com/projects/p/wagtail/language/pl/)\n" +"Language-Team: Polish (http://www.transifex.com/projects/p/wagtail/language/" +"pl/)\n" +"Language: pl\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"Language: pl\n" -"Plural-Forms: nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" +"Plural-Forms: nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 " +"|| n%100>=20) ? 1 : 2);\n" #: forms.py:37 msgid "Filter" @@ -55,7 +57,7 @@ msgstr "" msgid "Height" msgstr "" -#: models.py:34 templates/wagtailimages/images/usage.html:16 +#: models.py:48 templates/wagtailimages/images/usage.html:16 msgid "Title" msgstr "Tytuł" @@ -67,7 +69,7 @@ msgstr "Plik" msgid "Tags" msgstr "Tagi" -#: wagtail_hooks.py:64 templates/wagtailimages/images/index.html:5 +#: wagtail_hooks.py:69 templates/wagtailimages/images/index.html:5 #: templates/wagtailimages/images/index.html:18 msgid "Images" msgstr "Obrazy" @@ -102,9 +104,18 @@ msgid_plural "" "\n" " There are %(counter)s matches\n" " " -msgstr[0] "\n Jedno dopasowanie\n " -msgstr[1] "\n Znaleziono %(counter)s dopasowania\n " -msgstr[2] "\n Znaleziono %(counter)s dopasowań\n " +msgstr[0] "" +"\n" +" Jedno dopasowanie\n" +" " +msgstr[1] "" +"\n" +" Znaleziono %(counter)s dopasowania\n" +" " +msgstr[2] "" +"\n" +" Znaleziono %(counter)s dopasowań\n" +" " #: templates/wagtailimages/chooser/results.html:13 #: templates/wagtailimages/images/results.html:13 @@ -177,9 +188,11 @@ msgstr "Przepraszamy, żaden obraz nie pasuje do \"%(query_string)s\"" #: templates/wagtailimages/images/results.html:34 #, python-format msgid "" -"You've not uploaded any images. Why not add one now?" -msgstr "Nie przesłano żadnych obrazów. Czemu nie dodać jednego teraz?" +"You've not uploaded any images. Why not add one now?" +msgstr "" +"Nie przesłano żadnych obrazów. Czemu nie dodać jednego teraz?" #: templates/wagtailimages/images/url_generator.html:9 msgid "Generating URL" @@ -272,26 +285,26 @@ msgid "" "file extension (*.gif, *.jpg or *.png)." msgstr "" -#: views/images.py:37 views/images.py:47 +#: views/images.py:38 views/images.py:48 msgid "Search images" msgstr "Szukaj obrazów" -#: views/images.py:99 +#: views/images.py:105 msgid "Image '{0}' updated." msgstr "Uaktualniono obraz '{0}'." -#: views/images.py:102 +#: views/images.py:108 msgid "The image could not be saved due to errors." msgstr "Obraz nie mógł zostać zapisany z powodu błędów." -#: views/images.py:188 +#: views/images.py:194 msgid "Image '{0}' deleted." msgstr "Usunięto obraz '{0}'." -#: views/images.py:206 +#: views/images.py:217 msgid "Image '{0}' added." msgstr "Dodano obraz '{0}'." -#: views/images.py:209 +#: views/images.py:220 msgid "The image could not be created due to errors." msgstr "Obraz nie mógł zostać stworzony z powodu błędów." diff --git a/wagtail/wagtailimages/locale/pt_PT/LC_MESSAGES/django.po b/wagtail/wagtailimages/locale/pt_PT/LC_MESSAGES/django.po index 13f4e9c99c..d0d3147351 100644 --- a/wagtail/wagtailimages/locale/pt_PT/LC_MESSAGES/django.po +++ b/wagtail/wagtailimages/locale/pt_PT/LC_MESSAGES/django.po @@ -9,16 +9,16 @@ msgid "" msgstr "" "Project-Id-Version: Wagtail 0.5.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2014-08-01 16:39+0100\n" +"POT-Creation-Date: 2014-09-11 16:38+0100\n" "PO-Revision-Date: 2014-08-03 01:55+0100\n" "Last-Translator: Jose Lourenco \n" "Language-Team: \n" +"Language: pt_PT\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.4\n" -"Language: pt_PT\n" #: forms.py:37 msgid "Filter" @@ -56,7 +56,7 @@ msgstr "Largura" msgid "Height" msgstr "Altura" -#: models.py:34 templates/wagtailimages/images/usage.html:16 +#: models.py:48 templates/wagtailimages/images/usage.html:16 msgid "Title" msgstr "Título" @@ -68,7 +68,7 @@ msgstr "Ficheiro" msgid "Tags" msgstr "Etiquetas" -#: wagtail_hooks.py:64 templates/wagtailimages/images/index.html:5 +#: wagtail_hooks.py:69 templates/wagtailimages/images/index.html:5 #: templates/wagtailimages/images/index.html:18 msgid "Images" msgstr "Imagens" @@ -289,26 +289,26 @@ msgstr "" "Não é uma imagem do tipo %s válida. Por favor use uma imagem do tipo gif, " "jpeg, ou png, com a extensão de nome correta (*.gif, *.jpg or *.png)." -#: views/images.py:37 views/images.py:47 +#: views/images.py:38 views/images.py:48 msgid "Search images" msgstr "Procurar imagens" -#: views/images.py:99 +#: views/images.py:105 msgid "Image '{0}' updated." msgstr "Imagem '{0}' atualizada." -#: views/images.py:102 +#: views/images.py:108 msgid "The image could not be saved due to errors." msgstr "A imagem não pôde ser guardada devido a erros." -#: views/images.py:188 +#: views/images.py:194 msgid "Image '{0}' deleted." msgstr "Imagem '{0}' eliminada." -#: views/images.py:206 +#: views/images.py:217 msgid "Image '{0}' added." msgstr "Imagem '{0}' adicionada." -#: views/images.py:209 +#: views/images.py:220 msgid "The image could not be created due to errors." msgstr "A imagem não pôde ser criada devido a erros." diff --git a/wagtail/wagtailimages/locale/ro/LC_MESSAGES/django.po b/wagtail/wagtailimages/locale/ro/LC_MESSAGES/django.po index ac03909ae2..6209d86ad1 100644 --- a/wagtail/wagtailimages/locale/ro/LC_MESSAGES/django.po +++ b/wagtail/wagtailimages/locale/ro/LC_MESSAGES/django.po @@ -1,22 +1,24 @@ # SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. -# +# # Translators: # Dan Braghis, 2014 msgid "" msgstr "" "Project-Id-Version: Wagtail\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2014-08-01 16:39+0100\n" +"POT-Creation-Date: 2014-09-11 16:38+0100\n" "PO-Revision-Date: 2014-08-01 15:43+0000\n" "Last-Translator: Karl Hobley \n" -"Language-Team: Romanian (http://www.transifex.com/projects/p/wagtail/language/ro/)\n" +"Language-Team: Romanian (http://www.transifex.com/projects/p/wagtail/" +"language/ro/)\n" +"Language: ro\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"Language: ro\n" -"Plural-Forms: nplurals=3; plural=(n==1?0:(((n%100>19)||((n%100==0)&&(n!=0)))?2:1));\n" +"Plural-Forms: nplurals=3; plural=(n==1?0:(((n%100>19)||((n%100==0)&&(n!=0)))?" +"2:1));\n" #: forms.py:37 msgid "Filter" @@ -54,7 +56,7 @@ msgstr "" msgid "Height" msgstr "" -#: models.py:34 templates/wagtailimages/images/usage.html:16 +#: models.py:48 templates/wagtailimages/images/usage.html:16 msgid "Title" msgstr "Titlu" @@ -66,7 +68,7 @@ msgstr "Fișier" msgid "Tags" msgstr "Etichete" -#: wagtail_hooks.py:64 templates/wagtailimages/images/index.html:5 +#: wagtail_hooks.py:69 templates/wagtailimages/images/index.html:5 #: templates/wagtailimages/images/index.html:18 msgid "Images" msgstr "Imagini" @@ -101,9 +103,15 @@ msgid_plural "" "\n" " There are %(counter)s matches\n" " " -msgstr[0] "\nExistă o potrivire" -msgstr[1] "\nSunt %(counter)s potriviri" -msgstr[2] "\nSunt %(counter)s potriviri" +msgstr[0] "" +"\n" +"Există o potrivire" +msgstr[1] "" +"\n" +"Sunt %(counter)s potriviri" +msgstr[2] "" +"\n" +"Sunt %(counter)s potriviri" #: templates/wagtailimages/chooser/results.html:13 #: templates/wagtailimages/images/results.html:13 @@ -171,14 +179,17 @@ msgstr "Editare" #: templates/wagtailimages/images/results.html:31 #, python-format msgid "Sorry, no images match \"%(query_string)s\"" -msgstr "Ne pare rău, \"%(query_string)s\" nu se potrivește cu nici o imagine" +msgstr "" +"Ne pare rău, \"%(query_string)s\" nu se potrivește cu nici o imagine" #: templates/wagtailimages/images/results.html:34 #, python-format msgid "" -"You've not uploaded any images. Why not add one now?" -msgstr "Nu ați încărcat nici o imagine. De să nu adăugați una?" +"You've not uploaded any images. Why not add one now?" +msgstr "" +"Nu ați încărcat nici o imagine. De să nu adăugați una?" #: templates/wagtailimages/images/url_generator.html:9 msgid "Generating URL" @@ -271,26 +282,26 @@ msgid "" "file extension (*.gif, *.jpg or *.png)." msgstr "" -#: views/images.py:37 views/images.py:47 +#: views/images.py:38 views/images.py:48 msgid "Search images" msgstr "Caută imagini" -#: views/images.py:99 +#: views/images.py:105 msgid "Image '{0}' updated." msgstr "Imaginea '{0}' a fost actualizată." -#: views/images.py:102 +#: views/images.py:108 msgid "The image could not be saved due to errors." msgstr "Imaginea nu a fost salvată din cauza erorilor." -#: views/images.py:188 +#: views/images.py:194 msgid "Image '{0}' deleted." msgstr "Imaginea '{0}' a fost ștearsă." -#: views/images.py:206 +#: views/images.py:217 msgid "Image '{0}' added." msgstr "Imaginea '{0}' a fost adăugată." -#: views/images.py:209 +#: views/images.py:220 msgid "The image could not be created due to errors." msgstr "Imaginea nu a fost creată din cauza erorilor." diff --git a/wagtail/wagtailimages/locale/zh/LC_MESSAGES/django.po b/wagtail/wagtailimages/locale/zh/LC_MESSAGES/django.po index 564fcb35cf..c84544dc1f 100644 --- a/wagtail/wagtailimages/locale/zh/LC_MESSAGES/django.po +++ b/wagtail/wagtailimages/locale/zh/LC_MESSAGES/django.po @@ -1,20 +1,21 @@ # SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. -# +# # Translators: msgid "" msgstr "" "Project-Id-Version: Wagtail\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2014-08-01 16:39+0100\n" +"POT-Creation-Date: 2014-09-11 16:38+0100\n" "PO-Revision-Date: 2014-08-01 15:43+0000\n" "Last-Translator: Karl Hobley \n" -"Language-Team: Chinese (http://www.transifex.com/projects/p/wagtail/language/zh/)\n" +"Language-Team: Chinese (http://www.transifex.com/projects/p/wagtail/language/" +"zh/)\n" +"Language: zh\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"Language: zh\n" "Plural-Forms: nplurals=1; plural=0;\n" #: forms.py:37 @@ -53,7 +54,7 @@ msgstr "" msgid "Height" msgstr "" -#: models.py:34 templates/wagtailimages/images/usage.html:16 +#: models.py:48 templates/wagtailimages/images/usage.html:16 msgid "Title" msgstr "标题" @@ -65,7 +66,7 @@ msgstr "文件" msgid "Tags" msgstr "标签" -#: wagtail_hooks.py:64 templates/wagtailimages/images/index.html:5 +#: wagtail_hooks.py:69 templates/wagtailimages/images/index.html:5 #: templates/wagtailimages/images/index.html:18 msgid "Images" msgstr "图片" @@ -173,9 +174,11 @@ msgstr "" #: templates/wagtailimages/images/results.html:34 #, python-format msgid "" -"You've not uploaded any images. Why not add one now?" -msgstr "没有任何上传的图片。为什么不 添加一个?" +"You've not uploaded any images. Why not add one now?" +msgstr "" +"没有任何上传的图片。为什么不 添加" +"一个?" #: templates/wagtailimages/images/url_generator.html:9 msgid "Generating URL" @@ -268,26 +271,26 @@ msgid "" "file extension (*.gif, *.jpg or *.png)." msgstr "" -#: views/images.py:37 views/images.py:47 +#: views/images.py:38 views/images.py:48 msgid "Search images" msgstr "" -#: views/images.py:99 +#: views/images.py:105 msgid "Image '{0}' updated." msgstr "图片 '{0}' 已更新" -#: views/images.py:102 +#: views/images.py:108 msgid "The image could not be saved due to errors." msgstr "图片 因为有错不能被保存" -#: views/images.py:188 +#: views/images.py:194 msgid "Image '{0}' deleted." msgstr "图片 '{0}' 已删除." -#: views/images.py:206 +#: views/images.py:217 msgid "Image '{0}' added." msgstr "图片 '{0}' 已添加." -#: views/images.py:209 +#: views/images.py:220 msgid "The image could not be created due to errors." msgstr "图片因为有错不能被创建" diff --git a/wagtail/wagtailimages/locale/zh_TW/LC_MESSAGES/django.po b/wagtail/wagtailimages/locale/zh_TW/LC_MESSAGES/django.po index bcde4adb66..b866a56953 100644 --- a/wagtail/wagtailimages/locale/zh_TW/LC_MESSAGES/django.po +++ b/wagtail/wagtailimages/locale/zh_TW/LC_MESSAGES/django.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: Wagtail\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2014-08-01 16:39+0100\n" +"POT-Creation-Date: 2014-09-11 16:38+0100\n" "PO-Revision-Date: 2014-03-14 21:12+0000\n" "Last-Translator: wdv4758h \n" "Language-Team: \n" @@ -53,7 +53,7 @@ msgstr "" msgid "Height" msgstr "" -#: models.py:34 templates/wagtailimages/images/usage.html:16 +#: models.py:48 templates/wagtailimages/images/usage.html:16 msgid "Title" msgstr "標題" @@ -65,7 +65,7 @@ msgstr "文件" msgid "Tags" msgstr "標籤" -#: wagtail_hooks.py:64 templates/wagtailimages/images/index.html:5 +#: wagtail_hooks.py:69 templates/wagtailimages/images/index.html:5 #: templates/wagtailimages/images/index.html:18 msgid "Images" msgstr "圖片" @@ -279,26 +279,26 @@ msgid "" "file extension (*.gif, *.jpg or *.png)." msgstr "不是有效的圖片格式。請用 gif、jpeg 或者 png 格式的圖片" -#: views/images.py:37 views/images.py:47 +#: views/images.py:38 views/images.py:48 msgid "Search images" msgstr "搜尋圖片" -#: views/images.py:99 +#: views/images.py:105 msgid "Image '{0}' updated." msgstr "圖片 '{0}' 已更新" -#: views/images.py:102 +#: views/images.py:108 msgid "The image could not be saved due to errors." msgstr "圖片因有錯誤而無法儲存。" -#: views/images.py:188 +#: views/images.py:194 msgid "Image '{0}' deleted." msgstr "圖片 '{0}' 已刪除." -#: views/images.py:206 +#: views/images.py:217 msgid "Image '{0}' added." msgstr "圖片 '{0}' 已加入." -#: views/images.py:209 +#: views/images.py:220 msgid "The image could not be created due to errors." msgstr "圖片因有錯而不能被建立。" diff --git a/wagtail/wagtailredirects/locale/bg/LC_MESSAGES/django.po b/wagtail/wagtailredirects/locale/bg/LC_MESSAGES/django.po index 11ee5d3794..d715623523 100644 --- a/wagtail/wagtailredirects/locale/bg/LC_MESSAGES/django.po +++ b/wagtail/wagtailredirects/locale/bg/LC_MESSAGES/django.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: Wagtail\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2014-08-01 16:39+0100\n" +"POT-Creation-Date: 2014-09-11 16:38+0100\n" "PO-Revision-Date: 2014-03-14 21:12+0000\n" "Last-Translator: serafeim \n" "Language-Team: Bulgarian (http://www.transifex.com/projects/p/wagtail/" @@ -69,7 +69,7 @@ msgstr "Пренасочването '{0}' добавено." msgid "The redirect could not be created due to errors." msgstr "Пренасочването не можеше да бъде създадено поради грешки." -#: wagtail_hooks.py:23 templates/wagtailredirects/index.html:3 +#: wagtail_hooks.py:25 templates/wagtailredirects/index.html:3 #: templates/wagtailredirects/index.html:17 msgid "Redirects" msgstr "Пренасочвания" diff --git a/wagtail/wagtailredirects/locale/ca/LC_MESSAGES/django.po b/wagtail/wagtailredirects/locale/ca/LC_MESSAGES/django.po index 53882f99c2..a8d2096c7a 100644 --- a/wagtail/wagtailredirects/locale/ca/LC_MESSAGES/django.po +++ b/wagtail/wagtailredirects/locale/ca/LC_MESSAGES/django.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: Wagtail\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2014-08-01 16:39+0100\n" +"POT-Creation-Date: 2014-09-11 16:38+0100\n" "PO-Revision-Date: 2014-03-14 21:59+0000\n" "Last-Translator: Lloople \n" "Language-Team: Catalan (http://www.transifex.com/projects/p/wagtail/language/" @@ -69,7 +69,7 @@ msgstr "Redireccionament '{0}' afegit." msgid "The redirect could not be created due to errors." msgstr "No s'ha pogut crear el redireccionament." -#: wagtail_hooks.py:23 templates/wagtailredirects/index.html:3 +#: wagtail_hooks.py:25 templates/wagtailredirects/index.html:3 #: templates/wagtailredirects/index.html:17 msgid "Redirects" msgstr "Redireccions" diff --git a/wagtail/wagtailredirects/locale/de/LC_MESSAGES/django.po b/wagtail/wagtailredirects/locale/de/LC_MESSAGES/django.po index b0937da4b0..5fc9ef1f23 100644 --- a/wagtail/wagtailredirects/locale/de/LC_MESSAGES/django.po +++ b/wagtail/wagtailredirects/locale/de/LC_MESSAGES/django.po @@ -9,7 +9,7 @@ msgid "" msgstr "" "Project-Id-Version: Wagtail\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2014-08-01 16:39+0100\n" +"POT-Creation-Date: 2014-09-11 16:38+0100\n" "PO-Revision-Date: 2014-03-24 19:01+0000\n" "Last-Translator: pcraston \n" "Language-Team: German (http://www.transifex.com/projects/p/wagtail/language/" @@ -71,7 +71,7 @@ msgstr "Weiterleitung '{0}' hinzugefügt." msgid "The redirect could not be created due to errors." msgstr "Aufgrund von Fehlern konnte die Weiterleitung nicht erstellt werden." -#: wagtail_hooks.py:23 templates/wagtailredirects/index.html:3 +#: wagtail_hooks.py:25 templates/wagtailredirects/index.html:3 #: templates/wagtailredirects/index.html:17 msgid "Redirects" msgstr "Weiterleitungen" diff --git a/wagtail/wagtailredirects/locale/el/LC_MESSAGES/django.po b/wagtail/wagtailredirects/locale/el/LC_MESSAGES/django.po index a20fde9f9e..fe30e4b656 100644 --- a/wagtail/wagtailredirects/locale/el/LC_MESSAGES/django.po +++ b/wagtail/wagtailredirects/locale/el/LC_MESSAGES/django.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: Wagtail\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2014-08-01 16:39+0100\n" +"POT-Creation-Date: 2014-09-11 16:38+0100\n" "PO-Revision-Date: 2014-03-14 21:16+0000\n" "Last-Translator: serafeim \n" "Language-Team: Greek (http://www.transifex.com/projects/p/wagtail/language/" @@ -69,7 +69,7 @@ msgstr "Η ανακατεύθυνση '{0}' προστέθηκε." msgid "The redirect could not be created due to errors." msgstr "Δεν ήταν δυνατή η δημιουργία της ανακατεύθυνσης." -#: wagtail_hooks.py:23 templates/wagtailredirects/index.html:3 +#: wagtail_hooks.py:25 templates/wagtailredirects/index.html:3 #: templates/wagtailredirects/index.html:17 msgid "Redirects" msgstr "Ανακατευθύνει" diff --git a/wagtail/wagtailredirects/locale/en/LC_MESSAGES/django.po b/wagtail/wagtailredirects/locale/en/LC_MESSAGES/django.po index 6a3b4fc053..5082c09cf5 100644 --- a/wagtail/wagtailredirects/locale/en/LC_MESSAGES/django.po +++ b/wagtail/wagtailredirects/locale/en/LC_MESSAGES/django.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2014-08-01 16:39+0100\n" +"POT-Creation-Date: 2014-09-11 16:38+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -63,7 +63,7 @@ msgstr "" msgid "The redirect could not be created due to errors." msgstr "" -#: wagtail_hooks.py:23 templates/wagtailredirects/index.html:3 +#: wagtail_hooks.py:25 templates/wagtailredirects/index.html:3 #: templates/wagtailredirects/index.html:17 msgid "Redirects" msgstr "" diff --git a/wagtail/wagtailredirects/locale/es/LC_MESSAGES/django.po b/wagtail/wagtailredirects/locale/es/LC_MESSAGES/django.po index 5eae66a505..771da3bd9c 100644 --- a/wagtail/wagtailredirects/locale/es/LC_MESSAGES/django.po +++ b/wagtail/wagtailredirects/locale/es/LC_MESSAGES/django.po @@ -9,7 +9,7 @@ msgid "" msgstr "" "Project-Id-Version: Wagtail\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2014-08-01 16:39+0100\n" +"POT-Creation-Date: 2014-09-11 16:38+0100\n" "PO-Revision-Date: 2014-03-23 10:21+0000\n" "Last-Translator: fooflare \n" "Language-Team: Spanish (http://www.transifex.com/projects/p/wagtail/language/" @@ -70,7 +70,7 @@ msgstr "Redirección '{0}' añadida." msgid "The redirect could not be created due to errors." msgstr "La redirección no puede ser creada debido a errores." -#: wagtail_hooks.py:23 templates/wagtailredirects/index.html:3 +#: wagtail_hooks.py:25 templates/wagtailredirects/index.html:3 #: templates/wagtailredirects/index.html:17 msgid "Redirects" msgstr "Redirecciona" diff --git a/wagtail/wagtailredirects/locale/eu/LC_MESSAGES/django.po b/wagtail/wagtailredirects/locale/eu/LC_MESSAGES/django.po index f2336f56bf..6e33ea9019 100644 --- a/wagtail/wagtailredirects/locale/eu/LC_MESSAGES/django.po +++ b/wagtail/wagtailredirects/locale/eu/LC_MESSAGES/django.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: Wagtail\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2014-08-01 16:39+0100\n" +"POT-Creation-Date: 2014-09-11 16:38+0100\n" "PO-Revision-Date: 2014-03-14 21:12+0000\n" "Last-Translator: serafeim \n" "Language-Team: Basque (http://www.transifex.com/projects/p/wagtail/language/" @@ -64,7 +64,7 @@ msgstr "" msgid "The redirect could not be created due to errors." msgstr "" -#: wagtail_hooks.py:23 templates/wagtailredirects/index.html:3 +#: wagtail_hooks.py:25 templates/wagtailredirects/index.html:3 #: templates/wagtailredirects/index.html:17 msgid "Redirects" msgstr "" diff --git a/wagtail/wagtailredirects/locale/fr/LC_MESSAGES/django.po b/wagtail/wagtailredirects/locale/fr/LC_MESSAGES/django.po index a88294e242..cab6b869a2 100644 --- a/wagtail/wagtailredirects/locale/fr/LC_MESSAGES/django.po +++ b/wagtail/wagtailredirects/locale/fr/LC_MESSAGES/django.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: Wagtail\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2014-08-01 16:39+0100\n" +"POT-Creation-Date: 2014-09-11 16:38+0100\n" "PO-Revision-Date: 2014-03-18 23:07+0000\n" "Last-Translator: nahuel\n" "Language-Team: French (http://www.transifex.com/projects/p/wagtail/language/" @@ -69,7 +69,7 @@ msgstr "Redirection '{0} ajoutée." msgid "The redirect could not be created due to errors." msgstr "La redirection ne peut être créé du fait d'erreurs." -#: wagtail_hooks.py:23 templates/wagtailredirects/index.html:3 +#: wagtail_hooks.py:25 templates/wagtailredirects/index.html:3 #: templates/wagtailredirects/index.html:17 msgid "Redirects" msgstr "Redirections" diff --git a/wagtail/wagtailredirects/locale/gl/LC_MESSAGES/django.po b/wagtail/wagtailredirects/locale/gl/LC_MESSAGES/django.po index a0a877ef82..4eaddaed3d 100644 --- a/wagtail/wagtailredirects/locale/gl/LC_MESSAGES/django.po +++ b/wagtail/wagtailredirects/locale/gl/LC_MESSAGES/django.po @@ -9,7 +9,7 @@ msgid "" msgstr "" "Project-Id-Version: Wagtail\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2014-08-01 16:39+0100\n" +"POT-Creation-Date: 2014-09-11 16:38+0100\n" "PO-Revision-Date: 2014-03-23 10:32+0000\n" "Last-Translator: fooflare \n" "Language-Team: Galician (http://www.transifex.com/projects/p/wagtail/" @@ -70,7 +70,7 @@ msgstr "Redirección '{0}' engadida." msgid "The redirect could not be created due to errors." msgstr "A redirección non pede ser creada debido a erros." -#: wagtail_hooks.py:23 templates/wagtailredirects/index.html:3 +#: wagtail_hooks.py:25 templates/wagtailredirects/index.html:3 #: templates/wagtailredirects/index.html:17 msgid "Redirects" msgstr "Redirecciona" diff --git a/wagtail/wagtailredirects/locale/mn/LC_MESSAGES/django.po b/wagtail/wagtailredirects/locale/mn/LC_MESSAGES/django.po index 8fe2a36703..e402c72331 100644 --- a/wagtail/wagtailredirects/locale/mn/LC_MESSAGES/django.po +++ b/wagtail/wagtailredirects/locale/mn/LC_MESSAGES/django.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: Wagtail\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2014-08-01 16:39+0100\n" +"POT-Creation-Date: 2014-09-11 16:38+0100\n" "PO-Revision-Date: 2014-03-14 21:12+0000\n" "Last-Translator: serafeim \n" "Language-Team: Mongolian (http://www.transifex.com/projects/p/wagtail/" @@ -64,7 +64,7 @@ msgstr "" msgid "The redirect could not be created due to errors." msgstr "" -#: wagtail_hooks.py:23 templates/wagtailredirects/index.html:3 +#: wagtail_hooks.py:25 templates/wagtailredirects/index.html:3 #: templates/wagtailredirects/index.html:17 msgid "Redirects" msgstr "" diff --git a/wagtail/wagtailredirects/locale/pl/LC_MESSAGES/django.po b/wagtail/wagtailredirects/locale/pl/LC_MESSAGES/django.po index 5a89ebb3fa..eaa2433241 100644 --- a/wagtail/wagtailredirects/locale/pl/LC_MESSAGES/django.po +++ b/wagtail/wagtailredirects/locale/pl/LC_MESSAGES/django.po @@ -9,7 +9,7 @@ msgid "" msgstr "" "Project-Id-Version: Wagtail\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2014-08-01 16:39+0100\n" +"POT-Creation-Date: 2014-09-11 16:38+0100\n" "PO-Revision-Date: 2014-03-14 22:16+0000\n" "Last-Translator: utek \n" "Language-Team: Polish (http://www.transifex.com/projects/p/wagtail/language/" @@ -70,7 +70,7 @@ msgstr "Dodano przekierowanie '{0}'." msgid "The redirect could not be created due to errors." msgstr "Przekierowanie nie mogło zostać stworzone z powodu błędów." -#: wagtail_hooks.py:23 templates/wagtailredirects/index.html:3 +#: wagtail_hooks.py:25 templates/wagtailredirects/index.html:3 #: templates/wagtailredirects/index.html:17 msgid "Redirects" msgstr "Przekierowania" diff --git a/wagtail/wagtailredirects/locale/pt_PT/LC_MESSAGES/django.po b/wagtail/wagtailredirects/locale/pt_PT/LC_MESSAGES/django.po index 759a4906a2..5b1fe5ecd9 100644 --- a/wagtail/wagtailredirects/locale/pt_PT/LC_MESSAGES/django.po +++ b/wagtail/wagtailredirects/locale/pt_PT/LC_MESSAGES/django.po @@ -9,16 +9,16 @@ msgid "" msgstr "" "Project-Id-Version: Wagtail 0.5.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2014-08-01 16:39+0100\n" +"POT-Creation-Date: 2014-09-11 16:38+0100\n" "PO-Revision-Date: 2014-08-03 01:56+0100\n" "Last-Translator: Jose Lourenco \n" "Language-Team: \n" +"Language: pt_PT\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.4\n" -"Language: pt_PT\n" #: models.py:10 msgid "Redirect from" @@ -68,7 +68,7 @@ msgstr "Redireção '{0}' adicionada." msgid "The redirect could not be created due to errors." msgstr "A redireção não pôde ser criada devido a erros." -#: wagtail_hooks.py:22 templates/wagtailredirects/index.html:3 +#: wagtail_hooks.py:25 templates/wagtailredirects/index.html:3 #: templates/wagtailredirects/index.html:17 msgid "Redirects" msgstr "Redireções" diff --git a/wagtail/wagtailredirects/locale/ro/LC_MESSAGES/django.po b/wagtail/wagtailredirects/locale/ro/LC_MESSAGES/django.po index f248a3e8f6..670eb96f2b 100644 --- a/wagtail/wagtailredirects/locale/ro/LC_MESSAGES/django.po +++ b/wagtail/wagtailredirects/locale/ro/LC_MESSAGES/django.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: Wagtail\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2014-08-01 16:39+0100\n" +"POT-Creation-Date: 2014-09-11 16:38+0100\n" "PO-Revision-Date: 2014-03-18 13:21+0000\n" "Last-Translator: zerolab\n" "Language-Team: Romanian (http://www.transifex.com/projects/p/wagtail/" @@ -69,7 +69,7 @@ msgstr "Redirecționarea '{0}' a fost adăugată." msgid "The redirect could not be created due to errors." msgstr "Redirecționarea nu a fost creată din cauza erorilor." -#: wagtail_hooks.py:23 templates/wagtailredirects/index.html:3 +#: wagtail_hooks.py:25 templates/wagtailredirects/index.html:3 #: templates/wagtailredirects/index.html:17 msgid "Redirects" msgstr "Redirecționări" diff --git a/wagtail/wagtailredirects/locale/zh/LC_MESSAGES/django.po b/wagtail/wagtailredirects/locale/zh/LC_MESSAGES/django.po index 7b7787add4..bee6e5d6e1 100644 --- a/wagtail/wagtailredirects/locale/zh/LC_MESSAGES/django.po +++ b/wagtail/wagtailredirects/locale/zh/LC_MESSAGES/django.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: Wagtail\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2014-08-01 16:39+0100\n" +"POT-Creation-Date: 2014-09-11 16:38+0100\n" "PO-Revision-Date: 2014-03-14 21:12+0000\n" "Last-Translator: serafeim \n" "Language-Team: Chinese (http://www.transifex.com/projects/p/wagtail/language/" @@ -65,7 +65,7 @@ msgstr "转向 '{0}' 已添加" msgid "The redirect could not be created due to errors." msgstr "由于多个错误,转向设置无法创建。" -#: wagtail_hooks.py:23 templates/wagtailredirects/index.html:3 +#: wagtail_hooks.py:25 templates/wagtailredirects/index.html:3 #: templates/wagtailredirects/index.html:17 msgid "Redirects" msgstr "转向" diff --git a/wagtail/wagtailredirects/locale/zh_TW/LC_MESSAGES/django.po b/wagtail/wagtailredirects/locale/zh_TW/LC_MESSAGES/django.po index 9c8175de33..7b3a0e1415 100644 --- a/wagtail/wagtailredirects/locale/zh_TW/LC_MESSAGES/django.po +++ b/wagtail/wagtailredirects/locale/zh_TW/LC_MESSAGES/django.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: Wagtail\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2014-08-01 16:39+0100\n" +"POT-Creation-Date: 2014-09-11 16:38+0100\n" "PO-Revision-Date: 2014-03-14 21:12+0000\n" "Last-Translator: wdv4758h \n" "Language-Team: \n" @@ -66,7 +66,7 @@ msgstr "重導向 '{0}' 已加入" msgid "The redirect could not be created due to errors." msgstr "重導向因有錯誤而無法建立。" -#: wagtail_hooks.py:23 templates/wagtailredirects/index.html:3 +#: wagtail_hooks.py:25 templates/wagtailredirects/index.html:3 #: templates/wagtailredirects/index.html:17 msgid "Redirects" msgstr "重導向" diff --git a/wagtail/wagtailsearch/locale/bg/LC_MESSAGES/django.po b/wagtail/wagtailsearch/locale/bg/LC_MESSAGES/django.po index c63ffe52bf..d67508bb85 100644 --- a/wagtail/wagtailsearch/locale/bg/LC_MESSAGES/django.po +++ b/wagtail/wagtailsearch/locale/bg/LC_MESSAGES/django.po @@ -1,21 +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. -# +# # Translators: # Lyuboslav Petrov , 2014 msgid "" msgstr "" "Project-Id-Version: Wagtail\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2014-08-01 16:39+0100\n" +"POT-Creation-Date: 2014-09-11 16:38+0100\n" "PO-Revision-Date: 2014-08-01 15:43+0000\n" "Last-Translator: Karl Hobley \n" -"Language-Team: Bulgarian (http://www.transifex.com/projects/p/wagtail/language/bg/)\n" +"Language-Team: Bulgarian (http://www.transifex.com/projects/p/wagtail/" +"language/bg/)\n" +"Language: bg\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"Language: bg\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" #: forms.py:9 @@ -27,13 +28,16 @@ msgid "" "Enter the full search string to match. An \n" " exact match is required for your Editors Picks to be \n" " displayed, wildcards are NOT allowed." -msgstr "Въведете целият стринг. Точно \n съвпадение е нужно за вашите \"Избрано от Редактора\" \n да бъдат показани, като wildcards НЕ са позволени." +msgstr "" +"Въведете целият стринг. Точно \n" +" съвпадение е нужно за вашите \"Избрано от Редактора\" \n" +" да бъдат показани, като wildcards НЕ са позволени." #: forms.py:36 msgid "Please specify at least one recommendation for this search term." msgstr "" -#: wagtail_hooks.py:23 templates/wagtailsearch/editorspicks/list.html:9 +#: wagtail_hooks.py:25 templates/wagtailsearch/editorspicks/list.html:9 msgid "Editors picks" msgstr "Избрано от Редактора" @@ -45,14 +49,20 @@ msgstr "Добави \"Избрано от Редактора\"" #: templates/wagtailsearch/editorspicks/add.html:10 msgid "" "\n" -"

    Editors picks are a means of recommending specific pages that might not organically come high up in search results. E.g recommending your primary donation page to a user searching with a less common term like \"giving\".

    \n" +"

    Editors picks are a means of recommending specific pages " +"that might not organically come high up in search results. E.g recommending " +"your primary donation page to a user searching with a less common term like " +"\"giving\".

    \n" " " msgstr "" #: templates/wagtailsearch/editorspicks/add.html:13 msgid "" "\n" -"

    The \"Search term(s)/phrase\" field below must contain the full and exact search for which you wish to provide recommended results, including any misspellings/user error. To help, you can choose from search terms that have been popular with users of your site.

    \n" +"

    The \"Search term(s)/phrase\" field below must contain " +"the full and exact search for which you wish to provide recommended results, " +"including any misspellings/user error. To help, you can choose from " +"search terms that have been popular with users of your site.

    \n" " " msgstr "" @@ -73,9 +83,10 @@ msgid "Delete" msgstr "Изтрий" #: templates/wagtailsearch/editorspicks/confirm_delete.html:9 -msgid "" -"Are you sure you want to delete all editors picks for this search term?" -msgstr "Сигурен ли сте, че искате да изтриете всички \"Избрано от Редактора\" за тази ключова дума?" +msgid "Are you sure you want to delete all editors picks for this search term?" +msgstr "" +"Сигурен ли сте, че искате да изтриете всички \"Избрано от Редактора\" за " +"тази ключова дума?" #: templates/wagtailsearch/editorspicks/confirm_delete.html:12 msgid "Yes, delete" @@ -129,8 +140,14 @@ msgid_plural "" "\n" " There are %(counter)s matches\n" " " -msgstr[0] "\n Има едно съвпадение\n " -msgstr[1] "\n Има %(counter)s съвпадения\n " +msgstr[0] "" +"\n" +" Има едно съвпадение\n" +" " +msgstr[1] "" +"\n" +" Има %(counter)s съвпадения\n" +" " #: templates/wagtailsearch/editorspicks/results.html:18 #, python-format @@ -140,8 +157,8 @@ msgstr "" #: templates/wagtailsearch/editorspicks/results.html:21 #, python-format msgid "" -"No editor's picks have been created. Why not add one?" +"No editor's picks have been created. Why not add one?" msgstr "" #: templates/wagtailsearch/editorspicks/includes/editorspicks_form.html:4 diff --git a/wagtail/wagtailsearch/locale/ca/LC_MESSAGES/django.po b/wagtail/wagtailsearch/locale/ca/LC_MESSAGES/django.po index 62deec3d6b..e5ba8dc70d 100644 --- a/wagtail/wagtailsearch/locale/ca/LC_MESSAGES/django.po +++ b/wagtail/wagtailsearch/locale/ca/LC_MESSAGES/django.po @@ -1,21 +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. -# +# # Translators: # David Llop , 2014 msgid "" msgstr "" "Project-Id-Version: Wagtail\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2014-08-01 16:39+0100\n" +"POT-Creation-Date: 2014-09-11 16:38+0100\n" "PO-Revision-Date: 2014-08-01 15:43+0000\n" "Last-Translator: Karl Hobley \n" -"Language-Team: Catalan (http://www.transifex.com/projects/p/wagtail/language/ca/)\n" +"Language-Team: Catalan (http://www.transifex.com/projects/p/wagtail/language/" +"ca/)\n" +"Language: ca\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"Language: ca\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" #: forms.py:9 @@ -27,13 +28,17 @@ msgid "" "Enter the full search string to match. An \n" " exact match is required for your Editors Picks to be \n" " displayed, wildcards are NOT allowed." -msgstr "Escriu el text a cercar. Una\ncoincidència exacta és requerida per les teves seleccions dels editors per ser\nmostrades, les wildcars NO estan permeses." +msgstr "" +"Escriu el text a cercar. Una\n" +"coincidència exacta és requerida per les teves seleccions dels editors per " +"ser\n" +"mostrades, les wildcars NO estan permeses." #: forms.py:36 msgid "Please specify at least one recommendation for this search term." msgstr "" -#: wagtail_hooks.py:23 templates/wagtailsearch/editorspicks/list.html:9 +#: wagtail_hooks.py:25 templates/wagtailsearch/editorspicks/list.html:9 msgid "Editors picks" msgstr "Selecció dels editors" @@ -45,14 +50,20 @@ msgstr "afegeix selecció dels editors" #: templates/wagtailsearch/editorspicks/add.html:10 msgid "" "\n" -"

    Editors picks are a means of recommending specific pages that might not organically come high up in search results. E.g recommending your primary donation page to a user searching with a less common term like \"giving\".

    \n" +"

    Editors picks are a means of recommending specific pages " +"that might not organically come high up in search results. E.g recommending " +"your primary donation page to a user searching with a less common term like " +"\"giving\".

    \n" " " msgstr "" #: templates/wagtailsearch/editorspicks/add.html:13 msgid "" "\n" -"

    The \"Search term(s)/phrase\" field below must contain the full and exact search for which you wish to provide recommended results, including any misspellings/user error. To help, you can choose from search terms that have been popular with users of your site.

    \n" +"

    The \"Search term(s)/phrase\" field below must contain " +"the full and exact search for which you wish to provide recommended results, " +"including any misspellings/user error. To help, you can choose from " +"search terms that have been popular with users of your site.

    \n" " " msgstr "" @@ -73,9 +84,10 @@ msgid "Delete" msgstr "Esborra" #: templates/wagtailsearch/editorspicks/confirm_delete.html:9 -msgid "" -"Are you sure you want to delete all editors picks for this search term?" -msgstr "Estàs segur que vols esborrar totes les seleccions dels editors per aquest terme de cerca?" +msgid "Are you sure you want to delete all editors picks for this search term?" +msgstr "" +"Estàs segur que vols esborrar totes les seleccions dels editors per aquest " +"terme de cerca?" #: templates/wagtailsearch/editorspicks/confirm_delete.html:12 msgid "Yes, delete" @@ -129,20 +141,27 @@ msgid_plural "" "\n" " There are %(counter)s matches\n" " " -msgstr[0] "\nHi ha una coincidència" -msgstr[1] "\nHi han %(counter)s coincidències" +msgstr[0] "" +"\n" +"Hi ha una coincidència" +msgstr[1] "" +"\n" +"Hi han %(counter)s coincidències" #: templates/wagtailsearch/editorspicks/results.html:18 #, python-format msgid "Sorry, no editor's picks match \"%(query_string)s\"" -msgstr "Ho sentim, cap selecció d'editor coincideix amb \"%(query_string)s\"" +msgstr "" +"Ho sentim, cap selecció d'editor coincideix amb \"%(query_string)s\"" #: templates/wagtailsearch/editorspicks/results.html:21 #, python-format msgid "" -"No editor's picks have been created. Why not add one?" -msgstr "Encara no s'ha creat cap selecció d'editor. Per què no afegeixes una?" +"No editor's picks have been created. Why not add one?" +msgstr "" +"Encara no s'ha creat cap selecció d'editor. Per què no afegeixes una?" #: templates/wagtailsearch/editorspicks/includes/editorspicks_form.html:4 msgid "Move up" diff --git a/wagtail/wagtailsearch/locale/de/LC_MESSAGES/django.po b/wagtail/wagtailsearch/locale/de/LC_MESSAGES/django.po index a5bb2346fa..45bb2951ae 100644 --- a/wagtail/wagtailsearch/locale/de/LC_MESSAGES/django.po +++ b/wagtail/wagtailsearch/locale/de/LC_MESSAGES/django.po @@ -1,7 +1,7 @@ # SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. -# +# # Translators: # Johannes Spielmann , 2014 # pcraston , 2014 @@ -9,14 +9,15 @@ msgid "" msgstr "" "Project-Id-Version: Wagtail\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2014-08-01 16:39+0100\n" +"POT-Creation-Date: 2014-09-11 16:38+0100\n" "PO-Revision-Date: 2014-08-01 15:43+0000\n" "Last-Translator: Karl Hobley \n" -"Language-Team: German (http://www.transifex.com/projects/p/wagtail/language/de/)\n" +"Language-Team: German (http://www.transifex.com/projects/p/wagtail/language/" +"de/)\n" +"Language: de\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"Language: de\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" #: forms.py:9 @@ -28,13 +29,16 @@ msgid "" "Enter the full search string to match. An \n" " exact match is required for your Editors Picks to be \n" " displayed, wildcards are NOT allowed." -msgstr "Geben Sie den vollständigen Suchbegriff ein! Um Ihre Redaktionsempfehlungen anzuzeigen wird eine genaue Übereinstimmung benötigt. Wildcards sind NICHT erlaubt." +msgstr "" +"Geben Sie den vollständigen Suchbegriff ein! Um Ihre Redaktionsempfehlungen " +"anzuzeigen wird eine genaue Übereinstimmung benötigt. Wildcards sind NICHT " +"erlaubt." #: forms.py:36 msgid "Please specify at least one recommendation for this search term." msgstr "" -#: wagtail_hooks.py:23 templates/wagtailsearch/editorspicks/list.html:9 +#: wagtail_hooks.py:25 templates/wagtailsearch/editorspicks/list.html:9 msgid "Editors picks" msgstr "Redaktionsempfehlungen" @@ -46,14 +50,20 @@ msgstr "Redaktionsempfehlung hinzufügen" #: templates/wagtailsearch/editorspicks/add.html:10 msgid "" "\n" -"

    Editors picks are a means of recommending specific pages that might not organically come high up in search results. E.g recommending your primary donation page to a user searching with a less common term like \"giving\".

    \n" +"

    Editors picks are a means of recommending specific pages " +"that might not organically come high up in search results. E.g recommending " +"your primary donation page to a user searching with a less common term like " +"\"giving\".

    \n" " " msgstr "" #: templates/wagtailsearch/editorspicks/add.html:13 msgid "" "\n" -"

    The \"Search term(s)/phrase\" field below must contain the full and exact search for which you wish to provide recommended results, including any misspellings/user error. To help, you can choose from search terms that have been popular with users of your site.

    \n" +"

    The \"Search term(s)/phrase\" field below must contain " +"the full and exact search for which you wish to provide recommended results, " +"including any misspellings/user error. To help, you can choose from " +"search terms that have been popular with users of your site.

    \n" " " msgstr "" @@ -74,9 +84,10 @@ msgid "Delete" msgstr "Löschen" #: templates/wagtailsearch/editorspicks/confirm_delete.html:9 -msgid "" -"Are you sure you want to delete all editors picks for this search term?" -msgstr "Sind Sie sicher, dass Sie alle Redaktionsempfehlungen für diesen Suchbegriff löschen wollen?" +msgid "Are you sure you want to delete all editors picks for this search term?" +msgstr "" +"Sind Sie sicher, dass Sie alle Redaktionsempfehlungen für diesen Suchbegriff " +"löschen wollen?" #: templates/wagtailsearch/editorspicks/confirm_delete.html:12 msgid "Yes, delete" @@ -130,20 +141,30 @@ msgid_plural "" "\n" " There are %(counter)s matches\n" " " -msgstr[0] "\n Es gibt ein Ergebnis\n " -msgstr[1] "\n Es gibt %(counter)s Ergebnisse\n " +msgstr[0] "" +"\n" +" Es gibt ein Ergebnis\n" +" " +msgstr[1] "" +"\n" +" Es gibt %(counter)s Ergebnisse\n" +" " #: templates/wagtailsearch/editorspicks/results.html:18 #, python-format msgid "Sorry, no editor's picks match \"%(query_string)s\"" -msgstr "Es wurde leider keine Redaktionsempfehlung zum Suchbegriff \"%(query_string)s\" gefunden" +msgstr "" +"Es wurde leider keine Redaktionsempfehlung zum Suchbegriff \"" +"%(query_string)s\" gefunden" #: templates/wagtailsearch/editorspicks/results.html:21 #, python-format msgid "" -"No editor's picks have been created. Why not add one?" -msgstr "Sie haben noch keine Redaktionsempfehlungen erstellt. Erstellen Sie doch jetzt eine!" +"No editor's picks have been created. Why not add one?" +msgstr "" +"Sie haben noch keine Redaktionsempfehlungen erstellt. Erstellen Sie doch jetzt eine!" #: templates/wagtailsearch/editorspicks/includes/editorspicks_form.html:4 msgid "Move up" diff --git a/wagtail/wagtailsearch/locale/el/LC_MESSAGES/django.po b/wagtail/wagtailsearch/locale/el/LC_MESSAGES/django.po index 023235064c..04eecd0f4d 100644 --- a/wagtail/wagtailsearch/locale/el/LC_MESSAGES/django.po +++ b/wagtail/wagtailsearch/locale/el/LC_MESSAGES/django.po @@ -1,7 +1,7 @@ # SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. -# +# # Translators: # serafeim , 2014 # serafeim , 2014 @@ -9,14 +9,15 @@ msgid "" msgstr "" "Project-Id-Version: Wagtail\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2014-08-01 16:39+0100\n" +"POT-Creation-Date: 2014-09-11 16:38+0100\n" "PO-Revision-Date: 2014-08-01 15:43+0000\n" "Last-Translator: Karl Hobley \n" -"Language-Team: Greek (http://www.transifex.com/projects/p/wagtail/language/el/)\n" +"Language-Team: Greek (http://www.transifex.com/projects/p/wagtail/language/" +"el/)\n" +"Language: el\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"Language: el\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" #: forms.py:9 @@ -28,13 +29,17 @@ msgid "" "Enter the full search string to match. An \n" " exact match is required for your Editors Picks to be \n" " displayed, wildcards are NOT allowed." -msgstr "Συμπληρώσατε το πλήρες κείμενο προς αναζήτησης.\nΓια να εμφανιστεί η επιλογή των συντακτών σας\nαπαιτείται ακριβές ταίριασμα, δεν επιτρέπονται\nαστεράκια." +msgstr "" +"Συμπληρώσατε το πλήρες κείμενο προς αναζήτησης.\n" +"Για να εμφανιστεί η επιλογή των συντακτών σας\n" +"απαιτείται ακριβές ταίριασμα, δεν επιτρέπονται\n" +"αστεράκια." #: forms.py:36 msgid "Please specify at least one recommendation for this search term." msgstr "" -#: wagtail_hooks.py:23 templates/wagtailsearch/editorspicks/list.html:9 +#: wagtail_hooks.py:25 templates/wagtailsearch/editorspicks/list.html:9 msgid "Editors picks" msgstr "Επιλογές συντακτών" @@ -46,14 +51,20 @@ msgstr "Προσθήκη επιλογής συντακτών" #: templates/wagtailsearch/editorspicks/add.html:10 msgid "" "\n" -"

    Editors picks are a means of recommending specific pages that might not organically come high up in search results. E.g recommending your primary donation page to a user searching with a less common term like \"giving\".

    \n" +"

    Editors picks are a means of recommending specific pages " +"that might not organically come high up in search results. E.g recommending " +"your primary donation page to a user searching with a less common term like " +"\"giving\".

    \n" " " msgstr "" #: templates/wagtailsearch/editorspicks/add.html:13 msgid "" "\n" -"

    The \"Search term(s)/phrase\" field below must contain the full and exact search for which you wish to provide recommended results, including any misspellings/user error. To help, you can choose from search terms that have been popular with users of your site.

    \n" +"

    The \"Search term(s)/phrase\" field below must contain " +"the full and exact search for which you wish to provide recommended results, " +"including any misspellings/user error. To help, you can choose from " +"search terms that have been popular with users of your site.

    \n" " " msgstr "" @@ -74,9 +85,10 @@ msgid "Delete" msgstr "Διαγραφή" #: templates/wagtailsearch/editorspicks/confirm_delete.html:9 -msgid "" -"Are you sure you want to delete all editors picks for this search term?" -msgstr "Είστε σίγουρος ότι θέλετε να διαγράψετε όλες τις επιλογές συντακτών για τον εν λόγω όρο αναζήτησης;" +msgid "Are you sure you want to delete all editors picks for this search term?" +msgstr "" +"Είστε σίγουρος ότι θέλετε να διαγράψετε όλες τις επιλογές συντακτών για τον " +"εν λόγω όρο αναζήτησης;" #: templates/wagtailsearch/editorspicks/confirm_delete.html:12 msgid "Yes, delete" @@ -130,20 +142,28 @@ msgid_plural "" "\n" " There are %(counter)s matches\n" " " -msgstr[0] "\nΒρέθηκε ένα αποτέλεσμα" -msgstr[1] "\nΒρέθηκαν %(counter)s αποτελέσματα" +msgstr[0] "" +"\n" +"Βρέθηκε ένα αποτέλεσμα" +msgstr[1] "" +"\n" +"Βρέθηκαν %(counter)s αποτελέσματα" #: templates/wagtailsearch/editorspicks/results.html:18 #, python-format msgid "Sorry, no editor's picks match \"%(query_string)s\"" -msgstr "Λυπούμαστε, δε ταιριάζουν επιλογές συντακτών με το \"%(query_string)s\"" +msgstr "" +"Λυπούμαστε, δε ταιριάζουν επιλογές συντακτών με το \"%(query_string)s\"" #: templates/wagtailsearch/editorspicks/results.html:21 #, python-format msgid "" -"No editor's picks have been created. Why not add one?" -msgstr "Δεν υπάρχουν επιλογές συντακτών. Θέλετε να προσθέσετε μία;" +"No editor's picks have been created. Why not add one?" +msgstr "" +"Δεν υπάρχουν επιλογές συντακτών. Θέλετε να προσθέσετε μία;" #: templates/wagtailsearch/editorspicks/includes/editorspicks_form.html:4 msgid "Move up" diff --git a/wagtail/wagtailsearch/locale/en/LC_MESSAGES/django.po b/wagtail/wagtailsearch/locale/en/LC_MESSAGES/django.po index 615e18f93c..938b0334bf 100644 --- a/wagtail/wagtailsearch/locale/en/LC_MESSAGES/django.po +++ b/wagtail/wagtailsearch/locale/en/LC_MESSAGES/django.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2014-08-01 16:39+0100\n" +"POT-Creation-Date: 2014-09-11 16:38+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -32,7 +32,7 @@ msgstr "" msgid "Please specify at least one recommendation for this search term." msgstr "" -#: wagtail_hooks.py:23 templates/wagtailsearch/editorspicks/list.html:9 +#: wagtail_hooks.py:25 templates/wagtailsearch/editorspicks/list.html:9 msgid "Editors picks" msgstr "" diff --git a/wagtail/wagtailsearch/locale/es/LC_MESSAGES/django.po b/wagtail/wagtailsearch/locale/es/LC_MESSAGES/django.po index f619f1125e..36cf67e43d 100644 --- a/wagtail/wagtailsearch/locale/es/LC_MESSAGES/django.po +++ b/wagtail/wagtailsearch/locale/es/LC_MESSAGES/django.po @@ -1,7 +1,7 @@ # SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. -# +# # Translators: # fooflare , 2014 # fooflare , 2014 @@ -9,14 +9,15 @@ msgid "" msgstr "" "Project-Id-Version: Wagtail\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2014-08-01 16:39+0100\n" +"POT-Creation-Date: 2014-09-11 16:38+0100\n" "PO-Revision-Date: 2014-08-01 15:43+0000\n" "Last-Translator: Karl Hobley \n" -"Language-Team: Spanish (http://www.transifex.com/projects/p/wagtail/language/es/)\n" +"Language-Team: Spanish (http://www.transifex.com/projects/p/wagtail/language/" +"es/)\n" +"Language: es\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"Language: es\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" #: forms.py:9 @@ -28,13 +29,17 @@ msgid "" "Enter the full search string to match. An \n" " exact match is required for your Editors Picks to be \n" " displayed, wildcards are NOT allowed." -msgstr "Introduce la cadena completa de búsqueda a encontrar. Es \n necesaria una coincidencia exacta para que tus Selecciones del Editor sean \n mostradas, los comodines NO están permitidos." +msgstr "" +"Introduce la cadena completa de búsqueda a encontrar. Es \n" +" necesaria una coincidencia exacta para que tus Selecciones del " +"Editor sean \n" +" mostradas, los comodines NO están permitidos." #: forms.py:36 msgid "Please specify at least one recommendation for this search term." msgstr "" -#: wagtail_hooks.py:23 templates/wagtailsearch/editorspicks/list.html:9 +#: wagtail_hooks.py:25 templates/wagtailsearch/editorspicks/list.html:9 msgid "Editors picks" msgstr "Selecciones del editor" @@ -46,14 +51,20 @@ msgstr "Añadir selección del editor" #: templates/wagtailsearch/editorspicks/add.html:10 msgid "" "\n" -"

    Editors picks are a means of recommending specific pages that might not organically come high up in search results. E.g recommending your primary donation page to a user searching with a less common term like \"giving\".

    \n" +"

    Editors picks are a means of recommending specific pages " +"that might not organically come high up in search results. E.g recommending " +"your primary donation page to a user searching with a less common term like " +"\"giving\".

    \n" " " msgstr "" #: templates/wagtailsearch/editorspicks/add.html:13 msgid "" "\n" -"

    The \"Search term(s)/phrase\" field below must contain the full and exact search for which you wish to provide recommended results, including any misspellings/user error. To help, you can choose from search terms that have been popular with users of your site.

    \n" +"

    The \"Search term(s)/phrase\" field below must contain " +"the full and exact search for which you wish to provide recommended results, " +"including any misspellings/user error. To help, you can choose from " +"search terms that have been popular with users of your site.

    \n" " " msgstr "" @@ -74,9 +85,10 @@ msgid "Delete" msgstr "Eliminar" #: templates/wagtailsearch/editorspicks/confirm_delete.html:9 -msgid "" -"Are you sure you want to delete all editors picks for this search term?" -msgstr "¿Seguro que quieres eliminar todas las selecciones del editor para este término de búsqueda?" +msgid "Are you sure you want to delete all editors picks for this search term?" +msgstr "" +"¿Seguro que quieres eliminar todas las selecciones del editor para este " +"término de búsqueda?" #: templates/wagtailsearch/editorspicks/confirm_delete.html:12 msgid "Yes, delete" @@ -130,20 +142,30 @@ msgid_plural "" "\n" " There are %(counter)s matches\n" " " -msgstr[0] "\n Hay una coincidencia\n " -msgstr[1] "\n Hay %(counter)s coincidencias\n " +msgstr[0] "" +"\n" +" Hay una coincidencia\n" +" " +msgstr[1] "" +"\n" +" Hay %(counter)s coincidencias\n" +" " #: templates/wagtailsearch/editorspicks/results.html:18 #, python-format msgid "Sorry, no editor's picks match \"%(query_string)s\"" -msgstr "Lo sentimos, no hay coincidencias en las selecciones del editor \"%(query_string)s\"" +msgstr "" +"Lo sentimos, no hay coincidencias en las selecciones del editor \"" +"%(query_string)s\"" #: templates/wagtailsearch/editorspicks/results.html:21 #, python-format msgid "" -"No editor's picks have been created. Why not add one?" -msgstr "Ninguna selección del editor ha sido creada. ¿Por qué no añadir una?" +"No editor's picks have been created. Why not add one?" +msgstr "" +"Ninguna selección del editor ha sido creada. ¿Por qué no añadir una?" #: templates/wagtailsearch/editorspicks/includes/editorspicks_form.html:4 msgid "Move up" diff --git a/wagtail/wagtailsearch/locale/eu/LC_MESSAGES/django.po b/wagtail/wagtailsearch/locale/eu/LC_MESSAGES/django.po index 277720dcbc..1af888cf4d 100644 --- a/wagtail/wagtailsearch/locale/eu/LC_MESSAGES/django.po +++ b/wagtail/wagtailsearch/locale/eu/LC_MESSAGES/django.po @@ -1,20 +1,21 @@ # SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. -# +# # Translators: msgid "" msgstr "" "Project-Id-Version: Wagtail\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2014-08-01 16:39+0100\n" +"POT-Creation-Date: 2014-09-11 16:38+0100\n" "PO-Revision-Date: 2014-08-01 15:43+0000\n" "Last-Translator: Karl Hobley \n" -"Language-Team: Basque (http://www.transifex.com/projects/p/wagtail/language/eu/)\n" +"Language-Team: Basque (http://www.transifex.com/projects/p/wagtail/language/" +"eu/)\n" +"Language: eu\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"Language: eu\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" #: forms.py:9 @@ -32,7 +33,7 @@ msgstr "" msgid "Please specify at least one recommendation for this search term." msgstr "" -#: wagtail_hooks.py:23 templates/wagtailsearch/editorspicks/list.html:9 +#: wagtail_hooks.py:25 templates/wagtailsearch/editorspicks/list.html:9 msgid "Editors picks" msgstr "" @@ -44,14 +45,20 @@ msgstr "" #: templates/wagtailsearch/editorspicks/add.html:10 msgid "" "\n" -"

    Editors picks are a means of recommending specific pages that might not organically come high up in search results. E.g recommending your primary donation page to a user searching with a less common term like \"giving\".

    \n" +"

    Editors picks are a means of recommending specific pages " +"that might not organically come high up in search results. E.g recommending " +"your primary donation page to a user searching with a less common term like " +"\"giving\".

    \n" " " msgstr "" #: templates/wagtailsearch/editorspicks/add.html:13 msgid "" "\n" -"

    The \"Search term(s)/phrase\" field below must contain the full and exact search for which you wish to provide recommended results, including any misspellings/user error. To help, you can choose from search terms that have been popular with users of your site.

    \n" +"

    The \"Search term(s)/phrase\" field below must contain " +"the full and exact search for which you wish to provide recommended results, " +"including any misspellings/user error. To help, you can choose from " +"search terms that have been popular with users of your site.

    \n" " " msgstr "" @@ -72,8 +79,7 @@ msgid "Delete" msgstr "" #: templates/wagtailsearch/editorspicks/confirm_delete.html:9 -msgid "" -"Are you sure you want to delete all editors picks for this search term?" +msgid "Are you sure you want to delete all editors picks for this search term?" msgstr "" #: templates/wagtailsearch/editorspicks/confirm_delete.html:12 @@ -139,8 +145,8 @@ msgstr "" #: templates/wagtailsearch/editorspicks/results.html:21 #, python-format msgid "" -"No editor's picks have been created. Why not add one?" +"No editor's picks have been created. Why not add one?" msgstr "" #: templates/wagtailsearch/editorspicks/includes/editorspicks_form.html:4 diff --git a/wagtail/wagtailsearch/locale/fr/LC_MESSAGES/django.po b/wagtail/wagtailsearch/locale/fr/LC_MESSAGES/django.po index c787820daf..9b6d572331 100644 --- a/wagtail/wagtailsearch/locale/fr/LC_MESSAGES/django.po +++ b/wagtail/wagtailsearch/locale/fr/LC_MESSAGES/django.po @@ -1,21 +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. -# +# # Translators: # nahuel, 2014 msgid "" msgstr "" "Project-Id-Version: Wagtail\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2014-08-01 16:39+0100\n" +"POT-Creation-Date: 2014-09-11 16:38+0100\n" "PO-Revision-Date: 2014-08-01 15:43+0000\n" "Last-Translator: Karl Hobley \n" -"Language-Team: French (http://www.transifex.com/projects/p/wagtail/language/fr/)\n" +"Language-Team: French (http://www.transifex.com/projects/p/wagtail/language/" +"fr/)\n" +"Language: fr\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"Language: fr\n" "Plural-Forms: nplurals=2; plural=(n > 1);\n" #: forms.py:9 @@ -33,7 +34,7 @@ msgstr "" msgid "Please specify at least one recommendation for this search term." msgstr "" -#: wagtail_hooks.py:23 templates/wagtailsearch/editorspicks/list.html:9 +#: wagtail_hooks.py:25 templates/wagtailsearch/editorspicks/list.html:9 msgid "Editors picks" msgstr "" @@ -45,14 +46,20 @@ msgstr "" #: templates/wagtailsearch/editorspicks/add.html:10 msgid "" "\n" -"

    Editors picks are a means of recommending specific pages that might not organically come high up in search results. E.g recommending your primary donation page to a user searching with a less common term like \"giving\".

    \n" +"

    Editors picks are a means of recommending specific pages " +"that might not organically come high up in search results. E.g recommending " +"your primary donation page to a user searching with a less common term like " +"\"giving\".

    \n" " " msgstr "" #: templates/wagtailsearch/editorspicks/add.html:13 msgid "" "\n" -"

    The \"Search term(s)/phrase\" field below must contain the full and exact search for which you wish to provide recommended results, including any misspellings/user error. To help, you can choose from search terms that have been popular with users of your site.

    \n" +"

    The \"Search term(s)/phrase\" field below must contain " +"the full and exact search for which you wish to provide recommended results, " +"including any misspellings/user error. To help, you can choose from " +"search terms that have been popular with users of your site.

    \n" " " msgstr "" @@ -73,8 +80,7 @@ msgid "Delete" msgstr "Supprimer" #: templates/wagtailsearch/editorspicks/confirm_delete.html:9 -msgid "" -"Are you sure you want to delete all editors picks for this search term?" +msgid "Are you sure you want to delete all editors picks for this search term?" msgstr "" #: templates/wagtailsearch/editorspicks/confirm_delete.html:12 @@ -135,13 +141,15 @@ msgstr[1] "" #: templates/wagtailsearch/editorspicks/results.html:18 #, python-format msgid "Sorry, no editor's picks match \"%(query_string)s\"" -msgstr "Désolé, aucun choix de rédacteur ne correspond avec \"%(query_string)s\"" +msgstr "" +"Désolé, aucun choix de rédacteur ne correspond avec \"%(query_string)s\"" #: templates/wagtailsearch/editorspicks/results.html:21 #, python-format msgid "" -"No editor's picks have been created. Why not add one?" +"No editor's picks have been created. Why not add one?" msgstr "" #: templates/wagtailsearch/editorspicks/includes/editorspicks_form.html:4 diff --git a/wagtail/wagtailsearch/locale/gl/LC_MESSAGES/django.po b/wagtail/wagtailsearch/locale/gl/LC_MESSAGES/django.po index bd63b29baa..63788a2862 100644 --- a/wagtail/wagtailsearch/locale/gl/LC_MESSAGES/django.po +++ b/wagtail/wagtailsearch/locale/gl/LC_MESSAGES/django.po @@ -1,7 +1,7 @@ # SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. -# +# # Translators: # fooflare , 2014 # fooflare , 2014 @@ -9,14 +9,15 @@ msgid "" msgstr "" "Project-Id-Version: Wagtail\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2014-08-01 16:39+0100\n" +"POT-Creation-Date: 2014-09-11 16:38+0100\n" "PO-Revision-Date: 2014-08-01 15:43+0000\n" "Last-Translator: Karl Hobley \n" -"Language-Team: Galician (http://www.transifex.com/projects/p/wagtail/language/gl/)\n" +"Language-Team: Galician (http://www.transifex.com/projects/p/wagtail/" +"language/gl/)\n" +"Language: gl\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"Language: gl\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" #: forms.py:9 @@ -28,13 +29,17 @@ msgid "" "Enter the full search string to match. An \n" " exact match is required for your Editors Picks to be \n" " displayed, wildcards are NOT allowed." -msgstr "Introduce a cadea completa de busca a atopar. É \n necesaria unha coincidencia exacta para que as túas Seleccións do Editor sexan \n mostradas, os comodines NON están permitidos." +msgstr "" +"Introduce a cadea completa de busca a atopar. É \n" +" necesaria unha coincidencia exacta para que as túas Seleccións do " +"Editor sexan \n" +" mostradas, os comodines NON están permitidos." #: forms.py:36 msgid "Please specify at least one recommendation for this search term." msgstr "" -#: wagtail_hooks.py:23 templates/wagtailsearch/editorspicks/list.html:9 +#: wagtail_hooks.py:25 templates/wagtailsearch/editorspicks/list.html:9 msgid "Editors picks" msgstr "Seleccións do editor" @@ -46,14 +51,20 @@ msgstr "Engadir selección do editor" #: templates/wagtailsearch/editorspicks/add.html:10 msgid "" "\n" -"

    Editors picks are a means of recommending specific pages that might not organically come high up in search results. E.g recommending your primary donation page to a user searching with a less common term like \"giving\".

    \n" +"

    Editors picks are a means of recommending specific pages " +"that might not organically come high up in search results. E.g recommending " +"your primary donation page to a user searching with a less common term like " +"\"giving\".

    \n" " " msgstr "" #: templates/wagtailsearch/editorspicks/add.html:13 msgid "" "\n" -"

    The \"Search term(s)/phrase\" field below must contain the full and exact search for which you wish to provide recommended results, including any misspellings/user error. To help, you can choose from search terms that have been popular with users of your site.

    \n" +"

    The \"Search term(s)/phrase\" field below must contain " +"the full and exact search for which you wish to provide recommended results, " +"including any misspellings/user error. To help, you can choose from " +"search terms that have been popular with users of your site.

    \n" " " msgstr "" @@ -74,9 +85,10 @@ msgid "Delete" msgstr "Eliminar" #: templates/wagtailsearch/editorspicks/confirm_delete.html:9 -msgid "" -"Are you sure you want to delete all editors picks for this search term?" -msgstr "¿Seguro que queres eliminar todas as seleccións do editor para este termo de busca?" +msgid "Are you sure you want to delete all editors picks for this search term?" +msgstr "" +"¿Seguro que queres eliminar todas as seleccións do editor para este termo de " +"busca?" #: templates/wagtailsearch/editorspicks/confirm_delete.html:12 msgid "Yes, delete" @@ -130,20 +142,29 @@ msgid_plural "" "\n" " There are %(counter)s matches\n" " " -msgstr[0] "\n Hai unha coincidencia\n " -msgstr[1] "\n Hai %(counter)s coincidencias\n " +msgstr[0] "" +"\n" +" Hai unha coincidencia\n" +" " +msgstr[1] "" +"\n" +" Hai %(counter)s coincidencias\n" +" " #: templates/wagtailsearch/editorspicks/results.html:18 #, python-format msgid "Sorry, no editor's picks match \"%(query_string)s\"" -msgstr "Sentímolo, ningunha selección do editor contén \"%(query_string)s\"" +msgstr "" +"Sentímolo, ningunha selección do editor contén \"%(query_string)s\"" #: templates/wagtailsearch/editorspicks/results.html:21 #, python-format msgid "" -"No editor's picks have been created. Why not add one?" -msgstr "Ningunha selección do editor foi creada. ¿Por qué non engadir unha?" +"No editor's picks have been created. Why not add one?" +msgstr "" +"Ningunha selección do editor foi creada. ¿Por qué non engadir unha?" #: templates/wagtailsearch/editorspicks/includes/editorspicks_form.html:4 msgid "Move up" diff --git a/wagtail/wagtailsearch/locale/mn/LC_MESSAGES/django.po b/wagtail/wagtailsearch/locale/mn/LC_MESSAGES/django.po index a0544cbc28..e220435eb5 100644 --- a/wagtail/wagtailsearch/locale/mn/LC_MESSAGES/django.po +++ b/wagtail/wagtailsearch/locale/mn/LC_MESSAGES/django.po @@ -1,21 +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. -# +# # Translators: # Delgermurun Purevkhuuu , 2014 msgid "" msgstr "" "Project-Id-Version: Wagtail\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2014-08-01 16:39+0100\n" +"POT-Creation-Date: 2014-09-11 16:38+0100\n" "PO-Revision-Date: 2014-08-01 15:43+0000\n" "Last-Translator: Karl Hobley \n" -"Language-Team: Mongolian (http://www.transifex.com/projects/p/wagtail/language/mn/)\n" +"Language-Team: Mongolian (http://www.transifex.com/projects/p/wagtail/" +"language/mn/)\n" +"Language: mn\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"Language: mn\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" #: forms.py:9 @@ -33,7 +34,7 @@ msgstr "" msgid "Please specify at least one recommendation for this search term." msgstr "" -#: wagtail_hooks.py:23 templates/wagtailsearch/editorspicks/list.html:9 +#: wagtail_hooks.py:25 templates/wagtailsearch/editorspicks/list.html:9 msgid "Editors picks" msgstr "" @@ -45,14 +46,20 @@ msgstr "" #: templates/wagtailsearch/editorspicks/add.html:10 msgid "" "\n" -"

    Editors picks are a means of recommending specific pages that might not organically come high up in search results. E.g recommending your primary donation page to a user searching with a less common term like \"giving\".

    \n" +"

    Editors picks are a means of recommending specific pages " +"that might not organically come high up in search results. E.g recommending " +"your primary donation page to a user searching with a less common term like " +"\"giving\".

    \n" " " msgstr "" #: templates/wagtailsearch/editorspicks/add.html:13 msgid "" "\n" -"

    The \"Search term(s)/phrase\" field below must contain the full and exact search for which you wish to provide recommended results, including any misspellings/user error. To help, you can choose from search terms that have been popular with users of your site.

    \n" +"

    The \"Search term(s)/phrase\" field below must contain " +"the full and exact search for which you wish to provide recommended results, " +"including any misspellings/user error. To help, you can choose from " +"search terms that have been popular with users of your site.

    \n" " " msgstr "" @@ -73,8 +80,7 @@ msgid "Delete" msgstr "Устгах" #: templates/wagtailsearch/editorspicks/confirm_delete.html:9 -msgid "" -"Are you sure you want to delete all editors picks for this search term?" +msgid "Are you sure you want to delete all editors picks for this search term?" msgstr "" #: templates/wagtailsearch/editorspicks/confirm_delete.html:12 @@ -140,8 +146,8 @@ msgstr "" #: templates/wagtailsearch/editorspicks/results.html:21 #, python-format msgid "" -"No editor's picks have been created. Why not add one?" +"No editor's picks have been created. Why not add one?" msgstr "" #: templates/wagtailsearch/editorspicks/includes/editorspicks_form.html:4 diff --git a/wagtail/wagtailsearch/locale/pl/LC_MESSAGES/django.po b/wagtail/wagtailsearch/locale/pl/LC_MESSAGES/django.po index 430cfba84c..969fd0c9b7 100644 --- a/wagtail/wagtailsearch/locale/pl/LC_MESSAGES/django.po +++ b/wagtail/wagtailsearch/locale/pl/LC_MESSAGES/django.po @@ -1,22 +1,24 @@ # SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. -# +# # Translators: # utek , 2014 msgid "" msgstr "" "Project-Id-Version: Wagtail\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2014-08-01 16:39+0100\n" +"POT-Creation-Date: 2014-09-11 16:38+0100\n" "PO-Revision-Date: 2014-08-01 15:43+0000\n" "Last-Translator: Karl Hobley \n" -"Language-Team: Polish (http://www.transifex.com/projects/p/wagtail/language/pl/)\n" +"Language-Team: Polish (http://www.transifex.com/projects/p/wagtail/language/" +"pl/)\n" +"Language: pl\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"Language: pl\n" -"Plural-Forms: nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" +"Plural-Forms: nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 " +"|| n%100>=20) ? 1 : 2);\n" #: forms.py:9 msgid "Search term(s)/phrase" @@ -27,13 +29,17 @@ msgid "" "Enter the full search string to match. An \n" " exact match is required for your Editors Picks to be \n" " displayed, wildcards are NOT allowed." -msgstr "Wprowadź pełną frazę wyszukania do porównania.\n Dokładne porównanie jest wymagane żeby twoje \n wybory redakcji były wyświetlone, symbol \n wieloznaczności jest niedozwolony." +msgstr "" +"Wprowadź pełną frazę wyszukania do porównania.\n" +" Dokładne porównanie jest wymagane żeby twoje \n" +" wybory redakcji były wyświetlone, symbol \n" +" wieloznaczności jest niedozwolony." #: forms.py:36 msgid "Please specify at least one recommendation for this search term." msgstr "" -#: wagtail_hooks.py:23 templates/wagtailsearch/editorspicks/list.html:9 +#: wagtail_hooks.py:25 templates/wagtailsearch/editorspicks/list.html:9 msgid "Editors picks" msgstr "Wybór redakcji" @@ -45,14 +51,20 @@ msgstr "Dodaj wybór redakcji" #: templates/wagtailsearch/editorspicks/add.html:10 msgid "" "\n" -"

    Editors picks are a means of recommending specific pages that might not organically come high up in search results. E.g recommending your primary donation page to a user searching with a less common term like \"giving\".

    \n" +"

    Editors picks are a means of recommending specific pages " +"that might not organically come high up in search results. E.g recommending " +"your primary donation page to a user searching with a less common term like " +"\"giving\".

    \n" " " msgstr "" #: templates/wagtailsearch/editorspicks/add.html:13 msgid "" "\n" -"

    The \"Search term(s)/phrase\" field below must contain the full and exact search for which you wish to provide recommended results, including any misspellings/user error. To help, you can choose from search terms that have been popular with users of your site.

    \n" +"

    The \"Search term(s)/phrase\" field below must contain " +"the full and exact search for which you wish to provide recommended results, " +"including any misspellings/user error. To help, you can choose from " +"search terms that have been popular with users of your site.

    \n" " " msgstr "" @@ -73,9 +85,10 @@ msgid "Delete" msgstr "Usuń" #: templates/wagtailsearch/editorspicks/confirm_delete.html:9 -msgid "" -"Are you sure you want to delete all editors picks for this search term?" -msgstr "Czy na pewno chcesz usunąć wszystkie wybory redakcji dla tych fraz wyszukiwania?" +msgid "Are you sure you want to delete all editors picks for this search term?" +msgstr "" +"Czy na pewno chcesz usunąć wszystkie wybory redakcji dla tych fraz " +"wyszukiwania?" #: templates/wagtailsearch/editorspicks/confirm_delete.html:12 msgid "Yes, delete" @@ -129,21 +142,34 @@ msgid_plural "" "\n" " There are %(counter)s matches\n" " " -msgstr[0] "\n Jedno dopasowanie\n " -msgstr[1] "\n Są %(counter)s dopasowania\n " -msgstr[2] "\n Jest %(counter)s dopasowań\n " +msgstr[0] "" +"\n" +" Jedno dopasowanie\n" +" " +msgstr[1] "" +"\n" +" Są %(counter)s dopasowania\n" +" " +msgstr[2] "" +"\n" +" Jest %(counter)s dopasowań\n" +" " #: templates/wagtailsearch/editorspicks/results.html:18 #, python-format msgid "Sorry, no editor's picks match \"%(query_string)s\"" -msgstr "Przepraszamy, żaden wybór redakcji nie pasuje do \"%(query_string)s\"" +msgstr "" +"Przepraszamy, żaden wybór redakcji nie pasuje do \"%(query_string)s" +"\"" #: templates/wagtailsearch/editorspicks/results.html:21 #, python-format msgid "" -"No editor's picks have been created. Why not add one?" -msgstr "Nie stworzono żadnego wyboru redakcji. Czemu nie dodać jakiegoś?" +"No editor's picks have been created. Why not add one?" +msgstr "" +"Nie stworzono żadnego wyboru redakcji. Czemu nie dodać jakiegoś?" #: templates/wagtailsearch/editorspicks/includes/editorspicks_form.html:4 msgid "Move up" diff --git a/wagtail/wagtailsearch/locale/pt_PT/LC_MESSAGES/django.po b/wagtail/wagtailsearch/locale/pt_PT/LC_MESSAGES/django.po index 705ad95849..3d859d0edc 100644 --- a/wagtail/wagtailsearch/locale/pt_PT/LC_MESSAGES/django.po +++ b/wagtail/wagtailsearch/locale/pt_PT/LC_MESSAGES/django.po @@ -9,16 +9,16 @@ msgid "" msgstr "" "Project-Id-Version: Wagtail 0.5.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2014-08-01 16:39+0100\n" +"POT-Creation-Date: 2014-09-11 16:38+0100\n" "PO-Revision-Date: 2014-08-03 01:58+0100\n" "Last-Translator: Jose Lourenco \n" "Language-Team: \n" +"Language: pt_PT\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.4\n" -"Language: pt_PT\n" #: forms.py:9 msgid "Search term(s)/phrase" @@ -40,7 +40,7 @@ msgid "Please specify at least one recommendation for this search term." msgstr "" "Por favor especifique pelo menos uma recomendação para este termo de procura." -#: wagtail_hooks.py:23 templates/wagtailsearch/editorspicks/list.html:9 +#: wagtail_hooks.py:25 templates/wagtailsearch/editorspicks/list.html:9 msgid "Editors picks" msgstr "Escolhas do editor" diff --git a/wagtail/wagtailsearch/locale/ro/LC_MESSAGES/django.po b/wagtail/wagtailsearch/locale/ro/LC_MESSAGES/django.po index 6301dd67be..761c2305c8 100644 --- a/wagtail/wagtailsearch/locale/ro/LC_MESSAGES/django.po +++ b/wagtail/wagtailsearch/locale/ro/LC_MESSAGES/django.po @@ -1,7 +1,7 @@ # SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. -# +# # Translators: # Dan Braghis, 2014 # Dan Braghis, 2014 @@ -9,15 +9,17 @@ msgid "" msgstr "" "Project-Id-Version: Wagtail\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2014-08-01 16:39+0100\n" +"POT-Creation-Date: 2014-09-11 16:38+0100\n" "PO-Revision-Date: 2014-08-01 15:43+0000\n" "Last-Translator: Karl Hobley \n" -"Language-Team: Romanian (http://www.transifex.com/projects/p/wagtail/language/ro/)\n" +"Language-Team: Romanian (http://www.transifex.com/projects/p/wagtail/" +"language/ro/)\n" +"Language: ro\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"Language: ro\n" -"Plural-Forms: nplurals=3; plural=(n==1?0:(((n%100>19)||((n%100==0)&&(n!=0)))?2:1));\n" +"Plural-Forms: nplurals=3; plural=(n==1?0:(((n%100>19)||((n%100==0)&&(n!=0)))?" +"2:1));\n" #: forms.py:9 msgid "Search term(s)/phrase" @@ -28,13 +30,16 @@ msgid "" "Enter the full search string to match. An \n" " exact match is required for your Editors Picks to be \n" " displayed, wildcards are NOT allowed." -msgstr "Introduceți șirul complet de căutare. \nEste nevoie de o potrivire exactă pentru a afișa selecțiile \ndvs. editoriale. Metacaractere NU sunt permise." +msgstr "" +"Introduceți șirul complet de căutare. \n" +"Este nevoie de o potrivire exactă pentru a afișa selecțiile \n" +"dvs. editoriale. Metacaractere NU sunt permise." #: forms.py:36 msgid "Please specify at least one recommendation for this search term." msgstr "" -#: wagtail_hooks.py:23 templates/wagtailsearch/editorspicks/list.html:9 +#: wagtail_hooks.py:25 templates/wagtailsearch/editorspicks/list.html:9 msgid "Editors picks" msgstr "Selecții editoriale" @@ -46,14 +51,20 @@ msgstr "Adaugă selecție editorială" #: templates/wagtailsearch/editorspicks/add.html:10 msgid "" "\n" -"

    Editors picks are a means of recommending specific pages that might not organically come high up in search results. E.g recommending your primary donation page to a user searching with a less common term like \"giving\".

    \n" +"

    Editors picks are a means of recommending specific pages " +"that might not organically come high up in search results. E.g recommending " +"your primary donation page to a user searching with a less common term like " +"\"giving\".

    \n" " " msgstr "" #: templates/wagtailsearch/editorspicks/add.html:13 msgid "" "\n" -"

    The \"Search term(s)/phrase\" field below must contain the full and exact search for which you wish to provide recommended results, including any misspellings/user error. To help, you can choose from search terms that have been popular with users of your site.

    \n" +"

    The \"Search term(s)/phrase\" field below must contain " +"the full and exact search for which you wish to provide recommended results, " +"including any misspellings/user error. To help, you can choose from " +"search terms that have been popular with users of your site.

    \n" " " msgstr "" @@ -74,9 +85,10 @@ msgid "Delete" msgstr "Șterge" #: templates/wagtailsearch/editorspicks/confirm_delete.html:9 -msgid "" -"Are you sure you want to delete all editors picks for this search term?" -msgstr "Sigur doriți să ștergeți toate selecțiile editoriale pentru acest termen de căutare?" +msgid "Are you sure you want to delete all editors picks for this search term?" +msgstr "" +"Sigur doriți să ștergeți toate selecțiile editoriale pentru acest termen de " +"căutare?" #: templates/wagtailsearch/editorspicks/confirm_delete.html:12 msgid "Yes, delete" @@ -130,21 +142,31 @@ msgid_plural "" "\n" " There are %(counter)s matches\n" " " -msgstr[0] "\nExistă o potrivire" -msgstr[1] "\nSunt %(counter)s potriviri" -msgstr[2] "\nSunt %(counter)s potriviri" +msgstr[0] "" +"\n" +"Există o potrivire" +msgstr[1] "" +"\n" +"Sunt %(counter)s potriviri" +msgstr[2] "" +"\n" +"Sunt %(counter)s potriviri" #: templates/wagtailsearch/editorspicks/results.html:18 #, python-format msgid "Sorry, no editor's picks match \"%(query_string)s\"" -msgstr "Ne pare rău, \"%(query_string)s\" nu se potrivește cu nici o selecție editorială" +msgstr "" +"Ne pare rău, \"%(query_string)s\" nu se potrivește cu nici o " +"selecție editorială" #: templates/wagtailsearch/editorspicks/results.html:21 #, python-format msgid "" -"No editor's picks have been created. Why not add one?" -msgstr "Nu a fost creată nici o selecție editorială. De ce să nu adăugați una?" +"No editor's picks have been created. Why not add one?" +msgstr "" +"Nu a fost creată nici o selecție editorială. De ce să nu adăugați una?" #: templates/wagtailsearch/editorspicks/includes/editorspicks_form.html:4 msgid "Move up" diff --git a/wagtail/wagtailsearch/locale/zh/LC_MESSAGES/django.po b/wagtail/wagtailsearch/locale/zh/LC_MESSAGES/django.po index 0d75613672..bf4a7cdba0 100644 --- a/wagtail/wagtailsearch/locale/zh/LC_MESSAGES/django.po +++ b/wagtail/wagtailsearch/locale/zh/LC_MESSAGES/django.po @@ -1,20 +1,21 @@ # SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. -# +# # Translators: msgid "" msgstr "" "Project-Id-Version: Wagtail\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2014-08-01 16:39+0100\n" +"POT-Creation-Date: 2014-09-11 16:38+0100\n" "PO-Revision-Date: 2014-08-01 15:43+0000\n" "Last-Translator: Karl Hobley \n" -"Language-Team: Chinese (http://www.transifex.com/projects/p/wagtail/language/zh/)\n" +"Language-Team: Chinese (http://www.transifex.com/projects/p/wagtail/language/" +"zh/)\n" +"Language: zh\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"Language: zh\n" "Plural-Forms: nplurals=1; plural=0;\n" #: forms.py:9 @@ -26,13 +27,16 @@ msgid "" "Enter the full search string to match. An \n" " exact match is required for your Editors Picks to be \n" " displayed, wildcards are NOT allowed." -msgstr "输入完整的字符来匹配. \n 必须输入完全一样的编辑精选进行匹配 \n 不允许匹配" +msgstr "" +"输入完整的字符来匹配. \n" +" 必须输入完全一样的编辑精选进行匹配 \n" +" 不允许匹配" #: forms.py:36 msgid "Please specify at least one recommendation for this search term." msgstr "" -#: wagtail_hooks.py:23 templates/wagtailsearch/editorspicks/list.html:9 +#: wagtail_hooks.py:25 templates/wagtailsearch/editorspicks/list.html:9 msgid "Editors picks" msgstr "编辑精选" @@ -44,14 +48,20 @@ msgstr "添加编辑精选" #: templates/wagtailsearch/editorspicks/add.html:10 msgid "" "\n" -"

    Editors picks are a means of recommending specific pages that might not organically come high up in search results. E.g recommending your primary donation page to a user searching with a less common term like \"giving\".

    \n" +"

    Editors picks are a means of recommending specific pages " +"that might not organically come high up in search results. E.g recommending " +"your primary donation page to a user searching with a less common term like " +"\"giving\".

    \n" " " msgstr "" #: templates/wagtailsearch/editorspicks/add.html:13 msgid "" "\n" -"

    The \"Search term(s)/phrase\" field below must contain the full and exact search for which you wish to provide recommended results, including any misspellings/user error. To help, you can choose from search terms that have been popular with users of your site.

    \n" +"

    The \"Search term(s)/phrase\" field below must contain " +"the full and exact search for which you wish to provide recommended results, " +"including any misspellings/user error. To help, you can choose from " +"search terms that have been popular with users of your site.

    \n" " " msgstr "" @@ -72,8 +82,7 @@ msgid "Delete" msgstr "删除" #: templates/wagtailsearch/editorspicks/confirm_delete.html:9 -msgid "" -"Are you sure you want to delete all editors picks for this search term?" +msgid "Are you sure you want to delete all editors picks for this search term?" msgstr "你确定你想要删除所有匹配这个关键词的编辑精选吗?" #: templates/wagtailsearch/editorspicks/confirm_delete.html:12 @@ -138,9 +147,11 @@ msgstr "" #: templates/wagtailsearch/editorspicks/results.html:21 #, python-format msgid "" -"No editor's picks have been created. Why not add one?" -msgstr "没有任何已保存的编辑精选. 为什么不 加入一个?" +"No editor's picks have been created. Why not add one?" +msgstr "" +"没有任何已保存的编辑精选. 为什么不 加入一个?" #: templates/wagtailsearch/editorspicks/includes/editorspicks_form.html:4 msgid "Move up" diff --git a/wagtail/wagtailsearch/locale/zh_TW/LC_MESSAGES/django.po b/wagtail/wagtailsearch/locale/zh_TW/LC_MESSAGES/django.po index 00bc8ec1af..1a39abe58a 100644 --- a/wagtail/wagtailsearch/locale/zh_TW/LC_MESSAGES/django.po +++ b/wagtail/wagtailsearch/locale/zh_TW/LC_MESSAGES/django.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: Wagtail\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2014-08-01 16:39+0100\n" +"POT-Creation-Date: 2014-09-11 16:38+0100\n" "PO-Revision-Date: 2014-03-14 21:12+0000\n" "Last-Translator: wdv4758h \n" "Language-Team: \n" @@ -35,7 +35,7 @@ msgstr "" msgid "Please specify at least one recommendation for this search term." msgstr "" -#: wagtail_hooks.py:23 templates/wagtailsearch/editorspicks/list.html:9 +#: wagtail_hooks.py:25 templates/wagtailsearch/editorspicks/list.html:9 msgid "Editors picks" msgstr "編者精選" diff --git a/wagtail/wagtailsnippets/locale/bg/LC_MESSAGES/django.po b/wagtail/wagtailsnippets/locale/bg/LC_MESSAGES/django.po index 0696859b9a..7063a4f03d 100644 --- a/wagtail/wagtailsnippets/locale/bg/LC_MESSAGES/django.po +++ b/wagtail/wagtailsnippets/locale/bg/LC_MESSAGES/django.po @@ -1,24 +1,25 @@ # SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. -# +# # Translators: # Lyuboslav Petrov , 2014 msgid "" msgstr "" "Project-Id-Version: Wagtail\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2014-08-01 16:39+0100\n" +"POT-Creation-Date: 2014-09-11 16:38+0100\n" "PO-Revision-Date: 2014-08-01 15:43+0000\n" "Last-Translator: Karl Hobley \n" -"Language-Team: Bulgarian (http://www.transifex.com/projects/p/wagtail/language/bg/)\n" +"Language-Team: Bulgarian (http://www.transifex.com/projects/p/wagtail/" +"language/bg/)\n" +"Language: bg\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"Language: bg\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: wagtail_hooks.py:25 templates/wagtailsnippets/snippets/index.html:3 +#: wagtail_hooks.py:27 templates/wagtailsnippets/snippets/index.html:3 msgid "Snippets" msgstr "Откъси от код" @@ -101,9 +102,11 @@ msgstr "Добави %(snippet_type_name)s" #: templates/wagtailsnippets/snippets/type_index.html:23 #, python-format msgid "" -"No %(snippet_type_name_plural)s have been created. Why not add one?" -msgstr "Няма създадени %(snippet_type_name_plural)s. Защо не добавите един сега?" +"No %(snippet_type_name_plural)s have been created. Why not add one?" +msgstr "" +"Няма създадени %(snippet_type_name_plural)s. Защо не добавите един сега?" #: templates/wagtailsnippets/snippets/usage.html:3 #, python-format diff --git a/wagtail/wagtailsnippets/locale/ca/LC_MESSAGES/django.po b/wagtail/wagtailsnippets/locale/ca/LC_MESSAGES/django.po index c9f7a423e4..9022d9f3d0 100644 --- a/wagtail/wagtailsnippets/locale/ca/LC_MESSAGES/django.po +++ b/wagtail/wagtailsnippets/locale/ca/LC_MESSAGES/django.po @@ -1,24 +1,25 @@ # SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. -# +# # Translators: # David Llop , 2014 msgid "" msgstr "" "Project-Id-Version: Wagtail\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2014-08-01 16:39+0100\n" +"POT-Creation-Date: 2014-09-11 16:38+0100\n" "PO-Revision-Date: 2014-08-01 15:43+0000\n" "Last-Translator: Karl Hobley \n" -"Language-Team: Catalan (http://www.transifex.com/projects/p/wagtail/language/ca/)\n" +"Language-Team: Catalan (http://www.transifex.com/projects/p/wagtail/language/" +"ca/)\n" +"Language: ca\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"Language: ca\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: wagtail_hooks.py:25 templates/wagtailsnippets/snippets/index.html:3 +#: wagtail_hooks.py:27 templates/wagtailsnippets/snippets/index.html:3 msgid "Snippets" msgstr "Fragments" @@ -101,9 +102,11 @@ msgstr "Afegeix %(snippet_type_name)s" #: templates/wagtailsnippets/snippets/type_index.html:23 #, python-format msgid "" -"No %(snippet_type_name_plural)s have been created. Why not add one?" -msgstr "No s'ha creat cap %(snippet_type_name_plural)s. Per què no afeixes un?" +"No %(snippet_type_name_plural)s have been created. Why not add one?" +msgstr "" +"No s'ha creat cap %(snippet_type_name_plural)s. Per què no afeixes un?" #: templates/wagtailsnippets/snippets/usage.html:3 #, python-format diff --git a/wagtail/wagtailsnippets/locale/de/LC_MESSAGES/django.po b/wagtail/wagtailsnippets/locale/de/LC_MESSAGES/django.po index f1b1aeb982..b93b539b51 100644 --- a/wagtail/wagtailsnippets/locale/de/LC_MESSAGES/django.po +++ b/wagtail/wagtailsnippets/locale/de/LC_MESSAGES/django.po @@ -1,7 +1,7 @@ # SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. -# +# # Translators: # Johannes Spielmann , 2014 # karlsander , 2014 @@ -9,17 +9,18 @@ msgid "" msgstr "" "Project-Id-Version: Wagtail\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2014-08-01 16:39+0100\n" +"POT-Creation-Date: 2014-09-11 16:38+0100\n" "PO-Revision-Date: 2014-08-01 15:43+0000\n" "Last-Translator: Karl Hobley \n" -"Language-Team: German (http://www.transifex.com/projects/p/wagtail/language/de/)\n" +"Language-Team: German (http://www.transifex.com/projects/p/wagtail/language/" +"de/)\n" +"Language: de\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"Language: de\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: wagtail_hooks.py:25 templates/wagtailsnippets/snippets/index.html:3 +#: wagtail_hooks.py:27 templates/wagtailsnippets/snippets/index.html:3 msgid "Snippets" msgstr "Snippets" @@ -102,9 +103,11 @@ msgstr "%(snippet_type_name)s hinzufügen" #: templates/wagtailsnippets/snippets/type_index.html:23 #, python-format msgid "" -"No %(snippet_type_name_plural)s have been created. Why not add one?" -msgstr "Sie haben noch keine %(snippet_type_name_plural)s erstellt. Erstellen Sie doch jetzt eins!" +"No %(snippet_type_name_plural)s have been created. Why not add one?" +msgstr "" +"Sie haben noch keine %(snippet_type_name_plural)s erstellt. Erstellen Sie doch jetzt eins!" #: templates/wagtailsnippets/snippets/usage.html:3 #, python-format diff --git a/wagtail/wagtailsnippets/locale/el/LC_MESSAGES/django.po b/wagtail/wagtailsnippets/locale/el/LC_MESSAGES/django.po index c688453360..5e051b938f 100644 --- a/wagtail/wagtailsnippets/locale/el/LC_MESSAGES/django.po +++ b/wagtail/wagtailsnippets/locale/el/LC_MESSAGES/django.po @@ -1,7 +1,7 @@ # SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. -# +# # Translators: # serafeim , 2014 # serafeim , 2014 @@ -9,17 +9,18 @@ msgid "" msgstr "" "Project-Id-Version: Wagtail\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2014-08-01 16:39+0100\n" +"POT-Creation-Date: 2014-09-11 16:38+0100\n" "PO-Revision-Date: 2014-08-01 15:43+0000\n" "Last-Translator: Karl Hobley \n" -"Language-Team: Greek (http://www.transifex.com/projects/p/wagtail/language/el/)\n" +"Language-Team: Greek (http://www.transifex.com/projects/p/wagtail/language/" +"el/)\n" +"Language: el\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"Language: el\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: wagtail_hooks.py:25 templates/wagtailsnippets/snippets/index.html:3 +#: wagtail_hooks.py:27 templates/wagtailsnippets/snippets/index.html:3 msgid "Snippets" msgstr "Snippets" @@ -102,9 +103,11 @@ msgstr "Προσθήκη %(snippet_type_name)s" #: templates/wagtailsnippets/snippets/type_index.html:23 #, python-format msgid "" -"No %(snippet_type_name_plural)s have been created. Why not add one?" -msgstr "Δεν υπάρχουν %(snippet_type_name_plural)s. Θέλετε να προσθέσετε μερικά;" +"No %(snippet_type_name_plural)s have been created. Why not add one?" +msgstr "" +"Δεν υπάρχουν %(snippet_type_name_plural)s. Θέλετε να προσθέσετε μερικά;" #: templates/wagtailsnippets/snippets/usage.html:3 #, python-format diff --git a/wagtail/wagtailsnippets/locale/en/LC_MESSAGES/django.po b/wagtail/wagtailsnippets/locale/en/LC_MESSAGES/django.po index cc93c28123..50d8fe3494 100644 --- a/wagtail/wagtailsnippets/locale/en/LC_MESSAGES/django.po +++ b/wagtail/wagtailsnippets/locale/en/LC_MESSAGES/django.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2014-08-01 16:39+0100\n" +"POT-Creation-Date: 2014-09-11 16:38+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -17,7 +17,7 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -#: wagtail_hooks.py:25 templates/wagtailsnippets/snippets/index.html:3 +#: wagtail_hooks.py:27 templates/wagtailsnippets/snippets/index.html:3 msgid "Snippets" msgstr "" diff --git a/wagtail/wagtailsnippets/locale/es/LC_MESSAGES/django.po b/wagtail/wagtailsnippets/locale/es/LC_MESSAGES/django.po index baf1997b92..06bff3e3c5 100644 --- a/wagtail/wagtailsnippets/locale/es/LC_MESSAGES/django.po +++ b/wagtail/wagtailsnippets/locale/es/LC_MESSAGES/django.po @@ -1,7 +1,7 @@ # SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. -# +# # Translators: # fooflare , 2014 # fooflare , 2014 @@ -9,17 +9,18 @@ msgid "" msgstr "" "Project-Id-Version: Wagtail\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2014-08-01 16:39+0100\n" +"POT-Creation-Date: 2014-09-11 16:38+0100\n" "PO-Revision-Date: 2014-08-01 15:43+0000\n" "Last-Translator: Karl Hobley \n" -"Language-Team: Spanish (http://www.transifex.com/projects/p/wagtail/language/es/)\n" +"Language-Team: Spanish (http://www.transifex.com/projects/p/wagtail/language/" +"es/)\n" +"Language: es\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"Language: es\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: wagtail_hooks.py:25 templates/wagtailsnippets/snippets/index.html:3 +#: wagtail_hooks.py:27 templates/wagtailsnippets/snippets/index.html:3 msgid "Snippets" msgstr "Fragmentos" @@ -102,9 +103,11 @@ msgstr "Añadir %(snippet_type_name)s" #: templates/wagtailsnippets/snippets/type_index.html:23 #, python-format msgid "" -"No %(snippet_type_name_plural)s have been created. Why not add one?" -msgstr "Ningún %(snippet_type_name_plural)s ha sido creado. ¿Por qué no añadir uno?" +"No %(snippet_type_name_plural)s have been created. Why not add one?" +msgstr "" +"Ningún %(snippet_type_name_plural)s ha sido creado. ¿Por qué no añadir uno?" #: templates/wagtailsnippets/snippets/usage.html:3 #, python-format diff --git a/wagtail/wagtailsnippets/locale/eu/LC_MESSAGES/django.po b/wagtail/wagtailsnippets/locale/eu/LC_MESSAGES/django.po index edade1ac36..6a6f0b8713 100644 --- a/wagtail/wagtailsnippets/locale/eu/LC_MESSAGES/django.po +++ b/wagtail/wagtailsnippets/locale/eu/LC_MESSAGES/django.po @@ -1,23 +1,24 @@ # SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. -# +# # Translators: msgid "" msgstr "" "Project-Id-Version: Wagtail\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2014-08-01 16:39+0100\n" +"POT-Creation-Date: 2014-09-11 16:38+0100\n" "PO-Revision-Date: 2014-08-01 15:43+0000\n" "Last-Translator: Karl Hobley \n" -"Language-Team: Basque (http://www.transifex.com/projects/p/wagtail/language/eu/)\n" +"Language-Team: Basque (http://www.transifex.com/projects/p/wagtail/language/" +"eu/)\n" +"Language: eu\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"Language: eu\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: wagtail_hooks.py:25 templates/wagtailsnippets/snippets/index.html:3 +#: wagtail_hooks.py:27 templates/wagtailsnippets/snippets/index.html:3 msgid "Snippets" msgstr "" @@ -100,8 +101,8 @@ msgstr "" #: templates/wagtailsnippets/snippets/type_index.html:23 #, python-format msgid "" -"No %(snippet_type_name_plural)s have been created. Why not add one?" +"No %(snippet_type_name_plural)s have been created. Why not add one?" msgstr "" #: templates/wagtailsnippets/snippets/usage.html:3 diff --git a/wagtail/wagtailsnippets/locale/fr/LC_MESSAGES/django.po b/wagtail/wagtailsnippets/locale/fr/LC_MESSAGES/django.po index 33517b893b..9f6893ace9 100644 --- a/wagtail/wagtailsnippets/locale/fr/LC_MESSAGES/django.po +++ b/wagtail/wagtailsnippets/locale/fr/LC_MESSAGES/django.po @@ -1,24 +1,25 @@ # SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. -# +# # Translators: # nahuel, 2014 msgid "" msgstr "" "Project-Id-Version: Wagtail\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2014-08-01 16:39+0100\n" +"POT-Creation-Date: 2014-09-11 16:38+0100\n" "PO-Revision-Date: 2014-08-01 15:43+0000\n" "Last-Translator: Karl Hobley \n" -"Language-Team: French (http://www.transifex.com/projects/p/wagtail/language/fr/)\n" +"Language-Team: French (http://www.transifex.com/projects/p/wagtail/language/" +"fr/)\n" +"Language: fr\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"Language: fr\n" "Plural-Forms: nplurals=2; plural=(n > 1);\n" -#: wagtail_hooks.py:25 templates/wagtailsnippets/snippets/index.html:3 +#: wagtail_hooks.py:27 templates/wagtailsnippets/snippets/index.html:3 msgid "Snippets" msgstr "" @@ -101,9 +102,11 @@ msgstr "" #: templates/wagtailsnippets/snippets/type_index.html:23 #, python-format msgid "" -"No %(snippet_type_name_plural)s have been created. Why not add one?" -msgstr "Aucun %(snippet_type_name_plural)s n'a été créé. Pourquoi ne pas en ajouter un?" +"No %(snippet_type_name_plural)s have been created. Why not add one?" +msgstr "" +"Aucun %(snippet_type_name_plural)s n'a été créé. Pourquoi ne pas en ajouter un?" #: templates/wagtailsnippets/snippets/usage.html:3 #, python-format diff --git a/wagtail/wagtailsnippets/locale/gl/LC_MESSAGES/django.po b/wagtail/wagtailsnippets/locale/gl/LC_MESSAGES/django.po index c3cdd7047a..1212631845 100644 --- a/wagtail/wagtailsnippets/locale/gl/LC_MESSAGES/django.po +++ b/wagtail/wagtailsnippets/locale/gl/LC_MESSAGES/django.po @@ -1,24 +1,25 @@ # SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. -# +# # Translators: # fooflare , 2014 msgid "" msgstr "" "Project-Id-Version: Wagtail\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2014-08-01 16:39+0100\n" +"POT-Creation-Date: 2014-09-11 16:38+0100\n" "PO-Revision-Date: 2014-08-01 15:43+0000\n" "Last-Translator: Karl Hobley \n" -"Language-Team: Galician (http://www.transifex.com/projects/p/wagtail/language/gl/)\n" +"Language-Team: Galician (http://www.transifex.com/projects/p/wagtail/" +"language/gl/)\n" +"Language: gl\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"Language: gl\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: wagtail_hooks.py:25 templates/wagtailsnippets/snippets/index.html:3 +#: wagtail_hooks.py:27 templates/wagtailsnippets/snippets/index.html:3 msgid "Snippets" msgstr "Fragmentos" @@ -101,9 +102,11 @@ msgstr "Engadir %(snippet_type_name)s" #: templates/wagtailsnippets/snippets/type_index.html:23 #, python-format msgid "" -"No %(snippet_type_name_plural)s have been created. Why not add one?" -msgstr "Ningún %(snippet_type_name_plural)s foi creado. ¿Por qué non engadir un?" +"No %(snippet_type_name_plural)s have been created. Why not add one?" +msgstr "" +"Ningún %(snippet_type_name_plural)s foi creado. ¿Por qué non engadir un?" #: templates/wagtailsnippets/snippets/usage.html:3 #, python-format diff --git a/wagtail/wagtailsnippets/locale/mn/LC_MESSAGES/django.po b/wagtail/wagtailsnippets/locale/mn/LC_MESSAGES/django.po index 28f2e61c20..b61edf4fc7 100644 --- a/wagtail/wagtailsnippets/locale/mn/LC_MESSAGES/django.po +++ b/wagtail/wagtailsnippets/locale/mn/LC_MESSAGES/django.po @@ -1,23 +1,24 @@ # SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. -# +# # Translators: msgid "" msgstr "" "Project-Id-Version: Wagtail\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2014-08-01 16:39+0100\n" +"POT-Creation-Date: 2014-09-11 16:38+0100\n" "PO-Revision-Date: 2014-08-01 15:43+0000\n" "Last-Translator: Karl Hobley \n" -"Language-Team: Mongolian (http://www.transifex.com/projects/p/wagtail/language/mn/)\n" +"Language-Team: Mongolian (http://www.transifex.com/projects/p/wagtail/" +"language/mn/)\n" +"Language: mn\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"Language: mn\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: wagtail_hooks.py:25 templates/wagtailsnippets/snippets/index.html:3 +#: wagtail_hooks.py:27 templates/wagtailsnippets/snippets/index.html:3 msgid "Snippets" msgstr "" @@ -100,8 +101,8 @@ msgstr "" #: templates/wagtailsnippets/snippets/type_index.html:23 #, python-format msgid "" -"No %(snippet_type_name_plural)s have been created. Why not add one?" +"No %(snippet_type_name_plural)s have been created. Why not add one?" msgstr "" #: templates/wagtailsnippets/snippets/usage.html:3 diff --git a/wagtail/wagtailsnippets/locale/pl/LC_MESSAGES/django.po b/wagtail/wagtailsnippets/locale/pl/LC_MESSAGES/django.po index 8958e7e1ef..7b5316492c 100644 --- a/wagtail/wagtailsnippets/locale/pl/LC_MESSAGES/django.po +++ b/wagtail/wagtailsnippets/locale/pl/LC_MESSAGES/django.po @@ -1,23 +1,25 @@ # SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. -# +# # Translators: msgid "" msgstr "" "Project-Id-Version: Wagtail\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2014-08-01 16:39+0100\n" +"POT-Creation-Date: 2014-09-11 16:38+0100\n" "PO-Revision-Date: 2014-08-01 15:43+0000\n" "Last-Translator: Karl Hobley \n" -"Language-Team: Polish (http://www.transifex.com/projects/p/wagtail/language/pl/)\n" +"Language-Team: Polish (http://www.transifex.com/projects/p/wagtail/language/" +"pl/)\n" +"Language: pl\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"Language: pl\n" -"Plural-Forms: nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" +"Plural-Forms: nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 " +"|| n%100>=20) ? 1 : 2);\n" -#: wagtail_hooks.py:25 templates/wagtailsnippets/snippets/index.html:3 +#: wagtail_hooks.py:27 templates/wagtailsnippets/snippets/index.html:3 msgid "Snippets" msgstr "Snippety" @@ -100,9 +102,11 @@ msgstr "Dodaj %(snippet_type_name)s" #: templates/wagtailsnippets/snippets/type_index.html:23 #, python-format msgid "" -"No %(snippet_type_name_plural)s have been created. Why not add one?" -msgstr "Żaden%(snippet_type_name_plural)s nie został stworzony. Czemu nie dodać jednego?" +"No %(snippet_type_name_plural)s have been created. Why not add one?" +msgstr "" +"Żaden%(snippet_type_name_plural)s nie został stworzony. Czemu nie dodać jednego?" #: templates/wagtailsnippets/snippets/usage.html:3 #, python-format diff --git a/wagtail/wagtailsnippets/locale/pt_PT/LC_MESSAGES/django.po b/wagtail/wagtailsnippets/locale/pt_PT/LC_MESSAGES/django.po index 5c3b0b7076..126c038186 100644 --- a/wagtail/wagtailsnippets/locale/pt_PT/LC_MESSAGES/django.po +++ b/wagtail/wagtailsnippets/locale/pt_PT/LC_MESSAGES/django.po @@ -7,18 +7,18 @@ msgid "" msgstr "" "Project-Id-Version: Wagtail 0.5.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2014-08-01 16:39+0100\n" +"POT-Creation-Date: 2014-09-11 16:38+0100\n" "PO-Revision-Date: 2014-08-03 01:58+0100\n" "Last-Translator: Jose Lourenco \n" "Language-Team: \n" +"Language: pt_PT\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.4\n" -"Language: pt_PT\n" -#: wagtail_hooks.py:25 templates/wagtailsnippets/snippets/index.html:3 +#: wagtail_hooks.py:27 templates/wagtailsnippets/snippets/index.html:3 msgid "Snippets" msgstr "Snippets" diff --git a/wagtail/wagtailsnippets/locale/ro/LC_MESSAGES/django.po b/wagtail/wagtailsnippets/locale/ro/LC_MESSAGES/django.po index b80fe4bd41..a59581df7d 100644 --- a/wagtail/wagtailsnippets/locale/ro/LC_MESSAGES/django.po +++ b/wagtail/wagtailsnippets/locale/ro/LC_MESSAGES/django.po @@ -1,7 +1,7 @@ # SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. -# +# # Translators: # Dan Braghis, 2014 # Dan Braghis, 2014 @@ -9,17 +9,19 @@ msgid "" msgstr "" "Project-Id-Version: Wagtail\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2014-08-01 16:39+0100\n" +"POT-Creation-Date: 2014-09-11 16:38+0100\n" "PO-Revision-Date: 2014-08-01 15:43+0000\n" "Last-Translator: Karl Hobley \n" -"Language-Team: Romanian (http://www.transifex.com/projects/p/wagtail/language/ro/)\n" +"Language-Team: Romanian (http://www.transifex.com/projects/p/wagtail/" +"language/ro/)\n" +"Language: ro\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"Language: ro\n" -"Plural-Forms: nplurals=3; plural=(n==1?0:(((n%100>19)||((n%100==0)&&(n!=0)))?2:1));\n" +"Plural-Forms: nplurals=3; plural=(n==1?0:(((n%100>19)||((n%100==0)&&(n!=0)))?" +"2:1));\n" -#: wagtail_hooks.py:25 templates/wagtailsnippets/snippets/index.html:3 +#: wagtail_hooks.py:27 templates/wagtailsnippets/snippets/index.html:3 msgid "Snippets" msgstr "Fragmente" @@ -102,9 +104,11 @@ msgstr "Adaugă %(snippet_type_name)s" #: templates/wagtailsnippets/snippets/type_index.html:23 #, python-format msgid "" -"No %(snippet_type_name_plural)s have been created. Why not add one?" -msgstr "Nu au fost create %(snippet_type_name_plural)s. De să nu adăugați unul?" +"No %(snippet_type_name_plural)s have been created. Why not add one?" +msgstr "" +"Nu au fost create %(snippet_type_name_plural)s. De să nu adăugați unul?" #: templates/wagtailsnippets/snippets/usage.html:3 #, python-format diff --git a/wagtail/wagtailsnippets/locale/zh/LC_MESSAGES/django.po b/wagtail/wagtailsnippets/locale/zh/LC_MESSAGES/django.po index 790a8a54b7..2f47fd0047 100644 --- a/wagtail/wagtailsnippets/locale/zh/LC_MESSAGES/django.po +++ b/wagtail/wagtailsnippets/locale/zh/LC_MESSAGES/django.po @@ -1,23 +1,24 @@ # SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. -# +# # Translators: msgid "" msgstr "" "Project-Id-Version: Wagtail\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2014-08-01 16:39+0100\n" +"POT-Creation-Date: 2014-09-11 16:38+0100\n" "PO-Revision-Date: 2014-08-01 15:43+0000\n" "Last-Translator: Karl Hobley \n" -"Language-Team: Chinese (http://www.transifex.com/projects/p/wagtail/language/zh/)\n" +"Language-Team: Chinese (http://www.transifex.com/projects/p/wagtail/language/" +"zh/)\n" +"Language: zh\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"Language: zh\n" "Plural-Forms: nplurals=1; plural=0;\n" -#: wagtail_hooks.py:25 templates/wagtailsnippets/snippets/index.html:3 +#: wagtail_hooks.py:27 templates/wagtailsnippets/snippets/index.html:3 msgid "Snippets" msgstr "片段" @@ -100,9 +101,11 @@ msgstr "添加%(snippet_type_name)s" #: templates/wagtailsnippets/snippets/type_index.html:23 #, python-format msgid "" -"No %(snippet_type_name_plural)s have been created. Why not add one?" -msgstr "没有任何%(snippet_type_name_plural)s片段。为什么不创建一个?" +"No %(snippet_type_name_plural)s have been created. Why not add one?" +msgstr "" +"没有任何%(snippet_type_name_plural)s片段。为什么不创建一个?" #: templates/wagtailsnippets/snippets/usage.html:3 #, python-format diff --git a/wagtail/wagtailsnippets/locale/zh_TW/LC_MESSAGES/django.po b/wagtail/wagtailsnippets/locale/zh_TW/LC_MESSAGES/django.po index 2dd9d1c959..620d245065 100644 --- a/wagtail/wagtailsnippets/locale/zh_TW/LC_MESSAGES/django.po +++ b/wagtail/wagtailsnippets/locale/zh_TW/LC_MESSAGES/django.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: Wagtail\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2014-08-01 16:39+0100\n" +"POT-Creation-Date: 2014-09-11 16:38+0100\n" "PO-Revision-Date: 2014-02-28 16:07+0000\n" "Last-Translator: wdv4758h \n" "Language-Team: \n" @@ -17,7 +17,7 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=1; plural=0;\n" -#: wagtail_hooks.py:25 templates/wagtailsnippets/snippets/index.html:3 +#: wagtail_hooks.py:27 templates/wagtailsnippets/snippets/index.html:3 msgid "Snippets" msgstr "片段" diff --git a/wagtail/wagtailusers/locale/bg/LC_MESSAGES/django.po b/wagtail/wagtailusers/locale/bg/LC_MESSAGES/django.po index 0a3be5d926..f74d891bfa 100644 --- a/wagtail/wagtailusers/locale/bg/LC_MESSAGES/django.po +++ b/wagtail/wagtailusers/locale/bg/LC_MESSAGES/django.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: Wagtail\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2014-08-01 16:39+0100\n" +"POT-Creation-Date: 2014-09-11 16:38+0100\n" "PO-Revision-Date: 2014-03-14 21:12+0000\n" "Last-Translator: serafeim \n" "Language-Team: Bulgarian (http://www.transifex.com/projects/p/wagtail/" @@ -95,7 +95,7 @@ msgstr "" msgid "Receive notification when your page edit is rejected" msgstr "" -#: wagtail_hooks.py:22 templates/wagtailusers/index.html:4 +#: wagtail_hooks.py:24 templates/wagtailusers/index.html:4 #: templates/wagtailusers/index.html:17 msgid "Users" msgstr "Потребители" diff --git a/wagtail/wagtailusers/locale/ca/LC_MESSAGES/django.po b/wagtail/wagtailusers/locale/ca/LC_MESSAGES/django.po index 718365e70e..9127776839 100644 --- a/wagtail/wagtailusers/locale/ca/LC_MESSAGES/django.po +++ b/wagtail/wagtailusers/locale/ca/LC_MESSAGES/django.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: Wagtail\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2014-08-01 16:39+0100\n" +"POT-Creation-Date: 2014-09-11 16:38+0100\n" "PO-Revision-Date: 2014-03-14 21:56+0000\n" "Last-Translator: Lloople \n" "Language-Team: Catalan (http://www.transifex.com/projects/p/wagtail/language/" @@ -92,7 +92,7 @@ msgstr "" msgid "Receive notification when your page edit is rejected" msgstr "" -#: wagtail_hooks.py:22 templates/wagtailusers/index.html:4 +#: wagtail_hooks.py:24 templates/wagtailusers/index.html:4 #: templates/wagtailusers/index.html:17 msgid "Users" msgstr "Usuaris" diff --git a/wagtail/wagtailusers/locale/de/LC_MESSAGES/django.po b/wagtail/wagtailusers/locale/de/LC_MESSAGES/django.po index d216827fe9..66b88e1ca0 100644 --- a/wagtail/wagtailusers/locale/de/LC_MESSAGES/django.po +++ b/wagtail/wagtailusers/locale/de/LC_MESSAGES/django.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: Wagtail\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2014-08-01 16:39+0100\n" +"POT-Creation-Date: 2014-09-11 16:38+0100\n" "PO-Revision-Date: 2014-03-14 21:12+0000\n" "Last-Translator: serafeim \n" "Language-Team: German (http://www.transifex.com/projects/p/wagtail/language/" @@ -96,7 +96,7 @@ msgstr "" msgid "Receive notification when your page edit is rejected" msgstr "" -#: wagtail_hooks.py:22 templates/wagtailusers/index.html:4 +#: wagtail_hooks.py:24 templates/wagtailusers/index.html:4 #: templates/wagtailusers/index.html:17 msgid "Users" msgstr "Benutzer" diff --git a/wagtail/wagtailusers/locale/el/LC_MESSAGES/django.po b/wagtail/wagtailusers/locale/el/LC_MESSAGES/django.po index 0a8400b9cf..195af70019 100644 --- a/wagtail/wagtailusers/locale/el/LC_MESSAGES/django.po +++ b/wagtail/wagtailusers/locale/el/LC_MESSAGES/django.po @@ -9,7 +9,7 @@ msgid "" msgstr "" "Project-Id-Version: Wagtail\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2014-08-01 16:39+0100\n" +"POT-Creation-Date: 2014-09-11 16:38+0100\n" "PO-Revision-Date: 2014-03-14 21:15+0000\n" "Last-Translator: serafeim \n" "Language-Team: Greek (http://www.transifex.com/projects/p/wagtail/language/" @@ -99,7 +99,7 @@ msgstr "" msgid "Receive notification when your page edit is rejected" msgstr "" -#: wagtail_hooks.py:22 templates/wagtailusers/index.html:4 +#: wagtail_hooks.py:24 templates/wagtailusers/index.html:4 #: templates/wagtailusers/index.html:17 msgid "Users" msgstr "Χρήστες" diff --git a/wagtail/wagtailusers/locale/en/LC_MESSAGES/django.po b/wagtail/wagtailusers/locale/en/LC_MESSAGES/django.po index f2f7473d18..a67a65adde 100644 --- a/wagtail/wagtailusers/locale/en/LC_MESSAGES/django.po +++ b/wagtail/wagtailusers/locale/en/LC_MESSAGES/django.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2014-08-01 16:39+0100\n" +"POT-Creation-Date: 2014-09-11 16:38+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -89,7 +89,7 @@ msgstr "" msgid "Receive notification when your page edit is rejected" msgstr "" -#: wagtail_hooks.py:22 templates/wagtailusers/index.html:4 +#: wagtail_hooks.py:24 templates/wagtailusers/index.html:4 #: templates/wagtailusers/index.html:17 msgid "Users" msgstr "" diff --git a/wagtail/wagtailusers/locale/es/LC_MESSAGES/django.po b/wagtail/wagtailusers/locale/es/LC_MESSAGES/django.po index 7b9465fa20..7899edb6a0 100644 --- a/wagtail/wagtailusers/locale/es/LC_MESSAGES/django.po +++ b/wagtail/wagtailusers/locale/es/LC_MESSAGES/django.po @@ -9,7 +9,7 @@ msgid "" msgstr "" "Project-Id-Version: Wagtail\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2014-08-01 16:39+0100\n" +"POT-Creation-Date: 2014-09-11 16:38+0100\n" "PO-Revision-Date: 2014-03-23 10:19+0000\n" "Last-Translator: fooflare \n" "Language-Team: Spanish (http://www.transifex.com/projects/p/wagtail/language/" @@ -97,7 +97,7 @@ msgstr "" msgid "Receive notification when your page edit is rejected" msgstr "" -#: wagtail_hooks.py:22 templates/wagtailusers/index.html:4 +#: wagtail_hooks.py:24 templates/wagtailusers/index.html:4 #: templates/wagtailusers/index.html:17 msgid "Users" msgstr "Usuarios" diff --git a/wagtail/wagtailusers/locale/eu/LC_MESSAGES/django.po b/wagtail/wagtailusers/locale/eu/LC_MESSAGES/django.po index a318cd86d8..13f5b32803 100644 --- a/wagtail/wagtailusers/locale/eu/LC_MESSAGES/django.po +++ b/wagtail/wagtailusers/locale/eu/LC_MESSAGES/django.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: Wagtail\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2014-08-01 16:39+0100\n" +"POT-Creation-Date: 2014-09-11 16:38+0100\n" "PO-Revision-Date: 2014-03-14 21:12+0000\n" "Last-Translator: serafeim \n" "Language-Team: Basque (http://www.transifex.com/projects/p/wagtail/language/" @@ -90,7 +90,7 @@ msgstr "" msgid "Receive notification when your page edit is rejected" msgstr "" -#: wagtail_hooks.py:22 templates/wagtailusers/index.html:4 +#: wagtail_hooks.py:24 templates/wagtailusers/index.html:4 #: templates/wagtailusers/index.html:17 msgid "Users" msgstr "" diff --git a/wagtail/wagtailusers/locale/fr/LC_MESSAGES/django.po b/wagtail/wagtailusers/locale/fr/LC_MESSAGES/django.po index 6f091d8c6a..119ae60566 100644 --- a/wagtail/wagtailusers/locale/fr/LC_MESSAGES/django.po +++ b/wagtail/wagtailusers/locale/fr/LC_MESSAGES/django.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: Wagtail\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2014-08-01 16:39+0100\n" +"POT-Creation-Date: 2014-09-11 16:38+0100\n" "PO-Revision-Date: 2014-03-18 23:16+0000\n" "Last-Translator: nahuel\n" "Language-Team: French (http://www.transifex.com/projects/p/wagtail/language/" @@ -94,7 +94,7 @@ msgstr "" msgid "Receive notification when your page edit is rejected" msgstr "" -#: wagtail_hooks.py:22 templates/wagtailusers/index.html:4 +#: wagtail_hooks.py:24 templates/wagtailusers/index.html:4 #: templates/wagtailusers/index.html:17 msgid "Users" msgstr "Utilisateurs" diff --git a/wagtail/wagtailusers/locale/gl/LC_MESSAGES/django.po b/wagtail/wagtailusers/locale/gl/LC_MESSAGES/django.po index f81b208dfc..9d80306f84 100644 --- a/wagtail/wagtailusers/locale/gl/LC_MESSAGES/django.po +++ b/wagtail/wagtailusers/locale/gl/LC_MESSAGES/django.po @@ -9,7 +9,7 @@ msgid "" msgstr "" "Project-Id-Version: Wagtail\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2014-08-01 16:39+0100\n" +"POT-Creation-Date: 2014-09-11 16:38+0100\n" "PO-Revision-Date: 2014-03-23 10:33+0000\n" "Last-Translator: fooflare \n" "Language-Team: Galician (http://www.transifex.com/projects/p/wagtail/" @@ -95,7 +95,7 @@ msgstr "" msgid "Receive notification when your page edit is rejected" msgstr "" -#: wagtail_hooks.py:22 templates/wagtailusers/index.html:4 +#: wagtail_hooks.py:24 templates/wagtailusers/index.html:4 #: templates/wagtailusers/index.html:17 msgid "Users" msgstr "Usuarios" diff --git a/wagtail/wagtailusers/locale/mn/LC_MESSAGES/django.po b/wagtail/wagtailusers/locale/mn/LC_MESSAGES/django.po index 0724b1d54d..ae3a18e464 100644 --- a/wagtail/wagtailusers/locale/mn/LC_MESSAGES/django.po +++ b/wagtail/wagtailusers/locale/mn/LC_MESSAGES/django.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: Wagtail\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2014-08-01 16:39+0100\n" +"POT-Creation-Date: 2014-09-11 16:38+0100\n" "PO-Revision-Date: 2014-03-14 21:12+0000\n" "Last-Translator: serafeim \n" "Language-Team: Mongolian (http://www.transifex.com/projects/p/wagtail/" @@ -90,7 +90,7 @@ msgstr "" msgid "Receive notification when your page edit is rejected" msgstr "" -#: wagtail_hooks.py:22 templates/wagtailusers/index.html:4 +#: wagtail_hooks.py:24 templates/wagtailusers/index.html:4 #: templates/wagtailusers/index.html:17 msgid "Users" msgstr "" diff --git a/wagtail/wagtailusers/locale/pl/LC_MESSAGES/django.po b/wagtail/wagtailusers/locale/pl/LC_MESSAGES/django.po index e5f9b456d6..0bb541c285 100644 --- a/wagtail/wagtailusers/locale/pl/LC_MESSAGES/django.po +++ b/wagtail/wagtailusers/locale/pl/LC_MESSAGES/django.po @@ -9,7 +9,7 @@ msgid "" msgstr "" "Project-Id-Version: Wagtail\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2014-08-01 16:39+0100\n" +"POT-Creation-Date: 2014-09-11 16:38+0100\n" "PO-Revision-Date: 2014-03-14 22:16+0000\n" "Last-Translator: utek \n" "Language-Team: Polish (http://www.transifex.com/projects/p/wagtail/language/" @@ -96,7 +96,7 @@ msgstr "" msgid "Receive notification when your page edit is rejected" msgstr "" -#: wagtail_hooks.py:22 templates/wagtailusers/index.html:4 +#: wagtail_hooks.py:24 templates/wagtailusers/index.html:4 #: templates/wagtailusers/index.html:17 msgid "Users" msgstr "Użytkownicy" diff --git a/wagtail/wagtailusers/locale/pt_PT/LC_MESSAGES/django.po b/wagtail/wagtailusers/locale/pt_PT/LC_MESSAGES/django.po index abd1de9406..e3a5a753ee 100644 --- a/wagtail/wagtailusers/locale/pt_PT/LC_MESSAGES/django.po +++ b/wagtail/wagtailusers/locale/pt_PT/LC_MESSAGES/django.po @@ -9,16 +9,16 @@ msgid "" msgstr "" "Project-Id-Version: Wagtail 0.5.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2014-08-01 16:39+0100\n" +"POT-Creation-Date: 2014-09-11 16:38+0100\n" "PO-Revision-Date: 2014-08-03 01:59+0100\n" "Last-Translator: Jose Lourenco \n" "Language-Team: \n" +"Language: pt_PT\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.4\n" -"Language: pt_PT\n" #: forms.py:18 forms.py:95 msgid "Administrator" @@ -96,7 +96,7 @@ msgstr "Receber notificação quando a edição da sua página for aprovada" msgid "Receive notification when your page edit is rejected" msgstr "Receber notificação quando a edição da sua página for rejeitada" -#: wagtail_hooks.py:22 templates/wagtailusers/index.html:4 +#: wagtail_hooks.py:24 templates/wagtailusers/index.html:4 #: templates/wagtailusers/index.html:17 msgid "Users" msgstr "Utilizadores" diff --git a/wagtail/wagtailusers/locale/ro/LC_MESSAGES/django.po b/wagtail/wagtailusers/locale/ro/LC_MESSAGES/django.po index 167337849f..70b0d19fdf 100644 --- a/wagtail/wagtailusers/locale/ro/LC_MESSAGES/django.po +++ b/wagtail/wagtailusers/locale/ro/LC_MESSAGES/django.po @@ -9,7 +9,7 @@ msgid "" msgstr "" "Project-Id-Version: Wagtail\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2014-08-01 16:39+0100\n" +"POT-Creation-Date: 2014-09-11 16:38+0100\n" "PO-Revision-Date: 2014-03-18 13:22+0000\n" "Last-Translator: zerolab\n" "Language-Team: Romanian (http://www.transifex.com/projects/p/wagtail/" @@ -93,7 +93,7 @@ msgstr "" msgid "Receive notification when your page edit is rejected" msgstr "" -#: wagtail_hooks.py:22 templates/wagtailusers/index.html:4 +#: wagtail_hooks.py:24 templates/wagtailusers/index.html:4 #: templates/wagtailusers/index.html:17 msgid "Users" msgstr "Utilizatori" diff --git a/wagtail/wagtailusers/locale/zh/LC_MESSAGES/django.po b/wagtail/wagtailusers/locale/zh/LC_MESSAGES/django.po index e23076a783..f855e09ead 100644 --- a/wagtail/wagtailusers/locale/zh/LC_MESSAGES/django.po +++ b/wagtail/wagtailusers/locale/zh/LC_MESSAGES/django.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: Wagtail\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2014-08-01 16:39+0100\n" +"POT-Creation-Date: 2014-09-11 16:38+0100\n" "PO-Revision-Date: 2014-03-14 21:12+0000\n" "Last-Translator: serafeim \n" "Language-Team: Chinese (http://www.transifex.com/projects/p/wagtail/language/" @@ -90,7 +90,7 @@ msgstr "" msgid "Receive notification when your page edit is rejected" msgstr "" -#: wagtail_hooks.py:22 templates/wagtailusers/index.html:4 +#: wagtail_hooks.py:24 templates/wagtailusers/index.html:4 #: templates/wagtailusers/index.html:17 msgid "Users" msgstr "用户" diff --git a/wagtail/wagtailusers/locale/zh_TW/LC_MESSAGES/django.po b/wagtail/wagtailusers/locale/zh_TW/LC_MESSAGES/django.po index 849cbccb41..063acbc609 100644 --- a/wagtail/wagtailusers/locale/zh_TW/LC_MESSAGES/django.po +++ b/wagtail/wagtailusers/locale/zh_TW/LC_MESSAGES/django.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: Wagtail\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2014-08-01 16:39+0100\n" +"POT-Creation-Date: 2014-09-11 16:38+0100\n" "PO-Revision-Date: 2014-03-14 21:12+0000\n" "Last-Translator: wdv4758h \n" "Language-Team: \n" @@ -89,7 +89,7 @@ msgstr "" msgid "Receive notification when your page edit is rejected" msgstr "" -#: wagtail_hooks.py:22 templates/wagtailusers/index.html:4 +#: wagtail_hooks.py:24 templates/wagtailusers/index.html:4 #: templates/wagtailusers/index.html:17 msgid "Users" msgstr "使用者" From f7692cf9dca39725e3b163ade49db94158cb5422 Mon Sep 17 00:00:00 2001 From: Matt Westcott Date: Thu, 11 Sep 2014 16:40:13 +0100 Subject: [PATCH 179/210] prepare for 0.6 release --- CHANGELOG.txt | 2 +- docs/releases/0.6.rst | 6 +++--- wagtail/wagtailcore/__init__.py | 2 +- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/CHANGELOG.txt b/CHANGELOG.txt index e2842e12e6..713a5c19f9 100644 --- a/CHANGELOG.txt +++ b/CHANGELOG.txt @@ -1,7 +1,7 @@ Changelog ========= -0.6 (xx.xx.20xx) +0.6 (11.09.2014) ~~~~~~~~~~~~~~~~ * Added 'wagtail start' command and project template * Added Django 1.7 support diff --git a/docs/releases/0.6.rst b/docs/releases/0.6.rst index 5899a3b39a..5064f90bee 100644 --- a/docs/releases/0.6.rst +++ b/docs/releases/0.6.rst @@ -1,6 +1,6 @@ -========================================== -Wagtail 0.6 release notes - IN DEVELOPMENT -========================================== +========================= +Wagtail 0.6 release notes +========================= .. contents:: :local: diff --git a/wagtail/wagtailcore/__init__.py b/wagtail/wagtailcore/__init__.py index 8055a55e9f..c45294088d 100644 --- a/wagtail/wagtailcore/__init__.py +++ b/wagtail/wagtailcore/__init__.py @@ -1,2 +1,2 @@ -__version__ = '0.5' +__version__ = '0.6' default_app_config = 'wagtail.wagtailcore.apps.WagtailCoreAppConfig' From ab5d7353c088f2ed48afabd4cf11003127c735ca Mon Sep 17 00:00:00 2001 From: Karl Hobley Date: Thu, 11 Sep 2014 16:42:33 +0100 Subject: [PATCH 180/210] Added wagtailforms to transifex config --- .tx/config | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/.tx/config b/.tx/config index 2ae6c184a6..b3b2e98bef 100644 --- a/.tx/config +++ b/.tx/config @@ -53,4 +53,10 @@ type = PO file_filter = wagtail/wagtailusers/locale//LC_MESSAGES/django.po source_file = wagtail/wagtailusers/locale/en/LC_MESSAGES/django.po source_lang = en -type = PO \ No newline at end of file +type = PO + +[wagtail.wagtailforms] +file_filter = wagtail/wagtailforms/locale//LC_MESSAGES/django.po +source_file = wagtail/wagtailforms/locale/en/LC_MESSAGES/django.po +source_lang = en +type = PO From 8265907fabba14500a3465cc3c467eceafd779a7 Mon Sep 17 00:00:00 2001 From: Karl Hobley Date: Thu, 11 Sep 2014 16:43:39 +0100 Subject: [PATCH 181/210] Pulled translations from transifex --- .../locale/ru/LC_MESSAGES/django.po | 1078 +++++++++++++++++ .../locale/vi/LC_MESSAGES/django.po | 1058 ++++++++++++++++ .../locale/pt_BR/LC_MESSAGES/django.po | 81 ++ .../locale/ru/LC_MESSAGES/django.po | 80 ++ .../locale/vi/LC_MESSAGES/django.po | 79 ++ .../locale/pt_BR/LC_MESSAGES/django.po | 186 +++ .../locale/ru/LC_MESSAGES/django.po | 187 +++ .../locale/vi/LC_MESSAGES/django.po | 184 +++ .../locale/pt_BR/LC_MESSAGES/django.po | 52 + .../locale/ru/LC_MESSAGES/django.po | 51 + .../locale/vi/LC_MESSAGES/django.po | 50 + .../locale/bg/LC_MESSAGES/django.po | 128 ++ .../locale/ca/LC_MESSAGES/django.po | 128 ++ .../locale/de/LC_MESSAGES/django.po | 128 ++ .../locale/el/LC_MESSAGES/django.po | 128 ++ .../locale/es/LC_MESSAGES/django.po | 128 ++ .../locale/eu/LC_MESSAGES/django.po | 128 ++ .../locale/fr/LC_MESSAGES/django.po | 128 ++ .../locale/gl/LC_MESSAGES/django.po | 128 ++ .../locale/mn/LC_MESSAGES/django.po | 128 ++ .../locale/pl/LC_MESSAGES/django.po | 128 ++ .../locale/pt_BR/LC_MESSAGES/django.po | 128 ++ .../locale/ro/LC_MESSAGES/django.po | 128 ++ .../locale/ru/LC_MESSAGES/django.po | 128 ++ .../locale/vi/LC_MESSAGES/django.po | 128 ++ .../locale/zh/LC_MESSAGES/django.po | 128 ++ .../locale/pt_BR/LC_MESSAGES/django.po | 296 +++++ .../locale/ru/LC_MESSAGES/django.po | 296 +++++ .../locale/vi/LC_MESSAGES/django.po | 293 +++++ .../locale/pt_BR/LC_MESSAGES/django.po | 157 +++ .../locale/ru/LC_MESSAGES/django.po | 157 +++ .../locale/vi/LC_MESSAGES/django.po | 154 +++ .../locale/pt_BR/LC_MESSAGES/django.po | 201 +++ .../locale/ru/LC_MESSAGES/django.po | 202 +++ .../locale/vi/LC_MESSAGES/django.po | 199 +++ .../locale/pt_BR/LC_MESSAGES/django.po | 151 +++ .../locale/ru/LC_MESSAGES/django.po | 150 +++ .../locale/vi/LC_MESSAGES/django.po | 150 +++ .../locale/pt_BR/LC_MESSAGES/django.po | 193 +++ .../locale/ru/LC_MESSAGES/django.po | 193 +++ .../locale/vi/LC_MESSAGES/django.po | 189 +++ 41 files changed, 7987 insertions(+) create mode 100644 wagtail/wagtailadmin/locale/ru/LC_MESSAGES/django.po create mode 100644 wagtail/wagtailadmin/locale/vi/LC_MESSAGES/django.po create mode 100644 wagtail/wagtailcore/locale/pt_BR/LC_MESSAGES/django.po create mode 100644 wagtail/wagtailcore/locale/ru/LC_MESSAGES/django.po create mode 100644 wagtail/wagtailcore/locale/vi/LC_MESSAGES/django.po create mode 100644 wagtail/wagtaildocs/locale/pt_BR/LC_MESSAGES/django.po create mode 100644 wagtail/wagtaildocs/locale/ru/LC_MESSAGES/django.po create mode 100644 wagtail/wagtaildocs/locale/vi/LC_MESSAGES/django.po create mode 100644 wagtail/wagtailembeds/locale/pt_BR/LC_MESSAGES/django.po create mode 100644 wagtail/wagtailembeds/locale/ru/LC_MESSAGES/django.po create mode 100644 wagtail/wagtailembeds/locale/vi/LC_MESSAGES/django.po create mode 100644 wagtail/wagtailforms/locale/bg/LC_MESSAGES/django.po create mode 100644 wagtail/wagtailforms/locale/ca/LC_MESSAGES/django.po create mode 100644 wagtail/wagtailforms/locale/de/LC_MESSAGES/django.po create mode 100644 wagtail/wagtailforms/locale/el/LC_MESSAGES/django.po create mode 100644 wagtail/wagtailforms/locale/es/LC_MESSAGES/django.po create mode 100644 wagtail/wagtailforms/locale/eu/LC_MESSAGES/django.po create mode 100644 wagtail/wagtailforms/locale/fr/LC_MESSAGES/django.po create mode 100644 wagtail/wagtailforms/locale/gl/LC_MESSAGES/django.po create mode 100644 wagtail/wagtailforms/locale/mn/LC_MESSAGES/django.po create mode 100644 wagtail/wagtailforms/locale/pl/LC_MESSAGES/django.po create mode 100644 wagtail/wagtailforms/locale/pt_BR/LC_MESSAGES/django.po create mode 100644 wagtail/wagtailforms/locale/ro/LC_MESSAGES/django.po create mode 100644 wagtail/wagtailforms/locale/ru/LC_MESSAGES/django.po create mode 100644 wagtail/wagtailforms/locale/vi/LC_MESSAGES/django.po create mode 100644 wagtail/wagtailforms/locale/zh/LC_MESSAGES/django.po create mode 100644 wagtail/wagtailimages/locale/pt_BR/LC_MESSAGES/django.po create mode 100644 wagtail/wagtailimages/locale/ru/LC_MESSAGES/django.po create mode 100644 wagtail/wagtailimages/locale/vi/LC_MESSAGES/django.po create mode 100644 wagtail/wagtailredirects/locale/pt_BR/LC_MESSAGES/django.po create mode 100644 wagtail/wagtailredirects/locale/ru/LC_MESSAGES/django.po create mode 100644 wagtail/wagtailredirects/locale/vi/LC_MESSAGES/django.po create mode 100644 wagtail/wagtailsearch/locale/pt_BR/LC_MESSAGES/django.po create mode 100644 wagtail/wagtailsearch/locale/ru/LC_MESSAGES/django.po create mode 100644 wagtail/wagtailsearch/locale/vi/LC_MESSAGES/django.po create mode 100644 wagtail/wagtailsnippets/locale/pt_BR/LC_MESSAGES/django.po create mode 100644 wagtail/wagtailsnippets/locale/ru/LC_MESSAGES/django.po create mode 100644 wagtail/wagtailsnippets/locale/vi/LC_MESSAGES/django.po create mode 100644 wagtail/wagtailusers/locale/pt_BR/LC_MESSAGES/django.po create mode 100644 wagtail/wagtailusers/locale/ru/LC_MESSAGES/django.po create mode 100644 wagtail/wagtailusers/locale/vi/LC_MESSAGES/django.po diff --git a/wagtail/wagtailadmin/locale/ru/LC_MESSAGES/django.po b/wagtail/wagtailadmin/locale/ru/LC_MESSAGES/django.po new file mode 100644 index 0000000000..67da042d92 --- /dev/null +++ b/wagtail/wagtailadmin/locale/ru/LC_MESSAGES/django.po @@ -0,0 +1,1078 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# +# Translators: +# ajk, 2014 +# HNKNTA , 2014 +msgid "" +msgstr "" +"Project-Id-Version: Wagtail\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2014-09-11 16:37+0100\n" +"PO-Revision-Date: 2014-09-11 15:40+0000\n" +"Last-Translator: Karl Hobley \n" +"Language-Team: Russian (http://www.transifex.com/projects/p/wagtail/language/ru/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: ru\n" +"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" + +#: edit_handlers.py:631 +msgid "Scheduled publishing" +msgstr "" + +#: edit_handlers.py:645 +msgid "Common page configuration" +msgstr "" + +#: forms.py:19 +msgid "Search term" +msgstr "Критерий поиска" + +#: forms.py:43 +msgid "Enter your username" +msgstr "Введите имя пользователя" + +#: forms.py:46 +msgid "Enter password" +msgstr "Введите пароль" + +#: forms.py:51 +msgid "Enter your email address to reset your password" +msgstr "Введите Ваш адрес электронной почты для сброса пароля" + +#: forms.py:60 +msgid "Please fill your email address." +msgstr "Пожалуйста, заполните Ваш адрес электронной почты" + +#: forms.py:73 +msgid "" +"Sorry, you cannot reset your password here as your user account is managed " +"by another server." +msgstr "Извините, Вы не можете сбросить пароль здесь, так как Ваш аккаунт управляется другим сервером" + +#: forms.py:76 +msgid "This email address is not recognised." +msgstr "Этот адрес электронной почты не распознан" + +#: forms.py:88 +msgid "New title" +msgstr "" + +#: forms.py:89 +msgid "New slug" +msgstr "" + +#: forms.py:95 +msgid "Copy subpages" +msgstr "" + +#: forms.py:97 +#, python-format +msgid "This will copy %(count)s subpage." +msgid_plural "This will copy %(count)s subpages." +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" + +#: forms.py:106 +msgid "Publish copied page" +msgstr "" + +#: forms.py:107 +msgid "This page is live. Would you like to publish its copy as well?" +msgstr "" + +#: forms.py:109 +msgid "Publish copies" +msgstr "" + +#: forms.py:111 +#, python-format +msgid "" +"%(count)s of the pages being copied is live. Would you like to publish its " +"copy?" +msgid_plural "" +"%(count)s of the pages being copied are live. Would you like to publish " +"their copies?" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" + +#: forms.py:124 views/pages.py:153 views/pages.py:270 +msgid "This slug is already in use" +msgstr "Этот слаг уже используется" + +#: forms.py:130 templates/wagtailadmin/pages/_privacy_indicator.html:13 +#: templates/wagtailadmin/pages/_privacy_indicator.html:18 +msgid "Public" +msgstr "" + +#: forms.py:131 +msgid "Private, accessible with the following password" +msgstr "" + +#: forms.py:139 +msgid "This field is required." +msgstr "" + +#: wagtail_hooks.py:15 templates/wagtailadmin/chooser/_search_results.html:12 +msgid "Explorer" +msgstr "Проводник" + +#: wagtail_hooks.py:23 templates/wagtailadmin/chooser/_search_form.html:7 +#: templates/wagtailadmin/pages/search.html:3 +#: templates/wagtailadmin/pages/search.html:16 +msgid "Search" +msgstr "Поиск" + +#: templates/wagtailadmin/base.html:7 templates/wagtailadmin/home.html:4 +msgid "Dashboard" +msgstr "Панель управления" + +#: templates/wagtailadmin/base.html:27 +msgid "Menu" +msgstr "Меню" + +#: templates/wagtailadmin/home.html:22 +#, python-format +msgid "Welcome to the %(site_name)s Wagtail CMS" +msgstr "Добро пожаловать в %(site_name)s Wagtail CMS" + +#: templates/wagtailadmin/home.html:33 +msgid "" +"This is your dashboard on which helpful information about content you've " +"created will be displayed." +msgstr "Это Ваша панель управления сайтом. Здесь отображается различная информация о контенте, который Вы создаете." + +#: templates/wagtailadmin/login.html:4 templates/wagtailadmin/login.html:59 +msgid "Sign in" +msgstr "Войти" + +#: templates/wagtailadmin/login.html:18 +msgid "Your username and password didn't match. Please try again." +msgstr "Ваши имя пользователя и пароль не подходят. Пожалуйста, попробуйте еще раз." + +#: templates/wagtailadmin/login.html:26 +msgid "Sign in to Wagtail" +msgstr "Войти в Wagtail" + +#: templates/wagtailadmin/login.html:46 +msgid "Forgotten it?" +msgstr "Забыли?" + +#: templates/wagtailadmin/account/account.html:4 +#: templates/wagtailadmin/account/account.html:6 +msgid "Account" +msgstr "Аккаунт" + +#: templates/wagtailadmin/account/account.html:13 +msgid "Set gravatar" +msgstr "Установить граватар" + +#: templates/wagtailadmin/account/account.html:17 +msgid "" +"Your avatar image is provided by Gravatar and is connected to your email " +"address. With a Gravatar account you can set an avatar for any number of " +"other email addresses you use." +msgstr "" + +#: templates/wagtailadmin/account/account.html:25 +#: templates/wagtailadmin/account/change_password.html:4 +#: templates/wagtailadmin/account/change_password.html:6 +msgid "Change password" +msgstr "Изменить пароль" + +#: templates/wagtailadmin/account/account.html:29 +msgid "Change the password you use to log in." +msgstr "Изменить пароль, который Вы используете для входа." + +#: templates/wagtailadmin/account/account.html:36 +msgid "Notification preferences" +msgstr "" + +#: templates/wagtailadmin/account/account.html:40 +msgid "Choose which email notifications to receive." +msgstr "" + +#: templates/wagtailadmin/account/change_password.html:18 +msgid "Change Password" +msgstr "Изменить пароль" + +#: templates/wagtailadmin/account/change_password.html:21 +msgid "" +"Your password can't be changed here. Please contact a site administrator." +msgstr "Ваш пароль не может быть изменен здесь. Пожалуйста, свяжитесь с администратором сайта." + +#: templates/wagtailadmin/account/notification_preferences.html:4 +#: templates/wagtailadmin/account/notification_preferences.html:6 +msgid "Notification Preferences" +msgstr "" + +#: templates/wagtailadmin/account/notification_preferences.html:16 +msgid "Update" +msgstr "" + +#: templates/wagtailadmin/account/password_reset/complete.html:4 +#: templates/wagtailadmin/account/password_reset/confirm.html:42 +#: templates/wagtailadmin/account/password_reset/done.html:4 +#: templates/wagtailadmin/account/password_reset/form.html:4 +#: templates/wagtailadmin/account/password_reset/form.html:37 +msgid "Reset password" +msgstr "Сбросить пароль" + +#: templates/wagtailadmin/account/password_reset/complete.html:15 +msgid "Password change successful" +msgstr "Пароль успешно изменен" + +#: templates/wagtailadmin/account/password_reset/complete.html:16 +msgid "Login" +msgstr "Войти" + +#: templates/wagtailadmin/account/password_reset/confirm.html:4 +#: templates/wagtailadmin/account/password_reset/confirm.html:26 +msgid "Set your new password" +msgstr "Задайте новый пароль" + +#: templates/wagtailadmin/account/password_reset/confirm.html:19 +msgid "The passwords do not match. Please try again." +msgstr "Пароли не совпадают. Пожалуйста, попробуйте еще раз." + +#: templates/wagtailadmin/account/password_reset/done.html:15 +msgid "Check your email" +msgstr "Проверьте электронную почту" + +#: templates/wagtailadmin/account/password_reset/done.html:16 +msgid "A link to reset your password has been emailed to you." +msgstr "Ссылка для смены пароля отправлена на Ваш адрес электронной почты." + +#: templates/wagtailadmin/account/password_reset/email.txt:2 +msgid "Please follow the link below to reset your password" +msgstr "Пожалуйста, используйте данную ссылку для сброса пароля" + +#: templates/wagtailadmin/account/password_reset/email_subject.txt:2 +msgid "Password reset" +msgstr "Пароль сброшен" + +#: templates/wagtailadmin/account/password_reset/form.html:27 +msgid "Reset your password" +msgstr "Сбросьте Ваш пароль" + +#: templates/wagtailadmin/chooser/_link_types.html:5 +#: templates/wagtailadmin/chooser/_link_types.html:7 +msgid "Internal link" +msgstr "Внутренняя ссылка" + +#: templates/wagtailadmin/chooser/_link_types.html:11 +#: templates/wagtailadmin/chooser/_link_types.html:13 +msgid "External link" +msgstr "Внешняя ссылка" + +#: templates/wagtailadmin/chooser/_link_types.html:17 +#: templates/wagtailadmin/chooser/_link_types.html:19 +msgid "Email link" +msgstr "Ссылка на адрес электронной почты" + +#: templates/wagtailadmin/chooser/_search_results.html:5 +#, python-format +msgid "" +"\n" +" Only pages of type \"%(type)s\" may be chosen for this field. Search results will exclude pages of other types.\n" +" " +msgstr "" + +#: templates/wagtailadmin/chooser/_search_results.html:16 +#, python-format +msgid "" +"\n" +" There is one match\n" +" " +msgid_plural "" +"\n" +" There are %(counter)s matches\n" +" " +msgstr[0] "\nЕсть одно совпадение" +msgstr[1] "\nЕсть %(counter)s совпадений" +msgstr[2] "\nЕсть %(counter)s совпадений" + +#: templates/wagtailadmin/chooser/browse.html:3 +msgid "Choose" +msgstr "" + +#: templates/wagtailadmin/chooser/browse.html:6 +#: templates/wagtailadmin/chooser/search.html:2 +#: templates/wagtailadmin/edit_handlers/page_chooser_panel.html:13 +msgid "Choose a page" +msgstr "Выбрать страницу" + +#: templates/wagtailadmin/chooser/email_link.html:2 +msgid "Add an email link" +msgstr "Добавить ссылку на адрес электронной почты" + +#: templates/wagtailadmin/chooser/email_link.html:14 +#: templates/wagtailadmin/chooser/external_link.html:14 +msgid "Insert link" +msgstr "Вставить ссылку" + +#: templates/wagtailadmin/chooser/external_link.html:2 +msgid "Add an external link" +msgstr "Добавить внешнюю ссылку" + +#: templates/wagtailadmin/edit_handlers/chooser_panel.html:20 +msgid "Clear choice" +msgstr "Очистить выбор" + +#: templates/wagtailadmin/edit_handlers/chooser_panel.html:22 +msgid "Choose another item" +msgstr "Выбрать другой элемент" + +#: templates/wagtailadmin/edit_handlers/chooser_panel.html:27 +msgid "Choose an item" +msgstr "Выбрать элемент" + +#: templates/wagtailadmin/edit_handlers/inline_panel_child.html:5 +msgid "Move up" +msgstr "Вверх" + +#: templates/wagtailadmin/edit_handlers/inline_panel_child.html:6 +msgid "Move down" +msgstr "Вниз" + +#: templates/wagtailadmin/edit_handlers/inline_panel_child.html:8 +#: templates/wagtailadmin/pages/confirm_delete.html:7 +#: templates/wagtailadmin/pages/edit.html:45 +#: templates/wagtailadmin/pages/list.html:84 +#: templates/wagtailadmin/pages/list.html:205 +msgid "Delete" +msgstr "Удалить" + +#: templates/wagtailadmin/edit_handlers/page_chooser_panel.html:12 +msgid "Choose another page" +msgstr "Выбрать другую страницу" + +#: templates/wagtailadmin/home/pages_for_moderation.html:5 +msgid "Pages awaiting moderation" +msgstr "Страницы ожидающие модерации" + +#: templates/wagtailadmin/home/pages_for_moderation.html:13 +#: templates/wagtailadmin/home/recent_edits.html:12 +#: templates/wagtailadmin/pages/list.html:121 +#: templates/wagtailadmin/pages/list.html:124 +msgid "Title" +msgstr "Заголовок" + +#: templates/wagtailadmin/home/pages_for_moderation.html:14 +#: templates/wagtailadmin/pages/list.html:22 +msgid "Parent" +msgstr "Родительский элемент" + +#: templates/wagtailadmin/home/pages_for_moderation.html:15 +#: templates/wagtailadmin/pages/list.html:24 +#: templates/wagtailadmin/pages/list.html:133 +#: templates/wagtailadmin/pages/list.html:136 +msgid "Type" +msgstr "Тип" + +#: templates/wagtailadmin/home/pages_for_moderation.html:16 +msgid "Edited" +msgstr "" + +#: templates/wagtailadmin/home/pages_for_moderation.html:23 +#: templates/wagtailadmin/home/recent_edits.html:21 +#: templates/wagtailadmin/pages/list.html:176 +#: templates/wagtailadmin/pages/list.html:190 +msgid "Edit this page" +msgstr "Редактировать эту страницу" + +#: templates/wagtailadmin/home/pages_for_moderation.html:28 +#: templates/wagtailadmin/pages/_moderator_userbar.html:12 +#: templates/wagtailadmin/userbar/item_page_approve.html:8 +msgid "Approve" +msgstr "Одобрить" + +#: templates/wagtailadmin/home/pages_for_moderation.html:34 +#: templates/wagtailadmin/pages/_moderator_userbar.html:17 +#: templates/wagtailadmin/userbar/item_page_reject.html:8 +msgid "Reject" +msgstr "Отклонить" + +#: templates/wagtailadmin/home/pages_for_moderation.html:37 +#: templates/wagtailadmin/home/recent_edits.html:23 +#: templates/wagtailadmin/pages/_moderator_userbar.html:9 +#: templates/wagtailadmin/pages/list.html:72 +#: templates/wagtailadmin/pages/list.html:190 +#: templates/wagtailadmin/userbar/item_page_edit.html:5 +msgid "Edit" +msgstr "Правка" + +#: templates/wagtailadmin/home/pages_for_moderation.html:38 +#: templates/wagtailadmin/pages/create.html:41 +#: templates/wagtailadmin/pages/edit.html:56 +#: templates/wagtailadmin/pages/preview.html:5 +msgid "Preview" +msgstr "Превью" + +#: templates/wagtailadmin/home/recent_edits.html:5 +msgid "Your most recent edits" +msgstr "Ваши последние правки" + +#: templates/wagtailadmin/home/recent_edits.html:13 +msgid "Date" +msgstr "Дата" + +#: templates/wagtailadmin/home/recent_edits.html:14 +#: templates/wagtailadmin/pages/edit.html:18 +#: templates/wagtailadmin/pages/list.html:25 +#: templates/wagtailadmin/pages/list.html:142 +#: templates/wagtailadmin/pages/list.html:145 +msgid "Status" +msgstr "Статус" + +#: templates/wagtailadmin/home/recent_edits.html:25 +#: templates/wagtailadmin/pages/list.html:75 +#: templates/wagtailadmin/pages/list.html:193 +msgid "Draft" +msgstr "" + +#: templates/wagtailadmin/home/recent_edits.html:28 +#: templates/wagtailadmin/pages/list.html:78 +#: templates/wagtailadmin/pages/list.html:196 +msgid "Live" +msgstr "" + +#: templates/wagtailadmin/home/site_summary.html:3 +msgid "Site summary" +msgstr "Общая информация" + +#: templates/wagtailadmin/home/site_summary.html:7 +#, python-format +msgid "" +"\n" +" %(total_pages)s Page\n" +" " +msgid_plural "" +"\n" +" %(total_pages)s Pages\n" +" " +msgstr[0] "\n%(total_pages)s Страница" +msgstr[1] "\n%(total_pages)s Страниц" +msgstr[2] "\n%(total_pages)s Страниц" + +#: templates/wagtailadmin/home/site_summary.html:16 +#, python-format +msgid "" +"\n" +" %(total_images)s Image\n" +" " +msgid_plural "" +"\n" +" %(total_images)s Images\n" +" " +msgstr[0] "\n%(total_images)s Изображение" +msgstr[1] "\n%(total_images)s Изображений" +msgstr[2] "\n%(total_images)s Изображений" + +#: templates/wagtailadmin/home/site_summary.html:25 +#, python-format +msgid "" +"\n" +" %(total_docs)s Document\n" +" " +msgid_plural "" +"\n" +" %(total_docs)s Documents\n" +" " +msgstr[0] "\n%(total_docs)s Документ" +msgstr[1] "\n%(total_docs)s Документов" +msgstr[2] "\n%(total_docs)s Документов" + +#: templates/wagtailadmin/notifications/approved.html:1 +#, python-format +msgid "The page \"%(title)s\" has been approved" +msgstr "Страница \"%(title)s\" была принята" + +#: templates/wagtailadmin/notifications/approved.html:2 +#, python-format +msgid "The page \"%(title)s\" has been approved." +msgstr "Страница \"%(title)s\" была принята." + +#: templates/wagtailadmin/notifications/approved.html:4 +msgid "You can view the page here:" +msgstr "Вы можете увидеть страницу здесь:" + +#: templates/wagtailadmin/notifications/base_notification.html:3 +msgid "Edit your notification preferences here:" +msgstr "" + +#: templates/wagtailadmin/notifications/rejected.html:1 +#, python-format +msgid "The page \"%(title)s\" has been rejected" +msgstr "" + +#: templates/wagtailadmin/notifications/rejected.html:2 +#, python-format +msgid "The page \"%(title)s\" has been rejected." +msgstr "" + +#: templates/wagtailadmin/notifications/rejected.html:4 +#: templates/wagtailadmin/notifications/submitted.html:5 +msgid "You can edit the page here:" +msgstr "" + +#: templates/wagtailadmin/notifications/submitted.html:1 +#, python-format +msgid "The page \"%(page)s\" has been submitted for moderation" +msgstr "" + +#: templates/wagtailadmin/notifications/submitted.html:2 +#, python-format +msgid "The page \"%(page)s\" has been submitted for moderation." +msgstr "" + +#: templates/wagtailadmin/notifications/submitted.html:4 +msgid "You can preview the page here:" +msgstr "" + +#: templates/wagtailadmin/page_privacy/ancestor_privacy.html:2 +#: templates/wagtailadmin/page_privacy/set_privacy.html:2 +msgid "Page privacy" +msgstr "" + +#: templates/wagtailadmin/page_privacy/ancestor_privacy.html:6 +msgid "This page has been made private by a parent page." +msgstr "" + +#: templates/wagtailadmin/page_privacy/ancestor_privacy.html:7 +msgid "You can edit the privacy settings on:" +msgstr "" + +#: templates/wagtailadmin/page_privacy/set_privacy.html:6 +msgid "Privacy changes apply to all children of this page too." +msgstr "" + +#: templates/wagtailadmin/pages/_moderator_userbar.html:4 +#, python-format +msgid "" +"\n" +" Previewing '%(title)s', submitted by %(submitted_by)s on %(submitted_on)s.\n" +" " +msgstr "" + +#: templates/wagtailadmin/pages/_privacy_indicator.html:9 +msgid "Privacy" +msgstr "" + +#: templates/wagtailadmin/pages/_privacy_indicator.html:14 +#: templates/wagtailadmin/pages/_privacy_indicator.html:20 +msgid "Private" +msgstr "" + +#: templates/wagtailadmin/pages/add_subpage.html:6 +#, python-format +msgid "Create a page in %(title)s" +msgstr "" + +#: templates/wagtailadmin/pages/add_subpage.html:9 +msgid "Create a page in" +msgstr "Создать страницу в" + +#: templates/wagtailadmin/pages/add_subpage.html:13 +msgid "Choose which type of page you'd like to create." +msgstr "" + +#: templates/wagtailadmin/pages/add_subpage.html:26 +#, python-format +msgid "Pages using %(page_type)s" +msgstr "" + +#: templates/wagtailadmin/pages/confirm_delete.html:3 +#, python-format +msgid "Delete %(title)s" +msgstr "Удалить %(title)s" + +#: templates/wagtailadmin/pages/confirm_delete.html:12 +msgid "Are you sure you want to delete this page?" +msgstr "" + +#: templates/wagtailadmin/pages/confirm_delete.html:14 +#, python-format +msgid "" +"\n" +" This will also delete one more subpage.\n" +" " +msgid_plural "" +"\n" +" This will also delete %(descendant_count)s more subpages.\n" +" " +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" + +#: templates/wagtailadmin/pages/confirm_delete.html:22 +msgid "" +"Alternatively you can unpublish the page. This removes the page from public " +"view and you can edit or publish it again later." +msgstr "" + +#: templates/wagtailadmin/pages/confirm_delete.html:26 +msgid "Delete it" +msgstr "Удалить" + +#: templates/wagtailadmin/pages/confirm_delete.html:26 +msgid "Unpublish it" +msgstr "Отменить публикацию" + +#: templates/wagtailadmin/pages/confirm_move.html:3 +#, python-format +msgid "Move %(title)s" +msgstr "Переместить %(title)s" + +#: templates/wagtailadmin/pages/confirm_move.html:6 +#: templates/wagtailadmin/pages/list.html:81 +#: templates/wagtailadmin/pages/list.html:199 +msgid "Move" +msgstr "Переместить" + +#: templates/wagtailadmin/pages/confirm_move.html:11 +#, python-format +msgid "Are you sure you want to move this page into '%(title)s'?" +msgstr "" + +#: templates/wagtailadmin/pages/confirm_move.html:13 +#, python-format +msgid "" +"Are you sure you want to move this page and all of its children into " +"'%(title)s'?" +msgstr "" + +#: templates/wagtailadmin/pages/confirm_move.html:18 +msgid "Yes, move this page" +msgstr "Да, переместить эту страницу" + +#: templates/wagtailadmin/pages/confirm_unpublish.html:3 +#, python-format +msgid "Unpublish %(title)s" +msgstr "Отменить публикацию %(title)s" + +#: templates/wagtailadmin/pages/confirm_unpublish.html:6 +#: templates/wagtailadmin/pages/edit.html:42 +#: templates/wagtailadmin/pages/list.html:87 +#: templates/wagtailadmin/pages/list.html:208 +msgid "Unpublish" +msgstr "Отменить публикацию" + +#: templates/wagtailadmin/pages/confirm_unpublish.html:10 +msgid "Are you sure you want to unpublish this page?" +msgstr "Вы уверены, что хотите отменить публикацию этой страницы?" + +#: templates/wagtailadmin/pages/confirm_unpublish.html:13 +msgid "Yes, unpublish it" +msgstr "Да, отменить публикацию" + +#: templates/wagtailadmin/pages/content_type_use.html:7 +msgid "Pages using" +msgstr "" + +#: templates/wagtailadmin/pages/copy.html:3 +#, python-format +msgid "Copy %(title)s" +msgstr "" + +#: templates/wagtailadmin/pages/copy.html:6 +#: templates/wagtailadmin/pages/list.html:202 +msgid "Copy" +msgstr "" + +#: templates/wagtailadmin/pages/copy.html:26 +msgid "Copy this page" +msgstr "" + +#: templates/wagtailadmin/pages/create.html:5 +#, python-format +msgid "New %(page_type)s" +msgstr "" + +#: templates/wagtailadmin/pages/create.html:15 +msgid "New" +msgstr "" + +#: templates/wagtailadmin/pages/create.html:29 +msgid "Save as draft" +msgstr "Сохранить как черновик" + +#: templates/wagtailadmin/pages/create.html:33 +#: templates/wagtailadmin/pages/edit.html:48 +msgid "Publish" +msgstr "Опубликовать" + +#: templates/wagtailadmin/pages/create.html:35 +#: templates/wagtailadmin/pages/edit.html:50 +msgid "Submit for moderation" +msgstr "Отправить на модерацию" + +#: templates/wagtailadmin/pages/edit.html:5 +#, python-format +msgid "Editing %(title)s" +msgstr "" + +#: templates/wagtailadmin/pages/edit.html:15 +#, python-format +msgid "Editing %(title)s" +msgstr "" + +#: templates/wagtailadmin/pages/edit.html:38 +msgid "Save draft" +msgstr "Сохранить черновик" + +#: templates/wagtailadmin/pages/edit.html:77 +#, python-format +msgid "Last modified: %(last_mod)s" +msgstr "Последние правки: %(last_mod)s" + +#: templates/wagtailadmin/pages/edit.html:79 +#, python-format +msgid "by %(modified_by)s" +msgstr "" + +#: templates/wagtailadmin/pages/index.html:3 +#, python-format +msgid "Exploring %(title)s" +msgstr "" + +#: templates/wagtailadmin/pages/list.html:90 +#: templates/wagtailadmin/pages/list.html:211 +msgid "Add child page" +msgstr "Добавить дочернюю страницу" + +#: templates/wagtailadmin/pages/list.html:112 +msgid "Disable ordering of child pages" +msgstr "" + +#: templates/wagtailadmin/pages/list.html:112 +#: templates/wagtailadmin/pages/list.html:114 +msgid "Order" +msgstr "Порядок" + +#: templates/wagtailadmin/pages/list.html:114 +msgid "Enable ordering of child pages" +msgstr "" + +#: templates/wagtailadmin/pages/list.html:158 +msgid "Drag" +msgstr "" + +#: templates/wagtailadmin/pages/list.html:237 +#: templates/wagtailadmin/pages/list.html:241 +#, python-format +msgid "Explorer subpages of '%(title)s'" +msgstr "" + +#: templates/wagtailadmin/pages/list.html:237 +#: templates/wagtailadmin/pages/list.html:241 +#: templates/wagtailadmin/pages/list.html:245 +msgid "Explore" +msgstr "" + +#: templates/wagtailadmin/pages/list.html:245 +#, python-format +msgid "Explore child pages of '%(title)s'" +msgstr "" + +#: templates/wagtailadmin/pages/list.html:247 +#, python-format +msgid "Add a child page to '%(title)s'" +msgstr "" + +#: templates/wagtailadmin/pages/list.html:247 +msgid "Add subpage" +msgstr "" + +#: templates/wagtailadmin/pages/list.html:256 +msgid "No pages have been created." +msgstr "" + +#: templates/wagtailadmin/pages/list.html:256 +#, python-format +msgid "Why not add one?" +msgstr "" + +#: templates/wagtailadmin/pages/list.html:263 +#, python-format +msgid "" +"\n" +" Page %(page_number)s of %(num_pages)s.\n" +" " +msgstr "" + +#: templates/wagtailadmin/pages/list.html:269 +#: templates/wagtailadmin/pages/search_results.html:35 +#: templates/wagtailadmin/pages/search_results.html:37 +#: templates/wagtailadmin/pages/usage_results.html:13 +#: templates/wagtailadmin/shared/pagination_nav.html:21 +#: templates/wagtailadmin/shared/pagination_nav.html:23 +#: templates/wagtailadmin/shared/pagination_nav.html:25 +msgid "Previous" +msgstr "" + +#: templates/wagtailadmin/pages/list.html:274 +#: templates/wagtailadmin/pages/search_results.html:44 +#: templates/wagtailadmin/pages/search_results.html:46 +#: templates/wagtailadmin/pages/usage_results.html:18 +#: templates/wagtailadmin/shared/pagination_nav.html:32 +#: templates/wagtailadmin/shared/pagination_nav.html:34 +#: templates/wagtailadmin/shared/pagination_nav.html:36 +msgid "Next" +msgstr "" + +#: templates/wagtailadmin/pages/move_choose_destination.html:3 +#, python-format +msgid "Select a new parent page for %(title)s" +msgstr "" + +#: templates/wagtailadmin/pages/move_choose_destination.html:7 +#, python-format +msgid "Select a new parent page for %(title)s" +msgstr "" + +#: templates/wagtailadmin/pages/search_results.html:6 +#, python-format +msgid "" +"\n" +" There is one matching page\n" +" " +msgid_plural "" +"\n" +" There are %(counter)s matching pages\n" +" " +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" + +#: templates/wagtailadmin/pages/search_results.html:16 +msgid "Other searches" +msgstr "" + +#: templates/wagtailadmin/pages/search_results.html:18 +msgid "Images" +msgstr "Изображения" + +#: templates/wagtailadmin/pages/search_results.html:19 +msgid "Documents" +msgstr "Документы" + +#: templates/wagtailadmin/pages/search_results.html:20 +msgid "Users" +msgstr "Пользователи" + +#: templates/wagtailadmin/pages/search_results.html:28 +#: templates/wagtailadmin/pages/usage_results.html:7 +#, python-format +msgid "" +"\n" +" Page %(page_number)s of %(num_pages)s.\n" +" " +msgstr "" + +#: templates/wagtailadmin/pages/search_results.html:54 +#, python-format +msgid "Sorry, no pages match \"%(query_string)s\"" +msgstr "" + +#: templates/wagtailadmin/pages/search_results.html:56 +msgid "Enter a search term above" +msgstr "" + +#: templates/wagtailadmin/pages/usage_results.html:24 +msgid "No pages use" +msgstr "" + +#: templates/wagtailadmin/shared/breadcrumb.html:6 +msgid "Home" +msgstr "Главная" + +#: templates/wagtailadmin/shared/datetimepicker_translations.html:6 +msgid "January" +msgstr "" + +#: templates/wagtailadmin/shared/datetimepicker_translations.html:7 +msgid "February" +msgstr "" + +#: templates/wagtailadmin/shared/datetimepicker_translations.html:8 +msgid "March" +msgstr "" + +#: templates/wagtailadmin/shared/datetimepicker_translations.html:9 +msgid "April" +msgstr "" + +#: templates/wagtailadmin/shared/datetimepicker_translations.html:10 +msgid "May" +msgstr "" + +#: templates/wagtailadmin/shared/datetimepicker_translations.html:11 +msgid "June" +msgstr "" + +#: templates/wagtailadmin/shared/datetimepicker_translations.html:12 +msgid "July" +msgstr "" + +#: templates/wagtailadmin/shared/datetimepicker_translations.html:13 +msgid "August" +msgstr "" + +#: templates/wagtailadmin/shared/datetimepicker_translations.html:14 +msgid "September" +msgstr "" + +#: templates/wagtailadmin/shared/datetimepicker_translations.html:15 +msgid "October" +msgstr "" + +#: templates/wagtailadmin/shared/datetimepicker_translations.html:16 +msgid "November" +msgstr "" + +#: templates/wagtailadmin/shared/datetimepicker_translations.html:17 +msgid "December" +msgstr "" + +#: templates/wagtailadmin/shared/datetimepicker_translations.html:20 +msgid "Sun" +msgstr "" + +#: templates/wagtailadmin/shared/datetimepicker_translations.html:21 +msgid "Mon" +msgstr "" + +#: templates/wagtailadmin/shared/datetimepicker_translations.html:22 +msgid "Tue" +msgstr "" + +#: templates/wagtailadmin/shared/datetimepicker_translations.html:23 +msgid "Wed" +msgstr "" + +#: templates/wagtailadmin/shared/datetimepicker_translations.html:24 +msgid "Thu" +msgstr "" + +#: templates/wagtailadmin/shared/datetimepicker_translations.html:25 +msgid "Fri" +msgstr "" + +#: templates/wagtailadmin/shared/datetimepicker_translations.html:26 +msgid "Sat" +msgstr "" + +#: templates/wagtailadmin/shared/header.html:23 +#, python-format +msgid "Used %(useage_count)s time" +msgid_plural "Used %(useage_count)s times" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" + +#: templates/wagtailadmin/shared/main_nav.html:10 +msgid "Account settings" +msgstr "" + +#: templates/wagtailadmin/shared/main_nav.html:11 +msgid "Log out" +msgstr "Выйти" + +#: templates/wagtailadmin/shared/pagination_nav.html:16 +#, python-format +msgid "Page %(page_num)s of %(total_pages)s." +msgstr "" + +#: templates/wagtailadmin/userbar/base.html:4 +msgid "User bar" +msgstr "" + +#: templates/wagtailadmin/userbar/base.html:14 +msgid "Go to Wagtail admin interface" +msgstr "" + +#: templates/wagtailadmin/userbar/item_page_add.html:5 +msgid "Add another page at this level" +msgstr "" + +#: templates/wagtailadmin/userbar/item_page_add.html:5 +msgid "Add" +msgstr "" + +#: views/account.py:39 +msgid "Your password has been changed successfully!" +msgstr "Ваш пароль успешно изменен!" + +#: views/account.py:60 +msgid "Your preferences have been updated successfully!" +msgstr "" + +#: views/pages.py:167 views/pages.py:284 +msgid "Go live date/time must be before expiry date/time" +msgstr "" + +#: views/pages.py:177 views/pages.py:294 +msgid "Expiry date/time must be in the future" +msgstr "" + +#: views/pages.py:217 views/pages.py:349 views/pages.py:766 +msgid "Page '{0}' published." +msgstr "Страница '{0}' опубликована." + +#: views/pages.py:219 views/pages.py:351 +msgid "Page '{0}' submitted for moderation." +msgstr "" + +#: views/pages.py:222 +msgid "Page '{0}' created." +msgstr "Страница '{0}' создана." + +#: views/pages.py:231 +msgid "The page could not be created due to validation errors" +msgstr "" + +#: views/pages.py:354 +msgid "Page '{0}' updated." +msgstr "Страница '{0}' обновлена." + +#: views/pages.py:363 +msgid "The page could not be saved due to validation errors" +msgstr "" + +#: views/pages.py:376 +msgid "This page is currently awaiting moderation" +msgstr "" + +#: views/pages.py:407 +msgid "Page '{0}' deleted." +msgstr "Страница '{0}' удалена." + +#: views/pages.py:550 +msgid "Page '{0}' unpublished." +msgstr "" + +#: views/pages.py:602 +msgid "Page '{0}' moved." +msgstr "Страница '{0}' перемещена." + +#: views/pages.py:684 +msgid "Page '{0}' and {1} subpages copied." +msgstr "" + +#: views/pages.py:686 +msgid "Page '{0}' copied." +msgstr "" + +#: views/pages.py:760 views/pages.py:779 views/pages.py:799 +msgid "The page '{0}' is not currently awaiting moderation." +msgstr "" + +#: views/pages.py:785 +msgid "Page '{0}' rejected for publication." +msgstr "" diff --git a/wagtail/wagtailadmin/locale/vi/LC_MESSAGES/django.po b/wagtail/wagtailadmin/locale/vi/LC_MESSAGES/django.po new file mode 100644 index 0000000000..1a9224a59e --- /dev/null +++ b/wagtail/wagtailadmin/locale/vi/LC_MESSAGES/django.po @@ -0,0 +1,1058 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# +# Translators: +msgid "" +msgstr "" +"Project-Id-Version: Wagtail\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2014-09-11 16:37+0100\n" +"PO-Revision-Date: 2014-09-11 15:40+0000\n" +"Last-Translator: Karl Hobley \n" +"Language-Team: Vietnamese (http://www.transifex.com/projects/p/wagtail/language/vi/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: vi\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: edit_handlers.py:631 +msgid "Scheduled publishing" +msgstr "" + +#: edit_handlers.py:645 +msgid "Common page configuration" +msgstr "" + +#: forms.py:19 +msgid "Search term" +msgstr "" + +#: forms.py:43 +msgid "Enter your username" +msgstr "" + +#: forms.py:46 +msgid "Enter password" +msgstr "" + +#: forms.py:51 +msgid "Enter your email address to reset your password" +msgstr "" + +#: forms.py:60 +msgid "Please fill your email address." +msgstr "" + +#: forms.py:73 +msgid "" +"Sorry, you cannot reset your password here as your user account is managed " +"by another server." +msgstr "" + +#: forms.py:76 +msgid "This email address is not recognised." +msgstr "" + +#: forms.py:88 +msgid "New title" +msgstr "" + +#: forms.py:89 +msgid "New slug" +msgstr "" + +#: forms.py:95 +msgid "Copy subpages" +msgstr "" + +#: forms.py:97 +#, python-format +msgid "This will copy %(count)s subpage." +msgid_plural "This will copy %(count)s subpages." +msgstr[0] "" + +#: forms.py:106 +msgid "Publish copied page" +msgstr "" + +#: forms.py:107 +msgid "This page is live. Would you like to publish its copy as well?" +msgstr "" + +#: forms.py:109 +msgid "Publish copies" +msgstr "" + +#: forms.py:111 +#, python-format +msgid "" +"%(count)s of the pages being copied is live. Would you like to publish its " +"copy?" +msgid_plural "" +"%(count)s of the pages being copied are live. Would you like to publish " +"their copies?" +msgstr[0] "" + +#: forms.py:124 views/pages.py:153 views/pages.py:270 +msgid "This slug is already in use" +msgstr "" + +#: forms.py:130 templates/wagtailadmin/pages/_privacy_indicator.html:13 +#: templates/wagtailadmin/pages/_privacy_indicator.html:18 +msgid "Public" +msgstr "" + +#: forms.py:131 +msgid "Private, accessible with the following password" +msgstr "" + +#: forms.py:139 +msgid "This field is required." +msgstr "" + +#: wagtail_hooks.py:15 templates/wagtailadmin/chooser/_search_results.html:12 +msgid "Explorer" +msgstr "" + +#: wagtail_hooks.py:23 templates/wagtailadmin/chooser/_search_form.html:7 +#: templates/wagtailadmin/pages/search.html:3 +#: templates/wagtailadmin/pages/search.html:16 +msgid "Search" +msgstr "" + +#: templates/wagtailadmin/base.html:7 templates/wagtailadmin/home.html:4 +msgid "Dashboard" +msgstr "" + +#: templates/wagtailadmin/base.html:27 +msgid "Menu" +msgstr "" + +#: templates/wagtailadmin/home.html:22 +#, python-format +msgid "Welcome to the %(site_name)s Wagtail CMS" +msgstr "" + +#: templates/wagtailadmin/home.html:33 +msgid "" +"This is your dashboard on which helpful information about content you've " +"created will be displayed." +msgstr "" + +#: templates/wagtailadmin/login.html:4 templates/wagtailadmin/login.html:59 +msgid "Sign in" +msgstr "" + +#: templates/wagtailadmin/login.html:18 +msgid "Your username and password didn't match. Please try again." +msgstr "" + +#: templates/wagtailadmin/login.html:26 +msgid "Sign in to Wagtail" +msgstr "" + +#: templates/wagtailadmin/login.html:46 +msgid "Forgotten it?" +msgstr "" + +#: templates/wagtailadmin/account/account.html:4 +#: templates/wagtailadmin/account/account.html:6 +msgid "Account" +msgstr "" + +#: templates/wagtailadmin/account/account.html:13 +msgid "Set gravatar" +msgstr "" + +#: templates/wagtailadmin/account/account.html:17 +msgid "" +"Your avatar image is provided by Gravatar and is connected to your email " +"address. With a Gravatar account you can set an avatar for any number of " +"other email addresses you use." +msgstr "" + +#: templates/wagtailadmin/account/account.html:25 +#: templates/wagtailadmin/account/change_password.html:4 +#: templates/wagtailadmin/account/change_password.html:6 +msgid "Change password" +msgstr "" + +#: templates/wagtailadmin/account/account.html:29 +msgid "Change the password you use to log in." +msgstr "" + +#: templates/wagtailadmin/account/account.html:36 +msgid "Notification preferences" +msgstr "" + +#: templates/wagtailadmin/account/account.html:40 +msgid "Choose which email notifications to receive." +msgstr "" + +#: templates/wagtailadmin/account/change_password.html:18 +msgid "Change Password" +msgstr "" + +#: templates/wagtailadmin/account/change_password.html:21 +msgid "" +"Your password can't be changed here. Please contact a site administrator." +msgstr "" + +#: templates/wagtailadmin/account/notification_preferences.html:4 +#: templates/wagtailadmin/account/notification_preferences.html:6 +msgid "Notification Preferences" +msgstr "" + +#: templates/wagtailadmin/account/notification_preferences.html:16 +msgid "Update" +msgstr "" + +#: templates/wagtailadmin/account/password_reset/complete.html:4 +#: templates/wagtailadmin/account/password_reset/confirm.html:42 +#: templates/wagtailadmin/account/password_reset/done.html:4 +#: templates/wagtailadmin/account/password_reset/form.html:4 +#: templates/wagtailadmin/account/password_reset/form.html:37 +msgid "Reset password" +msgstr "" + +#: templates/wagtailadmin/account/password_reset/complete.html:15 +msgid "Password change successful" +msgstr "" + +#: templates/wagtailadmin/account/password_reset/complete.html:16 +msgid "Login" +msgstr "" + +#: templates/wagtailadmin/account/password_reset/confirm.html:4 +#: templates/wagtailadmin/account/password_reset/confirm.html:26 +msgid "Set your new password" +msgstr "" + +#: templates/wagtailadmin/account/password_reset/confirm.html:19 +msgid "The passwords do not match. Please try again." +msgstr "" + +#: templates/wagtailadmin/account/password_reset/done.html:15 +msgid "Check your email" +msgstr "" + +#: templates/wagtailadmin/account/password_reset/done.html:16 +msgid "A link to reset your password has been emailed to you." +msgstr "" + +#: templates/wagtailadmin/account/password_reset/email.txt:2 +msgid "Please follow the link below to reset your password" +msgstr "" + +#: templates/wagtailadmin/account/password_reset/email_subject.txt:2 +msgid "Password reset" +msgstr "" + +#: templates/wagtailadmin/account/password_reset/form.html:27 +msgid "Reset your password" +msgstr "" + +#: templates/wagtailadmin/chooser/_link_types.html:5 +#: templates/wagtailadmin/chooser/_link_types.html:7 +msgid "Internal link" +msgstr "" + +#: templates/wagtailadmin/chooser/_link_types.html:11 +#: templates/wagtailadmin/chooser/_link_types.html:13 +msgid "External link" +msgstr "" + +#: templates/wagtailadmin/chooser/_link_types.html:17 +#: templates/wagtailadmin/chooser/_link_types.html:19 +msgid "Email link" +msgstr "" + +#: templates/wagtailadmin/chooser/_search_results.html:5 +#, python-format +msgid "" +"\n" +" Only pages of type \"%(type)s\" may be chosen for this field. Search results will exclude pages of other types.\n" +" " +msgstr "" + +#: templates/wagtailadmin/chooser/_search_results.html:16 +#, python-format +msgid "" +"\n" +" There is one match\n" +" " +msgid_plural "" +"\n" +" There are %(counter)s matches\n" +" " +msgstr[0] "" + +#: templates/wagtailadmin/chooser/browse.html:3 +msgid "Choose" +msgstr "" + +#: templates/wagtailadmin/chooser/browse.html:6 +#: templates/wagtailadmin/chooser/search.html:2 +#: templates/wagtailadmin/edit_handlers/page_chooser_panel.html:13 +msgid "Choose a page" +msgstr "" + +#: templates/wagtailadmin/chooser/email_link.html:2 +msgid "Add an email link" +msgstr "" + +#: templates/wagtailadmin/chooser/email_link.html:14 +#: templates/wagtailadmin/chooser/external_link.html:14 +msgid "Insert link" +msgstr "" + +#: templates/wagtailadmin/chooser/external_link.html:2 +msgid "Add an external link" +msgstr "" + +#: templates/wagtailadmin/edit_handlers/chooser_panel.html:20 +msgid "Clear choice" +msgstr "" + +#: templates/wagtailadmin/edit_handlers/chooser_panel.html:22 +msgid "Choose another item" +msgstr "" + +#: templates/wagtailadmin/edit_handlers/chooser_panel.html:27 +msgid "Choose an item" +msgstr "" + +#: templates/wagtailadmin/edit_handlers/inline_panel_child.html:5 +msgid "Move up" +msgstr "" + +#: templates/wagtailadmin/edit_handlers/inline_panel_child.html:6 +msgid "Move down" +msgstr "" + +#: templates/wagtailadmin/edit_handlers/inline_panel_child.html:8 +#: templates/wagtailadmin/pages/confirm_delete.html:7 +#: templates/wagtailadmin/pages/edit.html:45 +#: templates/wagtailadmin/pages/list.html:84 +#: templates/wagtailadmin/pages/list.html:205 +msgid "Delete" +msgstr "" + +#: templates/wagtailadmin/edit_handlers/page_chooser_panel.html:12 +msgid "Choose another page" +msgstr "" + +#: templates/wagtailadmin/home/pages_for_moderation.html:5 +msgid "Pages awaiting moderation" +msgstr "" + +#: templates/wagtailadmin/home/pages_for_moderation.html:13 +#: templates/wagtailadmin/home/recent_edits.html:12 +#: templates/wagtailadmin/pages/list.html:121 +#: templates/wagtailadmin/pages/list.html:124 +msgid "Title" +msgstr "" + +#: templates/wagtailadmin/home/pages_for_moderation.html:14 +#: templates/wagtailadmin/pages/list.html:22 +msgid "Parent" +msgstr "" + +#: templates/wagtailadmin/home/pages_for_moderation.html:15 +#: templates/wagtailadmin/pages/list.html:24 +#: templates/wagtailadmin/pages/list.html:133 +#: templates/wagtailadmin/pages/list.html:136 +msgid "Type" +msgstr "" + +#: templates/wagtailadmin/home/pages_for_moderation.html:16 +msgid "Edited" +msgstr "" + +#: templates/wagtailadmin/home/pages_for_moderation.html:23 +#: templates/wagtailadmin/home/recent_edits.html:21 +#: templates/wagtailadmin/pages/list.html:176 +#: templates/wagtailadmin/pages/list.html:190 +msgid "Edit this page" +msgstr "" + +#: templates/wagtailadmin/home/pages_for_moderation.html:28 +#: templates/wagtailadmin/pages/_moderator_userbar.html:12 +#: templates/wagtailadmin/userbar/item_page_approve.html:8 +msgid "Approve" +msgstr "" + +#: templates/wagtailadmin/home/pages_for_moderation.html:34 +#: templates/wagtailadmin/pages/_moderator_userbar.html:17 +#: templates/wagtailadmin/userbar/item_page_reject.html:8 +msgid "Reject" +msgstr "" + +#: templates/wagtailadmin/home/pages_for_moderation.html:37 +#: templates/wagtailadmin/home/recent_edits.html:23 +#: templates/wagtailadmin/pages/_moderator_userbar.html:9 +#: templates/wagtailadmin/pages/list.html:72 +#: templates/wagtailadmin/pages/list.html:190 +#: templates/wagtailadmin/userbar/item_page_edit.html:5 +msgid "Edit" +msgstr "" + +#: templates/wagtailadmin/home/pages_for_moderation.html:38 +#: templates/wagtailadmin/pages/create.html:41 +#: templates/wagtailadmin/pages/edit.html:56 +#: templates/wagtailadmin/pages/preview.html:5 +msgid "Preview" +msgstr "" + +#: templates/wagtailadmin/home/recent_edits.html:5 +msgid "Your most recent edits" +msgstr "" + +#: templates/wagtailadmin/home/recent_edits.html:13 +msgid "Date" +msgstr "" + +#: templates/wagtailadmin/home/recent_edits.html:14 +#: templates/wagtailadmin/pages/edit.html:18 +#: templates/wagtailadmin/pages/list.html:25 +#: templates/wagtailadmin/pages/list.html:142 +#: templates/wagtailadmin/pages/list.html:145 +msgid "Status" +msgstr "" + +#: templates/wagtailadmin/home/recent_edits.html:25 +#: templates/wagtailadmin/pages/list.html:75 +#: templates/wagtailadmin/pages/list.html:193 +msgid "Draft" +msgstr "" + +#: templates/wagtailadmin/home/recent_edits.html:28 +#: templates/wagtailadmin/pages/list.html:78 +#: templates/wagtailadmin/pages/list.html:196 +msgid "Live" +msgstr "" + +#: templates/wagtailadmin/home/site_summary.html:3 +msgid "Site summary" +msgstr "" + +#: templates/wagtailadmin/home/site_summary.html:7 +#, python-format +msgid "" +"\n" +" %(total_pages)s Page\n" +" " +msgid_plural "" +"\n" +" %(total_pages)s Pages\n" +" " +msgstr[0] "" + +#: templates/wagtailadmin/home/site_summary.html:16 +#, python-format +msgid "" +"\n" +" %(total_images)s Image\n" +" " +msgid_plural "" +"\n" +" %(total_images)s Images\n" +" " +msgstr[0] "" + +#: templates/wagtailadmin/home/site_summary.html:25 +#, python-format +msgid "" +"\n" +" %(total_docs)s Document\n" +" " +msgid_plural "" +"\n" +" %(total_docs)s Documents\n" +" " +msgstr[0] "" + +#: templates/wagtailadmin/notifications/approved.html:1 +#, python-format +msgid "The page \"%(title)s\" has been approved" +msgstr "" + +#: templates/wagtailadmin/notifications/approved.html:2 +#, python-format +msgid "The page \"%(title)s\" has been approved." +msgstr "" + +#: templates/wagtailadmin/notifications/approved.html:4 +msgid "You can view the page here:" +msgstr "" + +#: templates/wagtailadmin/notifications/base_notification.html:3 +msgid "Edit your notification preferences here:" +msgstr "" + +#: templates/wagtailadmin/notifications/rejected.html:1 +#, python-format +msgid "The page \"%(title)s\" has been rejected" +msgstr "" + +#: templates/wagtailadmin/notifications/rejected.html:2 +#, python-format +msgid "The page \"%(title)s\" has been rejected." +msgstr "" + +#: templates/wagtailadmin/notifications/rejected.html:4 +#: templates/wagtailadmin/notifications/submitted.html:5 +msgid "You can edit the page here:" +msgstr "" + +#: templates/wagtailadmin/notifications/submitted.html:1 +#, python-format +msgid "The page \"%(page)s\" has been submitted for moderation" +msgstr "" + +#: templates/wagtailadmin/notifications/submitted.html:2 +#, python-format +msgid "The page \"%(page)s\" has been submitted for moderation." +msgstr "" + +#: templates/wagtailadmin/notifications/submitted.html:4 +msgid "You can preview the page here:" +msgstr "" + +#: templates/wagtailadmin/page_privacy/ancestor_privacy.html:2 +#: templates/wagtailadmin/page_privacy/set_privacy.html:2 +msgid "Page privacy" +msgstr "" + +#: templates/wagtailadmin/page_privacy/ancestor_privacy.html:6 +msgid "This page has been made private by a parent page." +msgstr "" + +#: templates/wagtailadmin/page_privacy/ancestor_privacy.html:7 +msgid "You can edit the privacy settings on:" +msgstr "" + +#: templates/wagtailadmin/page_privacy/set_privacy.html:6 +msgid "Privacy changes apply to all children of this page too." +msgstr "" + +#: templates/wagtailadmin/pages/_moderator_userbar.html:4 +#, python-format +msgid "" +"\n" +" Previewing '%(title)s', submitted by %(submitted_by)s on %(submitted_on)s.\n" +" " +msgstr "" + +#: templates/wagtailadmin/pages/_privacy_indicator.html:9 +msgid "Privacy" +msgstr "" + +#: templates/wagtailadmin/pages/_privacy_indicator.html:14 +#: templates/wagtailadmin/pages/_privacy_indicator.html:20 +msgid "Private" +msgstr "" + +#: templates/wagtailadmin/pages/add_subpage.html:6 +#, python-format +msgid "Create a page in %(title)s" +msgstr "" + +#: templates/wagtailadmin/pages/add_subpage.html:9 +msgid "Create a page in" +msgstr "" + +#: templates/wagtailadmin/pages/add_subpage.html:13 +msgid "Choose which type of page you'd like to create." +msgstr "" + +#: templates/wagtailadmin/pages/add_subpage.html:26 +#, python-format +msgid "Pages using %(page_type)s" +msgstr "" + +#: templates/wagtailadmin/pages/confirm_delete.html:3 +#, python-format +msgid "Delete %(title)s" +msgstr "" + +#: templates/wagtailadmin/pages/confirm_delete.html:12 +msgid "Are you sure you want to delete this page?" +msgstr "" + +#: templates/wagtailadmin/pages/confirm_delete.html:14 +#, python-format +msgid "" +"\n" +" This will also delete one more subpage.\n" +" " +msgid_plural "" +"\n" +" This will also delete %(descendant_count)s more subpages.\n" +" " +msgstr[0] "" + +#: templates/wagtailadmin/pages/confirm_delete.html:22 +msgid "" +"Alternatively you can unpublish the page. This removes the page from public " +"view and you can edit or publish it again later." +msgstr "" + +#: templates/wagtailadmin/pages/confirm_delete.html:26 +msgid "Delete it" +msgstr "" + +#: templates/wagtailadmin/pages/confirm_delete.html:26 +msgid "Unpublish it" +msgstr "" + +#: templates/wagtailadmin/pages/confirm_move.html:3 +#, python-format +msgid "Move %(title)s" +msgstr "" + +#: templates/wagtailadmin/pages/confirm_move.html:6 +#: templates/wagtailadmin/pages/list.html:81 +#: templates/wagtailadmin/pages/list.html:199 +msgid "Move" +msgstr "" + +#: templates/wagtailadmin/pages/confirm_move.html:11 +#, python-format +msgid "Are you sure you want to move this page into '%(title)s'?" +msgstr "" + +#: templates/wagtailadmin/pages/confirm_move.html:13 +#, python-format +msgid "" +"Are you sure you want to move this page and all of its children into " +"'%(title)s'?" +msgstr "" + +#: templates/wagtailadmin/pages/confirm_move.html:18 +msgid "Yes, move this page" +msgstr "" + +#: templates/wagtailadmin/pages/confirm_unpublish.html:3 +#, python-format +msgid "Unpublish %(title)s" +msgstr "" + +#: templates/wagtailadmin/pages/confirm_unpublish.html:6 +#: templates/wagtailadmin/pages/edit.html:42 +#: templates/wagtailadmin/pages/list.html:87 +#: templates/wagtailadmin/pages/list.html:208 +msgid "Unpublish" +msgstr "" + +#: templates/wagtailadmin/pages/confirm_unpublish.html:10 +msgid "Are you sure you want to unpublish this page?" +msgstr "" + +#: templates/wagtailadmin/pages/confirm_unpublish.html:13 +msgid "Yes, unpublish it" +msgstr "" + +#: templates/wagtailadmin/pages/content_type_use.html:7 +msgid "Pages using" +msgstr "" + +#: templates/wagtailadmin/pages/copy.html:3 +#, python-format +msgid "Copy %(title)s" +msgstr "" + +#: templates/wagtailadmin/pages/copy.html:6 +#: templates/wagtailadmin/pages/list.html:202 +msgid "Copy" +msgstr "" + +#: templates/wagtailadmin/pages/copy.html:26 +msgid "Copy this page" +msgstr "" + +#: templates/wagtailadmin/pages/create.html:5 +#, python-format +msgid "New %(page_type)s" +msgstr "" + +#: templates/wagtailadmin/pages/create.html:15 +msgid "New" +msgstr "" + +#: templates/wagtailadmin/pages/create.html:29 +msgid "Save as draft" +msgstr "" + +#: templates/wagtailadmin/pages/create.html:33 +#: templates/wagtailadmin/pages/edit.html:48 +msgid "Publish" +msgstr "" + +#: templates/wagtailadmin/pages/create.html:35 +#: templates/wagtailadmin/pages/edit.html:50 +msgid "Submit for moderation" +msgstr "" + +#: templates/wagtailadmin/pages/edit.html:5 +#, python-format +msgid "Editing %(title)s" +msgstr "" + +#: templates/wagtailadmin/pages/edit.html:15 +#, python-format +msgid "Editing %(title)s" +msgstr "" + +#: templates/wagtailadmin/pages/edit.html:38 +msgid "Save draft" +msgstr "" + +#: templates/wagtailadmin/pages/edit.html:77 +#, python-format +msgid "Last modified: %(last_mod)s" +msgstr "" + +#: templates/wagtailadmin/pages/edit.html:79 +#, python-format +msgid "by %(modified_by)s" +msgstr "" + +#: templates/wagtailadmin/pages/index.html:3 +#, python-format +msgid "Exploring %(title)s" +msgstr "" + +#: templates/wagtailadmin/pages/list.html:90 +#: templates/wagtailadmin/pages/list.html:211 +msgid "Add child page" +msgstr "" + +#: templates/wagtailadmin/pages/list.html:112 +msgid "Disable ordering of child pages" +msgstr "" + +#: templates/wagtailadmin/pages/list.html:112 +#: templates/wagtailadmin/pages/list.html:114 +msgid "Order" +msgstr "" + +#: templates/wagtailadmin/pages/list.html:114 +msgid "Enable ordering of child pages" +msgstr "" + +#: templates/wagtailadmin/pages/list.html:158 +msgid "Drag" +msgstr "" + +#: templates/wagtailadmin/pages/list.html:237 +#: templates/wagtailadmin/pages/list.html:241 +#, python-format +msgid "Explorer subpages of '%(title)s'" +msgstr "" + +#: templates/wagtailadmin/pages/list.html:237 +#: templates/wagtailadmin/pages/list.html:241 +#: templates/wagtailadmin/pages/list.html:245 +msgid "Explore" +msgstr "" + +#: templates/wagtailadmin/pages/list.html:245 +#, python-format +msgid "Explore child pages of '%(title)s'" +msgstr "" + +#: templates/wagtailadmin/pages/list.html:247 +#, python-format +msgid "Add a child page to '%(title)s'" +msgstr "" + +#: templates/wagtailadmin/pages/list.html:247 +msgid "Add subpage" +msgstr "" + +#: templates/wagtailadmin/pages/list.html:256 +msgid "No pages have been created." +msgstr "" + +#: templates/wagtailadmin/pages/list.html:256 +#, python-format +msgid "Why not add one?" +msgstr "" + +#: templates/wagtailadmin/pages/list.html:263 +#, python-format +msgid "" +"\n" +" Page %(page_number)s of %(num_pages)s.\n" +" " +msgstr "" + +#: templates/wagtailadmin/pages/list.html:269 +#: templates/wagtailadmin/pages/search_results.html:35 +#: templates/wagtailadmin/pages/search_results.html:37 +#: templates/wagtailadmin/pages/usage_results.html:13 +#: templates/wagtailadmin/shared/pagination_nav.html:21 +#: templates/wagtailadmin/shared/pagination_nav.html:23 +#: templates/wagtailadmin/shared/pagination_nav.html:25 +msgid "Previous" +msgstr "" + +#: templates/wagtailadmin/pages/list.html:274 +#: templates/wagtailadmin/pages/search_results.html:44 +#: templates/wagtailadmin/pages/search_results.html:46 +#: templates/wagtailadmin/pages/usage_results.html:18 +#: templates/wagtailadmin/shared/pagination_nav.html:32 +#: templates/wagtailadmin/shared/pagination_nav.html:34 +#: templates/wagtailadmin/shared/pagination_nav.html:36 +msgid "Next" +msgstr "" + +#: templates/wagtailadmin/pages/move_choose_destination.html:3 +#, python-format +msgid "Select a new parent page for %(title)s" +msgstr "" + +#: templates/wagtailadmin/pages/move_choose_destination.html:7 +#, python-format +msgid "Select a new parent page for %(title)s" +msgstr "" + +#: templates/wagtailadmin/pages/search_results.html:6 +#, python-format +msgid "" +"\n" +" There is one matching page\n" +" " +msgid_plural "" +"\n" +" There are %(counter)s matching pages\n" +" " +msgstr[0] "" + +#: templates/wagtailadmin/pages/search_results.html:16 +msgid "Other searches" +msgstr "" + +#: templates/wagtailadmin/pages/search_results.html:18 +msgid "Images" +msgstr "" + +#: templates/wagtailadmin/pages/search_results.html:19 +msgid "Documents" +msgstr "" + +#: templates/wagtailadmin/pages/search_results.html:20 +msgid "Users" +msgstr "" + +#: templates/wagtailadmin/pages/search_results.html:28 +#: templates/wagtailadmin/pages/usage_results.html:7 +#, python-format +msgid "" +"\n" +" Page %(page_number)s of %(num_pages)s.\n" +" " +msgstr "" + +#: templates/wagtailadmin/pages/search_results.html:54 +#, python-format +msgid "Sorry, no pages match \"%(query_string)s\"" +msgstr "" + +#: templates/wagtailadmin/pages/search_results.html:56 +msgid "Enter a search term above" +msgstr "" + +#: templates/wagtailadmin/pages/usage_results.html:24 +msgid "No pages use" +msgstr "" + +#: templates/wagtailadmin/shared/breadcrumb.html:6 +msgid "Home" +msgstr "" + +#: templates/wagtailadmin/shared/datetimepicker_translations.html:6 +msgid "January" +msgstr "" + +#: templates/wagtailadmin/shared/datetimepicker_translations.html:7 +msgid "February" +msgstr "" + +#: templates/wagtailadmin/shared/datetimepicker_translations.html:8 +msgid "March" +msgstr "" + +#: templates/wagtailadmin/shared/datetimepicker_translations.html:9 +msgid "April" +msgstr "" + +#: templates/wagtailadmin/shared/datetimepicker_translations.html:10 +msgid "May" +msgstr "" + +#: templates/wagtailadmin/shared/datetimepicker_translations.html:11 +msgid "June" +msgstr "" + +#: templates/wagtailadmin/shared/datetimepicker_translations.html:12 +msgid "July" +msgstr "" + +#: templates/wagtailadmin/shared/datetimepicker_translations.html:13 +msgid "August" +msgstr "" + +#: templates/wagtailadmin/shared/datetimepicker_translations.html:14 +msgid "September" +msgstr "" + +#: templates/wagtailadmin/shared/datetimepicker_translations.html:15 +msgid "October" +msgstr "" + +#: templates/wagtailadmin/shared/datetimepicker_translations.html:16 +msgid "November" +msgstr "" + +#: templates/wagtailadmin/shared/datetimepicker_translations.html:17 +msgid "December" +msgstr "" + +#: templates/wagtailadmin/shared/datetimepicker_translations.html:20 +msgid "Sun" +msgstr "" + +#: templates/wagtailadmin/shared/datetimepicker_translations.html:21 +msgid "Mon" +msgstr "" + +#: templates/wagtailadmin/shared/datetimepicker_translations.html:22 +msgid "Tue" +msgstr "" + +#: templates/wagtailadmin/shared/datetimepicker_translations.html:23 +msgid "Wed" +msgstr "" + +#: templates/wagtailadmin/shared/datetimepicker_translations.html:24 +msgid "Thu" +msgstr "" + +#: templates/wagtailadmin/shared/datetimepicker_translations.html:25 +msgid "Fri" +msgstr "" + +#: templates/wagtailadmin/shared/datetimepicker_translations.html:26 +msgid "Sat" +msgstr "" + +#: templates/wagtailadmin/shared/header.html:23 +#, python-format +msgid "Used %(useage_count)s time" +msgid_plural "Used %(useage_count)s times" +msgstr[0] "" + +#: templates/wagtailadmin/shared/main_nav.html:10 +msgid "Account settings" +msgstr "" + +#: templates/wagtailadmin/shared/main_nav.html:11 +msgid "Log out" +msgstr "" + +#: templates/wagtailadmin/shared/pagination_nav.html:16 +#, python-format +msgid "Page %(page_num)s of %(total_pages)s." +msgstr "" + +#: templates/wagtailadmin/userbar/base.html:4 +msgid "User bar" +msgstr "" + +#: templates/wagtailadmin/userbar/base.html:14 +msgid "Go to Wagtail admin interface" +msgstr "" + +#: templates/wagtailadmin/userbar/item_page_add.html:5 +msgid "Add another page at this level" +msgstr "" + +#: templates/wagtailadmin/userbar/item_page_add.html:5 +msgid "Add" +msgstr "" + +#: views/account.py:39 +msgid "Your password has been changed successfully!" +msgstr "" + +#: views/account.py:60 +msgid "Your preferences have been updated successfully!" +msgstr "" + +#: views/pages.py:167 views/pages.py:284 +msgid "Go live date/time must be before expiry date/time" +msgstr "" + +#: views/pages.py:177 views/pages.py:294 +msgid "Expiry date/time must be in the future" +msgstr "" + +#: views/pages.py:217 views/pages.py:349 views/pages.py:766 +msgid "Page '{0}' published." +msgstr "" + +#: views/pages.py:219 views/pages.py:351 +msgid "Page '{0}' submitted for moderation." +msgstr "" + +#: views/pages.py:222 +msgid "Page '{0}' created." +msgstr "" + +#: views/pages.py:231 +msgid "The page could not be created due to validation errors" +msgstr "" + +#: views/pages.py:354 +msgid "Page '{0}' updated." +msgstr "" + +#: views/pages.py:363 +msgid "The page could not be saved due to validation errors" +msgstr "" + +#: views/pages.py:376 +msgid "This page is currently awaiting moderation" +msgstr "" + +#: views/pages.py:407 +msgid "Page '{0}' deleted." +msgstr "" + +#: views/pages.py:550 +msgid "Page '{0}' unpublished." +msgstr "" + +#: views/pages.py:602 +msgid "Page '{0}' moved." +msgstr "" + +#: views/pages.py:684 +msgid "Page '{0}' and {1} subpages copied." +msgstr "" + +#: views/pages.py:686 +msgid "Page '{0}' copied." +msgstr "" + +#: views/pages.py:760 views/pages.py:779 views/pages.py:799 +msgid "The page '{0}' is not currently awaiting moderation." +msgstr "" + +#: views/pages.py:785 +msgid "Page '{0}' rejected for publication." +msgstr "" diff --git a/wagtail/wagtailcore/locale/pt_BR/LC_MESSAGES/django.po b/wagtail/wagtailcore/locale/pt_BR/LC_MESSAGES/django.po new file mode 100644 index 0000000000..a0c78fcccf --- /dev/null +++ b/wagtail/wagtailcore/locale/pt_BR/LC_MESSAGES/django.po @@ -0,0 +1,81 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# +# Translators: +# Thiago Cangussu , 2014 +# Gladson , 2014 +msgid "" +msgstr "" +"Project-Id-Version: Wagtail\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2014-09-11 16:37+0100\n" +"PO-Revision-Date: 2014-08-17 01:02+0000\n" +"Last-Translator: Gladson \n" +"Language-Team: Portuguese (Brazil) (http://www.transifex.com/projects/p/wagtail/language/pt_BR/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: pt_BR\n" +"Plural-Forms: nplurals=2; plural=(n > 1);\n" + +#: models.py:45 +msgid "" +"Set this to something other than 80 if you need a specific port number to " +"appear in URLs (e.g. development on port 8000). Does not affect request " +"handling (so port forwarding still works)." +msgstr "Ajuste para um valor diferente de 80 se você precisar de um número de porta específico para aparecer nas URLs (ex. desenvolvimento na porta 8000). Não afeta o gerenciamento de requisições (então o redirecionamento de portas continua funcionando)." + +#: models.py:47 +msgid "" +"If true, this site will handle requests for all other hostnames that do not " +"have a site entry of their own" +msgstr "Se verdadeiro, este site irá gerenciar requisições de todos os outros hostnames que não tem um site próprio" + +#: models.py:108 +#, python-format +msgid "" +"%(hostname)s is already configured as the default site. You must unset that " +"before you can save this site as default." +msgstr "%(hostname)s já está configurado como padrão no site. Você deve desconfigurar antes que você possa salvar este como padrão." + +#: models.py:251 +msgid "The page title as you'd like it to be seen by the public" +msgstr "O título da página como você gostaria que fosse visto pelo público" + +#: models.py:252 +msgid "" +"The name of the page as it will appear in URLs e.g http://domain.com/blog" +"/[my-slug]/" +msgstr "O nome da página como ele irá aparecer nas URLs ex.: http://domain.com/blog/[my-slug]/" + +#: models.py:261 +msgid "Page title" +msgstr "Título da página" + +#: models.py:261 +msgid "" +"Optional. 'Search Engine Friendly' title. This will appear at the top of the" +" browser window." +msgstr "Opcional. Título 'Amigável para Mecanismos de Busca'. Isto irá aparecer no topo da janela do navegador." + +#: models.py:262 +msgid "" +"Whether a link to this page will appear in automatically generated menus" +msgstr "Um link para esta página irá aparecer nos menus gerados automaticamente" + +#: models.py:265 +msgid "Go live date/time" +msgstr "" + +#: models.py:265 models.py:266 +msgid "Please add a date-time in the form YYYY-MM-DD hh:mm:ss." +msgstr "Por favor add uma data-hora no formato YYYY-MM-DD hh:mm:ss." + +#: models.py:266 +msgid "Expiry date/time" +msgstr "Validade data/hora" + +#: models.py:530 +msgid "name '{0}' (used in subpage_types list) is not defined." +msgstr "nome '{0}' (used in subpage_types list) não está definido." diff --git a/wagtail/wagtailcore/locale/ru/LC_MESSAGES/django.po b/wagtail/wagtailcore/locale/ru/LC_MESSAGES/django.po new file mode 100644 index 0000000000..2ee0191715 --- /dev/null +++ b/wagtail/wagtailcore/locale/ru/LC_MESSAGES/django.po @@ -0,0 +1,80 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# +# Translators: +# ajk, 2014 +msgid "" +msgstr "" +"Project-Id-Version: Wagtail\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2014-09-11 16:37+0100\n" +"PO-Revision-Date: 2014-08-01 15:43+0000\n" +"Last-Translator: Karl Hobley \n" +"Language-Team: Russian (http://www.transifex.com/projects/p/wagtail/language/ru/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: ru\n" +"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" + +#: models.py:45 +msgid "" +"Set this to something other than 80 if you need a specific port number to " +"appear in URLs (e.g. development on port 8000). Does not affect request " +"handling (so port forwarding still works)." +msgstr "" + +#: models.py:47 +msgid "" +"If true, this site will handle requests for all other hostnames that do not " +"have a site entry of their own" +msgstr "" + +#: models.py:108 +#, python-format +msgid "" +"%(hostname)s is already configured as the default site. You must unset that " +"before you can save this site as default." +msgstr "" + +#: models.py:251 +msgid "The page title as you'd like it to be seen by the public" +msgstr "" + +#: models.py:252 +msgid "" +"The name of the page as it will appear in URLs e.g http://domain.com/blog" +"/[my-slug]/" +msgstr "Имя страницы, которое будет отображаться в URL, например http://domain.com/blog/[my-slug]/" + +#: models.py:261 +msgid "Page title" +msgstr "Заголовок страницы" + +#: models.py:261 +msgid "" +"Optional. 'Search Engine Friendly' title. This will appear at the top of the" +" browser window." +msgstr "" + +#: models.py:262 +msgid "" +"Whether a link to this page will appear in automatically generated menus" +msgstr "Должна ли ссылка на эту страницу отображаться в автоматически генерируемых меню" + +#: models.py:265 +msgid "Go live date/time" +msgstr "" + +#: models.py:265 models.py:266 +msgid "Please add a date-time in the form YYYY-MM-DD hh:mm:ss." +msgstr "" + +#: models.py:266 +msgid "Expiry date/time" +msgstr "" + +#: models.py:530 +msgid "name '{0}' (used in subpage_types list) is not defined." +msgstr "" diff --git a/wagtail/wagtailcore/locale/vi/LC_MESSAGES/django.po b/wagtail/wagtailcore/locale/vi/LC_MESSAGES/django.po new file mode 100644 index 0000000000..2465e6100e --- /dev/null +++ b/wagtail/wagtailcore/locale/vi/LC_MESSAGES/django.po @@ -0,0 +1,79 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# +# Translators: +msgid "" +msgstr "" +"Project-Id-Version: Wagtail\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2014-09-11 16:37+0100\n" +"PO-Revision-Date: 2014-08-01 15:43+0000\n" +"Last-Translator: Karl Hobley \n" +"Language-Team: Vietnamese (http://www.transifex.com/projects/p/wagtail/language/vi/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: vi\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: models.py:45 +msgid "" +"Set this to something other than 80 if you need a specific port number to " +"appear in URLs (e.g. development on port 8000). Does not affect request " +"handling (so port forwarding still works)." +msgstr "" + +#: models.py:47 +msgid "" +"If true, this site will handle requests for all other hostnames that do not " +"have a site entry of their own" +msgstr "" + +#: models.py:108 +#, python-format +msgid "" +"%(hostname)s is already configured as the default site. You must unset that " +"before you can save this site as default." +msgstr "" + +#: models.py:251 +msgid "The page title as you'd like it to be seen by the public" +msgstr "" + +#: models.py:252 +msgid "" +"The name of the page as it will appear in URLs e.g http://domain.com/blog" +"/[my-slug]/" +msgstr "" + +#: models.py:261 +msgid "Page title" +msgstr "" + +#: models.py:261 +msgid "" +"Optional. 'Search Engine Friendly' title. This will appear at the top of the" +" browser window." +msgstr "" + +#: models.py:262 +msgid "" +"Whether a link to this page will appear in automatically generated menus" +msgstr "" + +#: models.py:265 +msgid "Go live date/time" +msgstr "" + +#: models.py:265 models.py:266 +msgid "Please add a date-time in the form YYYY-MM-DD hh:mm:ss." +msgstr "" + +#: models.py:266 +msgid "Expiry date/time" +msgstr "" + +#: models.py:530 +msgid "name '{0}' (used in subpage_types list) is not defined." +msgstr "" diff --git a/wagtail/wagtaildocs/locale/pt_BR/LC_MESSAGES/django.po b/wagtail/wagtaildocs/locale/pt_BR/LC_MESSAGES/django.po new file mode 100644 index 0000000000..e71a1f87aa --- /dev/null +++ b/wagtail/wagtaildocs/locale/pt_BR/LC_MESSAGES/django.po @@ -0,0 +1,186 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# +# Translators: +# Thiago Cangussu , 2014 +msgid "" +msgstr "" +"Project-Id-Version: Wagtail\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2014-09-11 16:38+0100\n" +"PO-Revision-Date: 2014-08-01 15:43+0000\n" +"Last-Translator: Karl Hobley \n" +"Language-Team: Portuguese (Brazil) (http://www.transifex.com/projects/p/wagtail/language/pt_BR/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: pt_BR\n" +"Plural-Forms: nplurals=2; plural=(n > 1);\n" + +#: models.py:21 templates/wagtaildocs/documents/list.html:11 +#: templates/wagtaildocs/documents/list.html:14 +#: templates/wagtaildocs/documents/usage.html:16 +msgid "Title" +msgstr "Título" + +#: models.py:22 templates/wagtaildocs/documents/list.html:17 +msgid "File" +msgstr "Arquivo" + +#: models.py:26 +msgid "Tags" +msgstr "Etiquetas" + +#: wagtail_hooks.py:26 templates/wagtaildocs/documents/index.html:16 +msgid "Documents" +msgstr "Documentos" + +#: templates/wagtaildocs/chooser/chooser.html:2 +#: templates/wagtaildocs/edit_handlers/document_chooser_panel.html:11 +msgid "Choose a document" +msgstr "Escolha um documento" + +#: templates/wagtaildocs/chooser/chooser.html:7 +#: templates/wagtaildocs/chooser/chooser.html:19 +msgid "Search" +msgstr "Buscar" + +#: templates/wagtaildocs/chooser/chooser.html:8 +msgid "Upload" +msgstr "Enviar" + +#: templates/wagtaildocs/chooser/chooser.html:34 +#: templates/wagtaildocs/documents/add.html:25 +#: templates/wagtaildocs/documents/edit.html:29 +msgid "Save" +msgstr "Salvar" + +#: templates/wagtaildocs/chooser/results.html:5 +#: templates/wagtaildocs/documents/results.html:5 +#, python-format +msgid "" +"\n" +" There is one match\n" +" " +msgid_plural "" +"\n" +" There are %(counter)s matches\n" +" " +msgstr[0] "\n Há um resultado\n " +msgstr[1] "\n Há %(counter)s resultados\n " + +#: templates/wagtaildocs/chooser/results.html:12 +msgid "Latest documents" +msgstr "Últimos documentos" + +#: templates/wagtaildocs/chooser/results.html:19 +#: templates/wagtaildocs/documents/results.html:18 +#, python-format +msgid "Sorry, no documents match \"%(query_string)s\"" +msgstr "Desculpe, não há resultados para \"%(query_string)s\"" + +#: templates/wagtaildocs/documents/_file_field.html:5 +msgid "Change document:" +msgstr "Alterar documento" + +#: templates/wagtaildocs/documents/add.html:4 +#: templates/wagtaildocs/documents/index.html:17 +msgid "Add a document" +msgstr "Adicionar um documento" + +#: templates/wagtaildocs/documents/add.html:15 +msgid "Add document" +msgstr "Adicionar documento" + +#: templates/wagtaildocs/documents/confirm_delete.html:3 +#, python-format +msgid "Delete %(title)s" +msgstr "Apagar %(title)s" + +#: templates/wagtaildocs/documents/confirm_delete.html:6 +#: templates/wagtaildocs/documents/edit.html:29 +msgid "Delete document" +msgstr "Apagar documento" + +#: templates/wagtaildocs/documents/confirm_delete.html:10 +msgid "Are you sure you want to delete this document?" +msgstr "Você tem certeza que deseja apagar este documento?" + +#: templates/wagtaildocs/documents/confirm_delete.html:13 +msgid "Yes, delete" +msgstr "Sim, apague" + +#: templates/wagtaildocs/documents/edit.html:4 +#, python-format +msgid "Editing %(title)s" +msgstr "Editando %(title)s" + +#: templates/wagtaildocs/documents/edit.html:15 +msgid "Editing" +msgstr "Editando" + +#: templates/wagtaildocs/documents/list.html:21 +#: templates/wagtaildocs/documents/list.html:24 +msgid "Uploaded" +msgstr "Enviados" + +#: templates/wagtaildocs/documents/results.html:21 +#, python-format +msgid "" +"You haven't uploaded any documents. Why not upload one now?" +msgstr "Você não enviou nenhum documento. Por que não enviar um agora?" + +#: templates/wagtaildocs/documents/usage.html:3 +#, python-format +msgid "Usage of %(title)s" +msgstr "" + +#: templates/wagtaildocs/documents/usage.html:5 +msgid "Usage of" +msgstr "" + +#: templates/wagtaildocs/documents/usage.html:17 +msgid "Parent" +msgstr "" + +#: templates/wagtaildocs/documents/usage.html:18 +msgid "Type" +msgstr "" + +#: templates/wagtaildocs/documents/usage.html:19 +msgid "Status" +msgstr "" + +#: templates/wagtaildocs/documents/usage.html:26 +msgid "Edit this page" +msgstr "" + +#: templates/wagtaildocs/edit_handlers/document_chooser_panel.html:9 +msgid "Clear choice" +msgstr "Limpar escolha" + +#: templates/wagtaildocs/edit_handlers/document_chooser_panel.html:10 +msgid "Choose another document" +msgstr "Escolha um outro documento" + +#: views/documents.py:38 views/documents.py:47 +msgid "Search documents" +msgstr "Buscar documentos" + +#: views/documents.py:92 +msgid "Document '{0}' added." +msgstr "Documento '{0}' adicionado." + +#: views/documents.py:95 views/documents.py:129 +msgid "The document could not be saved due to errors." +msgstr "O documento não pôde ser salvo devido à erros." + +#: views/documents.py:126 +msgid "Document '{0}' updated" +msgstr "Documento '{0}' atualizado" + +#: views/documents.py:148 +msgid "Document '{0}' deleted." +msgstr "Documento '{0}' apagado." diff --git a/wagtail/wagtaildocs/locale/ru/LC_MESSAGES/django.po b/wagtail/wagtaildocs/locale/ru/LC_MESSAGES/django.po new file mode 100644 index 0000000000..8a11861fa8 --- /dev/null +++ b/wagtail/wagtaildocs/locale/ru/LC_MESSAGES/django.po @@ -0,0 +1,187 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# +# Translators: +# HNKNTA , 2014 +msgid "" +msgstr "" +"Project-Id-Version: Wagtail\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2014-09-11 16:38+0100\n" +"PO-Revision-Date: 2014-08-01 15:43+0000\n" +"Last-Translator: Karl Hobley \n" +"Language-Team: Russian (http://www.transifex.com/projects/p/wagtail/language/ru/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: ru\n" +"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" + +#: models.py:21 templates/wagtaildocs/documents/list.html:11 +#: templates/wagtaildocs/documents/list.html:14 +#: templates/wagtaildocs/documents/usage.html:16 +msgid "Title" +msgstr "Заголовок" + +#: models.py:22 templates/wagtaildocs/documents/list.html:17 +msgid "File" +msgstr "Файл" + +#: models.py:26 +msgid "Tags" +msgstr "Тэги" + +#: wagtail_hooks.py:26 templates/wagtaildocs/documents/index.html:16 +msgid "Documents" +msgstr "Документы" + +#: templates/wagtaildocs/chooser/chooser.html:2 +#: templates/wagtaildocs/edit_handlers/document_chooser_panel.html:11 +msgid "Choose a document" +msgstr "Выберите документ" + +#: templates/wagtaildocs/chooser/chooser.html:7 +#: templates/wagtaildocs/chooser/chooser.html:19 +msgid "Search" +msgstr "Поиск" + +#: templates/wagtaildocs/chooser/chooser.html:8 +msgid "Upload" +msgstr "Загрузка" + +#: templates/wagtaildocs/chooser/chooser.html:34 +#: templates/wagtaildocs/documents/add.html:25 +#: templates/wagtaildocs/documents/edit.html:29 +msgid "Save" +msgstr "Сохранить" + +#: templates/wagtaildocs/chooser/results.html:5 +#: templates/wagtaildocs/documents/results.html:5 +#, python-format +msgid "" +"\n" +" There is one match\n" +" " +msgid_plural "" +"\n" +" There are %(counter)s matches\n" +" " +msgstr[0] "\nНайдено одно совпадение" +msgstr[1] "\nНайдено %(counter)s совпадений" +msgstr[2] "\nНайдено %(counter)s совпадений" + +#: templates/wagtaildocs/chooser/results.html:12 +msgid "Latest documents" +msgstr "Последние документы" + +#: templates/wagtaildocs/chooser/results.html:19 +#: templates/wagtaildocs/documents/results.html:18 +#, python-format +msgid "Sorry, no documents match \"%(query_string)s\"" +msgstr "Извините, подходящих документов не найдено \"%(query_string)s\"" + +#: templates/wagtaildocs/documents/_file_field.html:5 +msgid "Change document:" +msgstr "Изменить документ" + +#: templates/wagtaildocs/documents/add.html:4 +#: templates/wagtaildocs/documents/index.html:17 +msgid "Add a document" +msgstr "Добавить документ" + +#: templates/wagtaildocs/documents/add.html:15 +msgid "Add document" +msgstr "Добавить документ" + +#: templates/wagtaildocs/documents/confirm_delete.html:3 +#, python-format +msgid "Delete %(title)s" +msgstr "Удалить %(title)s" + +#: templates/wagtaildocs/documents/confirm_delete.html:6 +#: templates/wagtaildocs/documents/edit.html:29 +msgid "Delete document" +msgstr "Удалить документ" + +#: templates/wagtaildocs/documents/confirm_delete.html:10 +msgid "Are you sure you want to delete this document?" +msgstr "Вы уверены, что хотите удалить этот документ?" + +#: templates/wagtaildocs/documents/confirm_delete.html:13 +msgid "Yes, delete" +msgstr "Да, удалить" + +#: templates/wagtaildocs/documents/edit.html:4 +#, python-format +msgid "Editing %(title)s" +msgstr "Редактирование %(title)s" + +#: templates/wagtaildocs/documents/edit.html:15 +msgid "Editing" +msgstr "Редактирование" + +#: templates/wagtaildocs/documents/list.html:21 +#: templates/wagtaildocs/documents/list.html:24 +msgid "Uploaded" +msgstr "Загружено" + +#: templates/wagtaildocs/documents/results.html:21 +#, python-format +msgid "" +"You haven't uploaded any documents. Why not upload one now?" +msgstr "Вы еще не загрузили ни одного документа. Почему бы не сделать это сейчас?" + +#: templates/wagtaildocs/documents/usage.html:3 +#, python-format +msgid "Usage of %(title)s" +msgstr "" + +#: templates/wagtaildocs/documents/usage.html:5 +msgid "Usage of" +msgstr "" + +#: templates/wagtaildocs/documents/usage.html:17 +msgid "Parent" +msgstr "" + +#: templates/wagtaildocs/documents/usage.html:18 +msgid "Type" +msgstr "" + +#: templates/wagtaildocs/documents/usage.html:19 +msgid "Status" +msgstr "" + +#: templates/wagtaildocs/documents/usage.html:26 +msgid "Edit this page" +msgstr "" + +#: templates/wagtaildocs/edit_handlers/document_chooser_panel.html:9 +msgid "Clear choice" +msgstr "Очистить выбор" + +#: templates/wagtaildocs/edit_handlers/document_chooser_panel.html:10 +msgid "Choose another document" +msgstr "Выбрать другой документ" + +#: views/documents.py:38 views/documents.py:47 +msgid "Search documents" +msgstr "Поиск документов" + +#: views/documents.py:92 +msgid "Document '{0}' added." +msgstr "Документ '{0}' добавлен." + +#: views/documents.py:95 views/documents.py:129 +msgid "The document could not be saved due to errors." +msgstr "Документ не может быть сохранен из-за ошибок." + +#: views/documents.py:126 +msgid "Document '{0}' updated" +msgstr "Документ '{0}' обновлен" + +#: views/documents.py:148 +msgid "Document '{0}' deleted." +msgstr "Документ '{0}' удален." diff --git a/wagtail/wagtaildocs/locale/vi/LC_MESSAGES/django.po b/wagtail/wagtaildocs/locale/vi/LC_MESSAGES/django.po new file mode 100644 index 0000000000..4907436521 --- /dev/null +++ b/wagtail/wagtaildocs/locale/vi/LC_MESSAGES/django.po @@ -0,0 +1,184 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# +# Translators: +msgid "" +msgstr "" +"Project-Id-Version: Wagtail\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2014-09-11 16:38+0100\n" +"PO-Revision-Date: 2014-08-01 15:43+0000\n" +"Last-Translator: Karl Hobley \n" +"Language-Team: Vietnamese (http://www.transifex.com/projects/p/wagtail/language/vi/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: vi\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: models.py:21 templates/wagtaildocs/documents/list.html:11 +#: templates/wagtaildocs/documents/list.html:14 +#: templates/wagtaildocs/documents/usage.html:16 +msgid "Title" +msgstr "" + +#: models.py:22 templates/wagtaildocs/documents/list.html:17 +msgid "File" +msgstr "" + +#: models.py:26 +msgid "Tags" +msgstr "" + +#: wagtail_hooks.py:26 templates/wagtaildocs/documents/index.html:16 +msgid "Documents" +msgstr "" + +#: templates/wagtaildocs/chooser/chooser.html:2 +#: templates/wagtaildocs/edit_handlers/document_chooser_panel.html:11 +msgid "Choose a document" +msgstr "" + +#: templates/wagtaildocs/chooser/chooser.html:7 +#: templates/wagtaildocs/chooser/chooser.html:19 +msgid "Search" +msgstr "" + +#: templates/wagtaildocs/chooser/chooser.html:8 +msgid "Upload" +msgstr "" + +#: templates/wagtaildocs/chooser/chooser.html:34 +#: templates/wagtaildocs/documents/add.html:25 +#: templates/wagtaildocs/documents/edit.html:29 +msgid "Save" +msgstr "" + +#: templates/wagtaildocs/chooser/results.html:5 +#: templates/wagtaildocs/documents/results.html:5 +#, python-format +msgid "" +"\n" +" There is one match\n" +" " +msgid_plural "" +"\n" +" There are %(counter)s matches\n" +" " +msgstr[0] "" + +#: templates/wagtaildocs/chooser/results.html:12 +msgid "Latest documents" +msgstr "" + +#: templates/wagtaildocs/chooser/results.html:19 +#: templates/wagtaildocs/documents/results.html:18 +#, python-format +msgid "Sorry, no documents match \"%(query_string)s\"" +msgstr "" + +#: templates/wagtaildocs/documents/_file_field.html:5 +msgid "Change document:" +msgstr "" + +#: templates/wagtaildocs/documents/add.html:4 +#: templates/wagtaildocs/documents/index.html:17 +msgid "Add a document" +msgstr "" + +#: templates/wagtaildocs/documents/add.html:15 +msgid "Add document" +msgstr "" + +#: templates/wagtaildocs/documents/confirm_delete.html:3 +#, python-format +msgid "Delete %(title)s" +msgstr "" + +#: templates/wagtaildocs/documents/confirm_delete.html:6 +#: templates/wagtaildocs/documents/edit.html:29 +msgid "Delete document" +msgstr "" + +#: templates/wagtaildocs/documents/confirm_delete.html:10 +msgid "Are you sure you want to delete this document?" +msgstr "" + +#: templates/wagtaildocs/documents/confirm_delete.html:13 +msgid "Yes, delete" +msgstr "" + +#: templates/wagtaildocs/documents/edit.html:4 +#, python-format +msgid "Editing %(title)s" +msgstr "" + +#: templates/wagtaildocs/documents/edit.html:15 +msgid "Editing" +msgstr "" + +#: templates/wagtaildocs/documents/list.html:21 +#: templates/wagtaildocs/documents/list.html:24 +msgid "Uploaded" +msgstr "" + +#: templates/wagtaildocs/documents/results.html:21 +#, python-format +msgid "" +"You haven't uploaded any documents. Why not upload one now?" +msgstr "" + +#: templates/wagtaildocs/documents/usage.html:3 +#, python-format +msgid "Usage of %(title)s" +msgstr "" + +#: templates/wagtaildocs/documents/usage.html:5 +msgid "Usage of" +msgstr "" + +#: templates/wagtaildocs/documents/usage.html:17 +msgid "Parent" +msgstr "" + +#: templates/wagtaildocs/documents/usage.html:18 +msgid "Type" +msgstr "" + +#: templates/wagtaildocs/documents/usage.html:19 +msgid "Status" +msgstr "" + +#: templates/wagtaildocs/documents/usage.html:26 +msgid "Edit this page" +msgstr "" + +#: templates/wagtaildocs/edit_handlers/document_chooser_panel.html:9 +msgid "Clear choice" +msgstr "" + +#: templates/wagtaildocs/edit_handlers/document_chooser_panel.html:10 +msgid "Choose another document" +msgstr "" + +#: views/documents.py:38 views/documents.py:47 +msgid "Search documents" +msgstr "" + +#: views/documents.py:92 +msgid "Document '{0}' added." +msgstr "" + +#: views/documents.py:95 views/documents.py:129 +msgid "The document could not be saved due to errors." +msgstr "" + +#: views/documents.py:126 +msgid "Document '{0}' updated" +msgstr "" + +#: views/documents.py:148 +msgid "Document '{0}' deleted." +msgstr "" diff --git a/wagtail/wagtailembeds/locale/pt_BR/LC_MESSAGES/django.po b/wagtail/wagtailembeds/locale/pt_BR/LC_MESSAGES/django.po new file mode 100644 index 0000000000..65de4665f2 --- /dev/null +++ b/wagtail/wagtailembeds/locale/pt_BR/LC_MESSAGES/django.po @@ -0,0 +1,52 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# +# Translators: +# Thiago Cangussu , 2014 +# Douglas Miranda , 2014 +msgid "" +msgstr "" +"Project-Id-Version: Wagtail\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2014-09-11 16:38+0100\n" +"PO-Revision-Date: 2014-09-01 19:33+0000\n" +"Last-Translator: Douglas Miranda \n" +"Language-Team: Portuguese (Brazil) (http://www.transifex.com/projects/p/wagtail/language/pt_BR/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: pt_BR\n" +"Plural-Forms: nplurals=2; plural=(n > 1);\n" + +#: forms.py:11 +msgid "Please enter a valid URL" +msgstr "Por favor, digite uma URL válida" + +#: forms.py:15 +msgid "URL" +msgstr "URL" + +#: templates/wagtailembeds/chooser/chooser.html:3 +msgid "Insert embed" +msgstr "Inserir anexo" + +#: templates/wagtailembeds/chooser/chooser.html:14 +msgid "Insert" +msgstr "Inserir" + +#: views/chooser.py:33 +msgid "" +"There seems to be a problem with your embedly API key. Please check your " +"settings." +msgstr "Parece que há um problema com sua chave API anexada. Por favor verifique suas configurações." + +#: views/chooser.py:35 +msgid "Cannot find an embed for this URL." +msgstr "Não pode achar um anexo para esta URL." + +#: views/chooser.py:37 +msgid "" +"There seems to be an error with Embedly while trying to embed this URL. " +"Please try again later." +msgstr "Parece que houve um erro com a importação durante a tentativa de anexar esta URL. Por favor tente novamente." diff --git a/wagtail/wagtailembeds/locale/ru/LC_MESSAGES/django.po b/wagtail/wagtailembeds/locale/ru/LC_MESSAGES/django.po new file mode 100644 index 0000000000..47b934102d --- /dev/null +++ b/wagtail/wagtailembeds/locale/ru/LC_MESSAGES/django.po @@ -0,0 +1,51 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# +# Translators: +# HNKNTA , 2014 +msgid "" +msgstr "" +"Project-Id-Version: Wagtail\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2014-09-11 16:38+0100\n" +"PO-Revision-Date: 2014-06-11 15:44+0000\n" +"Last-Translator: HNKNTA \n" +"Language-Team: Russian (http://www.transifex.com/projects/p/wagtail/language/ru/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: ru\n" +"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" + +#: forms.py:11 +msgid "Please enter a valid URL" +msgstr "" + +#: forms.py:15 +msgid "URL" +msgstr "URL" + +#: templates/wagtailembeds/chooser/chooser.html:3 +msgid "Insert embed" +msgstr "" + +#: templates/wagtailembeds/chooser/chooser.html:14 +msgid "Insert" +msgstr "Вставить" + +#: views/chooser.py:33 +msgid "" +"There seems to be a problem with your embedly API key. Please check your " +"settings." +msgstr "" + +#: views/chooser.py:35 +msgid "Cannot find an embed for this URL." +msgstr "" + +#: views/chooser.py:37 +msgid "" +"There seems to be an error with Embedly while trying to embed this URL. " +"Please try again later." +msgstr "" diff --git a/wagtail/wagtailembeds/locale/vi/LC_MESSAGES/django.po b/wagtail/wagtailembeds/locale/vi/LC_MESSAGES/django.po new file mode 100644 index 0000000000..75810a5d80 --- /dev/null +++ b/wagtail/wagtailembeds/locale/vi/LC_MESSAGES/django.po @@ -0,0 +1,50 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# +# Translators: +msgid "" +msgstr "" +"Project-Id-Version: Wagtail\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2014-09-11 16:38+0100\n" +"PO-Revision-Date: 2014-03-03 22:29+0000\n" +"Last-Translator: serafeim \n" +"Language-Team: Vietnamese (http://www.transifex.com/projects/p/wagtail/language/vi/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: vi\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: forms.py:11 +msgid "Please enter a valid URL" +msgstr "" + +#: forms.py:15 +msgid "URL" +msgstr "" + +#: templates/wagtailembeds/chooser/chooser.html:3 +msgid "Insert embed" +msgstr "" + +#: templates/wagtailembeds/chooser/chooser.html:14 +msgid "Insert" +msgstr "" + +#: views/chooser.py:33 +msgid "" +"There seems to be a problem with your embedly API key. Please check your " +"settings." +msgstr "" + +#: views/chooser.py:35 +msgid "Cannot find an embed for this URL." +msgstr "" + +#: views/chooser.py:37 +msgid "" +"There seems to be an error with Embedly while trying to embed this URL. " +"Please try again later." +msgstr "" diff --git a/wagtail/wagtailforms/locale/bg/LC_MESSAGES/django.po b/wagtail/wagtailforms/locale/bg/LC_MESSAGES/django.po new file mode 100644 index 0000000000..3912b8f928 --- /dev/null +++ b/wagtail/wagtailforms/locale/bg/LC_MESSAGES/django.po @@ -0,0 +1,128 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# +# Translators: +msgid "" +msgstr "" +"Project-Id-Version: Wagtail\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2014-09-11 16:38+0100\n" +"PO-Revision-Date: 2014-09-11 15:42+0000\n" +"Last-Translator: FULL NAME \n" +"Language-Team: Bulgarian (http://www.transifex.com/projects/p/wagtail/language/bg/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: bg\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#: models.py:22 +msgid "Single line text" +msgstr "" + +#: models.py:23 +msgid "Multi-line text" +msgstr "" + +#: models.py:24 +msgid "Email" +msgstr "" + +#: models.py:25 +msgid "Number" +msgstr "" + +#: models.py:26 +msgid "URL" +msgstr "" + +#: models.py:27 +msgid "Checkbox" +msgstr "" + +#: models.py:28 +msgid "Checkboxes" +msgstr "" + +#: models.py:29 +msgid "Drop down" +msgstr "" + +#: models.py:30 +msgid "Radio buttons" +msgstr "" + +#: models.py:31 +msgid "Date" +msgstr "" + +#: models.py:32 +msgid "Date/time" +msgstr "" + +#: models.py:60 +msgid "The label of the form field" +msgstr "" + +#: models.py:67 +msgid "" +"Comma seperated list of choices. Only applicable in checkboxes, radio and " +"dropdown." +msgstr "" + +#: models.py:72 +msgid "Default value. Comma seperated values supported for checkboxes." +msgstr "" + +#: models.py:191 +msgid "Optional - form submissions will be emailed to this address" +msgstr "" + +#: wagtail_hooks.py:25 templates/wagtailforms/index.html:3 +#: templates/wagtailforms/index.html:6 +msgid "Forms" +msgstr "" + +#: templates/wagtailforms/index.html:7 +msgid "Pages" +msgstr "" + +#: templates/wagtailforms/index_submissions.html:3 +#, python-format +msgid "Submissions of %(form_title)s" +msgstr "" + +#: templates/wagtailforms/index_submissions.html:36 +#, python-format +msgid "Form data %(form_title)s" +msgstr "" + +#: templates/wagtailforms/index_submissions.html:45 +msgid "Filter" +msgstr "" + +#: templates/wagtailforms/index_submissions.html:51 +msgid "Download CSV" +msgstr "" + +#: templates/wagtailforms/index_submissions.html:63 +#, python-format +msgid "There have been no submissions of the '%(title)s' form." +msgstr "" + +#: templates/wagtailforms/list_forms.html:7 +msgid "Title" +msgstr "" + +#: templates/wagtailforms/list_forms.html:8 +msgid "Origin" +msgstr "" + +#: templates/wagtailforms/list_submissions.html:9 +msgid "Submission Date" +msgstr "" + +#: templates/wagtailforms/results_forms.html:7 +msgid "No form pages have been created." +msgstr "" diff --git a/wagtail/wagtailforms/locale/ca/LC_MESSAGES/django.po b/wagtail/wagtailforms/locale/ca/LC_MESSAGES/django.po new file mode 100644 index 0000000000..0f40d50230 --- /dev/null +++ b/wagtail/wagtailforms/locale/ca/LC_MESSAGES/django.po @@ -0,0 +1,128 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# +# Translators: +msgid "" +msgstr "" +"Project-Id-Version: Wagtail\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2014-09-11 16:38+0100\n" +"PO-Revision-Date: 2014-09-11 15:42+0000\n" +"Last-Translator: FULL NAME \n" +"Language-Team: Catalan (http://www.transifex.com/projects/p/wagtail/language/ca/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: ca\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#: models.py:22 +msgid "Single line text" +msgstr "" + +#: models.py:23 +msgid "Multi-line text" +msgstr "" + +#: models.py:24 +msgid "Email" +msgstr "" + +#: models.py:25 +msgid "Number" +msgstr "" + +#: models.py:26 +msgid "URL" +msgstr "" + +#: models.py:27 +msgid "Checkbox" +msgstr "" + +#: models.py:28 +msgid "Checkboxes" +msgstr "" + +#: models.py:29 +msgid "Drop down" +msgstr "" + +#: models.py:30 +msgid "Radio buttons" +msgstr "" + +#: models.py:31 +msgid "Date" +msgstr "" + +#: models.py:32 +msgid "Date/time" +msgstr "" + +#: models.py:60 +msgid "The label of the form field" +msgstr "" + +#: models.py:67 +msgid "" +"Comma seperated list of choices. Only applicable in checkboxes, radio and " +"dropdown." +msgstr "" + +#: models.py:72 +msgid "Default value. Comma seperated values supported for checkboxes." +msgstr "" + +#: models.py:191 +msgid "Optional - form submissions will be emailed to this address" +msgstr "" + +#: wagtail_hooks.py:25 templates/wagtailforms/index.html:3 +#: templates/wagtailforms/index.html:6 +msgid "Forms" +msgstr "" + +#: templates/wagtailforms/index.html:7 +msgid "Pages" +msgstr "" + +#: templates/wagtailforms/index_submissions.html:3 +#, python-format +msgid "Submissions of %(form_title)s" +msgstr "" + +#: templates/wagtailforms/index_submissions.html:36 +#, python-format +msgid "Form data %(form_title)s" +msgstr "" + +#: templates/wagtailforms/index_submissions.html:45 +msgid "Filter" +msgstr "" + +#: templates/wagtailforms/index_submissions.html:51 +msgid "Download CSV" +msgstr "" + +#: templates/wagtailforms/index_submissions.html:63 +#, python-format +msgid "There have been no submissions of the '%(title)s' form." +msgstr "" + +#: templates/wagtailforms/list_forms.html:7 +msgid "Title" +msgstr "" + +#: templates/wagtailforms/list_forms.html:8 +msgid "Origin" +msgstr "" + +#: templates/wagtailforms/list_submissions.html:9 +msgid "Submission Date" +msgstr "" + +#: templates/wagtailforms/results_forms.html:7 +msgid "No form pages have been created." +msgstr "" diff --git a/wagtail/wagtailforms/locale/de/LC_MESSAGES/django.po b/wagtail/wagtailforms/locale/de/LC_MESSAGES/django.po new file mode 100644 index 0000000000..9de1997cd9 --- /dev/null +++ b/wagtail/wagtailforms/locale/de/LC_MESSAGES/django.po @@ -0,0 +1,128 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# +# Translators: +msgid "" +msgstr "" +"Project-Id-Version: Wagtail\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2014-09-11 16:38+0100\n" +"PO-Revision-Date: 2014-09-11 15:42+0000\n" +"Last-Translator: FULL NAME \n" +"Language-Team: German (http://www.transifex.com/projects/p/wagtail/language/de/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: de\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#: models.py:22 +msgid "Single line text" +msgstr "" + +#: models.py:23 +msgid "Multi-line text" +msgstr "" + +#: models.py:24 +msgid "Email" +msgstr "" + +#: models.py:25 +msgid "Number" +msgstr "" + +#: models.py:26 +msgid "URL" +msgstr "" + +#: models.py:27 +msgid "Checkbox" +msgstr "" + +#: models.py:28 +msgid "Checkboxes" +msgstr "" + +#: models.py:29 +msgid "Drop down" +msgstr "" + +#: models.py:30 +msgid "Radio buttons" +msgstr "" + +#: models.py:31 +msgid "Date" +msgstr "" + +#: models.py:32 +msgid "Date/time" +msgstr "" + +#: models.py:60 +msgid "The label of the form field" +msgstr "" + +#: models.py:67 +msgid "" +"Comma seperated list of choices. Only applicable in checkboxes, radio and " +"dropdown." +msgstr "" + +#: models.py:72 +msgid "Default value. Comma seperated values supported for checkboxes." +msgstr "" + +#: models.py:191 +msgid "Optional - form submissions will be emailed to this address" +msgstr "" + +#: wagtail_hooks.py:25 templates/wagtailforms/index.html:3 +#: templates/wagtailforms/index.html:6 +msgid "Forms" +msgstr "" + +#: templates/wagtailforms/index.html:7 +msgid "Pages" +msgstr "" + +#: templates/wagtailforms/index_submissions.html:3 +#, python-format +msgid "Submissions of %(form_title)s" +msgstr "" + +#: templates/wagtailforms/index_submissions.html:36 +#, python-format +msgid "Form data %(form_title)s" +msgstr "" + +#: templates/wagtailforms/index_submissions.html:45 +msgid "Filter" +msgstr "" + +#: templates/wagtailforms/index_submissions.html:51 +msgid "Download CSV" +msgstr "" + +#: templates/wagtailforms/index_submissions.html:63 +#, python-format +msgid "There have been no submissions of the '%(title)s' form." +msgstr "" + +#: templates/wagtailforms/list_forms.html:7 +msgid "Title" +msgstr "" + +#: templates/wagtailforms/list_forms.html:8 +msgid "Origin" +msgstr "" + +#: templates/wagtailforms/list_submissions.html:9 +msgid "Submission Date" +msgstr "" + +#: templates/wagtailforms/results_forms.html:7 +msgid "No form pages have been created." +msgstr "" diff --git a/wagtail/wagtailforms/locale/el/LC_MESSAGES/django.po b/wagtail/wagtailforms/locale/el/LC_MESSAGES/django.po new file mode 100644 index 0000000000..50864be02c --- /dev/null +++ b/wagtail/wagtailforms/locale/el/LC_MESSAGES/django.po @@ -0,0 +1,128 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# +# Translators: +msgid "" +msgstr "" +"Project-Id-Version: Wagtail\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2014-09-11 16:38+0100\n" +"PO-Revision-Date: 2014-09-11 15:42+0000\n" +"Last-Translator: FULL NAME \n" +"Language-Team: Greek (http://www.transifex.com/projects/p/wagtail/language/el/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: el\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#: models.py:22 +msgid "Single line text" +msgstr "" + +#: models.py:23 +msgid "Multi-line text" +msgstr "" + +#: models.py:24 +msgid "Email" +msgstr "" + +#: models.py:25 +msgid "Number" +msgstr "" + +#: models.py:26 +msgid "URL" +msgstr "" + +#: models.py:27 +msgid "Checkbox" +msgstr "" + +#: models.py:28 +msgid "Checkboxes" +msgstr "" + +#: models.py:29 +msgid "Drop down" +msgstr "" + +#: models.py:30 +msgid "Radio buttons" +msgstr "" + +#: models.py:31 +msgid "Date" +msgstr "" + +#: models.py:32 +msgid "Date/time" +msgstr "" + +#: models.py:60 +msgid "The label of the form field" +msgstr "" + +#: models.py:67 +msgid "" +"Comma seperated list of choices. Only applicable in checkboxes, radio and " +"dropdown." +msgstr "" + +#: models.py:72 +msgid "Default value. Comma seperated values supported for checkboxes." +msgstr "" + +#: models.py:191 +msgid "Optional - form submissions will be emailed to this address" +msgstr "" + +#: wagtail_hooks.py:25 templates/wagtailforms/index.html:3 +#: templates/wagtailforms/index.html:6 +msgid "Forms" +msgstr "" + +#: templates/wagtailforms/index.html:7 +msgid "Pages" +msgstr "" + +#: templates/wagtailforms/index_submissions.html:3 +#, python-format +msgid "Submissions of %(form_title)s" +msgstr "" + +#: templates/wagtailforms/index_submissions.html:36 +#, python-format +msgid "Form data %(form_title)s" +msgstr "" + +#: templates/wagtailforms/index_submissions.html:45 +msgid "Filter" +msgstr "" + +#: templates/wagtailforms/index_submissions.html:51 +msgid "Download CSV" +msgstr "" + +#: templates/wagtailforms/index_submissions.html:63 +#, python-format +msgid "There have been no submissions of the '%(title)s' form." +msgstr "" + +#: templates/wagtailforms/list_forms.html:7 +msgid "Title" +msgstr "" + +#: templates/wagtailforms/list_forms.html:8 +msgid "Origin" +msgstr "" + +#: templates/wagtailforms/list_submissions.html:9 +msgid "Submission Date" +msgstr "" + +#: templates/wagtailforms/results_forms.html:7 +msgid "No form pages have been created." +msgstr "" diff --git a/wagtail/wagtailforms/locale/es/LC_MESSAGES/django.po b/wagtail/wagtailforms/locale/es/LC_MESSAGES/django.po new file mode 100644 index 0000000000..4e7381400c --- /dev/null +++ b/wagtail/wagtailforms/locale/es/LC_MESSAGES/django.po @@ -0,0 +1,128 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# +# Translators: +msgid "" +msgstr "" +"Project-Id-Version: Wagtail\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2014-09-11 16:38+0100\n" +"PO-Revision-Date: 2014-09-11 15:42+0000\n" +"Last-Translator: FULL NAME \n" +"Language-Team: Spanish (http://www.transifex.com/projects/p/wagtail/language/es/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: es\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#: models.py:22 +msgid "Single line text" +msgstr "" + +#: models.py:23 +msgid "Multi-line text" +msgstr "" + +#: models.py:24 +msgid "Email" +msgstr "" + +#: models.py:25 +msgid "Number" +msgstr "" + +#: models.py:26 +msgid "URL" +msgstr "" + +#: models.py:27 +msgid "Checkbox" +msgstr "" + +#: models.py:28 +msgid "Checkboxes" +msgstr "" + +#: models.py:29 +msgid "Drop down" +msgstr "" + +#: models.py:30 +msgid "Radio buttons" +msgstr "" + +#: models.py:31 +msgid "Date" +msgstr "" + +#: models.py:32 +msgid "Date/time" +msgstr "" + +#: models.py:60 +msgid "The label of the form field" +msgstr "" + +#: models.py:67 +msgid "" +"Comma seperated list of choices. Only applicable in checkboxes, radio and " +"dropdown." +msgstr "" + +#: models.py:72 +msgid "Default value. Comma seperated values supported for checkboxes." +msgstr "" + +#: models.py:191 +msgid "Optional - form submissions will be emailed to this address" +msgstr "" + +#: wagtail_hooks.py:25 templates/wagtailforms/index.html:3 +#: templates/wagtailforms/index.html:6 +msgid "Forms" +msgstr "" + +#: templates/wagtailforms/index.html:7 +msgid "Pages" +msgstr "" + +#: templates/wagtailforms/index_submissions.html:3 +#, python-format +msgid "Submissions of %(form_title)s" +msgstr "" + +#: templates/wagtailforms/index_submissions.html:36 +#, python-format +msgid "Form data %(form_title)s" +msgstr "" + +#: templates/wagtailforms/index_submissions.html:45 +msgid "Filter" +msgstr "" + +#: templates/wagtailforms/index_submissions.html:51 +msgid "Download CSV" +msgstr "" + +#: templates/wagtailforms/index_submissions.html:63 +#, python-format +msgid "There have been no submissions of the '%(title)s' form." +msgstr "" + +#: templates/wagtailforms/list_forms.html:7 +msgid "Title" +msgstr "" + +#: templates/wagtailforms/list_forms.html:8 +msgid "Origin" +msgstr "" + +#: templates/wagtailforms/list_submissions.html:9 +msgid "Submission Date" +msgstr "" + +#: templates/wagtailforms/results_forms.html:7 +msgid "No form pages have been created." +msgstr "" diff --git a/wagtail/wagtailforms/locale/eu/LC_MESSAGES/django.po b/wagtail/wagtailforms/locale/eu/LC_MESSAGES/django.po new file mode 100644 index 0000000000..9554bbee95 --- /dev/null +++ b/wagtail/wagtailforms/locale/eu/LC_MESSAGES/django.po @@ -0,0 +1,128 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# +# Translators: +msgid "" +msgstr "" +"Project-Id-Version: Wagtail\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2014-09-11 16:38+0100\n" +"PO-Revision-Date: 2014-09-11 15:42+0000\n" +"Last-Translator: FULL NAME \n" +"Language-Team: Basque (http://www.transifex.com/projects/p/wagtail/language/eu/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: eu\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#: models.py:22 +msgid "Single line text" +msgstr "" + +#: models.py:23 +msgid "Multi-line text" +msgstr "" + +#: models.py:24 +msgid "Email" +msgstr "" + +#: models.py:25 +msgid "Number" +msgstr "" + +#: models.py:26 +msgid "URL" +msgstr "" + +#: models.py:27 +msgid "Checkbox" +msgstr "" + +#: models.py:28 +msgid "Checkboxes" +msgstr "" + +#: models.py:29 +msgid "Drop down" +msgstr "" + +#: models.py:30 +msgid "Radio buttons" +msgstr "" + +#: models.py:31 +msgid "Date" +msgstr "" + +#: models.py:32 +msgid "Date/time" +msgstr "" + +#: models.py:60 +msgid "The label of the form field" +msgstr "" + +#: models.py:67 +msgid "" +"Comma seperated list of choices. Only applicable in checkboxes, radio and " +"dropdown." +msgstr "" + +#: models.py:72 +msgid "Default value. Comma seperated values supported for checkboxes." +msgstr "" + +#: models.py:191 +msgid "Optional - form submissions will be emailed to this address" +msgstr "" + +#: wagtail_hooks.py:25 templates/wagtailforms/index.html:3 +#: templates/wagtailforms/index.html:6 +msgid "Forms" +msgstr "" + +#: templates/wagtailforms/index.html:7 +msgid "Pages" +msgstr "" + +#: templates/wagtailforms/index_submissions.html:3 +#, python-format +msgid "Submissions of %(form_title)s" +msgstr "" + +#: templates/wagtailforms/index_submissions.html:36 +#, python-format +msgid "Form data %(form_title)s" +msgstr "" + +#: templates/wagtailforms/index_submissions.html:45 +msgid "Filter" +msgstr "" + +#: templates/wagtailforms/index_submissions.html:51 +msgid "Download CSV" +msgstr "" + +#: templates/wagtailforms/index_submissions.html:63 +#, python-format +msgid "There have been no submissions of the '%(title)s' form." +msgstr "" + +#: templates/wagtailforms/list_forms.html:7 +msgid "Title" +msgstr "" + +#: templates/wagtailforms/list_forms.html:8 +msgid "Origin" +msgstr "" + +#: templates/wagtailforms/list_submissions.html:9 +msgid "Submission Date" +msgstr "" + +#: templates/wagtailforms/results_forms.html:7 +msgid "No form pages have been created." +msgstr "" diff --git a/wagtail/wagtailforms/locale/fr/LC_MESSAGES/django.po b/wagtail/wagtailforms/locale/fr/LC_MESSAGES/django.po new file mode 100644 index 0000000000..52671c0474 --- /dev/null +++ b/wagtail/wagtailforms/locale/fr/LC_MESSAGES/django.po @@ -0,0 +1,128 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# +# Translators: +msgid "" +msgstr "" +"Project-Id-Version: Wagtail\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2014-09-11 16:38+0100\n" +"PO-Revision-Date: 2014-09-11 15:42+0000\n" +"Last-Translator: FULL NAME \n" +"Language-Team: French (http://www.transifex.com/projects/p/wagtail/language/fr/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: fr\n" +"Plural-Forms: nplurals=2; plural=(n > 1);\n" + +#: models.py:22 +msgid "Single line text" +msgstr "" + +#: models.py:23 +msgid "Multi-line text" +msgstr "" + +#: models.py:24 +msgid "Email" +msgstr "" + +#: models.py:25 +msgid "Number" +msgstr "" + +#: models.py:26 +msgid "URL" +msgstr "" + +#: models.py:27 +msgid "Checkbox" +msgstr "" + +#: models.py:28 +msgid "Checkboxes" +msgstr "" + +#: models.py:29 +msgid "Drop down" +msgstr "" + +#: models.py:30 +msgid "Radio buttons" +msgstr "" + +#: models.py:31 +msgid "Date" +msgstr "" + +#: models.py:32 +msgid "Date/time" +msgstr "" + +#: models.py:60 +msgid "The label of the form field" +msgstr "" + +#: models.py:67 +msgid "" +"Comma seperated list of choices. Only applicable in checkboxes, radio and " +"dropdown." +msgstr "" + +#: models.py:72 +msgid "Default value. Comma seperated values supported for checkboxes." +msgstr "" + +#: models.py:191 +msgid "Optional - form submissions will be emailed to this address" +msgstr "" + +#: wagtail_hooks.py:25 templates/wagtailforms/index.html:3 +#: templates/wagtailforms/index.html:6 +msgid "Forms" +msgstr "" + +#: templates/wagtailforms/index.html:7 +msgid "Pages" +msgstr "" + +#: templates/wagtailforms/index_submissions.html:3 +#, python-format +msgid "Submissions of %(form_title)s" +msgstr "" + +#: templates/wagtailforms/index_submissions.html:36 +#, python-format +msgid "Form data %(form_title)s" +msgstr "" + +#: templates/wagtailforms/index_submissions.html:45 +msgid "Filter" +msgstr "" + +#: templates/wagtailforms/index_submissions.html:51 +msgid "Download CSV" +msgstr "" + +#: templates/wagtailforms/index_submissions.html:63 +#, python-format +msgid "There have been no submissions of the '%(title)s' form." +msgstr "" + +#: templates/wagtailforms/list_forms.html:7 +msgid "Title" +msgstr "" + +#: templates/wagtailforms/list_forms.html:8 +msgid "Origin" +msgstr "" + +#: templates/wagtailforms/list_submissions.html:9 +msgid "Submission Date" +msgstr "" + +#: templates/wagtailforms/results_forms.html:7 +msgid "No form pages have been created." +msgstr "" diff --git a/wagtail/wagtailforms/locale/gl/LC_MESSAGES/django.po b/wagtail/wagtailforms/locale/gl/LC_MESSAGES/django.po new file mode 100644 index 0000000000..9e2a2efb31 --- /dev/null +++ b/wagtail/wagtailforms/locale/gl/LC_MESSAGES/django.po @@ -0,0 +1,128 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# +# Translators: +msgid "" +msgstr "" +"Project-Id-Version: Wagtail\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2014-09-11 16:38+0100\n" +"PO-Revision-Date: 2014-09-11 15:42+0000\n" +"Last-Translator: FULL NAME \n" +"Language-Team: Galician (http://www.transifex.com/projects/p/wagtail/language/gl/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: gl\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#: models.py:22 +msgid "Single line text" +msgstr "" + +#: models.py:23 +msgid "Multi-line text" +msgstr "" + +#: models.py:24 +msgid "Email" +msgstr "" + +#: models.py:25 +msgid "Number" +msgstr "" + +#: models.py:26 +msgid "URL" +msgstr "" + +#: models.py:27 +msgid "Checkbox" +msgstr "" + +#: models.py:28 +msgid "Checkboxes" +msgstr "" + +#: models.py:29 +msgid "Drop down" +msgstr "" + +#: models.py:30 +msgid "Radio buttons" +msgstr "" + +#: models.py:31 +msgid "Date" +msgstr "" + +#: models.py:32 +msgid "Date/time" +msgstr "" + +#: models.py:60 +msgid "The label of the form field" +msgstr "" + +#: models.py:67 +msgid "" +"Comma seperated list of choices. Only applicable in checkboxes, radio and " +"dropdown." +msgstr "" + +#: models.py:72 +msgid "Default value. Comma seperated values supported for checkboxes." +msgstr "" + +#: models.py:191 +msgid "Optional - form submissions will be emailed to this address" +msgstr "" + +#: wagtail_hooks.py:25 templates/wagtailforms/index.html:3 +#: templates/wagtailforms/index.html:6 +msgid "Forms" +msgstr "" + +#: templates/wagtailforms/index.html:7 +msgid "Pages" +msgstr "" + +#: templates/wagtailforms/index_submissions.html:3 +#, python-format +msgid "Submissions of %(form_title)s" +msgstr "" + +#: templates/wagtailforms/index_submissions.html:36 +#, python-format +msgid "Form data %(form_title)s" +msgstr "" + +#: templates/wagtailforms/index_submissions.html:45 +msgid "Filter" +msgstr "" + +#: templates/wagtailforms/index_submissions.html:51 +msgid "Download CSV" +msgstr "" + +#: templates/wagtailforms/index_submissions.html:63 +#, python-format +msgid "There have been no submissions of the '%(title)s' form." +msgstr "" + +#: templates/wagtailforms/list_forms.html:7 +msgid "Title" +msgstr "" + +#: templates/wagtailforms/list_forms.html:8 +msgid "Origin" +msgstr "" + +#: templates/wagtailforms/list_submissions.html:9 +msgid "Submission Date" +msgstr "" + +#: templates/wagtailforms/results_forms.html:7 +msgid "No form pages have been created." +msgstr "" diff --git a/wagtail/wagtailforms/locale/mn/LC_MESSAGES/django.po b/wagtail/wagtailforms/locale/mn/LC_MESSAGES/django.po new file mode 100644 index 0000000000..aaefea9c17 --- /dev/null +++ b/wagtail/wagtailforms/locale/mn/LC_MESSAGES/django.po @@ -0,0 +1,128 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# +# Translators: +msgid "" +msgstr "" +"Project-Id-Version: Wagtail\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2014-09-11 16:38+0100\n" +"PO-Revision-Date: 2014-09-11 15:42+0000\n" +"Last-Translator: FULL NAME \n" +"Language-Team: Mongolian (http://www.transifex.com/projects/p/wagtail/language/mn/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: mn\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#: models.py:22 +msgid "Single line text" +msgstr "" + +#: models.py:23 +msgid "Multi-line text" +msgstr "" + +#: models.py:24 +msgid "Email" +msgstr "" + +#: models.py:25 +msgid "Number" +msgstr "" + +#: models.py:26 +msgid "URL" +msgstr "" + +#: models.py:27 +msgid "Checkbox" +msgstr "" + +#: models.py:28 +msgid "Checkboxes" +msgstr "" + +#: models.py:29 +msgid "Drop down" +msgstr "" + +#: models.py:30 +msgid "Radio buttons" +msgstr "" + +#: models.py:31 +msgid "Date" +msgstr "" + +#: models.py:32 +msgid "Date/time" +msgstr "" + +#: models.py:60 +msgid "The label of the form field" +msgstr "" + +#: models.py:67 +msgid "" +"Comma seperated list of choices. Only applicable in checkboxes, radio and " +"dropdown." +msgstr "" + +#: models.py:72 +msgid "Default value. Comma seperated values supported for checkboxes." +msgstr "" + +#: models.py:191 +msgid "Optional - form submissions will be emailed to this address" +msgstr "" + +#: wagtail_hooks.py:25 templates/wagtailforms/index.html:3 +#: templates/wagtailforms/index.html:6 +msgid "Forms" +msgstr "" + +#: templates/wagtailforms/index.html:7 +msgid "Pages" +msgstr "" + +#: templates/wagtailforms/index_submissions.html:3 +#, python-format +msgid "Submissions of %(form_title)s" +msgstr "" + +#: templates/wagtailforms/index_submissions.html:36 +#, python-format +msgid "Form data %(form_title)s" +msgstr "" + +#: templates/wagtailforms/index_submissions.html:45 +msgid "Filter" +msgstr "" + +#: templates/wagtailforms/index_submissions.html:51 +msgid "Download CSV" +msgstr "" + +#: templates/wagtailforms/index_submissions.html:63 +#, python-format +msgid "There have been no submissions of the '%(title)s' form." +msgstr "" + +#: templates/wagtailforms/list_forms.html:7 +msgid "Title" +msgstr "" + +#: templates/wagtailforms/list_forms.html:8 +msgid "Origin" +msgstr "" + +#: templates/wagtailforms/list_submissions.html:9 +msgid "Submission Date" +msgstr "" + +#: templates/wagtailforms/results_forms.html:7 +msgid "No form pages have been created." +msgstr "" diff --git a/wagtail/wagtailforms/locale/pl/LC_MESSAGES/django.po b/wagtail/wagtailforms/locale/pl/LC_MESSAGES/django.po new file mode 100644 index 0000000000..469d2f2651 --- /dev/null +++ b/wagtail/wagtailforms/locale/pl/LC_MESSAGES/django.po @@ -0,0 +1,128 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# +# Translators: +msgid "" +msgstr "" +"Project-Id-Version: Wagtail\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2014-09-11 16:38+0100\n" +"PO-Revision-Date: 2014-09-11 15:42+0000\n" +"Last-Translator: FULL NAME \n" +"Language-Team: Polish (http://www.transifex.com/projects/p/wagtail/language/pl/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: pl\n" +"Plural-Forms: nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" + +#: models.py:22 +msgid "Single line text" +msgstr "" + +#: models.py:23 +msgid "Multi-line text" +msgstr "" + +#: models.py:24 +msgid "Email" +msgstr "" + +#: models.py:25 +msgid "Number" +msgstr "" + +#: models.py:26 +msgid "URL" +msgstr "" + +#: models.py:27 +msgid "Checkbox" +msgstr "" + +#: models.py:28 +msgid "Checkboxes" +msgstr "" + +#: models.py:29 +msgid "Drop down" +msgstr "" + +#: models.py:30 +msgid "Radio buttons" +msgstr "" + +#: models.py:31 +msgid "Date" +msgstr "" + +#: models.py:32 +msgid "Date/time" +msgstr "" + +#: models.py:60 +msgid "The label of the form field" +msgstr "" + +#: models.py:67 +msgid "" +"Comma seperated list of choices. Only applicable in checkboxes, radio and " +"dropdown." +msgstr "" + +#: models.py:72 +msgid "Default value. Comma seperated values supported for checkboxes." +msgstr "" + +#: models.py:191 +msgid "Optional - form submissions will be emailed to this address" +msgstr "" + +#: wagtail_hooks.py:25 templates/wagtailforms/index.html:3 +#: templates/wagtailforms/index.html:6 +msgid "Forms" +msgstr "" + +#: templates/wagtailforms/index.html:7 +msgid "Pages" +msgstr "" + +#: templates/wagtailforms/index_submissions.html:3 +#, python-format +msgid "Submissions of %(form_title)s" +msgstr "" + +#: templates/wagtailforms/index_submissions.html:36 +#, python-format +msgid "Form data %(form_title)s" +msgstr "" + +#: templates/wagtailforms/index_submissions.html:45 +msgid "Filter" +msgstr "" + +#: templates/wagtailforms/index_submissions.html:51 +msgid "Download CSV" +msgstr "" + +#: templates/wagtailforms/index_submissions.html:63 +#, python-format +msgid "There have been no submissions of the '%(title)s' form." +msgstr "" + +#: templates/wagtailforms/list_forms.html:7 +msgid "Title" +msgstr "" + +#: templates/wagtailforms/list_forms.html:8 +msgid "Origin" +msgstr "" + +#: templates/wagtailforms/list_submissions.html:9 +msgid "Submission Date" +msgstr "" + +#: templates/wagtailforms/results_forms.html:7 +msgid "No form pages have been created." +msgstr "" diff --git a/wagtail/wagtailforms/locale/pt_BR/LC_MESSAGES/django.po b/wagtail/wagtailforms/locale/pt_BR/LC_MESSAGES/django.po new file mode 100644 index 0000000000..3158230383 --- /dev/null +++ b/wagtail/wagtailforms/locale/pt_BR/LC_MESSAGES/django.po @@ -0,0 +1,128 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# +# Translators: +msgid "" +msgstr "" +"Project-Id-Version: Wagtail\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2014-09-11 16:38+0100\n" +"PO-Revision-Date: 2014-09-11 15:42+0000\n" +"Last-Translator: FULL NAME \n" +"Language-Team: Portuguese (Brazil) (http://www.transifex.com/projects/p/wagtail/language/pt_BR/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: pt_BR\n" +"Plural-Forms: nplurals=2; plural=(n > 1);\n" + +#: models.py:22 +msgid "Single line text" +msgstr "" + +#: models.py:23 +msgid "Multi-line text" +msgstr "" + +#: models.py:24 +msgid "Email" +msgstr "" + +#: models.py:25 +msgid "Number" +msgstr "" + +#: models.py:26 +msgid "URL" +msgstr "" + +#: models.py:27 +msgid "Checkbox" +msgstr "" + +#: models.py:28 +msgid "Checkboxes" +msgstr "" + +#: models.py:29 +msgid "Drop down" +msgstr "" + +#: models.py:30 +msgid "Radio buttons" +msgstr "" + +#: models.py:31 +msgid "Date" +msgstr "" + +#: models.py:32 +msgid "Date/time" +msgstr "" + +#: models.py:60 +msgid "The label of the form field" +msgstr "" + +#: models.py:67 +msgid "" +"Comma seperated list of choices. Only applicable in checkboxes, radio and " +"dropdown." +msgstr "" + +#: models.py:72 +msgid "Default value. Comma seperated values supported for checkboxes." +msgstr "" + +#: models.py:191 +msgid "Optional - form submissions will be emailed to this address" +msgstr "" + +#: wagtail_hooks.py:25 templates/wagtailforms/index.html:3 +#: templates/wagtailforms/index.html:6 +msgid "Forms" +msgstr "" + +#: templates/wagtailforms/index.html:7 +msgid "Pages" +msgstr "" + +#: templates/wagtailforms/index_submissions.html:3 +#, python-format +msgid "Submissions of %(form_title)s" +msgstr "" + +#: templates/wagtailforms/index_submissions.html:36 +#, python-format +msgid "Form data %(form_title)s" +msgstr "" + +#: templates/wagtailforms/index_submissions.html:45 +msgid "Filter" +msgstr "" + +#: templates/wagtailforms/index_submissions.html:51 +msgid "Download CSV" +msgstr "" + +#: templates/wagtailforms/index_submissions.html:63 +#, python-format +msgid "There have been no submissions of the '%(title)s' form." +msgstr "" + +#: templates/wagtailforms/list_forms.html:7 +msgid "Title" +msgstr "" + +#: templates/wagtailforms/list_forms.html:8 +msgid "Origin" +msgstr "" + +#: templates/wagtailforms/list_submissions.html:9 +msgid "Submission Date" +msgstr "" + +#: templates/wagtailforms/results_forms.html:7 +msgid "No form pages have been created." +msgstr "" diff --git a/wagtail/wagtailforms/locale/ro/LC_MESSAGES/django.po b/wagtail/wagtailforms/locale/ro/LC_MESSAGES/django.po new file mode 100644 index 0000000000..e9c5fafcc2 --- /dev/null +++ b/wagtail/wagtailforms/locale/ro/LC_MESSAGES/django.po @@ -0,0 +1,128 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# +# Translators: +msgid "" +msgstr "" +"Project-Id-Version: Wagtail\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2014-09-11 16:38+0100\n" +"PO-Revision-Date: 2014-09-11 15:42+0000\n" +"Last-Translator: FULL NAME \n" +"Language-Team: Romanian (http://www.transifex.com/projects/p/wagtail/language/ro/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: ro\n" +"Plural-Forms: nplurals=3; plural=(n==1?0:(((n%100>19)||((n%100==0)&&(n!=0)))?2:1));\n" + +#: models.py:22 +msgid "Single line text" +msgstr "" + +#: models.py:23 +msgid "Multi-line text" +msgstr "" + +#: models.py:24 +msgid "Email" +msgstr "" + +#: models.py:25 +msgid "Number" +msgstr "" + +#: models.py:26 +msgid "URL" +msgstr "" + +#: models.py:27 +msgid "Checkbox" +msgstr "" + +#: models.py:28 +msgid "Checkboxes" +msgstr "" + +#: models.py:29 +msgid "Drop down" +msgstr "" + +#: models.py:30 +msgid "Radio buttons" +msgstr "" + +#: models.py:31 +msgid "Date" +msgstr "" + +#: models.py:32 +msgid "Date/time" +msgstr "" + +#: models.py:60 +msgid "The label of the form field" +msgstr "" + +#: models.py:67 +msgid "" +"Comma seperated list of choices. Only applicable in checkboxes, radio and " +"dropdown." +msgstr "" + +#: models.py:72 +msgid "Default value. Comma seperated values supported for checkboxes." +msgstr "" + +#: models.py:191 +msgid "Optional - form submissions will be emailed to this address" +msgstr "" + +#: wagtail_hooks.py:25 templates/wagtailforms/index.html:3 +#: templates/wagtailforms/index.html:6 +msgid "Forms" +msgstr "" + +#: templates/wagtailforms/index.html:7 +msgid "Pages" +msgstr "" + +#: templates/wagtailforms/index_submissions.html:3 +#, python-format +msgid "Submissions of %(form_title)s" +msgstr "" + +#: templates/wagtailforms/index_submissions.html:36 +#, python-format +msgid "Form data %(form_title)s" +msgstr "" + +#: templates/wagtailforms/index_submissions.html:45 +msgid "Filter" +msgstr "" + +#: templates/wagtailforms/index_submissions.html:51 +msgid "Download CSV" +msgstr "" + +#: templates/wagtailforms/index_submissions.html:63 +#, python-format +msgid "There have been no submissions of the '%(title)s' form." +msgstr "" + +#: templates/wagtailforms/list_forms.html:7 +msgid "Title" +msgstr "" + +#: templates/wagtailforms/list_forms.html:8 +msgid "Origin" +msgstr "" + +#: templates/wagtailforms/list_submissions.html:9 +msgid "Submission Date" +msgstr "" + +#: templates/wagtailforms/results_forms.html:7 +msgid "No form pages have been created." +msgstr "" diff --git a/wagtail/wagtailforms/locale/ru/LC_MESSAGES/django.po b/wagtail/wagtailforms/locale/ru/LC_MESSAGES/django.po new file mode 100644 index 0000000000..c264a4aa0c --- /dev/null +++ b/wagtail/wagtailforms/locale/ru/LC_MESSAGES/django.po @@ -0,0 +1,128 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# +# Translators: +msgid "" +msgstr "" +"Project-Id-Version: Wagtail\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2014-09-11 16:38+0100\n" +"PO-Revision-Date: 2014-09-11 15:42+0000\n" +"Last-Translator: FULL NAME \n" +"Language-Team: Russian (http://www.transifex.com/projects/p/wagtail/language/ru/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: ru\n" +"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" + +#: models.py:22 +msgid "Single line text" +msgstr "" + +#: models.py:23 +msgid "Multi-line text" +msgstr "" + +#: models.py:24 +msgid "Email" +msgstr "" + +#: models.py:25 +msgid "Number" +msgstr "" + +#: models.py:26 +msgid "URL" +msgstr "" + +#: models.py:27 +msgid "Checkbox" +msgstr "" + +#: models.py:28 +msgid "Checkboxes" +msgstr "" + +#: models.py:29 +msgid "Drop down" +msgstr "" + +#: models.py:30 +msgid "Radio buttons" +msgstr "" + +#: models.py:31 +msgid "Date" +msgstr "" + +#: models.py:32 +msgid "Date/time" +msgstr "" + +#: models.py:60 +msgid "The label of the form field" +msgstr "" + +#: models.py:67 +msgid "" +"Comma seperated list of choices. Only applicable in checkboxes, radio and " +"dropdown." +msgstr "" + +#: models.py:72 +msgid "Default value. Comma seperated values supported for checkboxes." +msgstr "" + +#: models.py:191 +msgid "Optional - form submissions will be emailed to this address" +msgstr "" + +#: wagtail_hooks.py:25 templates/wagtailforms/index.html:3 +#: templates/wagtailforms/index.html:6 +msgid "Forms" +msgstr "" + +#: templates/wagtailforms/index.html:7 +msgid "Pages" +msgstr "" + +#: templates/wagtailforms/index_submissions.html:3 +#, python-format +msgid "Submissions of %(form_title)s" +msgstr "" + +#: templates/wagtailforms/index_submissions.html:36 +#, python-format +msgid "Form data %(form_title)s" +msgstr "" + +#: templates/wagtailforms/index_submissions.html:45 +msgid "Filter" +msgstr "" + +#: templates/wagtailforms/index_submissions.html:51 +msgid "Download CSV" +msgstr "" + +#: templates/wagtailforms/index_submissions.html:63 +#, python-format +msgid "There have been no submissions of the '%(title)s' form." +msgstr "" + +#: templates/wagtailforms/list_forms.html:7 +msgid "Title" +msgstr "" + +#: templates/wagtailforms/list_forms.html:8 +msgid "Origin" +msgstr "" + +#: templates/wagtailforms/list_submissions.html:9 +msgid "Submission Date" +msgstr "" + +#: templates/wagtailforms/results_forms.html:7 +msgid "No form pages have been created." +msgstr "" diff --git a/wagtail/wagtailforms/locale/vi/LC_MESSAGES/django.po b/wagtail/wagtailforms/locale/vi/LC_MESSAGES/django.po new file mode 100644 index 0000000000..02a3d2f095 --- /dev/null +++ b/wagtail/wagtailforms/locale/vi/LC_MESSAGES/django.po @@ -0,0 +1,128 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# +# Translators: +msgid "" +msgstr "" +"Project-Id-Version: Wagtail\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2014-09-11 16:38+0100\n" +"PO-Revision-Date: 2014-09-11 15:42+0000\n" +"Last-Translator: FULL NAME \n" +"Language-Team: Vietnamese (http://www.transifex.com/projects/p/wagtail/language/vi/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: vi\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: models.py:22 +msgid "Single line text" +msgstr "" + +#: models.py:23 +msgid "Multi-line text" +msgstr "" + +#: models.py:24 +msgid "Email" +msgstr "" + +#: models.py:25 +msgid "Number" +msgstr "" + +#: models.py:26 +msgid "URL" +msgstr "" + +#: models.py:27 +msgid "Checkbox" +msgstr "" + +#: models.py:28 +msgid "Checkboxes" +msgstr "" + +#: models.py:29 +msgid "Drop down" +msgstr "" + +#: models.py:30 +msgid "Radio buttons" +msgstr "" + +#: models.py:31 +msgid "Date" +msgstr "" + +#: models.py:32 +msgid "Date/time" +msgstr "" + +#: models.py:60 +msgid "The label of the form field" +msgstr "" + +#: models.py:67 +msgid "" +"Comma seperated list of choices. Only applicable in checkboxes, radio and " +"dropdown." +msgstr "" + +#: models.py:72 +msgid "Default value. Comma seperated values supported for checkboxes." +msgstr "" + +#: models.py:191 +msgid "Optional - form submissions will be emailed to this address" +msgstr "" + +#: wagtail_hooks.py:25 templates/wagtailforms/index.html:3 +#: templates/wagtailforms/index.html:6 +msgid "Forms" +msgstr "" + +#: templates/wagtailforms/index.html:7 +msgid "Pages" +msgstr "" + +#: templates/wagtailforms/index_submissions.html:3 +#, python-format +msgid "Submissions of %(form_title)s" +msgstr "" + +#: templates/wagtailforms/index_submissions.html:36 +#, python-format +msgid "Form data %(form_title)s" +msgstr "" + +#: templates/wagtailforms/index_submissions.html:45 +msgid "Filter" +msgstr "" + +#: templates/wagtailforms/index_submissions.html:51 +msgid "Download CSV" +msgstr "" + +#: templates/wagtailforms/index_submissions.html:63 +#, python-format +msgid "There have been no submissions of the '%(title)s' form." +msgstr "" + +#: templates/wagtailforms/list_forms.html:7 +msgid "Title" +msgstr "" + +#: templates/wagtailforms/list_forms.html:8 +msgid "Origin" +msgstr "" + +#: templates/wagtailforms/list_submissions.html:9 +msgid "Submission Date" +msgstr "" + +#: templates/wagtailforms/results_forms.html:7 +msgid "No form pages have been created." +msgstr "" diff --git a/wagtail/wagtailforms/locale/zh/LC_MESSAGES/django.po b/wagtail/wagtailforms/locale/zh/LC_MESSAGES/django.po new file mode 100644 index 0000000000..a7671d429d --- /dev/null +++ b/wagtail/wagtailforms/locale/zh/LC_MESSAGES/django.po @@ -0,0 +1,128 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# +# Translators: +msgid "" +msgstr "" +"Project-Id-Version: Wagtail\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2014-09-11 16:38+0100\n" +"PO-Revision-Date: 2014-09-11 15:42+0000\n" +"Last-Translator: FULL NAME \n" +"Language-Team: Chinese (http://www.transifex.com/projects/p/wagtail/language/zh/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: zh\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: models.py:22 +msgid "Single line text" +msgstr "" + +#: models.py:23 +msgid "Multi-line text" +msgstr "" + +#: models.py:24 +msgid "Email" +msgstr "" + +#: models.py:25 +msgid "Number" +msgstr "" + +#: models.py:26 +msgid "URL" +msgstr "" + +#: models.py:27 +msgid "Checkbox" +msgstr "" + +#: models.py:28 +msgid "Checkboxes" +msgstr "" + +#: models.py:29 +msgid "Drop down" +msgstr "" + +#: models.py:30 +msgid "Radio buttons" +msgstr "" + +#: models.py:31 +msgid "Date" +msgstr "" + +#: models.py:32 +msgid "Date/time" +msgstr "" + +#: models.py:60 +msgid "The label of the form field" +msgstr "" + +#: models.py:67 +msgid "" +"Comma seperated list of choices. Only applicable in checkboxes, radio and " +"dropdown." +msgstr "" + +#: models.py:72 +msgid "Default value. Comma seperated values supported for checkboxes." +msgstr "" + +#: models.py:191 +msgid "Optional - form submissions will be emailed to this address" +msgstr "" + +#: wagtail_hooks.py:25 templates/wagtailforms/index.html:3 +#: templates/wagtailforms/index.html:6 +msgid "Forms" +msgstr "" + +#: templates/wagtailforms/index.html:7 +msgid "Pages" +msgstr "" + +#: templates/wagtailforms/index_submissions.html:3 +#, python-format +msgid "Submissions of %(form_title)s" +msgstr "" + +#: templates/wagtailforms/index_submissions.html:36 +#, python-format +msgid "Form data %(form_title)s" +msgstr "" + +#: templates/wagtailforms/index_submissions.html:45 +msgid "Filter" +msgstr "" + +#: templates/wagtailforms/index_submissions.html:51 +msgid "Download CSV" +msgstr "" + +#: templates/wagtailforms/index_submissions.html:63 +#, python-format +msgid "There have been no submissions of the '%(title)s' form." +msgstr "" + +#: templates/wagtailforms/list_forms.html:7 +msgid "Title" +msgstr "" + +#: templates/wagtailforms/list_forms.html:8 +msgid "Origin" +msgstr "" + +#: templates/wagtailforms/list_submissions.html:9 +msgid "Submission Date" +msgstr "" + +#: templates/wagtailforms/results_forms.html:7 +msgid "No form pages have been created." +msgstr "" diff --git a/wagtail/wagtailimages/locale/pt_BR/LC_MESSAGES/django.po b/wagtail/wagtailimages/locale/pt_BR/LC_MESSAGES/django.po new file mode 100644 index 0000000000..16362d888b --- /dev/null +++ b/wagtail/wagtailimages/locale/pt_BR/LC_MESSAGES/django.po @@ -0,0 +1,296 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# +# Translators: +# Thiago Cangussu , 2014 +# Gladson , 2014 +msgid "" +msgstr "" +"Project-Id-Version: Wagtail\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2014-09-11 16:38+0100\n" +"PO-Revision-Date: 2014-08-12 01:50+0000\n" +"Last-Translator: Gladson \n" +"Language-Team: Portuguese (Brazil) (http://www.transifex.com/projects/p/wagtail/language/pt_BR/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: pt_BR\n" +"Plural-Forms: nplurals=2; plural=(n > 1);\n" + +#: forms.py:37 +msgid "Filter" +msgstr "Filtro" + +#: forms.py:39 +msgid "Original size" +msgstr "Tamanho original" + +#: forms.py:40 +msgid "Resize to width" +msgstr "Redimensionar a largura" + +#: forms.py:41 +msgid "Resize to height" +msgstr "Redimensionar a altura" + +#: forms.py:42 +msgid "Resize to min" +msgstr "Redimensionar o mínimo" + +#: forms.py:43 +msgid "Resize to max" +msgstr "Redimensionar o máximo" + +#: forms.py:44 +msgid "Resize to fill" +msgstr "Redimensionar para preencher" + +#: forms.py:47 +msgid "Width" +msgstr "Largura" + +#: forms.py:48 +msgid "Height" +msgstr "Altura" + +#: models.py:48 templates/wagtailimages/images/usage.html:16 +msgid "Title" +msgstr "Título" + +#: models.py:49 +msgid "File" +msgstr "Arquivo" + +#: models.py:55 +msgid "Tags" +msgstr "Etiquetas" + +#: wagtail_hooks.py:69 templates/wagtailimages/images/index.html:5 +#: templates/wagtailimages/images/index.html:18 +msgid "Images" +msgstr "Imagens" + +#: templates/wagtailimages/chooser/chooser.html:3 +#: templates/wagtailimages/edit_handlers/image_chooser_panel.html:19 +msgid "Choose an image" +msgstr "Escolha uma imagem" + +#: templates/wagtailimages/chooser/chooser.html:8 +#: templates/wagtailimages/chooser/chooser.html:20 +msgid "Search" +msgstr "Buscar" + +#: templates/wagtailimages/chooser/chooser.html:9 +#: templates/wagtailimages/chooser/chooser.html:43 +msgid "Upload" +msgstr "Enviar" + +#: templates/wagtailimages/chooser/chooser.html:23 +msgid "Popular tags" +msgstr "Gerar etiquetas" + +#: templates/wagtailimages/chooser/results.html:6 +#: templates/wagtailimages/images/results.html:6 +#, python-format +msgid "" +"\n" +" There is one match\n" +" " +msgid_plural "" +"\n" +" There are %(counter)s matches\n" +" " +msgstr[0] "\n Há um resultado\n " +msgstr[1] "\n Há %(counter)s resultados\n " + +#: templates/wagtailimages/chooser/results.html:13 +#: templates/wagtailimages/images/results.html:13 +msgid "Latest images" +msgstr "Últimas imagens" + +#: templates/wagtailimages/chooser/select_format.html:3 +msgid "Choose a format" +msgstr "Escolha um formato" + +#: templates/wagtailimages/chooser/select_format.html:17 +msgid "Insert image" +msgstr "Inserir imagem" + +#: templates/wagtailimages/edit_handlers/image_chooser_panel.html:17 +msgid "Clear image" +msgstr "Limpar imagem" + +#: templates/wagtailimages/edit_handlers/image_chooser_panel.html:18 +msgid "Choose another image" +msgstr "Escolha outra imagem" + +#: templates/wagtailimages/images/_file_field.html:6 +msgid "Change image:" +msgstr "Trocar imagem:" + +#: templates/wagtailimages/images/add.html:4 +#: templates/wagtailimages/images/index.html:19 +msgid "Add an image" +msgstr "Adicionar uma imagem" + +#: templates/wagtailimages/images/add.html:15 +msgid "Add image" +msgstr "Adicionar imagem" + +#: templates/wagtailimages/images/add.html:25 +#: templates/wagtailimages/images/edit.html:33 +msgid "Save" +msgstr "Salvar" + +#: templates/wagtailimages/images/confirm_delete.html:4 +#: templates/wagtailimages/images/confirm_delete.html:8 +#: templates/wagtailimages/images/edit.html:33 +msgid "Delete image" +msgstr "Apagar imagem" + +#: templates/wagtailimages/images/confirm_delete.html:16 +msgid "Are you sure you want to delete this image?" +msgstr "Você tem certeza que deseja apagar esta imagem?" + +#: templates/wagtailimages/images/confirm_delete.html:19 +msgid "Yes, delete" +msgstr "Sim, apagar" + +#: templates/wagtailimages/images/edit.html:4 +#: templates/wagtailimages/images/url_generator.html:4 +#, python-format +msgid "Editing image %(title)s" +msgstr "Editando imagem %(title)s" + +#: templates/wagtailimages/images/edit.html:15 +msgid "Editing" +msgstr "Editando" + +#: templates/wagtailimages/images/results.html:31 +#, python-format +msgid "Sorry, no images match \"%(query_string)s\"" +msgstr "Desculpe, não há resultados de imagens para \"%(query_string)s\"" + +#: templates/wagtailimages/images/results.html:34 +#, python-format +msgid "" +"You've not uploaded any images. Why not add one now?" +msgstr "Você não enviou nenhuma imagem. Por que não adicionar uma agora?" + +#: templates/wagtailimages/images/url_generator.html:9 +msgid "Generating URL" +msgstr "Gerando URL" + +#: templates/wagtailimages/images/url_generator.html:25 +msgid "URL" +msgstr "URL" + +#: templates/wagtailimages/images/url_generator.html:28 +msgid "Preview" +msgstr "Pré-visualizar" + +#: templates/wagtailimages/images/url_generator.html:34 +msgid "" +"Note that images generated larger than the screen will appear smaller when " +"previewed here, so they fit the screen." +msgstr "" + +#: templates/wagtailimages/images/usage.html:3 +#, python-format +msgid "Usage of %(title)s" +msgstr "" + +#: templates/wagtailimages/images/usage.html:5 +msgid "Usage of" +msgstr "" + +#: templates/wagtailimages/images/usage.html:17 +msgid "Parent" +msgstr "Pai" + +#: templates/wagtailimages/images/usage.html:18 +msgid "Type" +msgstr "Tipo" + +#: templates/wagtailimages/images/usage.html:19 +msgid "Status" +msgstr "Status" + +#: templates/wagtailimages/images/usage.html:26 +msgid "Edit this page" +msgstr "Editar essa página" + +#: templates/wagtailimages/multiple/add.html:3 +msgid "Add multiple images" +msgstr "Adicionar múltiplas imagens" + +#: templates/wagtailimages/multiple/add.html:13 +msgid "Add images" +msgstr "Adicionar imagens" + +#: templates/wagtailimages/multiple/add.html:18 +msgid "Drag and drop images into this area to upload immediately." +msgstr "Arraste e solte imagens para essa área para carregar imediatamente." + +#: templates/wagtailimages/multiple/add.html:22 +msgid "Or choose from your computer" +msgstr "Ou escolha do seu computador" + +#: templates/wagtailimages/multiple/add.html:47 +msgid "" +"Upload successful. Please update this image with a more appropriate title, " +"if necessary. You may also delete the image completely if the upload wasn't " +"required." +msgstr "Carregamento com sucesso. Por favor, atualize esta imagem com um título mais apropriado, se necessário. Você também pode apagar a imagem completamente se o upload não era necessário." + +#: templates/wagtailimages/multiple/add.html:48 +msgid "Sorry, upload failed." +msgstr "Desculpe, o carregamento falhou." + +#: templates/wagtailimages/multiple/edit_form.html:10 +msgid "Update" +msgstr "Atualizar" + +#: templates/wagtailimages/multiple/edit_form.html:11 +msgid "Delete" +msgstr "Excluir" + +#: utils/validators.py:17 utils/validators.py:28 +msgid "" +"Not a valid image. Please use a gif, jpeg or png file with the correct file " +"extension (*.gif, *.jpg or *.png)." +msgstr "Não é uma imagem válida. Por favor, use um arquivo gif, jpeg ou png com a extensão de arquivo correta (*.gif, *.jpg oiu *.png)." + +#: utils/validators.py:35 +#, python-format +msgid "" +"Not a valid %s image. Please use a gif, jpeg or png file with the correct " +"file extension (*.gif, *.jpg or *.png)." +msgstr "" + +#: views/images.py:38 views/images.py:48 +msgid "Search images" +msgstr "Buscar imagens" + +#: views/images.py:105 +msgid "Image '{0}' updated." +msgstr "Imagem '{0}' enviada." + +#: views/images.py:108 +msgid "The image could not be saved due to errors." +msgstr "A imagem não pôde ser salva devido à erros." + +#: views/images.py:194 +msgid "Image '{0}' deleted." +msgstr "Imagem '{0}' apagada." + +#: views/images.py:217 +msgid "Image '{0}' added." +msgstr "Imagem '{0}' adicionada." + +#: views/images.py:220 +msgid "The image could not be created due to errors." +msgstr "A imagem não pôde ser criada devido à erros." diff --git a/wagtail/wagtailimages/locale/ru/LC_MESSAGES/django.po b/wagtail/wagtailimages/locale/ru/LC_MESSAGES/django.po new file mode 100644 index 0000000000..aeaf7fd02a --- /dev/null +++ b/wagtail/wagtailimages/locale/ru/LC_MESSAGES/django.po @@ -0,0 +1,296 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# +# Translators: +# ajk, 2014 +msgid "" +msgstr "" +"Project-Id-Version: Wagtail\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2014-09-11 16:38+0100\n" +"PO-Revision-Date: 2014-08-01 15:43+0000\n" +"Last-Translator: Karl Hobley \n" +"Language-Team: Russian (http://www.transifex.com/projects/p/wagtail/language/ru/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: ru\n" +"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" + +#: forms.py:37 +msgid "Filter" +msgstr "" + +#: forms.py:39 +msgid "Original size" +msgstr "" + +#: forms.py:40 +msgid "Resize to width" +msgstr "" + +#: forms.py:41 +msgid "Resize to height" +msgstr "" + +#: forms.py:42 +msgid "Resize to min" +msgstr "" + +#: forms.py:43 +msgid "Resize to max" +msgstr "" + +#: forms.py:44 +msgid "Resize to fill" +msgstr "" + +#: forms.py:47 +msgid "Width" +msgstr "" + +#: forms.py:48 +msgid "Height" +msgstr "" + +#: models.py:48 templates/wagtailimages/images/usage.html:16 +msgid "Title" +msgstr "Заголовок" + +#: models.py:49 +msgid "File" +msgstr "Файл" + +#: models.py:55 +msgid "Tags" +msgstr "Тэги" + +#: wagtail_hooks.py:69 templates/wagtailimages/images/index.html:5 +#: templates/wagtailimages/images/index.html:18 +msgid "Images" +msgstr "Изображения" + +#: templates/wagtailimages/chooser/chooser.html:3 +#: templates/wagtailimages/edit_handlers/image_chooser_panel.html:19 +msgid "Choose an image" +msgstr "Выберите изображение" + +#: templates/wagtailimages/chooser/chooser.html:8 +#: templates/wagtailimages/chooser/chooser.html:20 +msgid "Search" +msgstr "Поиск" + +#: templates/wagtailimages/chooser/chooser.html:9 +#: templates/wagtailimages/chooser/chooser.html:43 +msgid "Upload" +msgstr "Загрузка" + +#: templates/wagtailimages/chooser/chooser.html:23 +msgid "Popular tags" +msgstr "Популярные теги" + +#: templates/wagtailimages/chooser/results.html:6 +#: templates/wagtailimages/images/results.html:6 +#, python-format +msgid "" +"\n" +" There is one match\n" +" " +msgid_plural "" +"\n" +" There are %(counter)s matches\n" +" " +msgstr[0] "\nНайдено одно совпадение" +msgstr[1] "\nНайдено %(counter)s совпадения" +msgstr[2] "\nНайдено %(counter)s совпадений" + +#: templates/wagtailimages/chooser/results.html:13 +#: templates/wagtailimages/images/results.html:13 +msgid "Latest images" +msgstr "Недавние изображения" + +#: templates/wagtailimages/chooser/select_format.html:3 +msgid "Choose a format" +msgstr "Выберите формат" + +#: templates/wagtailimages/chooser/select_format.html:17 +msgid "Insert image" +msgstr "Вставить изображение" + +#: templates/wagtailimages/edit_handlers/image_chooser_panel.html:17 +msgid "Clear image" +msgstr "Убрать изображение" + +#: templates/wagtailimages/edit_handlers/image_chooser_panel.html:18 +msgid "Choose another image" +msgstr "Выбрать другое изображение" + +#: templates/wagtailimages/images/_file_field.html:6 +msgid "Change image:" +msgstr "Изменить изображение:" + +#: templates/wagtailimages/images/add.html:4 +#: templates/wagtailimages/images/index.html:19 +msgid "Add an image" +msgstr "Добавить изображение" + +#: templates/wagtailimages/images/add.html:15 +msgid "Add image" +msgstr "Добавить изображение" + +#: templates/wagtailimages/images/add.html:25 +#: templates/wagtailimages/images/edit.html:33 +msgid "Save" +msgstr "Сохранить" + +#: templates/wagtailimages/images/confirm_delete.html:4 +#: templates/wagtailimages/images/confirm_delete.html:8 +#: templates/wagtailimages/images/edit.html:33 +msgid "Delete image" +msgstr "Удалить изображение" + +#: templates/wagtailimages/images/confirm_delete.html:16 +msgid "Are you sure you want to delete this image?" +msgstr "Вы уверены, что хотите удалить изображение?" + +#: templates/wagtailimages/images/confirm_delete.html:19 +msgid "Yes, delete" +msgstr "Да, удалить" + +#: templates/wagtailimages/images/edit.html:4 +#: templates/wagtailimages/images/url_generator.html:4 +#, python-format +msgid "Editing image %(title)s" +msgstr "Редактирование изображения %(title)s" + +#: templates/wagtailimages/images/edit.html:15 +msgid "Editing" +msgstr "Редактирование" + +#: templates/wagtailimages/images/results.html:31 +#, python-format +msgid "Sorry, no images match \"%(query_string)s\"" +msgstr "Извините, подходящих изображений не найдено \"%(query_string)s\"" + +#: templates/wagtailimages/images/results.html:34 +#, python-format +msgid "" +"You've not uploaded any images. Why not add one now?" +msgstr "Вы еще не загрузили ни одного изображения. Почему бы не сделать это сейчас?" + +#: templates/wagtailimages/images/url_generator.html:9 +msgid "Generating URL" +msgstr "" + +#: templates/wagtailimages/images/url_generator.html:25 +msgid "URL" +msgstr "" + +#: templates/wagtailimages/images/url_generator.html:28 +msgid "Preview" +msgstr "" + +#: templates/wagtailimages/images/url_generator.html:34 +msgid "" +"Note that images generated larger than the screen will appear smaller when " +"previewed here, so they fit the screen." +msgstr "" + +#: templates/wagtailimages/images/usage.html:3 +#, python-format +msgid "Usage of %(title)s" +msgstr "" + +#: templates/wagtailimages/images/usage.html:5 +msgid "Usage of" +msgstr "" + +#: templates/wagtailimages/images/usage.html:17 +msgid "Parent" +msgstr "" + +#: templates/wagtailimages/images/usage.html:18 +msgid "Type" +msgstr "" + +#: templates/wagtailimages/images/usage.html:19 +msgid "Status" +msgstr "" + +#: templates/wagtailimages/images/usage.html:26 +msgid "Edit this page" +msgstr "" + +#: templates/wagtailimages/multiple/add.html:3 +msgid "Add multiple images" +msgstr "" + +#: templates/wagtailimages/multiple/add.html:13 +msgid "Add images" +msgstr "" + +#: templates/wagtailimages/multiple/add.html:18 +msgid "Drag and drop images into this area to upload immediately." +msgstr "" + +#: templates/wagtailimages/multiple/add.html:22 +msgid "Or choose from your computer" +msgstr "" + +#: templates/wagtailimages/multiple/add.html:47 +msgid "" +"Upload successful. Please update this image with a more appropriate title, " +"if necessary. You may also delete the image completely if the upload wasn't " +"required." +msgstr "" + +#: templates/wagtailimages/multiple/add.html:48 +msgid "Sorry, upload failed." +msgstr "" + +#: templates/wagtailimages/multiple/edit_form.html:10 +msgid "Update" +msgstr "" + +#: templates/wagtailimages/multiple/edit_form.html:11 +msgid "Delete" +msgstr "" + +#: utils/validators.py:17 utils/validators.py:28 +msgid "" +"Not a valid image. Please use a gif, jpeg or png file with the correct file " +"extension (*.gif, *.jpg or *.png)." +msgstr "" + +#: utils/validators.py:35 +#, python-format +msgid "" +"Not a valid %s image. Please use a gif, jpeg or png file with the correct " +"file extension (*.gif, *.jpg or *.png)." +msgstr "" + +#: views/images.py:38 views/images.py:48 +msgid "Search images" +msgstr "Поиск изображений" + +#: views/images.py:105 +msgid "Image '{0}' updated." +msgstr "Изображение '{0}' обновлено." + +#: views/images.py:108 +msgid "The image could not be saved due to errors." +msgstr "Это изображение не может быть сохранено из-за ошибок." + +#: views/images.py:194 +msgid "Image '{0}' deleted." +msgstr "Изображение '{0}' удалено." + +#: views/images.py:217 +msgid "Image '{0}' added." +msgstr "Изображение '{0}' добавлено." + +#: views/images.py:220 +msgid "The image could not be created due to errors." +msgstr "Это изображение не может быть создано из-за ошибок." diff --git a/wagtail/wagtailimages/locale/vi/LC_MESSAGES/django.po b/wagtail/wagtailimages/locale/vi/LC_MESSAGES/django.po new file mode 100644 index 0000000000..72addd86b5 --- /dev/null +++ b/wagtail/wagtailimages/locale/vi/LC_MESSAGES/django.po @@ -0,0 +1,293 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# +# Translators: +msgid "" +msgstr "" +"Project-Id-Version: Wagtail\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2014-09-11 16:38+0100\n" +"PO-Revision-Date: 2014-08-01 15:43+0000\n" +"Last-Translator: Karl Hobley \n" +"Language-Team: Vietnamese (http://www.transifex.com/projects/p/wagtail/language/vi/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: vi\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: forms.py:37 +msgid "Filter" +msgstr "" + +#: forms.py:39 +msgid "Original size" +msgstr "" + +#: forms.py:40 +msgid "Resize to width" +msgstr "" + +#: forms.py:41 +msgid "Resize to height" +msgstr "" + +#: forms.py:42 +msgid "Resize to min" +msgstr "" + +#: forms.py:43 +msgid "Resize to max" +msgstr "" + +#: forms.py:44 +msgid "Resize to fill" +msgstr "" + +#: forms.py:47 +msgid "Width" +msgstr "" + +#: forms.py:48 +msgid "Height" +msgstr "" + +#: models.py:48 templates/wagtailimages/images/usage.html:16 +msgid "Title" +msgstr "" + +#: models.py:49 +msgid "File" +msgstr "" + +#: models.py:55 +msgid "Tags" +msgstr "" + +#: wagtail_hooks.py:69 templates/wagtailimages/images/index.html:5 +#: templates/wagtailimages/images/index.html:18 +msgid "Images" +msgstr "" + +#: templates/wagtailimages/chooser/chooser.html:3 +#: templates/wagtailimages/edit_handlers/image_chooser_panel.html:19 +msgid "Choose an image" +msgstr "" + +#: templates/wagtailimages/chooser/chooser.html:8 +#: templates/wagtailimages/chooser/chooser.html:20 +msgid "Search" +msgstr "" + +#: templates/wagtailimages/chooser/chooser.html:9 +#: templates/wagtailimages/chooser/chooser.html:43 +msgid "Upload" +msgstr "" + +#: templates/wagtailimages/chooser/chooser.html:23 +msgid "Popular tags" +msgstr "" + +#: templates/wagtailimages/chooser/results.html:6 +#: templates/wagtailimages/images/results.html:6 +#, python-format +msgid "" +"\n" +" There is one match\n" +" " +msgid_plural "" +"\n" +" There are %(counter)s matches\n" +" " +msgstr[0] "" + +#: templates/wagtailimages/chooser/results.html:13 +#: templates/wagtailimages/images/results.html:13 +msgid "Latest images" +msgstr "" + +#: templates/wagtailimages/chooser/select_format.html:3 +msgid "Choose a format" +msgstr "" + +#: templates/wagtailimages/chooser/select_format.html:17 +msgid "Insert image" +msgstr "" + +#: templates/wagtailimages/edit_handlers/image_chooser_panel.html:17 +msgid "Clear image" +msgstr "" + +#: templates/wagtailimages/edit_handlers/image_chooser_panel.html:18 +msgid "Choose another image" +msgstr "" + +#: templates/wagtailimages/images/_file_field.html:6 +msgid "Change image:" +msgstr "" + +#: templates/wagtailimages/images/add.html:4 +#: templates/wagtailimages/images/index.html:19 +msgid "Add an image" +msgstr "" + +#: templates/wagtailimages/images/add.html:15 +msgid "Add image" +msgstr "" + +#: templates/wagtailimages/images/add.html:25 +#: templates/wagtailimages/images/edit.html:33 +msgid "Save" +msgstr "" + +#: templates/wagtailimages/images/confirm_delete.html:4 +#: templates/wagtailimages/images/confirm_delete.html:8 +#: templates/wagtailimages/images/edit.html:33 +msgid "Delete image" +msgstr "" + +#: templates/wagtailimages/images/confirm_delete.html:16 +msgid "Are you sure you want to delete this image?" +msgstr "" + +#: templates/wagtailimages/images/confirm_delete.html:19 +msgid "Yes, delete" +msgstr "" + +#: templates/wagtailimages/images/edit.html:4 +#: templates/wagtailimages/images/url_generator.html:4 +#, python-format +msgid "Editing image %(title)s" +msgstr "" + +#: templates/wagtailimages/images/edit.html:15 +msgid "Editing" +msgstr "" + +#: templates/wagtailimages/images/results.html:31 +#, python-format +msgid "Sorry, no images match \"%(query_string)s\"" +msgstr "" + +#: templates/wagtailimages/images/results.html:34 +#, python-format +msgid "" +"You've not uploaded any images. Why not add one now?" +msgstr "" + +#: templates/wagtailimages/images/url_generator.html:9 +msgid "Generating URL" +msgstr "" + +#: templates/wagtailimages/images/url_generator.html:25 +msgid "URL" +msgstr "" + +#: templates/wagtailimages/images/url_generator.html:28 +msgid "Preview" +msgstr "" + +#: templates/wagtailimages/images/url_generator.html:34 +msgid "" +"Note that images generated larger than the screen will appear smaller when " +"previewed here, so they fit the screen." +msgstr "" + +#: templates/wagtailimages/images/usage.html:3 +#, python-format +msgid "Usage of %(title)s" +msgstr "" + +#: templates/wagtailimages/images/usage.html:5 +msgid "Usage of" +msgstr "" + +#: templates/wagtailimages/images/usage.html:17 +msgid "Parent" +msgstr "" + +#: templates/wagtailimages/images/usage.html:18 +msgid "Type" +msgstr "" + +#: templates/wagtailimages/images/usage.html:19 +msgid "Status" +msgstr "" + +#: templates/wagtailimages/images/usage.html:26 +msgid "Edit this page" +msgstr "" + +#: templates/wagtailimages/multiple/add.html:3 +msgid "Add multiple images" +msgstr "" + +#: templates/wagtailimages/multiple/add.html:13 +msgid "Add images" +msgstr "" + +#: templates/wagtailimages/multiple/add.html:18 +msgid "Drag and drop images into this area to upload immediately." +msgstr "" + +#: templates/wagtailimages/multiple/add.html:22 +msgid "Or choose from your computer" +msgstr "" + +#: templates/wagtailimages/multiple/add.html:47 +msgid "" +"Upload successful. Please update this image with a more appropriate title, " +"if necessary. You may also delete the image completely if the upload wasn't " +"required." +msgstr "" + +#: templates/wagtailimages/multiple/add.html:48 +msgid "Sorry, upload failed." +msgstr "" + +#: templates/wagtailimages/multiple/edit_form.html:10 +msgid "Update" +msgstr "" + +#: templates/wagtailimages/multiple/edit_form.html:11 +msgid "Delete" +msgstr "" + +#: utils/validators.py:17 utils/validators.py:28 +msgid "" +"Not a valid image. Please use a gif, jpeg or png file with the correct file " +"extension (*.gif, *.jpg or *.png)." +msgstr "" + +#: utils/validators.py:35 +#, python-format +msgid "" +"Not a valid %s image. Please use a gif, jpeg or png file with the correct " +"file extension (*.gif, *.jpg or *.png)." +msgstr "" + +#: views/images.py:38 views/images.py:48 +msgid "Search images" +msgstr "" + +#: views/images.py:105 +msgid "Image '{0}' updated." +msgstr "" + +#: views/images.py:108 +msgid "The image could not be saved due to errors." +msgstr "" + +#: views/images.py:194 +msgid "Image '{0}' deleted." +msgstr "" + +#: views/images.py:217 +msgid "Image '{0}' added." +msgstr "" + +#: views/images.py:220 +msgid "The image could not be created due to errors." +msgstr "" diff --git a/wagtail/wagtailredirects/locale/pt_BR/LC_MESSAGES/django.po b/wagtail/wagtailredirects/locale/pt_BR/LC_MESSAGES/django.po new file mode 100644 index 0000000000..8b366e7f26 --- /dev/null +++ b/wagtail/wagtailredirects/locale/pt_BR/LC_MESSAGES/django.po @@ -0,0 +1,157 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# +# Translators: +# Thiago Cangussu , 2014 +# Gladson , 2014 +msgid "" +msgstr "" +"Project-Id-Version: Wagtail\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2014-09-11 16:38+0100\n" +"PO-Revision-Date: 2014-08-17 01:17+0000\n" +"Last-Translator: Gladson \n" +"Language-Team: Portuguese (Brazil) (http://www.transifex.com/projects/p/wagtail/language/pt_BR/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: pt_BR\n" +"Plural-Forms: nplurals=2; plural=(n > 1);\n" + +#: models.py:10 +msgid "Redirect from" +msgstr "Redirecionar de" + +#: models.py:12 +msgid "Permanent" +msgstr "Permanente" + +#: models.py:12 +msgid "" +"Recommended. Permanent redirects ensure search engines forget the old page " +"(the 'Redirect from') and index the new page instead." +msgstr "Recomendado. Redirecionamento permanente garante que mecanismos de busca esqueçam a página antiga (o 'Redirecionar de') e criem um idex da página nova." + +#: models.py:13 +msgid "Redirect to a page" +msgstr "Redirecionar para a página" + +#: models.py:14 +msgid "Redirect to any URL" +msgstr "Redirecionar para qualquer URL" + +#: views.py:58 +msgid "Search redirects" +msgstr "Pesquisar redirecionamentos" + +#: views.py:71 +msgid "Redirect '{0}' updated." +msgstr "Redirecionar '{0}' atualizado." + +#: views.py:74 +msgid "The redirect could not be saved due to errors." +msgstr "O redirecionamento não pôde ser salvo devido a erros." + +#: views.py:92 +msgid "Redirect '{0}' deleted." +msgstr "Redirecionar '{0}' excluída." + +#: views.py:112 +msgid "Redirect '{0}' added." +msgstr "Redirecionar '{0}' adicionada." + +#: views.py:115 +msgid "The redirect could not be created due to errors." +msgstr "O redirecionamento não pode ser criado devido a erros." + +#: wagtail_hooks.py:25 templates/wagtailredirects/index.html:3 +#: templates/wagtailredirects/index.html:17 +msgid "Redirects" +msgstr "Redirecionamentos" + +#: templates/wagtailredirects/add.html:3 templates/wagtailredirects/add.html:6 +#: templates/wagtailredirects/index.html:18 +msgid "Add redirect" +msgstr "Add Redirecionamentos" + +#: templates/wagtailredirects/add.html:14 +#: templates/wagtailredirects/edit.html:14 +msgid "Save" +msgstr "Salvar" + +#: templates/wagtailredirects/confirm_delete.html:4 +#, python-format +msgid "Delete redirect %(title)s" +msgstr "Excluir redirecionamento %(title)s" + +#: templates/wagtailredirects/confirm_delete.html:6 +msgid "Delete" +msgstr "Excluir" + +#: templates/wagtailredirects/confirm_delete.html:10 +msgid "Are you sure you want to delete this redirect?" +msgstr "Você tem certeza que deseja excluir esse redirecionamento?" + +#: templates/wagtailredirects/confirm_delete.html:13 +msgid "Yes, delete" +msgstr "Sim, exclua" + +#: templates/wagtailredirects/edit.html:4 +#, python-format +msgid "Editing %(title)s" +msgstr "Editando %(title)s" + +#: templates/wagtailredirects/edit.html:6 +msgid "Editing" +msgstr "Editando" + +#: templates/wagtailredirects/edit.html:15 +msgid "Delete redirect" +msgstr "Excluir redirecionamento" + +#: templates/wagtailredirects/list.html:11 +#: templates/wagtailredirects/list.html:14 +msgid "From" +msgstr "De" + +#: templates/wagtailredirects/list.html:17 +msgid "To" +msgstr "Para" + +#: templates/wagtailredirects/list.html:18 +msgid "Type" +msgstr "Tipo" + +#: templates/wagtailredirects/list.html:25 +msgid "Edit this redirect" +msgstr "Edite esse redirecionamento" + +#: templates/wagtailredirects/list.html:34 +msgid "primary" +msgstr "primário" + +#: templates/wagtailredirects/results.html:5 +#, python-format +msgid "" +"\n" +" There is one match\n" +" " +msgid_plural "" +"\n" +" There are %(counter)s matches\n" +" " +msgstr[0] "\n Há um resultado\n " +msgstr[1] "\n Há %(counter)s resultados\n " + +#: templates/wagtailredirects/results.html:18 +#, python-format +msgid "Sorry, no redirects match \"%(query_string)s\"" +msgstr "Desculpe, nenhum resultado de redirecionamento \"%(query_string)s\"" + +#: templates/wagtailredirects/results.html:21 +#, python-format +msgid "" +"No redirects have been created. Why not add one?" +msgstr "Não há redirecionamentos criados. Por que não foi adicionado?" diff --git a/wagtail/wagtailredirects/locale/ru/LC_MESSAGES/django.po b/wagtail/wagtailredirects/locale/ru/LC_MESSAGES/django.po new file mode 100644 index 0000000000..2fb79bf71f --- /dev/null +++ b/wagtail/wagtailredirects/locale/ru/LC_MESSAGES/django.po @@ -0,0 +1,157 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# +# Translators: +# HNKNTA , 2014 +msgid "" +msgstr "" +"Project-Id-Version: Wagtail\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2014-09-11 16:38+0100\n" +"PO-Revision-Date: 2014-07-14 14:56+0000\n" +"Last-Translator: Karl Hobley \n" +"Language-Team: Russian (http://www.transifex.com/projects/p/wagtail/language/ru/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: ru\n" +"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" + +#: models.py:10 +msgid "Redirect from" +msgstr "Перенаправить от" + +#: models.py:12 +msgid "Permanent" +msgstr "" + +#: models.py:12 +msgid "" +"Recommended. Permanent redirects ensure search engines forget the old page " +"(the 'Redirect from') and index the new page instead." +msgstr "" + +#: models.py:13 +msgid "Redirect to a page" +msgstr "Перенаправить на страницу" + +#: models.py:14 +msgid "Redirect to any URL" +msgstr "Перенаправить к любому URL" + +#: views.py:58 +msgid "Search redirects" +msgstr "" + +#: views.py:71 +msgid "Redirect '{0}' updated." +msgstr "Перенаправление '{0}' обновлено." + +#: views.py:74 +msgid "The redirect could not be saved due to errors." +msgstr "" + +#: views.py:92 +msgid "Redirect '{0}' deleted." +msgstr "" + +#: views.py:112 +msgid "Redirect '{0}' added." +msgstr "" + +#: views.py:115 +msgid "The redirect could not be created due to errors." +msgstr "" + +#: wagtail_hooks.py:25 templates/wagtailredirects/index.html:3 +#: templates/wagtailredirects/index.html:17 +msgid "Redirects" +msgstr "Перенаправления" + +#: templates/wagtailredirects/add.html:3 templates/wagtailredirects/add.html:6 +#: templates/wagtailredirects/index.html:18 +msgid "Add redirect" +msgstr "" + +#: templates/wagtailredirects/add.html:14 +#: templates/wagtailredirects/edit.html:14 +msgid "Save" +msgstr "Сохранить" + +#: templates/wagtailredirects/confirm_delete.html:4 +#, python-format +msgid "Delete redirect %(title)s" +msgstr "" + +#: templates/wagtailredirects/confirm_delete.html:6 +msgid "Delete" +msgstr "Удалить" + +#: templates/wagtailredirects/confirm_delete.html:10 +msgid "Are you sure you want to delete this redirect?" +msgstr "" + +#: templates/wagtailredirects/confirm_delete.html:13 +msgid "Yes, delete" +msgstr "Да, удалить" + +#: templates/wagtailredirects/edit.html:4 +#, python-format +msgid "Editing %(title)s" +msgstr "" + +#: templates/wagtailredirects/edit.html:6 +msgid "Editing" +msgstr "Редактирование" + +#: templates/wagtailredirects/edit.html:15 +msgid "Delete redirect" +msgstr "" + +#: templates/wagtailredirects/list.html:11 +#: templates/wagtailredirects/list.html:14 +msgid "From" +msgstr "" + +#: templates/wagtailredirects/list.html:17 +msgid "To" +msgstr "На" + +#: templates/wagtailredirects/list.html:18 +msgid "Type" +msgstr "" + +#: templates/wagtailredirects/list.html:25 +msgid "Edit this redirect" +msgstr "Редактировать это перенаправление" + +#: templates/wagtailredirects/list.html:34 +msgid "primary" +msgstr "" + +#: templates/wagtailredirects/results.html:5 +#, python-format +msgid "" +"\n" +" There is one match\n" +" " +msgid_plural "" +"\n" +" There are %(counter)s matches\n" +" " +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" + +#: templates/wagtailredirects/results.html:18 +#, python-format +msgid "Sorry, no redirects match \"%(query_string)s\"" +msgstr "" + +#: templates/wagtailredirects/results.html:21 +#, python-format +msgid "" +"No redirects have been created. Why not add one?" +msgstr "" diff --git a/wagtail/wagtailredirects/locale/vi/LC_MESSAGES/django.po b/wagtail/wagtailredirects/locale/vi/LC_MESSAGES/django.po new file mode 100644 index 0000000000..11293136de --- /dev/null +++ b/wagtail/wagtailredirects/locale/vi/LC_MESSAGES/django.po @@ -0,0 +1,154 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# +# Translators: +msgid "" +msgstr "" +"Project-Id-Version: Wagtail\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2014-09-11 16:38+0100\n" +"PO-Revision-Date: 2014-07-14 14:56+0000\n" +"Last-Translator: Karl Hobley \n" +"Language-Team: Vietnamese (http://www.transifex.com/projects/p/wagtail/language/vi/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: vi\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: models.py:10 +msgid "Redirect from" +msgstr "" + +#: models.py:12 +msgid "Permanent" +msgstr "" + +#: models.py:12 +msgid "" +"Recommended. Permanent redirects ensure search engines forget the old page " +"(the 'Redirect from') and index the new page instead." +msgstr "" + +#: models.py:13 +msgid "Redirect to a page" +msgstr "" + +#: models.py:14 +msgid "Redirect to any URL" +msgstr "" + +#: views.py:58 +msgid "Search redirects" +msgstr "" + +#: views.py:71 +msgid "Redirect '{0}' updated." +msgstr "" + +#: views.py:74 +msgid "The redirect could not be saved due to errors." +msgstr "" + +#: views.py:92 +msgid "Redirect '{0}' deleted." +msgstr "" + +#: views.py:112 +msgid "Redirect '{0}' added." +msgstr "" + +#: views.py:115 +msgid "The redirect could not be created due to errors." +msgstr "" + +#: wagtail_hooks.py:25 templates/wagtailredirects/index.html:3 +#: templates/wagtailredirects/index.html:17 +msgid "Redirects" +msgstr "" + +#: templates/wagtailredirects/add.html:3 templates/wagtailredirects/add.html:6 +#: templates/wagtailredirects/index.html:18 +msgid "Add redirect" +msgstr "" + +#: templates/wagtailredirects/add.html:14 +#: templates/wagtailredirects/edit.html:14 +msgid "Save" +msgstr "" + +#: templates/wagtailredirects/confirm_delete.html:4 +#, python-format +msgid "Delete redirect %(title)s" +msgstr "" + +#: templates/wagtailredirects/confirm_delete.html:6 +msgid "Delete" +msgstr "" + +#: templates/wagtailredirects/confirm_delete.html:10 +msgid "Are you sure you want to delete this redirect?" +msgstr "" + +#: templates/wagtailredirects/confirm_delete.html:13 +msgid "Yes, delete" +msgstr "" + +#: templates/wagtailredirects/edit.html:4 +#, python-format +msgid "Editing %(title)s" +msgstr "" + +#: templates/wagtailredirects/edit.html:6 +msgid "Editing" +msgstr "" + +#: templates/wagtailredirects/edit.html:15 +msgid "Delete redirect" +msgstr "" + +#: templates/wagtailredirects/list.html:11 +#: templates/wagtailredirects/list.html:14 +msgid "From" +msgstr "" + +#: templates/wagtailredirects/list.html:17 +msgid "To" +msgstr "" + +#: templates/wagtailredirects/list.html:18 +msgid "Type" +msgstr "" + +#: templates/wagtailredirects/list.html:25 +msgid "Edit this redirect" +msgstr "" + +#: templates/wagtailredirects/list.html:34 +msgid "primary" +msgstr "" + +#: templates/wagtailredirects/results.html:5 +#, python-format +msgid "" +"\n" +" There is one match\n" +" " +msgid_plural "" +"\n" +" There are %(counter)s matches\n" +" " +msgstr[0] "" + +#: templates/wagtailredirects/results.html:18 +#, python-format +msgid "Sorry, no redirects match \"%(query_string)s\"" +msgstr "" + +#: templates/wagtailredirects/results.html:21 +#, python-format +msgid "" +"No redirects have been created. Why not add one?" +msgstr "" diff --git a/wagtail/wagtailsearch/locale/pt_BR/LC_MESSAGES/django.po b/wagtail/wagtailsearch/locale/pt_BR/LC_MESSAGES/django.po new file mode 100644 index 0000000000..68b6b3418c --- /dev/null +++ b/wagtail/wagtailsearch/locale/pt_BR/LC_MESSAGES/django.po @@ -0,0 +1,201 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# +# Translators: +# Gladson , 2014 +msgid "" +msgstr "" +"Project-Id-Version: Wagtail\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2014-09-11 16:38+0100\n" +"PO-Revision-Date: 2014-08-17 01:44+0000\n" +"Last-Translator: Gladson \n" +"Language-Team: Portuguese (Brazil) (http://www.transifex.com/projects/p/wagtail/language/pt_BR/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: pt_BR\n" +"Plural-Forms: nplurals=2; plural=(n > 1);\n" + +#: forms.py:9 +msgid "Search term(s)/phrase" +msgstr "" + +#: forms.py:10 +msgid "" +"Enter the full search string to match. An \n" +" exact match is required for your Editors Picks to be \n" +" displayed, wildcards are NOT allowed." +msgstr "Digite o texto completo para procurar a correspondência. Uma \n correspondência exata é necessária para que as Sugestões dos Editores, escolha a que será \n exibida, curingas NÃO serão permitidas." + +#: forms.py:36 +msgid "Please specify at least one recommendation for this search term." +msgstr "Especifique pelo menos uma recomendação para este termo de busca." + +#: wagtail_hooks.py:25 templates/wagtailsearch/editorspicks/list.html:9 +msgid "Editors picks" +msgstr "Sugestões do editor" + +#: templates/wagtailsearch/editorspicks/add.html:3 +#: templates/wagtailsearch/editorspicks/add.html:5 +msgid "Add editor's pick" +msgstr "Add sugestões do editor" + +#: templates/wagtailsearch/editorspicks/add.html:10 +msgid "" +"\n" +"

    Editors picks are a means of recommending specific pages that might not organically come high up in search results. E.g recommending your primary donation page to a user searching with a less common term like \"giving\".

    \n" +" " +msgstr "" + +#: templates/wagtailsearch/editorspicks/add.html:13 +msgid "" +"\n" +"

    The \"Search term(s)/phrase\" field below must contain the full and exact search for which you wish to provide recommended results, including any misspellings/user error. To help, you can choose from search terms that have been popular with users of your site.

    \n" +" " +msgstr "" + +#: templates/wagtailsearch/editorspicks/add.html:27 +#: templates/wagtailsearch/editorspicks/edit.html:19 +msgid "Save" +msgstr "Salvar" + +#: templates/wagtailsearch/editorspicks/confirm_delete.html:3 +#, python-format +msgid "Delete %(query)s" +msgstr "Excluir %(query)s" + +#: templates/wagtailsearch/editorspicks/confirm_delete.html:5 +#: templates/wagtailsearch/editorspicks/edit.html:20 +#: templates/wagtailsearch/editorspicks/includes/editorspicks_form.html:6 +msgid "Delete" +msgstr "Excluir" + +#: templates/wagtailsearch/editorspicks/confirm_delete.html:9 +msgid "" +"Are you sure you want to delete all editors picks for this search term?" +msgstr "Tem certeza de que deseja excluir todas as sugestões dos editores para este termo de busca?" + +#: templates/wagtailsearch/editorspicks/confirm_delete.html:12 +msgid "Yes, delete" +msgstr "Sim, apague" + +#: templates/wagtailsearch/editorspicks/edit.html:3 +#, python-format +msgid "Editing %(query)s" +msgstr "Editando %(query)s" + +#: templates/wagtailsearch/editorspicks/edit.html:5 +msgid "Editing" +msgstr "Editando" + +#: templates/wagtailsearch/editorspicks/index.html:3 +msgid "Search Terms" +msgstr "Procurar Termos" + +#: templates/wagtailsearch/editorspicks/index.html:17 +msgid "Editor's search picks" +msgstr "Buscar sugestões do editor" + +#: templates/wagtailsearch/editorspicks/index.html:18 +msgid "Add new editor's pick" +msgstr "Add nova sugestão do editor" + +#: templates/wagtailsearch/editorspicks/list.html:8 +msgid "Search term(s)" +msgstr "Procurar termo(s)" + +#: templates/wagtailsearch/editorspicks/list.html:10 +#: templates/wagtailsearch/queries/chooser/results.html:8 +msgid "Views (past week)" +msgstr "Visualizações (última semana)" + +#: templates/wagtailsearch/editorspicks/list.html:17 +msgid "Edit this pick" +msgstr "Editar sugestão do editor" + +#: templates/wagtailsearch/editorspicks/list.html:23 +msgid "None" +msgstr "Nenhum" + +#: templates/wagtailsearch/editorspicks/results.html:5 +#, python-format +msgid "" +"\n" +" There is one match\n" +" " +msgid_plural "" +"\n" +" There are %(counter)s matches\n" +" " +msgstr[0] "\n Há um resultado\n " +msgstr[1] "\n Há %(counter)s resultados\n " + +#: templates/wagtailsearch/editorspicks/results.html:18 +#, python-format +msgid "Sorry, no editor's picks match \"%(query_string)s\"" +msgstr "" + +#: templates/wagtailsearch/editorspicks/results.html:21 +#, python-format +msgid "" +"No editor's picks have been created. Why not add one?" +msgstr "" + +#: templates/wagtailsearch/editorspicks/includes/editorspicks_form.html:4 +msgid "Move up" +msgstr "Mover para cima" + +#: templates/wagtailsearch/editorspicks/includes/editorspicks_form.html:5 +msgid "Move down" +msgstr "Mover para baixo" + +#: templates/wagtailsearch/editorspicks/includes/editorspicks_form.html:10 +msgid "Editors pick" +msgstr "Sugestões do editor" + +#: templates/wagtailsearch/editorspicks/includes/editorspicks_formset.html:14 +msgid "Add recommended page" +msgstr "Add recomendação para página" + +#: templates/wagtailsearch/queries/chooser/chooser.html:2 +msgid "Popular search terms" +msgstr "Termos populares de pesquisa" + +#: templates/wagtailsearch/queries/chooser/chooser.html:11 +msgid "Search" +msgstr "Procurar" + +#: templates/wagtailsearch/queries/chooser/results.html:7 +msgid "Terms" +msgstr "Termos" + +#: templates/wagtailsearch/queries/chooser/results.html:22 +msgid "No results found" +msgstr "Nenhum resultado encontrado" + +#: views/editorspicks.py:47 +msgid "Search editor's picks" +msgstr "Procurar sugestões dos editores" + +#: views/editorspicks.py:83 +msgid "Editor's picks for '{0}' created." +msgstr "Sugestões dos editores para '{0}' criados." + +#: views/editorspicks.py:89 +msgid "Recommendations have not been created due to errors" +msgstr "As recomendações não poderiam ser criadas devido a erros" + +#: views/editorspicks.py:117 +msgid "Editor's picks for '{0}' updated." +msgstr "Sugestões do editor para '{0}' atualizado." + +#: views/editorspicks.py:123 +msgid "Recommendations have not been saved due to errors" +msgstr "As recomendações não puderam ser salvas devido a erros" + +#: views/editorspicks.py:142 +msgid "Editor's picks deleted." +msgstr "Sugestões do editor deletado." diff --git a/wagtail/wagtailsearch/locale/ru/LC_MESSAGES/django.po b/wagtail/wagtailsearch/locale/ru/LC_MESSAGES/django.po new file mode 100644 index 0000000000..7f23048a10 --- /dev/null +++ b/wagtail/wagtailsearch/locale/ru/LC_MESSAGES/django.po @@ -0,0 +1,202 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# +# Translators: +# HNKNTA , 2014 +msgid "" +msgstr "" +"Project-Id-Version: Wagtail\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2014-09-11 16:38+0100\n" +"PO-Revision-Date: 2014-08-01 15:43+0000\n" +"Last-Translator: Karl Hobley \n" +"Language-Team: Russian (http://www.transifex.com/projects/p/wagtail/language/ru/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: ru\n" +"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" + +#: forms.py:9 +msgid "Search term(s)/phrase" +msgstr "" + +#: forms.py:10 +msgid "" +"Enter the full search string to match. An \n" +" exact match is required for your Editors Picks to be \n" +" displayed, wildcards are NOT allowed." +msgstr "" + +#: forms.py:36 +msgid "Please specify at least one recommendation for this search term." +msgstr "" + +#: wagtail_hooks.py:25 templates/wagtailsearch/editorspicks/list.html:9 +msgid "Editors picks" +msgstr "" + +#: templates/wagtailsearch/editorspicks/add.html:3 +#: templates/wagtailsearch/editorspicks/add.html:5 +msgid "Add editor's pick" +msgstr "" + +#: templates/wagtailsearch/editorspicks/add.html:10 +msgid "" +"\n" +"

    Editors picks are a means of recommending specific pages that might not organically come high up in search results. E.g recommending your primary donation page to a user searching with a less common term like \"giving\".

    \n" +" " +msgstr "" + +#: templates/wagtailsearch/editorspicks/add.html:13 +msgid "" +"\n" +"

    The \"Search term(s)/phrase\" field below must contain the full and exact search for which you wish to provide recommended results, including any misspellings/user error. To help, you can choose from search terms that have been popular with users of your site.

    \n" +" " +msgstr "" + +#: templates/wagtailsearch/editorspicks/add.html:27 +#: templates/wagtailsearch/editorspicks/edit.html:19 +msgid "Save" +msgstr "Сохранить" + +#: templates/wagtailsearch/editorspicks/confirm_delete.html:3 +#, python-format +msgid "Delete %(query)s" +msgstr "" + +#: templates/wagtailsearch/editorspicks/confirm_delete.html:5 +#: templates/wagtailsearch/editorspicks/edit.html:20 +#: templates/wagtailsearch/editorspicks/includes/editorspicks_form.html:6 +msgid "Delete" +msgstr "Удалить" + +#: templates/wagtailsearch/editorspicks/confirm_delete.html:9 +msgid "" +"Are you sure you want to delete all editors picks for this search term?" +msgstr "" + +#: templates/wagtailsearch/editorspicks/confirm_delete.html:12 +msgid "Yes, delete" +msgstr "Да, удалить" + +#: templates/wagtailsearch/editorspicks/edit.html:3 +#, python-format +msgid "Editing %(query)s" +msgstr "" + +#: templates/wagtailsearch/editorspicks/edit.html:5 +msgid "Editing" +msgstr "Редактирование" + +#: templates/wagtailsearch/editorspicks/index.html:3 +msgid "Search Terms" +msgstr "" + +#: templates/wagtailsearch/editorspicks/index.html:17 +msgid "Editor's search picks" +msgstr "" + +#: templates/wagtailsearch/editorspicks/index.html:18 +msgid "Add new editor's pick" +msgstr "" + +#: templates/wagtailsearch/editorspicks/list.html:8 +msgid "Search term(s)" +msgstr "" + +#: templates/wagtailsearch/editorspicks/list.html:10 +#: templates/wagtailsearch/queries/chooser/results.html:8 +msgid "Views (past week)" +msgstr "" + +#: templates/wagtailsearch/editorspicks/list.html:17 +msgid "Edit this pick" +msgstr "" + +#: templates/wagtailsearch/editorspicks/list.html:23 +msgid "None" +msgstr "" + +#: templates/wagtailsearch/editorspicks/results.html:5 +#, python-format +msgid "" +"\n" +" There is one match\n" +" " +msgid_plural "" +"\n" +" There are %(counter)s matches\n" +" " +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" + +#: templates/wagtailsearch/editorspicks/results.html:18 +#, python-format +msgid "Sorry, no editor's picks match \"%(query_string)s\"" +msgstr "" + +#: templates/wagtailsearch/editorspicks/results.html:21 +#, python-format +msgid "" +"No editor's picks have been created. Why not add one?" +msgstr "" + +#: templates/wagtailsearch/editorspicks/includes/editorspicks_form.html:4 +msgid "Move up" +msgstr "" + +#: templates/wagtailsearch/editorspicks/includes/editorspicks_form.html:5 +msgid "Move down" +msgstr "" + +#: templates/wagtailsearch/editorspicks/includes/editorspicks_form.html:10 +msgid "Editors pick" +msgstr "" + +#: templates/wagtailsearch/editorspicks/includes/editorspicks_formset.html:14 +msgid "Add recommended page" +msgstr "" + +#: templates/wagtailsearch/queries/chooser/chooser.html:2 +msgid "Popular search terms" +msgstr "" + +#: templates/wagtailsearch/queries/chooser/chooser.html:11 +msgid "Search" +msgstr "Поиск" + +#: templates/wagtailsearch/queries/chooser/results.html:7 +msgid "Terms" +msgstr "" + +#: templates/wagtailsearch/queries/chooser/results.html:22 +msgid "No results found" +msgstr "Ничего не найдено" + +#: views/editorspicks.py:47 +msgid "Search editor's picks" +msgstr "" + +#: views/editorspicks.py:83 +msgid "Editor's picks for '{0}' created." +msgstr "" + +#: views/editorspicks.py:89 +msgid "Recommendations have not been created due to errors" +msgstr "" + +#: views/editorspicks.py:117 +msgid "Editor's picks for '{0}' updated." +msgstr "" + +#: views/editorspicks.py:123 +msgid "Recommendations have not been saved due to errors" +msgstr "" + +#: views/editorspicks.py:142 +msgid "Editor's picks deleted." +msgstr "" diff --git a/wagtail/wagtailsearch/locale/vi/LC_MESSAGES/django.po b/wagtail/wagtailsearch/locale/vi/LC_MESSAGES/django.po new file mode 100644 index 0000000000..a18e2a46ae --- /dev/null +++ b/wagtail/wagtailsearch/locale/vi/LC_MESSAGES/django.po @@ -0,0 +1,199 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# +# Translators: +msgid "" +msgstr "" +"Project-Id-Version: Wagtail\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2014-09-11 16:38+0100\n" +"PO-Revision-Date: 2014-08-01 15:43+0000\n" +"Last-Translator: Karl Hobley \n" +"Language-Team: Vietnamese (http://www.transifex.com/projects/p/wagtail/language/vi/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: vi\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: forms.py:9 +msgid "Search term(s)/phrase" +msgstr "" + +#: forms.py:10 +msgid "" +"Enter the full search string to match. An \n" +" exact match is required for your Editors Picks to be \n" +" displayed, wildcards are NOT allowed." +msgstr "" + +#: forms.py:36 +msgid "Please specify at least one recommendation for this search term." +msgstr "" + +#: wagtail_hooks.py:25 templates/wagtailsearch/editorspicks/list.html:9 +msgid "Editors picks" +msgstr "" + +#: templates/wagtailsearch/editorspicks/add.html:3 +#: templates/wagtailsearch/editorspicks/add.html:5 +msgid "Add editor's pick" +msgstr "" + +#: templates/wagtailsearch/editorspicks/add.html:10 +msgid "" +"\n" +"

    Editors picks are a means of recommending specific pages that might not organically come high up in search results. E.g recommending your primary donation page to a user searching with a less common term like \"giving\".

    \n" +" " +msgstr "" + +#: templates/wagtailsearch/editorspicks/add.html:13 +msgid "" +"\n" +"

    The \"Search term(s)/phrase\" field below must contain the full and exact search for which you wish to provide recommended results, including any misspellings/user error. To help, you can choose from search terms that have been popular with users of your site.

    \n" +" " +msgstr "" + +#: templates/wagtailsearch/editorspicks/add.html:27 +#: templates/wagtailsearch/editorspicks/edit.html:19 +msgid "Save" +msgstr "" + +#: templates/wagtailsearch/editorspicks/confirm_delete.html:3 +#, python-format +msgid "Delete %(query)s" +msgstr "" + +#: templates/wagtailsearch/editorspicks/confirm_delete.html:5 +#: templates/wagtailsearch/editorspicks/edit.html:20 +#: templates/wagtailsearch/editorspicks/includes/editorspicks_form.html:6 +msgid "Delete" +msgstr "" + +#: templates/wagtailsearch/editorspicks/confirm_delete.html:9 +msgid "" +"Are you sure you want to delete all editors picks for this search term?" +msgstr "" + +#: templates/wagtailsearch/editorspicks/confirm_delete.html:12 +msgid "Yes, delete" +msgstr "" + +#: templates/wagtailsearch/editorspicks/edit.html:3 +#, python-format +msgid "Editing %(query)s" +msgstr "" + +#: templates/wagtailsearch/editorspicks/edit.html:5 +msgid "Editing" +msgstr "" + +#: templates/wagtailsearch/editorspicks/index.html:3 +msgid "Search Terms" +msgstr "" + +#: templates/wagtailsearch/editorspicks/index.html:17 +msgid "Editor's search picks" +msgstr "" + +#: templates/wagtailsearch/editorspicks/index.html:18 +msgid "Add new editor's pick" +msgstr "" + +#: templates/wagtailsearch/editorspicks/list.html:8 +msgid "Search term(s)" +msgstr "" + +#: templates/wagtailsearch/editorspicks/list.html:10 +#: templates/wagtailsearch/queries/chooser/results.html:8 +msgid "Views (past week)" +msgstr "" + +#: templates/wagtailsearch/editorspicks/list.html:17 +msgid "Edit this pick" +msgstr "" + +#: templates/wagtailsearch/editorspicks/list.html:23 +msgid "None" +msgstr "" + +#: templates/wagtailsearch/editorspicks/results.html:5 +#, python-format +msgid "" +"\n" +" There is one match\n" +" " +msgid_plural "" +"\n" +" There are %(counter)s matches\n" +" " +msgstr[0] "" + +#: templates/wagtailsearch/editorspicks/results.html:18 +#, python-format +msgid "Sorry, no editor's picks match \"%(query_string)s\"" +msgstr "" + +#: templates/wagtailsearch/editorspicks/results.html:21 +#, python-format +msgid "" +"No editor's picks have been created. Why not add one?" +msgstr "" + +#: templates/wagtailsearch/editorspicks/includes/editorspicks_form.html:4 +msgid "Move up" +msgstr "" + +#: templates/wagtailsearch/editorspicks/includes/editorspicks_form.html:5 +msgid "Move down" +msgstr "" + +#: templates/wagtailsearch/editorspicks/includes/editorspicks_form.html:10 +msgid "Editors pick" +msgstr "" + +#: templates/wagtailsearch/editorspicks/includes/editorspicks_formset.html:14 +msgid "Add recommended page" +msgstr "" + +#: templates/wagtailsearch/queries/chooser/chooser.html:2 +msgid "Popular search terms" +msgstr "" + +#: templates/wagtailsearch/queries/chooser/chooser.html:11 +msgid "Search" +msgstr "" + +#: templates/wagtailsearch/queries/chooser/results.html:7 +msgid "Terms" +msgstr "" + +#: templates/wagtailsearch/queries/chooser/results.html:22 +msgid "No results found" +msgstr "" + +#: views/editorspicks.py:47 +msgid "Search editor's picks" +msgstr "" + +#: views/editorspicks.py:83 +msgid "Editor's picks for '{0}' created." +msgstr "" + +#: views/editorspicks.py:89 +msgid "Recommendations have not been created due to errors" +msgstr "" + +#: views/editorspicks.py:117 +msgid "Editor's picks for '{0}' updated." +msgstr "" + +#: views/editorspicks.py:123 +msgid "Recommendations have not been saved due to errors" +msgstr "" + +#: views/editorspicks.py:142 +msgid "Editor's picks deleted." +msgstr "" diff --git a/wagtail/wagtailsnippets/locale/pt_BR/LC_MESSAGES/django.po b/wagtail/wagtailsnippets/locale/pt_BR/LC_MESSAGES/django.po new file mode 100644 index 0000000000..cd871e6857 --- /dev/null +++ b/wagtail/wagtailsnippets/locale/pt_BR/LC_MESSAGES/django.po @@ -0,0 +1,151 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# +# Translators: +# Gladson , 2014 +msgid "" +msgstr "" +"Project-Id-Version: Wagtail\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2014-09-11 16:38+0100\n" +"PO-Revision-Date: 2014-08-17 01:55+0000\n" +"Last-Translator: Gladson \n" +"Language-Team: Portuguese (Brazil) (http://www.transifex.com/projects/p/wagtail/language/pt_BR/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: pt_BR\n" +"Plural-Forms: nplurals=2; plural=(n > 1);\n" + +#: wagtail_hooks.py:27 templates/wagtailsnippets/snippets/index.html:3 +msgid "Snippets" +msgstr "" + +#: templates/wagtailsnippets/chooser/choose.html:2 +msgid "Choose" +msgstr "Escolha" + +#: templates/wagtailsnippets/edit_handlers/snippet_chooser_panel.html:10 +#, python-format +msgid "Choose another %(snippet_type_name)s" +msgstr "Escolha outro %(snippet_type_name)s" + +#: templates/wagtailsnippets/edit_handlers/snippet_chooser_panel.html:11 +#, python-format +msgid "Choose %(snippet_type_name)s" +msgstr "Escolha %(snippet_type_name)s" + +#: templates/wagtailsnippets/snippets/confirm_delete.html:3 +#, python-format +msgid "Delete %(snippet_type_name)s - %(instance)s" +msgstr "Excluir %(snippet_type_name)s - %(instance)s" + +#: templates/wagtailsnippets/snippets/confirm_delete.html:6 +#: templates/wagtailsnippets/snippets/edit.html:20 +msgid "Delete" +msgstr "Excluir" + +#: templates/wagtailsnippets/snippets/confirm_delete.html:10 +#, python-format +msgid "Are you sure you want to delete this %(snippet_type_name)s?" +msgstr "Você tem certeza que deseja excluir essa %(snippet_type_name)s?" + +#: templates/wagtailsnippets/snippets/confirm_delete.html:13 +msgid "Yes, delete" +msgstr "Sim, exclua" + +#: templates/wagtailsnippets/snippets/create.html:3 +#, python-format +msgid "New %(snippet_type_name)s" +msgstr "Adicionar %(snippet_type_name)s" + +#: templates/wagtailsnippets/snippets/create.html:6 +msgid "New" +msgstr "Adicionar" + +#: templates/wagtailsnippets/snippets/create.html:17 +#: templates/wagtailsnippets/snippets/edit.html:17 +msgid "Save" +msgstr "Salvar" + +#: templates/wagtailsnippets/snippets/edit.html:3 +#, python-format +msgid "Editing %(snippet_type_name)s - %(instance)s" +msgstr "Editando %(snippet_type_name)s - %(instance)s" + +#: templates/wagtailsnippets/snippets/edit.html:6 +msgid "Editing" +msgstr "Editando" + +#: templates/wagtailsnippets/snippets/list.html:8 +#: templates/wagtailsnippets/snippets/usage.html:16 +msgid "Title" +msgstr "Título" + +#: templates/wagtailsnippets/snippets/type_index.html:3 +#, python-format +msgid "Snippets %(snippet_type_name_plural)s" +msgstr "" + +#: templates/wagtailsnippets/snippets/type_index.html:10 +#, python-format +msgid "Snippets %(snippet_type_name_plural)s" +msgstr "" + +#: templates/wagtailsnippets/snippets/type_index.html:13 +#, python-format +msgid "Add %(snippet_type_name)s" +msgstr "Adicionar %(snippet_type_name)s" + +#: templates/wagtailsnippets/snippets/type_index.html:23 +#, python-format +msgid "" +"No %(snippet_type_name_plural)s have been created. Why not add one?" +msgstr "" + +#: templates/wagtailsnippets/snippets/usage.html:3 +#, python-format +msgid "Usage of %(title)s" +msgstr "" + +#: templates/wagtailsnippets/snippets/usage.html:5 +msgid "Usage of" +msgstr "" + +#: templates/wagtailsnippets/snippets/usage.html:17 +msgid "Parent" +msgstr "" + +#: templates/wagtailsnippets/snippets/usage.html:18 +msgid "Type" +msgstr "Tipo" + +#: templates/wagtailsnippets/snippets/usage.html:19 +msgid "Status" +msgstr "Status" + +#: templates/wagtailsnippets/snippets/usage.html:26 +msgid "Edit this page" +msgstr "Editar essa página" + +#: views/snippets.py:129 +msgid "{snippet_type} '{instance}' created." +msgstr "" + +#: views/snippets.py:136 +msgid "The snippet could not be created due to errors." +msgstr "" + +#: views/snippets.py:170 +msgid "{snippet_type} '{instance}' updated." +msgstr "" + +#: views/snippets.py:177 +msgid "The snippet could not be saved due to errors." +msgstr "" + +#: views/snippets.py:206 +msgid "{snippet_type} '{instance}' deleted." +msgstr "" diff --git a/wagtail/wagtailsnippets/locale/ru/LC_MESSAGES/django.po b/wagtail/wagtailsnippets/locale/ru/LC_MESSAGES/django.po new file mode 100644 index 0000000000..561a0f001f --- /dev/null +++ b/wagtail/wagtailsnippets/locale/ru/LC_MESSAGES/django.po @@ -0,0 +1,150 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# +# Translators: +msgid "" +msgstr "" +"Project-Id-Version: Wagtail\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2014-09-11 16:38+0100\n" +"PO-Revision-Date: 2014-08-01 15:43+0000\n" +"Last-Translator: Karl Hobley \n" +"Language-Team: Russian (http://www.transifex.com/projects/p/wagtail/language/ru/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: ru\n" +"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" + +#: wagtail_hooks.py:27 templates/wagtailsnippets/snippets/index.html:3 +msgid "Snippets" +msgstr "" + +#: templates/wagtailsnippets/chooser/choose.html:2 +msgid "Choose" +msgstr "" + +#: templates/wagtailsnippets/edit_handlers/snippet_chooser_panel.html:10 +#, python-format +msgid "Choose another %(snippet_type_name)s" +msgstr "" + +#: templates/wagtailsnippets/edit_handlers/snippet_chooser_panel.html:11 +#, python-format +msgid "Choose %(snippet_type_name)s" +msgstr "" + +#: templates/wagtailsnippets/snippets/confirm_delete.html:3 +#, python-format +msgid "Delete %(snippet_type_name)s - %(instance)s" +msgstr "" + +#: templates/wagtailsnippets/snippets/confirm_delete.html:6 +#: templates/wagtailsnippets/snippets/edit.html:20 +msgid "Delete" +msgstr "" + +#: templates/wagtailsnippets/snippets/confirm_delete.html:10 +#, python-format +msgid "Are you sure you want to delete this %(snippet_type_name)s?" +msgstr "" + +#: templates/wagtailsnippets/snippets/confirm_delete.html:13 +msgid "Yes, delete" +msgstr "" + +#: templates/wagtailsnippets/snippets/create.html:3 +#, python-format +msgid "New %(snippet_type_name)s" +msgstr "" + +#: templates/wagtailsnippets/snippets/create.html:6 +msgid "New" +msgstr "" + +#: templates/wagtailsnippets/snippets/create.html:17 +#: templates/wagtailsnippets/snippets/edit.html:17 +msgid "Save" +msgstr "" + +#: templates/wagtailsnippets/snippets/edit.html:3 +#, python-format +msgid "Editing %(snippet_type_name)s - %(instance)s" +msgstr "" + +#: templates/wagtailsnippets/snippets/edit.html:6 +msgid "Editing" +msgstr "" + +#: templates/wagtailsnippets/snippets/list.html:8 +#: templates/wagtailsnippets/snippets/usage.html:16 +msgid "Title" +msgstr "" + +#: templates/wagtailsnippets/snippets/type_index.html:3 +#, python-format +msgid "Snippets %(snippet_type_name_plural)s" +msgstr "" + +#: templates/wagtailsnippets/snippets/type_index.html:10 +#, python-format +msgid "Snippets %(snippet_type_name_plural)s" +msgstr "" + +#: templates/wagtailsnippets/snippets/type_index.html:13 +#, python-format +msgid "Add %(snippet_type_name)s" +msgstr "" + +#: templates/wagtailsnippets/snippets/type_index.html:23 +#, python-format +msgid "" +"No %(snippet_type_name_plural)s have been created. Why not add one?" +msgstr "" + +#: templates/wagtailsnippets/snippets/usage.html:3 +#, python-format +msgid "Usage of %(title)s" +msgstr "" + +#: templates/wagtailsnippets/snippets/usage.html:5 +msgid "Usage of" +msgstr "" + +#: templates/wagtailsnippets/snippets/usage.html:17 +msgid "Parent" +msgstr "" + +#: templates/wagtailsnippets/snippets/usage.html:18 +msgid "Type" +msgstr "" + +#: templates/wagtailsnippets/snippets/usage.html:19 +msgid "Status" +msgstr "" + +#: templates/wagtailsnippets/snippets/usage.html:26 +msgid "Edit this page" +msgstr "" + +#: views/snippets.py:129 +msgid "{snippet_type} '{instance}' created." +msgstr "" + +#: views/snippets.py:136 +msgid "The snippet could not be created due to errors." +msgstr "" + +#: views/snippets.py:170 +msgid "{snippet_type} '{instance}' updated." +msgstr "" + +#: views/snippets.py:177 +msgid "The snippet could not be saved due to errors." +msgstr "" + +#: views/snippets.py:206 +msgid "{snippet_type} '{instance}' deleted." +msgstr "" diff --git a/wagtail/wagtailsnippets/locale/vi/LC_MESSAGES/django.po b/wagtail/wagtailsnippets/locale/vi/LC_MESSAGES/django.po new file mode 100644 index 0000000000..4ee41fafab --- /dev/null +++ b/wagtail/wagtailsnippets/locale/vi/LC_MESSAGES/django.po @@ -0,0 +1,150 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# +# Translators: +msgid "" +msgstr "" +"Project-Id-Version: Wagtail\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2014-09-11 16:38+0100\n" +"PO-Revision-Date: 2014-08-01 15:43+0000\n" +"Last-Translator: Karl Hobley \n" +"Language-Team: Vietnamese (http://www.transifex.com/projects/p/wagtail/language/vi/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: vi\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: wagtail_hooks.py:27 templates/wagtailsnippets/snippets/index.html:3 +msgid "Snippets" +msgstr "" + +#: templates/wagtailsnippets/chooser/choose.html:2 +msgid "Choose" +msgstr "" + +#: templates/wagtailsnippets/edit_handlers/snippet_chooser_panel.html:10 +#, python-format +msgid "Choose another %(snippet_type_name)s" +msgstr "" + +#: templates/wagtailsnippets/edit_handlers/snippet_chooser_panel.html:11 +#, python-format +msgid "Choose %(snippet_type_name)s" +msgstr "" + +#: templates/wagtailsnippets/snippets/confirm_delete.html:3 +#, python-format +msgid "Delete %(snippet_type_name)s - %(instance)s" +msgstr "" + +#: templates/wagtailsnippets/snippets/confirm_delete.html:6 +#: templates/wagtailsnippets/snippets/edit.html:20 +msgid "Delete" +msgstr "" + +#: templates/wagtailsnippets/snippets/confirm_delete.html:10 +#, python-format +msgid "Are you sure you want to delete this %(snippet_type_name)s?" +msgstr "" + +#: templates/wagtailsnippets/snippets/confirm_delete.html:13 +msgid "Yes, delete" +msgstr "" + +#: templates/wagtailsnippets/snippets/create.html:3 +#, python-format +msgid "New %(snippet_type_name)s" +msgstr "" + +#: templates/wagtailsnippets/snippets/create.html:6 +msgid "New" +msgstr "" + +#: templates/wagtailsnippets/snippets/create.html:17 +#: templates/wagtailsnippets/snippets/edit.html:17 +msgid "Save" +msgstr "" + +#: templates/wagtailsnippets/snippets/edit.html:3 +#, python-format +msgid "Editing %(snippet_type_name)s - %(instance)s" +msgstr "" + +#: templates/wagtailsnippets/snippets/edit.html:6 +msgid "Editing" +msgstr "" + +#: templates/wagtailsnippets/snippets/list.html:8 +#: templates/wagtailsnippets/snippets/usage.html:16 +msgid "Title" +msgstr "" + +#: templates/wagtailsnippets/snippets/type_index.html:3 +#, python-format +msgid "Snippets %(snippet_type_name_plural)s" +msgstr "" + +#: templates/wagtailsnippets/snippets/type_index.html:10 +#, python-format +msgid "Snippets %(snippet_type_name_plural)s" +msgstr "" + +#: templates/wagtailsnippets/snippets/type_index.html:13 +#, python-format +msgid "Add %(snippet_type_name)s" +msgstr "" + +#: templates/wagtailsnippets/snippets/type_index.html:23 +#, python-format +msgid "" +"No %(snippet_type_name_plural)s have been created. Why not add one?" +msgstr "" + +#: templates/wagtailsnippets/snippets/usage.html:3 +#, python-format +msgid "Usage of %(title)s" +msgstr "" + +#: templates/wagtailsnippets/snippets/usage.html:5 +msgid "Usage of" +msgstr "" + +#: templates/wagtailsnippets/snippets/usage.html:17 +msgid "Parent" +msgstr "" + +#: templates/wagtailsnippets/snippets/usage.html:18 +msgid "Type" +msgstr "" + +#: templates/wagtailsnippets/snippets/usage.html:19 +msgid "Status" +msgstr "" + +#: templates/wagtailsnippets/snippets/usage.html:26 +msgid "Edit this page" +msgstr "" + +#: views/snippets.py:129 +msgid "{snippet_type} '{instance}' created." +msgstr "" + +#: views/snippets.py:136 +msgid "The snippet could not be created due to errors." +msgstr "" + +#: views/snippets.py:170 +msgid "{snippet_type} '{instance}' updated." +msgstr "" + +#: views/snippets.py:177 +msgid "The snippet could not be saved due to errors." +msgstr "" + +#: views/snippets.py:206 +msgid "{snippet_type} '{instance}' deleted." +msgstr "" diff --git a/wagtail/wagtailusers/locale/pt_BR/LC_MESSAGES/django.po b/wagtail/wagtailusers/locale/pt_BR/LC_MESSAGES/django.po new file mode 100644 index 0000000000..d8e3a6a4a2 --- /dev/null +++ b/wagtail/wagtailusers/locale/pt_BR/LC_MESSAGES/django.po @@ -0,0 +1,193 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# +# Translators: +# Thiago Cangussu , 2014 +# Douglas Miranda , 2014 +# Gladson , 2014 +msgid "" +msgstr "" +"Project-Id-Version: Wagtail\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2014-09-11 16:38+0100\n" +"PO-Revision-Date: 2014-09-01 19:30+0000\n" +"Last-Translator: Douglas Miranda \n" +"Language-Team: Portuguese (Brazil) (http://www.transifex.com/projects/p/wagtail/language/pt_BR/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: pt_BR\n" +"Plural-Forms: nplurals=2; plural=(n > 1);\n" + +#: forms.py:18 forms.py:95 +msgid "Administrator" +msgstr "Administrador" + +#: forms.py:20 +msgid "If ticked, this user has the ability to manage user accounts." +msgstr "Se marcado, este usuário terá a habilidade de gerenciar contas de usuários." + +#: forms.py:23 forms.py:80 +msgid "Email" +msgstr "Email" + +#: forms.py:24 forms.py:81 +msgid "First Name" +msgstr "Primeiro nome" + +#: forms.py:25 forms.py:82 +msgid "Last Name" +msgstr "Último nome" + +#: forms.py:68 +msgid "A user with that username already exists." +msgstr "Um usuário com este nome já existe." + +#: forms.py:69 +msgid "The two password fields didn't match." +msgstr "Os dois campos de senha não coincidem." + +#: forms.py:72 templates/wagtailusers/list.html:15 +msgid "Username" +msgstr "Nome de usuário" + +#: forms.py:75 +msgid "Required. 30 characters or fewer. Letters, digits and @/./+/-/_ only." +msgstr "Obrigatório. 30 caracteres ou menos. Somente letras, números e @/./+/-/_." + +#: forms.py:77 +msgid "This value may contain only letters, numbers and @/./+/-/_ characters." +msgstr "Este valor pode conter somente letras, números e os caracteres @/./+/-/_." + +#: forms.py:85 +msgid "Password" +msgstr "Senha" + +#: forms.py:88 +msgid "Leave blank if not changing." +msgstr "Deixe em branco se não estiver alterando." + +#: forms.py:90 +msgid "Password confirmation" +msgstr "Confirmação de senha" + +#: forms.py:92 +msgid "Enter the same password as above, for verification." +msgstr "Digite a mesma senha como acima, para verificação." + +#: forms.py:97 +msgid "Administrators have the ability to manage user accounts." +msgstr "Administradores tem a habilidade de gerenciar contas de usuários." + +#: models.py:13 +msgid "Receive notification when a page is submitted for moderation" +msgstr "Receber uma notificação quando uma página é enviada para a moderação" + +#: models.py:18 +msgid "Receive notification when your page edit is approved" +msgstr "Receber uma notificação quando a edição da sua página for aprovada" + +#: models.py:23 +msgid "Receive notification when your page edit is rejected" +msgstr "Receber uma notificação quando a edição da sua página é rejeitada" + +#: wagtail_hooks.py:24 templates/wagtailusers/index.html:4 +#: templates/wagtailusers/index.html:17 +msgid "Users" +msgstr "Usuários" + +#: templates/wagtailusers/create.html:4 templates/wagtailusers/create.html:8 +#: templates/wagtailusers/create.html:35 +msgid "Add user" +msgstr "Adicionar usuário" + +#: templates/wagtailusers/create.html:12 templates/wagtailusers/edit.html:12 +msgid "Account" +msgstr "Conta" + +#: templates/wagtailusers/create.html:13 templates/wagtailusers/create.html:28 +#: templates/wagtailusers/edit.html:13 +msgid "Roles" +msgstr "Papéis" + +#: templates/wagtailusers/edit.html:4 templates/wagtailusers/edit.html.py:8 +msgid "Editing" +msgstr "Editando" + +#: templates/wagtailusers/edit.html:30 templates/wagtailusers/edit.html:37 +msgid "Save" +msgstr "Salvar" + +#: templates/wagtailusers/index.html:18 +msgid "Add a user" +msgstr "Adicionar um usuário" + +#: templates/wagtailusers/list.html:7 +msgid "Name" +msgstr "Nome" + +#: templates/wagtailusers/list.html:22 +msgid "Level" +msgstr "Nível" + +#: templates/wagtailusers/list.html:23 +msgid "Status" +msgstr "Status" + +#: templates/wagtailusers/list.html:36 +msgid "Admin" +msgstr "Admin" + +#: templates/wagtailusers/list.html:37 +msgid "Active" +msgstr "Ativo" + +#: templates/wagtailusers/list.html:37 +msgid "Inactive" +msgstr "Inativo" + +#: templates/wagtailusers/results.html:5 +#, python-format +msgid "" +"\n" +" There is one match\n" +" " +msgid_plural "" +"\n" +" There are %(counter)s matches\n" +" " +msgstr[0] "\n Há um resultado\n " +msgstr[1] "\n Há %(counter)s resultados\n " + +#: templates/wagtailusers/results.html:18 +#, python-format +msgid "Sorry, no users match \"%(query_string)s\"" +msgstr "Desculpe, nenhum usuário coincide com \"%(query_string)s\"" + +#: templates/wagtailusers/results.html:21 +#, python-format +msgid "" +"There are no users configured. Why not add some?" +msgstr "Não há usuários configurados. Por que não adicionar alguns?" + +#: views/users.py:30 views/users.py:37 +msgid "Search users" +msgstr "Buscar usuários" + +#: views/users.py:84 +msgid "User '{0}' created." +msgstr "Usuário '{0}' criado." + +#: views/users.py:87 +msgid "The user could not be created due to errors." +msgstr "O usuário não pôde ser criado devido à erros." + +#: views/users.py:103 +msgid "User '{0}' updated." +msgstr "Usuário '{0}' atualizado." + +#: views/users.py:106 +msgid "The user could not be saved due to errors." +msgstr "O usuário não pôde ser salvo devido à erros." diff --git a/wagtail/wagtailusers/locale/ru/LC_MESSAGES/django.po b/wagtail/wagtailusers/locale/ru/LC_MESSAGES/django.po new file mode 100644 index 0000000000..fc255b719c --- /dev/null +++ b/wagtail/wagtailusers/locale/ru/LC_MESSAGES/django.po @@ -0,0 +1,193 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# +# Translators: +# ajk, 2014 +# HNKNTA , 2014 +msgid "" +msgstr "" +"Project-Id-Version: Wagtail\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2014-09-11 16:38+0100\n" +"PO-Revision-Date: 2014-07-14 14:56+0000\n" +"Last-Translator: Karl Hobley \n" +"Language-Team: Russian (http://www.transifex.com/projects/p/wagtail/language/ru/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: ru\n" +"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" + +#: forms.py:18 forms.py:95 +msgid "Administrator" +msgstr "Администратор" + +#: forms.py:20 +msgid "If ticked, this user has the ability to manage user accounts." +msgstr "Если выбрано, этот пользователь имеет возможность управлять пользовательскими аккаунтами." + +#: forms.py:23 forms.py:80 +msgid "Email" +msgstr "Адрес электронной почты" + +#: forms.py:24 forms.py:81 +msgid "First Name" +msgstr "Имя" + +#: forms.py:25 forms.py:82 +msgid "Last Name" +msgstr "Фамилия" + +#: forms.py:68 +msgid "A user with that username already exists." +msgstr "Пользователь с таким именем уже существует. " + +#: forms.py:69 +msgid "The two password fields didn't match." +msgstr "Два поля с паролями не совпадают." + +#: forms.py:72 templates/wagtailusers/list.html:15 +msgid "Username" +msgstr "Имя пользователя" + +#: forms.py:75 +msgid "Required. 30 characters or fewer. Letters, digits and @/./+/-/_ only." +msgstr "Обязательное. 30 символов или меньше. Только буквы, цифры и @/./+/-/_ символы." + +#: forms.py:77 +msgid "This value may contain only letters, numbers and @/./+/-/_ characters." +msgstr "Это значение может содержать только буквы, цифры и @/./+/-/_ символы." + +#: forms.py:85 +msgid "Password" +msgstr "Пароль" + +#: forms.py:88 +msgid "Leave blank if not changing." +msgstr "Оставьте пустым, если не изменяется." + +#: forms.py:90 +msgid "Password confirmation" +msgstr "Подтверждение пароля" + +#: forms.py:92 +msgid "Enter the same password as above, for verification." +msgstr "Введите такой же пароль, как выше, для подтверждения." + +#: forms.py:97 +msgid "Administrators have the ability to manage user accounts." +msgstr "Администраторы не могут управлять аккаунтами пользователей." + +#: models.py:13 +msgid "Receive notification when a page is submitted for moderation" +msgstr "" + +#: models.py:18 +msgid "Receive notification when your page edit is approved" +msgstr "" + +#: models.py:23 +msgid "Receive notification when your page edit is rejected" +msgstr "" + +#: wagtail_hooks.py:24 templates/wagtailusers/index.html:4 +#: templates/wagtailusers/index.html:17 +msgid "Users" +msgstr "Пользователи" + +#: templates/wagtailusers/create.html:4 templates/wagtailusers/create.html:8 +#: templates/wagtailusers/create.html:35 +msgid "Add user" +msgstr "Добавить пользователя" + +#: templates/wagtailusers/create.html:12 templates/wagtailusers/edit.html:12 +msgid "Account" +msgstr "Аккаунт" + +#: templates/wagtailusers/create.html:13 templates/wagtailusers/create.html:28 +#: templates/wagtailusers/edit.html:13 +msgid "Roles" +msgstr "Роли" + +#: templates/wagtailusers/edit.html:4 templates/wagtailusers/edit.html.py:8 +msgid "Editing" +msgstr "Редактирование" + +#: templates/wagtailusers/edit.html:30 templates/wagtailusers/edit.html:37 +msgid "Save" +msgstr "Сохранить" + +#: templates/wagtailusers/index.html:18 +msgid "Add a user" +msgstr "Добавить пользователя" + +#: templates/wagtailusers/list.html:7 +msgid "Name" +msgstr "Имя" + +#: templates/wagtailusers/list.html:22 +msgid "Level" +msgstr "Уровень" + +#: templates/wagtailusers/list.html:23 +msgid "Status" +msgstr "Статус" + +#: templates/wagtailusers/list.html:36 +msgid "Admin" +msgstr "Админ" + +#: templates/wagtailusers/list.html:37 +msgid "Active" +msgstr "Активный" + +#: templates/wagtailusers/list.html:37 +msgid "Inactive" +msgstr "Неактивный" + +#: templates/wagtailusers/results.html:5 +#, python-format +msgid "" +"\n" +" There is one match\n" +" " +msgid_plural "" +"\n" +" There are %(counter)s matches\n" +" " +msgstr[0] "\nНайдено одно совпадение" +msgstr[1] "\nНайдено %(counter)s совпадений" +msgstr[2] "\nНайдено %(counter)s совпадений" + +#: templates/wagtailusers/results.html:18 +#, python-format +msgid "Sorry, no users match \"%(query_string)s\"" +msgstr "Извините, подходящих пользователей не найдено \"%(query_string)s\"" + +#: templates/wagtailusers/results.html:21 +#, python-format +msgid "" +"There are no users configured. Why not add some?" +msgstr "Нету настроенных пользователей. Почему бы не добавить?" + +#: views/users.py:30 views/users.py:37 +msgid "Search users" +msgstr "Поиск пользователей" + +#: views/users.py:84 +msgid "User '{0}' created." +msgstr "Пользователь '{0}' создан." + +#: views/users.py:87 +msgid "The user could not be created due to errors." +msgstr "Пользователь не может быть создан из-за ошибок." + +#: views/users.py:103 +msgid "User '{0}' updated." +msgstr "Пользователь '{0}' обновлен." + +#: views/users.py:106 +msgid "The user could not be saved due to errors." +msgstr "Пользователь но может быть сохранен из-за ошибок." diff --git a/wagtail/wagtailusers/locale/vi/LC_MESSAGES/django.po b/wagtail/wagtailusers/locale/vi/LC_MESSAGES/django.po new file mode 100644 index 0000000000..92bb037669 --- /dev/null +++ b/wagtail/wagtailusers/locale/vi/LC_MESSAGES/django.po @@ -0,0 +1,189 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# +# Translators: +msgid "" +msgstr "" +"Project-Id-Version: Wagtail\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2014-09-11 16:38+0100\n" +"PO-Revision-Date: 2014-07-14 14:56+0000\n" +"Last-Translator: Karl Hobley \n" +"Language-Team: Vietnamese (http://www.transifex.com/projects/p/wagtail/language/vi/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: vi\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: forms.py:18 forms.py:95 +msgid "Administrator" +msgstr "" + +#: forms.py:20 +msgid "If ticked, this user has the ability to manage user accounts." +msgstr "" + +#: forms.py:23 forms.py:80 +msgid "Email" +msgstr "" + +#: forms.py:24 forms.py:81 +msgid "First Name" +msgstr "" + +#: forms.py:25 forms.py:82 +msgid "Last Name" +msgstr "" + +#: forms.py:68 +msgid "A user with that username already exists." +msgstr "" + +#: forms.py:69 +msgid "The two password fields didn't match." +msgstr "" + +#: forms.py:72 templates/wagtailusers/list.html:15 +msgid "Username" +msgstr "" + +#: forms.py:75 +msgid "Required. 30 characters or fewer. Letters, digits and @/./+/-/_ only." +msgstr "" + +#: forms.py:77 +msgid "This value may contain only letters, numbers and @/./+/-/_ characters." +msgstr "" + +#: forms.py:85 +msgid "Password" +msgstr "" + +#: forms.py:88 +msgid "Leave blank if not changing." +msgstr "" + +#: forms.py:90 +msgid "Password confirmation" +msgstr "" + +#: forms.py:92 +msgid "Enter the same password as above, for verification." +msgstr "" + +#: forms.py:97 +msgid "Administrators have the ability to manage user accounts." +msgstr "" + +#: models.py:13 +msgid "Receive notification when a page is submitted for moderation" +msgstr "" + +#: models.py:18 +msgid "Receive notification when your page edit is approved" +msgstr "" + +#: models.py:23 +msgid "Receive notification when your page edit is rejected" +msgstr "" + +#: wagtail_hooks.py:24 templates/wagtailusers/index.html:4 +#: templates/wagtailusers/index.html:17 +msgid "Users" +msgstr "" + +#: templates/wagtailusers/create.html:4 templates/wagtailusers/create.html:8 +#: templates/wagtailusers/create.html:35 +msgid "Add user" +msgstr "" + +#: templates/wagtailusers/create.html:12 templates/wagtailusers/edit.html:12 +msgid "Account" +msgstr "" + +#: templates/wagtailusers/create.html:13 templates/wagtailusers/create.html:28 +#: templates/wagtailusers/edit.html:13 +msgid "Roles" +msgstr "" + +#: templates/wagtailusers/edit.html:4 templates/wagtailusers/edit.html.py:8 +msgid "Editing" +msgstr "" + +#: templates/wagtailusers/edit.html:30 templates/wagtailusers/edit.html:37 +msgid "Save" +msgstr "" + +#: templates/wagtailusers/index.html:18 +msgid "Add a user" +msgstr "" + +#: templates/wagtailusers/list.html:7 +msgid "Name" +msgstr "" + +#: templates/wagtailusers/list.html:22 +msgid "Level" +msgstr "" + +#: templates/wagtailusers/list.html:23 +msgid "Status" +msgstr "" + +#: templates/wagtailusers/list.html:36 +msgid "Admin" +msgstr "" + +#: templates/wagtailusers/list.html:37 +msgid "Active" +msgstr "" + +#: templates/wagtailusers/list.html:37 +msgid "Inactive" +msgstr "" + +#: templates/wagtailusers/results.html:5 +#, python-format +msgid "" +"\n" +" There is one match\n" +" " +msgid_plural "" +"\n" +" There are %(counter)s matches\n" +" " +msgstr[0] "" + +#: templates/wagtailusers/results.html:18 +#, python-format +msgid "Sorry, no users match \"%(query_string)s\"" +msgstr "" + +#: templates/wagtailusers/results.html:21 +#, python-format +msgid "" +"There are no users configured. Why not add some?" +msgstr "" + +#: views/users.py:30 views/users.py:37 +msgid "Search users" +msgstr "" + +#: views/users.py:84 +msgid "User '{0}' created." +msgstr "" + +#: views/users.py:87 +msgid "The user could not be created due to errors." +msgstr "" + +#: views/users.py:103 +msgid "User '{0}' updated." +msgstr "" + +#: views/users.py:106 +msgid "The user could not be saved due to errors." +msgstr "" From bc67a976511a5af0929e5c003f45c0d27daaaaa5 Mon Sep 17 00:00:00 2001 From: Karl Hobley Date: Thu, 11 Sep 2014 16:45:31 +0100 Subject: [PATCH 182/210] Rerun compilemessages --- .../locale/bg/LC_MESSAGES/django.mo | Bin 18047 -> 15759 bytes .../locale/ca/LC_MESSAGES/django.mo | Bin 14494 -> 12784 bytes .../locale/de/LC_MESSAGES/django.mo | Bin 14958 -> 13183 bytes .../locale/el/LC_MESSAGES/django.mo | Bin 18395 -> 16135 bytes .../locale/en/LC_MESSAGES/django.mo | Bin 367 -> 378 bytes .../locale/es/LC_MESSAGES/django.mo | Bin 14974 -> 13189 bytes .../locale/eu/LC_MESSAGES/django.mo | Bin 4666 -> 4542 bytes .../locale/fr/LC_MESSAGES/django.mo | Bin 13347 -> 11811 bytes .../locale/gl/LC_MESSAGES/django.mo | Bin 14921 -> 13153 bytes .../locale/mn/LC_MESSAGES/django.mo | Bin 1035 -> 1034 bytes .../locale/pl/LC_MESSAGES/django.mo | Bin 15216 -> 13394 bytes .../locale/pt_BR/LC_MESSAGES/django.mo | Bin 14859 -> 14757 bytes .../locale/pt_PT/LC_MESSAGES/django.mo | Bin 17850 -> 17654 bytes .../locale/ro/LC_MESSAGES/django.mo | Bin 14679 -> 12965 bytes .../locale/ru/LC_MESSAGES/django.mo | Bin 0 -> 9693 bytes .../locale/vi/LC_MESSAGES/django.mo | Bin 0 -> 463 bytes .../locale/zh/LC_MESSAGES/django.mo | Bin 12049 -> 10661 bytes .../locale/zh_TW/LC_MESSAGES/django.mo | Bin 13960 -> 12328 bytes .../locale/bg/LC_MESSAGES/django.mo | Bin 2363 -> 2363 bytes .../locale/ca/LC_MESSAGES/django.mo | Bin 1923 -> 1923 bytes .../locale/de/LC_MESSAGES/django.mo | Bin 1877 -> 1877 bytes .../locale/el/LC_MESSAGES/django.mo | Bin 2533 -> 2533 bytes .../locale/en/LC_MESSAGES/django.mo | Bin 378 -> 378 bytes .../locale/es/LC_MESSAGES/django.mo | Bin 1943 -> 1943 bytes .../locale/eu/LC_MESSAGES/django.mo | Bin 466 -> 466 bytes .../locale/fr/LC_MESSAGES/django.mo | Bin 1518 -> 1518 bytes .../locale/gl/LC_MESSAGES/django.mo | Bin 1925 -> 1925 bytes .../locale/mn/LC_MESSAGES/django.mo | Bin 534 -> 534 bytes .../locale/pl/LC_MESSAGES/django.mo | Bin 1974 -> 1974 bytes .../locale/pt_BR/LC_MESSAGES/django.mo | Bin 0 -> 2576 bytes .../locale/pt_PT/LC_MESSAGES/django.mo | Bin 2638 -> 2622 bytes .../locale/ro/LC_MESSAGES/django.mo | Bin 1975 -> 1975 bytes .../locale/ru/LC_MESSAGES/django.mo | Bin 0 -> 1086 bytes .../locale/vi/LC_MESSAGES/django.mo | Bin 0 -> 463 bytes .../locale/zh/LC_MESSAGES/django.mo | Bin 1745 -> 1745 bytes .../locale/zh_TW/LC_MESSAGES/django.mo | Bin 1686 -> 1686 bytes .../locale/bg/LC_MESSAGES/django.mo | Bin 2830 -> 2830 bytes .../locale/ca/LC_MESSAGES/django.mo | Bin 2410 -> 2410 bytes .../locale/de/LC_MESSAGES/django.mo | Bin 2608 -> 2608 bytes .../locale/el/LC_MESSAGES/django.mo | Bin 3033 -> 3033 bytes .../locale/en/LC_MESSAGES/django.mo | Bin 378 -> 378 bytes .../locale/es/LC_MESSAGES/django.mo | Bin 2512 -> 2512 bytes .../locale/eu/LC_MESSAGES/django.mo | Bin 466 -> 466 bytes .../locale/fr/LC_MESSAGES/django.mo | Bin 1545 -> 1545 bytes .../locale/gl/LC_MESSAGES/django.mo | Bin 2508 -> 2508 bytes .../locale/mn/LC_MESSAGES/django.mo | Bin 469 -> 469 bytes .../locale/pl/LC_MESSAGES/django.mo | Bin 2591 -> 2591 bytes .../locale/pt_BR/LC_MESSAGES/django.mo | Bin 0 -> 2525 bytes .../locale/pt_PT/LC_MESSAGES/django.mo | Bin 2800 -> 2800 bytes .../locale/ro/LC_MESSAGES/django.mo | Bin 2566 -> 2566 bytes .../locale/ru/LC_MESSAGES/django.mo | Bin 0 -> 3096 bytes .../locale/vi/LC_MESSAGES/django.mo | Bin 0 -> 463 bytes .../locale/zh/LC_MESSAGES/django.mo | Bin 2136 -> 2136 bytes .../locale/zh_TW/LC_MESSAGES/django.mo | Bin 2328 -> 2328 bytes .../locale/bg/LC_MESSAGES/django.mo | Bin 1328 -> 1328 bytes .../locale/ca/LC_MESSAGES/django.mo | Bin 1233 -> 1233 bytes .../locale/de/LC_MESSAGES/django.mo | Bin 1198 -> 1198 bytes .../locale/el/LC_MESSAGES/django.mo | Bin 1395 -> 1395 bytes .../locale/en/LC_MESSAGES/django.mo | Bin 378 -> 378 bytes .../locale/es/LC_MESSAGES/django.mo | Bin 1201 -> 1201 bytes .../locale/eu/LC_MESSAGES/django.mo | Bin 462 -> 462 bytes .../locale/fr/LC_MESSAGES/django.mo | Bin 1153 -> 1153 bytes .../locale/gl/LC_MESSAGES/django.mo | Bin 1202 -> 1202 bytes .../locale/mn/LC_MESSAGES/django.mo | Bin 638 -> 638 bytes .../locale/pl/LC_MESSAGES/django.mo | Bin 1230 -> 1230 bytes .../locale/pt_BR/LC_MESSAGES/django.mo | Bin 0 -> 1214 bytes .../locale/pt_PT/LC_MESSAGES/django.mo | Bin 1158 -> 1158 bytes .../locale/ro/LC_MESSAGES/django.mo | Bin 1255 -> 1255 bytes .../locale/ru/LC_MESSAGES/django.mo | Bin 0 -> 607 bytes .../locale/vi/LC_MESSAGES/django.mo | Bin 0 -> 464 bytes .../locale/zh/LC_MESSAGES/django.mo | Bin 1067 -> 1067 bytes .../locale/zh_TW/LC_MESSAGES/django.mo | Bin 1011 -> 1011 bytes .../locale/bg/LC_MESSAGES/django.mo | Bin 0 -> 463 bytes .../locale/ca/LC_MESSAGES/django.mo | Bin 0 -> 461 bytes .../locale/de/LC_MESSAGES/django.mo | Bin 0 -> 460 bytes .../locale/el/LC_MESSAGES/django.mo | Bin 0 -> 459 bytes .../locale/en/LC_MESSAGES/django.mo | Bin 378 -> 378 bytes .../locale/es/LC_MESSAGES/django.mo | Bin 0 -> 461 bytes .../locale/eu/LC_MESSAGES/django.mo | Bin 0 -> 460 bytes .../locale/fr/LC_MESSAGES/django.mo | Bin 0 -> 459 bytes .../locale/gl/LC_MESSAGES/django.mo | Bin 0 -> 462 bytes .../locale/mn/LC_MESSAGES/django.mo | Bin 0 -> 463 bytes .../locale/pl/LC_MESSAGES/django.mo | Bin 0 -> 518 bytes .../locale/pt_BR/LC_MESSAGES/django.mo | Bin 0 -> 478 bytes .../locale/ro/LC_MESSAGES/django.mo | Bin 0 -> 503 bytes .../locale/ru/LC_MESSAGES/django.mo | Bin 0 -> 535 bytes .../locale/vi/LC_MESSAGES/django.mo | Bin 0 -> 457 bytes .../locale/zh/LC_MESSAGES/django.mo | Bin 0 -> 454 bytes .../locale/bg/LC_MESSAGES/django.mo | Bin 3002 -> 3002 bytes .../locale/ca/LC_MESSAGES/django.mo | Bin 2505 -> 2505 bytes .../locale/de/LC_MESSAGES/django.mo | Bin 2678 -> 2678 bytes .../locale/el/LC_MESSAGES/django.mo | Bin 3185 -> 3185 bytes .../locale/en/LC_MESSAGES/django.mo | Bin 378 -> 378 bytes .../locale/es/LC_MESSAGES/django.mo | Bin 2633 -> 2633 bytes .../locale/eu/LC_MESSAGES/django.mo | Bin 466 -> 466 bytes .../locale/fr/LC_MESSAGES/django.mo | Bin 1985 -> 1985 bytes .../locale/gl/LC_MESSAGES/django.mo | Bin 2589 -> 2589 bytes .../locale/mn/LC_MESSAGES/django.mo | Bin 2847 -> 2847 bytes .../locale/pl/LC_MESSAGES/django.mo | Bin 2690 -> 2690 bytes .../locale/pt_BR/LC_MESSAGES/django.mo | Bin 0 -> 4518 bytes .../locale/pt_PT/LC_MESSAGES/django.mo | Bin 5148 -> 5148 bytes .../locale/ro/LC_MESSAGES/django.mo | Bin 2690 -> 2690 bytes .../locale/ru/LC_MESSAGES/django.mo | Bin 0 -> 3421 bytes .../locale/vi/LC_MESSAGES/django.mo | Bin 0 -> 463 bytes .../locale/zh/LC_MESSAGES/django.mo | Bin 2152 -> 2152 bytes .../locale/zh_TW/LC_MESSAGES/django.mo | Bin 2452 -> 2452 bytes .../locale/bg/LC_MESSAGES/django.mo | Bin 3210 -> 3210 bytes .../locale/ca/LC_MESSAGES/django.mo | Bin 2752 -> 2752 bytes .../locale/de/LC_MESSAGES/django.mo | Bin 2830 -> 2830 bytes .../locale/el/LC_MESSAGES/django.mo | Bin 3516 -> 3516 bytes .../locale/en/LC_MESSAGES/django.mo | Bin 378 -> 378 bytes .../locale/es/LC_MESSAGES/django.mo | Bin 2804 -> 2804 bytes .../locale/eu/LC_MESSAGES/django.mo | Bin 467 -> 467 bytes .../locale/fr/LC_MESSAGES/django.mo | Bin 2642 -> 2642 bytes .../locale/gl/LC_MESSAGES/django.mo | Bin 2779 -> 2779 bytes .../locale/mn/LC_MESSAGES/django.mo | Bin 470 -> 470 bytes .../locale/pl/LC_MESSAGES/django.mo | Bin 2876 -> 2876 bytes .../locale/pt_BR/LC_MESSAGES/django.mo | Bin 0 -> 2945 bytes .../locale/pt_PT/LC_MESSAGES/django.mo | Bin 2874 -> 2874 bytes .../locale/ro/LC_MESSAGES/django.mo | Bin 2861 -> 2861 bytes .../locale/ru/LC_MESSAGES/django.mo | Bin 0 -> 1284 bytes .../locale/vi/LC_MESSAGES/django.mo | Bin 0 -> 463 bytes .../locale/zh/LC_MESSAGES/django.mo | Bin 2219 -> 2219 bytes .../locale/zh_TW/LC_MESSAGES/django.mo | Bin 2557 -> 2557 bytes .../locale/bg/LC_MESSAGES/django.mo | Bin 2942 -> 2942 bytes .../locale/ca/LC_MESSAGES/django.mo | Bin 3196 -> 3196 bytes .../locale/de/LC_MESSAGES/django.mo | Bin 3298 -> 3298 bytes .../locale/el/LC_MESSAGES/django.mo | Bin 4017 -> 4017 bytes .../locale/en/LC_MESSAGES/django.mo | Bin 378 -> 378 bytes .../locale/es/LC_MESSAGES/django.mo | Bin 3333 -> 3333 bytes .../locale/eu/LC_MESSAGES/django.mo | Bin 466 -> 466 bytes .../locale/fr/LC_MESSAGES/django.mo | Bin 1304 -> 1304 bytes .../locale/gl/LC_MESSAGES/django.mo | Bin 3268 -> 3268 bytes .../locale/mn/LC_MESSAGES/django.mo | Bin 732 -> 732 bytes .../locale/pl/LC_MESSAGES/django.mo | Bin 3317 -> 3317 bytes .../locale/pt_BR/LC_MESSAGES/django.mo | Bin 0 -> 3270 bytes .../locale/pt_PT/LC_MESSAGES/django.mo | Bin 4993 -> 4993 bytes .../locale/ro/LC_MESSAGES/django.mo | Bin 3343 -> 3343 bytes .../locale/ru/LC_MESSAGES/django.mo | Bin 0 -> 853 bytes .../locale/vi/LC_MESSAGES/django.mo | Bin 0 -> 463 bytes .../locale/zh/LC_MESSAGES/django.mo | Bin 2599 -> 2599 bytes .../locale/zh_TW/LC_MESSAGES/django.mo | Bin 2927 -> 2927 bytes .../locale/bg/LC_MESSAGES/django.mo | Bin 2778 -> 2778 bytes .../locale/ca/LC_MESSAGES/django.mo | Bin 2457 -> 2457 bytes .../locale/de/LC_MESSAGES/django.mo | Bin 2551 -> 2551 bytes .../locale/el/LC_MESSAGES/django.mo | Bin 2848 -> 2848 bytes .../locale/en/LC_MESSAGES/django.mo | Bin 378 -> 378 bytes .../locale/es/LC_MESSAGES/django.mo | Bin 2499 -> 2499 bytes .../locale/eu/LC_MESSAGES/django.mo | Bin 466 -> 466 bytes .../locale/fr/LC_MESSAGES/django.mo | Bin 1128 -> 1128 bytes .../locale/gl/LC_MESSAGES/django.mo | Bin 2491 -> 2491 bytes .../locale/mn/LC_MESSAGES/django.mo | Bin 469 -> 469 bytes .../locale/pl/LC_MESSAGES/django.mo | Bin 2535 -> 2535 bytes .../locale/pt_BR/LC_MESSAGES/django.mo | Bin 0 -> 1586 bytes .../locale/pt_PT/LC_MESSAGES/django.mo | Bin 2708 -> 2708 bytes .../locale/ro/LC_MESSAGES/django.mo | Bin 2511 -> 2511 bytes .../locale/ru/LC_MESSAGES/django.mo | Bin 0 -> 541 bytes .../locale/vi/LC_MESSAGES/django.mo | Bin 0 -> 463 bytes .../locale/zh/LC_MESSAGES/django.mo | Bin 2439 -> 2439 bytes .../locale/zh_TW/LC_MESSAGES/django.mo | Bin 2370 -> 2370 bytes .../locale/bg/LC_MESSAGES/django.mo | Bin 3864 -> 3864 bytes .../locale/ca/LC_MESSAGES/django.mo | Bin 3201 -> 3201 bytes .../locale/de/LC_MESSAGES/django.mo | Bin 3235 -> 3235 bytes .../locale/el/LC_MESSAGES/django.mo | Bin 4210 -> 4210 bytes .../locale/en/LC_MESSAGES/django.mo | Bin 378 -> 378 bytes .../locale/es/LC_MESSAGES/django.mo | Bin 3351 -> 3351 bytes .../locale/eu/LC_MESSAGES/django.mo | Bin 467 -> 467 bytes .../locale/fr/LC_MESSAGES/django.mo | Bin 3036 -> 3036 bytes .../locale/gl/LC_MESSAGES/django.mo | Bin 3332 -> 3332 bytes .../locale/mn/LC_MESSAGES/django.mo | Bin 470 -> 470 bytes .../locale/pl/LC_MESSAGES/django.mo | Bin 3452 -> 3452 bytes .../locale/pt_BR/LC_MESSAGES/django.mo | Bin 0 -> 3791 bytes .../locale/pt_PT/LC_MESSAGES/django.mo | Bin 3794 -> 3794 bytes .../locale/ro/LC_MESSAGES/django.mo | Bin 3329 -> 3329 bytes .../locale/ru/LC_MESSAGES/django.mo | Bin 0 -> 4282 bytes .../locale/vi/LC_MESSAGES/django.mo | Bin 0 -> 463 bytes .../locale/zh/LC_MESSAGES/django.mo | Bin 2703 -> 2703 bytes .../locale/zh_TW/LC_MESSAGES/django.mo | Bin 3045 -> 3045 bytes 178 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 wagtail/wagtailadmin/locale/ru/LC_MESSAGES/django.mo create mode 100644 wagtail/wagtailadmin/locale/vi/LC_MESSAGES/django.mo create mode 100644 wagtail/wagtailcore/locale/pt_BR/LC_MESSAGES/django.mo create mode 100644 wagtail/wagtailcore/locale/ru/LC_MESSAGES/django.mo create mode 100644 wagtail/wagtailcore/locale/vi/LC_MESSAGES/django.mo create mode 100644 wagtail/wagtaildocs/locale/pt_BR/LC_MESSAGES/django.mo create mode 100644 wagtail/wagtaildocs/locale/ru/LC_MESSAGES/django.mo create mode 100644 wagtail/wagtaildocs/locale/vi/LC_MESSAGES/django.mo create mode 100644 wagtail/wagtailembeds/locale/pt_BR/LC_MESSAGES/django.mo create mode 100644 wagtail/wagtailembeds/locale/ru/LC_MESSAGES/django.mo create mode 100644 wagtail/wagtailembeds/locale/vi/LC_MESSAGES/django.mo create mode 100644 wagtail/wagtailforms/locale/bg/LC_MESSAGES/django.mo create mode 100644 wagtail/wagtailforms/locale/ca/LC_MESSAGES/django.mo create mode 100644 wagtail/wagtailforms/locale/de/LC_MESSAGES/django.mo create mode 100644 wagtail/wagtailforms/locale/el/LC_MESSAGES/django.mo create mode 100644 wagtail/wagtailforms/locale/es/LC_MESSAGES/django.mo create mode 100644 wagtail/wagtailforms/locale/eu/LC_MESSAGES/django.mo create mode 100644 wagtail/wagtailforms/locale/fr/LC_MESSAGES/django.mo create mode 100644 wagtail/wagtailforms/locale/gl/LC_MESSAGES/django.mo create mode 100644 wagtail/wagtailforms/locale/mn/LC_MESSAGES/django.mo create mode 100644 wagtail/wagtailforms/locale/pl/LC_MESSAGES/django.mo create mode 100644 wagtail/wagtailforms/locale/pt_BR/LC_MESSAGES/django.mo create mode 100644 wagtail/wagtailforms/locale/ro/LC_MESSAGES/django.mo create mode 100644 wagtail/wagtailforms/locale/ru/LC_MESSAGES/django.mo create mode 100644 wagtail/wagtailforms/locale/vi/LC_MESSAGES/django.mo create mode 100644 wagtail/wagtailforms/locale/zh/LC_MESSAGES/django.mo create mode 100644 wagtail/wagtailimages/locale/pt_BR/LC_MESSAGES/django.mo create mode 100644 wagtail/wagtailimages/locale/ru/LC_MESSAGES/django.mo create mode 100644 wagtail/wagtailimages/locale/vi/LC_MESSAGES/django.mo create mode 100644 wagtail/wagtailredirects/locale/pt_BR/LC_MESSAGES/django.mo create mode 100644 wagtail/wagtailredirects/locale/ru/LC_MESSAGES/django.mo create mode 100644 wagtail/wagtailredirects/locale/vi/LC_MESSAGES/django.mo create mode 100644 wagtail/wagtailsearch/locale/pt_BR/LC_MESSAGES/django.mo create mode 100644 wagtail/wagtailsearch/locale/ru/LC_MESSAGES/django.mo create mode 100644 wagtail/wagtailsearch/locale/vi/LC_MESSAGES/django.mo create mode 100644 wagtail/wagtailsnippets/locale/pt_BR/LC_MESSAGES/django.mo create mode 100644 wagtail/wagtailsnippets/locale/ru/LC_MESSAGES/django.mo create mode 100644 wagtail/wagtailsnippets/locale/vi/LC_MESSAGES/django.mo create mode 100644 wagtail/wagtailusers/locale/pt_BR/LC_MESSAGES/django.mo create mode 100644 wagtail/wagtailusers/locale/ru/LC_MESSAGES/django.mo create mode 100644 wagtail/wagtailusers/locale/vi/LC_MESSAGES/django.mo diff --git a/wagtail/wagtailadmin/locale/bg/LC_MESSAGES/django.mo b/wagtail/wagtailadmin/locale/bg/LC_MESSAGES/django.mo index bad15500eecc13eae01831906473ad0e591c4075..2ac7eb2e7ab142f85ac68d6449a41a1c6bd9bf38 100644 GIT binary patch delta 3388 zcmYk-du)|O8prYH9BwTX5L$Wx3#X-&A{;mc+Da9c*4Cm_F6AOEf}ECGE~SND0nx+7 z1w=&U^%6BI7z6`s(%pBBfCl(u!>+CniG(0)SB-xd)EJGsQH+88{(45T6P|u%-pkCq z&&(Wd?hQQiXzbrZd%s|meZ=j=-riDO@;-yki%Tv8)@n;5AeSkMQ;#*o5=( zWt@iJVi?EJ8;{xoXC3C!ZbcrkSCF~dG1NFGF`4o0A3YVb&u|hqen39bLPO&(hH*IU z8JLLGNRq4$`{F9p0L||HR@4{naqXk1=l|+FiJHJ^9K!f^p2|r49Q)%9*G^0}%b=Zy znpi0+6D_FK*^D9Ff&8;W{LvSlaGpaAd!>e0fm*6Fs0m+1EyXpQf{Cf|iBCsmusoIg>r3WvK^-hc zy|@fDU?VD}TTx515B1#3s0kdvTs)2%;1kr|>Bp=Y(^63V-+`>EO-9`>$7NU*qoNMG zP%pfT1$Z6{u~&M0fMOg=JL=j`x^@>%<@y!pK+>brP>M?VdaT12QK#ou)Y6P0OH#jqn7X+RL8%eHgh@+wTt-Eg$t16SZ{u0 z?!yr{LFd1oN--Dqqf&GpUk#Xjf!(yX(3?_K!$Pjb6ZjJ5gh(I0j}16Di)F-4Y{PS? z54bBkp21mo5A9|Qp^w=*|CgvR6Z;vJ;+)ZBBS0ol=lXeeVl}>nr|>2=;VJU_IF4fj zuv+%E^DHi=eFb^cCebN#v4yCNbYKYgV;-a{P(9)LH-l4%DEIZ;7U}7 z?U;nmI$uLQe-t%5+Y|KfDaj_?ewKs|Q>HPLS5x6Zzgxk@i) zp_!#4V_7L`4{UJ0i0a@y)baWdHQ{Tx2q&|!tdi|Uz2~DcbOp6JzeG*!Iv&7WW}k$y zzf;kTOZXrL_)P8IYAnVs)L!@&=ipd=o#tW(R^mB)43i7v*PlZ^-oC_BIHV|k-akU- zYN>1-WndPvL@}$TqD{C0dB=9U_8Cm2{WUUayMYy$Kh2D!*(PMw>?oGw71a42$*g59 zKEN?PjLPVL_=*EK`tJDB{0%#G{(~%33O6<*&)+IhYQtP>Cq8`ZPP{_D)M6DS4gUW98)@kL?=6HX@$c+JiPADl*GcBB-AIdK*o>DYEk{^lmpEoyLMMtfxo14OA z(YE^H(Bw$|)Ntg^aD?Xyil^JI>Q^>l`jwc4@Sv}4*&oF delta 4956 zcmZ{n3vg7`8OP6tHzYjrAP^F~34{dlAPLAL1{9?tiU=wy6qF@d!b*}&cbCK%U?Cz8 zE2Mh0J^({)>!YnLWfK!a4RktHoR0SHXvcP1ZR^+v)~U5K#X5@i_rH6o!04I%?(aM2 zp2zn(H_+Ms`Tf4w+v$TJHnc7z7s(uA%pYOuNFKDkX~t}Y``~kM=xAeh!)~|>UN**< z9q=Sv3>S?xWhMz%MnwMpavQYvxJ_k;OtDp=GK}Dtu4u?;}Dex$?;2Tg5{s(Hm5#y80hA~-E zh$72pK!v>0o3H>*qJJIK0rimbFd?XQTRh(FF$U$xE~v=ZQ0orELGb%f4n7OD{`h#} zuLDjpppE|k3*kFZ77x!(G8bxL1;hz+C7cRx^SBN2Gf(o+x_+n#y#_bIze72;azb)^ z9hAeZ6NtZZxt#%7{uorQo`JLADag-!%0r%Hv8zIy2i2bjCnfswq`V3UAe+(6=I8HW2`r%WEw~)IRS&gM z7gTM;AvT*|LVo7YUSIhJ<_n$$2CWpjpgC(#WHbCmr9E8JR4@`vvka{z}f-1hh z!fWBDP?252VmY#=ocK%G%s>^~3Q3Fk36$r*h6>e3P`RE=;;(^K@G{sA8(=TgK2s~W zn($J1HM|MVgO7XTuS54XKp8l!lK9Kwg34rZ%!Hb7HI!#-p{`{MRB`?Qx}JI*fLi}D z91Guo+W0TtxV+N)G^lksP(?TeYJPPLWf97Ca46glb>KsgXqi)x^qMoU6k5DwZ*x6V zBx3M7cnU6tncUH0xEkuZcJO!&_Co5>?B*lDRP!S^8pi&FqJDcTMdsiRP-{W(-o zpMnI{{7d~9O3@X`qPPL-{%?f2a33V?<|)Wo=68_bm~0AW30wgy;GtCh5Mmyh$5tRAEK+=j8rQB=i0p}%e{{BsJ0JL3Y0$;(L>0&cF zvJ+`Q_9F!E|E=BA2&~%<^HiiC)A`>-wjt-YFdZBD2BKp77V>RG?E&OwWDhb3*@0|9 zrXq`wIz)9c7vXP}`>*6in1kr*sTCygh5v^bSb%U#%=O46NG-AgQ41ntkh|5Pad+LO zI#D}-bRkzDx?T?>orqc+@+hLBosL8hwIRwsMd-G3nYhX8KMo)9^iA+aPoLybC_hhM zhF*fyBl>=1Bdd{#$Zn(<*^6vMiV(HS>2>hR{YUx+xg3qHWCqtJdFSg_;`LtPSYlfIk|jv-}auT^bJXZlhHbXk1v-Ua_sH zW+qy>b+Zu(N)!)>KjTWE__7qXf{QEL;sTK?MFKm>b3o`sfQ zJ_lr*>%&C`nwz5j=$43w>iF~7jlQgNzSV8PrjQi~hly2u)Wona^Ohh%tPA@$MvbdB z1X}|3)|}ECaYc5>oK}BR^a2A4i)F$cI)8e^+$y)fVy=!QHRYPK2zErA9%>~a=E!d7cwLnIgtlv}GYOWA7-5u#w!!u~*5X$Usem&bE* z(|u{P$|`4DRkNxqs!A%V?D=_>F`>g^jQUuC!DPZ=`OqS^UrlLx!X6Zu7748`|Pc1HNR?V2hpzOuO6H>KD4 zX<~#xedPOD`%S%Q@^?GKduqR%K0P_PO0rdfD*=(u+e{oajj05 znHlkhnYBK9N=06la~ylSlMy(^X+4z!RcSnG?6LWo!=2}e!ZBySK0EKy^vB%{vG4Ol<2bhW*b|C#3#zDs!5?EHiy>Stv8kF*m)=3uP3HYL05ed+LSE%cx}bWh}1rB|4K8^+KYf q+;R>PbIfEu_Nu-TopxnmR$-|o9ak}*S5sfqM4uLv#|vs2eg6Z(`S|Am diff --git a/wagtail/wagtailadmin/locale/ca/LC_MESSAGES/django.mo b/wagtail/wagtailadmin/locale/ca/LC_MESSAGES/django.mo index de002f6a30a21366a702379ff62502e5a4f31cd3..363488ff5f682a67e3ea2acef59fe42d49a0bfc8 100644 GIT binary patch delta 3447 zcmZwIdvJ_b7{~FmlDI^OAOw|cg1E%WZf+!mxTJN7`z;kTDOs7Vfq2J%`N&o7ZJn!ecXWz>?&pGGKzJ>S8 z0ykSm?l2UGc#b$4Y0TGH)Pw`2G{%^Z(2r{|wwW=jaVOSchvvo%!97@tw{R*BiZvz& z_hTcxf-UeSCgGnLXH3Av(%PDaWaM6xgH5pzm*QB|11@3@ynF91g;8KSKNKT_HS4h*?m#`@6Ks!XP|3N0B+J~! zhWI<`x(D|62Cc#)jX_=C6Lo!#wJ$d3{icA59xxi|teJ#~I2)sJoju=<>d+C?2+pHA zd>#2S(WFtCO2o#Pif&9t{XPbjfpTj#2GpZED(b)*RO&a`3wB`#&JUm-{1rywIn;fZ ztUsbUbR9L)JE-gb!U%kV8rU<`eR1*O=eCI_|9W5s4PCGgs;ASf)uk3gFD8f`MMm;}(T3bP+&*qF8^ujC1x-mEH1rN~2`BR*R z-h}Xjx1es^f!TNvbMO}GMF}jBt~da7USZF-U>4`ctanknCg3I?O8qD-!&=lfyM~(k z2o9Q}B-Gq>LCtXwR0gt8BN~djZX$NW64c^cjk@kAYAU}){>*g_Eb@SPXdB}B`W)s5 zAChhJ3l777uqO`gNP2MrDpLn>x67DQSjl-Y^H_x6SX;S`8NqoeYCwl@6kbIyrY0LR zQ2T!}70uahB#Y)fR0_X9-feCn*)mV92`S+YWZ)*+3sF;e8AIC<$8sLsiLH%OF$4Fa zrtT6dBfqJg_nXI5*cryd($>fZp;9#wnSN7&>R13ZRl86rKZW$koJT$I9+C{>;v(Ij zgpue&buh=a_eU+(F&IdrQbI*@x(=gooAqr}kN2W76vS9Of%-t5L%r}0YR((6;uyT~ zBFo2&M=j3zsOvvKb>u9n0~b=sKXr4JgGTTawY^%Be{H{HjKUtM8@;IO`k<~WLcOpA zwcVDZ2C@-#-&+`g@1VBnKHGi>m6=bwl7C(BISoqvNz{ukqEdbp^`QHx5k5p^B#9IK zo{c&mWzWkolk;V$jvYa*_8+YGQBxMvJ)Fs20V-tA^hfom9F@{Js9mrQS)Q93M>O1f^UdEO*D#f?49G{@(wA5$Ji?|ZCNPj{X>fY@{0WqJbAhhk5 z5*t*RO-v-z%T2@^L~lY1%ulFj4QMpVNHwvBP-z+_wAi*%*P2jS5GFLo!>G?8l+~%W zeLOB90&d$-iyFlULTOe}7WC!YOpGD4r#13zghs0JDp47#vB<2;P*bv;7({d?Ruara zsF1MGluuA1wEa}bR;awfk+l^1F6evTC)65VL^0I)SejDXCe{&SiG_sHUSEo-Y$T@G zhV}J7U@kF(=o*>`Dszdogonr?h7#RdFn9#PHObjGcwEFeU&?;X=lo3Tl zeVIjNI?<)R0rmX}75$^BA%+rf5{rpRgi3js&~b~cSE07qXkr{OlF;`BO{P@1(`9VC&=D?&*%2#%{+f?Rdt?wgui;8duY{+c{7)|`_1K~fabEhr=XK3xUbW$D5t3VBd4UtW2Y|dcrd@`9+xw+*9B)#dU9}4 ldcMm!;r%kIu!i0SFZ$@~tjrBACn4J#T%UcyiV6rCWi5h&dXjrcj^5mRz31G-Aoi-X zs7R@D+)%KnwC+kxYe${hYTRb5Qx~+_PSr9x)fr~g{$ZK1wf+9iJ#nNnp7FV#_iXR- zyzhI0Uv%DcMec(MMYkD_gTy3a;fcn4h?_?7!|~o&W47V@_!zD)Hf9GFl^FA5ya}(t zapR0xg16wM_%3e3`Qwe5hqvNzd=0r}-o_eZa^_bbn-dIAT+ZdcF;dXx}VS0nbE@{A^SO z>roAE#>tpM^?WyKcJ@WrA3$~RWz_p0p$70dYG5@L`OLN92+mK%lW_^=EDGHe^x%!C z2KGljg6i1Qs17}cnv$2I`)^`3=O3b`=4)j6n8M2Zdm|%@BTG>otU_g=u9E!g#TG6U z;sVr&7oi$niE3aSs^T=(VlS%0`yvma-g^-lw0Re&;nB$PRmM;>^HA@dkIGm_75VR` zu#F2E*(cGBFHs{N%~P7=38|9W~-RP|qDiW$IznbHBkE_bdj>IE)A|8$WC#r#CI1G!)X9<=g({E}~Q@8}x@I^=;O+QY>`;ZM`UYbSzwaP!@ zf?lko)!{e~N8xG6Ewcj2s_{`Hx*N5RpTH6L9IAt_px%ES_1rtC=RQLEFs{zlZ)Y({k;jhd2vRDF9;Bfb-rspq5ne~!+- zh|Y7v*raVdP=o5>TGaOFjogEp)5p=nH&Cfw(v+Y3b*PSSMWs52O8tIhBbi_05!+5BkZ$nkQ2el{nd|-HxhfH->-z@28*+Jc-(V&)`=4H=cuiE%}tbfNJnnR0V&+x%e?^4V}c+ z(Fj*ZZbjCoxgWKLUdK6jEIMx_?TfVkH&8eYZ%0+|4m$V^s)9IgX#~4b9e5Nq#{;Ml zJ&k4fB5K6%qXzU3)Kq+q<8c_hB{`-FS%+ph=1M8}6c*qOI00Y45_|{M@Fz$zOd-S6 z2WSqyg{!d~r_JZ{jWLYlL#Q=Vd z$b_Z*PZey5&eb^`?ZlPD^@P>{GZTK8uEjb+ozO9o&>y2#egAcwO`Je5P-79=qjwNz z5jtFA8KE@ZLaZdT*mV4i&@}i&8!>e3q_8GBIWKZIG8^GEHsao>{qXjI@RvUdsA-r& z>>$#_9^xEg=(r{-tcbi1w-NUcHxt(p-#vOcxs%8eYl+*4yNR&Yx`=gzjvj(FmK&OZ@bjx1 zW%}U=h=YVa9v2dK5w{XLenjji&Lw6MeS{9}isfM`|34=xUJ#xC9QQ@#1g;Ouj9*_n z9k&y+!&3fd74VfbmlN79mBeO3e|m2sv^9T9Tt;Zy>NuUaDlDd)gpMR}KhY74A6+`LoYHpUMxuxqLFl-F(5BOIk$!^B zW2%GIB@=^RjaJ?Ox^CfYN=?=}y*$*i)#oM>dfBskdDZWBGEP&lsN%88gkyV7z7gB% zwG%FP-5w|Sv|`fmxSMf0eJ?1e{API4O{X2o|Eb(_Q7V(^Z?O7PSu38hk}2QnrdG@D z>~uW(n~Hj9+2Nqow{Q&q*Fm$^xBaXa5i@JE9X+leyjit$;G?Q31?5A-jA!Xy%5pLp z(l+qf#7sfidY6R8GxiqWgvEs0>jW28H=M($)Ft(-&rbTs^`&-(rr;8FWu|8?PzJu| zS*3kod-YWXmwZq9+@vxXX53Gut%TF-B*Ls~tTdjn`kW5W^_?bbBVEzt^`yv<>s$2M z$!HebWLML`u}KpO?6$_1IaX_1thu$mxwW}@)T)(@Yn)!!b5qI2CCqfpYHeapEK&@*{M@YduD$F$qY zt}IE2(WRiirYWeK(mb%CX77pPtZdR|CVQE(!2?}xGWhSb@;$YmRjhRqPG_e(IAFz{ zgl9SV#T$HD`}NrTgN|oyVQB?Nr%wz%nEt!M!H2woy><5#To$jhugE$cbKs`4EW}g~ zx2$w3&T92Yfu=Xk+nuQ%7K-ZNB%V*|cb9Sdas9F_o?;A{xSbh1VA+Yp;DMlV=DRc2 zx)!aZ6L!{elYS<}s&TL68pG;NWmwsR2Uyy+6`U|@YDu`RJISxz<0O4=V9Kn;1;f`k zKGk`_rS;EkTArehN%lbl9k+ZZN!3oK$MsTSA?$o6tUR9uTj_~Ldi*jsOFfo({x@cp zCVSoB;)Z1d$%d%~)eI%g=20dxRM3@Wc?_-dYZ~_!%vkSwS$3qq)wU9Kj@QAyvy=U- z`EM_i%w9JeRLyQVeI>;dbCjg5K9LMo;#F}gSwK4B@wa|Rjw+bwG{h8Wj&1vgJ z?8W&F3j!pQ7I2B5J@* z$e#%(jmlJ4Y>B7osvyX01V=MzoHK2Cxy8`mOeYeb|}vL#U3w#1OoIy6>{} zd(?oMP;Yt%b^Rl3j!#i9_8fIz+qhuA?c>P5I!vRXCk{f5bgs1qbz=kaXZCUEfyb;@ zu>)Qh}o&&Q!&unaYYOHc!DXixsN8u!qUj-R1Meg~DphxYtmR0qv? znr>``dSE;%rTtJ-m4mu&Bx(Q!*b8T%`uCyMmLD0jX;gzAcnw)M=9azSA*OQv4CkOH zKG^Yg)Qx*^ARfU?yp4KLJPV{Z=AzCk?D=-g;QW;J9%|S4+~h;4pNOSchuUV>QFGs% zgQln(YVLZX=D05^0~x3{8iTrSD)zw=)Z*NLy6z-uD$gT-rilZK+-Lr=4RL&ZPVhr2 zl5O)dj>RX~4~KUly|@gOsUx`0Wy~2|!1;9Mu>jAY?u&3UD4dE(xF3t~JZ5311YPel zW-=Ac;Q>^~M^PhhL=EI`BwHpdF}R%)toeAH_EJ;^V!E?{(T$67CXT~%I2fZ@x%xhg zx6Z~qo^PtC@Dk>j{oxyo=KM$7{ui5|5!9KS$kg9eK9-1=UeRQZO?K zsQU(?QeTMLj#bzf52Du2cc@I>LA|hk)NbhMqr& zGCBALai~Sr4b|>JJt!NMnL^Znm!TfmfXd81j6mOhD(d(!j>2D2`!$(8r$w2I>Ua)n z?iZjsT#ch~C$7LBP*YUIS4Ekaf!YoAsQ!;3V>f>yk1#R)1K%B=$)&=2G3A(rTd^3= zp#~JsUexceVI4Lg&oWO@sqDkb(;H1dO=U4g;dE3+%kB9Z)QfDvKDZlmwEw@LqA${8 zRElC#gAeS5{Fw~)8wr(&Ack*{*+J+HRh9(_tc|hM7ZF2= z*|uF7UPbuawn3>)AjT8rwoUWjk=RBQ68w`8nERbLlTcYfR0V2Gk#!AfEvzN-31x3R z!Hfn9i4LrVDN2OqOogll%Ih4pKs4w2-fI!5WD=2tcFR2CMcG89h*(a@jb`u+sU5{?Z-3XwsKBZd&`h!({Em3Fp~X?|I>bt{RHM7?coiw^M?F^bSy zizc)PC+hjl2yLYegjV)qVl|=CDoEg~S7Pfdd^4PQgP2YXBUH2twD-e^w~11sfOt_B zP?<~ge9?eDty~qY=vrb7@gA{~&}vpG3lcbPxAkfaCngb-i3!ADLSyZhdXw1E_HnBT@v&cob8(I&+4|)<&RB>bVX&Sq^7!4Gjr0jl0B(TN@C~1gHk-S49v+$ zPxes43%s>;DN|~^OKU5=b=5UF?(yE5O81!R`IY6X+(VXdl1Fpt!ui!Jo%M;+BMZDs zE9$)!{?(TE})q>D1PKe|K-NFykHm`#I;n z&N=^c&Ykde%isOp_ebY#H5|K%Q;FJ>jrjoA4dsX9-QmVugNN{OtRG>_Cd?}^<|f>N z*W<{M#w@|R@Ctkf*WtWT#>~Zga1b6qE}6G*qA|VZBMSU8d83Uf!eXQiQ-;H^2GxOc zQ7_n!Gw=Ye#xHO_o>yp01>S)4$?T1M1*cN~1FGRKk+GP;G&X|vO)&+|nJJO;aVGT( zF(0qRakv@P(cP#QJ&UK{Z*T}6#ytE42jb_b`;JD}hl~kFYzk5LS7RRSn}sUiV${f& zpI7Ts01+z5q|hCD>~zv{BHF zx1bu>5&3ge$9{q8(95VP`E_*tAdaX00cvXgjVvECpd|O)kjN2{g{TgWMP;D0g#7El zS)3Sv^HC#Sh-!Exs)4nr7kA(k>_T;Td*oi!bFU$THt*nM{3LSJSYs%fxv1wZLS?LJ zEctJva1AFkvcE8pzL3DSj%d{}MIQS5fc# zJ?cGgp*nK7mx5CM1!_+7XiYa3pgL5HQ}HxZgUc~ol&FzzMm4+>*$C#5==uw&j{Fv9 z;Xz!F14!q&m_W7D`v?WS;7QaApTjx$CeFnHd=%7y8Z5;`RKF#v@5R}ie;3Pf_;+&k z8myq6MorlcY{vbl?OV!JxB`c;67_sNo`*YeIv&B*v~LQ@&pdQc59~m#iNB#5IEos{ zFy=uWTYxMVvj#1uB5%VdsXu|r*k#Pu8Mpzj#NBv47Lcw5*oeLQLfuP2?!iU)JTgt@ zU(xvzx?4bf8tVKRsO?mb^U*`Cokx)5nU|4|o_QZNfPW&(!wh8Nhv4aWGFHqW|AQ%1 zb3!-PqUtNL3NJ=IumuO=Rve1kQJL5i)n7(6_y#fy=Kbip7Q|5MB^bxkkgS_Jw0Kn+ z`9GV&{hZM1{xd4|1Ilw98HGyyDX0g}M~ysCs|&8Qo;p*pY=mAdCpBl#1m1D~QY_cac~ zlljc4p;34)UVz&7ccT{V!>ISZhFU9c;u!7!!_kGKxQq)iR$ezQ#|GSon$vN7e+QvO zrEVH(do4vZd>zif=aFS({(|gWQ^4nOD$c=qxDIRa9;~B%bC801JY`Pq#uWP017um4 z!OV}QU=C`;ji@zn1rEm~Y6>z@eKTsL_u)u7E z2-{yw;bP)eLJR8$#707^cPY_EXvMN#!ukI$evdeX7(wVbJ;$-%2PmCQoJp)ECK9d0 zT0%!V!FKQMpMmh>p$kR&;RuM`#1f*B_z`grp+k#p2XO&0gXku7Xm^|!mU90&QL!Pa z{}i`JyYJTg@_~arr`vWUTAkpD(eLFaT|b@4 z+Es4zhHS8@@acigZEh-Qg9Sz7gE>XJPRclaZx?mMn$j)SZ*#NO@9A)CbHcM}FV$n4 zC}*66?<8#^Yr{t~4%b?2tDBRTOKWFRslo7!DJI5>7`--lx- z#m4jxGucV^($>jjNL$~LahX_Ay-PxqnM8|k!eYwpa)QS3<#mioT~g1w6P|xuU#3jc z6kM*ZOwXDIW#C)xRoc0sCmdSvQha>hp79N_%fBU;uBUW{>G#teHsy3Vsc;H3aC(xl z-A+^1^_@z43H{Pcwx>y#>stokWHcqN*IL-6voLF0-6r2UjA&`5)oJqFY!IJh z`|2ky99Vdf!#vbEjDxAj`c5k4^xZY3AXc=-NhUV<^e^kQceFTdsZOu8Z^zVvSgbSH zH>ogqrnE44u=M%73!S!1U*og`vB}|EJezc#tdq5Cdpfdq!~SPIk9F*ku0$$p!$&Xh zY?lUb+`{f}-6yS?q~lfEC9cCdKi0c$Heqmo9UfXrqq% zn_OQ5aXrVj?td}myRD9GWN1ln9LMq5r+~DSQs_YsXrGn>Vq54<53r>O6#8%pa)Uew7HtdkLQv$X90e2+ z*q|nW5MB@j6=a1sCSX*QU{s=!C`1&E5Hv=RXpkoA_xJ4fg^82?_cOD{?96{=AGq?8 zwPk(iYQJuK48|>Hl7n1$g`#dd*L`-htp9Ve1;F;C7g~HPnY2g%*7Xx zKFzzHpWqPMSCB`Hub(lD*~FpVlYw!(-{gfW%mPPnVGc4`vlWwZ52}OXn1b)2l5+(~ zmiY;L;LoW0ZhO~#aqdi`QTOMd?l1AIz!=_ds;H=gsmNf>EKI}Y7=>HB_HNXG-bT&f z6V!k&BY!4}G%8bR*b|4KA4j0BPeWy3sb@2WG@^DY8o*{$>bHA0yo#x`52HGMAG_lP z)N>a-zd{Y@GHRwbQTN}$2<${n>>t!~eG}Y%6BEe4IxOJCU@S$AbdhH>>cI}=&%DYZ z3*Ykm68qD>i+V0L(alg6Y9bGM?MbK!E=4V2J!-%miR53qaSta7@f2$0H&H3P?X~Zr zI`Hu}Js634VG=5(IjE&7N8L9LHGlvP!8xe@L#VywAY(S~>4aW*3E4O1s&~U}%%}Y~ zF2uYfx8ohC2lrqx9>Ws6hI&yF8)PU}qS|#{dj}TLKJEDn>Z=L)$%j%u1s}s!)MxfJ zYV9L9Xo=EMYd09R#t)z}P=uOM4eGu}@P3?++MJtE_q~H!%Jaydxy*r09x{J=CldJe zIl+Z|B-`c(oQQv64vrm2dT|vhQ^)WX%a}9x2klv`<6I2*T@T}I+9t#Mtnnbtt+)h- zWg63_?|(ZLz0fzvOjpFm~i1}bCyv=c2hEox7cak30+a4&AaR!n0Z z>d;2bywkHk>okn_n?fp#!7M~3W7>5AU&AUqj~YNEc@1I}G6{1ChvSE+f!#r^aT*V+ zpBcy(XPQtyOdZIonpeE`NeoTr#0OL~g9Lifjai<>s7*8;)lnm=gAK@-%zk7anR7T9 zze8m#H`^Hg%sdWF*nztLE~+0tH!0)AIplv7l>jI7i?YnE?`gm9W}sC?|Kwl zSNG-MNSuP|xC3?HUW~${-uY9gCA)yi%q`ED;pD#uCvwQ6Iw(YSP=nfRvr!%GMtzR^ zJwL}%+7?^963bD${b>%hcoawDpQ!J?D9^obIcnP+LG}M>h{{+hJ?T9L1IQ%Jd`!o! z_#hs^9e4w^1gi_&6z;-kUB_5Fg?jEIWRm7OGFB7MD3sB$*bnPbnFy_?GM>slT!23! zzd5F=$erOF)WCM39yo})eg^CD65hdTevQ;|2|HDrc_Jz^4OoS5pa$|QDpLbkH^vq+ z0V=%Hgiw3I!4|xQOK>T9){H*J%XkC1WZvgnW5b(!s0<7upIWLs)Ichbn!pZvnuTbHWHp431O*I*-X|F`3@Fa4J`5tR6zF|hGb{z}+0v0} zw~*Vz|Et=KRm2LSj^MT7|J-a-WjXN((VN&#s8h`_i3k!Z%0N6ppQf4EOsMp738#D~ zb$u-=t6ai+Vj}e?2*w#+VqKa+tR+Hz4l1pLKB-z_8KI)}*7yA)F^xze5{O;ITtek3 zqA^@E=26dQQD4=1LYdKy-#}>nRkSSpRG67cM1;;z*x2E+nqxMhA0DMyYo)@zan~6a z6J2EsmFYwip>^&mbErH|%=1oc?Ye+$neg5k8eRw*^+X4u^=3nxNrX0IJJF5!zoJd1 zQs@#srg3Z_#u07dGw#27HudKSeQBvgA3~dViq_vpOdvK9ImDC1GlWW{OL*tb_v-q5 z^qcWCF`F1esB|Z^@$Mrw5|0r9qN_YkWf3vB>jZ}Q=?|Cw99xJQ;w54YF^f=H>JmQg z@aiiuikM0~OiU*DK*EKeg8!5PS`QHmy|a}v%CBN4#q@O=W2$=CXX7v0`x8#sO^FAb zg#L||{Y%ne`)G2C{aJFS{YA>o?ybSrwif4fYNO>$8#vFh&!%NNBh%MdPJBkR)w?V= zKi{8UQeHSRJ1^hP%}gyQ&CTOXad}Z;b{-`v5Nv79o!J~*(b5oXUD;gjuMIXg_-j@! zX;`+_KdPRF{Y>Vg(ShKKy0&25vU2~j2K$@L`SzGWx%SwsVy8#ex=81E?itJ3HDaIT zwB*mU>^lW<&h3Kk5ze)$J@ypq(bna(wWq)Tn-`AI+N=NhefPb)e9OHr zy7{JeZu7<8&uq8d(DtG{G`_ttAHYRj_@TYo&6qXtEw~@f>u$^@*sg~$8{ihW7WV9E z%v5+gTnb-@i{O}E#*Bt{!jAAo$Sdmo^OS!&fVVghoBrh1vURer~p2L3M@Z6mAMhH6a8`ULO2!1EsPZy z8hA6*2KRV;49c-1P!2r>Rg&ku_b$E4?^=5_Yi-D7Vk2Xmn^FeHck zYvOPoq{FdL5l?{HcqY^abDJP0-KIY`jvb$AgxmF)Vv=; zWvn8X{I9@R!vjV3NAJbwP!V@!lxmy_<#`F@)SB^d1Y86eYPLZI@(5IlTfF{Js7RlI zTJI&ObzX&Xsuj1yCDKhwh<-iu4w!jdw#Xf_d0`e+t6g5FbyaQ_7UZ_kx3N`L9 z912guBKQfkU>0@KEf@v0P7vyhG(t8uTi^iQ|A)K>r{Fx|FrdesgkwZ|2EK!*HGCl)$(f=2W!Mm8W9CjmJ zaiyXjL%ba_#_Wd$@C``0%s;&6x$HiP{uC$&nqUAPg#>T%D0nHH2zg{`pd8!@bw-|t z?s|}qqRA~K|N2ChFpC3fCPMWWz*%r5><*86&tLTTF4Up?6l$R?@~QcSkmQ)DknEdk z$i*_-;MMR^D965m#AF7Qk^k#4W|gHTJ`1(rU!Y2$yK@=Hf#cy~$oVomp&~v4wc$Ik z6HG5pIh+CYzMsbla18w=Q0wo2-Qm7ChEDS_s0~kf1KxwG=@(Eb%jNQmqhSX)7iyt} zPz%*T9m+V=dPgBXndd!z4SzttaHKJpzzRqbO#A_it1w=H6W{*h%xQZ7=@NaMjTn4vLcy06r>6;LI343ahT7QD*G0i2rZ zFJ%!qybErD4b(yN(k?gVCU_at;eHM>&HZ~5fH)I3H)5z2q;U2(iq#)!qS}v9#I;gC zxj^MnQ}k*x&`;22MD^SoptH3O4MEC|T4z*=%Guv-IA+oihuc`FE82kw)NLVtb+~$= z+tEytc?D`+aHrZ2JSEabpln_foKz|LwBGn zQCnN<8Ph#J0N0><(KfUmeYZ8xxeL`J)qXqLh1~t8VEhO*qjal1}bu zq;J8s=z4Sk(m_+ZFomRPFx}$@U8XqzD zE9Qq`J)qU1J*dL&)wOqFAFL*HGirzQ=SS^lXn||-Q5NmR8U5^8J^I?e%&_bmdRzoY zCYm#fJ9MfIuD0p|%Y*jgnQv!Qg<|1I)Vd~AxhiUJ>V2p~<%&>sm1U31>SvG2dLS(l zOuUv==c@=WvtlbkQ7hJ17qlt^wN|*cy3wk@jsyd-V3ie!TJF?Hkax?h@xhvjLw;Iz zM{+g7zob zc^#`lkzi#kYWs5j-LW=QR~N+oHs_9o;Yg&h*lG;dTUBAJHXO57u&NcPtPDo+H|%+6 z1>B(Jn;XM<4w^Z!K&(FM!Eff&SJZ@J_RG1KB|gj@=r1zg{@#DLfR64?i=xC z%?pvxsz_j2%(!NCs3B-y*ROasQOPBFwmMK7JI9wnLsfz$a-}e8<|_l=GgfJ5K%+vl z&-n8a5A~bxTk<`r4Am-|ZuVp0I;%R^5Uh49ptx})VyzBVL_@J)skH#NRLGhz*$Txh z{0~M{kx=dO(!@7;nZAW1N`{ZL%18Li%8Sa%%gVZ3GqYrNuptx;g=&XHsj|1|Sby%zhkl0JzSO4_GS-*a}$!&-TRb27ORN7x|Y9Od0nO?Hms z;fd6%4ar+^N28qMuCb2Jt4rK4xm-uVW6UP2NtNo1A?_Lz(3PE>VUi`AEhOs9MJPuTk3Zq@~MZ-|rvSezz)T zPa2$MZyws$UNyLP*131sIe$QA;%)y6Y4IK3snq$W`2QBn4f&*dmnp(Y(zuZ@TI4Uq zB;Er^0h~=L$&oqk7DY8ZLN*>(DR^d=m50OB2&mtrR8;GsXY_9ls2{ delta 32 ocmeyx^qy&g3Zv;n)eK%^T|*NEBV#KABW(ktiLB8Gd%k_=j?kq=Q-znmplH= zwSh~$I=32%L)=TWbvEV%mdEfxS>!h6Ao{QcyLU6D8DGSW*f-9Y3HUND!pk@x$8|TR z0QX}wp2Hq^3H#%3*wdJR=}vENI#Q8yO#ybrGJFzepe}G4Gw>YFKo@5h;Y`fJ?Z`FF z2i8+Kn07mIiizlD3}ZI&sQaX1Joh&_p$fCW;e1hvOxA40KG=%7z`K}?$56>>N0McJ z!YKS1b=-CPeMEeCrf$^n!%)W;SW7UD`7J5VRKVm`i&1$Y^Cqa-%S5FCSQ*V^_D%%gq8dJXl|1U%$Jseb?$qaXE{T|ljU zCqA@9{ZVT-2(`u;s0`$xW;7Xf+-yw8d8p0Vj5@9jwUj53KXZ`}HhI9@v>ge&eGc)3 z7sPuNy$p`DUy%p`mjYw%ZGfDaDf zNz?Oxh)NV4(P`lk#vxtCgG%LiB)g^#*}$e5HGn<12@jx_Fq@s3i3M1N)i@bHL@iMy zX;vmiSu1cP_ct|En1tDjO3??_&rv6QkGkOvRBEGGSRFSUJvbIMuxiwMV=d}M^dd&$ z>(~VkqONlUwOK#KfKvOl?Qk*ODB5moJZb>R7>(Je3lyN9nklG(FT#G>x3C}Xr>Qg4A!Ccz#7!|yODdCeW;mzg4z?`+4fD_cJt_D z(?1Ax{4CUNUynRcW)Et>ZKwfV2vAW9ub^%e#ST*2jXe4$1Nq8~!|_;;df^<#E_l>> z()tDJyo;zC{(%~BH`ZBuA`N3O57i$SO~p%P7LLXiR3=WK*6drazwWz&w8I_qUScoptF%pZAZD1NvnRzK}z#OMS_RKGsi;287Cg4=mfOeuzJdM?O z6B&!C$_c;gTQHjTE7%#|z^-@@HN*F9`wS{$?WpVhh=qFo-ArF8n}9uVK5BQ@BM*kz zj@k=t*oNnkcaqsQf|m%siA>h~jT140Stx_6(Su6D3w&6CFa_WtsP%r5m8MH z2`vPbI--TpI_42miBZHxLYwOUN-x{VGXGansI4H%h&8siCpyF?Li<4>v9@3D5B+jR6HgP1iE^T&JVIq5F{q;h z1A6pS^aL~!lZl9Glvpe?rZXA&1&?mY+B*-H#8P|ruiCIcqTVguUN9qGpde8Dcy^gRyRE6G!LkB zm-|-MuJP3_DfTRBa@q&XbH=BQ4R#uMH_A!Q{3n<_th39h$~qoQ%|7gMCgyzMlz3Bv q%e~bu=lqBRQDsejUrj^s``myl=;Uv3IT?lNL8tH)m-A}TxBmjOsBky{ delta 4920 zcmZ{n3vd+m9moGC$Xfy=BtaxBAcT+yc_5Y$e9(YsQF)1ipl))TWbtx)?%pMhuT!aL z(2BZRtwI$_>uadkv$kTVt&LhcKu3J*IMq?BcIvd_Oslk3+t2rIQ(yHz`QGREzuo=+ zf3N>0xw`YyboP%EhTduzyU{VI*hZ{!m!Fc&7V=jfSz&&v7SYx)pp+&}g2VMuS zfaAs)(+Y2b7r++agry7$rZ)5OdhE6c11eQYfFx7B0Y=&}R zDbxZ3a1PuLSHchB0=TT$m|A!h#3!>i;&0$A=FdQF{1GG;GlI>=vcD&Rb2g<>xpq_sNDuBO11va&`khvx}g84!?1Gd7f zh0%qf8~dR)*b(soD90X!a_Co3C3!Nseh5xx{yJ1?K8Cc98B$hwZe+x<5sRT5EQiWK zWf}R`gAIH!1TKJzcoEdbXF_eT25R9HoC$lN9Nr#rFVu5SK!P?e!ein45yzJsgK6eN zJ$D9F#@fose;3B3e4)tx6kYfLD&o=Hr5aCw^1K$(wWb9&!3~gG&5clj+y|B7hobpD zs7QYcwcY`!b)JKA0ChsVK#a6TNuOF<4a!%ApJ^ZsbQ7tZ7R zmthS&YD!_=3~QNtP$k;|+u;Dz@vWqz*&=IJVW_rAsG6stQq~8RqRmhd-v)KxZm3M% z4|U(q;B5G7SPkEU7A&DoIt9l;t>ZxTNFQWla~-VE`M)Rn;wiY73vWUi*@Tucad7hVY$!{P7=sEizd>)>Iy46dpw zl=e=TRcfBa5Z{5{fd7J&$uvBQVb83oRIjqhK#oGhG$UAB4)tzKD-QIr21Aq_06e|2Cw0<|C*Q zma&Kese{C1mPhP?YWBNp$p48LkMM;&{1D2aiL|a9sen|)R6)vVRzO9RhC0XnP#fP4 z710B5Bzy=ebB{sYcM$6N*P^+pE8Jg{jf{y<-9I^+TTs8nW<~S)5nCcIhRVP)s0}wj z^+-o_y&tMH+n^%-1ys-cA)3D%&9k3i@MB6jD|%oF)bU6{-Wg^ql;=N!0sK8If{W@4 zsXZMk@(ZK+MNqZh1}VR}2YwSi3$;#ZL*a$j49RrXEGrmhWprVEH1C31=prab`k^A( z4adQKP?7JCzJCGoWB$U&32;hdAwwIWN}Gamd>hnycfs*G|NAgh>jUs)_!4yCq$d6b zfSaM3?+{e8y$qGgH{kK`pHQc!f!81>(`K89^@2Jc_`(QJYIdN4UC2M$8@$_sEbd=*ZF??m%|LsDx-;N2KF9_qddsP*SS zHT5c}-#?}ggC7&}Q3m%zrT8s475*LSffB-0lP!b~!}B1oeN()EGQoPd3hsh5y7>oO z3TN=TEQXt43@Qj4@p#r;hM}Q_KR*H{I=iLOm*+u0vW0Tg5zXnX{8-NCx6w6dAyPjm z16LwNE+;h9H|?lV_18EB9f8Qav5?Yr8&c!`cytpw6Y11wY(wgwG*W#B$5sqw zLqmO}aRXBAhaqL?`_cZGyp8go{B;5+plN6eN}-$4X=rd<5gDgO+yyU1KR`F4tI+31 z50l$b2CYW7qB~K3|HT;RpzF~PbTzsd%|uI37ivNDRsPSav!Lp&V>A|N=xl#}>|}B> zQe&?~>Z4Ay25EF7j$?MP0{Jtl3nltsglIQvMeETW=oX}LIog4~h324Mq;Vu#mbVK3 zoX9*on%@PtM|J|P&D+GUx1GlK(A>OL_*emI(1oZPm7$Gj61ooQOn(<`LOSmnC!$O8 z7H>!xN9Uuy=(}<7By>D-&{1jzjSG;D(k!IG$;tow)C@g+!APPXqPB4S=;Er0SesEl z(%V2MUgKJ{E^qOBRSY+dnH;VxniT$cj1^v7bS#{gyM9c~un|e8*Gk!)PWY1vua1ek zY0nR=6>j^5LAa&(r^DL2+(g_87nV#8k1N@Agzw~@FGzNWb=pp6f(XrKb*8P`O^1idm*n0k zpB9@q7-l?!d!FU^K55JSd6FM1S?iL}xNmo)P2NnnJx;iOa?NQ(C70w`uboVP!Izn{ zRf6;7N>yOaRtCQ2UZp*^dGaN(^S>s2Zc-V{XFTnttc26!B=T8TtZeREy-r);rky%# z9j>T&-5wco(-uBEzN+9RJL__XkC_mQH`O-Gvl^S4>l>@<8|&*wtvIuGmDA$}u9vKB zrP9q-V|~NC+WMy2#wM$wzPWK;bvJ}Yfg}+oNmgq0x#iNsf-h+eFJi$ddJn%UbpwzT3>1! zYe|r{t-O0yw6Pu@*l7`!A7=r}?i$!rXI2b)l?m)*+{@3y_vbt{&GW4eyT|iuaHZXM zITD$qZFPA*-9NCC_75MdK6Z4z^9xbuo~d?Xqn7%1XSb6~dqFs_cF%_8_|MEG&o!I? zB65_Vl;d~10b$uJr-1zY>VuvVe?Igt1!WWzJ{HiNd$%?lD=Vafbhf#4v|Z?bC&(?E zyFFIEmVC8w3VF&mnvlaDx5o?Ls;@e!bs(2yr;9Q!ElxiF=f)RL!2i9C@_4z?4Lf7m zujJVNEXC|bCn$;}Cof?I83K1bzit9N`i6$M34#flcCm5wrqG^mUkMaV1)Di?uC zkVH@*^jrj!E{viVAuWPh6h+uZ+C)XG9z^y1&D=$YIrnqUz2~0uKaV?;MGyS3>D;sn zhEzjdLVoHpW*bIQxscAJ8B>dA(TxvrE>7V*eCOQ%igT!c$6|EPGA0Mh(Tf`~8yhhX z4q1l7NV znn)cMm>7{!;AakSS%ht<0Z(8d4q+AEM7=nT{LDu#YWEp6quX2h!c@mWRHS5gIfBZ zSdVTh6wM~bM$`nGy{x|uO`G$e*Lg6A{LD!%1ZjqGDPBembPs*_1PgEmi|`MwLqE}J zrme`LnJ!ddQB?cWs1>@J&HC#!U+0GQa1!+uyucp(w*r;ybl{U^4j9JLY(Qi=W(18a7g ziIP5Hf1;FJ-W8Nfow^RTl0{yYC?&Tf7N9~i^R!Duv`?vQ5@OttKn!aOr&L z>rm2JSe_^)w?|u6;nYPXShp(oJ|^B#_w>AI;25jX%$R>5AXZ HIp_KZg!O{= delta 1414 zcmX}r?@JUx9LMoFz06KCvmd5qZfcp?<=(0N(1MBz%)pA02-3E0yOy#u?=OoNu2G-ewf_frF2vLMj^I1{S1L-g5{kc0EcILG^%V2`B=svO;Ck;&&C35&i3y@hMEr4_m84B z(v4*%$;!ClGD9@wcnvk-W30qi*ofb71?KU#K2S+Rm#IaK--O!Pj%@!S)IyG-HW+v;?;WRGCTWm`ydx|YMi}y%lJumIx z`2(xaLUUP#HW0v4ti~i`O)EFb)n2r*6ZPR?)QTTw9mkbCPiFmzB|PU4e??#!Dg`yj zUQ8Y8jD(QO?4#L=N03*|&4t8YH}~n#PM@I;(TnVWciH|)JVx5 zN=1;WvqAvUB}B^}($UaiRw1bAqKK$eWl-wE={)EVsjQ|d4a!{uRXNkiSE;7fQP-q~ z{9QSv=Upf6T8YcOuH{$*&Ur6lCA=Ot^*!%~FVN|^m#j#ib0(2Gn?KSkGG3Z&ej^##U=RE6_ldyW+xEpZ?Q(Z;he8szC WeSJ`)>n)Zh_tvPL#rfv4at(EE0wwz{5t@Zxg``A3Y-{*DCbMJGWbH3+1 z4;-mGvNCu*vG)N(2@=DJLA{OXL1!NhlrwRW_NUlE+uzTa-S_}^;dZAnrT7@Dae9Aa z2I65%LkkDtH#h)qA(xuJaEET&i?gwu*oE1+7t7JYLX3_##*M|u$24*nh3%*ty^Hi^ zP9T?&2=pUq(?PR72Pb|n=iZK^Q_eaOc&aOjKesG01s+ecBq|Iqd$ z)QvwuU4H=+@Dirt&$dyV)Iicv11!h>O1n=LY(;haGOD8vRI2vb-*@3K+DB0tJB!hH z5p~@q+iy_=`W`ib-%!85kG=3Q@-Zfn{OiI*D(ZMJs>3|Y#6r|a*VwkAF5H93*o7JR zzU>tpO#5%tbqO4XU?yrp#i-QJMh(!LME;f9jhx8C{iuz+-&S>u747;iRO-*6mgE9z?Y=_I z^crfQzoUNl5Ve_1O5}SFYH3PQOIeB9d@XkSHT-~f4>AU`nsu3n!8R&mshq|lyn`&C z$zq}2aBvPkr+t}TJFttF#BOvwYs@a}##uOuyVYR>k`!|lm7&|nSWP19EVEJH&%ltL z{}og;(>v(F2e=xuT)a%M1IOceR0of+0F%-q9nD8&s2cTs02z~c6`6}UhWh0 zWK3q@2)$2&q>+kJUW^(@DXPOosFc^>Nc7v^hftg6kZm_AV?B2J3~Gkwk&n5~fjJom zoy@>=WEIR>baH>wPDQ)@6;#I|jKMdNcZWHQ8i<7%cm{cynH#9x{wHbz4!+a`Vo(zp zXty&^{pFzg&qob#Dh73;f{IdBh1y(OF%yHRj=E8s=A`Y{s8rrWt?^^zV@7h3W;WN> zi<@PKm0@EdsV~Rgw3nkYuoAUab*MMr zPSnWv;WRvm+U3_!OLY%j7&|sHu+gZcU5qEN2{q6R-bV8=IFE`RyH1>kpP@R6&tXHM zN(m87Xl7b2rF=WlK&W#SCis6TqPB|YMU>lT=`LKhan#;vB%1a7YZfZABbZ8CHg))w zto@(?s_2cUY^bymBf_=F3rMrtL@4b~3dt~DBFa879i7Bl!bhyo^RLoE)DthNL1`tl z<5l$XVOxYBtv;x92MCqb#2i9PqxID0s~{#5=>*9PmzOx^5zj}O;s2QWQ(vh2ue49r z;2MH0VYU+Mi8>;N&?enM%p{%^Z73D(7cE&oHJ&Q!+eJ(wb`nn)wt=Z8!t>uiWizpb zP^pa&KE`oeN2C#p32hpcCB(9DEpo^Q|5NSd)F;~QRMf85leCdoO4wyt_?_Kkw`QOo zuUKL(QB3GD)5d&(P+3Ii?N^`%WdSjj(DPqLR1u*BXNuM6tcte2OXzl3yOZi2p~~d9 zt$&l79nOF^(AH`y+G-l>1Fxsdvf@+H9oDKL(;U`6L$^7sABH;}!9sU#t}C~oC~x8z zPp-!kx46u`#J8!wwcg+4F7*a{MXvFl+zD>aB)5m(y zfWM{4wZPlb;F{~NY4B}zP1!)BgwwTkHU2F*wf@FwT+p<>&AZ;`Uh4BU7P)4(_?l|# zT%kp&lbuh#DsruB3GGd-3jL8`zX(I~X9moXRM)qecYJ{rIryaIm;8%m8i40{bU<`6sv z55Teqj9Co71$V;V!7?~|kTGN6GB^aLAdk#`$d-9?oQ@873HF6USv47shU?%mI2XPQ z#!P_akSQ}4VvBhk>VQqK0yan73#T!D5%SMm;HQl9&1E_xnfNp84{t+) zVEUFD(+8G99Z&)Fd_0s#HPLuA)cczvZi6zQ5o-Nz$d+agd=MUu*afF?zIl(1EWHKg zK`8@qB-F+ep*D&`LS|+~&lkW-#;c(sw+r@$9@M%$5%)(t2xZvwP>!60c`baEPEYtc zl%+p`+Tbmy1G=F${sXLn*C7AQ01_&Wfm$~c4uy}w@o-DT18_Lw(@^i9ha=$SA;dpL z=Tj!+VLhvriY-u5M;y+h7@PErD66gWrUD|5s4!e+?gk zzlUFeWnU_uw-i=0&gP?ulhMR^IEx3@;8Zx0IBC2T#^FAw6r6<#_&(HanMK%?q8(7F zbD$!!3o7IRlw(Jr-a7#miTo>c^x_#f1-=0-copip+=kj9P9Z4A3!!Ra13#)}HyVEf zzQOn`BsgXZACn~X;BxpOltW`j8&d~YL+U+mUZC?#%$V=NBRr@i;qSs9!Nc$=tN5Y0 z2@f!CA4`G3TTrz#e_S!tKZX++pNB--{3YV&(eoi+Hl~yL$xsfz1#5Nx-=njgiO=9d zxQWu80bhpN=n_=!u0iE=6!BL?WN6(*uDy}0DzX=JUc_|v7gJID^oHiFBK{VIlqp*~U zlR;~s_D{jQu2GIoU-%5{0}n%e@xBiA;`brWn{!Z>zYleN{s?=)>kre((Oe%Uf zC*nG&2<(E2^ie27O1LtVj~P6fS#@SIL4lf$Z~^q7s=WZ^={rz{UWSUum1z74R8DU| z?K6-o#04khjVD8eem2yL%iv*n46cFYd<5h{ zBa}gD$PG2Sp$<3>^}To-YTtjrYB;K<7@@^bkxj$7F#jSQ-Sdl32Yv?U!Ffy)Rnr0Y z!yiI@$*kI9iW;DDzZDLEHdIbq-~;ekSPH)l70DmKf$$e_4!i(~T;ANGGoOj!d{=dS z8lZCC3N3gD%7fETHF62Q2|tC(`6=$|LHI6w94;peY-zp&m&13U_8UZ4Vo+^O5u`>{ zL6e7@!d~%5)9hz5Na1ZnY9%Ng_U`>T&QRgphIIGUWVG6oXiV5E)(SNkww?Sgjm{54 zrP)@b{Hh%)A}o|~QNKN6J?w#WTl%4ONMXm>@PAVaq0)D!DN<^WqJyXztwl08%$rz- zj-X>2&`5dMls7e1Hgy>O;dvUipgV0N9ctOUfRta=#PrU~{VVcH!VaYSWg#W!2}Gfp zuObKSMb9H8>S6RO+J)3oD2sHT)Yc0S;-i;>z^G#VvQ9L+|LAsaQIuyuY=Ikdb!<#>*j z_ANK-SS@ytNOj&WnN+Ds8&yqAxVdcLc$56%Q^)7|!-eZ5OMCarI_*}g-Ru-5mHj-{ z!*dG19h`|ZH9Kt9WCbZU4LVvKD`98ZJ=0+|()S!YaFUkoTZvRUlk^;(HCgkVmig6t zYxh^rn?|q3s@LK>+gt7FOh$`+yN#uREUxLCUva8$GVM8uz%N{_2x9fF=XFfAI^3L< zbgir#SSen&>_o!xF~p6Iw(QX4&_Wq^-^pe}UZ}>H(`UtNd2f#1n?8F=Ev;mw z?FaFC&(8W8J8-=^D{H56PNwt5$n~A8DmRy|w6o1QJg&2vyv{R~3r8%^SRJGxN5LgX zn&Y>+*`%FKI8;{kxajHKg?H~;D!}T(Un|G-8JKl*xSVmqly(jpH?%Nl+`nSI)@E{k zq4)R`vHVJEQPK9TB!`hbrJQqH9Tt+8?y~_!p76T6y1RI3cdnXx43x33+oT>V?<*2( zkrM>$bNA`E}?#Zj--vZC-=Foh#xW{TF=V;6(rc diff --git a/wagtail/wagtailadmin/locale/gl/LC_MESSAGES/django.mo b/wagtail/wagtailadmin/locale/gl/LC_MESSAGES/django.mo index 402a2fd3b8b61e0869e6c3f55972b1917cdcd084..ab419b9c8503688c4a7fd85849071a7b51785fa7 100644 GIT binary patch delta 3449 zcmZwJdu+{T9LMqJphdN%Xq8f@MO}K)>W$W=XkF`mnYzuXQr1>!kByBTrt03AUx+Ld ziH$Anf`cVw*s?7yiJ66MY=UgbkVQm-vCZC}a~}TMlYW1%=l7i7<$1o(^PJPO-kbA% z*IPH)ZYU1XkvP)Cm~XJSIS0y|aAQ6}57uML2xIDS2d=`nNMj1|J)DC#aV8FFX-p38 z#-?}$Tj6!=jQ23g7@uiLYg-x;kb6xIw!k7>ffG;HRKl4sI@Wl*|b5uCjr~=ev=-kFbeF=2h)(jn)TQox1%2L8Fs+asN`Hjl4X9! zP`rb>?!NuJQJdgM!%^3#psvrc=3^x9Hw9GmfN@A?%~XuX1sI0w?D;lShYq1ea30m+ ztH_@TBaO;bJT}85bYpMS=i^ZsD6`g}Pd!>iMIBg+O8sVg!A^|hd>`t;UttKIL)~}L zdKuNBtEiFQMqU2^8{<>dz@DM*i;50DHzu0=>w$e}=!Sh!J)Lc>LETu7{F$8`y5gtS zAFv(gk5TuviV0?@D{3GE?fEFw0LxHQSb^$reGK{6YTQmkCLTrg{5C3u_wD%;)B_sv zHr?19^}<+GN>fl%m4~{n2-SgNOu}iX=lf7=%a8QgoK}Ngcm-KE=DNM$K4x(KFV4dB z*x-X3P&aPJY&?KDcoX%aSQbck9E3VAx91I*#rZMoUDU4exygr8KNjbr7q!iPLd|_+ z4w|CQsJZKgn&V!m3}m53Gy-+q6zqXBP>Zt;b=?uvRGvZp%vBC7a-Vr<8>0F4ImibY zNVd%_9EpEn3J&c=dT}u-QwQ)}moX>N&v^;+xE>?i>=@jE^%$RE%y8U`W%wt~#)*kc zi}wE^D(ZPym*D~xfe&yEevX>Ld{(A1Hx#GfBGeRpjcND< zm5H9DTMocn-ft#QapMNmgZHCS^#!tH%y+08enY+BvHiRY6YSh@#G4H`Z=1^035`9_(XQ*iPKEx1ov4TReDeA?Ms1YWj9?%Q*q5;-fsE(~fvTHs< zb?6)x;tkaG-B=jvND=CNV|$Q)vS&(Y&`4LJdcMv2KB_}UP#rpsdhnO_^B+<7|AE?; z;XQ-b$5|7s-BG^{si@}+u$qLmr(azLp}EaDzi~+A-ymO^`0D5#(e#$q*ED<18@au&X1!TFQ9I`hZ?~% zd)|Rw6>#1QtFZ!=+H0uH+`>Ni6f-f6Es%tz$Z{|nkWBc@Au8+)a~XBv6I4gidI$G= zB`TF4;>&mu$+k(S*L;bY>DUy#sHt3m;kX+0JtGQtGtxqO~5*&Pv!~^!%#+{430q;YW}wo1;iqvoZz*Ae{MFY zvVfREL=c;aO++rCGxXWF?}pZ6vFK@+wCbZD6tJ`@V0WHTWy1dDZrrW81_!LesE>P}-lDX;d~6({020 z=O17{qLk1Qq`KuxeLY-4>FFL!T4?0U?cKf5-Rk@tIvHP6;?K?OZ+COzJb=Vr>^>~-o z`j5p`x%}fhO?Nq`;*5&cp#GTa$Cd6~J%=^0LHVqAXT)O1?1^RhCN z(M5U>=Ps{weo36+6m}Wx59#_K)M=Icw?8o@#N~`j{nj6sw%_GsrQdY&G7|g?Gp4$n mbA1kl7S(z^W!3)6ne$x!h1pA8&ZC^}{+YRZTux=bU;hKLIc>cF delta 4874 zcmZ{n3vd>J=y`ychRohrav7J&MqmET{+8M1@>o}u!I(7Q{@7-7*;~D<<_nqB6 zd%o9M;LXlwvbopC72RwYd(dRmI@p*u;D!4uyvyx6Jc!iZMC!Hw^xmqH)HQ!E(qRrUn+nW+(@i zK)s+Jo(K=aRq$gt4=yV;rVd^T@yQ&B_ynwG{%5F-KY_$zhOyZw_BZ7iTr*Q6&Vw_V zpAJjlHaHRPfO2#X)QcX0$HJ%KaQGH1g73j0@I$EQK8@}VA0I|+N}--_f<^3a=F5N! zp(0-j^@4R!8*YS^(1Y^)I;iU05nbO0<=|6L>yJVO@Bvg{Q_2gOYl6d=x4`4!BABx< zx-s~`9pO72%NLkjH691$c^#x{O)G4I8z7IG>!AYq8B~fNjOGWS zBK6-mBVUS1-0R6Fl7;(n0ur9 zk3u;6^xzbS{B5)IPa;G4z55pkDY(I0ya_o&*Q+QIG@8a2m9u`PI?<0G!SB zmtid&`K`jd8P+lPph~t2cEEn9<2#LxW{aFzjiK76plY6lN?9LNiY|kS_*SUr_CRIo zKB(s&hSTBWum-*jEm%gKbPDD`y~ly-kv_=A<{DV3^S>{;@Dx12jkh3;Yy!)eIJ^&@ z21g%Ph_DSdGv5xC^54PRW5&Dyd7Vjfw({^_@G7{6PP`Jxvy&g)KL{=O9Mp09CzOMO z@tUNXNl*c`K$UuV4G9~Dv5E`YXgwSblTgjG1&)Awp)zs+4uOwAIq+MkNRL3Re+6oz z_nny? z55tl{Ik*pMgZrcVPeQGK5$gQ^8|wLCISL_TRK&7~$3p!rWkyW2W2Nz37&?Xx8u@=C22{4a$LAp?cs>SOWLJa`<30KLkmwc`=&54vU$; z3+2csP>xRKtmn!xPQ_?}>!DJ93mgmYhg0AaPz#Sj3l9D^Uolt>b(~&*qv8)f=o1ZWRhgw~@UqnnV%_t7q-<9Q<5f;99! zSQc7^|D4D?E1KU4?}+RKTo>BJuYU|^+=6C?R^ewQs72?a8Z-fIL^_JsARWygqVtfB zt;ToI*3c?^gyPtnP+xRy3|xTbA_t9BGiYo^`s`LC4Ngq>-=}8i=>j8#eu~f!oTjA1-!@W+c)k&T_ZEM4}X{|G{>aDd}Jg~F1#Z4r%*tdIG zn(cNnPJJ-HeE)=mWBX2F6Wi*w6E1h%q!YYdK6z-|%{U!dKZs5EY-q|&rycD7PPp+L zFO%u3wfejsEACk-FKc!4R?F__aD4prA`dM)3|hX0F?_{AvnFe2d;AE^W=&6f(#-}( zDi-IDRvZ@_KM-cT2lqV7$z(`d{+)@LSlK$4gvK*=XV!#f!tHf}^^6O~+&XIt!4 z_DjA@ovspWk}ETObCxpj4bLj=JkY1mg7+IH=l4xIE4JwyQt76Y%`p2}FKs29UMCS& zKyl+p#@gbv`)<~$x7u(^g-m*6%gtK&?_^XFH`P_2|8(-WSiGrj)@-Y>skx!CrlGN+ zVZ_Q6b*r6T*LS^C-6E>qY&AB_nqAk>RM*&K&1z_F;yK2M<+h)#Tbr>{e!`}`nypUH z>rB{$*lH&|zuxP0ow&E4D`~rlAX(WKJYTuKWVxN{>LDl1R#zgZow6`Ex2lq+tqgWl zRg3x5l#hlKrMzA{e|q(p*!VS0!s+O6`|~MZnOhuoa(=_KA+eF^{@oY4DLS%~J`2vD zJ~7xl{ZLW=Zr9IO&-g{mi93FlGP-Hc^852v+Kbb)KGCbnadonn^uop1@j^Pk*vyOl ztW7z3X{o|aTHL?e>asI&)?0RW|Ni>m(24H`tu@6Jen-Zo*Lzakw$<%r=_FXfguKnWf&M3elRgGhy!U+W(Ed6Agv3eje)cckah&p1wdK>NN)nt zWtPq28IR(Tmk;NL8)b##hLkex-N+&sa6U`28JfO1{S&o zKy{{8CdS$ZK)~gbSX`nTQk0lioRe6RUu31=omiBk;E|t{lUk`@lMUodW@bv}@kz`} VFHKAb8k3thIh84T^I0Z4MgY(eD_{Ts delta 190 zcmeC;=;oLZV>^eDfguKnWf&M3eljsIhy!UcW(Ed6Agu?aje)c+kah&pg+N*XNN)zx zW#7hLdhrcA$$rS@&by9?&z1Wg>h1L;UX?lnHV150r;&PP4q0*=K?I3GRSJrT<>6Zay| zG#^;c<0#sfky}iU0md+96OVdN3dZw(lM}8m3(V$=CCFsWE*ydfP!D(uhvErTaxNpu zGCyE%{26uK4f}nMcz32TsOvLO*ZZtR7|Z)jF%>;vE;3lN2#4bujK-a|y&pB8qo^62 zM-8|O`7_a^QJET!kvIyyn2q{=9x4OX)VF7BSE3A#E8+Rao<{%%b zc-Zb`!1+zh3nCUUoJ&q7VG8nuMAr~&U7MEVInG}8K|WyL|s>k8bBG2!X>EZ2T^+~gpApoP={W43E4NM+g@-3b7}vL z%P}X>eQ+D<#sfGWJJ5$$P%lbkgWQEvQ0*GqZo_=q$E;UTrzYqnA4>fktiop0G5Zp= z_C5K~5+$S7E)BKDV^JB%N6lyk>biwE8keFr=XTU}Z=;s-4Dx5X_+XO<%`MxJz^~5{ zzQ{$gZN9^q_&a9c)M2C-8&H|*z)p`b$1xB0v5ue8f7)xzS=^su%qd(pg5|)Jk?!+q za5wFvSfukmnH{B(Z$zEnAZiBfs1d)18qj$pYvw!Db${XO*f-5x`(rqU_Q&`DUd19T zWgV3It*E_n%z6s5c)#hS!XS-@h0`xsD(b>~RO(7lYrY7zW&zXyoAkLme)LsQFt7csWZq) zGuNz<>FyGwAp6NoMlbr2teb7N{|(eqT|oAw`585!m|%u`Lo#ZH#i$2O#~7?dy>J8O z;6BsA zb>l_UK)yk3%3D~9(JXKP=b;|_A?mc8!aTf;+Wm37M0;c!j>5HWJ81UVj(3seG~GBA zBbjaimZ4JFimUKV)SijYb^pWSL%p~hdtwD@W-ILX>utLYHIbK489t0Yo&QcM+MQA3 z+<#0)qL+3NYOR*p_T%_I?L(;4RxrH<*nn&Ya~fykb=3Ehn6?M`{WANBVqzUpL+IFV zCZ1Gf4Y82uOY9+b6B7uf+fS$@69b96iAJK8P`Se;oRN0w+8ZhjF5%rillnu%WMY}^ zFUO5U&}%!IQM1(ylx7tjEoEjeF^|w$*Ua`24-hJk5Ov|2F%McFLoLbUL?Ew`Zq4m?+tt4)jomA!%>xuZ=ow$T}im0%C zyR2d&QAyktUI;3+#14W@9p0_8P^V!Fq2Gu9D+6pN%l%*BU$pRPD8&}r+aDcbD{(KO z-+?${G%-i(--DP=Y$q~^wZtYuMQ2+jmRK6DxyN-X^+$=t#67k@0(JEI5KjY0r ztfsPpNW0yEK^-|2{-0r*h#ADw#0Fv!p;GM<{%o`LdWMH}QHhL%3(kQ08 zYE5PRhODakI%m^}@|ZIJx|$Y$&8k9gL%{iL#8PMc$W5U@>X=BUBjbwmd}g=vT2@D> zBD>4ubmSgMtgo&KoNBE$i<_EPRXu9vHnda*9;$6w8+vhEw#WH0FVwr-ozD;X4|+nI UeS17kT0v^4wcursv%j$WUwy)U4*&oF delta 4904 zcmai%3vdR7B(vD#X7Y^~Fd)ml6K{qNmOwXM@L`S0&L zyJye&zVCczlf2OR=l;}dWAg4WwB4v0%{|eW;iyr@%!jwZE8xrUQaEe0F*D)qFdrU)JTfoB@y4Xg?=bi=d1H(zhZT@D%rsaC z+n^jc4{Cx#a4I|km%Ya;E&;C`oDx)_-~L{OaY6Pu)e9l;GUTj za5kJye=#hA*T9qEHYi7TLrwGpcnW+Dj)ZT(Jop|Q0Y88m_fhbC<=79Q9C{jRONN5yM`0EH<4{}k38Z{X?zrrGBLkKMEQ4~e z5-J0=wB-jt-@Vx=|LA^H!3EI32C&Kpvj;=HY z)69f=@2gN5Yp*2#ofsRqp~!w8Joo@A;zCAgkHF{T8Cd}odAP3rDEwqFFjX{4O zoWcELupSnFDcf&@4fH*zExQkf;325vTT4Z=M9M6~(B4L%_B;-ivLsZBHbF&vC)Bvz zP?>rRYTSM}1^x(5gKt9%ma|Vf1*b#J<3QC&60)$_4r_G&9|>+8hWmK%2BeUUZyD18 zAA^fv>8aTWSHm{?TcA?@3_P4;%uDbo`uA|QTIsK%0-vY9o$!AOFD8wH@HEo60R90k zVtvzq``cjx&Vjjg*+|cZ`hYBeif|=V1Su#7Z-bPL*#kB1S-1zj2$i7?H(m1?LxZh>;(3aHdx89cuk z%HdtX{rylycNA)?kJXcZ?dfm0p@rUr>i-3*=st!cp~Wgia4OUUv!GIc7S!{lP!3!I zsV@_Tnr|DV@Xg(jT`>Eh1z&}l?;j21UlEVwqEwy%3*j%dU7tVs3FAnwICaCxBfXc{2uuSLwDGYh^3%CFt zgJD?18Tks_4ziE3{8EQU-{Fr7wn<}z(a5B6p=%<7JE3l6H`mD|ZQ{lNf z|LquOz=xr>;5c+(KBH80J&>=fxfRNhy)YMkA1d-EgXc$r{@YNIeiE>N$xG>vh1#M? zP_?oMrYbNZ7_4bFL!E+ya2$LYTJTR$HBdS`+i!*k=r4m~VKJY>E;s?MfVV)tHResI z43_ZK(YQ4*2P%s;V%n6s218AeezwKvs9@xv+GQx3v9gy+urBDUz|<~8SD~$lwKBi? zl!@z*GFyh!RBs{FqWxD}h)zIkk+G1z0e7Nvk(!InLn@@(&_#$No@w9UsgiTq?8#Qacfy zpRuz4oXA`i^uGn~4eT&nnX!q#D!BPgI6bh1C8!>CqiIMdVlC1M*^YFUZ$@2c3Q{{8 zU7fM`BNld`%TY48HwvDEW+4X^s~FU-Ksw`-ks2o}^Y2p|^mKz3LAy}9Kf182ZYEQ$DIz#j#-&kqYls3S#zD9vudwyx~6vSbgV{egqXF=khN|pBqsIGZ~M2y;j)icfy&hD^?bdS_!8; z=Ej{yYc;ND^Ljio7uNcEjh$ zZ0rsDSJo`|kJhXyy3mfS?<4#+iNVwW3ak-5u(3{k>CuTa$Te^?DuAfx(>}kz}aTs+}|? z?#9EUxYkeA9mrqh4(<#&UFkEXzM7MYJL^5wLLcc^&+G$UEN%~OWtD^%9q=Nm!*I7} zb=h1plPCW@dp6&nt8hCz$j(j_ae3eFu?Fm3H)codMoJ6slUCo*!DPbj8uY8`_f$u{ z7|vP=jbZ6tuQzHZ7!(??WBxPsRV7QJ15UT=L_I3VwbQTGPtVC;o~?erpmBdl&v_>{ zVE1qcv}g|kM75s>(*>Fu`yfnXv!Q5y&iU4;|bweO|g`dU;OuaAJrMPZM58 zpVdCJkz5~2C(W8<=?Q8VC);IqJ;LSMm diff --git a/wagtail/wagtailadmin/locale/pt_BR/LC_MESSAGES/django.mo b/wagtail/wagtailadmin/locale/pt_BR/LC_MESSAGES/django.mo index 30c718d83ca90c00ace85a7740a8301faa218cd7..1e21d668dbbe294fadd220babca40e4de5ac61a8 100644 GIT binary patch delta 5433 zcmZ{md303O9mj820tQS7TL=(*Ktci`8wm*+kWFNhB|s3B^=0NId1Nwgc=IL+D2)rC z0*ZQ7Y%M5?q8Jp6RPCwt=%`0+|ER~URa}nUut#vA)wUw1pWn8i`)&t<;w=+>akxd6rVUUoPNydmH^GbGZpa#{3l4_Ag_-b8C^mfp zuYsqbEY!kF*sNl30^AIj!Go|Ceho`t`4FYj;X23}l$B(sQgJ%tnAi@nNOi#r;d4+n z{vBj5^`6huu#9n!p-T0KlVC2K0pa3Rcqwm2;M`41BQi?2fQz#n|R17)KVP`>-vAOF=Ke+uPfr=fWCJ186W;n?zB78DN+ zg7SSqF8-H|CosXgYOc@qP-4{qWr6FU7;-a|4fenSxF3pVUh?@zC>wkRNfUJr=EK1x zgs>LkWVH^;cWs??B#CxH-c@^{xa^oeeh!K&--Y~BAM%roJ(OJOi}jVT2#TR=pco#4 z653XnOg8`dL4Vu@Wu4A$I%3I-P+as5lvuq7C3#LlS>Oy5!~P4$!E`PQ*|-FXt4$~e zX@PR`4k!lQ3MqYcxBvW6Si$&LaIMt;NjkE@+`QC>i=h}2gp*+ttcLrbZ2T51gx~t( zv81|;7s4v&`aA?n7@vR=stnvEt}ll{I3G@6f7L~YL#cP6YaxKa2g*g22R z2K+YzJ_1d65?XK}=1+r1VQ+W}N|l^}a>D-OQ&~L#%KT&~hAx5PY70s(Y=wKFhJ9c$ z_q426DgKv})H1OIHo}YHaaaz|z;u{joJz`KpS6(it9g*?U0G0Ey9H*!TcLPlKNN$G zLD}b3C|Un6NK{p?iTGbE%;%}(Kmf{ymqUs9TG$shK(V|9O6+3(css;KbqmaZ&p>%U z;q&)U)_WU@fhVBk!WU51Gdf98v9t(^MN^?zxEkVRwGk3_rJ?-iavaKruRvMwODG%m zE=@5L5`L8f#WMleA1;L#z%@`j)CeVnoo#f)k}W>3hw{NrpL_lJgHU4D>R+vSvul@3wcXo zHWo^9O@NtjI-Cv{!;Nq^l=r@YQs?KO#B?b4FSe`UkR{b3NVrv}&&Q$U%m+TxCgXp( z+Y9iAShfa^gZDrKJ`ct9AH$XKEMzaWoR1_FJD_ZQKNOcA^v7LLJaZIEE**zM;0ylv zT`1M?=W6^fol{K6Lf=3!;9FP=$JC_CZVepDxD`sww?Y1?2l*+0@B2)flKLyT5auxd zHoOF$f^zZ-7L|jpgoEJiopiXelWjY{9q1t>*4~cJw*z$UN7tZVBJPi5lTD-iS!$U@g638A#dk>rCU>BC5xTXK~85!XM8)}d%>N^OFYWYT_tZb9Nf z$q$M33M8!n5iPY9iDwt0k*E!Ip$8G3>`Z2=xI{`r%IzuiB$9R)(#c*bv3Ap!3Xmj} zc25e)zxO51;^LqCb5g=H(QH(Q7NFkfd@G?-dH(zn28}3$=A*gje7l#9>kmdl+wZT3 zm!X4bm_N7F=V0jg{Z%lIu0*Z=oZu)rBL4SeMB9n-(GxPDtwxukeP|1kb_J44WfxkG z_8@7o6q3Jki%MIWLh`rC@9%)=Xc0PwI@|d<-|qH1atTdBv(V+}Vzd}Z8;`C|_EJAf zz-_1uNrg;7HAtF?>d{(s1Cn+aNvTQ;OZ;!7b0@k_W@s7c60{eMLG#dcs2E8*j>^#n zGz0ZOSE0@55hP7Ys~N39<4^#Jr}v{nNZQS)MgHn&NDh^H40fXdXrMnA^f?FKigHmk zszT>mt>3u`>g@cX`o7F`{aSYa?r7$j9(qi6slGWgv%4X?E=|8Na9^*eYln4s(BIN$ z#hc2twzhWB0(!=G}8&_ z?}h~Qr9+SE+?=VoR)ZTi-OXyQ<2E^-XGIL#o1x~qw*Fa8;fjT3B>8k7bw3!W{_nw$EayR6@|0?6&~rF#_l#lbX?;1I-DUzTQu_3OD0FLA9l+iF)V z*=9TO7#*H_)ok^H-znA3bAH= zcz8*gr{5aBvrp7ZIeGPn#roKY+eUe&$MP%U4Xw7vLazA4a+4lsR)0LQMn5*PTK^-j zpI(rcr)T6PblIqmEW8#D8FtKYtxa*;)%!;s?bjSv^|lwbRDE18yQnfN8p2|=GG@6k zwaN{ZvW6m%}j~Py+yTiyx(|;fRR-aX7lV_4AuaBwdtSzai zFe<78l{LlX73Jj_bxTW@-5BimH61bvhqJn&M`YRZ?%6tpTIXaXnJ>Dl29g zMYCOViyaN*>(pcgBPmbIs>FAMt%mPNhwvzM2R z|9*#nk(|-H$KKm>e&T>G$)B%J7G~x~69>pQGiGdxTSm}vT`LxKA|b0)XJ-}aAq9Ee zALe^KbY|hCWKAtE%uP!RX}4&D{<`R;-m@B{w4NP*s&|tU^BjF}!a04sIM8>FwS};| zjy_$yv)D3XaW+V0W#VuoXfp~~-&b4WP~t(yFo|nG$0knGFHU?}A1RrZH`i*T>}=Oj zb(R~l;)Y4&BF*LuwZiJqxuwMeDYN8r%B8e=~&vI?YO%-0qk;0?y5=YvsFkxv;p1mn< z^IFOYsxI+sDLI^zEIrfJT@}SW69*df+ZD(9uCS!;2*CD9%k@W-R;P!oMmu8b>6Ht{ ztVq@1rI9wO^h@RYgk{rDEo_Nl=p$HPI zlt)oeRz=iG0Vx(l&=eoFe@Nq~Gqy7pM{O&EGg6gOM(kL}YL)i$yZ1yHr|!%*pWVHC zc7Ly3hC|*Czx`}h`a_C#1Pw#c9!i~qzw5&v+Wf1P+5xNKG58ML0`JLGYBTK9U#Yv` zE?5cs4^Zk>xD>92&%>#3V3txDZ~A)OofuQ%3!_@ilK2R-*1EB$R3z<5VlJQ->1_H zo`cuGi_n1mvr`Mpp&U>ZumKKdY(g=#9g1O_p`>UBl=XXH9y|nP-Kl`DK{@x$Y~n8- zza9MWmw;yjo`Yifc_<~p&VEMW#2hazMl&V;Zi7`ZwR<6 zhxp3|2bmzM>Le_HZwCAfa;6$g9Oc6jC?O5;rv=^w#p73l`M01%;sTUf_$L$t`ZACr z&x4cTwUDiq(@sY`+6E;B_Xp#>P(0obWy7OTHhK<r2OF*Tubx%4HB7edL|Mi_<%pxpDG#1UIm zIg}jNLdkstl!&c>5}`&Y9=Abp=pHER?}cOGZdfGu|7AJ`6Q4l29=#aI2GgO`Mh%n$ z*FbDgcLd|T@C4(NkPD-lMk*D7cfxA;Ar!}oM=4bSS3-&OgK%vc5r%s?Uu98oFTtnb zHrRyQTi~UDZNzOJ<8Pq}tB9us55t+TAMS`}3!oHLJ(Nh;kS&!L%s&Ff&}X4s^EaSe zU3HO;04cNPwX8SptM9{d(AgrC6c;8gNZ27M?+cqm{8B#Y`4i!ts-{D!sfEF~2})6Jgc6~L;28J{WWRQGo(`|1N~faadX0c<;dL+*J_V(y zUW5{ncOj3PIt%;3ub_OF!D}TC&}b;BSq&xko1i$bJ>YIQfbnC=G5J46M>cvs_~BJ3 zxp^0g0snxq!GD6^(D~ z5tEdvgIl3|_#TvnXQ71hW60U+GUOXoHd!g6uEGI#L#c&R0Y8HB1otK!vThC(LmfC8 z9)$)x4cnK}`J4`Wt7^WIRNM*0fIU!ZVIP#*coGhVCxY>7Z~)`eus8f0lmkA6JQZs2 zw3Gw0;S9#hp+xEdI0PP;M*bytFEJt4J?RrEI_qN-M)!)P8d z5rIoKxdGB7nol9@PeuwP+lH=A!0m7jic9|GABV0cVVNHc@&g`(gV0Zc@tyEtv^W@d zVLzQGgTZxhPuCAn3V9h?8O&{h62bPp{HaH`Ai19s<}2H32CXRP%1Qe221vUBRij^^ zyHGduD3bO|6he~XZD=-& z&PeoA^s8WUA-oR_LzGPN$-M*0yW*kik+da}f1ggTsbCVn-SLh+sj2=Wg&`?x^b|C}F19dODvfa%< zs=hapTQD4@qX$q7m7y#oZ2>xhmZSAZS|1d-jX#gbh}Iv?MOCO6ZAI&lJUWX|5gLOI zAZcwWsNJw{(BBuZFklnZw`UI1pJw&#Sdsa8w~lRDb!kJ*xZ}52uF+~XTZZWyev9oH zQLD|0>eB-c=<>lidiS6|XlwAdz2ero+9+Pq$=0 z*E8H=Mp5XHCcU+#YFZo_=7&AbnzJMx)b|GSpw+Y8hcOZaDGi zdZUrPYni?kF-*@$8sc&?i)UJ~Sz|Vo-8p9F1bU^$67jOjA7h;zjmpQK*~X_54y%-7 zj#Wf0)3c1^A*Ru0Ms0qzW0tCStv1_Qm!gyKRDGf`YI`keu@$jhE9`svXkLjvlebmJ zhAqg5+pVn@b0>%GzR7Xj^~J_|Ct*Y!gV-A_9BP>1u;qCYoRkBGnM#QGDK7rNe%0Wc zKF6j|p&Am6G27So4X^5WeE7(;!Cg^^B(UBwEY~GR`p}5`b#4CP?zSJ*|IMG&&m--P zrmL3H@pQ;2UV!6bmRPsWj8hC(*i$%GO5_$XXPl>&OOSqKt(1^nYiu}p)yTA4ek8~w zo;WA{@}1UH!6kDe+2VZHSZ6hQwr`ahE3rmW9CHYi?Hgtj1tYn#&wz_Cl-NLFqHKym6EOE`a7d5Hu3S;ilni^wasJ61F=J*;&77>LT}tVHzo^2{pI!5qeygCT-dQle&?p=m zb`nzh<2<9abAPiPmy)GAEU(pxM=XBw^rFJbj!>cBt>cR^xoH`87~@S>XO6oy*Gc#; zHIn*}O7?uqh}&{&GsorVjpJU>Gsa)k#YNxrbg8m7Q|A@W)3+6G*99fhvMTK`hea%d zay2^-cOG=~s*=}+eP>3K9c@W1C>-lkEhJnIDV)XT>kva+8ATJ|Q-!j{Re* zPJAOOmUnx?_B!60Ff>hnU6#GJzAH=-?h1u%w>pOB#3WQktAjgI&|%j$BPNlIIfnS* zh@WzOxc$N9ukw5|8IoY4!DvYc!c{j$6z-<=Oa} zh#4&oZ0p?5b6~1vwwK^xxWjZ+NWx${Zt67%GZQ=qk~T5Z@${gHMY?k0asAE2MHx$Y zDO#ATnY23HvwTxOGpTw_rR9Ya(N?S2Xmi4yM~pbxF?=gVINX@+c`{4}T^w~W=ld$) z<|bourMEwLDfG9Ka&^t*{Eiuuua#$lSV@4|Y+xqe2~V$@vO}j$-IuYX^O&EAI{Nt3 z$$8hCEqfd6dbwiT7Fc`H5yqJmi zU|(E})O~+O&CqA@%)ct_T+oC6?QZ~DQc+Xtbv}R^NC|S%Y$>MT7Uv=4AlL_}&-wmFMI-tK zwZ@U`Bu#B9sy!SvT`!tFK`S~@hob9w@^#cuYcf$ zJ=k66KZ}Y+em`nTi`@Hqm9uUmd*3?Fz29$_dn1b0j3-#a{OvB@@{d?CA zOE$Zk>q9Y{=i5AYp#g``zKmMyuTg82!UE34T-1Q}puXAKa5Vl0wYhTn&^Vld!PtnM zaIb40z!2KasF^s7K27ZjD%u0Bs5krw^(Hq_YuSs}>4ZtBjy>qXbo77Yq59c~(O8cf zP&3knokzBped?}9GA)N`d(xPHzQ*k;7slh?F&%U0eHfNu4(>!P%?G$Li1UlPXqPYz zr|~P?j3);N{y2@JlTEZQ;(a)oY0bl3Sc=!M9P=}n|1(q$WtbJ<5?)7ddK7g&kE5pQ z3bGpZ5o$@kK@B{PQR)pdP}irR_Qqn|hwCv6(^xn4I}~}gWnmf4^-(FLauK=LqK5~T zpaAcrJ>EGTnH(!cJzy(p*T0H);c?UwTtE%%I%?Oqqx$vG(CM0q3Ag}5(YKk3I@pHY zaF6p1)C1l_t=)Bu!LLx8D2grI8DpJ&QNK?`9X~I!N>+$ErWL6BpK`882H>-5D&6=+ zEizbZLQUCKREM9SM%<2?kyy@}raTE#un09H<;W`92IQpKQPfob8uj2{cC=1SBx*n- zF-hmYfJ!VEN>Qg^C2Gx|LA^;0`i~Q8srI5C@E6oTBSr>{L4CfrGtFJU8@2Yi&H~h4 zD#CD{Z;PpDN|(7CR-x8rox8r-xfL~#T2zNGU=;2~E#X1eejC-_CDaVIq1OISr~$U4 zW+do4%)icQ1QjhoDr&8BoHJ23u0Xx%I@E)=pnuPxhxQ)S)Ly_I*pA(?i#KqJ`lH%8 zu00WT|3WYGuU-8-7c`Jl*b6^Ib@VxE?Zf#J(3=iK{s5X6HGt{Z8yBGV#s<{=HOLt3 z2`8kP>OqU#^;M_`RiS^=qNchD^@h!; z``>l#HdMcVMGfROvXA}$L>>cKzTChK%Q2b@YcURMQG4Jucl`*egR?jq+wgIWz9(?s z2Gr-CMeUJSkgpVLLY=A)QJc04AJ*o}aQY^@$};3=+b+zi9OM;y;jWWAO!n8JULKOBL83HzEhX4q&p*{|zb$TnHY^9}rAN zP2~-|7ypF=aP+vq+Ra0~VLfUfH!%nwBd3YVeF1E_lRp>!|0~i9Y1TT*!#v-%xz<}9 zS5Z?|Ng9bp{Rjym-!9*yp}(5V-@2$TvR{$4?%Fzh$JH-8-^V<%p7^HmV>TH`4iXie zaTQHlM`8ciSu%|5CM$_bF*!%H)|*Kw(GLF+`8nA{RDwy2zZN*k?^0(ueRh<}6ta_S zAu7!1{}t^CZJdQYO5bZTR-(OyF>P)K? zkXC;!@Iz-=WiWY(%p%VdeU0`bh2*;=l*}aQM5UahkrI+hR3;H^TowQGU!zh)mXQde zl1=vdYy2A@R}dYyMPv*)MfMR7Q77}sbL5w#mP{r;B~Oqtl0n`eGsrwrPoC^}|06UO zlLVp?Pg01!YPXYBB#FF8E|O@X@(^hvuao=9Psn-FQC3q)B*V!@@-|VKP6m*z|C@gr z$H{0?M;;}|h)Ou=OfIP5$^-Zmsd4Qe;!-lzwddk5$S5+FY#=IKNWLl*uYTw)J4!N@ zII@SlNe&T}ds}LvPltq#NnE_J;<37}iE(wiJrOM@d$h$wc!y+WCT3>mj2Kz>;=szN s2_+R}PnMLG<|I}=@yNs}b)kc1w>&?*2Hj)NO38Dz{61S)%;x5ueBcv**x)kg7l2`JQTa%zl`qI^Ct60}! zbt|+kMQhixQL0ubyDhp*cS~nXyR&6Sx7OI*&em=_`~AJ=G1Hlz$uFPhIXUM%*K_jC zOA+s`iU?hA(P)!#TqfAH(rg*t#5^o+ z#l3hCXW=cJhNBY9cH>^ubz@tb4KNGYMhXvb;zMkXS1=O)ib?o4q-~3N$c$%MJM4(* z_#lqKrZ^p!Vi5Jb8yJPRu_yiu$6-<%v%&Z@rqaIcr@)}?DmKH;MY#6^9;|$b| z#TbL7s17egU0;K`ZVhV2wzzsdY6ecD?mzFmfEvJM4E3P!1qD5@NuoE^@u(?I#wM8S z>Z4I3DM3A;7B$jMsF^s6nz5^>CD4ZI3^AyVKa4)?hvAuP&-`mjgYJSwsQNP09$14J zxE?#;8PrJrg6i;1)Y{)h-FFYwa10mgy5`OVq)*n))d!%i8`6RK*AxxogdB-#c&xi{ zysJ-k^=YV)`%zO~fqKxhsQaErZPr@Uh_|4wt3!2YKdK{#P?x60A>f{X|7Q0bzgX&-oYDuavmiDcN zf~M$YR8M!HrgU%k0<+_oLH#^V$9t#-CbPA5-%M187GQr|j05l;RKqv0JI1kIs`p3L zr(r+Zw-pq0!!ez}JD7@HSum~jc+^@g#yPkS)uDf*zHHsOC>x(dZLW2ghX*kd?_v~w zhtDd!#qMfg|t%{0jBle}*W~8T%HCuzMdyk86=<*e4i` z(QMr~jB_R;lV&NX2F9Uwe-SpvrPvZzqdHcH{8&A|^xVIr-m*{!c3cvLUZ{o&P!AZ7 zEwRw~47Q^F3Th4OP)l(NwVAG941VhT!u|ag>O1lsvU=8-S46LCALROwJ>nH?1gZmL zQ4LQ*25<9FQ}!CF!8cJIu1C$tr>H5vfn6|`9h-m|$f{aC@&?*M)J$(hb@Uwe)cgN2 z1@-8^s0*V9dLvCiy$#u@H6Mi<$wbud_oJ37fVyu#s-qX3e?r}V-T9R}{~y%a+aRQU zi>9E>6pL!8H)={Vbphs}W@flMU*H^v>c}M2byKk!&O$9=g{v<|J#QUq1~;SDejkR^ z!+HvulC!Ay@*-*pZlTutduNBi-gQ~1kq$>SJQ~A$2DQe8s1MU>Y>oA(CAoxc@Jm)JVTZ{$bj8s176!@%}mWLhX%w)b$gQ zG1vms$lpc{_`M;_zt;2vPH04zQ6sqKE{M$XE{sKWGy&C6nmeC^YUnWxZ(7t;&qIy4 z9CiH*uD%)7@Bvguj)W-iX4n~g6u)&B40*)+gy!KxoS%f+17+^~0@MRmVm5BZr|}ci zb@`msePd92WG?cFv3aPsYCCGvhAvUi=DX``o#WLru`lOm;80wT{MZ$K@s+ifoJ_(T zOvIU3iA!)e-bTHS{TS6_I0dzoJFx&yARP-?<6Lj*<4`?KKuuv=)Y5cBO=VBih=-!y zlCj9L+Z5E)Z$xe8y{P9L!ESgA*>CnaYDU@(^Y&67?4Fr{DSC6^swJ!1C)3GTqN6=YBgfUyizG-+ko(6jSI{e^ zV;H#GE++c&%_q6!J@O_=AhaSku~K0 zag0I^*+~4Pp6F;yV#ps)&_Y+prXaG`(BV&9x%e_2tW%IB}BC|T^Q zF8BFMN;nxTDXa{X`O4?|s*8hFz6yU)fIpU}9nNljuSJtVsl79N83Qu=4%(2LQnBH5 z%G72BJZ1q`W%??rXFf6EaAMC1Q6aBIzt^IlMoOv!mHvi34M%9PFyJ~7Ec8>Z_Lt6X z*jMVS3RE`iq8k+@!8!gy-9*D-=|)3cQLv12bAu(tP#CDH_TN97W)n+&CBd@!^tRHk Lwho8V7bW~3UI+{= diff --git a/wagtail/wagtailadmin/locale/ro/LC_MESSAGES/django.mo b/wagtail/wagtailadmin/locale/ro/LC_MESSAGES/django.mo index 89a352c002194d766e30052ae11713db547b1c23..4d162b5492046471ff881ca747ecaa7269d75b02 100644 GIT binary patch delta 3478 zcmZwJd2EzL7{~G1(iSMCr9cm^cDV}lpcgE(#acN8q#UJy+_FGzfgZ3e2%>Je59NG= zF%cyp0S^$-1q>1nCB%b>h!IQ?A_g_cAJ7;T#OwRpof`je(&zom%)ZCWGxNT1#ka5A zf4zP9E<30@sF~hEo&Phozz3*_{f)XVE$P zVj}H(sO#D#gfi3%HIX9Qehf9i`KTpagc|Vr1oE%lxQmWFJc=6mEmR7dZ2NcA4Z?Vu zE^Li@U=k{&8K|WyK%F-NHGmRK#i^+K`%!x!@b7=pCvoJd; zbmOh43wPl_Jb)g&fqGC98>A0DjA~cd_EsD~`aFp+$%j%u4(DM#>NWcswe~GI zXo*r#Yu6jK#%ZVw3_#6j6zaUm*cWG@Hs@N@c}Gx7`7!cm8ac4Z{pMHO5zp7>FhArV z**4$dXuOXZIIJ7##l@&h9l*0LV@}}#+N)W|I_&Re61W#@F|m7SLL0D@_Pbbu;XT-I zdjCtQXl9#HGueiE;BM4FKCym_8u@Ri0d(kT%uY;2E#YzOj~`$e-o-*3&W_a*HDD~h zXZ;A%c)qzpg-Mt&)_k~u?%F1Tq=xMvM#Cq>fV4qIX(DupSi8)czpTxi=fP_JVJ zYUWF=D^b_2LOo}Pbzfid--3?gw&NtWqWuMG#Eqx{{DJ(L7EF)*XfjY47;W2?sDZ3Q z{>(lO%IxRJT+E-S`}HPGTH=w|8fW>bXj4_7M!W{uUuF{qQ;oq?V=?{LP!}erhwO{3 zXy;lBQP&N(PC@OVO6#+z^LL^)vHxW%`j8yLp?DK@gFd_h8fiZ2f#Z>HhM9(Kunxzf z9~a?gs7&QEZN6Ei7;|tc=Hh15QlCWjySWi+`%NV8j5^YgdzkTPUQgCPmx^|I4e}K=n{0b8YOPP& zb|bz{`xn%WUuAla>vz-u*`!J(F_~yfyg)op z3?eibFQKB%rCAjbK4KlAq8X`Z&uk~OwknH51ivGrsV^WNB4*nDGF(CU-L|71wL`}c z<+e{BCCy|DF@aE)v?q2D(+HKPi0WX?m?x~yqV~dbg!Yt{X*IzL1`7!celI2|5n3}9 zvKTDOIHnV+gw}sBp`tHeG@(?_A)3nuDoXnjLhp8SnM!3dG2M1-Z2kfBiMfQnKf$ty z<9dQk8T?{BhC_%3BAocY(%yFF{pUyRiz;FSvDEg*p+l@99wqd;#}a*sae96jF_KtI zXlE`YRuU?D^;BYr8NpiUpVeX1pC+^cAF=&<3lfNy#2R8AQ9?AAC#lRPdN+5Vzn^U+ zVjVGx*hVZTrVuLgLj;doZM_zwi1EZkVk}Wes0beryS zPA8{FtZ>)V);rrh$${x9lU;$1-J@M?^D}dD+&P|tyg}*NIZkGeF2#d0v*{UFFd#2I zn-W#xt*g(Rw=w z95KR}R(LbK7`_58gtJB(GZWqd2f^ncugpPMWlYYzLx(@6u*{fpSOGc1)WTxe0%gEL zs12TiQ{i)P8T<^+hG&j4rXF4evB~U<`6Qgg_ywqgKZp2Y26NbO&NmfwcxI|&&W6(% zFNP&>JvfiiSA)JDI6$HQmf5coDMgdf5p_zBd!FXHz@Mn@i-QBd=nVIk+6dFsFg zP@bOwwZTfL16RTE(1Wsk8&r07#?SACGVp1r^>0Br@J}emsw(o4Yledv&w<~9tuSZN z>7=8Ho1qTa6>~3?VZVYh=r>R)`F;HUML3r6n^39w52SodL1lj3keI_`j)F393{(Va zDv7@qHu0bU&W7@M9@N20pbl68wQ)DBhCNUQ?~J(*YTW^d)8-X;BK$Ds$T7yyH8Y{s zoedSS_A$i2lg{NlkZ144FFt|txR_bWaT%25^^mGHb73>Q5Hi)=1m(ycs1QFKj~|2b z^mkDE{Q+v9gHVRNoui|We+HG)LQd1fQYeEe;3PN^>cF#LRFqJjZh<=ZPRKq` zLmBccY=SSsRj`0?E`&DJIl24jXoH8KHvA<#2|f>J!U8@DGN1+4Ksz39j>r4p44%IR z>)@~x^5Yg*&)9=X*)EubPeEPZ8Y-G2a%MRlW!Eh4N$plpzWUg#^JAv5D4AhMG4Y5>&Gs z$}t}*mAzBr`@fzC%FQ)UmhXTno;%vIv*Cp zHpo=78e*f_0%h1EwZvc5`z#M+`B$(QRuS)^uofzWGa>0T4%EWUQ1f=h+yiCEqfib! z4i(u0@%xvdBJfr`mUp`LB{@0@#qn@3wBqp;s12q;9e7I2Hdw%TZ9HBFwNCrUf$N|Q zxgU~V^DyLQnnO^L`8*z1;FS!@HPcZ@+92=DdPx14y-*t-gv#Z=VJ|G6mQTq>sN%Z; z%7Hy_B76uc6)!;@_zpZ37BuGPw?d`#;yiQa5<2oAfFt1gc)Sg2qa88#K;?9Q%om{6 zy$e4C)I16fhKa>O4LmhlKw=2ANPpzMX(;BW9u zI23mj(l)3Kd!RynJ5&wa1))M9Nr5;oE_}jnrJU5RF7Pqa}z75w#on)wd!*r1<}B3%%v>NOh&Q4Uyfb zo^;!O7@tqqm^-6i{&fP&&;+yzb))U*JLquR5O>asc{jWq{TSVZu0lt)9tJ-^S=5GZ zMYp5q`~`HrhptB|tZPs|sz#@yPBa%$22mlN1209YmElND`98AU#o#nFA1y;wXf0ZS z)VdHwnLC_;sF3tR6|EMc-KZ6vkA8%1L26f^UFf@LD(XdQ$0FSvwX5@p3R2xW(9ZZ- z3a*U$_^+>++HGiB)XV=Y1$9W@f?8CGRv}gLRx}0OfG$Ckk=iNfvZzP3!w$3>^~KLd zz*EsImb%GxnQ+sn zpBE)N-BgDa&M6-oo>YGKF}^eKa(Q>6-CJV?oo>bo`nnw}X{RkOo$9mN>HCfyI31Rq zv7)8E!@D)sT&HV(&1H@2YvxX)*I=#C;=?Cfy>2R{#TmPYr9r3TI}PEyiU%rFj-7Gx zhuBt+opO2Wb~)jD72^hVxW1DNGGU_fzk||lceg|TtIF*cc)s6PXZ3kmtHZO>USM^y zt7RvXP6m6u*h0&WoR)2o4@Vhj+5$VsW@5CMwrqQs8-y>8Iep-*F%uG_54+is#XQe) ze4nrlynmdZC|~Ik&<@{T6PT!*a(kTc{IPY*@k%DivR*qKe9e~X$x6X$nKC6~&Q%1y zVXnf?gg&_z&Tkw)uxIQ!iPhf_N;j=&M$r$vZY$;VIH@QD@*6{ZtJi7IxPjAPorhUU zWS2*@+`z(q$5%$&^xB4jFUFN6mNwTn&9J67w=_<#ZJgfNICSZf`sGfKn{mB#eJfdS zv8FdR&8Tl=-pN)|b4%0g+D6*YMRq2rU*X&7OvXw4%{F`G;6{qYJNS)cCD^#Dj4XW{C*-A&88%r3|Vlyt!}Dh zjeEE<(%CL%Cv6_N>5ilJJ*rNu(~^{EaA2dV$xXu^ts`!!9$Sy?q?hs<%+kn8E16X< zykzPl;k7lxhI^LhM@uN|0~^B=YOUc>RpY0}UcNifQhR!0$U@&<+a<@sE9&;=&UQG9 z@?d4Q&g!szE1k6{aTZx=YAuybDF9Ky%QN5YA)Uk~@R=7mnK#zeG~8$YQC=NU{l3#; zR`@Q(&#~HLU~&Dai2~|Byt$!rpub^jV%$onpLn^RkIg0;JoRAO%HPkhu(6@woODNc zQ}yUF>+5A6KOSgm+?H5H^mN6)7Cdbu(~fW}lg;D{*iKm#ZZ?&58?4rBH(^XFD&5&2 UibRG79w`rO;?fX4-t_+e0PQ9V8~^|S diff --git a/wagtail/wagtailadmin/locale/ru/LC_MESSAGES/django.mo b/wagtail/wagtailadmin/locale/ru/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..935cb612b0cde529582ba8eea80179aa2a383c37 GIT binary patch literal 9693 zcmb`Ldu&|Cb;c)-9}UwqFDFgnwi!9mgOQdG$*<6&6j_gmja4xs6~}EH^>X)Wxz=*; z_TIau7(0L{+KvnwJC&;|%{7cg411&jhk)1qk80R1B< z5TyNmbMHPy%2M46&VD;{&zw1P&Uent^0jwe|5d{?LHjM*rZ*ci2X4KQ51zfhX3XQ@ z2>2+NfXBdtZ!zXG;NO6EfLnTuxe0s_d?y%!H-nFYzX3j-z5foFqkj&3JNR0LKLgj% z{}uQSaP3=-c^h~KsQJ6VcY|XY7QtVq|1c=|6CkFTr@`yN=Rs}ZJK6j1XYYTI;g3Mc zy$VYI-+?S`{x$3W7uZk#Iu_Bon?bg2_JFc$e})f$(sKmVdR36AW;%O62i`*eOQ8Jo zUGN5Q0o1%p8U6s29e)XGAFqOve+`uUPeIx7?-|Mn`T1t>J>WV}@3(^Q2S-8K^C0*E z@Q*<0KLvge{1&(cyaZ~U|IF|gpyvG#DES-tkly!z44Ga~e!3Hs+&!T7I|5>wIS9(0 z2~c{Eg6{&4W$(WXK0yCDQ1gEUO8y4OunxQhTo2v@=D-KRwct0vJh%+XpSKcp`DGg@ zKkfqMw-HeGj)AhL2udynH-MkZ-aik@e~X~>{WbVr@SnjE@R#5wa1TO5U6#NpzQlLxDEV!Ps$agfA^+BOl0r zzfXH7Z5K_Cd?r5KN83V!M&{!*J)2T+pNi=xY4V+(-6^Zw@%k7|k8)9Gry~?(=8{#1L%7+R;KI)CO z_Pas5E6CTT{7T$0$#nFj?P^p+9kX6fM`_9{`fY}csQ<<_T$>TqP8&wA)r1x1U&(;+ zNk8;$DY8Muw^Lr6pKNZp(_N{chw$1B`Jh&b{jfJmXZWoJ%nn;FRgTy=u%RFMv7HHO zp{;sRG#!KmJLyGs!uKoIpYlp&zaTjz`pk~J(`j}T3f9YBJ59}zqbykQ%B{itWT{+0 zb+dRP$veKySF>nA_6MvhRg9 zKN*zrzS$Z2Ufj^gqGp#DO-=+}Sm0ain_Yg{Zvyd&OL5unjk0kTF^!yx%G&Hb9R>w@SuXT3s!z(%VCxLqDM5wI!W>^@p82caMGr9Fmwg0L9GF=Qyk z+s)npNtbYu8L2QePVE_yJqW7h3JRseCBHDlPRk4&Vt~!wOFV*FEW|_m{7TL2 z6Djo3<`dT~1k;G3Xmjn=9K zqLfKS)|>W9aj8<&M*Pr=OF@N|LMk4RB}zW!W>m}P@%G_bx%JBBl^KN}knC`&TyEoD zBRrU%y${OeV46_-&YdKm>#mrcW;FC4D*4l9G|d%rz<T1ykQaNQ>o`>vf4a5ASg8mrDkejb?LMyth8QQZB+KAyb6IY*ohhHPMVWQJmiOc zW-RvNT4cs*6H{c%;UH`e80FCAx4pHQZnw6|o0k@(g1I`ezDzC+K5h)GHsi{1pUpxU zhnQIORC2~u#5(hlfpq`*pjatIVw;m<-0i#2s2CJ_J3U#-PufYpT!mRUn!T|WJha{f zDP;2jSx4n$=6V8~<%69T*(Q8jC`Hw>H`81rD%U855W7s`6lPGU8fnH=h0OR&)i(zl z^|$q{EhU?8RjCf*{>a?tm-AEvMPA%pyCEX(hg42_qXrl3&V6I%em~koT(GiP+0(IB z$w%q^lx-MdMQ^82H5Lbi{*c}&vJ{rk&uiB{#W6~U8wA(n^|AJzCMG8tbDN=&zr1`* z$(NZV;Z%tj#N>7WkK6)HP0b^)p{bSQ<(W09aHDiWNu6+6O(>KKGGbL$jD~^oH8)bo zeF`5E&Y^~@dJg#2AdGYSqGG9#yQfx+a^t~}?HS!ao^yu_!Z{r!Lw57P;BC2qkLCsk z?cg0lTkhOAFgP%PVD13LK}uJUyM5@kfsF$^Ju1+-@zAS8Wo>@Qe!>gOc5g6I_Gj$Y zBXmB-aGt~KXdeOI#)L|-Mlf>YzBe^w57eTlM4&cI#&LD1zkhmqx(`2AqS9gC&FJT( z*Dj;}YX5Xv6Z*@Uj{dOL-`lfqWZ&+V0|xsBdUmFC&WVac6rrPWKm09K?p8EIiretP z@jbb_T5?+Oupj1jSMr=SmEw@SYoZi4Z5^^Rw{^+J8t*1zZ^E;=_ZBgDRv3(~h-{{n+2`%Ll_i?S@#6fGT3&!b`< zm&+X(mYG(c%a*wY{g>-Q@ypnDg4IsfPj{$aLHI=(iukdXcpD??b0&EPccmP5_L}5O z{iJ0x^KO=M?c^q_%_^dgIp-mmED&eFc{tlCPMu565k>Xol(38+p6QVt}k$t{;OH#7ld^oLL195}ZmFF?Au`M#`3CUYo-g=LqSujx5dt z^;1sjaw62{*jba{Db@p^QS>Yx8Y@AJ` zbY!2HDbJYXEb14v*wZY;w|s!wYTJleI!Qt}ejti{}h2V7JTZ;&-DyX2lUG)lyit`Op)tT>wF>-h4# z>n@RkUnXF3HC|FMS2)l#e8v%I<(lSJgM4DUYU#`M%h!C??NhZ@Cj)0B+d({y@lw}s zU6%?M6m6-dbfjPZSla8SMM;&j1(lu_uU8pv=bfCglq^bVn%R$Ol1jvrn8oFSgmAkM zs%y2x>021@@(de*>s@2Bv5vmZ?oeF z4!fI5t8O@<<@#d^U_+~pK?*0Qw+n1a3s)eh{9U4#%a9w`LeNd}O|&}a3w53yIjfp_pTBql95a>Vsqf3c16df@l#F#nN-1oi&1(ncU_~@lM$=TR+9+haKR>%$W_> zGo%s7%C)cKY^0vB1amR5agI~Op^^(jda+tgUUG#54IEH{C}9#*Osx#l5VdH+J(Z5vlLDW$nid_I=Vu7i6t^Z*GuKJ zORfc?hZfOv5&hp~l&hMRItH)m(w!NiQkCB57O@Q0XWEE3Z%$N;#rzqx-F`v%+pBPKOqTTNom!2$wpb%E&b}G+7DBa_4T!i7S2>> zl}Z7j(9xnxpUb|ql(@3rkkL=b`78WaOgBzE*?x@9qB%_&{oGjbPMA(oP+#9{S1>wi zg?sM4a>Tx(XRwcUgw|v^wH7k(u`@p(H>n8+0SN{D`^o>At3I>sP+B!sC^;t#a{V R`YTK|Yqg!pudi2D{ufp&Evf(j literal 0 HcmV?d00001 diff --git a/wagtail/wagtailadmin/locale/vi/LC_MESSAGES/django.mo b/wagtail/wagtailadmin/locale/vi/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..456079b0d8543fa131caba5545320122e022e8e2 GIT binary patch literal 463 zcmZut!A=4(6x8TxkDfjB;6a0>T}6c=#)uG!5(!!HT$aaD-EB8*Vc|pgJ-@}bVBq2; zllHaqrf>Rla=bo393oGVXUHSuC9*^vxyH)|uBB#&fi+(cd)k}O5m={;7UWYVUaB-0 zLT;?5eV3>SeVQkZMn;fe@E*~&1?f>tpQQ&uu6S6Zyg|c|gty}QuEImkQAmfdP^IZV zx*JjB6^;nrr1LbgQoB@oV+DDYHYG1+oWhFSe`E28$MI}zmetr~57?lSxlDjYATvQm z3cQvXI3VXU?{mReQ502QI;tsbnpnOK>R8T-Z9bO%*|3FT7eT+*@9h5|tn#33v?HZdo SL3F+;T`O#o?Y706!ND)J#EC@! literal 0 HcmV?d00001 diff --git a/wagtail/wagtailadmin/locale/zh/LC_MESSAGES/django.mo b/wagtail/wagtailadmin/locale/zh/LC_MESSAGES/django.mo index 7dabd47477d67a433fa222d4886e37879d5d716d..2aae4a9e90bcfa0fe9e7369a40d57666e57f1150 100644 GIT binary patch delta 3274 zcmZA2e{79c9LMo2A z(P{oWQDJ)wX&cd%$PY8-B7PLkfpq*OW5(bKoQIDw9kU~iX@xb|4&TM@cmUhuMU2J< zd>QW{P0dqWhpslk_I|UTOn)kBa0;Hm3~WxTBpilqvBdsE(y>i8_u#9T&xrh!8T zyledplPQOD6Z$qoQ0>NItnnK&lT2$WmLm^u)?!QCfVyytJ--+AgokbUGt~9htqrIF ze2bcaM(l>aV+3~OW-9ltJ<&lGV`!%EbRt57$5ALH=@ z)IhIU?;t<(ghLF5MHv%^vDV?(iE@4v^RI^MsL+(`LOsbzTRw++!kZY2w@?Fqf?5g} zjZ?7)YTz?aGdRbV7oysipxUiKer6K~&FJ0^%)i#Ao(f%f1~q{5*c(5`RD6WmJl)yS zdZI*Bhog|Om`v39IXDNGpze1Cb^Q%Y!$#EG(}haif2yBMA2Mrf#UWe1f`h34#Twr+ z^fu(6rhF?dz*DHVCyM#h(hNf_%`DWC%|$J3KJpBv1U1kq)OG%yWcrfXgUR?Q>cYpU zHEh;7bmM5$?)BJmHlC(jgp9#-W&Pg7R7}K5^x{d>3^ih%i%p7SDQ{=AZ_&SLAft+Y ze0?-!rKl0E#8t?!t-=M62 z8W}Yhh3X(5HR4L^F6$9{{v7JVbOUvxKW%*kJ5p=f3pM4Lr~ys4=As5Z-c!0 z{?L>>qC#J&7pS#$_X>@0l68i4wsisO#!FB)T7{b0T3i1f>IsjbIy{BieCJWG^$rs2hn|s(2!?{SdMGdSYYT&(WIm4bGhiTML#35LXy6%GYD^$l1 zkUix$ZCG%1l!ym$5^73+#-Z4(U+DaB)RX#9H{6LXY)Z4qX!9v;Byxhee-9eeQbPM` zAu)hxMgL|Ang6Cu6t)r7#5^K{P+}s2AF6EB+n~fZCHV1Cel?Lov>^1K(v-B$lbZ^t zHz1q{Qyu-AN`g;eaC#y5s!T^sv%XwPqX}m0pTzzNrZF5h5bKC(gcAQT!B4U7y@=RK zC=Cn|{DV_gZ-if)Vm+~zC?S*zh_?x5*whfO5v>XB-2W%-nfXK&(Vfudnng?{h7lEn z(q=;cC&N`B6@~Dd#bine{%?Y521mWaGebo)!a5kI5L)|0!bdcv6=bwml=Su#6WV-w zLzWTaiFiWagh_}prw zMAt}HPDWBniaRCUn>skblj8A2OwLZ4TCj3)`Qp-&q%ppV0(ab~ zQWHF+hzY*(ilpgfzLN4{Uqxw|*PZ1nD|U}BonKtA#yzx%g43>>FLHvfq;Q3=klVbo z$XV7cH*mY#(dLfR^9QH0SG_Yjt|o9ZuFmCL?0r1?;o(gWj%_uKyLLBj+hH1a?ruC^ s?Hua!+&SF0u;u;QbN4oE4CMCnx&oK`XStk&#Pq=a#Pu$xWWbTX0qosdtpET3 delta 4562 zcmZ{ldvKK18Hdk83?dhi1QAl@i(CQ<0fHBZpduHmV9TwdVwFwuk*p@W>F$PzViPW6 zBE%3D1QJlB1_)}wE+8c!t$$T*#nG15w(7KIFKMST?Wk2++djYjPG*WTp4s2`ocnp- z_guDpamxdB9}dpiW=K2Hw@_D>G4H{b`tl)t(chTa@JqNH-aNpV8{l)W4?GJ8!4KgG zcn)3$FCA!1F3gAg%nf|{!8vd>TnHIoXWk}r4HakMLg>5Hm}zh^oB*33KhtUX792zQ z4^RvD;=`II2Qr1phdFSPE@&M^H82RI2kkQoLKLs|MJRA|q` zi(#+9#*BphpaUmDdAI;-!ZOP+lp*y{hCcxn@=dmV2h5|q4{H9`VckV!-Xx=e?^yoE z^7l}ld<5m`Cr|^wfW4utz($h=HU4s_1@fTgy%COvGax@xYFP_4ZetGdA3|m~6{BF> z@^^43<*y(=GlY|*2#tdka2AwjFWLIzP#(VvwUzHf8U88MR`q6)DR3mb0xpGeqFe8ZG@UI1~pMDlp!5ZAwLDRhi^gkI}2sd2XGARhFWmY<=&y24XH8op##-!!NQ z-2&C`PB<1Wf!D&vp`-iXK_+wRp(Z*HbvOpHsup(m==w~z1#fNG9btC4o?x} z?J@H#mqA7BVW{zEU_LwxZ-ZYzZP86sYAeD}^S6q1WcHKcXO8e;H_Tb6!*R~C*VSHm z2vqx6s4bfbHBkuaOsux;TcFOui%_9|7s{|dT7C@Wz+YgU8qSl^#6Dgbm4{pATaJY? zXd=|W+aS?3i(tk8+rApgkY>p4n06>be-1V8Im^!>K{a2EB>u`=$>rC?GoU8C%kn;` zf#sG#C_`#&djr(gY_si0EITb^0gugxN3?38={A z+j23~DV_4P!=Z$TTL!hXs1C%pd4ny4VF!oTP@ox_d>1H0X1*kF*2I?4cqWO)I>=r z1O5j2nSb)p12O{l^&&2T+UruN{;S{sSP!+p)3&}1uAsaZ&V+r(dHv@>=C3o0$Y{X* zP!CQ3%CoJIG3Is4zgp(fN%b?J9+DMM{kK3pxj%!7(5Fy_52MpOI1_3sn;;j_Wl|hr#JE2xak$P@et@YT|!EA1p$Cr1S%%K1u{ElV({8T3AVk zcMGa}QYF$H51H?6d~ZZIA%*lYRF8I`MM&pBNw1o=;_GR-t+*NLFkgfev5S$?_dMv2 zuFeD~=uRpUIFw2A`L4A2TDaKe6&-dXv#%4Ou52~pJ;{U?WFqqfT%!W1AKHrMs$i3% z=_OXx8~+f}pN`T-q&uxN36-M}Dv+8zWWKt;3v8J!HQQ~TbC)^kD(Yr@7nPxf=xNk| z^fts$FL|v)bQe;(1!bY9PzCCX`lEZ$CUh?vh^mm%3^Whjjvho!NJ-}=f+~@V#vr8u zNdJmTVN|!7&v%f6O3`ej^lh{ulQZUSsMl*6(#g(6jpz>4lO7;56qWQ;z#4QXnvB+? zRp@cllSX^H-c$6h&#e@5&?RUs`v0Vtas_I!m8+p{$~IeG2OmWbqbRx$DJ}D0LU1Sg zA?kyk$s9{EkD#R}7;o>_(YsI3t#zvX<*`|p{ha<5egPMnzRs<@` z)a*u_&5RO6I|oM0&GRIr%iFD-Q=xDm33JN}ICGCAYg*X%Znqy8w% zc_@y*om=G_(&KVj4W@=1HykFU@sXE@eYtmIq*E65uZWsVwlc8Njcpw|{!ToU9WtlZ zABQI1mdu z`?8a5M-nfz#&hyxzWdXscQP#XN@uEdy*Dh;d@#N4RKm`9;=*mDSK{T(UdNB?*LtHV zCJt}tI@#KFdUxXG9f@5By4U`Q)>!-19mVNGuclv%C7x)v*6nIcZfjtgv&W8=&R>W zZt6Ouki z)z}c5UodqlcCCw3m53emhB+6WNf~}&hfE9)#@80q`uJ9C?#*RGXVQn)u!ZOqaj$&gxkLsLTNN3pttcpLPj(hI* zht&%`X)V<8DX8PKoZT^s`&%zobb(<=V{J4x$5~hdH@W(5RD+JAp5QX7!4=5QYS4}9 zspc4oNtl3XsQtrHJuuC=82xHdF)M07399S2xdZlL6Y2+17ruZIcnNjhRp)o8234S* z^a<+t7Z{E&Q4jVCbzV$t=(-JJ>3?0YBO6*{S5!+UITxc&+=%>aAB$G_vGY1Mr2Yr$ zygCg+J=6;IAg{anVAKOnLk;0vRD(A*p#L=+%h-^KpP*X)1l5JlUHvcA1;V(SPOOf) zVH~PUQ&2)M(1mxP zPAtRDco?(rF6u^cOprF%6IGw->N~I#^^?x0sJF(SK!2#~hvHN$LcL};QDYy@LPHdf z8oSo0F>a6QfljC=8i+bB7u(`^)a2ZNI_?B&C@&&Et6;$-_uFr7Lo8pPW9-O4dfV>d zAp8?kuun6(7Z;*>>M-W`%+6vt^*W5>T0D*=n3-U<9#7){?2%|T7E7=X-oc)F|68^Q zb?sEtlgvTAe#?+vwLQ+Gs1M9V=S`eP{V{6Hb6bYan}GePuR?YC1=NuIj=Fw4Ggziz z6Yg)>TESe@lPz*?aPCDl2>?o?SF=vlwr&`9Uq74sboyY?x_9quqv)|Zb_p5 z87|w&2AyyW^O$LG-E;MiP_Ih>d2{S8YLdQm^}0-XZBId_gY|dy*~t90^{C^^QA2$S z^&r>%tnjAUL)4i0+J$!1L^Y^6>Vz(+56DPV12;K$ILn;-Q5XIIb^b|I&whh?@;j*W ze{$RXFIeGc;k@+vkffqcn1&j&BGd_6QD44Ys0)>2FFb;?@n_U=dC4IsqbBPNq?4=^ znI;x+evdq}-(H1QtZfPth68d?UA+c%fy1aVzKX-}8LDADIY>{Ki@NcA=TfXieKo4f zx43#aR;PXhv+)%6)BFFN6V+?v^E$L76I!6;`zYW#+hmiqf14$us$SR_u8LJXS#s}9ze^&djzLJa~ zZ@BFdsEJpNtS3{+5K>uYuri6XuH1nBcCNzz8McHBB=3^tWHeEk79zOZ;no*m4Kj?3 zAa9ZGM5S|x|CSwD>q{oOEj?w81QjnXDke}E)vKy^uKrc;{n%sPq6P;7u?-7--qW~) z-l0Z~y(^7gde<87j3_E7TDl}~vPq#YFud6~pLec#a>R;+`3s76cWN5Qiyz|))K9GC ztDT*ik&%#*)h)A2a(afB+G0-hkb?O$mln*N-YsF}tjVLsczarm_k1lodht<_0e{Q; z5#EY+550Nqzw$;VZwlN^-s|%!QUmp$l<$0e@Qgh;Tl`?lc6;>R=l9QS4qWO`*XR9^ pcDUN3(&C3DrRGIuBnP50!hM14j_rM3ab~x`FPU3?-mT6@{so5YY$pH! delta 4751 zcmZ{n3viUx8HUeF3?P9>5)y<6KL~^f0SqD~fES9WtyU2VMM2mk3t0?F+$>-aOh~we z5CngN27;nSNx4S0K;-7#+QCjm#qrYdn$2!3Q+1|e?R2z#-ra-aWjw>X&v*WF`_A{B zb0)Mb*s!GX!<2*uLup2tXwrqod<5rS#1G}&p2n<%@4@|WRxe}L!GvUE*1$Sg1uwqX zn5l3pTmavJbK&^j##{v-f?eThNRxRB4m76Hv}5qkB%~OV2Gb#Hm=UlC%!6`Z8q@?Y z!OP)kI30csC%_w1jmd%45T8t|<@0bD^*5jv{x@VVrW=d(Vttd2!8bG1asnJp{T7%6 zSHVl*Mkq&{p(Z*4`@uiM?(kEX0MEfh_!U&YZ)|(_KCvB}RH*)AVFK%$$ui&+sGZ*c zHNh;X1?Ry5uoTMk%~08Cvfp<@Iru8n_>ZAB@CDSy2Bya&Hx_oIJ`r99r@~4HqXy_BiJ_2x4VBXbR#V4hD2LMFFgO@$!JA<0P(tl=Bh3*!JU4j=To1 zfM?)5*oAOTgI=h0DqAo#!9l1AkHT^Aukb3^g-1aS6BfXipssHgCz>TH&FvVfC^C!)Q%s9>embvsXb8r4#VN_ zIXD7Fp##&%lWxH{sCj%)XQTqMu&ILsbpLnT53j;j8a{;_WaB!<6v935CYU@ZzQZ{% zkNP^OkiP(@dyIJ-{+jwQ?$$227_NprIEiavJ*Qi7MJP0-J2%HAbLZvE`aABJ1uu=_OjQVx6Oom!0-PW_A#*cxVFLND~L-V2f6+<~xY3mJ8k!!h}_>aM8 zvmH927W$uMA}5ODV0v2SKn=VFYJquB*LN}0xO*)tp%z{T)vpmM6;IptS1eywM-6<- z@_oxspmr36n&3Z{i6i4LWhzvJGN8tfvGwt`ejC*Fn+Hh!CHvAo4OT%Z-4~K9tbS*bS4SW;I!S`(aGsu-TpF>@zWZqeBvKenV4{}jV zjpaT_7R_0x{+?V?#QG*1Lle!03eie5B~*K&*PQQ!ZV;8^IL9)JaQ%k8{k=(0`DFd|6A{V zIEnfPQ2qLn2c;s9A31mr^uVsji+-i|e-(y`4&e_=IThVy4OF=c1!7kGM~*JEbuthu zH}iWhT8}0oA{~p+YN(K>A{9la0OczGDmS1D5RMxM^*|3JY74isB|3dSGMCe#J3MJtd_v(7~kQeH`4>^%G)-h*`i zb(K^ui{ty>$FZ(MSEK1@AX7m7*rOZOf(Fs=$_6+d8ibrl%OY3 zzT3M;YIYy28dQrCP&cHq0nLe7Jldi=FR8yfJ^2#1Wne$|`J_a5Me-19_X}-G8kyLw z#JAij^Dgqa2U6ZoD)a|S1Le+b{(`&9-F2yl5(|p_#f6SLF|EHlF71g60>04OX=R@L z(uGd2$Y1URE6RLMfw#mdEh(;W^05OxZ_rohc*~vG(14G&h0Y}3lB=`s8?!2F(rBzv z&P)wHzp}I3UtFxg<=$ls4Ho$VzESSv^!*vdK5w}%zKGXZ<}LQq>R;k>qv@Gl3;h9K zL9pEQWPI1P#9vnC!~Qno!8=O>fr^n%Md?zfu+%9j4LU{4>UawZeC7CCYCUwku}#aj z*dBi3pqUZ$2A7swu^OyL8?wP*Vhd%B*$kXTiHVc>HUa8{?1PEKG^OArkZI+*a z76!ZvgC=Gc`Ru(Zr6_AT=j$1<6# z=L5#N=LU^;y-9uC;(^JbD+ivvFzxuU$lkj4wyJPdUB|Z8&RwfJcRt~E9U4uF9BqkK zt&JQy)w#OO{pZlv+-<{lCwA=kQ@DA1Xj0ZAo&{Bn4C{RS(a82S@nPWy_C#w=hGR2E zs*nBTXgTx?@81&d`dL+V$NpwJtaW`yQ%!iyq454k!c8rm)lYU-Z={3!=J3OlqkHS3 zC)&bmpRz7C)pj&&V5W}7>dtMh>D;v?`t(T?K2;U2tv8Xz6YVEAn9lX};nvOJEn7o7 zvQs>Xk=peg2M)XYF5fpZ+*;q>Rv$fl^otXl+E4E4IP_pgQ*GSgpL)y2!jIO)J=A*p zHg+~{!7CG~tLj)=XYs{}?V-CyjP|5$IvCy49Ie_ES@U>Ds3AUOsAA;Rp3La(sz_5^ zw7xdd@|=lRB1gBkw{48nZg7v}Oq?J`YC`Nh?C!C?{P@uQyhCSIBl!w_nN#PPORM}l zpS$o6qq(6qa^z5CZzCOI`|D_`V&U*J&GDng(C`BX+mAn`#pCfmwJEauc(|@1e4s`t JSTXv*{{aYLZY=-+ diff --git a/wagtail/wagtailcore/locale/bg/LC_MESSAGES/django.mo b/wagtail/wagtailcore/locale/bg/LC_MESSAGES/django.mo index 4b01bf04382e7de1ca9e0222e78693e46eb71412..c967a6c7c25a42b8cd8616a3cf44bd3a244b3dfc 100644 GIT binary patch delta 44 zcmdljv|DIH4KtUeuA!lVp_!Gj`Q$d{%{)GddFiEz>8Vx<{9 delta 44 zcmdljv|DIH4KtU8u7RO~p_!Gj#pE{T&6C|&qIi4~^U_Nb(^IV!lF~QNXPLtS05VPv A6#xJL diff --git a/wagtail/wagtailcore/locale/ca/LC_MESSAGES/django.mo b/wagtail/wagtailcore/locale/ca/LC_MESSAGES/django.mo index 7ed9969c9223ed3a3dc10289b5037b739c3c6a3f..c2432606685c1fd6d4d89874c522a44a2b48c898 100644 GIT binary patch delta 44 zcmZqXZ|2`n!^~x=YiOuoXl7+>KDmu~BacsFUV3R_da9K|a^hq&mgvp%Se`Ng03YEE A&;S4c delta 44 zcmZqXZ|2`n!^~x&Yhb8gXl7+>F}aO-<75|>C?220y!6t<^i(T_8Vx8Vx8VxLX6ecc9T|+|!Lo+L5^U3p=Ht_f)=B1Y=rl(pdq!mr}WscswmD!RB07$D2 AUjP6A delta 44 zcmaFI{f>LX6ecbUT?0b}Lo+L5i^=ntHcXCYj^go2%u6p#Oi#5^NGsaBh1rS;07x$m AYXATM diff --git a/wagtail/wagtailcore/locale/gl/LC_MESSAGES/django.mo b/wagtail/wagtailcore/locale/gl/LC_MESSAGES/django.mo index d9f4d84ce4c01028efb6d65b964b120d708b5930..3312fae172ee45e57399a768511a986b36c66647 100644 GIT binary patch delta 44 zcmZqWZ{^=m!^~x=YiOuoXl7+>KDmu~6OT_~UV3R_da9K|dd_5Xmgvp%S)MTg03l2b A=Kufz delta 44 zcmZqWZ{^=m!^~x&Yhb8gXl7+>F}aO-(_~kcC?220y!6t<^i(T_^qkG}Se`Qh03Xv0 A^8f$< diff --git a/wagtail/wagtailcore/locale/mn/LC_MESSAGES/django.mo b/wagtail/wagtailcore/locale/mn/LC_MESSAGES/django.mo index 7290e12fb85f3531fcee238a0aa826707e5ba456..9deba4c1fde6aac5915f971fd4e5abc8b9b1f037 100644 GIT binary patch delta 41 xcmbQnGL2=z3NA}sLqi2aGb>~BiJLa__$20~mnNpCS}Ek_O-^Bqo_vPU3jh->4Z;8b delta 38 ucmbQnGL2=ziisE4Sj?=9EhcW-Jh_N5ipM80FTFG|J=IDfH*fN3MsENW1r8Vh diff --git a/wagtail/wagtailcore/locale/pl/LC_MESSAGES/django.mo b/wagtail/wagtailcore/locale/pl/LC_MESSAGES/django.mo index 60c93acf4ef24d015048476533a6e0d48f7884a5..e07533f0ad8251422b796b3b4df93751872e2742 100644 GIT binary patch delta 44 zcmdnSzm0!G4KtUeuA!lVp_!Gj`Q$d{4Lm-HdFiEz>8Vx<1v!&VS)w=3WszhC05C=k AfB*mh delta 44 zcmdnSzm0!G4KtU8u7RO~p_!Gj#pE{T4U?T&qIi4~^U_Nb(^IV!3UW5jVUc1604|RW Ai~s-t diff --git a/wagtail/wagtailcore/locale/pt_BR/LC_MESSAGES/django.mo b/wagtail/wagtailcore/locale/pt_BR/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..1f638ec77fda8f015a16a591490e67d78480d867 GIT binary patch literal 2576 zcma)8&u<$=6ds`bG8~{>IXn(1j@n(@1<|l+E1D)Lks1=EZc7CSjd#cENq1+KnOQrg zAjFYB0CC|`aR7lT4i%S*1CqsGz!h;v{0$(!nRT3|aOf)Q7tg+V?|a{S^R53ldE!fk z>v`NStlPZZm!oYaaJF)dvc+@vGgP`Ols zHjNa>HeDhoU4a_=9(#bns|v1!9G(fMt9eKo7(KB-GLb6NlbG%D9MAoBwp$2p0VD&1 zq0-1#N>YUwD5RvDxT5XtXnmbVqogboYh!jb(22}WlhvgFgDRgFj4~CibV&{a%S!n6 zkgY^2hccx~8%L@x2S9|~bJWOqZSRVuwuti>Js68ZS0$Jst(q+>-EMa|rgbfBV2}@o zB6WwXH%;&$+EzCkfPTVF=GUzAeVS-<%Pz;P4|@DC9r9CoKG1pTjuCkX35aOqT$OY> znJ&3hajMJCpwM~ey>c4aqRv0)grFf%Al8S&h%IGQ$XnnOJ<%9FvO*{tOar@BJt$<# zZj8VlxZrSAx4d5%#}Mnmz5))f9RN6)V!Ec33ndJOGb8X+TNX-My50SBiQ2WrGIrQ{ z-~)Z=rWI%_q;<>w0Qm{ToMWIejDykpU^3duqU*v~%w0k^c<#6?T6@B`E84cX%%ZhA zw^3gw)Y{$YN0)F0{g6iMz>v_HZtwM|`)1VZQSXi9wX>(Xy>1td(ViGfAM}{tO4K_` z-Coi?a|&(kwytpNqQ2qE7Tjr*(B*<>7Og**H~$Qbbo#9v^cSA~3)rFZ8l^>j!OMhp z0kh6={sgtx4F6ab%haBCZ8Dj}&c~KRaS)nUH6`0l)tNMvc8YntPUSva+v_a1wzsx7 zjtJ?+-PR?o940dAgUp1SIB=b+z&xx{I^qTjbN*U?Gg>+F^ErpYL>nsAehw2_8A!K) zo>0iu+AV6si)a(4%_gL(@YS9_vr5gs=i7=dP;Ys)bzBMeXLksKgU>@DvZ;gI9K?v3xA9qYO)07qH%Dkw6!>`yck1E5M3M#7_;lVkQvV)wcPQ} zNE;3@ps_H1Q5t=^*%Z`N8eq$X5h|64<^>X?F#C4)6H+3C)0wv9|7vGoj-=A#QN92t zN~+67Co40%R~f0Hj_F(-`?I^QE;KD&EM-2s1Jyw3hSRoyxJz3iDDte;Hswn(ZCRYI z0E)v)q&RgT2ui6@4efI!3aB7hgE;5l(m*Tb3Glp{-GKyihEby-AA6C9Y}REEP9AwG zd^j(fnBo7|&5QeZ9f<}b${Ov|tYF@K&??r7*yX02p@; zrXi}cyHHi%ail*g3;HwH(*rN3R;aNq#?W>JXbQ!I0CP=!$1}}`0wMLHUyUnr9dBD3 z5xl#`dL}(Uyr&kvA*}WD=%lJS4QsR>4tViEcz3`LWcP^6X0`-go)2~95I)Xp@(AL) zL+(F)YGOA;=J@%*jpSj@hnR3M3@rp}c+H@(_q`HpcCBnQIB<#CU-bN8co?goxt=V{ c34W0*l-W}uSg7+6v^dOobB2Q+%S^}YUm#gc(*OVf literal 0 HcmV?d00001 diff --git a/wagtail/wagtailcore/locale/pt_PT/LC_MESSAGES/django.mo b/wagtail/wagtailcore/locale/pt_PT/LC_MESSAGES/django.mo index 51a033d0561cdeee3856abfbd526185968279272..46dc026650a262f9d49aaa05a50c095229d8c6dc 100644 GIT binary patch delta 133 zcmX>nvQK0}OIj5p1H(cV28O8&3=A@C3=Bd*dJ~YA1ky)=bTN>=52Vw9bTB(aem9VI z0P@cP=`TQ5rTnUvaWA52Vw9bTT_c{xpzw z0P^nv=`TQ9o`ZoQ0!WK+GBCIS>0BV~1EjY=X-2M%uQ*w_EOZSF6%5U+j4dYrWx2)g YlbDxYnwXwyrBF~39}u$n8fyj%05|3wVgLXD diff --git a/wagtail/wagtailcore/locale/ro/LC_MESSAGES/django.mo b/wagtail/wagtailcore/locale/ro/LC_MESSAGES/django.mo index 22c711e9e375233ec83c9796e23bc489b46d011f..8c6ef637d04b4d2adaaccb4ea4fa854c84633233 100644 GIT binary patch delta 44 zcmdnazny8VxS)w=3XOUnA05KE| Ai~s-t delta 44 zcmdnaznymP9A|1h4;phQfJFFEOb_ug}Q?rp!F>v(J6bO0BCJa86x3}hz+ za=BE=?S*Q>C*i5s(0;81SrL5U4V0+NAb_n_rauVwc$>lU+Z zvTrzjH@hv{ve3wi;<=ZJ{?RwUEc9J>`un;qoZJMD6)Qzt#y(d;H`eKpt z^SInWx?G(N7P4gwfgs%kYh)$CYYr8YIQF=t&ZE86>-8R$$$4|4#W2J6l(89__4aV4 zf23hXiP@E#9G@IHUVzPgoLlf5CbZ)pv=(6=NP1Nl}E8qh3V2L8#wOEUN|Qr zHX_SG#gnc>1GAp`?bV?u$xZo5#CL4dVWCrAv8_VErmI&e3$2R< z?DRHSgm&DA3cbHd`9gmdwis64wrFXoO+k;<1&$3)Z`WYX(C_rN{-h7}7hnh2qjV)* zO_z~A(9Lu`-7xffy`OIWmA^)MPameMz%qyp(jU_`{aH8CRchyv$aHq~HWXh$ca!u^ z_A7&WfWlXln|dFN<^TAv^;XN~Zbl{eZDx*E(hY=rStd)Tukog}lUCRM=?6x3vMFE$ jJ~8u47+Qg5ldzcvbm0%_WlYz=CN|O+l$q8C=^NuG8dIi} literal 0 HcmV?d00001 diff --git a/wagtail/wagtailcore/locale/vi/LC_MESSAGES/django.mo b/wagtail/wagtailcore/locale/vi/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..7b2c18d6537ebc006e209932ad194d6a9f3414e9 GIT binary patch literal 463 zcmY*V!A=4(6vXIhkDfjB;6a0>T|tE+#)uG!5(!!HT$aaDUD{1sSojcr&u{T97>JWh z+SksTzUj~D$)RQuv`8F{j3B|_J)&(3(xaF@OAmrv^RPyFgN7jqZ$$`mr8G}Ag|J<I3u%%*`LBH4U9R47z@Stt9 z2aThxGtB5=3}Y5u`p=em|}tOBD>#g_SAo V8asD_=xkfMR@fxFZHqU9(l55niADeb literal 0 HcmV?d00001 diff --git a/wagtail/wagtailcore/locale/zh/LC_MESSAGES/django.mo b/wagtail/wagtailcore/locale/zh/LC_MESSAGES/django.mo index 003a8aaef1009dd3966b03326fc72fd4ec0bf1e5..ed83e47d8f32ab07e3ddbd85c341da19cce51866 100644 GIT binary patch delta 44 zcmcb}dy#iT4KtUeuA!lVp_!Gj`Q$d{jXXYydFiEz>8Vxl52hz{+f?YdE=>br+9MVqSV_VtT5TLQ?u<9k%GrQ`o9l0OO+!3jhEB delta 37 scmeAZ>l52hz{+f)YcRQ(b=PDowkRH-#Ju#<#Pn1vg{1V&li8|S0O8OK761SM diff --git a/wagtail/wagtaildocs/locale/ca/LC_MESSAGES/django.mo b/wagtail/wagtaildocs/locale/ca/LC_MESSAGES/django.mo index cc704ed7d510f8fad869bfa8fe04b4e40ba74102..f68b80e2b5eb25d2d50acdefc3abd9689de18a2e 100644 GIT binary patch delta 37 tcmaDQ^h#*ML{?@?UBk&!Sa47dOQ delta 37 tcmca0d_j1_L{?@CU4zL}Sa(d0WQ*eQNz6+xO-xU7p;lz&ZJU)qe>7|M3sa6W9rIYO#qbDz8)Byn9Q4Apf delta 34 qcmcb_e2IBNE3<{J!NiX3lYJPYczhD`(n}N5Q>_$IOD8X7)CBEzkq#LR4|YdG1Jc{`6!VqSV_VtT5TLR!(}-^|gQlUbHA0sz|<3|jyI delta 37 scmeC=>Ezkq#LR4=YcScBdHZBemM9*d#Ju#<#Pn1vg|wp0Ni5450nT>|X8-^I diff --git a/wagtail/wagtaildocs/locale/gl/LC_MESSAGES/django.mo b/wagtail/wagtaildocs/locale/gl/LC_MESSAGES/django.mo index ea158d485c81d67796729c9f05226e142ce584a9..7348c421560bc45ba3c8617f1ac99ef7270cbd1c 100644 GIT binary patch delta 37 tcmX>jd`5V~L{?@?UBk&!Sajd`5V~L{?@CU4zL}Sa(j2VvFMONz6+xO-xU7p;lz$zJU)qe>7|M3sa6WPd6OL(qbILq)BynAhzv0R delta 34 qcmcc0e3f}ZE3<{J!NiVTll>W^czhD`(n}N5Q>_$o^Cqug)CBfd diff --git a/wagtail/wagtaildocs/locale/pl/LC_MESSAGES/django.mo b/wagtail/wagtaildocs/locale/pl/LC_MESSAGES/django.mo index bb1d9fb4728dfdaf001f85678c8a132e6cb9f05b..d2fd302b3a771923d928d610906140e69046dd25 100644 GIT binary patch delta 37 tcmbO)GGAoFL{?@?UBk&!Shw@|B<7`;CZ?xaDHP;P_F{|PyooKB836GN45ug9Gk zC*2}A^}?|S4sdGWfK;g$)B^~K%L<7L{R224uH3l60U^FW+iP#2LShu}$20!T?>Y0! z&j6%;2rR3@Go#bc;HdS>fmAUS#Sk>4txiE2@FA! zyP1E#1wMoM=irOrS0Ks#03HH=0r!EwgHM2a_GbF_f%s!b@I!WZK5v1KV}2@Mp8-!| z{&xQTCP@B$3_b>a4U+tK;FI9@;8WlOa0~niyo;EZAiRe8ZxANGmf_6v;5s-78j#}r z5_|#t20RQt04YDeg5>8PIrqWX5zG&RFN3E*lD_~}z%3AeEWyt~@FNgg*)5RlehQM` z_j29`$^N(CEchcxdE1Yl7I+Ax{mUTjTLmG))gK|cL zYDjUthKKZ#E~*<1@|VsG4T^0zC_Wlw566Waz(YBqK`~R_D7WP2D|m*3&IO$jikk-I zjaB%_==f4g9vH47$$P@Oe)0KXf&#+hRaYgEmAYoK9nzG0<~)xJ?kP9v$;dLAmJ@95 ztAv{*f7ua{hk`YLcG zTg#8)z^7^o= zsGX0k(S+qmDhDkh>K9f_ov-=*)XKErzLuLaW8>8w(X}E7;lEi&Zr6u_tS36GnX%bS zReAs;wKLrivuD_U!N(y;*FCx{2sYrz1tL%~#=N(oH0e zY;|6X8$np(Ro~jU-DvFW?9?r(4mM@FyAfv*n?~Ho6V?cGeT~?z&tGiRD(6?uFO~Ud z)ti+Cg^L)$&3=q{t-Nj%t=j3z?k=%BxWkhk*U}`R6`m>^L-9t< zhr~wPNFl$glLRhGgnJBy!!x7MQHIOq+7;yv?jrggccr%ShTymrIJHJ@2`*yMg%aGk z@;az9Y%W9x!+NP@$+#-?#cp#Wiz>0YyoQRM3wm*?INiqPGCSpM&lgGqi}?*!MWe|= z@l@Guif^Rtp&x7_!r%tJ6)i_)Jx4@Xqvk^|BVA`sUrT~*#Ri{+Ht4Cc#bVzj5pE03 z<`d%^;?q12kGiU;>SbRu+Z10U#r zz;*z)2e;FPMEz)R&n6)vinaszmck>KgWj>UsEK4*;ZxTn#L%B28Tq5~>+1$jQ!p&gFMIzu!5t zzph;R8AE#o&r5igFJUYW{smII^blhofS181!GFNz;EIPCOMq*@r@@`zGvNE+3!nj# z+=*!YJopsGSHS1NDUjrT09S#(fy=-@!NXNRyvPra#wqYojJHPfS#S%+ z??&q?**n*cFZkd9QXl}mPSiYB_2I2P3yycm$u;WgsA)G~>H+7wBT(|Pxh%jA7 z!^HuVE0)I{FY1hHrpsN6>%tJO;BFCd)TMh_Ur{p)qA`)igk?FR*?fJ*v|Q|?A+f ze!b+D%tD>WSKaZBk|EeGh&yg0R)_7?jtI6F0q2VmninnGu5@t|Ns6M3lFr*QVx*_N z^FvSAl_AHq;WF-Il9+5`Ij!I@l(wP7Q8Gh^8J7rnc;;F6aP2C&Rl&V5d85BoK zWb_WXZbgOMmh|RL8&tH|F3oY3oUNITp}Cfw=I>~>!QZxq4N>8l!x+4Q>3nh6I-1B^ zBRx11+rbTr|Txza%qXe7(wE}djK86_!cL^hJP zmyE}D@7&$Ln1ED5jrCc$c_!kjl(9iq9CedrLo1ovaN0H75pH&0ZimvnC`S$t3R~$n z^OlY?lIGpRCASf4n%iD%!0>F%P${Lq7 zbgAQyqdO(P!)mxTBd1%Wo4-Q$P?&vi1$hB(ufpk+obf08GaTM)a?U?47brr1g8dJP zPyI;_jVU?pj|EzjUEDwAPtdkb${ISbEvHH5I$X_1uKcqk;!m{r>}B!`c_WPAKf{7k z1Wq19alt3t;K?{ofX7&>`RT@D>YbTf#ye$DRpzag*qXK^fMS`rsoT7b)ManNv1ulke0 zS)#kw*c^((5$O#DN4AO!?SF#NRVdA&u%9CgI&$-Prf4pj3eMsUIVY>l6L5pTYZOTp zSLlxG!X#ZY#Bn;@9`*=-@>*nRhOQMwj92tcA;+yLswQ|)!Bg_*pi;GnC$HTw0e*qJS)PVp1 literal 0 HcmV?d00001 diff --git a/wagtail/wagtaildocs/locale/vi/LC_MESSAGES/django.mo b/wagtail/wagtaildocs/locale/vi/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..ce5813ebae0235ba9cbe1ff6fd73c5f722c491b3 GIT binary patch literal 463 zcmY*V!A=4(6vXIhkDfjB;6a0>T|u)HF-C+)lt{>m=dwJO>e6o7!or8}dwz>=!AP8B z(!O@y^i97{Pqr1r5%LUqjyy(QAxlKaEnYTpEj51_TJs5sr~N4%gLTSiK|W;arOJX4 zhBaH*Qo$7SkhYy=60Z!zsykRHYKNqP|EnuiU_n=}kbcq{5rm4}?8kd9!bO4EP3 zh;r23h(^825y7i;p2k*cmq~A|ATQEpSiTSHSk8)lK9>F3u$5w$!Jt3r9{wP#@t|Y0 z2aTg`a?I#q?OC2lrCTJKOY6Y5-{T&Q4!ZKe8CcrYiJ2;$3KC6}{~K43l?sO0(#nkX Vj9oZEbiONHJ8Y5tw#{2X=#L4R!zk delta 37 tcmca1a6@3jXBK7)U4zNrSawX_%^JnylbDxYnwXwyrBIczS%l4n2>=?D4S@gv diff --git a/wagtail/wagtaildocs/locale/zh_TW/LC_MESSAGES/django.mo b/wagtail/wagtaildocs/locale/zh_TW/LC_MESSAGES/django.mo index 45d304e3dde812aa6c728482241f7b7ceac76af1..98ace8e95ee5674846bff9e76b40277aaa703d08 100644 GIT binary patch delta 16 XcmbOsG(%{^L{?@?UBk^&SX-C@EwTj& delta 16 XcmbOsG(%{^L{?@CU4zY2SX-C@Eu;ko diff --git a/wagtail/wagtailembeds/locale/bg/LC_MESSAGES/django.mo b/wagtail/wagtailembeds/locale/bg/LC_MESSAGES/django.mo index 47f0416d2823e87a8bc274e009a340d45a2381bc..323e908a0a2f7a716b676b72f346ca06c4af1c9d 100644 GIT binary patch delta 16 XcmdnMwSjAc3=^}ZuHj~RCP8KZC%Oa0 delta 16 XcmdnMwSjAc3=^}3uEAz`CP8KZC#(a* diff --git a/wagtail/wagtailembeds/locale/ca/LC_MESSAGES/django.mo b/wagtail/wagtailembeds/locale/ca/LC_MESSAGES/django.mo index 4843837b9eba02da9ae6ed800d73a39c29fd1d34..d1f0473ac64281b94695d0b065f47f9178d9559e 100644 GIT binary patch delta 16 Xcmcb}d69F23=^}ZuHj~RrcF!$EWHG! delta 16 Xcmcb}d69F23=^}3uEAz`rcF!$EUyHk diff --git a/wagtail/wagtailembeds/locale/de/LC_MESSAGES/django.mo b/wagtail/wagtailembeds/locale/de/LC_MESSAGES/django.mo index f7d7daafc7ac764f1ff0e368d18d8a6aff09a771..987ad5198bc969a5708a44adaee72e3da91592bb 100644 GIT binary patch delta 16 XcmZ3-xsG##3=^}ZuHj~RrhX;>C|v|R delta 16 XcmZ3-xsG##3=^}3uEAz`rhX;>C{F}B diff --git a/wagtail/wagtailembeds/locale/el/LC_MESSAGES/django.mo b/wagtail/wagtailembeds/locale/el/LC_MESSAGES/django.mo index 6d451a76b054ce6992ea6e547d53516bd84289c8..f5401b8a9376ff9e0b3d1d54edfa97c118627cfa 100644 GIT binary patch delta 16 Xcmey&^_gpf3=^}ZuHj~RrVwTTFd77o delta 16 Xcmey&^_gpf3=^}3uEAz`rVwTTFbo8Y diff --git a/wagtail/wagtailembeds/locale/en/LC_MESSAGES/django.mo b/wagtail/wagtailembeds/locale/en/LC_MESSAGES/django.mo index 3b83aafe9592d7c5b0c594c842cfb42927c900a1..bc5cb168813aa46e8370092f67bf4f0a2c860d89 100644 GIT binary patch delta 13 Ucmeyx^owaiFSDht;lv5A04MGRy8r+H delta 13 Ucmeyx^owaiFSCWN!Ndu#04L-Hxc~qF diff --git a/wagtail/wagtailembeds/locale/es/LC_MESSAGES/django.mo b/wagtail/wagtailembeds/locale/es/LC_MESSAGES/django.mo index fab6575b9632e4747b92f25a1576b5c389767d03..477dea00e1f9fa2d8a1d65807752d2fed53caf84 100644 GIT binary patch delta 16 XcmdnUxsh{&3=^}ZuHj~Rrb$cyD7^$l delta 16 XcmdnUxsh{&3=^}3uEAz`rb$cyD6a%V diff --git a/wagtail/wagtailembeds/locale/eu/LC_MESSAGES/django.mo b/wagtail/wagtailembeds/locale/eu/LC_MESSAGES/django.mo index d2ae4a35fdeab2602b7368a6ef6f71723cc8003c..8ae887c65a3fc764a4fb74bf22ed2b9f136c5bef 100644 GIT binary patch delta 14 VcmX@de2#fSE3>7p;l>U(MgS-x1kwNi delta 14 VcmX@de2#fSE3<{J!Nv|ZMgS-l1keBg diff --git a/wagtail/wagtailembeds/locale/fr/LC_MESSAGES/django.mo b/wagtail/wagtailembeds/locale/fr/LC_MESSAGES/django.mo index 5f756ed8c57df9ab8ffb7d98168220913de6976a..024b7281a21daa34842eefbc73c439c9f1080943 100644 GIT binary patch delta 16 XcmZqVY~Jh*+?t0Fd9wZf)v$`YwS+!ZqwcN z?C=Ymx#be&kPnD*Nsek>XRVE=h0+l)_F(v=>WEEte__(b23BE968fN8Zq};A?HoaVZrol`m*z z8rzGME4n>7q(`zE(y89OkoluN#EJJx=Wh6al4#UgG}$R0gq|U`EL17v?Fwn3c0bFT zInHVzfH-HRsbq9Nj6&NJYaYtn$A?+`y;!G=PU#2EJ*#psmD*SzAGus*@m`a=cxF-> zOun1N`&QT^IKBg^l&+1&U&W&v@pw$*>*?0^)zNq~LSQ_VRt3@j#ElSlBi-7%I>H*< zW9Q?UW$nFccDsQP!O%9d~C6?z=bO?49jI&V0acqUw>G(p!* z-U#k#W6$!>s@$ZF!uvW+lI3za^r4hm$Vtdfa7p0=Tv8{?e(AHJ$yVrK8f85>Bbd$!LJA>%k^;1K&$>6k5lbQ-fmJ{r; zWfJH4oQ;+3eXQWx5ES8%Xu++qUs9%W_l0PT lnIR7cj(;kgI;__+g~3Br{8eYOo~s_>gtTe73QxV;{{{TDZqWb$ literal 0 HcmV?d00001 diff --git a/wagtail/wagtailembeds/locale/pt_PT/LC_MESSAGES/django.mo b/wagtail/wagtailembeds/locale/pt_PT/LC_MESSAGES/django.mo index 0236ea963d4debabb4901e8eddc0dea6cebf0f36..af4204b6ff695bd023404155cbea3c44fcf091c4 100644 GIT binary patch delta 40 vcmZqUY~$RZ#Kdf=YdBezshr;@F)zI|F+J5vp`au_AY}4vrumz_m~9vV?kEgC delta 40 vcmZqUY~$RZ#Kdf&YcN@rseJMprg{86iFxUziRr0U3I!$c0U?_`nQa*X_KFNl diff --git a/wagtail/wagtailembeds/locale/ro/LC_MESSAGES/django.mo b/wagtail/wagtailembeds/locale/ro/LC_MESSAGES/django.mo index 1dd734c80f1a8d7d923f7023363a475aa29ec1c0..9499e0712f9c99fa645f061172da5275ce3540dc 100644 GIT binary patch delta 16 XcmaFP`J8iu3=^}ZuHj~RrV~s6FMR~( delta 16 XcmaFP`J8iu3=^}3uEAz`rV~s6FK-0p diff --git a/wagtail/wagtailembeds/locale/ru/LC_MESSAGES/django.mo b/wagtail/wagtailembeds/locale/ru/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..11d87fda8315447e0120450d04b84b624213c2ce GIT binary patch literal 607 zcmY+B&2AGh5XYC#!=6yj9L#~LQRUc9mnt~fe$t9SQle-J2QHYz-556Z%Jz~X^+L}* zA@LrF6OWNR06YuhEVN>zpFE!Z|7T}*f3MyB7D3zr9s&t)59k9S-U0Uk0R+ty_;o9a z3OFACFK*ZMw{SxFI)WBTQPk5;S|6Q``q9vu4|42rZ-QS->y*(Py%D(=s)$FjG}hyR z%hd!QRJp^M;V2%y%J89;!h;w;6JB!EqAbDmDP|0@ZNAmsq>NG!;*tEMLeu|r+bi7@ zo+O(TBJK<4ab|^fh4995^!()INw$x=Q~gnUv6s(an&#Ndc0j80O5_q}Qp`9SRn94) z(ZG@c6Uq)$(?W8A*cg%_Sli;wi!Oq9+!YQIj-RtME-x}hI4nx+h`ucMICM=5;GT|^Pc;l7i${yplZNk~@?+GP}7T+|lO&<1!I ccv_8494)>szbr2o-xog?KbM!wtJN?61B*zfzW@LL literal 0 HcmV?d00001 diff --git a/wagtail/wagtailembeds/locale/vi/LC_MESSAGES/django.mo b/wagtail/wagtailembeds/locale/vi/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..cbd4a74bc9c23efbf61d351f256cb716267d4417 GIT binary patch literal 464 zcmY*V!A=4(6x8TxkDfjB;6a0>-Nl%th%q80BoYZ(@m!Y2QnTA`+QQ<8=;!$@z6FIi z$)vCCyy=^MpPhalA&!yf$P45N@)}tqMtEjzT(twW>}3 z=~|SxNEC^v-QbAeSvpS>E49m|H&ze_RxUsl0#qpnME1d}v&y?SfE67>}<9uahP6x&o TP7qygx2_v@$gb@2PH^-C$DE2N literal 0 HcmV?d00001 diff --git a/wagtail/wagtailembeds/locale/zh/LC_MESSAGES/django.mo b/wagtail/wagtailembeds/locale/zh/LC_MESSAGES/django.mo index 321a4565c899d34b6b4d9e2b7aa53f1b05d01d32..aa7da521696242e0c22191a574f550e2bf7c15d2 100644 GIT binary patch delta 16 XcmZ3@v6^Fp3=^}ZuHj~RCLSgLCgB6I delta 16 XcmZ3@v6^Fp3=^}3uEAz`CLSgLCes72 diff --git a/wagtail/wagtailembeds/locale/zh_TW/LC_MESSAGES/django.mo b/wagtail/wagtailembeds/locale/zh_TW/LC_MESSAGES/django.mo index 298bbc5de794c0bf0922620be111fc87daeb71b8..6ee6f5f54f1950ecb8e22f315748ae3e0db442e9 100644 GIT binary patch delta 16 Xcmey&{+WG)3=^}ZuHj~RrYnp9FvJB0 delta 16 Xcmey&{+WG)3=^}3uEAz`rYnp9Ft!B* diff --git a/wagtail/wagtailforms/locale/bg/LC_MESSAGES/django.mo b/wagtail/wagtailforms/locale/bg/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..d615c640c797a13810b53054e5d3a2c02f241d24 GIT binary patch literal 463 zcmZvX-%i3X7{xJqwM(zPsEHR4EZq>zD9*^Ak&tXkVCZ!jrPPdeX*-7x!t41gc4FYh zlbp0oe>vZGzArEKHLEl0E9)EUbL(5{O1|~pes=9yF-J|6{Gh3UlNEfUN^>bNcqhyd zo;fp`OJ!iJ8DGIc!8A-H2F~;~fkQ=!u`nDFLosN(UI)5e=y||pND1YY`a2p+?@KZ&0EqtPs!&z~$RSV0(t2_;($ z21Uk*;zWS@#+V!4s=VaYlrZkZej|==tv`qh_>ATO584$uv$RMb6|U!2`v>STi1iVHCApuY=t#_B`a>(Hp<%dai4Yc*;I` z75b0wmUh}r*UE`N8=NQ*ItL>aMWcBXq33=aqWduJkE6%_a5xQTvj=Mx*#mMv2S@g>`~Qn@C@zMm!qDfhLAeXz?QDUgN}kK^!I-D|ndKnlZz zo#?Bu)ePGjQslrz52Y(mnwempjIe+7RUa;y!l6jzf{TnI|DBt|tQ4i-O!AF_9FL@0 ZYl=j%JL;g_L;Gz|7w9rTUZdyK{s7o;gl7N% literal 0 HcmV?d00001 diff --git a/wagtail/wagtailforms/locale/de/LC_MESSAGES/django.mo b/wagtail/wagtailforms/locale/de/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..72d13d26ffa617d03963c931af58f36d721eecfd GIT binary patch literal 460 zcmZvXQBT4!6ooPRv`3$PxF$Y8uyjK-qc|hNFeIB282VhdGG?}RX^X?ZVdCHOx7dl1 z7f*81HvMw$JzvL1pADk};}hdE<3r`X{Om$<1(iiA3(gOQZel4s=V5hKDdB%2Z#damPRR7bnC#o^EJ;NSDN*olFQ zZ}O&X`sDq-_xt$ht73IvePVrPeQ14dUCOuqw4ZHzmds9LC0`*icr?dPpfs0)qGy&G z#xrLExl{&6I^}bGw@x*VB}LBoF~)rb%vcx?m;s8KuGhkD8+#t|uIPndcRkm&AfCWG zFGK&~E@`V-cdeX|X@g_MgwB|eilX5x4ADa`3ea^B^+w@sZ!nky)9H;xMY?7w;27A7 zqI(7KhN??ra!N>16b)0x@C9rdiCmF<+fI|56x&iH`%55@k(v{YqF`U#Yq(Bd3IoFK z^O4(P1~!J|8RMdZk|k3bOm`L!vA^fafeTPL5Q&^~ky7NpaI@Q#BFLO^wpJ{|L#bAp YB9Z?-b+_3;+iSNf&}kQWwT@Hy0mEK{xc~qF literal 0 HcmV?d00001 diff --git a/wagtail/wagtailforms/locale/en/LC_MESSAGES/django.mo b/wagtail/wagtailforms/locale/en/LC_MESSAGES/django.mo index 3b83aafe9592d7c5b0c594c842cfb42927c900a1..bc5cb168813aa46e8370092f67bf4f0a2c860d89 100644 GIT binary patch delta 13 Ucmeyx^owaiFSDht;lv5A04MGRy8r+H delta 13 Ucmeyx^owaiFSCWN!Ndu#04L-Hxc~qF diff --git a/wagtail/wagtailforms/locale/es/LC_MESSAGES/django.mo b/wagtail/wagtailforms/locale/es/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..f8ec8cf00c182d927f87dbc4e2610cc877602e1d GIT binary patch literal 461 zcmZvXQBT4!6ooPRv`3$PxF$Y8uyjK-qc|hNNJus%F!Z^OGHOPKC`~CKDNHJuH;*P+Rv^%D`u~Wl5Z?EXuLqrOld9!fft$? z%5!JR3aJc=b;cLyVUuZ;NCM8}DM16psIf2_Qo{(eU9W@OF7iC^ZpfA2bUoL#Aeypw zUWNX{U6W3`=~_7v)dnSs3Y}9U6@k$_ir}#yhj1Il{c&{P9}cJCY<6c+k!@(kP{Qb% zz^tHx>lM^j#uNnOvMgJs3gSz)ZKZOJi(NmB3taAM;ruTHGmRTgJdVRdb+6?*11Ss> zcB7BNRx@mCaFJ6kdXTQD(#!<&WQ6b%7 literal 0 HcmV?d00001 diff --git a/wagtail/wagtailforms/locale/eu/LC_MESSAGES/django.mo b/wagtail/wagtailforms/locale/eu/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..a4b3695c3a89afc7ea59fa8b2e9a7f3e9c3bd352 GIT binary patch literal 460 zcmZvXUr)j?6vZ+6v`3$PxF$Y8uyjK-qc|gfMnbYFfuYZJlrb~f*>(=UhKXO#&tfMA zUOdT3+w_-n@A*DG`KlQm8J`(n7#|y78dq|SKh0;?oE5XzREk#?YcyG+Cni-YIDu!H zXqsl$jO9XV6sja$qCt@;6bS;>^f5w1$*49k8d1#%v~8z@>@IQ~aBj$z+q50qHXxd@ z_p}QAhr1@7cGEVp0;)8MB;_ijT1W!pMG(M4KlI_&5BrngzCRkx{Q3OOpgbvP!cfHM zhQNTTw}L@^t#wW?F3Yl|tDJPjwyjufaK5XjaE{AeE1dmBU{>IU6;49`(A;U+)=+TG zxLN2UH_bHLYMf^@bVD?w2oYf67>S-tY6XuNvqCd;z`$pMtNzm3;6ge0Jfin1g0oz4652=?Xt{ZG@5(y|BzO zkvnrw54ehj>F31U)u{hRDnw(jsDVi+95Iqi~0Nn-Aa2nnZ$K!dhSPTG_*_LG-$DC~d z)LbTOR9{4s=VaYlq;NH!%f^jt?NHKkqJ;_!Ru*YmU3iIIyh zd1;&e^8Ww#b$s+$b2@N7aXxcCbUt^k6gq#n&#pTw=1&u?UTJROcmbcNHe5*zo(Z#r z3vWsbr7cVi;|qAVVFqRj18?$}!GWg4Iv5U#r5LpRpacCb3<3~b;ft{82fpt>IHhmA z3jK$>#GQ82ck&WqEX*{KMi8qs2BUeBfQNn>gX=i$kCWT}a5#-;vm1v>wjqqdjFL45 z_eAiV6A9`oYYU7}S(YtZCGjQQwsN&b#jc=11uA#FkoXNjOrVCBj?;MGJ!tvfKuJrb zTj{-U-7MW&R0zUl59BMN4Ykoc8^LhTRRfn)!&v5O!6m~WeBt(QSqzx)CSs$BfFq^X Y1_N3AJWbT@f!#H#OK=*2pwaVc-*p&->Hq)$ literal 0 HcmV?d00001 diff --git a/wagtail/wagtailforms/locale/mn/LC_MESSAGES/django.mo b/wagtail/wagtailforms/locale/mn/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..f1f9b7ad8f93ac9d44a5c57b2b7171336fc54b0d GIT binary patch literal 463 zcmZvXQBT4!6ooPRv`3$PxF$Y8uyjK-qlgh82VgC88utGw8h~M;qUod?8Lx} zCpl@GemVD^@AI==&FaMZ!urbk)cV@Gl5f4UpIv)a%t2EnKUiYWWQksx(p(AxZ!|TO zXU>cjQW+HKlrPcKCeC7pKDwQ@qL4T=>NI-^D^0^>y(!t)>s;68{3lkjmc8qI?F{K29k-O!Ywn9-a- zBtL*^d9URt{S*v3I!sOOD<9Z{yR5^Z3*PUnPwYBGc=Ye Z*91iI`_%n*5BAr7UBG1@yhhKd{Qxc-g@*tD literal 0 HcmV?d00001 diff --git a/wagtail/wagtailforms/locale/pl/LC_MESSAGES/django.mo b/wagtail/wagtailforms/locale/pl/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..797f5eeb1fed6a10f601836d064d309e26048855 GIT binary patch literal 518 zcmZus(M}>U6xFy-^SIAG+=rDw+%he&1`DH$G9)C75*XI!F4Uo$p`Em4(Zt{Iul$Dn zmc2!zFP`M2w>{_H-t+J4m*)e-A@Ugc4S9t8jtuA`Ur;>9GkD%HwdRjpdNN*-U(z~d zG>1D;c%jN@CM#n-$y}jU(pL9Z556`sEC_Fvw--CxX Nu!mt!tI>-N{sUbkkdgoZ literal 0 HcmV?d00001 diff --git a/wagtail/wagtailforms/locale/pt_BR/LC_MESSAGES/django.mo b/wagtail/wagtailforms/locale/pt_BR/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..fb979c238229ef5fc746b5adaf048be05401e104 GIT binary patch literal 478 zcmZut%}xR_7{uslkDfhz2M-V|-9DP2J-%Nkb&%R0)CzcnMmzJlNSC$2Q%WwPGv}d6?V65aDn;SG*peLp@mx91E zO$_C!Ghvxj21PpI3)IUKjbcf_89&CTuNXB}j0V&&0(IAGAh(G;54>A)?N?pTb*&Ih z*gG#w|Iyu$M!o7_C;VcZ{p&JEo7ew7rc;6iiCc$*tu~L!bG+`)a zbWLDv^W{m-G=p+a(NCUMpu93BBN%Tso0=(1`I2pGbGgRZzN^L=-s~&l^v@4x=A}2m z6(<@+!SN@&n(OqXFihBhADL}x*w)}IrChXNzM@Jq)1JjcUO;a`>|aX&;hT~a!S8M)QZvo literal 0 HcmV?d00001 diff --git a/wagtail/wagtailforms/locale/ro/LC_MESSAGES/django.mo b/wagtail/wagtailforms/locale/ro/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..c0b5200f91a791526a1d686f23a80bb2aeed8f3a GIT binary patch literal 503 zcmZvY%}N6?6onOC&C<1t2r4sZnxy{FrcSlCQz&$_)KS;5jbmh*3`uGg`Wiltui~?K z$BJ$|aJaeT;9c+r_z+yF0ser?Ce(`g)ySG>Iq`Tf#dp#=Wi&_k zBKJZS!C02YdYrmkP4VSCcQ`W~1*7W>cdZm2VB8a4a#W}67}F+Z46##w)HtAwQULK- zzNl*GKimmFt{+fPFci+?%nI!a;f>{}e>)tat4^Arvn1^dh8LY)Z=BrRv;o!mT;vjG zQp`9So0-r`XcRtqUvfegi$%>>lhmVptxe2~l&gS_lw`5WMT(yx#2OL>=^#!1va=cu zx<-4cVWqbcvU&OHNm&S`TWInmtdl;z&HA|U$5jtLN{bUcF;k^;jv5cj|1QgsHNmKu zTT$S?u`|b!F27qBAGOfx7>7EJ**WE580tOvzBX${%jHiK$28jC5A_bzC_1lm7DcUK F?F$xWj&1+| literal 0 HcmV?d00001 diff --git a/wagtail/wagtailforms/locale/ru/LC_MESSAGES/django.mo b/wagtail/wagtailforms/locale/ru/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..622e7e9749818d81bda7ff66e4ea464a9fab3e70 GIT binary patch literal 535 zcmZutO;6)65Cy?0$31fxBtTT)+AakZw*k5|l`1t*m9Tp@tqESGc4RwSR^o5$&x7B> zgz|CWNl%`U-y6^K%a6_fYlwB^7IFu0mIwz7_Rzh0=*>dkH#1M!C;!)+?=7*K~v|Q!$w4}>bELyzJpsu2gC>^EAS9IQF z(WNy(8Qkb!iP3_3474nyHeHxKNat0EZ?hrkeCg^3@0BBonc2BExq!}{4xhUUa8)!Z zDklpvv~J-AnDVXl@lh96WxQ{8Ig4WsdwWoqY&*u^JO>6S$NnsCeO&e8c3r+XSdTM! SdRkdf!y4$}=xH^&(b_9x5|kwX literal 0 HcmV?d00001 diff --git a/wagtail/wagtailforms/locale/vi/LC_MESSAGES/django.mo b/wagtail/wagtailforms/locale/vi/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..cacf3a6ac3f1e15140ebef0fb6b81d038405b530 GIT binary patch literal 457 zcmZvXPfx-y7{)Pr+R?Lz9z1BUw8K9cMT`g|A=#9`z;hihqh_>ATNr){Pkuc=i=7y_ z_#{u-roTMz`+T3CeAS$eoX?!kosXTboGS&+pYF5e&WhPhPIGF$TuZ~}bA z&`f}pd<6#3#nRe>5mJ_A!&X^h0oz8ZR;1WfG^8Nqt{KVyV#r32OD`VA;i0|Xpk7Z& z3(_t1QMh&%ww4q*7qX4gCD#UQXPOLfaNw$e3(z=}shSI!F%-NByI+@~jqpbKTJsza VlwKKzWbykn9lwos*A8uawI3E!gqHvS literal 0 HcmV?d00001 diff --git a/wagtail/wagtailforms/locale/zh/LC_MESSAGES/django.mo b/wagtail/wagtailforms/locale/zh/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..d48cfe5e0dd2f6275f9a22b6d4fb39e619f9fc7b GIT binary patch literal 454 zcmZvXPfx-y7{)Pr+R?Lz9z1C9r5*msC}Kny3CX4ehMwyvTg_;fwg~bWy!!S0EOuhx z;*&gSoBr~=@AG|p^i^{@a6WN9bv|^yaIO?Mf4a|>J1b_VkydX!wJ@B)GuK8aNzn_- zEE9z{=B3gWVv~s(JS;NnL6 zQ7;#g8;;I$YfFmpYPD+EDoD)vx{;~{F1P&*F7awx3m1PGc$4FEFCNC>zPjHaUQbEO zrQ7JEbk!_hTU-`Q$TmuIrVY29X)=Id&s78GTtg^RH4`$UD0mfiw<|@P+#3~3%?cPO Uy)YEX^7m;vej9DC9n$t{KTWWMNB{r; literal 0 HcmV?d00001 diff --git a/wagtail/wagtailimages/locale/bg/LC_MESSAGES/django.mo b/wagtail/wagtailimages/locale/bg/LC_MESSAGES/django.mo index bbfc710a9876383413fc2e4b06cac7b1c00568ae..70184a4189bb9c76842126230ab03fd720049982 100644 GIT binary patch delta 44 zcmdlbzDs;VA}g1ruA!lVp_!Gj#pG<(%{)GddFiEz>8Vx ANdN!< delta 44 zcmdlbzDs;VA}g1Lu7RO~p_!Gj<>YME&6Bm+qIi4~^U_Nb(^IV!lF~P~u$i#}04g&L ARR910 diff --git a/wagtail/wagtailimages/locale/ca/LC_MESSAGES/django.mo b/wagtail/wagtailimages/locale/ca/LC_MESSAGES/django.mo index 08f5ccfdb24238195a61fd5b769b1c32475a3f2f..f4fe7e02f00652b1a393e2053ef9a0b953f88eef 100644 GIT binary patch delta 44 zcmX>pd{TJBDON5^T|+|!Lo+L5i^*45H}d!-=B1Y=rl(pdBqvU8VT<1UhV3pB08n@j Aod5s; delta 44 zcmX>pd{TJBDON5ET?0b}Lo+L5%gI+*H%^|!7RBR}n3rCfn4W5-kes;rHQPNV08>5> AsQ>@~ diff --git a/wagtail/wagtailimages/locale/de/LC_MESSAGES/django.mo b/wagtail/wagtailimages/locale/de/LC_MESSAGES/django.mo index 0cb48f45d6ce9096e06ba9f8879b85472e50427a..5d844d6ea79f682e5c8380806fddf22124238cbd 100644 GIT binary patch delta 44 zcmew+@=avJDON5^T|+|!Lo+L5i^*45H}Lo*=B1Y=rl(pdq@+%6W{ckZnys4|0AE)R AssI20 delta 44 zcmew+@=avJDON5ET?0b}Lo+L5%gI+*H%y+$7RBR}n3rCfn4W5-kdnIj6w As{jB1 delta 44 zcmew;@lj&KDON5ET?0b}Lo+L5%gI+**H50n7RBR}n3rCfn4W5-keajkC0hq80AZOA Aw*UYD diff --git a/wagtail/wagtailimages/locale/en/LC_MESSAGES/django.mo b/wagtail/wagtailimages/locale/en/LC_MESSAGES/django.mo index 44e531ab019284e5fdf8b714d7a9c44a10e406cf..bc5cb168813aa46e8370092f67bf4f0a2c860d89 100644 GIT binary patch delta 20 bcmeyx^owaiFPEjRp`n7InU%4{#OaR#OKt}r delta 20 bcmeyx^owaiFPDX`fuVw-nU%5S#OaR#OIimW diff --git a/wagtail/wagtailimages/locale/es/LC_MESSAGES/django.mo b/wagtail/wagtailimages/locale/es/LC_MESSAGES/django.mo index d57e9c728866a7e5d24b583a515be062387591cb..fa88662ccc78788bfe840fb1508515798042ef8d 100644 GIT binary patch delta 44 zcmX>pa#Cc&DON5^T|+|!Lo+L5i^*45H}d!-=B1Y=rl(pdq!v$ZVT<1UhAoyE08p0? AGynhq delta 44 zcmX>pa#Cc&DON5ET?0b}Lo+L5%gI+*H%^|!7RBR}n3rCfn4W5-kXpR?HCr4r088VxXH8-P04hrj A<^TWy delta 44 zcmX@ee~^EJ9SfI*u7RO~p_!Gj8VxXG*&67RZqIi4~^U_Nb(^IV!a`QGXVyk5V04zTZ A?EnA( diff --git a/wagtail/wagtailimages/locale/pl/LC_MESSAGES/django.mo b/wagtail/wagtailimages/locale/pl/LC_MESSAGES/django.mo index c586dfedcef2e0728b37b6ff3fbb76f8795f838c..fba4d29c3845e53446b46ad3fb881f1bf09a1c3d 100644 GIT binary patch delta 44 zcmZn?Z4%vZij~V!*U(VG(9Fu%V)7N%4Lm-HdFiEz>8Vx<1v!(O*`hbUW}D6o06CQo A;{X5v delta 44 zcmZn?Z4%vZij~Vk*T7K0(9Fu%a`F|{4U;FbMe+C~=B1Y=rl(pd6y$7v#WsT(06Xpu A?*IS* diff --git a/wagtail/wagtailimages/locale/pt_BR/LC_MESSAGES/django.mo b/wagtail/wagtailimages/locale/pt_BR/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..f5a14804700a35ffc19c5478286ddd48b72be074 GIT binary patch literal 4518 zcmb7`TWnlM8ONs(ZZ72#uH{k&Lx`PtZ)sZGjg#Occ55jY%ih$gXcdk3%$}X-oHHjg zbG)|8MNsjAgw#G%MLZ=c52Q2_5(tT#5LyX%C;}wZB9QWc5DJ$^MEe5b|IL}RyG~Rj zMjrpp%zQKR&G&sX-`?E6?^%ZO5b8%z|9lr?7r+a*%cY@y!{5kkuv|k4A2LBGe8GIF_b^iml!MoA<4saQK3wROy z0Qdw56<7h{kL}_g$$crbp9c4%{TxX9yb$=)F#bD`_W2`7`rQIE@LwRETVgZn|1yX! z_B2TH&w==3-^4%K??v!k;EzC(e<|<}Af5LXNP4~o(mMYR6AGIb`3jfScem;J4w^e}Wrm zU&SEV=QWVdaSsmpZty;k?9c?8;5m@a`vs8f`nABTAkF_SNaz10h$FI>L;EIp2JL@< z6c;TBK{d7n-V2@wNxl!#IdYKn9fbB%;0MwEDoA#EKJW)1&HFV-dc6XY{(k|V0$&A5 z|0gj>{a**kUe`hL%ZO8U;AeiZe? zsB}Im52AkBf0eO!D16U@bExz_P{EPd$55NpKq0$O!I6BSbCOS}kWDCF5I*byREnXh z9LC3|P>-V4P!FI|nMFN_O7TVS7(#))0hQusRHpbu>GY+MTv@I&$y4FF{n0QReUW@A zC?I@brmKt0Ni%E98Pbj<*LYq zr+Fk3=_Gf3Xy|26veSK$#bIU}Ev>EOg7>t6`lEKGLN%Ughm!`qPA5`S-)H;|tV9?; zV?>NoL_9J&4?1#{K_9OOj37w4B2To4FrLat2`7`CI$Meq6eo3avH&$z7FR6Sf(4y& ziJY};StXMG!J6!0nMor^oL^i!%N~&`?mMJBuM38kU{c4#wLOiK2sGt2$qWbzsuMn>ALwIes~pG1rFYP^|}z`9Qfo zPAPd;8zZ}}?3LS2W>)Ep&m5}ziHGW!b3gM?9dl>v?1JIl(qlcNQ}Q`Fbeb1rfD1;& zDiaB}YFDyVm^pK7Rp&(lZ#fZLwrb>-k^{CTNrZd=b&`o@zcku-JQdp$!>P(9S_2ii zK3f-ClC2{ky7=}e4Pn_j4!1MMGaWk0Xy?-lGCgr%=1L*W&L!&%95!ng8t9y^ri94o z2^b4*Sa-q|mUZX|xJTu3ICqgmSl#hW7!olBm+`3Z$CAcqW9zRcZK3m>vJ_LSvy)3k z@pI7!0YE_-fD6{`N^5&XGWN5Vo48`7cLh&1E~ChE+yO)3&3(|$an<9Qq*a93sq@Eh zZBwzsMPete>-dZ*t~p%|nnn>5OfwKRJLtHPR|;jwMjPH4k4ZZhEu9a{P_5PCtq0rp&mV5KnoS7S))1|<=pMQGTI&dJw%QLg4>wV!&I;>l9V0TE2&YY( zKb(lj;u0;y<;SK`PJbp&aj-h>$_dQK;sRH-){!D@^Hr!>#D&CtojGO1u1aS4Oy9Y@ z-DnI3gSw-&RZniy>;~LPN4AZ;5vbBa<*`a69sba#GZAtW1|QYk;R~=+%DZ@Z<*wj(E)dvO zUKY4hBF1)jg{%EevX0T+Dkr6Fwq(0H=?gkznb`D1S2b(Yr3?7DQvIw-^U+FdX}g=? zhOxzR&+0VBAnGKS+-l^Wa%x673+vF$=EG~0f!(;}`G@@Sa>X~hUnXOQ(d60W{2DXM~xvSI_hBsW1Xx34=_8EB5Rqj}#s5I6?X@;1`~qaU>1 zJh+y7mSkru_o{R*EEb-*QXWUdPk~Hk{qZ|m9*mwoFZ2Io>gsW&#YC))C^Pnd0i(#r A(f|Me literal 0 HcmV?d00001 diff --git a/wagtail/wagtailimages/locale/pt_PT/LC_MESSAGES/django.mo b/wagtail/wagtailimages/locale/pt_PT/LC_MESSAGES/django.mo index dfde945b64a955cd02c5e0512e281a45be5d6caa..3d67f19d3dec1531c9b51877ad3f30946afd04fb 100644 GIT binary patch delta 51 zcmbQEF-K#=bZ#z7T|+|!Lo+L5i^&VQ3;2B!^U_Nb(^IV!3QFPwLM99F%%A*`M`ZJ5 H9#3`vq!kd* delta 52 zcmbQEF-K#=bZ#yST?0b}Lo+L5%gGD53nnY_%oFfQ%u6p#Oi#5^C@6^!2;rLikw;|n IWgbs<0J4k_>Hq)$ diff --git a/wagtail/wagtailimages/locale/ro/LC_MESSAGES/django.mo b/wagtail/wagtailimages/locale/ro/LC_MESSAGES/django.mo index da519e31af6c2448a9ca209e6cee3f4075594a8d..e0c687ab37746e20f308e9221f0b4eb927b80298 100644 GIT binary patch delta 44 zcmZn?Z4%vZij~V!*U(VG(9Fu%V)7N%O*}q{dFiEz>8Vx;M1& delta 44 zcmZn?Z4%vZij~Vk*T7K0(9Fu%a`F|{O_L|HMe+C~=B1Y=rl(pd6y06c0A A_y7O^ diff --git a/wagtail/wagtailimages/locale/ru/LC_MESSAGES/django.mo b/wagtail/wagtailimages/locale/ru/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..1df85f54c69ef3542369f047846bad4bbc5ea762 GIT binary patch literal 3421 zcmbW2TWl0n7{?EY3X6&Y-oVSDrnC*6-PyL1y6v_|f!GM4fdUdW&2;y4cXT?l%!Sg3 zq!bAdB#lIai6LGf#s^83LZKHZPbT_ca^}Uziw_!KeDuLL6aU|tX({#sda^UWbLM=v z^PTUU{bl8nPZ%1<^Bg^k7~4Qxj2GJX;9KAi;3MGr2N+uh)`KLM1s?@Xa0S>G^8~mW z<8$D0@LQ1dN5O}|@4%YVa)hJU9W8+-;EjFG8|j0vo_e@C}gid<4vbpMel%w?Q5J6|4nUC8F^r@F|QB zfMoY%%rZ#+eg-LTe}VY1Wmv>Ia5dNqZUo8xMeuF#5@>+SkxbI-1s?|oK+5|^;5G1T z5X)Dwt^!FmE(w(<4A~2K*5Y}B252whp~ri7-`uSc1=JokigaZhG9Y1@ATdTyc7OEX zuzlgyc#($i?&!Rl&vV1(X0K5Yj0SNJdi_qoy&&%N8Me=Thv$VQe8K%9LQtZutgUF+ z1;j)qG8j3IC%D0T92fCTkEeW0&D)NTrNr*qEMZLbw?rPIIJV|Z-?R%XW+aXk`KE7) z8jo!=Ey3E!Gp~A2f4_mLsINLGh#RHFZIHkZs zc)n5a*ly#XV7n1*t{5ZI!Hna&{k7b7;tx@-c}276ZKk!m-iGwB?y-Ti9(;@eArlEd=j+WSN zc)r%@8n$N{zT;;2>xOIb*PL!k^z-I-G1!F9xnj3-D4BD5TcBVU0@RY$DU99>-xYYC ziNjG{^!-vMmFny3OZsHa>=8;MRf<;WrAnzdK`AS?k#d7nO=3s;j;(hRkWT7}HU~%1 zMqK?REYKH+{8Y&@OuLEaiiYb6Kf9-Mo7Q+ojvV#~SKDgmoII*0!yCIze>&C-cY{QS z6}X0_ZNriCGTbhyp_i?1;!!tSZC9rCY&Ol;ujka&*JY8@R<3i1W89Lho0@9QHc(e- z=*?-JA3hwZKt`{DP8vFOHBAYYkmqGtj>)TXMBbE>Tu!1(o$x5S!}1npqq$KzGD~{q zwKQ8H9Quz6a*WB3;r23|4$IMSF#M3qQF)y{g#-9_O+`tO+_&7>@H7vP!Q2QeV2$DF zS{|MV2Wg4N@rBS%Q)Dm+Xq=(d%~PZ7?ID2xT-%PI(GH+%sM9EqpIwmjN$6}fM0_&utjH@gSsDdb?I@AU%Fga&v z;n0jbUtWaSF*y zRe3(n*l?7kc@n|o=Wu%q(N2Uz*jyAPRUpa`TRY0+m#CEEwCQAp_Aycz#St5y(Vf#e zogu1GoS#Trj?{7-W1MTMcf5zfQ?Pn`9&HXS)YeV4KU25DLVtkrtME(|_9d(UH^`g^ zHa2?$5#SJqgB(SAT9v4}H?FHXQx_1_HN;=WRTQ3tvCB{y$5#G->(jZ6uekXT|u)HF-C+)lt{>m=dwJO>e6o7!or8}dwz>=!AP8B z(!O@y^i97{Pqr1r5%LUqjyy(QAxlKaEnYTpEj51_TJs5sr~N4%gLTSiK|W;arOJX4 zhBaH*Qo$7SkhYy=60Z!zsykRHYKNqP|EnuiU_n=}kbcq{5rm4}?8kd9!bO4EP3 zh;r23h(^825y7i;p2k*cmq~A|ATQEpSiTSHSk8)lK9>F3u$5w$!Jt3r9{wP#@t|Y0 z2aTg`a?I#q?OC2lrCTJKOY6Y5-{T&Q4!ZKe8CcrYiJ2;$3KC6}{~K43l?sO0(#nkX Vj9oZEbiONHJ8Y5tw#{2X03HuCr+=B1Y=rl(pdRAo$F#~Qs^j4g->0AfZD A4FCWD delta 44 zcmaDM@Iqk27ZxrHT?0b}Lo+L5%gO&(HcsBd8pY$2n3rCfn4W5-P?fP+lr5ME0A{HV A82|tP diff --git a/wagtail/wagtailimages/locale/zh_TW/LC_MESSAGES/django.mo b/wagtail/wagtailimages/locale/zh_TW/LC_MESSAGES/django.mo index 442bea2b6649cf9c16559d54c72435af4e254005..b68c3190942fa2d65198f56a10152505de9405c8 100644 GIT binary patch delta 23 fcmbOtJVkiJDON5^T|+|!Lo+L5i_KS94=@7&Rf-22 delta 23 fcmbOtJVkiJDON5ET?0b}Lo+L5%gt9<4=@7&Rdfd$ diff --git a/wagtail/wagtailredirects/locale/bg/LC_MESSAGES/django.mo b/wagtail/wagtailredirects/locale/bg/LC_MESSAGES/django.mo index 17da54257f0f7a5b4ace6f4b6ab91ae24c048361..ed66755d4c58aed690a44578f2207d024fd33fc7 100644 GIT binary patch delta 23 ecmeB@?2_D2!pdc-YiOuoXl7+>vAK?whaCV+1_ieO delta 23 ecmeB@?2_D2!pdc#Yhb8gXl7+>xw(#&haCV*@CCL2 diff --git a/wagtail/wagtailredirects/locale/ca/LC_MESSAGES/django.mo b/wagtail/wagtailredirects/locale/ca/LC_MESSAGES/django.mo index a9543f66d7170503021139ae53668f87bbf648bb..0f1661705e10bbc77c9b891cbacac4ed8eb3c983 100644 GIT binary patch delta 23 fcmX>gdO&o;ZB{NzT|+|!Lo+L5i_K42Z?gaZUmFLt delta 23 fcmX>gdO&o;ZB{M|T?0b}Lo+L5%gs+&Z?gaZUj+xW diff --git a/wagtail/wagtailredirects/locale/de/LC_MESSAGES/django.mo b/wagtail/wagtailredirects/locale/de/LC_MESSAGES/django.mo index a698340c836120a3cb9e35ec7e9835d9bb26cf82..26f329cbd67a320da59dc316aaf135be1cf52a1a 100644 GIT binary patch delta 23 ecmeAZ>l53sil53siZFIE6jpay^d diff --git a/wagtail/wagtailredirects/locale/el/LC_MESSAGES/django.mo b/wagtail/wagtailredirects/locale/el/LC_MESSAGES/django.mo index a7530f4bf5f33bd1ebd9d9ec16d8afe42166b2f4..0fa55a9fc0aead5ed23f8572369272119e81df71 100644 GIT binary patch delta 23 fcmdlZy+?Y(ZB{NzT|+|!Lo+L5i_K42ud@RHUt$Ni delta 23 fcmdlZy+?Y(ZB{M|T?0b}Lo+L5%gs+&ud@RHUrYzL diff --git a/wagtail/wagtailredirects/locale/en/LC_MESSAGES/django.mo b/wagtail/wagtailredirects/locale/en/LC_MESSAGES/django.mo index 44e531ab019284e5fdf8b714d7a9c44a10e406cf..bc5cb168813aa46e8370092f67bf4f0a2c860d89 100644 GIT binary patch delta 20 bcmeyx^owaiFPEjRp`n7InU%4{#OaR#OKt}r delta 20 bcmeyx^owaiFPDX`fuVw-nU%5S#OaR#OIimW diff --git a/wagtail/wagtailredirects/locale/es/LC_MESSAGES/django.mo b/wagtail/wagtailredirects/locale/es/LC_MESSAGES/django.mo index ef1d3a7bf7f00af4c3f984e4cdae5074913c9158..edcc7381ba57941d1de242bf75c02a3868ae63ee 100644 GIT binary patch delta 23 ecmew&`bBiZZB{NzT|+|!Lo+L5i_K42`B?#GbO%xZ delta 23 ecmew&`bBiZZB{M|T?0b}Lo+L5%gs+&`B?#GUI$SC diff --git a/wagtail/wagtailredirects/locale/eu/LC_MESSAGES/django.mo b/wagtail/wagtailredirects/locale/eu/LC_MESSAGES/django.mo index 059c50fbcbe44a6c8657c4027253b45a2eb08478..57d9c5ada9411f06e980beeb93119e1115bfc22b 100644 GIT binary patch delta 21 ccmcc2e3^MdE0?9Np`n7InU%4{#(oz@082&&MF0Q* delta 21 ccmcc2e3^MdE0=|?fuVw-nU%5S#(oz@0823jL;wH) diff --git a/wagtail/wagtailredirects/locale/fr/LC_MESSAGES/django.mo b/wagtail/wagtailredirects/locale/fr/LC_MESSAGES/django.mo index 5cc019daf363e6a2c29832df7a25de3c871bc735..83f4da26e7fbf278933e5b446c2efe7f18d420ee 100644 GIT binary patch delta 23 ecmca4a!F)E1}m4PuA!lVp_!Gj#pWW`2P^n&R2P^7meJ_3FK?gg*s{1Lnt{og^__fPO4@Fqy>ciz?8 zcMtdg`g_3_!7^9}-vr6u4?(!jegd(S{S58`e*wwQ-@tDW^B>?v^six%{J8;+f;U03 ztM6p&F>nMN0?&a@f)2zV`v_m;=cgc@_buqa@4*uIES&xftbvsCU%{urzw-VL7*Rf- z18LtwAlc1;l*cO|<^8>U{(bN@^uGiTgMa6&AUKLsfn{rHz?vxt&NO2>KtWF*VDb6SG={NG18u>|Q--i$7fa-?Mr2J8%`1*}vLCT9p zcS!e5zGkh&2U@EmjpWL59ZMbw=XZ)}Ry>h?&rra4U)k4b?4+sK-U?|8OLjB}xRHS} z(s%4AtXFi(ZJIwUiP&+cc_2gSBzGMg+_yf$PGqAwit&woobQwiWyP||Kw-PVO|l^s zxBDD0K52Bs&gf!a%R6FG@_8v^?i(qb466KMXNAYw@iD+bWip zFKE-26q)2Y40s~il9#DBJd>xEFCd!X3Kwy}6}Df_jAOafGgh&6QUp~v(7Osg{8s(# zVGcLp$;Q#%ZEPM-lOW5=nmwJm*26`L?7a0u@d`gbbGjI_Y!-QDv%L`eiNmNiX5|2~ zJ&=y90Qu0Ej3)M#ucXqf%von}pA|b+!{87@85Z^&b%^xPea*}M9r7SWVQDUn(Z*J9 zv%tcwV3WCKt(8Qw*QGs>mnln(iiBBV(?(xHS$n4f?}9W|>A1-+_Nt>aBNJ_$H)Y!@ z@Q$Tz>$P-~m!{9QyyH|{F!oL$n@xVO-gv>QzvML#jBtCXfrO--&Pq*1Mxj%&z63_p>{CUu&OqdF2Y%n>;(KG##c!gx*PQBHQF~l6CF)!BO6O952Uwf;TForS;nNYIl{V z5$eXKp%Z~#ldIy1B#z7m#jUX4pl|t0g{u;Hx1F}^g7&*#BhZNZ(l~ila1<}f$I45B z%Vj@ImEqDN=Xw1XYmczW-gKXvEN(e5plu|Ca_a*!C4@}q;$dLj3CYfMuWQ~x?D5-!vI@K1utPABNFANqzJ4rGWt_+o-NI`?Ob+KL) zg-rIA^aV5zWb5hds=MC>Th9uYicnppNc-y8cV~S+L8xm{Y%zBQ8<9K?3N3Awm*cDm z7lpy^5K^Kn;@xz&_))cf8YU6~EaT4L%Rw34Xn$KtKD*gGE0jcICkrQgb%cEvRX{%( rB+XFfTdwQ=kT0}|gZ^1qzit}YVJ($tHmjloz1K@*BHdjzO0)j}p87l{ literal 0 HcmV?d00001 diff --git a/wagtail/wagtailredirects/locale/pt_PT/LC_MESSAGES/django.mo b/wagtail/wagtailredirects/locale/pt_PT/LC_MESSAGES/django.mo index e6fb7e2b6559538f746b3ec181e4ca50d4600eb5..1a9524dbca7f600fccca70d5afa6b2f25add96d6 100644 GIT binary patch delta 47 zcmdlbwo7b-4jY%HuA!lVp_!Gj#bh(K0)C&wy!6t<^i(T_f|B@vkjYEg=5G#Rf5r>| DO7#y2 delta 47 zcmdlbwo7b-4jY$+u7RO~p_!GjZX diff --git a/wagtail/wagtailredirects/locale/ru/LC_MESSAGES/django.mo b/wagtail/wagtailredirects/locale/ru/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..f3506b42e5c05c765c69360580787bfe81065910 GIT binary patch literal 1284 zcmaKrOKTKC5XW1Muk`^wz>8>kP!r7T%*3ecBpbyTF=#NX8y|R@>~=PzlbKycHI!rG+X=Ys;;X3S8wudd((4 zHVNAX`wCNwRx!2?+y`z4o5A&92e=FD2DgCM>gNu)1O6nq5qttRfiJ+-;45$w_y+s| zdk5PJ|LGdWPJ%O_((xV4fWN`LUCu@iD4(AkQbeh7eo?ryb{aR19b4FaqA$J zgQ6{XF})NY3jL8KPxxe0V3+vvkT*dCx$})!#4g&SoaKFXl}D{qtf}Y^{p+||>n&=R zco;dpXVGQ5By7h`<#^zSLhFl4PEk8mE=5}2w9V|In%PcfyLIH~Apm7~b9J!&2nBCvFQY-}toR6A#gClz{7 zn=;Y^eXKT|?$&$gVOeiU_4W4kEIojkHd5WbC%6Y)69EPkd|c>(Ydc;C6^89F;vzec zKci)q^3;VxJk)x;f?ve1Xi;X+5e=;th2>PgTMlhkJL88VkwspRxKZ|S2i3OOW^cb~ zWV0q6I6!J^?91X!Pmn=Khu@WL`+L-xZCBf*!ss*&nw+eaAjfDyjftAJmW~vYZ{ zkqdGzo{AqZ`C85~Rg#Nx7V%m68D)#uRgkfe_;YghKMjza z9KKqqw*D85E8inuU0iEhO*8qg!bCC2YCN^#IdoEd2O}t{&=KE@r&lbPC%F(mf{3d8 m6i+ArC;z;^K6Lz;$r-4)+qfWk$d|IhTSbH-#)uG!5(!!HT$aaDUD{1sSojcr&u{T97>JWh z+SksTzUj~D$)RQuv`8F{j3B|_J)&(3(xaF@OAmrvhrCL|2IZXanz*T#Lmq}Gq(fM$!t|f+ zj`AwuRdHJ@hlt=!I!_}jwM(TpR*+X|Q}SZQDXhu;Hx`e09M8sPRf)~~0ULC(kO|NT zu<|TRrP56j&!lzWTOU!E)(^Vk!6{hU(Xp8*od{ANE59FCkfjO+>B7pC Wc8#4oL3Fk)U5hu#Zrci*LFpI1vWZOq literal 0 HcmV?d00001 diff --git a/wagtail/wagtailredirects/locale/zh/LC_MESSAGES/django.mo b/wagtail/wagtailredirects/locale/zh/LC_MESSAGES/django.mo index 1f4c36355953c35c9a61c2b0b5554b4f47dd0c9d..4d188c852ca3fb1200dac00d542c10d798109d16 100644 GIT binary patch delta 23 ecmZ22xLR-nJ1du^uA!lVp_!Gj#b!a)S{8xCxZB{NzT|+|!Lo+L5i_K42C0GDwy$5Ij delta 23 ecmew>{8xCxZB{M|T?0b}Lo+L5%gs+&C0GDwrw3;M diff --git a/wagtail/wagtailsearch/locale/bg/LC_MESSAGES/django.mo b/wagtail/wagtailsearch/locale/bg/LC_MESSAGES/django.mo index 8631753d80ca5decdd2531b848dfc3d89220d7b0..5323e31af4001e0a0501b725770b1b2f781077fd 100644 GIT binary patch delta 44 zcmew-_D^hs1}m4PuA!lVp_!Gj#bhJa%{)GddFiEz>8Vx})J%R>qc-KeBC{yq-OZ$0so_y)-dB)k+~baWe-;2@3#LG!DD~ diff --git a/wagtail/wagtailsearch/locale/de/LC_MESSAGES/django.mo b/wagtail/wagtailsearch/locale/de/LC_MESSAGES/django.mo index 51d4574f3f4d7a5fc68805bf4dcdbd03cebdd68f..10f00f4f17c20bd2d504efddad0fe97aba81219a 100644 GIT binary patch delta 44 zcmaDP`ABlZb2ctZT|+|!Lo+L5i^(6^Ht_f)=B1Y=rl(pdq@+$>z#hGsgX0zp0AI-u ARR910 delta 42 ycmaDP`ABlZbGFI+>})J%R>qc-KeBC@ypBDJ$0so_y)-dB)k+~Hbu&B1Z59Ad?GEz* diff --git a/wagtail/wagtailsearch/locale/el/LC_MESSAGES/django.mo b/wagtail/wagtailsearch/locale/el/LC_MESSAGES/django.mo index ac1517148ed46f51ae1df057ff07e5448f3e0325..7440f47bdff8af8f2721d68db9322a22b9f33c12 100644 GIT binary patch delta 44 zcmdlezfpd}b2ctZT|+|!Lo+L5i^(6^*7Nuz=B1Y=rl(pdq~=VX&mO&*onsX{08tzc A*8l(j delta 42 ycmdlezfpd}bGFI+>})J%R>qc-KeDZ#yp}zR$0so_y)-dB)k+~XXEPheYIXoXzYcW( diff --git a/wagtail/wagtailsearch/locale/en/LC_MESSAGES/django.mo b/wagtail/wagtailsearch/locale/en/LC_MESSAGES/django.mo index 44e531ab019284e5fdf8b714d7a9c44a10e406cf..bc5cb168813aa46e8370092f67bf4f0a2c860d89 100644 GIT binary patch delta 20 bcmeyx^owaiFPEjRp`n7InU%4{#OaR#OKt}r delta 20 bcmeyx^owaiFPDX`fuVw-nU%5S#OaR#OIimW diff --git a/wagtail/wagtailsearch/locale/es/LC_MESSAGES/django.mo b/wagtail/wagtailsearch/locale/es/LC_MESSAGES/django.mo index d1321e1165e0fdd018160826bf34f9613a5c4309..0850cb20c547aaccab0dd0a0370a06296cb1d0b3 100644 GIT binary patch delta 44 zcmZpbYL(jXoQ=y;*U(VG(9Fu%V)93}jXXYydFiEz>8Vxic|>x<{9 delta 42 ycmX>ic|>x})J%R>qc-KeBC_yn#K6$0so_y)-dB)k+~fXEP_qZWaJVunwmH diff --git a/wagtail/wagtailsearch/locale/mn/LC_MESSAGES/django.mo b/wagtail/wagtailsearch/locale/mn/LC_MESSAGES/django.mo index e5957554f3b0d0fca3f23db805c9616d2a8263b6..f42c4318fa81f17364f8eac4e69f7e7f34f77595 100644 GIT binary patch delta 43 zcmcb^dWUs`86%gauA!lVp_!Gj#bgJ@%{)GddFiEz>8Vx8F-7tCB<7`;CZ?xaDdgr&j$~>E00QF-%>V!Z diff --git a/wagtail/wagtailsearch/locale/pl/LC_MESSAGES/django.mo b/wagtail/wagtailsearch/locale/pl/LC_MESSAGES/django.mo index fbb63539ad50008440bad6b0896dd3042922a3b6..7e28b09fbc1e7ee4da05c4b637470b2075222c5f 100644 GIT binary patch delta 44 zcmew=`Biemb2ctZT|+|!Lo+L5i^(6^Ht_f)=B1Y=rl(pd6y!`^z#hGsgX1j=0B0Ky Ap#T5? delta 42 ycmew=`BiembGFI+>})J%R>qc-KeBC@ypBDJ$0so_y)-dB)k>itXEQs;I~D*{rw=~> diff --git a/wagtail/wagtailsearch/locale/pt_BR/LC_MESSAGES/django.mo b/wagtail/wagtailsearch/locale/pt_BR/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..4060d3af5530dfb439cba5b8ab2aa34d9c36480b GIT binary patch literal 3270 zcmai$NpBoQ6vqolScX095TFtT#iO`qNlb9YaS}UmLI5waCytPiqH=e6rjnknPF1(Z zb_7B~;=myX5J-qqlmiOOkxLE;X-<3t5E4Rs1h~MB|EumEdnN`-8vnYhUcGwtw)U@k zc74h)_T#q~ztOuGtAfYx#vhEoz<0pE!N3p@gT57xmyK$1HEBgxJ({?Iu!kj|Y1$=)RpqHG1E`?kRc!AnxCgujz64$e4}st2{26=!@4HLc zefH%%3jT!oH$l4p0T}lv_$o;9GayW40z3`2L9*`~a02`hJO=K@4w^`cMtq${i8N)K?T~hB&r}d_8K^{?gO;2BW;I!oU|Mu$&@4H{YZf=q}xKR027g93!xNNavMuut!{9UaGFS5!u2yiBuYm+Mzg{ebex956c?uuTeeu_ zj@xN@Tfmw~C%A}=ig55Cm2^324BYuYdn_~rLpzo*$Cg}b<={CRm#uaw!_(vIdi#TJadEd9hgA9%~sSa_kqFN#(oR9IS+u{Mb}Yg;Pt zrqh=7n!3SD3-e9yH02wFy)#Iv20vV@k9oCYUcJuiM;k}R57p|m8U(#Xxu!_zfZVuO ze~s7bjj^#qHH^|*FwJWk5!p~6?;8AEC<2Rk9B*Y0D+c*^s?~u}6_o4=?1)+^D%NXC z(P{7nn3=Xxi7<~$8?mXvG9PItN!+MbyWMUjA>C?KuG8*noL$*g<7zj%X*JCCRpaE+ z^kTJKnms=|v*nO_rB*tvQ3et0+=y}EM6M@QB&mufxZf7W%4G6F^Ql#4TI`x`BLv*V*(Fq3@UHzbeir$w! zEXKkJ9`|mvR3wmn9qvn$$W4J{wbuSfXWC23LDLH`{6b}9hNwKFbhS5 zl%_V!S5oVXlWZnaQE;erQnBt}F*O|#1=_Vydf2vYX}bxz1zC;2R~0s}JZxdnf)%-S zNVZVru969gBo(3Bbb6=hI(=&gy+3ef5t1Dz�Dyle9}q&5`6WzE?#&jP{XYh6^kh z#6Q+i(EBR#m8kFw9kJDShnEp3kqF+qh3}^?t?k_~3h|{NQ#28{0c&jD)v3Ek>+7&B za3)DwX^^e`43+C@MFnD%!!8sC^vv}>n0Hc?L% zSIr7GMIX2=MHIxyRf7&B9M++W;fsLmz)b@*L?j-H0N(`r?|W11&9_<+uHCtFiDnJ; zZx`ME1E;PJ&Ba1d30ZD!rS6u1tF7XDft}0BW(kU-rd=bw+hGD{;~pImi85PKol!3E IA5$vXKf2kQ$^ZZW literal 0 HcmV?d00001 diff --git a/wagtail/wagtailsearch/locale/pt_PT/LC_MESSAGES/django.mo b/wagtail/wagtailsearch/locale/pt_PT/LC_MESSAGES/django.mo index 1b03459c4fd57bdaa1f4683609b7085a8297a5d5..03e50f2bba6de10cdd17abfc517dfaac190badd1 100644 GIT binary patch delta 47 zcmZovZ&cr4#l>Z*YiOuoXl7+>G1-NyfZr!EFTFG|J=IE~pd>yZWb$UN`J0otZzYhb8gXl7+>IoXA)VDb^JdHg8Vx<1tswTA)6Dq6*vG( C5DrZM diff --git a/wagtail/wagtailsearch/locale/ro/LC_MESSAGES/django.mo b/wagtail/wagtailsearch/locale/ro/LC_MESSAGES/django.mo index 305c7c46331bfaec74b3f070cffc815891e6a8b3..5e995553ef17bb818f3d54a6e274ad1354e97cb3 100644 GIT binary patch delta 44 zcmeB|>X+K^oQ=y;*U(VG(9Fu%V)93}O*}q{dFiEz>8VxX+K^oNY2cI~$9cm9gdIk8GPJZ(xt&@kz`}FHKBOwNfa`-^|Iu#tHy4{0*4^ diff --git a/wagtail/wagtailsearch/locale/ru/LC_MESSAGES/django.mo b/wagtail/wagtailsearch/locale/ru/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..22f2cdd235ea8d3f0ce86c101b32c9693fb3f111 GIT binary patch literal 853 zcmY*WO;6N77#>5_6y%^F~Jo9E5e7E6vK1M=Inx zmL9#uWk_$vE1}q=6OWNhpdP-&&Yom_2#`cgV4(<4B7L=h{qgK`l14orFAy z#%ZO_r4rh|SDs^~BV9IdRY*1)RpKiCfk#U#fj&H|M`da)hNT|u)HF-C+)lt{>m=dwJO>e6o7!or8}dwz>=!AP8B z(!O@y^i97{Pqr1r5%LUqjyy(QAxlKaEnYTpEj51_TJs5sr~N4%gLTSiK|W;arOJX4 zhBaH*Qo$7SkhYy=60Z!zsykRHYKNqP|EnuiU_n=}kbcq{5rm4}?8kd9!bO4EP3 zh;r23h(^825y7i;p2k*cmq~A|ATQEpSiTSHSk8)lK9>F3u$5w$!Jt3r9{wP#@t|Y0 z2aTg`a?I#q?OC2lrCTJKOY6Y5-{T&Q4!ZKe8CcrYiJ2;$3KC6}{~K43l?sO0(#nkX Vj9oZEbiONHJ8Y5tw#{2XR140y9d$$ delta 23 ecmaDa_Finmb2csuT?0b}Lo+L5%grCz>R140r3cXf diff --git a/wagtail/wagtailsnippets/locale/bg/LC_MESSAGES/django.mo b/wagtail/wagtailsnippets/locale/bg/LC_MESSAGES/django.mo index a759b9953fad81b57db423d5e09cfbd96437c743..18e6ce497c0412c0a51ccb4e551f2bd409ca38a9 100644 GIT binary patch delta 44 zcmca5dP{Ue6f2jduA!lVp_!Gj#pD#$%{)GddFiEz>8VxVCB&68EwqIi4~^U_Nb(^IV!lF~QVvc<9h05T~J An*aa+ diff --git a/wagtail/wagtailsnippets/locale/ca/LC_MESSAGES/django.mo b/wagtail/wagtailsnippets/locale/ca/LC_MESSAGES/django.mo index 15dec447c63ba34408678490d4a51f8d687f91e4..91a7361dd597a2f94e8e739f8feaf8d9f4c8dea2 100644 GIT binary patch delta 44 zcmbO!JX3f>6f2jduA!lVp_!Gj#pD#$jXXYydFiEz>8Vx<$%&Ii*rGSru*ot503DeO Az5oCK delta 44 zcmbO!JX3f>6f2j7u7RO~p_!Gj<>VCBjgytwqIi4~^U_Nb(^IV!k`p&qv&k_702;3h A$^ZZW diff --git a/wagtail/wagtailsnippets/locale/de/LC_MESSAGES/django.mo b/wagtail/wagtailsnippets/locale/de/LC_MESSAGES/django.mo index 8e1c73d7ca4f79c2edcb6ba39615e8b11909c403..04a09532f4db213327db84e25c3b85fefa3ce629 100644 GIT binary patch delta 44 zcmew^{9SlM6f2jduA!lVp_!Gj#pD#$4Lm-HdFiEz>8VxVCB4U-kwqIi4~^U_Nb(^IV!Qc^cpvDGpI06Opu A=Kufz diff --git a/wagtail/wagtailsnippets/locale/el/LC_MESSAGES/django.mo b/wagtail/wagtailsnippets/locale/el/LC_MESSAGES/django.mo index a052bc0c35dbbf18f1d54857329814cc73a52431..668682466b196cba73ccbb7b66c85b642ca9f6b0 100644 GIT binary patch delta 44 zcmZ1=wm@t{6f2jduA!lVp_!Gj#pD#$^*la_dFiEz>8VxVCB^^+CYqIi4~^U_Nb(^IV!Qgb#}vMpx;03Qeq AZvX%Q diff --git a/wagtail/wagtailsnippets/locale/en/LC_MESSAGES/django.mo b/wagtail/wagtailsnippets/locale/en/LC_MESSAGES/django.mo index 44e531ab019284e5fdf8b714d7a9c44a10e406cf..bc5cb168813aa46e8370092f67bf4f0a2c860d89 100644 GIT binary patch delta 20 bcmeyx^owaiFPEjRp`n7InU%4{#OaR#OKt}r delta 20 bcmeyx^owaiFPDX`fuVw-nU%5S#OaR#OIimW diff --git a/wagtail/wagtailsnippets/locale/es/LC_MESSAGES/django.mo b/wagtail/wagtailsnippets/locale/es/LC_MESSAGES/django.mo index 5f5980e94529ac2863295e7ddc54d53323d3cc4f..09992fcf2d8f03a3b628d440d425dd30d26c66fc 100644 GIT binary patch delta 44 zcmX>sd{}rx6f2jduA!lVp_!Gj#pD#$jXXYydFiEz>8Vxk>04&oD APyhe` delta 44 zcmX>sd{}rx6f2j7u7RO~p_!Gj<>VCBjgytwqIi4~^U_Nb(^IV!Qj0fNvw1KB04bRb ATmS$7 diff --git a/wagtail/wagtailsnippets/locale/eu/LC_MESSAGES/django.mo b/wagtail/wagtailsnippets/locale/eu/LC_MESSAGES/django.mo index b3e5368fcef3787217b64d94fbd71e55db5fdacf..cbda75991766d4897a968ffc52c964e3cdcdf6e1 100644 GIT binary patch delta 41 xcmcb_e2IBNE0?9Np`n7InU%4{#QqIDK8bnhrHSdORtl-5lkFIzCof~v0RS7i4TS&z delta 41 xcmcb_e2IBNE0=|?fuVw-nU%5S#QqJFeHf#7d=m50OB2&mtrSvACog5x1ppdO4Uqr< diff --git a/wagtail/wagtailsnippets/locale/fr/LC_MESSAGES/django.mo b/wagtail/wagtailsnippets/locale/fr/LC_MESSAGES/django.mo index 4acab4cbebc7e6bc411ca4f2f67b08b0ccb3229c..e3f0d8ae7d4cc9adf6a9578094728f6be1e4b9f0 100644 GIT binary patch delta 44 zcmaFC@q%N61QVB~uA!lVp_!Gj#bhO>4Lm-HdFiEz>8Vx(CN>r`D`U&aN=zFj-)D;A@kz`}FHKBOwNgkc+HApWzz6^#tqmLi diff --git a/wagtail/wagtailsnippets/locale/gl/LC_MESSAGES/django.mo b/wagtail/wagtailsnippets/locale/gl/LC_MESSAGES/django.mo index 024a5263dff0389c5633b67b60ababc1c2f28437..bd76e4b70bd9962af73217e0b7ee9c2300a4f65c 100644 GIT binary patch delta 44 zcmdljyjyrf6f2jduA!lVp_!Gj#pD#$O*}q{dFiEz>8Vx<={b`{*`hbsve_{M04f9x AH2?qr delta 44 zcmdljyjyrf6f2j7u7RO~p_!Gj<>VCBO_P<`qIi4~^U_Nb(^IV!(sMS~u-P*M04D1V AK>z>% diff --git a/wagtail/wagtailsnippets/locale/mn/LC_MESSAGES/django.mo b/wagtail/wagtailsnippets/locale/mn/LC_MESSAGES/django.mo index 086afbd48bee2e1b1861d450f3915fa8f3a36a27..1970643be28c2158d6b6abd9058a5226664c90ed 100644 GIT binary patch delta 41 xcmcc0e3f}ZE0?9Np`n7InU%4{#Qx1ZK8bnhrHSdORtmX!lN}kOC$D7G0RSBv4V3@@ delta 41 xcmcc0e3f}ZE0=|?fuVw-nU%5S#Qx2b{TZWpd=m50OB2&mtrT+eCa+-B1pph;4WR%4 diff --git a/wagtail/wagtailsnippets/locale/pl/LC_MESSAGES/django.mo b/wagtail/wagtailsnippets/locale/pl/LC_MESSAGES/django.mo index cc356807a11c51f8b6a77bbdb0fd1247928061e6..1ed48417d9d643bfe907f03610de112a413f9bbf 100644 GIT binary patch delta 44 zcmaDZ{9JfL6f2jduA!lVp_!Gj#pD#$4Lm-HdFiEz>8Vx<1v!(2*`haBv*j=Y069es Az5oCK delta 44 zcmaDZ{9JfL6f2j7u7RO~p_!Gj<>VCB4U-kwqIi4~^U_Nb(^IV!3UW4AvE?!Y05$Fn A$^ZZW diff --git a/wagtail/wagtailsnippets/locale/pt_BR/LC_MESSAGES/django.mo b/wagtail/wagtailsnippets/locale/pt_BR/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..7a39d63dcc9dfbdf909fed014fcc512d97e921c7 GIT binary patch literal 1586 zcma)*O>fjj7{^Tur7RRmDj|UiOx1!CB@?fC4Nk&K!crlTc9m>FoYKL5@DB3Mn3-`l zaOE2yapA_1mr8A=eu5l&;M{A~69;)4Hl=NKM7&q2`Z{0j7Xj)RahGRPa~-UH(3 z1M~TP?EB_(`kwn-UXSn9ehhD)RR}%@eXknB^*+x_Y08d`TP2Hv+^V}*(5ezWny|qo zL+qX|nJtHtzEF-i%~HzA5p!K>>q9RDi(RcP4N>p3c_@^2T{2rZT^`g5D%AThj(w@D z6Dsk#Td9OhFRl<74VF@6oBV${zN3DC!Roz(6|qLaiW9E1K}Wirf({xN+$1|S>`u@& z`VJ+IUrqUSGFEC8vl}9FLgtNSDztHY$!0R;3uR_`N5`zu{=UN(4G9Nlepxt**@kC}Po>_~guFGio;B$d_qN`lKKD&G6_fYewr(@R-$XXL!uY6He{ArNtW37f)V#+KEcMj&J}SO_WS*5 z=X1;3wCWrYVFmnyAgP~fx=?rNhTGf;FbuL>d~aW;D1w% iTJ>Jj>LYPU@-<;b*JR@-SLPbmrO?5O>`hgT6T!cXAE^ld literal 0 HcmV?d00001 diff --git a/wagtail/wagtailsnippets/locale/pt_PT/LC_MESSAGES/django.mo b/wagtail/wagtailsnippets/locale/pt_PT/LC_MESSAGES/django.mo index eeab056130f7fc84e4da93cc2c99bc009355e43c..29036a4ea2fe67d34e1f5a27ed88b76b44f9123a 100644 GIT binary patch delta 62 zcmbOtIz@B?9~+mYuA!lVp_!Gj#bgP#0)C&wy!6t<^i(T_f|B@vkjd?A^SKxtQ!vd|r4%6f2jduA!lVp_!Gj#pD#$O*}q{dFiEz>8Vxvd|r4%6f2j7u7RO~p_!Gj<>VCBO_P<`qIi4~^U_Nb(^IV!it;ztumv*%04^#G AivR!s diff --git a/wagtail/wagtailsnippets/locale/ru/LC_MESSAGES/django.mo b/wagtail/wagtailsnippets/locale/ru/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..f81d35771fcae3aa822266fb078ac80c6bf6e011 GIT binary patch literal 541 zcmY*VO-~y!5CyfTJ#y}0DwT+cI<}J(ZJaDcd_;{(L=-LU+1WT7!^U3OUIG$-gTKe6 zf26ZX8^n{IJmYz9Jmc4ck1u(tfHvb@!g_>r;3uLJA2ZGv z3dvMG=(_1UT}&A2zKL$tifG`^6*IsreWE8vHn73v8F_n4gFb+(+@$5v)n zr)V&FC38hmC07EbmG@d2I9i5K3QE`Obt}~E^g?YMwA^m#X-U`Hg@w~i$xdK1Z8lprxF(o>M_u=klOSiTT16uNN&?1iQjbfgA3)zmC5W}n_NIV(_uHO z09QqmqH?kzL+e&vfGIbrPda_rhRKmR~n&D`W+ac9P`tp{l7Fwx^=j5 WumNZA{JgcGhBeW{(bI1BqrJa$UzpVZ literal 0 HcmV?d00001 diff --git a/wagtail/wagtailsnippets/locale/vi/LC_MESSAGES/django.mo b/wagtail/wagtailsnippets/locale/vi/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..ce5813ebae0235ba9cbe1ff6fd73c5f722c491b3 GIT binary patch literal 463 zcmY*V!A=4(6vXIhkDfjB;6a0>T|u)HF-C+)lt{>m=dwJO>e6o7!or8}dwz>=!AP8B z(!O@y^i97{Pqr1r5%LUqjyy(QAxlKaEnYTpEj51_TJs5sr~N4%gLTSiK|W;arOJX4 zhBaH*Qo$7SkhYy=60Z!zsykRHYKNqP|EnuiU_n=}kbcq{5rm4}?8kd9!bO4EP3 zh;r23h(^825y7i;p2k*cmq~A|ATQEpSiTSHSk8)lK9>F3u$5w$!Jt3r9{wP#@t|Y0 z2aTg`a?I#q?OC2lrCTJKOY6Y5-{T&Q4!ZKe8CcrYiJ2;$3KC6}{~K43l?sO0(#nkX Vj9oZEbiONHJ8Y5tw#{2XF*${GBacsFUV3R_da9K|RmNlyw&=|@Y~0KM7_1DY delta 44 zcmZn{ZWrDV#mZ%&Yhb8gXl7+>IXQ)O<76eaC?220y!6t<^i(T_s*KImY&^^W6-o@U diff --git a/wagtail/wagtailsnippets/locale/zh_TW/LC_MESSAGES/django.mo b/wagtail/wagtailsnippets/locale/zh_TW/LC_MESSAGES/django.mo index ca8e15e759a0665906054629ef82460c7da33434..5968871e41d62db6d720d9b7ab4d6937eb104cb2 100644 GIT binary patch delta 23 ecmX>kbVz7J6f2jduA!lVp_!Gj#pV>&d&~e+kbVz7J6f2j7u7RO~p_!Gj<>nODd&~e+&IYmo diff --git a/wagtail/wagtailusers/locale/bg/LC_MESSAGES/django.mo b/wagtail/wagtailusers/locale/bg/LC_MESSAGES/django.mo index 085a028ce2edf481a975da6964d6b47cff86b8d1..ee8c034d4ca2218f3cb72504807ceba556ff5b0d 100644 GIT binary patch delta 23 ecmbOsH$!g212!&8T|+|!Lo+L5i_Ndt^f&-m;Rf0O delta 23 ecmbOsH$!g212!%TT?0b}Lo+L5%gwLY^f&-m%Lds1 diff --git a/wagtail/wagtailusers/locale/ca/LC_MESSAGES/django.mo b/wagtail/wagtailusers/locale/ca/LC_MESSAGES/django.mo index 1e398be77f46aa78689504a7d374bfccd5e0199d..8337fea0a4f922319e10d4b79314852557260b48 100644 GIT binary patch delta 23 ecmZpaY?Ry(&dz12YiOuoXl7+>u{n`lffWEqN(F%c delta 23 ecmZpaY?Ry(&dz0_Yhb8gXl7+>xjB(tffWEqGzEYF diff --git a/wagtail/wagtailusers/locale/de/LC_MESSAGES/django.mo b/wagtail/wagtailusers/locale/de/LC_MESSAGES/django.mo index 725ce60338eee8eac7c0d30613dc6eca8ecfe515..460fcf5e2e6fb1fa8d5dd0b4ef2ffce3fb8693b8 100644 GIT binary patch delta 23 fcmZ21xma?;12!&8T|+|!Lo+L5i_NdtcCrEhTLuSi delta 23 fcmZ21xma?;12!%TT?0b}Lo+L5%gwLYcCrEhTJQ&L diff --git a/wagtail/wagtailusers/locale/el/LC_MESSAGES/django.mo b/wagtail/wagtailusers/locale/el/LC_MESSAGES/django.mo index 10d6a720fb825caa70b85cb18c70dfd63575dfdf..791b7c09bf955f6bc24676e97f6d227acbde0fd7 100644 GIT binary patch delta 23 ecmeyQ@JV4qI6If6uA!lVp_!Gj#pXnIK~4Z%!Ukpl delta 23 ecmeyQ@JV4qI6Iexu7RO~p_!Gj<>o|oK~4Z%tOjKO diff --git a/wagtail/wagtailusers/locale/en/LC_MESSAGES/django.mo b/wagtail/wagtailusers/locale/en/LC_MESSAGES/django.mo index 44e531ab019284e5fdf8b714d7a9c44a10e406cf..bc5cb168813aa46e8370092f67bf4f0a2c860d89 100644 GIT binary patch delta 20 bcmeyx^owaiFPEjRp`n7InU%4{#OaR#OKt}r delta 20 bcmeyx^owaiFPDX`fuVw-nU%5S#OaR#OIimW diff --git a/wagtail/wagtailusers/locale/es/LC_MESSAGES/django.mo b/wagtail/wagtailusers/locale/es/LC_MESSAGES/django.mo index b78a483a5fdf0e86c52b9d29dd02ba0776bdb6c3..b430418f9c5581cc09d4d20bbcc0bfb66e4dd898 100644 GIT binary patch delta 23 ecmbO(HC<{$I6If6uA!lVp_!Gj#pXozZL9!IXa+?9 delta 23 ecmbO(HC<{$I6Iexu7RO~p_!Gj<>o~8ZL9!IQU*i- diff --git a/wagtail/wagtailusers/locale/eu/LC_MESSAGES/django.mo b/wagtail/wagtailusers/locale/eu/LC_MESSAGES/django.mo index 059c50fbcbe44a6c8657c4027253b45a2eb08478..57d9c5ada9411f06e980beeb93119e1115bfc22b 100644 GIT binary patch delta 21 ccmcc2e3^MdE0?9Np`n7InU%4{#(oz@082&&MF0Q* delta 21 ccmcc2e3^MdE0=|?fuVw-nU%5S#(oz@0823jL;wH) diff --git a/wagtail/wagtailusers/locale/fr/LC_MESSAGES/django.mo b/wagtail/wagtailusers/locale/fr/LC_MESSAGES/django.mo index 45fe4175496fb8691b57671ed4feaab47537bc48..c025d51bccbaf68cf9ca2af2cf9ddb09147114b0 100644 GIT binary patch delta 23 ecmca3en)&mI~$j!uA!lVp_!Gj#pa1@-mCyy{06)L delta 23 ecmca3en)&mI~$jUu7RO~p_!Gj<>rZO-mCyy<_5a} diff --git a/wagtail/wagtailusers/locale/gl/LC_MESSAGES/django.mo b/wagtail/wagtailusers/locale/gl/LC_MESSAGES/django.mo index b5aaaa89550591568e23cda3abba4486b4d12ec1..facd053197f2e0c5a20e69a4d1d28a11bb69535a 100644 GIT binary patch delta 23 ecmZpXYLVIy&dz12YiOuoXl7+>u{n`_F)IK`{ss&H delta 23 ecmZpXYLVIy&dz0_Yhb8gXl7+>xjB)2F)IK`=mrY_ diff --git a/wagtail/wagtailusers/locale/mn/LC_MESSAGES/django.mo b/wagtail/wagtailusers/locale/mn/LC_MESSAGES/django.mo index a610b6cd70b49e917a243e7567b4af84497db94d..5050d16e2e9e00bdf0f16f8f0106e85aac21fd2a 100644 GIT binary patch delta 21 ccmcb{e2sZRE0?9Np`n7InU%4{#(sB3087LMP5=M^ delta 21 ccmcb{e2sZRE0=|?fuVw-nU%5S#(sB3086h1O#lD@ diff --git a/wagtail/wagtailusers/locale/pl/LC_MESSAGES/django.mo b/wagtail/wagtailusers/locale/pl/LC_MESSAGES/django.mo index 04157a81f2b6e78995a410b3a58999462241f439..ae0614809728fcc0344d501653f1c3835e2e0090 100644 GIT binary patch delta 23 ecmew(^+#$$I6If6uA!lVp_!Gj#pXnIX*K{|j|O!B delta 23 ecmew(^+#$$I6Iexu7RO~p_!Gj<>o|oX*K{|c?NU< diff --git a/wagtail/wagtailusers/locale/pt_BR/LC_MESSAGES/django.mo b/wagtail/wagtailusers/locale/pt_BR/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..0eed7b448b5ce5f0a4f2f747027e4396e4bc3bed GIT binary patch literal 3791 zcmbuBO>A689l#$@T57(-H{oOA5@I*r4>yIT8#^Sf9U6!o%W)bBfvoX+v%8bNkIl?` z>$r#u;(!2&3mmA5M8u&g2#Jcqp_d+39O1%+1F8@g4jcigNImfT&)Z!)BrQQa?d)%7 z-pqggUo-!G^~ilcjCkf~pP+s9Em8D2_}p9h;u*Y+F?a*c!{5UP;A`-H7~K~|GvERE z4tNB<9Ug`6hR5J(*n+aIKYl-er|1u%tp6EYhQEd)=kM@A_&OB5?nkJ|eTXlHqIoFu zn(#yLF}MWR;iK?7W4;2{=>G%qi8?4P>(9Y=!8N!Dw;-SBTYMdd--QeCMffm$6@CRi zh!GcH0zUwMKISV>^!Wpnef|Vr#+QGA*XaKkV?^#hp}aqe(ZXX;^gjWQz~%AyCKUfY z1y^7KMgH^S_rHW<=Wn3Q`y1SV|AK58J^9YszD@Wr{jWhxh`tTQ{_jKC{|E5H@LBjJ z_#*rwe0|JSob+Y---9Cek5J_N8NLtx6^eeZjmOWR%nAA{Q2crww&8Qo!rwvJ=dt(H z`+gICoc@oX$a@J&+HqTl3E;~&Q+15o@qN0WHr#z>CR z2Wg+BMKkKqv)wn&DC<>`8oRn6of)N5XLPc!%uVY{-;B=3K@2SI&_w5xMCmX){1hqt$ZTGJv&QMN7>`YQUiJ0R zuo2>SZEDMXRTe0f>z=6<(e*Cux0cw_=Dlbw(>9IP#DK8Si*f_){a)cv!6T^{ng!J@ zoEjQuyEfLPE%Ih`!8%{64dzD|yQ;MD(Ts$9%XJc2=ND9Bd$wf1JW=Ob&DP0QqqRe_ru)rkt4NKHuHd-niqS6a zhcGZwIJdum59)rMq-u7_WM_}h-KdP)-yxgu?7UxUF*qAtDRo)-h{K@Dz2YDny4IwL zM~5UoQPy&rVOEGY`I{yoRJ%sSWViSO0e2o;^Odr+X#IEb{$Mt-wy@(s@67R&$(uk(s5IKKliiNcY(NQy-m$w^Fh)0>+SVd|_JeVEvKq?RM=}~Gp(FX z8y5I%X7Ips}|?a%-miAo*dm$Ri>QrRa)w#IJotvzofFrw8J%G zI{#3axSDY)s?jZH3$ig&#+Q=z+{D*e9ZH00M&bY+ou@t&Q~?_kWbH(S$=buCV{vyB zjpVkXLC=z*&rMbPQ9GmTE}tuAW@2O{aBT2iPNew<1?+i z$@^L?DU^sUFyR;g;piDlrniCd0g2O_=2@C$aD6J?s~!-VvdKl|u_gKMCcFq<`ZT9;@!M zU_+9tFZaa6PB~3oOATWKe8;`1D8aP?_gcy(Cts(%DyL>kNn4W}gOY~40U0IRkjkOv wy+Len4G{?cGzjPP&xDk#@l7--ZQ_hOhWUq}Q~OMKwIMeZn@+5pity3D0RUS>>i_@% literal 0 HcmV?d00001 diff --git a/wagtail/wagtailusers/locale/pt_PT/LC_MESSAGES/django.mo b/wagtail/wagtailusers/locale/pt_PT/LC_MESSAGES/django.mo index 0698c96aa40041b05ba97214c645fab76c3ed8ac..bb30dd55bc0d479ef0945e4c693ed3bf02b12dbb 100644 GIT binary patch delta 47 zcmca4dr5YK2?v*@uA!lVp_!Gj#bi5<0)C&wy!6t<^i(T_f|B@vkjZN~=5LPSEMo-# DSXmDM delta 47 zcmca4dr5YK2?v*ju7RO~p_!Gju{n`_0V@DWbOr+e delta 23 ecmZpaYLwa#&dz0_Yhb8gXl7+>xjB)20V@DWUIqdH diff --git a/wagtail/wagtailusers/locale/ru/LC_MESSAGES/django.mo b/wagtail/wagtailusers/locale/ru/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..c410dd94a363e9236f9fa9319b591373a7b5dd6a GIT binary patch literal 4282 zcmbuBU2Ggz6~`~o5^(t}-;}^jij$alzml{K8#_(fI%-4$CUIK{kivNP+B;--#+jM5 zV_HP&kcP@>Tp=p;rAbqG;DHDy*oouBu7DRFc(@}WkPt!$UO+scil<5l_?gCKzY2aA@*eK1C+i#n9|FJLdcOcdQC$Z4 zQ!_lag1-PygMSAlj|N4$8yp2ik7vOX;Lkwu+eGjlFb_Ts9tTCAUxMesjUU7p{3+NC z-b=DYupj&!_%!%Q@Dhkj3Nx3V%n83wa7&%!V#zg^=q{J&jJwj@EUPwi%O$!Acj+tI z%jpTI56go~`r=dElE*#VOV{UH1L3!co02SF8(X8#F3%|SamJ#J=!NV`wuWebFSqK@ ztFD2XiH!DR9R@}>yrfcF{@l*c!?<%>C2R(XiMryTqj# z<5CO!0w<%cFDV@~8-r4WwNkHCC$AopJ+t-6;&-+#rMqUXIZ_n~vN_pI&LLL)QTQ!W zNpc6PxyM<61}N(%GU^>i%t#m|xx?|WU(G$#9FB7XVOe+de`O%|uqcXg?h&Gv^^Rg` zSFZTQT&bi>_m_9>-d-#fix}pPm{DJXuCaR{SK6gZyUO?7zrD!SAuXI6h`b=K%l<6u zFL_a2KN=3!&A9G4&dWZgE49J!WWEwM_Tmr>H`$-L0pm5w`baa5eJ{}4YDqFuE)>Sb z#`0|SAohoh^C*mDS;mEtLaQzXwuy^Th?<42j>88J_pJy}$`?BxrVb{6*Z2qtCgx;P z7^zd3J#J6LCh2`_;6QHoik&PtWTISOPzkFva9Qsj^pj<-WgRs;`s>ZetLF}cQ6nzv zV8p$~y*u~lY}mUk=qwd`drNxD7A?c#rd~9CP!~1kyzlMZvGl2@cb5#EN3o|=)K5K? zxnNW5!l#7Kj;=i&s>8lyr|k_pV`uGxUDS4wp$yWe8D6!o@-_Q5XJ_AJz51+f<8b5c zJJ^dXdow*}ue;@^(+P<24j;{U+RocKdrQm1F`nfmJ#DYqSuE1i>9ckgoUm7!oJ}Y4 zTG{9EnYYtSETj|emG5)pwvbNR8_NEWm97x^s+~(GSc#n5QJ8u=md_*FEf!gj^;$#1 z!z?`ol?l6;o?7QqI;knbtR}{y{W)n(NRqFLFEnqaQyEcFV>vTEvEpsmqt%VPvM+-( zBBCfjG^y}3D@kpIC{xI%)936>EU|Jn3(^qwh6|mZWpYy4AK)pmkW8e{D&vf#6w)@% zmCAK%;b`YIHJMDmZ)cg9ksLCrGx!n;>uXF)6V9bmP<_$fN|F2p+UlmHg|oeamC#-6 zh9Z88=yIECQO2xAXabz!f8B|BP261_XsI@mwy*s;Sh&U$CT&!Q?@MrR3CnV=*7`A1 z(gtK8$y{))NeR<)PBtof+Hsk*w@?M?vs_*2=Nw}MNvEWfu@hN-?bCYojetsg+Z3z5hAvC2EIeQaU*j*g;F-r{t7c)%#P~ zj+Ane$I5X!ou21t$}((s){#tW@3Wbtf3L7}>b9|w2xEw$7ee+b#PZCAH*>VHp+L3RKD literal 0 HcmV?d00001 diff --git a/wagtail/wagtailusers/locale/vi/LC_MESSAGES/django.mo b/wagtail/wagtailusers/locale/vi/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..a05ec5e9b76c1b751a2c25e3dce8beb5ed429923 GIT binary patch literal 463 zcmY*V!A=4(6vXIhkDfjB;6a0>TSbH-#)uG!5(!!HT$aaDUD{1sSojcr&u{T97>JWh z+SksTzUj~D$)RQuv`8F{j3B|_J)&(3(xaF@OAmrvhrCL|2IZXanz*T#Lmq}Gq(fM$!t|f+ zj`AwuRdHJ@hlt=!I!_}jwM(TpR*+X|Q}SZQDXhu;Hx`e09M8sPRf)~~0ULC(kO|NT zu<|TRrP56j&!lzWTOU!E)(^Vk!6{hU(Xp8*od{ANE59FCkfjO+>B7pC Wc8#4oL3Fk)U5hu#Zrci*LFpI1vWZOq literal 0 HcmV?d00001 diff --git a/wagtail/wagtailusers/locale/zh/LC_MESSAGES/django.mo b/wagtail/wagtailusers/locale/zh/LC_MESSAGES/django.mo index 32d3fac0831486d9f4f87922d84ab9f87cc51c46..0ac3e3b4ef45fca9043b1a475dd8c2000c73a755 100644 GIT binary patch delta 23 ecmeAd?HAop%*JJ@YiOuoXl7+>vALE_hy?&lK?S@3 delta 23 ecmeAd?HAop%*JJ*Yhb8gXl7+>xw)22hy?&lD+Rj% diff --git a/wagtail/wagtailusers/locale/zh_TW/LC_MESSAGES/django.mo b/wagtail/wagtailusers/locale/zh_TW/LC_MESSAGES/django.mo index da4ffedddfc4187ca1f07a3bfd55d332b3aa41a5..2d903e69472706c535fd9f73489efbb0d364c132 100644 GIT binary patch delta 23 ecmaDV{#1NJI6If6uA!lVp_!Gj#pXoz78U?m?FOg- delta 23 ecmaDV{#1NJI6Iexu7RO~p_!Gj<>o~878U?m*9NBm From 6bef8ea10f151016d01449d3c45ef615247c37ac Mon Sep 17 00:00:00 2001 From: Matt Westcott Date: Thu, 11 Sep 2014 16:53:18 +0100 Subject: [PATCH 183/210] Add Russian translation to release notes --- CHANGELOG.txt | 1 + CONTRIBUTORS.rst | 1 + docs/releases/0.6.rst | 1 + 3 files changed, 3 insertions(+) diff --git a/CHANGELOG.txt b/CHANGELOG.txt index 713a5c19f9..588ff7d846 100644 --- a/CHANGELOG.txt +++ b/CHANGELOG.txt @@ -11,6 +11,7 @@ Changelog * Added the register_admin_menu_item hook for registering menu items at startup * Added version indicator to the admin interface * Renamed wagtailsearch.indexed to wagtailsearch.index + * Added Russian translation * Fix: Page URL generation now returns correct URLs for sites that have the main 'serve' view rooted somewhere other than '/' (Nathan Brizendine) * Fix: Search results in the page chooser now respect the page_type parameter on PageChooserPanel * Fix: Rendition filenames are now prevented from going over 60 chars, even with a large focal_point_key diff --git a/CONTRIBUTORS.rst b/CONTRIBUTORS.rst index 64c72ff0ca..67f6c853a9 100644 --- a/CONTRIBUTORS.rst +++ b/CONTRIBUTORS.rst @@ -48,5 +48,6 @@ Translators * Polish: Łukasz Bołdys * Portuguese Brazil: Gilson Filho * Romanian: Dan Braghis +* Russian: ice9, HNKNTA * Spanish: Unai Zalakain, fooflare * Traditional Chinese (Taiwan): wdv4758h diff --git a/docs/releases/0.6.rst b/docs/releases/0.6.rst index 5064f90bee..f420104655 100644 --- a/docs/releases/0.6.rst +++ b/docs/releases/0.6.rst @@ -30,6 +30,7 @@ Minor features * MenuItems can now have bundled JavaScript * Added the ``register_admin_menu_item`` hook for registering menu items at startup. See :ref:`admin_hooks` * Added a version indicator into the admin interface (hover over the wagtail to see it) + * Added Russian translation Bug fixes From e40312f3584861e597cb26a281837fff4b3b6310 Mon Sep 17 00:00:00 2001 From: Matt Westcott Date: Thu, 11 Sep 2014 17:25:24 +0100 Subject: [PATCH 184/210] specify wagtail 0.6 in project template --- wagtail/project_template/requirements.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/wagtail/project_template/requirements.txt b/wagtail/project_template/requirements.txt index dc93a9ad77..6cecb31e2f 100644 --- a/wagtail/project_template/requirements.txt +++ b/wagtail/project_template/requirements.txt @@ -1,7 +1,7 @@ # Minimal requirements Django>=1.6.2,<1.7 South==1.0.0 -wagtail==0.5 +wagtail==0.6 # Recommended components (require additional setup): # psycopg2==2.5.2 From 0e1acdc9b5d85196eb2eb39d981798841295112c Mon Sep 17 00:00:00 2001 From: Karl Hobley Date: Fri, 12 Sep 2014 10:16:19 +0100 Subject: [PATCH 185/210] Bump supported 1.7 version to 1.7.0 --- README.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.rst b/README.rst index 77d153f26d..7dfe5bfa84 100644 --- a/README.rst +++ b/README.rst @@ -45,7 +45,7 @@ Available at `wagtail.readthedocs.org `_ and al Compatibility ~~~~~~~~~~~~~ -Wagtail supports Django 1.6.2+ and 1.7rc3+ on Python 2.6, 2.7, 3.2, 3.3 and 3.4. +Wagtail supports Django 1.6.2+ and 1.7.0+ on Python 2.6, 2.7, 3.2, 3.3 and 3.4. Wagtail's dependencies are summarised at `requirements.io `_. From 11f1bfcc15ab06b69a5a09aa50d0d6c1f4758187 Mon Sep 17 00:00:00 2001 From: Matt Westcott Date: Fri, 12 Sep 2014 10:17:23 +0100 Subject: [PATCH 186/210] Add changelog entry for #621 (late arrival...) --- CHANGELOG.txt | 1 + docs/releases/0.6.rst | 1 + 2 files changed, 2 insertions(+) diff --git a/CHANGELOG.txt b/CHANGELOG.txt index 588ff7d846..9a0a72351f 100644 --- a/CHANGELOG.txt +++ b/CHANGELOG.txt @@ -17,6 +17,7 @@ Changelog * Fix: Rendition filenames are now prevented from going over 60 chars, even with a large focal_point_key * Fix: Child relations that are defined on a model's superclass (such as the base Page model) are now picked up correctly by the page editing form, page copy operations and the replace_text management command * Fix: (For Django 1.7 support) Do not import South when using Django 1.7 (thenewguy) + * Fix: Tags on images and documents are now committed to the search index immediately on saving 0.5 (01.08.2014) ~~~~~~~~~~~~~~~~ diff --git a/docs/releases/0.6.rst b/docs/releases/0.6.rst index f420104655..3dc6f92f34 100644 --- a/docs/releases/0.6.rst +++ b/docs/releases/0.6.rst @@ -40,6 +40,7 @@ Bug fixes * Search results in the page chooser now respect the page_type parameter on PageChooserPanel. * Rendition filenames are now prevented from going over 60 chars, even with a large focal_point_key. * Child relations that are defined on a model's superclass (such as the base Page model) are now picked up correctly by the page editing form, page copy operations and the replace_text management command. + * Tags on images and documents are now committed to the search index immediately on saving. Upgrade considerations From 2f0eca05620cc315950d86c00e46ec9ae27d49e4 Mon Sep 17 00:00:00 2001 From: Karl Hobley Date: Fri, 12 Sep 2014 10:16:19 +0100 Subject: [PATCH 187/210] Bump supported 1.7 version to 1.7.0 --- README.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.rst b/README.rst index 77d153f26d..7dfe5bfa84 100644 --- a/README.rst +++ b/README.rst @@ -45,7 +45,7 @@ Available at `wagtail.readthedocs.org `_ and al Compatibility ~~~~~~~~~~~~~ -Wagtail supports Django 1.6.2+ and 1.7rc3+ on Python 2.6, 2.7, 3.2, 3.3 and 3.4. +Wagtail supports Django 1.6.2+ and 1.7.0+ on Python 2.6, 2.7, 3.2, 3.3 and 3.4. Wagtail's dependencies are summarised at `requirements.io `_. From 04da84e505175e5174075ec3b2c28752cbc3db77 Mon Sep 17 00:00:00 2001 From: Matt Westcott Date: Fri, 12 Sep 2014 10:19:39 +0100 Subject: [PATCH 188/210] Fix link to getting started docs --- README.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.rst b/README.rst index 7dfe5bfa84..3a74ec8cde 100644 --- a/README.rst +++ b/README.rst @@ -35,7 +35,7 @@ Got a question? Ask it on our `Google Group `_; see the `README `_ for installation instructions. -* See the `Getting Started `_ docs for installation (with the demo app) on a fresh Debian/Ubuntu box with production-ready dependencies, on OS X and on a Vagrant box. +* See the `Getting Started `_ docs for installation (with the demo app) on a fresh Debian/Ubuntu box with production-ready dependencies, on OS X and on a Vagrant box. * `Serafeim Papastefanos `_ has written a `tutorial `_ with all the steps to build a simple Wagtail site from scratch. * We've also provided a skeletal django-template to get started on a blank site: https://github.com/torchbox/wagtail-template From 3ce222b39d03cf3426525d3376fad87b544f82ee Mon Sep 17 00:00:00 2001 From: Karl Hobley Date: Fri, 12 Sep 2014 14:38:03 +0100 Subject: [PATCH 189/210] Changelog and release notes for manual image cropping --- CHANGELOG.txt | 4 ++++ docs/releases/0.7.rst | 30 ++++++++++++++++++++++++++++++ 2 files changed, 34 insertions(+) create mode 100644 docs/releases/0.7.rst diff --git a/CHANGELOG.txt b/CHANGELOG.txt index 9a0a72351f..dd1de0e136 100644 --- a/CHANGELOG.txt +++ b/CHANGELOG.txt @@ -1,6 +1,10 @@ Changelog ========= +0.7 (xx.xx.2014) +~~~~~~~~~~~~~~~~ + * Added interface for choosing focal point on images + 0.6 (11.09.2014) ~~~~~~~~~~~~~~~~ * Added 'wagtail start' command and project template diff --git a/docs/releases/0.7.rst b/docs/releases/0.7.rst new file mode 100644 index 0000000000..3878b4d240 --- /dev/null +++ b/docs/releases/0.7.rst @@ -0,0 +1,30 @@ +========================================== +Wagtail 0.7 release notes - IN DEVELOPMENT +========================================== + +.. contents:: + :local: + :depth: 1 + + +What's new +========== + +New interface for choosing images focal point +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + +Minor features +~~~~~~~~~~~~~~ + + +Bug fixes +~~~~~~~~~ + + +Upgrade considerations +====================== + + +Deprecated features +=================== From edf4eeea7b6d6c4afcd488e391df29f196485463 Mon Sep 17 00:00:00 2001 From: Dave Cranwell Date: Fri, 12 Sep 2014 14:48:08 +0100 Subject: [PATCH 190/210] updated jqui css file to remove duff code --- .../jquery-ui/jquery-ui-1.10.3.verdant.css | 77 ++++++++++--------- 1 file changed, 39 insertions(+), 38 deletions(-) diff --git a/wagtail/wagtailadmin/static/wagtailadmin/scss/vendor/jquery-ui/jquery-ui-1.10.3.verdant.css b/wagtail/wagtailadmin/static/wagtailadmin/scss/vendor/jquery-ui/jquery-ui-1.10.3.verdant.css index 830fbd0602..dba303ece6 100755 --- a/wagtail/wagtailadmin/static/wagtailadmin/scss/vendor/jquery-ui/jquery-ui-1.10.3.verdant.css +++ b/wagtail/wagtailadmin/static/wagtailadmin/scss/vendor/jquery-ui/jquery-ui-1.10.3.verdant.css @@ -1,8 +1,8 @@ -/*! jQuery UI - v1.10.3 - 2013-09-26 +/*! jQuery UI - v1.10.4 - 2014-09-12 * http://jqueryui.com * Includes: jquery.ui.core.css, jquery.ui.resizable.css, jquery.ui.selectable.css, jquery.ui.accordion.css, jquery.ui.autocomplete.css, jquery.ui.button.css, jquery.ui.datepicker.css, jquery.ui.dialog.css, jquery.ui.menu.css, jquery.ui.progressbar.css, jquery.ui.slider.css, jquery.ui.spinner.css, jquery.ui.tabs.css, jquery.ui.tooltip.css, jquery.ui.theme.css -* To view and modify this theme, visit http://jqueryui.com/themeroller/?ffDefault=Open Sans%2CArial%2Csans-serif&fwDefault=normal&fsDefault=1.4em&cornerRadius=0&bgColorHeader=%23246060&bgTextureHeader=flat&bgImgOpacityHeader=100&borderColorHeader=%23246060&fcHeader=%23ffffff&iconColorHeader=%23ffffff&bgColorContent=%23ffffff&bgTextureContent=flat&bgImgOpacityContent=100&borderColorContent=%23d8d8d8&fcContent=%23222222&iconColorContent=%23222222&bgColorDefault=%23ffffff&bgTextureDefault=flat&bgImgOpacityDefault=100&borderColorDefault=%23d3d3d3&fcDefault=%23555555&iconColorDefault=%23ffffff&bgColorHover=%2349c0c1&bgTextureHover=flat&bgImgOpacityHover=100&borderColorHover=%2349c0c1&fcHover=%23ffffff&iconColorHover=%23ffffff&bgColorActive=%23ffffff&bgTextureActive=glass&bgImgOpacityActive=65&borderColorActive=%23aaaaaa&fcActive=%23212121&iconColorActive=%23454545&bgColorHighlight=%23e8f8f9&bgTextureHighlight=flat&bgImgOpacityHighlight=100&borderColorHighlight=%23e8f8f9&fcHighlight=%23363636&iconColorHighlight=%2349c0c1&bgColorError=%23f7474e&bgTextureError=flat&bgImgOpacityError=100&borderColorError=%23f7474e&fcError=%23ffffff&iconColorError=%23ffffff&bgColorOverlay=%23aaaaaa&bgTextureOverlay=flat&bgImgOpacityOverlay=0&opacityOverlay=30&bgColorShadow=%23aaaaaa&bgTextureShadow=flat&bgImgOpacityShadow=0&opacityShadow=30&thicknessShadow=8px&offsetTopShadow=-8px&offsetLeftShadow=-8px&cornerRadiusShadow=8px -* Copyright 2013 jQuery Foundation and other contributors; Licensed MIT */ +* To view and modify this theme, visit http://jqueryui.com/themeroller/?ffDefault=Open%20Sans%2CArial%2Csans-serif&fwDefault=normal&fsDefault=1.2em&cornerRadius=0&bgColorHeader=%23246060&bgTextureHeader=flat&bgImgOpacityHeader=100&borderColorHeader=%23246060&fcHeader=%23ffffff&iconColorHeader=%23ffffff&bgColorContent=%23ffffff&bgTextureContent=flat&bgImgOpacityContent=100&borderColorContent=%23d8d8d8&fcContent=%23222222&iconColorContent=%23222222&bgColorDefault=%23ffffff&bgTextureDefault=flat&bgImgOpacityDefault=100&borderColorDefault=%23d3d3d3&fcDefault=%23555555&iconColorDefault=%23555555&bgColorHover=%2349c0c1&bgTextureHover=flat&bgImgOpacityHover=100&borderColorHover=%2349c0c1&fcHover=%23ffffff&iconColorHover=%23ffffff&bgColorActive=%2349c0c1&bgTextureActive=flat&bgImgOpacityActive=65&borderColorActive=%23aaaaaa&fcActive=%23ffffff&iconColorActive=%23ffffff&bgColorHighlight=%23e8f8f9&bgTextureHighlight=flat&bgImgOpacityHighlight=100&borderColorHighlight=%23e8f8f9&fcHighlight=%23363636&iconColorHighlight=%2349c0c1&bgColorError=%23f7474e&bgTextureError=flat&bgImgOpacityError=100&borderColorError=%23f7474e&fcError=%23ffffff&iconColorError=%23ffffff&bgColorOverlay=%23aaaaaa&bgTextureOverlay=flat&bgImgOpacityOverlay=0&opacityOverlay=30&bgColorShadow=%23aaaaaa&bgTextureShadow=flat&bgImgOpacityShadow=0&opacityShadow=30&thicknessShadow=8px&offsetTopShadow=-8px&offsetLeftShadow=-8px&cornerRadiusShadow=8px +* Copyright 2014 jQuery Foundation and other contributors; Licensed MIT */ /* Layout helpers ----------------------------------*/ @@ -347,9 +347,6 @@ button.ui-button::-moz-focus-inner { font-size: 1em; margin: 1px 0; } -.ui-datepicker select.ui-datepicker-month-year { - width: 100%; -} .ui-datepicker select.ui-datepicker-month, .ui-datepicker select.ui-datepicker-year { width: 49%; @@ -466,6 +463,7 @@ button.ui-button::-moz-focus-inner { border-left-width: 1px; } .ui-dialog { + overflow: hidden; position: absolute; top: 0; left: 0; @@ -488,7 +486,7 @@ button.ui-button::-moz-focus-inner { position: absolute; right: .3em; top: 50%; - width: 21px; + width: 20px; margin: -10px 0 0 0; padding: 1px; height: 20px; @@ -704,13 +702,13 @@ button.ui-button::-moz-focus-inner { overflow: hidden; right: 0; } -/* more specificity required here to overide default borders */ +/* more specificity required here to override default borders */ .ui-spinner a.ui-spinner-button { border-top: none; border-bottom: none; border-right: none; } -/* vertical centre icon */ +/* vertically center icon */ .ui-spinner .ui-icon { position: absolute; margin-top: -8px; @@ -747,7 +745,7 @@ button.ui-button::-moz-focus-inner { padding: 0; white-space: nowrap; } -.ui-tabs .ui-tabs-nav li a { +.ui-tabs .ui-tabs-nav .ui-tabs-anchor { float: left; padding: .5em 1em; text-decoration: none; @@ -756,13 +754,12 @@ button.ui-button::-moz-focus-inner { margin-bottom: -1px; padding-bottom: 1px; } -.ui-tabs .ui-tabs-nav li.ui-tabs-active a, -.ui-tabs .ui-tabs-nav li.ui-state-disabled a, -.ui-tabs .ui-tabs-nav li.ui-tabs-loading a { +.ui-tabs .ui-tabs-nav li.ui-tabs-active .ui-tabs-anchor, +.ui-tabs .ui-tabs-nav li.ui-state-disabled .ui-tabs-anchor, +.ui-tabs .ui-tabs-nav li.ui-tabs-loading .ui-tabs-anchor { cursor: text; } -.ui-tabs .ui-tabs-nav li a, /* first selector in group seems obsolete, but required to overcome bug in Opera applying cursor: text overall if defined elsewhere... */ -.ui-tabs-collapsible .ui-tabs-nav li.ui-tabs-active a { +.ui-tabs-collapsible .ui-tabs-nav li.ui-tabs-active .ui-tabs-anchor { cursor: pointer; } .ui-tabs .ui-tabs-panel { @@ -801,7 +798,7 @@ body .ui-tooltip { } .ui-widget-content { border: 1px solid #d8d8d8; - background: #ffffff url(images/ui-bg_flat_100_ffffff_40x100.png) 50% 50% repeat-x; + background: #ffffff url("images/ui-bg_flat_100_ffffff_40x100.png") 50% 50% repeat-x; color: #222222; } .ui-widget-content a { @@ -809,7 +806,7 @@ body .ui-tooltip { } .ui-widget-header { border: 1px solid #246060; - background: #246060 url(images/ui-bg_flat_100_246060_40x100.png) 50% 50% repeat-x; + background: #246060 url("images/ui-bg_flat_100_246060_40x100.png") 50% 50% repeat-x; color: #ffffff; font-weight: bold; } @@ -823,7 +820,7 @@ body .ui-tooltip { .ui-widget-content .ui-state-default, .ui-widget-header .ui-state-default { border: 1px solid #d3d3d3; - background: #ffffff url(images/ui-bg_flat_100_ffffff_40x100.png) 50% 50% repeat-x; + background: #ffffff url("images/ui-bg_flat_100_ffffff_40x100.png") 50% 50% repeat-x; font-weight: normal; color: #555555; } @@ -840,14 +837,18 @@ body .ui-tooltip { .ui-widget-content .ui-state-focus, .ui-widget-header .ui-state-focus { border: 1px solid #49c0c1; - background: #49c0c1 url(images/ui-bg_flat_100_49c0c1_40x100.png) 50% 50% repeat-x; + background: #49c0c1 url("images/ui-bg_flat_100_49c0c1_40x100.png") 50% 50% repeat-x; font-weight: normal; color: #ffffff; } .ui-state-hover a, .ui-state-hover a:hover, .ui-state-hover a:link, -.ui-state-hover a:visited { +.ui-state-hover a:visited, +.ui-state-focus a, +.ui-state-focus a:hover, +.ui-state-focus a:link, +.ui-state-focus a:visited { color: #ffffff; text-decoration: none; } @@ -855,14 +856,14 @@ body .ui-tooltip { .ui-widget-content .ui-state-active, .ui-widget-header .ui-state-active { border: 1px solid #aaaaaa; - background: #49c0c1 url(images/ui-bg_glass_65_49c0c1_1x400.png) 50% 50% repeat-x !important; + background: #49c0c1 url("images/ui-bg_flat_65_49c0c1_40x100.png") 50% 50% repeat-x; font-weight: normal; - color: white; + color: #ffffff; } .ui-state-active a, .ui-state-active a:link, .ui-state-active a:visited { - color: #212121; + color: #ffffff; text-decoration: none; } @@ -872,7 +873,7 @@ body .ui-tooltip { .ui-widget-content .ui-state-highlight, .ui-widget-header .ui-state-highlight { border: 1px solid #e8f8f9; - background: #e8f8f9 url(images/ui-bg_flat_100_e8f8f9_40x100.png) 50% 50% repeat-x; + background: #e8f8f9 url("images/ui-bg_flat_100_e8f8f9_40x100.png") 50% 50% repeat-x; color: #363636; } .ui-state-highlight a, @@ -884,7 +885,7 @@ body .ui-tooltip { .ui-widget-content .ui-state-error, .ui-widget-header .ui-state-error { border: 1px solid #f7474e; - background: #f7474e url(images/ui-bg_flat_100_f7474e_40x100.png) 50% 50% repeat-x; + background: #f7474e url("images/ui-bg_flat_100_f7474e_40x100.png") 50% 50% repeat-x; color: #ffffff; } .ui-state-error a, @@ -930,27 +931,27 @@ body .ui-tooltip { } .ui-icon, .ui-widget-content .ui-icon { - background-image: url(images/ui-icons_222222_256x240.png); + background-image: url("images/ui-icons_222222_256x240.png"); } .ui-widget-header .ui-icon { - background-image: url(images/ui-icons_ffffff_256x240.png); + background-image: url("images/ui-icons_ffffff_256x240.png"); } .ui-state-default .ui-icon { - background-image: url(images/ui-icons_ffffff_256x240.png); + background-image: url("images/ui-icons_555555_256x240.png"); } .ui-state-hover .ui-icon, .ui-state-focus .ui-icon { - background-image: url(images/ui-icons_ffffff_256x240.png); + background-image: url("images/ui-icons_ffffff_256x240.png"); } .ui-state-active .ui-icon { - background-image: url(images/ui-icons_454545_256x240.png); + background-image: url("images/ui-icons_ffffff_256x240.png"); } .ui-state-highlight .ui-icon { - background-image: url(images/ui-icons_49c0c1_256x240.png); + background-image: url("images/ui-icons_49c0c1_256x240.png"); } .ui-state-error .ui-icon, .ui-state-error-text .ui-icon { - background-image: url(images/ui-icons_ffffff_256x240.png); + background-image: url("images/ui-icons_ffffff_256x240.png"); } /* positioning */ @@ -1140,37 +1141,37 @@ body .ui-tooltip { .ui-corner-top, .ui-corner-left, .ui-corner-tl { - border-top-left-radius: 3px; + border-top-left-radius: 0; } .ui-corner-all, .ui-corner-top, .ui-corner-right, .ui-corner-tr { - border-top-right-radius: 3px; + border-top-right-radius: 0; } .ui-corner-all, .ui-corner-bottom, .ui-corner-left, .ui-corner-bl { - border-bottom-left-radius: 3px; + border-bottom-left-radius: 0; } .ui-corner-all, .ui-corner-bottom, .ui-corner-right, .ui-corner-br { - border-bottom-right-radius: 3px; + border-bottom-right-radius: 0; } /* Overlays */ .ui-widget-overlay { - background: #aaaaaa url(images/ui-bg_flat_0_aaaaaa_40x100.png) 50% 50% repeat-x; + background: #aaaaaa url("images/ui-bg_flat_0_aaaaaa_40x100.png") 50% 50% repeat-x; opacity: .3; filter: Alpha(Opacity=30); } .ui-widget-shadow { margin: -8px 0 0 -8px; padding: 8px; - background: #aaaaaa url(images/ui-bg_flat_0_aaaaaa_40x100.png) 50% 50% repeat-x; + background: #aaaaaa url("images/ui-bg_flat_0_aaaaaa_40x100.png") 50% 50% repeat-x; opacity: .3; filter: Alpha(Opacity=30); border-radius: 8px; From 45a20a6f140713e0e87e58e5ebddd59f0daf0c16 Mon Sep 17 00:00:00 2001 From: Matt Westcott Date: Mon, 15 Sep 2014 18:06:09 +0100 Subject: [PATCH 191/210] Additions to the 'getting started' documentation so that we're not under-selling the demo site as a way to get started --- docs/editor_manual/index.rst | 2 ++ docs/getting_started/installation.rst | 10 +++++++--- 2 files changed, 9 insertions(+), 3 deletions(-) diff --git a/docs/editor_manual/index.rst b/docs/editor_manual/index.rst index b7b5c84f75..e7b2139033 100644 --- a/docs/editor_manual/index.rst +++ b/docs/editor_manual/index.rst @@ -1,3 +1,5 @@ +.. _editor_manual: + Using Wagtail: an Editor's guide ================================ diff --git a/docs/getting_started/installation.rst b/docs/getting_started/installation.rst index ad161b0220..868912541d 100644 --- a/docs/getting_started/installation.rst +++ b/docs/getting_started/installation.rst @@ -10,8 +10,10 @@ A basic Wagtail setup can be installed on your machine with only a few prerequis Whether you just want to try out the demo site, or you're ready to dive in and create a Wagtail site with all bells and whistles enabled, we strongly recommend the Vagrant approach. Nevertheless, if you're the sort of person who balks at the idea of downloading a whole operating system just to run a web app, we've got you covered too. Start from `A basic Wagtail installation`_ below. -The no-installation route -========================= +The demo site (a.k.a. the no-installation route) +================================================ + +We provide a demo site containing a set of standard templates and page types - if you're new to Wagtail, this is the best way to try it out and familiarise yourself with how Wagtail works from the point of view of an editor. If you're happy to use Vagrant, and you just want to set up the Wagtail demo site, or any other pre-existing Wagtail site that ships with Vagrant support, you don't need to install Wagtail at all. Install `Vagrant `__ and `VirtualBox `__, and run:: @@ -27,7 +29,7 @@ Then, within the SSH session:: ./manage.py runserver 0.0.0.0:8000 -This will make the demo site available on your host machine at the URL http://localhost:8111/ - you can access the Wagtail admin interface at http://localhost:8111/admin/ . +This will make the demo site available on your host machine at the URL http://localhost:8111/ - you can access the Wagtail admin interface at http://localhost:8111/admin/ . Further instructions can be found at :ref:`editor_manual`. Once you’ve experimented with the demo site and are ready to build your own site, it's time to install Wagtail on your host machine. Even if you intend to do all further Wagtail work within Vagrant, installing the Wagtail package on your host machine will provide the ``wagtail start`` command that sets up the initial file structure for your project. @@ -35,6 +37,8 @@ Once you’ve experimented with the demo site and are ready to build your own si A basic Wagtail installation ============================ +This provides everything you need to create a new Wagtail project from scratch, containing no page definitions or templates other than a basic homepage as a starting point for building your site. (For a gentler introduction to Wagtail, you may wish to try out the demo site first!) + You will need Python's `pip `__ package manager. We also recommend `virtualenvwrapper `_ so that you can manage multiple independent Python environments for different projects - although this is not strictly necessary if you intend to do all your development under Vagrant. Wagtail is based on the Django web framework and various other Python libraries. Most of these are pure Python and will install automatically using ``pip``, but there are a few native-code components that require further attention: From 9f8a5f237947560772e7bb7889e9496cbd29ce6b Mon Sep 17 00:00:00 2001 From: Matt Westcott Date: Mon, 15 Sep 2014 19:36:07 +0100 Subject: [PATCH 192/210] Remove content_type template filter from the project template - fixes #626 --- CHANGELOG.txt | 1 + docs/releases/0.7.rst | 2 ++ docs/releases/index.rst | 1 + .../project_template/core/templates/core/home_page.html | 2 +- wagtail/project_template/core/templatetags/core_tags.py | 9 --------- 5 files changed, 5 insertions(+), 10 deletions(-) diff --git a/CHANGELOG.txt b/CHANGELOG.txt index dd1de0e136..336508a02f 100644 --- a/CHANGELOG.txt +++ b/CHANGELOG.txt @@ -4,6 +4,7 @@ Changelog 0.7 (xx.xx.2014) ~~~~~~~~~~~~~~~~ * Added interface for choosing focal point on images + * Removed 'content_type' template filter from the project template, as the same thing can be accomplished with self.get_verbose_name|slugify 0.6 (11.09.2014) ~~~~~~~~~~~~~~~~ diff --git a/docs/releases/0.7.rst b/docs/releases/0.7.rst index 3878b4d240..2f3d490f28 100644 --- a/docs/releases/0.7.rst +++ b/docs/releases/0.7.rst @@ -17,6 +17,8 @@ New interface for choosing images focal point Minor features ~~~~~~~~~~~~~~ + * The ``content_type`` template filter has been removed from the project template, as the same thing can be accomplished with ``self.get_verbose_name|slugify``. + Bug fixes ~~~~~~~~~ diff --git a/docs/releases/index.rst b/docs/releases/index.rst index a9760c2392..fce87c573f 100644 --- a/docs/releases/index.rst +++ b/docs/releases/index.rst @@ -5,6 +5,7 @@ Release notes :maxdepth: 1 roadmap + 0.7 0.6 0.5 0.4.1 diff --git a/wagtail/project_template/core/templates/core/home_page.html b/wagtail/project_template/core/templates/core/home_page.html index 6660bb30a9..0758518788 100644 --- a/wagtail/project_template/core/templates/core/home_page.html +++ b/wagtail/project_template/core/templates/core/home_page.html @@ -2,7 +2,7 @@ {% templatetag openblock %} load static core_tags {% templatetag closeblock %} -{% templatetag openblock %} block body_class {% templatetag closeblock %}template-{% templatetag openvariable %} self|content_type|slugify {% templatetag closevariable %}{% templatetag openblock %} endblock {% templatetag closeblock %} +{% templatetag openblock %} block body_class {% templatetag closeblock %}template-{% templatetag openvariable %} self.get_verbose_name|slugify {% templatetag closevariable %}{% templatetag openblock %} endblock {% templatetag closeblock %} {% templatetag openblock %} block content {% templatetag closeblock %}

    Welcome to your new Wagtail site!

    diff --git a/wagtail/project_template/core/templatetags/core_tags.py b/wagtail/project_template/core/templatetags/core_tags.py index 05ebe808d6..4bd3b15fe4 100644 --- a/wagtail/project_template/core/templatetags/core_tags.py +++ b/wagtail/project_template/core/templatetags/core_tags.py @@ -1,12 +1,3 @@ from django import template -from django.conf import settings register = template.Library() - - -# Return the model name/"content type" as a string e.g BlogPage, NewsListingPage. -# Can be used with "slugify" to create CSS-friendly classnames -# Usage: {% verbatim %}{{ self|content_type|slugify }}{% endverbatim %} -@register.filter -def content_type(model): - return model.__class__.__name__ From 3857576f9075f46ddcc430eadeeb5250d4c0e9b3 Mon Sep 17 00:00:00 2001 From: Karl Hobley Date: Fri, 22 Aug 2014 15:34:17 +0100 Subject: [PATCH 193/210] Make Page.copy also copy revisions --- wagtail/wagtailcore/models.py | 9 +++++- wagtail/wagtailcore/tests/test_page_model.py | 30 ++++++++++++++++++++ 2 files changed, 38 insertions(+), 1 deletion(-) diff --git a/wagtail/wagtailcore/models.py b/wagtail/wagtailcore/models.py index 3db7a71a0e..c27336bb2a 100644 --- a/wagtail/wagtailcore/models.py +++ b/wagtail/wagtailcore/models.py @@ -601,7 +601,7 @@ class Page(six.with_metaclass(PageBase, MP_Node, ClusterableModel, index.Indexed new_self.save() new_self._update_descendant_url_paths(old_url_path, new_url_path) - def copy(self, recursive=False, to=None, update_attrs=None): + def copy(self, recursive=False, to=None, update_attrs=None, copy_revisions=True): # Make a copy page_copy = Page.objects.get(id=self.id).specific page_copy.pk = None @@ -631,6 +631,13 @@ class Page(six.with_metaclass(PageBase, MP_Node, ClusterableModel, index.Indexed setattr(child_object, parental_key_name, page_copy.id) child_object.save() + # Copy revisions + if copy_revisions: + for revision in self.revisions.all(): + revision.pk = None + revision.page = page_copy + revision.save() + # Copy child pages if recursive: for child_page in self.get_children(): diff --git a/wagtail/wagtailcore/tests/test_page_model.py b/wagtail/wagtailcore/tests/test_page_model.py index c91c00964d..2d505f943e 100644 --- a/wagtail/wagtailcore/tests/test_page_model.py +++ b/wagtail/wagtailcore/tests/test_page_model.py @@ -413,6 +413,19 @@ class TestCopyPage(TestCase): self.assertEqual(new_christmas_event.advert_placements.count(), 1, "Child objects defined on the superclass weren't copied") self.assertEqual(christmas_event.advert_placements.count(), 1, "Child objects defined on the superclass were removed from the original page") + def test_copy_page_copies_revisions(self): + christmas_event = EventPage.objects.get(url_path='/home/events/christmas/') + christmas_event.save_revision() + + # Copy it + new_christmas_event = christmas_event.copy(update_attrs={'title': "New christmas event", 'slug': 'new-christmas-event'}) + + # Check that the revisions were copied + self.assertEqual(new_christmas_event.revisions.count(), 1, "Revisions weren't copied") + + # Check that the revisions weren't removed from old page + self.assertEqual(christmas_event.revisions.count(), 1, "Revisions were removed from the original page") + def test_copy_page_copies_child_objects_with_nonspecific_class(self): # Get chrismas page as Page instead of EventPage christmas_event = Page.objects.get(url_path='/home/events/christmas/') @@ -458,3 +471,20 @@ class TestCopyPage(TestCase): # Check that the speakers weren't removed from old page self.assertEqual(old_christmas_event.specific.speakers.count(), 1, "Child objects were removed from the original page") + + def test_copy_page_copies_recursively_with_revisions(self): + events_index = EventIndex.objects.get(url_path='/home/events/') + old_christmas_event = events_index.get_children().filter(slug='christmas').first() + old_christmas_event.save_revision() + + # Copy it + new_events_index = events_index.copy(recursive=True, update_attrs={'title': "New events index", 'slug': 'new-events-index'}) + + # Get christmas event + new_christmas_event = new_events_index.get_children().filter(slug='christmas').first() + + # Check that the revisions were copied + self.assertEqual(new_christmas_event.specific.revisions.count(), 1, "Revisions weren't copied") + + # Check that the revisions weren't removed from old page + self.assertEqual(old_christmas_event.specific.revisions.count(), 1, "Revisions were removed from the original page") From 28b0f29d188efaf7aae1510711a5d4753bbd6fee Mon Sep 17 00:00:00 2001 From: Karl Hobley Date: Tue, 16 Sep 2014 09:18:49 +0100 Subject: [PATCH 194/210] Clear submitted_for_moderation and approved_go_live_at of copied revisions --- requirements-dev.txt | 1 + tox.ini | 1 + wagtail/wagtailcore/models.py | 2 ++ wagtail/wagtailcore/tests/test_page_model.py | 29 ++++++++++++++++++++ 4 files changed, 33 insertions(+) diff --git a/requirements-dev.txt b/requirements-dev.txt index 6bc561b0ca..82d3e09ab8 100644 --- a/requirements-dev.txt +++ b/requirements-dev.txt @@ -3,3 +3,4 @@ coverage==3.7.1 flake8==2.2.1 mock==1.0.1 python-dateutil==2.2 +pytz==2014.7 diff --git a/tox.ini b/tox.ini index a3a691f2d4..dbb8a5620e 100644 --- a/tox.ini +++ b/tox.ini @@ -15,6 +15,7 @@ base = elasticsearch==1.1.0 mock==1.0.1 python-dateutil==2.2 + pytz==2014.7 Embedly coverage diff --git a/wagtail/wagtailcore/models.py b/wagtail/wagtailcore/models.py index c27336bb2a..6fd999290e 100644 --- a/wagtail/wagtailcore/models.py +++ b/wagtail/wagtailcore/models.py @@ -635,6 +635,8 @@ class Page(six.with_metaclass(PageBase, MP_Node, ClusterableModel, index.Indexed if copy_revisions: for revision in self.revisions.all(): revision.pk = None + revision.submitted_for_moderation = False + revision.approved_go_live_at = None revision.page = page_copy revision.save() diff --git a/wagtail/wagtailcore/tests/test_page_model.py b/wagtail/wagtailcore/tests/test_page_model.py index 2d505f943e..5ebb9de623 100644 --- a/wagtail/wagtailcore/tests/test_page_model.py +++ b/wagtail/wagtailcore/tests/test_page_model.py @@ -1,4 +1,7 @@ import warnings +import datetime + +import pytz from django.test import TestCase, Client from django.test.utils import override_settings @@ -426,6 +429,32 @@ class TestCopyPage(TestCase): # Check that the revisions weren't removed from old page self.assertEqual(christmas_event.revisions.count(), 1, "Revisions were removed from the original page") + def test_copy_page_copies_revisions_and_doesnt_submit_for_moderation(self): + christmas_event = EventPage.objects.get(url_path='/home/events/christmas/') + christmas_event.save_revision(submitted_for_moderation=True) + + # Copy it + new_christmas_event = christmas_event.copy(update_attrs={'title': "New christmas event", 'slug': 'new-christmas-event'}) + + # Check that the old revision is still submitted for moderation + self.assertTrue(christmas_event.revisions.first().submitted_for_moderation) + + # Check that the new revision is not submitted for moderation + self.assertFalse(new_christmas_event.revisions.first().submitted_for_moderation) + + def test_copy_page_copies_revisions_and_doesnt_schedule(self): + christmas_event = EventPage.objects.get(url_path='/home/events/christmas/') + christmas_event.save_revision(approved_go_live_at=datetime.datetime(2014, 9, 16, 9, 12, 00, tzinfo=pytz.utc)) + + # Copy it + new_christmas_event = christmas_event.copy(update_attrs={'title': "New christmas event", 'slug': 'new-christmas-event'}) + + # Check that the old revision is still scheduled + self.assertEqual(christmas_event.revisions.first().approved_go_live_at, datetime.datetime(2014, 9, 16, 9, 12, 00, tzinfo=pytz.utc)) + + # Check that the new revision is not scheduled + self.assertEqual(new_christmas_event.revisions.first().approved_go_live_at, None) + def test_copy_page_copies_child_objects_with_nonspecific_class(self): # Get chrismas page as Page instead of EventPage christmas_event = Page.objects.get(url_path='/home/events/christmas/') From 6b2b3ca43e568fdabbd1e273764b6f92c6b41763 Mon Sep 17 00:00:00 2001 From: Matt Westcott Date: Tue, 16 Sep 2014 10:20:18 +0100 Subject: [PATCH 195/210] release note for #568 --- CHANGELOG.txt | 1 + docs/releases/0.7.rst | 1 + 2 files changed, 2 insertions(+) diff --git a/CHANGELOG.txt b/CHANGELOG.txt index 336508a02f..6c748f45a2 100644 --- a/CHANGELOG.txt +++ b/CHANGELOG.txt @@ -5,6 +5,7 @@ Changelog ~~~~~~~~~~~~~~~~ * Added interface for choosing focal point on images * Removed 'content_type' template filter from the project template, as the same thing can be accomplished with self.get_verbose_name|slugify + * Page copy operations now also copy the page revision history 0.6 (11.09.2014) ~~~~~~~~~~~~~~~~ diff --git a/docs/releases/0.7.rst b/docs/releases/0.7.rst index 2f3d490f28..42eea8845d 100644 --- a/docs/releases/0.7.rst +++ b/docs/releases/0.7.rst @@ -18,6 +18,7 @@ Minor features ~~~~~~~~~~~~~~ * The ``content_type`` template filter has been removed from the project template, as the same thing can be accomplished with ``self.get_verbose_name|slugify``. + * Page copy operations now also copy the page revision history Bug fixes From c68dcff7bc2c07b91ec7b141bd70e896276fc5da Mon Sep 17 00:00:00 2001 From: Matt Westcott Date: Tue, 16 Sep 2014 11:55:05 +0100 Subject: [PATCH 196/210] copyediting on parent_page_types documentation --- docs/core_components/pages/theory.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/core_components/pages/theory.rst b/docs/core_components/pages/theory.rst index f4929f2926..639ee34f2b 100644 --- a/docs/core_components/pages/theory.rst +++ b/docs/core_components/pages/theory.rst @@ -52,7 +52,7 @@ A Parent node could provide its own function returning its descendant objects. return events -This example makes sure to limit the returned objects to pieces of content which make sense, specifically ones which have been published through Wagtail's admin interface (``live()``) and are children of this node (``descendant_of(self)``). By setting a ``subpage_types`` class property in your model, you can specify which models are allowed to be set as children, and by settings a ``parent_page_types`` class property, you can specify which models are allowed to parent certain children. Wagtail will allow any ``Page``-derived model by default. Regardless, it's smart for a parent model to provide an index filtered to make sense. +This example makes sure to limit the returned objects to pieces of content which make sense, specifically ones which have been published through Wagtail's admin interface (``live()``) and are children of this node (``descendant_of(self)``). By setting a ``subpage_types`` class property in your model, you can specify which models are allowed to be set as children, and by setting a ``parent_page_types`` class property, you can specify which models are allowed to be parents of this page model. Wagtail will allow any ``Page``-derived model by default. Regardless, it's smart for a parent model to provide an index filtered to make sense. Leaves From f28f7f92c2eb2c156c57d2f9ddcf4fcadd76f010 Mon Sep 17 00:00:00 2001 From: Matt Westcott Date: Tue, 16 Sep 2014 11:55:40 +0100 Subject: [PATCH 197/210] in to -> into --- wagtail/wagtailcore/utils.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/wagtail/wagtailcore/utils.py b/wagtail/wagtailcore/utils.py index 403c79bf38..dcd3cf6d53 100644 --- a/wagtail/wagtailcore/utils.py +++ b/wagtail/wagtailcore/utils.py @@ -10,7 +10,7 @@ def camelcase_to_underscore(str): def resolve_model_string(model_string, default_app=None): """ - Resolve an 'app_label.model_name' string in to an actual model class. + Resolve an 'app_label.model_name' string into an actual model class. If a model class is passed in, just return that. """ if isinstance(model_string, string_types): @@ -22,17 +22,17 @@ def resolve_model_string(model_string, default_app=None): app_label = default_app model_name = model_string else: - raise ValueError("Can not resolve {0!r} in to a model. Model names " + raise ValueError("Can not resolve {0!r} into a model. Model names " "should be in the form app_label.model_name".format( model_string), model_string) model = get_model(app_label, model_name) if not model: - raise LookupError("Can not resolve {0!r} in to a model".format(model_string), model_string) + raise LookupError("Can not resolve {0!r} into a model".format(model_string), model_string) return model elif model_string is not None and issubclass(model_string, Model): return model else: - raise LookupError("Can not resolve {0!r} in to a model".format(model_string), model_string) + raise LookupError("Can not resolve {0!r} into a model".format(model_string), model_string) From 4398b64282e4b688a365da65068eb172b42d9674 Mon Sep 17 00:00:00 2001 From: Matt Westcott Date: Tue, 16 Sep 2014 11:57:03 +0100 Subject: [PATCH 198/210] remove allowed_parent_pages / allowed_subpages. allowed_parent_pages was a (broken) relic of the aborted no-tree add-page interface where you selected page type first and then specify where to put it. In that context, allowed_subpages doesn't make sense because the page you're about to add doesn't have subpages... --- wagtail/wagtailcore/models.py | 14 -------------- 1 file changed, 14 deletions(-) diff --git a/wagtail/wagtailcore/models.py b/wagtail/wagtailcore/models.py index e9afaddea7..126c9c9239 100644 --- a/wagtail/wagtailcore/models.py +++ b/wagtail/wagtailcore/models.py @@ -573,20 +573,6 @@ class Page(six.with_metaclass(PageBase, MP_Node, ClusterableModel, index.Indexed return [ct for ct in cls.clean_subpage_types() if cls_ct in ct.model_class().clean_parent_page_types()] - @classmethod - def allowed_parent_pages(cls): - """ - Returns the list of pages that this page type can be a subpage of - """ - return Page.objects.filter(content_type__in=cls.allowed_parent_page_types()) - - @classmethod - def allowed_subpages(cls): - """ - Returns the list of pages that this page type can be a parent page of - """ - return Page.objects.filter(content_type__in=cls.allowed_subpage_types()) - @classmethod def get_verbose_name(cls): """ From b4097dce1d2942c1ae5dcfa53861578ede2d06a5 Mon Sep 17 00:00:00 2001 From: Matt Westcott Date: Tue, 16 Sep 2014 15:38:28 +0100 Subject: [PATCH 199/210] add unit tests for allowed_subpage_types and allowed_parent_page_types --- wagtail/wagtailcore/tests/test_page_model.py | 38 +++++++++++++++++++- 1 file changed, 37 insertions(+), 1 deletion(-) diff --git a/wagtail/wagtailcore/tests/test_page_model.py b/wagtail/wagtailcore/tests/test_page_model.py index 5ebb9de623..804b2c4e14 100644 --- a/wagtail/wagtailcore/tests/test_page_model.py +++ b/wagtail/wagtailcore/tests/test_page_model.py @@ -6,9 +6,10 @@ import pytz from django.test import TestCase, Client from django.test.utils import override_settings from django.http import HttpRequest, Http404 +from django.contrib.contenttypes.models import ContentType from wagtail.wagtailcore.models import Page, Site -from wagtail.tests.models import EventPage, EventIndex, SimplePage, PageWithOldStyleRouteMethod +from wagtail.tests.models import EventPage, EventIndex, SimplePage, PageWithOldStyleRouteMethod, BusinessIndex, BusinessSubIndex, BusinessChild, StandardIndex class TestSiteRouting(TestCase): @@ -517,3 +518,38 @@ class TestCopyPage(TestCase): # Check that the revisions weren't removed from old page self.assertEqual(old_christmas_event.specific.revisions.count(), 1, "Revisions were removed from the original page") + + +class TestSubpageTypeBusinessRules(TestCase): + def test_allowed_subpage_types(self): + # SimplePage does not define any restrictions on subpage types + # SimplePage is a valid subpage of SimplePage + self.assertIn(ContentType.objects.get_for_model(SimplePage), SimplePage.allowed_subpage_types()) + # BusinessIndex is a valid subpage of SimplePage + self.assertIn(ContentType.objects.get_for_model(BusinessIndex), SimplePage.allowed_subpage_types()) + # BusinessSubIndex is not valid, because it explicitly omits SimplePage from parent_page_types + self.assertNotIn(ContentType.objects.get_for_model(BusinessSubIndex), SimplePage.allowed_subpage_types()) + + # BusinessChild has an empty subpage_types list, so does not allow anything + self.assertNotIn(ContentType.objects.get_for_model(SimplePage), BusinessChild.allowed_subpage_types()) + self.assertNotIn(ContentType.objects.get_for_model(BusinessIndex), BusinessChild.allowed_subpage_types()) + self.assertNotIn(ContentType.objects.get_for_model(BusinessSubIndex), BusinessChild.allowed_subpage_types()) + + # BusinessSubIndex only allows BusinessChild as subpage type + self.assertNotIn(ContentType.objects.get_for_model(SimplePage), BusinessSubIndex.allowed_subpage_types()) + self.assertIn(ContentType.objects.get_for_model(BusinessChild), BusinessSubIndex.allowed_subpage_types()) + + def test_allowed_parent_page_types(self): + # SimplePage does not define any restrictions on parent page types + # SimplePage is a valid parent page of SimplePage + self.assertIn(ContentType.objects.get_for_model(SimplePage), SimplePage.allowed_parent_page_types()) + # BusinessChild cannot be a parent of anything + self.assertNotIn(ContentType.objects.get_for_model(BusinessChild), SimplePage.allowed_parent_page_types()) + + # StandardIndex does not allow anything as a parent + self.assertNotIn(ContentType.objects.get_for_model(SimplePage), StandardIndex.allowed_parent_page_types()) + self.assertNotIn(ContentType.objects.get_for_model(StandardIndex), StandardIndex.allowed_parent_page_types()) + + # BusinessSubIndex only allows BusinessIndex as a parent + self.assertNotIn(ContentType.objects.get_for_model(SimplePage), BusinessSubIndex.allowed_parent_page_types()) + self.assertIn(ContentType.objects.get_for_model(BusinessIndex), BusinessSubIndex.allowed_parent_page_types()) From fa558b149d5118ff4f4a93325119405d91882403 Mon Sep 17 00:00:00 2001 From: Matt Westcott Date: Tue, 16 Sep 2014 15:44:42 +0100 Subject: [PATCH 200/210] Fix ability to pass a class object in subpage_types / parent_page_types --- wagtail/tests/models.py | 2 +- wagtail/wagtailcore/utils.py | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/wagtail/tests/models.py b/wagtail/tests/models.py index 66709b8978..53a9b27963 100644 --- a/wagtail/tests/models.py +++ b/wagtail/tests/models.py @@ -404,7 +404,7 @@ class BusinessSubIndex(Page): class BusinessChild(Page): """ Can only be placed under Business indexes, no children allowed """ subpage_types = [] - parent_page_types = ['tests.BusinessIndex', 'tests.BusinessSubIndex'] + parent_page_types = ['tests.BusinessIndex', BusinessSubIndex] class SearchTest(models.Model, index.Indexed): diff --git a/wagtail/wagtailcore/utils.py b/wagtail/wagtailcore/utils.py index dcd3cf6d53..1880684bc6 100644 --- a/wagtail/wagtailcore/utils.py +++ b/wagtail/wagtailcore/utils.py @@ -31,8 +31,8 @@ def resolve_model_string(model_string, default_app=None): raise LookupError("Can not resolve {0!r} into a model".format(model_string), model_string) return model - elif model_string is not None and issubclass(model_string, Model): - return model + elif isinstance(model_string, type) and issubclass(model_string, Model): + return model_string else: raise LookupError("Can not resolve {0!r} into a model".format(model_string), model_string) From 04c4e380bae6c1b7a8f5ccb1382225c694b2f692 Mon Sep 17 00:00:00 2001 From: Dave Cranwell Date: Tue, 16 Sep 2014 15:45:22 +0100 Subject: [PATCH 201/210] Update README.rst --- README.rst | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/README.rst b/README.rst index 3a74ec8cde..1ea2dcd3d6 100644 --- a/README.rst +++ b/README.rst @@ -32,6 +32,13 @@ Find out more at `wagtail.io `_. Got a question? Ask it on our `Google Group `_. +Who's using it? +~~~~~~~~~~~~~~~ +We've a list of public Wagtail sites here: https://github.com/torchbox/wagtail/wiki/Public-Wagtail-sites + +Got one of your own? Feel free to add it! + + Getting started ~~~~~~~~~~~~~~~ * To get you up and running quickly, we've provided a demonstration site with all the configuration in place, at `github.com/torchbox/wagtaildemo `_; see the `README `_ for installation instructions. From 4ed76af781168b1ad966b4d39bd9d758228787b6 Mon Sep 17 00:00:00 2001 From: Matt Westcott Date: Tue, 16 Sep 2014 15:47:40 +0100 Subject: [PATCH 202/210] release note for #491 --- CHANGELOG.txt | 1 + docs/releases/0.7.rst | 4 ++-- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.txt b/CHANGELOG.txt index 6c748f45a2..d30c4bc65c 100644 --- a/CHANGELOG.txt +++ b/CHANGELOG.txt @@ -6,6 +6,7 @@ Changelog * Added interface for choosing focal point on images * Removed 'content_type' template filter from the project template, as the same thing can be accomplished with self.get_verbose_name|slugify * Page copy operations now also copy the page revision history + * Page models now support a 'parent_page_types' property in addition to 'subpage types', to restrict the types of page they can be created under 0.6 (11.09.2014) ~~~~~~~~~~~~~~~~ diff --git a/docs/releases/0.7.rst b/docs/releases/0.7.rst index 42eea8845d..19b89216ac 100644 --- a/docs/releases/0.7.rst +++ b/docs/releases/0.7.rst @@ -18,8 +18,8 @@ Minor features ~~~~~~~~~~~~~~ * The ``content_type`` template filter has been removed from the project template, as the same thing can be accomplished with ``self.get_verbose_name|slugify``. - * Page copy operations now also copy the page revision history - + * Page copy operations now also copy the page revision history. + * Page models now support a ``parent_page_types`` property in addition to ``subpage types``, to restrict the types of page they can be created under. Bug fixes ~~~~~~~~~ From 354e4930f15e3dcc43e1151c2b5420ab321d155c Mon Sep 17 00:00:00 2001 From: Matt Westcott Date: Tue, 16 Sep 2014 16:38:36 +0100 Subject: [PATCH 203/210] use absolute imports to wagtailadmin SCSS files from wagtailimages --- .../static/wagtailimages/scss/add-multiple.scss | 6 +++--- .../static/wagtailimages/scss/focal-point-chooser.scss | 4 ++-- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/wagtail/wagtailimages/static/wagtailimages/scss/add-multiple.scss b/wagtail/wagtailimages/static/wagtailimages/scss/add-multiple.scss index 36c88665bc..161b9e5ef6 100644 --- a/wagtail/wagtailimages/static/wagtailimages/scss/add-multiple.scss +++ b/wagtail/wagtailimages/static/wagtailimages/scss/add-multiple.scss @@ -1,6 +1,6 @@ -@import "../../wagtailadmin/static/wagtailadmin/scss/variables.scss"; -@import "../../wagtailadmin/static/wagtailadmin/scss/mixins.scss"; -@import "../../wagtailadmin/static/wagtailadmin/scss/grid.scss"; +@import "wagtailadmin/scss/variables.scss"; +@import "wagtailadmin/scss/mixins.scss"; +@import "wagtailadmin/scss/grid.scss"; .replace-file-input{ display:inline-block; diff --git a/wagtail/wagtailimages/static/wagtailimages/scss/focal-point-chooser.scss b/wagtail/wagtailimages/static/wagtailimages/scss/focal-point-chooser.scss index f26177a999..2e36063dfd 100644 --- a/wagtail/wagtailimages/static/wagtailimages/scss/focal-point-chooser.scss +++ b/wagtail/wagtailimages/static/wagtailimages/scss/focal-point-chooser.scss @@ -1,5 +1,5 @@ -@import "../../wagtailadmin/static/wagtailadmin/scss/variables.scss"; -@import "../../wagtailadmin/static/wagtailadmin/scss/mixins.scss"; +@import "wagtailadmin/scss/variables.scss"; +@import "wagtailadmin/scss/mixins.scss"; .focal-point-chooser { position: relative; From 22b32d767e6e45b32b7523aa5a7c8bc013001648 Mon Sep 17 00:00:00 2001 From: Tom Dyson Date: Wed, 17 Sep 2014 11:17:02 +0100 Subject: [PATCH 204/210] Update installation docs wagtail start command needs pip install requirements.txt in 0.6 --- docs/getting_started/installation.rst | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/docs/getting_started/installation.rst b/docs/getting_started/installation.rst index 868912541d..294144bcb4 100644 --- a/docs/getting_started/installation.rst +++ b/docs/getting_started/installation.rst @@ -63,9 +63,10 @@ You will now be able to run the following command to set up an initial file stru **Without Vagrant:** Run the following steps to complete setup of your project (the ``migrate`` step will prompt you to set up a superuser account):: cd myprojectname - ./manage.py syncdb - ./manage.py migrate - ./manage.py runserver + pip install -r requirements.txt + python manage.py syncdb + python manage.py migrate + python manage.py runserver Your site is now accessible at http://localhost:8000, with the admin backend available at http://localhost:8000/admin/ . From 344df1d4148707d8d70c9389d28639a7c0cc7fd5 Mon Sep 17 00:00:00 2001 From: Jose Lourenco Date: Wed, 17 Sep 2014 17:44:58 +0100 Subject: [PATCH 205/210] add 0.6.0 localized files --- .../locale/pt_PT/LC_MESSAGES/django.mo | Bin 17654 -> 18169 bytes .../locale/pt_PT/LC_MESSAGES/django.po | 14 +- .../locale/pt_PT/LC_MESSAGES/django.mo | Bin 0 -> 2348 bytes .../locale/pt_PT/LC_MESSAGES/django.po | 136 ++++++++++++++++++ 4 files changed, 144 insertions(+), 6 deletions(-) create mode 100644 wagtail/wagtailforms/locale/pt_PT/LC_MESSAGES/django.mo create mode 100644 wagtail/wagtailforms/locale/pt_PT/LC_MESSAGES/django.po diff --git a/wagtail/wagtailadmin/locale/pt_PT/LC_MESSAGES/django.mo b/wagtail/wagtailadmin/locale/pt_PT/LC_MESSAGES/django.mo index f17ea90b6dc46e13b9e3496d560d9f848b482808..de6b68ffdefad008424f3dde9dbef30170218902 100644 GIT binary patch delta 5053 zcmZA53vg7`0mktI34u@{5W*t_$dZJRP>3WcMBV|xV0k~HQbAdgg)DBeA-f=X+!ckiLjc!zI)=iI&bp66ZA z|32H|yR|JMpT|en8jg=h5AtS=F-a|qncYrjjXBfNm^FA7>#;E2m}-pbWX#jJ8kb{S zf-z%pJ+8z{I2>nnHfAo?;cWaC_u$Mf#tb$lV!o%)niDx)jp=|xF$yPOGEPC-HbLZ> z<|*ujb=V#o@n?7vpTG}L&zscEm{wSb{qSL&hSfL(Kg9vGZ{ib;VbCTYz+}Px~fJK@VK16Sx7@ z;CAGXIm|~azK6Q;V{C)Xs1E%Nb^UeJb+=J77n9`H(@`@q5Ox1x>oAO{!F&oCI0f~< zrKl;7pr(2Qw#7rXeiSv5%c%QrphgbffHN~Eu5m96jU$^7fW zeVot~9k#xPYWOXC;oG);%GS@JMt%V`<)5RT^A+m8Z%{LM12y6prcu|$p*oa^>PW8$ z1#OO@$c8ip*14z~D^U+#f$HFDRKx4B4{pO$d=b}2k5jBu4w!Rzl zsMovoh`CBZo9AoPgM0RNZ%jjVs6VQKeAM?-Z2bZIy$?0zm8i9U617>^pnfmvQ1=}` z4djoQj>j-p@BdW_TAM_+s79WOnyP`Q5!{EG+R65NFKRQE;T+tKYTyUdeXUpzbtnl3 zVKVYdX9`gbKZkv>L3P?U&Gtk~7Umb!`=M@l)Yj{80QGlKYyKT-$&#rQVIHbOFQ9(u z-p7%66Sc|mXmu>kz$n~=t#AuQbYcgEXxxLEi36yqZ$!<=S&YGtQ62jXwWbLSLl5eS zdQK{4U|-adPDMRuIcgJbM0IEn(l>LWFZ0hvHDB2;T66ay>Z!@dVWCIt^oSA*Ny&wKSVh12}{l>1liZYjpNVjxoD9pA@0cn!<6^ zgU_JW`aCYc+c*x3d8ah;{TPGI*bc8)zdoNQNY2U*_Oo}N$jc^&N!4;?u*P>>o5jFKqn1&&xP_I!vszaY5ueSLTHPV=S+_xeLwe}gPAC?@{TQCx}WMfeG ztwMG5fVBbjRvneJZ_d~+E}{0oXVx!Ko9Y^>p>{*uDea27t_NynQtbImYZj^_xv1;% zFb+qcmT;1-KY|ghQ5gkIVFb*UHT7uK4wQjcFLS2{0JE@VTpc?Ln z&Yr;x>Z4IJyAZoz?NH`lYw|KDy5R{_z1i0Pg}R~bFn4zkLUm*gCSoP(K{cqg-;WyU zIpl9%a~aivo7f#=hr4?t4Rw9aaOR)cHPbnvk*`6GWHV|_ccK?xL5-~A2zMljsO!d9 zC!hu}6V+g;Jzs^|jL)EEt`;@p`%nWt7@?pWPTCWfP!GP2>d+13O*By>nLfM+_5CvJ zh%2!x)}r=8y*+;fb^j^kkGaIhB1{%YsN%$gG;2Ss&2aIuE%ZLe47|)4Ks5SipC*t?0 zj*Y+9o%)HW`b^XmK7?ALIjE`hqedJ-y)EmI?PE5frv5|Jrv3*;;SEgJ`+t)H8`va| zb*E$&YEv!3-na^R_04`v#Ve?h#W0Mcn2wstD|jE?!ag{fik5BxYJgi%9l44vu!QWR zeZ%H-4sFDlwk$4^7fFyzC&!2m+Bbi3N^Zj%a_2bh6qx_z6n2mgNC(oE=-5S`AQh@`JVFkTXUN-R2+{F0d4S}So@6pf zBCW|HvWd(k<>W)spA?Z7$PBG(BS|EaNH3z}A=1|=xxaEMcCvNRg_M%1s&Le}nAP}8 zTNWe9vt%}@x!AEs&E(E^HN4*O-z^`TQWmK6lzSKWLZ0A!Pq?z&=Sk_4Au~fMo>Fh6 zXP(bfR1ysN$~^Of6`pX3KjfM3_XUcxJTrXWilP!vg)g)?5Ds}B_Xh$V-_oMM;$q*A zj|_%OeB8zZYwqrx*swogRCL3YZtYs<6jkzEZ<$*5mY36uaM0uB2}LFTKyd}lsXuB> zz2nPZR>QUA$79*LB)Cyg-{Bot?+)SEvKkCZ_Q0j&BqIxMofWh zBC)g-w=kzZm9DI8&Y3xx(%F_abGci`ojU1ZTkf>l`}6#N>~zk4rw^~+@6Z4F{eS=8 z<-u;%g#B|{Sm48ih@D2cNK(kYNVA?{W;wU%s@aZsvudoxm#|NQ*%my9RX8!xY(4%S z$Kv!Pvm$K5hw(B#h$Fk1HRCQEfyLd;qRaxeg329SScl=b9aFI$d8P%CKI}C1#mjg* z-oh>zoou!ilaLOr7CU1D4#elM0^dbHrt~lyj8id^=UWw(u3V^gHewd-7SzDnP?PZ| z)PrvzFUvG}CSeXu9}dAO7>ApY|E!K55qJ>w`6HR3P2{XW!ve$FO{FHFa^QDesNys6Xm+gHbb>k9wgosQV_MK0g&TkXfj`u@c!vRuyoSCe#OC zMRoiZYG7wj4?d6m@ei1RomeMMpk<+^)bG3xHIUiJNwejciQAlqkb_|Fp*|P*I~9%S zE7Tgtv6D2lS*Z3<)Ra#^wt-DT4QL7SpFPfxVc3Kk_(jxa}(8HdRplI zfDNFck>sN~E<@cg*|le(e!mbk)$34ez7e%acc8u>8d0A+jCz4%n1!cM1H6t}lD_@C z7xrN{o&N$V8u@tClumLt%)@-z%kd%Hk9t5jTU%2biyBZG7GNfhz?rBA*J3svckMsA zc2tJhaIO!*5j@}Kx(kgsnDzzKT7QXJt4tPf4i=#XvbPUHP z?2LO|`v6AJZb8k&VGL+$U!$Tu(29D)4^VG%4Yig%d7aLfj_TNlKFq<;Hy)~=%@~gj zr~$PgUDz39d)X)MdK}Yon6@vQ`R8lgE^%QTeug<%Nbh+#9}968YH8lX)nS}p+)aBn z)9@yKfm`wQLEayyv2?P9_Bp&4Co-+YxEm|+GA_oFT;~5Il|#8^rMQ&W(VHGcozLT_ zsk(@)hJAoqlCMw$PiB;Q!(7z$$*8@t2>0PejKXZzP5ll*o^1sffRs9L|o`sfj}k z=uS-6`7foC#Dz-KDOinK^CwVmQj4MEgj%Y-s0aKFHPF~QJrhu$@8!&P*N3ClzQ|dM z+Dqja!}Dzs6;0_1cf%Ug+H7#ww>oQ31F1uG_zZT%XHiRd(6!${^>-dMgKem_{|jn> z?Wh?EyNmhPIgO>FCCEapb)jc&;5H{F1G@HPzX8T8TKgPPj2*d5!k8+P$~r>GyQ zUFg~mpzeRf&-`mwKg|UVhZ4SV4N)ZW;Hy1y0~ zgB?M=`E}Hb+(IpBr;*+Z-9D1}*Bf-_f^H~wmSYdv6{rU-bl2CQ9#n;)O^cf9X4D(D zpzeR$wcAkrevBH(4P+mO{)v1y6a0LZg%4}<)o{t_?D|*aK4MhWFrYo<;N^CfE*+$ zI^!yuwvNL7u~Q_EJWEy+l}Y3@(OPdMl|(!IC*+r83sDIt389*Il;5V#at7=umC0lm z*+x{D(f=#j6WTbBke%+geVpPKw;Ro2c~iuy=4N(WbgchLI)YLGn$aq7$P(Mz4`4$O59hrss#s^G=;< zl~U3gs(C+jmQ@CkACsBnX`-*uzNCzNgG7=UB!{RhCfQ^*$s#HhL>pHn^!yj8l#>-C zmZ*#%dqXw;jgPB{j@v?VH#tG}5g$<}^T<==*QAb2BtIwLC-X@zd6`Tnb4dgFLC5mP#5KN;Z=>h{`n5pVa(s z{%IU1qe(q^m>eT2F(jItRl}A0@G(;B+CRkQWQuFg!C#S)WDMCvRJxE7RVaS_&~EK0 z8B~(V9`Xt~L{#n}okBJDBeuRGC$YY7LR5Wh_qgC^@i#jK=XEQN2p;Si85O*q_GnD( kU4!$6rRC)p7UTsh2abvemJA8+92`G\n" "Language-Team: \n" "Language: pt_PT\n" @@ -293,6 +293,10 @@ msgid "" "Search results will exclude pages of other types.\n" " " msgstr "" +"\n" +" Neste campo apenas pode escolher páginas do tipo \"%(type)s\". " +"Nos resultados da pesquisa serão excluídas as páginas de outros tipos.\n" +" " #: templates/wagtailadmin/chooser/_search_results.html:16 #, python-format @@ -314,9 +318,8 @@ msgstr[1] "" " " #: templates/wagtailadmin/chooser/browse.html:3 -#, fuzzy msgid "Choose" -msgstr "Escolher uma página" +msgstr "Escolhe" #: templates/wagtailadmin/chooser/browse.html:6 #: templates/wagtailadmin/chooser/search.html:2 @@ -581,11 +584,10 @@ msgid "You can edit the privacy settings on:" msgstr "Você pode editar as configurações de privacidade em:" #: templates/wagtailadmin/page_privacy/set_privacy.html:6 -#, fuzzy msgid "Privacy changes apply to all children of this page too." msgstr "" -"Nota: as alterações de privacidade também serão aplicadas a todas as " -"páginas filhas desta página." +"As alterações de privacidade também serão aplicadas a todas as páginas " +"filhas desta página." #: templates/wagtailadmin/pages/_moderator_userbar.html:4 #, python-format diff --git a/wagtail/wagtailforms/locale/pt_PT/LC_MESSAGES/django.mo b/wagtail/wagtailforms/locale/pt_PT/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..cf3834a3224f6a786eee62cd4b617d4aae2ff378 GIT binary patch literal 2348 zcmai!J8T?97{@0NAUU21ukh5@Sh0oo9?p}q6Hpun1=;b*zBnn6!rblL-I&>()y%BV zL83x56o>)}3M3*5L=g!IK|y;3LPDu2A{r_R8ibUV|F?UNeU=cb+x_kAee*s3GxPm^ z^x)?L*Gsrx#{CcODcrvvzysI24+wDxlwbwi1lPeFJP7^*9tQ7#Z-BpnkAcS?EWb~I z4`Eyb9|li>?0;eWy#qdp@c<-n8)UmLzHjQZL#yByjZkJBFU>vIT=(;M*Bdv zN8N$dUFEB^nwpy=v&`tO>=;El#ebzA!8T!g3MQ42c3o9fBj z1lp1&S5?{{vH0xC=UHYQr_i%*PYAe!Q)6XJi|ZTWBBBt75le~GMqJV+C?_simryK& zqy?YJ^!(H`yd*b*4o1!Rg_-FR8dgdL0qvMGNDZNm8XH+Qq)ljWje)@ zRK=A%=^(~x7PL*Jp{TU?c_-1{~z1~8ETwqo|r4` zmZc9-+sV`$8LVs4+tw>uwz*Sj*V4i!hHskjusZbTE6XzN=a4#TE15K@g*5Yit}tu5 ze3xd1rUxNp&01|Z999E+*FCje?b@W4l|}nnRvVVJ*38&rEekhV?b=Lbki?rQr|bavN{WA>DbmQY2EP0*yX9Ubl`-=rc| zrDbv_O~gCgH!01Ep+7e_Pvz^m>6Fe>V`jc`J$g%}e2!V9mQ}G1)To}So~(#PskbG? z3MbvD(Kn;7ZTZPhep|-rFU)KPqaSb_&>1Aoxb%d@rmfL!*Uyct()#Fo%7Zrg{n4#0 zY`zp0T@Etoah5tZ6pna@!#Vt@G=@&-E!-ny@u&@~lVU>}#K_#}+bC8&o$A(mB8(Z|He*wz* Bo3j7_ literal 0 HcmV?d00001 diff --git a/wagtail/wagtailforms/locale/pt_PT/LC_MESSAGES/django.po b/wagtail/wagtailforms/locale/pt_PT/LC_MESSAGES/django.po new file mode 100644 index 0000000000..ad395a0a63 --- /dev/null +++ b/wagtail/wagtailforms/locale/pt_PT/LC_MESSAGES/django.po @@ -0,0 +1,136 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# +# Translators: +msgid "" +msgstr "" +"Project-Id-Version: Wagtail\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2014-09-11 16:38+0100\n" +"PO-Revision-Date: 2014-09-17 17:32+0100\n" +"Last-Translator: Jose Lourenco \n" +"Language-Team: Portuguese (Portugal) (http://www.transifex.com/projects/p/" +"wagtail/language/pt_PT/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: pt_PT\n" +"Plural-Forms: nplurals=2; plural=(n > 1);\n" +"X-Generator: Poedit 1.5.4\n" + +#: models.py:22 +msgid "Single line text" +msgstr "Linha de texto" + +#: models.py:23 +msgid "Multi-line text" +msgstr "Caixa de linhas de texto" + +#: models.py:24 +msgid "Email" +msgstr "Email" + +#: models.py:25 +msgid "Number" +msgstr "Número" + +#: models.py:26 +msgid "URL" +msgstr "URL" + +#: models.py:27 +msgid "Checkbox" +msgstr "Caixa de seleção" + +#: models.py:28 +msgid "Checkboxes" +msgstr "Caixas de seleção" + +#: models.py:29 +msgid "Drop down" +msgstr "Lista pendente" + +#: models.py:30 +msgid "Radio buttons" +msgstr "Botões de seleção" + +#: models.py:31 +msgid "Date" +msgstr "Data" + +#: models.py:32 +msgid "Date/time" +msgstr "Data/hora" + +#: models.py:60 +msgid "The label of the form field" +msgstr "O nome do campo do formulário" + +#: models.py:67 +msgid "" +"Comma seperated list of choices. Only applicable in checkboxes, radio and " +"dropdown." +msgstr "" +"Lista de opções separadas por vírgula. Só utilizável nas caixas de seleção, " +"botões e listas pendentes." + +#: models.py:72 +msgid "Default value. Comma seperated values supported for checkboxes." +msgstr "" +"Valor pré-definido. Valores separados por vírgula admitidos nas caixas de " +"seleção." + +#: models.py:191 +msgid "Optional - form submissions will be emailed to this address" +msgstr "" +"Opcional - as submissões de formulários serão enviadas por email para este " +"endereço" + +#: wagtail_hooks.py:25 templates/wagtailforms/index.html:3 +#: templates/wagtailforms/index.html:6 +msgid "Forms" +msgstr "Formulários" + +#: templates/wagtailforms/index.html:7 +msgid "Pages" +msgstr "Páginas" + +#: templates/wagtailforms/index_submissions.html:3 +#, python-format +msgid "Submissions of %(form_title)s" +msgstr "Submissões de %(form_title)s" + +#: templates/wagtailforms/index_submissions.html:36 +#, python-format +msgid "Form data %(form_title)s" +msgstr "Dados do formulário %(form_title)s" + +#: templates/wagtailforms/index_submissions.html:45 +msgid "Filter" +msgstr "Filtrar" + +#: templates/wagtailforms/index_submissions.html:51 +msgid "Download CSV" +msgstr "Descarregar CSV" + +#: templates/wagtailforms/index_submissions.html:63 +#, python-format +msgid "There have been no submissions of the '%(title)s' form." +msgstr "Não houve submissões do formulário '%(title)s'." + +#: templates/wagtailforms/list_forms.html:7 +msgid "Title" +msgstr "Título" + +#: templates/wagtailforms/list_forms.html:8 +msgid "Origin" +msgstr "Origem" + +#: templates/wagtailforms/list_submissions.html:9 +msgid "Submission Date" +msgstr "Data de submissão" + +#: templates/wagtailforms/results_forms.html:7 +msgid "No form pages have been created." +msgstr "Não foram criadas páginas de formulários." From a1d3a32dd6b7697ca50cf5f62c34795f468f4afc Mon Sep 17 00:00:00 2001 From: Tim Heap Date: Thu, 18 Sep 2014 15:33:01 +1000 Subject: [PATCH 206/210] Make register_snippet usable as a decorator --- docs/core_components/snippets.rst | 9 ++++----- wagtail/wagtailsnippets/models.py | 1 + wagtail/wagtailsnippets/tests.py | 19 +++++++++++++++++++ 3 files changed, 24 insertions(+), 5 deletions(-) diff --git a/docs/core_components/snippets.rst b/docs/core_components/snippets.rst index 8b2a2d5572..33d20bdc4f 100644 --- a/docs/core_components/snippets.rst +++ b/docs/core_components/snippets.rst @@ -4,7 +4,7 @@ Snippets ======== -Snippets are pieces of content which do not necessitate a full webpage to render. They could be used for making secondary content, such as headers, footers, and sidebars, editable in the Wagtail admin. Snippets are models which do not inherit the ``Page`` class and are thus not organized into the Wagtail tree, but can still be made editable by assigning panels and identifying the model as a snippet with ``register_snippet()``. +Snippets are pieces of content which do not necessitate a full webpage to render. They could be used for making secondary content, such as headers, footers, and sidebars, editable in the Wagtail admin. Snippets are models which do not inherit the ``Page`` class and are thus not organized into the Wagtail tree, but can still be made editable by assigning panels and identifying the model as a snippet with the ``register_snippet`` class decorator. Snippets are not search-able or order-able in the Wagtail admin, so decide carefully if the content type you would want to build into a snippet might be more suited to a page. @@ -19,9 +19,10 @@ Here's an example snippet from the Wagtail demo website: from wagtail.wagtailadmin.edit_handlers import FieldPanel from wagtail.wagtailsnippets.models import register_snippet - + ... + @register_snippet class Advert(models.Model): url = models.URLField(null=True, blank=True) text = models.CharField(max_length=255) @@ -34,11 +35,9 @@ Here's an example snippet from the Wagtail demo website: def __unicode__(self): return self.text - register_snippet(Advert) - The ``Advert`` model uses the basic Django model class and defines two properties: text and url. The editing interface is very close to that provided for ``Page``-derived models, with fields assigned in the panels property. Snippets do not use multiple tabs of fields, nor do they provide the "save as draft" or "submit for moderation" features. -``register_snippet(Advert)`` tells Wagtail to treat the model as a snippet. The ``panels`` list defines the fields to show on the snippet editing page. It's also important to provide a string representation of the class through ``def __unicode__(self):`` so that the snippet objects make sense when listed in the Wagtail admin. +``@register_snippet`` tells Wagtail to treat the model as a snippet. The ``panels`` list defines the fields to show on the snippet editing page. It's also important to provide a string representation of the class through ``def __unicode__(self):`` so that the snippet objects make sense when listed in the Wagtail admin. Including Snippets in Template Tags ----------------------------------- diff --git a/wagtail/wagtailsnippets/models.py b/wagtail/wagtailsnippets/models.py index 3f1b9cad91..d8d701d032 100644 --- a/wagtail/wagtailsnippets/models.py +++ b/wagtail/wagtailsnippets/models.py @@ -25,6 +25,7 @@ def register_snippet(model): model.usage_url = get_snippet_usage_url SNIPPET_MODELS.append(model) SNIPPET_MODELS.sort(key=lambda x: x._meta.verbose_name) + return model def get_snippet_usage_url(self): diff --git a/wagtail/wagtailsnippets/tests.py b/wagtail/wagtailsnippets/tests.py index 0255925ab6..cc0a221f10 100644 --- a/wagtail/wagtailsnippets/tests.py +++ b/wagtail/wagtailsnippets/tests.py @@ -1,5 +1,6 @@ from django.test import TestCase from django.core.urlresolvers import reverse +from django.db import models from wagtail.tests.utils import WagtailTestUtils from django.test.utils import override_settings @@ -176,6 +177,24 @@ class TestSnippetChooserPanel(TestCase): in self.snippet_chooser_panel.render_js()) +class TestSnippetRegistering(TestCase): + def test_register_function(self): + class RegisterFunction(models.Model): + pass + register_snippet(RegisterFunction) + + self.assertIn(RegisterFunction, SNIPPET_MODELS) + + def test_register_function(self): + @register_snippet + class RegisterDecorator(models.Model): + pass + + # Misbehaving decorators often return None + self.assertIsNotNone(RegisterDecorator) + self.assertIn(RegisterDecorator, SNIPPET_MODELS) + + class TestSnippetOrdering(TestCase): def setUp(self): register_snippet(ZuluSnippet) From cb3094a4a73acb2e7c598242c9bc72778f9dad57 Mon Sep 17 00:00:00 2001 From: Tim Heap Date: Thu, 18 Sep 2014 15:46:49 +1000 Subject: [PATCH 207/210] Fix failing tests when WAGTAILSEARCH_BACKENDS not filled out The tests attempted to skip themselves when WAGTAILSEARCH_BACKENDS was not filled out, but the skip code was throwing an error, causing the test to fail. --- wagtail/wagtaildocs/tests.py | 4 ++-- wagtail/wagtailimages/tests.py | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/wagtail/wagtaildocs/tests.py b/wagtail/wagtaildocs/tests.py index e4ec7f1ee3..ba48748904 100644 --- a/wagtail/wagtaildocs/tests.py +++ b/wagtail/wagtaildocs/tests.py @@ -7,7 +7,7 @@ from django.core.urlresolvers import reverse from django.core.files.base import ContentFile from django.test.utils import override_settings -from wagtail.tests.utils import WagtailTestUtils +from wagtail.tests.utils import unittest, WagtailTestUtils from wagtail.wagtailcore.models import Page from wagtail.tests.models import EventPage, EventPageRelatedLink @@ -432,7 +432,7 @@ class TestIssue613(TestCase, WagtailTestUtils): return get_search_backend(backend_name) else: # no conf entry found - skip tests for this backend - raise unittest.SkipTest("No WAGTAILSEARCH_BACKENDS entry for the backend %s" % self.backend_path) + raise unittest.SkipTest("No WAGTAILSEARCH_BACKENDS entry for the backend %s" % backend_path) def setUp(self): self.search_backend = self.get_elasticsearch_backend() diff --git a/wagtail/wagtailimages/tests.py b/wagtail/wagtailimages/tests.py index 06ce8c9a8c..8326c92fc6 100644 --- a/wagtail/wagtailimages/tests.py +++ b/wagtail/wagtailimages/tests.py @@ -1051,7 +1051,7 @@ class TestIssue613(TestCase, WagtailTestUtils): return get_search_backend(backend_name) else: # no conf entry found - skip tests for this backend - raise unittest.SkipTest("No WAGTAILSEARCH_BACKENDS entry for the backend %s" % self.backend_path) + raise unittest.SkipTest("No WAGTAILSEARCH_BACKENDS entry for the backend %s" % backend_path) def setUp(self): self.search_backend = self.get_elasticsearch_backend() From 007b8249e14b5ba5996060e4f891c4271abfd1ea Mon Sep 17 00:00:00 2001 From: Karl Hobley Date: Thu, 18 Sep 2014 09:18:52 +0100 Subject: [PATCH 208/210] Added contributor entry for #639 --- CONTRIBUTORS.rst | 1 + 1 file changed, 1 insertion(+) diff --git a/CONTRIBUTORS.rst b/CONTRIBUTORS.rst index 67f6c853a9..df2db8419e 100644 --- a/CONTRIBUTORS.rst +++ b/CONTRIBUTORS.rst @@ -46,6 +46,7 @@ Translators * Greek: Serafeim Papastefanos * Mongolian: Delgermurun Purevkhuu * Polish: Łukasz Bołdys +* Portuguese: Jose Lourenco * Portuguese Brazil: Gilson Filho * Romanian: Dan Braghis * Russian: ice9, HNKNTA From f11c34e059022375b85f0296a4549af5b638e762 Mon Sep 17 00:00:00 2001 From: Matt Westcott Date: Thu, 18 Sep 2014 09:49:08 +0100 Subject: [PATCH 209/210] release note for #641 --- CHANGELOG.txt | 1 + docs/releases/0.7.rst | 1 + 2 files changed, 2 insertions(+) diff --git a/CHANGELOG.txt b/CHANGELOG.txt index d30c4bc65c..3b8be22e99 100644 --- a/CHANGELOG.txt +++ b/CHANGELOG.txt @@ -7,6 +7,7 @@ Changelog * Removed 'content_type' template filter from the project template, as the same thing can be accomplished with self.get_verbose_name|slugify * Page copy operations now also copy the page revision history * Page models now support a 'parent_page_types' property in addition to 'subpage types', to restrict the types of page they can be created under + * 'register_snippet' can now be invoked as a decorator 0.6 (11.09.2014) ~~~~~~~~~~~~~~~~ diff --git a/docs/releases/0.7.rst b/docs/releases/0.7.rst index 19b89216ac..20fafbe04f 100644 --- a/docs/releases/0.7.rst +++ b/docs/releases/0.7.rst @@ -20,6 +20,7 @@ Minor features * The ``content_type`` template filter has been removed from the project template, as the same thing can be accomplished with ``self.get_verbose_name|slugify``. * Page copy operations now also copy the page revision history. * Page models now support a ``parent_page_types`` property in addition to ``subpage types``, to restrict the types of page they can be created under. + * ``register_snippet`` can now be invoked as a decorator. Bug fixes ~~~~~~~~~ From 2c911c20e332a992f6537b9e07d0bfbf3bb672f2 Mon Sep 17 00:00:00 2001 From: Dave Cranwell Date: Thu, 18 Sep 2014 14:49:53 +0100 Subject: [PATCH 210/210] Update CONTRIBUTORS.rst --- CONTRIBUTORS.rst | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/CONTRIBUTORS.rst b/CONTRIBUTORS.rst index df2db8419e..881453e640 100644 --- a/CONTRIBUTORS.rst +++ b/CONTRIBUTORS.rst @@ -1,14 +1,14 @@ -Original Authors +Authors ================ * Matthew Westcott matthew.westcott@torchbox.com twitter: @gasmanic * David Cranwell david.cranwell@torchbox.com twitter: @davecranwell * Karl Hobley karl.hobley@torchbox.com -* Helen Chapman helen.chapman@torchbox.com Contributors ============ +* Helen Chapman helen.chapman@torchbox.com * Balazs Endresz balazs.endresz@torchbox.com * Neal Todd neal.todd@torchbox.com * Paul Hallett (twilio) hello@phalt.co