簡體中文本地化

出自 Arch Linux 中文维基

依據「Arch 之道」:我們不會為你配置好一切,因為「喜好和需求,每人皆不同」,但是會儘量確保讓配置時方便和簡單。事實上,甚至遠比使用某些 Linux 中文版本容易。

本文儘可能提供了各種常見軟件的中文化指導。但實際應用中,你可能遇到各種各樣的麻煩。遇到了麻煩,不要氣餒,解決問題本身就是一種樂趣。你可以通過各種渠道尋求幫助:

基本中文支持[編輯 | 編輯原始碼]

要正確顯示中文,必需設置正確的 locale 並安裝合適的中文字體。

locale 設置[編輯 | 編輯原始碼]

安裝中文 locale[編輯 | 編輯原始碼]

Linux 中通過 locale 來設置程序運行的本地化環境。根據地區和字符編碼的不同,常用的中文 locale 有:

zh_CN.GB18030
zh_CN.UTF-8
zh_HK.UTF-8
zh_SG.UTF-8
zh_TW.BIG-5
zh_TW.UTF-8

推薦使用 UTF-8 的 locale 而非老舊的各地區編碼。需要修改 /etc/locale.gen 文件來設定系統中可以使用的 locale(取消對應項前的註釋符號「#」即可):

en_US.UTF-8 UTF-8
zh_CN.UTF-8 UTF-8
zh_SG.UTF-8 UTF-8

然後執行 locale-gen 命令,便可以在系統中使用這些 locale。可以通過 locale 命令來查看當前使用的 locale:亦可通過 locale -a 命令來查看目前可以使用的 locale。

配置中文 locale[編輯 | 編輯原始碼]

配置全局 locale (可選)[編輯 | 編輯原始碼]

首先設置一個英文的全局 locale。這並不是必須的,只是為了防止 TTY 中出現豆腐塊(見下方注意):

$ cat /etc/locale.conf
LANG=en_US.UTF-8

LANG 這個環境變量代表默認的區域設置,具體的含義見 Locale#LANG:默認的區域設置

注意: 不推薦在 /etc/locale.conf 裡把全局的 LANG locale 設置成中文 LANG=zh_CN.UTF-8,因為 TTY 下沒有 CJK 字體,這樣設置會導致 TTY 中顯示豆腐塊(除非你使用的內核打了 cjktty 補丁能繪製中文字體,比如linux-lilyCNRepo)。

每個用户單獨的 locale 可以在 ~/.bashrc~/.xinitrc~/.xprofile 中設置:

  • .bashrc:每次使用終端時會應用此處的設置。
  • .xinitrc:每次使用 startxSLiM 來啟動 X 窗口系統時會應用此處的設置。
  • .xprofile:每次使用 GDM 等顯示管理器時會應用此處的設置。
為圖形界面配置中文 locale[編輯 | 編輯原始碼]

不推薦 /etc/locale.conf 使用全局中文 locale,會導致 TTY 中顯示出豆腐塊。

如前所述,建議在 ~/.xinitrc~/.xprofile 裡單獨設置中文 locale,即添加下面兩行到文件的最開頭(如果不確定使用哪個文件,都添加):

export LANG=zh_CN.UTF-8
export LANGUAGE=zh_CN:en_US
警吿: 若欲將此兩行放至 ~/.xinitrc 中,請注意將其放在 exec _example_WM_or_DE_ 行之前,此為常見錯誤。
注意: 該方法適用於 SLiM 或者無登錄管理器的用户,而 GDMSDDM 用户可以在 GNOMEKDE 設置中選擇語言。
注意: 不推薦使用 export LC_ALL 來覆蓋所有 locale 設置,LC_ALL 應該僅用於診斷調試,全局設置 LC_ALL 會為診斷語言設置問題帶來不必要的困難。

中文字體[編輯 | 編輯原始碼]

安裝字體[編輯 | 編輯原始碼]

除了設置好 locale,還需要安裝中文字體。

常用的自由(OFL、GPL或其他自由軟件協議)中文字體有:

系統字體將默認安裝到 /usr/share/fonts。如果沒有 root 權限或只打算自己使用某些字體,可以直接複製這些字體到 ~/.fonts 目錄(或其子目錄)下面,並把該路徑加入 /etc/fonts/local.conf 中。具體參見後面章節。

另見:[1]

中文字體配置[編輯 | 編輯原始碼]

Fontconfig 設置[編輯 | 編輯原始碼]

Fontconfig 的用户配置文件是 $XDG_CONFIG_HOME/fontconfig/fonts.conf,或存放於 $XDG_CONFIG_HOME/fontconfig/conf.d/。全局配置文件是 /etc/fonts/conf.d。推薦修改前者。

關於中文字體設置,參見:字體字體配置

Font Configuration/Chinese 提供了中文字體的 Fontconfig 示範。

另見:

修正簡體中文顯示為異體(日文)字形[編輯 | 編輯原始碼]

安裝 noto-fonts-cjkadobe-source-han-sans-otc-fonts(思源黑體)或 adobe-source-han-serif-otc-fonts(思源宋體)後,在某些情況下(框架未定義地區)漢字字形與國標標準不符,例如等字字形過窄,的字形為豎點插入橫折鈎而非左上斜點等。

這是因為每個程序中可以設置不同的默認字體,比如 Arial 或者 Tahoma,而這些字體的屬性由 fontconfig 控制,其使用順序是據地區代碼以 A-Z 字母表順序成默認排序,由於 ja-JPzh_{CN,HK,SG,TW} 之前,故優先顯示日文字形。

提示:Chromium/Chrome/Firefox 瀏覽器的設置中可單獨設置字體,例如將字體選項調成 Noto xxx CJK SC。

可選用以下方法解決(以簡體中文為例):

  • 確保桌面環境的語言區域設置正確。例如,KDE可能會生成錯誤的語言配置文件,相應修復即可。
  • 只安裝符合簡體中文國標標準的字體,例如思源字體的簡體中文變體包 adobe-source-han-sans-cn-fontsadobe-source-han-serif-cn-fonts,或者 noto-fonts-scAUR
  • locale.conf 中添加 LANG=zh_CN.UTF-8,以將簡體中文設置為默認語言。由於對 Locale 定義了框架內地區(即 CJK 優先度),使得默認的優先級被忽略。
  • 手動調整優先級,將中文字形調整到日文字形之前。[2]/etc/fonts/conf.d//etc/fonts/conf.avail/ 下創建文件,例如 64-language-selector-prefer.conf,也可以修改或創建 ~/.fonts.conf或在~/.config/fontconfig/conf.d/創建後綴為.conf的文件(僅對該用户生效)。例如針對noto-fonts-cjk的規則,寫入:
<?xml version="1.0"?>
<!DOCTYPE fontconfig SYSTEM "fonts.dtd">
<fontconfig>
  <alias>
    <family>sans-serif</family>
    <prefer>
      <family>Noto Sans CJK SC</family>
      <family>Noto Sans CJK TC</family>
      <family>Noto Sans CJK JP</family>
    </prefer>
  </alias>
  <alias>
    <family>monospace</family>
    <prefer>
      <family>Noto Sans Mono CJK SC</family>
      <family>Noto Sans Mono CJK TC</family>
      <family>Noto Sans Mono CJK JP</family>
    </prefer>
  </alias>
</fontconfig>

如果安裝的是 adobe-source-han-sans-otc-fonts,寫入:

<?xml version="1.0"?>
<!DOCTYPE fontconfig SYSTEM "fonts.dtd">
<fontconfig>
  <alias>
    <family>sans-serif</family>
    <prefer>
      <family>Source Han Sans SC</family>
      <family>Source Han Sans TC</family>
      <family>Source Han Sans HW</family>
      <family>Source Han Sans K</family>
    </prefer>
  </alias>
  <alias>
    <family>monospace</family>
    <prefer>
      <family>Source Han Sans SC</family>
      <family>Source Han Sans TC</family>
      <family>Source Han Sans HW</family>
      <family>Source Han Sans K</family>
    </prefer>
  </alias>
</fontconfig>

注意,如果你是在 /etc/fonts/conf.avail 目錄下創建的 xml 文件,則將該 xml 文件軟連結到 /etc/fonts/conf.d 下,例如:

# ln -s /etc/fonts/conf.avail/64-language-selector-prefer.conf /etc/fonts/conf.d/64-language-selector-prefer.conf

然後更新字體緩存即可生效:

# fc-cache -fv

執行以下命令檢查,如果出現 NotoSansCJK-Regular.ttc: "Noto Sans CJK SC" "Regular" 則表示設置成功:

# fc-match -s | grep 'Noto Sans CJK'

中文輸入法[編輯 | 編輯原始碼]

常用的中文輸入法平台有 IBusfcitxfcitx5scim。具體安裝配置參見各自條目。

注意: scim 現在維護滯後,不推薦使用。fcitx 目前有新版本 fcitx5,且兩者不兼容,推薦使用 fcitx5。

終端中文支持[編輯 | 編輯原始碼]

引導中文支持[編輯 | 編輯原始碼]

GRUB2支持引導選擇界面的中文顯示,請見 GRUB2

軟件中文化配置[編輯 | 編輯原始碼]

Firefox[編輯 | 編輯原始碼]

簡體中文用户安裝 firefox-i18n-zh-cn

繁體中文用户安裝 firefox-i18n-zh-tw

Libreoffice[編輯 | 編輯原始碼]

簡體中文用户安裝 libreoffice-fresh-zh-cnlibreoffice-still-zh-cn

繁體中文用户安裝 libreoffice-fresh-zh-twlibreoffice-still-zh-cn

PDF 閱讀器[編輯 | 編輯原始碼]

多數 PDF 查看器已經支持中文。但也有部分需要安裝額外的語言包/字體:

Acrobat 的字體為 acroread-fontsAUR,或者可以安裝 acroread-fonts-systemwideAUR 以使用系統範圍的字體。

okular、evince 等 poppler 相關的閱讀器及 Inkscape、Krita、MyPaint 等可以處理 pdf 的圖像處理工具:需要安裝 poppler-data

Java[編輯 | 編輯原始碼]

對於 Sun Java 用户,在 /opt/java/jre/lib/fonts 中建立 fallback 目錄,然後連結或拷貝若干中文字體到該目錄就能使 java 程序正確顯示中文。例如,在已經安裝 jreAURopendesktop-fonts 的情況下,使用執行下面的命令即可:

# ln -s /usr/share/fonts/TTF/odosung.ttc /opt/java/jre/lib/fonts/fallback/
# cd /opt/java/jre/lib/fonts/fallback/
# mkfontdir
# mkfontscale

vim[編輯 | 編輯原始碼]

如果 locale 是 utf8 編碼,用 vim 打開其他中文編碼的文件可能會亂碼。需要在 ~/.vimrc 做如下設置:

~/.vimrc
...
set fileencodings=utf8,cp936,gb18030,big5
...

中文視頻字幕[編輯 | 編輯原始碼]

MPlayer[編輯 | 編輯原始碼]

要使 MPlayer 正確顯示字幕,關鍵是要使字幕文件的編碼和 mplayer config 裡使用的編碼相一致。字幕文件編碼為 gbk,則 subcp=cp936;字幕文件編碼為 utf-8,則 subcp=utf8。如果字幕文件編碼為 utf-8,而設置成 subcp=cp936,則會出現部分亂碼的情況。另一種更為簡單的方法是設置成 subcp=enca:zh:ucs-2,由 enca 負責字幕的編碼顯示問題。

修改 ~/.mplayer/config

~/.mplayer/config
font='文泉驛正黑'
subcp=enca:zh:ucs-2

使用下面的命令手動加載字幕:

$ mplayer xxx.avi -sub xxxxx.srt

如果使用圖形前端(比如 SMPlayer),會更簡單一些,只要在設置對話框裏設定缺省字幕編碼和字體即可。

xine[編輯 | 編輯原始碼]

xine 也可以顯示中文字幕,但需要製作自己的中文字體。具體可以參考:[3]

gstreamer[編輯 | 編輯原始碼]

在 totem 1.4.0,由於使用 gstreamer0.10,應該是可以自動加載同名的 srt 字幕。

LaTeX[編輯 | 編輯原始碼]

首先需要安裝 CJK 包,然後需要安裝合適的字體。具體可以參考:[4]

亂碼問題[編輯 | 編輯原始碼]

避免亂碼基本原則:使用 utf-8 代替 gbk/gb2312。

文件名亂碼[編輯 | 編輯原始碼]

安裝 convmv,使用 convmv 命令轉換編碼格式。示例:

$ convmv -f GBK -t UTF-8 --notest --nosmart file

-f 指定原始編碼,-t 指定輸出編碼。使用 convmv --list 可查詢所有支持的編碼。 --notest 表示非測試而是要進行轉碼(如果不使用該參數只會打印出轉換結果而不會實際轉碼),--smart 表示如果已經是 UTF-8 則忽略。

文件內容亂碼[編輯 | 編輯原始碼]

使用 iconv 命令轉換格式。示例:

$ iconv -f GBK -t UTF-8 -o new-file origin-file

-f 指定原始編碼,-t 指定輸出編碼。使用 iconv -l 可查詢所有支持的編碼。-o 指定輸出文件。

zip 壓縮包亂碼[編輯 | 編輯原始碼]

避免方法:非 utf8 編碼環境下(一般 windows 下的中文環境即是)不使用 zip 進行壓縮(建議使用 7z)。 解決方案:安裝使用 unzip-iconvAUR[損壞的連結:package not found] 或者 unzip-natspecAUR 取代原版的 unzip 來解壓縮,示例:

$ unzip -O gbk file.zip

file.zip 是壓縮文件,gbk 是該文件的編碼格式,以 -O 指定(原版 unzip 無 -O 選項)。

MP3 文件標籤亂碼[編輯 | 編輯原始碼]

對於用 GStreamer 做後端的播放器,如 Rhythmbox,totem,設置如下的環境變量後即可正確讀取 mp3 中 GBK 編碼的 ID3 tag:

export GST_ID3_TAG_ENCODING=GBK:UTF-8:GB18030
export GST_ID3V2_TAG_ENCODING=GBK:UTF-8:GB18030

對於 Beep media player,可以在 pefenrence->plugins->media 中選中 MPEG Audio plugin 然後點擊下方的 Penfenrences,此時會出現一個對話框,選擇 title,將 Disable ID3v2 和 Convert non-UTF8 ID3 tags to UTF8 前的選擇框選中。然後在 ID3 encoding 中填入 gbk。這樣 bmp 就能正確顯示 GBK 編碼的 ID3 tag。

Quod Libet 播放器支持 tag 編輯及設置 ID3v2 編碼。可以在 ~/.quodlibet/config 中設置

~/.quodlibet/config
...
id3encoding = gbk
...
注意: Quod Libet 默認支持 utf8 編碼。

最為徹底的解決方法為將編碼為 gbk 的 id3 tag 轉化為 utf8 編碼。首先安裝 python-mutagen,然後利用下面的命令轉換:

$ mid3iconv -e gbk XXX.mp3

Windows 分區下的中文文件名亂碼[編輯 | 編輯原始碼]

一般是因為掛載的字符集與 locale 不同,可以修改 /etc/fstab(如果不了解請仔細閱讀 fstab)。如果 locale 是 utf8,修改為:

/etc/fstab
...
/dev/sdxx /media/win ntfs defaults,iocharset=utf8 0 0

如果 locale 是 GBK,則應該是:

/etc/fstab
...
/dev/sdxx /media/win ntfs defaults,iocharset=cp936 0 0
...

Samba 亂碼[編輯 | 編輯原始碼]

用 Arch 作為 Samba 伺服器時,在 /etc/samba/smb.conf 中加入下面一行就可以解決 Windows 客户端亂碼問題:

/etc/samba/smb.conf
...
unix charset=gb2312
...

ftp 亂碼[編輯 | 編輯原始碼]

很多 ftp 站點是 GBK 編碼。如果使用 UTF8 的 locale,下載的文件名可能會亂碼。對於 lftp,在 .lftp/rc 下做如下設置:

.lftp/rc
...
set ftp:charset "gbk"
set file:charset "UTF-8"
...

對於 gftp,可以在 .gftp/gftprc 中做如下設置即可:

.gftp/gftprc
...
remote_charsets=gb2312
...

但下載下來的文件名仍然是亂碼,需要打補丁編譯。補丁地址為: https://www.teatime.com.tw/%7Etommy/linux/gftp_remote_charsets.patch

翻譯軟件[編輯 | 編輯原始碼]

  • stardict:星際譯王。
  • sdcv:命令行的星際譯王。
  • ydcv:命令行的有道詞典。
  • youdao-dictAUR:有道詞典(圖形界面),屏幕取詞翻譯。
  • GoldenDictgoldendict-gitAUR):默認都不帶字典,可下載相應字典包(支持 Babylon 的詞庫格式 .BGL,已經不再維護的 StarDict 的詞庫格式(.ifo/.dict/.idx/.syn),dictd 的詞庫格式(.index/.dict(.dz) ,ABBYY Lingvo 的詞庫格式(.dsl/.lsa/.dat),mdict 的詞庫格式等等。可在互聯網上下載這些詞典的詞庫文件導入的 GoldenDict 使用(可能有版權問題)。
  • moedictAUR:一個跨多平台的漢語詞典,除漢字、詞、成語等,還包含客家話、閩南話、簡單的外文翻譯、筆順書寫等等,萌典在線地址
  • linedictAUR:一個通過爬取有道翻譯網頁得到結果的在線英漢詞典,部分支持英漢翻譯,模仿 dmenu 在屏幕頂端顯示結果,使用方便,由於 ydcv 使用的 api 已失效,而有道新的 api 有免費使用次數限制,linedictAUR 是一個較好的替代品。