LANG and LANGUAGE environment variable in Debian based systems
It seems both the LANG and LANGUAGE environment variable are used by some programs to determine their user interface language.
What are the exact semantics of these variables and where can I read about their correct usage? The manpage for locale(1) only mentions the LC_* family of environment variables. Additionally there is also an LC_ALL variable commonly in place which isn't described there either.
LANG
contain the setting for all categories that are not directly set by a LC_*
variable.
LC_ALL
is used to override every LC_*
and LANG
and LANGUAGE
. It should not be set in a normal user environment, but can be useful when you are writing a script that depend on the precise output of an internationalized command.
LANGUAGE
is used to set messages languages (as LC_MESSAGES
) to a multi-valued value, e.g., setting it to fr:de:en
will use French messages where they exist; if not, it will use German messages, and will fall back to English if neither German nor French messages are available.
Have a look at the manpage locale(7)
: it describes that LANG
is a fallback setting, while LC_ALL
overrides all separate LC_*
settings.
For reference, the locale system is GNU GetText, which has its full documentation available in the gettext-doc package (Debian/Ubuntu).
Alternatively, there is an online manual with authoritative and elaborate documentation of the LANG and LANGUAGE environment variables.