关于locale的设定,为什么要设定locale

locale是国际化与本土化过程中的一个非常重要的概念,个人认为,对于中文用户来说,通常会涉及到的国际化或者本土化,大致包含三个方面:看中文,写中文,与window中文系统的兼容和通信。从实际经验上看来,locale的设定与看中文关系不大,但是与写中文,及window分区的挂载方式有很密切的关系。本人认为就像一个纯英文的Windows能够浏览中文,日文或者意大利文网页一样,你不需要设定locale就可以看中文。那么,为什么要设定locale呢?什么时候会用到locale呢?

正如前面我所讲的,设定locale与你能否浏览中文的网页没有直接的关系,即便你把locale设置成 en_US.ISO-8859-1这样一个标准的英文locale你照样可以浏览中文的网页,只要你的系统里面有相应的字符集(这个都不一定需要)和合适的字体(如simsun),浏览器就可以把网页翻译成中文给你看。具体的过程是网络把网页传送到你的机器上之后,浏览器会判断相应的编码的字符集,根据网页采用的字符集,去字体库里面找合适的字体,然后由文字渲染工具把相应的文字在屏幕上显示出来。

在下文本人会偶尔把字符集比喻成密码本,个人觉得对于一些东西比较容易理解,假如你不习惯的话,把全文copy到任何">文本编辑器,用字符集替换密码本即可。

那有时候网页显示乱码或者都是方框是怎么回事呢?个人认为,显示乱码是因为设定的字符集不对(或者没有相应的字符集),例如网页是用UTF-8 编码的,你非要用GB2312去看,而系统根据GB2312去找字体,然后在屏幕上显示,当然是一堆的乱码,也就是说你用一个错误的密码本去翻译发给你的电报,当然内容那叫一个乱;至于有些时候浏览的网页能显示一部分汉字,但有很多的地方是方框,能够显示汉字说明浏览器已经正确的判断出了网页的编码,并在字体库里面找到了相应的文字,但是并不是每个字体库都包含某个字符集全部的字体的缘故,有些时候会显示不完全,找一个比较全的支持较多字符集的字体就可以了。

既然我能够浏览中文网页,那为什么我还要设定locale呢?

其实你有没有想过这么一个问题,为什么gentoo官方论坛上中文论坛的网页是用UTF-8编码的(虽然大家一直强烈建议用GB2312编码),但是新浪网就是用GB2312编码的呢?而Xorg的官方网页竟然是ISO-8859-15编码的,我没有设定这个locale怎么一样的能浏览呢?这个问题就像是你有所有的密码本,不论某个网站是用什么字符集编码的,你都可以用你手里的密码本把他们翻译过来,但问题是虽然你能浏览中文网页,但是在整个操作系统里面流动的还是英文字符。所以,就像你能听懂英语,也能听懂中文。

最根本的问题是:你不可以写中文。

当你决定要写什么东西的时候,首先要决定的一件事情是用那种语言,对于计算机来说就是你要是用哪一种字符集,你就必须告诉你的linux系统,你想用那一本密码本去写你想要写的东西。知道为什么需要用GB2312字符集去浏览新浪了吧,因为新浪的网页是用GB2312写的。

为了让你的Linux能够输入中文,就需要把系统的locale设定成中文的(严格说来是locale中的语言类别LC_CTYPE ),例如zh_CN.GB2312、zh_CN.GB18030或者zh_CN.UTF-8。很多人都不明白这些古里古怪的表达方式。这个外星表达式规定了什么东西呢?这个问题稍后详述,现在只需要知道,这是locale的表达方式就可以了。

到底什么是locale?
 
locale这个单词中文翻译成地区或者地域,其实这个单词包含的意义要宽泛很多。Locale是根据计算机用户所使用的语言,所在国家或者地区,以及当地的文化传统所定义的一个软件运行时的语言环境。

这个用户环境可以按照所涉及到的文化传统的各个方面分成几个大类,通常包括用户所使用的语言符号及其分类(LC_CTYPE),数字 (LC_NUMERIC),比较和排序习惯(LC_COLLATE),时间显示格式(LC_TIME),货币单位(LC_MONETARY),信息主要是提示信息,错误信息, 状态信息, 标题, 标签, 按钮和菜单等(LC_MESSAGES),姓名书写方式(LC_NAME),地址书写方式(LC_ADDRESS),电话号码书写方式 (LC_TELEPHONE),度量衡表达方式(LC_MEASUREMENT),默认纸张尺寸大小(LC_PAPER)和locale对自身包含信息的概述(LC_IDENTIFICATION)。

所以说,locale就是某一个地域内的人们的语言习惯和文化传统和生活习惯。一个地区的locale就是根据这几大类的习惯定义的,这些locale定义文件放在/usr/share/i18n/locales目录下面,例如en_US, zh_CN and de_DE@euro都是locale的定义文件,这些文件都是用文本格式书写的,你可以用写字板打开,看看里边的内容,当然出了有限的注释以外,大部分东西可能你都看不懂,因为是用的Unicode的字符索引方式。

对于de_DE@euro的一点说明,@后边是修正项,也就是说你可以看到两个德国的locale:

/usr/share/i18n/locales/de_DE@euro
/usr/share/i18n/locales/de_DE

打开这两个locale定义,你就会知道它们的差别在于de_DE@euro使用的是欧洲的排序、比较和缩进习惯,而de_DE用的是德国的标准习惯。

上面我们说到了zh_CN.GB18030的前半部分,后半部分是什么呢?大部分Linux用户都知道是系统采用的字符集。

时间: 2025-01-21 14:15:49

关于locale的设定,为什么要设定locale的相关文章

简单解决Ubuntu修改locale的问题

原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://dgd2010.blog.51cto.com/1539422/1684813 本文针对的问题是"Ubuntu 安装中文语言包""Ubuntu Server中文问题","Ubuntu更改语言环境","Ubuntu locale的设定","cannot change locale (zh_CN.UTF-8

locale的详细解释

一.为什么要关注locale 我们先从一个bug说起: * Thu Sep 27 2001 Bernhard Rosenkraenzer 2.5-0.f.2 - Fix up echo A |grep '[A-Z0-9]' in locales other than C 这时在比较老版本的grep中存在的一个问题.这个bug产生的现象如下: # echo "aA" | grep '[A-Z]$' aA # echo "aA" | grep '[a-z]$' aA 为

运用Windows Azure Cloud Services的Startup Tasks设定地区与语言

为了延展性的考虑,Windows Azure Cloud Services 并不会保存本机硬盘的状态与设定,也因此所有对于系统环境的设定与软件环境安装都必须借助 Startup Tasks,让虚拟机启动时自动执行些工作.欲使用 Windows Azure Cloud Services Startup Task 必须在 Windows Azure Service Definition Schema (.csdef File). 内做相关的宣告.http://msdn.microsoft.com/e

Java时间相关内容学习(6) Locale介绍

本章介绍Locale. 1 Locale 介绍 Locale 表示地区.每一个Locale对象都代表了一个特定的地理.政治和文化地区. 在操作 Date, Calendar等表示日期/时间的对象时,经常会用到:因为不同的区域,时间表示方式都不同. 下面说说Locale对象的3种常用创建方式. 1 获取默认的Locale 使用方法: Locale locale = Locale.getDefault() 2 直接使用Locale的静态对象 Locale.java中提供了以下静态对象 public

如何正确使用蜂巢安全管家的设定选项?

  蜂巢安全管家的设定里面有「更换系统管理员」,「设定为开机自动启动」「窗口永远在最上方」3个选项.「更换系统管理员」:将按下组合键Ctrl+Alt+Del的使用软件由原来的windows系统中任务管理器改为蜂巢安全管家,让使用者能够更方便的开启蜂巢安全管家.同时可以使用这个按钮来使用windows系统中任务管理器.(执行此设定,可能会出现一些安全防护软件提示,需要确认后才能设定成功) 「设定为开机自动启动」:让蜂巢安全管家随计算机一起启动,强烈推荐使用此选项,可以保障蜂巢安全管家的正常执行.(

svn locale Can't convert string from native encoding to 'UTF-8'

svn 提交代码报错,原因很简单,编码的问题 报错信息 shell>svn update test svn: warning: cannot set LC_CTYPE locale svn: warning: environment variable LC_CTYPE is UTF-8 svn: warning: please check that your locale name is correct svn: Error converting entry in directory 'test

Laravel路由设定和子路由设定实例分析_php实例

本文实例讲述了Laravel路由设定和子路由设定方法.分享给大家供大家参考,具体如下: 普通路由设定 1.路由(routes.php)代码: Route::get('min','MinController@index'); min:为路由名称,即url中输入的,如127.0.0.1/min  这里的min就是上面对应的min MinController为文件名(类名) @index为方法名 2.控制器 namespace App\Http\Controllers; use App\Http\Co

强制Android应用使用某个Locale的方法_Android

本文实例讲述了强制Android应用使用某个Locale的方法.分享给大家供大家参考.具体如下: 在开发国际化的 Android 应用时候,有时需要指定某个 Locale 1. java代码: String languageToLoad = "de"; Locale locale = new Locale(languageToLoad); Locale.setDefault(locale); Configuration config = new Configuration(); con

Cannot open the message catalog "man" for locale "zh_CN.UTF-8"

vagrant安装的最小化的centos,偶然发现没办法使用man查看命令帮助. 1.查看xargs帮助信息 $ man xargs -bash: man: command not found 这个很好理解,没装嘛,好吧,yum 2.先看一下man在哪个包里 # yum provides man man-1.6f-32.el6.x86_64 : A set of documentation tools: man, apropos and whatis Repo : base 3.安装man #