1Version 0.21 - July 2020
2
3* Programming languages support:
4  - Shell:
5    o xgettext now recognizes and ignores 'env' invocations and environment
6      variable assignments in front of commands.
7  - Java:
8    o xgettext now recognizes format strings in the Formatter syntax.  They
9      are marked as 'java-printf-format' in POT and PO files.
10    o xgettext now recognizes text blocks as string literals.
11  - JavaScript:
12    xgettext parses JSX expressions more reliably.
13  - Ruby:
14    o xgettext now supports Ruby.
15    o 'msgfmt -c' now verifies the syntax of translations of Ruby format
16      strings.
17
18* Runtime behaviour:
19  - On native Windows platforms, the directory that contains the message
20    catalogs may now contain arbitrary Unicode characters. To make use of
21    this feature, use the new function 'wbindtextdomain' instead of
22    'bindtextdomain'. It allows to pass a directory name in wchar_t[] encoding.
23    Note: 'wbindtextdomain' exists only on native Windows platforms.
24
25* Improvements for translators:
26  - When msgfmt writes a MO file, it now does so in such a way that processes
27    that are currently using an older copy of the MO file will not crash.
28
29* Libtextstyle:
30  - Added support for emitting hyperlinks.
31  - New API for doing formatted output.
32  - The example programs support the NO_COLOR environment variable.
33
34Version 0.20.2 - April 2020
35
36* Improvements for maintainers:
37  - A dependency bug in po/Makefile.in.in has been fixed.
38
39* Programming languages support:
40  - Shell:
41    o The programs 'gettext', 'ngettext', when invoked with option -e, now
42      expand '\\' and octal escape sequences, instead of swallowing them.
43      (Bug present since the beginning.)
44    o xgettext now recognizes 'gettext' program invocations with the '-e'
45      option, such as
46        gettext -e 'some\nstring\n'
47  - Python:
48    xgettext now assumes a Python source file is in UTF-8 encoding by default,
49    as stated in PEP 3120.
50  - Desktop Entry:
51    The value of the 'Icon' property is no longer extracted into the POT file
52    by xgettext.  The documentation explains how to localize icons.
53
54* Runtime behaviour:
55  - The interpretation of the language preferences on macOS has been improved,
56    especially in the case where a system locale does not exist for the
57    combination of the selected primary language and the selected territory.
58  - Fixed a multithread-safety bug on Cygwin and native Windows.
59
60* Libtextstyle:
61  - Fixed a number of bugs (by upgrading libcroco to version 0.6.13).
62
63Version 0.20.1 - May 2019
64
65* Important bug fix:
66  - Fixed a wrong shared library versioning of libintl.so.
67
68Version 0.20 - May 2019
69
70* Support for reproducible builds:
71  - msgfmt now eliminates the POT-Creation-Date header field from .mo files.
72
73* Improvements for translators:
74  - update-po target in Makefile.in.in now uses msgmerge --previous.
75
76* Improvements for maintainers:
77  - msgmerge now has an option --for-msgfmt, that produces a PO file meant
78    for use by msgfmt only.  This option saves processing time, in particular
79    by omitting fuzzy matching that is not useful in this situation.
80  - The .pot file in a 'po' directory is now erased by "make maintainer-clean".
81  - It is now possible to override xgettext options from the po/Makefile.in.in
82    through options in XGETTEXT_OPTIONS (declared in po/Makevars).
83  - The --intl option of the gettextize program (deprecated since 2010) is
84    no longer available. Instead of including the intl sources in your package,
85    we suggest making the libintl library an optional prerequisite of your
86    package. This will simplify the build system of your package.
87  - Accordingly, the Autoconf macro AM_GNU_GETTEXT_INTL_SUBDIR is gone as well.
88
89* Programming languages support:
90  - C, C++:
91    xgettext now supports strings in u8"..." syntax, as specified in C11
92    and C++11.
93  - C, C++:
94    xgettext now supports 'p'/'P' exponent markers in number tokens, as
95    specified in C99 and C++17.
96  - C++:
97    xgettext now supports underscores in number tokens.
98  - C++:
99    xgettext now supports single-quotes in number tokens, as specified in
100    C++14.
101  - Shell:
102    o The programs 'gettext', 'ngettext' now support a --context argument.
103    o gettext.sh contains new function eval_pgettext and eval_npgettext
104      for producing translations of messages with context.
105  - Java:
106    o xgettext now supports UTF-8 encoded .properties files (a new feature
107      of Java 9).
108    o The build system and tools now support Java 9, 10, and 11. On the
109      other hand, support for old versions of Java (Java 5 and older,
110      GCJ 4.2.x and older) has been dropped.
111  - Perl:
112    o Native support for context functions (pgettext, dpgettext, dcpgettext,
113      npgettext, dnpgettext, dcnpgettext).
114    o better detection of question mark and slash as operators (as opposed
115      to regular expression delimiters).
116  - Scheme:
117    xgettext now parses the syntax for specialized byte vectors (#u8(...),
118    #vu8(...), etc.) correctly.
119  - Pascal:
120    xgettext can now extract strings from .rsj files, produced by the
121    Free Pascal compiler version 3.0.0 or newer.
122  - Vala:
123    xgettext now parses escape sequences in strings more accurately.
124  - JavaScript:
125    xgettext now parses template literals correctly.
126
127* Runtime behaviour:
128  - The interpretation of the language preferences on macOS has been fixed.
129  - Per-thread locales are now also supported on Solaris 11.4.
130  - The replacements for the printf()/fprintf()/... functions that are
131    provided through <libintl.h> on native Windows and NetBSD are now POSIX
132    compliant.  There is no conflict any more between these replacements
133    and other possible replacements provided by gnulib or mingw.
134
135* Libtextstyle:
136  - This package installs a new library 'libtextstyle', together with a new
137    header file <textstyle.h>.  It is a library for styling text output sent
138    to a console or terminal emulator.
139    Packagers: please see the suggested packaging hints in the file PACKAGING.
140
141Version 0.19.8 - June 2016
142
143* Support for reproducible builds:
144  - msgfmt now produces little-endian .mo files by default.
145
146* Programming languages support:
147  - XML:
148    xgettext and msgfmt now look for .its files in directories
149    supplied through the GETTEXTDATADIRS or XDG_DATA_DIRS environment
150    variable.
151  - JavaScript:
152    xgettext and msgfmt now recognize numbered arguments in format
153    strings.
154
155* Portability:
156  - Improve OS/2 kLIBC support.
157  - Fix libintl compilation issue with pre-C99 compilers.  It was a
158    regression since 0.19.5.
159  - The AM_GNU_GETTEXT Autoconf macro can now detect musl-libc's
160    gettext as a compatible implementation.
161
162Version 0.19.7 - December 2015
163
164* Programming languages support:
165  - XML:
166    xgettext can now load custom string extraction rules supplied by
167    consumer projects.  The rules are written in XML, utilizing the
168    Internationalization Tag Set (ITS) standard.  All the existing
169    XML-based language scanners (Glade, GSettings, and AppData) are
170    rewritten using ITS.  In addition, msgfmt now has --xml option to
171    merge translations back to the original XML document.
172
173* Portability:
174  - Improve OS/2 kLIBC support (still not complete)
175  - Remove dependency on expat
176
177Version 0.19.6 - September 2015
178
179* Programming languages support:
180  - AppData:
181    xgettext now supports AppData file format, used by software center
182    applications (e.g., GNOME Software) to describe installable
183    applications.
184
185* A new macro AM_GNU_GETTEXT_REQUIRE_VERSION can be used to indicate
186  autopoint to pull the latest available infrastructure, instead of
187  the exact version specified with AM_GNU_GETTEXT_VERSION.  When
188  AM_GNU_GETTEXT_REQUIRE_VERSION is used, AM_GNU_GETTEXT_VERSION is
189  ignored.
190
191* po/Makefile.in.in can now insert the file $(DOMAIN).pot-header to
192  $(DOMAIN).pot, instead of the standard header comments.
193
194* Bug fixes:
195  - Fix mishandling of gettext version numbers for minor releases, in
196    po-mode.el and gettextize.
197  - Fix build with --enable-relocatable.
198
199Version 0.19.5 - July 2015
200
201* xgettext now has a feature to perform syntax checks on msgid, which
202  could enforce common styles of translatable strings, such as to
203  prefer Unicode characters to the corresponding ASCII characters.
204  They can be enabled with --check option or special "xgettext: "
205  comment in the source code.  By default, no syntax checks are
206  enabled.
207
208* msgfilter and msgexec now have an option --newline, which appends a
209  newline character to filter input and trims it from the filter
210  output.  This would allow filter programs to be more POSIX friendly.
211
212* The base Unicode standard is now updated to 8.0.0.  This
213  particularly improves "\N{...}" notation handling of xgettext for
214  Perl and Python.
215
216* msginit is now capable of generating "Plural-Forms:" from Unicode
217  CLDR.  This feature is still experimental, but you can try it by
218  setting the GETTEXTCLDRDIR environment variable pointing to the
219  directory where the CLDR archive is extracted.  The actual
220  conversion is done by a helper program 'cldr-plural', which can be
221  used as a generic converter and evaluator of CLDR plural forms.
222
223* Programming languages support:
224  - C++ with KDE: xgettext and msgfmt can now recognize KUIT (KDE User
225    Interface Text) markup.  See the documentation section "KUIT
226    Format Strings" for more info.
227  - C++ with KDE: xgettext now recognizes all default KDE keywords.
228    This removes the need for a long list of --keyword and --flag
229    options to perform a reasonable extraction.
230
231* Bug fixes:
232  - xgettext C++11 raw string recognition is now stricter and don't
233    accept unbalanced delimiters.
234  - Suppress baseless warnings which msgfmt emits when processing a
235    .desktop file.
236  - xgettext line wrapping behaviour is now consistent between comment
237    lines and non-comment lines.
238  - Fix msgfilter-7 test failure on some platforms.
239  - Fix VPATH build.
240
241Version 0.19.4 - December 2014
242
243* The --keyword option of xgettext now accepts same argument number
244  for both singular and plural forms.
245
246* Programming languages support:
247  - C#: xgettext now properly handles Unicode characters encoded with
248    surrogate pairs.
249  - C/C++: xgettext now recognizes ISO/IEC 9899:2011 string literals
250    prefixed by R, u8, u8R, u, uR, U, UR, L, or LR.
251  - Shell: xgettext now properly recognizes Bash ANSI-C quoting ($'...').
252
253* Bug fixes:
254  - Fix integer overflow when reading certain MO files with msgunfmt.
255  - Avoid invalid memory access in various cases.  In particular, when
256    the same argument number is specified for singular/plural
257    arguments, and when checking Lisp and Scheme format strings.
258
259* Portability:
260  - Building on Mac OS X 10.10 and AIX 7.1 is now supported.
261
262Version 0.19.3 - October 2014
263
264* Bug fixes:
265  - Fix xgettext mishandling of octal character escapes in C.
266  - Fix autopoint infinite recursion with certain configure.ac.
267
268* The po/Makevars file has a new field MSGINIT_OPTIONS, that can be
269  used to adjust msginit's operation.  This is particularly useful for
270  controlling line wrapping behavior together with MSGMERGE_OPTIONS
271  and XGETTEXT_OPTIONS.
272
273* Portability:
274  - Building on Solaris 10 and 11 with Solaris Studio compiler is now
275    fixed.
276
277Version 0.19.2 - July 2014
278
279* Bug fixes:
280  - Fix xgettext crash in parsing empty string literals in C and Vala.
281  - ChangeLog file is added back to the gettext infrastructure.  It was
282    mistakenly removed in 0.19.
283  - Autoconf macro trace in autopoint now works again with Autoconf 2.68
284    or earlier.  It was a regression in 0.19.
285
286Version 0.19.1 - June 2014
287
288* Programming languages support:
289
290  - Desktop Entry:
291    msgfmt now always reads the po/LINGUAS file, regardless of whether
292    the LINGUAS environment variable is set.  The variable can now be
293    used to restrict the languages list read from the po/LINGUAS file.
294
295  - Vala:
296    Bug fix in xgettext handling of "//" in string literals.  This was
297    a regression after the C-99 Unicode escape support.
298
299* The po/Makevars.template file now contains the newly added variables.
300
301* msgfmt now treats errors in the PO file header as non-fatal.  Since
302  0.19 msgfmt started to abort on the fatal errors, but some
303  translation systems are still not ready to supply valid headers.
304
305* Future backward-incompatibilities:
306  - In future Gettext versions, msgfmt will treat header errors as
307    fatal and terminate the command execution.
308
309Version 0.19 - June 2014
310
311* Programming languages support:
312
313  - Desktop Entry:
314    xgettext and msgfmt now support .desktop files, used by desktop
315    applications, as input and output.
316
317  - GSettings:
318    xgettext now supports GSettings schema file format used by GNOME
319    applications.
320
321  - JavaScript:
322    xgettext now recognizes E4X (ECMA-357) constructs.
323
324  - PHP:
325    Single and double quotes around heredoc markers are now recognized.
326
327  - Python:
328    The acceptable format specifiers in the braced-syntax format
329    strings are now limited to the Standard Format Specifiers, to
330    reasonably avoid false-positives.
331
332  - Scheme:
333    The gettext shorthand form _"abc", used by GIMP script-fu, is now
334    recognized by xgettext.
335
336  - C and Vala:
337    xgettext now recognizes C99-style Unicode character escapes.
338
339* The --add-location option of msgattrib, msgcat, msgcomm, msgconv,
340  msgen, msgfilter, msggrep, msgmerge, msguniq, and xgettext commands
341  now takes an optional argument 'never', 'full', or 'file', to
342  control the format of "#: ..." comments.
343
344* msgfmt now has --source option to keep generated .java file when
345  running in Java mode.
346
347* msgattrib now has --empty option that sets msgstr to empty when
348  clearing fuzzy flag.
349
350* msgexec and msgfilter pass the plural information to subprocess
351  through the environment variable MSG{EXEC,FILTER}_MSGID_PLURAL and
352  MSG{EXEC,FILTER}_PLURAL_FORM.
353
354* New built-in filters 'quot' and 'boldquot' have been added to
355  msgfilter.  These filters convert Latin quotation marks ('...',
356  "...") into Unicode quotation marks (for example, U+2018) if
357  possible, similar to the sed commands used in po/Rules-quot and
358  po/Rules-boldquot.
359
360* The po/Makevars file has a couple of new options PO_DEPENDS_ON_POT
361  and DIST_DEPENDS_ON_UPDATE_PO, that can be used to adjust the
362  behavior of updating PO files on demand.
363
364* xgettext now strips prefixed string before the comment tag.  This is
365  useful to support C-style comment like this:
366
367  /*
368   * TRANSLATORS: first line
369   * second line
370   */
371
372  In this example, the extracted comment does not contain "* " at the
373  beginning of each line.
374
375* libgettextpo library:
376  - Memory leak fixes in the PO file parser.
377
378* Documentation:
379  - A complete example showing the use of GNU gettext in a GNOME 3
380    application has been added.
381
382
383Version 0.18.3 - July 2013
384
385* Runtime behaviour:
386  On Mac OS X systems, the setlocale() function now properly
387  invalidates loaded message catalogs when a locale has been set.
388
389* Programming languages support:
390
391  - C++:
392    The gnu::autosprintf class now provides an assignment operator.
393
394  - Glade:
395    xgettext now supports GtkBuider file format used by Glade 3.
396    xgettext now also extracts contexts (msgctxt) from Glade 2 and
397    GtkBuider files.
398
399  - JavaScript:
400    xgettext now partially supports JavaScript.  Since the current
401    JavaScript specification (ECMA-262) does not define the standard
402    set of formatting methods nor translation functions, the
403    implementation supports only a limited set of formatting methods
404    and translation functions commonly used in Gjs and other popular
405    JavaScript implemenations and libraries.
406
407  - Lua:
408    xgettext now supports Lua, using Ľubomír Remák's lua-gettext.
409
410  - Python:
411    xgettext and msgfmt's format string checking now recognize Python
412    format string in braced syntax (PEP 3101).  xgettext now also
413    supports explicit string concatenation with '+' and handles
414    platform dependent line terminators (LF/CR/CRLF) transparently.
415
416  - Tcl:
417    Bug fix in xgettext Unicode escape handling.
418
419  - Vala:
420    xgettext now supports Vala.
421
422* msgattrib now has --previous option to keep previous msgid when
423  making messages fuzzy, similar to msgmerge --previous.
424
425* msgfmt now checks PO file headers more strictly with less
426  false-positives.
427
428* 'gettextize' now checks macro directories specified with
429  AC_CONFIG_MACRO_DIRS in configure.ac.
430
431* Portability:
432  - msginit now does not require GNU sed.
433  - The Makefile rule for generating en@quot and en@boldquot now uses
434    @SED@ variable instead of hard-coded 'sed' command to allow users
435    to supply GNU sed.
436
437* Future backward-incompatibilities:
438  - In future Gettext versions, the files installed by 'gettextize'
439    will require Automake 1.10 or later.  This will improve the
440    compatibility of user projects with newer Automake versions.
441
442Version 0.18.2 - December 2012
443
444* xgettext now understands the block comment syntax of Guile 2.0.
445
446* libgettextpo library:
447  - The initial msgstr of a new message is now "", not NULL.
448  - Bug fixes in the functions po_message_is_range, po_file_check_all,
449    po_message_check_all.
450
451* Installation options:
452  The configure options --with-xz and --with-bzip2 can be used to specify
453  alternate compression methods for the archive used by the 'autopoint'
454  program. These options, together with --with-git, allow to trade
455  dependencies against installed package size. --with-xz has the highest
456  compression rate, followed by --with-git, followed by --with-bzip2.
457
458* Autoconf macros:
459  - The autoconf macros installed by 'gettextize' now work with the
460    forthcoming Automake 1.14 and require Autoconf version 2.60 or
461    newer.
462
463* Portability:
464  - Building on MacOS X 10.7, Cygwin 1.7.10, and newer 64-bit mingw is
465    now supported.
466
467Version 0.18.1 - June 2010
468
469* msggrep: A '$' anchor in a regular expression now also matches the end of
470  the string, even if it does not end in a newline.
471
472* Dependencies:
473  The libraries and programs are now linked with libunistring if this library
474  is already installed.
475
476* Installation options:
477  The configure option --with-cvs is deprecated. The 'autopoint' program will
478  now use the 'git' program by default to compress its archive. If the
479  configure option --without-git is specified, 'autopoint' will not rely on
480  'git', but will instead rely on a locally installed a 3 MB large archive.
481
482Version 0.18 - May 2010
483
484* Runtime behaviour:
485  - On MacOS X and Windows systems, <libintl.h> now extends setlocale() and
486    newlocale() so that their determination of the default locale considers
487    the choice the user has made in the system control panels.
488  - On MacOS X systems, the gettext()/dgettext()/... functions now respect the
489    locale of the current thread, if a thread-specific locale has been set.
490
491* PO file format:
492  There is a new field 'Language' in the header entry.  It denotes the language
493  code (plus optional country code) for the PO file.  This field can be used
494  by automated tools, such as spell checkers.  It is expected to be more
495  reliable than looking at the file name or at the 'Language-Team' field in
496  the header entry.
497  msgmerge, msgcat, msgen have a new option --lang that allows to specify
498  this field.  Additionally, msgmerge fills in this new field by looking at
499  the 'Language-Team' field (if the --lang option is not given).
500
501* xgettext and PO file format:
502  For messages with plural forms, programmers can inform the translators
503  about the range of possible values of the numeric argument, like this:
504    /* xgettext: range: 0..15 */
505  This information 'range: 0..15' is stored in the PO file as a flag attached
506  to the message.  Translators can produce better translations when they know
507  that the numeric argument is small.
508
509* Colorized PO files:
510  msgattrib, msgcomm, msgconv, msgen, msgfilter, msggrep, msginit, msgmerge,
511  msgunfmt, msguniq, xgettext now have options --color and --style, like msgcat
512  has since version 0.17.
513
514* msgmerge is up to 10 times faster when the PO and POT files are large.
515  This speedup was contributed by Ralf Wildenhues.
516
517* msgcmp has a new option -N/--no-fuzzy-matching, like msgmerge has since
518  version 0.12.
519
520* msgfilter now sets environment variables during the invocation of the
521  filter, indicating the msgid and location of the messge being processed.
522
523* xgettext now can extract plural forms from Qt 4 programs. The recommended
524  xgettext command-line options for this case are:
525    --qt --keyword=tr:1,1t --keyword=tr:1,2c,2t --keyword=tr:1,1,2c,3t
526
527* xgettext --language=GCC-source now recognizes also the format strings
528  used in the Fortran front-end of the GCC compiler, and marks them as
529  'gfc-internal-format'.
530
531* autopoint can now be used to update several PO directories all together.
532
533* PO mode changes:
534  - PO files with plural entries are now correctly handled.
535  - Editing a message with previous msgid (in comments) removes these
536    comments.  Contributed by Noritada Kobayashi.
537
538* The po/Makevars file has a new field MSGMERGE_OPTIONS, that can be used
539  to adjust msgmerge's operation.
540
541* The use of the macro AM_GNU_GETTEXT without 'external' argument and the
542  --intl option of the gettextize program are deprecated and will be removed
543  in the next release. Instead of including the intl sources in your package,
544  we suggest making the libintl library an (optional) prerequisite of your
545  package.
546
547* Updated the meaning of 'gcc-internal-format' to match GCC 4.3.
548
549* Installation options:
550  The configure options --without-cvs and --with-git can be used to specify
551  whether 'autopoint' will use the 'cvs' program, or the 'git' program, or
552  none at all. These options allow to trade dependencies against installed
553  package size: If --without-cvs is specified and --with-git is not specified,
554  'autopoint' will not rely on 'cvs' or 'git', but will instead rely on a
555  locally installed a 3 MB large archive.
556
557* Portability:
558  - The msgfilter program now also works on native Woe32 platforms.
559  - Compiled C# message catalogs now also work with 'mono' versions from 2009
560    or newer.
561
562Version 0.17 - November 2007
563
564* License:
565  The gettext related programs and tools are now licensed under the GPL
566  version 3, instead of the GPL version 2. The libintl library continues
567  to be licensed under LGPL.
568
569* PO file format:
570  The Project-Id-Version field in the header entry may now already be filled
571  in the POT file. In this case, the translators don't need to fill it in.
572  xgettext has new options --package-name and --package-version that allow
573  to specify the package name and version from a Makefile.
574
575* Colorized PO files:
576  The msgcat program has new options --color and --style that produce a
577  colorized PO file output, where keywords, strings, comments, or format
578  directives can be highlighted.  See the documentation section
579  "Highlighting parts of PO files" for more info.
580
581* gettextize now has a --po-dir option that allows several PO directories to
582  be updated all together.
583
584* Programming languages support:
585  - Contexts (msgctxt) are now also supported for Java and C#.
586  - C# with Qt: The support for Qt format strings has been updated for Qt 4.
587  - C++ with KDE:
588    xgettext has a new option --kde that triggers the recognition and marking
589    of KDE 4 format strings.
590
591* Autoconf macros:
592  - A new macro AM_XGETTEXT_OPTION can be used as an alternative to modifying
593    po/Makevars.
594
595* libgettextpo library:
596  - New functions are available for querying the list of supported format
597    types.
598  - The functions po_message_comments and po_message_extracted_comments
599    return a multiline string where each line no longer starts with a redundant
600    space. The leading space in every comment line is now stripped while
601    reading the PO file.
602  - Conversely, when you pass a multiline string to the function
603    po_message_set_comments or po_message_set_extracted_comments, you normally
604    don't pass a space at the beginning of each line, because such spaces are
605    no longer trimmed during output.
606
607* Documentation:
608  - The "Users" chapter has been completely rewritten.
609  - New section "Highlighting parts of PO files".
610  - A complete example showing the use of GNU gettext in Java with the Qt/Jambi
611    GUI toolkit has been added.
612
613Version 0.16.1 - November 2006
614
615* Bug fix in the gettext.m4 autoconf macros.
616
617Version 0.16 - October 2006
618
619* Interoperability with automake-1.10.
620
621* msgmerge has a new option --previous that has the effect of saving the
622  previous msgid of message when making them fuzzy. These previous msgids are
623  stored in the resulting PO file, using a pseudo-comment syntax like this:
624
625     #, fuzzy
626     #| msgid "too many arguments"
627     msgid "too few arguments"
628     msgstr "trop d'arguments"
629
630  The translator then only needs to compare the previous and the current
631  msgid ("too many arguments" and "too few arguments"), and infer which
632  parts of the translation she needs to change.
633
634  msgattrib has a new option --clear-previous that removes these #| lines.
635
636* msgmerge is faster now on CPUs with multiple execution units, if compiled
637  with GCC 4.2 or newer.
638
639* msgcmp now ignores fuzzy and untranslated messages in the PO file.
640  Previously it considered fuzzy and untranslated messages the same way as
641  translated messages, which was hardly useful.  The previous behaviour can
642  be obtained through the options --use-fuzzy --use-untranslated.
643
644* gettextize, when invoked without --intl option, now installs only the .m4
645  files that are needed: gettext.m4, iconv.m4, lib-ld.m4, lib-link.m4,
646  lib-prefix.m4, nls.m4, po.m4, progtest.m4.
647
648* gettextize no longer creates symbolic links by default; it makes file copies
649  instead.  The option --copy is removed.  You can get back the flawed
650  symlinking behaviour by specifying the --symlink option.
651
652* Autoconf macros:
653  - The gettext autoconf macros now require autoconf 2.52 or newer and
654    GNU m4 1.4.5 or newer.
655  - A new autoconf macro AM_GNU_GETTEXT_INTL_SUBDIR is added. It allows to
656    specify the presence of an intl/ subdirectory outside the AM_GNU_GETTEXT
657    invocation.
658  - A new autoconf macro AM_GNU_GETTEXT_NEED is added. It allows to specify
659    the requirements relating to the GNU gettext implementation outside the
660    AM_GNU_GETTEXT invocation.
661
662* The libgettextpo library no longer exports symbols that could clash with
663  symbols of the application that uses it.
664
665* Vastly improved French translations. Thanks to Christophe Combelles.
666
667Version 0.15 - July 2006
668
669* GUI program support:
670  - PO files can now contain messages constrained to a certain context.
671    Most often such a context is a menu, dialog or panel identification.
672    The syntax in the PO file is
673      msgctxt "context"
674      msgid "original"
675      msgstr "translation"
676  - The xgettext program can be told through the --keyword flag which
677    function/macro argument has the role of a context.  It also supports
678    the GNOME glib convention to specify the context and original string
679    in the same string literal: "context|original".
680  - The (non-public) include file gettext.h defines macros pgettext, dpgettext
681    etc. that take a context argument.
682  For more information, see the node "Contexts" in the manual.
683
684* msgfmt's format string checking is now stricter in the presence of plural
685  forms.  For example, in German, with  nplurals=2  and  plural=(n != 1),
686  the translation
687
688     #, c-format
689     msgid "%d fatal error"
690     msgid_plural "%d fatal errors"
691     msgstr[0] "ein fataler Fehler"
692     msgstr[1] "fatale Fehler"
693
694  was earlier considered valid and now gives an error when "msgfmt --check"
695  is used:
696    "number of format specifications in 'msgid' and 'msgstr[1]' does not match"
697
698* msggrep has a new option -v/--invert-match that acts like grep's -v option.
699
700* msggrep has a new option -X/--extracted-comment that allows to search for a
701  pattern in the extracted comments.
702
703* xgettext's --keyword option now allows to specify an extracted comment on the
704  command line, rather than in program's source code.
705
706* msgmerge is much faster now, when using a large compendium.
707
708* A new program recode-sr-latin is provided, that converts Serbian text from
709  the Cyrillic script to the Latin script.
710  The command "msgfilter recode-sr-latin" can be used to convert a Serbian
711  Cyrillic PO file (sr.po) to a Serbian Latin PO file (sr@latin.po).
712
713* Programming languages support:
714
715  - C++ with Boost:
716    xgettext has a new option --boost that triggers the recognition and marking
717    of boost::format strings.
718
719  - Python:
720    xgettext now recognizes the source encoding from a "coding:" comment
721    among the first two lines.  The default encoding is now ASCII, no longer
722    ISO-8859-1.
723
724* libgettextpo library:
725  - The error handler type passed to po_file_read(), po_file_write(),
726    po_message_check_format() has changed.
727    This is an incompatible change: Programs using the library *must* update
728    their code.
729    Binary compatibility is guaranteed, however.
730
731* The 'mkinstalldirs' shell script is no longer needed and no longer installed
732  by gettextize.
733
734* Portability:
735  - Building on mingw is now supported.
736  - Building shared libraries (--enable-shared) on Cygwin and mingw is now
737    supported.
738
739* Interoperability with expat version 2.0.0.
740
741* Documentation:
742  A complete example showing the use of GNU gettext with the wxWidgets GUI
743  toolkit has been added.
744
745* The gettext autoconf macros now assume 'aclocal' from automake 1.8 or newer.
746
747Version 0.14.6 - June 2006
748
749* Updated the meaning of 'gcc-internal-format' to match GCC 4.1.
750
751Version 0.14.5 - May 2005
752
753* Updated the meaning of 'gcc-internal-format' to match GCC 4.0.
754
755Version 0.14.4 - April 2005
756
757* The gettext autoconf macros will now work with the forthcoming g++ 4.0.
758* Fix improved detection of the locale on MacOS X.
759
760Version 0.14.3 - March 2005
761
762* Usability improvements in gettextize and autopoint.
763
764* Programming languages support:
765  - Scheme:
766    Use the GNU guile definition of format strings.
767
768Version 0.14.2 - February 2005
769
770* Improved detection of the locale on MacOS X.
771
772* The gettext autoconf macros now require autoconf 2.50 or newer.
773
774* Programming languages support:
775
776  - Scheme:
777    xgettext now also supports Scheme. Best used with guile 1.7 or newer.
778
779* msggrep is much faster now.
780
781* libgettextpo library:
782  - New functions for constructing PO files in memory and writing them to
783    files.
784  - The error handling is now customizable.
785
786* Documentation:
787
788  - New tutorial document, written by Gora Mohanty.
789  - New FAQ document.
790  - New documentation sections: Scheme, Release Management.
791
792* Bug fixes for Turkish and Estonian locales.
793
794* Security fixes.
795
796Version 0.14 - January 2004
797
798* Programming languages support:
799
800  - C#:
801
802    xgettext now also supports C#.
803
804    New library: GNU.Gettext.dll contains the runtime for using GNU gettext
805    message catalogs in C#.
806
807    msgfmt can create (and msgunfmt can dump) message catalogs for C#.
808
809* Special feature for Farsi (Persian): Translators can insert an 'I' flag
810  into numeric format directives in format strings. Its effect is that, on
811  glibc systems, the number is generated with the locale dependent set of
812  special digits instead of the usual ASCII digits.
813
814* Documentation:
815
816  - New documentation section: C#.
817  - Complete examples illustrating the use of gettext in C# (in text mode and
818    in Forms applications) have been added.
819
820  - New documentation section: Preparing Library Sources.
821
822* Special advice for Norwegian users: The language code for Norwegian
823  bokmål changed from 'no' to 'nb' recently (in 2003). During the transition
824  period, while some message catalogs for this language are installed under
825  'nb' and some older ones under 'no', it's recommended for Norwegian users to
826  set the LANGUAGE environment variable to 'nb:no' so that both newer and
827  older translations are used.
828
829Version 0.13.1 - December 2003
830
831* Bug fixes in the testsuite and in the examples.
832
833Version 0.13 - November 2003
834
835* Programming languages support:
836
837  - Shell:
838
839    xgettext now also supports shell scripts. It recognizes invocations of
840    the programs 'gettext', 'ngettext', the functions 'eval_gettext',
841    'eval_ngettext', as well as the deprecated GNU bash builtin syntax $"...".
842    New function library:
843      gettext.sh - shell functions for internationalized shell scripts.
844    New program:
845      envsubst - substitutes environment variables in shell format strings.
846
847  - Perl:
848
849    xgettext now also supports Perl.
850
851  - PHP:
852
853    "xgettext --language=PHP" now supports the plural handling functions
854    ngettext, dngettext, dcngettext (introduced in PHP 4.2.0).
855
856  - ObjectiveC:
857
858    "xgettext --language=ObjectiveC" now supports the @"..." string syntax,
859    the NSLocalizedString function and the ObjectiveC specific format strings.
860
861    All the tools that manipulate PO files can work with .strings files
862    as well, if given the --stringtable-input and/or --stringtable-output
863    option. To create a .strings file from a PO or POT file, use
864    "msgcat --stringtable-output". To create a PO or POT file from a
865    .strings file, use "xgettext".
866
867  - GCC-source:
868
869    xgettext's --language option now supports the value "GCC-source". This
870    is like --language=C, except that in this mode, xgettext recognizes the
871    special kind of format strings used in the GCC sources and marks them
872    as 'gcc-internal-format'.
873
874  - C++ with Qt:
875
876    xgettext has a new option --qt that triggers the recognition and marking
877    of Qt format strings.
878
879    msgfmt has a new option --qt that generates binary message catalogs in
880    Qt's .qm format.
881
882* Data formats support:
883
884  - Glade:
885    xgettext now also supports Glade version 2.
886
887* xgettext has a more reliable detection of format strings.  It now
888  recognizes format strings depending on their position, for example as the
889  second argument of fprintf(), regardless whether the literal string contains
890  format directives.  This behaviour can be customized through the --flag
891  option.
892
893* libgettextpo library:
894
895  - New functions for testing the obsolete/fuzzy/*-format flags of a message.
896  - New convenience functions for extracting and analyzing the header entry.
897
898* Portability:
899
900  - C format strings with positions, as they arise when a translator needs to
901    reorder a sentence, are now supported on all platforms. On those few
902    platforms (NetBSD and Woe32) for which the native printf()/fprintf()/...
903    functions don't support such format strings, replacements are provided
904    through <libintl.h>.
905
906  - A new configuration option --disable-libasprintf allows to build all of
907    gettext except libasprintf; this is necessary on platforms for which
908    libtool cannot create shared libraries with C++ code.
909
910* Documentation:
911
912  - Complete examples illustrating the use of gettext, including program
913    sources, Makefile and autoconf infrastructure, have been added. They
914    cover the following programming languages:
915      C           (text mode, GNOME)
916      C++         (text mode, Qt, KDE, GNOME)
917      ObjectiveC  (text mode, GNUstep, GNOME)
918      Shell       (text mode)
919      Python      (text mode)
920      Lisp        (text mode)
921      librep      (text mode)
922      Smalltalk   (text mode)
923      Java        (text mode, AWT, Swing)
924      awk         (text mode)
925      Pascal      (text mode)
926      YCP         (libyui)
927      Tcl         (text mode, Tk)
928      Perl        (text mode)
929      PHP         (text mode)
930
931Version 0.12.1 - May 2003
932
933* Bug fixes.
934
935Version 0.12 - May 2003
936
937* The gettext package is now separated into two subpackages:
938  - gettext-runtime: Runtime libraries and programs.
939  - gettext-tools: Tools and documentation for developers and translators.
940  The 'gettext-runtime' package is very small and should be installed on every
941  system that has users who desire to use internationalization. Whereas the
942  'gettext-tools' package is only for developers and translators.
943
944* The po/Makevars file has a new field MSGID_BUGS_ADDRESS, which program
945  maintainers should fill in, to help feedback from the translators to the
946  program maintainers.
947  xgettext, accordingly, has a new option --msgid-bugs-address.
948
949* Programming languages support:
950
951  - C++
952
953    A new C++ class, called gnu::autosprintf, makes it possible to use
954    C format strings in C++. This is needed for proper internationalization
955    of C++ programs.
956
957  - Java
958
959    All the tools that manipulate PO files can work with .properties files
960    as well, if given the --properties-input and/or --properties-output
961    option. To create a .properties file from a PO or POT file, use
962    "msgcat --properties-output".
963
964  - Smalltalk
965
966    xgettext now also supports Smalltalk.
967
968  - PHP
969
970    xgettext now also supports PHP.
971
972  - Python
973
974    "xgettext --language=Python" now supports the plural handling functions
975    ngettext, dngettext, ungettext (introduced in Python 2.3).
976
977  - A new autoconf macro AM_PO_SUBDIRS is added. It is like AM_GNU_GETTEXT,
978    for packages written in other languages than C/C++.
979
980* A new library libgettextpo, with public header file "gettext-po.h",
981  provides functions for reading PO files into memory. It is useful for
982  applying PO files to areas not covered by the GNU gettext programs.
983  New documentation section:
984  - Writing your own programs that process PO files.
985
986* New documentation sections:
987  - Prioritizing messages: How to determine which messages to translate first.
988  - Names: Marking Proper Names for Translation.
989
990* xgettext now supports msgid strings in other encodings than ASCII.
991  xgettext has a new option --from-code that specifies the encoding of the
992  source files. The resulting POT files are UTF-8 encoded.
993
994* Tools for translators:
995
996  - msgmerge has a new option -N/--no-fuzzy-matching that inhibits the fuzzy
997    search for untranslated messages.
998
999  - msgattrib has new options --only-file and --ignore-file that cause the
1000    specified attribute manipulation to apply to selected messages only.
1001
1002* Compatibility with automake-1.7.
1003
1004* In documentation section po/LINGUAS:
1005  - Document the optional "languages" en@quot and en@boldquot.
1006
1007* New configuration option --enable-relocatable.  See the INSTALL file for
1008  details.
1009
1010Version 0.11.5 - August 2002
1011
1012* Bug fixes in the gettext.m4 autoconf macros.
1013
1014Version 0.11.4 - July 2002
1015
1016* The tools now know about the ISO C 99 <inttypes.h> format string directive
1017  macros PRId64, PRIxMAX etc.
1018
1019Version 0.11.3 - July 2002
1020
1021* New program:
1022    autopoint - copies standard gettext infrastructure
1023
1024* The documentation makes it clear that 'gettextize' is a wizard and
1025  migration tool.
1026
1027* gettextize has a new option --dry-run.
1028
1029* Improved portability to Solaris, OSF/1 and Linux/libc5.
1030
1031* Improved interoperability with GCC 3.1.
1032
1033* New documentation sections:
1034  - CVS Issues
1035  - mkinstalldirs
1036  - config.h.in
1037
1038Version 0.11.2 - April 2002
1039
1040* Bug fixes in the gettext.m4 autoconf macros.
1041
1042* New documentation section:
1043  - Preparing Translatable Strings
1044
1045Version 0.11.1 - March 2002
1046
1047* xgettext now also supports Python, Tcl, Awk and Glade.
1048
1049* msgfmt can create (and msgunfmt can dump) Tcl message catalogs.
1050
1051* msggrep has a new option -C that allows to search for strings in translator
1052  comments.
1053
1054* Bug fixes in the gettext.m4 autoconf macros.
1055
1056Version 0.11 - January 2002
1057
1058* New programs:
1059    msgattrib - attribute matching and manipulation on message catalog,
1060    msgcat - combines several message catalogs,
1061    msgconv - character set conversion for message catalog,
1062    msgen - create English message catalog,
1063    msgexec - process translations of message catalog,
1064    msgfilter - edit translations of message catalog,
1065    msggrep - pattern matching on message catalog,
1066    msginit - initialize a message catalog,
1067    msguniq - unify duplicate translations in message catalog.
1068
1069* msgfmt can create (and msgunfmt can dump) Java ResourceBundles.
1070
1071* xgettext now also supports Lisp, Emacs Lisp, librep, Java, ObjectPascal,
1072  YCP.
1073
1074* The tools now know about format strings in languages other than C.
1075  They recognize new message flags named lisp-format, elisp-format,
1076  librep-format, smalltalk-format, java-format, python-format, ycp-format.
1077  When such a flag is present, the msgfmt program verifies the consistency
1078  of the translated and the untranslated format string.
1079
1080* The msgfmt command line options have changed.  Option -c now also checks
1081  the header entry, a check which was previously activated through -v.
1082  Option -C corresponds to the compatibility checks previously activated
1083  through -v -v.  Option -v now only increases verbosity and doesn't
1084  influence whether msgfmt succeeds or fails.  A new option
1085  --check-accelerators is useful for GUI menu item translations.
1086
1087* msgcomm now writes its results to standard output by default. The options
1088  -d/--default-domain and -p/--output-dir have been removed.
1089
1090* Manual pages for all the programs have been added.
1091
1092* PO mode changes:
1093  - New key bindings for 'po-previous-fuzzy-entry',
1094    'po-previous-obsolete-entry', 'po-previous-translated-entry',
1095    'po-previous-untranslated', 'po-undo', 'po-other-window', and
1096    'po-select-auxiliary'.
1097  - Support for merging two message catalogs, based on msgcat and ediff.
1098
1099* A fuzzy attribute of the header entry of a message catalog is now ignored
1100  by the tools, i.e. it is used even if marked fuzzy.
1101
1102* gettextize has a new option --intl which determines whether a copy of the
1103  intl directory is included in the package.
1104
1105* The Makefile variable @INTLLIBS@ is deprecated. It is replaced with
1106  @LIBINTL@ (in projects without libtool) or @LTLIBINTL@ (in projects with
1107  libtool).
1108
1109* New packaging hints for binary package distributors. See file PACKAGING.
1110
1111* New documentation sections:
1112  - Manipulating
1113  - po/LINGUAS
1114  - po/Makevars
1115  - lib/gettext.h
1116  - autoconf macros
1117  - Other Programming Languages
1118
1119Version 0.10.40 - September 2001
1120
1121* The libintl library is now covered by the GNU LGPL.  The tools are still
1122  covered by the GNU GPL.
1123
1124Version 0.10.39 - July 2001
1125
1126* This is a bug-fix release.
1127
1128* Now uses libtool-1.4.  Linking with the libintl shared library is easier.
1129
1130* The autoconf macros now work with both autoconf-2.13 and autoconf-2.50.
1131
1132Version 0.10.38 - May 2001
1133
1134* This is a bug-fix release.
1135
1136* Manual pages for the GNU libintl library functions have been added.
1137
1138Version 0.10.37 - April 2001
1139
1140This is a bug-fix release.
1141
1142Version 0.10.36 - March 2001, by Ulrich Drepper and Bruno Haible
1143
1144* General plural handling. New functions ngettext, dngettext, dcngettext.
1145
1146* Locales which differ only in the character encoding, for example ja_JP and
1147  ja_JP.UTF-8, can now share the same message catalogs. gettext converts
1148  the messages to the appropriate character encoding on the fly.
1149
1150* The tools now correctly process PO files in CJK encodings.
1151
1152* Support for non-GNU gettext has been dropped.  Previously, on Solaris, the
1153  system's gettext was used (unless --with-included-gettext was specified),
1154  which led to problems with PO files that were not 100% translated.
1155
1156* Support for the catgets wrapper has been dropped.  This means that gettext
1157  now always supports the LANGUAGE environment variable, message inheritance,
1158  automatic charset conversion etc.
1159
1160* Support for the old Linux specific .msg catalog format has been dropped.
1161
1162* When the included GNU libintl is installed (i.e. on GNU platforms, when
1163  the configure option --with-included-gettext is given, or on non-GNU
1164  platforms, when the configure option --disable-nls is not given), it is
1165  also installed as a shared library, unless the configure option
1166  --disable-shared is given.
1167
1168* PO mode changes:
1169
1170** PO mode does not use recursive edit anymore, many edits may be worked on
1171   simultaneously in a single PO file.
1172
1173** PO mode may handle many translation files at once while correlating related
1174   entries, for helping multilingual or cultured translators.
1175
1176** On recent Emacses, PO mode automatically use proper fonts when available.
1177
1178** PO mode supports marking of C++ sources.
1179
1180** highlights original message while editing the translation
1181
1182** PO mode has commands to mail messages to teams or to the translation
1183   coordinator, with automatic inclusion of the current PO file.
1184
1185Version 0.10.35 - April 1998, by Ulrich Drepper
1186
1187* by default the emulation of gettext using the catgets() functions of
1188  the C library is not selected anymore.  GNU gettext has so many nice
1189  extensions that this became unreasonable.  Using --with-catgets the
1190  emulation still can be requested.
1191
1192* extend xgettext program to handle other file formats other than C/C++.
1193  For now it also handles PO file.  Using this feature one can concatenate
1194  arbitrary PO files.
1195
1196* Tcl module with gettext interface
1197
1198* Korean translation by Bang Jun Young
1199
1200* xgettext writes to stdout when default domain name is set to -
1201
1202* codeset name normalization
1203
1204* msgmerge program now has all features tupdate has (and more).
1205  tupdate itself will be removed soon
1206
1207* po/Makefile.in.in now uses msgmerge instead of tupdate
1208
1209* escape notation in .po files are only used when explicitly selected
1210
1211* changed interface of msgunfmt to conform to GNU coding standard
1212
1213* msgmerge now knows how to handle obsolete entries.  If a formerly obsolete
1214  entry is used again msgmerge will find it
1215
1216* better implementation of comment extraction in xgettext.
1217
1218* better C format string implementation.  The xgettext will classify
1219  strings as being a format string, or not, in the .po file.  The
1220  programmer can override the decision explicitly for each string
1221  by specifying 'xgettext:c-format' and 'xgettext:no-c-format'
1222  respectively in a C comment preceding the string.
1223
1224* msgmerge program now always produces output.  Fuzzy or non-existing
1225  translations are no reason for holding back the result.
1226
1227* reasonable header entry format implemented
1228
1229* Norwegian translation by Karl Anders �gard
1230
1231* Configure command line option '--with-gnu-gettext' is renamed to
1232  '--with-included-gettext'
1233
1234* gettextize now can determine whether the aclocal.m4 of the project
1235  is sufficient
1236
1237* use automake for Makefile.in generation
1238
1239* by default now only c-format is emitted in xgettext.  If using the new
1240  --debug option one can enable printing possible-c-format to see who
1241  decided about the string: xgettext or the programmer
1242
1243* the installed libintl.h file no longer depends on HAVE_LOCALE_H being
1244  defined.  After running configure we know whether this file exists.
1245
1246* wrapping of lines in PO file output finally enabled.
1247  A new special comment no-wrap prevents wrapping.
1248
1249* add --statistics option to msgfmt to get information about number of
1250  translated, untranslated, and fuzzy messages
1251
1252* change behaviour of --verbose option to msgfmt.  This no longer
1253  causes the check on the messages to be performed.  The check for leading
1254  and trailing \n is always performed and the check of the format specifiers
1255  is performed when --check is given.
1256
1257* shared library support based On Gord Matzigkeit's libtool package
1258
1259* msgcomm program by Peter Miller to extract messages shared by input
1260  files
1261
1262* many more translations.
1263
1264Version 0.10 - December 1995, by Ulrich Drepper
1265
1266* implement --shell-script option for gettext program
1267
1268* implement object-oriented, lazy message handling :-)
1269  Consult the manual for more/any information
1270
1271* implement locale name aliasing, similar to the one used
1272  in the X Window System
1273
1274* support for GNU gettext sources in central place to support
1275  use in development environments of other projects
1276
1277* implement CEN syntax for environment variable values
1278
1279* msgcmp program to find matches in two .po files
1280
1281* programs now have exit status != 0 if errors occurred
1282
1283* libintl.a is now selfcontained and can be used without context in
1284  other projects (even on systems missing alloca)
1285
1286* gettextize now automatically runs config.status
1287
1288* swedish message catalog
1289
1290* new options for xgettext: -D/--directory to change in specified directory
1291  before processing the input files and -f/--files-from to specify file from
1292  which the names of the input files are read.
1293  The later option in necessary for large projects such as GNU C Library.
1294
1295* new programs msgmerge and msgunfmt by Peter Miller.  The code of the other
1296  programs is now also much cleaner.
1297
1298Version 0.9 - August 1995, by Ulrich Drepper
1299
1300* again many improvements on the manual
1301
1302* norwegian message catalog
1303
1304* compilation now works with --disable-nls
1305
1306* better checks
1307
1308Version 0.8 - July 1995, by Ulrich Drepper
1309
1310* much improved manual (although still far from being complete)
1311
1312* improved PO mode; it now can prepare C sources for use with gettext
1313  by marking translatable strings
1314
1315* better support for sparse System V systems
1316
1317* check goal (kind of)
1318
1319* more input tests and warnings
1320
1321* better support for integration in other packages
1322
1323* many bugs fixed
1324
1325Version 0.7 - June 1995, by Ulrich Drepper
1326
1327* New GNU package providing functionality to internationalize and
1328localize other programs.
1329
1330* Implementation of the Uniforum(*) proposal for internationalization
1331on top of X/Open(*) style catgets functions.
1332
1333* Complete implementation of the Uniforum functions for system
1334lacking either of them or those who which to have a different
1335implementation with many advantages.
1336
1337* Implementation of the three tools for message catalog handling
1338described in the Uniforum.
1339
1340* Emacs po-mode for handling portable message object files which are
1341the basis of the work of the package.
1342
1343
1344(*) Some history:  The POSIX working groups have so far been unable to
1345agree on one set of message catalog handling functions for the C Library.
1346For now there are competing proposals, one by the Uniforum group, led by
1347Sun, and the other by X/Open.  Although the latter is surely implemented
1348on more systems, it is not perceived as the clear leader.
1349