GETTEXT(3C) Standard C Library Functions GETTEXT(3C)
NAME
gettext, dgettext, dcgettext, ngettext, dngettext, dcngettext,
textdomain, bindtextdomain, bind_textdomain_codeset - message
handling functions
SYNOPSIS
Solaris and GNU-compatible #include <libintl.h>
char *gettext(
const char *msgid);
char *dgettext(
const char *domainname,
const char *msgid);
char *textdomain(
const char *domainname);
char *bindtextdomain(
const char *domainname,
const char *dirname);
#include <libintl.h>
#include <locale.h>
char *dcgettext(
const char *domainname,
const char *msgid,
int category);
GNU-compatible #include <libintl.h>
char *ngettext(
const char *msgid1,
const char *msgid2,
unsigned long int n);
char *dngettext(
const char *domainname,
const char *msgid1,
const char *msgid2,
unsigned long int n);
char *bind_textdomain_codeset(
const char *domainname,
const char *codeset);
extern int _nl_msg_cat_cntr;
extern int *_nl_domain_bindings;
#include <libintl.h>
#include <locale.h>
char *dcngettext(
const char *domainname,
const char *msgid1,
const char *msgid2,
unsigned long int n,
int category);
DESCRIPTION
The
gettext(),
dgettext(), and
dcgettext() functions attempt to
retrieve a target string based on the specified
msgid argument within
the context of a specific domain and the current locale. The length
of strings returned by
gettext(),
dgettext(), and
dcgettext() is
undetermined until the function is called. The
msgid argument is a
null-terminated string.
The
ngettext(),
dngettext(), and
dcngettext() functions are
equivalent to
gettext(),
dgettext(), and
dcgettext(), respectively,
except for the handling of plural forms. These functions work only
with GNU-compatible message catalogues. The
ngettext(),
dngettext(),
and
dcngettext() functions search for the message string using the
msgid1 argument as the key and the
n argument to determine the plural
form. If no message catalogues are found,
msgid1 is returned if
n ==
1, otherwise
msgid2 is returned.
The
NLSPATH environment variable (see
environ(7)) is searched first
for the location of the
LC_MESSAGES catalogue. The setting of the
LC_MESSAGES category of the current locale determines the locale used
by
gettext() and
dgettext() for string retrieval. The
category argument determines the locale used by
dcgettext(). If
NLSPATH is not
defined and the current locale is "C",
gettext(),
dgettext(), and
dcgettext() simply return the message string that was passed. In a
locale other than "C", if
NLSPATH is not defined or if a message
catalogue is not found in any of the components specified by
NLSPATH,
the routines search for the message catalogue using the scheme
described in the following paragraph.
The
LANGUAGE environment variable is examined to determine the GNU-
compatible message catalogues to be used. The value of
LANGUAGE is a
list of locale names separated by a colon (':') character. If
LANGUAGE is defined, each locale name is tried in the specified order
and if a GNU-compatible message catalogue is found, the message is
returned. If a GNU-compatible message catalogue is found but failed
to find a corresponding
msgid, the
msgid string is return. If
LANGUAGE is not defined or if a Solaris message catalogue is found or
no GNU-compatible message catalogue is found in processing
LANGUAGE,
the pathname used to locate the message catalogue is
dirname/
locale/
category/
domainname.mo, where
dirname is the directory
specified by
bindtextdomain(),
locale is a locale name, and
category is either
LC_MESSAGES if
gettext(),
dgettext(),
ngettext(), or
dngettext() is called, or
LC_XXX where the name is the same as the
locale category name specified by the
category argument to
dcgettext() or
dcngettext().
For
gettext() and
ngettext(), the domain used is set by the last
valid call to
textdomain(). If a valid call to
textdomain() has not
been made, the default domain (called
messages) is used.
For
dgettext(),
dcgettext(),
dngettext(), and
dcngettext(), the
domain used is specified by the
domainname argument. The
domainname argument is equivalent in syntax and meaning to the
domainname argument to
textdomain(), except that the selection of the domain is
valid only for the duration of the
dgettext(),
dcgettext(),
dngettext(), or
dcngettext() function call.
The
textdomain() function sets or queries the name of the current
domain of the active
LC_MESSAGES locale category. The
domainname argument is a null-terminated string that can contain only the
characters allowed in legal filenames.
The
domainname argument is the unique name of a domain on the system.
If there are multiple versions of the same domain on one system,
namespace collisions can be avoided by using
bindtextdomain(). If
textdomain() is not called, a default domain is selected. The setting
of domain made by the last valid call to
textdomain() remains valid
across subsequent calls to
setlocale(3C), and
gettext().
The
domainname argument is applied to the currently active
LC_MESSAGES locale.
The current setting of the domain can be queried without affecting
the current state of the domain by calling
textdomain() with
domainname set to the null pointer. Calling
textdomain() with a
domainname argument of a null string sets the domain to the default
domain (
messages).
The
bindtextdomain() function binds the path predicate for a message
domain
domainname to the value contained in
dirname. If
domainname is
a non-empty string and has not been bound previously,
bindtextdomain() binds
domainname with
dirname.
If
domainname is a non-empty string and has been bound previously,
bindtextdomain() replaces the old binding with
dirname. The
dirname argument can be an absolute or relative pathname being resolved when
gettext(),
dgettext(), or
dcgettext() are called. If
domainname is a
null pointer or an empty string,
bindtextdomain() returns
NULL. User
defined domain names cannot begin with the string
SYS_. Domain names
beginning with this string are reserved for system use.
The
bind_textdomain_codeset() function can be used to specify the
output codeset for message catalogues for domain
domainname. The
codeset argument must be a valid codeset name that can be used for
the
iconv_open(3C) function, or a null pointer. If the
codeset argument is the null pointer,
bind_textdomain_codeset() returns the
currently selected codeset for the domain with the name
domainname.
It returns a null pointer if a codeset has not yet been selected. The
bind_textdomain_codeset() function can be used multiple times. If
used multiple times with the same
domainname argument, the later call
overrides the settings made by the earlier one. The
bind_textdomain_codeset() function returns a pointer to a string
containing the name of the selected codeset. The string is allocated
internally in the function and must not be changed by the user.
The external variables
_nl_msg_cat_cntr and
_nl_domain_bindings are
provided for the compatibility with the GNU
gettext() implementation.
RETURN VALUES
The
gettext(),
dgettext(), and
dcgettext() functions return the
message string if the search succeeds. Otherwise they return the
msgid string.
The
ngettext(),
dngettext(), and
dcngettext() functions return the
message string if the search succeeds. If the search fails,
msgid1 is returned if
n == 1. Otherwise
msgid2 is returned.
The individual bytes of the string returned by
gettext(),
dgettext(),
dcgettext(),
ngettext(),
dngettext(), or
dcngettext() can contain any
value other than
NULL. If
msgid is a null pointer, the return value
is undefined. The string returned must not be modified by the program
and can be invalidated by a subsequent call to
bind_textdomain_codeset() or
setlocale(3C). If the
domainname argument to
dgettext(),
dcgettext(),
dngettext(), or
dcngettext() is
a null pointer, the domain currently bound by
textdomain() is used.
The normal return value from
textdomain() is a pointer to a string
containing the current setting of the domain. If
domainname is a null
pointer,
textdomain() returns a pointer to the string containing the
current domain. If
textdomain() was not previously called and
domainname is a null string, the name of the default domain is
returned. The name of the default domain is
messages. If
textdomain() fails, a null pointer is returned.
The return value from
bindtextdomain() is a null-terminated string
containing
dirname or the directory binding associated with
domainname if
dirname is
NULL. If no binding is found, the default
return value is
/usr/lib/locale. If
domainname is a null pointer or
an empty string,
bindtextdomain() takes no action and returns a null
pointer. The string returned must not be modified by the caller. If
bindtextdomain() fails, a null pointer is returned.
USAGE
These functions impose no limit on message length. However, a text
domainname is limited to
TEXTDOMAINMAX (256) bytes.
The
gettext(),
dgettext(),
dcgettext(),
ngettext(),
dngettext(),
dcngettext(),
textdomain(), and
bindtextdomain() functions can be
used safely in multithreaded applications, as long as
setlocale(3C) is not being called to change the locale.
The
gettext(),
dgettext(),
dcgettext(),
textdomain(), and
bindtextdomain() functions work with both Solaris message catalogues
and GNU-compatible message catalogues. The
ngettext(),
dngettext(),
dcngettext(), and
bind_textdomain_codeset() functions work only with
GNU-compatible message catalogues. See
msgfmt(1) for information
about Solaris message catalogues and GNU-compatible message
catalogues.
FILES
/usr/lib/locale default path predicate for message domain files
/usr/lib/locale/locale/LC_MESSAGES/domainname.m o system default location for file containing messages for
language
locale and
domainname /usr/lib/locale/locale/LC_XXX/domainname.mo system default location for file containing messages for
language
locale and
domainname for
dcgettext() calls where
LC_XXX is
LC_CTYPE,
LC_NUMERIC,
LC_TIME,
LC_COLLATE,
LC_MONETARY, or
LC_MESSAGES dirname/locale/LC_MESSAGES/domainname .mo location for file containing messages for domain
domainname and
path predicate
dirname after a successful call to
bindtextdomain() dirname/locale/LC_XXX/domainname.mo location for files containing messages for domain
domainname, language
locale, and path predicate
dirname after a successful
call to
bindtextdomain() for
dcgettext() calls where
LC_XXX is
one of
LC_CTYPE,
LC_NUMERIC,
LC_TIME,
LC_COLLATE,
LC_MONETARY, or
LC_MESSAGESATTRIBUTES
See
attributes(7) for descriptions of the following attributes:
+--------------------+----------------------+
| ATTRIBUTE TYPE | ATTRIBUTE VALUE |
+--------------------+----------------------+
|Interface Stability | See below. |
+--------------------+----------------------+
|MT-Level | Safe with exceptions |
+--------------------+----------------------+
The external variables
_nl_msg_cat_cntr and
_nl_domain_bindings are
Uncommitted.
SEE ALSO
msgfmt(1),
xgettext(1),
iconv_open(3C),
setlocale(3C),
libintl.h(3HEAD),
attributes(7),
environ(7) April 9, 2016 GETTEXT(3C)