Sprachvariablen für allgemeine Pakete richtig anlegen

  • Durch den Fehler „Nutzungsbestimmungen in den verschiedenen EAs“ ist mir etwas aufgefallen, was doch zumindest für die Entwickler unter euch sehr interessant sein dürfte.

    Hier steckte weniger ein Logikfehler dahinter, als einfach eine Unachtsamkeit. Sprachvariablen werden aktuell für eine Endanwendung und nicht für ein Paket gespeichert, braucht man diese nun in einer anderen Endanwendung, müssen diese erneut erstellt werden. So ein Schönheitsfehler ist aber bei Paketen wie Nutzungsbestimmungen oder auch bei der Hilfe nicht gerade gewünscht.

    Die Lösung hinter diesem Problem ist aber relativ einfach. Dem LanguageEditor wird in der Methode updateItems die packageID des Paketes übergeben. Dafür besitzt das WCF die Methode getPackageID.

    Folgender Code zeigt, wie es gemacht wird.

    PHP Source Code

    1. $language = new LanguageEditor($languageID);
    2. $language->updateItems(array('wcf.test.test' => $name), 0,
    3. WCF::getPackageID('paket'));



    Jetzt besteht nur noch das Problem, dass wir die Sprache der einzelnen Endanwendungen aktualisieren müssen, da reicht ein Aufruf der Funktionen deleteLanguageFiles und deleteCompiledTemplates , mit der entsprechenden languageID und der Kategorie.

    PHP Source Code

    1. LanguageEditor::deleteLanguageFiles($languageID, 'wcf.test');
    2. LanguageEditor::deleteCompiledTemplates();

    Zusammen sieht es nun so aus:

    PHP Source Code

    1. $language = new LanguageEditor($languageID);
    2. $language->updateItems(array('wcf.test.test' => $name), 0,
    3. WCF::getPackageID('paket'));
    4. LanguageEditor::deleteLanguageFiles($languageID, 'wcf.test');
    5. LanguageEditor::deleteCompiledTemplates();


    Man sollte dabei beachten, dass diese Art der Speicherung von Sprachvariablen nur in einem einzigartigen WCF-Paket erfolgen sollte, da es sonst zu anderen Fehlern kommen könnte.
    Nur wer einfache Dinge genießen kann, kann die besonderen wertschätzen.

    Teralios' | TeraliosLP | Teralios on GitHub

    Für's WCF
    Teralios' BBCodes

    3,655 times read

Comments 5

  • User Avatar

    Tr3kk3r -

    deleteCompiledtemplates() ist keine statische Funtion, richtig wäre statt LanguageEditor::deleteCompiledTemplates(); folgendes zu nutzen: $language->deleteCompiledTemplates(); , sonst gibt es einen netten Fatal Error, wenn man sich an die Strict Standard hält: "Strict Standards: Non-static method LanguageEditor::deleteCompiledTemplates() should not be called statically in XXX"

  • User Avatar

    GameR -

    Ufdada, ich glaub ich kann schon erwarten, dass ihr euch auch mal die Methoden anschaut. In dem Fall steht aber Paket für den Paketbezeichner, und wcf.test für eine Sprachkategorie.

  • User Avatar

    ufdada -

    Könntest du die Beispielnamen vielleicht etwas genauer beschreiben? Es geht nämlich leider nicht hervor ob wcf.test.test nun ein Paketbezeichner oder die Sprachvariable ist (ich geh von zweiterem aus). Zudem Frage ich mich für was paket steht: Für den Paketbezeichner oder für den Namen?

    Beim LE::dLF wird wcf.test wohl die Sprachkategorie sein, deren Variablen gelöscht werden sollen.

    Ansonsten muss ich sagen gut zu wissen ;)

  • User Avatar

    GameR -

    Nein, sowas brauchst du aber z.B. bei der Hilfe wenn die Hilfe für mehre Sprachen da sein soll.

    In den Nutzungsbestimmungen war es so, dass die Sprachvariabeln, die ja dynmaisch angelegt werden, immer nur für die Endanwendung angelegt wurden, damit waren sie in anderen EAs nicht verfügbar, mit dem "Trick", kann man das aber umgehen.

  • User Avatar

    Toby -

    Das wäre dann in einem Postinstallscript drin, oder?