2019年10月27日 星期日

Debian 10 如何設定語系



到這個 /var/lib/locales/supported.d 資料夾看看有沒有一個叫做 locale 的檔案,有的話直接修改,沒有就新增一個,其實,不管有沒有這個檔案,都可用下面這個指令來編輯,反正沒有的話, vi 就會變成是要新增檔案哩 !

sudo vi /var/lib/locales/supported.d/local

打開之後,請加入下面這幾行字串,如果已經有的,就不用再加了,只要加沒有的就可以了,不然,把下面這幾行複製貼上來蓋掉原來的,也是可以的,然後,在加好之後就存檔離開。

zh_TW.UTF-8 UTF-8
en_US ISO-8859-1
en_US.UTF-8 UTF-8
zh_TW BIG5

接著,請執行下列任一指令來產生語系檔,而產生出來的語系檔案會放在 /usr/lib/locale 資料夾。

sudo locale-gen



sudo dpkg-reconfigure locales

上面的指令執行完成後,先登出再登入,或是重新啟動之後,再用下面的指令來檢查已安裝的語系,應該就會看到 zh_TW 了哩 !

locale -a





或是第二種方法

怎麼讓 Debian 10 出現的訊息變成是中文的呢 ? 會遇到這個問題的情況,在安裝的過程中,忘了或沒去變更預設的語系 (locale),所以,Debian 10 就會使用預設的美國英文 (en_US.UTF-8) 來做為系統的語系,因此,所有的訊息就都是英文

首先,可以先用 locale 指令確認一下目前使用的語系為何,預設的情況下,應該會看到像下面這樣,所有的語系設定都是 en_US.UTF-8 的。

$ locale 
LANG=en_US.UTF-8 
LANGUAGE= 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=

確定沒有設定成中文後,接下來就要把 Debian 10 的語系來改成中文了,台灣的正體中文使用的語系代碼是「zh_TW」,所以,操作步驟的指令們就是下面這樣。
sudo locale-gen zh_TW
sudo locale-gen zh_TW.UTF-8
sudo dpkg-reconfigure locales
sudo update-locale LANG="zh_TW.UTF-8" LANGUAGE="zh_TW"

上面的指令都跑完後,用 locale 指令來看的話,語系還會是原來的 en_US.UTF-8,會這樣,是因為要語系環境變數要登出再登入才會變更哩 ! 因此,設定完成後,請先登出再登入,再用 locale 指令來看,應該就會是 zh_TW.UTF-8 了哩 !
$ locale 
LANG=zh_TW.UTF-8 
LANGUAGE=zh_TW 
LC_CTYPE="zh_TW.UTF-8" 
LC_NUMERIC="zh_TW.UTF-8" 
LC_TIME="zh_TW.UTF-8" 
LC_COLLATE="zh_TW.UTF-8" 
LC_MONETARY="zh_TW.UTF-8" 
LC_MESSAGES="zh_TW.UTF-8" 
LC_PAPER="zh_TW.UTF-8" 
LC_NAME="zh_TW.UTF-8" 
LC_ADDRESS="zh_TW.UTF-8" 
LC_TELEPHONE="zh_TW.UTF-8" 
LC_MEASUREMENT="zh_TW.UTF-8" 
LC_IDENTIFICATION="zh_TW.UTF-8" 
LC_ALL=

之後,如果需要再改回英文語系的話,就只要執行下面這一行指令,然後,再登出再登入或重新開機之後,就會回到英文語系了哩 ! ...

sudo update-locale LANG="en_US.UTF-8" LANGUAGE="en_US.UTF-8"

另外,附帶一提的,如果你有遇到類似像下面這樣的錯誤訊息的話,也是和語系設定有關,y就是沒有產生相對的語系檔,一樣用上面提到的指令來產生,應該就可以解決了哩 ! ...

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



或是參考這篇
在 Ubuntu 16.04 中設定 locale 環境變數

新裝乾淨的 ubuntu 通常 locale 都沒設好,這會導致一些錯誤,像是 pip install 就會炸了

123456789 $ pip install virtualenvwrapperTraceback (most recent call last): File "/usr/bin/pip", line 11, in <module> sys.exit(main()) File "/usr/lib/python2.7/dist-packages/pip/__init__.py", line 215, in main locale.setlocale(locale.LC_ALL, '') File "/usr/lib/python2.7/locale.py", line 581, in setlocale return _setlocale(category, locale)locale.Error: unsupported locale setting


這裡簡單備忘一下如何快速將 locale 全域設成 zh_TW.UTF-8
設定要產生的語系 /var/lib/locales/supported.d/<config name>
產生語系設定檔 $ sudo locale-gen 去吃第 1. 點的設定
update-locale 語系,由系統寫入全域設定 /etc/default/local

以下說細一點,有錯請指正

首先用 $ locale 看一下現在的語系設定

$ localelocale: 
Cannot set LC_CTYPE to default locale: 
No such file or directorylocale: Cannot set LC_ALL to default locale: 
No such file or directory
LANG=en_US.UTF-8
LANGUAGE=LC_CTYPE=zh_TW.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=


新增一個檔案在 /var/lib/locales/supported.d/locale,內容如下

12 zh_TW.UTF-8 UTF-8en_US.UTF-8 UTF-8


用 locale-gen 產生設定檔,可用 $ locale -a 列出目前支援的語系設定

$ sudo locale-genGenerating locales (this might take a while)... 
en_AG.UTF-8... done 
en_AU.UTF-8... done 
en_BW.UTF-8... done 
en_CA.UTF-8... done 
en_DK.UTF-8... done 
en_GB.UTF-8... done 
en_HK.UTF-8... done 
en_IE.UTF-8... done 
en_IN.UTF-8... done 
en_NG.UTF-8... done 
en_NZ.UTF-8... done 
en_PH.UTF-8... done 
en_SG.UTF-8... done 
en_US.UTF-8... done 
en_ZA.UTF-8... done 
en_ZM.UTF-8... done 
en_ZW.UTF-8... done 
zh_TW.UTF-8... done
Generation complete.


用 $ sudo update-locale LC_ALL="zh_TW.UTF-8" 將設定檔寫入, 設定 LC_ALL 會覆寫全部 locale 中全部 LC_ 開頭的設定,這個指令會去寫 /etc/default/locale,所以也可以 cat 它確認究竟寫了什麼設定進去,當然也可以只 update 自己想要的參數,改完重新登入即可

檢查一下



$ localeLANG=en_US.UTF-8
LANGUAGE=LC_CTYPE="zh_TW.UTF-8"
LC_NUMERIC="zh_TW.UTF-8"
LC_TIME="zh_TW.UTF-8"
LC_COLLATE="zh_TW.UTF-8"
LC_MONETARY="zh_TW.UTF-8"
LC_MESSAGES="zh_TW.UTF-8"
LC_PAPER="zh_TW.UTF-8"
LC_NAME="zh_TW.UTF-8"
LC_ADDRESS="zh_TW.UTF-8"
LC_TELEPHONE="zh_TW.UTF-8"
LC_MEASUREMENT="zh_TW.UTF-8"
LC_IDENTIFICATION="zh_TW.UTF-8"

沒有留言:

張貼留言