Korzystam z Arch Linux i postępowałem zgodnie ze wskazówkami na wiki dotyczącymi ustawiania lokalizacji.
Niemal każdy uruchomiony program narzeka na ustawienia regionalne - nawet locale
. To wygląda tak:
% locale
locale: Cannot set LC_ALL to default locale: No such file or directory
LANG=
LC_CTYPE=en_US.UTF-8
LC_NUMERIC=en-US
LC_TIME=en-US
LC_COLLATE="POSIX"
LC_MONETARY=en-US
LC_MESSAGES="POSIX"
LC_PAPER="POSIX"
LC_NAME="POSIX"
LC_ADDRESS="POSIX"
LC_TELEPHONE="POSIX"
LC_MEASUREMENT=en-US
LC_IDENTIFICATION="POSIX"
LC_ALL=
lub:
% perl
perl: warning: Setting locale failed.
perl: warning: Please check that your locale settings:
LANGUAGE = (unset),
LC_ALL = (unset),
LC_TIME = "en-US",
LC_NUMERIC = "en-US",
LC_MONETARY = "en-US",
LC_MEASUREMENT = "en-US",
LC_CTYPE = "en_US.UTF-8",
LANG = (unset)
are supported and installed on your system.
perl: warning: Falling back to the standard locale ("C")
Coś nieco mylącego jest to, że /etc/locale.gen
ma kilka przykładów; wszystkie linie UTF-8 mają „coś.UTF-8”, a podczas locale-gen
pokazów są uruchomione pokazy en_US.UTF-8... done
, ale locale -a
które powinny pokazywać dostępne pokazy ustawień regionalnych en_US.utf8
. Próbowałem różnych kombinacji w obu formatach /etc/locale-gen
i LOCALE=
na /etc/rc.conf
, ale nic nie naprawili problem.
Dodatkowe informacje:
% locale -a
C
POSIX
en_US
en_US.iso88591
en_US.utf8
Sugestia Bruce'a Edigera dotycząca ustawienia LANG=C
i LC_ALL=en_US.UTF-8
pracy (w rzeczywistości ustawienie LC_ALL
naprawiło, ustawienie LANG
nie miało znaczenia), ale chciałbym wiedzieć, co się dzieje. Według SUS , LC_ALL zastąpi wszystkie inne zmienne LC_ *, jeśli jest ustawione, a nie null. W moim systemie jest ustawione, ale ma wartość NULL, więc należy je zignorować i zamiast tego użyć innych wartości. To nie jest to, co się dzieje, wydaje się, że aplikacje są dzwoni setlocale
z LC_ALL
, coraz NULL
plecy, i wygeneruje błąd, nawet gdy inne połączenia do setlocale
powrotu dobry ciąg.
Oto górnej części ltrace
od locale
(przewiń w prawo, aby zobaczyć wartości zwracanych funkcja)
% ltrace locale
(0, 0, 0, -1, 0x7f5c1ae44510) = 0x7f5c1ae47140
__libc_start_main(0x401d70, 1, 0x7fff7c8cfbf8, 0x404610, 0x4046a0 <unfinished ...>
setlocale(0, "") = "en_US.UTF-8"
setlocale(5, "") = "en_US.UTF-8"
textdomain("libc") = "libc"
argp_parse(0x607280, 1, 0x7fff7c8cfbf8, 0, 0x7fff7c8cfad4) = 0
setlocale(6, "") = NULL
dcgettext(0, 0x405aa8, 5, 0, 0) = 0x405aa8
error(0, 2, 0x405aa8, 1, 0locale: Cannot set LC_ALL to default locale: No such file or directory)
źródło
locale -a
?.utf8
wLOCALE
aLC_*
, ale podobno.UTF-8
działa tu też ... Co do en-US: nie wydaje się (bez.utf8
) wlocale -a
?export LANG=C
iexport LC_ALL=en_US.UTF-8
zobacz, co się stanie. Mój laptop z linuksem Arch maLOCALE="en_US.UTF-8"
plik /etc/rc.conf i nie mogę ustalić, gdzie mój laptop ustawia LANG = C./etc/locale.conf
? Wygląda na to, że przypadkowo napisałeśLANG=en-US
(z myślnikiem) zamiastLANG=en_US
(z podkreśleniem)./etc/locale.gen
.Odpowiedzi:
Brakuje pliku, który zostałby użyty do domyślnego ustawienia narodowego przy braku
$LANG
lub$LC_ALL
(lub wszystkich bardziej szczegółowych$LC_whatever
) ustawionych.Na starszym glibc jest to / usr / lib / locale / locale-archive. Ponieważ GNU / Linux jest chaotyczny, powinieneś użyć strace, aby określić, które pliki są oczekiwane w poszczególnych wersjach używanych na twoim komputerze:
---------------------- Komentarze dodane 1 dzień później:
„ltrace -S” powinno być w porządku, ponieważ pokazuje wywołania systemowe.
W przeciwnym razie „ltrace” nie jest zbyt pomocne (tzn. Przynosi efekt przeciwny do zamierzonego w porównaniu do strace), ponieważ pokazuje tylko najwyższe wywołania. Są to oczywiste (setlocale (3)), podczas gdy prawdziwy problem zdarza się w libc.
Wygląda na to, że masz zainstalowane surowe dane regionalne, ponieważ działa en_US.UTF-8.
Jeśli tak, to coś takiego powinno rozwiązać Twój problem, ustawiając systemowe ustawienie domyślne:
źródło
sudo localedef -f UTF-8 -i en_US en_US.UTF-8
działa na Raspbian 2018-11-13 Lite.Miałem ten sam problem po skonfigurowaniu
/etc/locale.conf
dzisiaj (dotyczy ostatnich zmian w/etc/rc.conf
. W moim przypadku okazało się, że ustawienia regionalne nie zostały zainstalowane.Sprawdzić
/etc/locale.gen
. Wszystkie ustawienia narodowe, do których odwołują się zmienne środowiskowe, muszą być tam aktywowane (tzn. Nieskomentowane). Po wprowadzeniu zmian uruchom,sudo locale-gen
aby zainstalować wybrane ustawienia regionalne.źródło
Poniższe łącze rozwiązuje mój problem:
generuje plik,
/etc/locale.conf
który rozwiązuje ten problemźródło
Ostatnio miałem podobne problemy, wszystkie nazwy plików Unicode były niepoprawnie wyświetlane, gdy przypadkowo usunąłem plik „LOCALE = en_US.utf8”
/etc/rc.conf
. Więc sprawdziłem skrypt rozruchowy:Prostym rozwiązaniem jest sprawdzić zarówno
DAEMON_LOCALE
iLOCALE
na/etc/rc.conf
upewnij się, że nie był pierwszyno
i drugi nie był pusty.źródło
Może jedno z Twoich ustawień jest nieprawidłowe? Oto moje ustawienia regionalne w celach informacyjnych; nie powodują żadnych błędów (KUbuntu 12.04):
źródło