天天看點

簡單解決Ubuntu修改locale的問題

本文針對的問題是“ubuntu 安裝中文語言包”“ubuntu server中文問題”,“ubuntu更改語言環境”,“ubuntu locale的設定”,“cannot change locale (zh_cn.utf-8)”,“linux中文亂碼”,“linux字元集的修改”,“linux亂碼的解決辦法”等問題,提供一站式解決。如果系統顯示中文異常,例如出現顯示中文亂碼等,可以參考本文章。關于centos系統的修改辦法,請參考文章末尾的描述。

問題描述

終端顯示中文正常,應用程式裡面顯示中文異常。

錯誤表現

1

<code>$ </code><code>sudo</code> <code>dpkg-reconfigure locales</code>

perl: warning: setting locale failed.     

perl: warning: please check that your locale settings:     

    language = "zh_cn:zh:en_us:en",     

    lc_all = "zh_cn.utf-8",     

    lang = "zh_cn.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     

/bin/bash: warning: setlocale: lc_all: cannot change locale (zh_cn.utf-8)     

generating locales...     

  en_us.utf-8... /usr/sbin/locale-gen: line 177: warning: setlocale: lc_all: cannot change locale (zh_cn.utf-8)     

up-to-date     

generation complete.

<code>$ </code><code>man</code> <code>locale</code>

man: can't set the locale; make sure $lc_* and $lang are correct

<code>$ locale</code>

lang=zh_cn.utf-8     

language=zh_cn:zh:en_us:en     

lc_ctype="zh_cn.utf-8"     

lc_numeric="zh_cn.utf-8"     

lc_time="zh_cn.utf-8"     

lc_collate="zh_cn.utf-8"     

lc_monetary="zh_cn.utf-8"     

lc_messages="zh_cn.utf-8"     

lc_paper="zh_cn.utf-8"     

lc_name="zh_cn.utf-8"     

lc_address="zh_cn.utf-8"     

lc_telephone="zh_cn.utf-8"     

lc_measurement="zh_cn.utf-8"     

lc_identification="zh_cn.utf-8"     

lc_all=

<code>$ localectl list-locales</code>

c.utf-8     

en_us.utf8     

zh_cn.utf8

問題解決辦法

要想達到應用程式中正常顯示中文字元的目的,要下面的三個變量應該如下,

2

3

<code>lang=zh_cn.utf-8   </code>

<code>language=zh_cn:zh:en_us:en   </code>

<code>lc_all=lc_all=zh_cn.utf-8</code>

但問題在于“lc_all to default locale: no such file or directory”和“lc_all: cannot change locale (zh_cn.utf-8) ”,是以重新安裝中文語言包。

執行下面指令

<code>sudo</code> <code>apt-get -y </code><code>install</code> <code>language-pack-zh-hans</code>

<code>sudo</code> <code>apt-get -y </code><code>install</code> <code>language-pack-zh-hans language-pack-zh-hans-base</code>

如果想支援繁體字,則執行

<code>sudo</code> <code>apt-get -y </code><code>install</code> <code>language-pack-zh-hant</code>

<code>sudo</code> <code>apt-get -y </code><code>install</code> <code>language-pack-zh-hant language-pack-zh-hant-base</code>

再執行locale指令設定目前locale環境

<code>locale</code>

相關的檔案和參考

相關手冊:man locale(1), locale(5), locale(7)

相關檔案:/usr/share/i18n/supported

相關指令:

locale --all-locales 列出目前系統中所有支援的locale

localectl list-locales 列出目前系統中所有可用的locale

localectl set-locales locale... 修改目前系統中的locale,與locale功能相同,與export上文提到的三個變量相同

對于centos,可以直接編輯/etc/sysconfig/i18n檔案,将lang="en_us.utf-8"設定成lang="zh_cn.utf-8",除此之外,centos下locale指令的顯示結果如下:

<code># locale</code>

lang=en_us.utf-8    

lc_ctype="en_us.utf-8"    

lc_numeric="en_us.utf-8"    

lc_time="en_us.utf-8"    

lc_collate="en_us.utf-8"    

lc_monetary="en_us.utf-8"    

lc_messages="en_us.utf-8"    

lc_paper="en_us.utf-8"    

lc_name="en_us.utf-8"    

lc_address="en_us.utf-8"    

lc_telephone="en_us.utf-8"    

lc_measurement="en_us.utf-8"    

lc_identification="en_us.utf-8"    

其中,lc_all=為空,但并不是表示這裡不對,而是lc_all=實際上等于lc_collate、lc_ctype、lc_monetary、lc_messages、lc_numeric、lc_time,參見locale(7)。

繼續閱讀