Localization is an undocumented Bash feature.
A localized shell script echoes its text output in the language defined as the system's locale. A Linux user in Berlin, Germany, would get script output in German, whereas his cousin in Berlin, Maryland, would get output from the same script in English.
To create a localized script, use the following template to write all messages to the user (error messages, prompts, etc.).
#!/bin/bash
# localized.sh
E_CDERROR=65
error()
{
printf "$@" >&2
exit $E_CDERROR
}
cd $var || error $"Can't cd to %s." "$var"
read -p $"Enter the value: " var
# ...
|
bash$
bash -D localized.sh
"Can't cd to %s."
"Enter the value: "
|
bash$
bash --dump-po-strings localized.sh
#: a:6
msgid "Can't cd to %s."
msgstr ""
#: a:7
msgid "Enter the value: "
msgstr ""
|
Now, build a language.po file for each language that the script will be translated into, specifying the msgstr . As an example:
fr.po:
#: a:6
msgid "Can't cd to %s."
msgstr "Impossible de se positionner dans le répertoire %s."
#: a:7
msgid "Enter the value: "
msgstr "Entrez la valeur : "
|
Then, run msgfmt.
msgfmt -o localized.sh.mo fr.po
Place the resulting localized.sh.mo file in the /usr/local/share/locale/fr/LC_MESSAGES directory, and at the beginning of the script, insert the lines:
TEXTDOMAINDIR=/usr/local/share/locale
TEXTDOMAIN=localized.sh
|
If a user on a French system runs the script, she will get French messages.
![]() |
With older versions of Bash or other shells, localization requires gettext, using the -s option. In this case, the script becomes:
|
The TEXTDOMAIN and TEXTDOMAINDIR variables need to be exported to the environment.
---
This appendix written by Stephane Chazelas.