Internationalisation dans Django

Le problème exposé dans ce sujet a été résolu.

Bonjour à tous,

J’essaie d’internationaliser mon site Django (pour l’instant en anglais), et je n’arrive pas à faire marcher les traductions… Voici ce que j’ai fait actuellement :

Fichier settings.py :

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
# Internationalization
# https://docs.djangoproject.com/en/2.0/topics/i18n/

LANGUAGE_CODE = 'en-us'

TIME_ZONE = 'UTC'

USE_I18N = True

USE_L10N = True

USE_TZ = True

LANGUAGES = (
    ('en-us', 'English'),
    ('fr', 'Français'),
)

LOCALE_PATHS = (
    os.path.join(os.path.join(BASE_DIR), 'tournaments', 'locale'),
)

Fichier tournaments/templates/tournaments/details.html (extrait) :

1
2
3
<div class="col-md-6 offset-md-3 text-center">
  <h1>{% trans 'tournaments.details.tournament' %}</h1>
</div>

Fichier tournaments/locale/fr/LC_MESSAGES/django.po :

1
2
3
#: .\templates\tournaments\details.html:12
msgid "tournaments.details.tournament"
msgstr "Tournoi"

J’ai fait un makemessages puis compilemessage, et j’ai relancé le serveur.

Je ne vois vraiment pas où est le problème, quelqu’un pourrait-il m’aider ?

Merci d’avance :)

Salut !

As-tu une erreur au lancement, ou juste pas de traduction ?

Sinon, je crois que le fichier .po doit comporter un en-tête comme celui-ci (source) (qui est ajouté automatiquement avec la commande makemessages. Est-il bien dans ton fichier ?

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2017-12-30 21:02+0100\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: rezemika\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
"Language: EN\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
+0 -0

Oui, malheureusement j’ai également ces entêtes (le fichier est généré par Django) :/

Theo

Désolé, dans ce cas, je ne vois pas d’où ça peut venir… :/

+0 -0

Salut !

Je me suis toujours demandé si c’étaient les fichiers .po, éditables, qui étaient utilisés, ou leur version "compilée" .mo… Le souci ne viendrait-il pas de ce que ces fichiers .mo n’existent actuellement pas ?

Edit

Ou alors ils ne sont pas là où le système les cherche.

+0 -0

Salut ! J’ai trouvé d’où venait le problème. J’avais bien compilé mes messages, mais en fait il me manquait deux paramètres dans les settings. Le premier, c’était de définir le context_preprocessor de i18n :

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
TEMPLATES = [
    {
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        'DIRS': [os.path.join(BASE_DIR, 'templates')],
        'APP_DIRS': True,
        'OPTIONS': {
            'context_processors': [
                'django.template.context_processors.debug',
                'django.template.context_processors.request',
                'django.contrib.auth.context_processors.auth',
                'django.contrib.messages.context_processors.messages',
                'django.template.context_processors.i18n', # Cette ligne était manquante
            ],
        },
    },
]

Et dans les middelwares, il manquait le LocaleMiddleware :

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
MIDDLEWARE = [
    'django.middleware.security.SecurityMiddleware',
    'django.contrib.sessions.middleware.SessionMiddleware',
    'django.middleware.locale.LocaleMiddleware', # Cette ligne était manquante
    'django.middleware.common.CommonMiddleware',
    'django.middleware.csrf.CsrfViewMiddleware',
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    'django.contrib.messages.middleware.MessageMiddleware',
    'django.middleware.clickjacking.XFrameOptionsMiddleware',
    'debug_toolbar.middleware.DebugToolbarMiddleware',
]

Une fois ceci fait, je n’ai plus eu de problème ! J’espère que ça pourra en aider certains :)

Connectez-vous pour pouvoir poster un message.
Connexion

Pas encore membre ?

Créez un compte en une minute pour profiter pleinement de toutes les fonctionnalités de Zeste de Savoir. Ici, tout est gratuit et sans publicité.
Créer un compte