Project

General

Profile

Actions

Bug #1573

closed

Fails to boot after locale change

Added by Paul Alesius over 11 years ago. Updated almost 9 years ago.

Status:
Closed
Priority:
Normal
Assignee:
Category:
Internationalisation
Target version:
-
Start date:
2011-09-26
Due date:
% Done:

100%

Estimated time:
Difficulty:
Medium
Tags:
needs-triage

Description

System fails to boot when having "LC_ALL=" as empty in /etc/TIMEZONE. Error during boot so system tries to enter maintenance mode:
scf_pg_get_property() failed with unexpected error 1007

When I remove the empty LC_ALL= from /etc/TIMEZONE, it will boot but prints a message during boot "Failed to set locale".

My /etc/TIMEZONE looks like this now:
TZ=Europe/Stockholm
CMASK=022
LANG=sv_SE.utf8
LC_CTYPE="sv_SE.utf8"
LC_NUMERIC="sv_SE.utf8"
LC_TIME="sv_SE.utf8"
LC_COLLATE="sv_SE.utf8"
LC_MONETARY="sv_SE.utf8"
LC_MESSAGES="sv_SE.utf8"
LC_PAPER="sv_SE.utf8"
LC_NAME="sv_SE.utf8"
LC_ADDRESS="sv_SE.utf8"
LC_TELEPHONE="sv_SE.utf8"
LC_MEASUREMENT="sv_SE.utf8"
LC_IDENTIFICATION="sv_SE.utf8"

Actions #1

Updated by Paul Alesius over 11 years ago

Other than the empty LC_ALL issue, it seems to want the locale in the format:
sv_SE.UTF-8 instead of sv_SE.utf8

Actions #2

Updated by Ken Mays almost 9 years ago

  • Status changed from New to Closed
  • Target version deleted (oi_151_stable)
  • % Done changed from 0 to 100

There are three sets of locale settings¹:

LANG, the fallback setting, if you haven't specified a value for a category. It's indended for users to indicate their locale in a simple way.

LC_xxx for each category (xxx can be MESSAGES, TIME, etc.).

LC_ALL overrides all settings. It's a way for applications to override all settings in order to work in a known locale (usually C, the default locale), typically so that various commands produce output in a known format.
So you can set LANG=de_AT.UTF-8 and LC_MESSAGES=C (C is the default locale and means untranslated; en_US is usually identical to C for messages).

However, there are two categories where I don't recommend changing the default, because it breaks a lot of programs:

LC_COLLATE is the character collation order. It's not very useful because it only indicates how to sort characters, not how to sort strings. Tools that know how to sort strings don't use LC_COLLATE. Furthermore a lot of tools expect things like “[a-z] matches all 26 ASCII lowercase letters and no other ASCII characters”, but that's not true in most non-default locales (try echo B | LC_COLLATE=en_US grep '[a-z]').

LC_NUMERIC indicates how to display numbers. In particular, in many languages, it makes floating point numbers use a , rather than . as the decimal point. But most programs that parse numbers expect a . and treat a , as a field separator.
So I recommend to

either explicitly LC_COLLATE=C LC_NUMERIC=_C,
or leave LANG unset and only set a value for the useful categories (LC_MESSAGES, LC_TIME, LC_PAPER, plus LC_CTYPE (whose value may vary depending on your terminal)).

See: http://docs.oracle.com/cd/E23824_01/html/E26033/glmbx.html

Actions

Also available in: Atom PDF