While this single name domain work good for most applications there
might be the need to get translations from more than one domain. Of
course one could switch between different domains with calls to
textdomain
, but this is really not convenient nor is it fast. A
possible situation could be one case discussing while this writing: all
error messages of functions in the set of common used functions should
go into a separate domain error
. By this mean we would only need
to translate them once.
For this reasons there are two more functions to retrieve strings:
char *dgettext (const char *domain_name, const char *msgid); char *dcgettext (const char *domain_name, const char *msgid, int category);
Both take an additional argument at the first place, which corresponds
to the argument of textdomain
. The third argument of
dcgettext
allows to use another locale but LC_MESSAGES
.
But I really don't know where this can be useful. If the
domain_name is NULL
or category has an value beside
the known ones, the result is undefined. It should also be noted that
this function is not part of the second known implementation of this
function family, the one found in Solaris.
A second ambiguity can arise by the fact, that perhaps more than one domain has the same name. This can be solved by specifying where the needed message catalog files can be found.
char *bindtextdomain (const char *domain_name, const char *dir_name);
Calling this function binds the given domain to a file in the specified
directory (how this file is determined follows below). Esp a file in
the systems default place is not favored against the specified file
anymore (as it would be by solely using textdomain
). A NULL
pointer for the dir_name parameter returns the binding associated
with domain_name. If domain_name itself is NULL
nothing happens and a NULL
pointer is returned. Here again as
for all the other functions is true that none of the return value must
be changed!
Go to the first, previous, next, last section, table of contents.