@c This file is part of the GNU gettext manual.
@c Copyright (C) 1995-2019 Free Software Foundation, Inc.
@c See the file gettext.texi for copying conditions.

@pindex msgcat
@cindex @code{msgcat} program, usage
@example
msgcat [@var{option}] [@var{inputfile}]...
@end example

@cindex concatenate PO files
@cindex merge PO files
The @code{msgcat} program concatenates and merges the specified PO files.
It finds messages which are common to two or more of the specified PO files.
By using the @code{--more-than} option, greater commonality may be requested
before messages are printed.  Conversely, the @code{--less-than} option may be
used to specify less commonality before messages are printed (i.e.@:
@samp{--less-than=2} will only print the unique messages).  Translations,
comments, extracted comments, and file positions will be cumulated, except that
if @code{--use-first} is specified, they will be taken from the first PO file
to define them.

To concatenate POT files, better use @code{xgettext}, not @code{msgcat},
because @code{msgcat} would choke on the undefined charsets in the specified
POT files.

@subsection Input file location

@table @samp
@item @var{inputfile} @dots{}
Input files.

@item -f @var{file}
@itemx --files-from=@var{file}
@opindex -f@r{, @code{msgcat} option}
@opindex --files-from@r{, @code{msgcat} option}
Read the names of the input files from @var{file} instead of getting
them from the command line.

@item -D @var{directory}
@itemx --directory=@var{directory}
@opindex -D@r{, @code{msgcat} option}
@opindex --directory@r{, @code{msgcat} option}
Add @var{directory} to the list of directories.  Source files are
searched relative to this list of directories.  The resulting @file{.po}
file will be written relative to the current directory, though.

@end table

If @var{inputfile} is @samp{-}, standard input is read.

@subsection Output file location

@table @samp
@item -o @var{file}
@itemx --output-file=@var{file}
@opindex -o@r{, @code{msgcat} option}
@opindex --output-file@r{, @code{msgcat} option}
Write output to specified file.

@end table

@cindex standard output, and @code{msgcat}
The results are written to standard output if no output file is specified
or if it is @samp{-}.

@subsection Message selection

@table @samp
@item -< @var{number}
@itemx --less-than=@var{number}
@opindex -<@r{, @code{msgcat} option}
@opindex --less-than@r{, @code{msgcat} option}
Print messages with less than @var{number} definitions, defaults to infinite
if not set.

@item -> @var{number}
@itemx --more-than=@var{number}
@opindex ->@r{, @code{msgcat} option}
@opindex --more-than@r{, @code{msgcat} option}
Print messages with more than @var{number} definitions, defaults to 0 if not
set.

@item -u
@itemx --unique
@opindex -u@r{, @code{msgcat} option}
@opindex --unique@r{, @code{msgcat} option}
Shorthand for @samp{--less-than=2}.  Requests that only unique messages be
printed.

@end table

@subsection Input file syntax

@table @samp
@item -P
@itemx --properties-input
@opindex -P@r{, @code{msgcat} option}
@opindex --properties-input@r{, @code{msgcat} option}
Assume the input files are Java ResourceBundles in Java @code{.properties}
syntax, not in PO file syntax.

@item --stringtable-input
@opindex --stringtable-input@r{, @code{msgcat} option}
Assume the input files are NeXTstep/GNUstep localized resource files in
@code{.strings} syntax, not in PO file syntax.

@end table

@subsection Output details

@c --no-escape and --escape omitted on purpose.  They are not useful.

@table @samp
@item -t
@itemx --to-code=@var{name}
@opindex -t@r{, @code{msgcat} option}
@opindex --to-code@r{, @code{msgcat} option}
Specify encoding for output.

@item --use-first
@opindex --use-first@r{, @code{msgcat} option}
Use first available translation for each message.  Don't merge several
translations into one.

@item --lang=@var{catalogname}
@opindex --lang@r{, @code{msgcat} option}
Specify the @samp{Language} field to be used in the header entry.  See
@ref{Header Entry} for the meaning of this field.  Note: The
@samp{Language-Team} and @samp{Plural-Forms} fields are left unchanged.

@item --color
@itemx --color=@var{when}
@opindex --color@r{, @code{msgcat} option}
Specify whether or when to use colors and other text attributes.
See @ref{The --color option} for details.

@item --style=@var{style_file}
@opindex --style@r{, @code{msgcat} option}
Specify the CSS style rule file to use for @code{--color}.
See @ref{The --style option} for details.

@item --force-po
@opindex --force-po@r{, @code{msgcat} option}
Always write an output file even if it contains no message.

@item -i
@itemx --indent
@opindex -i@r{, @code{msgcat} option}
@opindex --indent@r{, @code{msgcat} option}
Write the .po file using indented style.

@item --no-location
@opindex --no-location@r{, @code{msgcat} option}
Do not write @samp{#: @var{filename}:@var{line}} lines.

@item -n
@itemx --add-location=@var{type}
@opindex -n@r{, @code{msgcat} option}
@opindex --add-location@r{, @code{msgcat} option}
Generate @samp{#: @var{filename}:@var{line}} lines (default).

The optional @var{type} can be either @samp{full}, @samp{file}, or
@samp{never}.  If it is not given or @samp{full}, it generates the
lines with both file name and line number.  If it is @samp{file}, the
line number part is omitted.  If it is @samp{never}, it completely
suppresses the lines (same as @code{--no-location}).

@item --strict
@opindex --strict@r{, @code{msgcat} option}
Write out a strict Uniforum conforming PO file.  Note that this
Uniforum format should be avoided because it doesn't support the
GNU extensions.

@item -p
@itemx --properties-output
@opindex -p@r{, @code{msgcat} option}
@opindex --properties-output@r{, @code{msgcat} option}
Write out a Java ResourceBundle in Java @code{.properties} syntax.  Note
that this file format doesn't support plural forms and silently drops
obsolete messages.

@item --stringtable-output
@opindex --stringtable-output@r{, @code{msgcat} option}
Write out a NeXTstep/GNUstep localized resource file in @code{.strings} syntax.
Note that this file format doesn't support plural forms.

@item -w @var{number}
@itemx --width=@var{number}
@opindex -w@r{, @code{msgcat} option}
@opindex --width@r{, @code{msgcat} option}
Set the output page width.  Long strings in the output files will be
split across multiple lines in order to ensure that each line's width
(= number of screen columns) is less or equal to the given @var{number}.

@item --no-wrap
@opindex --no-wrap@r{, @code{msgcat} option}
Do not break long message lines.  Message lines whose width exceeds the
output page width will not be split into several lines.  Only file reference
lines which are wider than the output page width will be split.

@item -s
@itemx --sort-output
@opindex -s@r{, @code{msgcat} option}
@opindex --sort-output@r{, @code{msgcat} option}
@cindex sorting @code{msgcat} output
Generate sorted output.  Note that using this option makes it much harder
for the translator to understand each message's context.

@item -F
@itemx --sort-by-file
@opindex -F@r{, @code{msgcat} option}
@opindex --sort-by-file@r{, @code{msgcat} option}
Sort output by file location.

@end table

@subsection Informative output

@table @samp
@item -h
@itemx --help
@opindex -h@r{, @code{msgcat} option}
@opindex --help@r{, @code{msgcat} option}
Display this help and exit.

@item -V
@itemx --version
@opindex -V@r{, @code{msgcat} option}
@opindex --version@r{, @code{msgcat} option}
Output version information and exit.

@end table
