15.5.2.1 Preparing Shell Scripts for Internationalization

Preparing a shell script for internationalization is conceptually similar
to the steps described in Sources. The concrete steps for shell
scripts are as follows.

Insert the line

. gettext.sh

near the top of the script. gettext.sh is a shell function library
that provides the functions
eval_gettext (see eval_gettext Invocation) and
eval_ngettext (see eval_ngettext Invocation).
You have to ensure that gettext.sh can be found in the PATH.

Set and export the TEXTDOMAIN and TEXTDOMAINDIR environment
variables. Usually TEXTDOMAIN is the package or program name, and
TEXTDOMAINDIR is the absolute pathname corresponding to
$prefix/share/locale, where $prefix is the installation location.

For each translatable string, change the output command ‘echo’ or
‘$echo’ to ‘gettext’ (if the string contains no references to
shell variables) or to ‘eval_gettext’ (if it refers to shell variables),
followed by a no-argument ‘echo’ command (to account for the terminating
newline). Similarly, for cases with plural handling, replace a conditional
‘echo’ command with an invocation of ‘ngettext’ or
‘eval_ngettext’, followed by a no-argument ‘echo’ command.

When doing this, you also need to add an extra backslash before the dollar
sign in references to shell variables, so that the ‘eval_gettext’
function receives the translatable string before the variable values are
substituted into it. For example,

echo "Remaining files: $filecount"

becomes

eval_gettext "Remaining files: \$filecount"; echo

If the output command is not ‘echo’, you can make it use ‘echo’
nevertheless, through the use of backquotes. However, note that inside
backquotes, backslashes must be doubled to be effective (because the
backquoting eats one level of backslashes). For example, assuming that
‘error’ is a shell function that signals an error,