wiki/运维/Linux/笔记/7.语言管理.md
2026-04-08 19:40:00 +08:00

202 lines
3.5 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

## 1、语言环境概览
Linux 中的“语言管理”通常指的是 **Locale本地化设置**,它会影响系统的:
- 显示语言
- 日期和时间格式
- 数字和货币格式
- 排序规则
- 字符编码
如果系统出现中文乱码、命令输出语言不对、程序处理字符异常,很多时候都和 Locale 配置有关。
## 2、查看当前语言环境
### 2.1 使用 `echo $LANG`
```shell
echo $LANG
```
这个环境变量通常表示当前会话默认使用的语言环境,例如:
```shell
zh_CN.UTF-8
```
或:
```shell
en_US.UTF-8
```
### 2.2 使用 `locale`
```shell
locale
```
这个命令可以查看当前所有 Locale 相关环境变量,比如:
- `LANG`
- `LC_CTYPE`
- `LC_TIME`
- `LC_MESSAGES`
- `LC_ALL`
通常比单独看 `LANG` 更全面。
## 3、`localectl` 命令
在使用 systemd 的 Linux 发行版中,`localectl` 是常用的语言环境管理工具。
### 3.1 常见子命令
```shell
localectl status
```
查看当前语言环境设置。
```shell
localectl set-locale LANG=zh_CN.UTF-8
```
设置系统语言环境。
```shell
localectl list-locales
```
列出系统支持的 Locale。
```shell
localectl set-keymap us
```
设置控制台键盘布局。
### 3.2 命令列表示意
```shell
Commands:
status Show current locale settings
set-locale LOCALE... Set system locale
list-locales Show known locales
set-keymap MAP [MAP] Set console and X11 keyboard mappings
```
## 4、常见 Locale 格式
Locale 一般长这样:
```shell
语言_国家.编码
```
例如:
- `zh_CN.UTF-8`中文中国UTF-8 编码
- `en_US.UTF-8`英文美国UTF-8 编码
- `ja_JP.UTF-8`日文日本UTF-8 编码
其中:
- 前半部分表示语言
- 中间部分表示国家或地区
- 后半部分表示字符编码
## 5、常见配置项说明
### 5.1 `LANG`
默认语言环境,通常作为系统的基础 Locale 设置。
### 5.2 `LC_*`
可以对某个类别单独指定,例如:
- `LC_TIME`:时间格式
- `LC_MESSAGES`:提示信息语言
- `LC_NUMERIC`:数字格式
### 5.3 `LC_ALL`
优先级通常最高,用于临时强制覆盖其他 Locale 设置。
例如:
```shell
LC_ALL=C ls
```
这个命令会临时使用最基础的 `C` 语言环境执行 `ls`
## 6、常见使用场景
### 6.1 系统输出改成中文或英文
例如把系统语言设置为中文:
```shell
localectl set-locale LANG=zh_CN.UTF-8
```
设置为英文:
```shell
localectl set-locale LANG=en_US.UTF-8
```
### 6.2 排查乱码问题
常见检查点:
- 当前终端编码是否为 UTF-8
- `LANG``LC_*` 是否配置正确
- 文件本身编码是否匹配
- SSH 客户端和服务端编码是否一致
### 6.3 临时切换语言环境
```shell
LANG=en_US.UTF-8 date
```
这样只对当前这条命令生效,不会永久修改系统配置。
## 7、排障建议
### 7.1 输出乱码
优先检查:
```shell
locale
echo $LANG
```
### 7.2 程序日志时间格式不一致
重点检查:
- `LC_TIME`
- 时区配置
- 应用程序自身语言设置
### 7.3 命令输出语言和预期不一致
重点检查:
- `LANG`
- `LC_MESSAGES`
- 是否设置了 `LC_ALL`
## 8、小结
- Linux 语言管理本质上是 Locale 管理
- `echo $LANG` 可以快速查看当前默认语言环境
- `locale` 比单看 `LANG` 更完整
- `localectl` 是 systemd 系统中常用的语言环境管理工具
- 乱码、日期格式异常、提示信息语言不对,很多时候都和 Locale 有关