在 UNIX 的世界中,形成了「程序国际化」与「数据本土化」的标准,程序代码只要写过一遍,就可以适用于所有的语言与编码系统,只要系统有支持该语言与编码系统所需的「本土数据」即可。即采取的概念就是「程序」与「数据」分离并分开维护的方式。

「程序国际化」简称 I18N,其意为InternationalizatioN

一字中头尾字母"I" 与"N" 中间夹 18 个英文字母,故名。它是在系统底层的函数库

(即libc函数库)

中实作一组标准的函数接口,可以让程序存取该地区语系的种种信息。有了这些信息,程序本身不仅可以不需要修改,就足以处理各国的语言,同时程序本身甚至连各地区语言的各项细节

(如编码方式

.... 等) 都不需要知道,因为这些全部都是由系统函数库提供的。

「资料本土化」简称 L10N,其意为LocalizatioN

一字中头尾字母"L" 与"N" 中间夹 10 个英文字母,故名。它是将地区语言的各项细节数据分门别类,安装在系统底层的数据库中,以便让系统函数库存取,以提供给上头的应用程序使用。这些用来描述

各地区语言的数据,我们称之为「地区环境数据库

(locale)」,或简称「地区环境」它们包括以下的类别

(categories):

1. LC_COLLATE: 该地区文字排序规则,以及正规化表示式

(regular expression)的比对依据。

2. LC_CTYPE: 该地区所使用的编码系统、字集、与文字分类、转换等信息。

3. LC_MESSAGES: 各应用程序区域化的信息显示。

4. LC_MONETARY: 该地区所通行的货币格式。

5. LC_NUMERIC: 该地区所通行的数字表示格式。

6. LC_TIME: 该地区所通行的时间、日期表示格式。

对于同一个地区语言而言,除了

LC_MESSAGES 之外,其它所有的类别都是固定的,故这些类别的数据就只需准备一份即可,它们是由系统底层函数库直接提供,可以让所有的应用程序分享。至于

LC_MESSAGES 信息显示的部分,由于各应用程序的信息都不同,故这部分的数据是由应用程序自身提供,而不像其它类别一样由系统函数库提供。

在这些类别中,决定一个程序是否在该地区已「本土」化的最重要因素,一是

LC_CTYPE,二是LC_MESSAGES。前者赋与程序处理该地区文字的能力,后者赋与程序用该地区的语言来显示的能力。

在实际中,将程序所有的信息集中放在一个文件档中,而该文件文件的信息开始时只会用程序原作者惯用的语言来表示。如果希望该程序也能显示其它语言的信息时,我们只需要去做翻译的工作即可,而不必真的去修改程序代码本身。因此,信息翻译与程序维护可以分头进行,翻译的工作不需要由程序原作者、或有经验的程式设计师来做,只需他熟悉该语言,并对该程序有一定的熟悉度即可。故基本上,任何人都可以参与翻译的工作。当程序编译安装完成后,已翻译成各国语言的信息文件也会一并安装入系统的区域化数据库中。当程序启动,需要做信息显示时,它会呼叫系统提供的函数介面,依目前的语系设定来正确抓取该语言的信息并显示出来。万一目前的语系设定找不到相对应的信息翻译文件时,则程序会自动以其原始的语系来显示。

地区环境数据库名称和语系设定

各地区所属的地区环境数据库名称格式如下:

_[.]

其中 [.] 有时候会省略。以我们台湾地区所使用的为例:

zh_CN.UTF-8其意即为「中文语系」(zh)「中国」(CN)「使用UTF-8编码系统」。如果将后头的

[.] 省略掉,就是这个样子

zh_CN

如果我们不特别做语系的设定,则程序在启动时,会以系统预设的语系来运作,一般而言其地区环境数据库名就是

"C" 或"POSIX",也就是原始

C 语言所采用的编码系统 (ASCII)

与英文信息等等。如果希望改变程序运作的语系,则我们必须在程序启动前先做好环境语系的设定,也就是设好各类别的环境变量。例如:

LC_CTYPE=zh_CN.UTF-8; export LC_CTYPE

LC_MESSAGES=zh_CN.UTF-8; export LC_MESSAGES

假如希望程序可以处理 EUC-TW

的文字,但仍以 Big5 中文显示信息时,就这样设定:

LC_CTYPE=zh_TW.euctw; export LC_CTYPE、

LC_MESSAGES=zh_TW.Big5; export LC_MESSAGES

在多数情况下,通常会希望一口气将所有的类别设定成相同的语系,也就是让我们的整体环境全部处于同一个语系下。当然我们可以用上述的方式一个个类别分别设定,但除此之外系统还提供了另外两个环境变量,以方便我们的作业。一是

LANG,另一个是LC_ALL。例如我们这样设:

LC_ALL=zh_CN.UTF-8; export LC_ALL

其效果就完全等价于将所有的类别全部设定了。而

LANG 的用法也是一样,所达到的效果也类似,但意义稍有不同,这里要留意优先级的差别。一般系统对这些环境变数的优先级是:LC_ALL

> LC_* >

LANG·也就是说,任何一个

LC_ 类的变量设定后,会使 LANG

的设定的相对应类别失效。如果我们完全不设任何的

LC_ 类的环境变量,只单单这么设LANG=zh_CN.UTF-8; export LANG则所有的类别都会以

LANG 的设定来运作,除非我们特别去设了某个

LC_ 的环境变数,如此这个类别就会以新的设定来运作

(但其它的类别不变)。相似的道理,如果我们设了

LC_ALL 的环境变量,则所有的类别设定,包括LANG

的设定全部会失效,而改以 LC_ALL

的设定来运作。

转发至微博

转发至微博

阅读(0)|

评论(0)

|

用微信 “扫一扫”

将文章分享到朋友圈。

用易信 “扫一扫”

将文章分享到朋友圈。

linux 中文语系,linux中语系相关推荐

  1. linux 中文意思,linux 中 ~/. 是什么意思

    ~代表你的/home/用户明目录 假设你的用户名是x,那么~/就是/home/x/ .是代表此目录本身,但是一般可以不写 所以cd ~/. 和cd ~ 和cd ~/效果是一样的 但是.后面有东西又是另 ...

  2. linux中文应用软件,Linux的桌面中文应用软件

    摘要: 编者按: Linux日益流行,很多人非常关注,但仍然不敢使用,担心操作不方便,应用软件少.本文介绍几个基于红旗Linux桌面版2.0的中文应用软件,这些软件都具有类似Windows 9x的操作 ...

  3. 怎样安装linux中文字体,Linux安装中文字体

    在Linux环境下的,经常会遇到,开发的项目中有生成带中文文字的图片在前台显示会出现方框乱码,比如PHP的GD/ImageMagick,JAVA的BufferedImage Graphics draw ...

  4. linux中文快捷键,Linux系统快捷键最全合集

    Linux系统操作中,相信很多人都没有使用快捷键的习惯,觉得鼠标点方便些,其实在某些操作中,使用快捷键能节省不少时间,下面小编就给大家详细介绍下Linux系统快捷键,一起来看看吧. 在命令行下的的快捷 ...

  5. beyond compare linux中文包,linux 下安装 Beyond Compare

    废话不多说,见链接,有各种格式的安装包,根据自己系统安装: 愉快地使用中(下载的安装包,解压安装,亲测)......顺便自己存档一份,格式就不整理了 Linux Installation Instru ...

  6. 乱码 Linux,linux中文乱码【图文教程】

    虽然电脑已经很普遍了,但是一些年长的人对电脑的操作不是很熟悉,比如在使用win7系统时一旦遇到linux中文乱码 时就懵了,对于linux中文乱码 处理起来相对来说较简单,按照我们的步骤处理linux ...

  7. 01_Linux系统系统语言查询,设置Xshell工具,中文显示,测试Xshell中文字符显示,Linux中文显示乱码设置

              Xshell是一个强大的安全终端模拟软件,它支持SSH1,SSH2,以及Microsoft Windows平台的TELNETNetSarang Xshell 4 Build 0 ...

  8. linux中文系统装offci,Ubuntu 14.04 LTS中安装fcitx中文输入法的教程

    Ubuntu 14.04 LTS中自带的iBus输入法有多么的难用,这个不用我来说,今后你会看到各种吐嘈会像滔滔江水连绵不绝的.这里我们不抱怨,我们自己来着手解决中国人自己的Linux中文输入法问题. ...

  9. linux系统python截图不显示中文_Linux运维知识之解决linux系统下python中的matplotlib模块内的pyplot输出图片不能显示中文的问题...

    本文主要向大家介绍了Linux运维知识之解决linux系统下python中的matplotlib模块内的pyplot输出图片不能显示中文的问题,通过具体的内容向大家展现,希望对大家学习Linux运维知 ...

  10. 【Qt开发】【VS开发】【Linux开发】OpenCV、Qt-MinGw、Qt-msvc、VS2010、VS2015、Ubuntu Linux、ARM Linux中几个特别容易混淆的内容...

    [Qt开发][VS开发][Linux开发]OpenCV.Qt-MinGw.Qt-msvc.VS2010.VS2015.Ubuntu Linux.ARM Linux中几个特别容易混淆的内容 标签:[Qt ...

最新文章

  1. 153和154.寻找旋转排序数组中的最小值
  2. 如何控制在一个软件中特殊的字符比如#都显示为红色呢?该字符是作为标签中的内容出现的,可能出现在JLABEL,JCheckBox,JCombox的标签中的,
  3. c语言swatch的用法返回,Linux swatch系统监控程序命令详解
  4. 代码对比工具,我就用这 6 个!
  5. oracle 判断如果有符合条件的记录则不插入_Oracle数据库AWR部分报告说明
  6. 前端 网络安全 前端优化 代码架构 笔记
  7. 【报告分享】2019云安全威胁报告.pdf(附下载链接)
  8. sql表格模型获取记录内容_SQL Server和BI –如何使用Reporting Services 2016记录表格模型
  9. 想自学python看哪位的视频比较好-python自学视频看这个就对了
  10. WPS自己用来看的 方便记录
  11. 快递系统java实验报告_java模拟物流快递系统程序.doc
  12. 触宝发布2018年第四季度财报 净收入增长147%
  13. python terminal 库_zhihu-terminal 终端版知乎客户端
  14. Build Setting 之 Code Signing 详解
  15. 女人要关注男人的几大点
  16. mysql查看定时备份_mysql定时备份
  17. 双11,客服系统让你告别客服节前emo
  18. element ui中select 下拉框在火狐浏览器最后一行显示不完全(谷歌正常)
  19. python模型预测结果 取整_sklearn 文本分类器做预测时,如何拿到预测结果。。。...
  20. modal组件 vue_vue 自定义modal 模态框组件

热门文章

  1. DirectX入门之初始化Direct3D及常见问题
  2. 用Python打造你的专属情人节贺卡,赶快发给TA浪漫一下吧
  3. animaton动画
  4. 给女生说一些关于软件测试职场的一些真实的建议~
  5. 网络电话Skype协议分析
  6. 各位童鞋是肿么来到这个世界上的鸟
  7. 冷暖色调复古处理Lr预设
  8. 微信小程序之间的参数传递、获取
  9. 微信蓝牙设备连接不上原因总结(5)
  10. Xilinx FPGA资源解析与使用系列——Transceiver(九)TX buffer使用和旁路