Language file not loading automatically in Django

I am using python3 and Django 1.10 for my application, and I'm kind of new to Django. I plan to have many languages ​​for the Django admin panel. Since I follow the rules in the Django documentation, I find out that I need to use middleware to localize ... Here are my settings:

MIDDLEWARE = [ 'django.middleware.security.SecurityMiddleware', 'django.contrib.sessions.middleware.SessionMiddleware', 'django.middleware.locale.LocaleMiddleware', 'django.middleware.common.CommonMiddleware', 'django.middleware.csrf.CsrfViewMiddleware', 'django.contrib.auth.middleware.AuthenticationMiddleware', 'django.contrib.messages.middleware.MessageMiddleware', 'django.middleware.clickjacking.XFrameOptionsMiddleware', ] LOCALE_PATHS = ( os.path.join(BASE_DIR, 'locale'), ) LANGUAGE_CODE = 'en' ugettext = lambda s: s LANGUAGES = ( ('fa', ugettext('Farsi')), ('en', ugettext('English')), ) 

When I go to admin mylocal/en/admin or mylocal/fa/admin , the application language has changed perfectly. But my language file ( .po ) always looks in LANGUAGE_CODE . when I set LANGUAGE_CODE='fa' it will change to Farsi. not automatically Now I just want my language files to be downloaded using the URLs /en/ or /fa/ .

Here is my urls.py file if you need to check.

 urlpatterns = i18n_patterns( url(r'^admin/', admin.site.urls), ) 
+1
python django multilingual
source share
1 answer

I have a similar working setup, the main difference is that I use ugettext_lazy . This is because I need to translate these lines into my models or settings when they were available, and not when they were called (which will happen only once: they will be evaluated only at server startup and will not recognize any further changes; Django).

Link: https://docs.djangoproject.com/en/1.10/topics/i18n/translation/#lazy-translation

What I use (in this special case, German is the default language, and I translate into English):

Project /urls.py

 from django.conf.urls.i18n import i18n_patterns urlpatterns = i18n_patterns( url(r'^admin/', admin.site.urls), ) 

Project /settings.py

 from django.utils.translation import ugettext_lazy as _ MIDDLEWARE = [ 'django.middleware.security.SecurityMiddleware', 'django.contrib.sessions.middleware.SessionMiddleware', 'django.middleware.locale.LocaleMiddleware', 'django.middleware.common.CommonMiddleware', 'django.middleware.csrf.CsrfViewMiddleware', 'django.contrib.auth.middleware.AuthenticationMiddleware', 'django.contrib.messages.middleware.MessageMiddleware', 'django.middleware.clickjacking.XFrameOptionsMiddleware', ] LANGUAGE_CODE = 'de-de' USE_I18N = True USE_L10N = True LANGUAGES = [ ('de', _('German')), ('en', _('English')), ] LOCALE_PATHS = [ os.path.join(BASE_DIR, 'locale'), ] 

application /models.py

 from django.utils.translation import ugettext_lazy as _ class Kindergarten(models.Model): stadt = models.CharField(verbose_name=_(Stadt)) class Meta: verbose_name = _('Kindergarten') verbose_name_plural = _('KindergΓ€rten') 

Workflow

 $ python manage.py makemessages --locale en ... edit project/locale/en/LC_MESSAGES/django.po ... $ python manage.py compilemessages 

Now I can access my Django admin translation (interface + models) with:

Notes

  • Pyhton 3.5.2
  • Django 1.10.2
+2
source share

All Articles