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 0.23. ==== New in 0.23 ==== # Internationalized data formats: * XML: o The escaping of characters such as & < > has been changed: - No escaping is done any more by xgettext, when creating a POT file. - Instead, extra escaping can be requested for the msgfmt pass, when merging into an XML file. - The default value of 'escape' in the <gt:escapeRule> was "yes"; now it is "no". This means that existing translations of older POT files may no longer fully apply. As a maintainer of a package that has translatable XML files, you need to regenerate the POT file and pass it on to your translators. o XML schemas for .its and .loc files are now provided. o The value of the xml:lang attribute, inserted by msgfmt, now conforms to W3C standards. o 'msgfmt --xml' accept an option --replace-text, that causes the output to be a mono-lingual XML file instead of a multi-lingual XML file. o xgettext and 'msgfmt --xml' now support DocBook XML files. * Desktop: xgettext now produces POT files with correct line numbers. # Programming languages support: * Python: o xgettext now assumes source code for Python 3 rather than Python 2. This affects the interpretation of escape sequences in string literals. o xgettext now recognizes the f-string syntax. * Scheme: o xgettext now supports the option '-L Guile' as an alternative to '-L Scheme'. They are nearly equivalent. They differ in the interpretation of escape sequences in string literals: While 'xgettext -L Scheme' assumes the R6RS and R7RS syntax of string literals, 'xgettext -L Guile' assumes the syntax of string literals understood by Guile 2.x and 3.0 (without command-line option '--r6rs' or '--r7rs', and before a '#!r6rs' directive is seen). o xgettext now recognizes comments of the form '#; <expression>'. * Java: xgettext now has an improved recognition of format strings when the String.formatted method is used. * JavaScript: o xgettext now parses template literals inside JSX correctly. o xgettext has a new option --tag that customizes the behaviour of tagged template literals. * C#: o The build system and tools now also support 'dotnet' (.NET) as C# implementation. In order to declare a preference for 'dotnet' over 'mono', you can use the configure option '--enable-csharp=dotnet'. o xgettext now recognizes strings with embedded expressions (a.k.a. interpolated strings). * awk: xgettext now recognizes string concatenation by juxtaposition. * Smalltalk: xgettext now recognizes the string concatenation operator ','. * Vala: xgettext now has an improved recognition of format strings when the string.printf method is used. * Glade: xgettext has improved support for GtkBuilder 4. * Tcl: With the recently released Tcl 9.0, characters outside the Unicode BMP in Tcl message catalogs (.msg files) will work regardless of the locale's encoding. * Perl: o xgettext now reports warnings instead of fatal errors. o xgettext now recognizes strings with embedded expressions (a.k.a. interpolated strings). * PHP: o xgettext now recognizes strings with embedded expressions. o xgettext now scans Heredoc and Nowdoc strings correctly. o xgettext now regards the format string directives %E, %F, %g, %G, %h, %H as valid. # Runtime behaviour: * In the C.UTF-8 locale, like in the C locale, the *gettext() functions now return the msgid untranslated. This is relevant for GNU systems, Linux with musl libc, FreeBSD, NetBSD, OpenBSD, Cygwin, and Android. # Documentation: * The section "Preparing Strings" now gives more advice how to deal with string concatenation and strings with embedded expressions. # xgettext: * Most of the diagnostics emitted by xgettext are now labelled as "warning" or "error". # msgmerge: * The option '--sorted-output' is now deprecated. # libgettextpo library: * This library is now multithread-safe. * The function 'po_message_set_format' now supports resetting a format string mark. ==== Download ==== Here are the compressed sources: https://ftp.gnu.org/gnu/gettext/gettext-0.23.tar.gz (28MB) https://ftp.gnu.org/gnu/gettext/gettext-0.23.tar.lz (8.7MB) https://ftp.gnu.org/gnu/gettext/gettext-0.23.tar.xz (11MB) Here are the GPG detached signatures: https://ftp.gnu.org/gnu/gettext/gettext-0.23.tar.gz.sig https://ftp.gnu.org/gnu/gettext/gettext-0.23.tar.lz.sig https://ftp.gnu.org/gnu/gettext/gettext-0.23.tar.xz.sig Use a mirror for higher download bandwidth: https://www.gnu.org/order/ftp.html Here are the SHA1 and SHA256 checksums: File: gettext-0.23.tar.gz SHA1 sum: c31ae593a7c51f805645914ca206991e072760d9 SHA256 sum: 945dd7002a02dd7108ad0510602e13416b41d327898cf8522201bc6af10907a6 File: gettext-0.23.tar.lz SHA1 sum: 76a00a8abaf89efc516d9d6fcad4896e06428219 SHA256 sum: 9878994930a8e09f1e3186203b3ff2accb2c4e67ddc6098b2c1e4a74364d3c5a File: gettext-0.23.tar.xz SHA1 sum: 150efc2f9922cd4bb7fbb9d5c72ed3b2d1b60e3e SHA256 sum: bf31a9b6bdf3e364669c7bd9858f97e4a0c408a8d22940c5d4ab638b65460f85 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-0.23.tar.gz.sig The signature should match the fingerprint of the following key: pub rsa4096 2019-02-12 [SC] 9001 B85A F9E1 B83D F1BD A942 F5BE 8B26 7C6A 406D uid Bruno Haible (Open Source Development) <br...@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 F5BE8B267C6A406D 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-0.23.tar.gz.sig