Handhabung des Unterstrich Symbols in mod.lua und strings.lua - (I18N)

Willkommen in der Transport Fever Community

Wir begrüßen euch in der Fan-Community zu den Spielen Transport Fever und Train Fever, den Wirtschaftssimulatoren von Urban Games. Die Community steht euch kostenlos zur Verfügung damit ihr euch über das Spiel austauschen und informieren könnt. Wir pflegen hier einen freundlichen und sachlichen Umgang untereinander und unser Team steht euch in allen Fragen gerne beiseite.

 

Die Registrierung und Nutzung ist selbstverständlich kostenlos.

 

Wir wünschen euch viel Spaß und hoffen auf rege Beteiligung.

Das Team der Transport-Fever Community


  • Hallo Community,


    ich habe ein kleines Problem mit dem Verständnis, wie LUA Unterstriche zur I18N in einer Tabelle einsetzt. Hier bei _("Sandbox mode"), und _("Change everything."),


    mod.lua

    strings.lua

    Code
    function data()
    return {
        de = {
            ["Sandbox mode"] = "Sandkastenmodus",
            ["Change everything."] = "Alles kann geändert werden."
        }
    }
    end

    Kann mir jmd erklären, wie ein Lua Interpreter die Unterstriche nicht als Fehler erkennt? Ich verwende aktuell LUAJ, um die Tabelle der data- Funktion der mod.lua auszulesen. Erhalte aber leider eine Fehlermeldung:

    Code
    lua: main.lua:7: attempt to call a nil value (global '_')
    stack traceback:
        main.lua:7: in function 'data'
        main.lua:23: in main chunk
    [C]: in ?

    Ist der Unterstrich in LUA eine Implementierte Vorrichtung, oder ist das etwas, was von Transport Fever 2 kommt? Ich brauche nicht die Möglichkeit die Texte für die entsprechnde Sprache zu ersetzen. Mir geht es ums Verständnis, was der Unterstrich bedeutet. Muss ich evtl ein LUA-Modul importieren, dass dieser Unterstrich erkannt wird? Es würde mir ausreichen, wenn der Interpreter diesen Unterstrich verstehen würde, ich benötige keine Übersetzungsfunktion.

    Jmd der sich mit LUA Auskennt wird mir hier sicherlich direkt einen Hinweis geben können.


    Danke.

    2 Mal editiert, zuletzt von thewildmax ()

  • thewildmax

    Hat den Titel des Themas von „Handhabung der des Unterstrich Symbols in mod.lua und strings.lua - (I18N)“ zu „Handhabung des Unterstrich Symbols in mod.lua und strings.lua - (I18N)“ geändert.
  • Hallo, wirklich helfen tut mir das als nicht lua programmierer nun auch nicht. Handelt es sich bei dem Unterstrich um einen Funktionsnamen? Und diese Funktion ist in der mod.lua nicht vorhanden? Es scheint. als wäre da noch ein Menchanismus in weiteren spielinternen Skripten...


    Wenn ich meinem Skript testweise das hier hinzufüge wird Der Text immer mit "testString" zurückgegeben. Da steckt also doch ein mechanismus in anderen Skripten.

    Da wird dann wohl über die strings.lua Tabelle ein Lookup umgesetzt.

    Code
    




function _(str)
      return "testString";
    end

    Einmal editiert, zuletzt von thewildmax ()

  • Hallo,


    ja es ist wohl einfach ein "leerer" Funktionsname. Ich versteh die Syntax als Java Entwickler nur bedingt... Ich hab mich gefragt, ob der Unterstrich eben generell eine spezielle Bedeutung hat, aber sieht wohl so aus, als wäre das einfach ein Zeichen, das als Name erlaubt ist. Soll wohl locale oder globale Variablen kennzeichnen.


    Aber ja hinter der Funktion steckt einfach dann ein Table-Lookup. Tue mich aber noch schwer, wenn in der strings.lua statt des ["blabla"] Terms eine Variable steht. Aber ich hab es verstanden, wie das jetzt wohl zu handhaben ist.


    Danke.

  • Technisch ist der LUA Syntax sehr einfach:

    https://www.lua.org/manual/5.2/manual.html#9

    bzw.

    https://www.lua.org/manual/5.2/manual.html#3.1


    Aber, es gibt mods die auch einfach irgendwelche Globals nutzen oder anderen Kram,

    daher benutzt das Forum hier für die CommonAPI2 eine Version auszulesen nur ein simplen Regex für die Versionsnummer. Sonst müsste man korrekterweise eine komplette LUA Umgebung mit allen Dateien aus TPF2 erschaffen...


    Für die erste TPF2 Version und TPF1 war _ eine LUA Funktion die Translate aufgerufen hat, seit dem Modding Update ist es definitiv eine C Funktion.

  • Schon mal was von "Gettext" gehört?

    https://de.m.wikipedia.org/wiki/GNU_gettext


    Das ist nen allgemeine Konvention den _ als Funktionsnamen für den Aufruf zu nutzen. Dahinter steckt also tatsächlich nen Funktionsaufruf, den man ausgeschrieben als "gettext" lesen kann und die Bibliothek ist nicht nur speziell für TPF2 in LUA umgesetzt sondern für sehr viele Sprachen so verfügbar.


    MFG PMV

BlueBrixx