Variable inerhalb einer Funktion speichern

  • Hallo,

    wie kann man einen Variable (Array) inerhalb einer Funktion speichern?

    Hier mein Script:

    [autoit]

    $Ini_Load = False

    [/autoit][autoit][/autoit][autoit]

    $g = Lg("ger", "Übernehmen")
    $1 = Lg("ger", "OK.")

    [/autoit][autoit][/autoit][autoit]

    MsgBox(0, $1, $g)

    [/autoit][autoit][/autoit][autoit]

    Func Lg($Lang, $Key)
    Local $Return
    If $Ini_Load = False Then
    $Load_Language = IniReadSection(@ScriptDir & "\" & $Lang & ".ini", "Language")
    EndIf
    For $NextLoop1 = 1 To $Load_Language[0][0]
    If $Load_Language[$NextLoop1][0] = $Key Then
    $Return = $Load_Language[$NextLoop1][1]
    ExitLoop
    EndIf
    Next
    Return $Return
    EndFunc ;==>Lg

    [/autoit]
  • Meinst du das so, dass der nicht jedes mal die Ini laden muss ?

    -->

    Spoiler anzeigen
    [autoit]


    $Load_Language = IniReadSection(@ScriptDir & "\" & $Lang & ".ini", "Language")

    [/autoit] [autoit][/autoit] [autoit]

    $g = Lg("ger", "Übernehmen", $Load_Language)
    $1 = Lg("ger", "OK.", $Load_Language)

    [/autoit] [autoit][/autoit] [autoit]

    MsgBox(0, $1, $g)

    [/autoit] [autoit][/autoit] [autoit]

    Func Lg($Lang, $Key, $lang_array)
    Local $Return

    [/autoit] [autoit][/autoit] [autoit]

    For $NextLoop1 = 1 To $lang_array[0][0]
    If $lang_array[$NextLoop1][0] = $Key Then
    $Return = $lang_array[$NextLoop1][1]
    ExitLoop
    EndIf
    Next
    Return $Return
    EndFunc ;==>Lg

    [/autoit]

    There are only 10 types of people in the world:
    Those who understand binary - and those who don't.

    • Offizieller Beitrag

    Warum Deklarierst du die Variable nicht außerhalb der Funktion als Global ?

    [autoit]

    Global $Load_Language

    [/autoit]

    Edit : Habe eigentlich nicht so richtig kapiert was du in deiner Funktion eigentlich machen willst . Was willst du zurückgeben ? Das jeweilige Wort in der ausgewählten Sprache ?

    • Offizieller Beitrag

    @Depreed: Leider auch ein Fall von völlig unzureichender Erklärung, wir können doch nicht immer raten.
    Ich vermute, dass du folgendes wolltest:
    "...in meinem Programm soll der User eine Sprachauswahl haben. Dazu soll eine Funktion zum Sprachwechsel aufgerufen werden, die dann aus einer INI die für diese Sprache erforderlichen Texte lädt und alle Label, Button etc. neu damit setzt..."
    Ist das korrekt?

  • Scheint ja so.
    Aber warum muss das IniReadSection unbedingt in die Funktion ?
    Wenn du die nur einmal einlesen willst musst du das entweder außerhalb
    der Funktion machen - dann als Global oder eben der Funktion die Array übergeben,
    oder die Variable Global vorher zB auf -1 setzen und in der Funktion eben abfragen,
    If $array = -1, oder logischer: If Not IsArray( $array ) Then $array = IniReadSection ...

    Ansonsten wüsste ich nicht, was du meinen könntest ;)

    There are only 10 types of people in the world:
    Those who understand binary - and those who don't.

  • Also ich wollte statt 50x IniRead einfach eine Funktion erstellen, dass die Ini mithilfe von InireadSection einmal ausließt und entsprechend wiedergibt. Ich wollte auch nicht, dass IniReadSection auserhalb der Funktion ist, da es so aussehen sollte:

    [autoit]

    Global $Load_Language
    Global $Ini_Load = False

    [/autoit][autoit][/autoit][autoit]

    $x = "ger"

    [/autoit][autoit][/autoit][autoit]

    $Button1 = GUICtrlCreateButton(Lg($x, "OK"), 50, 50, 75, 25, 0)
    $Button2 = GUICtrlCreateButton(Lg($x, "OK"), 100, 50, 75, 25, 0)

    [/autoit][autoit][/autoit][autoit]

    Func Lg($Lang, $Key)
    Local $Return
    If $Ini_Load = False Then
    $Load_Language = IniReadSection(@ScriptDir & "\" & $Lang & ".ini", "Language")
    MsgBox(0,"","Ini was loaded.")
    $Ini_Load = True
    EndIf
    For $NextLoop1 = 1 To $Load_Language[0][0]
    If $Load_Language[$NextLoop1][0] = $Key Then
    $Return = $Load_Language[$NextLoop1][1]
    ExitLoop
    EndIf
    Next
    Return $Return
    EndFunc ;==>Lg

    [/autoit]

    Die IniDatei sieht folgendermaßen aus:

    Code
    [Language]
    OK=OK
    Abbrechen=Abbrechen

    Links ist es auf Deutsch und rechts zwar auch aber es könnte auch eine andere Sprache sein.
    Es soll IniReadsection nur einmal in dieser Funktion benutzen und entsprechend für das nächstemal speichern.
    Ich hoffe das war nun verständlicher :) .