A translation dashboard for Wagtail sites using wagtail-localize.
- Translation Dashboard: Visual overview of translation progress for all pages
- Auto-Updates: Signals automatically update percentages when translations change
- Performance: Translation percentages are stored in the database, for fast loading
- Filtering: Search by title, filter by language, translation key
- Color-Coded Status: Green (100%), Yellow (80-99%), Red (<80%)
- Admin Integration: Adds menu item to Wagtail admin
- Configurable: Enable/disable features via Django settings
pip install wagtail-localize-dashboard# settings.py
INSTALLED_APPS = [
# ... other apps
"wagtail_localize",
"wagtail_localize_dashboard", # Add after wagtail-localize
# ... other apps
]# urls.py
from django.urls import path, include
urlpatterns = [
# ... other patterns
path("translations/", include("wagtail_localize_dashboard.urls")),
# ... other patterns
]python manage.py migrate wagtail_localize_dashboardpython manage.py rebuild_translation_progressNavigate to /translations/ in your Wagtail admin, or click "Translations" in the admin menu.
Customize behavior in your Django settings:
# settings.py
# Enable/disable the entire feature (default: True)
WAGTAIL_LOCALIZE_DASHBOARD_ENABLED = True
# Enable automatic TranslationProgress updates via signals (default: True)
WAGTAIL_LOCALIZE_DASHBOARD_AUTO_UPDATE = True
# Track translation progress for Pages (default: True)
WAGTAIL_LOCALIZE_DASHBOARD_TRACK_PAGES = True
# Show dashboard in Wagtail admin menu (default: True)
WAGTAIL_LOCALIZE_DASHBOARD_SHOW_IN_MENU = True
# Menu item configuration
WAGTAIL_LOCALIZE_DASHBOARD_MENU_LABEL = "Translations"
WAGTAIL_LOCALIZE_DASHBOARD_MENU_ICON = "wagtail-localize-language"
WAGTAIL_LOCALIZE_DASHBOARD_MENU_ORDER = 800
# Items per page in dashboard (default: 50)
WAGTAIL_LOCALIZE_DASHBOARD_ITEMS_PER_PAGE = 50The dashboard shows:
- All original pages (not translations)
- Translation progress for each locale (0-100%)
- Color-coded status badges
- Quick links to edit pages
# Recalculate translation percentages for all pages
python manage.py rebuild_translation_progress
# Clean orphaned records and rebuild
python manage.py rebuild_translation_progress --clean-orphansfrom wagtail_localize_dashboard.utils import (
get_translation_percentages,
create_translation_progress,
rebuild_all_progress,
)
# Get translation percentage for a specific locale
from wagtail.models import Locale
page = Page.objects.get(id=123)
locale_de = Locale.objects.get(language_code="de")
percent = get_translation_percentages(page, locale_de)
# Update progress for a page
create_translation_progress(page)
# Rebuild all progress
stats = rebuild_all_progress()
print(f"Processed {stats['pages']} pages")- Database Table: The
TranslationProgressmodel stores pre-calculated percentages - Signals: Listen for translation changes and update
TranslationProgresstable automatically - Dashboard: Displays
TranslationProgressdata for each page - Management Command: Rebuilds
TranslationProgressobjects when needed
- Python 3.10+
- Django 4.2+
- Wagtail 5.2+
- wagtail-localize 1.8+
Contributions are welcome!
- Clone the repository:
git clone https://github.com/lincolnloop/wagtail-localize-dashboard.git
cd wagtail-localize-dashboard- Install the package with development dependencies:
pip install -e ".[dev]"This installs the package in editable mode along with testing tools.
Run the test suite with pytest:
pytestRun tests with coverage:
pytest --cov=wagtail_localize_dashboardRun specific test files:
pytest tests/test_utils.py
pytest tests/test_views.pyRun accessibility tests (requires pip install -e ".[test,accessibility]"):
pytest -m accessibilityCheck code with ruff:
ruff check .Format with ruff:
ruff format .In order to make a release, we add a git tag and push it to GitHub. We have a GitHub Action that releases the code to PyPI when we add a new tag.
MIT License - see LICENSE file for details.
Created by Lincoln Loop for the Wagtail community.
Inspired by the translation dashboard in the Springfield CMS.
