LINUX系統程式設計 LINUX地區(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
程式碼:
這裡的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
程式碼:
點選(此處)摺疊或開啟
-
#include<stdio.h>
-
#include <time.h>
-
#include <errno.h>
-
#include <locale.h>
-
#include <unistd.h>
-
#include <stdlib.h>
-
-
-
int main(void)
-
{
-
time_t t;
-
struct tm *loc;
-
char* ctc;
-
char* asc;
-
char ut[200];
-
-
t = time(NULL);
-
if(setlocale(LC_ALL,"") == NULL) //LC_ALL,"" will use env vars
-
{
-
perror("setlocale:");
-
exit(1);
-
}
-
ctc = ctime(&t);
-
if ((loc = localtime(&t)) ==NULL)
-
{
-
perror("localtime:");
-
exit(2);
-
}
-
-
asc = asctime(loc);
-
-
if(strftime(ut,200,"%A %F %T %Z\n",loc) == 0)
-
{
-
perror("strftime:");
-
exit(3);
-
}
-
-
printf("ctime() is:%sasmtime is:%sstftime() is:%s",ctc,asc,ut);
-
return 0;
-
- }
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/7728585/viewspace-2130004/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- linux系統時區設定Linux
- Linux-關於locale的設定(轉)Linux
- 【Linux】Linux系統程式設計入門Linux程式設計
- Linux系統程式設計—有名管道Linux程式設計
- Linux系統程式設計入門Linux程式設計
- Linux系統程式設計基礎Linux程式設計
- 【Linux系統程式設計】Linux訊號列表Linux程式設計
- Linux中通過locale來設定字符集Linux
- LINUX系統程式設計 關於SDTIO庫緩衝區Linux程式設計
- Linux+Informix後臺資料庫系統程式設計設定(轉)LinuxORM資料庫程式設計
- Linux系統程式設計【4】——檔案系統Linux程式設計
- 【Linux】linux時區設定Linux
- Linux系統程式設計之程式介紹Linux程式設計
- linux系統時間設定Linux
- Linux設定系統時間Linux
- Linux系統程式設計—訊號捕捉Linux程式設計
- Linux系統程式設計-檔案IOLinux程式設計
- Linux系統程式設計:mmap使用技巧Linux程式設計
- Linux系統程式設計:訊號捕捉Linux程式設計
- Linux系統程式設計之匿名管道Linux程式設計
- Linux系統共享庫程式設計(轉)Linux程式設計
- linux系統程式設計影片教程(轉)Linux程式設計
- linux 時區設定Linux
- Linux系統程式設計(37)—— socket程式設計之原始套接字Linux程式設計
- linux系統程式設計之程式(一):程式與程式Linux程式設計
- 【Linux】關於Linux的系統程式設計總結Linux程式設計
- LINUX系統程式設計 LINUX 虛擬記憶體Linux程式設計記憶體
- Linux 指令篇:系統設定--ulimitLinuxMIT
- linux系統設定IP的方法Linux
- 察看linux系統閥值設定Linux
- Linux作業系統之Shell程式設計Linux作業系統程式設計
- Linux系統——程式設計師跳槽必備Linux程式設計師
- linux系統程式設計CP小測試Linux程式設計
- Linux系統程式設計之檔案IOLinux程式設計
- Linux程式設計(獲取系統時間)Linux程式設計
- Linux系統程式設計(12)——shell基礎Linux程式設計
- Linux核心模組程式設計--系統呼叫(轉)Linux程式設計
- Linux系統程式設計——特殊程式之孤兒程式Linux程式設計