6.5. 使用 GNU `gettext`
上一页 | 第 6 章 特殊情况 | 下一页

## 6.5. 使用 GNU `gettext`

### 6.5.1. 基本用法

如果您的 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"

### 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`， 以确定是否正在安装某种不常用语言的文件。

上一页 | 上一级 | 下一页
6.4. 利用 GNU autotools | 起始页 | 6.6. 使用 `perl`

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

如果对于FreeBSD有问题，请先阅读 文档，如不能解决再联系 <questions@FreeBSD.org>.
关于本文档的问题请发信联系 <doc@FreeBSD.org>.