{"id":19367574,"url":"https://github.com/webu/wagtail-parler","last_synced_at":"2025-04-23T14:31:46.219Z","repository":{"id":194484647,"uuid":"690560963","full_name":"webu/wagtail-parler","owner":"webu","description":"Manage your translations and internationalization with \"parler\" inside \"wagtail\" for your custom models  (via modeladmin or wagtail snippets) 🧀 🐦","archived":false,"fork":false,"pushed_at":"2025-02-06T14:29:14.000Z","size":239,"stargazers_count":4,"open_issues_count":1,"forks_count":3,"subscribers_count":3,"default_branch":"main","last_synced_at":"2025-03-30T18:01:45.731Z","etag":null,"topics":["cms","django","parler","translation","wagtail"],"latest_commit_sha":null,"homepage":"https://wagtail-parler.readthedocs.io/","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"bsd-3-clause","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/webu.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG","contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":"AUTHORS","dei":null,"publiccode":null,"codemeta":null}},"created_at":"2023-09-12T12:38:19.000Z","updated_at":"2025-02-06T14:27:35.000Z","dependencies_parsed_at":null,"dependency_job_id":"364ee020-e29e-43d2-b8fd-284ee4dade96","html_url":"https://github.com/webu/wagtail-parler","commit_stats":null,"previous_names":["webu/wagtail-parler"],"tags_count":8,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/webu%2Fwagtail-parler","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/webu%2Fwagtail-parler/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/webu%2Fwagtail-parler/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/webu%2Fwagtail-parler/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/webu","download_url":"https://codeload.github.com/webu/wagtail-parler/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":250451812,"owners_count":21432906,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["cms","django","parler","translation","wagtail"],"created_at":"2024-11-10T08:03:28.669Z","updated_at":"2025-04-23T14:31:45.930Z","avatar_url":"https://github.com/webu.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Wagtail Parler 🧀 🐦 \n\n[![Stable Version](https://img.shields.io/pypi/v/wagtail-parler?color=blue)](https://pypi.org/project/wagtail-parler/)\n![](https://img.shields.io/badge/python-3.9%20to%203.11-blue)\n![](https://img.shields.io/badge/django-4.2%20to%205.0-blue)\n![](https://img.shields.io/badge/wagtail-5.0%20to%206.2-blue)\n[![Code style: black](https://img.shields.io/badge/code%20style-black-000000.svg)](https://github.com/psf/black)\n![](https://img.shields.io/badge/coverage-100%25-green)\n[![Checked with mypy](https://www.mypy-lang.org/static/mypy_badge.svg)](https://mypy-lang.org/)\n[![Imports: isort](https://img.shields.io/badge/%20imports-isort-%231674b1?style=flat\u0026labelColor=ef8336)](https://pycqa.github.io/isort/)\n[![semver](https://img.shields.io/badge/semver-2.0.0-green)](https://semver.org/)\n[![Documentation Status](https://readthedocs.org/projects/wagtail-parler/badge/?version=latest)](https://wagtail-parler.readthedocs.io/en/latest/?badge=latest)\n\nBrings \"omelette du fromage\" 🧀 from parler into wagtail 🐦 for your custom models \n(via modeladmin or wagtail snippets)\n\n![Wagtail Parler Logo](https://raw.githubusercontent.com/webu/wagtail-parler/main/docs/source/images/wagtail-parler.png)\n\nWagtail Parler helps you to use `django-parler` inside `wagtail` to translate your customs models. \nIt works for `wagtail-modeladmin` (which is now deprectaed) and also the new official way: \nwagtail's snippets.\n\n![Translated and untranslated tabs](https://raw.githubusercontent.com/webu/wagtail-parler/main/docs/source/images/translated-and-untranslated-tabs.png)\n\n## Tests, QA, consistency and compatibility\n\nThis app is tested to runs with:\n\n* Django 4.2, 5.0\n* Wagtail 5.0, 5.1, 5.2, 6.0, 6.1, 6.2\n* Parler 2.3 (probably older ones to, it's just not tested)\n* Python 3.9, 3.11\n\nTo ensure code quality and consistency:\n\n* Formatted with [black](https://pypi.org/project/black/)\n* Validated with [flake8](https://pypi.org/project/flake8/). \n* Static types checked with [mypy](https://pypi.org/project/mypy/)\n* Tests coverage checked with [coverage](https://pypi.org/project/coverage/) (100% tested)\n* Tests runned in local via [tox](https://pypi.org/project/tox/) and on github via [github actions workflow](https://docs.github.com/en/actions/using-workflows)\n* versionned with [semver](https://semver.org) logic\n\n## Why\n\nThere is already an internationalisation support in wagtail via their own language features \ncalled [wagtail-localize](https://www.wagtail-localize.org/). \nThis app [also support wagtail modeladmin](https://www.wagtail-localize.org/how-to/modeladmin/).\nBut the approach of wagtail-localize could be unconvenient as translations are stored in the same\ntable than \"main instances\", resulting specific queryset and managers to manage your models.  \nFor app's like treebeard, it can break the logic of your tree.\n\nFor those reasons, you could prefer to use `django-parler` as translations approach. Wagtail Parler is fit to you: it will allow you to use \n`django-parler` to translate your own models and still have a usefull wagtail interface to\nmanage translations (via official wagtail's snippet admin but also with the old `wagtail-modeladmin`)\n\n## Installation\n\nInstall the package via pip. We consider you already have django-parler and wagtail installed.\n\n`pip install wagtail-parler`\n\nThen, in settings.py, add `wagtail_parler` to the installed apps.\n\n```python\n# settings.py\n\nINSTALLED_APPS = [\n    # …\n    \"wagtail_parler\",\n    # …\n]\n```\n\n## Basic Usage\n\n\nYou just have to add `ParlerSnippetAdminMixin` to your `SnippetViewSet` (or `ParlerModelAdminMixin` to your `ModelAdmin`), *et voilà*, you are ready to \neat *omelette du fromage*.\n\n```python\n\nfrom wagtail.snippets.views.snippets import SnippetViewSet\nfrom wagtail.snippets.models import register_snippet\nfrom wagtail_parler.handlers import ParlerSnippetAdminMixin\nfrom .models import Food\n\n\nclass FoodAdmin(ParlerSnippetAdminMixin, SnippetViewSet):\n    model = Food\n\nregister_snippet(FoodAdmin)\n\n# or for an usage with wagtail-modeladmin:\n\nfrom wagtail_modeladmin.options import ModelAdmin, modeladmin_register\nfrom wagtail_parler.handlers import ParlerModelAdminMixin\nfrom .models import Food\n\nclass FoodAdmin(ParlerModelAdminMixin, ModelAdmin):\n    model = Food\n\nmodeladmin_register(FoodAdmin)\n```\n\n\n## Extra 🧀🐦\n\nMore advanced usage, tests, etc., are documented [in the doc](https://wagtail-parler.readthedocs.io/).\n\n\u003e Maître [Wagtail][wagtail], sur un arbre perché,  \n\u003e Tenait en son bec une omelette du fromage.  \n\u003e Maître [Webu][webu], à l'envie de [parler][parler],  \n\u003e Lui tint à peu près ce langage :  \n\u003e Et bonjour, Monsieur [Wagtail][wagtail].  \n\u003e Que de beaux commits ! quelle merveille !  \n\u003e Sans mentir, si votre codage  \n\u003e Se rapporte à votre plumage,  \n\u003e Vous êtes le Phénix des hôtes de ces dépots.\n\u003e …\n\nFrom « Le Corbeau et le Renard » by Jean de La Fontaine, 1668.\n\n[wagtail]: https://docs.wagtail.org/en/stable/index.html\n[parler]: https://django-parler.readthedocs.io/en/stable/index.html\n[webu]: https://www.webu.coop\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fwebu%2Fwagtail-parler","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fwebu%2Fwagtail-parler","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fwebu%2Fwagtail-parler/lists"}