簡體中文本地化 - Arch Linux 中文维基

跳至內容

# 簡體中文本地化

出自 Arch Linux 中文维基

相關文章

- locale
- 中文本地化
- 繁體中文本地化
- 安裝指南
- 建議閱讀

注意：此頁面不是純粹的對 ArchWiki Localization/Simplified Chinese 一文的翻譯。

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

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

- Google 等搜尋引擎
- Arch 官方論壇
- 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

在 `/etc/locale.conf` 裡可以設置全局的 LANG locale，根據需要可以設置為中文或英文：

    $ cat /etc/locale.conf

    LANG=zh_CN.UTF-8

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

注意：如果在 `/etc/locale.conf` 裡把全局的 LANG locale 設置成中文，例如 `LANG=zh_CN.UTF-8`，會使得 TTY 下也嘗試顯示中文消息。因為 TTY 下一般沒有 CJK 字體，中文可能會顯示為豆腐（方塊）或問號等。當今大多數桌面用戶不使用 TTY，所以一般沒有影響。關於 TTY 下的中文字體設置見下文有關章節。

每個用戶單獨的 locale 可以在 `~/.bashrc`、`~/.xinitrc` 或 `~/.xprofile` 中設置：

- `.bashrc`：每次使用終端時會應用此處的設置。
- `.xinitrc`：每次使用 startx 或 SLiM 來啟動 X 窗口系統時會應用此處的設置。
- `.xprofile`：每次使用 GDM 等顯示管理器時會應用此處的設置。

##### 為圖形界面配置中文 locale

如果你選擇設置了全局的中文 locale，就不需要再為圖形界面專門設置。

GDM 和 SDDM 用戶可以在 GNOME 或 KDE 設置中選擇語言。參見顯示管理器#為用戶會話設置語言。

使用其他的沒有自帶語言設置的登錄管理器的用戶，又沒有設置全局中文 locale 的，可以在 `~/.xinitrc` 或 `~/.xprofile` 裡單獨設置中文 locale，即添加下面兩行到文件的最開頭（如果不確定使用哪個文件，都添加）：

    export LANG=zh_CN.UTF-8
    export LANGUAGE=zh_CN:en_US

警告：若欲將此兩行放至 `~/.xinitrc` 中，請注意將其放在 `exec _example_WM_or_DE_` 行之前，此為常見錯誤。
注意：不推薦使用 `export LC_ALL` 來覆蓋所有 locale 設置，`LC_ALL` 應該僅用於診斷調試，全局設置 `LC_ALL` 會為診斷語言設置問題帶來不必要的困難。

### 中文字體

#### 安裝字體

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

常用的自由（OFL、GPL或其他自由軟體協議）中文字體有：

- adobe-source-han-sans-cn-fonts包
- adobe-source-han-serif-cn-fonts包
- noto-fonts-cjk包
- wqy-microhei包
- wqy-microhei-lite包
- wqy-bitmapfont包
- wqy-zenhei包
- ttf-arphic-ukai包
- ttf-arphic-uming包

系統字體將默認安裝到 `/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 示範。

另見：

- 用 fontconfig 治理 Linux 中的字體
- Linux 下的字體調校指南

##### 修正簡體中文顯示為異體（日文）字形

安裝 noto-fonts-cjk包 或 adobe-source-han-sans-otc-fonts包（思源黑體）或 adobe-source-han-serif-otc-fonts包（思源宋體）後，在某些情況下（框架未定義地區）漢字字形與國標標準不符，例如關、復等字字形過窄，門的字形為豎點插入橫折鉤而非左上斜點等。

注意：此處的字形僅為日語字形示例，並非你字體真的配置錯了！你需要查看其他地方和應用程式中文字的字形以檢查配置情況。

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

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

可選用以下方法解決（以簡體中文為例）：

- 確保桌面環境的語言區域設置正確。例如，KDE可能會生成錯誤的語言配置文件，相應修復即可。
- 只安裝符合簡體中文國標標準的字體，例如思源字體的簡體中文變體包 adobe-source-han-sans-cn-fonts包和adobe-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>serif</family>
          <prefer>
            <family>Noto Serif CJK SC</family>
            <family>Noto Serif CJK TC</family>
            <family>Noto Serif 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'

### 中文輸入法

常用的中文輸入法平台有 IBus、Fcitx、Fcitx5 和 scim。具體安裝配置參見各自條目。

注意：scim 現在維護滯後，不推薦使用。Fcitx 已經停止維護，請改用 Fcitx5。Fcitx5 與 Fcitx 不兼容。

## 終端中文支持

### 引導中文支持

GRUB2 支持引導選擇界面的中文顯示。

### TTY 中文支持

當今大多數桌面用戶不需要在 TTY 下顯示中文。但如果你確實需要，可以考慮以下方法之一：

- 使用打了 cjktty 補丁（可繪製包括中文在內的 Unicode BMP 字符）的內核，比如linux-lilyCNRepo）。
- 使用特殊的中文字體，比如syllazhCNRepo，強行將漢字塞進512個字符的限制之內。
- 使用第三方的 TTY 軟體，例如KMSCON等。

## man 手冊頁的簡體中文翻譯

安裝 man-pages-zh_cn包 軟體包。

## 軟體中文化配置

### Firefox

安裝 firefox-i18n-zh-cn包。

### LibreOffice

安裝 libreoffice-fresh-zh-cn包 或 libreoffice-still-zh-cn包。

### PDF 閱讀器

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

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

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

### Java

對於 Oracle Java 用戶，在 `/opt/java/jre/lib/fonts` 中建立 `fallback` 目錄，然後連結或拷貝若干中文字體到該目錄就能使 java 程序正確顯示中文。例如，在已經安裝 jreAUR 和 opendesktop-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 是 UTF-8 編碼，用 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='Noto Sans CJK SC'
    subcp=enca:zh:ucs-2

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

    $ mplayer xxx.avi -sub xxxxx.srt

如果使用圖形前端（比如 SMPlayer），會更簡單一些，只要在設置對話框裡設定預設字幕編碼和字體即可。

#### xine

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

#### gstreamer

由於使用 gstreamer0.10，totem 1.4.0 應該可以自動加載同名的 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 壓縮包中的文件名亂碼

原因：創建壓縮包時使用的文件名編碼和解壓時不同。

Arch 上一般使用 UTF-8 編碼，一般造成這種現象的原因是創建者使用了 Windows 上的默認編碼，如簡體中文的 GB 系列編碼或日文的 JIS 系列編碼等。

解決方案：使用 `-O` 參數指定編碼，如

    $ unzip -O gbk file.zip

`file.zip` 是壓縮文件，`gbk` 是猜測該文件創建時使用的編碼格式。

如有可能，建議在 Windows 上不使用 zip 壓縮包，而使用 7z 等格式。

### 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 是 UTF-8，修改為：

    /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 編碼。如果使用 UTF-8 的 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：有道詞典（圖形界面），屏幕取詞翻譯。
- GoldenDict（goldendict-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 是一個較好的替代品。

分類：​

- 本地化

簡體中文本地化
新增話題