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=    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"

6.5.2 可选用法

  一些软件产品提供了禁用 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

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

6.5.3 处理消息编录目录

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

若您有关于 FreeBSD ports 系统的问题, 请发送电子邮件至 <ports@FreeBSD.org>。
关于此文档的任何问题, 请致函 <doc@FreeBSD.org>。