MSGFMT(1)                       User Commands                      MSGFMT(1)
NAME
       msgfmt - create a message object from a message file
SYNOPSIS
       msgfmt [
-D dir | 
--directory=
dir]
            [
-f | 
--use-fuzzy] [
-g]
            [
-o output-file | 
--output-file=
output-file]
            [
-s] [
--strict] [
-v] [
--verbose] 
filename.po...
DESCRIPTION
       The 
msgfmt utility creates message object files from portable object
       files (
filename.po), without changing the portable object files.
       The 
.po file contains messages displayed to users by system commands
       or by application programs. 
.po files can be edited. The messages in
       these files can be rewritten in any language supported by the system.
       The 
xgettext(1) command can be used to create 
.po files from script
       or programs.       
msgfmt interprets data as characters according to the current setting
       of the 
LC_CTYPE locale category or according to the codeset specified
       in the 
.po file.
OPTIONS
       The following options are supported:       
-D dir       --directory=dir                                  Adds 
dir to the list for input files
                                  search.       
-f       --use-fuzzy                                  Uses fuzzy entries in output. If this
                                  option is not specified, fuzzy entries are
                                  not included into the output. These
                                  options are ignored if Solaris message
                                  catalogs are processed.       
-g                                  Directs the utility to generate the GNU-
                                  compatible message catalog file. This
                                  option cannot be specified with the 
-s                                  option.       
-o output-file       --output=output-file                                  Specifies the output file name as 
output-                                  file. All domain directives and duplicate
                                  msgids in the .
po file are ignored.       
-s                                  Directs the utility to generate the
                                  Solaris message catalog file. This option
                                  cannot be specified with the 
-g option.       
--strict                                  Directs the utility to append the suffix                                  
.mo to the generating message object file
                                  name if it doesn't have this suffix. This
                                  option is ignored if Solaris message
                                  catalogs are processed.       
-v       --verbose                                  Verbose. Lists duplicate message
                                  identifiers if Solaris message catalog
                                  files are processed. Message strings are
                                  not redefined.
                                  If GNU-compatible message files are
                                  processed, this option detects and
                                  diagnoses input file anomalies which might
                                  represent translation errors. The msgid
                                  and msgstr strings are studied and
                                  compared. It is considered abnormal if one
                                  string starts or ends with a newline while
                                  the other does not. Also, if the string
                                  represents a format string used in a
                                  printf-like function, both strings should
                                  have the same number of % format
                                  specifiers, with matching types. If the
                                  flag 
c-format appears in the special
                                  comment '
#' for this entry, a check is
                                  performed.
USAGE
       The format of portable object files (
.po files) is defined as
       follows.  Each 
.po file contains one or more lines, with each line
       containing either a comment or a statement. Comments start the line
       with a pound sign (
#) and end with the newline character. All
       comments (except special comments described later) and empty lines
       are ignored. The format of a statement is:         
directive     value       Each 
directive starts at the beginning of the line and is separated
       from 
value by white space (such as one or more space or tab
       characters).  
value consists of one or more quoted strings separated
       by white space.  Use any of the following types of directives for the
       Solaris message file:
         domain 
domainname         msgid 
message_identifier         msgstr 
message_string       For a GNU-compatible message file, use any of the following types of
       directives:
         domain 
domainname         msgid 
message_identifier         msgid_plural 
untranslated_string_plural         msgstr 
message_string         msgstr[
n] 
message_string       The behavior of the 
domain directive is affected by the options used.
       See OPTIONS for the behavior when the 
-o or 
--output-file options are
       specified. If the 
-o or 
--output-file options are not specified, the
       behavior of the 
domain directive is as follows:
           o      All msgids from the beginning of each 
.po file to the
                  first 
domain directive are put into a default message
                  object file. The default message object file is named                  
messages.mo, if the Solaris message catalog file format is
                  used to generate the message object file or if the                  
--strict option is specified. Otherwise, the default
                  message object file is named 
messages.
           o      When 
msgfmt encounters a 
domain domainname directive in
                  the 
.po file, all following msgids until the next 
domain                  directive are put into the message object file, named                  
domainname.mo, if the Solaris message catalog file format
                  is used to generate the message object file or if the                  
--strict option is specified. Otherwise, the msgids are
                  put into the message object file named 
domainname.
           o      Duplicate msgids are defined in the scope of each domain.
                  That is, a msgid is considered a duplicate only if the
                  identical msgid exists in the same domain.
           o      All duplicate msgids are ignored.
       The 
msgid directive specifies the value of a message identifier
       associated with the directive that follows it. The 
msgid_plural       directive specifies the plural form message specified to the plural
       message handling functions 
ngettext(), 
dngettext(), or 
dcngettext().
       The 
message_identifier string identifies a target string to be used
       at retrieval time. Each statement containing a 
msgid directive must
       be followed by a statement containing a 
msgstr directive or 
msgstr[
n]
       directives.
       The 
msgstr directive specifies the target string associated with the       
message_identifier string declared in the immediately preceding 
msgid       directive.
       The directive 
msgstr[
n] (where 
n = 0, 1, 2, ...) specifies the target
       string to be used with plural form handling functions 
ngettext(),       
dngettext(), and 
dcngettext().
       Message strings can contain the escape sequences 
\n for newline, 
\t       for tab, 
\v for vertical tab, 
\b for backspace, 
\r for carriage
       return, 
\f for formfeed, 
\ for backslash, 
\" for double quote, 
\a for
       alarm, 
\ddd for octal bit pattern, and 
\xDD for hexadecimal bit
       pattern.
       Comments for a GNU-compatible message file should be in one of the
       following formats (the 
msgfmt utility will ignore these comments when
       processing Solaris message files):
         # 
translator-comments         #. 
automatic-comments         #: 
reference...
         #, 
flag...
       The '
#:' comments indicate the location of the msgid string in the
       source files in 
filename:
line format. The '
#', '
#.', and '
#:'
       comments are informative only and are silently ignored by the 
msgfmt       utility. The '
#,' comments require one or more flags separated by the
       comma character. The following 
flags can be specified:       
fuzzy                      This flag can be inserted by the translator. It shows
                      that the 
msgstr string might not be a correct
                      translation (anymore). Only the translator can judge
                      if the translation requires further modification or is
                      acceptable as is.  Once satisfied with the
                      translation, the translator removes this 
fuzzy flag.
                      If this flag is specified, the 
msgfmt utility will not
                      generate the entry for the immediately following msgid
                      in the output message catalog.       
c-format       no-c-format                      The 
c-format flag indicates that the 
msgid string is
                      used as a format string by printf-like functions. In
                      case the 
c-format flag is given for a string, the                      
msgfmt utility does some more tests to check the
                      validity of the translation.
       In the GNU-compatible message file, the 
msgid entry with empty string
       ("") is called the header entry and treated specially. If the message
       string for the header entry contains 
nplurals=
value, the value
       indicates the number of plural forms. For example, if 
nplurals=4,
       there are four plural forms. If 
nplurals is defined, the same line
       should contain 
plural=expression, separated by a semicolon character.
       The 
expression is a C language expression to determine which version
       of 
msgstr[
n] is to be used based on the value of 
n, the last argument
       of 
ngettext(), 
dngettext(), or 
dcngettext(). For example,
         nplurals=2; plural= n == 1 ? 0 : 1
       indicates that there are two plural forms in the language. msgstr[0]
       is used if n == 1, otherwise msgstr[1] is used. For another example:
         nplurals=3; plural= n == 1 ? 0 : n == 2 ? 1 : 2
       indicates that there are three plural forms in the language.
       msgstr[0] is used if n == 1, msgstr[1] is used if n == 2, otherwise
       msgstr[2] is used.
       If the header entry contains a 
charset=
codeset string, the 
codeset is
       used to indicate the codeset to be used to encode the message
       strings. If the output string's codeset is different from the message
       string's codeset, codeset conversion from the message string's
       codeset to the output string's codeset will be performed upon the
       call of 
gettext(), 
dgettext(), 
dcgettext(), 
ngettext(), 
dngettext(),
       and 
dcngettext() for the GNU-compatible message catalogs. The output
       string's codeset is determined by the current locale's codeset (the
       return value of 
nl_langinfo(CODESET)) by default, and can be changed
       by the call of 
bind_textdomain_codeset().
   Message catalog file format
       The 
msgfmt utility can generate the message object both in Solaris
       message catalog file format and in GNU-compatible message catalog
       file format.  If the 
-s option is specified and the input file is a
       Solaris 
.po file, the 
msgfmt utility generates the message object in
       Solaris message catalog file format. If the 
-g option is specified
       and the input file is a GNU 
.po file, the 
msgfmt utility generates
       the message object in GNU-compatible message catalog file format. If
       neither the 
-s nor 
-g option is specified, the 
msgfmt utility
       determines the message catalog file format as follows:
           o      If the 
.po file contains a valid GNU header entry (having
                  an empty string for 
msgid), the 
msgfmt utility uses the
                  GNU-compatible message catalog file format.
           o      Otherwise, the 
msgfmt utility uses the Solaris message
                  catalog file format.
       If the 
msgfmt utility determined that the Solaris message catalog
       file format is used, as above, but found the 
.po file contains
       directives that are specific to the GNU-compatible message catalog
       file format, such as 
msgid_plural and 
msgstr[
n], the 
msgfmt utility
       handles those directives as invalid specifications.
EXAMPLES
       Example 1: Creating message objects from message files
       In this example, 
module1.po and 
module2.po are portable message
       objects files.
         example% 
cat module1.po         # default domain "messages.mo"
         msgid  "msg 1"
         msgstr "msg 1 translation"
         #
         domain "help_domain"
         msgid  "help 2"
         msgstr "help 2 translation"
         #
         domain "error_domain"
         msgid  "error 3"
         msgstr "error 3 translation"
         example% 
cat module2.po         # default domain "messages.mo"
         msgid  "mesg 4"
         msgstr "mesg 4 translation"
         #
         domain "error_domain"
         msgid  "error 5"
         msgstr "error 5 translation"
         #
         domain "window_domain"
         msgid  "window 6"
         msgstr "window 6 translation"
       The following command will produce the output files 
messages.mo,       
help_domain.mo, and 
error_domain.mo in Solaris message catalog file
       format:
         example% 
msgfmt module1.po       The following command will produce the output files 
messages.mo,       
help_domain.mo, 
error_domain.mo, and 
window_domain.mo in Solaris
       message catalog file format:
         example% 
msgfmt module1.po module2.po       The following command will produce the output file 
hello.mo in
       Solaris message catalog file format:
         example% 
msgfmt -o hello.mo module1.po module2.poENVIRONMENT VARIABLES
       See 
environ(7) for descriptions of the following environmental
       variables that affect the execution of 
msgfmt: 
LC_CTYPE, 
LC_MESSAGES,
       and 
NLSPATH.
ATTRIBUTES
       See 
attributes(7) for descriptions of the following attributes:
       +---------------+-----------------+
       |ATTRIBUTE TYPE | ATTRIBUTE VALUE |
       +---------------+-----------------+
       |CSI            | Enabled         |
       +---------------+-----------------+
SEE ALSO
       xgettext(1), 
gettext(3C), 
setlocale(3C), 
attributes(7), 
environ(7)NOTES
       Installing message catalogs under the C locale is pointless, since
       they are ignored for the sake of efficiency.
                                May 21, 2022                       MSGFMT(1)