解释出口LANG,LC_CTYPE,LC_ALL的影响

我刚刚安装了Linux Mint 17,面临一个问题,我不能在terminal中使用俄语。 (我看到而不是字母)。 在一个论坛上我find了这个解决scheme

在〜/ .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命令,它将用给定的值ru_RU.UTF-8导出一个名为LANG的环境变量。 这指示国际化程序使用俄语( 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控制台。

请参阅UNIX规范的环境变量页面:

  • LANG此变量确定LC_ALL和其他LC_*LC_COLLATELC_CTYPELC_MESSAGESLC_MONETARYLC_NUMERICLC_TIME )环境变量不存在时本地语言,本地习俗和编码字符集的区域设置类别。 这可以被应用程序用来确定用于错误消息和指令的语言,整理序列,日期格式等等。

  • LC_ALL此变量确定所有语言环境类别的值。 LC_ALL环境变量的值优先于以LC_(LC_COLLATE, LC_CTYPELC_MESSAGESLC_MONETARYLC_NUMERICLC_TIME )和LANG环境变量开头的任何其他环境变量。

  • LC_CTYPE此变量确定字符处理函数的区域设置类别,例如tolower()toupper()isalpha() 。 这个环境变量确定文本数据字节序列的解释为字符(例如,单一字符而不是多字节字符),字符分类(例如字母,数字,图形)以及字符类的行为。 这个变量的其他语义,如果有的话,是依赖于实现的。

您的.bashrc文件是第一个要读取的文件之一,它包含您的shell会话的各种配置。

从.bashrc,.bash_profile和.environment之间有什么区别? :

.bashrc只能被交互式和非登录式的shell读取

正如在定义有或没有导出的变量中所解释的:

导出使变量可用于子流程。

要么

特别是导出使变量可用于子进程通过环境。

Moar

  • 阅读关于.bash_profile,.bashrc的 @lhunath答案,以及别名应写在哪里?
  • 使用点文件配置您的登录会话

LANGLC_CTYPELC_ALL是特殊的环境变量,在它们被导出到shell环境( help export )后,它们可用并准备被某些支持语言环境(C的自然语言格式)的程序读取。

每个变量为特定的例程集设置C库的自然语言格式化风格的概念,例如:

  • LC_ALL – 一般设置整个语言环境
  • LC_CTYPE – 设置ctypemultibyte函数的语言环境。 这可以控制对大写和小写字母,字母或非字母字符的识别,等等。

LC_COLLATE (用于字符串归类例程), LC_MESSAGES (用于消息目录), LC_MONETARY (用于格式化货币值), LC_NUMERIC (用于格式化数字), LC_TIME (用于格式化日期和时间)等。

关于LANG ,它被用作任何未设置的LC_*变量的替代(参见: man locale )。

参见: man setlocale (BSD), man locale

因此,当调用某些C函数时(比如setlocalectypemultibytecatopenprintf等),它们会从配置文件和本地环境中读取语言环境设置,以按照C编程控制和格式化自然语言格式语言标准(见: ISO C99 )

另见: C库 – <locale.h> 。