history
Project history and usage
GNU gettext is the GNU internationalization and localization toolkit for message catalogs. It supplies runtime APIs, command-line tools, PO and MO file workflows, and maintainer and translator conventions used by many Unix-like software projects.
Project history
GNU's own history traces the work to 1994 internationalization experiments around GNU fileutils and the `glocale` effort. Ulrich Drepper rewrote the approach in April 1995, and the package went through names such as `msgutils` and `nlsutils` before `gettext` was accepted as the GNU package name.
The first official GNU gettext release, numbered 0.7, appeared in July 1995 and included PO mode. In 1997, GNU libc 2.0 included the `gettext`, `textdomain`, and `bindtextdomain` functions; in 2000, plural-form handling via `ngettext` entered GNU libc, and Bruno Haible took over GNU gettext maintenance.
Adoption history
gettext became central to GNU and Unix-like localization because it separates programming from translation: source strings are marked in code, `xgettext` extracts templates, translators edit PO files, `msgmerge` refreshes them across source changes, and `msgfmt` compiles machine-readable catalogs. Its workflow gave maintainers, translators, distributors, and users a shared file format and toolchain.
How it is used
Practitioners use gettext by marking translatable strings in program sources, initializing a text domain, extracting POT templates, maintaining language-specific PO files, compiling MO files, and installing catalogs under locale directories. Shell users and build systems also use utilities such as `gettext`, `ngettext`, `xgettext`, `msginit`, `msgmerge`, `msgfmt`, `msgattrib`, `msgcat`, and `envsubst`.
Why package nerds care
For package ecosystems, gettext is infrastructure rather than an optional convenience. Source distributions often carry POT and PO files, binary packages install compiled catalogs, and build recipes depend on tools such as `autopoint`, `gettextize`, `msgfmt`, and `xgettext` to keep translation workflows reproducible.
Timeline
- 1994: GNU fileutils internationalization work led to broader GNU native-language-support experiments.
- 1995: Ulrich Drepper wrote GNU gettext and the first official release, 0.7, appeared in July.
- 1997: GNU libc 2.0 included gettext-related functions.
- 2000: `ngettext` plural-form handling entered GNU libc and Bruno Haible took over GNU gettext maintenance.
- 2001: GNU libc 2.2.x was released with full internationalization support according to the GNU gettext manual.
Related projects
- GNU gettext is tied to GNU libc, the GNU Translation Project, PO mode, Autotools workflows, and localization tools that consume or convert PO files.