Newer
Older
ubuntu_server_scripts / lang_locale_fix.sh
#!/usr/bin/env bash

set -euo pipefail

MAIN_LANG="en_US.UTF-8"
CTYPE_LANG="ru_RU.UTF-8"

if [[ "${EUID}" -ne 0 ]]; then
	echo "Run this script as root: sudo bash $0"
	exit 1
fi

ensure_locale_in_locale_gen() {
	local locale_line="$1"
	local locale_file="/etc/locale.gen"

	if grep -Eq "^[#[:space:]]*${locale_line//./\\.}[[:space:]]*$" "$locale_file"; then
		sed -i "s|^[#[:space:]]*\\(${locale_line//./\\.}\\)[[:space:]]*$|\\1|" "$locale_file"
	else
		echo "$locale_line" >> "$locale_file"
	fi
}

echo "Configuring UTF-8 locales..."

ensure_locale_in_locale_gen "en_US.UTF-8 UTF-8"
ensure_locale_in_locale_gen "ru_RU.UTF-8 UTF-8"

locale-gen

update-locale LANG="$MAIN_LANG" LC_CTYPE="$CTYPE_LANG"

echo
echo "Done."
echo "You should re-login to the shell or reboot for a clean session."
echo
echo "Current settings from /etc/default/locale:"
cat /etc/default/locale || true
echo
echo "Available locales:"
locale -a | grep -E 'en_US|ru_RU' || true
echo
echo "After re-login, 'locale' should look roughly like this:"
echo "LANG=${MAIN_LANG}"
echo "LC_CTYPE=${CTYPE_LANG}"