Package: django-slim
Simple implementation of multi-lingual models for Django. Django-admin integration works out of the box.
Supportsdjango-localeurlintegration.PrerequisitesDjango 1.5, 1.6, 1.7Python 2.7.+, 3.3.+InstallationNote, that Django 1.5 is required. Earlier versions are not supported.InstallationLatest stable version on PyPI:$ pip install django-slimLatest stable version on bitbucket:$ pip install -e hg+https://bitbucket.org/barseghyanartur/django-slim@stable#egg=django-slimLatest stable version on github:$ pip install -e git+https://github.com/barseghyanartur/django-slim/@stable#egg=django-slimAddslimtoINSTALLED_APPSof you settings module.Usage and examplesAn extensive example project is available athttps://github.com/barseghyanartur/django-slim/tree/stable/exampledirectory.Screenshots are present in documentation on PythonHosted (http://pythonhosted.org/django-slim/#screenshots).DemoIn 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 latestdjango_slim_example_app_installer.sh$ wgethttps://raw.github.com/barseghyanartur/django-slim/stable/example/django_slim_example_app_installer.shCreate a new- or switch to existing- virtual environement, assign execute rights to the installer and run
thedjango-slim-example-app-install.sh.$ chmod +x django_slim_example_app_installer.sh$ ./django_slim_example_app_installer.shGo to the front/back -end and test the app.Front-end URL:http://127.0.0.1:8001/en/foo/Admin URL:http://127.0.0.1:8001/admin/foo/fooitem/Admin username: adminPassword: testLet’s now step-by-step review our imaginary example app.settings.pyAddslimto installed apps.>>> INSTALLED_APPS = (
>>>     # ...
>>>     'slim',
>>>     # ...
>>> )Add languages.>>> LANGUAGES = (
>>>     ('en', gettext("English")), # Main language!
>>>     ('hy', gettext("Armenian")),
>>>     ('nl', gettext("Dutch")),
>>>     ('ru', gettext("Russian")),
>>> )example/models.py>>> 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()example/admin.py>>> 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)example/views.pyWe 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 codeMore on ORM filtering>>> 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 namedLorem 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
TrueAll available translations forfoo:>>> foo.available_translations()
[<FooItem: Lorem ipsum HY>, <FooItem: Lorem ipsum NL>]All available translations for Armenianfoo.>>> armenian_foo.available_translations()
[<FooItem: Lorem ipsum>, <FooItem: Lorem ipsum NL>]Seehttps://github.com/barseghyanartur/django-slim/tree/stable/exampledirectory for a working example.django-localeurl integrationInstallationdjango-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=localeurlIntegrationUseslim.models.decorators.auto_prepend_languagedecorator in order to have it working.Example (have in mind ourFooItemmodel.>>> 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 theLocaleURLMiddlewareto theMIDDLEWARE_CLASSES(as first).>>> MIDDLEWARE_CLASSES = (
>>>     'localeurl.middleware.LocaleURLMiddleware',
>>>     # The rest...
>>> )Also, addlocaleurltoINSTALLED_APPS.>>> INSTALLED_APPS = (
>>>     # Some apps...
>>>     'localeurl',
>>>     # Some more apps...
>>> )LicenseGPL 2.0/LGPL 2.1SupportFor any issues contact me at the e-mail given in theAuthorsection.AuthorArtur Barseghyan <artur.barseghyan@gmail.com>