linux - 解释导出 LANG、LC_CTYPE 和 LC_ALL 的效果

我刚刚安装了Linux Mint 17 并面临一个问题,我无法在终端中使用俄语。 (我看到的是 ? 而不是字母。)

在一个论坛上我找到了这个解决方案:

Added in ~/.profile:

export LANG=ru_RU.UTF-8
export LC_CTYPE=ru_RU.UTF-8
export LC_ALL=ru_RU.UTF-8

它有所帮助,但也将我的界面语言更改为俄语(我不想要)。这甚至不是问题,但无论如何,我想知道这段代码是如何工作的(每一行)。

最佳答案

我会详细解释:

export LANG=ru_RU.UTF-8

这是一个 shell 命令,它将导出一个名为 LANG 的环境变量,其值为 ru_RU.UTF-8。这指示国际化程序使用俄语 (ru)、来自俄罗斯的变体 (RU) 以及控制台输出的 UTF-8 编码.

一般这一行就够了。

另一个:

export LC_CTYPE=ru_RU.UTF-8

做类似的事情,但它告诉程序不要更改语言,而只是将 CTYPE 更改为俄语。如果程序可以将文本更改为大写,那么它将使用俄语规则来执行此操作,即使文本本身可能是英文。

值得一提的是,混合使用 LANGLC_CTYPE 会产生意想不到的结果,因为很少有人这样做,所以它还没有经过测试,除非可能:

export LANG=ru_RU.UTF-8
export LC_CTYPE=C

这将使程序以俄语输出,但 CTYPE 标准旧 C 风格。

最后一行,LC_ALL 是最后的覆盖,这将使程序忽略所有其他 LC_* 变量并使用它。我认为您永远不应该在配置文件行中编写它,而是使用它来以给定的语言运行程序。例如,如果您想编写错误报告,并且不想要任何类型的本地化输出,并且您不知道设置了哪些 LC_* 变量:

LC_ALL=C program

关于更改所有程序或仅控制台的语言,这取决于您将这些行放在哪里。我将我的放在 ~/.bashrc 中,因此它们不适用于 GUI,仅适用于 bash 控制台。

https://stackoverflow.com/questions/30479607/

相关文章:

c - bzero() & bcopy() 与 memset() & memcpy()

linux - cron 如何在内部安排作业?

linux - qstat 和长作业名称

linux - 除了使用 Ctrl + C 之外,如何在 linux 中停止正在运行的 R 命令?

linux - tr 命令 - 如何将字符串 "\n"替换为实际的换行符 (\n)

python - 带有隐藏窗口的跨平台子进程

c - 关于 putenv() 和 setenv() 的问题

python - 如何关闭被杀死的程序打开的套接字?

linux - 使用命令或 bash 脚本清理环境?

linux - 从 rpm 包中提取规范文件