6.5. Использование GNU gettext

6.5.1. Простой вариант использования

Если для вашего порта требует gettext, просто установите переменную USE_GETTEXT в значение yes, и в ваш порт добавится зависимость от devel/gettext. Кроме того, в USE_GETTEXT можно установить требуемую версию библиотеки libintl, основного компонента gettext, но такой механизм лучше не использовать. Ваш порт должен работать и с текущей версией devel/gettext.

Довольно распространенным случаем является использование в порте gettext и configure. Как правило, GNU configure способен находить gettext автоматически. Если он все же не сможет это сделать, то подсказки для размещения gettext можно передать через переменные окружения CPPFLAGS и LDFLAGS:

USE_GETTEXT=    yes
CPPFLAGS+=      -I${LOCALBASE}/include
LDFLAGS+=       -L${LOCALBASE}/lib

GNU_CONFIGURE=  yes
CONFIGURE_ENV=  CPPFLAGS="${CPPFLAGS}" \
                LDFLAGS="${LDFLAGS}"

Of course, the code can be more compact if there are no more flags to pass to configure:

USE_GETTEXT=    yes
GNU_CONFIGURE=  yes
CONFIGURE_ENV=  CPPFLAGS="-I${LOCALBASE}/include" \
                LDFLAGS="-L${LOCALBASE}/lib"

6.5.2. Оптимальное использование

Некоторые программные продукты позволяют отключать NLS, к примеру через передачу параметра --disable-nls сценарию configure. В этом случае, ваш порт должен использовать gettext в зависимости от статуса переключателя WITHOUT_NLS. Для портов небольшой или средней сложности вы можете полагаться на следующую идиому:

GNU_CONFIGURE=          yes

.if !defined(WITHOUT_NLS)
USE_GETTEXT=            yes
PLIST_SUB+=             NLS=""
.else
CONFIGURE_ARGS+=        --disable-nls
PLIST_SUB+=             NLS="@comment "
.endif

Следующий пункт в вашем списке дел разобраться, чтобы файлы каталога сообщения включались в список упаковки по условию. Часть, входящая в Makefile, уже обеспечена этой идиомой. Остальное объясняется в главе продвинутые практики pkg-plist. Вкратце, каждое вхождение %%NLS%% в pkg-plist будет заменено на ``@comment '', если NLS выключен, или пустой строкой, если включен. В результате строки, предваряемые %%NLS%%, станут комментариями в итоговом листе упаковки, если NLS выключен; иначе, префикс будет просто удален. Всё, что вам нужно, это вставить %%NLS%% перед каждым путем к файлу каталога сообщений в pkg-plist. Например:

%%NLS%%share/locale/fr/LC_MESSAGES/foobar.mo
%%NLS%%share/locale/no/LC_MESSAGES/foobar.mo

В особо сложных случаях вам понадобиться использовать более продвинутые техники, чем данный рецепт, такие как динамические списки упаковки.

6.5.3. Управление каталогами сообщений

Существует момент, который следует учитывать при установке файлов каталогов сообщений. Целевые каталоги для размещения, расположенные под LOCALBASE/share/locale, редко когда должны создаваться и удаляться вашим портом. Для наиболее популярных языков имеются собственные каталоги, перечисленные в /etc/mtree/BSD.local.dist; таким образом, они включены в основную систему. Каталоги для множества других языков управляются с помощью порта devel/gettext. Возможно, вам понадобиться обратить внимание на его pkg-plist и посмотреть, куда ваш порт собирается установить файлы каталогов сообщений для единственного в своем роде языка.

По вопросам связанным с системой портов для FreeBSD, пишите по адресу <ports@FreeBSD.org>.
По вопросам, связанным с этой документацией, пишите по адресу <doc@FreeBSD.org>.