Code: Select all
function osGetLang
local theItemNo, theLangCode, theLangStrings
local theVersion, theWinLangCodes, theUserLang
--
put "en" into theUserLang
if the platform is "MacOS" then
put replacetext(shell("defaults read NSGlobalDomain AppleLanguages"),"(\s|\(|\)|" & quote & ")","") into theLangStrings
put char 1 to 2 of theLangStrings into theUserLang
else if the platform is "Win32" then
-- http://windowssdk.msdn.microsoft.com/en-us/library/aa365069.aspx
-- http://windowssdk.msdn.microsoft.com/en-us/library/ms776286.aspx
-- http://msdn.microsoft.com/library/default.asp?url=/library/en-us/intl/mui_GetUILanguageInfo.asp
-- http://support.microsoft.com/kb/181604
## FIRST CHECK FOR MUI INSTALLS
if queryregistry("HKEY_LOCAL_MACHINE\MUI\Enable") is 1 then
put queryregistry("HKEY_CURRENT_USER\MUI\CurLang") into theLangCode
end if
if theLangCode is empty then
put word 2 of the systemversion into theVersion
if word 1 of the systemversion is "Windows" then # 95/98/ME
put queryregistry("HKEY_CURRENT_USER\Control Panel\desktop\ResourceLocale") into theLangCode
else if theVersion >= 4 and theVersion < 5 then # NT
put queryregistry("HKEY_USERS\.DEFAULT\Control Panel\International\Locale") into theLangCode
## THIS COULD FAIL IN WHICH CASE YOU HAVE TO CHECK THE RESOURCES OF SOME INSTALLED DLL.
## VERY SILLY.edit script the
else # XP/Vista
put queryregistry("HKEY_CURRENT_USER\Control Panel\International\Locale") into theLangCode
end if
end if
put word 1 to -1 of theLangCode into theLangCode
## Vista bug in version up to 2.9 rc-2: trailing white space
put baseconvert(theLangCode,16,10) into theLangCode
## THE ORDER OF THIS LIST MATCHES THE ORDER OF theLangCodes
put "za,al,fr,et,dz,bh,eg,iq,jo,kw,lb,ly,ma,om,qa,sa,sy,tn,ae,ye,am,in,az,az,ru,es,by,ba,ba,fr,bg,es,hk,mo,sg,fr,ba,hr,cz,dk,af,mv,be,nl,au,be,ca,in,ie,ie,jm,my,nz,ph,sg,za,tt,gb,us,zw,ee,fo,ph,fi,be,ca,fr,lu,mc,ch,nl,es,ge,at,de,li,lu,ch,gr,gl,in,ng,il,in,hu,is,ng,id,ca,ca,ie,it,ch,jp,in,kz,kh,gt,rw,in,kr,kg,la,lv,lt,de,lu,mk,bn,my,in,mt,nz,cl,in,ca,mn,cn,np,no,no,fr,in,af,ir,pl,br,pt,pt,in,bo,ec,pe,ro,ch,ru,fi,no,se,fi,no,se,fi,no,se,in,ba,ba,cs,cs,za,za,lk,sk,si,ar,bo,cl,co,cr,do,ec,sv,gt,hn,mx,ni,pa,py,pe,pr,es,uy,ve,ke,fi,se,se,sy,tj,dz,in,ru,in,th,cn,tr,tm,cn,ua,de,pk,uz,uz,vn,gb,sn,za,ru,cn,ng,za" into theLangStrings
put "1078,1052,1156,1118,5121,15361,3073,2049,11265,13313,12289,4097,6145,8193,16385,1025,10241,7169,14337,9217,1067,1101,2092,1068,1133,1069,1059,8218,5146,1150,1026,1027,3076,5124,4100,1155,4122,1050,1029,1030,1164,1125,2067,1043,3081,10249,4105,16393,6153,6153,8201,17417,5129,13321,18441,7177,11273,2057,1033,12297,1061,1080,1124,1035,2060,3084,1036,5132,6156,4108,1122,1110,1079,3079,1031,5127,4103,2055,1032,1135,1095,1128,1037,1081,1038,1039,1136,1057,2141,1117,2108,1040,2064,1041,1099,1087,1107,1158,1159,1111,1042,1088,1108,1062,1063,2094,1134,1071,2110,1086,1100,1082,1153,1146,1102,1148,1104,2128,1121,1044,2068,1154,1096,1123,1065,1045,1046,2070,2070,1094,1131,2155,3179,1048,1047,1049,9275,4155,5179,3131,1083,2107,8251,6203,7227,1103,26,6170,3098,2074,1132,1074,1115,1051,1060,11274,16394,13322,9226,5130,7178,12298,17418,4106,18442,2058,19466,6154,15370,10250,20490,3082,14346,8202,1089,2077,1053,1053,1114,1064,2143,1097,1092,1098,1054,1105,1055,1090,1152,1058,1070,1056,2115,1091,1066,1106,1160,1076,1157,1144,1130,1077" into theWinLangCodes
set wholematches to true
put itemoffset(theLangCode, theWinLangCodes) into theItemNo
if theItemNo > 0 then
put item theItemNo of theLangStrings into theUserLang
end if
if theUserLang is "ch" then
switch theLangCode
case 2064
put "it" into theUserLang
break
case 4108
put "fr" into theUserLang
break
case 2055
case 1047
put "de" into theUserLang
break
default
put "en" into theUserLang
break
end switch
end if
else
## LINUX
return char 1 to 2 of $LANG -- Easy Unix.
end if
--
return theUserLang
end osGetLang
... but, what would be interesting to know is ... if this code run on OSX in a
environment because, to get the "Languages" use a shell command and ... I don't know if this is allowd for a sandboxed App.