#18 Reset inherited locale settings to C.UTF-8 if invalid
Merged 5 years ago by ovasik. Opened 5 years ago by zbyszek.
zbyszek/setup reset-locale  into  master

file modified
+29 -5
@@ -1,8 +1,32 @@ 

  # /etc/profile.d/lang.csh - exports environment variables, and provides fallback

  #                          for CJK languages that can't be displayed in console.

+ #                          Resets the locale if unavailable.

  

- if (${?LANG}) then

-     set LANG_backup=${LANG}

+ unset LANG_backup

+ 

+ # If unavailable, reset to the default. Do this before reading in any

+ # explicit user configuration. We simply check if locale emits any

+ # warnings, and assume that the settings are invalid if it does.

+ set locale_error=`(locale >/dev/null) |& cat`

+ if ("${locale_error}" != "") then

+     if (${?LANG}) then

+         setenv LANG C.UTF-8

+     endif

+     unsetenv LC_ALL

+     setenv LC_CTYPE C.UTF-8

+     setenv LC_NUMERIC C.UTF-8

+     setenv LC_TIME C.UTF-8

+     setenv LC_COLLATE C.UTF-8

+     setenv LC_MONETARY C.UTF-8

+     setenv LC_MESSAGES C.UTF-8

+     setenv LC_PAPER C.UTF-8

+     setenv LC_NAME C.UTF-8

+     setenv LC_ADDRESS C.UTF-8

+     setenv LC_TELEPHONE C.UTF-8

+     setenv LC_MEASUREMENT C.UTF-8

+     setenv LC_IDENTIFICATION C.UTF-8

+ else

+     set LANG_backup=${?LANG}

  endif

  

  foreach config (/etc/locale.conf "${HOME}/.i18n")
@@ -16,7 +40,7 @@ 

      set LANG="${LANG_backup}"

  endif

  

- unset LANG_backup config

+ unset LANG_backup config locale_error

  

  # ----------------------------------------------

  
@@ -24,7 +48,7 @@ 

  # If it is set, then we we expect it is user's explicit override (most likely from ~/.i18n file).

  # See 'man 7 locale' for more info about LC_ALL.

  if (${?LC_ALL}) then

-     if (${LC_ALL} != ${LANG}) then

+     if (${LC_ALL} != ${?LANG} && ${?LANG}) then

          setenv LC_ALL

      else

          unsetenv LC_ALL
@@ -34,7 +58,7 @@ 

  # The ${LANG} manipulation is necessary only in virtual terminal (a.k.a. console - /dev/tty*):

  set in_console=`tty | grep -vc -e '/dev/tty'`

  

- if (${?LANG} && ${TERM} == 'linux' && in_console == 0) then

+ if (${?LANG} && ${?TERM} == 'linux' && in_console == 0) then

      set utf8_used=`echo ${LANG} | grep --quiet -E -i -e '^.+\.utf-?8$'; echo $?`

  

      if (${utf8_used} == 0) then

file modified
+23 -2
@@ -1,7 +1,28 @@ 

  # /etc/profile.d/lang.sh - exports environment variables, and provides fallback

  #                          for CJK languages that can't be displayed in console.

+ #                          Resets the locale if unavailable.

  

- if [ -n "${LANG}" ]; then

+ unset LANG_backup

+ 

+ # If unavailable, reset to the default. Do this before reading in any

+ # explicit user configuration. We simply check if locale emits any

+ # warnings, and assume that the settings are invalid if it does.

+ if [ -n "$(locale 2>&1 1>/dev/null)" ]; then

+     [ -z "$LANG" ] || LANG=C.UTF-8

+     unset LC_ALL

+     LC_CTYPE="C.UTF-8"

+     LC_NUMERIC="C.UTF-8"

+     LC_TIME="C.UTF-8"

+     LC_COLLATE="C.UTF-8"

+     LC_MONETARY="C.UTF-8"

+     LC_MESSAGES="C.UTF-8"

+     LC_PAPER="C.UTF-8"

+     LC_NAME="C.UTF-8"

+     LC_ADDRESS="C.UTF-8"

+     LC_TELEPHONE="C.UTF-8"

+     LC_MEASUREMENT="C.UTF-8"

+     LC_IDENTIFICATION="C.UTF-8"

+ else

      LANG_backup="${LANG}"

  fi

  
@@ -29,7 +50,7 @@ 

  # If it is set, then we we expect it is user's explicit override (most likely from ~/.i18n file).

  # See 'man 7 locale' for more info about LC_ALL.

  if [ -n "${LC_ALL}" ]; then

-     if [ "${LC_ALL}" != "${LANG}" ]; then

+     if [ "${LC_ALL}" != "${LANG}" -a -n "${LANG}" ]; then

          export LC_ALL

      else

          unset LC_ALL

For https://fedoraproject.org/wiki/Changes/Reset-locale-if-not-available.

This is fairly simple logic, so I don't expect any major surprises. Tested mostly
by doing various variants of LANG=... LC_CTYPE=... ssh localhost and
LANG=... LC_CTYPE=... mock.

Pull-Request has been merged by ovasik

5 years ago

@ovasik any plans for a release in F30?

Ok, will build that for F30...

Metadata