FreeBSD Porter 手册
上一页 | 第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`， 以确定是否正在安装某种不常用语言的文件。

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

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