Sprache wechseln

  • HI AutoIt-Community,

    zuerst muss ich mal meine Begeisterung für dieses erstklassige Programmiertool loswerden, es ist wirklich sehr einfach zu bedienen und macht echt super viel Spaß damit zu "experimentieren" . ;)

    Im Moment schreibe ich gerade n eigenes Script und habe es schon fast fertig.

    Aber bei einer Sache komme ich nicht wirklich weiter und zwar habe ich vor, dass mein Programm über 2 Sprachen verfügt, sprich als User kann man dann über nen Menüpunkt zwischen 2 Sprachen wählen, wobei eine natürlich standartmäßig schon ausgewählt ist. Nun zum Problem: Irgendwie klappt das Wechseln zwischen den Sprachen nicht reibungslos, weil ich halt 2 GUIs habe, mit jeweils einer dazugehörigen Funktion. Dabei arbeite ich mit @SW_SHOW und @SW_HIDE.

    Vllt gehts ja irgendwie, dass man das alles unter einer GUI unterbringet, die sich dann "aktualisiert", je nachdem welche Sprache ausgewählt wird. Und es wäre auch gut, wenn man dabei ohne externe Dateien, wie INI's auskommt, weil ich gerne nur die eine EXE hätte.

    Also bin mal auf eure Ratschläge bespannt.

    mfg Mungoo

    • Offizieller Beitrag

    Naja, das ist halt relativ aufwendig. Ich habe Dir mal ein Beispiel erstellt:

    Spoiler anzeigen
    [autoit]


    #include<ComboConstants.au3>
    #include <GUIConstantsEx.au3>

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

    Example()

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

    Func Example()
    Local $Button_1, $Button_2, $Combo
    Local $msg1 = "Notepad will started", $msg2 = "File will opened!"
    GUICreate("My GUI Button", 360, 240)
    $Button_1 = GUICtrlCreateButton("Run Notepad", 10, 30, 100, 25)
    $Button_2 = GUICtrlCreateButton("Open File...", 120, 30, 100, 25)
    $Combo = GUICtrlCreateCombo("", 260, 32, 80, 25, $CBS_DROPDOWNLIST)
    GUICtrlSetData(-1, "englisch|deutsch", "englisch")
    GUISetState()
    While 1
    Switch GUIGetMsg()
    Case $GUI_EVENT_CLOSE
    ExitLoop
    Case $Button_1
    MsgBox(0, 'Test', $msg1)
    Case $Button_2
    MsgBox(0, 'Test', $msg2)
    Case $Combo
    Switch GUICtrlRead($Combo)
    Case "deutsch"
    GUICtrlSetData($Button_1, "Starte Notepad")
    GUICtrlSetData($Button_2, "Öffne Datei...")
    $msg1 = "Notepad wird gestartet!"
    $msg2 = "Datei wird geöffnet!"
    Case "englisch"
    GUICtrlSetData($Button_1, "Run Notepad")
    GUICtrlSetData($Button_2, "Open File...")
    $msg1 = "Notepad will started"
    $msg2 = "File will opened!"
    EndSwitch
    EndSwitch
    WEnd
    EndFunc ;==>Example

    [/autoit]

    @all: Haltet euch mit Kommentaren zu den übersetzten Texten zurück. Ich weiß, dass mein englisch miserabel ist. :D

    • Offizieller Beitrag

    Für eine komplexe Mehrsprachigkeit empfiehlt es sich, für alle verwendeten Label, Texte, Messages etc. Einträge in einer INI-Datei zu erstellen. Die Sprachwahl kann zum Einen manuell durch den User ausgeführt werden oder zum Anderen unter Nutzung des Makros @OSLang automatisiert werden.

  • Also ich habs mal in meinem Script angewandt und es klappt hervorragend. :thumbup: Genau so etwas hatte ich mir auch vorgestellt. Ach wenn dadurch vlt mehr Schreibarbeit entsteht, aber das nehme ich gerne in Kauf, weil ich ja auf externe Dateien verzichten möchte. Vielen Dank!

    Nochmal ne andere kleine Frage ... kann eine Progress-bar auch den Fortschritt von CMD-Abläufen/Befehlen (in diesem Fall von Netsh) darstellen oder ist es in so einem Fall günstiger sie unabhängig durchlaufen zu lassen, ohne Rücksicht auf den CMD-Status??

    mfg Mungoo