简体中文本地化 - 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 是一个较好的替代品。

分类：​

- 本地化

简体中文本地化
添加话题