天天看點

c語言實作擷取macos目前的系統語言

京魚網:www.jingfish.com

由于應用程式要自适應系統的目前使用者設定的語言,我想很多人都遇到過這樣的需求。例如同一台mac本,使用者test1設定的系統語言是“簡體中文”,使用者test2設定的系統語言是“英文”,此時在運作同一款程式時就應該通過判斷系統語言來顯示不同的語言。unix沒有接口函數來獲得系統語言資訊,是以最後采用了一種迂回的方式來實作的。用c寫了個執行個體如下:

思路:用腳本可以獲得使用者語言設定偏好的清單,位于最上面的就是目前的系統語言,因為在c中是不能直接得到腳本輸出的值的,是以先将資訊寫入一個臨時檔案中,再讀檔案擷取内容再給出相應的判斷和其他操作,最後關閉檔案,删除檔案。

代碼如下:

/*------------------------------------------------------------------------------*/

#include <stdio.h>

#include <string.h>

#define HANS 1

#define HANT 2

#define EN   0

int  getCurrentLang()

{

//先用腳本擷取,然後重定向到臨時檔案/tmp/lang.txt中

//但是這個腳本隻适合10.4以上的系統

system("defaults read .GlobalPreferences AppleLanguages | tr -d [:space:] | cut -c2-9 > /tmp/lang.txt");

FILE *fp;

int rv = HANS;

char lang[10]={0};

const char *fname="/tmp/lang.txt";

if(fp=fopen(fname,"r"))

if(fgets(lang, 10, fp)>0)

printf("lang: %s\n",lang);

if(strstr(lang,"en"))

rv =  EN;

}

else if(strstr(lang,"zh-Hant"))

rv =  HANT;

else if(strstr(lang, "zh-Hans"))

rv =  HANS;

else

fclose(fp);

remove(fname);

return rv;

int main(int argc, char **argv)

int lang;

lang = getCurrentLang();

switch(lang)

case HANS:

printf("current language is 簡體中文\n");

break;

case HANT:

printf("current language is 繁體中文\n");

case EN:

printf("current language is 英文\n");

default:

return 0;

繼續閱讀