Next: Contents of gettext.sh
, Up: sh - Shell Script [Contents][Index]
Preparing a shell script for internationalization is conceptually similar to the steps described in Preparing Program Sources. The concrete steps for shell scripts are as follows.
. gettext.sh
near the top of the script. gettext.sh
is a shell function library
that provides the functions
eval_gettext
(see Invoking the eval_gettext
function),
eval_ngettext
(see Invoking the eval_ngettext
function),
eval_pgettext
(see Invoking the eval_pgettext
function), and
eval_npgettext
(see Invoking the eval_npgettext
function).
You have to ensure that gettext.sh
can be found in the PATH
.
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.
TEXTDOMAIN=@PACKAGE@ export TEXTDOMAIN TEXTDOMAINDIR=@LOCALEDIR@ export TEXTDOMAINDIR
"`...`"
or "$(...)"
), variable access with defaulting (like
${variable-default}
), access to positional arguments
(like $0
, $1
, ...) or highly volatile shell variables (like
$?
). This can always be done through simple local code restructuring.
For example,
echo "Usage: $0 [OPTION] FILE..."
becomes
program_name=$0 echo "Usage: $program_name [OPTION] FILE..."
Similarly,
echo "Remaining files: `ls | wc -l`"
becomes
filecount="`ls | wc -l`" echo "Remaining files: $filecount"
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,
error "file not found: $filename"
is first transformed into
error "`echo \"file not found: \$filename\"`"
which then becomes
error "`eval_gettext \"file not found: \\\$filename\"`"
Next: Contents of gettext.sh
, Up: sh - Shell Script [Contents][Index]