Arrays bereiten mir immer noch einen Knoten im Hirn

Silke Schümann wrote this 17:10:

Aktuell arbeite ich an einem Plugin für mehrfach intallierte Editlandsites, die unterschiedliche Sprachen bedienen. Das Plugin existiert bereits, aber es arbeitet noch nicht ganz so, wie ich mir das vorstelle.

Die Daten sind in den Textfiles nicht transparent genug. Ich arbeite bei Editland eben sowohl in den Textdateien wie auch über die Software selbst. Ich mag es also übersichtlich und selbst erklärend. Das aber erfordert eine gewisse transparenz und Übersichtlichkeit in den Dateien. Ich entschied mich für die Datenhaltung für eine Ini-Datei. ich finde die Ordnung in diesen Dateien einfach genial und man kann so praktisch mehrere Arrays in einer Datei unterbringen. Für das Sortieren und zuordnen von Sprachversionen also gut geeignet.

Wenn man eine Site übersetzt, macht es Sinn auch die Seitennamen zu übersetzen, so dass diese im Heimatland und der Zielgruppe der Übersetzung zur besseren Position in Suchergebnissen beitragen können. Das heißt, dass man kann nicht einfach im Unterordner einen einfachen Seitenvergleich machen und gleichlautende Seitennamen zuordnen. Neben der Bestimmung des Ordnernamens kommt das Sortieren und zuordnen der Seitennamen.

Ich gehe wie meist vom Ergebnis aus, d.h. ich habe mir erst einmal eine Ini-Datei mit den Daten, von denen ich denke, dass ich benötigen werde, geschrieben:

[settings]
mainLanguage = ".,DE"
folder = ".,cz,en,fr,it"
text = "DE,CZ,EN,FR,IT"
images = "de.gif,cz.gif,en.gif,fr.gif,it.gif"
darstellung = "imagelinks"

[pages]
index = "1|index|,,1|index|en,,"
aussteller = "1|aussteller|,,1|vendors|en,,"
besucher = "1|besucher|,,1|visitors|en,,"
anfahrt = "1|anfahrt|,,1|guide|en,,"
boersenordnung = "1|boersenordnung|,,,,"
impressum = "1|impressum|,,1|impressum|en,,"
kontakt = "1|kontakt|,contact|contact|en,,"
bilder = "1|bilder|,,1|pictures|en,,"

Zunächst einmal wird die Ini durch den Parser gejagt:

  1. $langArr = (file_exists($langsets)) ? parse_ini_file($langsets, TRUE) : "ERROR: Languagefile does not exist.";

Damit erhalte ich folgenden Array:

Array
(
    [settings] => Array
        (
            [mainLanguage] => .,DE
            [folder] => .,cz,en,fr,it
            [text] => DE,CZ,EN,FR,IT
            [images] => de.gif,cz.gif,en.gif,fr.gif,it.gif
            [darstellung] => imagelinks
        )

    [pages] => Array
        (
            [index] => 1|index|.,,1|index|en,,
            [aussteller] => 1|aussteller|.,,1|vendors|en,,
            [besucher] => 1|besucher|.,,1|visitors|en,,
            [anfahrt] => 1|anfahrt|.,,1|guide|en,,
            [boersenordnung] => 1|boersenordnung|.,,,,
            [impressum] => 1|impressum|.,,1|impressum|en,,
            [kontakt] => contact|kontakt|.,contact|contact|en,,
            [bilder] => 1|bilder|.,,1|pictures|en,,
        )

Es handelt sich um zwei geschachtelte Arrays, die sich grundsätzlich unterscheiden. Der Array [settings] hat Unterarrays mit vordefinierten Keys, d.h. ich weiß im Vorfeld wie ich diese Arrays ansprechen kann und muss. Nicht so bei dem Unterarray [pages], wenn ich also die eigentliche Seitenzuordnung ansprechen will, muss ich erst einmal herausfinden wie. Von der deutschen Installation, der führenden Sprache ist das kein Problem, denn der entscheidende Key steckt in der Uri der Seite und wird in Editland durch die Variable $s repräsentiert. Bin ich aber in einer der Übersetzungen, dann steckt gesuchte Wert in einem Unterarray des Unterarrays zu dem ich den Schlüssel noch nicht kenne. ich muss also diesen suchen. Ich probierte es mit der PHP-funktion array_walk(). Aber wie schon öfter der Fall, habe ich so meine Schwierigkeiten herauszufinden, was die Funktion eigentlich macht und wie ich diese einsetzen kann. Zwar klingt array_walk() schon irgendwie richtig, nur ich bekam kein Ergebnis zurückgeliefert. Also weiter gesucht.

In array_keys() hatte ich meine Funktion gefunden. Sie lieferte, was ich brauchte:

Array
(
    [0] => index
    [1] => aussteller
    [2] => besucher
    [3] => anfahrt
    [4] => boersenordnung
    [5] => impressum
    [6] => kontakt
    [7] => bilder
)

$arrKeys = array_keys($langArr[pages]); lieferte mir einen numerischen Wert, den ich mit der for-Schleife abarbeiten kann und mit den dazugehörigen Schlüssel, über den ich nach dem Seitennamen in der fremden Sprache suchen kann.

  1. for ($smc=0; $smc<count($langArr[pages]); $smc++) {
  2. $arrActP = explode(',',$langArr[pages][$arrKeys[$smc]]);
  3. echo '<pre>';
  4. print_r($arrActP);
  5. echo '</pre>';
  6. }

… ergibt Folgendes:

Array
(
    [0] => 1|index|.
    [1] =>
    [2] => 1|index|en
    [3] =>
    [4] =>
)

Array
(
    [0] => 1|aussteller|.
    [1] =>
    [2] => 1|vendors|en
    [3] =>
    [4] =>
)

Array
(
    [0] => 1|besucher|.
    [1] =>
    [2] => 1|visitors|en
    [3] =>
    [4] =>
)
etc. ...

Noch einmal ein freundliches explode() und hat man sich an die Reihenfolge im Setting gehalten ist auch das ein gezieltes Ansprechen über die Nummer. Zur Sicherheit kann man noch nachfragen, ob man sich in der Tat in der richtigen Sprache befindet und wenn nicht per Schleifchen suchen, wo diese sich irtümlicher Weise versteckt. Voila! Der Rest ist nur noch zusammensetzen der Elemente zu einer Reihe Links, die man in die Seite einblendet.

Zum echten benutzerfreundlichen Plugin gehört dann nur noch ein paar Formulare, mittels der man die Zuordnung selbst vornehmen kann. Wenn ich es gut mit mir meine … oder besser mit dem User gleich noch mit der Option zusätzliche Installationen direkt per Knopfdruck einzurichten, aber wie man ganze Verzeichnisse kopiert, weiß ich noch nicht … das kommt dann später.

PS: Siehe auch Zufallsgenerator bei der Arbeit, was man noch mit so einer Ini-Datei anstellen kann, für die diese nicht gemacht sind. ;-)

One Response to “Arrays bereiten mir immer noch einen Knoten im Hirn”

  1. Silkester erzählt » Blog Archive » Reptilienbörse Ulm jetzt zweisprachig Says:

    [...] Noch sind die Seiten händisch verlinkt. Das Verwaltungstool für mehrsprachige Seiten, das ich angefangen habe und bei der Zuweisung noch ein wenig Arbeit erfordert und dessen Formularverwaltung noch ganz fehlt … war ohnehin nicht Teil des Auftrages … als ich es mir vorgenommen hatte, hatte ich gehofft ich könne Claudias Plugin an ein, zwei Stellen kurz anpassen und fertig ist der Lack. Aber es schien zumindest für mich dann doch ein höherer Aufwand zu sein, so dass ich Lust bekam mich selbst daran auszuprobieren. Abgelegt unter: In eigener Sache, Text&Sprache, Werkzeugkiste Stichworte: Englisch, Reptilienboerse Ulm, Uebersetzung and Wolf Terrarien   Von Silke Schümann am 19. Februar 07, 13:03 pm [...]

Leave a Reply