How to set locale in the current terminal's session? How to set locale in the current terminal's session? bash bash

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 to locale(7), LC_ALL and LC_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