diff --git a/.travis.yml b/.travis.yml
index 326c22d01..2245157e7 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -14,7 +14,7 @@ services:
# Package installation
install:
- python setup.py install
- - pip install psycopg2 elasticsearch wand embedly
+ - pip install psycopg2 elasticsearch wand embedly mock python-dateutil
- pip install coveralls
# Pre-test configuration
before_script:
diff --git a/CHANGELOG.txt b/CHANGELOG.txt
index 39740ef55..803ad742d 100644
--- a/CHANGELOG.txt
+++ b/CHANGELOG.txt
@@ -1,9 +1,26 @@
Changelog
=========
-0.5 (xx.xx.20xx)
+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)
+~~~~~~~~~~~~~~~~
+ * Added multiple image uploader
+ * Added support for face and feature detection on images using the OpenCV library
+ * Added RoutablePage model to allow embedding Django-style URL routing within a page
+ * Added image/document/snippet usage stats
+ * Explorer nav now rendered separately and fetched with AJAX when needed
* Added decorator syntax for hooks
+ * Replaced lxml dependency with html5lib, to simplify installation
+ * Added page_unpublished signal
+ * Added mechanism to obtain external URLs to images, at any size
+ * Added Copy Page action to the explorer
+
+ * Fix: Updates to tag fields are now properly committed to the database when publishing directly from the page edit interface
0.4.1 (14.07.2014)
~~~~~~~~~~~~~~~~~~
diff --git a/CONTRIBUTORS.rst b/CONTRIBUTORS.rst
index df81741c9..b69fdb539 100644
--- a/CONTRIBUTORS.rst
+++ b/CONTRIBUTORS.rst
@@ -30,6 +30,7 @@ Contributors
* Jeffrey Hearn
* Robert Clark
* Tim Heap
+* Nathan Brizendine
Translators
===========
diff --git a/README.rst b/README.rst
index 5fa7f47f9..f06776221 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 `_.
diff --git a/docs/images/bad_horizontal_rule.png b/docs/_static/images/bad_horizontal_rule.png
similarity index 100%
rename from docs/images/bad_horizontal_rule.png
rename to docs/_static/images/bad_horizontal_rule.png
diff --git a/docs/images/bold_test.png b/docs/_static/images/bold_test.png
similarity index 100%
rename from docs/images/bold_test.png
rename to docs/_static/images/bold_test.png
diff --git a/docs/images/screen01_login.png b/docs/_static/images/screen01_login.png
similarity index 100%
rename from docs/images/screen01_login.png
rename to docs/_static/images/screen01_login.png
diff --git a/docs/_static/images/screen02_dashboard_editor.png b/docs/_static/images/screen02_dashboard_editor.png
new file mode 100644
index 000000000..f0e68e561
Binary files /dev/null and b/docs/_static/images/screen02_dashboard_editor.png differ
diff --git a/docs/_static/images/screen03_explorer_menu.png b/docs/_static/images/screen03_explorer_menu.png
new file mode 100644
index 000000000..766908810
Binary files /dev/null and b/docs/_static/images/screen03_explorer_menu.png differ
diff --git a/docs/_static/images/screen04_search_screen.png b/docs/_static/images/screen04_search_screen.png
new file mode 100644
index 000000000..321ee9334
Binary files /dev/null and b/docs/_static/images/screen04_search_screen.png differ
diff --git a/docs/_static/images/screen05_explorer_page.png b/docs/_static/images/screen05_explorer_page.png
new file mode 100644
index 000000000..fcafe7d33
Binary files /dev/null and b/docs/_static/images/screen05_explorer_page.png differ
diff --git a/docs/_static/images/screen06_explorer_page_arrow.png b/docs/_static/images/screen06_explorer_page_arrow.png
new file mode 100644
index 000000000..9c4745d84
Binary files /dev/null and b/docs/_static/images/screen06_explorer_page_arrow.png differ
diff --git a/docs/_static/images/screen07_explorer_page_breadcrumb.png b/docs/_static/images/screen07_explorer_page_breadcrumb.png
new file mode 100644
index 000000000..46cd21249
Binary files /dev/null and b/docs/_static/images/screen07_explorer_page_breadcrumb.png differ
diff --git a/docs/_static/images/screen08.5_reorder_page_handles.png b/docs/_static/images/screen08.5_reorder_page_handles.png
new file mode 100644
index 000000000..a9a0f1e56
Binary files /dev/null and b/docs/_static/images/screen08.5_reorder_page_handles.png differ
diff --git a/docs/_static/images/screen08_add_page_button.png b/docs/_static/images/screen08_add_page_button.png
new file mode 100644
index 000000000..b9813e780
Binary files /dev/null and b/docs/_static/images/screen08_add_page_button.png differ
diff --git a/docs/_static/images/screen09_page_type_selection.png b/docs/_static/images/screen09_page_type_selection.png
new file mode 100644
index 000000000..1afe19537
Binary files /dev/null and b/docs/_static/images/screen09_page_type_selection.png differ
diff --git a/docs/_static/images/screen10_blank_page_edit_screen.png b/docs/_static/images/screen10_blank_page_edit_screen.png
new file mode 100644
index 000000000..888392aeb
Binary files /dev/null and b/docs/_static/images/screen10_blank_page_edit_screen.png differ
diff --git a/docs/images/screen11.1_bold_italic.png b/docs/_static/images/screen11.1_bold_italic.png
similarity index 100%
rename from docs/images/screen11.1_bold_italic.png
rename to docs/_static/images/screen11.1_bold_italic.png
diff --git a/docs/images/screen11.2_formatting_options.png b/docs/_static/images/screen11.2_formatting_options.png
similarity index 100%
rename from docs/images/screen11.2_formatting_options.png
rename to docs/_static/images/screen11.2_formatting_options.png
diff --git a/docs/images/screen11.3_lists.png b/docs/_static/images/screen11.3_lists.png
similarity index 100%
rename from docs/images/screen11.3_lists.png
rename to docs/_static/images/screen11.3_lists.png
diff --git a/docs/images/screen11.4_horizontal_rule.png b/docs/_static/images/screen11.4_horizontal_rule.png
similarity index 100%
rename from docs/images/screen11.4_horizontal_rule.png
rename to docs/_static/images/screen11.4_horizontal_rule.png
diff --git a/docs/images/screen11.5_undo_redo.png b/docs/_static/images/screen11.5_undo_redo.png
similarity index 100%
rename from docs/images/screen11.5_undo_redo.png
rename to docs/_static/images/screen11.5_undo_redo.png
diff --git a/docs/images/screen11.6_images_videos.png b/docs/_static/images/screen11.6_images_videos.png
similarity index 100%
rename from docs/images/screen11.6_images_videos.png
rename to docs/_static/images/screen11.6_images_videos.png
diff --git a/docs/images/screen11.7_links_docs.png b/docs/_static/images/screen11.7_links_docs.png
similarity index 100%
rename from docs/images/screen11.7_links_docs.png
rename to docs/_static/images/screen11.7_links_docs.png
diff --git a/docs/_static/images/screen11_rich_text_field.png b/docs/_static/images/screen11_rich_text_field.png
new file mode 100644
index 000000000..8757d6ba5
Binary files /dev/null and b/docs/_static/images/screen11_rich_text_field.png differ
diff --git a/docs/_static/images/screen12_edit_screen_overview.png b/docs/_static/images/screen12_edit_screen_overview.png
new file mode 100644
index 000000000..7819b4f07
Binary files /dev/null and b/docs/_static/images/screen12_edit_screen_overview.png differ
diff --git a/docs/_static/images/screen13_publish_menu.png b/docs/_static/images/screen13_publish_menu.png
new file mode 100644
index 000000000..0732ab316
Binary files /dev/null and b/docs/_static/images/screen13_publish_menu.png differ
diff --git a/docs/_static/images/screen14_add_carousel_button.png b/docs/_static/images/screen14_add_carousel_button.png
new file mode 100644
index 000000000..0f1aec3a8
Binary files /dev/null and b/docs/_static/images/screen14_add_carousel_button.png differ
diff --git a/docs/_static/images/screen15_carousel_form.png b/docs/_static/images/screen15_carousel_form.png
new file mode 100644
index 000000000..b5720f898
Binary files /dev/null and b/docs/_static/images/screen15_carousel_form.png differ
diff --git a/docs/_static/images/screen16_selecting_image_from_library.png b/docs/_static/images/screen16_selecting_image_from_library.png
new file mode 100644
index 000000000..386ad5e9b
Binary files /dev/null and b/docs/_static/images/screen16_selecting_image_from_library.png differ
diff --git a/docs/images/screen17_upload_image.png b/docs/_static/images/screen17_upload_image.png
similarity index 100%
rename from docs/images/screen17_upload_image.png
rename to docs/_static/images/screen17_upload_image.png
diff --git a/docs/images/screen18_image_alignment.png b/docs/_static/images/screen18_image_alignment.png
similarity index 100%
rename from docs/images/screen18_image_alignment.png
rename to docs/_static/images/screen18_image_alignment.png
diff --git a/docs/_static/images/screen19_link_form.png b/docs/_static/images/screen19_link_form.png
new file mode 100644
index 000000000..1dabeb97d
Binary files /dev/null and b/docs/_static/images/screen19_link_form.png differ
diff --git a/docs/images/screen20_insert_video_form.png b/docs/_static/images/screen20_insert_video_form.png
similarity index 100%
rename from docs/images/screen20_insert_video_form.png
rename to docs/_static/images/screen20_insert_video_form.png
diff --git a/docs/_static/images/screen21_video_in_editor.png b/docs/_static/images/screen21_video_in_editor.png
new file mode 100644
index 000000000..4b4bfb36b
Binary files /dev/null and b/docs/_static/images/screen21_video_in_editor.png differ
diff --git a/docs/_static/images/screen22_required_field.png b/docs/_static/images/screen22_required_field.png
new file mode 100644
index 000000000..056f1ae6e
Binary files /dev/null and b/docs/_static/images/screen22_required_field.png differ
diff --git a/docs/_static/images/screen23_validation_error.png b/docs/_static/images/screen23_validation_error.png
new file mode 100644
index 000000000..f1e00b1ac
Binary files /dev/null and b/docs/_static/images/screen23_validation_error.png differ
diff --git a/docs/_static/images/screen24_multiple_items_closed.png b/docs/_static/images/screen24_multiple_items_closed.png
new file mode 100644
index 000000000..23ad40164
Binary files /dev/null and b/docs/_static/images/screen24_multiple_items_closed.png differ
diff --git a/docs/_static/images/screen25_multiple_items_open.png b/docs/_static/images/screen25_multiple_items_open.png
new file mode 100644
index 000000000..95b8b3dfa
Binary files /dev/null and b/docs/_static/images/screen25_multiple_items_open.png differ
diff --git a/docs/_static/images/screen26_reordering_multiple_items.png b/docs/_static/images/screen26_reordering_multiple_items.png
new file mode 100644
index 000000000..a7a5af5c7
Binary files /dev/null and b/docs/_static/images/screen26_reordering_multiple_items.png differ
diff --git a/docs/images/screen27_docs_icon.png b/docs/_static/images/screen27_docs_icon.png
similarity index 100%
rename from docs/images/screen27_docs_icon.png
rename to docs/_static/images/screen27_docs_icon.png
diff --git a/docs/_static/images/screen28_docs_form.png b/docs/_static/images/screen28_docs_form.png
new file mode 100644
index 000000000..2b85babc0
Binary files /dev/null and b/docs/_static/images/screen28_docs_form.png differ
diff --git a/docs/_static/images/screen29_documents_page.png b/docs/_static/images/screen29_documents_page.png
new file mode 100644
index 000000000..34ba6230d
Binary files /dev/null and b/docs/_static/images/screen29_documents_page.png differ
diff --git a/docs/_static/images/screen30_documents_edit_page.png b/docs/_static/images/screen30_documents_edit_page.png
new file mode 100644
index 000000000..b6544acb6
Binary files /dev/null and b/docs/_static/images/screen30_documents_edit_page.png differ
diff --git a/docs/images/screen31_images_page.png b/docs/_static/images/screen31_images_page.png
similarity index 100%
rename from docs/images/screen31_images_page.png
rename to docs/_static/images/screen31_images_page.png
diff --git a/docs/images/screen32_image_edit_page.png b/docs/_static/images/screen32_image_edit_page.png
similarity index 100%
rename from docs/images/screen32_image_edit_page.png
rename to docs/_static/images/screen32_image_edit_page.png
diff --git a/docs/images/screen_wagtail_redirects.png b/docs/_static/images/screen_wagtail_redirects.png
similarity index 100%
rename from docs/images/screen_wagtail_redirects.png
rename to docs/_static/images/screen_wagtail_redirects.png
diff --git a/docs/advanced_topics.rst b/docs/advanced_topics.rst
deleted file mode 100644
index 7e23d8442..000000000
--- a/docs/advanced_topics.rst
+++ /dev/null
@@ -1,17 +0,0 @@
-Advanced Topics
-~~~~~~~~~~~~~~~~
-
-.. note::
- This documentation is currently being written.
-
-replacing image processing backend
-
-custom image processing tags?
-
-wagtail user bar custom CSS option?
-
-extending hallo editor plugins with editor_js()
-
-injecting any JS into page edit with editor_js()
-
-Custom content module (same level as docs or images)
diff --git a/docs/building_your_site/djangodevelopers.rst b/docs/building_your_site/djangodevelopers.rst
deleted file mode 100644
index d1b69dcf3..000000000
--- a/docs/building_your_site/djangodevelopers.rst
+++ /dev/null
@@ -1,428 +0,0 @@
-For Django developers
-=====================
-
-.. contents:: Contents
- :local:
-
-.. note::
- This documentation is currently being written.
-
-Overview
-~~~~~~~~
-
-Wagtail requires a little careful setup to define the types of content that you want to present through your website. The basic unit of content in Wagtail is the ``Page``, and all of your page-level content will inherit basic webpage-related properties from it. But for the most part, you will be defining content yourself, through the construction of Django models using Wagtail's ``Page`` as a base.
-
-Wagtail organizes content created from your models in a tree, which can have any structure and combination of model objects in it. Wagtail doesn't prescribe ways to organize and interrelate your content, but here we've sketched out some strategies for organizing your models.
-
-The presentation of your content, the actual webpages, includes the normal use of the Django template system. We'll cover additional functionality that Wagtail provides at the template level later on.
-
-But first, we'll take a look at the ``Page`` class and model definitions.
-
-
-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``.
-
-
-Built-in Properties of the Page Class
--------------------------------------
-
-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:
-
-.. code-block:: python
-
- from django.db import models
-
- from wagtail.wagtailcore.models import Page
- from wagtail.wagtailcore.fields import RichTextField
- from wagtail.wagtailadmin.edit_handlers import FieldPanel
- from wagtail.wagtailimages.edit_handlers import ImageChooserPanel
- from wagtail.wagtailimages.models import Image
-
- class BlogPage(Page):
- body = RichTextField()
- date = models.DateField("Post date")
- feed_image = models.ForeignKey(
- 'wagtailimages.Image',
- null=True,
- blank=True,
- on_delete=models.SET_NULL,
- related_name='+'
- )
-
- BlogPage.content_panels = [
- FieldPanel('title', classname="full title"),
- FieldPanel('date'),
- FieldPanel('body', classname="full"),
- ]
-
- BlogPage.promote_panels = [
- FieldPanel('slug'),
- FieldPanel('seo_title'),
- FieldPanel('show_in_menus'),
- FieldPanel('search_description'),
- 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``).
-
-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.
-
-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.
-
-
-Introduction to Trees
-~~~~~~~~~~~~~~~~~~~~~
-
-If you're unfamiliar with trees as an abstract data type, you might want to `review the concepts involved. `_
-
-As a web developer, though, you probably already have a good understanding of trees as filesystem directories or paths. Wagtail pages can create the same structure, as each page in the tree has its own URL path, like so::
-
- /
- people/
- nien-nunb/
- laura-roslin/
- events/
- captain-picard-day/
- winter-wrap-up/
-
-The Wagtail admin interface uses the tree to organize content for editing, letting you navigate up and down levels in the tree through its Explorer menu. This method of organization is a good place to start in thinking about your own Wagtail models.
-
-
-Nodes and Leaves
-----------------
-
-It might be handy to think of the ``Page``-derived models you want to create as being one of two node types: parents and leaves. Wagtail isn't prescriptive in this approach, but it's a good place to start if you're not experienced in structuring your own content types.
-
-
-Nodes
-`````
-Parent nodes on the Wagtail tree probably want to organize and display a browse-able index of their descendants. A blog, for instance, needs a way to show a list of individual posts.
-
-A Parent node could provide its own function returning its descendant objects.
-
-.. code-block:: python
-
- class EventPageIndex(Page):
- # ...
- def events(self):
- # Get list of live event pages that are descendants of this page
- events = EventPage.objects.live().descendant_of(self)
-
- # Filter events list to get ones that are either
- # running now or start in the future
- events = events.filter(date_from__gte=date.today())
-
- # Order by date
- events = events.order_by('date_from')
-
- 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.
-
-
-Leaves
-``````
-Leaves are the pieces of content itself, a page which is consumable, and might just consist of a bunch of properties. A blog page leaf might have some body text and an image. A person page leaf might have a photo, a name, and an address.
-
-It might be helpful for a leaf to provide a way to back up along the tree to a parent, such as in the case of breadcrumbs navigation. The tree might also be deep enough that a leaf's parent won't be included in general site navigation.
-
-The model for the leaf could provide a function that traverses the tree in the opposite direction and returns an appropriate ancestor:
-
-.. code-block:: python
-
- class EventPage(Page):
- # ...
- def event_index(self):
- # 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.
-
-
-Other Relationships
-```````````````````
-Your ``Page``-derived models might have other interrelationships which extend the basic Wagtail tree or depart from it entirely. You could provide functions to navigate between siblings, such as a "Next Post" link on a blog page (``post->post->post``). It might make sense for subtrees to interrelate, such as in a discussion forum (``forum->post->replies``) Skipping across the hierarchy might make sense, too, as all objects of a certain model class might interrelate regardless of their ancestors (``events = EventPage.objects.all``). It's largely up to the models to define their interrelations, the possibilities are really endless.
-
-
-.. _anatomy_of_a_wagtail_request:
-
-Anatomy of a Wagtail Request
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-
-For going beyond the basics of model definition and interrelation, it might help to know how Wagtail handles requests and constructs responses. In short, it goes something like:
-
- #. Django gets a request and routes through Wagtail's URL dispatcher definitions
- #. Wagtail checks the hostname of the request to determine which ``Site`` record will handle this request.
- #. Starting from the root page of that site, Wagtail traverses the page tree, calling the ``route()`` method and letting each page model decide whether it will handle the request itself or pass it on to a child page.
- #. The page responsible for handling the request returns a ``RouteResult`` object from ``route()``, which identifies the page along with any additional args/kwargs to be passed to ``serve()``.
- #. Wagtail calls ``serve()``, which constructs a context using ``get_context()``
- #. ``serve()`` finds a template to pass it to using ``get_template()``
- #. A response object is returned by ``serve()`` and Django responds to the requester.
-
-You can apply custom behavior to this process by overriding ``Page`` class methods such as ``route()`` and ``serve()`` in your own models. For examples, see :ref:`model_recipes`.
-
-
-Page 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.
-
-.. automodule:: wagtail.wagtailcore.models
-.. autoclass:: Page
-
- .. autoattribute:: specific
-
- .. autoattribute:: specific_class
-
- .. autoattribute:: url
-
- .. autoattribute:: full_url
-
- .. automethod:: relative_url
-
- .. automethod:: is_navigable
-
- .. automethod:: route
-
- .. automethod:: serve
-
- .. automethod:: get_context
-
- .. automethod:: get_template
-
- .. autoattribute:: preview_modes
-
- .. automethod:: serve_preview
-
- .. automethod:: get_ancestors
-
- .. automethod:: get_descendants
-
- .. automethod:: get_siblings
-
- .. automethod:: search
-
-
-Page Queryset Reference
-~~~~~~~~~~~~~~~~~~~~~~~
-
-All models that inherit from ``Page`` are given some extra Queryset methods accessible from their ``.objects`` attribute.
-
-Examples:
-
- - Selecting only live pages
-
- .. code-block:: python
-
- live_pages = Page.objects.live()
-
- - Selecting published EventPages that are descendants of events_index
-
- .. code-block:: python
-
- events = EventPage.objects.live().descendant_of(events_index)
-
- - Getting a list of menu items
-
- .. code-block:: python
-
- # This gets a queryset of live children of the homepage with ``show_in_menus`` set
- menu_items = homepage.get_children().live().in_menu()
-
-
-.. automodule:: wagtail.wagtailcore.query
-.. autoclass:: PageQuerySet
-
- .. automethod:: live
-
- Example:
-
- .. code-block:: python
-
- published_pages = Page.objects.live()
-
- .. automethod:: not_live
-
- Example:
-
- .. code-block:: python
-
- unpublished_pages = Page.objects.not_live()
-
- .. automethod:: in_menu
-
- Example:
-
- .. code-block:: python
-
- # Build a menu from live pages that are children of the homepage
- menu_items = homepage.get_children().live().in_menu()
-
-
- .. note::
-
- To put your page in menus, set the show_in_menus flag to true:
-
- .. code-block:: python
-
- # Add 'my_page' to the menu
- my_page.show_in_menus = True
-
- .. automethod:: page
-
- Example:
-
- .. code-block:: python
-
- # Append an extra page to a queryset
- new_queryset = old_queryset | Page.objects.page(page_to_add)
-
- .. automethod:: not_page
-
- Example:
-
- .. code-block:: python
-
- # Remove a page from a queryset
- new_queryset = old_queryset & Page.objects.not_page(page_to_remove)
-
- .. automethod:: descendant_of
-
- Example:
-
- .. code-block:: python
-
- # Get EventPages that are under the special_events Page
- special_events = EventPage.objects.descendant_of(special_events_index)
-
- # Alternative way
- special_events = special_events_index.get_descendants()
-
- .. automethod:: not_descendant_of
-
- Example:
-
- .. code-block:: python
-
- # Get EventPages that are not under the archived_events Page
- non_archived_events = EventPage.objects.not_descendant_of(archived_events_index)
-
- .. automethod:: child_of
-
- Example:
-
- .. code-block:: python
-
- # Get a list of sections
- sections = Page.objects.child_of(homepage)
-
- # Alternative way
- sections = homepage.get_children()
-
- .. automethod:: ancestor_of
-
- Example:
-
- .. code-block:: python
-
- # Get the current section
- current_section = Page.objects.ancestor_of(current_page).child_of(homepage).first()
-
- # Alternative way
- current_section = current_page.get_ancestors().child_of(homepage).first()
-
- .. automethod:: not_ancestor_of
-
- Example:
-
- .. code-block:: python
-
- # Get the other sections
- other_sections = Page.objects.not_ancestor_of(current_page).child_of(homepage)
-
- .. automethod:: sibling_of
-
- Example:
-
- .. code-block:: python
-
- # Get list of siblings
- siblings = Page.objects.sibling_of(current_page)
-
- # Alternative way
- siblings = current_page.get_siblings()
-
- .. automethod:: public
-
- See: :ref:`private_pages`
-
- .. note::
-
- This doesn't filter out unpublished pages. If you want to only have published public pages, use ``.live().public()``
-
- Example:
-
- .. code-block:: python
-
- # Find all the pages that are viewable by the public
- all_pages = Page.objects.live().public()
-
- .. automethod:: search
-
- See: :ref:`wagtailsearch_for_python_developers`
-
- Example:
-
- .. code-block:: python
-
- # Search future events
- results = EventPage.objects.live().filter(date__gt=timezone.now()).search("Hello")
-
-
-.. _wagtail_site_admin:
-
-Site
-~~~~
-
-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.
-
-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.
-
-
-.. _redirects:
-
-Redirects
-~~~~~~~~~
-
-Wagtail provides a simple interface for creating arbitrary redirects to and from any URL.
-
-.. image:: ../images/screen_wagtail_redirects.png
diff --git a/docs/building_your_site/index.rst b/docs/building_your_site/index.rst
deleted file mode 100644
index da5cf4f2d..000000000
--- a/docs/building_your_site/index.rst
+++ /dev/null
@@ -1,11 +0,0 @@
-Building your site
-==================
-
-.. note::
- This documentation is currently incomplete.
-
-.. toctree::
- :maxdepth: 3
-
- djangodevelopers
- frontenddevelopers
diff --git a/docs/conf.py b/docs/conf.py
index e0931da3b..64f4ab934 100644
--- a/docs/conf.py
+++ b/docs/conf.py
@@ -70,9 +70,9 @@ copyright = u'2014, Torchbox'
# built documents.
#
# The short X.Y version.
-version = '0.4'
+version = '0.5'
# The full version, including alpha/beta/rc tags.
-release = '0.4'
+release = '0.5'
# The language for content autogenerated by Sphinx. Refer to documentation
# for a list of supported languages.
diff --git a/docs/frontend_cache_purging.rst b/docs/contrib_components/frontend_cache_purging.rst
similarity index 99%
rename from docs/frontend_cache_purging.rst
rename to docs/contrib_components/frontend_cache_purging.rst
index 5f9f12ab3..7ae74a36f 100644
--- a/docs/frontend_cache_purging.rst
+++ b/docs/contrib_components/frontend_cache_purging.rst
@@ -42,8 +42,8 @@ Finally, make sure you have configured your frontend cache to accept PURGE reque
- `Squid `_
-Advanced useage
-~~~~~~~~~~~~~~~
+Advanced usage
+~~~~~~~~~~~~~~
Purging more than one URL per page
----------------------------------
diff --git a/docs/contrib_components/index.rst b/docs/contrib_components/index.rst
new file mode 100644
index 000000000..4b508330d
--- /dev/null
+++ b/docs/contrib_components/index.rst
@@ -0,0 +1,11 @@
+Contrib components
+==================
+
+
+.. toctree::
+ :maxdepth: 2
+
+ static_site_generation
+ sitemap_generation
+ frontend_cache_purging
+
diff --git a/docs/sitemap_generation.rst b/docs/contrib_components/sitemap_generation.rst
similarity index 100%
rename from docs/sitemap_generation.rst
rename to docs/contrib_components/sitemap_generation.rst
diff --git a/docs/static_site_generation.rst b/docs/contrib_components/static_site_generation.rst
similarity index 100%
rename from docs/static_site_generation.rst
rename to docs/contrib_components/static_site_generation.rst
diff --git a/docs/form_builder.rst b/docs/core_components/form_builder.rst
similarity index 100%
rename from docs/form_builder.rst
rename to docs/core_components/form_builder.rst
diff --git a/docs/core_components/images/feature_detection.rst b/docs/core_components/images/feature_detection.rst
new file mode 100644
index 000000000..0b3d03873
--- /dev/null
+++ b/docs/core_components/images/feature_detection.rst
@@ -0,0 +1,88 @@
+.. _image_feature_detection:
+
+=================
+Feature Detection
+=================
+
+Wagtail has the ability to automatically detect faces and features inside your images and crop the images to those features.
+
+Feature detection uses OpenCV to detect faces/features in an image when the image is uploaded. The detected features stored internally as a focal point in the ``focal_point_{x, y, width, height}`` fields on the ``Image`` model. These fields are used by the ``fill`` image filter when an image is rendered in a template to crop the image.
+
+
+Setup
+=====
+
+Feature detection requires OpenCV which can be a bit tricky to install as it's not currently pip-installable.
+
+
+Installing OpenCV on Debian/Ubuntu
+----------------------------------
+
+Debian and ubuntu provide an apt-get package called ``python-opencv``:
+
+ .. code-block:: bash
+
+ sudo apt-get install python-opencv python-numpy
+
+This will install PyOpenCV into your site packages. If you are using a virtual environment, you need to make sure site packages are enabled or Wagtail will not be able to import PyOpenCV.
+
+
+Enabling site packages in the virtual environment
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+If you are not using a virtual envionment, you can skip this step.
+
+Enabling site packages is different depending on whether you are using pyvenv (Python 3.3+ only) or virtualenv to manage your virtual environment.
+
+
+pyvenv
+``````
+
+Go into your pyvenv directory and open the ``pyvenv.cfg`` file then set ``include-system-site-packages`` to ``true``.
+
+
+virtualenv
+``````````
+
+Go into your virtualenv directory and delete a file called ``lib/python-x.x/no-global-site-packages.txt``.
+
+
+Testing the OpenCV installation
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+You can test that OpenCV can be seen by Wagtail by opening up a python shell (with your virtual environment active) and typing:
+
+ .. code-block:: python
+
+ import cv
+
+If you don't see an ``ImportError``, it worked. (If you see the error ``libdc1394 error: Failed to initialize libdc1394``, this is harmless and can be ignored.)
+
+
+Switching on feature detection in Wagtail
+-----------------------------------------
+
+Once OpenCV is installed, you need to set the ``WAGTAILIMAGES_FEATURE_DETECTION_ENABLED`` setting to ``True``:
+
+ .. code-block:: python
+
+ # settings.py
+
+ WAGTAILIMAGES_FEATURE_DETECTION_ENABLED = True
+
+
+Manually running feature detection
+----------------------------------
+
+Feature detection runs when new images are uploaded in to Wagtail. If you already have images in your Wagtail site and would like to run feature detection on them, you will have to run it manually.
+
+You can manually run feature detection on all images by running the following code in the python shell:
+
+ .. code-block:: python
+
+ from wagtail.wagtailimages.models import Image
+
+ for image in Image.objects.all():
+ if image.focal_point is None:
+ image.focal_point = image.get_suggested_focal_point()
+ image.save()
diff --git a/docs/core_components/images/index.rst b/docs/core_components/images/index.rst
new file mode 100644
index 000000000..fcae2d837
--- /dev/null
+++ b/docs/core_components/images/index.rst
@@ -0,0 +1,9 @@
+Images
+======
+
+.. toctree::
+ :maxdepth: 2
+
+ using_images_outside_wagtail
+ feature_detection
+
diff --git a/docs/core_components/images/using_images_outside_wagtail.rst b/docs/core_components/images/using_images_outside_wagtail.rst
new file mode 100644
index 000000000..d3b63126b
--- /dev/null
+++ b/docs/core_components/images/using_images_outside_wagtail.rst
@@ -0,0 +1,82 @@
+.. _using_images_outside_wagtail:
+
+============================
+Using images outside Wagtail
+============================
+
+Wagtail provides a way for you to generate external URLs for images in your image library which you can use to display your images on external sites.
+
+
+Setup
+=====
+
+Add an entry in your URLs configuration for ``wagtail.wagtailimages.urls``:
+
+ .. code-block:: python
+
+ from wagtail.wagtailimages import urls as wagtailimages_urls
+
+
+ urlpatterns = patterns('',
+ ...
+
+ url(r'^images/', include(wagtailimages_urls)),
+
+ ...
+ )
+
+
+Generating URLs for images
+==========================
+
+Once the above setup is done, a button should appear under the image preview on the image edit page. Clicking this button will take you to an interface where you can specify the size you want the image to be, and it will generate a URL and a preview of what the image is going to look like.
+
+The filter box lets you choose how you would like the image to be resized:
+
+
+.. glossary::
+ ``Original``
+
+ Leaves the image at its original size - no resizing is performed.
+
+ ``Resize to max``
+
+ Fit **within** the given dimensions.
+
+ The longest edge will be reduced to the equivalent dimension size defined. e.g A portrait image of width 1000, height 2000, treated with the ``max`` dimensions ``1000x500`` (landscape) would result in the image shrunk so the *height* was 500 pixels and the width 250.
+
+ ``Resize to min``
+
+ **Cover** the given dimensions.
+
+ This may result in an image slightly **larger** than the dimensions you specify. e.g A square image of width 2000, height 2000, treated with the ``min`` dimensions ``500x200`` (landscape) would have it's height and width changed to 500, i.e matching the width required, but greater than the height.
+
+ ``Resize to width``
+
+ Reduces the width of the image to the dimension specified.
+
+ ``Resize to height``
+
+ Resize the height of the image to the dimension specified..
+
+ ``Resize to fill``
+
+ Resize and **crop** to fill the **exact** dimensions.
+
+ This can be particularly useful for websites requiring square thumbnails of arbitrary images. For example, a landscape image of width 2000, height 1000, treated with ``fill`` dimensions ``200x200`` would have its height reduced to 200, then its width (ordinarily 400) cropped to 200.
+
+
+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
+
+
+
+
+Performance
+===========
+
+Currently, Wagtail will regenerate the image every time it is requested. For high volume sites, it is recommended to use a frontend cache to reduce load on the backend servers.
diff --git a/docs/core_components/index.rst b/docs/core_components/index.rst
new file mode 100644
index 000000000..a28ddf1b7
--- /dev/null
+++ b/docs/core_components/index.rst
@@ -0,0 +1,13 @@
+Core components
+===============
+
+.. toctree::
+ :maxdepth: 2
+
+ sites
+ pages/index
+ images/index
+ snippets
+ search/index
+ form_builder
+
diff --git a/docs/private_pages.rst b/docs/core_components/pages/advanced_topics/private_pages.rst
similarity index 100%
rename from docs/private_pages.rst
rename to docs/core_components/pages/advanced_topics/private_pages.rst
diff --git a/docs/core_components/pages/advanced_topics/queryset_methods.rst b/docs/core_components/pages/advanced_topics/queryset_methods.rst
new file mode 100644
index 000000000..2c221b883
--- /dev/null
+++ b/docs/core_components/pages/advanced_topics/queryset_methods.rst
@@ -0,0 +1,180 @@
+=====================
+Page Queryset Methods
+=====================
+
+All models that inherit from ``Page`` are given some extra Queryset methods accessible from their ``.objects`` attribute.
+
+
+Examples
+========
+
+ - Selecting only live pages
+
+ .. code-block:: python
+
+ live_pages = Page.objects.live()
+
+ - Selecting published EventPages that are descendants of events_index
+
+ .. code-block:: python
+
+ events = EventPage.objects.live().descendant_of(events_index)
+
+ - Getting a list of menu items
+
+ .. code-block:: python
+
+ # This gets a queryset of live children of the homepage with ``show_in_menus`` set
+ menu_items = homepage.get_children().live().in_menu()
+
+
+Reference
+=========
+
+.. automodule:: wagtail.wagtailcore.query
+.. autoclass:: PageQuerySet
+
+ .. automethod:: live
+
+ Example:
+
+ .. code-block:: python
+
+ published_pages = Page.objects.live()
+
+ .. automethod:: not_live
+
+ Example:
+
+ .. code-block:: python
+
+ unpublished_pages = Page.objects.not_live()
+
+ .. automethod:: in_menu
+
+ Example:
+
+ .. code-block:: python
+
+ # Build a menu from live pages that are children of the homepage
+ menu_items = homepage.get_children().live().in_menu()
+
+
+ .. note::
+
+ To put your page in menus, set the show_in_menus flag to true:
+
+ .. code-block:: python
+
+ # Add 'my_page' to the menu
+ my_page.show_in_menus = True
+
+ .. automethod:: page
+
+ Example:
+
+ .. code-block:: python
+
+ # Append an extra page to a queryset
+ new_queryset = old_queryset | Page.objects.page(page_to_add)
+
+ .. automethod:: not_page
+
+ Example:
+
+ .. code-block:: python
+
+ # Remove a page from a queryset
+ new_queryset = old_queryset & Page.objects.not_page(page_to_remove)
+
+ .. automethod:: descendant_of
+
+ Example:
+
+ .. code-block:: python
+
+ # Get EventPages that are under the special_events Page
+ special_events = EventPage.objects.descendant_of(special_events_index)
+
+ # Alternative way
+ special_events = special_events_index.get_descendants()
+
+ .. automethod:: not_descendant_of
+
+ Example:
+
+ .. code-block:: python
+
+ # Get EventPages that are not under the archived_events Page
+ non_archived_events = EventPage.objects.not_descendant_of(archived_events_index)
+
+ .. automethod:: child_of
+
+ Example:
+
+ .. code-block:: python
+
+ # Get a list of sections
+ sections = Page.objects.child_of(homepage)
+
+ # Alternative way
+ sections = homepage.get_children()
+
+ .. automethod:: ancestor_of
+
+ Example:
+
+ .. code-block:: python
+
+ # Get the current section
+ current_section = Page.objects.ancestor_of(current_page).child_of(homepage).first()
+
+ # Alternative way
+ current_section = current_page.get_ancestors().child_of(homepage).first()
+
+ .. automethod:: not_ancestor_of
+
+ Example:
+
+ .. code-block:: python
+
+ # Get the other sections
+ other_sections = Page.objects.not_ancestor_of(current_page).child_of(homepage)
+
+ .. automethod:: sibling_of
+
+ Example:
+
+ .. code-block:: python
+
+ # Get list of siblings
+ siblings = Page.objects.sibling_of(current_page)
+
+ # Alternative way
+ siblings = current_page.get_siblings()
+
+ .. automethod:: public
+
+ See: :ref:`private_pages`
+
+ .. note::
+
+ This doesn't filter out unpublished pages. If you want to only have published public pages, use ``.live().public()``
+
+ Example:
+
+ .. code-block:: python
+
+ # Find all the pages that are viewable by the public
+ all_pages = Page.objects.live().public()
+
+ .. automethod:: search
+
+ See: :ref:`wagtailsearch_for_python_developers`
+
+ Example:
+
+ .. code-block:: python
+
+ # Search future events
+ results = EventPage.objects.live().filter(date__gt=timezone.now()).search("Hello")
diff --git a/docs/core_components/pages/advanced_topics/routable_page_mixin.rst b/docs/core_components/pages/advanced_topics/routable_page_mixin.rst
new file mode 100644
index 000000000..36ca024c3
--- /dev/null
+++ b/docs/core_components/pages/advanced_topics/routable_page_mixin.rst
@@ -0,0 +1,119 @@
+.. _routable_page_mixin:
+
+====================================
+Embedding URL configuration in Pages
+====================================
+
+.. versionadded:: 0.5
+
+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 ``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 ``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:
+
+.. code-block:: python
+
+ from django.conf.urls import url
+
+ from wagtail.contrib.wagtailroutablepage.models import RoutablePageMixin
+ from wagtail.wagtailcore.models import Page
+
+
+ class EventPage(RoutablePageMixin, Page):
+ subpage_urls = (
+ url(r'^$', 'current_events', name='current_events'),
+ url(r'^past/$', 'past_events', name='past_events'),
+ url(r'^year/(\d+)/$', 'events_for_year', name='events_for_year'),
+ )
+
+ def current_events(self, request):
+ """
+ View function for the current events page
+ """
+ ...
+
+ def past_events(self, request):
+ """
+ View function for the past events page
+ """
+ ...
+
+ def events_for_year(self, request):
+ """
+ View function for the events for year page
+ """
+ ...
+
+
+The ``RoutablePageMixin`` class
+===============================
+
+.. automodule:: wagtail.contrib.wagtailroutablepage.models
+.. autoclass:: RoutablePageMixin
+
+ .. autoattribute:: subpage_urls
+
+ Example:
+
+ .. code-block:: python
+
+ from django.conf.urls import url
+
+ from wagtail.wagtailcore.models import Page
+
+ class MyPage(RoutablePageMixin, Page):
+ subpage_urls = (
+ url(r'^$', 'serve', name='main'),
+ url(r'^archive/$', 'archive', name='archive'),
+ )
+
+ def serve(self, request):
+ ...
+
+ def archive(self, request):
+ ...
+
+ .. automethod:: resolve_subpage
+
+ Example:
+
+ .. code-block:: python
+
+ view, args, kwargs = page.resolve_subpage('/past/')
+ response = view(request, *args, **kwargs)
+
+ .. automethod:: reverse_subpage
+
+ Example:
+
+ .. code-block:: python
+
+ 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
+
+ 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/docs/core_components/pages/creating_pages.rst b/docs/core_components/pages/creating_pages.rst
new file mode 100644
index 000000000..e6fb9a14b
--- /dev/null
+++ b/docs/core_components/pages/creating_pages.rst
@@ -0,0 +1,149 @@
+====================
+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.
+
+``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.
+
+
+An example Wagtail Page Model
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+This example represents a typical blog post:
+
+.. code-block:: python
+
+ from django.db import models
+
+ from wagtail.wagtailcore.models import Page
+ from wagtail.wagtailcore.fields import RichTextField
+ from wagtail.wagtailadmin.edit_handlers import FieldPanel
+ from wagtail.wagtailimages.edit_handlers import ImageChooserPanel
+ from wagtail.wagtailimages.models import Image
+
+ class BlogPage(Page):
+ body = RichTextField()
+ date = models.DateField("Post date")
+ feed_image = models.ForeignKey(
+ 'wagtailimages.Image',
+ null=True,
+ blank=True,
+ on_delete=models.SET_NULL,
+ related_name='+'
+ )
+
+
+
+ BlogPage.content_panels = [
+ FieldPanel('title', classname="full title"),
+ FieldPanel('date'),
+ FieldPanel('body', classname="full"),
+ ]
+
+ BlogPage.promote_panels = [
+ FieldPanel('slug'),
+ FieldPanel('seo_title'),
+ FieldPanel('show_in_menus'),
+ FieldPanel('search_description'),
+ ImageChooserPanel('feed_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.
+
+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.
+
+
+``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 ```` 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 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.
+
+.. automodule:: wagtail.wagtailcore.models
+.. autoclass:: Page
+
+ .. autoattribute:: specific
+
+ .. autoattribute:: specific_class
+
+ .. autoattribute:: url
+
+ .. autoattribute:: full_url
+
+ .. automethod:: relative_url
+
+ .. automethod:: is_navigable
+
+ .. automethod:: route
+
+ .. automethod:: serve
+
+ .. automethod:: get_context
+
+ .. automethod:: get_template
+
+ .. autoattribute:: preview_modes
+
+ .. automethod:: serve_preview
+
+ .. automethod:: get_ancestors
+
+ .. automethod:: get_descendants
+
+ .. automethod:: get_siblings
+
+ .. automethod:: search
+
+ .. attribute:: search_fields
+
+ A list of fields to be indexed by the search engine. See Search docs :ref:`wagtailsearch_for_python_developers`
+
+ .. 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`` e.g
+
+ .. code-block:: python
+
+ class BlogIndex(Page):
+ subpage_types = ['mysite.BlogPage', 'mysite.BlogArchivePage']
+
+ .. 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`
+
+
diff --git a/docs/editing_api.rst b/docs/core_components/pages/editing_api.rst
similarity index 99%
rename from docs/editing_api.rst
rename to docs/core_components/pages/editing_api.rst
index 4d346a815..f1025cbcb 100644
--- a/docs/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/index.rst b/docs/core_components/pages/index.rst
new file mode 100644
index 000000000..70d20d116
--- /dev/null
+++ b/docs/core_components/pages/index.rst
@@ -0,0 +1,24 @@
+Pages
+=====
+
+.. note::
+ This documentation is currently being written.
+
+Wagtail requires a little careful setup to define the types of content that you want to present through your website. The basic unit of content in Wagtail is the ``Page``, and all of your page-level content will inherit basic webpage-related properties from it. But for the most part, you will be defining content yourself, through the construction of Django models using Wagtail's ``Page`` as a base.
+
+Wagtail organizes content created from your models in a tree, which can have any structure and combination of model objects in it. Wagtail doesn't prescribe ways to organize and interrelate your content, but here we've sketched out some strategies for organizing your models.
+
+The presentation of your content, the actual webpages, includes the normal use of the Django template system. We'll cover additional functionality that Wagtail provides at the template level later on.
+
+
+.. toctree::
+ :maxdepth: 2
+
+ theory
+ creating_pages
+ writing_templates
+ model_recipes
+ editing_api
+ advanced_topics/queryset_methods
+ advanced_topics/private_pages
+ advanced_topics/routable_page_mixin
diff --git a/docs/model_recipes.rst b/docs/core_components/pages/model_recipes.rst
similarity index 99%
rename from docs/model_recipes.rst
rename to docs/core_components/pages/model_recipes.rst
index b8f006f99..4b0574ba2 100644
--- a/docs/model_recipes.rst
+++ b/docs/core_components/pages/model_recipes.rst
@@ -1,8 +1,8 @@
.. _model_recipes:
-Model Recipes
-=============
+Recipes
+=======
Overriding the serve() Method
-----------------------------
diff --git a/docs/core_components/pages/theory.rst b/docs/core_components/pages/theory.rst
new file mode 100644
index 000000000..bcea079bb
--- /dev/null
+++ b/docs/core_components/pages/theory.rst
@@ -0,0 +1,97 @@
+.. _pages-theory:
+
+======
+Theory
+======
+
+
+Introduction to Trees
+~~~~~~~~~~~~~~~~~~~~~
+
+If you're unfamiliar with trees as an abstract data type, you might want to `review the concepts involved. `_
+
+As a web developer, though, you probably already have a good understanding of trees as filesystem directories or paths. Wagtail pages can create the same structure, as each page in the tree has its own URL path, like so::
+
+ /
+ people/
+ nien-nunb/
+ laura-roslin/
+ events/
+ captain-picard-day/
+ winter-wrap-up/
+
+The Wagtail admin interface uses the tree to organize content for editing, letting you navigate up and down levels in the tree through its Explorer menu. This method of organization is a good place to start in thinking about your own Wagtail models.
+
+
+Nodes and Leaves
+----------------
+
+It might be handy to think of the ``Page``-derived models you want to create as being one of two node types: parents and leaves. Wagtail isn't prescriptive in this approach, but it's a good place to start if you're not experienced in structuring your own content types.
+
+
+Nodes
+`````
+Parent nodes on the Wagtail tree probably want to organize and display a browse-able index of their descendants. A blog, for instance, needs a way to show a list of individual posts.
+
+A Parent node could provide its own function returning its descendant objects.
+
+.. code-block:: python
+
+ class EventPageIndex(Page):
+ # ...
+ def events(self):
+ # Get list of live event pages that are descendants of this page
+ events = EventPage.objects.live().descendant_of(self)
+
+ # Filter events list to get ones that are either
+ # running now or start in the future
+ events = events.filter(date_from__gte=date.today())
+
+ # Order by date
+ events = events.order_by('date_from')
+
+ 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.
+
+
+Leaves
+``````
+Leaves are the pieces of content itself, a page which is consumable, and might just consist of a bunch of properties. A blog page leaf might have some body text and an image. A person page leaf might have a photo, a name, and an address.
+
+It might be helpful for a leaf to provide a way to back up along the tree to a parent, such as in the case of breadcrumbs navigation. The tree might also be deep enough that a leaf's parent won't be included in general site navigation.
+
+The model for the leaf could provide a function that traverses the tree in the opposite direction and returns an appropriate ancestor:
+
+.. code-block:: python
+
+ class EventPage(Page):
+ # ...
+ def event_index(self):
+ # 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.
+
+
+Other Relationships
+```````````````````
+Your ``Page``-derived models might have other interrelationships which extend the basic Wagtail tree or depart from it entirely. You could provide functions to navigate between siblings, such as a "Next Post" link on a blog page (``post->post->post``). It might make sense for subtrees to interrelate, such as in a discussion forum (``forum->post->replies``) Skipping across the hierarchy might make sense, too, as all objects of a certain model class might interrelate regardless of their ancestors (``events = EventPage.objects.all``). It's largely up to the models to define their interrelations, the possibilities are really endless.
+
+
+.. _anatomy_of_a_wagtail_request:
+
+Anatomy of a Wagtail Request
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+For going beyond the basics of model definition and interrelation, it might help to know how Wagtail handles requests and constructs responses. In short, it goes something like:
+
+ #. Django gets a request and routes through Wagtail's URL dispatcher definitions
+ #. Wagtail checks the hostname of the request to determine which ``Site`` record will handle this request.
+ #. Starting from the root page of that site, Wagtail traverses the page tree, calling the ``route()`` method and letting each page model decide whether it will handle the request itself or pass it on to a child page.
+ #. The page responsible for handling the request returns a ``RouteResult`` object from ``route()``, which identifies the page along with any additional args/kwargs to be passed to ``serve()``.
+ #. Wagtail calls ``serve()``, which constructs a context using ``get_context()``
+ #. ``serve()`` finds a template to pass it to using ``get_template()``
+ #. A response object is returned by ``serve()`` and Django responds to the requester.
+
+You can apply custom behavior to this process by overriding ``Page`` class methods such as ``route()`` and ``serve()`` in your own models. For examples, see :ref:`model_recipes`.
diff --git a/docs/building_your_site/frontenddevelopers.rst b/docs/core_components/pages/writing_templates.rst
similarity index 99%
rename from docs/building_your_site/frontenddevelopers.rst
rename to docs/core_components/pages/writing_templates.rst
index a5120af19..9374cca32 100644
--- a/docs/building_your_site/frontenddevelopers.rst
+++ b/docs/core_components/pages/writing_templates.rst
@@ -181,6 +181,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.
diff --git a/docs/search/backends.rst b/docs/core_components/search/backends.rst
similarity index 100%
rename from docs/search/backends.rst
rename to docs/core_components/search/backends.rst
diff --git a/docs/search/editors_picks.rst b/docs/core_components/search/editors_picks.rst
similarity index 100%
rename from docs/search/editors_picks.rst
rename to docs/core_components/search/editors_picks.rst
diff --git a/docs/search/for_python_developers.rst b/docs/core_components/search/for_python_developers.rst
similarity index 98%
rename from docs/search/for_python_developers.rst
rename to docs/core_components/search/for_python_developers.rst
index 67f732894..b99795e7b 100644
--- a/docs/search/for_python_developers.rst
+++ b/docs/core_components/search/for_python_developers.rst
@@ -36,6 +36,11 @@ Indexing extra fields
The ``indexed_fields`` configuration format was replaced with ``search_fields``
+.. note::
+
+ Searching on extra fields with the database backend is not currently supported.
+
+
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.
diff --git a/docs/search/frontend_views.rst b/docs/core_components/search/frontend_views.rst
similarity index 100%
rename from docs/search/frontend_views.rst
rename to docs/core_components/search/frontend_views.rst
diff --git a/docs/search/index.rst b/docs/core_components/search/index.rst
similarity index 100%
rename from docs/search/index.rst
rename to docs/core_components/search/index.rst
diff --git a/docs/core_components/sites.rst b/docs/core_components/sites.rst
new file mode 100644
index 000000000..89c490b65
--- /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.
diff --git a/docs/snippets.rst b/docs/core_components/snippets.rst
similarity index 69%
rename from docs/snippets.rst
rename to docs/core_components/snippets.rst
index a40b57d94..8b2a2d557 100644
--- a/docs/snippets.rst
+++ b/docs/core_components/snippets.rst
@@ -92,26 +92,49 @@ Then in your own page templates, you can include your snippet template tag with:
{% endblock %}
+
Binding Pages to Snippets
-------------------------
-An alternate strategy for including snippets might involve explicitly binding a specific page object to a specific snippet object. Lets add another snippet class to see how that might work:
+In the above example, the list of adverts is a fixed list, displayed as part of the template independently of the page content. This might be what you want for a common panel in a sidebar, say - but in other scenarios you may wish to refer to a snippet within page content. This can be done by defining a foreign key to the snippet model within your page model, and adding a ``SnippetChooserPanel`` to the page's ``content_panels`` definitions. For example, if you wanted to be able to specify an advert to appear on ``BookPage``:
+
+.. code-block:: python
+
+ from wagtail.wagtailsnippets.edit_handlers import SnippetChooserPanel
+ # ...
+ class BookPage(Page):
+ advert = models.ForeignKey(
+ 'demo.Advert',
+ null=True,
+ blank=True,
+ on_delete=models.SET_NULL,
+ related_name='+'
+ )
+
+ BookPage.content_panels = [
+ SnippetChooserPanel('advert', Advert),
+ # ...
+ ]
+
+
+The snippet could then be accessed within your template as ``self.advert``.
+
+To attach multiple adverts to a page, the ``SnippetChooserPanel`` can be placed on an inline child object of ``BookPage``, rather than on ``BookPage`` itself. Here this child model is named ``BookPageAdvertPlacement`` (so called because there is one such object for each time that an advert is placed on a BookPage):
+
.. code-block:: python
from django.db import models
from wagtail.wagtailcore.models import Page
- from wagtail.wagtailadmin.edit_handlers import PageChooserPanel
- from wagtail.wagtailsnippets.models import register_snippet
from wagtail.wagtailsnippets.edit_handlers import SnippetChooserPanel
from modelcluster.fields import ParentalKey
...
- class AdvertPlacement(models.Model):
- page = ParentalKey('wagtailcore.Page', related_name='advert_placements')
+ class BookPageAdvertPlacement(Orderable, models.Model):
+ page = ParentalKey('demo.BookPage', related_name='advert_placements')
advert = models.ForeignKey('demo.Advert', related_name='+')
class Meta:
@@ -119,25 +142,27 @@ An alternate strategy for including snippets might involve explicitly binding a
verbose_name_plural = "Advert Placements"
panels = [
- PageChooserPanel('page'),
SnippetChooserPanel('advert', Advert),
]
def __unicode__(self):
return self.page.title + " -> " + self.advert.text
- register_snippet(AdvertPlacement)
+ class BookPage(Page):
+ ...
-The class ``AdvertPlacement`` has two properties, ``page`` and ``advert``, which point to other models. Wagtail provides a ``PageChooserPanel`` and ``SnippetChooserPanel`` to let us make painless selection of those properties in the Wagtail admin. Note also the ``Meta`` class, which you can stock with the ``verbose_name`` and ``verbose_name_plural`` properties to override the snippet labels in the Wagtail admin. The text representation of the class has also gotten fancy, using both properties to construct a compound label showing the relationship it forms between a page and an Advert.
+ BookPage.content_panels = [
+ InlinePanel(BookPage, 'advert_placements', label="Adverts"),
+ # ...
+ ]
-With this snippet in place, we can use the reverse ``related_name`` lookup label ``advert_placements`` to iterate over any placements within our template files. In the template for a ``Page``-derived model, we could include the following:
+
+These child objects are now accessible through the page's ``advert_placements`` property, and from there we can access the linked Advert snippet as ``advert``. In the template for ``BookPage``, we could include the following:
.. code-block:: django
- {% if self.advert_placements %}
- {% for advert_placement in self.advert_placements.all %}
-
+ {% endfor %}
diff --git a/docs/editor_manual/documents_images_snippets/documents.rst b/docs/editor_manual/documents_images_snippets/documents.rst
index 8983e8b5f..21af7ab52 100644
--- a/docs/editor_manual/documents_images_snippets/documents.rst
+++ b/docs/editor_manual/documents_images_snippets/documents.rst
@@ -3,14 +3,14 @@ Documents
Documents such as PDFs can be managed from the Documents interface, available in the left-hand menu. This interface allows you to add documents to and remove documents from the CMS.
-.. image:: ../../images/screen29_documents_page.png
+.. image:: ../../_static/images/screen29_documents_page.png
* Add documents by clicking the *Add document* button in the top-right.
* Search for documents in the CMS by entering your search term in the search bar. The results will be automatically updated as you type.
* You can also filter the results by *Popular tags*. Click on a tag to update the search results listing.
* Edit the details of a document by clicking the document title.
-.. image:: ../../images/screen30_documents_edit_page.png
+.. image:: ../../_static/images/screen30_documents_edit_page.png
* When editing a document you can replace the file associated with that document record. This means you can update documents without having to update the pages on which they are placed. Changing the file will change it on all pages that use the document.
* Add or remove tags using the Tags field.
diff --git a/docs/editor_manual/documents_images_snippets/images.rst b/docs/editor_manual/documents_images_snippets/images.rst
index 13cdf71a2..008a1f330 100644
--- a/docs/editor_manual/documents_images_snippets/images.rst
+++ b/docs/editor_manual/documents_images_snippets/images.rst
@@ -3,11 +3,11 @@ Images
If you want to edit, add or remove images from the CMS outside of the individual pages you can do so from the Images interface. This is accessed from the left-hand menu.
-.. image:: ../../images/screen31_images_page.png
+.. image:: ../../_static/images/screen31_images_page.png
* Clicking an image will allow you to edit the data associated with it. This includes the Alt text, the photographers credit, the medium of the subject matter and much more. **NOTE:** changing the alt text here will alter it for all occurrences of the image in carousels, but not in inline images, where the alt text can be set separately.
-.. image:: ../../images/screen32_image_edit_page.png
+.. image:: ../../_static/images/screen32_image_edit_page.png
* When editing an image you can replace the file associated with that image record. This means you can update images without having to update the pages on which they are placed. Changing the file will change it on all pages that use the image.
diff --git a/docs/editor_manual/editing_existing_pages.rst b/docs/editor_manual/editing_existing_pages.rst
index b80e6cd89..566e90db6 100644
--- a/docs/editor_manual/editing_existing_pages.rst
+++ b/docs/editor_manual/editing_existing_pages.rst
@@ -6,7 +6,7 @@ There are two ways that you can access the edit screen of an existing page:
* Clicking the title of the page in an `Explorer page `_ or in `search results `_.
* Clicking the *Edit* link below the title in either of the situations above.
-.. image:: ../images/screen12_edit_screen_overview.png
+.. image:: ../_static/images/screen12_edit_screen_overview.png
* When editing an existing page the title of the page being edited is displayed at the top of the page.
* The current status of the page is displayed in the top-right.
diff --git a/docs/editor_manual/finding_your_way_around/the_dashboard.rst b/docs/editor_manual/finding_your_way_around/the_dashboard.rst
index dc16479d3..8fa832e89 100644
--- a/docs/editor_manual/finding_your_way_around/the_dashboard.rst
+++ b/docs/editor_manual/finding_your_way_around/the_dashboard.rst
@@ -11,7 +11,7 @@ The Dashboard provides information on:
You can return to the Dashboard at any time by clicking the Wagtail log in the top-left of the screen.
-.. image:: ../../images/screen02_dashboard_editor.png
+.. image:: ../../_static/images/screen02_dashboard_editor.png
- Clicking the logo returns you to your Dashboard.
- Thes stats at the top of the page describe the total amount of content on the CMS (just for fun!).
diff --git a/docs/editor_manual/finding_your_way_around/the_explorer_menu.rst b/docs/editor_manual/finding_your_way_around/the_explorer_menu.rst
index 325b5b328..923d598a0 100644
--- a/docs/editor_manual/finding_your_way_around/the_explorer_menu.rst
+++ b/docs/editor_manual/finding_your_way_around/the_explorer_menu.rst
@@ -1,7 +1,7 @@
The Explorer menu
~~~~~~~~~~~~~~~~~
-.. image:: ../../images/screen03_explorer_menu.png
+.. image:: ../../_static/images/screen03_explorer_menu.png
* Click the Explorer button in the sidebar to open the site explorer. This allows you to navigate through the tree-structure of the site.
* Clicking the name of a page will take you to the Explorer page for that section (see below). NOTE: The site explorer only displays pages which themselves have child pages. To see and edit the child pages you should click the name of the parent page in the site explorer.
diff --git a/docs/editor_manual/finding_your_way_around/the_explorer_page.rst b/docs/editor_manual/finding_your_way_around/the_explorer_page.rst
index c67b24c59..51a4aa2db 100644
--- a/docs/editor_manual/finding_your_way_around/the_explorer_page.rst
+++ b/docs/editor_manual/finding_your_way_around/the_explorer_page.rst
@@ -4,20 +4,20 @@ The Explorer page
The Explorer page allows you to view the a page's children and perform actions on them. From here you can publish/unpublish pages, move pages to other sections, drill down further into the content tree, or reorder pages under the parent for the purposes of display in menus.
-.. image:: ../../images/screen05_explorer_page.png
+.. image:: ../../_static/images/screen05_explorer_page.png
* The name of the section you are looking at is displayed below the breadcrumb (the row of page names beginning with the home icon). Each section is also itself a page (in this case the homepage). Clicking the title of the section takes you to the Edit screen for the section page.
* As the heading suggests, below are the child pages of the section. Clicking the titles of each child page will take you to its Edit screen.
-.. image:: ../../images/screen06_explorer_page_arrow.png
+.. image:: ../../_static/images/screen06_explorer_page_arrow.png
* Clicking the arrows will display a further level of child pages.
-.. image:: ../../images/screen07_explorer_page_breadcrumb.png
+.. image:: ../../_static/images/screen07_explorer_page_breadcrumb.png
* As you drill down through the site the breadcrumb (the row of pages beginning with the home icon) will display the path you have taken. Clicking on the page titles in the breadcrumb will take you to the Explorer screen for that page.
-.. image:: ../../images/screen08_add_page_button.png
+.. image:: ../../_static/images/screen08_add_page_button.png
* To add further child pages press the Add child page button below the parent page title. You can view the parent page on the live site by pressing the View live button. The Move button will take you to the Move page screen where you can reposition the page and all its child pages in the site structure.
* Similar buttons are available for each child page. These are made visible on hover.
@@ -25,7 +25,7 @@ The Explorer page allows you to view the a page's children and perform actions o
Reordering pages
________________
-.. image:: ../../images/screen08.5_reorder_page_handles.png
+.. image:: ../../_static/images/screen08.5_reorder_page_handles.png
* Clicking the icon to the far left of the child pages table will enable the reordering handles. This allows you to reorder the way that content displays in the main menu of your website.
* Reorder by dragging the pages by the handles on the far left (the icon made up of 8 dots).
diff --git a/docs/editor_manual/finding_your_way_around/using_search.rst b/docs/editor_manual/finding_your_way_around/using_search.rst
index 24a0fc4db..0cd001db8 100644
--- a/docs/editor_manual/finding_your_way_around/using_search.rst
+++ b/docs/editor_manual/finding_your_way_around/using_search.rst
@@ -1,7 +1,7 @@
Using search
~~~~~~~~~~~~
-.. image:: ../../images/screen04_search_screen.png
+.. image:: ../../_static/images/screen04_search_screen.png
* A very easy way to find the page that you want is to use the main search feature, accessible from the left-hand menu.
* Simply type in part or all of the name of the page you are looking for, and the results below will automatically update as you type.
diff --git a/docs/editor_manual/getting_started.rst b/docs/editor_manual/getting_started.rst
index 64969aa0a..e935b039e 100644
--- a/docs/editor_manual/getting_started.rst
+++ b/docs/editor_manual/getting_started.rst
@@ -15,4 +15,4 @@ __________
* Access this by adding **/admin** onto the end of your root URL (e.g. www.example.com/admin).
* Enter your username and password and click **Sign in**.
-.. image:: ../images/screen01_login.png
\ No newline at end of file
+.. image:: ../_static/images/screen01_login.png
\ No newline at end of file
diff --git a/docs/editor_manual/new_pages/adding_multiple_items.rst b/docs/editor_manual/new_pages/adding_multiple_items.rst
index 447574588..f173995dd 100644
--- a/docs/editor_manual/new_pages/adding_multiple_items.rst
+++ b/docs/editor_manual/new_pages/adding_multiple_items.rst
@@ -3,15 +3,15 @@ Adding multiple items
A common feature of Wagtail is the ability to add more than one of a particular type of field or item. For example, you can add as many carousel items or related links as you wish.
-.. image:: ../../images/screen24_multiple_items_closed.png
+.. image:: ../../_static/images/screen24_multiple_items_closed.png
* Whenever you see the white cross in the green circle illustrated here it means you can add multiple objects or items to a page. Clicking the icon will display the fields required for that piece of content. The image below demonstrates this with a *Related link* item.
-.. image:: ../../images/screen25_multiple_items_open.png
+.. image:: ../../_static/images/screen25_multiple_items_open.png
* You can delete an individual item by pressing the trash can in the top-right.
* You can add more items by clicking the link with the white cross again.
-.. image:: ../../images/screen26_reordering_multiple_items.png
+.. image:: ../../_static/images/screen26_reordering_multiple_items.png
4. You can reorder your multiple items using the up and down arrows. Doing this will affect the order in which they are display on the live page.
\ No newline at end of file
diff --git a/docs/editor_manual/new_pages/creating_body_content.rst b/docs/editor_manual/new_pages/creating_body_content.rst
index 0a87a6ef5..1e3c2b21b 100644
--- a/docs/editor_manual/new_pages/creating_body_content.rst
+++ b/docs/editor_manual/new_pages/creating_body_content.rst
@@ -7,34 +7,34 @@ There are two types of text entry fields you will see when creating a page. Some
So, when you click into certain fields, for example the *Body* field, you will be presented with a set of tools which allow you to format and style your text. These tools also allow you to insert links, images, videos clips and links to documents.
-.. image:: ../../images/screen11_rich_text_field.png
+.. image:: ../../_static/images/screen11_rich_text_field.png
Below is a summary of what the different buttons represent:
-.. image:: ../../images/screen11.1_bold_italic.png
+.. image:: ../../_static/images/screen11.1_bold_italic.png
**Bold / Italic:** Either click then type for bold or italic, or highlight and select to convert existing text to bold or italic.
-.. image:: ../../images/screen11.2_formatting_options.png
+.. image:: ../../_static/images/screen11.2_formatting_options.png
**Paragraph / heading levels:** Clicking into a paragraph and selecting one of these options will change the level of the text. H1 is not included as this is reserved for the page title.
-.. image:: ../../images/screen11.3_lists.png
+.. image:: ../../_static/images/screen11.3_lists.png
**Bulleted and numbered lists**
-.. image:: ../../images/screen11.4_horizontal_rule.png
+.. image:: ../../_static/images/screen11.4_horizontal_rule.png
**Horizontal rule:** Creates a horizontal line at the position of the cursor. If inserted inside a paragraph it will split the paragraph into two seperate paragraphs.
-.. image:: ../../images/screen11.5_undo_redo.png
+.. image:: ../../_static/images/screen11.5_undo_redo.png
**Undo / redo:** As expected will undo or redo the latest actions. Never use the your browser's back button when attempting to undo changes as this could lead to errors. Either use this undo button, or the usual keyboard shortcut, CTRL+Z.
-.. image:: ../../images/screen11.6_images_videos.png
+.. image:: ../../_static/images/screen11.6_images_videos.png
-**Insert image / video:** Allows you to insert an image or video into the rich text field. See Inserting images and videos section for more details. .. insert links for images and videos here>>
+**Insert image / video:** Allows you to insert an image or video into the rich text field. See Inserting images and videos section for more details. See `Inserting images ` and `Inserting videos ` sections.
-.. image:: ../../images/screen11.7_links_docs.png
+.. image:: ../../_static/images/screen11.7_links_docs.png
-**Insert link / document:** Allows you to insert a link or a document into the rich text field. See Inserting links and Inserting documents for more details. .. insert links to Links and documents sections>>
\ No newline at end of file
+**Insert link / document:** Allows you to insert a link or a document into the rich text field. See Inserting links and Inserting documents for more details. See `Inserting links section `.
\ No newline at end of file
diff --git a/docs/editor_manual/new_pages/index.rst b/docs/editor_manual/new_pages/index.rst
index c3695970d..904b94600 100644
--- a/docs/editor_manual/new_pages/index.rst
+++ b/docs/editor_manual/new_pages/index.rst
@@ -1,7 +1,7 @@
Creating new pages
~~~~~~~~~~~~~~~~~~
-.. image:: ../../images/screen08_add_page_button.png
+.. image:: ../../_static/images/screen08_add_page_button.png
Create new pages by clicking the Add child page. This creates a child page of the section you are currently in. In this case a child page of the Homepage.
diff --git a/docs/editor_manual/new_pages/inserting_documents.rst b/docs/editor_manual/new_pages/inserting_documents.rst
index 6cc2208fe..f6b6c9407 100644
--- a/docs/editor_manual/new_pages/inserting_documents.rst
+++ b/docs/editor_manual/new_pages/inserting_documents.rst
@@ -1,10 +1,10 @@
Inserting links to documents into body text
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-.. image:: ../../images/screen27_docs_icon.png
+.. image:: ../../_static/images/screen27_docs_icon.png
It is possible to insert links to documents held in the CMS into the body text of a web page by clicking the button above in the Body field.
The process for doing this is the same as when inserting an image. You are given the choice of either choosing a document from the CMS, or uploading a new document.
-.. image:: ../../images/screen28_docs_form.png
\ No newline at end of file
+.. image:: ../../_static/images/screen28_docs_form.png
\ No newline at end of file
diff --git a/docs/editor_manual/new_pages/inserting_images.rst b/docs/editor_manual/new_pages/inserting_images.rst
index 3ad57f101..b00c85eaa 100644
--- a/docs/editor_manual/new_pages/inserting_images.rst
+++ b/docs/editor_manual/new_pages/inserting_images.rst
@@ -11,11 +11,11 @@ __________________________________
The carousel is where the main, featured images and videos associated with a page should be displayed.
-.. image:: ../../images/screen14_add_carousel_button.png
+.. image:: ../../_static/images/screen14_add_carousel_button.png
* To insert a carousel item click the Add carousel content link in the Carousel content section.
-.. image:: ../../images/screen15_carousel_form.png
+.. image:: ../../_static/images/screen15_carousel_form.png
* You can then insert an image by clicking the *Choose an image* button.
* It is also possible to add videos to a carousel. Simply copy and paste the web address for the video (either YouTube or Vimeo) into the *Embed URL* field and click Insert. A poster image for the video can also be uploaded or selected from the CMS. This is the image displayed before a user has clicked play on the video.
@@ -38,7 +38,7 @@ When you click the *Choose an image* button you will be presented with a pop-up
The image below demonstrates finding and inserting an image that is already present in the CMS image library.
-.. image:: ../../images/screen16_selecting_image_from_library.png
+.. image:: ../../_static/images/screen16_selecting_image_from_library.png
#. Typing into the search box will automatically display the results below.
#. Clicking one of the Popular tags will filter the search results by that tag.
@@ -46,7 +46,7 @@ The image below demonstrates finding and inserting an image that is already pre
**Uploading a new image to the CMS**
-.. image:: ../../images/screen17_upload_image.png
+.. image:: ../../_static/images/screen17_upload_image.png
#. You must include an image title for your uploaded image
#. Click the *Choose file* button to choose an image from your computer.
@@ -60,12 +60,12 @@ Images can also be inserted into the body text of a page. When editing the Body
In addition, the Wagtail Demo site allows you to chose an aligmnent for you image.
-.. image:: ../../images/screen18_image_alignment.png
+.. image:: ../../_static/images/screen18_image_alignment.png
#. You can select how the image is displayed by selecting one of the format options.
#. In the Wagtail Demo site, images inserted into the body text do not have embeded captions (these should be added as regular body text). However you must still provide specific alt text for your image.
-The aligmnents available are described below:
+The alignments available are described below:
* **Full width:** Image will be inserted using the full width of the text area.
* **Half-width left/right aligned:** Inserts the image at half the width of the text area. If inserted in a block of text the text will wrap around the image. If two half-width images are inserted together they will display next to each other.
diff --git a/docs/editor_manual/new_pages/inserting_links.rst b/docs/editor_manual/new_pages/inserting_links.rst
index a74e0a824..030b93bc2 100644
--- a/docs/editor_manual/new_pages/inserting_links.rst
+++ b/docs/editor_manual/new_pages/inserting_links.rst
@@ -5,7 +5,7 @@ Similar to images, there are a variety of points at which you will want to add l
Whichever way you insert a link, you will be presented with the form displayed below.
-.. image:: ../../images/screen19_link_form.png
+.. image:: ../../_static/images/screen19_link_form.png
* Search for an existing page to link to using the search bar at the top of the pop-up.
* Below the search bar you can select the type of link you want to insert. The following types are available:
diff --git a/docs/editor_manual/new_pages/inserting_videos.rst b/docs/editor_manual/new_pages/inserting_videos.rst
index 1b32c0d1c..fe986592b 100644
--- a/docs/editor_manual/new_pages/inserting_videos.rst
+++ b/docs/editor_manual/new_pages/inserting_videos.rst
@@ -6,10 +6,10 @@ Inserting videos into body content
As well as inserting videos into a carousel, Wagtail's rich text fields allow you to add videos into the body of a page by clicking the *Add video* button in the toolbar.
-.. image:: ../../images/screen20_insert_video_form.png
+.. image:: ../../_static/images/screen20_insert_video_form.png
* Copy and paste the web address for the video (either YouTube or Vimeo) into the URL field and click Insert.
-.. image:: ../../images/screen21_video_in_editor.png
+.. image:: ../../_static/images/screen21_video_in_editor.png
* A placeholder with the name of the video and a screenshot will be inserted into the text area. Clicking the X in the top corner will remove the video.
diff --git a/docs/editor_manual/new_pages/previewing_and_submitting_for_moderation.rst b/docs/editor_manual/new_pages/previewing_and_submitting_for_moderation.rst
index 0daab3774..49411c5c5 100644
--- a/docs/editor_manual/new_pages/previewing_and_submitting_for_moderation.rst
+++ b/docs/editor_manual/new_pages/previewing_and_submitting_for_moderation.rst
@@ -9,4 +9,4 @@ The Save/Preview/Submit for moderation menu is always present at the bottom of t
* **Publish/Unpublish:** Clicking either the *Publish* or *Unpublish* buttons will take you to a confirmation screen asking you to confirm that you wish to publish or unpublish this page. If a page is published it will be accessible from its specific URL and will also be displayed in site search results. (moderators and administrators only)
* **Delete:** Clicking this button will take you to a confirmation screen asking you to confirm that you wish to delete the current page. Be sure that this is actually what you want to do, as deleted pages are not recoverable. In many situations simply unpublishing the page will be enough. (moderators and administrators only)
-.. image:: ../../images/screen13_publish_menu.png
+.. image:: ../../_static/images/screen13_publish_menu.png
diff --git a/docs/editor_manual/new_pages/required_fields.rst b/docs/editor_manual/new_pages/required_fields.rst
index 315636c6b..62b3af461 100644
--- a/docs/editor_manual/new_pages/required_fields.rst
+++ b/docs/editor_manual/new_pages/required_fields.rst
@@ -3,9 +3,9 @@ Required fields
* Fields marked with an asterisk are required. You will not be able to save a draft or submit the page for moderation without these fields being completed.
-.. image:: ../../images/screen22_required_field.png
+.. image:: ../../_static/images/screen22_required_field.png
* If you try to save/submit the page with some required fields not filled out, you will see the error displayed here.
* The number of validation errors for each of the *Promote* and *Content* tabs will appear in a red circle, and the text, 'This field is required', will appear below each field that must be completed.
-.. image:: ../../images/screen23_validation_error.png
+.. image:: ../../_static/images/screen23_validation_error.png
diff --git a/docs/editor_manual/new_pages/selecting_a_page_type.rst b/docs/editor_manual/new_pages/selecting_a_page_type.rst
index e3a4001d5..99ec8eebf 100644
--- a/docs/editor_manual/new_pages/selecting_a_page_type.rst
+++ b/docs/editor_manual/new_pages/selecting_a_page_type.rst
@@ -1,12 +1,12 @@
Selecting a page type
~~~~~~~~~~~~~~~~~~~~~
-.. image:: ../../images/screen09_page_type_selection.png
+.. image:: ../../_static/images/screen09_page_type_selection.png
* On the left of the page chooser screen are listed all the types of pages that you can create. Clicking the page type name will take you to the Create new page screen for that page type (see below).
* Clicking the *View all … pages* links on the right will display all the pages that exist on the website of this type. This is to help you judge what type of page you will need to complete your task.
-.. image:: ../../images/screen10_blank_page_edit_screen.png
+.. image:: ../../_static/images/screen10_blank_page_edit_screen.png
* Once you’ve selected a page type you will be presented with a blank New page screen.
* Click into the areas below each field's heading to start entering content.
\ No newline at end of file
diff --git a/docs/contributing.rst b/docs/howto/contributing.rst
similarity index 100%
rename from docs/contributing.rst
rename to docs/howto/contributing.rst
diff --git a/docs/deploying.rst b/docs/howto/deploying.rst
similarity index 79%
rename from docs/deploying.rst
rename to docs/howto/deploying.rst
index 5ca7c67df..9acf54976 100644
--- a/docs/deploying.rst
+++ b/docs/howto/deploying.rst
@@ -4,7 +4,7 @@ Deploying Wagtail
On your server
~~~~~~~~~~~~~~
-Wagtail is straightforward to deploy on modern Linux-based distributions, but see the section on :doc:`performance ` for the non-Python services we recommend. If you are running Debian or Ubuntu, this installation script for our Vagrant box may be useful:
+Wagtail is straightforward to deploy on modern Linux-based distributions, but see the section on :doc:`performance ` for the non-Python services we recommend. If you are running Debian or Ubuntu, this installation script for our Vagrant box may be useful:
`github.com/torchbox/wagtaildemo/blob/master/etc/install/install.sh `_
@@ -18,4 +18,4 @@ On Gondor
On other PAASs and IAASs
~~~~~~~~~~~~~~~~~~~~~~~~
-We know of Wagtail sites running on `Heroku `_, Digital Ocean and elsewhere. If you have successfully installed Wagtail on your platform or infrastructure, please :doc:`contribute ` your notes to this documentation!
\ No newline at end of file
+We know of Wagtail sites running on `Heroku `_, Digital Ocean and elsewhere. If you have successfully installed Wagtail on your platform or infrastructure, please :doc:`contribute ` your notes to this documentation!
diff --git a/docs/howto/index.rst b/docs/howto/index.rst
new file mode 100644
index 000000000..01ce20d13
--- /dev/null
+++ b/docs/howto/index.rst
@@ -0,0 +1,11 @@
+How to
+======
+
+
+.. toctree::
+ :maxdepth: 2
+
+ settings
+ deploying
+ performance
+ contributing
diff --git a/docs/performance.rst b/docs/howto/performance.rst
similarity index 100%
rename from docs/performance.rst
rename to docs/howto/performance.rst
diff --git a/docs/settings.rst b/docs/howto/settings.rst
similarity index 99%
rename from docs/settings.rst
rename to docs/howto/settings.rst
index 898fb3cb3..59faa6a29 100644
--- a/docs/settings.rst
+++ b/docs/howto/settings.rst
@@ -141,7 +141,7 @@ Wagtail Apps
Search framework for Page content. See :ref:`search`.
``wagtailredirects``
- Admin interface for creating arbitrary redirects on your site. See :ref:`redirects`.
+ Admin interface for creating arbitrary redirects on your site.
``wagtailforms``
Models for creating forms on your pages and viewing submissions. See :ref:`form_builder`.
diff --git a/docs/images/screen02_dashboard_editor.png b/docs/images/screen02_dashboard_editor.png
deleted file mode 100644
index 6d85bc824..000000000
Binary files a/docs/images/screen02_dashboard_editor.png and /dev/null differ
diff --git a/docs/images/screen03_explorer_menu.png b/docs/images/screen03_explorer_menu.png
deleted file mode 100644
index 23588e097..000000000
Binary files a/docs/images/screen03_explorer_menu.png and /dev/null differ
diff --git a/docs/images/screen04_search_screen.png b/docs/images/screen04_search_screen.png
deleted file mode 100644
index 0f37aa81d..000000000
Binary files a/docs/images/screen04_search_screen.png and /dev/null differ
diff --git a/docs/images/screen05_explorer_page.png b/docs/images/screen05_explorer_page.png
deleted file mode 100644
index 0a371c5f3..000000000
Binary files a/docs/images/screen05_explorer_page.png and /dev/null differ
diff --git a/docs/images/screen06_explorer_page_arrow.png b/docs/images/screen06_explorer_page_arrow.png
deleted file mode 100644
index 3f1294939..000000000
Binary files a/docs/images/screen06_explorer_page_arrow.png and /dev/null differ
diff --git a/docs/images/screen07_explorer_page_breadcrumb.png b/docs/images/screen07_explorer_page_breadcrumb.png
deleted file mode 100644
index 7ddca5607..000000000
Binary files a/docs/images/screen07_explorer_page_breadcrumb.png and /dev/null differ
diff --git a/docs/images/screen08.5_reorder_page_handles.png b/docs/images/screen08.5_reorder_page_handles.png
deleted file mode 100644
index 6ab53c0cc..000000000
Binary files a/docs/images/screen08.5_reorder_page_handles.png and /dev/null differ
diff --git a/docs/images/screen08_add_page_button.png b/docs/images/screen08_add_page_button.png
deleted file mode 100644
index f5f5c43d6..000000000
Binary files a/docs/images/screen08_add_page_button.png and /dev/null differ
diff --git a/docs/images/screen09_page_type_selection.png b/docs/images/screen09_page_type_selection.png
deleted file mode 100644
index 23152c3a9..000000000
Binary files a/docs/images/screen09_page_type_selection.png and /dev/null differ
diff --git a/docs/images/screen10_blank_page_edit_screen.png b/docs/images/screen10_blank_page_edit_screen.png
deleted file mode 100644
index d2b5a477c..000000000
Binary files a/docs/images/screen10_blank_page_edit_screen.png and /dev/null differ
diff --git a/docs/images/screen11_rich_text_field.png b/docs/images/screen11_rich_text_field.png
deleted file mode 100644
index a5840d01f..000000000
Binary files a/docs/images/screen11_rich_text_field.png and /dev/null differ
diff --git a/docs/images/screen12_edit_screen_overview.png b/docs/images/screen12_edit_screen_overview.png
deleted file mode 100644
index e4b55ebaf..000000000
Binary files a/docs/images/screen12_edit_screen_overview.png and /dev/null differ
diff --git a/docs/images/screen13_publish_menu.png b/docs/images/screen13_publish_menu.png
deleted file mode 100644
index 28715b5e4..000000000
Binary files a/docs/images/screen13_publish_menu.png and /dev/null differ
diff --git a/docs/images/screen14_add_carousel_button.png b/docs/images/screen14_add_carousel_button.png
deleted file mode 100644
index ab8f3df22..000000000
Binary files a/docs/images/screen14_add_carousel_button.png and /dev/null differ
diff --git a/docs/images/screen15_carousel_form.png b/docs/images/screen15_carousel_form.png
deleted file mode 100644
index c0f6070dc..000000000
Binary files a/docs/images/screen15_carousel_form.png and /dev/null differ
diff --git a/docs/images/screen16_selecting_image_from_library.png b/docs/images/screen16_selecting_image_from_library.png
deleted file mode 100644
index 2b4473c89..000000000
Binary files a/docs/images/screen16_selecting_image_from_library.png and /dev/null differ
diff --git a/docs/images/screen19_link_form.png b/docs/images/screen19_link_form.png
deleted file mode 100644
index 3e3f3aaf3..000000000
Binary files a/docs/images/screen19_link_form.png and /dev/null differ
diff --git a/docs/images/screen21_video_in_editor.png b/docs/images/screen21_video_in_editor.png
deleted file mode 100644
index d69c38d8f..000000000
Binary files a/docs/images/screen21_video_in_editor.png and /dev/null differ
diff --git a/docs/images/screen22_required_field.png b/docs/images/screen22_required_field.png
deleted file mode 100644
index 793cec8ca..000000000
Binary files a/docs/images/screen22_required_field.png and /dev/null differ
diff --git a/docs/images/screen23_validation_error.png b/docs/images/screen23_validation_error.png
deleted file mode 100644
index 0cb85223d..000000000
Binary files a/docs/images/screen23_validation_error.png and /dev/null differ
diff --git a/docs/images/screen24_multiple_items_closed.png b/docs/images/screen24_multiple_items_closed.png
deleted file mode 100644
index d2fb2f9cb..000000000
Binary files a/docs/images/screen24_multiple_items_closed.png and /dev/null differ
diff --git a/docs/images/screen25_multiple_items_open.png b/docs/images/screen25_multiple_items_open.png
deleted file mode 100644
index f586b8e39..000000000
Binary files a/docs/images/screen25_multiple_items_open.png and /dev/null differ
diff --git a/docs/images/screen26_reordering_multiple_items.png b/docs/images/screen26_reordering_multiple_items.png
deleted file mode 100644
index 61ae8a543..000000000
Binary files a/docs/images/screen26_reordering_multiple_items.png and /dev/null differ
diff --git a/docs/images/screen28_docs_form.png b/docs/images/screen28_docs_form.png
deleted file mode 100644
index c6c6693ca..000000000
Binary files a/docs/images/screen28_docs_form.png and /dev/null differ
diff --git a/docs/images/screen29_documents_page.png b/docs/images/screen29_documents_page.png
deleted file mode 100644
index 0f3d10e85..000000000
Binary files a/docs/images/screen29_documents_page.png and /dev/null differ
diff --git a/docs/images/screen30_documents_edit_page.png b/docs/images/screen30_documents_edit_page.png
deleted file mode 100644
index 1c66f1672..000000000
Binary files a/docs/images/screen30_documents_edit_page.png and /dev/null differ
diff --git a/docs/index.rst b/docs/index.rst
index 2ab429eb6..0ce7b02fa 100644
--- a/docs/index.rst
+++ b/docs/index.rst
@@ -9,23 +9,10 @@ It supports Django 1.6.2+ on Python 2.6, 2.7, 3.2, 3.3 and 3.4. Django 1.7 suppo
:maxdepth: 3
gettingstarted
- settings
- building_your_site/index
- editing_api
- snippets
- search/index
- form_builder
- model_recipes
- advanced_topics
- deploying
- performance
- private_pages
- static_site_generation
- frontend_cache_purging
- sitemap_generation
- management_commands
- contributing
+ core_components/index
+ contrib_components/index
+ howto/index
+ reference/index
support
- roadmap
editor_manual/index
releases/index
diff --git a/docs/reference/index.rst b/docs/reference/index.rst
new file mode 100644
index 000000000..c144fc6b1
--- /dev/null
+++ b/docs/reference/index.rst
@@ -0,0 +1,8 @@
+=========
+Reference
+=========
+
+.. toctree::
+ :maxdepth: 2
+
+ management_commands
diff --git a/docs/management_commands.rst b/docs/reference/management_commands.rst
similarity index 100%
rename from docs/management_commands.rst
rename to docs/reference/management_commands.rst
diff --git a/docs/releases/0.5.rst b/docs/releases/0.5.rst
index d17816cec..6f4912de5 100644
--- a/docs/releases/0.5.rst
+++ b/docs/releases/0.5.rst
@@ -1,14 +1,57 @@
-==========================================
-Wagtail 0.5 release notes - IN DEVELOPMENT
-==========================================
+=========================
+Wagtail 0.5 release notes
+=========================
.. contents::
:local:
:depth: 1
-Whats new
-=========
+What's new
+==========
+
+Multiple image uploader
+~~~~~~~~~~~~~~~~~~~~~~~
+
+The image uploader UI has been improved to allow multiple images to be uploaded at once.
+
+
+Image feature detection
+~~~~~~~~~~~~~~~~~~~~~~~
+
+Wagtail can now apply face and feature detection on images using `OpenCV `_, and use this to intelligently crop images.
+
+:ref:`image_feature_detection`
+
+
+Using images outside Wagtail
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+In normal use, Wagtail will generate resized versions of images at the point that they are referenced on a template, which means that those images are not easily accessible for use outside of Wagtail, such as displaying them on external sites. Wagtail now provides a way to obtain URLs to your images, at any size.
+
+:ref:`using_images_outside_wagtail`
+
+
+RoutablePage
+~~~~~~~~~~~~
+
+A ``RoutablePage`` model has been added to allow embedding Django-style URL routing within a page.
+
+:ref:`routable_page_mixin`
+
+
+Usage stats for images, documents and snippets
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+It's now easier to find where a particular image, document or snippet is being used on your site.
+
+Set the ``WAGTAIL_USAGE_COUNT_ENABLED`` setting to ``True`` and an icon will appear on the edit page showing you which pages they have been used on.
+
+
+Copy Page action
+~~~~~~~~~~~~~~~~
+
+The explorer interface now offers the ability to copy pages, with or without subpages.
Minor features
@@ -27,14 +70,63 @@ Core
MenuItem('Kittens!', '/kittens/', classnames='icon icon-folder-inverse', order=1000)
)
+ * The lxml library (used for whitelisting and rewriting of rich text fields) has been replaced with the pure-python html5lib library, to simplify installation.
+ * A ``page_unpublished`` signal has been added.
+
+
+Admin
+-----
+
+ * Explorer nav now rendered separately and fetched with AJAX when needed.
+
+ This improves the general performance of the admin interface for large sites.
+
Bug fixes
~~~~~~~~~
-
-Backwards incompatible changes
-==============================
+ * Updates to tag fields are now properly committed to the database when publishing directly from the page edit interface.
-Deprecated features
-===================
+Upgrade considerations
+======================
+
+Urlconf entries for ``/admin/images/``, ``/admin/embeds/`` etc need to be removed
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+If you created a Wagtail project prior to the release of Wagtail 0.3, it is likely to contain the following entries in its ``urls.py``:
+
+ .. code-block:: python
+
+ # TODO: some way of getting wagtailimages to register itself within wagtailadmin so that we
+ # don't have to define it separately here
+ url(r'^admin/images/', include(wagtailimages_urls)),
+ url(r'^admin/embeds/', include(wagtailembeds_urls)),
+ url(r'^admin/documents/', include(wagtaildocs_admin_urls)),
+ url(r'^admin/snippets/', include(wagtailsnippets_urls)),
+ url(r'^admin/search/', include(wagtailsearch_admin_urls)),
+ url(r'^admin/users/', include(wagtailusers_urls)),
+ url(r'^admin/redirects/', include(wagtailredirects_urls)),
+
+
+These entries (and the corresponding ``from wagtail.wagtail* import ...`` lines) need to be removed from ``urls.py``. (The entry for ``/admin/`` should be left in, however.)
+
+Since Wagtail 0.3, the wagtailadmin module automatically takes care of registering these URL subpaths, so these entries are redundant, and these urlconf modules are not guaranteed to remain stable and backwards-compatible in future. Leaving these entries in place will now cause an ``ImproperlyConfigured`` exception to be thrown.
+
+
+New fields on Image and Rendition models
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+Several new fields have been added to the Image and Rendition models to support :ref:`image_feature_detection`. These will be added to the database when you run ``./manage.py migrate``. If you have defined a custom image model (by extending the ``wagtailimages.AbstractImage`` and ``wagtailimages.AbstractRendition`` classes and specifying ``WAGTAILIMAGES_IMAGE_MODEL`` in settings), the change needs to be applied to that model's database table too. Running the command::
+
+ ./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.
diff --git a/docs/releases/0.6.rst b/docs/releases/0.6.rst
new file mode 100644
index 000000000..321c43730
--- /dev/null
+++ b/docs/releases/0.6.rst
@@ -0,0 +1,24 @@
+==========================================
+Wagtail 0.6 release notes - IN DEVELOPMENT
+==========================================
+
+.. contents::
+ :local:
+ :depth: 1
+
+
+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
+~~~~~~~~~
+
+ * 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 039b5d60e..a9760c239 100644
--- a/docs/releases/index.rst
+++ b/docs/releases/index.rst
@@ -4,6 +4,8 @@ Release notes
.. toctree::
:maxdepth: 1
+ roadmap
+ 0.6
0.5
0.4.1
0.4
diff --git a/docs/roadmap.rst b/docs/releases/roadmap.rst
similarity index 100%
rename from docs/roadmap.rst
rename to docs/releases/roadmap.rst
diff --git a/requirements-dev.txt b/requirements-dev.txt
index b69c5d4e0..6bc561b0c 100644
--- a/requirements-dev.txt
+++ b/requirements-dev.txt
@@ -2,3 +2,4 @@
coverage==3.7.1
flake8==2.2.1
mock==1.0.1
+python-dateutil==2.2
diff --git a/runtests.py b/runtests.py
index ed8f99d45..3a7399233 100755
--- a/runtests.py
+++ b/runtests.py
@@ -3,7 +3,6 @@ import sys
import os
import shutil
-from django.conf import settings
from django.core.management import execute_from_command_line
from wagtail.tests.settings import STATIC_ROOT, MEDIA_ROOT
diff --git a/scripts/install/debian.sh b/scripts/install/debian.sh
index 63830dc15..9c16894bf 100644
--- a/scripts/install/debian.sh
+++ b/scripts/install/debian.sh
@@ -36,7 +36,7 @@ SERVER_IP=`ifconfig eth0 |grep "inet addr" | cut -d: -f2 | cut -d" " -f1`
aptitude update
aptitude -y install git python-pip nginx postgresql redis-server
-aptitude -y install postgresql-server-dev-all python-dev libxml2-dev libxslt-dev libjpeg62-dev
+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
service postgresql reload
@@ -111,7 +111,7 @@ EOF
mkdir -p /etc/uwsgi/vassals/
ln -s $PROJECT_ROOT/$PROJECT/uwsgi_conf.ini /etc/uwsgi/vassals/
-curl -o /etc/init.d/uwsgi https://raw.github.com/torchbox/wagtail/master/scripts/install/uwsgi-init.d
+curl -o /etc/init.d/uwsgi https://raw.githubusercontent.com/torchbox/wagtail/master/scripts/install/uwsgi-init.d
mkdir /var/log/uwsgi
chmod 755 /etc/init.d/uwsgi
update-rc.d uwsgi defaults
diff --git a/scripts/install/ubuntu.sh b/scripts/install/ubuntu.sh
index 303fe0355..45adaa5f2 100644
--- a/scripts/install/ubuntu.sh
+++ b/scripts/install/ubuntu.sh
@@ -34,7 +34,7 @@ SERVER_IP=`ifconfig eth0 |grep "inet addr" | cut -d: -f2 | cut -d" " -f1`
aptitude update
aptitude -y install git python-pip nginx postgresql redis-server
-aptitude -y install postgresql-server-dev-all python-dev libxml2-dev libxslt-dev libjpeg62-dev
+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
service postgresql reload
diff --git a/setup.py b/setup.py
index 129a48468..4d22021ed 100644
--- a/setup.py
+++ b/setup.py
@@ -24,15 +24,15 @@ PY3 = sys.version_info[0] == 3
install_requires = [
"Django>=1.6.2,<1.7",
- "South>=0.8.4",
+ "South==1.0.0",
"django-compressor>=1.4",
"django-libsass>=0.2",
"django-modelcluster>=0.3",
- "django-taggit==0.11.2",
+ "django-taggit==0.12.0",
"django-treebeard==2.0",
"Pillow>=2.3.0",
"beautifulsoup4>=4.3.2",
- "lxml>=3.3.0",
+ "html5lib==0.999",
"Unidecode>=0.04.14",
"six==1.7.3",
'requests==2.3.0',
@@ -47,7 +47,7 @@ if not PY3:
setup(
name='wagtail',
- version='0.4',
+ version='0.5',
description='A Django content management system focused on flexibility and user experience',
author='Matthew Westcott',
author_email='matthew.westcott@torchbox.com',
diff --git a/tox.ini b/tox.ini
index 2b17c65ba..5e68ac99a 100644
--- a/tox.ini
+++ b/tox.ini
@@ -3,6 +3,7 @@ dj16=
Django>=1.6,<1.7
elasticsearch==1.1.0
mock==1.0.1
+ python-dateutil==2.2
[tox]
envlist =
diff --git a/wagtail/contrib/wagtailfrontendcache/signal_handlers.py b/wagtail/contrib/wagtailfrontendcache/signal_handlers.py
index 0fc92d46e..29a153896 100644
--- a/wagtail/contrib/wagtailfrontendcache/signal_handlers.py
+++ b/wagtail/contrib/wagtailfrontendcache/signal_handlers.py
@@ -1,8 +1,7 @@
from django.db import models
-from django.db.models.signals import post_delete
from wagtail.wagtailcore.models import Page
-from wagtail.wagtailcore.signals import page_published
+from wagtail.wagtailcore.signals import page_published, page_unpublished
from wagtail.contrib.wagtailfrontendcache.utils import purge_page_from_cache
@@ -11,7 +10,7 @@ def page_published_signal_handler(instance, **kwargs):
purge_page_from_cache(instance)
-def post_delete_signal_handler(instance, **kwargs):
+def page_unpublished_signal_handler(instance, **kwargs):
purge_page_from_cache(instance)
@@ -22,4 +21,4 @@ def register_signal_handlers():
# Loop through list and register signal handlers for each one
for model in indexed_models:
page_published.connect(page_published_signal_handler, sender=model)
- post_delete.connect(post_delete_signal_handler, sender=model)
+ page_unpublished.connect(page_unpublished_signal_handler, sender=model)
diff --git a/wagtail/wagtailadmin/migrations/__init__.py b/wagtail/contrib/wagtailroutablepage/__init__.py
similarity index 100%
rename from wagtail/wagtailadmin/migrations/__init__.py
rename to wagtail/contrib/wagtailroutablepage/__init__.py
diff --git a/wagtail/contrib/wagtailroutablepage/models.py b/wagtail/contrib/wagtailroutablepage/models.py
new file mode 100644
index 000000000..88379b37a
--- /dev/null
+++ b/wagtail/contrib/wagtailroutablepage/models.py
@@ -0,0 +1,82 @@
+from six import string_types
+
+from django.http import Http404
+from django.core.urlresolvers import get_resolver
+from django.core.exceptions import ImproperlyConfigured
+
+from wagtail.wagtailcore.models import Page
+from wagtail.wagtailcore.url_routing import RouteResult
+
+
+class RoutablePageMixin(object):
+ """
+ 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
+
+ def reverse_subpage(self, name, args=None, kwargs=None):
+ """
+ This method does the same job as Djangos' built in "urlresolvers.reverse()" function for subpage urlconfs.
+ """
+ args = args or []
+ kwargs = kwargs or {}
+
+ if self.subpage_urls is None:
+ raise ImproperlyConfigured("You must set 'subpage_urls' on " + type(self).__name__)
+
+ resolver = get_resolver(self.subpage_urls)
+ return resolver.reverse(name, *args, **kwargs)
+
+ def resolve_subpage(self, path):
+ """
+ This finds a view method/function from a URL path.
+ """
+ if self.subpage_urls is None:
+ raise ImproperlyConfigured("You must set 'subpage_urls' on " + type(self).__name__)
+
+ resolver = get_resolver(self.subpage_urls)
+ view, args, kwargs = resolver.resolve(path)
+
+ # If view is a string, find it as an attribute of self
+ if isinstance(view, string_types):
+ view = getattr(self, view)
+
+ return view, args, kwargs
+
+ def route(self, request, path_components):
+ """
+ This hooks the subpage urls into Wagtails routing.
+ """
+ if self.live:
+ try:
+ path = '/'
+ if path_components:
+ path += '/'.join(path_components) + '/'
+
+ view, args, kwargs = self.resolve_subpage(path)
+ return RouteResult(self, args=(view, args, kwargs))
+ except Http404:
+ pass
+
+ return super(RoutablePageMixin, self).route(request, path_components)
+
+ def serve(self, request, view, args, kwargs):
+ return view(request, *args, **kwargs)
+
+ def serve_preview(self, request, mode_name):
+ 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:
+ abstract = True
diff --git a/wagtail/wagtailcore/migrations/__init__.py b/wagtail/contrib/wagtailroutablepage/templatetags/__init__.py
similarity index 100%
rename from wagtail/wagtailcore/migrations/__init__.py
rename to wagtail/contrib/wagtailroutablepage/templatetags/__init__.py
diff --git a/wagtail/contrib/wagtailroutablepage/templatetags/wagtailroutablepage_tags.py b/wagtail/contrib/wagtailroutablepage/templatetags/wagtailroutablepage_tags.py
new file mode 100644
index 000000000..6af38c245
--- /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
new file mode 100644
index 000000000..1aa8f53d1
--- /dev/null
+++ b/wagtail/contrib/wagtailroutablepage/tests.py
@@ -0,0 +1,115 @@
+from django.test import TestCase, RequestFactory
+
+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):
+ def setUp(self):
+ self.home_page = Page.objects.get(id=2)
+ self.routable_page = self.home_page.add_child(instance=RoutablePageTest(
+ title="Routable Page",
+ slug='routable-page',
+ live=True,
+ ))
+
+ def test_resolve_main_view(self):
+ view, args, kwargs = self.routable_page.resolve_subpage('/')
+
+ self.assertEqual(view, self.routable_page.main)
+ self.assertEqual(args, ())
+ self.assertEqual(kwargs, {})
+
+ def test_resolve_archive_by_year_view(self):
+ view, args, kwargs = self.routable_page.resolve_subpage('/archive/year/2014/')
+
+ self.assertEqual(view, self.routable_page.archive_by_year)
+ self.assertEqual(args, ('2014', ))
+ self.assertEqual(kwargs, {})
+
+ def test_resolve_archive_by_author_view(self):
+ view, args, kwargs = self.routable_page.resolve_subpage('/archive/author/joe-bloggs/')
+
+ self.assertEqual(view, self.routable_page.archive_by_author)
+ self.assertEqual(args, ())
+ self.assertEqual(kwargs, {'author_slug': 'joe-bloggs'})
+
+ def test_resolve_external_view(self):
+ view, args, kwargs = self.routable_page.resolve_subpage('/external/joe-bloggs/')
+
+ self.assertEqual(view, routable_page_external_view)
+ self.assertEqual(args, ('joe-bloggs', ))
+ self.assertEqual(kwargs, {})
+
+ def test_reverse_main_view(self):
+ url = self.routable_page.reverse_subpage('main')
+
+ self.assertEqual(url, '')
+
+ def test_reverse_archive_by_year_view(self):
+ url = self.routable_page.reverse_subpage('archive_by_year', args=('2014', ))
+
+ self.assertEqual(url, 'archive/year/2014/')
+
+ def test_reverse_archive_by_author_view(self):
+ url = self.routable_page.reverse_subpage('archive_by_author', kwargs={'author_slug': 'joe-bloggs'})
+
+ self.assertEqual(url, 'archive/author/joe-bloggs/')
+
+ def test_reverse_external_view(self):
+ url = self.routable_page.reverse_subpage('external_view', args=('joe-bloggs', ))
+
+ self.assertEqual(url, 'external/joe-bloggs/')
+
+ def test_get_main_view(self):
+ response = self.client.get(self.routable_page.url)
+
+ self.assertContains(response, "MAIN VIEW")
+
+ def test_get_archive_by_year_view(self):
+ response = self.client.get(self.routable_page.url + 'archive/year/2014/')
+
+ self.assertContains(response, "ARCHIVE BY YEAR: 2014")
+
+ def test_get_archive_by_author_view(self):
+ response = self.client.get(self.routable_page.url + 'archive/author/joe-bloggs/')
+
+ self.assertContains(response, "ARCHIVE BY AUTHOR: joe-bloggs")
+
+ def test_get_external_view(self):
+ 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/')
diff --git a/wagtail/contrib/wagtailstyleguide/locale/en/LC_MESSAGES/django.po b/wagtail/contrib/wagtailstyleguide/locale/en/LC_MESSAGES/django.po
index 9e52f6985..661d514a3 100644
--- a/wagtail/contrib/wagtailstyleguide/locale/en/LC_MESSAGES/django.po
+++ b/wagtail/contrib/wagtailstyleguide/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-07-11 10:57+0000\n"
+"POT-Creation-Date: 2014-08-01 16:40+0100\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME \n"
"Language-Team: LANGUAGE \n"
@@ -33,15 +33,15 @@ msgstr ""
msgid "Error message"
msgstr ""
-#: wagtail_hooks.py:20 templates/wagtailstyleguide/base.html:12
-#: templates/wagtailstyleguide/base.html:16
+#: wagtail_hooks.py:21 templates/wagtailstyleguide/base.html:10
+#: templates/wagtailstyleguide/base.html:14
msgid "Styleguide"
msgstr ""
-#: templates/wagtailstyleguide/base.html:282
+#: templates/wagtailstyleguide/base.html:354
msgid "Save"
msgstr ""
-#: templates/wagtailstyleguide/base.html:282
+#: templates/wagtailstyleguide/base.html:354
msgid "Delete image"
msgstr ""
diff --git a/wagtail/wagtailadmin/static/wagtailadmin/scss/layouts/styleguide.scss b/wagtail/contrib/wagtailstyleguide/static/wagtailstyleguide/scss/styleguide.scss
similarity index 90%
rename from wagtail/wagtailadmin/static/wagtailadmin/scss/layouts/styleguide.scss
rename to wagtail/contrib/wagtailstyleguide/static/wagtailstyleguide/scss/styleguide.scss
index 09cb627ed..8eedb1d44 100644
--- a/wagtail/wagtailadmin/static/wagtailadmin/scss/layouts/styleguide.scss
+++ b/wagtail/contrib/wagtailstyleguide/static/wagtailstyleguide/scss/styleguide.scss
@@ -1,6 +1,6 @@
-@import "../variables.scss";
-@import "../mixins.scss";
-@import "../grid.scss";
+@import "wagtailadmin/scss/variables.scss";
+@import "wagtailadmin/scss/mixins.scss";
+@import "wagtailadmin/scss/grid.scss";
section{
border-top:1px solid $color-grey-3;
@@ -50,6 +50,9 @@ section{
.color-green{
background-color:$color-green;
}
+ .color-blue{
+ background-color:$color-blue;
+ }
.color-grey-1{
background-color:$color-grey-1;
}
diff --git a/wagtail/contrib/wagtailstyleguide/templates/wagtailstyleguide/base.html b/wagtail/contrib/wagtailstyleguide/templates/wagtailstyleguide/base.html
index bc3036d65..a9d265117 100644
--- a/wagtail/contrib/wagtailstyleguide/templates/wagtailstyleguide/base.html
+++ b/wagtail/contrib/wagtailstyleguide/templates/wagtailstyleguide/base.html
@@ -1,11 +1,9 @@
{% extends "wagtailadmin/base.html" %}
-{% load wagtailadmin_tags %}
-{% load compress i18n %}
-{% load gravatar %}
+{% load wagtailadmin_tags compress i18n static gravatar %}
{% block extra_css %}
{% compress css %}
-
+
{% endcompress %}
{% endblock %}
@@ -22,7 +20,9 @@
Help text is not to be confused with the messages that appear in a banner drop down from the top of the screen. Help text are permanent instructions, visible on every page view, that explain or warn about something.
+
+
+
This is help text that might be just for information, explaining what happens next, or drawing the user's attention to something they're about to do
+
It could be multiple lines
+
+
+
+ A warning message might be output in cases where a user's action could have serious consequences
+
+
+
+ A critical message would probably be rare, in cases where a particularly brittle or dangerously destructive action could be performed and needs to be warned about.
+
+ {% include "wagtailadmin/shared/pagination_nav.html" with items=fake_pagination linkurl="wagtailadmin_explore" %}
+
+
Buttons
@@ -345,6 +418,13 @@
Primary tag
Secondary tag
+
+
Loading mask
+
Add the following div around any items you wish to display with a spinner overlay and fading out
+
Remove the "loading" class to disable the effect
+
+
+
@@ -420,6 +500,15 @@
+
+
+
IE9 debugging
+
+
Internet Explorer 9 has two critical limitations in its CSS support: a maximum of 31 stylesheets per page and a maximum of 4096 selectors per stylesheet. The latter is particularly problematic when CSS is concatenated.
+
+
+
+
{% endblock %}
@@ -427,7 +516,29 @@
{% block extra_js %}
{% endblock %}
\ No newline at end of file
diff --git a/wagtail/contrib/wagtailstyleguide/views.py b/wagtail/contrib/wagtailstyleguide/views.py
index 9683289d2..927a17442 100644
--- a/wagtail/contrib/wagtailstyleguide/views.py
+++ b/wagtail/contrib/wagtailstyleguide/views.py
@@ -32,7 +32,20 @@ def index(request):
messages.warning(request, _("Warning message"))
messages.error(request, _("Error message"))
+ fake_pagination = {
+ 'number': 1,
+ 'previous_page_number': 1,
+ 'next_page_number': 2,
+ 'has_previous': True,
+ 'has_next': True,
+ 'paginator': {
+ 'num_pages': 10,
+ },
+ }
+
+
return render(request, 'wagtailstyleguide/base.html', {
'search_form': form,
'example_form': example_form,
+ 'fake_pagination': fake_pagination,
})
diff --git a/wagtail/tests/fixtures/test.json b/wagtail/tests/fixtures/test.json
index f31610279..00e621f48 100644
--- a/wagtail/tests/fixtures/test.json
+++ b/wagtail/tests/fixtures/test.json
@@ -438,7 +438,7 @@
{
"pk": 1,
- "model": "auth.user",
+ "model": "tests.customuser",
"fields": {
"username": "superuser",
"first_name": "",
@@ -455,7 +455,7 @@
},
{
"pk": 2,
- "model": "auth.user",
+ "model": "tests.customuser",
"fields": {
"username": "eventeditor",
"first_name": "",
@@ -473,7 +473,7 @@
},
{
"pk": 3,
- "model": "auth.user",
+ "model": "tests.customuser",
"fields": {
"username": "eventmoderator",
"first_name": "",
@@ -491,7 +491,7 @@
},
{
"pk": 4,
- "model": "auth.user",
+ "model": "tests.customuser",
"fields": {
"username": "inactiveuser",
"first_name": "",
@@ -509,7 +509,7 @@
},
{
"pk": 5,
- "model": "auth.user",
+ "model": "tests.customuser",
"fields": {
"username": "siteeditor",
"first_name": "",
@@ -527,7 +527,7 @@
},
{
"pk": 6,
- "model": "auth.user",
+ "model": "tests.customuser",
"fields": {
"username": "admin_only_user",
"first_name": "",
@@ -562,6 +562,14 @@
"submit_time": "2014-01-01T12:00:00.000Z"
}
},
+{
+ "pk": 1,
+ "model": "tests.AdvertPlacement",
+ "fields": {
+ "page": 2,
+ "advert": 1
+ }
+},
{
"pk": 1,
"model": "tests.advert",
@@ -578,17 +586,6 @@
"created_at": "2014-01-01T12:00:00.000Z"
}
},
-{
- "pk": 1,
- "model": "wagtailimages.Image",
- "fields": {
- "title": "test image",
- "created_at": "2014-01-01T12:00:00.000Z",
- "width": 0,
- "height": 0
- }
-},
-
{
"pk": 1,
"model": "wagtailcore.pageviewrestriction",
diff --git a/wagtail/tests/models.py b/wagtail/tests/models.py
index 2f151c465..a38d889bd 100644
--- a/wagtail/tests/models.py
+++ b/wagtail/tests/models.py
@@ -1,8 +1,14 @@
from django.db import models
from django.core.paginator import Paginator, EmptyPage, PageNotAnInteger
+from django.contrib.auth.models import AbstractBaseUser, PermissionsMixin, BaseUserManager
from django.utils.encoding import python_2_unicode_compatible
+from django.conf.urls import url
+from django.http import HttpResponse
+
+from taggit.models import TaggedItemBase
from modelcluster.fields import ParentalKey
+from modelcluster.tags import ClusterTaggableManager
from wagtail.wagtailcore.models import Page, Orderable
from wagtail.wagtailcore.fields import RichTextField
@@ -12,6 +18,7 @@ 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.contrib.wagtailroutablepage.models import RoutablePage
EVENT_AUDIENCE_CHOICES = (
@@ -28,6 +35,50 @@ COMMON_PANELS = (
)
+class CustomUserManager(BaseUserManager):
+ def _create_user(self, username, email, password,
+ is_staff, is_superuser, **extra_fields):
+ """
+ Creates and saves a User with the given username, email and password.
+ """
+ if not username:
+ raise ValueError('The given username must be set')
+ email = self.normalize_email(email)
+ user = self.model(username=username, email=email,
+ is_staff=is_staff, is_active=True,
+ is_superuser=is_superuser, **extra_fields)
+ user.set_password(password)
+ user.save(using=self._db)
+ return user
+
+ def create_user(self, username, email=None, password=None, **extra_fields):
+ return self._create_user(username, email, password, False, False,
+ **extra_fields)
+
+ def create_superuser(self, username, email, password, **extra_fields):
+ return self._create_user(username, email, password, True, True,
+ **extra_fields)
+
+
+class CustomUser(AbstractBaseUser, PermissionsMixin):
+ username = models.CharField(max_length=100, unique=True)
+ 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)
+
+ USERNAME_FIELD = 'username'
+
+ objects = CustomUserManager()
+
+ def get_full_name(self):
+ return self.first_name + ' ' + self.last_name
+
+ def get_short_name(self):
+ return self.first_name
+
+
# Link fields
class LinkFields(models.Model):
@@ -274,9 +325,11 @@ FormPage.content_panels = [
]
-# Snippets
# Snippets
+class AdvertPlacement(models.Model):
+ page = ParentalKey('wagtailcore.Page', related_name='advert_placements')
+ advert = models.ForeignKey('tests.Advert', related_name='+')
@python_2_unicode_compatible
class Advert(models.Model):
@@ -383,9 +436,39 @@ class SearchTestOldConfig(models.Model, indexed.Indexed):
},
}
+
class SearchTestOldConfigList(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.
"""
indexed_fields = ['title', 'content']
+
+
+def routable_page_external_view(request, arg):
+ return HttpResponse("EXTERNAL VIEW: " + arg)
+
+class RoutablePageTest(RoutablePage):
+ subpage_urls = (
+ url(r'^$', 'main', name='main'),
+ url(r'^archive/year/(\d+)/$', 'archive_by_year', name='archive_by_year'),
+ url(r'^archive/author/(?P.+)/$', 'archive_by_author', name='archive_by_author'),
+ url(r'^external/(.+)/$', routable_page_external_view, name='external_view')
+ )
+
+ def archive_by_year(self, request, year):
+ return HttpResponse("ARCHIVE BY YEAR: " + str(year))
+
+ def archive_by_author(self, request, author_slug):
+ return HttpResponse("ARCHIVE BY AUTHOR: " + author_slug)
+
+ def main(self, request):
+ return HttpResponse("MAIN VIEW")
+
+
+class TaggedPageTag(TaggedItemBase):
+ content_object = ParentalKey('tests.TaggedPage', related_name='tagged_items')
+
+
+class TaggedPage(Page):
+ tags = ClusterTaggableManager(through=TaggedPageTag, blank=True)
diff --git a/wagtail/tests/non_root_urls.py b/wagtail/tests/non_root_urls.py
new file mode 100644
index 000000000..badea652a
--- /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/tests/settings.py b/wagtail/tests/settings.py
index 4623acbec..1ef1c5ab1 100644
--- a/wagtail/tests/settings.py
+++ b/wagtail/tests/settings.py
@@ -11,8 +11,9 @@ MEDIA_ROOT = os.path.join(WAGTAIL_ROOT, 'test-media')
DATABASES = {
'default': {
'ENGINE': os.environ.get('DATABASE_ENGINE', 'django.db.backends.postgresql_psycopg2'),
- 'NAME': 'wagtaildemo',
+ 'NAME': os.environ.get('DATABASE_NAME', 'wagtaildemo'),
'USER': os.environ.get('DATABASE_USER', 'postgres'),
+ 'PASSWORD': os.environ.get('DATABASE_PASS', None),
}
}
@@ -71,6 +72,7 @@ INSTALLED_APPS = [
'wagtail.wagtailforms',
'wagtail.contrib.wagtailstyleguide',
'wagtail.contrib.wagtailsitemaps',
+ 'wagtail.contrib.wagtailroutablepage',
'wagtail.tests',
]
@@ -100,6 +102,8 @@ WAGTAILSEARCH_BACKENDS = {
}
}
+AUTH_USER_MODEL = 'tests.CustomUser'
+
try:
# Only add Elasticsearch backend if the elasticsearch-py library is installed
import elasticsearch
diff --git a/wagtail/tests/urls.py b/wagtail/tests/urls.py
index c9ca98bba..7df625dcc 100644
--- a/wagtail/tests/urls.py
+++ b/wagtail/tests/urls.py
@@ -3,6 +3,7 @@ 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
from wagtail.contrib.wagtailsitemaps.views import sitemap
@@ -11,6 +12,7 @@ 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'^sitemap\.xml$', sitemap),
diff --git a/wagtail/tests/utils.py b/wagtail/tests/utils.py
index 2e95d0210..ca8bcacd4 100644
--- a/wagtail/tests/utils.py
+++ b/wagtail/tests/utils.py
@@ -1,7 +1,7 @@
from contextlib import contextmanager
import warnings
-from django.contrib.auth.models import User
+from django.contrib.auth import get_user_model
from django.utils import six
# We need to make sure that we're using the same unittest library that Django uses internally
@@ -19,7 +19,7 @@ except ImportError:
class WagtailTestUtils(object):
def login(self):
# Create a user
- user = User.objects.create_superuser(username='test', email='test@email.com', password='password')
+ user = get_user_model().objects.create_superuser(username='test', email='test@email.com', password='password')
# Login
self.client.login(username='test', password='password')
diff --git a/wagtail/wagtaildocs/migrations/__init__.py b/wagtail/utils/__init__.py
similarity index 100%
rename from wagtail/wagtaildocs/migrations/__init__.py
rename to wagtail/utils/__init__.py
diff --git a/wagtail/utils/deprecation.py b/wagtail/utils/deprecation.py
new file mode 100644
index 000000000..24dc4e589
--- /dev/null
+++ b/wagtail/utils/deprecation.py
@@ -0,0 +1,6 @@
+class RemovedInWagtail06Warning(DeprecationWarning):
+ pass
+
+
+class RemovedInWagtail07Warning(PendingDeprecationWarning):
+ pass
diff --git a/wagtail/wagtailadmin/forms.py b/wagtail/wagtailadmin/forms.py
index e9b10f63c..866ce66a1 100644
--- a/wagtail/wagtailadmin/forms.py
+++ b/wagtail/wagtailadmin/forms.py
@@ -2,7 +2,8 @@ from django import forms
from django.contrib.auth import get_user_model
from django.contrib.auth.forms import AuthenticationForm, PasswordResetForm
from django.utils.translation import ugettext as _
-from django.utils.translation import ugettext_lazy
+from django.utils.translation import ungettext, ugettext_lazy
+
class SearchForm(forms.Form):
def __init__(self, *args, **kwargs):
@@ -77,6 +78,53 @@ class PasswordResetForm(PasswordResetForm):
return cleaned_data
+class CopyForm(forms.Form):
+ def __init__(self, *args, **kwargs):
+ # CopyPage must be passed a 'page' kwarg indicating the page to be copied
+ self.page = kwargs.pop('page')
+ can_publish = kwargs.pop('can_publish')
+ super(CopyForm, self).__init__(*args, **kwargs)
+
+ self.fields['new_title'] = forms.CharField(initial=self.page.title, label=_("New title"))
+ self.fields['new_slug'] = forms.SlugField(initial=self.page.slug, label=_("New slug"))
+
+ pages_to_copy = self.page.get_descendants(inclusive=True)
+ subpage_count = pages_to_copy.count() - 1
+ if subpage_count > 0:
+ self.fields['copy_subpages'] = forms.BooleanField(
+ required=False, initial=True, label=_("Copy subpages"),
+ help_text=ungettext(
+ "This will copy %(count)s subpage.",
+ "This will copy %(count)s subpages.",
+ subpage_count) % {'count': subpage_count})
+
+ if can_publish:
+ pages_to_publish_count = pages_to_copy.live().count()
+ if pages_to_publish_count > 0:
+ # In the specific case that there are no subpages, customise the field label and help text
+ if subpage_count == 0:
+ label = _("Publish copied page")
+ help_text = _("This page is live. Would you like to publish its copy as well?")
+ else:
+ label = _("Publish copies")
+ help_text = ungettext(
+ "%(count)s of the pages being copied is live. Would you like to publish its copy?",
+ "%(count)s of the pages being copied are live. Would you like to publish their copies?",
+ pages_to_publish_count) % {'count': pages_to_publish_count}
+
+ self.fields['publish_copies'] = forms.BooleanField(
+ required=False, initial=True, label=label, help_text=help_text
+ )
+
+ def clean_new_slug(self):
+ # Make sure the slug isn't already in use
+ slug = self.cleaned_data['new_slug']
+
+ if self.page.get_siblings(inclusive=True).filter(slug=slug).count():
+ raise forms.ValidationError(_("This slug is already in use"))
+ return slug
+
+
class PageViewRestrictionForm(forms.Form):
restriction_type = forms.ChoiceField(label="Visibility", choices=[
('none', ugettext_lazy("Public")),
diff --git a/wagtail/wagtailadmin/hooks.py b/wagtail/wagtailadmin/hooks.py
index 989c43bd8..8c8a2374a 100644
--- a/wagtail/wagtailadmin/hooks.py
+++ b/wagtail/wagtailadmin/hooks.py
@@ -3,9 +3,12 @@
import warnings
+from wagtail.utils.deprecation import RemovedInWagtail06Warning
+
+
warnings.warn(
"The wagtail.wagtailadmin.hooks module has been moved. "
- "Use wagtail.wagtailcore.hooks instead.", DeprecationWarning)
+ "Use wagtail.wagtailcore.hooks instead.", RemovedInWagtail06Warning)
from wagtail.wagtailcore.hooks import register, get_hooks
diff --git a/wagtail/wagtailadmin/locale/bg/LC_MESSAGES/django.po b/wagtail/wagtailadmin/locale/bg/LC_MESSAGES/django.po
index 562920910..1a6739d18 100644
--- a/wagtail/wagtailadmin/locale/bg/LC_MESSAGES/django.po
+++ b/wagtail/wagtailadmin/locale/bg/LC_MESSAGES/django.po
@@ -1,23 +1,22 @@
# SOME DESCRIPTIVE TITLE.
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
# This file is distributed under the same license as the PACKAGE package.
-#
+#
# Translators:
-# LyuboslavPetrov , 2014
-# LyuboslavPetrov , 2014
+# Lyuboslav Petrov , 2014
+# Lyuboslav Petrov , 2014
msgid ""
msgstr ""
"Project-Id-Version: Wagtail\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2014-07-11 10:41+0000\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/"
-"language/bg/)\n"
-"Language: bg\n"
+"POT-Creation-Date: 2014-08-01 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"
"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
@@ -28,58 +27,100 @@ msgstr ""
msgid "Common page configuration"
msgstr ""
-#: forms.py:18
+#: forms.py:19
msgid "Search term"
msgstr "Фраза за търсене"
-#: forms.py:42
+#: forms.py:43
msgid "Enter your username"
msgstr ""
-#: forms.py:45
+#: forms.py:46
msgid "Enter password"
msgstr ""
-#: forms.py:50
+#: forms.py:51
msgid "Enter your email address to reset your password"
msgstr "Въведете вашият имейл адрес за да си възстановите паролата"
-#: forms.py:59
+#: forms.py:60
msgid "Please fill your email address."
msgstr "Моля въведете вашият имейл адрес."
-#: forms.py:72
+#: forms.py:73
msgid ""
"Sorry, you cannot reset your password here as your user account is managed "
"by another server."
-msgstr ""
-"Не можете да възстановите паролата си тук, понеже акаунта ви се менижира от "
-"друг сървър."
+msgstr "Не можете да възстановите паролата си тук, понеже акаунта ви се менижира от друг сървър."
-#: forms.py:75
+#: forms.py:76
msgid "This email address is not recognised."
msgstr "Този имейл не е разпознат."
-#: forms.py:82 templates/wagtailadmin/pages/_privacy_indicator.html:13
-#: templates/wagtailadmin/pages/_privacy_indicator.html:18
-#, fuzzy
-msgid "Public"
-msgstr "Публикувай"
+#: forms.py:88
+msgid "New title"
+msgstr ""
-#: forms.py:83
+#: 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] ""
+
+#: 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] ""
+
+#: forms.py:124 views/pages.py:155 views/pages.py:272
+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:91
-#, fuzzy
+#: forms.py:139
msgid "This field is required."
-msgstr "Този имейл не е разпознат."
+msgstr ""
#: templates/wagtailadmin/base.html:7 templates/wagtailadmin/home.html:4
msgid "Dashboard"
msgstr "Работно Табло"
-#: templates/wagtailadmin/base.html:31
+#: templates/wagtailadmin/base.html:27
msgid "Menu"
msgstr "Меню"
@@ -92,9 +133,7 @@ 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"
@@ -126,10 +165,7 @@ 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
@@ -156,9 +192,7 @@ 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
@@ -232,12 +266,12 @@ msgstr "Имейл линк"
#: templates/wagtailadmin/chooser/_search_form.html:7
#: templates/wagtailadmin/pages/search.html:3
#: templates/wagtailadmin/pages/search.html:16
-#: templatetags/wagtailadmin_tags.py:35
+#: templatetags/wagtailadmin_tags.py:36
msgid "Search"
msgstr "Търсене"
#: templates/wagtailadmin/chooser/_search_results.html:3
-#: templatetags/wagtailadmin_tags.py:34
+#: templatetags/wagtailadmin_tags.py:35
msgid "Explorer"
msgstr "Файлов мениджър"
@@ -251,12 +285,8 @@ 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/search.html:2
@@ -301,7 +331,7 @@ msgstr "Надолу"
#: templates/wagtailadmin/pages/confirm_delete.html:7
#: templates/wagtailadmin/pages/edit.html:45
#: templates/wagtailadmin/pages/list.html:84
-#: templates/wagtailadmin/pages/list.html:202
+#: templates/wagtailadmin/pages/list.html:205
msgid "Delete"
msgstr "Изтрий"
@@ -413,14 +443,8 @@ 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
@@ -432,12 +456,8 @@ 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
@@ -449,12 +469,8 @@ 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
@@ -513,9 +529,8 @@ msgid "This page has been made private by a parent page."
msgstr ""
#: templates/wagtailadmin/page_privacy/ancestor_privacy.html:7
-#, fuzzy
msgid "You can edit the privacy settings on:"
-msgstr "Можете да редактирате страницата тук:"
+msgstr ""
#: templates/wagtailadmin/page_privacy/set_privacy.html:6
msgid "Note: privacy changes apply to all children of this page too."
@@ -525,12 +540,9 @@ msgstr ""
#, 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"
@@ -576,26 +588,16 @@ msgid ""
" "
msgid_plural ""
"\n"
-" This will also delete %(descendant_count)s more "
-"subpages.\n"
-" "
-msgstr[0] ""
-"\n"
-" Това ще изтрие още една подстраница.\n"
-" "
-msgstr[1] ""
-"\n"
-" Това ще изтрие още %(descendant_count)s подстраници.\n"
+" This will also delete %(descendant_count)s more subpages.\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"
@@ -626,9 +628,7 @@ 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"
@@ -642,7 +642,7 @@ 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:205
+#: templates/wagtailadmin/pages/list.html:208
msgid "Unpublish"
msgstr "Отмени публикуването"
@@ -658,6 +658,20 @@ msgstr "Да, отмени публикуването"
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"
@@ -711,7 +725,7 @@ msgid "Exploring %(title)s"
msgstr "Преглед на %(title)s"
#: templates/wagtailadmin/pages/list.html:90
-#: templates/wagtailadmin/pages/list.html:208
+#: templates/wagtailadmin/pages/list.html:211
msgid "Add child page"
msgstr "Добави дъщерна страница"
@@ -732,53 +746,50 @@ msgstr "Позволете подредба на дъщерни страници
msgid "Drag"
msgstr "Плъзнете"
-#: templates/wagtailadmin/pages/list.html:234
-#: templates/wagtailadmin/pages/list.html:238
+#: templates/wagtailadmin/pages/list.html:237
+#: templates/wagtailadmin/pages/list.html:241
#, python-format
msgid "Explorer subpages of '%(title)s'"
msgstr "Мениджър подстраници на '%(title)s'"
-#: templates/wagtailadmin/pages/list.html:234
-#: templates/wagtailadmin/pages/list.html:238
-#: templates/wagtailadmin/pages/list.html:242
+#: 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:242
+#: templates/wagtailadmin/pages/list.html:245
#, python-format
-msgid "Explorer child pages of '%(title)s'"
-msgstr "Мениджър на дъщерни страници на '%(title)s'"
+msgid "Explore child pages of '%(title)s'"
+msgstr ""
-#: templates/wagtailadmin/pages/list.html:244
+#: templates/wagtailadmin/pages/list.html:247
#, python-format
msgid "Add a child page to '%(title)s'"
msgstr "Добавете дъщерна страница към '%(title)s'"
-#: templates/wagtailadmin/pages/list.html:244
+#: templates/wagtailadmin/pages/list.html:247
msgid "Add subpage"
msgstr "Добавете подстраница"
-#: templates/wagtailadmin/pages/list.html:253
+#: templates/wagtailadmin/pages/list.html:256
msgid "No pages have been created."
msgstr "Не бяха създадени никакви страници."
-#: templates/wagtailadmin/pages/list.html:253
+#: templates/wagtailadmin/pages/list.html:256
#, python-format
msgid "Why not add one?"
msgstr "Защо не добавите една?"
-#: templates/wagtailadmin/pages/list.html:260
-#, fuzzy, python-format
+#: templates/wagtailadmin/pages/list.html:263
+#, python-format
msgid ""
"\n"
" Page %(page_number)s of %(num_pages)s.\n"
" "
msgstr ""
-"\n"
-" Страница %(page_number)s от %(num_pages)s.\n"
-" "
-#: templates/wagtailadmin/pages/list.html:266
+#: 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
@@ -788,7 +799,7 @@ msgstr ""
msgid "Previous"
msgstr "Предишно"
-#: templates/wagtailadmin/pages/list.html:271
+#: 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
@@ -809,7 +820,7 @@ msgid "Select a new parent page for %(title)s"
msgstr "Изберете нова страница родител за %(title)s"
#: templates/wagtailadmin/pages/search_results.html:6
-#, fuzzy, python-format
+#, python-format
msgid ""
"\n"
" There is one matching page\n"
@@ -819,13 +830,7 @@ msgid_plural ""
" There are %(counter)s matching pages\n"
" "
msgstr[0] ""
-"\n"
-" Има едно съвпадение\n"
-" "
msgstr[1] ""
-"\n"
-" Има %(counter)s съвпадения\n"
-" "
#: templates/wagtailadmin/pages/search_results.html:16
msgid "Other searches"
@@ -850,10 +855,7 @@ 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
@@ -865,9 +867,8 @@ msgid "Enter a search term above"
msgstr "Добавете дума за търсене по-горе"
#: templates/wagtailadmin/pages/usage_results.html:24
-#, fuzzy
msgid "No pages use"
-msgstr "Страници използващи"
+msgstr ""
#: templates/wagtailadmin/shared/breadcrumb.html:6
msgid "Home"
@@ -882,9 +883,8 @@ msgid "February"
msgstr ""
#: templates/wagtailadmin/shared/datetimepicker_translations.html:8
-#, fuzzy
msgid "March"
-msgstr "Търсене"
+msgstr ""
#: templates/wagtailadmin/shared/datetimepicker_translations.html:9
msgid "April"
@@ -947,9 +947,15 @@ msgid "Fri"
msgstr ""
#: templates/wagtailadmin/shared/datetimepicker_translations.html:26
-#, fuzzy
msgid "Sat"
-msgstr "Статус"
+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] ""
#: templates/wagtailadmin/shared/main_nav.html:10
msgid "Account settings"
@@ -965,9 +971,8 @@ msgid "Page %(page_num)s of %(total_pages)s."
msgstr "Страница %(page_num)s от %(total_pages)s."
#: templates/wagtailadmin/userbar/base.html:4
-#, fuzzy
msgid "User bar"
-msgstr "Потребители"
+msgstr ""
#: templates/wagtailadmin/userbar/base.html:14
msgid "Go to Wagtail admin interface"
@@ -986,121 +991,69 @@ msgid "Your password has been changed successfully!"
msgstr "Паролата ви бе променена успешно!"
#: views/account.py:60
-#, fuzzy
msgid "Your preferences have been updated successfully!"
-msgstr "Паролата ви бе променена успешно!"
+msgstr ""
-#: views/pages.py:146 views/pages.py:263
-msgid "This slug is already in use"
-msgstr "Този слъг е вече в употреба"
-
-#: views/pages.py:160 views/pages.py:277
+#: views/pages.py:169 views/pages.py:286
msgid "Go live date/time must be before expiry date/time"
msgstr ""
-#: views/pages.py:170 views/pages.py:287
+#: views/pages.py:179 views/pages.py:296
msgid "Expiry date/time must be in the future"
msgstr ""
-#: views/pages.py:210 views/pages.py:334 views/pages.py:707
+#: views/pages.py:219 views/pages.py:351 views/pages.py:791
msgid "Page '{0}' published."
msgstr "Страница '{0}' е публикувана."
-#: views/pages.py:212 views/pages.py:336
+#: views/pages.py:221 views/pages.py:353
msgid "Page '{0}' submitted for moderation."
msgstr "Страница '{0}' е предоставена за модерация."
-#: views/pages.py:215
+#: views/pages.py:224
msgid "Page '{0}' created."
msgstr "Страница '{0}' е създадена."
-#: views/pages.py:224
-#, fuzzy
+#: views/pages.py:233
msgid "The page could not be created due to validation errors"
-msgstr "Тази страница не можеше да бъде запазена поради валидационни грешки"
+msgstr ""
-#: views/pages.py:339
+#: views/pages.py:356
msgid "Page '{0}' updated."
msgstr "Страница '{0}' обновена."
-#: views/pages.py:348
+#: views/pages.py:365
msgid "The page could not be saved due to validation errors"
msgstr "Тази страница не можеше да бъде запазена поради валидационни грешки"
-#: views/pages.py:361
+#: views/pages.py:378
msgid "This page is currently awaiting moderation"
msgstr "Тази страница очаква да бъде модерирана"
-#: views/pages.py:381
+#: views/pages.py:409
msgid "Page '{0}' deleted."
msgstr "Страница '{0}' е изтрита."
-#: views/pages.py:543
+#: views/pages.py:575
msgid "Page '{0}' unpublished."
msgstr "Страница '{0}' отменена от публикуване."
-#: views/pages.py:594
+#: views/pages.py:627
msgid "Page '{0}' moved."
msgstr "Страница '{0}' преместена."
-#: views/pages.py:701 views/pages.py:720 views/pages.py:740
+#: views/pages.py:709
+msgid "Page '{0}' and {1} subpages copied."
+msgstr ""
+
+#: views/pages.py:711
+msgid "Page '{0}' copied."
+msgstr ""
+
+#: views/pages.py:785 views/pages.py:804 views/pages.py:824
msgid "The page '{0}' is not currently awaiting moderation."
msgstr "Страница '{0}' не очаква да бъде модерирана."
-#: views/pages.py:726
+#: views/pages.py:810
msgid "Page '{0}' rejected for publication."
msgstr "Страница '{0}' отхвърлена от публикуване."
-
-#~ msgid "Please type a valid time"
-#~ msgstr "Моля въведете валидно време"
-
-#~ msgid "View draft"
-#~ msgstr "Преглед на Чернова"
-
-#~ msgid "View live"
-#~ msgstr "Преглед на живо"
-
-#~ msgid "Status:"
-#~ msgstr "Статус:"
-
-#~ msgid "Where do you want to create a %(page_type)s"
-#~ msgstr "Къде желаете да създадете %(page_type)s"
-
-#~ msgid "Where do you want to create this"
-#~ msgstr "Къде желаете да създадете това"
-
-#~ msgid "Create a new page"
-#~ msgstr "Създадете нова страница"
-
-#~ msgid ""
-#~ "Your new page will be saved in the top level of your website. "
-#~ "You can move it after saving."
-#~ msgstr ""
-#~ "Вашата нова страница ще бъде записана в най-горното ниво на вашия сайт. "
-#~ "Можете да я преместите, след като запазите."
-
-#~ msgid "More"
-#~ msgstr "Повече"
-
-#~ msgid "Redirects"
-#~ msgstr "Пренасочвания"
-
-#~ msgid "Editors Picks"
-#~ msgstr "Избрано от Редактора"
-
-#~ msgid "Snippets"
-#~ msgstr "Откъси от код"
-
-#~ msgid ""
-#~ "Sorry, you do not have access to create a page of type '{0}'."
-#~ msgstr "Нямата права за да създадете страница от тип '{0}'."
-
-#~ msgid ""
-#~ "Pages of this type can only be created as children of '{0}'. "
-#~ "This new page will be saved there."
-#~ msgstr ""
-#~ "Страници от този тип могат само да бъдат създавани като дъщерни на "
-#~ "'{0}'. Новата страница ще бъде запазена тук."
-
-#~ msgid "The page could not be created due to errors."
-#~ msgstr "Страницата не беше създадена поради грешки."
diff --git a/wagtail/wagtailadmin/locale/ca/LC_MESSAGES/django.po b/wagtail/wagtailadmin/locale/ca/LC_MESSAGES/django.po
index 6771d0d19..b24a5c00a 100644
--- a/wagtail/wagtailadmin/locale/ca/LC_MESSAGES/django.po
+++ b/wagtail/wagtailadmin/locale/ca/LC_MESSAGES/django.po
@@ -1,22 +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:
-# Lloople , 2014
+# David Llop , 2014
msgid ""
msgstr ""
"Project-Id-Version: Wagtail\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2014-07-11 10:41+0000\n"
-"PO-Revision-Date: 2014-03-14 21:58+0000\n"
-"Last-Translator: Lloople \n"
-"Language-Team: Catalan (http://www.transifex.com/projects/p/wagtail/language/"
-"ca/)\n"
-"Language: ca\n"
+"POT-Creation-Date: 2014-08-01 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"
"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
@@ -27,58 +26,100 @@ msgstr ""
msgid "Common page configuration"
msgstr "Configuració de la pàgina comú"
-#: forms.py:18
+#: forms.py:19
msgid "Search term"
msgstr "Termini de cerca"
-#: forms.py:42
+#: forms.py:43
msgid "Enter your username"
msgstr "Introdueix el teu nom d'usuari"
-#: forms.py:45
+#: forms.py:46
msgid "Enter password"
msgstr "Introdueix la contrassenya"
-#: forms.py:50
+#: forms.py:51
msgid "Enter your email address to reset your password"
msgstr "Escriu el teu correu per reiniciar la teva contrasenya"
-#: forms.py:59
+#: forms.py:60
msgid "Please fill your email address."
msgstr "Si us plau escriu el teu correu"
-#: forms.py:72
+#: forms.py:73
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:75
+#: forms.py:76
msgid "This email address is not recognised."
msgstr "No es reconeix aquesta adreça de correu"
-#: forms.py:82 templates/wagtailadmin/pages/_privacy_indicator.html:13
-#: templates/wagtailadmin/pages/_privacy_indicator.html:18
-#, fuzzy
-msgid "Public"
-msgstr "Publica"
+#: forms.py:88
+msgid "New title"
+msgstr ""
-#: forms.py:83
+#: 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] ""
+
+#: 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] ""
+
+#: forms.py:124 views/pages.py:155 views/pages.py:272
+msgid "This slug is already in use"
+msgstr "Aquest llimac ja està en ús"
+
+#: 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:91
-#, fuzzy
+#: forms.py:139
msgid "This field is required."
-msgstr "No es reconeix aquesta adreça de correu"
+msgstr ""
#: templates/wagtailadmin/base.html:7 templates/wagtailadmin/home.html:4
msgid "Dashboard"
msgstr "Tauler de control"
-#: templates/wagtailadmin/base.html:31
+#: templates/wagtailadmin/base.html:27
msgid "Menu"
msgstr "Menú"
@@ -91,9 +132,7 @@ 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"
@@ -101,9 +140,7 @@ 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"
@@ -127,10 +164,7 @@ 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
@@ -157,9 +191,7 @@ 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
@@ -233,12 +265,12 @@ 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:35
+#: templatetags/wagtailadmin_tags.py:36
msgid "Search"
msgstr "Cercar"
#: templates/wagtailadmin/chooser/_search_results.html:3
-#: templatetags/wagtailadmin_tags.py:34
+#: templatetags/wagtailadmin_tags.py:35
msgid "Explorer"
msgstr "Explorador"
@@ -252,12 +284,8 @@ msgid_plural ""
"\n"
" There are %(counter)s matches\n"
" "
-msgstr[0] ""
-"\n"
-"Hi ha un resultat"
-msgstr[1] ""
-"\n"
-"Hi han %(counter)s resultats"
+msgstr[0] "\nHi ha un resultat"
+msgstr[1] "\nHi han %(counter)s resultats"
#: templates/wagtailadmin/chooser/browse.html:2
#: templates/wagtailadmin/chooser/search.html:2
@@ -302,7 +330,7 @@ msgstr "Baixa"
#: templates/wagtailadmin/pages/confirm_delete.html:7
#: templates/wagtailadmin/pages/edit.html:45
#: templates/wagtailadmin/pages/list.html:84
-#: templates/wagtailadmin/pages/list.html:202
+#: templates/wagtailadmin/pages/list.html:205
msgid "Delete"
msgstr "Esborra"
@@ -414,12 +442,8 @@ 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
@@ -431,12 +455,8 @@ 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
@@ -448,12 +468,8 @@ 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
@@ -512,9 +528,8 @@ msgid "This page has been made private by a parent page."
msgstr ""
#: templates/wagtailadmin/page_privacy/ancestor_privacy.html:7
-#, fuzzy
msgid "You can edit the privacy settings on:"
-msgstr "Pots editar la pàgina aquí:"
+msgstr ""
#: templates/wagtailadmin/page_privacy/set_privacy.html:6
msgid "Note: privacy changes apply to all children of this page too."
@@ -524,12 +539,9 @@ msgstr ""
#, 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"
-"Previsualitzant '%(title)s, enviada per %(submitted_by)s el %(submitted_on)s."
+msgstr "\nPrevisualitzant '%(title)s, enviada per %(submitted_by)s el %(submitted_on)s."
#: templates/wagtailadmin/pages/_privacy_indicator.html:9
msgid "Privacy"
@@ -575,23 +587,16 @@ 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"
-"Això també esborrarà una subpàgina més."
-msgstr[1] ""
-"\n"
-"Això també esborrarà %(descendant_count)s subpàgines més."
+msgstr[0] "\nAixò també esborrarà una subpàgina més."
+msgstr[1] "\nAixò 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"
@@ -622,9 +627,7 @@ 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"
@@ -638,7 +641,7 @@ msgstr "Despublica %(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:205
+#: templates/wagtailadmin/pages/list.html:208
msgid "Unpublish"
msgstr "Despublica"
@@ -654,6 +657,20 @@ msgstr "Si, despublicar"
msgid "Pages using"
msgstr "Pàgines en ús"
+#: 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"
@@ -707,7 +724,7 @@ msgid "Exploring %(title)s"
msgstr "Explorant %(title)s"
#: templates/wagtailadmin/pages/list.html:90
-#: templates/wagtailadmin/pages/list.html:208
+#: templates/wagtailadmin/pages/list.html:211
msgid "Add child page"
msgstr "Afegeix una pàgina filla"
@@ -728,52 +745,50 @@ msgstr "Activa l'ordenació de les pàgines fill"
msgid "Drag"
msgstr "Agafa"
-#: templates/wagtailadmin/pages/list.html:234
-#: templates/wagtailadmin/pages/list.html:238
+#: templates/wagtailadmin/pages/list.html:237
+#: templates/wagtailadmin/pages/list.html:241
#, python-format
msgid "Explorer subpages of '%(title)s'"
msgstr "Explora les subpàgines de '%(title)s'"
-#: templates/wagtailadmin/pages/list.html:234
-#: templates/wagtailadmin/pages/list.html:238
-#: templates/wagtailadmin/pages/list.html:242
+#: templates/wagtailadmin/pages/list.html:237
+#: templates/wagtailadmin/pages/list.html:241
+#: templates/wagtailadmin/pages/list.html:245
msgid "Explore"
msgstr "Explora"
-#: templates/wagtailadmin/pages/list.html:242
+#: templates/wagtailadmin/pages/list.html:245
#, python-format
-msgid "Explorer child pages of '%(title)s'"
-msgstr "Explora les pàgines filles de '%(title)s'"
+msgid "Explore child pages of '%(title)s'"
+msgstr ""
-#: templates/wagtailadmin/pages/list.html:244
+#: templates/wagtailadmin/pages/list.html:247
#, python-format
msgid "Add a child page to '%(title)s'"
msgstr "Afegeix una pàgina filla a '%(title)s'"
-#: templates/wagtailadmin/pages/list.html:244
+#: templates/wagtailadmin/pages/list.html:247
msgid "Add subpage"
msgstr "Afegeix subpàgina"
-#: templates/wagtailadmin/pages/list.html:253
+#: templates/wagtailadmin/pages/list.html:256
msgid "No pages have been created."
msgstr "No s'han creat pàgines."
-#: templates/wagtailadmin/pages/list.html:253
+#: templates/wagtailadmin/pages/list.html:256
#, python-format
msgid "Why not add one?"
msgstr "Per què no afegeixes una?"
-#: templates/wagtailadmin/pages/list.html:260
-#, fuzzy, python-format
+#: 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."
-#: templates/wagtailadmin/pages/list.html:266
+#: 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
@@ -783,7 +798,7 @@ msgstr ""
msgid "Previous"
msgstr "Anterior"
-#: templates/wagtailadmin/pages/list.html:271
+#: 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
@@ -804,7 +819,7 @@ msgid "Select a new parent page for %(title)s"
msgstr "Selecciona una nova pàgina pare per %(title)s"
#: templates/wagtailadmin/pages/search_results.html:6
-#, fuzzy, python-format
+#, python-format
msgid ""
"\n"
" There is one matching page\n"
@@ -814,11 +829,7 @@ msgid_plural ""
" There are %(counter)s matching pages\n"
" "
msgstr[0] ""
-"\n"
-"Hi ha un resultat"
msgstr[1] ""
-"\n"
-"Hi han %(counter)s resultats"
#: templates/wagtailadmin/pages/search_results.html:16
msgid "Other searches"
@@ -843,9 +854,7 @@ msgid ""
"\n"
" Page %(page_number)s of %(num_pages)s.\n"
" "
-msgstr ""
-"\n"
-"Pàgina %(page_number)s de %(num_pages)s."
+msgstr "\nPàgina %(page_number)s de %(num_pages)s."
#: templates/wagtailadmin/pages/search_results.html:54
#, python-format
@@ -857,9 +866,8 @@ msgid "Enter a search term above"
msgstr "Introdueix un terme de cerca abaix"
#: templates/wagtailadmin/pages/usage_results.html:24
-#, fuzzy
msgid "No pages use"
-msgstr "Pàgines en ús"
+msgstr ""
#: templates/wagtailadmin/shared/breadcrumb.html:6
msgid "Home"
@@ -874,9 +882,8 @@ msgid "February"
msgstr ""
#: templates/wagtailadmin/shared/datetimepicker_translations.html:8
-#, fuzzy
msgid "March"
-msgstr "Cercar"
+msgstr ""
#: templates/wagtailadmin/shared/datetimepicker_translations.html:9
msgid "April"
@@ -939,9 +946,15 @@ msgid "Fri"
msgstr ""
#: templates/wagtailadmin/shared/datetimepicker_translations.html:26
-#, fuzzy
msgid "Sat"
-msgstr "Estat"
+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] ""
#: templates/wagtailadmin/shared/main_nav.html:10
msgid "Account settings"
@@ -957,9 +970,8 @@ 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
-#, fuzzy
msgid "User bar"
-msgstr "Usuaris"
+msgstr ""
#: templates/wagtailadmin/userbar/base.html:14
msgid "Go to Wagtail admin interface"
@@ -978,122 +990,69 @@ msgid "Your password has been changed successfully!"
msgstr "S'ha canviat la teva contrasenya!"
#: views/account.py:60
-#, fuzzy
msgid "Your preferences have been updated successfully!"
-msgstr "S'ha canviat la teva contrasenya!"
+msgstr ""
-#: views/pages.py:146 views/pages.py:263
-msgid "This slug is already in use"
-msgstr "Aquest llimac ja està en ús"
-
-#: views/pages.py:160 views/pages.py:277
+#: views/pages.py:169 views/pages.py:286
msgid "Go live date/time must be before expiry date/time"
msgstr ""
-#: views/pages.py:170 views/pages.py:287
+#: views/pages.py:179 views/pages.py:296
msgid "Expiry date/time must be in the future"
msgstr ""
-#: views/pages.py:210 views/pages.py:334 views/pages.py:707
+#: views/pages.py:219 views/pages.py:351 views/pages.py:791
msgid "Page '{0}' published."
msgstr "Pàgina '{0}' publicada."
-#: views/pages.py:212 views/pages.py:336
+#: views/pages.py:221 views/pages.py:353
msgid "Page '{0}' submitted for moderation."
msgstr "Pàgina '{0}' enviada per revisió"
-#: views/pages.py:215
+#: views/pages.py:224
msgid "Page '{0}' created."
msgstr "Pàgina '{0}' creada."
-#: views/pages.py:224
-#, fuzzy
+#: views/pages.py:233
msgid "The page could not be created due to validation errors"
-msgstr "La pàgina no s'ha pogut guardar degut a errors de validació"
+msgstr ""
-#: views/pages.py:339
+#: views/pages.py:356
msgid "Page '{0}' updated."
msgstr "Pàgina '{0}' actualitzada."
-#: views/pages.py:348
+#: views/pages.py:365
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:361
+#: views/pages.py:378
msgid "This page is currently awaiting moderation"
msgstr "Aquesta pàgina està esperant moderació"
-#: views/pages.py:381
+#: views/pages.py:409
msgid "Page '{0}' deleted."
msgstr "Pàgina '{0}' eliminada."
-#: views/pages.py:543
+#: views/pages.py:575
msgid "Page '{0}' unpublished."
msgstr "Pàgina '{0}' despublicada."
-#: views/pages.py:594
+#: views/pages.py:627
msgid "Page '{0}' moved."
msgstr "Pàgina '{0}' moguda."
-#: views/pages.py:701 views/pages.py:720 views/pages.py:740
+#: views/pages.py:709
+msgid "Page '{0}' and {1} subpages copied."
+msgstr ""
+
+#: views/pages.py:711
+msgid "Page '{0}' copied."
+msgstr ""
+
+#: views/pages.py:785 views/pages.py:804 views/pages.py:824
msgid "The page '{0}' is not currently awaiting moderation."
msgstr "La pàgina '{0}' ja no es troba esperant moderació."
-#: views/pages.py:726
+#: views/pages.py:810
msgid "Page '{0}' rejected for publication."
msgstr "La pàgina '{0}' ha estat rebutjada per publicació"
-
-#~ msgid "Please type a valid time"
-#~ msgstr "Si us plau introdueixi una hora vàlida "
-
-#~ msgid "View draft"
-#~ msgstr "Visualitza l'esborrany"
-
-#~ msgid "View live"
-#~ msgstr "Visualitza en viu"
-
-#~ msgid "Status:"
-#~ msgstr "Estat:"
-
-#~ msgid "Where do you want to create a %(page_type)s"
-#~ msgstr "On vols crear la teva pàgina %(page_type)s"
-
-#~ msgid "Where do you want to create this"
-#~ msgstr "On vols crear això"
-
-#~ msgid "Create a new page"
-#~ msgstr "Crea una nova pàgina"
-
-#~ msgid ""
-#~ "Your new page will be saved in the top level of your website. "
-#~ "You can move it after saving."
-#~ msgstr ""
-#~ "La teva pàgina nova serà desada al nivell més alt del teu web. "
-#~ "Pots moure-la desprès de desar-la."
-
-#~ msgid "More"
-#~ msgstr "Més"
-
-#~ msgid "Redirects"
-#~ msgstr "Redireccionaments"
-
-#~ msgid "Editors Picks"
-#~ msgstr "Selecció dels editors"
-
-#~ msgid "Snippets"
-#~ msgstr "Retalls"
-
-#~ msgid ""
-#~ "Sorry, you do not have access to create a page of type '{0}'."
-#~ msgstr ""
-#~ "Ho sentim, no tens permisos per crear una pàgina del tipus '{0}'"
-
-#~ msgid ""
-#~ "Pages of this type can only be created as children of '{0}'. "
-#~ "This new page will be saved there."
-#~ msgstr ""
-#~ "Pàgines d'aquest tipus només poden ser creades com a filles de '{0}'"
-#~ "em>. La nova pàgina es guardarà allà"
-
-#~ msgid "The page could not be created due to errors."
-#~ msgstr "La pàgina no es pot crear degut a errors."
diff --git a/wagtail/wagtailadmin/locale/de/LC_MESSAGES/django.po b/wagtail/wagtailadmin/locale/de/LC_MESSAGES/django.po
index 531249833..589af7b7f 100644
--- a/wagtail/wagtailadmin/locale/de/LC_MESSAGES/django.po
+++ b/wagtail/wagtailadmin/locale/de/LC_MESSAGES/django.po
@@ -1,24 +1,23 @@
# SOME DESCRIPTIVE TITLE.
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
# This file is distributed under the same license as the PACKAGE package.
-#
+#
# Translators:
-# jspielmann , 2014
+# Johannes Spielmann , 2014
# karlsander , 2014
# pcraston , 2014
msgid ""
msgstr ""
"Project-Id-Version: Wagtail\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2014-07-11 10:41+0000\n"
-"PO-Revision-Date: 2014-03-24 19:00+0000\n"
-"Last-Translator: pcraston \n"
-"Language-Team: German (http://www.transifex.com/projects/p/wagtail/language/"
-"de/)\n"
-"Language: de\n"
+"POT-Creation-Date: 2014-08-01 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"
"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
@@ -29,58 +28,100 @@ msgstr ""
msgid "Common page configuration"
msgstr "Allgemeine Seiten Konfiguration"
-#: forms.py:18
+#: forms.py:19
msgid "Search term"
msgstr "Suchbegriff"
-#: forms.py:42
+#: forms.py:43
msgid "Enter your username"
msgstr "Bitte geben Sie Ihren Benutzernamen ein"
-#: forms.py:45
+#: forms.py:46
msgid "Enter password"
msgstr "Bitte geben Sie Ihr Passwort ein"
-#: forms.py:50
+#: forms.py:51
msgid "Enter your email address to reset your password"
msgstr "Geben Sie ihre Email Adresse ein um ihr Passwort zurückzusetzen."
-#: forms.py:59
+#: forms.py:60
msgid "Please fill your email address."
msgstr "Bitte geben Sie ihre Email Adresse ein."
-#: forms.py:72
+#: forms.py:73
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:75
+#: forms.py:76
msgid "This email address is not recognised."
msgstr "Die Email-Adresse wurde nicht erkannt."
-#: forms.py:82 templates/wagtailadmin/pages/_privacy_indicator.html:13
-#: templates/wagtailadmin/pages/_privacy_indicator.html:18
-#, fuzzy
-msgid "Public"
-msgstr "Veröffentlichen"
+#: forms.py:88
+msgid "New title"
+msgstr ""
-#: forms.py:83
+#: 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] ""
+
+#: 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] ""
+
+#: forms.py:124 views/pages.py:155 views/pages.py:272
+msgid "This slug is already in use"
+msgstr "Der Kurztitel wird bereits verwendet"
+
+#: 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:91
-#, fuzzy
+#: forms.py:139
msgid "This field is required."
-msgstr "Die Email-Adresse wurde nicht erkannt."
+msgstr ""
#: templates/wagtailadmin/base.html:7 templates/wagtailadmin/home.html:4
msgid "Dashboard"
msgstr "Dashboard"
-#: templates/wagtailadmin/base.html:31
+#: templates/wagtailadmin/base.html:27
msgid "Menu"
msgstr "Menü"
@@ -93,9 +134,7 @@ 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"
@@ -103,9 +142,7 @@ 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"
@@ -129,10 +166,7 @@ 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
@@ -159,9 +193,7 @@ 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
@@ -203,8 +235,7 @@ 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"
@@ -236,12 +267,12 @@ 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:35
+#: templatetags/wagtailadmin_tags.py:36
msgid "Search"
msgstr "Suche"
#: templates/wagtailadmin/chooser/_search_results.html:3
-#: templatetags/wagtailadmin_tags.py:34
+#: templatetags/wagtailadmin_tags.py:35
msgid "Explorer"
msgstr "Explorer"
@@ -255,12 +286,8 @@ msgid_plural ""
"\n"
" There are %(counter)s matches\n"
" "
-msgstr[0] ""
-"\n"
-"Es gibt ein Ergebnis."
-msgstr[1] ""
-"\n"
-"Es gibt %(counter)s Ergebnisse."
+msgstr[0] "\nEs gibt ein Ergebnis."
+msgstr[1] "\nEs gibt %(counter)s Ergebnisse."
#: templates/wagtailadmin/chooser/browse.html:2
#: templates/wagtailadmin/chooser/search.html:2
@@ -305,7 +332,7 @@ msgstr "Nach unten"
#: templates/wagtailadmin/pages/confirm_delete.html:7
#: templates/wagtailadmin/pages/edit.html:45
#: templates/wagtailadmin/pages/list.html:84
-#: templates/wagtailadmin/pages/list.html:202
+#: templates/wagtailadmin/pages/list.html:205
msgid "Delete"
msgstr "Löschen"
@@ -417,12 +444,8 @@ 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
@@ -434,12 +457,8 @@ 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
@@ -451,12 +470,8 @@ 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
@@ -515,9 +530,8 @@ msgid "This page has been made private by a parent page."
msgstr ""
#: templates/wagtailadmin/page_privacy/ancestor_privacy.html:7
-#, fuzzy
msgid "You can edit the privacy settings on:"
-msgstr "Sie können die Seite hier bearbeiten:"
+msgstr ""
#: templates/wagtailadmin/page_privacy/set_privacy.html:6
msgid "Note: privacy changes apply to all children of this page too."
@@ -527,13 +541,9 @@ msgstr ""
#, 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"
-"Vorschau für '%(title)s', eingereicht von %(submitted_by)s am "
-"%(submitted_on)s."
+msgstr "\nVorschau für '%(title)s', eingereicht von %(submitted_by)s am %(submitted_on)s."
#: templates/wagtailadmin/pages/_privacy_indicator.html:9
msgid "Privacy"
@@ -579,24 +589,16 @@ 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"
-"Eine weitere Unterseite wird auch gelöscht."
-msgstr[1] ""
-"\n"
-"%(descendant_count)s Unterseiten werden auch gelöscht."
+msgstr[0] "\nEine 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"
@@ -620,17 +622,14 @@ 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"
@@ -644,7 +643,7 @@ msgstr "%(title)s depublizieren"
#: templates/wagtailadmin/pages/confirm_unpublish.html:6
#: templates/wagtailadmin/pages/edit.html:42
#: templates/wagtailadmin/pages/list.html:87
-#: templates/wagtailadmin/pages/list.html:205
+#: templates/wagtailadmin/pages/list.html:208
msgid "Unpublish"
msgstr "Depublizieren"
@@ -660,6 +659,20 @@ msgstr "Ja, depublizieren"
msgid "Pages using"
msgstr "Benutzende Seiten"
+#: 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"
@@ -713,7 +726,7 @@ msgid "Exploring %(title)s"
msgstr "%(title)s durchstöbern"
#: templates/wagtailadmin/pages/list.html:90
-#: templates/wagtailadmin/pages/list.html:208
+#: templates/wagtailadmin/pages/list.html:211
msgid "Add child page"
msgstr "Untergeordnete Seite hinzufügen"
@@ -734,52 +747,50 @@ msgstr "Sortierung von untergeordneten Seiten aktivieren"
msgid "Drag"
msgstr "Ziehen"
-#: templates/wagtailadmin/pages/list.html:234
-#: templates/wagtailadmin/pages/list.html:238
+#: templates/wagtailadmin/pages/list.html:237
+#: templates/wagtailadmin/pages/list.html:241
#, python-format
msgid "Explorer subpages of '%(title)s'"
msgstr "Explorer Teilseiten von '%(title)s'"
-#: templates/wagtailadmin/pages/list.html:234
-#: templates/wagtailadmin/pages/list.html:238
-#: templates/wagtailadmin/pages/list.html:242
+#: templates/wagtailadmin/pages/list.html:237
+#: templates/wagtailadmin/pages/list.html:241
+#: templates/wagtailadmin/pages/list.html:245
msgid "Explore"
msgstr "Durchstöbern"
-#: templates/wagtailadmin/pages/list.html:242
+#: templates/wagtailadmin/pages/list.html:245
#, python-format
-msgid "Explorer child pages of '%(title)s'"
-msgstr "Explorer untergeordnete Seiten von '%(title)s'"
+msgid "Explore child pages of '%(title)s'"
+msgstr ""
-#: templates/wagtailadmin/pages/list.html:244
+#: templates/wagtailadmin/pages/list.html:247
#, python-format
msgid "Add a child page to '%(title)s'"
msgstr "Untergeordnete Seite zu '%(title)s' hinzufügen"
-#: templates/wagtailadmin/pages/list.html:244
+#: templates/wagtailadmin/pages/list.html:247
msgid "Add subpage"
msgstr "Untergeordnete Seite hinzufügen"
-#: templates/wagtailadmin/pages/list.html:253
+#: templates/wagtailadmin/pages/list.html:256
msgid "No pages have been created."
msgstr "Es wurden keine Seiten erstellt."
-#: templates/wagtailadmin/pages/list.html:253
+#: templates/wagtailadmin/pages/list.html:256
#, python-format
msgid "Why not add one?"
msgstr "Fügen Sie doch eine hinzu!"
-#: templates/wagtailadmin/pages/list.html:260
-#, fuzzy, python-format
+#: templates/wagtailadmin/pages/list.html:263
+#, python-format
msgid ""
"\n"
" Page %(page_number)s of %(num_pages)s.\n"
" "
msgstr ""
-"\n"
-"Seite %(page_number)s von %(num_pages)s."
-#: templates/wagtailadmin/pages/list.html:266
+#: 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
@@ -789,7 +800,7 @@ msgstr ""
msgid "Previous"
msgstr "Vorherige"
-#: templates/wagtailadmin/pages/list.html:271
+#: 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
@@ -810,7 +821,7 @@ msgid "Select a new parent page for %(title)s"
msgstr "Wählen Sie eine neue übergeordnete Seite für %(title)s"
#: templates/wagtailadmin/pages/search_results.html:6
-#, fuzzy, python-format
+#, python-format
msgid ""
"\n"
" There is one matching page\n"
@@ -820,11 +831,7 @@ msgid_plural ""
" There are %(counter)s matching pages\n"
" "
msgstr[0] ""
-"\n"
-"Es gibt ein Ergebnis"
msgstr[1] ""
-"\n"
-"Es gibt %(counter)s Ergebnisse"
#: templates/wagtailadmin/pages/search_results.html:16
msgid "Other searches"
@@ -849,24 +856,20 @@ msgid ""
"\n"
" Page %(page_number)s of %(num_pages)s.\n"
" "
-msgstr ""
-"\n"
-"Seite %(page_number)s von %(num_pages)s."
+msgstr "\nSeite %(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"
msgstr "Geben Sie oben einen Suchbegriff ein"
#: templates/wagtailadmin/pages/usage_results.html:24
-#, fuzzy
msgid "No pages use"
-msgstr "Benutzende Seiten"
+msgstr ""
#: templates/wagtailadmin/shared/breadcrumb.html:6
msgid "Home"
@@ -881,9 +884,8 @@ msgid "February"
msgstr ""
#: templates/wagtailadmin/shared/datetimepicker_translations.html:8
-#, fuzzy
msgid "March"
-msgstr "Suche"
+msgstr ""
#: templates/wagtailadmin/shared/datetimepicker_translations.html:9
msgid "April"
@@ -946,9 +948,15 @@ msgid "Fri"
msgstr ""
#: templates/wagtailadmin/shared/datetimepicker_translations.html:26
-#, fuzzy
msgid "Sat"
-msgstr "Status"
+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] ""
#: templates/wagtailadmin/shared/main_nav.html:10
msgid "Account settings"
@@ -964,9 +972,8 @@ msgid "Page %(page_num)s of %(total_pages)s."
msgstr "Seite %(page_num)s von %(total_pages)s."
#: templates/wagtailadmin/userbar/base.html:4
-#, fuzzy
msgid "User bar"
-msgstr "Benutzer"
+msgstr ""
#: templates/wagtailadmin/userbar/base.html:14
msgid "Go to Wagtail admin interface"
@@ -985,127 +992,69 @@ msgid "Your password has been changed successfully!"
msgstr "Ihr Passwort wurde erfolgreich geändert."
#: views/account.py:60
-#, fuzzy
msgid "Your preferences have been updated successfully!"
-msgstr "Ihr Passwort wurde erfolgreich geändert."
+msgstr ""
-#: views/pages.py:146 views/pages.py:263
-msgid "This slug is already in use"
-msgstr "Der Kurztitel wird bereits verwendet"
-
-#: views/pages.py:160 views/pages.py:277
+#: views/pages.py:169 views/pages.py:286
msgid "Go live date/time must be before expiry date/time"
msgstr ""
-#: views/pages.py:170 views/pages.py:287
+#: views/pages.py:179 views/pages.py:296
msgid "Expiry date/time must be in the future"
msgstr ""
-#: views/pages.py:210 views/pages.py:334 views/pages.py:707
+#: views/pages.py:219 views/pages.py:351 views/pages.py:791
msgid "Page '{0}' published."
msgstr "Seite '{0}' veröffentlicht."
-#: views/pages.py:212 views/pages.py:336
+#: views/pages.py:221 views/pages.py:353
msgid "Page '{0}' submitted for moderation."
msgstr "Seite '{0}' zur Freischaltung eingereicht."
-#: views/pages.py:215
+#: views/pages.py:224
msgid "Page '{0}' created."
msgstr "Seite '{0}' erstellt."
-#: views/pages.py:224
-#, fuzzy
+#: views/pages.py:233
msgid "The page could not be created due to validation errors"
msgstr ""
-"Aufgrund von Fehlern bei der Validierung konnte die Seite nicht gespeichert "
-"werden."
-#: views/pages.py:339
+#: views/pages.py:356
msgid "Page '{0}' updated."
msgstr "Seite '{0}' geändert."
-#: views/pages.py:348
+#: views/pages.py:365
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:361
+#: views/pages.py:378
msgid "This page is currently awaiting moderation"
msgstr "Diese Seite wartet derzeit auf Freischaltung"
-#: views/pages.py:381
+#: views/pages.py:409
msgid "Page '{0}' deleted."
msgstr "Seite '{0}' gelöscht."
-#: views/pages.py:543
+#: views/pages.py:575
msgid "Page '{0}' unpublished."
msgstr "Seite '{0}' depubliziert."
-#: views/pages.py:594
+#: views/pages.py:627
msgid "Page '{0}' moved."
msgstr "Seite '{0}' verschoben."
-#: views/pages.py:701 views/pages.py:720 views/pages.py:740
+#: views/pages.py:709
+msgid "Page '{0}' and {1} subpages copied."
+msgstr ""
+
+#: views/pages.py:711
+msgid "Page '{0}' copied."
+msgstr ""
+
+#: views/pages.py:785 views/pages.py:804 views/pages.py:824
msgid "The page '{0}' is not currently awaiting moderation."
msgstr "Die Seite '{0}' wartet derzeit nicht auf Freischaltung."
-#: views/pages.py:726
+#: views/pages.py:810
msgid "Page '{0}' rejected for publication."
msgstr "Die Veröffentlichung der Seite '{0}' wurde abgelehnt."
-
-#~ msgid "Please type a valid time"
-#~ msgstr "Geben Sie bitte eine gültige Zeit ein!"
-
-#~ msgid "View draft"
-#~ msgstr "Entwurf anzeigen"
-
-#~ msgid "View live"
-#~ msgstr "Live anzeigen"
-
-#~ msgid "Status:"
-#~ msgstr "Status:"
-
-#~ msgid "Where do you want to create a %(page_type)s"
-#~ msgstr "Wo wollen Sie %(page_type)s erstellen?"
-
-#~ msgid "Where do you want to create this"
-#~ msgstr "Wo wollen Sie dies erstellen"
-
-#~ msgid "Create a new page"
-#~ msgstr "Neue Seite erstellen"
-
-#~ msgid ""
-#~ "Your new page will be saved in the top level of your website. "
-#~ "You can move it after saving."
-#~ msgstr ""
-#~ "Ihre neue Seite wird auf der obersten Ebene Ihrer Website "
-#~ "erstellt. Nach dem Speichern können Sie diese verschieben."
-
-#~ msgid "More"
-#~ msgstr "Mehr"
-
-#~ msgid "Redirects"
-#~ msgstr "Weiterleitungen"
-
-#~ msgid "Editors Picks"
-#~ msgstr "Redaktionsempfehlungen"
-
-#~ msgid "Snippets"
-#~ msgstr "Snippets"
-
-#~ msgid ""
-#~ "Sorry, you do not have access to create a page of type '{0}'."
-#~ msgstr ""
-#~ "Leider haben Sie nicht die Berechtigung eine Seite vom Typ '{0}' "
-#~ "zu erstellen."
-
-#~ msgid ""
-#~ "Pages of this type can only be created as children of '{0}'. "
-#~ "This new page will be saved there."
-#~ msgstr ""
-#~ "Seiten dieses Typs können nur als untergeordnete Seiten von '{0}'"
-#~ "em> erstellt werden. Die neue Seite wird dort gespeichert."
-
-#~ msgid "The page could not be created due to errors."
-#~ msgstr "Aufgrund von Fehlern konnte die Seite nicht erstellt werden."
diff --git a/wagtail/wagtailadmin/locale/el/LC_MESSAGES/django.po b/wagtail/wagtailadmin/locale/el/LC_MESSAGES/django.po
index 926012f39..1ab108d02 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,15 +9,14 @@ msgid ""
msgstr ""
"Project-Id-Version: Wagtail\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2014-07-11 10:41+0000\n"
-"PO-Revision-Date: 2014-03-14 21:14+0000\n"
-"Last-Translator: serafeim \n"
-"Language-Team: Greek (http://www.transifex.com/projects/p/wagtail/language/"
-"el/)\n"
-"Language: el\n"
+"POT-Creation-Date: 2014-08-01 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"
"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
@@ -28,58 +27,100 @@ msgstr ""
msgid "Common page configuration"
msgstr "Κοινές ρυθμίσεις σελίδων"
-#: forms.py:18
+#: forms.py:19
msgid "Search term"
msgstr "Όρος αναζήτησης"
-#: forms.py:42
+#: forms.py:43
msgid "Enter your username"
msgstr "Εισάγετε το όνομα σας"
-#: forms.py:45
+#: forms.py:46
msgid "Enter password"
msgstr "Εισάγετε τον κωδικό σας"
-#: forms.py:50
+#: forms.py:51
msgid "Enter your email address to reset your password"
msgstr "Εισάγετε τη διεύθυνση email σας για να ανανεώσετε τον κωδικό σας"
-#: forms.py:59
+#: forms.py:60
msgid "Please fill your email address."
msgstr "Συμπληρώσατε τη διεύθυνση email σας."
-#: forms.py:72
+#: forms.py:73
msgid ""
"Sorry, you cannot reset your password here as your user account is managed "
"by another server."
-msgstr ""
-"Λυπούμαστε, δε μπορείτε να αλλάξετε τον κωδικό σας διότι το λογαριασμό "
-"χρήστη σας τον διαχειρίζεται ένας διαφορετικός εξυπηρετητής."
+msgstr "Λυπούμαστε, δε μπορείτε να αλλάξετε τον κωδικό σας διότι το λογαριασμό χρήστη σας τον διαχειρίζεται ένας διαφορετικός εξυπηρετητής."
-#: forms.py:75
+#: forms.py:76
msgid "This email address is not recognised."
msgstr "Δε βρέθηκε το email."
-#: forms.py:82 templates/wagtailadmin/pages/_privacy_indicator.html:13
-#: templates/wagtailadmin/pages/_privacy_indicator.html:18
-#, fuzzy
-msgid "Public"
-msgstr "Έκδοση"
+#: forms.py:88
+msgid "New title"
+msgstr ""
-#: forms.py:83
+#: 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] ""
+
+#: 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] ""
+
+#: forms.py:124 views/pages.py:155 views/pages.py:272
+msgid "This slug is already in use"
+msgstr "Το slug χρησιμοποιείται"
+
+#: 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:91
-#, fuzzy
+#: forms.py:139
msgid "This field is required."
-msgstr "Δε βρέθηκε το email."
+msgstr ""
#: templates/wagtailadmin/base.html:7 templates/wagtailadmin/home.html:4
msgid "Dashboard"
msgstr "Πίνακας ελέγχου"
-#: templates/wagtailadmin/base.html:31
+#: templates/wagtailadmin/base.html:27
msgid "Menu"
msgstr "Μενού"
@@ -92,9 +133,7 @@ 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"
@@ -126,10 +165,7 @@ 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
@@ -156,8 +192,7 @@ 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
@@ -203,8 +238,7 @@ 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"
@@ -232,12 +266,12 @@ 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:35
+#: templatetags/wagtailadmin_tags.py:36
msgid "Search"
msgstr "Αναζήτηση"
#: templates/wagtailadmin/chooser/_search_results.html:3
-#: templatetags/wagtailadmin_tags.py:34
+#: templatetags/wagtailadmin_tags.py:35
msgid "Explorer"
msgstr "Εξερευνητής"
@@ -251,12 +285,8 @@ 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/search.html:2
@@ -301,7 +331,7 @@ msgstr "Μετακίνηση κάτω"
#: templates/wagtailadmin/pages/confirm_delete.html:7
#: templates/wagtailadmin/pages/edit.html:45
#: templates/wagtailadmin/pages/list.html:84
-#: templates/wagtailadmin/pages/list.html:202
+#: templates/wagtailadmin/pages/list.html:205
msgid "Delete"
msgstr "Διαγραφή"
@@ -413,12 +443,8 @@ 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
@@ -430,12 +456,8 @@ 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
@@ -447,14 +469,8 @@ 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
@@ -513,9 +529,8 @@ msgid "This page has been made private by a parent page."
msgstr ""
#: templates/wagtailadmin/page_privacy/ancestor_privacy.html:7
-#, fuzzy
msgid "You can edit the privacy settings on:"
-msgstr "Μπορείτε να διορθώστε τη σελίδα εδώ:"
+msgstr ""
#: templates/wagtailadmin/page_privacy/set_privacy.html:6
msgid "Note: privacy changes apply to all children of this page too."
@@ -525,14 +540,9 @@ msgstr ""
#, python-format
msgid ""
"\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"
+" Previewing '%(title)s', submitted by %(submitted_by)s on %(submitted_on)s.\n"
" "
+msgstr "\n Προεπισκόπηση της '%(title)s', που δημιουργήθηκε από τον %(submitted_by)s στις %(submitted_on)s.\n "
#: templates/wagtailadmin/pages/_privacy_indicator.html:9
msgid "Privacy"
@@ -578,26 +588,16 @@ msgid ""
" "
msgid_plural ""
"\n"
-" This will also delete %(descendant_count)s more "
-"subpages.\n"
-" "
-msgstr[0] ""
-"\n"
-" Επίσης θα διαγραφεί και μια ακόμα σελίδα.\n"
-" "
-msgstr[1] ""
-"\n"
-" Επίσης θα διαγραφούν και %(descendant_count)s ακόμα "
-"σελίδες.\n"
+" This will also delete %(descendant_count)s more subpages.\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,9 +628,7 @@ 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"
@@ -644,7 +642,7 @@ 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:205
+#: templates/wagtailadmin/pages/list.html:208
msgid "Unpublish"
msgstr "Αποέκδοση"
@@ -660,6 +658,20 @@ msgstr "Ναι, να αποεκδοθεί"
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"
@@ -713,7 +725,7 @@ msgid "Exploring %(title)s"
msgstr "Εξερεύνηση %(title)s"
#: templates/wagtailadmin/pages/list.html:90
-#: templates/wagtailadmin/pages/list.html:208
+#: templates/wagtailadmin/pages/list.html:211
msgid "Add child page"
msgstr "Προσθήκη σελίδας-παιδί"
@@ -734,52 +746,50 @@ msgstr "Ενεργοποίηση ταξινόμησης σελίδων - παι
msgid "Drag"
msgstr "Τραβήξτε"
-#: templates/wagtailadmin/pages/list.html:234
-#: templates/wagtailadmin/pages/list.html:238
+#: templates/wagtailadmin/pages/list.html:237
+#: templates/wagtailadmin/pages/list.html:241
#, python-format
msgid "Explorer subpages of '%(title)s'"
msgstr "Εξερεύνηση υποσελίδων του '%(title)s'"
-#: templates/wagtailadmin/pages/list.html:234
-#: templates/wagtailadmin/pages/list.html:238
-#: templates/wagtailadmin/pages/list.html:242
+#: 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:242
+#: templates/wagtailadmin/pages/list.html:245
#, python-format
-msgid "Explorer child pages of '%(title)s'"
-msgstr "Εξερεύνηση σελίδων - παιδιά της '%(title)s'"
+msgid "Explore child pages of '%(title)s'"
+msgstr ""
-#: templates/wagtailadmin/pages/list.html:244
+#: templates/wagtailadmin/pages/list.html:247
#, python-format
msgid "Add a child page to '%(title)s'"
msgstr "Προσθήκη σελίδας - παιδί στην '%(title)s'"
-#: templates/wagtailadmin/pages/list.html:244
+#: templates/wagtailadmin/pages/list.html:247
msgid "Add subpage"
msgstr "Προσθήκη υποσελίδας"
-#: templates/wagtailadmin/pages/list.html:253
+#: templates/wagtailadmin/pages/list.html:256
msgid "No pages have been created."
msgstr "Δεν έχουν δημιουργηθεί σελίδες."
-#: templates/wagtailadmin/pages/list.html:253
+#: templates/wagtailadmin/pages/list.html:256
#, python-format
msgid "Why not add one?"
msgstr "Θέλετε να προσθέσετε μία;"
-#: templates/wagtailadmin/pages/list.html:260
-#, fuzzy, python-format
+#: templates/wagtailadmin/pages/list.html:263
+#, python-format
msgid ""
"\n"
" Page %(page_number)s of %(num_pages)s.\n"
" "
msgstr ""
-"\n"
-"Σελίδα %(page_number)s of %(num_pages)s."
-#: templates/wagtailadmin/pages/list.html:266
+#: 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
@@ -789,7 +799,7 @@ msgstr ""
msgid "Previous"
msgstr "Προηγούμενο"
-#: templates/wagtailadmin/pages/list.html:271
+#: 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
@@ -810,7 +820,7 @@ msgid "Select a new parent page for %(title)s"
msgstr "Επιλογή νέας πατρικής σελίδας για την %(title)s"
#: templates/wagtailadmin/pages/search_results.html:6
-#, fuzzy, python-format
+#, python-format
msgid ""
"\n"
" There is one matching page\n"
@@ -820,11 +830,7 @@ msgid_plural ""
" There are %(counter)s matching pages\n"
" "
msgstr[0] ""
-"\n"
-"Βρέθηκε ένα αποτέλεσμα"
msgstr[1] ""
-"\n"
-"Βρέθηκαν %(counter)s αποτελέσματα"
#: templates/wagtailadmin/pages/search_results.html:16
msgid "Other searches"
@@ -849,24 +855,20 @@ 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"
msgstr "Εισάγετε όρο αναζήτησης"
#: templates/wagtailadmin/pages/usage_results.html:24
-#, fuzzy
msgid "No pages use"
-msgstr "Οι σελίδες που το χρησιμοποιούν"
+msgstr ""
#: templates/wagtailadmin/shared/breadcrumb.html:6
msgid "Home"
@@ -881,9 +883,8 @@ msgid "February"
msgstr ""
#: templates/wagtailadmin/shared/datetimepicker_translations.html:8
-#, fuzzy
msgid "March"
-msgstr "Αναζήτηση"
+msgstr ""
#: templates/wagtailadmin/shared/datetimepicker_translations.html:9
msgid "April"
@@ -946,9 +947,15 @@ msgid "Fri"
msgstr ""
#: templates/wagtailadmin/shared/datetimepicker_translations.html:26
-#, fuzzy
msgid "Sat"
-msgstr "Κατάσταση"
+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] ""
#: templates/wagtailadmin/shared/main_nav.html:10
msgid "Account settings"
@@ -964,9 +971,8 @@ msgid "Page %(page_num)s of %(total_pages)s."
msgstr "Σελίδα %(page_num)s από %(total_pages)s."
#: templates/wagtailadmin/userbar/base.html:4
-#, fuzzy
msgid "User bar"
-msgstr "Χρήστες"
+msgstr ""
#: templates/wagtailadmin/userbar/base.html:14
msgid "Go to Wagtail admin interface"
@@ -985,121 +991,69 @@ msgid "Your password has been changed successfully!"
msgstr "Ο κωδικός σας αλλάχτηκε με επιτυχία!"
#: views/account.py:60
-#, fuzzy
msgid "Your preferences have been updated successfully!"
-msgstr "Ο κωδικός σας αλλάχτηκε με επιτυχία!"
+msgstr ""
-#: views/pages.py:146 views/pages.py:263
-msgid "This slug is already in use"
-msgstr "Το slug χρησιμοποιείται"
-
-#: views/pages.py:160 views/pages.py:277
+#: views/pages.py:169 views/pages.py:286
msgid "Go live date/time must be before expiry date/time"
msgstr ""
-#: views/pages.py:170 views/pages.py:287
+#: views/pages.py:179 views/pages.py:296
msgid "Expiry date/time must be in the future"
msgstr ""
-#: views/pages.py:210 views/pages.py:334 views/pages.py:707
+#: views/pages.py:219 views/pages.py:351 views/pages.py:791
msgid "Page '{0}' published."
msgstr "Η σελίδα '{0}' δημοσιεύθηκε."
-#: views/pages.py:212 views/pages.py:336
+#: views/pages.py:221 views/pages.py:353
msgid "Page '{0}' submitted for moderation."
msgstr "Η σελίδα '{0}' στάλθηκε προς έλεγχο."
-#: views/pages.py:215
+#: views/pages.py:224
msgid "Page '{0}' created."
msgstr "Η σελίδα '{0}' δημιουργήθηκε."
-#: views/pages.py:224
-#, fuzzy
+#: views/pages.py:233
msgid "The page could not be created due to validation errors"
-msgstr "Δε ήταν δυνατή η αποθήκευση της σελίδας λόγω σφαλμάτων ελέγχου"
+msgstr ""
-#: views/pages.py:339
+#: views/pages.py:356
msgid "Page '{0}' updated."
msgstr "Έγινε η αποθήκευση της σελίδας '{0}'."
-#: views/pages.py:348
+#: views/pages.py:365
msgid "The page could not be saved due to validation errors"
msgstr "Δε ήταν δυνατή η αποθήκευση της σελίδας λόγω σφαλμάτων ελέγχου"
-#: views/pages.py:361
+#: views/pages.py:378
msgid "This page is currently awaiting moderation"
msgstr "Η σελίδα δεν είναι προς έλεγχο"
-#: views/pages.py:381
+#: views/pages.py:409
msgid "Page '{0}' deleted."
msgstr "Έγινε διαγραφή της σελίδας '{0}'."
-#: views/pages.py:543
+#: views/pages.py:575
msgid "Page '{0}' unpublished."
msgstr "Έγινε αποδημοσίευση της '{0}'."
-#: views/pages.py:594
+#: views/pages.py:627
msgid "Page '{0}' moved."
msgstr "Έγινε η μετακίνηση της σελίδας '{0}'."
-#: views/pages.py:701 views/pages.py:720 views/pages.py:740
+#: views/pages.py:709
+msgid "Page '{0}' and {1} subpages copied."
+msgstr ""
+
+#: views/pages.py:711
+msgid "Page '{0}' copied."
+msgstr ""
+
+#: views/pages.py:785 views/pages.py:804 views/pages.py:824
msgid "The page '{0}' is not currently awaiting moderation."
msgstr "Η σελίδα '{0}' δεν είναι για έλεγχο."
-#: views/pages.py:726
+#: views/pages.py:810
msgid "Page '{0}' rejected for publication."
msgstr "Η δημοσίευση της σελίδας '{0}' απορρίφθηκε."
-
-#~ msgid "Please type a valid time"
-#~ msgstr "Συμπληρώσατε ώρα"
-
-#~ msgid "View draft"
-#~ msgstr "Εμφάνιση προσχεδίου"
-
-#~ msgid "View live"
-#~ msgstr "Εμφάνιση στο site"
-
-#~ msgid "Status:"
-#~ msgstr "Κατάσταση:"
-
-#~ msgid "Where do you want to create a %(page_type)s"
-#~ msgstr "Πού θέλετε να δημιουργήσετε τη σελίδα %(page_type)s"
-
-#~ msgid "Where do you want to create this"
-#~ msgstr "Πού θέλετε να δημιουργήσετε τη σελίδα"
-
-#~ msgid "Create a new page"
-#~ msgstr "Δημιουργία νέας σελίδας"
-
-#~ msgid ""
-#~ "Your new page will be saved in the top level of your website. "
-#~ "You can move it after saving."
-#~ msgstr ""
-#~ "Η νέα σας σελίδα θα αποθηκευθεί στο κορυφαίο επίπεδο του website "
-#~ "σας. Μπορείτε να τη μετακινήσετε μετά την αποθήκευση."
-
-#~ msgid "More"
-#~ msgstr "Περισσότερα"
-
-#~ msgid "Redirects"
-#~ msgstr "Ανακατεθύνσεις"
-
-#~ msgid "Editors Picks"
-#~ msgstr "Επιλογές συντακτών"
-
-#~ msgid "Snippets"
-#~ msgstr "Snippets"
-
-#~ msgid ""
-#~ "Sorry, you do not have access to create a page of type '{0}'."
-#~ msgstr "Λυπούμαστε, δεν έχετε πρόσβαση σε σελίδες τύπου '{0}'"
-
-#~ msgid ""
-#~ "Pages of this type can only be created as children of '{0}'. "
-#~ "This new page will be saved there."
-#~ msgstr ""
-#~ "Σελίδες του συγκεκριμένου τύπου μπορούν να δημιουργηθούν μόνο σαν παιδιά "
-#~ "του '{0}'. Οπότε η νέα σελίδα θα αποθηκευθεί εκεί."
-
-#~ msgid "The page could not be created due to errors."
-#~ msgstr "Δεν ήταν δυνατή η αποθήκευση της σελίδας."
diff --git a/wagtail/wagtailadmin/locale/en/LC_MESSAGES/django.po b/wagtail/wagtailadmin/locale/en/LC_MESSAGES/django.po
index 40d56ccc2..999e25a1a 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-07-11 10:41+0000\n"
+"POT-Creation-Date: 2014-08-01 16:38+0100\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME \n"
"Language-Team: LANGUAGE \n"
@@ -25,46 +25,92 @@ msgstr ""
msgid "Common page configuration"
msgstr ""
-#: forms.py:18
+#: forms.py:19
msgid "Search term"
msgstr ""
-#: forms.py:42
+#: forms.py:43
msgid "Enter your username"
msgstr ""
-#: forms.py:45
+#: forms.py:46
msgid "Enter password"
msgstr ""
-#: forms.py:50
+#: forms.py:51
msgid "Enter your email address to reset your password"
msgstr ""
-#: forms.py:59
+#: forms.py:60
msgid "Please fill your email address."
msgstr ""
-#: forms.py:72
+#: forms.py:73
msgid ""
"Sorry, you cannot reset your password here as your user account is managed "
"by another server."
msgstr ""
-#: forms.py:75
+#: forms.py:76
msgid "This email address is not recognised."
msgstr ""
-#: forms.py:82 templates/wagtailadmin/pages/_privacy_indicator.html:13
+#: 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] ""
+
+#: 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] ""
+
+#: forms.py:124 views/pages.py:155 views/pages.py:272
+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:83
+#: forms.py:131
msgid "Private, accessible with the following password"
msgstr ""
-#: forms.py:91
+#: forms.py:139
msgid "This field is required."
msgstr ""
@@ -72,7 +118,7 @@ msgstr ""
msgid "Dashboard"
msgstr ""
-#: templates/wagtailadmin/base.html:31
+#: templates/wagtailadmin/base.html:27
msgid "Menu"
msgstr ""
@@ -218,12 +264,12 @@ msgstr ""
#: templates/wagtailadmin/chooser/_search_form.html:7
#: templates/wagtailadmin/pages/search.html:3
#: templates/wagtailadmin/pages/search.html:16
-#: templatetags/wagtailadmin_tags.py:35
+#: templatetags/wagtailadmin_tags.py:36
msgid "Search"
msgstr ""
#: templates/wagtailadmin/chooser/_search_results.html:3
-#: templatetags/wagtailadmin_tags.py:34
+#: templatetags/wagtailadmin_tags.py:35
msgid "Explorer"
msgstr ""
@@ -283,7 +329,7 @@ msgstr ""
#: templates/wagtailadmin/pages/confirm_delete.html:7
#: templates/wagtailadmin/pages/edit.html:45
#: templates/wagtailadmin/pages/list.html:84
-#: templates/wagtailadmin/pages/list.html:202
+#: templates/wagtailadmin/pages/list.html:205
msgid "Delete"
msgstr ""
@@ -596,7 +642,7 @@ 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:205
+#: templates/wagtailadmin/pages/list.html:208
msgid "Unpublish"
msgstr ""
@@ -612,6 +658,20 @@ msgstr ""
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"
@@ -665,7 +725,7 @@ msgid "Exploring %(title)s"
msgstr ""
#: templates/wagtailadmin/pages/list.html:90
-#: templates/wagtailadmin/pages/list.html:208
+#: templates/wagtailadmin/pages/list.html:211
msgid "Add child page"
msgstr ""
@@ -686,42 +746,42 @@ msgstr ""
msgid "Drag"
msgstr ""
-#: templates/wagtailadmin/pages/list.html:234
-#: templates/wagtailadmin/pages/list.html:238
+#: 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:234
-#: templates/wagtailadmin/pages/list.html:238
-#: templates/wagtailadmin/pages/list.html:242
+#: 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:242
+#: templates/wagtailadmin/pages/list.html:245
#, python-format
-msgid "Explorer child pages of '%(title)s'"
+msgid "Explore child pages of '%(title)s'"
msgstr ""
-#: templates/wagtailadmin/pages/list.html:244
+#: templates/wagtailadmin/pages/list.html:247
#, python-format
msgid "Add a child page to '%(title)s'"
msgstr ""
-#: templates/wagtailadmin/pages/list.html:244
+#: templates/wagtailadmin/pages/list.html:247
msgid "Add subpage"
msgstr ""
-#: templates/wagtailadmin/pages/list.html:253
+#: templates/wagtailadmin/pages/list.html:256
msgid "No pages have been created."
msgstr ""
-#: templates/wagtailadmin/pages/list.html:253
+#: templates/wagtailadmin/pages/list.html:256
#, python-format
msgid "Why not add one?"
msgstr ""
-#: templates/wagtailadmin/pages/list.html:260
+#: templates/wagtailadmin/pages/list.html:263
#, python-format
msgid ""
"\n"
@@ -729,7 +789,7 @@ msgid ""
" "
msgstr ""
-#: templates/wagtailadmin/pages/list.html:266
+#: 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
@@ -739,7 +799,7 @@ msgstr ""
msgid "Previous"
msgstr ""
-#: templates/wagtailadmin/pages/list.html:271
+#: 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
@@ -890,6 +950,13 @@ msgstr ""
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] ""
+
#: templates/wagtailadmin/shared/main_nav.html:10
msgid "Account settings"
msgstr ""
@@ -927,62 +994,66 @@ msgstr ""
msgid "Your preferences have been updated successfully!"
msgstr ""
-#: views/pages.py:146 views/pages.py:263
-msgid "This slug is already in use"
-msgstr ""
-
-#: views/pages.py:160 views/pages.py:277
+#: views/pages.py:169 views/pages.py:286
msgid "Go live date/time must be before expiry date/time"
msgstr ""
-#: views/pages.py:170 views/pages.py:287
+#: views/pages.py:179 views/pages.py:296
msgid "Expiry date/time must be in the future"
msgstr ""
-#: views/pages.py:210 views/pages.py:334 views/pages.py:707
+#: views/pages.py:219 views/pages.py:351 views/pages.py:791
msgid "Page '{0}' published."
msgstr ""
-#: views/pages.py:212 views/pages.py:336
+#: views/pages.py:221 views/pages.py:353
msgid "Page '{0}' submitted for moderation."
msgstr ""
-#: views/pages.py:215
+#: views/pages.py:224
msgid "Page '{0}' created."
msgstr ""
-#: views/pages.py:224
+#: views/pages.py:233
msgid "The page could not be created due to validation errors"
msgstr ""
-#: views/pages.py:339
+#: views/pages.py:356
msgid "Page '{0}' updated."
msgstr ""
-#: views/pages.py:348
+#: views/pages.py:365
msgid "The page could not be saved due to validation errors"
msgstr ""
-#: views/pages.py:361
+#: views/pages.py:378
msgid "This page is currently awaiting moderation"
msgstr ""
-#: views/pages.py:381
+#: views/pages.py:409
msgid "Page '{0}' deleted."
msgstr ""
-#: views/pages.py:543
+#: views/pages.py:575
msgid "Page '{0}' unpublished."
msgstr ""
-#: views/pages.py:594
+#: views/pages.py:627
msgid "Page '{0}' moved."
msgstr ""
-#: views/pages.py:701 views/pages.py:720 views/pages.py:740
+#: views/pages.py:709
+msgid "Page '{0}' and {1} subpages copied."
+msgstr ""
+
+#: views/pages.py:711
+msgid "Page '{0}' copied."
+msgstr ""
+
+#: views/pages.py:785 views/pages.py:804 views/pages.py:824
msgid "The page '{0}' is not currently awaiting moderation."
msgstr ""
-#: views/pages.py:726
+#: views/pages.py:810
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 4507d528f..36aa5f402 100644
--- a/wagtail/wagtailadmin/locale/es/LC_MESSAGES/django.po
+++ b/wagtail/wagtailadmin/locale/es/LC_MESSAGES/django.po
@@ -1,23 +1,22 @@
# SOME DESCRIPTIVE TITLE.
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
# This file is distributed under the same license as the PACKAGE package.
-#
+#
# Translators:
# fooflare , 2014
-# unaizalakain , 2014
+# Unai Zalakain , 2014
msgid ""
msgstr ""
"Project-Id-Version: Wagtail\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2014-07-11 10:41+0000\n"
-"PO-Revision-Date: 2014-03-23 10:24+0000\n"
-"Last-Translator: fooflare \n"
-"Language-Team: Spanish (http://www.transifex.com/projects/p/wagtail/language/"
-"es/)\n"
-"Language: es\n"
+"POT-Creation-Date: 2014-08-01 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"
"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
@@ -28,58 +27,100 @@ msgstr ""
msgid "Common page configuration"
msgstr "Configuración común de página"
-#: forms.py:18
+#: forms.py:19
msgid "Search term"
msgstr "Término de búsqueda"
-#: forms.py:42
+#: forms.py:43
msgid "Enter your username"
msgstr "Introduce tu nombre de usuario"
-#: forms.py:45
+#: forms.py:46
msgid "Enter password"
msgstr "Introduce contraseña"
-#: forms.py:50
+#: forms.py:51
msgid "Enter your email address to reset your password"
msgstr "Escribe tu dirección de correo para restablecer tu contraseña"
-#: forms.py:59
+#: forms.py:60
msgid "Please fill your email address."
msgstr "Rellena tu dirección de correo por favor."
-#: forms.py:72
+#: forms.py:73
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:75
+#: forms.py:76
msgid "This email address is not recognised."
msgstr "No se reconoce la dirección de correo."
-#: forms.py:82 templates/wagtailadmin/pages/_privacy_indicator.html:13
-#: templates/wagtailadmin/pages/_privacy_indicator.html:18
-#, fuzzy
-msgid "Public"
-msgstr "Publicar"
+#: forms.py:88
+msgid "New title"
+msgstr ""
-#: forms.py:83
+#: 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] ""
+
+#: 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] ""
+
+#: forms.py:124 views/pages.py:155 views/pages.py:272
+msgid "This slug is already in use"
+msgstr "Este slug ya está en uso"
+
+#: 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:91
-#, fuzzy
+#: forms.py:139
msgid "This field is required."
-msgstr "No se reconoce la dirección de correo."
+msgstr ""
#: templates/wagtailadmin/base.html:7 templates/wagtailadmin/home.html:4
msgid "Dashboard"
msgstr "Panel de control"
-#: templates/wagtailadmin/base.html:31
+#: templates/wagtailadmin/base.html:27
msgid "Menu"
msgstr "Menú"
@@ -92,9 +133,7 @@ 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"
@@ -126,10 +165,7 @@ 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
@@ -156,9 +192,7 @@ 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
@@ -200,9 +234,7 @@ 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"
@@ -234,12 +266,12 @@ 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:35
+#: templatetags/wagtailadmin_tags.py:36
msgid "Search"
msgstr "Búsqueda"
#: templates/wagtailadmin/chooser/_search_results.html:3
-#: templatetags/wagtailadmin_tags.py:34
+#: templatetags/wagtailadmin_tags.py:35
msgid "Explorer"
msgstr "Explorador"
@@ -253,14 +285,8 @@ 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/search.html:2
@@ -305,7 +331,7 @@ msgstr "Bajar"
#: templates/wagtailadmin/pages/confirm_delete.html:7
#: templates/wagtailadmin/pages/edit.html:45
#: templates/wagtailadmin/pages/list.html:84
-#: templates/wagtailadmin/pages/list.html:202
+#: templates/wagtailadmin/pages/list.html:205
msgid "Delete"
msgstr "Eliminar"
@@ -417,14 +443,8 @@ 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
@@ -436,14 +456,8 @@ 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
@@ -455,14 +469,8 @@ 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
@@ -521,9 +529,8 @@ msgid "This page has been made private by a parent page."
msgstr ""
#: templates/wagtailadmin/page_privacy/ancestor_privacy.html:7
-#, fuzzy
msgid "You can edit the privacy settings on:"
-msgstr "Puedes editar la página aquí:"
+msgstr ""
#: templates/wagtailadmin/page_privacy/set_privacy.html:6
msgid "Note: privacy changes apply to all children of this page too."
@@ -533,14 +540,9 @@ msgstr ""
#, python-format
msgid ""
"\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"
+" 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 "
#: templates/wagtailadmin/pages/_privacy_indicator.html:9
msgid "Privacy"
@@ -586,26 +588,16 @@ msgid ""
" "
msgid_plural ""
"\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"
+" 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 "
#: 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"
@@ -636,9 +628,7 @@ 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"
@@ -652,7 +642,7 @@ msgstr "No publicar %(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:205
+#: templates/wagtailadmin/pages/list.html:208
msgid "Unpublish"
msgstr "No publicar"
@@ -668,6 +658,20 @@ msgstr "Sí, no publicar"
msgid "Pages using"
msgstr "Páginas usando"
+#: 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"
@@ -721,7 +725,7 @@ msgid "Exploring %(title)s"
msgstr "Explorando %(title)s"
#: templates/wagtailadmin/pages/list.html:90
-#: templates/wagtailadmin/pages/list.html:208
+#: templates/wagtailadmin/pages/list.html:211
msgid "Add child page"
msgstr "Añadir página hija"
@@ -742,53 +746,50 @@ msgstr "Habilitar organización de páginas hijas"
msgid "Drag"
msgstr "Llevar"
-#: templates/wagtailadmin/pages/list.html:234
-#: templates/wagtailadmin/pages/list.html:238
+#: templates/wagtailadmin/pages/list.html:237
+#: templates/wagtailadmin/pages/list.html:241
#, python-format
msgid "Explorer subpages of '%(title)s'"
msgstr "Explorar subpáginas de '%(title)s'"
-#: templates/wagtailadmin/pages/list.html:234
-#: templates/wagtailadmin/pages/list.html:238
-#: templates/wagtailadmin/pages/list.html:242
+#: 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:242
+#: templates/wagtailadmin/pages/list.html:245
#, python-format
-msgid "Explorer child pages of '%(title)s'"
-msgstr "Explorar páginas hijas de '%(title)s'"
+msgid "Explore child pages of '%(title)s'"
+msgstr ""
-#: templates/wagtailadmin/pages/list.html:244
+#: templates/wagtailadmin/pages/list.html:247
#, python-format
msgid "Add a child page to '%(title)s'"
msgstr "Añadir página hija a '%(title)s'"
-#: templates/wagtailadmin/pages/list.html:244
+#: templates/wagtailadmin/pages/list.html:247
msgid "Add subpage"
msgstr "Añadir subpágina"
-#: templates/wagtailadmin/pages/list.html:253
+#: templates/wagtailadmin/pages/list.html:256
msgid "No pages have been created."
msgstr "No ha sido creada ninguna página."
-#: templates/wagtailadmin/pages/list.html:253
+#: templates/wagtailadmin/pages/list.html:256
#, python-format
msgid "Why not add one?"
msgstr "Por qué no añadir una?"
-#: templates/wagtailadmin/pages/list.html:260
-#, fuzzy, python-format
+#: 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:266
+#: 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
@@ -798,7 +799,7 @@ msgstr ""
msgid "Previous"
msgstr "Anterior"
-#: templates/wagtailadmin/pages/list.html:271
+#: 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
@@ -819,7 +820,7 @@ msgid "Select a new parent page for %(title)s"
msgstr "Selecciona una nueva página padre para %(title)s"
#: templates/wagtailadmin/pages/search_results.html:6
-#, fuzzy, python-format
+#, python-format
msgid ""
"\n"
" There is one matching page\n"
@@ -829,13 +830,7 @@ msgid_plural ""
" There are %(counter)s matching pages\n"
" "
msgstr[0] ""
-"\n"
-" Hay una coincidencia\n"
-" "
msgstr[1] ""
-"\n"
-" Hay %(counter)s coincidencias\n"
-" "
#: templates/wagtailadmin/pages/search_results.html:16
msgid "Other searches"
@@ -860,10 +855,7 @@ 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
@@ -875,9 +867,8 @@ msgid "Enter a search term above"
msgstr "Introduce el término de búsqueda arriba"
#: templates/wagtailadmin/pages/usage_results.html:24
-#, fuzzy
msgid "No pages use"
-msgstr "Páginas usando"
+msgstr ""
#: templates/wagtailadmin/shared/breadcrumb.html:6
msgid "Home"
@@ -892,9 +883,8 @@ msgid "February"
msgstr ""
#: templates/wagtailadmin/shared/datetimepicker_translations.html:8
-#, fuzzy
msgid "March"
-msgstr "Búsqueda"
+msgstr ""
#: templates/wagtailadmin/shared/datetimepicker_translations.html:9
msgid "April"
@@ -957,9 +947,15 @@ msgid "Fri"
msgstr ""
#: templates/wagtailadmin/shared/datetimepicker_translations.html:26
-#, fuzzy
msgid "Sat"
-msgstr "Estado"
+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] ""
#: templates/wagtailadmin/shared/main_nav.html:10
msgid "Account settings"
@@ -975,9 +971,8 @@ 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
-#, fuzzy
msgid "User bar"
-msgstr "Usuarios"
+msgstr ""
#: templates/wagtailadmin/userbar/base.html:14
msgid "Go to Wagtail admin interface"
@@ -996,123 +991,69 @@ msgid "Your password has been changed successfully!"
msgstr "¡Tu contraseña ha sido cambiada con éxito!"
#: views/account.py:60
-#, fuzzy
msgid "Your preferences have been updated successfully!"
-msgstr "¡Tu contraseña ha sido cambiada con éxito!"
+msgstr ""
-#: views/pages.py:146 views/pages.py:263
-msgid "This slug is already in use"
-msgstr "Este slug ya está en uso"
-
-#: views/pages.py:160 views/pages.py:277
+#: views/pages.py:169 views/pages.py:286
msgid "Go live date/time must be before expiry date/time"
msgstr ""
-#: views/pages.py:170 views/pages.py:287
+#: views/pages.py:179 views/pages.py:296
msgid "Expiry date/time must be in the future"
msgstr ""
-#: views/pages.py:210 views/pages.py:334 views/pages.py:707
+#: views/pages.py:219 views/pages.py:351 views/pages.py:791
msgid "Page '{0}' published."
msgstr "Página '{0}' publicada."
-#: views/pages.py:212 views/pages.py:336
+#: views/pages.py:221 views/pages.py:353
msgid "Page '{0}' submitted for moderation."
msgstr "Página '{0}' enviada para ser moderada."
-#: views/pages.py:215
+#: views/pages.py:224
msgid "Page '{0}' created."
msgstr "Página '{0}' creada."
-#: views/pages.py:224
-#, fuzzy
+#: views/pages.py:233
msgid "The page could not be created due to validation errors"
-msgstr "La página no ha podido ser guardada debido a errores de validación"
+msgstr ""
-#: views/pages.py:339
+#: views/pages.py:356
msgid "Page '{0}' updated."
msgstr "Página '{0}' actualizada."
-#: views/pages.py:348
+#: views/pages.py:365
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:361
+#: views/pages.py:378
msgid "This page is currently awaiting moderation"
msgstr "La página está a la espera de ser moderada"
-#: views/pages.py:381
+#: views/pages.py:409
msgid "Page '{0}' deleted."
msgstr "Página '{0}' eliminada."
-#: views/pages.py:543
+#: views/pages.py:575
msgid "Page '{0}' unpublished."
msgstr "Página '{0}' no publicada."
-#: views/pages.py:594
+#: views/pages.py:627
msgid "Page '{0}' moved."
msgstr "Página '{0}' movida."
-#: views/pages.py:701 views/pages.py:720 views/pages.py:740
+#: views/pages.py:709
+msgid "Page '{0}' and {1} subpages copied."
+msgstr ""
+
+#: views/pages.py:711
+msgid "Page '{0}' copied."
+msgstr ""
+
+#: views/pages.py:785 views/pages.py:804 views/pages.py:824
msgid "The page '{0}' is not currently awaiting moderation."
msgstr "La página '{0}' no está esperando a ser moderada."
-#: views/pages.py:726
+#: views/pages.py:810
msgid "Page '{0}' rejected for publication."
msgstr "Rechazada la publicación de la página '{0}'."
-
-#~ msgid "Please type a valid time"
-#~ msgstr "Por favor, escribe una hora válida"
-
-#~ msgid "View draft"
-#~ msgstr "Ver borrador"
-
-#~ msgid "View live"
-#~ msgstr "Ver en vivo"
-
-#~ msgid "Status:"
-#~ msgstr "Estado:"
-
-#~ msgid "Where do you want to create a %(page_type)s"
-#~ msgstr "Dónde quieres crear una %(page_type)s"
-
-#~ msgid "Where do you want to create this"
-#~ msgstr "Dónde quieres crear esto"
-
-#~ msgid "Create a new page"
-#~ msgstr "Crear una nueva página"
-
-#~ msgid ""
-#~ "Your new page will be saved in the top level of your website. "
-#~ "You can move it after saving."
-#~ msgstr ""
-#~ "Tu nueva página sera guardada en el nivel superior de tu sitio "
-#~ "web. Puedes moverla después de guardar."
-
-#~ msgid "More"
-#~ msgstr "Más"
-
-#~ msgid "Redirects"
-#~ msgstr "Redirecciones"
-
-#~ msgid "Editors Picks"
-#~ msgstr "Selecciones del Editor"
-
-#~ msgid "Snippets"
-#~ msgstr "Fragmentos"
-
-#~ msgid ""
-#~ "Sorry, you do not have access to create a page of type '{0}'."
-#~ msgstr ""
-#~ "Lo sentimos, no tienes permiso para crear una página de tipo '{0}'"
-#~ "em>."
-
-#~ msgid ""
-#~ "Pages of this type can only be created as children of '{0}'. "
-#~ "This new page will be saved there."
-#~ msgstr ""
-#~ "Páginas de este tipo solo pueden ser creadas como hijas de '{0}'"
-#~ "em>. Esta nueva página será guardada ahí."
-
-#~ msgid "The page could not be created due to errors."
-#~ msgstr "La página no ha podido ser creada debido a errores."
diff --git a/wagtail/wagtailadmin/locale/eu/LC_MESSAGES/django.po b/wagtail/wagtailadmin/locale/eu/LC_MESSAGES/django.po
index 0210c6b96..85ab69320 100644
--- a/wagtail/wagtailadmin/locale/eu/LC_MESSAGES/django.po
+++ b/wagtail/wagtailadmin/locale/eu/LC_MESSAGES/django.po
@@ -1,22 +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:
-# unaizalakain , 2014
+# Unai Zalakain , 2014
msgid ""
msgstr ""
"Project-Id-Version: Wagtail\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2014-07-11 10:41+0000\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/"
-"eu/)\n"
-"Language: eu\n"
+"POT-Creation-Date: 2014-08-01 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"
"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
@@ -27,57 +26,100 @@ msgstr ""
msgid "Common page configuration"
msgstr ""
-#: forms.py:18
+#: forms.py:19
msgid "Search term"
msgstr "Bilaketa terminoa"
-#: forms.py:42
+#: forms.py:43
msgid "Enter your username"
msgstr ""
-#: forms.py:45
+#: forms.py:46
msgid "Enter password"
msgstr ""
-#: forms.py:50
+#: forms.py:51
msgid "Enter your email address to reset your password"
msgstr "Idatzi zure eposta helbidea zure pasahitza berrezartzeko"
-#: forms.py:59
+#: forms.py:60
msgid "Please fill your email address."
msgstr "Idatzi zure eposta helbidea mesedez."
-#: forms.py:72
+#: forms.py:73
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:75
+#: forms.py:76
msgid "This email address is not recognised."
msgstr "Ez da horrelako eposta helbiderik ezagutzen."
-#: forms.py:82 templates/wagtailadmin/pages/_privacy_indicator.html:13
+#: 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] ""
+
+#: 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] ""
+
+#: forms.py:124 views/pages.py:155 views/pages.py:272
+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:83
+#: forms.py:131
msgid "Private, accessible with the following password"
msgstr ""
-#: forms.py:91
-#, fuzzy
+#: forms.py:139
msgid "This field is required."
-msgstr "Ez da horrelako eposta helbiderik ezagutzen."
+msgstr ""
#: templates/wagtailadmin/base.html:7 templates/wagtailadmin/home.html:4
msgid "Dashboard"
msgstr "Kontrol panela"
-#: templates/wagtailadmin/base.html:31
+#: templates/wagtailadmin/base.html:27
msgid "Menu"
msgstr ""
@@ -90,9 +132,7 @@ 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"
@@ -100,9 +140,7 @@ 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"
@@ -126,10 +164,7 @@ 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
@@ -156,8 +191,7 @@ 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
@@ -231,12 +265,12 @@ 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:35
+#: templatetags/wagtailadmin_tags.py:36
msgid "Search"
msgstr "Bilatu"
#: templates/wagtailadmin/chooser/_search_results.html:3
-#: templatetags/wagtailadmin_tags.py:34
+#: templatetags/wagtailadmin_tags.py:35
msgid "Explorer"
msgstr "Arakatzailea"
@@ -296,7 +330,7 @@ msgstr "Behera mugitu"
#: templates/wagtailadmin/pages/confirm_delete.html:7
#: templates/wagtailadmin/pages/edit.html:45
#: templates/wagtailadmin/pages/list.html:84
-#: templates/wagtailadmin/pages/list.html:202
+#: templates/wagtailadmin/pages/list.html:205
msgid "Delete"
msgstr "Ezabatu"
@@ -505,8 +539,7 @@ msgstr ""
#, 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 ""
@@ -554,8 +587,7 @@ 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] ""
@@ -609,7 +641,7 @@ 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:205
+#: templates/wagtailadmin/pages/list.html:208
msgid "Unpublish"
msgstr ""
@@ -625,6 +657,20 @@ msgstr ""
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"
@@ -678,7 +724,7 @@ msgid "Exploring %(title)s"
msgstr ""
#: templates/wagtailadmin/pages/list.html:90
-#: templates/wagtailadmin/pages/list.html:208
+#: templates/wagtailadmin/pages/list.html:211
msgid "Add child page"
msgstr ""
@@ -699,42 +745,42 @@ msgstr ""
msgid "Drag"
msgstr ""
-#: templates/wagtailadmin/pages/list.html:234
-#: templates/wagtailadmin/pages/list.html:238
+#: 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:234
-#: templates/wagtailadmin/pages/list.html:238
-#: templates/wagtailadmin/pages/list.html:242
+#: 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:242
+#: templates/wagtailadmin/pages/list.html:245
#, python-format
-msgid "Explorer child pages of '%(title)s'"
+msgid "Explore child pages of '%(title)s'"
msgstr ""
-#: templates/wagtailadmin/pages/list.html:244
+#: templates/wagtailadmin/pages/list.html:247
#, python-format
msgid "Add a child page to '%(title)s'"
msgstr ""
-#: templates/wagtailadmin/pages/list.html:244
+#: templates/wagtailadmin/pages/list.html:247
msgid "Add subpage"
msgstr ""
-#: templates/wagtailadmin/pages/list.html:253
+#: templates/wagtailadmin/pages/list.html:256
msgid "No pages have been created."
msgstr ""
-#: templates/wagtailadmin/pages/list.html:253
+#: templates/wagtailadmin/pages/list.html:256
#, python-format
msgid "Why not add one?"
msgstr ""
-#: templates/wagtailadmin/pages/list.html:260
+#: templates/wagtailadmin/pages/list.html:263
#, python-format
msgid ""
"\n"
@@ -742,7 +788,7 @@ msgid ""
" "
msgstr ""
-#: templates/wagtailadmin/pages/list.html:266
+#: 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
@@ -752,7 +798,7 @@ msgstr ""
msgid "Previous"
msgstr ""
-#: templates/wagtailadmin/pages/list.html:271
+#: 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
@@ -836,9 +882,8 @@ msgid "February"
msgstr ""
#: templates/wagtailadmin/shared/datetimepicker_translations.html:8
-#, fuzzy
msgid "March"
-msgstr "Bilatu"
+msgstr ""
#: templates/wagtailadmin/shared/datetimepicker_translations.html:9
msgid "April"
@@ -901,9 +946,15 @@ msgid "Fri"
msgstr ""
#: templates/wagtailadmin/shared/datetimepicker_translations.html:26
-#, fuzzy
msgid "Sat"
-msgstr "Egoera"
+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] ""
#: templates/wagtailadmin/shared/main_nav.html:10
msgid "Account settings"
@@ -942,68 +993,66 @@ msgstr ""
msgid "Your preferences have been updated successfully!"
msgstr ""
-#: views/pages.py:146 views/pages.py:263
-msgid "This slug is already in use"
-msgstr ""
-
-#: views/pages.py:160 views/pages.py:277
+#: views/pages.py:169 views/pages.py:286
msgid "Go live date/time must be before expiry date/time"
msgstr ""
-#: views/pages.py:170 views/pages.py:287
+#: views/pages.py:179 views/pages.py:296
msgid "Expiry date/time must be in the future"
msgstr ""
-#: views/pages.py:210 views/pages.py:334 views/pages.py:707
+#: views/pages.py:219 views/pages.py:351 views/pages.py:791
msgid "Page '{0}' published."
msgstr ""
-#: views/pages.py:212 views/pages.py:336
+#: views/pages.py:221 views/pages.py:353
msgid "Page '{0}' submitted for moderation."
msgstr ""
-#: views/pages.py:215
+#: views/pages.py:224
msgid "Page '{0}' created."
msgstr ""
-#: views/pages.py:224
+#: views/pages.py:233
msgid "The page could not be created due to validation errors"
msgstr ""
-#: views/pages.py:339
+#: views/pages.py:356
msgid "Page '{0}' updated."
msgstr ""
-#: views/pages.py:348
+#: views/pages.py:365
msgid "The page could not be saved due to validation errors"
msgstr ""
-#: views/pages.py:361
+#: views/pages.py:378
msgid "This page is currently awaiting moderation"
msgstr ""
-#: views/pages.py:381
+#: views/pages.py:409
msgid "Page '{0}' deleted."
msgstr ""
-#: views/pages.py:543
+#: views/pages.py:575
msgid "Page '{0}' unpublished."
msgstr ""
-#: views/pages.py:594
+#: views/pages.py:627
msgid "Page '{0}' moved."
msgstr ""
-#: views/pages.py:701 views/pages.py:720 views/pages.py:740
+#: views/pages.py:709
+msgid "Page '{0}' and {1} subpages copied."
+msgstr ""
+
+#: views/pages.py:711
+msgid "Page '{0}' copied."
+msgstr ""
+
+#: views/pages.py:785 views/pages.py:804 views/pages.py:824
msgid "The page '{0}' is not currently awaiting moderation."
msgstr ""
-#: views/pages.py:726
+#: views/pages.py:810
msgid "Page '{0}' rejected for publication."
msgstr ""
-
-#~ msgid "Please type a valid time"
-#~ msgstr "Idatzi data egoki bat mesedez"
-
-#~ msgid "View draft"
-#~ msgstr "Borradorea ikusi"
diff --git a/wagtail/wagtailadmin/locale/fr/LC_MESSAGES/django.po b/wagtail/wagtailadmin/locale/fr/LC_MESSAGES/django.po
index b5aef8488..8e10df1d2 100644
--- a/wagtail/wagtailadmin/locale/fr/LC_MESSAGES/django.po
+++ b/wagtail/wagtailadmin/locale/fr/LC_MESSAGES/django.po
@@ -1,22 +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:
# nahuel, 2014
msgid ""
msgstr ""
"Project-Id-Version: Wagtail\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2014-07-11 10:41+0000\n"
-"PO-Revision-Date: 2014-03-18 23:17+0000\n"
-"Last-Translator: nahuel\n"
-"Language-Team: French (http://www.transifex.com/projects/p/wagtail/language/"
-"fr/)\n"
-"Language: fr\n"
+"POT-Creation-Date: 2014-08-01 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"
"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
@@ -27,58 +26,100 @@ msgstr ""
msgid "Common page configuration"
msgstr ""
-#: forms.py:18
+#: forms.py:19
msgid "Search term"
msgstr "Terme de recherche"
-#: forms.py:42
+#: forms.py:43
msgid "Enter your username"
msgstr "Entrez votre identifiant"
-#: forms.py:45
+#: forms.py:46
msgid "Enter password"
msgstr ""
-#: forms.py:50
+#: forms.py:51
msgid "Enter your email address to reset your password"
msgstr "Entrez votre adresse e-mail pour réinitialiser votre mot de passe"
-#: forms.py:59
+#: forms.py:60
msgid "Please fill your email address."
msgstr "Entrez votre adresse e-mail."
-#: forms.py:72
+#: forms.py:73
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:75
+#: forms.py:76
msgid "This email address is not recognised."
msgstr "Cette adresse e-mail n'est pas reconnue."
-#: forms.py:82 templates/wagtailadmin/pages/_privacy_indicator.html:13
-#: templates/wagtailadmin/pages/_privacy_indicator.html:18
-#, fuzzy
-msgid "Public"
-msgstr "Publier"
+#: forms.py:88
+msgid "New title"
+msgstr ""
-#: forms.py:83
+#: 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] ""
+
+#: 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] ""
+
+#: forms.py:124 views/pages.py:155 views/pages.py:272
+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:91
-#, fuzzy
+#: forms.py:139
msgid "This field is required."
-msgstr "Cette adresse e-mail n'est pas reconnue."
+msgstr ""
#: templates/wagtailadmin/base.html:7 templates/wagtailadmin/home.html:4
msgid "Dashboard"
msgstr "Tableau de bord"
-#: templates/wagtailadmin/base.html:31
+#: templates/wagtailadmin/base.html:27
msgid "Menu"
msgstr "Menu"
@@ -91,9 +132,7 @@ 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"
@@ -101,8 +140,7 @@ 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"
@@ -126,10 +164,7 @@ 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
@@ -156,8 +191,7 @@ 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
@@ -231,12 +265,12 @@ msgstr ""
#: templates/wagtailadmin/chooser/_search_form.html:7
#: templates/wagtailadmin/pages/search.html:3
#: templates/wagtailadmin/pages/search.html:16
-#: templatetags/wagtailadmin_tags.py:35
+#: templatetags/wagtailadmin_tags.py:36
msgid "Search"
msgstr ""
#: templates/wagtailadmin/chooser/_search_results.html:3
-#: templatetags/wagtailadmin_tags.py:34
+#: templatetags/wagtailadmin_tags.py:35
msgid "Explorer"
msgstr ""
@@ -296,7 +330,7 @@ msgstr "Descendre"
#: templates/wagtailadmin/pages/confirm_delete.html:7
#: templates/wagtailadmin/pages/edit.html:45
#: templates/wagtailadmin/pages/list.html:84
-#: templates/wagtailadmin/pages/list.html:202
+#: templates/wagtailadmin/pages/list.html:205
msgid "Delete"
msgstr "Supprimer"
@@ -408,14 +442,8 @@ 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
@@ -427,14 +455,8 @@ 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
@@ -446,14 +468,8 @@ 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
@@ -512,9 +528,8 @@ msgid "This page has been made private by a parent page."
msgstr ""
#: templates/wagtailadmin/page_privacy/ancestor_privacy.html:7
-#, fuzzy
msgid "You can edit the privacy settings on:"
-msgstr "Vous pouvez éditer la page ici:"
+msgstr ""
#: templates/wagtailadmin/page_privacy/set_privacy.html:6
msgid "Note: privacy changes apply to all children of this page too."
@@ -524,14 +539,9 @@ msgstr ""
#, python-format
msgid ""
"\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"
+" 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 "
#: templates/wagtailadmin/pages/_privacy_indicator.html:9
msgid "Privacy"
@@ -577,26 +587,16 @@ msgid ""
" "
msgid_plural ""
"\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"
+" 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 "
#: 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,9 +627,7 @@ 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"
@@ -643,7 +641,7 @@ msgstr "Dé-publier %(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:205
+#: templates/wagtailadmin/pages/list.html:208
msgid "Unpublish"
msgstr "Dé-publier"
@@ -659,6 +657,20 @@ msgstr "Oui, la dé-publier"
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"
@@ -712,7 +724,7 @@ msgid "Exploring %(title)s"
msgstr ""
#: templates/wagtailadmin/pages/list.html:90
-#: templates/wagtailadmin/pages/list.html:208
+#: templates/wagtailadmin/pages/list.html:211
msgid "Add child page"
msgstr "Ajouter une page enfant"
@@ -733,53 +745,50 @@ msgstr "Activer le tri des pages enfant"
msgid "Drag"
msgstr "Glisser"
-#: templates/wagtailadmin/pages/list.html:234
-#: templates/wagtailadmin/pages/list.html:238
+#: 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:234
-#: templates/wagtailadmin/pages/list.html:238
-#: templates/wagtailadmin/pages/list.html:242
+#: 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:242
+#: templates/wagtailadmin/pages/list.html:245
#, python-format
-msgid "Explorer child pages of '%(title)s'"
+msgid "Explore child pages of '%(title)s'"
msgstr ""
-#: templates/wagtailadmin/pages/list.html:244
+#: templates/wagtailadmin/pages/list.html:247
#, python-format
msgid "Add a child page to '%(title)s'"
msgstr "Ajouter une page enfant à '%(title)s'"
-#: templates/wagtailadmin/pages/list.html:244
+#: templates/wagtailadmin/pages/list.html:247
msgid "Add subpage"
msgstr "Ajouter une sous-page"
-#: templates/wagtailadmin/pages/list.html:253
+#: templates/wagtailadmin/pages/list.html:256
msgid "No pages have been created."
msgstr "Aucune page n'a été créé."
-#: templates/wagtailadmin/pages/list.html:253
+#: templates/wagtailadmin/pages/list.html:256
#, python-format
msgid "Why not add one?"
msgstr "Pourquoi ne pas en ajouter une?"
-#: templates/wagtailadmin/pages/list.html:260
-#, fuzzy, python-format
+#: templates/wagtailadmin/pages/list.html:263
+#, python-format
msgid ""
"\n"
" Page %(page_number)s of %(num_pages)s.\n"
" "
msgstr ""
-"\n"
-" Page %(page_number)s sur %(num_pages)s.\n"
-" "
-#: templates/wagtailadmin/pages/list.html:266
+#: 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
@@ -789,7 +798,7 @@ msgstr ""
msgid "Previous"
msgstr "Précédent"
-#: templates/wagtailadmin/pages/list.html:271
+#: 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
@@ -810,7 +819,7 @@ msgid "Select a new parent page for %(title)s"
msgstr "Sélectionnez une nouvelle page parent pour %(title)s"
#: templates/wagtailadmin/pages/search_results.html:6
-#, fuzzy, python-format
+#, python-format
msgid ""
"\n"
" There is one matching page\n"
@@ -820,13 +829,7 @@ msgid_plural ""
" There are %(counter)s matching pages\n"
" "
msgstr[0] ""
-"\n"
-" Il y a une correspondance\n"
-" "
msgstr[1] ""
-"\n"
-" Il y a %(counter)s correspondances\n"
-" "
#: templates/wagtailadmin/pages/search_results.html:16
msgid "Other searches"
@@ -851,10 +854,7 @@ 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
@@ -946,9 +946,15 @@ msgid "Fri"
msgstr ""
#: templates/wagtailadmin/shared/datetimepicker_translations.html:26
-#, fuzzy
msgid "Sat"
-msgstr "Statut"
+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] ""
#: templates/wagtailadmin/shared/main_nav.html:10
msgid "Account settings"
@@ -964,9 +970,8 @@ msgid "Page %(page_num)s of %(total_pages)s."
msgstr "Page %(page_num)s de %(total_pages)s."
#: templates/wagtailadmin/userbar/base.html:4
-#, fuzzy
msgid "User bar"
-msgstr "Utilisateurs"
+msgstr ""
#: templates/wagtailadmin/userbar/base.html:14
msgid "Go to Wagtail admin interface"
@@ -985,113 +990,69 @@ msgid "Your password has been changed successfully!"
msgstr "Votre mot de passe a été changé avec succès!"
#: views/account.py:60
-#, fuzzy
msgid "Your preferences have been updated successfully!"
-msgstr "Votre mot de passe a été changé avec succès!"
-
-#: views/pages.py:146 views/pages.py:263
-msgid "This slug is already in use"
msgstr ""
-#: views/pages.py:160 views/pages.py:277
+#: views/pages.py:169 views/pages.py:286
msgid "Go live date/time must be before expiry date/time"
msgstr ""
-#: views/pages.py:170 views/pages.py:287
+#: views/pages.py:179 views/pages.py:296
msgid "Expiry date/time must be in the future"
msgstr ""
-#: views/pages.py:210 views/pages.py:334 views/pages.py:707
+#: views/pages.py:219 views/pages.py:351 views/pages.py:791
msgid "Page '{0}' published."
msgstr "Page '{0}' publiée."
-#: views/pages.py:212 views/pages.py:336
+#: views/pages.py:221 views/pages.py:353
msgid "Page '{0}' submitted for moderation."
msgstr "Page '{0}' soumise pour modération."
-#: views/pages.py:215
+#: views/pages.py:224
msgid "Page '{0}' created."
msgstr "Page '{0}' créée."
-#: views/pages.py:224
-#, fuzzy
+#: views/pages.py:233
msgid "The page could not be created due to validation errors"
-msgstr "La page n'a pu être enregistré à cause d'erreurs de validation."
+msgstr ""
-#: views/pages.py:339
+#: views/pages.py:356
msgid "Page '{0}' updated."
msgstr "Page '{0}' mise à jour."
-#: views/pages.py:348
+#: views/pages.py:365
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:361
+#: views/pages.py:378
msgid "This page is currently awaiting moderation"
msgstr "Cette page est actuellement en attente de modération"
-#: views/pages.py:381
+#: views/pages.py:409
msgid "Page '{0}' deleted."
msgstr "Page '{0}' supprimée."
-#: views/pages.py:543
+#: views/pages.py:575
msgid "Page '{0}' unpublished."
msgstr "Page '{0}' dé-publiée."
-#: views/pages.py:594
+#: views/pages.py:627
msgid "Page '{0}' moved."
msgstr "Page '{0}' déplacée."
-#: views/pages.py:701 views/pages.py:720 views/pages.py:740
+#: views/pages.py:709
+msgid "Page '{0}' and {1} subpages copied."
+msgstr ""
+
+#: views/pages.py:711
+msgid "Page '{0}' copied."
+msgstr ""
+
+#: views/pages.py:785 views/pages.py:804 views/pages.py:824
msgid "The page '{0}' is not currently awaiting moderation."
msgstr "La page '{0}' est actuellement en attente de modération."
-#: views/pages.py:726
+#: views/pages.py:810
msgid "Page '{0}' rejected for publication."
msgstr "Page '{0}' refusée à la publication."
-
-#~ msgid "View draft"
-#~ msgstr "Voir le brouillon"
-
-#~ msgid "View live"
-#~ msgstr "Voir en ligne"
-
-#~ msgid "Status:"
-#~ msgstr "Statut:"
-
-#~ msgid "Where do you want to create a %(page_type)s"
-#~ msgstr "Où souhaitez vous créer une page du type %(page_type)s"
-
-#~ msgid "Where do you want to create this"
-#~ msgstr "Où souhaitez vous créer ceci"
-
-#~ msgid "Create a new page"
-#~ msgstr "Créer une nouvelle page"
-
-#~ msgid ""
-#~ "Your new page will be saved in the top level of your website. "
-#~ "You can move it after saving."
-#~ msgstr ""
-#~ "Votre nouvelle page sera enregistrée à la racine de votre site "
-#~ "web. Vous pourrez la déplacer avec l'avoir enregistré."
-
-#~ msgid "More"
-#~ msgstr "Plus"
-
-#~ msgid "Redirects"
-#~ msgstr "Redirections"
-
-#~ msgid ""
-#~ "Sorry, you do not have access to create a page of type '{0}'."
-#~ msgstr ""
-#~ "Désolé, vous n'êtes pas autorisé à créer une page du type '{0}'."
-
-#~ msgid ""
-#~ "Pages of this type can only be created as children of '{0}'. "
-#~ "This new page will be saved there."
-#~ msgstr ""
-#~ "Les pages de ce type ne peuvent être créées qu'en tant qu'enfant de "
-#~ "'{0}'. Cette nouvelle page y sera sauvegardée."
-
-#~ msgid "The page could not be created due to errors."
-#~ msgstr "La page ne peut être créé du fait d'erreurs."
diff --git a/wagtail/wagtailadmin/locale/gl/LC_MESSAGES/django.po b/wagtail/wagtailadmin/locale/gl/LC_MESSAGES/django.po
index 881402e2b..b58956423 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,15 +9,14 @@ msgid ""
msgstr ""
"Project-Id-Version: Wagtail\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2014-07-11 10:41+0000\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/"
-"language/gl/)\n"
-"Language: gl\n"
+"POT-Creation-Date: 2014-08-01 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"
"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
@@ -28,58 +27,100 @@ msgstr ""
msgid "Common page configuration"
msgstr "Configuración común de páxina"
-#: forms.py:18
+#: forms.py:19
msgid "Search term"
msgstr "Termo de busca"
-#: forms.py:42
+#: forms.py:43
msgid "Enter your username"
msgstr "Introduce o teu nome de usuario"
-#: forms.py:45
+#: forms.py:46
msgid "Enter password"
msgstr "Introduce contrasinal"
-#: forms.py:50
+#: forms.py:51
msgid "Enter your email address to reset your password"
msgstr "Escribe a túa dirección de correo para restaurar o teu contrasinal"
-#: forms.py:59
+#: forms.py:60
msgid "Please fill your email address."
msgstr "Por favor, enche a túa dirección de correo."
-#: forms.py:72
+#: forms.py:73
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:75
+#: forms.py:76
msgid "This email address is not recognised."
msgstr "Non se recoñece a dirección de correo."
-#: forms.py:82 templates/wagtailadmin/pages/_privacy_indicator.html:13
-#: templates/wagtailadmin/pages/_privacy_indicator.html:18
-#, fuzzy
-msgid "Public"
-msgstr "Publicar"
+#: forms.py:88
+msgid "New title"
+msgstr ""
-#: forms.py:83
+#: 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] ""
+
+#: 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] ""
+
+#: forms.py:124 views/pages.py:155 views/pages.py:272
+msgid "This slug is already in use"
+msgstr "Este slug ya está en uso"
+
+#: 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:91
-#, fuzzy
+#: forms.py:139
msgid "This field is required."
-msgstr "Non se recoñece a dirección de correo."
+msgstr ""
#: templates/wagtailadmin/base.html:7 templates/wagtailadmin/home.html:4
msgid "Dashboard"
msgstr "Panel de control"
-#: templates/wagtailadmin/base.html:31
+#: templates/wagtailadmin/base.html:27
msgid "Menu"
msgstr "Menú"
@@ -92,9 +133,7 @@ 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"
@@ -126,10 +165,7 @@ 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
@@ -156,9 +192,7 @@ 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
@@ -200,14 +234,11 @@ 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"
@@ -235,12 +266,12 @@ 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:35
+#: templatetags/wagtailadmin_tags.py:36
msgid "Search"
msgstr "Busca"
#: templates/wagtailadmin/chooser/_search_results.html:3
-#: templatetags/wagtailadmin_tags.py:34
+#: templatetags/wagtailadmin_tags.py:35
msgid "Explorer"
msgstr "Explorador"
@@ -254,14 +285,8 @@ 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/search.html:2
@@ -306,7 +331,7 @@ msgstr "Baixar"
#: templates/wagtailadmin/pages/confirm_delete.html:7
#: templates/wagtailadmin/pages/edit.html:45
#: templates/wagtailadmin/pages/list.html:84
-#: templates/wagtailadmin/pages/list.html:202
+#: templates/wagtailadmin/pages/list.html:205
msgid "Delete"
msgstr "Eliminar"
@@ -418,14 +443,8 @@ 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
@@ -437,14 +456,8 @@ 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
@@ -456,14 +469,8 @@ 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
@@ -522,9 +529,8 @@ msgid "This page has been made private by a parent page."
msgstr ""
#: templates/wagtailadmin/page_privacy/ancestor_privacy.html:7
-#, fuzzy
msgid "You can edit the privacy settings on:"
-msgstr "Podes editar ala páxina aquí:"
+msgstr ""
#: templates/wagtailadmin/page_privacy/set_privacy.html:6
msgid "Note: privacy changes apply to all children of this page too."
@@ -534,14 +540,9 @@ msgstr ""
#, python-format
msgid ""
"\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"
+" 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 "
#: templates/wagtailadmin/pages/_privacy_indicator.html:9
msgid "Privacy"
@@ -587,26 +588,16 @@ msgid ""
" "
msgid_plural ""
"\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"
+" 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 "
#: 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"
@@ -637,9 +628,7 @@ 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"
@@ -653,7 +642,7 @@ msgstr "Non publicar %(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:205
+#: templates/wagtailadmin/pages/list.html:208
msgid "Unpublish"
msgstr "Non publicar"
@@ -669,6 +658,20 @@ msgstr "Sí, non publicar"
msgid "Pages using"
msgstr "Páxinas usando"
+#: 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"
@@ -722,7 +725,7 @@ msgid "Exploring %(title)s"
msgstr "Explorando %(title)s"
#: templates/wagtailadmin/pages/list.html:90
-#: templates/wagtailadmin/pages/list.html:208
+#: templates/wagtailadmin/pages/list.html:211
msgid "Add child page"
msgstr "Engadir páxina filla"
@@ -743,53 +746,50 @@ msgstr "Habilitar organización de páxinas fillas"
msgid "Drag"
msgstr "Levar"
-#: templates/wagtailadmin/pages/list.html:234
-#: templates/wagtailadmin/pages/list.html:238
+#: templates/wagtailadmin/pages/list.html:237
+#: templates/wagtailadmin/pages/list.html:241
#, python-format
msgid "Explorer subpages of '%(title)s'"
msgstr "Explorar subpáxinas de '%(title)s'"
-#: templates/wagtailadmin/pages/list.html:234
-#: templates/wagtailadmin/pages/list.html:238
-#: templates/wagtailadmin/pages/list.html:242
+#: 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:242
+#: templates/wagtailadmin/pages/list.html:245
#, python-format
-msgid "Explorer child pages of '%(title)s'"
-msgstr "Explorar páxinas fillas de '%(title)s'"
+msgid "Explore child pages of '%(title)s'"
+msgstr ""
-#: templates/wagtailadmin/pages/list.html:244
+#: templates/wagtailadmin/pages/list.html:247
#, python-format
msgid "Add a child page to '%(title)s'"
msgstr "Engadir páxina filla a '%(title)s'"
-#: templates/wagtailadmin/pages/list.html:244
+#: templates/wagtailadmin/pages/list.html:247
msgid "Add subpage"
msgstr "Engadir subpáxina"
-#: templates/wagtailadmin/pages/list.html:253
+#: templates/wagtailadmin/pages/list.html:256
msgid "No pages have been created."
msgstr "Non foi creada ningunha páxina."
-#: templates/wagtailadmin/pages/list.html:253
+#: templates/wagtailadmin/pages/list.html:256
#, python-format
msgid "Why not add one?"
msgstr "¿Por qué non engadir unha?"
-#: templates/wagtailadmin/pages/list.html:260
-#, fuzzy, python-format
+#: templates/wagtailadmin/pages/list.html:263
+#, python-format
msgid ""
"\n"
" Page %(page_number)s of %(num_pages)s.\n"
" "
msgstr ""
-"\n"
-" Páxina %(page_number)s de %(num_pages)s.\n"
-" "
-#: templates/wagtailadmin/pages/list.html:266
+#: 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
@@ -799,7 +799,7 @@ msgstr ""
msgid "Previous"
msgstr "Anterior"
-#: templates/wagtailadmin/pages/list.html:271
+#: 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
@@ -820,7 +820,7 @@ msgid "Select a new parent page for %(title)s"
msgstr "Seleccionar unha nova páxina pai para %(title)s"
#: templates/wagtailadmin/pages/search_results.html:6
-#, fuzzy, python-format
+#, python-format
msgid ""
"\n"
" There is one matching page\n"
@@ -830,13 +830,7 @@ msgid_plural ""
" There are %(counter)s matching pages\n"
" "
msgstr[0] ""
-"\n"
-" Hai unha coincidencia\n"
-" "
msgstr[1] ""
-"\n"
-" Hai %(counter)s coincidencias\n"
-" "
#: templates/wagtailadmin/pages/search_results.html:16
msgid "Other searches"
@@ -861,10 +855,7 @@ 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
@@ -876,9 +867,8 @@ msgid "Enter a search term above"
msgstr "Introduce o termo de busca arriba"
#: templates/wagtailadmin/pages/usage_results.html:24
-#, fuzzy
msgid "No pages use"
-msgstr "Páxinas usando"
+msgstr ""
#: templates/wagtailadmin/shared/breadcrumb.html:6
msgid "Home"
@@ -893,9 +883,8 @@ msgid "February"
msgstr ""
#: templates/wagtailadmin/shared/datetimepicker_translations.html:8
-#, fuzzy
msgid "March"
-msgstr "Busca"
+msgstr ""
#: templates/wagtailadmin/shared/datetimepicker_translations.html:9
msgid "April"
@@ -958,9 +947,15 @@ msgid "Fri"
msgstr ""
#: templates/wagtailadmin/shared/datetimepicker_translations.html:26
-#, fuzzy
msgid "Sat"
-msgstr "Estado"
+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] ""
#: templates/wagtailadmin/shared/main_nav.html:10
msgid "Account settings"
@@ -976,9 +971,8 @@ msgid "Page %(page_num)s of %(total_pages)s."
msgstr "Páxina %(page_num)s de %(total_pages)s."
#: templates/wagtailadmin/userbar/base.html:4
-#, fuzzy
msgid "User bar"
-msgstr "Usuarios"
+msgstr ""
#: templates/wagtailadmin/userbar/base.html:14
msgid "Go to Wagtail admin interface"
@@ -997,122 +991,69 @@ msgid "Your password has been changed successfully!"
msgstr "¡O teu contrasinal foi cambiado correctamente!"
#: views/account.py:60
-#, fuzzy
msgid "Your preferences have been updated successfully!"
-msgstr "¡O teu contrasinal foi cambiado correctamente!"
+msgstr ""
-#: views/pages.py:146 views/pages.py:263
-msgid "This slug is already in use"
-msgstr "Este slug ya está en uso"
-
-#: views/pages.py:160 views/pages.py:277
+#: views/pages.py:169 views/pages.py:286
msgid "Go live date/time must be before expiry date/time"
msgstr ""
-#: views/pages.py:170 views/pages.py:287
+#: views/pages.py:179 views/pages.py:296
msgid "Expiry date/time must be in the future"
msgstr ""
-#: views/pages.py:210 views/pages.py:334 views/pages.py:707
+#: views/pages.py:219 views/pages.py:351 views/pages.py:791
msgid "Page '{0}' published."
msgstr "Páxina '{0}' publicada."
-#: views/pages.py:212 views/pages.py:336
+#: views/pages.py:221 views/pages.py:353
msgid "Page '{0}' submitted for moderation."
msgstr "Páxina '{0}' enviada para ser moderada."
-#: views/pages.py:215
+#: views/pages.py:224
msgid "Page '{0}' created."
msgstr "Páxina '{0}' creada."
-#: views/pages.py:224
-#, fuzzy
+#: views/pages.py:233
msgid "The page could not be created due to validation errors"
-msgstr "A páxina non puido ser gardada debido a erros de validación"
+msgstr ""
-#: views/pages.py:339
+#: views/pages.py:356
msgid "Page '{0}' updated."
msgstr "Páxina '{0}' actualizada."
-#: views/pages.py:348
+#: views/pages.py:365
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:361
+#: views/pages.py:378
msgid "This page is currently awaiting moderation"
msgstr "A páxina está á espera de ser moderada"
-#: views/pages.py:381
+#: views/pages.py:409
msgid "Page '{0}' deleted."
msgstr "Páxina '{0}' eliminada."
-#: views/pages.py:543
+#: views/pages.py:575
msgid "Page '{0}' unpublished."
msgstr "Páxina '{0}' non publicada."
-#: views/pages.py:594
+#: views/pages.py:627
msgid "Page '{0}' moved."
msgstr "Páxina '{0}' movida."
-#: views/pages.py:701 views/pages.py:720 views/pages.py:740
+#: views/pages.py:709
+msgid "Page '{0}' and {1} subpages copied."
+msgstr ""
+
+#: views/pages.py:711
+msgid "Page '{0}' copied."
+msgstr ""
+
+#: views/pages.py:785 views/pages.py:804 views/pages.py:824
msgid "The page '{0}' is not currently awaiting moderation."
msgstr "A páxina '{0}' non está esperando a ser moderada."
-#: views/pages.py:726
+#: views/pages.py:810
msgid "Page '{0}' rejected for publication."
msgstr "Rexeitada a publicación da página '{0}'."
-
-#~ msgid "Please type a valid time"
-#~ msgstr "Por favor, escribe unha hora válida"
-
-#~ msgid "View draft"
-#~ msgstr "Ver borrador"
-
-#~ msgid "View live"
-#~ msgstr "Ver en vivo"
-
-#~ msgid "Status:"
-#~ msgstr "Estado:"
-
-#~ msgid "Where do you want to create a %(page_type)s"
-#~ msgstr "¿Onde queres crear unha %(page_type)s"
-
-#~ msgid "Where do you want to create this"
-#~ msgstr "Onde queres crear isto"
-
-#~ msgid "Create a new page"
-#~ msgstr "Crear unha nova páxina"
-
-#~ msgid ""
-#~ "Your new page will be saved in the top level of your website. "
-#~ "You can move it after saving."
-#~ msgstr ""
-#~ "A túa nova páxina sera gardada no nivel superior do teu sitio "
-#~ "web. Podes movela despois de gardar."
-
-#~ msgid "More"
-#~ msgstr "Máis"
-
-#~ msgid "Redirects"
-#~ msgstr "Redireccións"
-
-#~ msgid "Editors Picks"
-#~ msgstr "Seleccións do Editor"
-
-#~ msgid "Snippets"
-#~ msgstr "Fragmentos"
-
-#~ msgid ""
-#~ "Sorry, you do not have access to create a page of type '{0}'."
-#~ msgstr ""
-#~ "Sentímolo, non tes permiso para crear unha páxina de tipo '{0}'."
-
-#~ msgid ""
-#~ "Pages of this type can only be created as children of '{0}'. "
-#~ "This new page will be saved there."
-#~ msgstr ""
-#~ "Páxinas deste tipo só poden ser creadas como fillas de '{0}'. "
-#~ "Esta nova páxina será gardada ahí."
-
-#~ msgid "The page could not be created due to errors."
-#~ msgstr "A páxina non puido ser creada debido a erros."
diff --git a/wagtail/wagtailadmin/locale/mn/LC_MESSAGES/django.po b/wagtail/wagtailadmin/locale/mn/LC_MESSAGES/django.po
index 953be6566..e8d0f5045 100644
--- a/wagtail/wagtailadmin/locale/mn/LC_MESSAGES/django.po
+++ b/wagtail/wagtailadmin/locale/mn/LC_MESSAGES/django.po
@@ -1,22 +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:
-# delgermurun , 2014
+# Delgermurun Purevkhuuu , 2014
msgid ""
msgstr ""
"Project-Id-Version: Wagtail\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2014-07-11 10:41+0000\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/"
-"language/mn/)\n"
-"Language: mn\n"
+"POT-Creation-Date: 2014-08-01 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"
"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
@@ -27,46 +26,92 @@ msgstr ""
msgid "Common page configuration"
msgstr ""
-#: forms.py:18
+#: forms.py:19
msgid "Search term"
msgstr ""
-#: forms.py:42
+#: forms.py:43
msgid "Enter your username"
msgstr ""
-#: forms.py:45
+#: forms.py:46
msgid "Enter password"
msgstr ""
-#: forms.py:50
+#: forms.py:51
msgid "Enter your email address to reset your password"
msgstr ""
-#: forms.py:59
+#: forms.py:60
msgid "Please fill your email address."
msgstr "Цахим шуудангийн хаягаа оруулна уу."
-#: forms.py:72
+#: forms.py:73
msgid ""
"Sorry, you cannot reset your password here as your user account is managed "
"by another server."
msgstr ""
-#: forms.py:75
+#: forms.py:76
msgid "This email address is not recognised."
msgstr ""
-#: forms.py:82 templates/wagtailadmin/pages/_privacy_indicator.html:13
+#: 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] ""
+
+#: 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] ""
+
+#: forms.py:124 views/pages.py:155 views/pages.py:272
+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:83
+#: forms.py:131
msgid "Private, accessible with the following password"
msgstr ""
-#: forms.py:91
+#: forms.py:139
msgid "This field is required."
msgstr ""
@@ -74,7 +119,7 @@ msgstr ""
msgid "Dashboard"
msgstr "Хянах самбар"
-#: templates/wagtailadmin/base.html:31
+#: templates/wagtailadmin/base.html:27
msgid "Menu"
msgstr ""
@@ -220,12 +265,12 @@ msgstr ""
#: templates/wagtailadmin/chooser/_search_form.html:7
#: templates/wagtailadmin/pages/search.html:3
#: templates/wagtailadmin/pages/search.html:16
-#: templatetags/wagtailadmin_tags.py:35
+#: templatetags/wagtailadmin_tags.py:36
msgid "Search"
msgstr ""
#: templates/wagtailadmin/chooser/_search_results.html:3
-#: templatetags/wagtailadmin_tags.py:34
+#: templatetags/wagtailadmin_tags.py:35
msgid "Explorer"
msgstr ""
@@ -285,7 +330,7 @@ msgstr ""
#: templates/wagtailadmin/pages/confirm_delete.html:7
#: templates/wagtailadmin/pages/edit.html:45
#: templates/wagtailadmin/pages/list.html:84
-#: templates/wagtailadmin/pages/list.html:202
+#: templates/wagtailadmin/pages/list.html:205
msgid "Delete"
msgstr ""
@@ -494,8 +539,7 @@ msgstr ""
#, 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 ""
@@ -543,8 +587,7 @@ 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] ""
@@ -598,7 +641,7 @@ 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:205
+#: templates/wagtailadmin/pages/list.html:208
msgid "Unpublish"
msgstr ""
@@ -614,6 +657,20 @@ msgstr ""
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"
@@ -667,7 +724,7 @@ msgid "Exploring %(title)s"
msgstr ""
#: templates/wagtailadmin/pages/list.html:90
-#: templates/wagtailadmin/pages/list.html:208
+#: templates/wagtailadmin/pages/list.html:211
msgid "Add child page"
msgstr ""
@@ -688,42 +745,42 @@ msgstr ""
msgid "Drag"
msgstr ""
-#: templates/wagtailadmin/pages/list.html:234
-#: templates/wagtailadmin/pages/list.html:238
+#: 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:234
-#: templates/wagtailadmin/pages/list.html:238
-#: templates/wagtailadmin/pages/list.html:242
+#: 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:242
+#: templates/wagtailadmin/pages/list.html:245
#, python-format
-msgid "Explorer child pages of '%(title)s'"
+msgid "Explore child pages of '%(title)s'"
msgstr ""
-#: templates/wagtailadmin/pages/list.html:244
+#: templates/wagtailadmin/pages/list.html:247
#, python-format
msgid "Add a child page to '%(title)s'"
msgstr ""
-#: templates/wagtailadmin/pages/list.html:244
+#: templates/wagtailadmin/pages/list.html:247
msgid "Add subpage"
msgstr ""
-#: templates/wagtailadmin/pages/list.html:253
+#: templates/wagtailadmin/pages/list.html:256
msgid "No pages have been created."
msgstr ""
-#: templates/wagtailadmin/pages/list.html:253
+#: templates/wagtailadmin/pages/list.html:256
#, python-format
msgid "Why not add one?"
msgstr ""
-#: templates/wagtailadmin/pages/list.html:260
+#: templates/wagtailadmin/pages/list.html:263
#, python-format
msgid ""
"\n"
@@ -731,7 +788,7 @@ msgid ""
" "
msgstr ""
-#: templates/wagtailadmin/pages/list.html:266
+#: 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
@@ -741,7 +798,7 @@ msgstr ""
msgid "Previous"
msgstr ""
-#: templates/wagtailadmin/pages/list.html:271
+#: 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
@@ -892,6 +949,13 @@ msgstr ""
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] ""
+
#: templates/wagtailadmin/shared/main_nav.html:10
msgid "Account settings"
msgstr ""
@@ -929,62 +993,66 @@ msgstr ""
msgid "Your preferences have been updated successfully!"
msgstr ""
-#: views/pages.py:146 views/pages.py:263
-msgid "This slug is already in use"
-msgstr ""
-
-#: views/pages.py:160 views/pages.py:277
+#: views/pages.py:169 views/pages.py:286
msgid "Go live date/time must be before expiry date/time"
msgstr ""
-#: views/pages.py:170 views/pages.py:287
+#: views/pages.py:179 views/pages.py:296
msgid "Expiry date/time must be in the future"
msgstr ""
-#: views/pages.py:210 views/pages.py:334 views/pages.py:707
+#: views/pages.py:219 views/pages.py:351 views/pages.py:791
msgid "Page '{0}' published."
msgstr ""
-#: views/pages.py:212 views/pages.py:336
+#: views/pages.py:221 views/pages.py:353
msgid "Page '{0}' submitted for moderation."
msgstr ""
-#: views/pages.py:215
+#: views/pages.py:224
msgid "Page '{0}' created."
msgstr ""
-#: views/pages.py:224
+#: views/pages.py:233
msgid "The page could not be created due to validation errors"
msgstr ""
-#: views/pages.py:339
+#: views/pages.py:356
msgid "Page '{0}' updated."
msgstr ""
-#: views/pages.py:348
+#: views/pages.py:365
msgid "The page could not be saved due to validation errors"
msgstr ""
-#: views/pages.py:361
+#: views/pages.py:378
msgid "This page is currently awaiting moderation"
msgstr ""
-#: views/pages.py:381
+#: views/pages.py:409
msgid "Page '{0}' deleted."
msgstr ""
-#: views/pages.py:543
+#: views/pages.py:575
msgid "Page '{0}' unpublished."
msgstr ""
-#: views/pages.py:594
+#: views/pages.py:627
msgid "Page '{0}' moved."
msgstr ""
-#: views/pages.py:701 views/pages.py:720 views/pages.py:740
+#: views/pages.py:709
+msgid "Page '{0}' and {1} subpages copied."
+msgstr ""
+
+#: views/pages.py:711
+msgid "Page '{0}' copied."
+msgstr ""
+
+#: views/pages.py:785 views/pages.py:804 views/pages.py:824
msgid "The page '{0}' is not currently awaiting moderation."
msgstr ""
-#: views/pages.py:726
+#: views/pages.py:810
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 72ae54ca4..b2a49d04f 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,17 +9,15 @@ msgid ""
msgstr ""
"Project-Id-Version: Wagtail\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2014-07-11 10:41+0000\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/"
-"pl/)\n"
-"Language: pl\n"
+"POT-Creation-Date: 2014-08-01 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"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"Plural-Forms: nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 "
-"|| n%100>=20) ? 1 : 2);\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"
#: edit_handlers.py:627
msgid "Scheduled publishing"
@@ -29,58 +27,102 @@ msgstr ""
msgid "Common page configuration"
msgstr "Wspólna konfiguracja stron"
-#: forms.py:18
+#: forms.py:19
msgid "Search term"
msgstr "Wyszukiwania fraza"
-#: forms.py:42
+#: forms.py:43
msgid "Enter your username"
msgstr "Wpisz nazwę użytkownika"
-#: forms.py:45
+#: forms.py:46
msgid "Enter password"
msgstr "Wpisz hasło"
-#: forms.py:50
+#: forms.py:51
msgid "Enter your email address to reset your password"
msgstr "Podaj swój adres email aby zresetować hasło"
-#: forms.py:59
+#: forms.py:60
msgid "Please fill your email address."
msgstr "Podaj swój adres email."
-#: forms.py:72
+#: forms.py:73
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:75
+#: forms.py:76
msgid "This email address is not recognised."
msgstr "Ten adres email nie został rozpoznany."
-#: forms.py:82 templates/wagtailadmin/pages/_privacy_indicator.html:13
-#: templates/wagtailadmin/pages/_privacy_indicator.html:18
-#, fuzzy
-msgid "Public"
-msgstr "Opublikuj"
+#: forms.py:88
+msgid "New title"
+msgstr ""
-#: forms.py:83
+#: 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:155 views/pages.py:272
+msgid "This slug is already in use"
+msgstr "Ten slug jest już w użyciu"
+
+#: 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:91
-#, fuzzy
+#: forms.py:139
msgid "This field is required."
-msgstr "Ten adres email nie został rozpoznany."
+msgstr ""
#: templates/wagtailadmin/base.html:7 templates/wagtailadmin/home.html:4
msgid "Dashboard"
msgstr "Kokpit"
-#: templates/wagtailadmin/base.html:31
+#: templates/wagtailadmin/base.html:27
msgid "Menu"
msgstr "Menu"
@@ -93,9 +135,7 @@ 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"
@@ -127,10 +167,7 @@ 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
@@ -157,9 +194,7 @@ 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
@@ -233,12 +268,12 @@ 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:35
+#: templatetags/wagtailadmin_tags.py:36
msgid "Search"
msgstr "Szukaj"
#: templates/wagtailadmin/chooser/_search_results.html:3
-#: templatetags/wagtailadmin_tags.py:34
+#: templatetags/wagtailadmin_tags.py:35
msgid "Explorer"
msgstr "Przeglądarka"
@@ -252,18 +287,9 @@ 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/search.html:2
@@ -308,7 +334,7 @@ msgstr "Przesuń w dół"
#: templates/wagtailadmin/pages/confirm_delete.html:7
#: templates/wagtailadmin/pages/edit.html:45
#: templates/wagtailadmin/pages/list.html:84
-#: templates/wagtailadmin/pages/list.html:202
+#: templates/wagtailadmin/pages/list.html:205
msgid "Delete"
msgstr "Usuń"
@@ -420,18 +446,9 @@ 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
@@ -443,18 +460,9 @@ 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
@@ -466,18 +474,9 @@ 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
@@ -536,9 +535,8 @@ msgid "This page has been made private by a parent page."
msgstr ""
#: templates/wagtailadmin/page_privacy/ancestor_privacy.html:7
-#, fuzzy
msgid "You can edit the privacy settings on:"
-msgstr "Możesz edytować stronę tutaj:"
+msgstr ""
#: templates/wagtailadmin/page_privacy/set_privacy.html:6
msgid "Note: privacy changes apply to all children of this page too."
@@ -548,12 +546,9 @@ msgstr ""
#, 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"
-"Podgląd '%(title)s', Wysłano przez %(submitted_by)s, %(submitted_on)s."
+msgstr "\nPodgląd '%(title)s', Wysłano przez %(submitted_by)s, %(submitted_on)s."
#: templates/wagtailadmin/pages/_privacy_indicator.html:9
msgid "Privacy"
@@ -599,32 +594,17 @@ msgid ""
" "
msgid_plural ""
"\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"
+" 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 "
#: 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"
@@ -655,9 +635,7 @@ 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"
@@ -671,7 +649,7 @@ msgstr "Cofnij publikację %(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:205
+#: templates/wagtailadmin/pages/list.html:208
msgid "Unpublish"
msgstr "Cofnij publikację"
@@ -687,6 +665,20 @@ msgstr "Tak, cofnij publikację"
msgid "Pages using"
msgstr "Strony używające"
+#: 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"
@@ -740,7 +732,7 @@ msgid "Exploring %(title)s"
msgstr "Przeglądaj %(title)s"
#: templates/wagtailadmin/pages/list.html:90
-#: templates/wagtailadmin/pages/list.html:208
+#: templates/wagtailadmin/pages/list.html:211
msgid "Add child page"
msgstr "Dodaj stronę podrzędną"
@@ -761,53 +753,50 @@ msgstr "Włącz sortowanie stron podrzędnych"
msgid "Drag"
msgstr "Przeciągnij"
-#: templates/wagtailadmin/pages/list.html:234
-#: templates/wagtailadmin/pages/list.html:238
+#: templates/wagtailadmin/pages/list.html:237
+#: templates/wagtailadmin/pages/list.html:241
#, python-format
msgid "Explorer subpages of '%(title)s'"
msgstr "Przeglądarka podstron '%(title)s'"
-#: templates/wagtailadmin/pages/list.html:234
-#: templates/wagtailadmin/pages/list.html:238
-#: templates/wagtailadmin/pages/list.html:242
+#: templates/wagtailadmin/pages/list.html:237
+#: templates/wagtailadmin/pages/list.html:241
+#: templates/wagtailadmin/pages/list.html:245
msgid "Explore"
msgstr "Przeglądaj"
-#: templates/wagtailadmin/pages/list.html:242
+#: templates/wagtailadmin/pages/list.html:245
#, python-format
-msgid "Explorer child pages of '%(title)s'"
-msgstr "Przeglądarka stron podrzędnych '%(title)s'"
+msgid "Explore child pages of '%(title)s'"
+msgstr ""
-#: templates/wagtailadmin/pages/list.html:244
+#: templates/wagtailadmin/pages/list.html:247
#, python-format
msgid "Add a child page to '%(title)s'"
msgstr "Dodaj stronę podrzędną do '%(title)s'"
-#: templates/wagtailadmin/pages/list.html:244
+#: templates/wagtailadmin/pages/list.html:247
msgid "Add subpage"
msgstr "Dodaj podstronę"
-#: templates/wagtailadmin/pages/list.html:253
+#: templates/wagtailadmin/pages/list.html:256
msgid "No pages have been created."
msgstr "Żadna strona nie została stworzona"
-#: templates/wagtailadmin/pages/list.html:253
+#: templates/wagtailadmin/pages/list.html:256
#, python-format
msgid "Why not add one?"
msgstr "Czemu nie dodać kilku?"
-#: templates/wagtailadmin/pages/list.html:260
-#, fuzzy, python-format
+#: templates/wagtailadmin/pages/list.html:263
+#, python-format
msgid ""
"\n"
" Page %(page_number)s of %(num_pages)s.\n"
" "
msgstr ""
-"\n"
-" Strona %(page_number)s z %(num_pages)s.\n"
-" "
-#: templates/wagtailadmin/pages/list.html:266
+#: 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
@@ -817,7 +806,7 @@ msgstr ""
msgid "Previous"
msgstr "Wstecz"
-#: templates/wagtailadmin/pages/list.html:271
+#: 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
@@ -838,7 +827,7 @@ msgid "Select a new parent page for %(title)s"
msgstr "Wybierz nową stronę nadrzędną dla %(title)s"
#: templates/wagtailadmin/pages/search_results.html:6
-#, fuzzy, python-format
+#, python-format
msgid ""
"\n"
" There is one matching page\n"
@@ -848,17 +837,8 @@ msgid_plural ""
" There are %(counter)s matching pages\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/pages/search_results.html:16
msgid "Other searches"
@@ -883,10 +863,7 @@ 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
@@ -898,9 +875,8 @@ msgid "Enter a search term above"
msgstr "Wpisz wyszukiwany ciąg powyżej"
#: templates/wagtailadmin/pages/usage_results.html:24
-#, fuzzy
msgid "No pages use"
-msgstr "Strony używające"
+msgstr ""
#: templates/wagtailadmin/shared/breadcrumb.html:6
msgid "Home"
@@ -915,9 +891,8 @@ msgid "February"
msgstr ""
#: templates/wagtailadmin/shared/datetimepicker_translations.html:8
-#, fuzzy
msgid "March"
-msgstr "Szukaj"
+msgstr ""
#: templates/wagtailadmin/shared/datetimepicker_translations.html:9
msgid "April"
@@ -980,9 +955,16 @@ msgid "Fri"
msgstr ""
#: templates/wagtailadmin/shared/datetimepicker_translations.html:26
-#, fuzzy
msgid "Sat"
-msgstr "Status"
+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"
@@ -998,9 +980,8 @@ msgid "Page %(page_num)s of %(total_pages)s."
msgstr "Strona %(page_num)s z %(total_pages)s."
#: templates/wagtailadmin/userbar/base.html:4
-#, fuzzy
msgid "User bar"
-msgstr "Użytkownicy"
+msgstr ""
#: templates/wagtailadmin/userbar/base.html:14
msgid "Go to Wagtail admin interface"
@@ -1019,122 +1000,69 @@ msgid "Your password has been changed successfully!"
msgstr "Twoje hasło zostało zmienione poprawnie!"
#: views/account.py:60
-#, fuzzy
msgid "Your preferences have been updated successfully!"
-msgstr "Twoje hasło zostało zmienione poprawnie!"
+msgstr ""
-#: views/pages.py:146 views/pages.py:263
-msgid "This slug is already in use"
-msgstr "Ten slug jest już w użyciu"
-
-#: views/pages.py:160 views/pages.py:277
+#: views/pages.py:169 views/pages.py:286
msgid "Go live date/time must be before expiry date/time"
msgstr ""
-#: views/pages.py:170 views/pages.py:287
+#: views/pages.py:179 views/pages.py:296
msgid "Expiry date/time must be in the future"
msgstr ""
-#: views/pages.py:210 views/pages.py:334 views/pages.py:707
+#: views/pages.py:219 views/pages.py:351 views/pages.py:791
msgid "Page '{0}' published."
msgstr "Strona '{0}' została opublikowana."
-#: views/pages.py:212 views/pages.py:336
+#: views/pages.py:221 views/pages.py:353
msgid "Page '{0}' submitted for moderation."
msgstr "Przesłano stronę '{0}' do przeglądu."
-#: views/pages.py:215
+#: views/pages.py:224
msgid "Page '{0}' created."
msgstr "Stworzono stronę '{0}'."
-#: views/pages.py:224
-#, fuzzy
+#: views/pages.py:233
msgid "The page could not be created due to validation errors"
-msgstr "Strona nie mogła zostać zapisana z powodu błędów poprawności."
+msgstr ""
-#: views/pages.py:339
+#: views/pages.py:356
msgid "Page '{0}' updated."
msgstr "Uaktualniono stronę '{0}'."
-#: views/pages.py:348
+#: views/pages.py:365
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:361
+#: views/pages.py:378
msgid "This page is currently awaiting moderation"
msgstr "Ta strona oczekuje na przejrzenie."
-#: views/pages.py:381
+#: views/pages.py:409
msgid "Page '{0}' deleted."
msgstr "Usunięto stronę '{0}'."
-#: views/pages.py:543
+#: views/pages.py:575
msgid "Page '{0}' unpublished."
msgstr "Cofnięto publikację strony '{0}'."
-#: views/pages.py:594
+#: views/pages.py:627
msgid "Page '{0}' moved."
msgstr "Przesunięto stronę '{0}'."
-#: views/pages.py:701 views/pages.py:720 views/pages.py:740
+#: views/pages.py:709
+msgid "Page '{0}' and {1} subpages copied."
+msgstr ""
+
+#: views/pages.py:711
+msgid "Page '{0}' copied."
+msgstr ""
+
+#: views/pages.py:785 views/pages.py:804 views/pages.py:824
msgid "The page '{0}' is not currently awaiting moderation."
msgstr "Strona '{0}' nie oczekuje na przejrzenie."
-#: views/pages.py:726
+#: views/pages.py:810
msgid "Page '{0}' rejected for publication."
msgstr "Strona '{0}' została odrzucona."
-
-#~ msgid "Please type a valid time"
-#~ msgstr "Proszę wpisać poprawny czas"
-
-#~ msgid "View draft"
-#~ msgstr "Pokaż szkic"
-
-#~ msgid "View live"
-#~ msgstr "Pokaż na żywo"
-
-#~ msgid "Status:"
-#~ msgstr "Status:"
-
-#~ msgid "Where do you want to create a %(page_type)s"
-#~ msgstr "Gdzie chcesz stworzyć %(page_type)s"
-
-#~ msgid "Where do you want to create this"
-#~ msgstr "Gdzie chcesz stworzyć"
-
-#~ msgid "Create a new page"
-#~ msgstr "Stwórz nową stronę"
-
-#~ msgid ""
-#~ "Your new page will be saved in the top level of your website. "
-#~ "You can move it after saving."
-#~ msgstr ""
-#~ "Twoja nowa strona zostanie zapisana w najwyższym poziomie. "
-#~ "Możesz ją przesunąć po zapisaniu."
-
-#~ msgid "More"
-#~ msgstr "Więcej"
-
-#~ msgid "Redirects"
-#~ msgstr "Przekierowania"
-
-#~ msgid "Editors Picks"
-#~ msgstr "Wybór redakcji"
-
-#~ msgid "Snippets"
-#~ msgstr "Snippety"
-
-#~ msgid ""
-#~ "Sorry, you do not have access to create a page of type '{0}'."
-#~ msgstr ""
-#~ "Przepraszamy, nie masz uprawnień do stworzenia strony typu '{0}'."
-
-#~ msgid ""
-#~ "Pages of this type can only be created as children of '{0}'. "
-#~ "This new page will be saved there."
-#~ msgstr ""
-#~ "Strony tego typu mogą zostać stworzone tylko jako strony podrzędne "
-#~ "'{0}'. Ta strona zostanie tam zapisana."
-
-#~ msgid "The page could not be created due to errors."
-#~ msgstr "Strona nie mogła zostać stworzona z powodu błędów."
diff --git a/wagtail/wagtailadmin/locale/pt_BR/LC_MESSAGES/django.po b/wagtail/wagtailadmin/locale/pt_BR/LC_MESSAGES/django.po
index 47de826c3..d30aaa5f0 100644
--- a/wagtail/wagtailadmin/locale/pt_BR/LC_MESSAGES/django.po
+++ b/wagtail/wagtailadmin/locale/pt_BR/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.
-# FIRST AUTHOR , YEAR.
-#
-#, fuzzy
+#
+# Translators:
+# Douglas Miranda , 2014
+# Gladson , 2014
msgid ""
msgstr ""
-"Project-Id-Version: PACKAGE VERSION\n"
+"Project-Id-Version: Wagtail\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2014-07-11 10:41+0000\n"
-"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
-"Last-Translator: FULL NAME \n"
-"Language-Team: LANGUAGE \n"
-"Language: \n"
+"POT-Creation-Date: 2014-08-01 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"
#: edit_handlers.py:627
@@ -26,58 +27,100 @@ msgstr ""
msgid "Common page configuration"
msgstr "Configuração comum de página"
-#: forms.py:18
+#: forms.py:19
msgid "Search term"
msgstr "Termo de pesquisa"
-#: forms.py:42
+#: forms.py:43
msgid "Enter your username"
msgstr "Digite seu usuário"
-#: forms.py:45
+#: forms.py:46
msgid "Enter password"
msgstr "Digite sua senha"
-#: forms.py:50
+#: forms.py:51
msgid "Enter your email address to reset your password"
msgstr "Entre com seu email para resetar sua senha"
-#: forms.py:59
+#: forms.py:60
msgid "Please fill your email address."
-msgstr "Por favor, insira o seu e-mail"
+msgstr "Por favor, insira o seu e-mail."
-#: forms.py:72
+#: 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 resetar 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:75
+#: forms.py:76
msgid "This email address is not recognised."
msgstr "Esse e-mail não é reconhecido."
-#: forms.py:82 templates/wagtailadmin/pages/_privacy_indicator.html:13
-#: templates/wagtailadmin/pages/_privacy_indicator.html:18
-#, fuzzy
-msgid "Public"
-msgstr "Publicar"
-
-#: forms.py:83
-msgid "Private, accessible with the following password"
+#: forms.py:88
+msgid "New title"
msgstr ""
-#: forms.py:91
-#, fuzzy
+#: 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] ""
+
+#: 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] ""
+
+#: 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 "Esse e-mail não é reconhecido."
+msgstr "Este campo é obrigatório."
#: templates/wagtailadmin/base.html:7 templates/wagtailadmin/home.html:4
msgid "Dashboard"
msgstr "Painel"
-#: templates/wagtailadmin/base.html:31
+#: templates/wagtailadmin/base.html:27
msgid "Menu"
msgstr "Menu"
@@ -90,9 +133,7 @@ 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"
@@ -124,10 +165,7 @@ 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
@@ -141,7 +179,7 @@ msgstr "Altere sua senha para entrar."
#: templates/wagtailadmin/account/account.html:36
msgid "Notification preferences"
-msgstr ""
+msgstr "Preferências de notificação"
#: templates/wagtailadmin/account/account.html:40
msgid "Choose which email notifications to receive."
@@ -159,11 +197,11 @@ msgstr "Sua senha não pode ser alterada. Contacte o administrador do site."
#: templates/wagtailadmin/account/notification_preferences.html:4
#: templates/wagtailadmin/account/notification_preferences.html:6
msgid "Notification Preferences"
-msgstr ""
+msgstr "Preferências de notificação"
#: templates/wagtailadmin/account/notification_preferences.html:16
msgid "Update"
-msgstr ""
+msgstr "Atualizar"
#: templates/wagtailadmin/account/password_reset/complete.html:4
#: templates/wagtailadmin/account/password_reset/confirm.html:42
@@ -228,12 +266,12 @@ 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:35
+#: templatetags/wagtailadmin_tags.py:36
msgid "Search"
msgstr "Pesquisa"
#: templates/wagtailadmin/chooser/_search_results.html:3
-#: templatetags/wagtailadmin_tags.py:34
+#: templatetags/wagtailadmin_tags.py:35
msgid "Explorer"
msgstr "Explorar"
@@ -247,14 +285,8 @@ 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/search.html:2
@@ -299,7 +331,7 @@ msgstr "Mover abaixo"
#: templates/wagtailadmin/pages/confirm_delete.html:7
#: templates/wagtailadmin/pages/edit.html:45
#: templates/wagtailadmin/pages/list.html:84
-#: templates/wagtailadmin/pages/list.html:202
+#: templates/wagtailadmin/pages/list.html:205
msgid "Delete"
msgstr "Excluir"
@@ -395,7 +427,7 @@ msgstr "Rascunho"
#: templates/wagtailadmin/pages/list.html:78
#: templates/wagtailadmin/pages/list.html:196
msgid "Live"
-msgstr "Aplicado"
+msgstr "Ao vivo"
#: templates/wagtailadmin/home/site_summary.html:3
msgid "Site summary"
@@ -411,14 +443,8 @@ 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
@@ -430,14 +456,8 @@ 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
@@ -449,14 +469,8 @@ 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
@@ -474,7 +488,7 @@ msgstr "Você pode visualizar a página aqui:"
#: templates/wagtailadmin/notifications/base_notification.html:3
msgid "Edit your notification preferences here:"
-msgstr ""
+msgstr "Edite suas preferências de notificação aqui:"
#: templates/wagtailadmin/notifications/rejected.html:1
#, python-format
@@ -508,16 +522,15 @@ msgstr "Você pode 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 ""
+msgstr "Página privada"
#: 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
-#, fuzzy
msgid "You can edit the privacy settings on:"
-msgstr "Você pode editar sua página:"
+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."
@@ -527,14 +540,9 @@ msgstr ""
#, python-format
msgid ""
"\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"
+" 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 "
#: templates/wagtailadmin/pages/_privacy_indicator.html:9
msgid "Privacy"
@@ -580,26 +588,16 @@ msgid ""
" "
msgid_plural ""
"\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"
+" 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 "
#: 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"
@@ -630,8 +628,7 @@ 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"
@@ -645,7 +642,7 @@ 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:205
+#: templates/wagtailadmin/pages/list.html:208
msgid "Unpublish"
msgstr "Despublicar"
@@ -661,6 +658,20 @@ msgstr "Sim, quero despublicar"
msgid "Pages using"
msgstr "Usando páginas"
+#: 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"
@@ -714,7 +725,7 @@ msgid "Exploring %(title)s"
msgstr "Explorando %(title)s"
#: templates/wagtailadmin/pages/list.html:90
-#: templates/wagtailadmin/pages/list.html:208
+#: templates/wagtailadmin/pages/list.html:211
msgid "Add child page"
msgstr "Adicionar página filha"
@@ -735,53 +746,50 @@ msgstr "Habilitar ordenação de páginas filhas"
msgid "Drag"
msgstr "Arrastar"
-#: templates/wagtailadmin/pages/list.html:234
-#: templates/wagtailadmin/pages/list.html:238
+#: 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:234
-#: templates/wagtailadmin/pages/list.html:238
-#: templates/wagtailadmin/pages/list.html:242
+#: 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:242
+#: templates/wagtailadmin/pages/list.html:245
#, python-format
-msgid "Explorer child pages of '%(title)s'"
-msgstr "Explorar páginas filhas de %(title)s"
+msgid "Explore child pages of '%(title)s'"
+msgstr ""
-#: templates/wagtailadmin/pages/list.html:244
+#: templates/wagtailadmin/pages/list.html:247
#, python-format
msgid "Add a child page to '%(title)s'"
msgstr "Adicionar página filha de %(title)s"
-#: templates/wagtailadmin/pages/list.html:244
+#: templates/wagtailadmin/pages/list.html:247
msgid "Add subpage"
msgstr "Adicionar sub-página"
-#: templates/wagtailadmin/pages/list.html:253
+#: templates/wagtailadmin/pages/list.html:256
msgid "No pages have been created."
msgstr "Nenhuma página foi criada."
-#: templates/wagtailadmin/pages/list.html:253
+#: templates/wagtailadmin/pages/list.html:256
#, python-format
msgid "Why not add one?"
msgstr "Porque não adicionar uma?"
-#: templates/wagtailadmin/pages/list.html:260
-#, fuzzy, python-format
+#: 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"
-" "
+msgstr "\n Página %(page_number)s de %(num_pages)s.\n "
-#: templates/wagtailadmin/pages/list.html:266
+#: 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
@@ -791,7 +799,7 @@ msgstr ""
msgid "Previous"
msgstr "Anterior"
-#: templates/wagtailadmin/pages/list.html:271
+#: 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
@@ -821,18 +829,12 @@ msgid_plural ""
"\n"
" There are %(counter)s matching pages\n"
" "
-msgstr[0] ""
-"\n"
-" Existe uma página correspondente\n"
-" "
-msgstr[1] ""
-"\n"
-" Existe %(counter)s páginas correspondentes\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"
-msgstr "Outras pesquisas"
+msgstr "Outras buscas"
#: templates/wagtailadmin/pages/search_results.html:18
msgid "Images"
@@ -853,10 +855,7 @@ 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
@@ -868,9 +867,8 @@ msgid "Enter a search term above"
msgstr "Entre com termo de pesquisa acima"
#: templates/wagtailadmin/pages/usage_results.html:24
-#, fuzzy
msgid "No pages use"
-msgstr "Usando páginas"
+msgstr ""
#: templates/wagtailadmin/shared/breadcrumb.html:6
msgid "Home"
@@ -878,81 +876,86 @@ msgstr "Início"
#: templates/wagtailadmin/shared/datetimepicker_translations.html:6
msgid "January"
-msgstr ""
+msgstr "Janeiro"
#: templates/wagtailadmin/shared/datetimepicker_translations.html:7
msgid "February"
-msgstr ""
+msgstr "Fevereiro"
#: templates/wagtailadmin/shared/datetimepicker_translations.html:8
-#, fuzzy
msgid "March"
-msgstr "Pesquisa"
+msgstr "Março"
#: templates/wagtailadmin/shared/datetimepicker_translations.html:9
msgid "April"
-msgstr ""
+msgstr "Abril"
#: templates/wagtailadmin/shared/datetimepicker_translations.html:10
msgid "May"
-msgstr ""
+msgstr "Maio"
#: templates/wagtailadmin/shared/datetimepicker_translations.html:11
msgid "June"
-msgstr ""
+msgstr "Junho"
#: templates/wagtailadmin/shared/datetimepicker_translations.html:12
msgid "July"
-msgstr ""
+msgstr "Julho"
#: templates/wagtailadmin/shared/datetimepicker_translations.html:13
msgid "August"
-msgstr ""
+msgstr "Agosto"
#: templates/wagtailadmin/shared/datetimepicker_translations.html:14
msgid "September"
-msgstr ""
+msgstr "Setembro"
#: templates/wagtailadmin/shared/datetimepicker_translations.html:15
msgid "October"
-msgstr ""
+msgstr "Outubro"
#: templates/wagtailadmin/shared/datetimepicker_translations.html:16
msgid "November"
-msgstr ""
+msgstr "Novembro"
#: templates/wagtailadmin/shared/datetimepicker_translations.html:17
msgid "December"
-msgstr ""
+msgstr "Dezembro"
#: templates/wagtailadmin/shared/datetimepicker_translations.html:20
msgid "Sun"
-msgstr ""
+msgstr "Dom"
#: templates/wagtailadmin/shared/datetimepicker_translations.html:21
msgid "Mon"
-msgstr ""
+msgstr "Seg"
#: templates/wagtailadmin/shared/datetimepicker_translations.html:22
msgid "Tue"
-msgstr ""
+msgstr "Ter"
#: templates/wagtailadmin/shared/datetimepicker_translations.html:23
msgid "Wed"
-msgstr ""
+msgstr "Qua"
#: templates/wagtailadmin/shared/datetimepicker_translations.html:24
msgid "Thu"
-msgstr ""
+msgstr "Qui"
#: templates/wagtailadmin/shared/datetimepicker_translations.html:25
msgid "Fri"
-msgstr ""
+msgstr "Sex"
#: templates/wagtailadmin/shared/datetimepicker_translations.html:26
-#, fuzzy
msgid "Sat"
-msgstr "Status"
+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] ""
+msgstr[1] ""
#: templates/wagtailadmin/shared/main_nav.html:10
msgid "Account settings"
@@ -969,139 +972,88 @@ msgstr "Página %(page_num)s de %(total_pages)s."
#: templates/wagtailadmin/userbar/base.html:4
msgid "User bar"
-msgstr "Barra do Usuário"
+msgstr ""
#: templates/wagtailadmin/userbar/base.html:14
msgid "Go to Wagtail admin interface"
-msgstr "Ir para Interface Administrativa"
+msgstr ""
#: templates/wagtailadmin/userbar/item_page_add.html:5
msgid "Add another page at this level"
-msgstr "Adicionar outra página neste nivel"
+msgstr ""
#: templates/wagtailadmin/userbar/item_page_add.html:5
msgid "Add"
-msgstr "Adicionar"
+msgstr "Add"
#: views/account.py:39
msgid "Your password has been changed successfully!"
msgstr "Sua senha foi alterada com sucesso!"
#: views/account.py:60
-#, fuzzy
msgid "Your preferences have been updated successfully!"
-msgstr "Sua senha foi alterada com sucesso!"
+msgstr ""
-#: views/pages.py:146 views/pages.py:263
-msgid "This slug is already in use"
-msgstr "Esse endereço já existe"
-
-#: views/pages.py:160 views/pages.py:277
+#: views/pages.py:169 views/pages.py:286
msgid "Go live date/time must be before expiry date/time"
msgstr ""
-#: views/pages.py:170 views/pages.py:287
+#: views/pages.py:179 views/pages.py:296
msgid "Expiry date/time must be in the future"
msgstr ""
-#: views/pages.py:210 views/pages.py:334 views/pages.py:707
+#: views/pages.py:219 views/pages.py:351 views/pages.py:791
msgid "Page '{0}' published."
msgstr "Página '{0}' publicada."
-#: views/pages.py:212 views/pages.py:336
+#: 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:215
+#: views/pages.py:224
msgid "Page '{0}' created."
msgstr "Página '{0}' criada."
-#: views/pages.py:224
-#, fuzzy
+#: views/pages.py:233
msgid "The page could not be created due to validation errors"
-msgstr "A página não pode ser salva devido a erros de validação"
+msgstr ""
-#: views/pages.py:339
+#: views/pages.py:356
msgid "Page '{0}' updated."
msgstr "Página '{0}' atualizada."
-#: views/pages.py:348
+#: views/pages.py:365
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:361
+#: views/pages.py:378
msgid "This page is currently awaiting moderation"
msgstr "Essa página está atualmente esperando moderação"
-#: views/pages.py:381
+#: views/pages.py:409
msgid "Page '{0}' deleted."
msgstr "Página '{0}' excluida."
-#: views/pages.py:543
+#: views/pages.py:575
msgid "Page '{0}' unpublished."
msgstr "Página '{0}' despublicada."
-#: views/pages.py:594
+#: views/pages.py:627
msgid "Page '{0}' moved."
msgstr "Página '{0}' movida."
-#: views/pages.py:701 views/pages.py:720 views/pages.py:740
+#: views/pages.py:709
+msgid "Page '{0}' and {1} subpages copied."
+msgstr ""
+
+#: views/pages.py:711
+msgid "Page '{0}' copied."
+msgstr ""
+
+#: 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}' não está mais esperando moderação."
-#: views/pages.py:726
+#: views/pages.py:810
msgid "Page '{0}' rejected for publication."
msgstr "Página '{0}' rejeitada para publicação."
-
-#~ msgid "Please type a valid time"
-#~ msgstr "Por favor, insira um hora válida"
-
-#~ msgid "Status:"
-#~ msgstr "Status:"
-
-#~ msgid "Where do you want to create a %(page_type)s"
-#~ msgstr "Aonde você deseja criar um %(page_type)s"
-
-#~ msgid "Where do you want to create this"
-#~ msgstr "Aonde deseje criar isto"
-
-#~ msgid "Create a new page"
-#~ msgstr "Criar nova página"
-
-#~ msgid ""
-#~ "Your new page will be saved in the top level of your website. "
-#~ "You can move it after saving."
-#~ msgstr ""
-#~ "Sua nova página será salva no nível superior do seu site. Você "
-#~ "pode mover depois de salvar."
-
-#~ msgid "Less"
-#~ msgstr "Menos"
-
-#~ msgid "More"
-#~ msgstr "Mais"
-
-#~ msgid "Redirects"
-#~ msgstr "Redirecionamentos"
-
-#~ msgid "Editors Picks"
-#~ msgstr "Dicas de Redação"
-
-#~ msgid "Snippets"
-#~ msgstr "Trechos"
-
-#~ msgid ""
-#~ "Sorry, you do not have access to create a page of type '{0}'."
-#~ msgstr ""
-#~ "Desculpe, você não tem permissão para criar uma página do tipo {0}"
-#~ "em>"
-
-#~ msgid ""
-#~ "Pages of this type can only be created as children of '{0}'. "
-#~ "This new page will be saved there."
-#~ msgstr ""
-#~ "Páginas desse tipo somente pode ser criada como filho de {0}. "
-#~ "Esta nova página será salva lá."
-
-#~ msgid "The page could not be created due to errors."
-#~ msgstr "A página não pode ser criado devido a erros."
diff --git a/wagtail/wagtailadmin/locale/ro/LC_MESSAGES/django.po b/wagtail/wagtailadmin/locale/ro/LC_MESSAGES/django.po
index 0bccf350a..4967b5f5f 100644
--- a/wagtail/wagtailadmin/locale/ro/LC_MESSAGES/django.po
+++ b/wagtail/wagtailadmin/locale/ro/LC_MESSAGES/django.po
@@ -1,24 +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:
-# zerolab, 2014
+# Dan Braghis, 2014
msgid ""
msgstr ""
"Project-Id-Version: Wagtail\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2014-07-11 10:41+0000\n"
-"PO-Revision-Date: 2014-03-18 13:19+0000\n"
-"Last-Translator: zerolab\n"
-"Language-Team: Romanian (http://www.transifex.com/projects/p/wagtail/"
-"language/ro/)\n"
-"Language: ro\n"
+"POT-Creation-Date: 2014-08-01 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"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"Plural-Forms: nplurals=3; plural=(n==1?0:(((n%100>19)||((n%100==0)&&(n!=0)))?"
-"2:1));\n"
+"Language: ro\n"
+"Plural-Forms: nplurals=3; plural=(n==1?0:(((n%100>19)||((n%100==0)&&(n!=0)))?2:1));\n"
#: edit_handlers.py:627
msgid "Scheduled publishing"
@@ -28,58 +26,102 @@ msgstr ""
msgid "Common page configuration"
msgstr "Configurație de pagini generală"
-#: forms.py:18
+#: forms.py:19
msgid "Search term"
msgstr "Termen de căutare"
-#: forms.py:42
+#: forms.py:43
msgid "Enter your username"
msgstr "Introduceți numele de utilizator"
-#: forms.py:45
+#: forms.py:46
msgid "Enter password"
msgstr "Introduceți parola"
-#: forms.py:50
+#: forms.py:51
msgid "Enter your email address to reset your password"
msgstr "Introduceți adresa de e-mail pentru a reseta parola"
-#: forms.py:59
+#: forms.py:60
msgid "Please fill your email address."
msgstr "Introduceți adresa de e-mail."
-#: forms.py:72
+#: forms.py:73
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:75
+#: forms.py:76
msgid "This email address is not recognised."
msgstr "Adresa e-mail nu este recunoscută."
-#: forms.py:82 templates/wagtailadmin/pages/_privacy_indicator.html:13
-#: templates/wagtailadmin/pages/_privacy_indicator.html:18
-#, fuzzy
-msgid "Public"
-msgstr "Publică"
+#: forms.py:88
+msgid "New title"
+msgstr ""
-#: forms.py:83
+#: 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:155 views/pages.py:272
+msgid "This slug is already in use"
+msgstr "Această fisă a fost deja folosită"
+
+#: 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:91
-#, fuzzy
+#: forms.py:139
msgid "This field is required."
-msgstr "Adresa e-mail nu este recunoscută."
+msgstr ""
#: templates/wagtailadmin/base.html:7 templates/wagtailadmin/home.html:4
msgid "Dashboard"
msgstr "Bord"
-#: templates/wagtailadmin/base.html:31
+#: templates/wagtailadmin/base.html:27
msgid "Menu"
msgstr "Meniu"
@@ -100,8 +142,7 @@ 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"
@@ -125,10 +166,7 @@ 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
@@ -155,9 +193,7 @@ 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
@@ -231,12 +267,12 @@ 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:35
+#: templatetags/wagtailadmin_tags.py:36
msgid "Search"
msgstr "Căutare"
#: templates/wagtailadmin/chooser/_search_results.html:3
-#: templatetags/wagtailadmin_tags.py:34
+#: templatetags/wagtailadmin_tags.py:35
msgid "Explorer"
msgstr "Explorator"
@@ -250,15 +286,9 @@ msgid_plural ""
"\n"
" There are %(counter)s matches\n"
" "
-msgstr[0] ""
-"\n"
-"Există o potrivire"
-msgstr[1] ""
-"\n"
-"Sunt %(counter)s potriviri"
-msgstr[2] ""
-"\n"
-"Sunt %(counter)s potriviri"
+msgstr[0] "\nExistă o potrivire"
+msgstr[1] "\nSunt %(counter)s potriviri"
+msgstr[2] "\nSunt %(counter)s potriviri"
#: templates/wagtailadmin/chooser/browse.html:2
#: templates/wagtailadmin/chooser/search.html:2
@@ -303,7 +333,7 @@ msgstr "Deplasează în jos"
#: templates/wagtailadmin/pages/confirm_delete.html:7
#: templates/wagtailadmin/pages/edit.html:45
#: templates/wagtailadmin/pages/list.html:84
-#: templates/wagtailadmin/pages/list.html:202
+#: templates/wagtailadmin/pages/list.html:205
msgid "Delete"
msgstr "Șterge"
@@ -415,15 +445,9 @@ 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
@@ -435,15 +459,9 @@ 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
@@ -455,15 +473,9 @@ 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
@@ -522,9 +534,8 @@ msgid "This page has been made private by a parent page."
msgstr ""
#: templates/wagtailadmin/page_privacy/ancestor_privacy.html:7
-#, fuzzy
msgid "You can edit the privacy settings on:"
-msgstr "Puteți edita pagina aici:"
+msgstr ""
#: templates/wagtailadmin/page_privacy/set_privacy.html:6
msgid "Note: privacy changes apply to all children of this page too."
@@ -534,13 +545,9 @@ msgstr ""
#, 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"
-"Examinare '%(title)s', trimisă de %(submitted_by)s pe data de "
-"%(submitted_on)s."
+msgstr "\nExaminare '%(title)s', trimisă de %(submitted_by)s pe data de %(submitted_on)s."
#: templates/wagtailadmin/pages/_privacy_indicator.html:9
msgid "Privacy"
@@ -586,26 +593,17 @@ 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"
-"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."
+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."
#: 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"
@@ -636,8 +634,7 @@ 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"
@@ -651,7 +648,7 @@ msgstr "Anulează publicarea %(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:205
+#: templates/wagtailadmin/pages/list.html:208
msgid "Unpublish"
msgstr "Anulează publicarea"
@@ -667,6 +664,20 @@ msgstr "Da, anulează publicarea"
msgid "Pages using"
msgstr "Pagini cu"
+#: 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"
@@ -720,7 +731,7 @@ msgid "Exploring %(title)s"
msgstr "Explorare %(title)s"
#: templates/wagtailadmin/pages/list.html:90
-#: templates/wagtailadmin/pages/list.html:208
+#: templates/wagtailadmin/pages/list.html:211
msgid "Add child page"
msgstr "Adaugă pagină dependentă"
@@ -741,52 +752,50 @@ msgstr "Activează rânduirea paginilor dependente"
msgid "Drag"
msgstr "Glisează"
-#: templates/wagtailadmin/pages/list.html:234
-#: templates/wagtailadmin/pages/list.html:238
+#: templates/wagtailadmin/pages/list.html:237
+#: templates/wagtailadmin/pages/list.html:241
#, python-format
msgid "Explorer subpages of '%(title)s'"
msgstr "Explorează subpaginile '%(title)s'"
-#: templates/wagtailadmin/pages/list.html:234
-#: templates/wagtailadmin/pages/list.html:238
-#: templates/wagtailadmin/pages/list.html:242
+#: templates/wagtailadmin/pages/list.html:237
+#: templates/wagtailadmin/pages/list.html:241
+#: templates/wagtailadmin/pages/list.html:245
msgid "Explore"
msgstr "Explorează"
-#: templates/wagtailadmin/pages/list.html:242
+#: templates/wagtailadmin/pages/list.html:245
#, python-format
-msgid "Explorer child pages of '%(title)s'"
-msgstr "Explorează paginile dependente de '%(title)s'"
+msgid "Explore child pages of '%(title)s'"
+msgstr ""
-#: templates/wagtailadmin/pages/list.html:244
+#: templates/wagtailadmin/pages/list.html:247
#, python-format
msgid "Add a child page to '%(title)s'"
msgstr "Adaugă o pagină dependentă de '%(title)s'"
-#: templates/wagtailadmin/pages/list.html:244
+#: templates/wagtailadmin/pages/list.html:247
msgid "Add subpage"
msgstr "Adaugă subpagină"
-#: templates/wagtailadmin/pages/list.html:253
+#: templates/wagtailadmin/pages/list.html:256
msgid "No pages have been created."
msgstr "Nu a fost creată nici o pagină."
-#: templates/wagtailadmin/pages/list.html:253
+#: templates/wagtailadmin/pages/list.html:256
#, python-format
msgid "Why not add one?"
msgstr "De ce să nu adăugați una?"
-#: templates/wagtailadmin/pages/list.html:260
-#, fuzzy, python-format
+#: templates/wagtailadmin/pages/list.html:263
+#, python-format
msgid ""
"\n"
" Page %(page_number)s of %(num_pages)s.\n"
" "
msgstr ""
-"\n"
-"Pagina %(page_number)s din %(num_pages)s."
-#: templates/wagtailadmin/pages/list.html:266
+#: 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
@@ -796,7 +805,7 @@ msgstr ""
msgid "Previous"
msgstr "Precedent"
-#: templates/wagtailadmin/pages/list.html:271
+#: 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
@@ -817,7 +826,7 @@ msgid "Select a new parent page for %(title)s"
msgstr "Selectează o pagină de bază nouă pentru %(title)s"
#: templates/wagtailadmin/pages/search_results.html:6
-#, fuzzy, python-format
+#, python-format
msgid ""
"\n"
" There is one matching page\n"
@@ -827,14 +836,8 @@ msgid_plural ""
" There are %(counter)s matching pages\n"
" "
msgstr[0] ""
-"\n"
-"Există o potrivire"
msgstr[1] ""
-"\n"
-"Sunt %(counter)s potriviri"
msgstr[2] ""
-"\n"
-"Sunt %(counter)s potriviri"
#: templates/wagtailadmin/pages/search_results.html:16
msgid "Other searches"
@@ -859,24 +862,20 @@ msgid ""
"\n"
" Page %(page_number)s of %(num_pages)s.\n"
" "
-msgstr ""
-"\n"
-"Pagina %(page_number)s din %(num_pages)s."
+msgstr "\nPagina %(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"
msgstr "Introduceți termenii de căutare mai sus"
#: templates/wagtailadmin/pages/usage_results.html:24
-#, fuzzy
msgid "No pages use"
-msgstr "Pagini cu"
+msgstr ""
#: templates/wagtailadmin/shared/breadcrumb.html:6
msgid "Home"
@@ -891,9 +890,8 @@ msgid "February"
msgstr ""
#: templates/wagtailadmin/shared/datetimepicker_translations.html:8
-#, fuzzy
msgid "March"
-msgstr "Căutare"
+msgstr ""
#: templates/wagtailadmin/shared/datetimepicker_translations.html:9
msgid "April"
@@ -956,9 +954,16 @@ msgid "Fri"
msgstr ""
#: templates/wagtailadmin/shared/datetimepicker_translations.html:26
-#, fuzzy
msgid "Sat"
-msgstr "Status"
+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"
@@ -974,9 +979,8 @@ msgid "Page %(page_num)s of %(total_pages)s."
msgstr "Pagina %(page_num)s din %(total_pages)s."
#: templates/wagtailadmin/userbar/base.html:4
-#, fuzzy
msgid "User bar"
-msgstr "Utilizatori"
+msgstr ""
#: templates/wagtailadmin/userbar/base.html:14
msgid "Go to Wagtail admin interface"
@@ -995,123 +999,69 @@ msgid "Your password has been changed successfully!"
msgstr "Parola a fost schimbată cu succes!"
#: views/account.py:60
-#, fuzzy
msgid "Your preferences have been updated successfully!"
-msgstr "Parola a fost schimbată cu succes!"
+msgstr ""
-#: views/pages.py:146 views/pages.py:263
-msgid "This slug is already in use"
-msgstr "Această fisă a fost deja folosită"
-
-#: views/pages.py:160 views/pages.py:277
+#: views/pages.py:169 views/pages.py:286
msgid "Go live date/time must be before expiry date/time"
msgstr ""
-#: views/pages.py:170 views/pages.py:287
+#: views/pages.py:179 views/pages.py:296
msgid "Expiry date/time must be in the future"
msgstr ""
-#: views/pages.py:210 views/pages.py:334 views/pages.py:707
+#: views/pages.py:219 views/pages.py:351 views/pages.py:791
msgid "Page '{0}' published."
msgstr "Pagina '{0}' a fost publicată."
-#: views/pages.py:212 views/pages.py:336
+#: views/pages.py:221 views/pages.py:353
msgid "Page '{0}' submitted for moderation."
msgstr "Pagina '{0}' a fost trimisă pentru moderare."
-#: views/pages.py:215
+#: views/pages.py:224
msgid "Page '{0}' created."
msgstr "Pagina '{0}' a fost creată."
-#: views/pages.py:224
-#, fuzzy
+#: views/pages.py:233
msgid "The page could not be created due to validation errors"
-msgstr "Pagina nu a fost salvată din cauza erorilor de validare."
+msgstr ""
-#: views/pages.py:339
+#: views/pages.py:356
msgid "Page '{0}' updated."
msgstr "Pagina '{0}' a fost actualizată."
-#: views/pages.py:348
+#: views/pages.py:365
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:361
+#: views/pages.py:378
msgid "This page is currently awaiting moderation"
msgstr "Această pagină este în moderare"
-#: views/pages.py:381
+#: views/pages.py:409
msgid "Page '{0}' deleted."
msgstr "Pagina '{0}' a fost ștearsă."
-#: views/pages.py:543
+#: views/pages.py:575
msgid "Page '{0}' unpublished."
msgstr "Publicare anulată pentru pagina '{0}'."
-#: views/pages.py:594
+#: views/pages.py:627
msgid "Page '{0}' moved."
msgstr "Pagina '{0}' a fost mutată."
-#: views/pages.py:701 views/pages.py:720 views/pages.py:740
+#: views/pages.py:709
+msgid "Page '{0}' and {1} subpages copied."
+msgstr ""
+
+#: views/pages.py:711
+msgid "Page '{0}' copied."
+msgstr ""
+
+#: views/pages.py:785 views/pages.py:804 views/pages.py:824
msgid "The page '{0}' is not currently awaiting moderation."
msgstr "Pagina '{0}' nu este în moderare la moment."
-#: views/pages.py:726
+#: views/pages.py:810
msgid "Page '{0}' rejected for publication."
msgstr "Publicare paginii '{0}' a fost refuzată."
-
-#~ msgid "Please type a valid time"
-#~ msgstr "Introduceți o oră validă"
-
-#~ msgid "View draft"
-#~ msgstr "Vezi ciornă"
-
-#~ msgid "View live"
-#~ msgstr "Vezi în direct"
-
-#~ msgid "Status:"
-#~ msgstr "Stare:"
-
-#~ msgid "Where do you want to create a %(page_type)s"
-#~ msgstr "Unde doriți să creați %(page_type)s"
-
-#~ msgid "Where do you want to create this"
-#~ msgstr "Unde doriți să creați"
-
-#~ msgid "Create a new page"
-#~ msgstr "Crează pagină nouă"
-
-#~ msgid ""
-#~ "Your new page will be saved in the top level of your website. "
-#~ "You can move it after saving."
-#~ msgstr ""
-#~ "Pagina va fi salvată în nivelul de sus al sitului. După care "
-#~ "puteți să o mutați."
-
-#~ msgid "More"
-#~ msgstr "Mai mult"
-
-#~ msgid "Redirects"
-#~ msgstr "Redirecționări"
-
-#~ msgid "Editors Picks"
-#~ msgstr "Selecții editoriale"
-
-#~ msgid "Snippets"
-#~ msgstr "Fragmente"
-
-#~ msgid ""
-#~ "Sorry, you do not have access to create a page of type '{0}'."
-#~ msgstr ""
-#~ "Ne pare rău, dar nu aveți nivelul de acces potrivit pentru a crea pagini "
-#~ "de tipul '{0}'."
-
-#~ msgid ""
-#~ "Pages of this type can only be created as children of '{0}'. "
-#~ "This new page will be saved there."
-#~ msgstr ""
-#~ "Paginile de acest tip pot fi create numai ca fiind dependente de "
-#~ "'{0}'. Această pagină va fi salvată acolo."
-
-#~ msgid "The page could not be created due to errors."
-#~ msgstr "Pagina nu a fost creată din cauza erorilor."
diff --git a/wagtail/wagtailadmin/locale/zh/LC_MESSAGES/django.po b/wagtail/wagtailadmin/locale/zh/LC_MESSAGES/django.po
index 2aaaee23e..7aa5b5fec 100644
--- a/wagtail/wagtailadmin/locale/zh/LC_MESSAGES/django.po
+++ b/wagtail/wagtailadmin/locale/zh/LC_MESSAGES/django.po
@@ -1,21 +1,20 @@
# 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-07-11 10:41+0000\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/"
-"zh/)\n"
-"Language: zh\n"
+"POT-Creation-Date: 2014-08-01 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"
"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
@@ -26,56 +25,98 @@ msgstr ""
msgid "Common page configuration"
msgstr ""
-#: forms.py:18
+#: forms.py:19
msgid "Search term"
msgstr "搜索词"
-#: forms.py:42
+#: forms.py:43
msgid "Enter your username"
-msgstr "请输入用户名"
+msgstr ""
-#: forms.py:45
+#: forms.py:46
msgid "Enter password"
-msgstr "请输入密码"
+msgstr ""
-#: forms.py:50
+#: forms.py:51
msgid "Enter your email address to reset your password"
msgstr "输入您的电子邮箱来重置您的密码"
-#: forms.py:59
+#: forms.py:60
msgid "Please fill your email address."
msgstr "请输入你的电子邮件地址。"
-#: forms.py:72
+#: forms.py:73
msgid ""
"Sorry, you cannot reset your password here as your user account is managed "
"by another server."
msgstr "对不起,你不能在此够重置你的密码,因为您的账号是由其他服务所管理的。"
-#: forms.py:75
+#: forms.py:76
msgid "This email address is not recognised."
msgstr "没有找到这个电子邮件地址。"
-#: forms.py:82 templates/wagtailadmin/pages/_privacy_indicator.html:13
-#: templates/wagtailadmin/pages/_privacy_indicator.html:18
-#, fuzzy
-msgid "Public"
-msgstr "发布"
+#: forms.py:88
+msgid "New title"
+msgstr ""
-#: forms.py:83
+#: 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:155 views/pages.py:272
+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:91
-#, fuzzy
+#: forms.py:139
msgid "This field is required."
-msgstr "没有找到这个电子邮件地址。"
+msgstr ""
#: templates/wagtailadmin/base.html:7 templates/wagtailadmin/home.html:4
msgid "Dashboard"
msgstr "仪表板"
-#: templates/wagtailadmin/base.html:31
+#: templates/wagtailadmin/base.html:27
msgid "Menu"
msgstr "菜单"
@@ -104,7 +145,7 @@ msgstr "登录Wagtail"
#: templates/wagtailadmin/login.html:46
msgid "Forgotten it?"
-msgstr "忘记密码?"
+msgstr "忘记了?"
#: templates/wagtailadmin/account/account.html:4
#: templates/wagtailadmin/account/account.html:6
@@ -120,9 +161,7 @@ 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
@@ -132,7 +171,7 @@ msgstr "修改密码"
#: templates/wagtailadmin/account/account.html:29
msgid "Change the password you use to log in."
-msgstr "修改登录密码。"
+msgstr "修改您用于登录的密码。"
#: templates/wagtailadmin/account/account.html:36
msgid "Notification preferences"
@@ -223,12 +262,12 @@ msgstr "电子邮件链接"
#: templates/wagtailadmin/chooser/_search_form.html:7
#: templates/wagtailadmin/pages/search.html:3
#: templates/wagtailadmin/pages/search.html:16
-#: templatetags/wagtailadmin_tags.py:35
+#: templatetags/wagtailadmin_tags.py:36
msgid "Search"
msgstr "搜索"
#: templates/wagtailadmin/chooser/_search_results.html:3
-#: templatetags/wagtailadmin_tags.py:34
+#: templatetags/wagtailadmin_tags.py:35
msgid "Explorer"
msgstr "浏览"
@@ -287,7 +326,7 @@ msgstr "向下移动"
#: templates/wagtailadmin/pages/confirm_delete.html:7
#: templates/wagtailadmin/pages/edit.html:45
#: templates/wagtailadmin/pages/list.html:84
-#: templates/wagtailadmin/pages/list.html:202
+#: templates/wagtailadmin/pages/list.html:205
msgid "Delete"
msgstr "删除"
@@ -482,9 +521,8 @@ msgid "This page has been made private by a parent page."
msgstr ""
#: templates/wagtailadmin/page_privacy/ancestor_privacy.html:7
-#, fuzzy
msgid "You can edit the privacy settings on:"
-msgstr "你可以在此编辑这个页面:"
+msgstr ""
#: templates/wagtailadmin/page_privacy/set_privacy.html:6
msgid "Note: privacy changes apply to all children of this page too."
@@ -494,13 +532,9 @@ msgstr ""
#, python-format
msgid ""
"\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"
+" Previewing '%(title)s', submitted by %(submitted_by)s on %(submitted_on)s.\n"
" "
+msgstr "\n 预览 '%(title)s', %(submitted_by)s 在 %(submitted_on)s 提交.\n "
#: templates/wagtailadmin/pages/_privacy_indicator.html:9
msgid "Privacy"
@@ -546,8 +580,7 @@ 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] ""
@@ -600,7 +633,7 @@ 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:205
+#: templates/wagtailadmin/pages/list.html:208
msgid "Unpublish"
msgstr "停止发布"
@@ -616,6 +649,20 @@ msgstr "是的,停止发布"
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"
@@ -669,7 +716,7 @@ msgid "Exploring %(title)s"
msgstr "浏览%(title)s"
#: templates/wagtailadmin/pages/list.html:90
-#: templates/wagtailadmin/pages/list.html:208
+#: templates/wagtailadmin/pages/list.html:211
msgid "Add child page"
msgstr "添加子页面"
@@ -690,53 +737,50 @@ msgstr "开启子页面顺序"
msgid "Drag"
msgstr "拖动"
-#: templates/wagtailadmin/pages/list.html:234
-#: templates/wagtailadmin/pages/list.html:238
+#: templates/wagtailadmin/pages/list.html:237
+#: templates/wagtailadmin/pages/list.html:241
#, python-format
msgid "Explorer subpages of '%(title)s'"
msgstr "浏览 '%(title)s' 的子页面"
-#: templates/wagtailadmin/pages/list.html:234
-#: templates/wagtailadmin/pages/list.html:238
-#: templates/wagtailadmin/pages/list.html:242
+#: 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:242
+#: templates/wagtailadmin/pages/list.html:245
#, python-format
-msgid "Explorer child pages of '%(title)s'"
-msgstr "浏览 '%(title)s' 的子页面"
+msgid "Explore child pages of '%(title)s'"
+msgstr ""
-#: templates/wagtailadmin/pages/list.html:244
+#: templates/wagtailadmin/pages/list.html:247
#, python-format
msgid "Add a child page to '%(title)s'"
msgstr "添加子页面至'%(title)s'"
-#: templates/wagtailadmin/pages/list.html:244
+#: templates/wagtailadmin/pages/list.html:247
msgid "Add subpage"
msgstr "添加子页面"
-#: templates/wagtailadmin/pages/list.html:253
+#: templates/wagtailadmin/pages/list.html:256
msgid "No pages have been created."
msgstr "没有已保存的页面"
-#: templates/wagtailadmin/pages/list.html:253
+#: templates/wagtailadmin/pages/list.html:256
#, python-format
msgid "Why not add one?"
msgstr "为什么不添加一页?"
-#: templates/wagtailadmin/pages/list.html:260
-#, fuzzy, python-format
+#: templates/wagtailadmin/pages/list.html:263
+#, python-format
msgid ""
"\n"
" Page %(page_number)s of %(num_pages)s.\n"
" "
msgstr ""
-"\n"
-" 第 %(page_number)s / %(num_pages)s页.\n"
-" "
-#: templates/wagtailadmin/pages/list.html:266
+#: 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
@@ -746,7 +790,7 @@ msgstr ""
msgid "Previous"
msgstr "向前"
-#: templates/wagtailadmin/pages/list.html:271
+#: 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
@@ -767,7 +811,7 @@ msgid "Select a new parent page for %(title)s"
msgstr "为%(title)s选择一个新的根页面"
#: templates/wagtailadmin/pages/search_results.html:6
-#, fuzzy, python-format
+#, python-format
msgid ""
"\n"
" There is one matching page\n"
@@ -777,9 +821,6 @@ msgid_plural ""
" There are %(counter)s matching pages\n"
" "
msgstr[0] ""
-"\n"
-" 第 %(page_number)s / %(num_pages)s页.\n"
-" "
#: templates/wagtailadmin/pages/search_results.html:16
msgid "Other searches"
@@ -804,10 +845,7 @@ 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
@@ -819,9 +857,8 @@ msgid "Enter a search term above"
msgstr "请在上面输入搜索词"
#: templates/wagtailadmin/pages/usage_results.html:24
-#, fuzzy
msgid "No pages use"
-msgstr "页面在用"
+msgstr ""
#: templates/wagtailadmin/shared/breadcrumb.html:6
msgid "Home"
@@ -836,9 +873,8 @@ msgid "February"
msgstr ""
#: templates/wagtailadmin/shared/datetimepicker_translations.html:8
-#, fuzzy
msgid "March"
-msgstr "搜索"
+msgstr ""
#: templates/wagtailadmin/shared/datetimepicker_translations.html:9
msgid "April"
@@ -901,9 +937,14 @@ msgid "Fri"
msgstr ""
#: templates/wagtailadmin/shared/datetimepicker_translations.html:26
-#, fuzzy
msgid "Sat"
-msgstr "状态"
+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"
@@ -919,9 +960,8 @@ msgid "Page %(page_num)s of %(total_pages)s."
msgstr "第%(page_num)s页 共%(total_pages)s页"
#: templates/wagtailadmin/userbar/base.html:4
-#, fuzzy
msgid "User bar"
-msgstr "用户"
+msgstr ""
#: templates/wagtailadmin/userbar/base.html:14
msgid "Go to Wagtail admin interface"
@@ -940,117 +980,69 @@ msgid "Your password has been changed successfully!"
msgstr "您的密码已经更改成功。"
#: views/account.py:60
-#, fuzzy
msgid "Your preferences have been updated successfully!"
-msgstr "您的密码已经更改成功。"
+msgstr ""
-#: views/pages.py:146 views/pages.py:263
-msgid "This slug is already in use"
-msgstr "这个唯一的地址已被占用"
-
-#: views/pages.py:160 views/pages.py:277
+#: views/pages.py:169 views/pages.py:286
msgid "Go live date/time must be before expiry date/time"
msgstr ""
-#: views/pages.py:170 views/pages.py:287
+#: views/pages.py:179 views/pages.py:296
msgid "Expiry date/time must be in the future"
msgstr ""
-#: views/pages.py:210 views/pages.py:334 views/pages.py:707
+#: views/pages.py:219 views/pages.py:351 views/pages.py:791
msgid "Page '{0}' published."
msgstr "第 '{0}' 页已发布。"
-#: views/pages.py:212 views/pages.py:336
+#: views/pages.py:221 views/pages.py:353
msgid "Page '{0}' submitted for moderation."
msgstr "第 '{0}' 页已提交审核。"
-#: views/pages.py:215
+#: views/pages.py:224
msgid "Page '{0}' created."
msgstr "第 '{0}' 页已创建。"
-#: views/pages.py:224
-#, fuzzy
+#: views/pages.py:233
msgid "The page could not be created due to validation errors"
-msgstr "这页无法保存,因为页面发生验证错误"
+msgstr ""
-#: views/pages.py:339
+#: views/pages.py:356
msgid "Page '{0}' updated."
msgstr "第 '{0}' 页已更新"
-#: views/pages.py:348
+#: views/pages.py:365
msgid "The page could not be saved due to validation errors"
msgstr "这页无法保存,因为页面发生验证错误"
-#: views/pages.py:361
+#: views/pages.py:378
msgid "This page is currently awaiting moderation"
msgstr "这页正在等待审核"
-#: views/pages.py:381
+#: views/pages.py:409
msgid "Page '{0}' deleted."
msgstr "第 '{0}' 页已删除"
-#: views/pages.py:543
+#: views/pages.py:575
msgid "Page '{0}' unpublished."
msgstr "第 '{0}' 页已停止发布"
-#: views/pages.py:594
+#: views/pages.py:627
msgid "Page '{0}' moved."
msgstr "第 '{0}' 页已移动。"
-#: views/pages.py:701 views/pages.py:720 views/pages.py:740
+#: views/pages.py:709
+msgid "Page '{0}' and {1} subpages copied."
+msgstr ""
+
+#: views/pages.py:711
+msgid "Page '{0}' copied."
+msgstr ""
+
+#: views/pages.py:785 views/pages.py:804 views/pages.py:824
msgid "The page '{0}' is not currently awaiting moderation."
msgstr "第 '{0}' 页当前不需要等待审核。"
-#: views/pages.py:726
+#: views/pages.py:810
msgid "Page '{0}' rejected for publication."
msgstr "第 '{0}' 页已被拒绝发布。"
-
-#~ msgid "Please type a valid time"
-#~ msgstr "请输入一个有效的时间"
-
-#~ msgid "View draft"
-#~ msgstr "查看草稿"
-
-#~ msgid "View live"
-#~ msgstr "查看在线版"
-
-#~ msgid "Status:"
-#~ msgstr "状态:"
-
-#~ msgid "Where do you want to create a %(page_type)s"
-#~ msgstr "你想在哪创建 %(page_type)s"
-
-#~ msgid "Where do you want to create this"
-#~ msgstr "你想在哪创建这个"
-
-#~ msgid "Create a new page"
-#~ msgstr "创建一个新页面"
-
-#~ msgid ""
-#~ "Your new page will be saved in the top level of your website. "
-#~ "You can move it after saving."
-#~ msgstr "你的新页面将会保存到网站的顶级 你 在保存后可以移动."
-
-#~ msgid "More"
-#~ msgstr "更多"
-
-#~ msgid "Redirects"
-#~ msgstr "转向"
-
-#~ msgid "Editors Picks"
-#~ msgstr "编辑手摘"
-
-#~ msgid "Snippets"
-#~ msgstr "片段"
-
-#~ msgid ""
-#~ "Sorry, you do not have access to create a page of type '{0}'."
-#~ msgstr "对不起,你没有创建'{0}'类型页面的权限。"
-
-#~ msgid ""
-#~ "Pages of this type can only be created as children of '{0}'. "
-#~ "This new page will be saved there."
-#~ msgstr "这一类的页面只能创建为'{0}'的子页面。这一页将会保存在那。"
-
-#~ msgid "The page could not be created due to errors."
-#~ msgstr "这一页因有错误发生而无法创建。"
diff --git a/wagtail/wagtailadmin/locale/zh_TW/LC_MESSAGES/django.po b/wagtail/wagtailadmin/locale/zh_TW/LC_MESSAGES/django.po
index 6dba63056..95b8e929d 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-07-11 10:41+0000\n"
+"POT-Creation-Date: 2014-08-01 16:38+0100\n"
"PO-Revision-Date: 2014-05-01 12:09+0000\n"
"Last-Translator: wdv4758h \n"
"Language-Team: \n"
@@ -25,47 +25,94 @@ msgstr ""
msgid "Common page configuration"
msgstr "一般頁面設定"
-#: forms.py:18
+#: forms.py:19
msgid "Search term"
msgstr "搜尋關鍵字"
-#: forms.py:42
+#: forms.py:43
msgid "Enter your username"
msgstr "請輸入您的帳號"
-#: forms.py:45
+#: forms.py:46
msgid "Enter password"
msgstr "請輸入密碼"
-#: forms.py:50
+#: forms.py:51
msgid "Enter your email address to reset your password"
msgstr "請輸入您的電子信箱來重新設定密碼"
-#: forms.py:59
+#: forms.py:60
msgid "Please fill your email address."
msgstr "請輸入您的電子信箱"
-#: forms.py:72
+#: forms.py:73
msgid ""
"Sorry, you cannot reset your password here as your user account is managed "
"by another server."
msgstr "對不起,您不能在此重新設定您的密碼,因為您的帳號是由其他伺服器所管理。"
-#: forms.py:75
+#: forms.py:76
msgid "This email address is not recognised."
msgstr "找不到這個電子信箱。"
-#: forms.py:82 templates/wagtailadmin/pages/_privacy_indicator.html:13
+#: forms.py:88
+#, fuzzy
+msgid "New title"
+msgstr "移動 %(title)s"
+
+#: forms.py:89
+msgid "New slug"
+msgstr ""
+
+#: forms.py:95
+#, fuzzy
+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
+#, fuzzy
+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:155 views/pages.py:272
+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
#, fuzzy
msgid "Public"
msgstr "發佈"
-#: forms.py:83
+#: forms.py:131
msgid "Private, accessible with the following password"
msgstr ""
-#: forms.py:91
+#: forms.py:139
#, fuzzy
msgid "This field is required."
msgstr "找不到這個電子信箱。"
@@ -74,7 +121,7 @@ msgstr "找不到這個電子信箱。"
msgid "Dashboard"
msgstr "Dashboard"
-#: templates/wagtailadmin/base.html:31
+#: templates/wagtailadmin/base.html:27
msgid "Menu"
msgstr "選單"
@@ -222,12 +269,12 @@ msgstr "電子信箱連結"
#: templates/wagtailadmin/chooser/_search_form.html:7
#: templates/wagtailadmin/pages/search.html:3
#: templates/wagtailadmin/pages/search.html:16
-#: templatetags/wagtailadmin_tags.py:35
+#: templatetags/wagtailadmin_tags.py:36
msgid "Search"
msgstr "搜尋"
#: templates/wagtailadmin/chooser/_search_results.html:3
-#: templatetags/wagtailadmin_tags.py:34
+#: templatetags/wagtailadmin_tags.py:35
msgid "Explorer"
msgstr "瀏覽"
@@ -291,7 +338,7 @@ msgstr "往下移動"
#: templates/wagtailadmin/pages/confirm_delete.html:7
#: templates/wagtailadmin/pages/edit.html:45
#: templates/wagtailadmin/pages/list.html:84
-#: templates/wagtailadmin/pages/list.html:202
+#: templates/wagtailadmin/pages/list.html:205
msgid "Delete"
msgstr "刪除"
@@ -632,7 +679,7 @@ 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:205
+#: templates/wagtailadmin/pages/list.html:208
msgid "Unpublish"
msgstr "取消發佈"
@@ -648,6 +695,21 @@ msgstr "是的,取消發佈"
msgid "Pages using"
msgstr "頁面正在使用"
+#: templates/wagtailadmin/pages/copy.html:3
+#, fuzzy, python-format
+msgid "Copy %(title)s"
+msgstr "移動 %(title)s"
+
+#: templates/wagtailadmin/pages/copy.html:6
+#: templates/wagtailadmin/pages/list.html:202
+msgid "Copy"
+msgstr ""
+
+#: templates/wagtailadmin/pages/copy.html:26
+#, fuzzy
+msgid "Copy this page"
+msgstr "編輯這個頁面"
+
#: templates/wagtailadmin/pages/create.html:5
#, python-format
msgid "New %(page_type)s"
@@ -701,7 +763,7 @@ msgid "Exploring %(title)s"
msgstr "瀏覽%(title)s"
#: templates/wagtailadmin/pages/list.html:90
-#: templates/wagtailadmin/pages/list.html:208
+#: templates/wagtailadmin/pages/list.html:211
msgid "Add child page"
msgstr "新增子頁面"
@@ -722,42 +784,42 @@ msgstr "開啟子頁面排序"
msgid "Drag"
msgstr "拖曳"
-#: templates/wagtailadmin/pages/list.html:234
-#: templates/wagtailadmin/pages/list.html:238
+#: templates/wagtailadmin/pages/list.html:237
+#: templates/wagtailadmin/pages/list.html:241
#, python-format
msgid "Explorer subpages of '%(title)s'"
msgstr "瀏覽 '%(title)s' 的子頁面"
-#: templates/wagtailadmin/pages/list.html:234
-#: templates/wagtailadmin/pages/list.html:238
-#: templates/wagtailadmin/pages/list.html:242
+#: 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:242
-#, python-format
-msgid "Explorer child pages of '%(title)s'"
+#: templates/wagtailadmin/pages/list.html:245
+#, fuzzy, python-format
+msgid "Explore child pages of '%(title)s'"
msgstr "瀏覽 '%(title)s' 的子頁面"
-#: templates/wagtailadmin/pages/list.html:244
+#: templates/wagtailadmin/pages/list.html:247
#, python-format
msgid "Add a child page to '%(title)s'"
msgstr "新增子頁面至 '%(title)s'"
-#: templates/wagtailadmin/pages/list.html:244
+#: templates/wagtailadmin/pages/list.html:247
msgid "Add subpage"
msgstr "新增子頁面"
-#: templates/wagtailadmin/pages/list.html:253
+#: templates/wagtailadmin/pages/list.html:256
msgid "No pages have been created."
msgstr "沒有已儲存的頁面"
-#: templates/wagtailadmin/pages/list.html:253
+#: templates/wagtailadmin/pages/list.html:256
#, python-format
msgid "Why not add one?"
msgstr "為什麼不 新增一個頁面呢?"
-#: templates/wagtailadmin/pages/list.html:260
+#: templates/wagtailadmin/pages/list.html:263
#, fuzzy, python-format
msgid ""
"\n"
@@ -768,7 +830,7 @@ msgstr ""
" 第 %(page_number)s / %(num_pages)s頁。\n"
" "
-#: templates/wagtailadmin/pages/list.html:266
+#: 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
@@ -778,7 +840,7 @@ msgstr ""
msgid "Previous"
msgstr "往前"
-#: templates/wagtailadmin/pages/list.html:271
+#: 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
@@ -939,6 +1001,12 @@ msgstr ""
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 "帳號設定"
@@ -978,64 +1046,70 @@ msgstr "您的密碼已經更改成功。"
msgid "Your preferences have been updated successfully!"
msgstr "您的密碼已經更改成功。"
-#: views/pages.py:146 views/pages.py:263
-msgid "This slug is already in use"
-msgstr "這個地址已被使用"
-
-#: views/pages.py:160 views/pages.py:277
+#: views/pages.py:169 views/pages.py:286
msgid "Go live date/time must be before expiry date/time"
msgstr ""
-#: views/pages.py:170 views/pages.py:287
+#: views/pages.py:179 views/pages.py:296
msgid "Expiry date/time must be in the future"
msgstr ""
-#: views/pages.py:210 views/pages.py:334 views/pages.py:707
+#: views/pages.py:219 views/pages.py:351 views/pages.py:791
msgid "Page '{0}' published."
msgstr "第 '{0}' 頁已發佈。"
-#: views/pages.py:212 views/pages.py:336
+#: views/pages.py:221 views/pages.py:353
msgid "Page '{0}' submitted for moderation."
msgstr "第 '{0}' 頁已送審。"
-#: views/pages.py:215
+#: views/pages.py:224
msgid "Page '{0}' created."
msgstr "第 '{0}' 頁已建立。"
-#: views/pages.py:224
+#: views/pages.py:233
#, fuzzy
msgid "The page could not be created due to validation errors"
msgstr "這頁面因有驗證錯誤而無法儲存。"
-#: views/pages.py:339
+#: views/pages.py:356
msgid "Page '{0}' updated."
msgstr "第 '{0}' 頁已更新"
-#: views/pages.py:348
+#: views/pages.py:365
msgid "The page could not be saved due to validation errors"
msgstr "這頁面因有驗證錯誤而無法儲存。"
-#: views/pages.py:361
+#: views/pages.py:378
msgid "This page is currently awaiting moderation"
msgstr "這頁正等待審核"
-#: views/pages.py:381
+#: views/pages.py:409
msgid "Page '{0}' deleted."
msgstr "第 '{0}' 頁已刪除"
-#: views/pages.py:543
+#: views/pages.py:575
msgid "Page '{0}' unpublished."
msgstr "第 '{0}' 頁已取消發佈"
-#: views/pages.py:594
+#: views/pages.py:627
msgid "Page '{0}' moved."
msgstr "第 '{0}' 頁已移動。"
-#: views/pages.py:701 views/pages.py:720 views/pages.py:740
+#: views/pages.py:709
+#, fuzzy
+msgid "Page '{0}' and {1} subpages copied."
+msgstr "第 '{0}' 頁已更新"
+
+#: views/pages.py:711
+#, fuzzy
+msgid "Page '{0}' copied."
+msgstr "第 '{0}' 頁已移動。"
+
+#: views/pages.py:785 views/pages.py:804 views/pages.py:824
msgid "The page '{0}' is not currently awaiting moderation."
msgstr "第 '{0}' 頁目前不需要等待審核。"
-#: views/pages.py:726
+#: views/pages.py:810
msgid "Page '{0}' rejected for publication."
msgstr "第 '{0}' 頁已被拒絕發佈。"
diff --git a/wagtail/wagtailadmin/migrations/0001_create_admin_access_permissions.py b/wagtail/wagtailadmin/south_migrations/0001_create_admin_access_permissions.py
similarity index 100%
rename from wagtail/wagtailadmin/migrations/0001_create_admin_access_permissions.py
rename to wagtail/wagtailadmin/south_migrations/0001_create_admin_access_permissions.py
diff --git a/wagtail/wagtailembeds/migrations/__init__.py b/wagtail/wagtailadmin/south_migrations/__init__.py
similarity index 100%
rename from wagtail/wagtailembeds/migrations/__init__.py
rename to wagtail/wagtailadmin/south_migrations/__init__.py
diff --git a/wagtail/wagtailadmin/static/wagtailadmin/js/core.js b/wagtail/wagtailadmin/static/wagtailadmin/js/core.js
index 51056d446..5729e75fe 100644
--- a/wagtail/wagtailadmin/static/wagtailadmin/js/core.js
+++ b/wagtail/wagtailadmin/static/wagtailadmin/js/core.js
@@ -12,7 +12,7 @@ $(function(){
$('body').addClass('ready');
// Enable toggle to open/close nav
- $('#nav-toggle').click(function(){
+ $(document).on('click', '#nav-toggle', function(){
$('body').toggleClass('nav-open');
if(!$('body').hasClass('nav-open')){
$('body').addClass('nav-closed');
@@ -22,20 +22,38 @@ $(function(){
});
$('.nav-main a').on('click', function(){
- $(this).closest('li').toggleClass('active');
-
- if($(this).closest('li').find('.submenu')){
+ if($(this).closest('li').find('.submenu').length){
+ $(this).closest('li').toggleClass('active');
$('.nav-wrapper').toggleClass('submenu-active')
return false
}
+
})
- // Enable swishy section navigation menu
- $('.explorer').addClass('dl-menuwrapper').dlmenu({
- animationClasses : {
- classin : 'dl-animate-in-2',
- classout : 'dl-animate-out-2'
+ // Dynamically load menu on request.
+ $(document).on('click', '.dl-trigger', function(){
+ var $this = $(this);
+ var $explorer = $('#explorer');
+
+ $this.addClass('icon-spinner');
+
+ if(!$explorer.children().length){
+ $explorer.load(window.explorer_menu_url, function() {
+ $this.removeClass('icon-spinner');
+
+ $explorer.addClass('dl-menuwrapper').dlmenu({
+ animationClasses : {
+ classin : 'dl-animate-in-2',
+ classout : 'dl-animate-out-2'
+ }
+ });
+ $explorer.dlmenu('openMenu');
+ });
+ }else{
+ $explorer.dlmenu('openMenu');
}
+
+ return false;
});
// Resize nav to fit height of window. This is an unimportant bell/whistle to make it look nice
@@ -44,9 +62,6 @@ $(function(){
$('.nav-main').each(function(){
var thisHeight = $(this).height();
var footerHeight = $('.footer', $(this)).height();
-
- // $(this).css({'height':thisHeight - footerHeight, 'overflow-y':'scroll'});
- // $('> ul', $(this)).height(thisHeight)
});
};
fitNav();
@@ -95,20 +110,11 @@ $(function(){
}
});
- /* Bulk-selection */
- $(document).on('click', 'thead .bulk', function(){
- $(this).closest('table').find('tbody .bulk input').each(function(){
- $(this).prop('checked', !$(this).prop('checked'));
- });
- });
-
- $('#menu-search input').bind('focus', function(){
- $('#menu-search').addClass('focussed');
- }).bind('blur', function(){
- $('#menu-search').removeClass('focussed');
- });
- $('#menu-search').bind('focus click', function(){
- $(this).addClass('focussed');
+ /* Dropzones */
+ $('.drop-zone').on('dragover', function(){
+ $(this).addClass('hovered');
+ }).on('dragleave dragend drop', function(){
+ $(this).removeClass('hovered');
});
/* Header search behaviour */
diff --git a/wagtail/wagtailadmin/static/wagtailadmin/js/page-editor.js b/wagtail/wagtailadmin/static/wagtailadmin/js/page-editor.js
index a5dd67eeb..d900d8d0c 100644
--- a/wagtail/wagtailadmin/static/wagtailadmin/js/page-editor.js
+++ b/wagtail/wagtailadmin/static/wagtailadmin/js/page-editor.js
@@ -98,7 +98,7 @@ function initTimeChooser(id) {
function initDateTimeChooser(id) {
if (window.dateTimePickerTranslations) {
$('#' + id).datetimepicker({
- format: 'Y-m-d H:i',
+ format: 'Y-m-d H:i:s',
scrollInput:false,
i18n: {
lang: window.dateTimePickerTranslations
@@ -106,8 +106,8 @@ function initDateTimeChooser(id) {
language: 'lang'
});
} else {
- $('#' + id).datetimepicker({
- format: 'Y-m-d H:i',
+ $('#' + id).datetimepicker({
+ format: 'Y-m-d H:i:s',
});
}
}
diff --git a/wagtail/wagtailadmin/static/wagtailadmin/js/vendor/jquery.ba-throttle-debounce.min.js b/wagtail/wagtailadmin/static/wagtailadmin/js/vendor/jquery.ba-throttle-debounce.min.js
new file mode 100644
index 000000000..07205508e
--- /dev/null
+++ b/wagtail/wagtailadmin/static/wagtailadmin/js/vendor/jquery.ba-throttle-debounce.min.js
@@ -0,0 +1,9 @@
+/*
+ * jQuery throttle / debounce - v1.1 - 3/7/2010
+ * http://benalman.com/projects/jquery-throttle-debounce-plugin/
+ *
+ * Copyright (c) 2010 "Cowboy" Ben Alman
+ * Dual licensed under the MIT and GPL licenses.
+ * http://benalman.com/about/license/
+ */
+(function(b,c){var $=b.jQuery||b.Cowboy||(b.Cowboy={}),a;$.throttle=a=function(e,f,j,i){var h,d=0;if(typeof f!=="boolean"){i=j;j=f;f=c}function g(){var o=this,m=+new Date()-d,n=arguments;function l(){d=+new Date();j.apply(o,n)}function k(){h=c}if(i&&!h){l()}h&&clearTimeout(h);if(i===c&&m>e){l()}else{if(f!==true){h=setTimeout(i?k:l,i===c?e-m:e)}}}if($.guid){g.guid=j.guid=j.guid||$.guid++}return g};$.debounce=function(d,e,f){return f===c?a(d,e,false):a(d,f,e!==false)}})(this);
\ No newline at end of file
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 abfe536b1..7eb2abe75 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.6.2 (Custom Build) | MIT & BSD
- * Build: http://modernizr.com/download/#-fontface-backgroundsize-borderimage-borderradius-boxshadow-flexbox-hsla-multiplebgs-opacity-rgba-textshadow-cssanimations-csscolumns-generatedcontent-cssgradients-cssreflections-csstransforms-csstransforms3d-csstransitions-applicationcache-canvas-canvastext-draganddrop-hashchange-history-audio-video-indexeddb-input-inputtypes-localstorage-postmessage-sessionstorage-websockets-websqldatabase-webworkers-geolocation-inlinesvg-smil-svg-svgclippaths-touch-webgl-shiv-mq-cssclasses-addtest-prefixed-teststyles-testprop-testallprops-hasevent-prefixes-domprefixes-load
+/* 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
*/
-;window.Modernizr=function(a,b,c){function D(a){j.cssText=a}function E(a,b){return D(n.join(a+";")+(b||""))}function F(a,b){return typeof a===b}function G(a,b){return!!~(""+a).indexOf(b)}function H(a,b){for(var d in a){var e=a[d];if(!G(e,"-")&&j[e]!==c)return b=="pfx"?e:!0}return!1}function I(a,b,d){for(var e in a){var f=b[a[e]];if(f!==c)return d===!1?a[e]:F(f,"function")?f.bind(d||b):f}return!1}function J(a,b,c){var d=a.charAt(0).toUpperCase()+a.slice(1),e=(a+" "+p.join(d+" ")+d).split(" ");return F(b,"string")||F(b,"undefined")?H(e,b):(e=(a+" "+q.join(d+" ")+d).split(" "),I(e,b,c))}function K(){e.input=function(c){for(var d=0,e=c.length;d',a,""].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},z=function(b){var c=a.matchMedia||a.msMatchMedia;if(c)return c(b).matches;var d;return y("@media "+b+" { #"+h+" { position: absolute; } }",function(b){d=(a.getComputedStyle?getComputedStyle(b,null):b.currentStyle)["position"]=="absolute"}),d},A=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=F(e[d],"function"),F(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}(),B={}.hasOwnProperty,C;!F(B,"undefined")&&!F(B.call,"undefined")?C=function(a,b){return B.call(a,b)}:C=function(a,b){return b in a&&F(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=w.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(w.call(arguments)));return Object(g)===g?g:f}return c.apply(b,d.concat(w.call(arguments)))};return e}),s.flexbox=function(){return J("flexWrap")},s.canvas=function(){var a=b.createElement("canvas");return!!a.getContext&&!!a.getContext("2d")},s.canvastext=function(){return!!e.canvas&&!!F(b.createElement("canvas").getContext("2d").fillText,"function")},s.webgl=function(){return!!a.WebGLRenderingContext},s.touch=function(){var c;return"ontouchstart"in a||a.DocumentTouch&&b instanceof DocumentTouch?c=!0:y(["@media (",n.join("touch-enabled),("),h,")","{#modernizr{top:9px;position:absolute}}"].join(""),function(a){c=a.offsetTop===9}),c},s.geolocation=function(){return"geolocation"in navigator},s.postmessage=function(){return!!a.postMessage},s.websqldatabase=function(){return!!a.openDatabase},s.indexedDB=function(){return!!J("indexedDB",a)},s.hashchange=function(){return A("hashchange",a)&&(b.documentMode===c||b.documentMode>7)},s.history=function(){return!!a.history&&!!history.pushState},s.draganddrop=function(){var a=b.createElement("div");return"draggable"in a||"ondragstart"in a&&"ondrop"in a},s.websockets=function(){return"WebSocket"in a||"MozWebSocket"in a},s.rgba=function(){return D("background-color:rgba(150,255,150,.5)"),G(j.backgroundColor,"rgba")},s.hsla=function(){return D("background-color:hsla(120,40%,100%,.5)"),G(j.backgroundColor,"rgba")||G(j.backgroundColor,"hsla")},s.multiplebgs=function(){return D("background:url(https://),url(https://),red url(https://)"),/(url\s*\(.*?){3}/.test(j.background)},s.backgroundsize=function(){return J("backgroundSize")},s.borderimage=function(){return J("borderImage")},s.borderradius=function(){return J("borderRadius")},s.boxshadow=function(){return J("boxShadow")},s.textshadow=function(){return b.createElement("div").style.textShadow===""},s.opacity=function(){return E("opacity:.55"),/^0.55$/.test(j.opacity)},s.cssanimations=function(){return J("animationName")},s.csscolumns=function(){return J("columnCount")},s.cssgradients=function(){var a="background-image:",b="gradient(linear,left top,right bottom,from(#9f9),to(white));",c="linear-gradient(left top,#9f9, white);";return D((a+"-webkit- ".split(" ").join(b+a)+n.join(c+a)).slice(0,-a.length)),G(j.backgroundImage,"gradient")},s.cssreflections=function(){return J("boxReflect")},s.csstransforms=function(){return!!J("transform")},s.csstransforms3d=function(){var a=!!J("perspective");return a&&"webkitPerspective"in g.style&&y("@media (transform-3d),(-webkit-transform-3d){#modernizr{left:9px;position:absolute;height:3px;}}",function(b,c){a=b.offsetLeft===9&&b.offsetHeight===3}),a},s.csstransitions=function(){return J("transition")},s.fontface=function(){var a;return y('@font-face {font-family:"font";src:url("https://")}',function(c,d){var e=b.getElementById("smodernizr"),f=e.sheet||e.styleSheet,g=f?f.cssRules&&f.cssRules[0]?f.cssRules[0].cssText:f.cssText||"":"";a=/src/i.test(g)&&g.indexOf(d.split(" ")[0])===0}),a},s.generatedcontent=function(){var a;return y(["#",h,"{font:0/0 a}#",h,':after{content:"',l,'";visibility:hidden;font:3px/1 a}'].join(""),function(b){a=b.offsetHeight>=3}),a},s.video=function(){var a=b.createElement("video"),c=!1;try{if(c=!!a.canPlayType)c=new Boolean(c),c.ogg=a.canPlayType('video/ogg; codecs="theora"').replace(/^no$/,""),c.h264=a.canPlayType('video/mp4; codecs="avc1.42E01E"').replace(/^no$/,""),c.webm=a.canPlayType('video/webm; codecs="vp8, vorbis"').replace(/^no$/,"")}catch(d){}return c},s.audio=function(){var a=b.createElement("audio"),c=!1;try{if(c=!!a.canPlayType)c=new Boolean(c),c.ogg=a.canPlayType('audio/ogg; codecs="vorbis"').replace(/^no$/,""),c.mp3=a.canPlayType("audio/mpeg;").replace(/^no$/,""),c.wav=a.canPlayType('audio/wav; codecs="1"').replace(/^no$/,""),c.m4a=(a.canPlayType("audio/x-m4a;")||a.canPlayType("audio/aac;")).replace(/^no$/,"")}catch(d){}return c},s.localstorage=function(){try{return localStorage.setItem(h,h),localStorage.removeItem(h),!0}catch(a){return!1}},s.sessionstorage=function(){try{return sessionStorage.setItem(h,h),sessionStorage.removeItem(h),!0}catch(a){return!1}},s.webworkers=function(){return!!a.Worker},s.applicationcache=function(){return!!a.applicationCache},s.svg=function(){return!!b.createElementNS&&!!b.createElementNS(r.svg,"svg").createSVGRect},s.inlinesvg=function(){var a=b.createElement("div");return a.innerHTML="",(a.firstChild&&a.firstChild.namespaceURI)==r.svg},s.smil=function(){return!!b.createElementNS&&/SVGAnimate/.test(m.call(b.createElementNS(r.svg,"animate")))},s.svgclippaths=function(){return!!b.createElementNS&&/SVGClipPath/.test(m.call(b.createElementNS(r.svg,"clipPath")))};for(var L in s)C(s,L)&&(x=L.toLowerCase(),e[x]=s[L](),v.push((e[x]?"":"no-")+x));return e.input||K(),e.addTest=function(a,b){if(typeof a=="object")for(var d in a)C(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},D(""),i=k=null,function(a,b){function k(a,b){var c=a.createElement("p"),d=a.getElementsByTagName("head")[0]||a.documentElement;return c.innerHTML="x",d.insertBefore(c.lastChild,d.firstChild)}function l(){var a=r.elements;return typeof a=="string"?a.split(" "):a}function m(a){var b=i[a[g]];return b||(b={},h++,a[g]=h,i[h]=b),b}function n(a,c,f){c||(c=b);if(j)return c.createElement(a);f||(f=m(c));var g;return f.cache[a]?g=f.cache[a].cloneNode():e.test(a)?g=(f.cache[a]=f.createElem(a)).cloneNode():g=f.createElem(a),g.canHaveChildren&&!d.test(a)?f.frag.appendChild(g):g}function o(a,c){a||(a=b);if(j)return a.createDocumentFragment();c=c||m(a);var d=c.frag.cloneNode(),e=0,f=l(),g=f.length;for(;e",f="hidden"in a,j=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){f=!0,j=!0}})();var r={elements:c.elements||"abbr article aside audio bdi canvas data datalist details figcaption figure footer header hgroup mark meter nav output progress section summary time video",shivCSS:c.shivCSS!==!1,supportsUnknownElements:j,shivMethods:c.shivMethods!==!1,type:"default",shivDocument:q,createElement:n,createDocumentFragment:o};a.html5=r,q(b)}(this,b),e._version=d,e._prefixes=n,e._domPrefixes=q,e._cssomPrefixes=p,e.mq=z,e.hasEvent=A,e.testProp=function(a){return H([a])},e.testAllProps=J,e.testStyles=y,e.prefixed=function(a,b,c){return b?J(a,b,c):J(a,"pfx")},g.className=g.className.replace(/(^|\s)no-js(\s|$)/,"$1$2")+(f?" js "+v.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',a,""].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",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="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 li{
@include row();
position:relative;
+ overflow:hidden;
background-color:white;
padding:1em 10em 1em 1.5em; /* 10em padding leaves room for controls */
margin-bottom:1em;
@@ -532,6 +534,7 @@ li.focused > .help{
.field-row{
@include clearfix();
+
/* negative margin the bottom so it doesn't add too much space */
margin-bottom:-1.2em;
}
@@ -726,6 +729,25 @@ ul.tagit li.tagit-choice-editable{
}
}
+/* file drop zones */
+.drop-zone{
+ @include border-radius(5px);
+ border:2px dashed $color-grey-4;
+ padding:$mobile-nice-padding;
+ background-color:$color-grey-5;
+ margin-bottom:1em;
+ text-align:center;
+
+ .drop-zone-help{
+ border:0;
+ }
+ &.hovered{
+ border-color:$color-teal;
+ background-color:$color-input-focus;
+ }
+}
+
+
/* Transitions */
fieldset, input, textarea, select{
@include transition(background-color 0.2s ease);
@@ -819,14 +841,31 @@ input[type=submit], input[type=reset], input[type=button], .button, button{
@include row();
}
+ .field-content{
+ @include column(10,0);
+ }
+
.field-col{
float:left;
padding-left:0 !important;
- }
- .field-content{
- @include column(10);
- padding-right:0;
- padding-left:0;
- }
+ /* anything less than 4 columns or greater than 6 is impractical */
+ &.col4{
+ label{
+ @include column(2,0,4);
+ }
+ .field-content{
+ @include column(2, $padding, 4);
+ }
+ }
+ &.col6{
+ label{
+ @include column(2,0,6);
+ }
+ .field-content{
+ @include column(4, $padding, 6);
+ }
+ }
+ }
+
}
\ No newline at end of file
diff --git a/wagtail/wagtailadmin/static/wagtailadmin/scss/components/listing.scss b/wagtail/wagtailadmin/static/wagtailadmin/scss/components/listing.scss
index 537465083..e0f161fac 100644
--- a/wagtail/wagtailadmin/static/wagtailadmin/scss/components/listing.scss
+++ b/wagtail/wagtailadmin/static/wagtailadmin/scss/components/listing.scss
@@ -5,6 +5,9 @@ ul.listing{
.listing{
margin-bottom:2em;
+ color:lighten($color-text-base, 20%);
+ font-size:0.95em;
+
ul{
@include unlist();
}
@@ -27,7 +30,8 @@ ul.listing{
}
thead{
- color: $color-grey-2;
+ font-size:1.1em;
+ color: $color-text-base;
border-bottom:1px solid $color-grey-4;
th{
@@ -51,22 +55,6 @@ ul.listing{
right:0;
}
}
-
- /*
- .dropdown{
- padding:0;
- }
- .dropdown-toggle{
- display:block;
- padding:1.5em;
- }
- .dropdown:hover,
- .dropdown.open{
- @include box-shadow(0px 0px 3px 0 rgba(0,0,0,0.2));
- background-color:white;
- margin-left:-$grid-gutter-width * 2;
- }
- */
}
&.full-width td:first-child,
@@ -87,32 +75,56 @@ ul.listing{
tbody{
border-bottom:1px dashed $color-input-border;
- }
- tbody tr{
- border-top:1px dashed $color-input-border;
- &:first-child{
+
+
+ tr{
border-top:1px dashed $color-input-border;
+
+ &:first-child{
+ border-top:1px dashed $color-input-border;
+ }
}
-
}
+
&.full-width tbody{
border:0;
}
&.full-width tbody tr:hover{
background-color:#FDFDFD;
}
- &.chooser tr.can-choose a{
- @include transition(none);
- }
- &.chooser tr.can-choose:hover{
- background-color:$color-teal;
- color:white;
- a,a:hover{
- color:white;
+ &.chooser {
+ tbody .title a{
+ display:block;
+ @include transition(none);
}
- .status-tag{
- border-color:white;
+ tbody tr:hover{
+ background-color:$color-teal;
+ color:white;
+
+ .title a, .title a:hover{
+ color:white;
+ }
+ .status-tag{
+ border-color:white;
+ }
+ }
+ tbody tr.disabled td{
+ opacity:0.25;
+ }
+ tbody tr.disabled td.children{
+ opacity:1;
+ }
+ tbody tr.disabled:hover{
+ background-color:inherit;
+ color:inherit;
+
+ .title{
+ cursor:not-allowed;
+ }
+ .status-tag{
+ border-color:inherit;
+ }
}
}
@@ -120,22 +132,10 @@ ul.listing{
font-size:1em;
}
- .divider{
- text-transform:uppercase;
- font-size:0.8em;
- background-color:$color-grey-3;
- td{
-
- padding-top:0.5em;
- padding-bottom:0.5em;
- }
- }
-
&.full-width .divider td{
padding-left:20px;
}
-
/* specific columns */
.bulk{
padding-right:0;
@@ -159,9 +159,9 @@ ul.listing{
h2{
text-transform:none;
margin:0;
- font-size:1.1em;
- font-weight:700;
- color:$color-grey-2;
+ font-size:1.15em;
+ font-weight:600;
+ color:darken($color-grey-2, 10%);
line-height:1.5em;
a{
@@ -197,6 +197,7 @@ ul.listing{
color:$color-teal;
border-color:$color-grey-3;
background:white;
+ font-size:0.84em; /* 0.01em difference to regular small buttons */
&:hover{
border-color:$color-teal;
@@ -213,27 +214,30 @@ ul.listing{
.children,
.no-children{
padding:0 !important;
- border-left:1px dashed $color-input-border;
+
&:hover{
background-color:$color-grey-5;
}
- }
- .children a,
- .no-children a{
- display:block;
- padding:2em 0;
+
+ a{
+ display:block;
+ padding:2em 0;
+ }
}
.children a{
color:$color-teal;
display:block;
+
&:before{
font-size:3rem;
}
}
+
.no-children a{
color:$color-grey-3;
display:block;
+
&:before{
font-size:1.5rem;
}
@@ -241,6 +245,7 @@ ul.listing{
color:$color-teal;
}
}
+
&.small .children a:before{
font-size:30px;
}
@@ -273,7 +278,6 @@ ul.listing{
border:1px dashed $color-input-border;
border-width:1px 0;
-
td{
display:none;
@@ -297,20 +301,12 @@ ul.listing{
}
}
- td.children:hover{
- background-color:$color-teal;
-
- a:before{
- color:white;
- }
- }
-
table .no-results-message{
padding-left:20px;
}
- .inactive h2{
- opacity:0.5;
+ .unpublished h2{
+ opacity:0.7;
}
.index {
@@ -319,6 +315,7 @@ ul.listing{
.title h2{
font-size:1.2em;
opacity:1;
+
a{
@include transition(opacity 0.2s ease);
}
@@ -379,7 +376,7 @@ table.listing{
h2{
color:white;
font-size:1.8em;
- font-weight:600;
+ font-weight:500;
a:hover{
color:white;
@@ -526,15 +523,27 @@ table.listing{
}
.no-children {
border-color:transparent;
+
+ a{
+ opacity:0;
+ }
}
- .no-children a{
- opacity:0;
+ tr:hover .no-children a{
+ opacity:1;
}
- .no-children:hover{
- border-color:$color-input-border;
- a{opacity:1;}
+ tr:hover .children{
+ background-color:$color-teal;
+
+ a:before{
+ color:white;
+ }
}
+ td.children:hover{
+ background-color:$color-teal-darker;
+ }
+
+
table .no-results-message{
padding-left:50px;
}
diff --git a/wagtail/wagtailadmin/static/wagtailadmin/scss/components/messages.scss b/wagtail/wagtailadmin/static/wagtailadmin/scss/components/messages.scss
index f5c32d8c5..7a05d31f8 100644
--- a/wagtail/wagtailadmin/static/wagtailadmin/scss/components/messages.scss
+++ b/wagtail/wagtailadmin/static/wagtailadmin/scss/components/messages.scss
@@ -1,3 +1,10 @@
+/*
+ Messages are specific to Django's "Messaging" system which adds messages into the session,
+ for display on the next page visited. These appear as an animated banner at the top of the page.
+
+ For inline help text, see typography.scss
+*/
+
.messages{
position:relative;
z-index:5;
diff --git a/wagtail/wagtailadmin/static/wagtailadmin/scss/components/progressbar.scss b/wagtail/wagtailadmin/static/wagtailadmin/scss/components/progressbar.scss
new file mode 100644
index 000000000..472b55859
--- /dev/null
+++ b/wagtail/wagtailadmin/static/wagtailadmin/scss/components/progressbar.scss
@@ -0,0 +1,25 @@
+.progress{
+ @include border-radius(1.2em);
+ background-color:$color-teal-dark;
+ border:1px solid $color-teal;
+ opacity:0;
+
+ &.active{
+ opacity:1;
+ @include transition(opacity 0.3s ease);
+ }
+
+ .bar{
+ @include border-radius(1.5em);
+ @include transition(width 0.3s ease);
+ overflow:hidden;
+ box-sizing:border-box;
+ text-align:right;
+ line-height:1.2em;
+ color:white;
+ font-size:0.85em;
+ background-color:$color-teal;
+ height:1.2em;
+ padding-right:1em;
+ }
+}
\ No newline at end of file
diff --git a/wagtail/wagtailadmin/static/wagtailadmin/scss/components/typography.scss b/wagtail/wagtailadmin/static/wagtailadmin/scss/components/typography.scss
new file mode 100644
index 000000000..1b7e36324
--- /dev/null
+++ b/wagtail/wagtailadmin/static/wagtailadmin/scss/components/typography.scss
@@ -0,0 +1,111 @@
+h1,h2,h3,h4,h5,h6{
+ font-weight:normal;
+}
+
+h1{
+ line-height:1.3em;
+ font-size:1.5em;
+ text-transform:uppercase;
+ color:$color-grey-1;
+ font-weight:600;
+
+ span{
+ text-transform:none;
+ font-weight:300;
+ }
+
+ .homepage &{
+ text-transform:none;
+ }
+}
+h2{
+ text-transform:uppercase;
+ font-size:1.3em;
+ font-family:Open Sans;
+ font-weight:600;
+ color:$color-grey-2;
+
+ .page-explorer &{
+ text-transform:none;
+ }
+}
+a{
+ outline:none;
+ color:$color-link;
+ text-decoration:none;
+
+ &:hover{
+ color:$color-link-hover;
+ }
+}
+
+code{
+ @include box-shadow(inset 0px 0px 4px 0px rgba(0, 0, 0, 0.2));
+ background-color:$color-fieldset-hover;
+ padding:2px 5px;
+}
+
+kbd{
+ @include border-radius(3px);
+ font-family:Open Sans, Arial, sans-serif;
+ border:1px solid $color-grey-2;
+ border-color:rgba(0,0,0,0.2);
+ padding:0.3em 0.5em;
+}
+
+/* Help text formatters */
+
+.help-block{
+ float:left;
+ padding:1em;
+ margin:1em 0;
+ clear:both;
+
+ p{
+ margin-top:0;
+
+ &:last-child{
+ margin-bottom:0;
+ }
+ }
+}
+ .help-info, .help-warning, .help-critical{
+ @include border-radius(3px);
+ padding-left:3.5em;
+ position:relative;
+
+ &:before{
+ font-family:wagtail;
+ position:absolute;
+ left:1em;
+ top:0.7em;
+ content:"?";
+ font-size:1.4em;
+ }
+ }
+ .help-info{
+ background-color:lighten($color-blue, 30%);
+
+ &:before{
+ color:$color-blue;
+ }
+ }
+
+ .help-warning{
+ background-color:lighten($color-orange, 30%);
+
+ &:before{
+ color:$color-orange;
+ content:"!";
+ }
+ }
+
+ .help-critical{
+ background-color:lighten($color-red, 40%);
+
+ &:before{
+ color:$color-red;
+ content:"!";
+ }
+ }
+
diff --git a/wagtail/wagtailadmin/static/wagtailadmin/scss/core.scss b/wagtail/wagtailadmin/static/wagtailadmin/scss/core.scss
index 4768ef9e4..6591ec262 100644
--- a/wagtail/wagtailadmin/static/wagtailadmin/scss/core.scss
+++ b/wagtail/wagtailadmin/static/wagtailadmin/scss/core.scss
@@ -4,6 +4,7 @@
@import "components/explorer.scss";
@import "components/icons.scss";
+@import "components/typography.scss";
@import "components/tabs.scss";
@import "components/dropdowns.scss";
@import "components/modals.scss";
@@ -12,6 +13,7 @@
@import "components/messages.scss";
@import "components/formatters.scss";
@import "components/header.scss";
+@import "components/progressbar.scss";
@import "components/datetimepicker.scss";
@import "fonts.scss";
@@ -35,67 +37,6 @@ body{
}
}
-h1,h2,h3,h4,h5,h6{
- font-weight:normal;
-}
-
-h1{
- line-height:1.3em;
- font-size:1.5em;
- text-transform:uppercase;
- color:$color-grey-1;
- font-weight:600;
-
- span{
- text-transform:none;
- font-weight:300;
- }
-
- .homepage &{
- text-transform:none;
- }
-}
-h2{
- text-transform:uppercase;
- font-size:1.3em;
- font-family:Open Sans;
- font-weight:600;
- color:$color-grey-2;
-
- .page-explorer &{
- text-transform:none;
- }
-}
-a{
- outline:none;
- color:$color-link;
- text-decoration:none;
-
- &:hover{
- color:$color-link-hover;
- }
-}
-
-code{
- @include box-shadow(inset 0px 0px 4px 0px rgba(0, 0, 0, 0.2));
- background-color:$color-fieldset-hover;
- padding:2px 5px;
-}
-
-kbd{
- @include border-radius(3px);
- font-family:Open Sans, Arial, sans-serif;
- border:1px solid $color-grey-2;
- border-color:rgba(0,0,0,0.2);
- padding:0.3em 0.5em;
-}
-
-img{
- max-width:100%;
- height:auto;
- border: 3px solid $color-grey-4;
-}
-
.browsermessage{
background-color:$color-red;
color:white;
@@ -164,6 +105,8 @@ img{
.nav-main{
$selected-highlight:darken($color-grey-1, 10%);
+ $submenu-color:darken($color-grey-1, 5%);
+
top: 43px;
bottom: 0px;
@@ -184,12 +127,12 @@ img{
border-bottom:1px solid rgba(100,100,100,0.2);
position:relative;
- &.selected, &.active{
+ &.selected{
background:$selected-highlight;
}
- a:before{
- font-size:1.2rem;
+ &.active{
+ background:$submenu-color;
}
.menu-snippets &.menu-snippets,
@@ -210,42 +153,49 @@ img{
a {
-webkit-font-smoothing: auto;
text-decoration:none;
- text-transform:uppercase;
display: block;
color: #AAA;
- padding: 0.9em 1.2em;
+ padding: 0.8em 1.7em;
position:relative;
- font-size:0.85em;
- font-weight:400;
+ font-size:0.9em;
white-space:nowrap;
text-shadow:-1px -1px 0px rgba(0,0,0,0.3);
&:before{
+ font-size:1rem;
vertical-align:-20%;
margin-right:0.5em;
}
&:hover{
+ background-color:rgba(100,100,100,0.15);
color:white;
}
- }
- li.active > a{
- color:$color-orange;
+ /* only really used for spinners */
+ &:after{
+ font-size:1.5em;
+ margin:0;
+ position:absolute;
+ right:0.5em;
+ top:0.5em;
+ margin-top:0.15em;
+ }
+ }
+ li.active > a:hover{
+ background-color:transparent;
}
-
li.active .submenu{
@include transition(width 0.2s ease);
}
- .submenu{
- @include transition(width 0.2s ease);
- background:$selected-highlight;
+ .submenu{
+ background:$submenu-color;
position:fixed;
height:100%;
width:0;
padding:0;
top:0;
- left:150px;
+ left:$menu-width;
overflow:auto;
max-height:100%;
border-right:1px solid rgba(0,0,0,0.1);
@@ -253,11 +203,12 @@ img{
h2,ul{
float:right;
- width:150px;
+ width:$menu-width;
}
h2{
padding:0.2em 0;
+ font-size:1.2em;
font-weight:500;
text-transform:none;
text-align:center;
@@ -269,15 +220,15 @@ img{
text-align:center;
margin:0 0 0.2em 0;
width:100%;
- opacity:0.2;
+ opacity:0.15;
}
}
a{
text-transform:none;
- padding:1em 0;
+
white-space:normal;
- padding-left:3em;
+ padding: 0.9em 0 0.9em 3.5em;
&:before{
margin-left:-1.5em;
@@ -287,11 +238,15 @@ img{
background-color:rgba(100,100,100,0.2);
}
}
+
+ li{
+ border:0;
+ }
}
li.active .submenu{
- width:150px;
- padding:0 1.5em 1.5em 1.5em;
+ width:$menu-width;
+ padding:0 0 1.5em 0;
}
li .submenu{
width:0;
diff --git a/wagtail/wagtailadmin/static/wagtailadmin/scss/variables.scss b/wagtail/wagtailadmin/static/wagtailadmin/scss/variables.scss
index e27817175..c016d50c3 100644
--- a/wagtail/wagtailadmin/static/wagtailadmin/scss/variables.scss
+++ b/wagtail/wagtailadmin/static/wagtailadmin/scss/variables.scss
@@ -27,6 +27,7 @@ $breakpoint-desktop-larger: 100em; /* 1600px */
$color-teal: #43b1b0;
$color-teal-darker: darken($color-teal, 10%);
$color-teal-dark: #246060;
+$color-blue: #71b2d4;
$color-red: #cd3238;
$color-orange:#e9b04d;
$color-green: #189370;
@@ -61,4 +62,4 @@ $color-text-input: $color-grey-1;
/* misc sizing */
$thumbnail-width: 130px;
-$menu-width: 150px;
\ No newline at end of file
+$menu-width: 180px;
\ No newline at end of file
diff --git a/wagtail/wagtailadmin/templates/wagtailadmin/admin_base.html b/wagtail/wagtailadmin/templates/wagtailadmin/admin_base.html
index 0cae459a2..1c26a8d14 100644
--- a/wagtail/wagtailadmin/templates/wagtailadmin/admin_base.html
+++ b/wagtail/wagtailadmin/templates/wagtailadmin/admin_base.html
@@ -22,6 +22,9 @@
+
{% endcompress %}
{% block extra_js %}{% endblock %}
diff --git a/wagtail/wagtailadmin/templates/wagtailadmin/base.html b/wagtail/wagtailadmin/templates/wagtailadmin/base.html
index ef6f9d57a..c7a89def7 100644
--- a/wagtail/wagtailadmin/templates/wagtailadmin/base.html
+++ b/wagtail/wagtailadmin/templates/wagtailadmin/base.html
@@ -8,11 +8,7 @@
{% main_nav %}
-
+
diff --git a/wagtail/wagtailadmin/templates/wagtailadmin/pages/copy.html b/wagtail/wagtailadmin/templates/wagtailadmin/pages/copy.html
new file mode 100644
index 000000000..1a645c16f
--- /dev/null
+++ b/wagtail/wagtailadmin/templates/wagtailadmin/pages/copy.html
@@ -0,0 +1,29 @@
+{% extends "wagtailadmin/base.html" %}
+{% load i18n %}
+{% block titletag %}{% blocktrans with title=page.title %}Copy {{ title }}{% endblocktrans %}{% endblock %}
+{% block bodyclass %}menu-explorer{% endblock %}
+{% block content %}
+ {% trans "Copy" as copy_str %}
+ {% include "wagtailadmin/shared/header.html" with title=copy_str subtitle=page.title icon="doc-empty-inverse" %}
+
+
+ {% include "wagtailadmin/shared/explorer_nav_child.html" %}
+
\ No newline at end of file
diff --git a/wagtail/wagtailadmin/templates/wagtailadmin/shared/explorer_nav_child.html b/wagtail/wagtailadmin/templates/wagtailadmin/shared/explorer_nav_child.html
new file mode 100644
index 000000000..c2d011540
--- /dev/null
+++ b/wagtail/wagtailadmin/templates/wagtailadmin/shared/explorer_nav_child.html
@@ -0,0 +1,13 @@
+{% load wagtailadmin_tags %}
+
+{% for page, children in nodes %}
+
-
\ No newline at end of file
+
diff --git a/wagtail/wagtailadmin/templatetags/wagtailadmin_tags.py b/wagtail/wagtailadmin/templatetags/wagtailadmin_tags.py
index 2cb53e750..a08211591 100644
--- a/wagtail/wagtailadmin/templatetags/wagtailadmin_tags.py
+++ b/wagtail/wagtailadmin/templatetags/wagtailadmin_tags.py
@@ -1,5 +1,6 @@
from __future__ import unicode_literals
+from django.conf import settings
from django import template
from django.core import urlresolvers
from django.utils.translation import ugettext_lazy as _
@@ -21,7 +22,7 @@ def explorer_nav():
}
-@register.inclusion_tag('wagtailadmin/shared/explorer_nav.html')
+@register.inclusion_tag('wagtailadmin/shared/explorer_nav_child.html')
def explorer_subnav(nodes):
return {
'nodes': nodes
@@ -31,7 +32,7 @@ def explorer_subnav(nodes):
@register.inclusion_tag('wagtailadmin/shared/main_nav.html', takes_context=True)
def main_nav(context):
menu_items = [
- MenuItem(_('Explorer'), '#', classnames='icon icon-folder-open-inverse dl-trigger', order=100),
+ MenuItem(_('Explorer'), urlresolvers.reverse('wagtailadmin_explore_root'), classnames='icon icon-folder-open-inverse dl-trigger', order=100),
MenuItem(_('Search'), urlresolvers.reverse('wagtailadmin_pages_search'), classnames='icon icon-search', order=200),
]
@@ -121,3 +122,8 @@ def hook_output(hook_name):
"""
snippets = [fn() for fn in hooks.get_hooks(hook_name)]
return ''.join(snippets)
+
+
+@register.assignment_tag
+def usage_count_enabled():
+ return getattr(settings, 'WAGTAIL_USAGE_COUNT_ENABLED', False)
diff --git a/wagtail/wagtailadmin/templatetags/wagtailuserbar.py b/wagtail/wagtailadmin/templatetags/wagtailuserbar.py
index 3f1bf2951..c7861185e 100644
--- a/wagtail/wagtailadmin/templatetags/wagtailuserbar.py
+++ b/wagtail/wagtailadmin/templatetags/wagtailuserbar.py
@@ -3,16 +3,20 @@ 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
+
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",
- DeprecationWarning
+ RemovedInWagtail06Warning
)
# Find request object
diff --git a/wagtail/wagtailadmin/tests/test_account_management.py b/wagtail/wagtailadmin/tests/test_account_management.py
index 048ef6fbc..c398e17cb 100644
--- a/wagtail/wagtailadmin/tests/test_account_management.py
+++ b/wagtail/wagtailadmin/tests/test_account_management.py
@@ -2,7 +2,8 @@ from __future__ import unicode_literals
from django.test import TestCase
from django.core.urlresolvers import reverse
-from django.contrib.auth.models import User, Group, Permission
+from django.contrib.auth import get_user_model
+from django.contrib.auth.models import Group, Permission
from django.contrib.auth.tokens import PasswordResetTokenGenerator
from django.core import mail
@@ -31,7 +32,7 @@ class TestAuthentication(TestCase, WagtailTestUtils):
the user was logged in successfully
"""
# Create user to log in with
- user = User.objects.create_superuser(username='test', email='test@email.com', password='password')
+ user = get_user_model().objects.create_superuser(username='test', email='test@email.com', password='password')
# Post credentials to the login page
post_data = {
@@ -45,7 +46,7 @@ class TestAuthentication(TestCase, WagtailTestUtils):
# Check that the user was logged in
self.assertTrue('_auth_user_id' in self.client.session)
- self.assertEqual(self.client.session['_auth_user_id'], User.objects.get(username='test').id)
+ self.assertEqual(self.client.session['_auth_user_id'], get_user_model().objects.get(username='test').id)
def test_already_logged_in_redirect(self):
"""
@@ -70,7 +71,7 @@ class TestAuthentication(TestCase, WagtailTestUtils):
This tests issue #431
"""
# Login as unprivileged user
- User.objects.create(username='unprivileged', password='123')
+ get_user_model().objects.create(username='unprivileged', password='123')
self.client.login(username='unprivileged', password='123')
# Get login page
@@ -169,7 +170,7 @@ class TestAccountSection(TestCase, WagtailTestUtils):
self.assertRedirects(response, reverse('wagtailadmin_account'))
# Check that the password was changed
- self.assertTrue(User.objects.get(username='test').check_password('newpassword'))
+ self.assertTrue(get_user_model().objects.get(username='test').check_password('newpassword'))
def test_change_password_view_post_password_mismatch(self):
"""
@@ -191,7 +192,7 @@ class TestAccountSection(TestCase, WagtailTestUtils):
self.assertTrue("The two password fields didn't match." in response.context['form'].errors['new_password2'])
# Check that the password was not changed
- self.assertTrue(User.objects.get(username='test').check_password('password'))
+ self.assertTrue(get_user_model().objects.get(username='test').check_password('password'))
def test_notification_preferences_view(self):
"""
@@ -221,7 +222,7 @@ class TestAccountSection(TestCase, WagtailTestUtils):
# Check that the user was redirected to the account page
self.assertRedirects(response, reverse('wagtailadmin_account'))
- profile = UserProfile.get_for_user(User.objects.get(username='test'))
+ profile = UserProfile.get_for_user(get_user_model().objects.get(username='test'))
# Check that the notification preferences are as submitted
self.assertFalse(profile.submitted_notifications)
@@ -235,7 +236,7 @@ class TestAccountManagementForNonModerator(TestCase, WagtailTestUtils):
"""
def setUp(self):
# Create a non-moderator user
- self.submitter = User.objects.create_user('submitter', 'submitter@example.com', 'password')
+ self.submitter = get_user_model().objects.create_user('submitter', 'submitter@example.com', 'password')
self.submitter.groups.add(Group.objects.get(name='Editors'))
self.client.login(username=self.submitter.username, password='password')
@@ -260,7 +261,7 @@ class TestAccountManagementForAdminOnlyUser(TestCase, WagtailTestUtils):
admin_only_group = Group.objects.create(name='Admin Only')
admin_only_group.permissions.add(Permission.objects.get(codename='access_admin'))
- self.admin_only_user = User.objects.create_user('admin_only_user', 'admin_only_user@example.com', 'password')
+ self.admin_only_user = get_user_model().objects.create_user('admin_only_user', 'admin_only_user@example.com', 'password')
self.admin_only_user.groups.add(admin_only_group)
self.client.login(username=self.admin_only_user.username, password='password')
@@ -291,7 +292,7 @@ class TestPasswordReset(TestCase, WagtailTestUtils):
"""
def setUp(self):
# Create a user
- User.objects.create_superuser(username='test', email='test@email.com', password='password')
+ get_user_model().objects.create_superuser(username='test', email='test@email.com', password='password')
def test_password_reset_view(self):
"""
@@ -368,7 +369,7 @@ class TestPasswordReset(TestCase, WagtailTestUtils):
from django.utils.http import urlsafe_base64_encode
# Get user
- self.user = User.objects.get(username='test')
+ self.user = get_user_model().objects.get(username='test')
# Generate a password reset token
self.password_reset_token = PasswordResetTokenGenerator().make_token(self.user)
@@ -410,7 +411,7 @@ class TestPasswordReset(TestCase, WagtailTestUtils):
self.assertRedirects(response, reverse('password_reset_complete'))
# Check that the password was changed
- self.assertTrue(User.objects.get(username='test').check_password('newpassword'))
+ self.assertTrue(get_user_model().objects.get(username='test').check_password('newpassword'))
def test_password_reset_confirm_view_post_password_mismatch(self):
"""
@@ -434,7 +435,7 @@ class TestPasswordReset(TestCase, WagtailTestUtils):
self.assertTrue("The two password fields didn't match." in response.context['form'].errors['new_password2'])
# Check that the password was not changed
- self.assertTrue(User.objects.get(username='test').check_password('password'))
+ self.assertTrue(get_user_model().objects.get(username='test').check_password('password'))
def test_password_reset_done_view(self):
"""
diff --git a/wagtail/wagtailadmin/tests/test_pages_views.py b/wagtail/wagtailadmin/tests/test_pages_views.py
index a5b4164cb..765c21786 100644
--- a/wagtail/wagtailadmin/tests/test_pages_views.py
+++ b/wagtail/wagtailadmin/tests/test_pages_views.py
@@ -2,15 +2,16 @@ from datetime import timedelta
from django.test import TestCase
from django.core.urlresolvers import reverse
-from django.contrib.auth.models import User, Permission
+from django.contrib.auth import get_user_model
+from django.contrib.auth.models import Group, Permission
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
+from wagtail.tests.models import SimplePage, EventPage, EventPageCarouselItem, StandardIndex, BusinessIndex, BusinessChild, BusinessSubIndex, TaggedPage
from wagtail.tests.utils import unittest, WagtailTestUtils
from wagtail.wagtailcore.models import Page, PageRevision
-from wagtail.wagtailcore.signals import page_published
+from wagtail.wagtailcore.signals import page_published, page_unpublished
from wagtail.wagtailusers.models import UserProfile
@@ -301,7 +302,7 @@ class TestPageCreation(TestCase, WagtailTestUtils):
def test_create_simplepage_post_submit(self):
# Create a moderator user for testing email
- moderator = User.objects.create_superuser('moderator', 'moderator@email.com', 'password')
+ moderator = get_user_model().objects.create_superuser('moderator', 'moderator@email.com', 'password')
# Submit
post_data = {
@@ -603,7 +604,7 @@ class TestPageEdit(TestCase, WagtailTestUtils):
def test_page_edit_post_submit(self):
# Create a moderator user for testing email
- moderator = User.objects.create_superuser('moderator', 'moderator@email.com', 'password')
+ moderator = get_user_model().objects.create_superuser('moderator', 'moderator@email.com', 'password')
# Tests submitting from edit page
post_data = {
@@ -809,6 +810,15 @@ class TestPageDelete(TestCase, WagtailTestUtils):
self.assertEqual(response.status_code, 403)
def test_page_delete_post(self):
+ # Connect a mock signal handler to page_unpublished signal
+ signal_fired = [False]
+ signal_page = [None]
+ def page_unpublished_handler(sender, instance, **kwargs):
+ signal_fired[0] = True
+ signal_page[0] = instance
+ page_unpublished.connect(page_unpublished_handler)
+
+ # Post
post_data = {'hello': 'world'} # For some reason, this test doesn't work without a bit of POST data
response = self.client.post(reverse('wagtailadmin_pages_delete', args=(self.child_page.id, )), post_data)
@@ -818,6 +828,38 @@ class TestPageDelete(TestCase, WagtailTestUtils):
# Check that the page is gone
self.assertEqual(Page.objects.filter(path__startswith=self.root_page.path, slug='hello-world').count(), 0)
+ # Check that the page_unpublished signal was fired
+ self.assertTrue(signal_fired[0])
+ self.assertEqual(signal_page[0], self.child_page)
+ self.assertEqual(signal_page[0], signal_page[0].specific)
+
+ def test_page_delete_notlive_post(self):
+ # Same as above, but this makes sure the page_unpublished signal is not fired
+ # when if the page is not live when it is deleted
+
+ # Unpublish the page
+ self.child_page.live = False
+ self.child_page.save()
+
+ # Connect a mock signal handler to page_unpublished signal
+ signal_fired = [False]
+ def page_unpublished_handler(sender, instance, **kwargs):
+ signal_fired[0] = True
+ page_unpublished.connect(page_unpublished_handler)
+
+ # Post
+ post_data = {'hello': 'world'} # For some reason, this test doesn't work without a bit of POST data
+ response = self.client.post(reverse('wagtailadmin_pages_delete', args=(self.child_page.id, )), post_data)
+
+ # Should be redirected to explorer page
+ self.assertRedirects(response, reverse('wagtailadmin_explore', args=(self.root_page.id, )))
+
+ # Check that the page is gone
+ self.assertEqual(Page.objects.filter(path__startswith=self.root_page.path, slug='hello-world').count(), 0)
+
+ # Check that the page_unpublished signal was not fired
+ self.assertFalse(signal_fired[0])
+
class TestPageSearch(TestCase, WagtailTestUtils):
def setUp(self):
@@ -912,6 +954,260 @@ class TestPageMove(TestCase, WagtailTestUtils):
self.assertEqual(response.status_code, 200)
+class TestPageCopy(TestCase, WagtailTestUtils):
+ def setUp(self):
+ # Find root page
+ self.root_page = Page.objects.get(id=2)
+
+ # Create a page
+ self.test_page = self.root_page.add_child(instance=SimplePage(
+ title="Hello world!",
+ slug='hello-world',
+ live=True,
+ ))
+
+ # Create a couple of child pages
+ self.test_child_page = self.test_page.add_child(instance=SimplePage(
+ title="Child page",
+ slug='child-page',
+ live=True,
+ ))
+
+ self.test_unpublished_child_page = self.test_page.add_child(instance=SimplePage(
+ title="Unpublished Child page",
+ slug='unpublished-child-page',
+ live=False,
+ ))
+
+ # Login
+ self.user = self.login()
+
+ def test_page_copy(self):
+ response = self.client.get(reverse('wagtailadmin_pages_copy', args=(self.test_page.id, )))
+
+ # Check response
+ self.assertEqual(response.status_code, 200)
+ self.assertTemplateUsed(response, 'wagtailadmin/pages/copy.html')
+
+ # Make sure all fields are in the form
+ self.assertContains(response, "New title")
+ self.assertContains(response, "New slug")
+ self.assertContains(response, "Copy subpages")
+ self.assertContains(response, "Publish copies")
+
+ def test_page_copy_bad_permissions(self):
+ # 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 copy page
+ response = self.client.get(reverse('wagtailadmin_pages_copy', args=(self.test_page.id, )))
+
+ # Check that the user recieved a 403 response
+ self.assertEqual(response.status_code, 403)
+
+ def test_page_copy_post(self):
+ post_data = {
+ 'new_title': "Hello world 2",
+ 'new_slug': 'hello-world-2',
+ 'copy_subpages': False,
+ 'publish_copies': False,
+ }
+ response = self.client.post(reverse('wagtailadmin_pages_copy', args=(self.test_page.id, )), post_data)
+
+ # Check that the user was redirected to the parents explore page
+ self.assertRedirects(response, reverse('wagtailadmin_explore', args=(self.root_page.id, )))
+
+ # Get copy
+ page_copy = self.root_page.get_children().filter(slug='hello-world-2').first()
+
+ # Check that the copy exists
+ self.assertNotEqual(page_copy, None)
+
+ # Check that the copy is not live
+ self.assertFalse(page_copy.live)
+
+ # Check that the owner of the page is set correctly
+ self.assertEqual(page_copy.owner, self.user)
+
+ # Check that the children were not copied
+ self.assertEqual(page_copy.get_children().count(), 0)
+
+ def test_page_copy_post_copy_subpages(self):
+ post_data = {
+ 'new_title': "Hello world 2",
+ 'new_slug': 'hello-world-2',
+ 'copy_subpages': True,
+ 'publish_copies': False,
+ }
+ response = self.client.post(reverse('wagtailadmin_pages_copy', args=(self.test_page.id, )), post_data)
+
+ # Check that the user was redirected to the parents explore page
+ self.assertRedirects(response, reverse('wagtailadmin_explore', args=(self.root_page.id, )))
+
+ # Get copy
+ page_copy = self.root_page.get_children().filter(slug='hello-world-2').first()
+
+ # Check that the copy exists
+ self.assertNotEqual(page_copy, None)
+
+ # Check that the copy is not live
+ self.assertFalse(page_copy.live)
+
+ # Check that the owner of the page is set correctly
+ self.assertEqual(page_copy.owner, self.user)
+
+ # Check that the children were copied
+ self.assertEqual(page_copy.get_children().count(), 2)
+
+ # Check the the child pages
+ # Neither of them should be live
+ child_copy = page_copy.get_children().filter(slug='child-page').first()
+ self.assertNotEqual(child_copy, None)
+ self.assertFalse(child_copy.live)
+
+ unpublished_child_copy = page_copy.get_children().filter(slug='unpublished-child-page').first()
+ self.assertNotEqual(unpublished_child_copy, None)
+ self.assertFalse(unpublished_child_copy.live)
+
+ def test_page_copy_post_copy_subpages_publish_copies(self):
+ post_data = {
+ 'new_title': "Hello world 2",
+ 'new_slug': 'hello-world-2',
+ 'copy_subpages': True,
+ 'publish_copies': True,
+ }
+ response = self.client.post(reverse('wagtailadmin_pages_copy', args=(self.test_page.id, )), post_data)
+
+ # Check that the user was redirected to the parents explore page
+ self.assertRedirects(response, reverse('wagtailadmin_explore', args=(self.root_page.id, )))
+
+ # Get copy
+ page_copy = self.root_page.get_children().filter(slug='hello-world-2').first()
+
+ # Check that the copy exists
+ self.assertNotEqual(page_copy, None)
+
+ # Check that the copy is live
+ self.assertTrue(page_copy.live)
+
+ # Check that the owner of the page is set correctly
+ self.assertEqual(page_copy.owner, self.user)
+
+ # Check that the children were copied
+ self.assertEqual(page_copy.get_children().count(), 2)
+
+ # Check the the child pages
+ # The child_copy should be live but the unpublished_child_copy shouldn't
+ child_copy = page_copy.get_children().filter(slug='child-page').first()
+ self.assertNotEqual(child_copy, None)
+ self.assertTrue(child_copy.live)
+
+ unpublished_child_copy = page_copy.get_children().filter(slug='unpublished-child-page').first()
+ self.assertNotEqual(unpublished_child_copy, None)
+ self.assertFalse(unpublished_child_copy.live)
+
+ def test_page_copy_post_existing_slug(self):
+ # This tests the existing slug checking on page copy
+
+ # Attempt to copy the page but forget to change the slug
+ post_data = {
+ 'new_title': "Hello world 2",
+ 'new_slug': 'hello-world',
+ 'copy_subpages': False,
+ }
+ response = self.client.post(reverse('wagtailadmin_pages_copy', args=(self.test_page.id, )), post_data)
+
+ # Should not be redirected (as the save should fail)
+ self.assertEqual(response.status_code, 200)
+
+ # Check that a form error was raised
+ self.assertFormError(response, 'form', 'new_slug', "This slug is already in use")
+
+ def test_page_copy_post_invalid_slug(self):
+ # Attempt to copy the page but set an invalid slug string
+ post_data = {
+ 'new_title': "Hello world 2",
+ 'new_slug': 'hello world!',
+ 'copy_subpages': False,
+ }
+ response = self.client.post(reverse('wagtailadmin_pages_copy', args=(self.test_page.id, )), post_data)
+
+ # Should not be redirected (as the save should fail)
+ self.assertEqual(response.status_code, 200)
+
+ # Check that a form error was raised
+ self.assertFormError(response, 'form', 'new_slug', "Enter a valid 'slug' consisting of letters, numbers, underscores or hyphens.")
+
+ def test_page_copy_no_publish_permission(self):
+ # Turn user into an editor who can add pages but not publish them
+ self.user.is_superuser = False
+ self.user.groups.add(
+ Group.objects.get(name="Editors"),
+ )
+ self.user.save()
+
+ # Get copy page
+ response = self.client.get(reverse('wagtailadmin_pages_copy', args=(self.test_page.id, )))
+
+ # The user should have access to the copy page
+ self.assertEqual(response.status_code, 200)
+ self.assertTemplateUsed(response, 'wagtailadmin/pages/copy.html')
+
+ # Make sure the "publish copies" field is hidden
+ self.assertNotContains(response, "Publish copies")
+
+ def test_page_copy_no_publish_permission_post_copy_subpages_publish_copies(self):
+ # This tests that unprivileged users cannot publish copied pages even if they hack their browser
+
+ # Turn user into an editor who can add pages but not publish them
+ self.user.is_superuser = False
+ self.user.groups.add(
+ Group.objects.get(name="Editors"),
+ )
+ self.user.save()
+
+ # Post
+ post_data = {
+ 'new_title': "Hello world 2",
+ 'new_slug': 'hello-world-2',
+ 'copy_subpages': True,
+ 'publish_copies': True,
+ }
+ response = self.client.post(reverse('wagtailadmin_pages_copy', args=(self.test_page.id, )), post_data)
+
+ # Check that the user was redirected to the parents explore page
+ self.assertRedirects(response, reverse('wagtailadmin_explore', args=(self.root_page.id, )))
+
+ # Get copy
+ page_copy = self.root_page.get_children().filter(slug='hello-world-2').first()
+
+ # Check that the copy exists
+ self.assertNotEqual(page_copy, None)
+
+ # Check that the copy is not live
+ self.assertFalse(page_copy.live)
+
+ # Check that the owner of the page is set correctly
+ self.assertEqual(page_copy.owner, self.user)
+
+ # Check that the children were copied
+ self.assertEqual(page_copy.get_children().count(), 2)
+
+ # Check the the child pages
+ # Neither of them should be live
+ child_copy = page_copy.get_children().filter(slug='child-page').first()
+ self.assertNotEqual(child_copy, None)
+ self.assertFalse(child_copy.live)
+
+ unpublished_child_copy = page_copy.get_children().filter(slug='unpublished-child-page').first()
+ self.assertNotEqual(unpublished_child_copy, None)
+ self.assertFalse(unpublished_child_copy.live)
+
+
class TestPageUnpublish(TestCase, WagtailTestUtils):
def setUp(self):
self.user = self.login()
@@ -967,6 +1263,14 @@ class TestPageUnpublish(TestCase, WagtailTestUtils):
"""
This posts to the unpublish view and checks that the page was unpublished
"""
+ # Connect a mock signal handler to page_unpublished signal
+ signal_fired = [False]
+ signal_page = [None]
+ def page_unpublished_handler(sender, instance, **kwargs):
+ signal_fired[0] = True
+ signal_page[0] = instance
+ page_unpublished.connect(page_unpublished_handler)
+
# Post to the unpublish page
response = self.client.post(reverse('wagtailadmin_pages_unpublish', args=(self.page.id, )), {
'foo': "Must post something or the view won't see this as a POST request",
@@ -978,10 +1282,15 @@ class TestPageUnpublish(TestCase, WagtailTestUtils):
# Check that the page was unpublished
self.assertFalse(SimplePage.objects.get(id=self.page.id).live)
+ # Check that the page_unpublished signal was fired
+ self.assertTrue(signal_fired[0])
+ self.assertEqual(signal_page[0], self.page)
+ self.assertEqual(signal_page[0], signal_page[0].specific)
+
class TestApproveRejectModeration(TestCase, WagtailTestUtils):
def setUp(self):
- self.submitter = User.objects.create_superuser(
+ self.submitter = get_user_model().objects.create_superuser(
username='submitter',
email='submitter@email.com',
password='password',
@@ -1234,6 +1543,7 @@ class TestNotificationPreferences(TestCase, WagtailTestUtils):
self.user = self.login()
# Create two moderator users for testing 'submitted' email
+ User = get_user_model()
self.moderator = User.objects.create_superuser('moderator', 'moderator@email.com', 'password')
self.moderator2 = User.objects.create_superuser('moderator2', 'moderator2@email.com', 'password')
@@ -1356,3 +1666,36 @@ class TestNotificationPreferences(TestCase, WagtailTestUtils):
# No email to send
self.assertEqual(len(mail.outbox), 0)
+
+
+class TestIssue197(TestCase, WagtailTestUtils):
+ def test_issue_197(self):
+ # Find root page
+ self.root_page = Page.objects.get(id=2)
+
+ # Create a tagged page with no tags
+ self.tagged_page = self.root_page.add_child(instance=TaggedPage(
+ title="Tagged page",
+ slug='tagged-page',
+ live=False,
+ ))
+
+ # Login
+ self.user = self.login()
+
+ # Add some tags and publish using edit view
+ post_data = {
+ 'title': "Tagged page",
+ 'slug':'tagged-page',
+ 'tags': "hello, world",
+ 'action-publish': "Publish",
+ }
+ response = self.client.post(reverse('wagtailadmin_pages_edit', args=(self.tagged_page.id, )), post_data)
+
+ # Should be redirected to explorer page
+ self.assertRedirects(response, reverse('wagtailadmin_explore', args=(self.root_page.id, )))
+
+ # Check that both tags are in the pages tag set
+ page = TaggedPage.objects.get(id=self.tagged_page.id)
+ self.assertIn('hello', page.tags.slugs())
+ self.assertIn('world', page.tags.slugs())
diff --git a/wagtail/wagtailadmin/tests/test_userbar.py b/wagtail/wagtailadmin/tests/test_userbar.py
index acdb81690..c43a1bbc0 100644
--- a/wagtail/wagtailadmin/tests/test_userbar.py
+++ b/wagtail/wagtailadmin/tests/test_userbar.py
@@ -2,7 +2,8 @@ from django.test import TestCase
from django.test.client import RequestFactory
from django.core.urlresolvers import reverse
from django.template import Template, Context
-from django.contrib.auth.models import User, AnonymousUser
+from django.contrib.auth import get_user_model
+from django.contrib.auth.models import AnonymousUser
from wagtail.tests.utils import WagtailTestUtils
from wagtail.wagtailcore.models import Page
@@ -10,7 +11,7 @@ from wagtail.wagtailcore.models import Page
class TestUserbarTag(TestCase):
def setUp(self):
- self.user = User.objects.create_superuser(username='test', email='test@email.com', password='password')
+ self.user = get_user_model().objects.create_superuser(username='test', email='test@email.com', password='password')
self.homepage = Page.objects.get(id=2)
def dummy_request(self, user=None):
diff --git a/wagtail/wagtailadmin/tests/tests.py b/wagtail/wagtailadmin/tests/tests.py
index 4d5491f1d..427fd3279 100644
--- a/wagtail/wagtailadmin/tests/tests.py
+++ b/wagtail/wagtailadmin/tests/tests.py
@@ -1,9 +1,10 @@
from django.test import TestCase
+from django.core.urlresolvers import reverse
+from django.core import mail
+
from wagtail.tests.utils import WagtailTestUtils
from wagtail.wagtailcore.models import Page
from wagtail.wagtailadmin.tasks import send_email_task
-from django.core.urlresolvers import reverse
-from django.core import mail
class TestHome(TestCase, WagtailTestUtils):
@@ -43,3 +44,17 @@ class TestSendEmailTask(TestCase):
self.assertEqual(mail.outbox[0].subject, "Test subject")
self.assertEqual(mail.outbox[0].body, "Test content")
self.assertEqual(mail.outbox[0].to, ["nobody@email.com"])
+
+
+class TestExplorerNavView(TestCase, WagtailTestUtils):
+ def setUp(self):
+ self.homepage = Page.objects.get(id=2).specific
+ self.login()
+
+ def test_explorer_nav_view(self):
+ response = self.client.get(reverse('wagtailadmin_explorer_nav'))
+
+ # Check response
+ self.assertEqual(response.status_code, 200)
+ self.assertTemplateUsed('wagtailadmin/shared/explorer_nav.html')
+ self.assertEqual(response.context['nodes'][0][0], self.homepage)
diff --git a/wagtail/wagtailadmin/urls.py b/wagtail/wagtailadmin/urls.py
index b5757694d..72833130e 100644
--- a/wagtail/wagtailadmin/urls.py
+++ b/wagtail/wagtailadmin/urls.py
@@ -38,6 +38,8 @@ urlpatterns += [
url(r'^failwhale/$', home.error_test, name='wagtailadmin_error_test'),
+ url(r'^explorer-nav/$', pages.explorer_nav, name='wagtailadmin_explorer_nav'),
+
url(r'^pages/$', pages.index, name='wagtailadmin_explore_root'),
url(r'^pages/(\d+)/$', pages.index, name='wagtailadmin_explore'),
@@ -63,6 +65,8 @@ urlpatterns += [
url(r'^pages/(\d+)/move/(\d+)/confirm/$', pages.move_confirm, name='wagtailadmin_pages_move_confirm'),
url(r'^pages/(\d+)/set_position/$', pages.set_page_position, name='wagtailadmin_pages_set_page_position'),
+ url(r'^pages/(\d+)/copy/$', pages.copy, name='wagtailadmin_pages_copy'),
+
url(r'^pages/moderation/(\d+)/approve/$', pages.approve_moderation, name='wagtailadmin_pages_approve_moderation'),
url(r'^pages/moderation/(\d+)/reject/$', pages.reject_moderation, name='wagtailadmin_pages_reject_moderation'),
url(r'^pages/moderation/(\d+)/preview/$', pages.preview_for_moderation, name='wagtailadmin_pages_preview_for_moderation'),
diff --git a/wagtail/wagtailadmin/utils.py b/wagtail/wagtailadmin/utils.py
new file mode 100644
index 000000000..043b8336d
--- /dev/null
+++ b/wagtail/wagtailadmin/utils.py
@@ -0,0 +1,36 @@
+from modelcluster.fields import ParentalKey
+
+from wagtail.wagtailcore.models import Page
+
+
+def get_object_usage(obj):
+ "Returns a queryset of pages that link to a particular object"
+
+ pages = Page.objects.none()
+
+ # get all the relation objects for obj
+ relations = type(obj)._meta.get_all_related_objects(
+ include_hidden=True,
+ include_proxy_eq=True
+ )
+ for relation in relations:
+ # if the relation is between obj and a page, get the page
+ if issubclass(relation.model, Page):
+ pages |= Page.objects.filter(
+ id__in=relation.model._base_manager.filter(**{
+ relation.field.name: obj.id
+ }).values_list('id', flat=True)
+ )
+ else:
+ # if the relation is between obj and an object that has a page as a
+ # property, return the page
+ for f in relation.model._meta.fields:
+ if isinstance(f, ParentalKey) and issubclass(f.rel.to, Page):
+ pages |= Page.objects.filter(
+ id__in=relation.model._base_manager.filter(
+ **{
+ relation.field.name: obj.id
+ }).values_list(f.attname, flat=True)
+ )
+
+ return pages
diff --git a/wagtail/wagtailadmin/views/pages.py b/wagtail/wagtailadmin/views/pages.py
index 013ce40c0..3de6f7cb5 100644
--- a/wagtail/wagtailadmin/views/pages.py
+++ b/wagtail/wagtailadmin/views/pages.py
@@ -12,13 +12,22 @@ 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
+from wagtail.wagtailadmin.forms import SearchForm, CopyForm
from wagtail.wagtailadmin import tasks, signals
from wagtail.wagtailcore import hooks
-from wagtail.wagtailcore.models import Page, PageRevision
-from wagtail.wagtailcore.signals import page_published
+from wagtail.wagtailcore.models import Page, PageRevision, get_navigation_menu_items
+from wagtail.wagtailcore.signals import page_published, page_unpublished
+
+
+@permission_required('wagtailadmin.access_admin')
+def explorer_nav(request):
+ return render(request, 'wagtailadmin/shared/explorer_nav.html', {
+ 'nodes': get_navigation_menu_items(),
+ })
@permission_required('wagtailadmin.access_admin')
@@ -306,7 +315,13 @@ def edit(request, page_id):
approved_go_live_at = go_live_at
else:
page.live = True
- form.save()
+
+ # We need save the page this way to workaround a bug
+ # in django-modelcluster causing m2m fields to not
+ # be committed to the database. See github issue #192
+ form.save(commit=False)
+ page.save()
+
# Clear approved_go_live_at for older revisions
page.revisions.update(
submitted_for_moderation=False,
@@ -321,7 +336,9 @@ def edit(request, page_id):
Page.objects.filter(id=page.id).update(has_unpublished_changes=True)
else:
page.has_unpublished_changes = True
- form.save()
+ form.save(commit=False)
+ page.save()
+
page.save_revision(
user=request.user,
@@ -376,8 +393,19 @@ def delete(request, page_id):
raise PermissionDenied
if request.POST:
+ if page.live:
+ # fetch params to pass to the page_unpublished_signal, before the
+ # deletion happens
+ specific_class = page.specific_class
+ specific_page = page.specific
+
parent_id = page.get_parent().id
page.delete()
+
+ # If the page is live, send the unpublished signal
+ if page.live:
+ page_unpublished.send(sender=specific_class, instance=specific_page)
+
messages.success(request, _("Page '{0}' deleted.").format(page.title))
for fn in hooks.get_hooks('after_delete_page'):
@@ -411,7 +439,7 @@ def get_preview_response(page, preview_mode):
if response:
warnings.warn(
"Defining 'show_as_mode' on a page model is deprecated. Use 'serve_preview' instead",
- DeprecationWarning
+ RemovedInWagtail06Warning
)
return response
else:
@@ -538,9 +566,14 @@ def unpublish(request, page_id):
parent_id = page.get_parent().id
page.live = False
page.save()
+
# Since page is unpublished clear the approved_go_live_at of all revisions
page.revisions.update(approved_go_live_at=None)
+
+ page_unpublished.send(sender=page.specific_class, instance=page.specific)
+
messages.success(request, _("Page '{0}' unpublished.").format(page.title))
+
return redirect('wagtailadmin_explore', parent_id)
return render(request, 'wagtailadmin/pages/confirm_unpublish.html', {
@@ -635,6 +668,57 @@ def set_page_position(request, page_to_move_id):
return HttpResponse('')
+@permission_required('wagtailadmin.access_admin')
+def copy(request, page_id):
+ page = Page.objects.get(id=page_id)
+ parent_page = page.get_parent()
+
+ # Make sure this user has permission to add subpages on the parent
+ if not parent_page.permissions_for_user(request.user).can_add_subpage():
+ raise PermissionDenied
+
+ # Check if the user has permission to publish subpages on the parent
+ can_publish = parent_page.permissions_for_user(request.user).can_publish_subpage()
+
+ # Create the form
+ form = CopyForm(request.POST or None, page=page, can_publish=can_publish)
+
+ # Check if user is submitting
+ if request.method == 'POST' and form.is_valid():
+ # Copy the page
+ new_page = page.copy(
+ recursive=form.cleaned_data.get('copy_subpages'),
+ update_attrs={
+ 'title': form.cleaned_data['new_title'],
+ 'slug': form.cleaned_data['new_slug'],
+ }
+ )
+
+ # Check if we should keep copied subpages published
+ publish_copies = can_publish and form.cleaned_data.get('publish_copies')
+
+ # Unpublish copied pages if we need to
+ if not publish_copies:
+ new_page.get_descendants(inclusive=True).update(live=False)
+
+ # Assign user of this request as the owner of all the new pages
+ new_page.get_descendants(inclusive=True).update(owner=request.user)
+
+ # Give a success message back to the user
+ if form.cleaned_data.get('copy_subpages'):
+ messages.success(request, _("Page '{0}' and {1} subpages copied.").format(page.title, new_page.get_descendants().count()))
+ else:
+ messages.success(request, _("Page '{0}' copied.").format(page.title))
+
+ # Redirect to explore of parent page
+ return redirect('wagtailadmin_explore', parent_page.id)
+
+ return render(request, 'wagtailadmin/pages/copy.html', {
+ 'page': page,
+ 'form': form,
+ })
+
+
PAGE_EDIT_HANDLERS = {}
diff --git a/wagtail/wagtailcore/locale/bg/LC_MESSAGES/django.mo b/wagtail/wagtailcore/locale/bg/LC_MESSAGES/django.mo
index d43d58490..4b01bf043 100644
Binary files a/wagtail/wagtailcore/locale/bg/LC_MESSAGES/django.mo and b/wagtail/wagtailcore/locale/bg/LC_MESSAGES/django.mo differ
diff --git a/wagtail/wagtailcore/locale/bg/LC_MESSAGES/django.po b/wagtail/wagtailcore/locale/bg/LC_MESSAGES/django.po
index 46c88a279..3d3cfb9bb 100644
--- a/wagtail/wagtailcore/locale/bg/LC_MESSAGES/django.po
+++ b/wagtail/wagtailcore/locale/bg/LC_MESSAGES/django.po
@@ -1,92 +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:
-# LyuboslavPetrov , 2014
+# Lyuboslav Petrov , 2014
msgid ""
msgstr ""
"Project-Id-Version: Wagtail\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2014-07-11 10:42+0000\n"
-"PO-Revision-Date: 2014-02-24 20:02+0000\n"
-"Last-Translator: LyuboslavPetrov \n"
-"Language-Team: Bulgarian (http://www.transifex.com/projects/p/wagtail/"
-"language/bg/)\n"
-"Language: bg\n"
+"POT-Creation-Date: 2014-08-01 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"
"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:44
+#: 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 ""
-"Задайте това като нещо различно от 80, в случай че имате нужда от определен "
-"порт да се появи в URL адресите ви (напр. код-разработка на порт 8000). Не "
-"се отнася за боравене със заявки (така Port Forwarding ще работи)."
+msgstr "Задайте това като нещо различно от 80, в случай че имате нужда от определен порт да се появи в URL адресите ви (напр. код-разработка на порт 8000). Не се отнася за боравене със заявки (така Port Forwarding ще работи)."
-#: models.py:46
+#: 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 ""
-"Ако е Вярно, този сайт ще борави със заявки за всички останали хостове, "
-"които нямат собствен сайт."
+msgstr "Ако е Вярно, този сайт ще борави със заявки за всички останали хостове, които нямат собствен сайт."
-#: models.py:107
+#: 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 ""
-#: models.py:275
+#: models.py:277
msgid "The page title as you'd like it to be seen by the public"
msgstr "Заглавието на страницата както желаете да се вижда"
-#: models.py:276
+#: models.py:278
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:285
+#: models.py:287
msgid "Page title"
msgstr "Заглавие на Страница"
-#: models.py:285
+#: models.py:287
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:286
+#: models.py:288
msgid ""
"Whether a link to this page will appear in automatically generated menus"
-msgstr ""
-"Дали линк към тази страница ще се появи в автоматично генерираните менюта"
+msgstr "Дали линк към тази страница ще се появи в автоматично генерираните менюта"
-#: models.py:289
+#: models.py:291
msgid "Go live date/time"
msgstr ""
-#: models.py:289 models.py:290
-msgid "Please add a date-time in the form YYYY-MM-DD hh:mm."
+#: models.py:291 models.py:292
+msgid "Please add a date-time in the form YYYY-MM-DD hh:mm:ss."
msgstr ""
-#: models.py:290
+#: models.py:292
msgid "Expiry date/time"
msgstr ""
-#: models.py:559
-#, fuzzy
+#: models.py:564
msgid "name '{0}' (used in subpage_types list) is not defined."
-msgstr "име '%s' (ползвано в листа subpage_types) не е зададено."
+msgstr ""
diff --git a/wagtail/wagtailcore/locale/ca/LC_MESSAGES/django.mo b/wagtail/wagtailcore/locale/ca/LC_MESSAGES/django.mo
index 82c6ba24c..7ed9969c9 100644
Binary files a/wagtail/wagtailcore/locale/ca/LC_MESSAGES/django.mo and b/wagtail/wagtailcore/locale/ca/LC_MESSAGES/django.mo differ
diff --git a/wagtail/wagtailcore/locale/ca/LC_MESSAGES/django.po b/wagtail/wagtailcore/locale/ca/LC_MESSAGES/django.po
index c7bf0cc19..aa3525fd6 100644
--- a/wagtail/wagtailcore/locale/ca/LC_MESSAGES/django.po
+++ b/wagtail/wagtailcore/locale/ca/LC_MESSAGES/django.po
@@ -1,92 +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:
-# Lloople , 2014
+# David Llop , 2014
msgid ""
msgstr ""
"Project-Id-Version: Wagtail\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2014-07-11 10:42+0000\n"
-"PO-Revision-Date: 2014-02-22 12:43+0000\n"
-"Last-Translator: Lloople \n"
-"Language-Team: Catalan (http://www.transifex.com/projects/p/wagtail/language/"
-"ca/)\n"
-"Language: ca\n"
+"POT-Creation-Date: 2014-08-01 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"
"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:44
+#: 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 ""
-"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:46
+#: 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 ""
-"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:107
+#: 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 ""
-#: models.py:275
+#: models.py:277
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:276
+#: models.py:278
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:285
+#: models.py:287
msgid "Page title"
msgstr "Títol de la pàgina"
-#: models.py:285
+#: models.py:287
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:286
+#: models.py:288
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:289
+#: models.py:291
msgid "Go live date/time"
msgstr ""
-#: models.py:289 models.py:290
-msgid "Please add a date-time in the form YYYY-MM-DD hh:mm."
+#: models.py:291 models.py:292
+msgid "Please add a date-time in the form YYYY-MM-DD hh:mm:ss."
msgstr ""
-#: models.py:290
+#: models.py:292
msgid "Expiry date/time"
msgstr ""
-#: models.py:559
-#, fuzzy
+#: models.py:564
msgid "name '{0}' (used in subpage_types list) is not defined."
-msgstr "el nom '%s' (utilitzat a subpage_types list) no està definit."
+msgstr ""
diff --git a/wagtail/wagtailcore/locale/de/LC_MESSAGES/django.mo b/wagtail/wagtailcore/locale/de/LC_MESSAGES/django.mo
index c87c111c3..d31c17891 100644
Binary files a/wagtail/wagtailcore/locale/de/LC_MESSAGES/django.mo and b/wagtail/wagtailcore/locale/de/LC_MESSAGES/django.mo differ
diff --git a/wagtail/wagtailcore/locale/de/LC_MESSAGES/django.po b/wagtail/wagtailcore/locale/de/LC_MESSAGES/django.po
index e83f6f119..543a13b5b 100644
--- a/wagtail/wagtailcore/locale/de/LC_MESSAGES/django.po
+++ b/wagtail/wagtailcore/locale/de/LC_MESSAGES/django.po
@@ -1,94 +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:
-# jspielmann , 2014
+# Johannes Spielmann , 2014
msgid ""
msgstr ""
"Project-Id-Version: Wagtail\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2014-07-11 10:42+0000\n"
-"PO-Revision-Date: 2014-02-25 17:28+0000\n"
-"Last-Translator: jspielmann \n"
-"Language-Team: German (http://www.transifex.com/projects/p/wagtail/language/"
-"de/)\n"
-"Language: de\n"
+"POT-Creation-Date: 2014-08-01 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"
"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:44
+#: 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 ""
-"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:46
+#: 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 ""
-"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:107
+#: 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 ""
-#: models.py:275
+#: models.py:277
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:276
+#: models.py:278
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:285
+#: models.py:287
msgid "Page title"
msgstr "Seitentitel"
-#: models.py:285
+#: models.py:287
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:286
+#: models.py:288
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:289
+#: models.py:291
msgid "Go live date/time"
msgstr ""
-#: models.py:289 models.py:290
-msgid "Please add a date-time in the form YYYY-MM-DD hh:mm."
+#: models.py:291 models.py:292
+msgid "Please add a date-time in the form YYYY-MM-DD hh:mm:ss."
msgstr ""
-#: models.py:290
+#: models.py:292
msgid "Expiry date/time"
msgstr ""
-#: models.py:559
-#, fuzzy
+#: models.py:564
msgid "name '{0}' (used in subpage_types list) is not defined."
msgstr ""
-"Der Name '%s', der in der Liste subpage_types verwendet wird, ist nicht "
-"definiert."
diff --git a/wagtail/wagtailcore/locale/el/LC_MESSAGES/django.mo b/wagtail/wagtailcore/locale/el/LC_MESSAGES/django.mo
index a934f69b6..100a28cc1 100644
Binary files a/wagtail/wagtailcore/locale/el/LC_MESSAGES/django.mo and b/wagtail/wagtailcore/locale/el/LC_MESSAGES/django.mo differ
diff --git a/wagtail/wagtailcore/locale/el/LC_MESSAGES/django.po b/wagtail/wagtailcore/locale/el/LC_MESSAGES/django.po
index 0ac591453..bed0ba05d 100644
--- a/wagtail/wagtailcore/locale/el/LC_MESSAGES/django.po
+++ b/wagtail/wagtailcore/locale/el/LC_MESSAGES/django.po
@@ -1,94 +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:
# serafeim , 2014
msgid ""
msgstr ""
"Project-Id-Version: Wagtail\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2014-07-11 10:42+0000\n"
-"PO-Revision-Date: 2014-02-22 12:27+0000\n"
-"Last-Translator: serafeim \n"
-"Language-Team: Greek (http://www.transifex.com/projects/p/wagtail/language/"
-"el/)\n"
-"Language: el\n"
+"POT-Creation-Date: 2014-08-01 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"
"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:44
+#: 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 ""
-"Μπορείτε να χρησιμοποιήσετε κάτι διαφορετικό από το 80 αν θέλετε να "
-"εμφανίζεται στις διευθύνσεις μια συγκεκριμένη θύρα (π.χ. ανάπτυξη στη θύρα "
-"8000). Δεν επηρεάζει τον τρόπο που χειρίζονται τις αιτήσεις (οπότε η "
-"προώθηση θύρας δουλεύει ακόμα)"
+msgstr "Μπορείτε να χρησιμοποιήσετε κάτι διαφορετικό από το 80 αν θέλετε να εμφανίζεται στις διευθύνσεις μια συγκεκριμένη θύρα (π.χ. ανάπτυξη στη θύρα 8000). Δεν επηρεάζει τον τρόπο που χειρίζονται τις αιτήσεις (οπότε η προώθηση θύρας δουλεύει ακόμα)"
-#: models.py:46
+#: 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 ""
-"Αν είναι αληθές, το εν λόγω site θα χειρίζεται και τις αιτήσεις για όλα τα "
-"άλλα ονόματα που δεν έχουν δική τους εγγραφή"
+msgstr "Αν είναι αληθές, το εν λόγω site θα χειρίζεται και τις αιτήσεις για όλα τα άλλα ονόματα που δεν έχουν δική τους εγγραφή"
-#: models.py:107
+#: 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 ""
-#: models.py:275
+#: models.py:277
msgid "The page title as you'd like it to be seen by the public"
msgstr "Ο τίτλος της σελίδας έτσι όπως θα εμφανίζεται στο κοινό"
-#: models.py:276
+#: models.py:278
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:285
+#: models.py:287
msgid "Page title"
msgstr "Τίτλος σελίδας"
-#: models.py:285
+#: models.py:287
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:286
+#: models.py:288
msgid ""
"Whether a link to this page will appear in automatically generated menus"
-msgstr ""
-"Επιλέξτε αν μια σύνδεση σε αυτή τη σελίδα θα εμφανιστεί στα μενού που "
-"δημιουργούνται αυτόματα"
+msgstr "Επιλέξτε αν μια σύνδεση σε αυτή τη σελίδα θα εμφανιστεί στα μενού που δημιουργούνται αυτόματα"
-#: models.py:289
+#: models.py:291
msgid "Go live date/time"
msgstr ""
-#: models.py:289 models.py:290
-msgid "Please add a date-time in the form YYYY-MM-DD hh:mm."
+#: models.py:291 models.py:292
+msgid "Please add a date-time in the form YYYY-MM-DD hh:mm:ss."
msgstr ""
-#: models.py:290
+#: models.py:292
msgid "Expiry date/time"
msgstr ""
-#: models.py:559
-#, fuzzy
+#: models.py:564
msgid "name '{0}' (used in subpage_types list) is not defined."
-msgstr "το όνομα '%s' (που χρησιμοποιείται στη λίστα) δεν έχει οριστεί."
+msgstr ""
diff --git a/wagtail/wagtailcore/locale/en/LC_MESSAGES/django.mo b/wagtail/wagtailcore/locale/en/LC_MESSAGES/django.mo
index 4b726f7d6..3b83aafe9 100644
Binary files a/wagtail/wagtailcore/locale/en/LC_MESSAGES/django.mo and b/wagtail/wagtailcore/locale/en/LC_MESSAGES/django.mo differ
diff --git a/wagtail/wagtailcore/locale/en/LC_MESSAGES/django.po b/wagtail/wagtailcore/locale/en/LC_MESSAGES/django.po
index 7d99eb3e3..c4bf27524 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-07-11 10:42+0000\n"
+"POT-Creation-Date: 2014-08-01 16:38+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:44
+#: 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 ""
-#: models.py:46
+#: 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 ""
-#: models.py:107
+#: 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 ""
-#: models.py:275
+#: models.py:277
msgid "The page title as you'd like it to be seen by the public"
msgstr ""
-#: models.py:276
+#: models.py:278
msgid ""
"The name of the page as it will appear in URLs e.g http://domain.com/blog/"
"[my-slug]/"
msgstr ""
-#: models.py:285
+#: models.py:287
msgid "Page title"
msgstr ""
-#: models.py:285
+#: models.py:287
msgid ""
"Optional. 'Search Engine Friendly' title. This will appear at the top of the "
"browser window."
msgstr ""
-#: models.py:286
+#: models.py:288
msgid ""
"Whether a link to this page will appear in automatically generated menus"
msgstr ""
-#: models.py:289
+#: models.py:291
msgid "Go live date/time"
msgstr ""
-#: models.py:289 models.py:290
-msgid "Please add a date-time in the form YYYY-MM-DD hh:mm."
+#: models.py:291 models.py:292
+msgid "Please add a date-time in the form YYYY-MM-DD hh:mm:ss."
msgstr ""
-#: models.py:290
+#: models.py:292
msgid "Expiry date/time"
msgstr ""
-#: models.py:559
+#: models.py:564
msgid "name '{0}' (used in subpage_types list) is not defined."
msgstr ""
diff --git a/wagtail/wagtailcore/locale/es/LC_MESSAGES/django.mo b/wagtail/wagtailcore/locale/es/LC_MESSAGES/django.mo
index af0f4cf48..9ab7329f7 100644
Binary files a/wagtail/wagtailcore/locale/es/LC_MESSAGES/django.mo and b/wagtail/wagtailcore/locale/es/LC_MESSAGES/django.mo differ
diff --git a/wagtail/wagtailcore/locale/es/LC_MESSAGES/django.po b/wagtail/wagtailcore/locale/es/LC_MESSAGES/django.po
index 00c9c6719..05bc60286 100644
--- a/wagtail/wagtailcore/locale/es/LC_MESSAGES/django.po
+++ b/wagtail/wagtailcore/locale/es/LC_MESSAGES/django.po
@@ -1,95 +1,84 @@
# 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
# fooflare , 2014
-# unaizalakain , 2014
-# unaizalakain , 2014
+# Unai Zalakain , 2014
+# Unai Zalakain , 2014
msgid ""
msgstr ""
"Project-Id-Version: Wagtail\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2014-07-11 10:42+0000\n"
-"PO-Revision-Date: 2014-02-27 09:22+0000\n"
-"Last-Translator: fooflare \n"
-"Language-Team: Spanish (http://www.transifex.com/projects/p/wagtail/language/"
-"es/)\n"
-"Language: es\n"
+"POT-Creation-Date: 2014-08-01 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"
"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:44
+#: 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 ""
-"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:46
+#: 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 ""
-"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:107
+#: 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 ""
-#: models.py:275
+#: models.py:277
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:276
+#: models.py:278
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:285
+#: models.py:287
msgid "Page title"
msgstr "Título de la página"
-#: models.py:285
+#: models.py:287
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:286
+#: models.py:288
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:289
+#: models.py:291
msgid "Go live date/time"
msgstr ""
-#: models.py:289 models.py:290
-msgid "Please add a date-time in the form YYYY-MM-DD hh:mm."
+#: models.py:291 models.py:292
+msgid "Please add a date-time in the form YYYY-MM-DD hh:mm:ss."
msgstr ""
-#: models.py:290
+#: models.py:292
msgid "Expiry date/time"
msgstr ""
-#: models.py:559
-#, fuzzy
+#: models.py:564
msgid "name '{0}' (used in subpage_types list) is not defined."
-msgstr "nombre '%s' (usado en la lista de subpage_types) no está definido."
+msgstr ""
diff --git a/wagtail/wagtailcore/locale/eu/LC_MESSAGES/django.mo b/wagtail/wagtailcore/locale/eu/LC_MESSAGES/django.mo
index cf12d44d2..972e8348c 100644
Binary files a/wagtail/wagtailcore/locale/eu/LC_MESSAGES/django.mo and b/wagtail/wagtailcore/locale/eu/LC_MESSAGES/django.mo differ
diff --git a/wagtail/wagtailcore/locale/eu/LC_MESSAGES/django.po b/wagtail/wagtailcore/locale/eu/LC_MESSAGES/django.po
index d5ed41484..cbe69e338 100644
--- a/wagtail/wagtailcore/locale/eu/LC_MESSAGES/django.po
+++ b/wagtail/wagtailcore/locale/eu/LC_MESSAGES/django.po
@@ -1,80 +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-07-11 10:42+0000\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/"
-"eu/)\n"
-"Language: eu\n"
+"POT-Creation-Date: 2014-08-01 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"
"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:44
+#: 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 ""
-#: models.py:46
+#: 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 ""
-#: models.py:107
+#: 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 ""
-#: models.py:275
+#: models.py:277
msgid "The page title as you'd like it to be seen by the public"
msgstr ""
-#: models.py:276
+#: models.py:278
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:285
+#: models.py:287
msgid "Page title"
msgstr ""
-#: models.py:285
+#: models.py:287
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:286
+#: models.py:288
msgid ""
"Whether a link to this page will appear in automatically generated menus"
msgstr ""
-#: models.py:289
+#: models.py:291
msgid "Go live date/time"
msgstr ""
-#: models.py:289 models.py:290
-msgid "Please add a date-time in the form YYYY-MM-DD hh:mm."
+#: models.py:291 models.py:292
+msgid "Please add a date-time in the form YYYY-MM-DD hh:mm:ss."
msgstr ""
-#: models.py:290
+#: models.py:292
msgid "Expiry date/time"
msgstr ""
-#: models.py:559
+#: models.py:564
msgid "name '{0}' (used in subpage_types list) is not defined."
msgstr ""
diff --git a/wagtail/wagtailcore/locale/fr/LC_MESSAGES/django.mo b/wagtail/wagtailcore/locale/fr/LC_MESSAGES/django.mo
index 8f9bf6860..0ceed37cd 100644
Binary files a/wagtail/wagtailcore/locale/fr/LC_MESSAGES/django.mo and b/wagtail/wagtailcore/locale/fr/LC_MESSAGES/django.mo differ
diff --git a/wagtail/wagtailcore/locale/fr/LC_MESSAGES/django.po b/wagtail/wagtailcore/locale/fr/LC_MESSAGES/django.po
index 0ef2ab822..cc75fb902 100644
--- a/wagtail/wagtailcore/locale/fr/LC_MESSAGES/django.po
+++ b/wagtail/wagtailcore/locale/fr/LC_MESSAGES/django.po
@@ -1,90 +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:
# nahuel, 2014
msgid ""
msgstr ""
"Project-Id-Version: Wagtail\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2014-07-11 10:42+0000\n"
-"PO-Revision-Date: 2014-03-18 22:47+0000\n"
-"Last-Translator: nahuel\n"
-"Language-Team: French (http://www.transifex.com/projects/p/wagtail/language/"
-"fr/)\n"
-"Language: fr\n"
+"POT-Creation-Date: 2014-08-01 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"
"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:44
+#: 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 ""
-"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:46
+#: 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 ""
-#: models.py:107
+#: 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 ""
-#: models.py:275
+#: models.py:277
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:276
+#: models.py:278
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:285
+#: models.py:287
msgid "Page title"
msgstr "Titre de la page"
-#: models.py:285
+#: models.py:287
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:286
+#: models.py:288
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:289
+#: models.py:291
msgid "Go live date/time"
msgstr ""
-#: models.py:289 models.py:290
-msgid "Please add a date-time in the form YYYY-MM-DD hh:mm."
+#: models.py:291 models.py:292
+msgid "Please add a date-time in the form YYYY-MM-DD hh:mm:ss."
msgstr ""
-#: models.py:290
+#: models.py:292
msgid "Expiry date/time"
msgstr ""
-#: models.py:559
-#, fuzzy
+#: models.py:564
msgid "name '{0}' (used in subpage_types list) is not defined."
-msgstr "le nom '%s' (utilisé dans la liste subpage_types) n'est pas défini."
+msgstr ""
diff --git a/wagtail/wagtailcore/locale/gl/LC_MESSAGES/django.mo b/wagtail/wagtailcore/locale/gl/LC_MESSAGES/django.mo
index 44ec3a08e..d9f4d84ce 100644
Binary files a/wagtail/wagtailcore/locale/gl/LC_MESSAGES/django.mo and b/wagtail/wagtailcore/locale/gl/LC_MESSAGES/django.mo differ
diff --git a/wagtail/wagtailcore/locale/gl/LC_MESSAGES/django.po b/wagtail/wagtailcore/locale/gl/LC_MESSAGES/django.po
index 8686ab164..4201d9b9e 100644
--- a/wagtail/wagtailcore/locale/gl/LC_MESSAGES/django.po
+++ b/wagtail/wagtailcore/locale/gl/LC_MESSAGES/django.po
@@ -1,91 +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:
# fooflare , 2014
msgid ""
msgstr ""
"Project-Id-Version: Wagtail\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2014-07-11 10:42+0000\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/"
-"language/gl/)\n"
-"Language: gl\n"
+"POT-Creation-Date: 2014-08-01 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"
"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:44
+#: 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 ""
-"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:46
+#: 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 é 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:107
+#: 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 ""
-#: models.py:275
+#: models.py:277
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:276
+#: 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á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:285
+#: models.py:287
msgid "Page title"
msgstr "Título da páxina"
-#: models.py:285
+#: models.py:287
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:286
+#: models.py:288
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:289
+#: models.py:291
msgid "Go live date/time"
msgstr ""
-#: models.py:289 models.py:290
-msgid "Please add a date-time in the form YYYY-MM-DD hh:mm."
+#: models.py:291 models.py:292
+msgid "Please add a date-time in the form YYYY-MM-DD hh:mm:ss."
msgstr ""
-#: models.py:290
+#: models.py:292
msgid "Expiry date/time"
msgstr ""
-#: models.py:559
-#, fuzzy
+#: models.py:564
msgid "name '{0}' (used in subpage_types list) is not defined."
-msgstr "nome '%s' (usado en la lista de subpage_types) non está definido."
+msgstr ""
diff --git a/wagtail/wagtailcore/locale/mn/LC_MESSAGES/django.mo b/wagtail/wagtailcore/locale/mn/LC_MESSAGES/django.mo
index d7dbad6fb..7290e12fb 100644
Binary files a/wagtail/wagtailcore/locale/mn/LC_MESSAGES/django.mo and b/wagtail/wagtailcore/locale/mn/LC_MESSAGES/django.mo differ
diff --git a/wagtail/wagtailcore/locale/mn/LC_MESSAGES/django.po b/wagtail/wagtailcore/locale/mn/LC_MESSAGES/django.po
index 68b62ebd2..064a1dabb 100644
--- a/wagtail/wagtailcore/locale/mn/LC_MESSAGES/django.po
+++ b/wagtail/wagtailcore/locale/mn/LC_MESSAGES/django.po
@@ -1,81 +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:
-# delgermurun , 2014
+# Delgermurun Purevkhuuu , 2014
msgid ""
msgstr ""
"Project-Id-Version: Wagtail\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2014-07-11 10:42+0000\n"
-"PO-Revision-Date: 2014-03-04 05:03+0000\n"
-"Last-Translator: delgermurun \n"
-"Language-Team: Mongolian (http://www.transifex.com/projects/p/wagtail/"
-"language/mn/)\n"
-"Language: mn\n"
+"POT-Creation-Date: 2014-08-01 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"
"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:44
+#: 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 ""
-#: models.py:46
+#: 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 ""
-#: models.py:107
+#: 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 ""
-#: models.py:275
+#: models.py:277
msgid "The page title as you'd like it to be seen by the public"
msgstr ""
-#: models.py:276
+#: models.py:278
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:285
+#: models.py:287
msgid "Page title"
msgstr "Хуудасны гарчиг"
-#: models.py:285
+#: models.py:287
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:286
+#: models.py:288
msgid ""
"Whether a link to this page will appear in automatically generated menus"
msgstr ""
-#: models.py:289
+#: models.py:291
msgid "Go live date/time"
msgstr ""
-#: models.py:289 models.py:290
-msgid "Please add a date-time in the form YYYY-MM-DD hh:mm."
+#: models.py:291 models.py:292
+msgid "Please add a date-time in the form YYYY-MM-DD hh:mm:ss."
msgstr ""
-#: models.py:290
+#: models.py:292
msgid "Expiry date/time"
msgstr ""
-#: models.py:559
+#: models.py:564
msgid "name '{0}' (used in subpage_types list) is not defined."
msgstr ""
diff --git a/wagtail/wagtailcore/locale/pl/LC_MESSAGES/django.mo b/wagtail/wagtailcore/locale/pl/LC_MESSAGES/django.mo
index 784f46112..60c93acf4 100644
Binary files a/wagtail/wagtailcore/locale/pl/LC_MESSAGES/django.mo and b/wagtail/wagtailcore/locale/pl/LC_MESSAGES/django.mo differ
diff --git a/wagtail/wagtailcore/locale/pl/LC_MESSAGES/django.po b/wagtail/wagtailcore/locale/pl/LC_MESSAGES/django.po
index 93f803a5a..d0a696b89 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,86 +9,73 @@ msgid ""
msgstr ""
"Project-Id-Version: Wagtail\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2014-07-11 10:42+0000\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/"
-"pl/)\n"
-"Language: pl\n"
+"POT-Creation-Date: 2014-08-01 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"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"Plural-Forms: nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 "
-"|| n%100>=20) ? 1 : 2);\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:44
+#: 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 ""
-"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:46
+#: 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 ""
-"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:107
+#: 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 ""
-#: models.py:275
+#: models.py:277
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:276
+#: models.py:278
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:285
+#: models.py:287
msgid "Page title"
msgstr "Tytuł strony"
-#: models.py:285
+#: models.py:287
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:286
+#: models.py:288
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:289
+#: models.py:291
msgid "Go live date/time"
msgstr ""
-#: models.py:289 models.py:290
-msgid "Please add a date-time in the form YYYY-MM-DD hh:mm."
+#: models.py:291 models.py:292
+msgid "Please add a date-time in the form YYYY-MM-DD hh:mm:ss."
msgstr ""
-#: models.py:290
+#: models.py:292
msgid "Expiry date/time"
msgstr ""
-#: models.py:559
-#, fuzzy
+#: models.py:564
msgid "name '{0}' (used in subpage_types list) is not defined."
-msgstr "nazwa '%s' (używana w liście subpage_types) nie jest zdefiniowana."
+msgstr ""
diff --git a/wagtail/wagtailcore/locale/ro/LC_MESSAGES/django.mo b/wagtail/wagtailcore/locale/ro/LC_MESSAGES/django.mo
index 7e737e460..22c711e9e 100644
Binary files a/wagtail/wagtailcore/locale/ro/LC_MESSAGES/django.mo and b/wagtail/wagtailcore/locale/ro/LC_MESSAGES/django.mo differ
diff --git a/wagtail/wagtailcore/locale/ro/LC_MESSAGES/django.po b/wagtail/wagtailcore/locale/ro/LC_MESSAGES/django.po
index efe4bad51..d6c9a1902 100644
--- a/wagtail/wagtailcore/locale/ro/LC_MESSAGES/django.po
+++ b/wagtail/wagtailcore/locale/ro/LC_MESSAGES/django.po
@@ -1,95 +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:
-# zerolab, 2014
+# Dan Braghis, 2014
msgid ""
msgstr ""
"Project-Id-Version: Wagtail\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2014-07-11 10:42+0000\n"
-"PO-Revision-Date: 2014-02-24 22:29+0000\n"
-"Last-Translator: zerolab\n"
-"Language-Team: Romanian (http://www.transifex.com/projects/p/wagtail/"
-"language/ro/)\n"
-"Language: ro\n"
+"POT-Creation-Date: 2014-08-01 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"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"Plural-Forms: nplurals=3; plural=(n==1?0:(((n%100>19)||((n%100==0)&&(n!=0)))?"
-"2:1));\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:44
+#: 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 ""
-"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:46
+#: 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 ""
-"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:107
+#: 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 ""
-#: models.py:275
+#: models.py:277
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:276
+#: models.py:278
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:285
+#: models.py:287
msgid "Page title"
msgstr "Titlu pagină"
-#: models.py:285
+#: models.py:287
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:286
+#: models.py:288
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:289
+#: models.py:291
msgid "Go live date/time"
msgstr ""
-#: models.py:289 models.py:290
-msgid "Please add a date-time in the form YYYY-MM-DD hh:mm."
+#: models.py:291 models.py:292
+msgid "Please add a date-time in the form YYYY-MM-DD hh:mm:ss."
msgstr ""
-#: models.py:290
+#: models.py:292
msgid "Expiry date/time"
msgstr ""
-#: models.py:559
-#, fuzzy
+#: models.py:564
msgid "name '{0}' (used in subpage_types list) is not defined."
-msgstr "numele '%s' (folosit în lista subpage_types) nu este definit."
+msgstr ""
diff --git a/wagtail/wagtailcore/locale/zh/LC_MESSAGES/django.mo b/wagtail/wagtailcore/locale/zh/LC_MESSAGES/django.mo
index 64499c7a8..003a8aaef 100644
Binary files a/wagtail/wagtailcore/locale/zh/LC_MESSAGES/django.mo and b/wagtail/wagtailcore/locale/zh/LC_MESSAGES/django.mo differ
diff --git a/wagtail/wagtailcore/locale/zh/LC_MESSAGES/django.po b/wagtail/wagtailcore/locale/zh/LC_MESSAGES/django.po
index c2b0bf43f..4dc9d01ee 100644
--- a/wagtail/wagtailcore/locale/zh/LC_MESSAGES/django.po
+++ b/wagtail/wagtailcore/locale/zh/LC_MESSAGES/django.po
@@ -1,84 +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-07-11 10:42+0000\n"
-"PO-Revision-Date: 2014-02-28 16:07+0000\n"
-"Last-Translator: serafeim \n"
-"Language-Team: Chinese (http://www.transifex.com/projects/p/wagtail/language/"
-"zh/)\n"
-"Language: zh\n"
+"POT-Creation-Date: 2014-08-01 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"
"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:44
+#: 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 ""
-"如果你需要指定端口,请选择一个有别于80的端口(比如开发端口8000)。 不影响接受请"
-"求 (端口转发仍然有效)"
+msgstr "如果你需要指定端口,请选择一个有别于80的端口(比如开发端口8000)。 不影响接受请求 (端口转发仍然有效)"
-#: models.py:46
+#: 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 ""
-"如果是真的,这个网站将处理没有一个属于自己的主机名的其他所有主机名的请求"
+msgstr "如果是真的,这个网站将处理没有一个属于自己的主机名的其他所有主机名的请求"
-#: models.py:107
+#: 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 ""
-#: models.py:275
+#: models.py:277
msgid "The page title as you'd like it to be seen by the public"
msgstr "页面标题,你想被大众所看到的"
-#: models.py:276
+#: models.py:278
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:285
+#: models.py:287
msgid "Page title"
msgstr "页面标题"
-#: models.py:285
+#: models.py:287
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:286
+#: models.py:288
msgid ""
"Whether a link to this page will appear in automatically generated menus"
msgstr "一个链接到这页的链接会显示在自动生成的菜单中"
-#: models.py:289
+#: models.py:291
msgid "Go live date/time"
msgstr ""
-#: models.py:289 models.py:290
-msgid "Please add a date-time in the form YYYY-MM-DD hh:mm."
+#: models.py:291 models.py:292
+msgid "Please add a date-time in the form YYYY-MM-DD hh:mm:ss."
msgstr ""
-#: models.py:290
+#: models.py:292
msgid "Expiry date/time"
msgstr ""
-#: models.py:559
-#, fuzzy
+#: models.py:564
msgid "name '{0}' (used in subpage_types list) is not defined."
-msgstr "名称为 '%s' (用于子页面类型列表) 没有被创建."
+msgstr ""
diff --git a/wagtail/wagtailcore/locale/zh_TW/LC_MESSAGES/django.mo b/wagtail/wagtailcore/locale/zh_TW/LC_MESSAGES/django.mo
index db50be133..616f41b57 100644
Binary files a/wagtail/wagtailcore/locale/zh_TW/LC_MESSAGES/django.mo and b/wagtail/wagtailcore/locale/zh_TW/LC_MESSAGES/django.mo differ
diff --git a/wagtail/wagtailcore/locale/zh_TW/LC_MESSAGES/django.po b/wagtail/wagtailcore/locale/zh_TW/LC_MESSAGES/django.po
index 642c496e2..3a3a2bfa6 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-07-11 10:42+0000\n"
+"POT-Creation-Date: 2014-08-01 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"
-#: models.py:44
+#: 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 "
@@ -26,58 +26,58 @@ msgstr ""
"如果你需要指定 port,請選擇一個非 80 的 port number (例如: 開發中用 8000 "
"port)。 不影響 request 處理 (port forwarding 仍然有效)"
-#: models.py:46
+#: 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 ""
"如果這是 Ture 的話,這個網站將處理其他沒有自己網站的 hostname 的 request。"
-#: models.py:107
+#: 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 ""
-#: models.py:275
+#: models.py:277
msgid "The page title as you'd like it to be seen by the public"
msgstr "頁面標題 (你想讓外界看到的)"
-#: models.py:276
+#: models.py:278
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:285
+#: models.py:287
msgid "Page title"
msgstr "頁面標題"
-#: models.py:285
+#: models.py:287
msgid ""
"Optional. 'Search Engine Friendly' title. This will appear at the top of the "
"browser window."
msgstr "(可選) '搜尋引擎友善' 標題。 這會顯示在瀏覽器的視窗最上方"
-#: models.py:286
+#: models.py:288
msgid ""
"Whether a link to this page will appear in automatically generated menus"
msgstr "是否在自動生成的 Menu 裡顯示一個連結到此頁面"
-#: models.py:289
+#: models.py:291
msgid "Go live date/time"
msgstr ""
-#: models.py:289 models.py:290
-msgid "Please add a date-time in the form YYYY-MM-DD hh:mm."
+#: models.py:291 models.py:292
+msgid "Please add a date-time in the form YYYY-MM-DD hh:mm:ss."
msgstr ""
-#: models.py:290
+#: models.py:292
msgid "Expiry date/time"
msgstr ""
-#: models.py:559
+#: models.py:564
#, fuzzy
msgid "name '{0}' (used in subpage_types list) is not defined."
msgstr "'%s' (用於子頁面類型列表) 沒有被建立。"
diff --git a/wagtail/wagtailcore/management/commands/publish_scheduled_pages.py b/wagtail/wagtailcore/management/commands/publish_scheduled_pages.py
index 9a69f5f2e..d1ec5eecb 100644
--- a/wagtail/wagtailcore/management/commands/publish_scheduled_pages.py
+++ b/wagtail/wagtailcore/management/commands/publish_scheduled_pages.py
@@ -5,7 +5,9 @@ from optparse import make_option
from django.core.management.base import BaseCommand
from django.utils import dateparse, timezone
+
from wagtail.wagtailcore.models import Page, PageRevision
+from wagtail.wagtailcore.signals import page_published, page_unpublished
def revision_date_expired(r):
@@ -54,8 +56,16 @@ class Command(BaseCommand):
else:
print("No expired pages to be deactivated found.")
else:
+ # need to get the list of expired pages before the update,
+ # so that we can fire the page_unpublished signal on them afterwards
+ expired_pages_list = list(expired_pages)
+
expired_pages.update(expired=True, live=False)
+ # Fire page_unpublished signal for all expired pages
+ for page in expired_pages_list:
+ page_unpublished.send(sender=page.specific_class, instance=page.specific)
+
# 2. get all page revisions for moderation that have been expired
expired_revs = [
r for r in PageRevision.objects.filter(
@@ -108,3 +118,6 @@ class Command(BaseCommand):
# just run publish for the revision -- since the approved go
# live datetime is before now it will make the page live
rp.publish()
+
+ # Fire page_published signal
+ page_published.send(sender=rp.page.specific_class, instance=rp.page.specific)
diff --git a/wagtail/wagtailcore/models.py b/wagtail/wagtailcore/models.py
index 60de42698..a237e16e6 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
@@ -25,6 +26,8 @@ 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
@@ -151,7 +154,7 @@ def get_leaf_page_content_type_ids():
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.
- """, DeprecationWarning)
+ """, RemovedInWagtail06Warning)
return [
content_type.id
for content_type in get_page_types()
@@ -163,7 +166,7 @@ def get_navigable_page_content_type_ids():
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.
- """, DeprecationWarning)
+ """, RemovedInWagtail06Warning)
return [
content_type.id
for content_type in get_page_types()
@@ -286,8 +289,8 @@ class Page(six.with_metaclass(PageBase, MP_Node, ClusterableModel, indexed.Index
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(verbose_name=_("Go live date/time"), help_text=_("Please add a date-time in the form YYYY-MM-DD hh:mm."), blank=True, null=True)
- expire_at = models.DateTimeField(verbose_name=_("Expiry date/time"), help_text=_("Please add a date-time in the form YYYY-MM-DD hh:mm."), blank=True, null=True)
+ go_live_at = models.DateTimeField(verbose_name=_("Go live date/time"), help_text=_("Please add a date-time in the form YYYY-MM-DD hh:mm:ss."), blank=True, null=True)
+ expire_at = models.DateTimeField(verbose_name=_("Expiry date/time"), help_text=_("Please add a date-time in the form YYYY-MM-DD hh:mm:ss."), blank=True, null=True)
expired = models.BooleanField(default=False, editable=False)
search_fields = (
@@ -476,7 +479,7 @@ class Page(six.with_metaclass(PageBase, MP_Node, ClusterableModel, indexed.Index
def get_other_siblings(self):
warnings.warn(
"The 'Page.get_other_siblings()' method has been replaced. "
- "Use 'Page.get_siblings(inclusive=False)' instead.", DeprecationWarning)
+ "Use 'Page.get_siblings(inclusive=False)' instead.", RemovedInWagtail06Warning)
# get sibling pages excluding self
return self.get_siblings().exclude(id=self.id)
@@ -486,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_serve', args=(self.url_path[len(root_path):],))
@property
def url(self):
@@ -501,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_serve', args=(self.url_path[len(root_path):],))
def relative_url(self, current_site):
"""
@@ -511,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_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):
@@ -728,7 +731,7 @@ class Page(six.with_metaclass(PageBase, MP_Node, ClusterableModel, indexed.Index
modes = self.get_page_modes()
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", DeprecationWarning)
+ warnings.warn("Overriding get_page_modes is deprecated. Define a preview_modes property instead", RemovedInWagtail06Warning)
return modes
diff --git a/wagtail/wagtailcore/rich_text.py b/wagtail/wagtailcore/rich_text.py
index bd218d01d..16d64be51 100644
--- a/wagtail/wagtailcore/rich_text.py
+++ b/wagtail/wagtailcore/rich_text.py
@@ -157,9 +157,21 @@ LINK_HANDLERS = {
}
-# Prepare a whitelisting engine with custom behaviour:
-# rewrite any elements with a data-embedtype or data-linktype attribute
class DbWhitelister(Whitelister):
+ """
+ A custom whitelisting engine to convert the HTML as returned by the rich text editor
+ into the pseudo-HTML format stored in the database (in which images, documents and other
+ linked objects are identified by ID rather than URL):
+
+ * implements a 'construct_whitelister_element_rules' hook so that other apps can modify
+ the whitelist ruleset (e.g. to permit additional HTML elements beyond those in the base
+ Whitelister module);
+ * replaces any element with a 'data-embedtype' attribute with an