Não foi possível encontrar um caminho local para armazenar traduções para o arquivo __init__.py

106

Estou tentando traduzir um aplicativo Django. Eu criei algumas strings {% trans %}em meus modelos. No entanto, quando executo o seguinte comando na pasta do meu aplicativo, recebo uma mensagem de erro:

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

O que eu fiz errado?

Antoine M.
fonte

Respostas:

156

Acontece que você precisa localeprimeiro criar uma pasta usando mkdir locale. Se você estiver executando o comando de dentro de uma pasta de aplicativo, você precisa de umlocale pasta dentro dessa pasta de aplicativo.

Antoine M.
fonte
Obrigado, me ajudou. Basta executar o makemessagescomando daquele localediretório se já estiver disponível.
SaeX de
4
No Django 1.9 você precisa definir LOCALE_PATHSmesmo que seja de localeoutra forma, o texto compilado não será detectável.
Wtower
Observe que esta pasta não tem nenhum 's', e que deve estar na pasta do aplicativo (dessa forma você não tem nenhum LOCALE_PATHSpara configurar)
tobiasBora
28

Na verdade, você pode configurar onde está a pasta locale. Em seu settings.py adicione:

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

Em seguida, crie uma pasta para cada um dos idiomas que deseja traduzir:

mkdir -p website/locale/de
David Dehghan
fonte
2
você realmente não precisa criar uma pasta para cada um dos idiomas. django-admin makemessages fará isso por você
MagicLAMP
Isso é confuso. Devemos criar uma entrada para cada aplicativo? Ou armazenar todas as localidades para todos os aplicativos na mesma pasta local?
Vadorequest
12

O problema é que o comando não é executado no diretório do aplicativo, mas no diretório do projeto. Este snippet da documentação explica isso:

Acontece que você precisa localeprimeiro criar uma pasta usando mkdir locale.

./manage.py makemessages[…] Percorre toda a árvore de origem do diretório atual e extrai todas as strings marcadas para tradução. Ele cria (ou atualiza) um arquivo de mensagem no diretório conf / locale (na árvore Django) ou locale (para projeto e aplicativo).

Portanto, você pode executar o comando no diretório do aplicativo:

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

… Ou você define um diretório local para todo o projeto usando LOCALE_PATHSe pode executar a makemessagespartir do diretório principal.

De qualquer forma, você deve verificar se o ./locale/diretório está presente e criá-lo usando

$ mkdir locale

caso não seja.

jnns
fonte