如果您的 port 需要使用 gettext, 只要将 USE_GETTEXT 设置为 yes, 您的 port 就会增加对 devel/gettext 的依赖。 USE_GETTEXT 也可以指定为所需的 libintl 库的版本, 它是 gettext 的基本组成部分, 尽管如此, 强烈建议您不要 使用这个功能: 您的 port 应能与目前版本的 devel/gettext 配合工作。
在 port 中相当常见的情况下, 会需要同时使用 gettext 和 configure。 一般而言, GNU configure 能够自动定位到 gettext。 如果它没有成功地完成这项工作, 则可以通过类似下面这样的 CPPFLAGS 和 LDFLAGS 将 gettext 的位置告诉它:
USE_GETTEXT= yes CPPFLAGS+= -I${LOCALBASE}/include LDFLAGS+= -L${LOCALBASE}/lib GNU_CONFIGURE= yes CONFIGURE_ENV= CPPFLAGS="${CPPFLAGS}" \ LDFLAGS="${LDFLAGS}"
当然, 不需要传参数给 configure 时, 代码可以更为简练:
USE_GETTEXT= yes GNU_CONFIGURE= yes CONFIGURE_ENV= CPPFLAGS="-I${LOCALBASE}/include" \ LDFLAGS="-L${LOCALBASE}/lib"
一些软件产品提供了禁用 NLS 的能力, 例如, 在 configure 时, 指定 --disable-nls
参数。 如果您 port 的软件支持这种配置, 则应根据 WITHOUT_NLS
的设置来有条件地使用 gettext。
对于比较简单和不太复杂的 port, 您可以使用下列结构:
GNU_CONFIGURE= yes .if !defined(WITHOUT_NLS) USE_GETTEXT= yes PLIST_SUB+= NLS="" .else CONFIGURE_ARGS+= --disable-nls PLIST_SUB+= NLS="@comment " .endif
您要做的下一件事是合理地安排装箱单文件, 使其根据用户配置来决定是否将消息编录 (message catalog) 文件放入最终的装箱单。 前面已经介绍了在 Makefile 中所需的写法, 这种做法在 高级 pkg-plist 用法 这节中进行了介绍。 简单地说, 在 pkg-plist 中出现的 %%NLS%% 均会在禁用 NLS 时自动替换为 “@comment ”, 反之则替换为空串。 这样, 在最终的装箱单中带 %%NLS%% 的行, 在 NLS 关闭的情况下就会变为注释, 反之, 这些前缀就会自动删掉。 现在需要做的事情就是把 %%NLS%% 插到 pkg-plist 中的消息编录文件的那些行开头, 例如:
%%NLS%%share/locale/fr/LC_MESSAGES/foobar.mo %%NLS%%share/locale/no/LC_MESSAGES/foobar.mo
在比较复杂的情形中, 您可能需要使用更高级的技术, 例如 动态生成装箱单 等。
在安装消息编录文件时还有一个需要注意的地方。 这些文件会放到 LOCALBASE/share/locale 下与语言对应的目录中, 这些目录一般您的 port 不需要创建和删除。 最常用的语言的目录已经在 /etc/mtree/BSD.local.dist 中列出; 也就是说, 它们是基本系统的一部分。 其他一些语言的目录, 则由 devel/gettext 控制。 您最好查看一下 pkg-plist, 以确定是否正在安装某种不常用语言的文件。