我刚刚安装了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到俄罗斯。 如果一个程序可以将文本改为大写,那么即使文本本身可能是英文的,它也会使用俄文规则来这样做。
值得一提的是,混合LANG
和LC_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_COLLATE
,LC_CTYPE
,LC_MESSAGES
,LC_MONETARY
,LC_NUMERIC
,LC_TIME
)环境变量不存在时本地语言,本地习俗和编码字符集的区域设置类别。 这可以被应用程序用来确定用于错误消息和指令的语言,整理序列,日期格式等等。
LC_ALL
此变量确定所有语言环境类别的值。LC_ALL
环境变量的值优先于以LC_(LC_COLLATE,LC_CTYPE
,LC_MESSAGES
,LC_MONETARY
,LC_NUMERIC
,LC_TIME
)和LANG
环境变量开头的任何其他环境变量。
LC_CTYPE
此变量确定字符处理函数的区域设置类别,例如tolower()
,toupper()
和isalpha()
。 这个环境变量确定文本数据字节序列的解释为字符(例如,单一字符而不是多字节字符),字符分类(例如字母,数字,图形)以及字符类的行为。 这个变量的其他语义,如果有的话,是依赖于实现的。
您的.bashrc
文件是第一个要读取的文件之一,它包含您的shell会话的各种配置。
从.bashrc,.bash_profile和.environment之间有什么区别? :
.bashrc只能被交互式和非登录式的shell读取
正如在定义有或没有导出的变量中所解释的:
导出使变量可用于子流程。
要么
特别是导出使变量可用于子进程通过环境。
LANG
, LC_CTYPE
和LC_ALL
是特殊的环境变量,在它们被导出到shell环境( help export
)后,它们可用并准备被某些支持语言环境(C的自然语言格式)的程序读取。
每个变量为特定的例程集设置C库的自然语言格式化风格的概念,例如:
LC_ALL
– 一般设置整个语言环境LC_CTYPE
– 设置ctype
和multibyte
函数的语言环境。 这可以控制对大写和小写字母,字母或非字母字符的识别,等等。
和LC_COLLATE
(用于字符串归类例程), LC_MESSAGES
(用于消息目录), LC_MONETARY
(用于格式化货币值), LC_NUMERIC
(用于格式化数字), LC_TIME
(用于格式化日期和时间)等。
关于LANG
,它被用作任何未设置的LC_*
变量的替代(参见: man locale
)。
参见: man setlocale
(BSD), man locale
因此,当调用某些C函数时(比如setlocale
, ctype
, multibyte
, catopen
, printf
等),它们会从配置文件和本地环境中读取语言环境设置,以按照C编程控制和格式化自然语言格式语言标准(见: ISO C99 )
另见: C库 – <locale.h> 。