gettext-1.0 released [stable]

5 min read Original article ↗

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
From: Bruno Haible
Subject: gettext-1.0 released [stable]
Date: Thu, 29 Jan 2026 03:42:11 +0100

The GNU gettext package contains
  * tools for internationalization, enabling a programmer to make their package
    "speak" to the users in their specific language,
  * tools for localization, enabling a translator to initialize, check, and
    review the message translations that they provide for a package,
  * runtime libraries; in particular, a libintl library that implements the
    C function gettext() portably, in a glibc-compatible way.

It is now available in version 1.0.


==== New in 1.0 ====

# Improvements for maintainers and distributors:
  * In a po/ directory, the PO files are now exactly those that the
    translators submitted or committed in version control, or a
    translation project's daemon committed on behalf of the translators.
    They are no longer regularly updated with respect to the POT file
    in the same directory.

    The advantage for maintainers is that the maintainer may commit the
    PO files in version control, without getting
      - lots of modified files shown by "git status",
      - frequent merge conflicts when merging between branches,
      - a voluminous version control history.

    The advantage for distributors is that the role of files in a
    release tarball are clearer: The PO files are source code, whereas
    the POT file and the *.gmo files are generated files.

    ATTENTION translators!
    Translators who work directly on a package's source code (without
    going through a translation project) now need to run "msginit"
    before starting work on a PO file.

  * A new program 'po-fetch' is provided, that fetches the translated
    PO files from a translation project's site on the internet, and
    updates the LINGUAS file accordingly.

  * In a po/ directory, a new script 'fetch-po' is now added by 'gettextize'.
    It provides the standard interface for fetching the translated PO files.
    It typically either invokes the 'po-fetch' program or does nothing.

# Improvements for translators:
  * msginit:
    - When the PO file already exists, 'msginit' now updates it w.r.t. the
      POT file, like 'msgmerge' would do. Previously, 'msginit' failed with
      an error message in this situation.

  * Pretranslation:
    - Two new programs, 'msgpre' and 'spit', are provided, that implement
      machine translation through a locally installed Large Language Model
      (LLM).  'msgpre' applies to an entire PO file, 'spit' to a single
      message.
    - The documentation has a new chapter "Pretranslation".

# Improvements for maintainers:
  * xgettext:
    - The refactoring suggestion when a translatable string contains an URL
      or email address can now be inhibited through a command-line option
      '--no-check=url' or '--no-check=email', or through a comment in the
      source code of the form
          /* xgettext: no-url-check */
      or
          /* xgettext: no-email-check */

# Programming languages support:
  * OCaml:
    - xgettext now supports OCaml.
    - 'msgfmt -c' now verifies the syntax of translations of OCaml format
      strings.
    - A new example 'hello-ocaml' has been added.
  * Rust:
    - xgettext now recognizes 'gettextrs::gettext' invocations, like 'gettext'
      invocations.

# libgettextpo library:
  * The function 'po_message_get_format' now supports distinguishing whether
    a negative format string mark, such as 'no-c-format', is set or not.
  * The new functions
      po_message_has_workflow_flag
      po_message_set_workflow_flag
      po_message_workflow_flags_iterator, po_flag_next, po_flag_iterator_free
    can be used to manipulate or inspect the workflow flags of a message.
  * The new functions
      po_message_has_sticky_flag
      po_message_set_sticky_flag
      po_message_sticky_flags_iterator, po_flag_next, po_flag_iterator_free
    can be used to manipulate or inspect the sticky flags of a messsage.

# Emacs PO mode:
  Restore syntax highlighting in Emacs version 30 or newer.


==== Download ====

Here are the compressed sources:
  https://ftp.gnu.org/gnu/gettext/gettext-1.0.tar.gz   (32MB)
  https://ftp.gnu.org/gnu/gettext/gettext-1.0.tar.lz   (9.8MB)
  https://ftp.gnu.org/gnu/gettext/gettext-1.0.tar.xz   (11MB)

Here are the GPG detached signatures:
  https://ftp.gnu.org/gnu/gettext/gettext-1.0.tar.gz.sig
  https://ftp.gnu.org/gnu/gettext/gettext-1.0.tar.lz.sig
  https://ftp.gnu.org/gnu/gettext/gettext-1.0.tar.xz.sig

Use a mirror for higher download bandwidth:
  https://www.gnu.org/order/ftp.html

Here are the SHA256 and SHA3-256 checksums:

  File: gettext-1.0.tar.gz
  SHA256 sum:   85d99b79c981a404874c02e0342176cf75c7698e2b51fe41031cf6526d974f1a
  SHA3-256 sum: c8826e055416b9f1a4fdc8eab55ee2ea635973e5883132d9ad792222cbb627c4

  File: gettext-1.0.tar.lz
  SHA256 sum:   d6342cbe1411a2fe7d139bfed80c2d63b1babc92acfedc72501cc105184f61ee
  SHA3-256 sum: c838aba26f7ca33d6e519e687571eee3ff3bc81c5e4d324d744867cf00357c31

  File: gettext-1.0.tar.xz
  SHA256 sum:   71132a3fb71e68245b8f2ac4e9e97137d3e5c02f415636eb508ae607bc01add7
  SHA3-256 sum: 0af684d24bea6d12287ecaa8872ec1b2116842e478a7df89859e42b7d55c6417

Verify the SHA256 checksum with either sha256sum, sha256, or
'shasum -a 256'.

Verify the SHA3-256 checksum with 'cksum -a sha3 -l 256 --base64'
from coreutils-9.8.

Use a .sig file to verify that the corresponding file (without the
.sig suffix) is intact.  First, be sure to download both the .sig file
and the corresponding tarball.  Then, run a command like this:

  gpg --verify gettext-1.0.tar.gz.sig

The signature should match the fingerprint of the following key:

  pub   ed25519 2025-01-28 [SC]
        E0FF BD97 5397 F77A 32AB  76EC B630 1D9E 1BBE AC08
  uid   Bruno Haible (Free Software Development) <bruno@clisp.org>

If that command fails because you don't have the required public key,
or that public key has expired, try the following commands to retrieve
or refresh it, and then rerun the 'gpg --verify' command.

  gpg --recv-keys B6301D9E1BBEAC08

As a last resort to find the key, you can try the official GNU
keyring:

  wget -q https://ftp.gnu.org/gnu/gnu-keyring.gpg
  gpg --keyring gnu-keyring.gpg --verify gettext-1.0.tar.gz.sig







[Prev in Thread] Current Thread [Next in Thread]