@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 msgfmt
@cindex @code{msgfmt} program, usage
@example
msgfmt [@var{option}] @var{filename}.po @dots{}
@end example

@cindex generate binary message catalog from PO file
The @code{msgfmt} programs generates a binary message catalog from a textual
translation description.

@subsection Input file location

@table @samp
@item @var{filename}.po @dots{}

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

@end table

If an input file is @samp{-}, standard input is read.

@subsection Operation mode

@table @samp
@item -j
@itemx --java
@opindex -j@r{, @code{msgfmt} option}
@opindex --java@r{, @code{msgfmt} option}
@cindex Java mode, and @code{msgfmt} program
Java mode: generate a Java @code{ResourceBundle} class.

@item --java2
@opindex --java2@r{, @code{msgfmt} option}
Like --java, and assume Java2 (JDK 1.2 or higher).

@item --csharp
@opindex --csharp@r{, @code{msgfmt} option}
@cindex C# mode, and @code{msgfmt} program
C# mode: generate a .NET .dll file containing a subclass of
@code{GettextResourceSet}.

@item --csharp-resources
@opindex --csharp-resources@r{, @code{msgfmt} option}
@cindex C# resources mode, and @code{msgfmt} program
C# resources mode: generate a .NET @file{.resources} file.

@item --tcl
@opindex --tcl@r{, @code{msgfmt} option}
@cindex Tcl mode, and @code{msgfmt} program
Tcl mode: generate a tcl/msgcat @file{.msg} file.

@item --qt
@opindex --qt@r{, @code{msgfmt} option}
@cindex Qt mode, and @code{msgfmt} program
Qt mode: generate a Qt @file{.qm} file.

@item --desktop
@opindex --desktop@r{, @code{msgfmt} option}
@cindex Desktop Entry mode, and @code{msgfmt} program
Desktop Entry mode: generate a @file{.desktop} file.

@item --xml
@opindex --xml@r{, @code{msgfmt} option}
@cindex XML mode, and @code{msgfmt} program
XML mode: generate an XML file.

@end table

@subsection Output file location

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

@item --strict
@opindex --strict@r{, @code{msgfmt} option}
Direct the program to work strictly following the Uniforum/Sun
implementation.  Currently this only affects the naming of the output
file.  If this option is not given the name of the output file is the
same as the domain name.  If the strict Uniforum mode is enabled the
suffix @file{.mo} is added to the file name if it is not already
present.

We find this behaviour of Sun's implementation rather silly and so by
default this mode is @emph{not} selected.

@end table

If the output @var{file} is @samp{-}, output is written to standard output.

@subsection Output file location in Java mode

@table @samp
@item -r @var{resource}
@itemx --resource=@var{resource}
@opindex -r@r{, @code{msgfmt} option}
@opindex --resource@r{, @code{msgfmt} option}
Specify the resource name.

@item -l @var{locale}
@itemx --locale=@var{locale}
@opindex -l@r{, @code{msgfmt} option}
@opindex --locale@r{, @code{msgfmt} option}
Specify the locale name, either a language specification of the form @var{ll}
or a combined language and country specification of the form @var{ll_CC}.

@item -d @var{directory}
@opindex -d@r{, @code{msgfmt} option}
Specify the base directory of classes directory hierarchy.

@item --source
@opindex --source@r{, @code{msgfmt} option}
Produce a .java source file, instead of a compiled .class file.

@end table

The class name is determined by appending the locale name to the resource name,
separated with an underscore.  The @samp{-d} option is mandatory.  The class
is written under the specified directory.

@subsection Output file location in C# mode

@table @samp
@item -r @var{resource}
@itemx --resource=@var{resource}
@opindex -r@r{, @code{msgfmt} option}
@opindex --resource@r{, @code{msgfmt} option}
Specify the resource name.

@item -l @var{locale}
@itemx --locale=@var{locale}
@opindex -l@r{, @code{msgfmt} option}
@opindex --locale@r{, @code{msgfmt} option}
Specify the locale name, either a language specification of the form @var{ll}
or a combined language and country specification of the form @var{ll_CC}.

@item -d @var{directory}
@opindex -d@r{, @code{msgfmt} option}
Specify the base directory for locale dependent @file{.dll} files.

@end table

The @samp{-l} and @samp{-d} options are mandatory.  The @file{.dll} file is
written in a subdirectory of the specified directory whose name depends on the
locale.

@subsection Output file location in Tcl mode

@table @samp
@item -l @var{locale}
@itemx --locale=@var{locale}
@opindex -l@r{, @code{msgfmt} option}
@opindex --locale@r{, @code{msgfmt} option}
Specify the locale name, either a language specification of the form @var{ll}
or a combined language and country specification of the form @var{ll_CC}.

@item -d @var{directory}
@opindex -d@r{, @code{msgfmt} option}
Specify the base directory of @file{.msg} message catalogs.

@end table

The @samp{-l} and @samp{-d} options are mandatory.  The @file{.msg} file is
written in the specified directory.

@subsection Desktop Entry mode operations

@table @samp
@item --template=@var{template}
@opindex --template@r{, @code{msgfmt} option}
Specify a .desktop file used as a template.

@item -k[@var{keywordspec}]
@itemx --keyword[=@var{keywordspec}]
@opindex -k@r{, @code{msgfmt} option}
@opindex --keyword@r{, @code{msgfmt} option}
Specify @var{keywordspec} as an additional keyword to be looked for.
Without a @var{keywordspec}, the option means to not use default keywords.

@item -l @var{locale}
@itemx --locale=@var{locale}
@opindex -l@r{, @code{msgfmt} option}
@opindex --locale@r{, @code{msgfmt} option}
Specify the locale name, either a language specification of the form @var{ll}
or a combined language and country specification of the form @var{ll_CC}.

@item -d @var{directory}
@opindex -d@r{, @code{msgfmt} option}
Specify the directory where PO files are read.  The directory must
contain the @samp{LINGUAS} file.

@end table

To generate a @samp{.desktop} file for a single locale, you can use it
as follows.

@example
msgfmt --desktop --template=@var{template} --locale=@var{locale} \
  -o @var{file} @var{filename}.po @dots{}
@end example

msgfmt provides a special "bulk" operation mode to process multiple
@file{.po} files at a time.

@example
msgfmt --desktop --template=@var{template} -d @var{directory} -o @var{file}
@end example

msgfmt first reads the @samp{LINGUAS} file under @var{directory}, and
then processes all @samp{.po} files listed there.  You can also limit
the locales to a subset, through the @samp{LINGUAS} environment
variable.

For either operation modes, the @samp{-o} and @samp{--template}
options are mandatory.

@subsection XML mode operations

@table @samp
@item --template=@var{template}
@opindex --template@r{, @code{msgfmt} option}
Specify an XML file used as a template.

@item -L @var{name}
@itemx --language=@var{name}
@opindex -L@r{, @code{msgfmt} option}
@opindex --language@r{, @code{msgfmt} option}
@cindex supported languages, @code{msgfmt}
Specifies the language of the input files.

@item -l @var{locale}
@itemx --locale=@var{locale}
@opindex -l@r{, @code{msgfmt} option}
@opindex --locale@r{, @code{msgfmt} option}
Specify the locale name, either a language specification of the form @var{ll}
or a combined language and country specification of the form @var{ll_CC}.

@item -d @var{directory}
@opindex -d@r{, @code{msgfmt} option}
Specify the base directory of @file{.po} message catalogs.

@end table

To generate an XML file for a single locale, you can use it as follows.

@example
msgfmt --xml --template=@var{template} --locale=@var{locale} \
  -o @var{file} @var{filename}.po @dots{}
@end example

msgfmt provides a special "bulk" operation mode to process multiple
@file{.po} files at a time.

@example
msgfmt --xml --template=@var{template} -d @var{directory} -o @var{file}
@end example

msgfmt first reads the @samp{LINGUAS} file under @var{directory}, and
then processes all @samp{.po} files listed there.  You can also limit
the locales to a subset, through the @samp{LINGUAS} environment
variable.

For either operation modes, the @samp{-o} and @samp{--template}
options are mandatory.

@subsection Input file syntax

@table @samp
@item -P
@itemx --properties-input
@opindex -P@r{, @code{msgfmt} option}
@opindex --properties-input@r{, @code{msgfmt} 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{msgfmt} option}
Assume the input files are NeXTstep/GNUstep localized resource files in
@code{.strings} syntax, not in PO file syntax.

@end table

@subsection Input file interpretation

@table @samp
@item -c
@itemx --check
@opindex -c@r{, @code{msgfmt} option}
@opindex --check@r{, @code{msgfmt} option}
Perform all the checks implied by @code{--check-format}, @code{--check-header},
@code{--check-domain}.

@item --check-format
@opindex --check-format@r{, @code{msgfmt} option}
@cindex check format strings
Check language dependent format strings.

If the string represents a format string used in a
@code{printf}-like function both strings should have the same number of
@samp{%} format specifiers, with matching types.  If the flag
@code{c-format} or @code{possible-c-format} appears in the special
comment @key{#,} for this entry a check is performed.  For example, the
check will diagnose using @samp{%.*s} against @samp{%s}, or @samp{%d}
against @samp{%s}, or @samp{%d} against @samp{%x}.  It can even handle
positional parameters.

Normally the @code{xgettext} program automatically decides whether a
string is a format string or not.  This algorithm is not perfect,
though.  It might regard a string as a format string though it is not
used in a @code{printf}-like function and so @code{msgfmt} might report
errors where there are none.

To solve this problem the programmer can dictate the decision to the
@code{xgettext} program (@pxref{c-format}).  The translator should not
consider removing the flag from the @key{#,} line.  This "fix" would be
reversed again as soon as @code{msgmerge} is called the next time.

@item --check-header
@opindex --check-header@r{, @code{msgfmt} option}
Verify presence and contents of the header entry.  @xref{Header Entry},
for a description of the various fields in the header entry.

@item --check-domain
@opindex --check-domain@r{, @code{msgfmt} option}
Check for conflicts between domain directives and the @code{--output-file}
option

@item -C
@itemx --check-compatibility
@opindex -C@r{, @code{msgfmt} option}
@opindex --check-compatibility@r{, @code{msgfmt} option}
@cindex compatibility with X/Open @code{msgfmt}
Check that GNU msgfmt behaves like X/Open msgfmt.  This will give an error
when attempting to use the GNU extensions.

@item --check-accelerators[=@var{char}]
@opindex --check-accelerators@r{, @code{msgfmt} option}
@cindex keyboard accelerator checking
@cindex menu, keyboard accelerator support
@cindex mnemonics of menu entries
Check presence of keyboard accelerators for menu items.  This is based on
the convention used in some GUIs that a keyboard accelerator in a menu
item string is designated by an immediately preceding @samp{&} character.
Sometimes a keyboard accelerator is also called "keyboard mnemonic".
This check verifies that if the untranslated string has exactly one
@samp{&} character, the translated string has exactly one @samp{&} as well.
If this option is given with a @var{char} argument, this @var{char} should
be a non-alphanumeric character and is used as keyboard accelerator mark
instead of @samp{&}.

@item -f
@itemx --use-fuzzy
@opindex -f@r{, @code{msgfmt} option}
@opindex --use-fuzzy@r{, @code{msgfmt} option}
@cindex force use of fuzzy entries
Use fuzzy entries in output.  Note that using this option is usually wrong,
because fuzzy messages are exactly those which have not been validated by
a human translator.

@end table

@subsection Output details

@table @samp
@item -a @var{number}
@itemx --alignment=@var{number}
@opindex -a@r{, @code{msgfmt} option}
@opindex --alignment@r{, @code{msgfmt} option}
Align strings to @var{number} bytes (default: 1).
@c Currently the README mentions that this constant could be changed by
@c the installer by changing the value in config.h.  Should this go away?

@item --endianness=@var{byteorder}
@opindex --endianness@r{, @code{msgfmt} option}
Write out 32-bit numbers in the given byte order.  The possible values are
@code{big} and @code{little}.  The default is @code{little}.

MO files of any endianness can be used on any platform.  When a MO file has
an endianness other than the platform's one, the 32-bit numbers from the MO
file are swapped at runtime.  The performance impact is negligible.

This option can be useful to produce MO files that are optimized for one
platform.

@item --no-hash
@opindex --no-hash@r{, @code{msgfmt} option}
Don't include a hash table in the binary file.  Lookup will be more expensive
at run time (binary search instead of hash table lookup).

@end table

@subsection Informative output

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

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

@item --statistics
@opindex --statistics@r{, @code{msgfmt} option}
Print statistics about translations.  When the option @code{--verbose} is used
in combination with @code{--statistics}, the input file name is printed in
front of the statistics line.

@item -v
@itemx --verbose
@opindex -v@r{, @code{msgfmt} option}
@opindex --verbose@r{, @code{msgfmt} option}
Increase verbosity level.

@end table
