This is documented in the Manual in the Translation chapter but it is a little difficult to comprehend -
NOTE: some words and abbreviations can lead to ambiguous language trans-
lations. Therefore, the usage of C_ and D_ in the program code was added to
represent Contextual and Definitional exceptions to the usual _ and N_ . You will
see the following:
C_(“msgstr”) is translated to D_(“qual#msgstr”) by xlat.sh, and invokes get-
text with msgid = “qual#msgstr”
When no po translation is supplied, the qual# is removed, and only the default
msgstr text is displayed. If a po translation is defined for the current locale, then
the translated msgid = “qual#msgstr” is used to access the translated msgstr.
The default MSGQUAL is the basename of the C source file. For the file src_file.C,
the default MSGQUAL is:
# define MSGQUAL “src_file”
It is used to define the qualifier needed to transform:
C_(“str”) to D_(“src_file#str”)
The resulting xlat.sh’d source is scanned by xgettext to create the initial cin.po. In
other words:
_(s) does normal international text translation as always -
The msgid line is: msgid “s”
C_(s) makes it appear as if you used D_(“src_file#” s) -
The msgid line is: msgid “src_file#s” If it does not translate, the default
msgtext is “s”, not “src_file#s”
D_(qual#s) tries to look up _(qual#s).