02-字符集

localesglibc 和其它需要本地化的应用程序和库用来解析文本(或正确的显示当前区域的某些文字样式,如货币,时间,日期,特殊字符和其他的区域格式)。

系统支持的语言保存在这里/usr/share/i18n/locales

locale

locale是一组环境变量,用于定义应用程序和Linux系统上的shell会话的语言,国家和字符编码设置(或任何其他特殊的变体首选项)。 这些环境变量由系统上的系统库和支持区域设置的应用程序使用。

locale会影响时间/日期的格式,一周的第一天,数字,货币以及根据在Linux系统上设置的语言或地区/国家/格式化的许多其他值。

设置 locale 前,需要先准备需要的 locale。要列出所有启用的locale,使用locale -a

查看locale

要查看当前正在使用的locale和相关环境变量的信息,请使用localelocalectl实用程序。

locale:获取特定于语言环境的信息。

localectl:控制系统区域(locale)设置和键盘布局设置。

locale命名规则: <语言>_<地区>.<字符集编码><@修正值>

zh_CN.UTF-8:zh表示中文,CN表示大陆地区,UTF-8表示字符集编码

locale

LANG=zh_CN.UTF-8                 # 优先级最低,是所有LC_变量的默认值
LANGUAGE=zh_CN:zh:en_US:en
LC_CTYPE="zh_CN.UTF-8"           # 用于字符分类和字符串处理,控制所有字符的处理方式
LC_NUMERIC=zh_CN.UTF-8           # 用于格式化非货币的数字显示
LC_TIME=zh_CN.UTF-8              # 用于格式化时间和日期
LC_COLLATE="zh_CN.UTF-8"         # 用于比较和排序
LC_MONETARY=zh_CN.UTF-8          # 用于格式化货币单位
LC_MESSAGES="zh_CN.UTF-8"        # 用于控制程序输出时所使用的语言
LC_PAPER=zh_CN.UTF-8             # 默认纸张尺寸大小
LC_NAME=zh_CN.UTF-8              # 姓名书写方式
LC_ADDRESS=zh_CN.UTF-8           # 地址书写方式
LC_TELEPHONE=zh_CN.UTF-8         # 电话号码书写方式
LC_MEASUREMENT=zh_CN.UTF-8       # 度量衡表达方式
LC_IDENTIFICATION=zh_CN.UTF-8    # locale对自身包含信息的概述
LC_ALL=                          # 优先级最高,它是一个宏,可通过该变量的设置覆盖所有的LC_*变量

# -a 参数显示所有可用于被设置的语言环境


localectl status

System Locale: LANG=zh_CN.UTF-8
               LANGUAGE=zh_CN:zh:en_US:en
    VC Keymap: n/a
   X11 Layout: cn

设置locale

如果要更改或设置本地系统,请使用update-locale程序。 修改LANG变量以设置整个系统的语言环境。

update-locale:修改全局的locale设置。

以下命令将LANG设置为en_IN.UTF-8,并删除LANGUAGE的定义。

sudo update-locale LANG=en_IN.UTF-8 LANGUAGE
# OR
sudo localectl set-locale LANG=en_IN.UTF-8

要配置特定的语言环境参数,需要编辑对应的变量。

sudo update-locale LC_TIME=en_IN.UTF-8
# OR
sudo localectl set-locale LC_TIME=en_IN.UTF-8

可以在以下文件中找到全局语言环境设置:

  • /etc/default/locale – on Ubuntu/Debian
  • /etc/locale.conf – on CentOS/RHEL
  • /etc/locale.gen - on Alpine

如果直接编辑上面的文件,则在编辑完成后需要执行locale-gen来生效。

每次更新glibc的时候,都会自动执行一下locale-gen,建议开启UTF-8。

要为单个用户设置全局语言环境,只需打开~/.bash_profile文件并添加以下行。

LANG="en_IN.utf8"
export LANG

Alpine中设置

Alpine使用的是musl,这是一个叫精简的,没有locale,所以需要手动添加musl-locale

musl-locale

存放在/usr/bin/locale,可以在musl libc中运行。要安装,请使用cmake . && make && sudo make install安装在具有Musl功能的发行版上。包括英语和俄语,以及.pot文件。

需要如下的依赖:

  • musl (with developer tools)
  • gettext (with libintl and developer tools)
  • С compiler (gcc or clang recommended)
  • CMake
  • CMake backend provider (make or ninja)
# 设置环境变量
ENV  MUSL_LOCALE_DEPS cmake make musl-dev gcc gettext-dev libintl \
     # 设置MUSL_LOCPATH来获取其他可设置的locale
     MUSL_LOCPATH /usr/share/i18n/locales/musl \
     TZ=Asia/Shanghai \
     LANG=zh_CN.UTF-8 \
     LANGUAGE=zh_CN:zh:en_US:en \
     LC_ALL=zh_CN.UTF-8

# 下载依赖
RUN apk add --update cmake make musl-dev gcc gettext-dev libintl

# 下载musl-locale并编译
RUN apk add --no-cache \
    $MUSL_LOCALE_DEPS \
    && wget https://gitlab.com/rilian-la-te/musl-locales/-/archive/master/musl-locales-master.zip \
    && unzip musl-locales-master.zip \
      && cd musl-locales-master \
      && cmake -DLOCALE_PROFILE=OFF -D CMAKE_INSTALL_PREFIX:PATH=/usr . && make && make install \
      && cd .. && rm -r musl-locales-master
上次修改: 14 April 2020