Django model translation for perfectionists with deadlines.
Project description
Django Translations
Django model translation for perfectionists with deadlines.
Requirements
- Python (>=3.5)
- Django (>=2.0)
Installation
-
Install Django Translations using pip:
$ pip install django-translations
-
Add
translations
to theINSTALLED_APPS
in the settings of your project:INSTALLED_APPS += [ 'translations', ]
-
Run
migrate
:$ python manage.py migrate
-
Configure Django internationalization and localization settings:
USE_I18N = True # use internationalization USE_L10N = True # use localization MIDDLEWARE += [ # locale middleware 'django.middleware.locale.LocaleMiddleware', ] LANGUAGE_CODE = 'en-us' # default (fallback) language LANGUAGES = ( # supported languages ('en', 'English'), ('en-gb', 'English (Great Britain)'), ('de', 'German'), ('tr', 'Turkish'), )
Please note that these settings are for Django itself.
Basic Usage
Model
Inherit Translatable
in any model you want translated:
from translations.models import Translatable
class Continent(Translatable):
code = models.Charfield(...)
name = models.Charfield(...)
denonym = models.Charfield(...)
class TranslatableMeta:
fields = ['name', 'denonym']
No migrations needed afterwards.
Admin
Use the admin extensions:
from translations.admin import TranslatableAdmin, TranslationInline
class ContinentAdmin(TranslatableAdmin):
inlines = [TranslationInline,]
This provides specialized translation inlines for the model.
QuerySet
Use the queryset extensions:
>>> from sample.models import Continent
>>> continents = Continent.objects.all(
... ).distinct( # familiar distinct
... ).probe(['en', 'de'] # probe (filter, exclude, etc.) in English and German
... ).filter( # familiar filtering
... countries__cities__name__startswith='Köln'
... ).translate('de' # translate the results in German
... ).translate_related( # translate these relations as well
... 'countries', 'countries__cities',
... )
>>> print(continents)
<TranslatableQuerySet [
<Continent: Europa>,
]>
>>> print(continents[0].countries.all())
<TranslatableQuerySet [
<Country: Deutschland>,
]>
>>> print(continents[0].countries.all()[0].cities.all())
<TranslatableQuerySet [
<City: Köln>,
]>
This provides a powerful yet familiar interface to work with the querysets.
Context
Use the translation context:
>>> from translations.context import Context
>>> from sample.models import Continent
>>> continents = Continent.objects.all()
>>> relations = ('countries', 'countries__cities',)
>>> with Context(continents, *relations) as context:
... context.read('de') # read the translations onto the context
... print(':') # use the objects like before
... print(continents)
... print(continents[0].countries.all())
... print(continents[0].countries.all()[0].cities.all())
...
... continents[0].countries.all()[0].name = 'Change the name'
... context.update('de') # update the translations from the context
...
... context.delete('de') # delete the translations of the context
...
... context.reset() # reset the translations of the context
... print(':') # use the objects like before
... print(continents)
... print(continents[0].countries.all())
... print(continents[0].countries.all()[0].cities.all())
:
<TranslatableQuerySet [
<Continent: Europa>,
<Continent: Asien>,
]>
<TranslatableQuerySet [
<Country: Deutschland>,
]>
<TranslatableQuerySet [
<City: Köln>,
]>
:
<TranslatableQuerySet [
<Continent: Europe>,
<Continent: Asia>,
]>
<TranslatableQuerySet [
<Country: Germany>,
]>
<TranslatableQuerySet [
<City: Cologne>,
]>
This can CRUD the translations of any objects (instance, queryset, list) and their relations.
Documentation
For more interesting capabilities browse through the documentation.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Hashes for django-translations-1.0.0.tar.gz
Algorithm | Hash digest | |
---|---|---|
SHA256 | d7d4c2a7d29ef1ebb88f2a9298bb5ceda675d5293e13eb9e48e29bc2283ebc89 |
|
MD5 | ac10613bf30b74d4ad5492331af71c2f |
|
BLAKE2b-256 | c251fc10218cf52a46726f709d82dadfba37ae4318d8309a34229e36130a4b6b |
Hashes for django_translations-1.0.0-py3-none-any.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | fe10e69e8241261ddee4e02317d43e7f609413d4cb12616029ade0e164da75b8 |
|
MD5 | c3bb7ff7caddc8fbd360eeb815d34017 |
|
BLAKE2b-256 | 57c235ea6d4738ac4dde917cae3ef9a8c93234372e43a05b9a9c735a2bdfe9c7 |