===================================
Simple implementation of multi-lingual models for Django. Django-admin integration works out of the box.
Supports django-localeurl
integration.
Note, that Django 1.5 is required. Earlier versions are not supported.
Latest stable version on PyPI:
$ pip install django-slim
Latest stable version on bitbucket:
$ pip install -e hg+https://bitbucket.org/barseghyanartur/django-slim@stable#egg=django-slim
Latest stable version on github:
$ pip install -e git+https://github.com/barseghyanartur/django-slim/@stable#egg=django-slim
slim
to INSTALLED_APPS
of you settings module.An extensive example project is available at https://github.com/barseghyanartur/django-slim/tree/stable/example directory.
Screenshots are present in documentation on PythonHosted (http://pythonhosted.org/django-slim/#screenshots).
In order to be able to quickly evaluate the django-slim, a demo app (with a quick installer) has been created (Debian only). Follow the instructions below for having the demo running within a minute.
Grab the latest django_slim_example_app_installer.sh
$ wget https://raw.github.com/barseghyanartur/django-slim/stable/example/django_slim_example_app_installer.sh
Create a new- or switch to existing- virtual environement, assign execute rights to the installer and run
the django-slim-example-app-install.sh
.
$ chmod +x django_slim_example_app_installer.sh
$ ./django_slim_example_app_installer.sh
Go to the front/back -end and test the app.
Let's now step-by-step review our imaginary example app.
Add slim
to installed apps.
INSTALLED_APPS = (
# ... 'slim', # ...
)
Add languages.
LANGUAGES = ( ('en', gettext("English")), # Main language! ('hy', gettext("Armenian")), ('nl', gettext("Dutch")), ('ru', gettext("Russian")), )
from django.db import models
from slim import LanguageField, Slim
class FooItem(models.Model, Slim): title = models.CharField(("Title"), max_length=100) slug = models.SlugField(unique=True, verbose_name=("Slug")) body = models.TextField(_("Body")) language = LanguageField()
from django.contrib import admin
from slim.admin import SlimAdmin
class FooItemAdmin(SlimAdmin): list_display = ('title',) fieldsets = ( (None, { 'fields': ('title', 'slug', 'body') }), )
admin.site.register(FooItem, FooItemAdmin)
We assume that language code is kept in the request object (django-localeurl behaviour, which you're advised to use).
from slim import get_language_from_request
from example.models import FooItem
def browse(request, template_name='foo/browse.html'): language = get_language_from_request(request) queryset = FooItem._default_manager.filter(language=language)
# The rest of the code
from example.models import FooItem foo = FooItem._default_manager.all()[0] <FooItem: Lorem ipsum>
Let's assume, we have such record and it has been translated to Armenian (hy
) and Dutch (nl
). Original
translation is named Lorem ipsum
. Other translations have the language code appended to the title.
armenian_foo = foo.get_translation_for('hy') <FooItem: Lorem ipsum HY> dutch_foo = foo.get_translation_for('nl') <FooItem: Lorem ipsum NL>
If we have a translated object, we can always get the main translation.
armenian_foo.original_translation == foo True
All available translations for foo
:
foo.available_translations() [<FooItem: Lorem ipsum HY>, <FooItem: Lorem ipsum NL>]
All available translations for Armenian foo
.
armenian_foo.available_translations() [<FooItem: Lorem ipsum>, <FooItem: Lorem ipsum NL>]
See https://github.com/barseghyanartur/django-slim/tree/stable/example directory for a working example.
Installation
django-localeurl integration is fully supported for Python 2.6.* and 2.7.* and installs automatically
when installing django-slim. If you are using Python 3, install a forked version of django-localeurl
(since official version does not yet have support for Python 3).
Forked version from bitbucket:
$ pip install -e hg+https://bitbucket.org/barseghyanartur/django-localeurl@stable#egg=localeurl
Integration
Use slim.models.decorators.auto_prepend_language
decorator in order to have it working.
Example (have in mind our FooItem
model.
from django.core.urlresolvers import reverse
from slim.models.decorators import auto_prepend_language
class FooItem(models.Model):
# Some other code; have in mind previous pieces. @auto_prepend_language def get_absolute_url(self): kwargs = {'slug': self.slug} return reverse('foo.detail', kwargs=kwargs)
Do not forget to add the LocaleURLMiddleware
to the MIDDLEWARE_CLASSES
(as first).
MIDDLEWARE_CLASSES = ( 'localeurl.middleware.LocaleURLMiddleware',
# The rest...
)
Also, add localeurl
to INSTALLED_APPS
.
INSTALLED_APPS = (
# Some apps... 'localeurl', # Some more apps...
)
GPL 2.0/LGPL 2.1
For any issues contact me at the e-mail given in the Author
section.
Artur Barseghyan artur.barseghyan@gmail.com
.. image:: https://d2weczhvl823v0.cloudfront.net/barseghyanartur/django-slim/trend.png :alt: Bitdeli badge :target: https://bitdeli.com/free
Version | Tag | Published |
---|---|---|
0.7.5 | 8yrs ago | |
0.7.4 | 8yrs ago | |
0.7.3 | 8yrs ago | |
0.7.2 | 9yrs ago |