msgfmt(1) User Commands msgfmt(1)NAMEmsgfmt - create a message object from a message file
SYNOPSISmsgfmt [-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 Adds dir to the list for input files search.
-−directory=dir
-f Uses fuzzy entries in output. If this option is
-−use-fuzzy 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-compat‐
ible message catalog file. This option cannot
be specified with the -s option.
-o output-file Specifies the output file name as output-file.
-−output=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 pro‐
cessed.
-v Verbose. Lists duplicate message identifiers if
-−verbose 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 stud‐
ied and compared. It is considered abnormal if
one string starts or ends with a newline while
the other does not. Also, if the string repre‐
sents 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 spe‐
cial 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 spe‐
cial 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 charac‐
ters). 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:
· 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 mes‐
sage object file is named messages.
· 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.
· 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.
· All duplicate msgids are ignored.
The msgid directive specifies the value of a message identifier associ‐
ated with the directive that follows it. The msgid_plural directive
specifies the plural form message specified to the plural message han‐
dling functions ngettext(), dngettext(), or dcngettext(). The mes‐
sage_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 dcngetttext().
Message strings can contafn the escapeforqcarriagefreturn,efRifor form‐
tab, for vertical tab, obackspace,
feed, \ for backslash, r
Comments for a GNU-compatible message file should be in one of the fol‐
lowing formats (the msgfmt utility will ignore these comments when pro‐
cessing 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 transla‐
tion (anymore). Only the translator can judge if the
translation requires further modification or is accept‐
able 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 The c-format flag indicates that the msgid string is
no-c-format 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 valid‐
ity 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 indi‐
cates 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 mes‐
sage 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:
· If the .po file contains a valid GNU header entry (having an empty
string for msgid), the msgfmt utility uses the GNU-compatible mes‐
sage catalog file format.
· 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 mes‐
sage 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.po
ENVIRONMENT VARIABLES
See environ(5) for descriptions of the following environmental vari‐
ables that affect the execution of msgfmt: LC_CTYPE, LC_MESSAGES, and
NLSPATH.
ATTRIBUTES
See attributes(5) for descriptions of the following attributes:
┌─────────────────────────────┬─────────────────────────────┐
│ ATTRIBUTE TYPE │ ATTRIBUTE VALUE │
├─────────────────────────────┼─────────────────────────────┤
│Availability │SUNWloc │
├─────────────────────────────┼─────────────────────────────┤
│CSI │Enabled │
└─────────────────────────────┴─────────────────────────────┘
SEE ALSOxgettext(1), gettext(3C), setlocale(3C), attributes(5), environ(5)NOTES
Installing message catalogs under the C locale is pointless, since they
are ignored for the sake of efficiency.
SunOS 5.10 17 Sep 2001 msgfmt(1)