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):

  1. Установите Homebrew: /usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
  2. Установите 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