Django app to wrap app files class fields to gettext calling for the given apps
Project description
Django-translate-getetxt
This is a django app that allows you to wrap django applications files fields with a gettext translation field (not for Pycharm and docker-compose python interpretator).
And translate the .po
files fields with the help of the Google Translator (use --makemessages flag).
It uses gettext package to achieve this and wrapping fields.
v.0.3.0—Added creating po files for the given lang code and filling the po files with the translation fields (Use Google Translator)
v.0.2.2—Added support for clean models methods and ValidationError messages
v0.2.0-Added support for admin files
v0.1.0—Initial release with models files support
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
or -f
flag to call ruff format tool after files changed.
Use --makemessages
or -mm
flag and pass locales to create translated .po
files
Example:
python manage.py translate app1 app2 app3 app4 --format --makemessages ru fr it de ar def
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
File details
Details for the file django_translate_gettext-0.3.6.tar.gz
.
File metadata
- Download URL: django_translate_gettext-0.3.6.tar.gz
- Upload date:
- Size: 10.9 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: poetry/1.8.2 CPython/3.11.7 Darwin/23.4.0
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 3b804697cfcaca11477bb88c2de52c95d9231fd2d42c7154f31fcda1764589f8 |
|
MD5 | ee0db6705c60504ea6afc580ce3a6fc7 |
|
BLAKE2b-256 | dbd35dbdf775b3b9eed6e72a3c44c1bebaa69197ed0b43f535b542ec5cc42b05 |
File details
Details for the file django_translate_gettext-0.3.6-py3-none-any.whl
.
File metadata
- Download URL: django_translate_gettext-0.3.6-py3-none-any.whl
- Upload date:
- Size: 11.9 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: poetry/1.8.2 CPython/3.11.7 Darwin/23.4.0
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | e99c8afbf1d9dcc595b2434775bee3ff074c98519356d5763c8ab8a995175e62 |
|
MD5 | ce37b0e44c4e2d66134e2cbe91fffb65 |
|
BLAKE2b-256 | 15a025cc01c64957502bf43be5f91862dd6a17ccc10890488dd98a7b6f8ffc07 |