LINUX系统编程 LINUX地区(locale)设置

简介: LINUX本地的locale设置使用/etc/sysconfig/i18n进行设置, 这里的i18n是术语internationalization的缩写i加上18字符 在加上n,这样更为方便,同时区一样LINUX地区系统维护在 /usr/share/locale...
LINUX本地的locale设置使用/etc/sysconfig/i18n进行设置,
这里的i18n是术语internationalization的缩写i加上18字符
在加上n,这样更为方便,同时区一样LINUX地区系统维护在
/usr/share/locale中,该目录下每个目录都是特定地区信息
的集合,目录的约定为:
language(ISO语言代码)[_territory(ISO国家代码)[.codeset(字符集)]][@modifier(如果前面都一样这个用于区分)]
一般只包含language(语言)_territory(国家)


如: 
zh_CN:中文-中国
en_US:英文-美国
fr_CH:瑞士-法语 


而每一个目录包含了具体的规则如:
LC_CTYPE:字符分类,大小写转换
LC_COLLATE:字符集排序规则
LC_MONETARY:对币值的格式化规则
LC_NUMERIC:对比值以外数据的格式化隔着
LC_TIME:时间日志的规则
LC_MESSAGES:
我们可以locale 查看这些信息,如果设置i18n为一个不存在的目录那么将会报错
[root@testmy locale]# more /etc/sysconfig/i18n 
LANG="123.UTF-8"
[root@testmy locale]# locale
locale: Cannot set LC_CTYPE to default locale: No such file or directory
locale: Cannot set LC_MESSAGES to default locale: No such file or directory
locale: Cannot set LC_ALL to default locale: No such file or directory


这里我们注意一下:
LANG
LC_ALL
LC_*
i18n配置文件
的区别


i18n<LANG<LC_* 
也就是LANG会比i18n优先级高,LC_*比LANG高,而LC_ALL实际就是一次设置全部的LC_*而已
但是一旦设置了LC_ALL就不能设置LC_*了,所以一般不用。
一般我们使用LANG来设置全部的LC_*,而独立设置一个LC_*为想要的设置
比如我这里设置LANG=en_US.UTF-8 ,设置LC_TIME=zh_GN.UTF-8
目的在于输出时间以中文形式输出
[root@testmy ~]# locale
LANG=en_US.UTF-8
LC_CTYPE="en_US.UTF-8"
LC_NUMERIC="en_US.UTF-8"
LC_TIME="en_US.UTF-8"
LC_COLLATE="en_US.UTF-8"
LC_MONETARY="en_US.UTF-8"
LC_MESSAGES="en_US.UTF-8"
LC_PAPER="en_US.UTF-8"
LC_NAME="en_US.UTF-8"
LC_ADDRESS="en_US.UTF-8"
LC_TELEPHONE="en_US.UTF-8"
LC_MEASUREMENT="en_US.UTF-8"
LC_IDENTIFICATION="en_US.UTF-8"
LC_ALL=
[root@testmy ~]# date
Wed Dec  7 09:02:28 CST 2016
[root@testmy ~]# export LC_TIME=zh_CN.UTF-8
[root@testmy ~]# date
2016年 12月 07日 星期三 09:03:23 CST


使用程序验证LANG的优先级低于LC_TIME
[root@testmy ~]# LANG=zh_CN.UTF-8 LC_TIME=en_US.UTF-8 ./a.out 
ctime() is:Wed Dec  7 10:49:32 2016
asmtime is:Wed Dec  7 10:49:32 2016
stftime() is:Wednesday 2016-12-07 10:49:32 CST
[root@testmy ~]# LANG=en_US.UTF-8 LC_TIME=zh_CN.UTF-8  ./a.out 
ctime() is:Wed Dec  7 10:49:35 2016
asmtime is:Wed Dec  7 10:49:35 2016
stftime() is:星期三 2016-12-07 10:49:35 CST

代码:

点击(此处)折叠或打开

  1. #include<stdio.h>
  2. #include <time.h>
  3. #include <errno.h>
  4. #include <locale.h>
  5. #include <unistd.h>
  6. #include <stdlib.h>


  7. int main(void)
  8. {
  9.         time_t t;
  10.         struct tm *loc;
  11.         char* ctc;
  12.         char* asc;
  13.         char ut[200];

  14.         t = time(NULL);
  15.         if(setlocale(LC_ALL,"") == NULL) //LC_ALL,"" will use env vars
  16.         {
  17.                 perror("setlocale:");
  18.                 exit(1);
  19.         }
  20.         ctc = ctime(&t);
  21.         if ((loc = localtime(&t)) ==NULL)
  22.         {
  23.                 perror("localtime:");
  24.                 exit(2);
  25.         }

  26.         asc = asctime(loc);

  27.         if(strftime(ut,200,"%A %F %T %Z\n",loc) == 0)
  28.         {
  29.                 perror("strftime:");
  30.                 exit(3);
  31.         }

  32.         printf("ctime() is:%sasmtime is:%sstftime() is:%s",ctc,asc,ut);
  33.         return 0;

  34. }

相关文章
|
4天前
|
Linux Shell 网络安全
Kali Linux系统Metasploit框架利用 HTA 文件进行渗透测试实验
本指南介绍如何利用 HTA 文件和 Metasploit 框架进行渗透测试。通过创建反向 shell、生成 HTA 文件、设置 HTTP 服务器和发送文件,最终实现对目标系统的控制。适用于教育目的,需合法授权。
28 9
Kali Linux系统Metasploit框架利用 HTA 文件进行渗透测试实验
|
16小时前
|
存储 缓存 监控
Linux缓存管理:如何安全地清理系统缓存
在Linux系统中,内存管理至关重要。本文详细介绍了如何安全地清理系统缓存,特别是通过使用`/proc/sys/vm/drop_caches`接口。内容包括清理缓存的原因、步骤、注意事项和最佳实践,帮助你在必要时优化系统性能。
78 62
|
1天前
|
Ubuntu Linux C++
Win10系统上直接使用linux子系统教程(仅需五步!超简单,快速上手)
本文介绍了如何在Windows 10上安装并使用Linux子系统。首先,通过应用商店安装Windows Terminal和Linux系统(如Ubuntu)。接着,在控制面板中启用“适用于Linux的Windows子系统”并重启电脑。最后,在Windows Terminal中选择安装的Linux系统即可开始使用。文中还提供了注意事项和进一步配置的链接。
10 0
|
24天前
|
Ubuntu Linux 网络安全
linux系统ubuntu中在命令行中打开图形界面的文件夹
在Ubuntu系统中,通过命令行打开图形界面的文件夹是一个高效且实用的操作。无论是使用Nautilus、Dolphin还是Thunar,都可以根据具体桌面环境选择合适的文件管理器。通过上述命令和方法,可以简化日常工作,提高效率。同时,解决权限问题和图形界面问题也能确保操作的顺利进行。掌握这些技巧,可以使Linux操作更加便捷和灵活。
17 3
|
27天前
|
Linux
在 Linux 系统中,`find` 命令
在 Linux 系统中,`find` 命令
29 1
|
27天前
|
网络协议 Linux 虚拟化
如何在 Linux 系统中查看进程的详细信息?
如何在 Linux 系统中查看进程的详细信息?
56 1
|
12天前
|
存储 Oracle 安全
服务器数据恢复—LINUX系统删除/格式化的数据恢复流程
Linux操作系统是世界上流行的操作系统之一,被广泛用于服务器、个人电脑、移动设备和嵌入式系统。Linux系统下数据被误删除或者误格式化的问题非常普遍。下面北亚企安数据恢复工程师简单聊一下基于linux的文件系统(EXT2/EXT3/EXT4/Reiserfs/Xfs) 下删除或者格式化的数据恢复流程和可行性。
|
29天前
|
Linux 网络安全 数据安全/隐私保护
Linux 超级强大的十六进制 dump 工具:XXD 命令,我教你应该如何使用!
在 Linux 系统中,xxd 命令是一个强大的十六进制 dump 工具,可以将文件或数据以十六进制和 ASCII 字符形式显示,帮助用户深入了解和分析数据。本文详细介绍了 xxd 命令的基本用法、高级功能及实际应用案例,包括查看文件内容、指定输出格式、写入文件、数据比较、数据提取、数据转换和数据加密解密等。通过掌握这些技巧,用户可以更高效地处理各种数据问题。
74 8
|
29天前
|
监控 Linux
如何检查 Linux 内存使用量是否耗尽?这 5 个命令堪称绝了!
本文介绍了在Linux系统中检查内存使用情况的5个常用命令:`free`、`top`、`vmstat`、`pidstat` 和 `/proc/meminfo` 文件,帮助用户准确监控内存状态,确保系统稳定运行。
210 6
|
1月前
|
Linux
在 Linux 系统中,“cd”命令用于切换当前工作目录
在 Linux 系统中,“cd”命令用于切换当前工作目录。本文详细介绍了“cd”命令的基本用法和常见技巧,包括使用“.”、“..”、“~”、绝对路径和相对路径,以及快速切换到上一次工作目录等。此外,还探讨了高级技巧,如使用通配符、结合其他命令、在脚本中使用,以及实际应用案例,帮助读者提高工作效率。
76 3