The subroutines cdt, cdt_string or pcdt, are used for
translated strings:
$translated_tree = $converter->cdt ($string, \%variables_hash, $translation_context) ¶$translated_string = $converter->cdt_string ($string, \%variables_hash, $translation_context) ¶$translated_tree = $converter->pcdt ($translation_context, $string, \%variables_hash) ¶$string is the string to be translated, \%variables_hash is a hash reference holding the variable parts of the translated string. $translation_context is an optional translation context that limits the search of the translated string to that context (see Contexts in GNU gettext tools).
The result returned is a Perl Texinfo tree for cdt and pcdt
and a string for cdt_string. With cdt_string the substitutions
may only be strings.
If called as pcdt, $translation_context is not optional
and is the first argument.
With cdt and pcdt, when the string is expanded as Texinfo, and
converted to a Texinfo tree in Perl, the arguments are substituted; for
example, ‘{arg_name}’ is replaced by the corresponding actual argument,
which should be a Texinfo tree element. With cdt_string, the string
should already be converted, the arguments are substituted as strings; for
example ‘{arg_name}’ is replaced by the corresponding actual argument,
which should be a string.
In the following example, ‘{date}’, ‘{program_homepage}’
and ‘{program}’ are the arguments of the string. Since they
are used in @uref, their order in the formatted output depends on
the formatting and is not predictable.
‘{date}’, ‘{program_homepage}’ and ‘{program}’ are
substituted after the expansion, which means that they should already be
Texinfo tree elements.
$converter->cdt('Generated @emph{@today{}} using '
.'@uref{{homepage}, @emph{{program}}}.',
{ 'homepage' => { 'text' => $converter->get_conf('PACKAGE_URL') },
'program' => { 'text' => $converter->get_conf('PROGRAM') }});
When combining conversion and translation, it can be useful to insert
already converted text. A special text element with type _converted
can be used for that purpose, the text of this text element is considered
to be already formatted.
An example of combining conversion with translation:
$converter->convert_tree($converter->cdt(
'{explained_string} ({explanation})',
{'explained_string' => {'type' => '_converted',
'text' => $result},
'explanation' => {'type' => '_converted',
'text' => $explanation_result}}),
"convert explained $cmdname");
In the default case, the functions from the Texinfo::Translations
module are used for translated strings through converter functions. It is
possible to use user-defined functions instead as seen next.
See (texi2any_internals)Texinfo::Translations for more on
Texinfo::Translations.
In texi2any code, cdt and cdt_string are also used to
mark translated strings for tools extracting translatable strings to produce
template files. pcdt is used to mark translated string with a
translation context associated.