Skip to content

Frojd/wagtail-systemtext

Repository files navigation

Build Status PyPI version

Wagtail System Text

This is a library that enables cms editors to update static test in Wagtail. By using identifiers developers mark the strings that can be updated by the editor/moderator from the cms.

A template identifier can look like this {% systemtext "title" %}. When this identifier are evaluated it will be added to the cms under the section Settings / System Text under the name title. The entry has a field called string that can be updated, this is the text that will be rendered to the website users.

Identifiers can also be grouped, by using the group argument {% systemtext "title" group "headlines" %} we can make management easier, identifiers without group will be assigned to the general group.

By default identifiers will added in lazy mode, so for instance when a site renders a idenifier it will be added to that sites set of identifiers. The are also management commands that both searches through your code base and finds suiteable identifiers (find_and_add_systemtext), syncs then betweeen sites (sync_systemtext) and manual add/delete commands (add_systemtext / delete_systemtext).

Requirements

  • Python 2.7
  • Django 1.8+
  • Wagtail 1.7+

Installation

Install the library with pip:

$ pip install wagtailsystemtext

Quick Setup

Make sure wagtail.contrib.modeladmin and wagtailsystemtext is added to your INSTALLED_APPS.

INSTALLED_APPS = (
    # ...
    'wagtail.contrib.modeladmin',
    'wagtailsystemtext',
)

Then add SiteSystemTextMiddleware to your middlewares, make sure you add it after wagtail.wagtailcore.middleware.SiteMiddleware

MIDDLEWARE_CLASSES = (
    # ...
    'wagtail.wagtailcore.middleware.SiteMiddleware',
    'wagtailsystemtext.middlewares.SiteSystemTextMiddleware',
)

Done!

Usage

Overall the implementation follows the same convention of django translations.

Strings

This is how you work with regular text, supply identifer and group and retrive the systemtext string.

from wagtailsystemtext.utils import systemtext as _st

_st('my_text')
_st('main_label', group='buttons')
_st('main_label', group='buttons', default='My label')

Lazy strings

Lazy strings are run when called upon, when for instance you want to initialize a systemtext retrival before the middleware has run. Like in a admin interface.

from wagtailsystemtext.utils import systemtext_lazy as _st

_st('my_text')
_st('main_label', group='buttons')
_st('main_label', group='buttons', default='My label')

Templates

Systemtext contains a templatetag called systemtext, that behaves in the same way as Djangos {% trans... %}

Templatetags

{% load systemtext %}

{% systemtext "my_text" %}
{% systemtext "main_label" group "buttons" %}
{% systemtext "main_label" group "buttons" default "My label" %}

Management commands

  • find_and_add_systemtext: Finds the systemtext identifiers in your applications (by looking for _st and {% systemtext ... %}) and adds them to each wagtail site).
  • add_systemtext: Add identifier to site(s)
  • delete_systemtext: Remove identifiers from site(s)
  • sync_systemtext: Sync identifiers between sites to make sure they contain the same
  • list_systemtext: List all active systemtext

Settings

  • SYSTEMTEXT_CACHE_PREFIX: Cache prefix ("wagtailsystemtext" by default)
  • SYSTEMTEXT_CACHE_EXPIRY: Cache expiry in seconds (10 min by default)
  • SYSTEMTEXT_REBUILD_ON_SAVE: If cache should be rebuilt on save (True by default)
  • SYSTEMTEXT_USE_DEFAULT_ON_EMPTY: If present, use default value when string is empty (False by default)

Release start

These hooks will automatically bump the application version when using git flow release ...

chmod +x $PWD/git-hooks/bump-version.sh
ln -nfs $PWD/git-hooks/bump-version.sh .git/hooks/post-flow-release-start
ln -nfs $PWD/git-hooks/bump-version.sh .git/hooks/post-flow-hotfix-start

Roadmap

  • trans template tag support
  • Wagtail admin view with site permissions
  • Cache-rebild on save through admin
  • Default text support (on declaration)
  • Lazy text transforms
  • Add setting for fallbacking to default if string is empty
  • Automatic tag discovery
  • Sync command between sites
  • Group filter in Wagtail admin
  • Last accessed timestamps
  • blocktrans template tag support

Contributing

Want to contribute? Awesome. Just send a pull request.

License

Wagtail System Text is released under the MIT License.