Làm cách nào để khắc phục sự cố cục bộ của tôi?


506

Tôi nhận được thông báo này mỗi khi tôi làm gì đó như bắt đầu hoặc dừng dịch vụ.

perl: warning: Setting locale failed.   
perl: warning: Please check that your locale settings:   
        LANGUAGE = "en_US:en",   
        LC_ALL = (unset),   
        LC_MESSAGES = "en_US.UTF-8",   
        LANG = "en_US.UTF-8"   
    are supported and installed on your system.   
perl: warning: Falling back to the standard locale ("C").   
locale: Cannot set LC_CTYPE to default locale: No such file or directory   
locale: Cannot set LC_MESSAGES to default locale: No such file or directory   
locale: Cannot set LC_ALL to default locale: No such file or directory   
(Reading database ... 21173 files and directories currently installed.)  
Removing bind9 ...  
 * Stopping domain name service... bind9                                        [ OK ]
Processing triggers for man-db ...   
locale: Cannot set LC_CTYPE to default locale: No such file or directory   
locale: Cannot set LC_MESSAGES to default locale: No such file or directory   
locale: Cannot set LC_ALL to default locale: No such file or directory   

Làm cách nào để khắc phục lỗi này?




Câu trả lời:


513

Lần đầu tiên chạy localeđể liệt kê những địa điểm hiện được xác định cho tài khoản người dùng hiện tại:

$ locale
LANG=C
LANGUAGE=
LC_CTYPE=fi_FI.UTF-8
LC_NUMERIC="C"
LC_TIME="C"
LC_COLLATE=fi_FI.UTF-8
LC_MONETARY="C"
LC_MESSAGES=fi_FI.UTF-8
LC_PAPER="C"
LC_NAME="C"
LC_ADDRESS="C"
LC_TELEPHONE="C"
LC_MEASUREMENT="C"
LC_IDENTIFICATION="C"
LC_ALL=

Sau đó tạo miền địa phương bị thiếu và cấu hình lại các địa điểm để chú ý:

$ sudo locale-gen "en_US.UTF-8"
Generating locales...
  en_US.UTF-8... done
Generation complete.

$ sudo dpkg-reconfigure locales
Generating locales...
  en_US.UTF-8... up-to-date
Generation complete.

Bây giờ bạn sẽ không thấy bất kỳ lỗi nào nữa!


220
không làm việc cho tôi
Umair

4
Điều này đã làm việc cho tôi trên một số hệ thống. Có cách nào để tránh vấn đề này trên các hệ thống mới được cài đặt không?
Brylie Christopher Oxley

13
@UmairAyub có thể bạn có nhiều hơn một địa điểm unkn, hãy thử điều này: for y in $ (locale | cut -d '=' -f 2 | sort | uniq); do locale-gen $ y; xong Nó sẽ tạo ra một miền địa phương cho mỗi định nghĩa bạn có
Ivan Buttinoni

3
Đăng xuất và đăng nhập có thể giúp đỡ
SMMousavi

4
@Umair Có nguy cơ cao về lỗi của con người trong vấn đề này. Hệ thống của bạn được cấu hình en_GBtheo mặc định, nhưng bạn thiết lập nó thành en_US. Bạn phải tự nhận xét en_GBvà bỏ ghi chú en_UStrong /etc/locale.gen. Xem câu trả lời của tôi Askubfox.com/a/790373/25388 trong phần cứng Raspberry Pi 3b và hệ thống Raspbian Jessie.
Léo Léopold Hertz

366

Không có gì được đề xuất ở trên hoạt động trong trường hợp của tôi (Ubuntu Server 12.04LTS). Điều cuối cùng đã giúp là đưa vào tập tin /etc/environment:

LC_ALL=en_US.UTF-8
LANG=en_US.UTF-8

Vì một số lý do, nó đã bị mất. Các đầu ra cho miền địa phương và các lệnh khác xuất hiện giống như các biến được xác định đúng. Nói cách khác, đừng coi tất cả những thứ cơ bản được khai báo ở nơi cần khai báo.


115
Vâng, không ai khác làm việc ngoại trừ cái này, có lẽ do phiên bản cập nhật. Nhưng tôi khá thích đặt điều này trong /etc/default/locale.
Naveed

27
Cập nhật /etc/default/localevà không có thêm cảnh báo. Cảm ơn
ohho

7
Đúng, những người khác đã không làm việc cho tôi. Cái này đã làm. Đây là một lớp lót tôi sử dụng để cập nhật không giám sát này. sudo sh -c "echo 'LC_ALL=en_US.UTF-8\nLANG=en_US.UTF-8' >> /etc/environment"
dman

12
@ user163207 giải pháp của bạn không chính xác vì nó nối thêm (thay vì ghi đè), đó không phải là tệp được đề xuất và echocần được chạy với giải thích thoát dấu gạch chéo ngược được bật. Điều này giống như của bạn nhưng với bản sửa lỗi đã nói ở trên:sh -c "echo -e 'LANG=en_US.UTF-8\nLC_ALL=en_US.UTF-8' > /etc/default/locale"
glarrain

13
ĐỪNG QUÊN ĐĂNG KÝ VÀ ĐĂNG KÝ!
SMMousavi

149

Chúng sẽ biến mất sau khi ban hành:

sudo locale-gen en_US en_US.UTF-8
sudo dpkg-reconfigure locales 

dpkg-reconfigurecấu hình lại các gói sau khi chúng đã được cài đặt. Truyền cho nó tên của gói hoặc gói để cấu hình lại. Nó sẽ hỏi các câu hỏi cấu hình, giống như khi gói được cài đặt lần đầu tiên.


9
Tôi rất vui vì những rắc rối của tôi một năm trước đã giúp bạn khắc phục điều này;)
Rinzwind

1
Không nên tạo ngôn ngữ này theo mặc định? Ý tôi là en, en_AU, en_CA, en_GBcó mặt theo mặc định nhưng không en_US?
Daniel Serodio

@Rinzwind Cảm ơn rất nhiều vì nỗ lực của bạn! Tôi xin lỗi; Tôi nên nói câu hỏi của tôi tốt hơn. Điều tôi muốn hỏi là: Tại sao cần phải cấu hình lại gói địa phương sau khi tạo các địa điểm mới? Dường như với tôi như các công việc địa phương ngay cả khi không có dpkg-reconfigure.
Victor

Sử dụng Ubuntu 14.04, trong bộ chứa Docker, vì vậy không có gì được thiết lập. Django makemessagecần điều này. Điều này làm việc hoàn hảo! cảm ơn.
Justin

1
Tôi nhận ra rằng raspbian nằm ngoài phạm vi ở đây, nhưng tôi nghĩ tôi đã đề cập rằng tôi phải đăng xuất và đăng nhập trước khi LC_ALLđược đặt đúng.
MatrixManAtYrService

119

Chỉ cần thêm các mục sau vào .bashrctệp của bạn (giả sử bạn đang sử dụng bash)

export LC_ALL="en_US.UTF-8"

2
Bản sửa lỗi ngọt ngào này đã làm việc với tôi trên hình ảnh Amazon-EC2 của tôi (Đang chạy RHEL AMI mặc định của họ) Cảm ơn rất nhiều! :)
gideon

Cái này hoạt động với tôi với hình ảnh Ubuntu 12.04 của Digitalocean.
Inan

2
Điều này đã khắc phục vấn đề của tôi. Tôi phải đặt một câu hỏi: tại sao LC_ALL không được đặt bởi lệnh locale-gen như các câu trả lời khác đã nói ở trên câu hỏi này?
alexserver

Thật kỳ lạ, tất cả các giải pháp trên không làm việc cho tôi nhưng điều này đã làm! Sau khi xuất khẩu LC_ALLcuối cùng tôi cũng có thể sử dụng sudo dpkg-reconfigure locales.
sobi3ch

cuối cùng sau khi thử rất nhiều mánh khóe, đây là cách làm việc với tôi trên kubfox 14.04.3 lts. cảm ơn!
Giô-na

94

Đây là một vấn đề phổ biến nếu bạn đang kết nối từ xa, vì vậy giải pháp là không chuyển tiếp ngôn ngữ của bạn. Chỉnh sửa /etc/ssh/ssh_configvà nhận xét ra SendEnv LANG LC_*dòng.


6
Tôi đã thử các câu trả lời khác, nhưng quên rằng tôi đang kết nối từ xa cho đến khi tôi thấy câu trả lời của bạn. Các địa điểm khác nhau trên máy chủ và máy khách ssh đã gây ra sự cố.
Hiếu

2
Trên OSX (kết nối với Ubuntu), đó là/etc/ssh_config
Michiel de Mare

Một lớp lót để làm điều này: sed -e '/SendEnv/ s/^#*/#/' -i /etc/ssh/ssh_config(hữu ích cho việc cung cấp máy chủ)
Albin

Tôi không thể đặt LC_ALL trên máy tính cục bộ nhưng nó đã khắc phục sự cố của tôi với máy chủ từ xa, cảm ơn.
Alexander Shlenchack

1
Có lẽ đáng lưu ý rằng bạn phải chỉnh sửa tệp trên máy cục bộ chứ không phải từ xa.
Clashsoft

72

Có một lệnh cho điều đó:

sudo update-locale LC_ALL=en_US.UTF-8 LANG=en_US.UTF-8

Nó cập nhật /etc/default/localevới các giá trị được cung cấp.


4
Điều này hợp pháp! Đừng quên đăng xuất / tải lại vỏ của bạn, nếu không bạn sẽ không thấy các thay đổi. Đừng quên kiểm tra câu trả lời đã được phê duyệt để tạo và cấu hình lại các địa điểm.
Erik Zivkovic

1
Chạy localevẫn không hiển thị bất kỳ giá trị utf.
Cerin

@Cerin: Myybe, một cuộc gọi đến locale-genbị mất. Trước đây, người ta phải làm apt-get install locales.
koppor

1
Điều này sẽ không thay đổi LANG cho shell gốc trên Ubuntu 16.04, vì nó được ghi đè trong /root/.profile.
Willem

32

Điều làm việc cho tôi vào ngày 12.10 là đây:

apt-get install language-pack-en-base  

Điều này là sau khi dpkg-reconfigure localessản xuất không có kết quả.


2
Đây là câu trả lời tốt nhất. Không phải là địa phương của tôi được thiết lập không chính xác, nhưng chúng không thực sự tồn tại. Tôi nghĩ điều này cũng tương tự như vấn đề của OP ("Không có tệp hoặc thư mục như vậy" khá rõ ràng nếu ngôn ngữ của bạn được đặt đúng!).
Đột phá

1
Tôi đã gặp sự cố OP mỗi lần tôi sử dụng apt-get trên Ubuntu 12.04 Điều này đã giải quyết hoàn hảo mà không phải chỉnh sửa bất kỳ tệp nào.
Deepend

"ngôn ngữ-pack-en-base đã là phiên bản mới nhất."
karlingen

Đăng xuất và đăng nhập có thể giúp đỡ
SMMousavi

Làm việc cho tôi trong một Ubuntu trên chrootdebian. Cảm ơn :)
Wyatt8740

18

Đừng quên thoát phiên SSH (hoặc X11) của bạn bằng cách thoát và đăng nhập lại. Tất cả những đề xuất này không hiệu quả với tôi trừ khi tôi đăng nhập lại ....


2
Nhận xét này sẽ nhận được nhiều hơn hoặc ít nhất là thực tế cần phải được làm nổi bật trong mỗi câu trả lời.
ni8mr

11

Đối với Ubuntu 12.10, không có cách nào ở trên hoạt động ngoại trừ giải pháp của ratzs. Tôi khuyên bạn nên thêm phần này vào tệp /etc/bash.bashrc của bạn:

export LC_ALL="en_ZA.UTF-8"
export LC_CTYPE="en_ZA.UTF-8"

Trong tất cả các giải pháp trên. Đây là điều duy nhất làm việc cho tôi.
JohnnyQ

11

Tôi bị kẹt trong một trạng thái kỳ lạ nơi máy cục bộ của tôi được đặt esvà do đó máy từ xa (thông qua vagrant) đã được cung cấp ở trạng thái không xử lý. Do đó, tôi phải sử dụng hướng dẫn export=chỉ để tạo điều kiện thành công dpkg-reconfigure. Sau đó hệ thống vẫn ổn.

export LC_ALL="en_US.UTF-8"
sudo dpkg-reconfigure locales

Tốt! Do dpkg-recofigurehiển thị mojibake.
Phương Đông

9

Tôi đã viết một tập lệnh bash để khắc phục vấn đề trên. Các câu trả lời ở trên rất hữu ích nhưng việc đặt các biến cục bộ bằng cách đơn giản là xuất các giá trị trong biến shell sẽ chỉ hoạt động cho một phiên. Tôi đã giải quyết vấn đề này vĩnh viễn bằng cách xuất các biến cục bộ trong tệp .bash_profile. Bạn cũng có thể sử dụng /etc/profiletập tin thay vì .bash_profile.

echo "export LANGUAGE=en_US.UTF-8
export LANG=en_US.UTF-8
export LC_ALL=en_US.UTF-8">>~/.bash_profile

Đừng quên sourcecác .bash_profilevà làm theo các kịch bản trong thiết lập dễ dàng.


8

Bạn co thể thử:

export LANGUAGE=ru_RU.UTF-8
export LC_CTYPE=ru_RU.UTF-8
export LC_NUMERIC=ru_RU.UTF-8
export LC_TIME=ru_RU.UTF-8
export LC_COLLATE=ru_RU.UTF-8
export LC_MONETARY=ru_RU.UTF-8
export LC_MESSAGES=ru_RU.UTF-8
export LC_PAPER=ru_RU.UTF-8
export LC_NAME=ru_RU.UTF-8
export LC_ADDRESS=ru_RU.UTF-8
export LC_TELEPHONE=ru_RU.UTF-8
export LC_MEASUREMENT=ru_RU.UTF-8
export LC_IDENTIFICATION=ru_RU.UTF-8
export LC_ALL=ru_RU.UTF-8

ru_RUmã quốc gia của bạn ở đâu


7

Câu trả lời được chấp nhận hiện tại là không đủ trong chiến lược khắc phục sự cố vì bạn có thể có lỗi của con người. Bạn thiết lập hệ thống của mình en_USnhưng bạn đã en_GBkích hoạt /etc/locale.gennhư tôi đã có trong chuỗi ở đây cho Raspberry Pi 3b. Bạn nên kích hoạt tất cả các địa điểm đã sử dụng của mình /etc/locale.gen.

Tôi en_GB.UTF-8 UTF-8chỉ kích hoạt trong /etc/locale.gen. Tôi chỉ nên có ở đó en_US.UTF-8 UTF-8vì các lệnh khác chạy cho nó. Vì vậy, tôi đã nhận xét GB và Hoa Kỳ chưa hoàn thành, và mọi thứ đều hoạt động ngay bây giờ

masi@raspberrypi:~ $ sudo vim /etc/locale.gen

masi@raspberrypi:~ $ sudo locale-gen 
Generating locales (this might take a while)...
  en_US.UTF-8... done
Generation complete.

masi@raspberrypi:~ $ sudo a2enmod rewrite && a2enmod headers && a2enmod ssl
Module rewrite already enabled
Module headers already enabled
Considering dependency setenvif for ssl:
Module setenvif already enabled
Considering dependency mime for ssl:
Module mime already enabled
Considering dependency socache_shmcb for ssl:
Module socache_shmcb already enabled
Module ssl already enabled

Bây giờ, tôi không nhận được những lỗi địa phương với bất kỳ lệnh nào.

Hệ thống: Raspbian Jessie
Phần cứng: Raspberry Pi 3b


6

Như đã nói ở đây trong Debian Wiki , bạn có thể chỉnh sửa /etc/locale.genvà thêm tất cả các ngôn ngữ (hoặc không chú ý đến chúng, tôi có một danh sách tất cả các địa điểm trừ tất cả các địa điểm tôi sử dụng làm nhận xét) mà bạn muốn có hỗ trợ cho hệ thống của mình. Sau đó, thực hiện

sudo dpkg-reconfigure locales

để cập nhật các địa điểm trên hệ thống của bạn. Bây giờ, tất cả các địa điểm bạn đã thêm / không ghi chú /etc/locale.genđều có sẵn trên hệ thống của bạn mà không có bất kỳ cảnh báo nào.


3

Nếu bạn sử dụng môi trường KDE, hãy kiểm tra setlocale.shtệp trong ~/.kde/env/:

$ cat ~/.kde/env/setlocale.sh 
export LANG=en_US.UTF-8
export LANGUAGE=en_US:ru:en

Điều này đã lưu ass của tôi .... cảm ơn bạn! Không thể tin được có bao nhiêu địa điểm mà crap địa phương này được đặt ở ... và làm thế nào KDE có thể xoay xở mọi thứ bằng cách trộn hai địa điểm khác nhau của tôi (is_IS cho vị trí, tiền, v.v. và en_EN cho ngôn ngữ thành một ngôn ngữ không tồn tại miền địa phương)! Grmpfh.
StFS

2
  1. Bạn cũng có thể cần chạy sudo dpkg-reconfigurecho ứng dụng bạn đã cài đặt trong khi cài đặt "ngôn ngữ" không hợp lệ / không khớp.

    Trong khi cài đặt hệ thống không chính xác, tôi đã cài đặt vim. Sau khi hệ thống locale đã được cố định, tôi thấy một tình huống vimđược hiển thị ký tự utf-8 sai biểu tượng như kỳ lạ trong khi nanolessđã cho họ thấy một cách chính xác. Đang chạy

    sudo dpkg-reconfigure vim
    

    xuất hiện để khắc phục sự cố sau khi cài đặt hệ thống được khắc phục.

  2. Tôi cũng nhận thấy điều tương tự như đã đề cập: Bạn có thể cần ngắt kết nối / kết nối lại SSH để thực hiện các thay đổi.


2

Thêm văn bản sau để ~/.profilelàm việc cho tôi:

export LANGUAGE=en_US.UTF-8
export LC_ALL=en_US.UTF-8

Tôi đang sử dụng máy chủ 64 bit Ubuntu 16.04 LTS trên Linode.


2

Điều này làm việc cho tôi khi tôi gặp vấn đề tương tự (dựa trên giải pháp được cung cấp bởi dman ):

sudo sh -c "echo -e 'LC_ALL=en_US.UTF-8\nLANG=en_US.UTF-8' >> /etc/environment"

Tôi không chắc chắn làm thế nào để thêm url vào bình luận. @EliahKagan
pythonhunter

1
Không có vấn đề gì - ngày / dấu thời gian bên cạnh một nhận xét là những gì liên kết trực tiếp đến nó. ... Vì vậy, tôi đã nhận thấy bình luận của glarrain (kêu gọi >thay vì >>) có vẻ như là một câu trả lời cho dman. Tôi thực sự không biết cách nào là đúng hay tốt nhất, nhưng nếu bạn có cái nhìn sâu sắc về vấn đề này, bạn có thể mở rộng câu trả lời này với nhiều thông tin hơn. (Bạn không cần phải mặc dù.)
Eliah Kagan
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.