介绍在Red Hat Enterprise Linux上追加日语locale方法。默认日语locale是ja_JP.UTF8,需要使用SHIFT_JIS locale时需要进行额外的安装。

在这里使用Red Hat Enterprise Linux版本为8.6。

# cat /etc/redhat-release
Red Hat Enterprise Linux release 8.6 (Ootpa)

RedHat上的locale

Locale定义用户所使用的语言,所在国家或者地区,以及当地的文化传统所定义的一个软件运行时的语言环境。locale及localectl命令是Linux系统中设定及确认locale的接口。RedHat支持的locale如下。

版本 技术支持对象locale 支持情况
RedHat5 UTF-8 支持中
RedHat6 UTF-8 支持中
RedHat7 UTF-8 支持中
RedHat8 UTF-8 支持中

在RedHat8.6后的默认locale如下。

# locale
LANG=en_US.UTF-8                 # 语言
LC_CTYPE="en_US.UTF-8"           # 语言符号及其分类
LC_NUMERIC="en_US.UTF-8"         # 数字
LC_TIME="en_US.UTF-8"            # 时间显示格式
LC_COLLATE="en_US.UTF-8"         # 比较和排序习惯
LC_MONETARY="en_US.UTF-8"        # 货币单位
LC_MESSAGES="en_US.UTF-8"        # 信息主要是提示信息,错误信息,菜单等
LC_PAPER="en_US.UTF-8"           # 默认纸张尺寸大小
LC_NAME="en_US.UTF-8"            # 姓名
LC_ADDRESS="en_US.UTF-8"         # 地址
LC_TELEPHONE="en_US.UTF-8"       # 电话号码
LC_MEASUREMENT="en_US.UTF-8"     # 度量衡表达方式
LC_IDENTIFICATION="en_US.UTF-8"  # 对locale自身包含信息的概述
LC_ALL=

上面LANG的部分为语言的设定,格式为<语言>_<地区>.<字符集编码>。常用的语言格式如下。

语言 语言 备注
英语 en_US.UTF-8 系统默认
中文 zh_CN.UTF8 / zh_CN.gbk 中文locale的默认是zh_CN.UTF8
日语 ja_JP.UTF8 / ja_JP.SJIS 日语locale的默认是ja_JP.UTF8

导入日语locale(ja_JP.UTF8)

Red Hat Enterprise Linux 8上默认没有日语locale,可使用locale -a命令进行确认。

# locale -a | grep ja_JP

使用 dnf search locale ja 命令查找日语locale,

# dnf search locale ja
Updating Subscription Management repositories.
Unable to read consumer identity

This system is not registered with an entitlement server. You can use subscription-manager to register.

Red Hat Enterprise Linux 8 for x86_64 - AppStream from RHUI (RPMs)                   58 MB/s |  46 MB     00:00
Red Hat Enterprise Linux 8 for x86_64 - BaseOS from RHUI (RPMs)                      67 MB/s |  52 MB     00:00
Red Hat Ansible Engine 2 for RHEL 8 (RPMs) from RHUI                                 24 MB/s | 2.5 MB     00:00
RHUI Client Configuration Server 8                                                   38 kB/s | 2.3 kB     00:00
======================================== Summary & Name Matched: locale, ja ========================================
glibc-langpack-ja.x86_64 : Locale data for ja

安装glibc-langpack-ja包导入日语locale。也可以安装 glibc-all-langpacks 包,导入所有的语言。

# dnf install glibc-langpack-ja -y

安装日语locale之后,使用 locale -a确认结果。

# locale -a | grep ja_JP
ja_JP.eucjp
ja_JP.utf8

将系统locale修改为日语locale。

# localectl set-locale LANG=ja_JP.utf8
# localectl set-keymap jp106
# localectl status
  System Locale: LANG=ja_JP.utf8
      VC Keymap: jp106
      X11 Layout: jp
      X11 Model: jp106
      X11 Options: terminate:ctrl_alt_bksp

输入错误命令时,会显示日语的提示。

导入SHIFT_JIS locale

SHIFT_JIS是JIS(Japanese Industrial Standards)定义的包括日语的各种字符的字符代码,由于MS-DOS和Windows采用SHIFT_JIS为标准的日语字符代码,得以广泛传播。

RedHad上使用日语时使用的locale为ja_JP.UTF8,因此生成文件的字符集也是UTF8。当我们需要将生成的文件转换为SHIFT_JIS时需要添加SHIFT_JIS locale。

需注意的是,RedHat不支持UTF-8以外的语言环境,可追加SHIFT_JIS locale,但是因变更为SHIFT_JIS出现的问题RedHat不提供技术支持。

接下来导入SHIFT_JIS locale。

RedHat8时需要安装glibc-locale-source包,而RedHat7之前的系统不需要安装。

# dnf install glibc-locale-source

使用localedef命令创建locale的character map。

# localedef -f SHIFT_JIS -i ja_JP ja_JP.SJIS
[warning] character map `SHIFT_JIS' is not ASCII compatible, locale not ISO C compliant [--no-warnings=ascii]

执行localedef命令出现的warning信息可无视,可查看RedHat官网信息。

使用locale -a命令确认,ja_JP.SJIS locale已导入。

# locale -a | grep ja_JP
ja_JP.eucjp
ja_JP.sjis
ja_JP.utf8

执行下面的命令设定SJIS环境。也可使用localectl进行修改。

# export LANG=ja_JP.SJIS
# locale
LANG=ja_JP.SJIS
LC_CTYPE="ja_JP.SJIS"
LC_NUMERIC="ja_JP.SJIS"
LC_TIME="ja_JP.SJIS"
LC_COLLATE="ja_JP.SJIS"
LC_MONETARY="ja_JP.SJIS"
LC_MESSAGES="ja_JP.SJIS"
LC_PAPER="ja_JP.SJIS"
LC_NAME="ja_JP.SJIS"
LC_ADDRESS="ja_JP.SJIS"
LC_TELEPHONE="ja_JP.SJIS"
LC_MEASUREMENT="ja_JP.SJIS"
LC_IDENTIFICATION="ja_JP.SJIS"
LC_ALL=

小结

介绍了在Red Hat Enterprise Linux 8上安装日语loacle的方法。

AWS,Azure及阿里云等云服务厂商提供的Red Hat Enterprise Linux等Linux镜像时一般都已安装了日语locale(ja_JP.UTF8),而想使用SHIFT_JIS时就需要系统工程师手动进行安装。