Ubuntu/Linux 配置 locale

2024-08-31 10:04
文章标签 配置 linux ubuntu locale

本文主要是介绍Ubuntu/Linux 配置 locale,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

文章目录

  • Ubuntu/Linux 配置 locale
    • 1 概述
    • 2 locale
      • 2.1 locale 规则
        • 命令规则
        • 环境变量
        • 优先级
      • 2.2 查看当前 locale 设置
      • 2.3 查看当前系统所有可用的 locale
      • 2.4 安装中文 locale 语言环境/字符集
      • 2.5 安装 locales 包
      • 2.6 使用 locale-gen 命令生成语言支持
      • 2.7 设置当前默认字符集
    • 3 持久化
      • 3.1 全局设置
      • 3.2 用户级设置
      • 3.3 使用 update-locale 进行配置
    • 4 参考资料

Ubuntu/Linux 配置 locale

1 概述

在 Linux 系统中,locale 是一个非常重要的概念,它定义了系统显示语言、字符编码、日期时间格式等本地化设置。这些设置对于确保软件以用户期望的方式显示信息至关重要,特别是在多语言环境中。

2 locale

2.1 locale 规则

命令规则

locale 的命名规则一般为 <语言>_<地区>.<字符集编码>,例如 zh_CN.UTF-8。其中:

  • <语言>:代表所使用的语言,如 zh 代表中文,en 代表英文。
  • <地区>:代表所在的国家或地区,如 CN 代表中国大陆,US 代表美国。
  • <字符集编码>:表示字符的编码方式,如 UTF-8 是一种广泛使用的字符编码,支持多种语言的字符。
环境变量

在 Linux 中,通过一系列以 LC_ 开头的环境变量来控制不同方面的本地化设置。这些环境变量包括但不限于:

  • LANG:所有 LC_* 环境变量的默认值,优先级最低。如果没有为某个 LC_* 变量指定值,则使用 LANG 的值。
  • LC_CTYPE:用于字符分类和字符串处理,控制字符的编码、字符是单字节还是多字节等。
  • LC_NUMERIC:用于格式化非货币的数字显示。
  • LC_TIME:用于格式化时间和日期。
  • LC_COLLATE:用于比较和排序字符串。
  • LC_MONETARY:用于格式化货币单位。
  • LC_MESSAGES:用于控制程序输出时所使用的语言,主要是提示信息、错误信息、状态信息等。
  • LC_ALL:一个特殊的变量,用于覆盖所有 LC_* 变量的设置。如果设置了 LC_ALL,则所有 LC_* 变量的设置都将被忽略,转而使用 LC_ALL 的值。注意,LANG 变量不受 LC_ALL 的影响。
优先级

环境变量的优先级从高到低为:LC_ALL > LC_*(除了 LC_ALL)> LANG

2.2 查看当前 locale 设置

使用 locale 指令列出当前的 locale 设置。

$ locale
LANG=
LANGUAGE=
LC_CTYPE="POSIX"
LC_NUMERIC="POSIX"
LC_TIME="POSIX"
LC_COLLATE="POSIX"
LC_MONETARY="POSIX"
LC_MESSAGES="POSIX"
LC_PAPER="POSIX"
LC_NAME="POSIX"
LC_ADDRESS="POSIX"
LC_TELEPHONE="POSIX"
LC_MEASUREMENT="POSIX"
LC_IDENTIFICATION="POSIX"
LC_ALL=

这个命令会列出所有 locale 相关的环境变量及其当前值,比如 LANGLC_CTYPELC_NUMERIC 等。其中,LANG 变量通常被用作所有未明确设置的 locale 类别的默认值。

2.3 查看当前系统所有可用的 locale

使用 locale -a 列出当前系统中已经配置的 locale 信息。

$ locale -a
C
C.UTF-8
POSIX
zh_CN.utf8
zh_SG.utf8

2.4 安装中文 locale 语言环境/字符集

如果没有发现可用的中文语言环境,则需要安装中文语言包 language-pack-zh-hans

sudo apt install -y language-pack-zh-hans

2.5 安装 locales 包

用于配置 locale 的工具集,含有 locale-genupdate-locale 指令。

sudo apt-get update
sudo apt-get install -y locales

2.6 使用 locale-gen 命令生成语言支持

根据需要生成语言支持,在本示例中,我们使用 locale -a 列出了当前系统所有可用的 locale,发现缺少 en_US.UTF-8 的 locale,使用以下指令进行生成。

$ sudo locale-gen en_US.UTF-8
Generating locales (this might take a while)...en_US.UTF-8... done
Generation complete.

现在来看看当前是否已经启用了本地支持:

$ locale -a
C
C.UTF-8
POSIX
en_US.utf8
zh_CN.utf8
zh_SG.utf8

locale-gen 命令会修改 /etc/locale.gen,将 #en_US.UTF-8 UTF-8 前面的注释去掉。

/etc/locale.gen
----
en_US.UTF-8 UTF-8

当然,你也可以使用文本编辑器(如 nanovim)打开 /etc/locale.gen 文件,并取消注释(删除行首的 #)你需要的 locale 行,然后保存并关闭文件。

运行 locale-gen 命令来生成你选择的 locale。如果你已经按照上面的步骤修改了 /etc/locale.gen 文件,这一步将基于该文件中的设置来生成 locale。

sudo locale-gen

2.7 设置当前默认字符集

在当前环境设置 LANG 环境变量让其生效。

$ export LANG=en_US.UTF-8
$ locale
LANG=en_US.UTF-8
LANGUAGE=
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"
LC_ALL=

3 持久化

3.1 全局设置

修改系统级别的配置文件,如 /etc/locale.gen(生成新的 locale)、/etc/profile(设置全局环境变量)等,然后通过运行相应的命令(如 locale-gen)和应用配置(如重新登录或重启系统)来使设置生效。

3.2 用户级设置

修改用户主目录下的配置文件,在用户的 shell 配置文件中(如 ~/.bashrc~/.bash_profile~/.profile 等)添加以下行:

export LANG=en_US.UTF-8
export LC_ALL=en_US.UTF-8

替换 en_US.UTF-8 为你需要的 locale。然后,重新加载配置文件(例如,通过运行 source ~/.bashrc)或重新登录以使更改生效。

3.3 使用 update-locale 进行配置

在上面章节中,环境变量的配置仅对当前 bash 会话生效。可以使用 update-locale 命令来全局设置系统的默认字符集,这个命令会更新 /etc/default/locale 文件。

sudo update-locale LANG=en_US.UTF-8

如果你使用普通用户权限去调用 update-locale 命令时,会提示你对于上面提到的默认配置文件没有写权限,需要使用 sudo 指令进行操作。

$ update-locale LANG=en_US.UTF-8
update-locale: Unable to write /etc/default/locale: Permission denied
$ sudo update-locale LANG=en_US.UTF-8
$ cat /etc/default/locale 
#  File generated by update-locale
LANG=en_US.UTF-8

如果需要删除某个配置,只需要在设置的时候进行留空即可。

sudo update-locale LANGUAGE

将移除(注释掉)对 LANGUAGE 的定义,在定义的前面会加上 # 符号。

$ cat /etc/default/locale
#  File generated by update-locale
LANG=en_US.UTF-8
#LANGUAGE=en_US.UTF-8

结论:实测下来,主要是 3.1/3.2 章节会让 locale 生效,update-locale 主要是配置默认参数。

4 参考资料

[1] Docker容器中添加中文字符的支持
[2] docker 容器设置中文环境

这篇关于Ubuntu/Linux 配置 locale的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1123589

相关文章

浅谈配置MMCV环境,解决报错,版本不匹配问题

《浅谈配置MMCV环境,解决报错,版本不匹配问题》:本文主要介绍浅谈配置MMCV环境,解决报错,版本不匹配问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录配置MMCV环境,解决报错,版本不匹配错误示例正确示例总结配置MMCV环境,解决报错,版本不匹配在col

Nginx中配置HTTP/2协议的详细指南

《Nginx中配置HTTP/2协议的详细指南》HTTP/2是HTTP协议的下一代版本,旨在提高性能、减少延迟并优化现代网络环境中的通信效率,本文将为大家介绍Nginx配置HTTP/2协议想详细步骤,需... 目录一、HTTP/2 协议概述1.HTTP/22. HTTP/2 的核心特性3. HTTP/2 的优

Python 安装和配置flask, flask_cors的图文教程

《Python安装和配置flask,flask_cors的图文教程》:本文主要介绍Python安装和配置flask,flask_cors的图文教程,本文通过图文并茂的形式给大家介绍的非常详细,... 目录一.python安装:二,配置环境变量,三:检查Python安装和环境变量,四:安装flask和flas

Linux中的计划任务(crontab)使用方式

《Linux中的计划任务(crontab)使用方式》:本文主要介绍Linux中的计划任务(crontab)使用方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、前言1、linux的起源与发展2、什么是计划任务(crontab)二、crontab基础1、cro

Ubuntu中远程连接Mysql数据库的详细图文教程

《Ubuntu中远程连接Mysql数据库的详细图文教程》Ubuntu是一个以桌面应用为主的Linux发行版操作系统,这篇文章主要为大家详细介绍了Ubuntu中远程连接Mysql数据库的详细图文教程,有... 目录1、版本2、检查有没有mysql2.1 查询是否安装了Mysql包2.2 查看Mysql版本2.

Linux换行符的使用方法详解

《Linux换行符的使用方法详解》本文介绍了Linux中常用的换行符LF及其在文件中的表示,展示了如何使用sed命令替换换行符,并列举了与换行符处理相关的Linux命令,通过代码讲解的非常详细,需要的... 目录简介检测文件中的换行符使用 cat -A 查看换行符使用 od -c 检查字符换行符格式转换将

Linux系统配置NAT网络模式的详细步骤(附图文)

《Linux系统配置NAT网络模式的详细步骤(附图文)》本文详细指导如何在VMware环境下配置NAT网络模式,包括设置主机和虚拟机的IP地址、网关,以及针对Linux和Windows系统的具体步骤,... 目录一、配置NAT网络模式二、设置虚拟机交换机网关2.1 打开虚拟机2.2 管理员授权2.3 设置子

Linux系统中卸载与安装JDK的详细教程

《Linux系统中卸载与安装JDK的详细教程》本文详细介绍了如何在Linux系统中通过Xshell和Xftp工具连接与传输文件,然后进行JDK的安装与卸载,安装步骤包括连接Linux、传输JDK安装包... 目录1、卸载1.1 linux删除自带的JDK1.2 Linux上卸载自己安装的JDK2、安装2.1

SpringCloud动态配置注解@RefreshScope与@Component的深度解析

《SpringCloud动态配置注解@RefreshScope与@Component的深度解析》在现代微服务架构中,动态配置管理是一个关键需求,本文将为大家介绍SpringCloud中相关的注解@Re... 目录引言1. @RefreshScope 的作用与原理1.1 什么是 @RefreshScope1.

Linux卸载自带jdk并安装新jdk版本的图文教程

《Linux卸载自带jdk并安装新jdk版本的图文教程》在Linux系统中,有时需要卸载预装的OpenJDK并安装特定版本的JDK,例如JDK1.8,所以本文给大家详细介绍了Linux卸载自带jdk并... 目录Ⅰ、卸载自带jdkⅡ、安装新版jdkⅠ、卸载自带jdk1、输入命令查看旧jdkrpm -qa