202 lines
3.5 KiB
Markdown
202 lines
3.5 KiB
Markdown
## 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 有关
|