Localization (简体中文)/Simplified Chinese (简体中文)

From ArchWiki
The printable version is no longer supported and may have rendering errors. Please update your browser bookmarks and please use the default browser print function instead.

依据「Arch 之道」:我们不会为你配置好一切,因为“喜好和需求,每人皆不同”,但是会尽量确保让配置时方便和简单。事实上,甚至远比使用某些 Linux 中文版本容易。

本文尽可能提供了各种常见软件的中文化指导。但实际应用中,你可能遇到各种各样的麻烦。遇到了麻烦,不要气馁,解决问题本身就是一种乐趣。你可以通过各种渠道寻求帮助:

基本中文支持

要正确显示中文,必需设置正确的 locale 并安装合适的中文字体。

locale 设置

安装中文 locale

Linux 中通过 locale 来设置程序运行的不同环境。常用的中文 locale 有(最直观的分别是可显示字的数量):

zh_CN.GB2312
zh_CN.GBK
zh_CN.GB18030
zh_CN.UTF-8
zh_SG.GB2312
zh_SG.GBK
zh_SG.GB18030
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 乱码。在 tty 下显示和输入中文需要安装 zhconAUR 或其他软件包。

每个用户单独的 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,还需要安装中文字体。

常用的免费(GPL 或兼容版权)中文字体有:

系统字体将默认安装到 /usr/share/fonts。如果没有 root 权限或只打算自己使用某些字体,可以直接复制这些字体到 ~/.fonts 目录(或其子目录)下面,并把该路径加入 /etc/fonts/local.conf 中。具体参见后面章节。

另见:[1]

中文字体配置

fontconfig 设置

fontconfig 的设置文件是 ~/.fonts.conf~/.config/fontconfig/conf.d/(用户)或者 /etc/fonts/conf.d(全局)。推荐修改前者。

关于中文字体设置,参见:Fonts (简体中文)Font configuration (简体中文)

Font Configuration (简体中文)/Chinese (简体中文) 提供了中文字体 fontconfig 示范。

另见:

修正简体中文显示为异体(日文)字形

安装的 Noto Sans CJK 或 adobe-source-han-sans-otc-fonts(思源黑体)或 adobe-source-han-serif-otc-fonts(思源宋体)后,在某些情况下(框架未定义地区)汉字字形与标准形态不符,例如门、关、复等字字形与规范中文不符。

这是因为每个程序中可以设置不同的默认字体,比如 Arial 或者 Tohamo,而这些字体的属性由 fontconfig 控制,其使用顺序是据地区代码以 A-Z 字母表顺序成默认排序,由于 ja-JPzh_{CN,HK,SG,TW} 之前,故优先显示日文字形。

提示: Chromium/Chrome/Firefox 浏览器的设置中可单独设置字体,例如将字体选项调成 Noto xxx CJK SC。

可选用以下方法解决(以简体中文为例):

  • locale.conf 中添加 LANG=zh_CN.UTF-8,以将简体中文设置为默认语言。由于对 Locale 定义了框架内地区(即 CJK 优先度),使得默认的优先级被忽略。
  • 手动调整优先级,将中文字形调整到日文字形之前。[3]/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 (简体中文)

软件中文化配置

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 也可以显示中文字幕,但需要制作自己的中文字体。具体可以参考:[4]

gstreamer

在 totem 1.4.0,由于使用 gstreamer0.10,应该是可以自动加载同名的 srt 字幕。

LaTeX

首先需要安装 CJK 包,然后需要安装合适的字体。具体可以参考:[5]

乱码问题

避免乱码基本原则:使用 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:有道词典(图形界面),屏幕取词翻译。
  • goldendict:默认都不带字典,可下载相应字典包(支持 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 是一个较好的替代品。