mirror of
https://github.com/Hopiu/wagtail-modeltranslation.git
synced 2026-05-12 01:03:12 +00:00
First commit
This commit is contained in:
commit
46a67a34e6
21 changed files with 271 additions and 0 deletions
1
MANIFEST.in
Normal file
1
MANIFEST.in
Normal file
|
|
@ -0,0 +1 @@
|
|||
include README.rst
|
||||
28
README.rst
Normal file
28
README.rst
Normal file
|
|
@ -0,0 +1,28 @@
|
|||
=====
|
||||
WAGTAIL MODELTRANSLATION ADAPTATION
|
||||
=====
|
||||
|
||||
Simple app containing a mixin model that integrates modeltranslation
|
||||
(https://github.com/deschler/django-modeltranslation) into wagtail panels system.
|
||||
|
||||
Quick start
|
||||
-----------
|
||||
|
||||
1. Add "wagtail_modeltranslation" to your INSTALLED_APPS setting like this::
|
||||
|
||||
INSTALLED_APPS = (
|
||||
...
|
||||
'wagtail_modeltranslation',
|
||||
**YOUR APPS**
|
||||
)
|
||||
|
||||
2. Use TranslationMixin to integrate django-modeltranslation with Wagtail admin:
|
||||
|
||||
from wagtail_modeltranslation.models import TranslationMixin
|
||||
|
||||
class FooModel(Page, TranslationMixin):
|
||||
foo = models.CharField()
|
||||
|
||||
FooModel.panels = [...]
|
||||
|
||||
2. Visit django-modeltranslation for documentation - http://django-modeltranslation.readthedocs.org/en/latest/
|
||||
BIN
dist/wagtail-modeltranslation-0.0.1.tar.gz
vendored
Normal file
BIN
dist/wagtail-modeltranslation-0.0.1.tar.gz
vendored
Normal file
Binary file not shown.
36
setup.py
Normal file
36
setup.py
Normal file
|
|
@ -0,0 +1,36 @@
|
|||
import os
|
||||
from setuptools import setup
|
||||
|
||||
with open(os.path.join(os.path.dirname(__file__), 'README.rst')) as readme:
|
||||
README = readme.read()
|
||||
|
||||
# allow setup.py to be run from any path
|
||||
os.chdir(os.path.normpath(os.path.join(os.path.abspath(__file__), os.pardir)))
|
||||
|
||||
setup(
|
||||
name='wagtail-modeltranslation',
|
||||
version='0.0.1',
|
||||
packages=['wagtail_modeltranslation'],
|
||||
include_package_data=True,
|
||||
license='BSD License',
|
||||
description='Integration of django-modeltranslation with Wagtail CMS',
|
||||
long_description=README,
|
||||
url='',
|
||||
author='Rui Martins',
|
||||
author_email='rmartins16@gmail.com',
|
||||
classifiers=[
|
||||
'Environment :: Web Environment',
|
||||
'Framework :: Django',
|
||||
'Intended Audience :: Developers',
|
||||
'License :: OSI Approved :: BSD License',
|
||||
'Operating System :: OS Independent',
|
||||
'Programming Language :: Python',
|
||||
# Replace these appropriately if you are stuck on Python 2.
|
||||
'Programming Language :: Python :: 3',
|
||||
'Programming Language :: Python :: 3.2',
|
||||
'Programming Language :: Python :: 3.3',
|
||||
'Topic :: Internet :: WWW/HTTP',
|
||||
'Topic :: Internet :: WWW/HTTP :: Dynamic Content',
|
||||
],
|
||||
install_requires=['django-modeltranslation==0.9', 'wagtail']
|
||||
)
|
||||
48
wagtail_modeltranslation.egg-info/PKG-INFO
Normal file
48
wagtail_modeltranslation.egg-info/PKG-INFO
Normal file
|
|
@ -0,0 +1,48 @@
|
|||
Metadata-Version: 1.1
|
||||
Name: wagtail-modeltranslation
|
||||
Version: 0.0.1
|
||||
Summary: Integration of django-modeltranslation with Wagtail CMS
|
||||
Home-page: UNKNOWN
|
||||
Author: Rui Martins
|
||||
Author-email: rmartins16@gmail.com
|
||||
License: BSD License
|
||||
Description: =====
|
||||
WAGTAIL MODELTRANSLATION ADAPTATION
|
||||
=====
|
||||
|
||||
Simple app containing a mixin model that integrates modeltranslation
|
||||
(https://github.com/deschler/django-modeltranslation) into wagtail panels system.
|
||||
|
||||
Quick start
|
||||
-----------
|
||||
|
||||
1. Add "wagtail_modeltranslation" to your INSTALLED_APPS setting like this::
|
||||
|
||||
INSTALLED_APPS = (
|
||||
...
|
||||
'wagtail_modeltranslation',
|
||||
**YOUR APPS**
|
||||
)
|
||||
|
||||
2. Use TranslationMixin to integrate django-modeltranslation with Wagtail admin:
|
||||
|
||||
from wagtail_modeltranslation.models import TranslationMixin
|
||||
|
||||
class FooModel(Page, TranslationMixin):
|
||||
foo = models.CharField()
|
||||
|
||||
FooModel.panels = [...]
|
||||
|
||||
2. Visit django-modeltranslation for documentation - http://django-modeltranslation.readthedocs.org/en/latest/
|
||||
Platform: UNKNOWN
|
||||
Classifier: Environment :: Web Environment
|
||||
Classifier: Framework :: Django
|
||||
Classifier: Intended Audience :: Developers
|
||||
Classifier: License :: OSI Approved :: BSD License
|
||||
Classifier: Operating System :: OS Independent
|
||||
Classifier: Programming Language :: Python
|
||||
Classifier: Programming Language :: Python :: 3
|
||||
Classifier: Programming Language :: Python :: 3.2
|
||||
Classifier: Programming Language :: Python :: 3.3
|
||||
Classifier: Topic :: Internet :: WWW/HTTP
|
||||
Classifier: Topic :: Internet :: WWW/HTTP :: Dynamic Content
|
||||
14
wagtail_modeltranslation.egg-info/SOURCES.txt
Normal file
14
wagtail_modeltranslation.egg-info/SOURCES.txt
Normal file
|
|
@ -0,0 +1,14 @@
|
|||
MANIFEST.in
|
||||
README.rst
|
||||
setup.py
|
||||
wagtail_modeltranslation/__init__.py
|
||||
wagtail_modeltranslation/admin.py
|
||||
wagtail_modeltranslation/models.py
|
||||
wagtail_modeltranslation/tests.py
|
||||
wagtail_modeltranslation/translation.py
|
||||
wagtail_modeltranslation/views.py
|
||||
wagtail_modeltranslation.egg-info/PKG-INFO
|
||||
wagtail_modeltranslation.egg-info/SOURCES.txt
|
||||
wagtail_modeltranslation.egg-info/dependency_links.txt
|
||||
wagtail_modeltranslation.egg-info/requires.txt
|
||||
wagtail_modeltranslation.egg-info/top_level.txt
|
||||
1
wagtail_modeltranslation.egg-info/dependency_links.txt
Normal file
1
wagtail_modeltranslation.egg-info/dependency_links.txt
Normal file
|
|
@ -0,0 +1 @@
|
|||
|
||||
2
wagtail_modeltranslation.egg-info/requires.txt
Normal file
2
wagtail_modeltranslation.egg-info/requires.txt
Normal file
|
|
@ -0,0 +1,2 @@
|
|||
django-modeltranslation==0.9
|
||||
wagtail
|
||||
1
wagtail_modeltranslation.egg-info/top_level.txt
Normal file
1
wagtail_modeltranslation.egg-info/top_level.txt
Normal file
|
|
@ -0,0 +1 @@
|
|||
wagtail_modeltranslation
|
||||
0
wagtail_modeltranslation/__init__.py
Normal file
0
wagtail_modeltranslation/__init__.py
Normal file
BIN
wagtail_modeltranslation/__init__.pyc
Normal file
BIN
wagtail_modeltranslation/__init__.pyc
Normal file
Binary file not shown.
3
wagtail_modeltranslation/admin.py
Normal file
3
wagtail_modeltranslation/admin.py
Normal file
|
|
@ -0,0 +1,3 @@
|
|||
from django.contrib import admin
|
||||
|
||||
# Register your models here.
|
||||
BIN
wagtail_modeltranslation/admin.pyc
Normal file
BIN
wagtail_modeltranslation/admin.pyc
Normal file
Binary file not shown.
0
wagtail_modeltranslation/migrations/__init__.py
Normal file
0
wagtail_modeltranslation/migrations/__init__.py
Normal file
BIN
wagtail_modeltranslation/migrations/__init__.pyc
Normal file
BIN
wagtail_modeltranslation/migrations/__init__.pyc
Normal file
Binary file not shown.
119
wagtail_modeltranslation/models.py
Normal file
119
wagtail_modeltranslation/models.py
Normal file
|
|
@ -0,0 +1,119 @@
|
|||
# coding: utf-8
|
||||
|
||||
from django.conf import settings
|
||||
from wagtail.wagtailadmin.edit_handlers import FieldPanel, MultiFieldPanel
|
||||
from modeltranslation.translator import translator, NotRegistered
|
||||
|
||||
|
||||
####################################
|
||||
# TRANSLATION MIXIN
|
||||
####################################
|
||||
class TranslationMixin(object):
|
||||
|
||||
def __init__(self, *args, **kwargs):
|
||||
super(TranslationMixin, self).__init__(*args, **kwargs)
|
||||
|
||||
self.translation_options = translator.get_options_for_model(
|
||||
self.__class__)
|
||||
|
||||
self.patch_translation_panels()
|
||||
|
||||
def patch_translation_panels(self):
|
||||
if hasattr(self, 'panels'):
|
||||
# TODO !!!!
|
||||
tabs = ()
|
||||
else:
|
||||
tabs = ()
|
||||
|
||||
if hasattr(self, 'content_panels'):
|
||||
tabs += (('content_panels', list(self.content_panels)),)
|
||||
if hasattr(self, 'promote_panels'):
|
||||
tabs += (('promote_panels', list(self.promote_panels)),)
|
||||
|
||||
for tab_name, tab in tabs:
|
||||
translated_tab = []
|
||||
for panel in tab:
|
||||
####################################
|
||||
# FIELDPANEL
|
||||
####################################
|
||||
if panel.__class__.__name__ == 'FieldPanel':
|
||||
for item in self.patch_translation_field(panel):
|
||||
translated_tab.append(item)
|
||||
####################################
|
||||
# MULTIFIELDPANEL
|
||||
####################################
|
||||
elif panel.__class__.__name__ == 'MultiFieldPanel':
|
||||
translated_children = []
|
||||
for child_panel in panel.children:
|
||||
for item in self.patch_translation_field(child_panel):
|
||||
translated_children.append(item)
|
||||
translated_tab.append(
|
||||
MultiFieldPanel(
|
||||
translated_children,
|
||||
classname=panel.classname,
|
||||
heading=panel.heading))
|
||||
####################################
|
||||
# INLINEPANEL
|
||||
####################################
|
||||
elif panel.__class__.__name__ == 'InlinePanel':
|
||||
self.patch_translation_inlinepanels(panel)
|
||||
translated_tab.append(panel)
|
||||
####################################
|
||||
# OTHERS
|
||||
####################################
|
||||
else:
|
||||
translated_tab.append(panel)
|
||||
|
||||
setattr(self.__class__, tab_name, translated_tab)
|
||||
|
||||
def patch_translation_field(self, fieldpanel, translation_fields=None):
|
||||
translated_fields = []
|
||||
tr_fields = translation_fields if translation_fields else self.translation_options.fields
|
||||
|
||||
translated_fields.append(fieldpanel) # default language or untranslated field
|
||||
if fieldpanel.field_name in tr_fields:
|
||||
for lang in settings.LANGUAGES:
|
||||
if lang[0] != settings.LANGUAGE_CODE: # other languages
|
||||
translated_field_name = "%s_%s" % (
|
||||
fieldpanel.field_name, lang[0])
|
||||
translated_fields.append(
|
||||
FieldPanel(
|
||||
translated_field_name,
|
||||
classname=fieldpanel.classname))
|
||||
|
||||
return translated_fields
|
||||
|
||||
def patch_translation_inlinepanels(self, panel):
|
||||
inline_panels = getattr(
|
||||
self.__class__, panel.relation_name).related.model.panels
|
||||
|
||||
try:
|
||||
inline_model_tr_fields = translator.get_options_for_model(
|
||||
getattr(
|
||||
self.__class__, panel.relation_name).related.model).fields
|
||||
except NotRegistered:
|
||||
return None
|
||||
|
||||
translated_inline = []
|
||||
for inlinepanel in inline_panels:
|
||||
if inlinepanel.__class__.__name__ == 'FieldPanel':
|
||||
for item in self.patch_translation_field(
|
||||
inlinepanel,
|
||||
translation_fields=inline_model_tr_fields):
|
||||
translated_inline.append(item)
|
||||
elif inlinepanel.__class__.__name__ == 'MultiFieldPanel':
|
||||
translated_children = []
|
||||
for child_panel in inlinepanel.children:
|
||||
for item in self.patch_translation_field(
|
||||
child_panel,
|
||||
translation_fields=inline_model_tr_fields):
|
||||
translated_children.append(item)
|
||||
translated_inline.append(
|
||||
MultiFieldPanel(
|
||||
translated_children,
|
||||
classname=inlinepanel.classname,
|
||||
heading=inlinepanel.heading))
|
||||
else:
|
||||
translated_inline.append(inlinepanel)
|
||||
|
||||
getattr(self.__class__, panel.relation_name).related.model.panels = translated_inline
|
||||
BIN
wagtail_modeltranslation/models.pyc
Normal file
BIN
wagtail_modeltranslation/models.pyc
Normal file
Binary file not shown.
3
wagtail_modeltranslation/tests.py
Normal file
3
wagtail_modeltranslation/tests.py
Normal file
|
|
@ -0,0 +1,3 @@
|
|||
from django.test import TestCase
|
||||
|
||||
# Create your tests here.
|
||||
12
wagtail_modeltranslation/translation.py
Normal file
12
wagtail_modeltranslation/translation.py
Normal file
|
|
@ -0,0 +1,12 @@
|
|||
# coding: utf-8
|
||||
|
||||
from wagtail.wagtailcore.models import Page
|
||||
|
||||
from modeltranslation.translator import translator, TranslationOptions
|
||||
|
||||
|
||||
# regist wagtail Page model for translation
|
||||
class PageTR(TranslationOptions):
|
||||
fields = ('title', 'slug')
|
||||
|
||||
translator.register(Page, PageTR)
|
||||
BIN
wagtail_modeltranslation/translation.pyc
Normal file
BIN
wagtail_modeltranslation/translation.pyc
Normal file
Binary file not shown.
3
wagtail_modeltranslation/views.py
Normal file
3
wagtail_modeltranslation/views.py
Normal file
|
|
@ -0,0 +1,3 @@
|
|||
from django.shortcuts import render
|
||||
|
||||
# Create your views here.
|
||||
Loading…
Reference in a new issue