Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to override the django admin translation?

I'm trying to override the default translations of Django's admin site.

I'm using Django 1.6. My settings.py contains:

import os BASE_DIR = os.path.dirname(os.path.dirname(__file__))  # ...  LANGUAGE_CODE = 'nl' USE_I18N = True USE_L10N = True LOCALE_PATHS = (os.path.join(BASE_DIR, "locale"),) 

I have copied the file django/contrib/admin/locale/nl/LC_MESSAGES/django.po to my_project/locale/nl/LC_MESSAGES/django.po and I've made some changes to it.

Next, I have run python manage.py compilemessages and python manage.py runserver.

When I visit localhost:8000/admin, however, I'm still seeing Django's default admin translations. What am I doing wrong?

Edit - I found the problem:

The above description is the correct way to override app translations. I followed my own instructions and they work. The reason for my problem was that I accidentally omitted the nl subdirectory the first time. I am a dumb person.

like image 730
Jaap Joris Vens Avatar asked Jan 01 '14 22:01

Jaap Joris Vens


People also ask

How can I change Django admin language?

In your settings.py just add 'django. middleware. locale. LocaleMiddleware' to your MIDDLEWARE_CLASSES setting, making sure it appears after 'django.

How can I remove extra's from Django admin panel?

Take a look at the Model Meta in the django documentation. Within a Model you can add class Meta this allows additional options for your model which handles things like singular and plural naming. Show activity on this post. inside model.py or inside your customized model file add class meta within a Model Class.

How do I change my Django admin email?

If your talking about Admin User or Admin SuperUser. Yes you can change email id after building the app. You can change it from django admin panel from User App. Even you can create multiple SuperUsers too.

How do I make administrative superuser in Django?

Django's “Hello World” application Start the terminal by clicking on the “Run” button. Type python3 manage.py createsuperuser in the given terminal and press “Enter”. The system will ask for credentials, after which a superuser will be created. To run the server, we type the command python3 manage.py runserver 0.0.


1 Answers

I'm providing an answer, even though @hedgie mostly answered their own question. I'll add a bit of context and description of what's happening. This answer is still applicable as of Django 3.0.

Just as you can override a Django-provided admin template by duplicating the template's name and directory structure within our own project, you can override Django-provided admin translations by duplicating a .po file's name and directory structure within our project.

Django's admin translations live in django/contrib/admin/locale/ and are organized by language in directories named [language code]/LC_MESSAGES/. These individual language directories contain two .po files, django.po and djangojs.po, and their respective compiled .mo files. You will be overriding the .po files, and compiling our own .mo files.

The first thing you have to do is enable translations in settings, and tell Django where you store our translation files.

settings.py

import os BASE_DIR = os.path.dirname(os.path.dirname(__file__))  # ...  LANGUAGE_CODE = 'nl-NL' USE_I18N = True USE_L10N = True LOCALE_PATHS = (os.path.join(BASE_DIR, "locale"),)  # our custom translations will go here 

Note that although the directory Django uses is nl, the full language identifier for Dutch in the Netherlands is nl-NL. You can find a full list of identifiers organized by country here.

Next, you'll mimic Django's directory structure and create two files in a new directory:

my_project/locale/nl/LC_MESSAGES/django.po

my_project/locale/nl/LC_MESSAGES/djangojs.po

Note that this path must also match what you provided in settings.py.

Copy and paste the contents of Django's translation files. You can now edit the translations for whichever strings you like. For example:

django.po

msgid "Are you sure?" --- msgstr "Weet u het zeker?" +++ msgstr "Weet u het zeker?!" 

Now you need to compile the messages with:

python manage.py compilemessages

This command compiles your .po files into .mo files, which Django will use to translate any matching gettext calls. You should now see your custom translations in the admin interface.

like image 139
Greg Kaleka Avatar answered Sep 26 '22 10:09

Greg Kaleka