简体中文本地化

来自 Arch Linux 中文维基
(重定向自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 是一个较好的替代品。