UDF für Mehrsprachige Programme und SciTE String Export Tool

  • Hallo,


    ich würde gerne an dieser Stelle einmal meine UDF für mehrsprachige Programme vorstellen. Das Projekt besteht aus zwei Teilen, einer (kleinen) UDF und einem Programm zum Überführen von Strings direkt aus SciTE in die Sprachdatei. Dabei habe ich mich gegen ini-Dateien entschieden und lieber die von z.B. Android bekannten .xml-Dateien verwendet - obwohl AutoIt keine Native xml-Unterstützung hat. Primär viel diese Entscheidung, da es im Internet diverse xml-Übersetzer gibt (u.a. auch professionell) und der Aufbau der Datei einigen bereits von Android etc. bekannt ist. Natürlich kann jeder wie es ihm auch beliebt dies verändern.

    Die UDF an sich muss, wie immer, am Anfang ein mal mit #include aufgerufen werden. Interessant an der UDF ist eigentlich nur zwei Funktionen, nämlich _LangInit($sFilePath) und s($sString). Mit dem ersten Befehl wird die Sprachdatei initialisiert, mit dem Zweiten aus der xml-Datei der zum Key passende String ausgegeben. Zum Beispiel:

    AutoIt
    MsgBox(0, '', s('Test')) ; dies würde den String für den Key "Test", der in der xml Datei gespeichert ist, ausgeben.

    Aber das war gerade mal die Nebensache, denn das eigentliche Programm ist gar nicht die UDF an sich.
    Den wichtigsten Teil stellt der "Language Transmitter" dar, womit man ganz bequem entweder bereits vorhandene Texte in die Sprachdatei bannen kann oder direkt neue Strings hinzufügen kann. Hierbei gehen wir von zwei möglichen Fällen aus:

    1. Fall: Der User hat bereits einen String der jetzt in eine Sprachdatei übergeben werden soll (z.B. altes Programm für andere/verschiedene Sprachen verfügbar machen, oder man hat einfach vergessen das Programm zu benutzen )
    Nun geht man folgendermaßen vor: 1. den zu übergebenen Text in SciTE markieren, 2. Alt+A drücken (Standard) und 3. eine Variable/Key für den Text eingeben.
    Der Transmitter wird automatisch den Text in die Datei schreiben und in SciTE den Verweis auf jenen Key bereits mit s($sString) einfügen. Dabei werden AutoIt Variablen, Macros etc. in der Markierung über StringFormat automatisch berücksichtigt!

    Spoiler anzeigen


    Bsp.:

    AutoIt
    MsgBox(64, "Titel", "Dies ist nur ein Beispiel Text")
    ; Text jeweils markieren und Alt+A drücken, den Input-Boxen folgen und man könnte auf dieses Ergebnis kommen:
    MsgBox(64, s('TestTitleMsg'), s('ExampleText'))
    
    ;Ein etwas speziellerer Fall:
    $sVar = "Wert: " & $iWert & @CRLF & 'Noch ein Wert: '& $iWert2
    ; Wieder den kompletten String, aber mit allen Macros und Variablen markieren ergibt bspw.:
    $sVar = StringFormat(s('Key'), $iWert, $iWert2)

    In der XML Datei stünde dazu passend:

    <string name="Key">Wert: %s\r\nNoch ein Wert: %s</string>


    2. Fall: Der User möchte einen neuen String erstellen und direkt in die Sprachdatei übergeben
    In diesem Fall muss einfach Alt+A (Standard) gedrück werden, zwei InputBoxen poppen auf und der User kann die Variable/Key und den Text eingeben, welcher direkt in die Datei geschrieben wird,
    und in SciTE der Verweis darauf eingefügt wird.


    Installation/SetUP

    Spoiler anzeigen


    1. Kopiere die UDF (LanguageSupport.au3) in deinen Include Ordner

    2. In die au3.properties einfügen (etwas runterscrollen) -> In SciTE auf Options -> Open au3.properties (falls mehr als 35 in der Liste sein sollten bitte die Nummer ändern)

    Code
    # 35 mataran's Language Transmitter
    # save.before 1 = save, 2 = do not save
    command.35.$(au3)=$(user.tools.path)\LanguageTransmitter.exe /in "$(FilePath)"
    command.input.35.*=$(CurrentSelection)
    command.subsystem.35.$(au3)=1
    command.name.35.$(au3)=Language Transmitter
    command.shortcut.35.$(au3)=Alt+A
    command.save.before.35.$(au3)=1
    command.replace.selection.35.$(au3)=1
    command.quiet.35.$(au3)=1# 35 mataran's Language Transmitter

    3. Dann die LanguageTransmitter.exe Datei in den Scite-Tools Ordner einfügen. Der ShortCut kann oben auch angepasst werden. Standard ist erst einmal Alt+A.
    Standard strings.xml Datei kann in der LanguageTransmitter.ini im Scite-Tools Ordner oder im LanguageTransmitter bearbeitet werden, indem man keinen Text markiert, und beide male auf Abbrechen und/oder Nein drückt.

    SciTE Ordner ist Standardmäßig in: C:\Program Files (x86)\AutoIt3\SciTE


    Anmerkung von BugFix:

    Bei einem Update wird der alte SciTE-Ordner kpl. gelöscht. User-Einträge sind alle ausgelagert nach: C:\Users\USER\AppData\Local\AutoIt v3\SciTE und bleiben erhalten
    Einfach in SciTEUser.properties eine eigene Propertie für Tools anlegen, z.B. user.tools.path=C:\MeineTools und dort das Skript speichern und darauf verweisen. $(user.tools.path)\LanguageTransmitter.exe "$(CurrentSelection)"

    Also, mit ein klein wenig mehr Aufwand könnt ihr gleich sicherstellen, dass bei einem Systemreset o.ä. der Teil nicht verloren geht! Den obenstehenden Teil für die au3.properties müssen daraufhin (wie von BugFix beschrieben) angepasst werden.

    Beispiele
    Example Scripts, sowie der SourceCode sind mit im Anhang, da dafür die passende Sprachdatei benötigt wird. Auch ein Script zur Sprachauswahl, was am Anfang des Programms aufgerufen werden kann habe ich angefügt.

    Language File Checker

    Des Weiteren ein kleines Script zur Kontrolle, ob alle benötigten Strings in der xml-Datei sind, und ob womöglich Strings existieren, die nicht benötigt werden findet ihr ebenfalls im Source Ordner der Zip (Language File Checker).


    Ich hoffe euch gefällt mein kleines Tool, weitere Ideen, Anregungen oder Tipps sind jederzeit Willkommen!
    mataran

    • Offizieller Beitrag

    Dann die LanguageTransmitter.exe Datei in den Scite Ordner einfügen.

    Davon rate ich ab. Bei einem Update wird der alte SciTE-Ordner kpl. gelöscht. User-Einträge sind alle ausgelagert nach: C:\Users\USER\AppData\Local\AutoIt v3\SciTE und bleiben erhalten
    Einfach in SciTEUser.properties eine eigene Propertie für Tools anlegen, z.B. user.tools.path=C:\MeineTools und dort das Skript speichern und darauf verweisen. $(user.tools.path)\LanguageTransmitter.exe "$(CurrentSelection)"

  • Davon rate ich ab. Bei einem Update wird der alte SciTE-Ordner kpl. gelöscht. User-Einträge sind alle ausgelagert nach: C:\Users\USER\AppData\Local\AutoIt v3\SciTE und bleiben erhaltenEinfach in SciTEUser.properties eine eigene Propertie für Tools anlegen, z.B. user.tools.path=C:\MeineTools und dort das Skript speichern und darauf verweisen. $(user.tools.path)\LanguageTransmitter.exe "$(CurrentSelection)"

    Damit hast du natürlich Recht. Ich werds mal im Post ergänzen/ändern :)

  • UPDATE 26.01.2018

    Ich hatte kurz Zeit um primär den Language Transmitter zu überarbeiten:

    - der LanguageTransmitter erkennt jetzt automatisch viele Arten von Strings die Variablen, Macros etc. enthalten und parst diese als StringFormat

    - kleine Verbesserung der UDF

    Bspw. wird nach markieren und verwenden des Language Transmitters aus

    Code
    $sVar = "Wert: " & $iWert & @CRLF & 'Noch ein Wert: '& $iWert2
    ; wird zu
    $sVar = StringFormat(s('Key'), $iWert, $iWert2)

    wobei in der xml Datei folgendes zu finden wäre: <string name="Key">Wert: %s\r\nNoch ein Wert: %s</string>

    wie zu sehen ist wird @CRLF direkt durch \r\n ersetzt wird.

    Der Spaß sollte auch zu anderen XML UDFs kompatibel sein, für eine Überarbeitung der mitgegebenen hatte ich noch keine Zeit.

    Download im OP aktualisiert.

    Lg

    3 Mal editiert, zuletzt von mataran (26. Januar 2018 um 17:36)