Determining the Active OS Language
Mac OS X Windows

Here is what I came up with by combing the hints everyone provided. My app has language files identified using 2 character language codes (en,fr,de,etc). This function returns one of those language codes based on the platform the app is running on.

I've tested on OS X with English, French, German, Spanish and Italian. I tested Win XP with English and it worked but haven't tested the other languages yet since I don't have Windows in anything but English. If anyone wants to let me know how it works on their international system that would be great. Otherwise I will just wait to hear back from the localization company.

/**
* Returns the two letter language code that our program can use to  
load a language file.
*
* @return 2 letter lang
*/
function getUserLang
  local tAppLangs = "en,fr,de,es,it,pt,zh,zh,zh,zh,ja,ko,ru"      -->  LANGUAGE CODES THAT WILL BE RETURNED BY FUNCTION
  local tAppLangsMac = "en,fr,de,es,it,pt,zh-Hans,zh-Hant,zh_TW,zh_CN,ja,ko,ru"   --> LANGUAGE CODES THAT MAC OS RETURNS
  local tAppLangsWin = "9,12,7,10,16,22,4,4,4,4,17,18,25"     -->  DECIMAL REPRESENTATIONS OF PRIMARY LANGUAGE CODES WINDOWS RETURNS
  local tUserLangs
  local i

  set wholeMatches to true

  if platform() is "MacOS" then
    put replaceText(shell("defaults read NSGlobalDomain AppleLanguages"),"(\s|\(|\))","") into tUserLangs

    repeat for each item tLang in tUserLangs
      put itemOffset(tLang, tAppLangsMac) into i
      if i > 0 then exit repeat
    end repeat
  else if platform() is "Win32" then
    put queryRegistry("HKEY_CURRENT_USER\Control Panel\International\Locale") into tUserLangs
    put baseConvert(tUserLangs,16,10) bitAND 1023 into tUserLangs

    repeat for each item tLang in tUserLangs
      put itemOffset(tLang, tAppLangsWin) into i
      if i > 0 then exit repeat
    end repeat
  end if

  if i > 0 then return item i of tAppLangs
  else return "en"
end getUserLang

Posted 10/4/2005 by Trevor Devore to the Use-Revolution List