Я установил gnuwin32 core utils, make и gettext:
http://gnuwin32.sourceforge.net/packages/coreutils.htm
http://gnuwin32.sourceforge.net/packages/make.htm
http://gnuwin32.sourceforge.net/packages/gettext.htm
У меня есть make-файл, который выглядит так:
.PHONY: po mo
po:
xgettext -Lpython --output=po/messages.pot vocelab/app.py vocelab/app.kv
msgmerge --update --no-fuzzy-matching --backup=off po/en.po po/messages.pot
msgmerge --update --no-fuzzy-matching --backup=off po/hu.po po/messages.pot
mo:
mkdir -p "data/locales/en/LC_MESSAGES"
mkdir -p "data/locales/hu/LC_MESSAGES"
msgfmt -c -o data/locales/en/LC_MESSAGES/langapp.mo po/en.po
msgfmt -c -o data/locales/hu/LC_MESSAGES/langapp.mo po/hu.po
Проблема в том, что команда mkdir - это встроенный cmd.exe. Несмотря на то, что на моем пути есть «c:\Program Files (x86)\GnuWin32\bin», встроенная команда имеет приоритет. Поэтому, когда я набираю "make mo", я получаю эту ошибку:
A subdirectory or file data/locales/en/LC_MESSAGES already exists.
Я мог бы заменить mkdir на «c:\Program Files (x86)\GnuWin32\bin\mkdir.exe» в make-файле, но это не так. В другой системе у кого-то может быть другое местоположение для gnuwin32.
Другими словами: mkdir.exe есть, но он конфликтует со встроенной командой cmd.exe. Другим вариантом будет использование другой оболочки в Windows. Но установка подсистемы Linux для Windows или установка Cygwin потребует гигабайт дискового пространства. Для сравнения, каталог GNU Win32, необходимый для этого проекта, занимает всего 40 МБ.
Я нашел решение, которое действительно работает, но оно уродливо и не переносимо:
GNUWIN32=c:/Program Files (x86)/GnuWin32\bin
.PHONY: po mo
po:
"$(GNUWIN32)/xgettext" -Lpython --output=po/messages.pot vocelab/app.py vocelab/app.kv
"$(GNUWIN32)/msgmerge" --update --no-fuzzy-matching --backup=off po/en.po po/messages.pot
"$(GNUWIN32)/msgmerge" --update --no-fuzzy-matching --backup=off po/hu.po po/messages.pot
mo:
"$(GNUWIN32)/mkdir" -p "data/locales/en/LC_MESSAGES"
"$(GNUWIN32)/mkdir" -p "data/locales/hu/LC_MESSAGES"
"$(GNUWIN32)/msgfmt" -c -o data/locales/en/LC_MESSAGES/langapp.mo po/en.po
"$(GNUWIN32)/msgfmt" -c -o data/locales/hu/LC_MESSAGES/langapp.mo po/hu.po