Django app to wrap models fields to gettext calling for the given apps
Project description
Django-translate
This is a django app that allows you to wrap django models fields with a translation field (not for Pycharm and docker-compose python interpretator).
It uses the django model translation and gettext package to achieve this.
Installation
poetry add django-translate-gettext
# or
poetry add git+https://github.com/alpden550/django-translate-gettext.git
Usage
Add django_translate
to your INSTALLED_APPS
setting like this:
INSTALLED_APPS = [
...,
'django_translate_gettext',
...
]
Call django commands to create the translation fields for your apps, use --format
flag to call ruff format tool after files changed.
Example:
python manage.py translate app1 app2 app3 app4 --format
Models files before:
demo/models/base.py
from django.db import models
class Base(models.Model):
created_at = models.DateTimeField("Date Created", auto_now_add=True)
updated_at = models.DateTimeField(verbose_name="Date Updated", auto_now=True)
items = models.JSONField(default=dict, blank=True, null=True)
class Meta:
abstract = True
demo/models/user.py
import csv
from pathlib import Path
from django.db import models
from demo.models import Base
class CustomQuerySet(models.QuerySet):
def filter(self, *args, **kwargs):
return super().filter(*args, **kwargs).order_by("id")
class UserTypes(models.TextChoices):
ADMIN = "admin", "Admin"
USER = "user", "User"
STAFF = "staff", "Staff"
class CustomUser(Base):
class _InnerTypes(models.TextChoices):
NEW = "new", "New"
OLD = "old", "Old"
username = models.CharField("User Name", max_length=100, help_text="This is the help text")
email = models.EmailField()
password = models.CharField(max_length=100)
created_at = models.DateTimeField("Date Created", auto_now_add=True)
updated_at = models.DateTimeField(verbose_name="Date Updated", auto_now=True)
first_name = models.CharField(verbose_name="First_Name", max_length=25)
last_name = models.CharField("Last_Name", max_length=25)
is_active = models.BooleanField(default=True)
choices = models.CharField(max_length=5, choices=UserTypes.choices, default=UserTypes.USER)
groups = models.ManyToManyField("auth.Group", verbose_name="Custom Groups", blank=True)
owner = models.ForeignKey("auth.User", related_name="users", on_delete=models.CASCADE, blank=True, null=True)
objects = CustomQuerySet.as_manager()
class Meta:
verbose_name = "Own Custom User"
verbose_name_plural = "Own Custom Users"
ordering = ("-created_at",)
get_latest_by = ("-created_at", "is_active")
Models files after:
demo/models/base.py
from django.db import models
from django.utils.translation import gettext_lazy as _
class Base(models.Model):
created_at = models.DateTimeField(_("Date Created"), auto_now_add=True)
updated_at = models.DateTimeField(verbose_name=_("Date Updated"), auto_now=True)
items = models.JSONField(verbose_name=_("Items"), default=dict, blank=True, null=True)
class Meta:
abstract = True
demo/models/user.py
import csv
from pathlib import Path
from django.db import models
from demo.models import Base
from django.utils.translation import gettext_lazy as _
class CustomQuerySet(models.QuerySet):
def filter(self, *args, **kwargs):
return super().filter(*args, **kwargs).order_by("id")
class UserTypes(models.TextChoices):
ADMIN = ("admin", _("Admin"))
USER = ("user", _("User"))
STAFF = ("staff", _("Staff"))
class CustomUser(Base):
class _InnerTypes(models.TextChoices):
NEW = ("new", _("New"))
OLD = ("old", _("Old"))
username = models.CharField(_("User Name"), max_length=100, help_text=_("This is the help text"))
email = models.EmailField(_("Email"))
password = models.CharField(verbose_name=_("Password"), max_length=100)
created_at = models.DateTimeField(_("Date Created"), auto_now_add=True)
updated_at = models.DateTimeField(verbose_name=_("Date Updated"), auto_now=True)
first_name = models.CharField(verbose_name=_("First_Name"), max_length=25)
last_name = models.CharField(_("Last_Name"), max_length=25)
is_active = models.BooleanField(verbose_name=_("Is_Active"), default=True)
choices = models.CharField(
verbose_name=_("Choices"), max_length=5, choices=UserTypes.choices, default=UserTypes.USER
)
groups = models.ManyToManyField("auth.Group", verbose_name=_("Custom Groups"), blank=True)
owner = models.ForeignKey(
"auth.User", verbose_name=_("Owner"), related_name="users", on_delete=models.CASCADE, blank=True, null=True
)
objects = CustomQuerySet.as_manager()
class Meta:
verbose_name = _("Own Custom User")
verbose_name_plural = _("Own Custom Users")
ordering = ("-created_at",)
get_latest_by = ("-created_at", "is_active")
Don't forget to check the changes before call makemigrations
and migrate
commands.
Don't forget to fill the settings.py like example file with the recommended Django settings before calling the makemessaging
command.
# settings.py
LANGUAGE_CODE = "en"
USE_I18N = True
USE_L10N = True
USE_TZ = True
LOCALE_PATHS = [Path(BASE_DIR, "locale")]
LANGUAGES = [
("en", "English"),
("ru", "Russian"),
]
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_translate_gettext-0.1.9.tar.gz
Algorithm | Hash digest | |
---|---|---|
SHA256 | ba496ba2e4c2c46117659ff060b7fb48ba5c0c7061b5c78c7fb9fc7d12d1d4b0 |
|
MD5 | 0a31516438cc15ebbd3652940d65665a |
|
BLAKE2b-256 | 79a1d306b0b19c7770203c8922d6ca83e84729470c336837f73a17b1c0c37559 |
Hashes for django_translate_gettext-0.1.9-py3-none-any.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 74dd3da2494ebcf263634092a8abc6ef1133d66470e9dde5a1cd947299329dc8 |
|
MD5 | 0a3db0059ef323910e0a3ec0a94d0ac3 |
|
BLAKE2b-256 | 9751572e212406a60b721f14ed3141ed3972bd3abaa046c9b864ef208d9da14d |