How to set locale in the current terminal's session?
There are two factors:
- you may be using a shell with a built-in echo (and have not informed the shell that you are changing the locale)
LANG
is not the first environment variable checked. According tolocale(7)
,LC_ALL
andLC_CTYPE
would be checked first:
If the second argument to setlocale(3) is an empty string, "", for the default locale, it is determined using the following steps: 1. If there is a non-null environment variable LC_ALL, the value of LC_ALL is used. 2. If an environment variable with the same name as one of the categories above exists and is non-null, its value is used for that category. 3. If there is a non-null environment variable LANG, the value of LANG is used.
For the latter, look at the output from the locale
command, which lists all of the environment variables which would be used:
$ export LANG=ru_RU.KOI8-R$ localeLANG=ru_RU.KOI8-RLANGUAGE=LC_CTYPE="en_US.UTF-8"LC_NUMERIC="en_US.UTF-8"LC_TIME="en_US.UTF-8"LC_COLLATE="en_US.UTF-8"LC_MONETARY="en_US.UTF-8"LC_MESSAGES="en_US.UTF-8"LC_PAPER="en_US.UTF-8"LC_NAME="en_US.UTF-8"LC_ADDRESS="en_US.UTF-8"LC_TELEPHONE="en_US.UTF-8"LC_MEASUREMENT="en_US.UTF-8"LC_IDENTIFICATION="en_US.UTF-8"LC_ALL=en_US.UTF-8
Just changing LANG
should not change the other variables, but changing LC_ALL
generally does that.
$ export LC_ALL=ru_RU.KOI8-R$ localeLANG=ru_RU.KOI8-RLANGUAGE=LC_CTYPE="ru_RU.KOI8-R"LC_NUMERIC="ru_RU.KOI8-R"LC_TIME="ru_RU.KOI8-R"LC_COLLATE="ru_RU.KOI8-R"LC_MONETARY="ru_RU.KOI8-R"LC_MESSAGES="ru_RU.KOI8-R"LC_PAPER="ru_RU.KOI8-R"LC_NAME="ru_RU.KOI8-R"LC_ADDRESS="ru_RU.KOI8-R"LC_TELEPHONE="ru_RU.KOI8-R"LC_MEASUREMENT="ru_RU.KOI8-R"LC_IDENTIFICATION="ru_RU.KOI8-R"LC_ALL=ru_RU.KOI8-R