Language.au3

Last modified:   Sunday, 25 May 2008

;*******************************************************************************
;
;   Function List
;         _Lang_Ab()
;         _SetLanguage()
;
;*******************************************************************************

#include-once
   
;===============================================================================
; Function Name:    _SetLanguage()
; Description:      Returns the long or abbreviated language name
;                   I use this primarily for auto-generating html file lang strings
;
; Syntax:           _SetLanguage([$a_Lang, [$a_Form, [$a_Dialect [,$aD_Opt[,$as_Array]]]]])
; Parameter(s):     $a_Lang  (Optional) = the language code to be used (Default (-1) is @OSLang) --- See the AutoIt help file for codes
;                   $a_Form (Optional) - 1 = Full name of the langauge (Default), 2 = Abbreviated name
;                   $a_Dialect (Optional) - 1 = Include dialect in the string (Default), anything else = Do not include dialect
;                   $aD_Opt (Optional) - 1 = Return dialect in uppercase (default), anything else = Return dialect in lowercase
;                   $asArray (Optional - 1 = Return $a_Form as an array
; Requirements:
; Return Value(s):  On Success - Returns a string containing the language and optionally the dialect (if $a_Form = 1 and $a_Dialect = 1)
; Author(s):        George (GEOSoft) Gedye
; Notes:            If either $a_Form or $a_Dialect are specified then the preceeding parameters must also be specified
;                   however blank strings can be used (the defaults will be chosen)
;                   The dialect will usually be returned using the ISO 3166 standard
;                   The abbreviated name follows the ISO 639 Standard
;                   If $a_form <> 1 and a long form is returned then it's because I have been unable to verify the language abbreviation
;                   If $as_Array = 1 then an array is returned. Any language
; Modifications:
; Example(s):     _SetLanguage("1009")     Returns English (CA)
;                 _SetLanguage(@OSLang,2,1,1,1) Returns an array containing abbreviations
;===============================================================================

Func _SetLanguage($a_Lang = -1, $a_Form = 1, $a_Dialect = 1, $aD_Opt = 1, $as_Array = 0)
   If $a_Lang = -1 Then $a_Lang = @OSLang
   $hDialect = ''
   $hCde_Pge = ''
   $hNative = ''
   If $a_Form <> 1 Then $a_Dialect = 0
   If StringLen ($a_Lang) = 3 Then $a_Lang = '0' & $a_Lang
   $r_Lang = StringRight ($a_Lang, 2)
   $l_Lang = StringLeft ($a_Lang, 2)
   If $a_Form = 1 Then
      $Form = StringSplit ('Afrikaans|Albanian|Arabic|Armenian|Azerbijani|Basque|Belarusian|Bulgarian|Catalan|Chinese|Croatian|Czech|Danish|' _
            & 'Dutch|English|Estonian|Faeroese|Farsi|Finnish|French|Georgian|German|Greek|Hebrew|Hindi|Hungarian|Icelandic|Indonesian|Italian|' _
            & 'Japanese|Kazakh|Konkani|Korean|Latvian|Lithuanian|Macedonian|Malay|Marathi|Norwegian|Polish|Portuguese|Romanian|Russian|' _
            & 'Sanskrit|Serbian|Slovak|Slovenian|Spanish|Swahili|Swedish|Tamil|Tatar|Thai|Turkish|Ukrainian|Urdu|Uzbek|Vietnamese', '|')
   ElseIf $a_Form = 2 Then
      $Form = StringSplit ('AF|SQ|AR|HY|AZ|EU|BE|BG|CA|CH|HR|CZ|DA|NL|EN|ET|FO|Farsi|FI|FR|GE|DE|EL|HE|HI|HU|IS|IN|IT|JP|KK|KOK|KO|' _
            & 'LV|LT|MK|MS|MR|NN|PL|PT|RO|RU|SA|SR|SK|SL|ES|SW|SE|TA|TT|TH|TR|UK|UR|UZ|VI', '|')
   EndIf
   If $as_Array = 1 Then Return $Form ;;<<=========  Used for populating lists and comboboxes
   Switch $r_Lang
      Case '01', '2c', '04', '13', '09', '0c', '07', '10', '3e', '14', '16', '0a', '1d'
         $a_Dialect = $a_Dialect
      Case Else
         $a_Dialect = 0
         $hDialect = $hDialect
   EndSwitch
   Switch $r_Lang
      Case '36'
         $Lang = $Form[1]
      Case '1c'
         $Lang = $Form[2]
      Case '01'
         $Lang = $Form[3]
         If $a_Dialect = 1 Then
            Switch $l_Lang
               Case '04'
                  $hDialect = ' (SA)';;Saudi Arabia
               Case '08'
                  $hDialect = ' (IQ)';;Iraq
               Case '0c'
                  $hDialect = ' (EG)';;Egypt
               Case '10'
                  $hDialect = ' (LY)';;Libya
               Case '14'
                  $hDialect = ' (DZ)' ;;Algeria
               Case '18'
                  $hDialect = ' (MA)';;Morocco
               Case '1c'
                  $hDialect = ' (TN)';;Tunisia
               Case '20'
                  $hDialect = ' (OM)';;Oman
               Case '24'
                  $hDialect = ' (YE)';;Yemen
               Case '28'
                  $hDialect = ' (SY)';;Syria
               Case '2c'
                  $hDialect = ' (JO)';;Jordan
               Case '30'
                  $hDialect = ' (LB)';;Lebanon
               Case '34'
                  $hDialect = ' (KW)';;Kuwait
               Case '38'
                  $hDialect = ' (AE)';;United Arab Emirates
               Case '3c'
                  $hDialect = ' (BH)';;Bahrain
               Case '40'
                  $hDialect = ' (QA)';;Qatar
            EndSwitch
         EndIf
      Case '2b'
         $Lang = $Form[4]
      Case '2c'
         $Lang = $Form[5]
         If $a_Dialect = 1 Then
            Switch $l_Lang
               Case '04'
                  $hDialect = ' (Latin)';;Latin
               Case '08'
                  $hDialect = ' (Cyrillic)';;Crylic
            EndSwitch
         EndIf
      Case '2d'
         $Lang = $Form[6]
      Case '23'
         $Lang = $Form[7]
      Case '02'
         $Lang = $Form[8]
      Case '03'
         $Lang = $Form[9]
      Case '04'
         $Lang = $Form[10]
         If $a_Dialect = 1 Then
            Switch $l_Lang
               Case '04'
                  $hDialect = ' (TH)';;Thailand
               Case '08'
                  $hDialect = ' (PRC)'
               Case '0c'
                  $hDialect = ' (HK)'
               Case '10'
                  $hDialect = ' (SG)';;Singapore
               Case '14'
                  $hDialect = ' (MO)';;Macao
               Case '4c'
                  $hDialect = ' (MY)';;Malaysia
            EndSwitch
         EndIf
      Case '1a'
         $Lang = $Form[11]
      Case '05'
         $Lang = $Form[12]
      Case '06'
         $Lang = $Form[13]
      Case '13'
         $Lang = $Form[14]
         If $a_Dialect = 1 Then
            Switch $l_Lang
               Case '04'
                  $hDialect = ' (Std)'
               Case '08'
                  $hDialect = ' (Belg)'
            EndSwitch
         EndIf
      Case '09' ;;<<====  English
         $Lang = $Form[15]
         If $a_Dialect = 1 Then
            Switch $l_Lang
               Case '04'
                  $hDialect = ' (US)'
               Case '08'
                  $hDialect = ' (UK)'
               Case '0c'
                  $hDialect = ' (AU)'
               Case '10'
                  $hDialect = ' (Can)'
               Case '14'
                  $hDialect = ' (NZ)'
               Case '1c'
                  $hDialect = ' (SA)'
               Case '18'
                  $hDialect = ' (IE)';;Ireland
               Case '20'
                  $hDialect = ' (JM)';;Jamaica
               Case '24'
                  $hDialect = ' (Carib)';;
               Case '28'
                  $hDialect = ' (BZ)';;Belize
               Case '2c'
                  $hDialect = ' (TT)';;Trinidad & Tobago
               Case '30'
                  $hDialect = ' (ZW)';;Zimbabwe
               Case '34'
                  $hDialect = ' (PH)';;Philipines
            EndSwitch
         EndIf
      Case '25'
         $Lang = $Form[16]
      Case '38'
         $Lang = $Form[17]
      Case '29'
         $Lang = $Form[18]
      Case '0b'
         $Lang = $Form[19]
      Case '0c' ;;<<====  French
         $Lang = $Form[20]
         If $a_Dialect = 1 Then
            Switch $l_Lang
               Case '04'
                  $hDialect = ' (Std)'
               Case '08'
                  $hDialect = ' (Belg)'
               Case '0c'
                  $hDialect = ' (Can)'
               Case '10'
                  $hDialect = ' (Swiss)'
               Case '14'
                  $hDialect = ' (Lux)'
               Case '18'
                  $hDialect = ' (Monaco)'
            EndSwitch
         EndIf
      Case '37'
         $Lang = $Form[21]
      Case '07' ;;<<====  German
         $Lang = $Form[22]
         If $a_Dialect = 1 Then
            Switch $l_Lang
               Case '04'
                  $hDialect = ' (Std)'
               Case '08'
                  $hDialect = ' (Swiss)'
               Case '0c'
                  $hDialect = ' (Aust)'
               Case '10'
                  $hDialect = ' (Lux)'
               Case '14'
                  $hDialect = ' (Liech)'
            EndSwitch
         EndIf
      Case '08'
         $Lang = $Form[23]
      Case '0d'
         $Lang = $Form[24]
      Case '39'
         $Lang = $Form[25]
      Case '0e'
         $Lang = $Form[26]
      Case '0f'
         $Lang = $Form[27]
      Case '21'
         $Lang = $Form[28]
      Case '10'
         $Lang = $Form[29]
         If $a_Dialect = 1 Then
            Switch $l_Lang
               Case '04'
                  $hDialect = ' (Std)'
               Case '08'
                  $hDialect = ' (Sw)'
            EndSwitch
         EndIf
      Case '11'
         $Lang = $Form[30]
      Case '3f'
         $Lang = $Form[31]
      Case '57'
         $Lang = $Form[32]
      Case '12'
         $Lang = $Form[33]
      Case '26'
         $Lang = $Form[34]
      Case '27'
         $Lang = $Form[35]
      Case '2f'
         $Lang = $Form[36]
      Case '3e'
         $Lang = $Form[37]
         If $a_Dialect = 1 Then
            Switch $l_Lang
               Case '04'
                  $hDialect = ' (Malaysia)'
               Case '08'
                  $hDialect = ' (BD)'
            EndSwitch
         EndIf
      Case '4e'
         $Lang = $Form[38]
      Case '14'
         $Lang = $Form[39]
         If $a_Dialect = 1 Then
            Switch $l_Lang
               Case '04'
                  $hDialect = ' (Bokmal)'
               Case '08'
                  $hDialect = ' (Nynorsk)'
            EndSwitch
         EndIf
      Case '15'
         $Lang = $Form[40]
      Case '16'
         $Lang = $Form[41]
         If $a_Dialect = 1 Then
            Switch $l_Lang
               Case '04'
                  $hDialect = ' (Br)'
               Case '08'
                  $hDialect = ' (Std)'
            EndSwitch
         EndIf
      Case '18'
         $Lang = $Form[42]
      Case '19'
         $Lang = $Form[43]
      Case '4f'
         $Lang = $Form[44]
      Case '1a'  ;;<<====  Spanish
         $Lang = $Form[45]
         If $a_Dialect = 1 Then
            Switch $l_Lang
               Case '04'
                  $hDialect = ' (Trad)'
               Case '08'
                  $hDialect = ' (Mex)'
               Case '0c'
                  $hDialect = ' (Mod)'
               Case '10'
                  $hDialect = ' (Guat)'
               Case '14'
                  $hDialect = ' (CR)'
               Case '18'
                  $hDialect = ' (Pan)'
               Case '1c'
                  $hDialect = ' (DR)'
               Case '20'
                  $hDialect = ' (Venez)'
               Case '24'
                  $hDialect = ' (Col)'
               Case '28'
                  $hDialect = ' (Peru)'
               Case '2c'
                  $hDialect = ' (Arg)'
               Case '30'
                  $hDialect = ' (Ecuad)'
               Case '34'
                  $hDialect = ' (Chile)'
               Case '38'
                  $hDialect = ' (Urug)'
               Case '3c'
                  $hDialect = ' (Parag)'
               Case '40'
                  $hDialect = ' (Bol)'
               Case '44'
                  $hDialect = ' (El_Sal)'
               Case '48'
                  $hDialect = ' (Hond)'
               Case '4c'
                  $hDialect = ' (Nic)'
               Case '50'
                  $hDialect = ' (PR)'
            EndSwitch
         EndIf
      Case '1b'
         $Lang = $Form[46]
      Case '24'
         $Lang = $Form[47]
      Case '0a'
         $Lang = $Form[48]
      Case '41'
         $Lang = $Form[49]
      Case '1d'
         $Lang = $Form[50]
         If $a_Dialect = 1 Then
            If $l_Lang = '08' Then $hDialect = ' (Fin)'
         EndIf
      Case '49'
         $Lang = $Form[51]
      Case '44'
         $Lang = $Form[52]
      Case '1e'
         $Lang = $Form[53]
      Case '1f'
         $Lang = $Form[54]
      Case '22'
         $Lang = $Form[55]
      Case '20'
         $Lang = $Form[56]
      Case '43'
         $Lang = $Form[57]
      Case '2a'
         $Lang = $Form[58]
      Case Else
         $Lang = $Form[15]
   EndSwitch
   If $aD_Opt <> 1 Then $hDialect = StringLower($hDialect)
   Return $Lang & $hDialect
EndFunc   ;<==> Language($a_Lang, $a_Form, $a_Dialect)

;===============================================================================
; Function Name:    _Lang_Ab()
; Description:      Returns the 2 letter abbreviation of a language
; Syntax:           _SetLanguage([$sLang])
; Parameter(s):     $sLang  (Optional) = the language code to be used (Default is English) 
; Requirements:
; Return Value(s):  On Success - Returns a string containing the language abbreviation
; Author(s):        George (GEOSoft) Gedye
; Notes:            Unfinished
; Modifications:
; Example(s):       _Lang_Ab("Dutch")     Returns nl
;===============================================================================

Func _Lang_Ab($sLang = "English")
   ;Return "en|nl"
   Local $rLang
   Switch $sLang
      Case "English"
         $rLang = "en"
      Case "Dutch"
         $rLang = "nl"
      Case "French"
         $rLang = "fr"
      Case "German"
         $rLang = "de"
      Case "Greek"
         $rLang = "el"
      Case "Italian"
         $rLang = "it"
      Case "Portuguese"
         $rLang = "pt"
      Case "Spanish"
         $rLang = "es"
      Case "Arabic"
         $rLang = "ar"
      Case "Japanese"
         $rLang = "ja"
      Case "Russian"
         $rLang = "ru"
      Case "Korean"
         $rLang = "ko"
   EndSwitch
   Return $rLang
EndFunc