Автоматическая синхронизация строк для перевода между PHP и .po-файлами
Те, кто занимаются переводом тем и плагинов WordPress, знают о том, как бывает нудно синхронизировать переводимые строки между файлами плагина и языковыми (.po
) файлами. И очень немногие люди из тех, с кем я разговаривал, знают о программе msgmerge
, которая позволяет частично автоматизировать процесс.
Я хочу поделиться небольшим Makefile
‘ом, который позволяет полностью автоматизировать синхронизацию (автоматический перевод, к сожалению, пока не реализован).
PHP_FILES := $(wildcard ../*.php) $(wildcard ../lib/*.php) $(wildcard ../pages/*.php)
# Замените DOMAIN доменом перевода (второй аргумент, передаваемый в функцию __())
PO_FILES := $(wildcard DOMAIN-*.po)
MO_FILES := $(patsubst %.po,%.mo,$(PO_FILES))
# Замените DOMAIN доменом перевода (второй аргумент, передаваемый в функцию __())
POT := DOMAIN.pot
XGETTEXT := xgettext
MSGFMT := msgfmt
MSGMERGE := msgmerge
XGETTEXT_OPTIONS := --default-domain=DOMAIN --language=php \
--keyword=__ \
--keyword=_e \
--keyword=_c \
--keyword=esc_attr__ \
--keyword=esc_html__ \
--keyword=esc_attr_e \
--keyword=esc_html_e \
--keyword=_x \
--keyword=esc_attr_x \
--keyword=_n \
--keyword=_nc \
--keyword=_nx \
--from-code=UTF-8 --msgid-bugs-address='your@email.here'
.PHONY: all
all: $(POT) $(MO_FILES)
$(MO_FILES): %.mo: %.po
$(MSGFMT) -o$@ $<
$(PO_FILES): %: $(POT)
$(MSGMERGE) -U $@ $(POT)
touch $@
$(POT): $(PHP_FILES)
$(XGETTEXT) $(XGETTEXT_OPTIONS) $(PHP_FILES) --output="$@"
.PHONY: clean
clean:
-rm -f $(POT) $(MO_FILES)
Первый вызов make
сгенерирует .pot-файл, последующие вызовы make
будут обновлять .pot
и .po
-файлы и генерировать .mo
-файлы из .po
.
класс
Ivan, плагин автоматом выкидывает ссылки из знаков препинания и пробелов