Django i18n: убедитесь, что у вас есть инструменты GNU gettext
Я пытаюсь django-admin.py makemessages -l zh_CN
, но имеет ошибку:
CommandError: Can't find msguniq. Make sure you have GNU gettext tools 0.15 or newer installed.
после того, как я использую brew установить gettext, он все равно ошибается.
Нужно ли мне что-то делать? вот мой скриншот терминала
Пожалуйста, помогите мне, спасибо.
![enter image description here]()
Ответы
Ответ 1
Для пользователей Mac: после установки Homebrew и gettext, как говорит @Louis Barranqueiro (шаги 1 и 2):
- Установите Homebrew:
/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
- Установите GNU gettext:
brew install gettext
Вы не должны использовать brew link gettext --force
на шаге 3, потому что это рискованно (как советует Brew, если вы попробуете). Лучший обходной путь - установить новую PATH variable
для вашей виртуальной среды. Итак, в файле postactivate
, который находится в папке bin вашей папки виртуальной среды, введите:
export TEMP_PATH=$PATH
export PATH=$PATH:/usr/local/Cellar/gettext/0.19.7/bin
Обратите внимание, что вы должны заменить 0.19.7
на версию, установленную на вашем компьютере.
И в вашем файле predeactivate
, который находится в той же папке, postactivate
файл postactivate
, введите:
export PATH=$TEMP_PATH
unset TEMP_PATH
Теперь вы можете без проблем использовать python manage.py makemessages -l <desired_language>
. :)
Приветствия.
Ответ 2
В Ubuntu:
$ sudo apt-get install gettext
Ответ 3
Эта процедура работала для меня (OSX 10.11.2 - python v3.5 и Django 1.8)
Он должен работать с вашей конфигурацией.
Установить gettext инструменты GNU с помощью Homebrew с помощью Terminal
- Установить Homebrew:
/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
- Установить GNU gettext:
brew install gettext
- Создать символическую ссылку:
brew link gettext --force
Ответ 4
Это решение работало для меня (победа 7, 8 и 10)
Вам нужно загрузить две папки:
- Gettext-runtime_0.18.1.1-2_win32
- Gettext-инструменты-dev_0.18.1.1-2_win32
Вы можете найти их здесь.
-
После того, как вы их загрузите, распакуйте их и добавьте каталог файла bin из обеих папок в системные переменные PATH
вашего компьютера.
-
Вам также понадобится файл с именем libstdС++ - 6.dll скачать его из здесь и поместите его в свой системный каталог. Ниже вы найдете подробную информацию о системном каталоге здесь.
И вот оно. Надеюсь, это полезно для вас.
Ответ 5
@max-malysh ответ разрешил его для меня - без касания системных файлов.
Скопируйте и запустите каждое из следующих действий:
brew install gettext
GETTEXT_PATH="/usr/local/Cellar/gettext/0.19.8.1/bin"
FILE="venv/bin/activate"
echo "" >> $FILE
echo "export PATH=\$PATH:$GETTEXT_PATH" >> $FILE
source venv/bin/activate
-
GETTEXT_PATH="/usr/local/Cellar/gettext/0.19.8.1/bin"
хранит gettext_path в переменной оболочки -адаптирует номер версии в соответствии с тем, что brew install gettext
-
FILE="venv/bin/activate"
хранит путь к оболочке venv script
-
echo "" >> $FILE
добавляет пустую строку в конце, чтобы убедиться, что следующая команда находится в собственной строке
-
echo "export PATH=\$PATH:$GETTEXT_PATH" >> $FILE
добавляет команду в оболочку venv script; эта команда добавляет путь к gettext двоичным файлам в глобальную переменную $PATH
, так что они используются перед двоичными файлами ОС.
-
source venv/bin/activate
запускает оболочку venv script, чтобы переменные были правильно установлены. Вы можете выполнить эту команду несколько раз.
Ответ 6
Если вы используете оболочку для рыб, другой способ - добавить этот путь к $fish_user_paths
. Эта переменная добавляется к $PATH
, поэтому вам не нужно устанавливать ее во всех ваших проектах.
Вы можете сделать это со следующей командной строкой:
set -U fish_user_paths /usr/local/Cellar/gettext/0.19.8.1/bin $fish_user_paths
Не забудьте заменить 0.19.8.1
на вашу версию gettext
.
Это устанавливает $fish_user_paths
как универсальную переменную. Здесь help
говорит о универсальных переменных:
Универсальная переменная - это переменная, значение которой является общим для всех экземпляры рыбы, теперь и в будущем - даже после перезагрузки. Вы может сделать переменную универсальную с set -U
Итак, задав эту переменную в вашей оболочке один раз (не нужно делать это в файле конфигурации), она сохранит ее даже после выхода из системы или перезагрузки.
Ответ 7
проблема намечена на выходе из brew
...
он установил GNU gettext, но не связал его с вашим каталогом bin, поскольку OSX уже предоставляет другую версию gettext...
поэтому Django не знает, как запустить версию, установленную с brew.
очевидно, brew здесь слишком осторожен, и вы должны просто связать его fooobar.com/questions/192250/...
Ответ 8
Привет, прежде всего, убедитесь, что ваша виртуальная среда не находится в корневой папке. Я думаю, что лучше практиковать, чтобы ваша виртуальная среда находилась вне корневой папки. Очевидно, убедитесь, что ваша среда активирована. Конечно, убедитесь, что у вас установлен gettext.
Если ваша папка env находится в вашей корневой папке
Чтобы проверить это, просто добавьте {% load i18n%} во все ваши шаблоны, выберите шаблон и сделайте что-то вроде этого:
<h1>{% trans 'My Test to be translated' %}</h1>
Теперь запустите эту команду
django-admin makemessages -l 'zh_CN' -i your_venv
(Убедитесь, что вы замените your_venv
на имя вашей виртуальной среды.
После запуска вышеуказанной команды вы должны получить это в своем терминале.
язык обработки zh_CN
Теперь у вас должна быть папка с locale/cn/LC_MESSAGES/django.po
например: locale/cn/LC_MESSAGES/django.po
Теперь вам нужно будет скомпилировать сообщения. Запустите эту команду
django-admin compilemessages
Теперь в вашей папке с локалями вы должны увидеть файл django.mo, но вы заметите разницу в файле django.po. Просто добавьте туда свой перевод, и вы можете протестировать снова, установив в качестве языка en LANGUAGE_CODE = 'zh_CN', затем просто обновите и протестируйте строку h1, которая будет переведена на китайский язык.
Чтобы вышеперечисленное сработало в вашем файле settings.py, убедитесь, что оно у вас есть, на данный момент самым важным является LOCALE_PATHS, но, пожалуйста, проверьте, правильно ли это ('zh_CN', _ ('Chinese')))
LANGUAGES = [
('zh_CN', _('Chinese')),
('en', _('English')),
]
LANGUAGE_CODE = 'en-us'
TIME_ZONE = 'UTC'
USE_I18N = True
USE_L10N = True
USE_TZ = True
LOCALE_PATHS = [
os.path.join(BASE_DIR, 'locale'),
]
В этом ответе самая важная часть - понять, где находится ваша виртуальная среда. Причина, почему вы получаете все эти ошибки.
Пожалуйста, убедитесь, что вы ссылаетесь на это видео здесь, это отличный учебник. https://www.youtube.com/watch?v=xI97sLMd1rM