Я встановив основні утиліти gnuwin32, make і gettext:
http://gnuwin32.sourceforge.net/packages/coreutils.htm
http://gnuwin32.sourceforge.net/packages/make.htm
http://gnuwin32.sourceforge.net/packages/gettext.htm
У мене є makefile, який виглядає так:
.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" у makefile, але це не здається правильним. У іншій системі хтось може мати інше місце для 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