2011-08-23 75 views
0

我想獲取當前登錄用戶的系統語言。該生產線通過applescript獲取當前登錄用戶的語言

set lang to do shell script "defaults read NSGlobalDomain AppleLanguages" 

返回一個字符串,它看起來像

(
    en, 
    de, 
    ja, 
    fr, 
    es, 
    it, 
    pt, 
    "pt-PT", 
    nl, 
    sv, 
    nb, 
    da, 
    fi, 
    ru, 
    pl, 
    "zh-Hans", 
    "zh-Hant", 
    ko, 
    ar, 
    cs, 
    hu, 
    tr 
) 

返回用戶的語言,但我怎麼能得到這個「陣」的第一個?有沒有可能將其解析爲數組並獲得它的第一個值?

回答

6

還有一個更直接的方法。 Applescript有一個命令「系統信息」,它返回關於當前用戶的大量有用信息。試試看...

return system info 

這將幫助你的信息是「用戶區域設置」。所以你可以很容易地得到語言...

return user locale of (get system info) 

玩這個不同的用戶,看看它是否給你你想要的。

+1

heh,確實確實更好。我只是採取了「蠻力」的方式,因爲我不知道更好:) – Flambino

+1

不錯! (這些詞不相關;因爲'Nice!'不是15個字符長) – fireshadow52

+0

太棒了,但請注意 - 由於@ user1635960在他的答案中指出 - 語言環境(區域)設置暗示的語言_can可以與UI語言不同(如'defaults中的第一項所示讀取NSGlobalDomain AppleLanguages')。 – mklement0

2

您可以使用awkgrep準備清單一點點(擺脫壓痕,報價和括號),然後拆分得到的字符串:

-- a standard split function 
to split of aString by sep 
    local aList, delims 
    tell AppleScript 
     set delims to text item delimiters 
     set text item delimiters to sep 
     set aList to text items of aString 
     set text item delimiters to delims 
    end tell 
    return aList 
end split 

-- pipe the output of defaults through a few more commands 
set cmd to "defaults read NSGlobalDomain AppleLanguages | awk '{gsub(/[^a-zA-Z-]/,\"\");print}' | grep -v '^$'" 
set langs to do shell script cmd 

-- get the first item in the list 
set lang to item 1 of (split of langs by return) 

shell命令給你喜歡的列表:

en 
da 
ja 
fr 
de 
es 
it 
pt 
pt-PT 
nl 
sv 
nb 
fi 
ru 
pl 
zh-Hans 
zh-Hant 
ko 

所以item 1en

3

線程真的很老,但我剛剛遇到了這個問題,而且在Google搜索中這個數字相當高。對於其他讀者,我想添加兩條評論:

「(獲取系統信息)的返回用戶區域設置」和「默認讀取NSGlobalDomain AppleLanguages」策略之間有區別:第一個返回區域的值設置,後者是語言設置的值(均在「Language & Text」中)。

區域設置返回語言和區域,由下劃線分隔。語言設置僅返回語言或語言和地區,並用連字符分隔。如果你在其他代碼中使用它,請確保它是寬容的。

第二點:GREPing的作品,但我發現最簡單的代碼使用屬性列表套件從系統事件:

on get_language() 
    set lang to do shell script "defaults read NSGlobalDomain AppleLanguages" 
    tell application "System Events" 
     set pl to make new property list item with properties {text:lang} 
     set r to value of pl 
    end tell 
    return item 1 of r 
end get_language 

的grep我更快,但是這需要較少的大腦扭曲。

Jürgen

+0

好點;整潔的把戲與物業名單。它是由你寫的內容暗示的,但爲了安全起見,讓我聲明[UI]語言設置和區域(區域設置)設置是獨立的,_can_(儘管通常不會)不同。 '本地化字符串'AppleScript命令取決於UI語言設置。 – mklement0