通過命令的形式修改系統的語言,比較詳細的講解了來龍去脈;
0 前言
如果不想看前面比比賴賴可以直接跳到3 解決方案,此處省略一萬字。
1 locale 文件
locale是linux本土化和國際化的一個系統標准,包括語言,國家,軟件運行的環境等等信息,在終端輸入可以查看locale
的使用信息;
man locale
找到兩個文檔;
-
/usr/lib/locale/locale-archive
:Usual default locale archive location. -
/usr/share/i18n/locales
:Usual default path for locale definition files.
如下所示;
然后直接在終端輸入locale
,可以查看系統當前的相關信息,具體如下;
jackma@alibaba:locale
LANG=zh_CN.UTF-8
LANGUAGE=zh_CN:en
LC_CTYPE="en_US.UTF-8"
LC_NUMERIC=zh_CN.UTF-8
LC_TIME=zh_CN.UTF-8
LC_COLLATE="en_US.UTF-8"
LC_MONETARY=zh_CN.UTF-8
LC_MESSAGES="en_US.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=
在這里我們發現兩個參數LANG
和LANGUAGE
;
2 查找相關文件
通常linux
的系統配置文件都放在/etc
路徑下,因此我們嘗試搜索一下;
jackma@alibaba:sudo find /etc/ -name locale
/etc/default/locale
很明顯,打開這個文件/etc/default/locale
;
sudo vi /etc/default/locale
具體如下所示;
# File generated by update-locale
LANG="zh_CN.UTF-8"
LC_NUMERIC="zh_CN.UTF-8"
LC_TIME="zh_CN.UTF-8"
LC_MONETARY="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"
LANGUAGE="zh_CN:en"
可見當前系統是中文,應該主要修改LANG
和LANGUAGE
3 解決方案
如果希望將系統改為英文,則將zh_CN
替換為en_US
即可,修改完的內容具體如下:
# File generated by update-locale
LANG="en_US.UTF-8"
LC_NUMERIC="zh_CN.UTF-8"
LC_TIME="zh_CN.UTF-8"
LC_MONETARY="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"
LANGUAGE="en_US:en"
如果需要修改編碼,那么則將
UTF-8
改成其他的編碼格式就行;
保存文件,重啟即可;
LANG
和LANGUAGE
的區別:
LANGUAGE
是設置應用程序的界面語言,比如終端。而LANG
是優先級很低的一個變量,它指定所有與locale有關的變量的默認值。
4 相關信息
4.1 locale屬性的含義
- 語言符號及其分類(LC_CTYPE)
- 數字(LC_NUMERIC)
- 比較和排序習慣(LC_COLLATE)
- 時間顯示格式(LC_TIME)
- 貨幣單位(LC_MONETARY)
- 信息主要是提示信息,錯誤信息,狀態信息,標題,標簽,按鈕和菜單等(LC_MESSAGES)
- 姓名書寫方式(LC_NAME)
- 地址書寫方式(LC_ADDRESS)
- 電話號碼書寫方式(LC_TELEPHONE)
- 度量衡表達方式 (LC_MEASUREMENT)
- 默認紙張尺寸大小(LC_PAPER)
- 對locale自身包含信息的概述(LC_IDENTIFICATION)。
4.2 LANGUAGE 屬性
感覺解決亂碼的關鍵應該是這個屬性;
進入到路徑/usr/share/i18n/locales
,可以看到很多文件,如下所示;
根據這幾年讀過的書,大概可以猜測到是哪些國家,當然這些都是文本文件,可以直接打開en_US
;
LC_IDENTIFICATION
title "English locale for the USA"
source "Free Software Foundation, Inc."
address "http:////www.gnu.org//software//libc//"
contact ""
email "bug-glibc-locales@gnu.org"
tel ""
fax ""
language "American English"
territory "United States"
revision "1.0"
date "2000-06-24"
category "i18n:2012";LC_IDENTIFICATION
category "i18n:2012";LC_CTYPE
category "i18n:2012";LC_COLLATE
category "i18n:2012";LC_TIME
category "i18n:2012";LC_NUMERIC
category "i18n:2012";LC_MONETARY
category "i18n:2012";LC_MESSAGES
category "i18n:2012";LC_PAPER
category "i18n:2012";LC_NAME
category "i18n:2012";LC_ADDRESS
category "i18n:2012";LC_TELEPHONE
category "i18n:2012";LC_MEASUREMENT
END LC_IDENTIFICATION
果不其然是美國英語;
5 總結
對於locale
還不是很深入的了解,只是遇到了問題,整體地查閱了一遍,本人能力有限,難免存在錯誤或者紕漏,如果有什么更好的辦法,請大佬不吝賜教。