ฉันจะแก้ไขปัญหาภาษาของฉันได้อย่างไร


506

ฉันได้รับข้อความนี้ทุกครั้งที่ฉันทำอะไรบางอย่างเช่นเริ่มหรือหยุดบริการ

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   

ฉันจะแก้ไขข้อผิดพลาดนี้ได้อย่างไร


ที่เกี่ยวข้อง: วิธีตั้งค่าภาษา
Lucio


การแก้ไขที่ง่ายและถาวรสำหรับผู้ใช้ทุกคน: askubuntu.com/questions/881742/…
Galvani

คำตอบ:


513

เรียกใช้ครั้งแรกlocaleเพื่อแสดงรายการที่ตั้งปัจจุบันสำหรับบัญชีผู้ใช้ปัจจุบัน:

$ 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=

จากนั้นสร้างสถานที่ที่หายไปและกำหนดค่าสถานที่ใหม่ให้สังเกต:

$ 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.

ตอนนี้คุณจะไม่เห็นข้อผิดพลาดอีกต่อไป!


220
ไม่ได้ผลสำหรับฉัน
Umair

4
สิ่งนี้ได้ผลกับฉันในหลายระบบ มีวิธีหลีกเลี่ยงปัญหานี้ในระบบที่ติดตั้งใหม่หรือไม่?
Brylie Christopher Oxley

13
@UmairAyub อาจเป็นเพราะคุณมีสถานที่ที่ไม่รู้จักมากกว่าหนึ่งแห่งลองใช้วิธีนี้: สำหรับ y ใน $ (locale | cut -d '=' -f 2 | sort | uniq); do locale-gen $ y; เสร็จแล้วมันจะสร้างสถานที่สำหรับแต่ละคำนิยามที่คุณมี
Ivan Buttinoni

3
การออกจากระบบและการเข้าสู่ระบบอาจช่วย
SMMousavi

4
@Umair มีความเสี่ยงสูงที่จะเกิดข้อผิดพลาดจากมนุษย์ในปัญหานี้ ระบบของคุณมีการกำหนดค่าen_GBตามค่าเริ่มต้น en_USแต่คุณตั้งขึ้นเพื่อ คุณจะต้องแสดงความคิดเห็นด้วยตนเองen_GBและ uncomment ในen_US /etc/locale.genดูคำตอบของฉันaskubuntu.com/a/790373/25388ในฮาร์ดแวร์ Raspberry Pi 3b และระบบ Raspbian Jessie
LéoLéopold Hertz 준영

366

ไม่มีอะไรแนะนำข้างต้นทำงานในกรณีของฉัน (เซิร์ฟเวอร์ Ubuntu 12.04LTS) สิ่งที่ช่วยได้ในที่สุดก็นำไปที่ไฟล์/etc/environment:

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

ด้วยเหตุผลบางอย่างมันหายไป เอาต์พุตสำหรับโลแคลและคำสั่งอื่น ๆ ดูเหมือนว่าตัวแปรถูกกำหนดไว้อย่างเหมาะสม กล่าวอีกนัยหนึ่งไม่ได้รับอนุญาตทุกสิ่งพื้นฐานถูกประกาศในที่ที่ควรจะประกาศ


115
ใช่ไม่มีใครทำงานได้เลยยกเว้นรุ่นนี้อาจเป็นเพราะรุ่นที่อัปเดตแล้ว แต่ฉันชอบที่จะใส่มันลง/etc/default/localeไป
Naveed

27
อัปเดต/etc/default/localeและไม่มีคำเตือนเพิ่มเติม ขอบคุณ
ohho

7
ใช่คนอื่นไม่ได้ทำงานให้ฉัน สิ่งนี้ทำ นี่คือหนึ่งซับที่ฉันใช้สำหรับการอัพเดตแบบไม่ต้องใส่ข้อมูล sudo sh -c "echo 'LC_ALL=en_US.UTF-8\nLANG=en_US.UTF-8' >> /etc/environment"
dman

12
@ user163207 โซลูชันของคุณไม่ถูกต้องเนื่องจากมันผนวก (แทนที่จะเขียนทับ) ไม่ใช่ไฟล์ที่แนะนำและechoจำเป็นต้องเรียกใช้โดยการตีความการเปิดใช้เครื่องหมายแบคสแลช นี่เป็นสิ่งเดียวกับคุณ แต่ได้รับการแก้ไขแล้วดังต่อไปนี้:sh -c "echo -e 'LANG=en_US.UTF-8\nLC_ALL=en_US.UTF-8' > /etc/default/locale"
ทำให้ยุ่งเหยิง

13
อย่าลืมเข้าสู่ระบบและเข้าสู่ระบบอีกครั้ง!
SMMousavi

149

พวกเขาควรหายไปหลังจากออก:

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

dpkg-reconfigureกำหนดค่าแพ็กเกจใหม่หลังจากติดตั้งแล้ว ส่งชื่อของแพ็กเกจหรือแพ็กเกจเพื่อกำหนดค่าใหม่ มันจะถามคำถามการตั้งค่าเช่นเดียวกับเมื่อติดตั้งแพคเกจครั้งแรก


9
ฉันดีใจที่ปัญหาของฉันเมื่อปีที่แล้วช่วยให้คุณแก้ไขปัญหานี้ได้)
Rinzwind

1
ไม่ควรสร้างตำแหน่งที่ตั้งนี้ตามค่าเริ่มต้นหรือไม่ ผมหมายถึงen, en_AU, en_CA, en_GBที่มีอยู่โดยค่าเริ่มต้น แต่ไม่en_US?
Daniel Serodio

@ Rinzwind ขอบคุณมากสำหรับความพยายามของคุณ! ฉันขอโทษ; ฉันควรถามคำถามของฉันให้ดีกว่านี้ สิ่งที่ฉันหมายถึงการถามคือ: เหตุใดจึงจำเป็นต้องกำหนดค่าแพคเกจตำแหน่งที่ตั้งใหม่หลังจากสร้างตำแหน่งที่ตั้งใหม่ ดูเหมือนว่าฉันจะสามารถทำงานได้แม้ไม่มีdpkg-reconfigureสถานที่
วิกเตอร์

การใช้ Ubuntu 14.04 ในคอนเทนเนอร์ Docker ดังนั้นจึงไม่มีการตั้งค่าใด ๆ Django makemessageต้องการสิ่งนี้ มันทำงานได้อย่างสมบูรณ์แบบ! ขอบคุณ
Justin

1
ฉันรู้ว่า raspbian อยู่นอกขอบเขตที่นี่ แต่ฉันคิดว่าฉันพูดถึงว่าฉันต้องออกจากระบบและเข้าสู่ระบบก่อนที่จะLC_ALLถูกตั้งค่าอย่างถูกต้อง
MatrixManAtYrService

119

เพียงเพิ่มสิ่งต่อไปนี้ใน.bashrcไฟล์ของคุณ(สมมติว่าคุณกำลังใช้ bash)

export LC_ALL="en_US.UTF-8"

2
โปรแกรมฟิกซ์นี้น่าใช้กับอเมซอนของฉันในภาพ Amazon-EC2 (ใช้งาน RHEL AMI ที่เป็นค่าเริ่มต้น) ขอบคุณมาก! :)
gideon

อันนี้ใช้ได้กับฉันด้วยภาพ Ubuntu 12.04 ของ digitalocean
Inan

2
นี่เป็นการแก้ไขปัญหาของฉัน ฉันต้องถามคำถาม: ทำไม LC_ALL ถึงไม่ได้ถูกกำหนดโดยคำสั่ง locale-gen ตามคำตอบอื่น ๆ ที่กล่าวไว้ข้างต้น?
alexserver

แปลกวิธีแก้ปัญหาทั้งหมดข้างต้นไม่ได้ผลสำหรับฉัน แต่อันนี้ทำได้! หลังจากที่การส่งออกในที่สุดผมก็สามารถใช้LC_ALL sudo dpkg-reconfigure locales
sobi3ch

ในที่สุดหลังจากที่ได้ลองใช้เทคนิคจำนวนมากนี่เป็นหนึ่งในเครื่องมือที่ใช้งานได้สำหรับฉันบน kubuntu 14.04.3 lts ขอบคุณ!
Jonah

94

นี่เป็นปัญหาที่พบบ่อยหากคุณกำลังเชื่อมต่อจากระยะไกลดังนั้นวิธีแก้ไขคือไม่ส่งต่อตำแหน่งของคุณ แก้ไข/etc/ssh/ssh_configและแสดงความคิดเห็นSendEnv LANG LC_*บรรทัด


6
ฉันพยายามคำตอบอื่น ๆ แต่ลืมไปแล้วว่าฉันกำลังเชื่อมต่อจากระยะไกลจนกว่าฉันจะเห็นคำตอบของคุณ ตำแหน่งที่ตั้งอื่นบนเซิร์ฟเวอร์ ssh และไคลเอนต์ก่อให้เกิดปัญหา
Hieu

2
บน OSX (เชื่อมต่อกับ Ubuntu) อยู่ที่/etc/ssh_config
Michiel de Mare

หนึ่งซับการทำเช่นนี้: sed -e '/SendEnv/ s/^#*/#/' -i /etc/ssh/ssh_config(มีประโยชน์สำหรับการจัดเตรียมเซิร์ฟเวอร์)
บิน

ฉันไม่สามารถตั้งค่า LC_ALL บนเครื่อง locale ได้ แต่มันแก้ไขปัญหาของฉันกับเซิร์ฟเวอร์ระยะไกลได้ขอบคุณ
Alexander Shlenchack

1
น่าจะเป็นที่น่าสังเกตว่าคุณต้องแก้ไขไฟล์ในเครื่องท้องถิ่นไม่ใช่รีโมท
Clashsoft

72

มีคำสั่งสำหรับสิ่งนั้น:

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

มันอัพเดต/etc/default/localeด้วยค่าที่ให้


4
นี่เป็นสิ่งที่ถูกต้อง! อย่าลืมออกจากระบบ / โหลดกระสุนของคุณมิฉะนั้นคุณจะไม่เห็นการเปลี่ยนแปลง อย่าลืมตรวจสอบคำตอบที่ได้รับการอนุมัติสำหรับการสร้างและกำหนดค่าตำแหน่งที่ตั้งใหม่
Erik Zivkovic

1
การทำงานlocaleยังคงไม่แสดงค่า utf ใด ๆ
Cerin

@Cerin: Myybe สายlocale-genขาดหายไป apt-get install localesก่อนที่จะมีใครที่จะทำ
koppor

1
สิ่งนี้จะไม่เปลี่ยน LANG สำหรับรูทเชลล์ใน Ubuntu 16.04 เนื่องจากมันถูกเขียนทับใน /root/.profile
วิลเล็ม

32

สิ่งที่ทำงานให้ฉันในวันที่ 12.10 คือ:

apt-get install language-pack-en-base  

นี่คือหลังจากที่dpkg-reconfigure localesไม่มีผลลัพธ์


2
นี่คือคำตอบที่ดีที่สุด ไม่ใช่ว่าตำแหน่งที่ตั้งของฉันตั้งค่าไม่ถูกต้อง แต่ไม่มีอยู่จริง ฉันคิดว่านี่คล้ายกับปัญหาของ OP เช่นกัน ("ไม่มีไฟล์หรือไดเรกทอรีดังกล่าว" ค่อนข้างชัดเจนหากสถานที่ตั้งของคุณถูกต้อง!)
Breakthrough

1
ฉันได้รับปัญหา OPs ตลอดเวลาที่ฉันใช้ apt-get บน Ubuntu 12.04 วิธีนี้แก้ไขได้อย่างสมบูรณ์แบบโดยไม่ต้องแก้ไขไฟล์ใด ๆ
Deep

"language-pack-en-base เป็นรุ่นล่าสุดแล้ว"
karlingen

การออกจากระบบและการเข้าสู่ระบบอาจช่วย
SMMousavi

ทำงานให้ฉันใน Ubuntu chrootภายใต้เดเบียน ขอบคุณ :)
Wyatt8740

18

อย่าลืมออกจากเซสชัน SSH ของคุณ (หรือ X11 ของคุณ) โดยออกและเข้าสู่ระบบอีกครั้ง คำแนะนำเหล่านี้ใช้ไม่ได้สำหรับฉันเว้นแต่ฉันจะลงชื่อเข้าใช้อีกครั้ง


2
ความคิดเห็นนี้ควรได้รับ upvotes มากขึ้นหรืออย่างน้อยก็ต้องเน้นความจริงในทุกคำตอบ
ni8mr

11

สำหรับ Ubuntu 12.10 ไม่ได้ผลใด ๆ ข้างต้นยกเว้นการแก้ปัญหาของ ratzs ฉันแนะนำให้เพิ่มสิ่งนี้ลงในไฟล์ /etc/bash.bashrc ของคุณ:

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

จากคำตอบทั้งหมดข้างต้น นี่เป็นสิ่งเดียวที่ทำงานได้สำหรับฉัน
JohnnyQ

11

ฉันติดอยู่ในสถานะแปลก ๆ ที่มีการตั้งค่าเครื่องในเครื่องของฉันesและเพื่อให้เครื่องระยะไกล (ผ่านvagrant) ได้รับการจัดสรรในสถานะไม่จัดการ ดังนั้นผมจึงมีการใช้คู่มือการใช้งานเท่านั้นที่จะอำนวยความสะดวกที่ประสบความสำเร็จexport= dpkg-reconfigureจากนั้นระบบก็ใช้งานได้

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

พิเศษสุด! เนื่องจากจะdpkg-recofigureแสดง mojibake
โอเรียนท์

9

ฉันเขียนสคริปต์ทุบตีเพื่อแก้ไขปัญหาข้างต้นคำตอบข้างต้นมีประโยชน์ แต่การตั้งค่าตัวแปรโลแคลโดยเพียงแค่ส่งออกค่าในตัวแปรเชลล์จะทำงานสำหรับเซสชันเท่านั้น ฉันแก้ไขปัญหานี้อย่างถาวรด้วยการส่งออกตัวแปรโลแคลในไฟล์. bash_profile นอกจากนี้คุณยังสามารถใช้ไฟล์แทน/etc/profile.bash_profile

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

อย่าลืมให้และทำตามสคริปต์ในการติดตั้งง่ายsource.bash_profile


8

คุณสามารถลอง:

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_RUรหัสประเทศของคุณอยู่ที่ไหน


7

คำตอบที่ยอมรับในปัจจุบันนั้นไม่เพียงพอในกลยุทธ์การแก้ไขปัญหาเนื่องจากคุณสามารถมีข้อผิดพลาดของมนุษย์ คุณตั้งค่าระบบของคุณเป็นen_USแต่คุณได้en_GBเปิดใช้งาน/etc/locale.genแบบที่ฉันมีในเธรดที่นี่สำหรับ Raspberry Pi 3b คุณควรจะได้ทุก/etc/locale.genสถานที่ใช้เปิดใช้งานใน

ผมได้เปิดใช้งานเฉพาะในen_GB.UTF-8 UTF-8 /etc/locale.genฉันควรจะเปิดใช้งานที่นั่นเพียงen_US.UTF-8 UTF-8เพราะคำสั่งอื่นใช้สำหรับมัน ดังนั้นฉันจึงแสดงความคิดเห็น GB และไม่ใส่เครื่องหมายสหรัฐและทุกอย่างทำงานตอนนี้

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

ตอนนี้ฉันไม่ได้รับข้อผิดพลาดที่เกิดเหตุด้วยคำสั่งใด ๆ

ระบบ: Raspbian Jessie
Hardware: Raspberry Pi 3b


6

ดังที่ได้กล่าวไว้ใน Debian Wikiคุณสามารถแก้ไข/etc/locale.genและเพิ่มตำแหน่งที่ตั้งทั้งหมด (หรือยกเลิกการใส่เครื่องหมายข้อคิดเห็นฉันมีรายการตำแหน่งที่ตั้งทั้งหมด แต่ทั้งหมดยกเว้นที่ฉันใช้เป็นความคิดเห็น) ที่คุณต้องการได้รับการสนับสนุนในระบบของคุณ จากนั้นดำเนินการ

sudo dpkg-reconfigure locales

เพื่ออัปเดตภาษาในระบบของคุณ ตอนนี้ทุกโลแคลที่คุณเพิ่ม / ไม่ใส่คอมเม้นต์/etc/locale.genจะพร้อมใช้งานบนระบบของคุณโดยไม่มีคำเตือนใด ๆ


3

หากคุณใช้สภาพแวดล้อมของ KDE ให้ตรวจสอบsetlocale.shไฟล์ใน~/.kde/env/:

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

สิ่งนี้ช่วยชีวิตฉันไว้ .... ขอบคุณ! ไม่น่าเชื่อว่ามีการตั้งค่าอึในสถานที่นี้จำนวนเท่าใดและ KDE ในโลกจะจัดการสิ่งต่าง ๆ ได้อย่างไรโดยผสมสองภาษาที่แตกต่างกันของฉัน (is_IS สำหรับสถานที่ตั้งเงิน ฯลฯ และ en_EN สำหรับภาษาให้เป็น is_EN ที่ไม่มีอยู่จริง สถานที่เกิดเหตุ)! Grmpfh
StFS

2
  1. คุณอาจต้องเรียกใช้sudo dpkg-reconfigureแอปพลิเคชันที่คุณติดตั้งในขณะที่การตั้งค่า "สถานที่" ไม่ถูกต้อง / ไม่ตรงกัน

    vimในขณะที่ภาษาของระบบถูกติดตั้งไม่ถูกต้องผมติดตั้ง ต่อมาเมื่อภาษาของระบบได้รับการแก้ไขฉันเห็นสถานการณ์ที่vimแสดงอักขระ utf-8 ไม่ถูกต้องเป็นสัญลักษณ์แปลก ๆ ในขณะที่nanoและlessแสดงอย่างถูกต้อง วิ่ง

    sudo dpkg-reconfigure vim
    

    ดูเหมือนว่าจะแก้ไขปัญหาหลังจากการตั้งค่าระบบได้รับการแก้ไข

  2. ฉันยังสังเกตเห็นสิ่งเดียวกันกับที่กล่าวไปแล้ว: คุณอาจต้องตัดการเชื่อมต่อ / เชื่อมต่อ SSH อีกครั้งเพื่อให้สามารถมองเห็นการเปลี่ยนแปลงได้


2

การเพิ่มข้อความต่อไปนี้~/.profileสำหรับฉัน:

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

ฉันใช้ Ubuntu 64.0 LTS 64- บิตเซิร์ฟเวอร์บน Linode


2

สิ่งนี้ทำงานได้สำหรับฉันเมื่อฉันมีปัญหาเดียวกัน (ขึ้นอยู่กับวิธีการแก้ปัญหาโดย dman ):

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

ฉันไม่แน่ใจว่าจะเพิ่ม URL ในความคิดเห็นได้อย่างไร @EliahKagan
pythonhunter

1
ไม่มีปัญหา - วันที่ / เวลาประทับถัดจากความคิดเห็นคือสิ่งที่ลิงก์ไปยังโดยตรง ... ดังนั้นฉันสังเกตเห็นความคิดเห็นของ glarrain (เรียก>แทน>>) ดูเหมือนว่าจะเป็นการตอบกลับของ dman จริง ๆ แล้วฉันไม่ทราบว่าวิธีใดถูกหรือดีที่สุด แต่ถ้าคุณมีความเข้าใจในเรื่องนี้คุณสามารถขยายคำตอบนี้ด้วยข้อมูลเพิ่มเติม (คุณไม่จำเป็นต้องทำ)
Eliah Kagan
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.