6.5. 使用 GNU gettext

6.5.1. 基本用法

如果您的 port 需要使用 gettext, 只要将 USE_GETTEXT 设置为 yes, 您的 port 就会增加对 devel/gettext 的依赖。 USE_GETTEXT 也可以指定为所需的 libintl 库的版本, 它是 gettext 的基本组成部分, 尽管如此, 强烈建议您不要 使用这个功能: 您的 port 应能与目前版本的 devel/gettext 配合工作。

在 port 中相当常见的情况下, 会需要同时使用 gettextconfigure。 一般而言, GNU configure 能够自动定位到 gettext。 如果它没有成功地完成这项工作, 则可以通过类似下面这样的 CPPFLAGSLDFLAGSgettext 的位置告诉它:

USE_GETTEXT= yesCPPFLAGS+= -I${LOCALBASE}/includeLDFLAGS+= -L${LOCALBASE}/libGNU_CONFIGURE= yesCONFIGURE_ENV= CPPFLAGS="${CPPFLAGS}" \ LDFLAGS="${LDFLAGS}"

当然, 不需要传参数给 configure 时, 代码可以更为简练:

USE_GETTEXT= yesGNU_CONFIGURE= yesCONFIGURE_ENV= CPPFLAGS="-I${LOCALBASE}/include" \ LDFLAGS="-L${LOCALBASE}/lib"

6.5.2. 可选用法

一些软件产品提供了禁用 NLS 的能力, 例如, 在 configure 时, 指定 --disable-nls 参数。 如果您 port 的软件支持这种配置, 则应根据 WITHOUT_NLS 的设置来有条件地使用 gettext。 对于比较简单和不太复杂的 port, 您可以使用下列结构:

GNU_CONFIGURE= yes.if !defined(WITHOUT_NLS)USE_GETTEXT= yesPLIST_SUB+= NLS="".elseCONFIGURE_ARGS+= --disable-nlsPLIST_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

在比较复杂的情形中, 您可能需要使用更高级的技术, 例如 动态生成装箱单 等。

6.5.3. 处理消息编录目录

在安装消息编录文件时还有一个需要注意的地方。 这些文件会放到 LOCALBASE/share/locale 下与语言对应的目录中, 这些目录一般您的 port 不需要创建和删除。 最常用的语言的目录已经在 /etc/mtree/BSD.local.dist 中列出; 也就是说, 它们是基本系统的一部分。 其他一些语言的目录, 则由 devel/gettext 控制。 您最好查看一下 pkg-plist, 以确定是否正在安装某种不常用语言的文件。

本文档和其它文档可从这里下载: ftp://ftp.FreeBSD.org/pub/FreeBSD/doc/.

如果对于FreeBSD有问题,请先阅读 文档,如不能解决再联系 <questions@FreeBSD.org>.

关于本文档的问题请发信联系 <doc@FreeBSD.org>.