web-dev-qa-db-fra.com

Impossible de trouver un chemin local pour stocker les traductions du fichier __init__.py

J'essaie de traduire une application Django. J'ai créé des chaînes avec {% trans %} dans mes modèles. Cependant, lorsque j'exécute la commande suivante dans mon dossier d'application, je reçois un message d'erreur:

$ Django-admin.py makemessages -l fr 
CommandError: Unable to find a locale path to store translations for file __init__.py`

Qu'ai-je fait de mal?

92
Antoine M.

Il s'avère que vous devez d'abord créer un dossier locale à l'aide de mkdir locale. Si vous exécutez la commande à partir d'un dossier d'application, vous avez besoin d'un dossier locale dans ce dossier d'application.

137
Antoine M.

En fait, vous pouvez configurer l'emplacement du dossier des paramètres régionaux. Dans votre settings.py, ajoutez:

LOCALE_PATHS = (
    PROJECT_ROOT + '/website/locale', )

Créez ensuite un dossier pour chacune des langues que vous souhaitez traduire:

mkdir -p website/locale/de
23
David Dehghan

Le problème est que la commande n'est pas exécutée à partir du répertoire de l'application mais à partir du répertoire du projet. Cet extrait de la documentation l'explique:

Il s'avère que vous devez d'abord créer un dossier locale à l'aide de mkdir locale.

./manage.py makemessages […] Exécute toute l'arborescence source du répertoire courant et extrait toutes les chaînes marquées pour la traduction. Il crée (ou met à jour) un fichier de messages dans le répertoire conf/locale (dans le répertoire Django) ou local (pour le projet et l'application).

Donc, vous exécutez la commande à partir du répertoire de l'application:

$ cd app
$ Django-admin makemessages -l <locale>

… Ou vous définissez un répertoire de paramètres régionaux à l'échelle du projet à l'aide de LOCALE_PATHS et vous pouvez exécuter makemessages à partir du répertoire principal à partir de là.

Dans tous les cas, vous devez vérifier que le ./locale/répertoire est présent et créez-le en utilisant

$ mkdir locale

au cas où ce ne serait pas le cas.

10
jnns