6.7.使用 GNU gettext

6.7.1. 基本用法

如果 port 需要使用 gettext, 则应设置 USES= gettext, 这样 port 将从 devel/gettext 中继承对 libintl.so 的依赖。其他关于 gettext 使用的值, 在 USES=gettext 中列出。\

一个相当常见的情况是使用 gettextconfigure 的 port。一般来说, GNU configure 应该能够自动定位 gettext

USES=	gettext
GNU_CONFIGURE=	yes

如果它失败了,可以在 CPPFLAGSLDFLAGS 中使用 localbase 传递 gettext 的位置提示,如下所示:

USES=	gettext localbase:ldflags
GNU_CONFIGURE=	yes

6.7.2. 可选的使用方法

一些软件产品允许禁用 NLS。例如, 通过传递 --disable-nls 来配置。在这种情况下, Port 必须根据 NLS 选项的状态, 有条件地使用 gettext。对于低到中等复杂度的 Port , 可以使用这个习惯:

GNU_CONFIGURE=		yes

OPTIONS_DEFINE=		NLS
OPTIONS_SUB=		yes

NLS_USES=		gettext
NLS_CONFIGURE_ENABLE=	nls

.include <bsd.port.mk>

或者使用旧的方式来使用选项:

GNU_CONFIGURE=		yes

OPTIONS_DEFINE=		NLS

.include <bsd.port.options.mk>

.if ${PORT_OPTIONS:MNLS}
USES+=			gettext
PLIST_SUB+=		NLS=""
.else
CONFIGURE_ARGS+=	--disable-nls
PLIST_SUB+=		NLS="@comment "
.endif

.include <bsd.port.mk>

下一个要做的事情是安排,使消息目录文件有条件地包括在打包列表中。这项任务中的 Makefile 部分已经由成语提供。在关于高级 pkg-plist 实践的一节里有解释。简而言之, 在 pkg-plist 中出现的 %%NLS%% 将被替换为 @comment(如果 NLS 被禁用的话), 或者被替换为空字符串 (如果 NLS 被启用的话)。因此, 如果关闭了 NLS, 在最终的装箱单中, 以 %%NLS%%为前缀的行将成为单纯的注释; 否则, 前缀将被省略。然后在 **pkg-plist** 中的每个消息目录文件的路径前插入%%NLS%%`。举例来说:

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

在高复杂度的情况下,可能需要更先进的技术,如动态打包列表的生成。

6.7.3. 处理信息目录目录

关于安装消息目录文件, 有一点需要注意。它们的目标目录, 位于 LOCALBASE/share/locale 之下, 绝不能由 port 创建和删除。最流行的语言在 PORTSDIR/Templates/BSD.local.dist 中列出了它们各自的目录。其他许多语言的目录由 devel/gettext port 来管理。请查阅它的 pkg-plist, 看看这个 port 是否要为某种独特的语言安装一个消息目录文件。

最后更新于

FreeBSD 中文社区