Okrand is an internationalization/translation tool for Django.
It is a pure Python program so doesn't rely on gettext
.
Okrand will respect your .gitignore
.
Okrand can upgrade Django models so translation is much easier. You don't need to write verbose_name
anymore! And if you do write them Okrand will upgrade raw strings to gettext_lazy.
Turn this feature on in your setup.cfg
:
[tool:okrand] django_model_upgrade=1 django_model_prefixes= your_package.
So concretely this model:
from django.utils.translation import gettext_lazy as _
class Book(Model):
name = CharField(verbose_name=_('name'))
isbn = CharField(verbose_name=_('ISBN'))
class Meta:
verbose_name = _('book')
verbose_name = _('books')
Can now be changed to the more natural:
class Book(Model):
name = CharField()
isbn = CharField(verbose_name='ISBN')
Note that you don't need to wrap the verbose_name
in a gettext_lazy call anymore.
First pip install okrand
, then add okrand
to INSTALLED_APPS
.
Add OKRAND_STATIC_PATH
to settings, pointing to where Okrand should write the JavaScript catalog files. Typically something like:
OKRAND_STATIC_PATH = Path(BASE_DIR) / 'yourproject' / 'base' / 'static'
If you have a base
app to put common stuff.
In setup.cfg
you set:
- additional ignore rules beyond
.gitignore
. These are regexes for the full path.- sorting: none (default), alphabetical
- if the django model upgrade is enabled
- custom collector functions
[tool:okrand] ignore= .*some_annoying_path.* sort=alphabetical django_model_upgrade=1 django_model_prefixes= some_app. another_app. find_source_strings_plugins= your.module.function_name
There is a built in web based frontend to okrand. To install it first install iommi.
Then add the following to your urls.py
:
from okrand.views import i18n
urlpatterns = [
path('i18n/', i18n),
]
Marc Okrand is a linguist who is best known for his work on Star Trek where he created the Klingon language.