Übersetzung von elgg-menu-item-custom

Ich möchte gerne Englisch und Deutsch als Sprache anbieten. Wenn ich im Backend unter Configure/Appearance/Menu Items einen neuen Eintrag hinzufüge, dann kann ich den leider nicht mit dem Translation Editor übersetzen. 

Welches Language File müsste ich denn da anfassen?

  • Mehrsprachige Menueinträge lassen sich im Admin-Backend nicht erstellen. Du kannst Dir aber ein kleines Plugin erzeugen, dass neben anderen seitenspezifischen Anpassungen auch Menueinträge hinzufügt. Mit der Funktion

    elgg_register_menu_item('site', array('name' => "Ein_eindeutiger_Name_fuer_den_Menueintrag", 'text' => elgg_echo('menutext_of_this_menu_entry'), 'href' => "url/die/verlinkt/werden/soll"));

    kannst Du innerhalb der Init-Funktion des Plugins den neuen EIntrag im Seitenmenu erzeugen. Im languages-Order des Plugins sollte eine en.php mit dem Text für den Menueintrag definiert werden ('menutext_of_this_menu_entry'). Mit Hilfe des Translation Editors kannst Du diesen Eintrag dann für die anderen Sprachen übersetzen.

  • Danke, iionly! Das versuche ich mal!

  • Das Plugin (mein erstes) funktioniert soweit. Es gibt einen neuen Eintrag im Menü und der Link funktioniert, wie er soll. Allerdings kann ich den nur unter 'Weitere' anzeigen lassen, weil meine anderen Menüpunkte quasi schon vergeben/voll sind. Da gibt es im Backend ja nur eine gewisse Anzahl, die per Drop Down eingerichtet werden kann. Deswegen hatte ich die anderen ja als Custom da drunter definiert.

    Und das Übersetzen mit dem Translation Editor funktioniert leider auch nicht. Ich habe deswegen mal im Plugin einen languages Ordner angelegt und sowohl englisch als auch deutsch hinterlegt. Tatsache ist: Ich mache irgendwas falsch, denn es funktioniert nicht ;) 

  • Werden die "custom"-Menueinträge zusätzlich zu den 6 festen Menuslots außerhalb des "Weitere"-Dropdowneintrages angezeigt? Ich hab bisher noch nie Menueinträge über das Adminbackend definiert, daher weiss ich da nicht bescheid. Ich dachte, dass die Anzahl der 6 separaten Slots fix ist und standardmäßig die alphabetisch ersten 6 Menueintäge in diese Slots kommen und alle weiteren unter "Weitere". Wenn einem die alphabetische Sortierung nicht zusagt, kann man die Belegung der 6 Slots aber selbst festlegen.

    Der Translation Editor kann nur dann verwendet werden, wenn mindestens das englische Sprachfile vorhanden ist. Wenn diese Datei vorhanden ist und es trotzdem nicht funktioniert, kann der Inhalt der Sprachdatei eventuell falsch sein (poste die mal hier).

    Wenn Du auch ein deutsches Sprachfile angelegt hast, wird dann Deine Übersetzung als Text für den Menueintrag verwendet, wenn die Seitensprache (bzw. die vom Benutzer eingestellte Sprache) deutsch ist? Wenn nicht, ist eventuell im elgg_register_menu_item()-Eintrag in start.php was falsch.

  • Ja, die "custom"-Menüeinträge werden zusätzlich angezeigt, wenn man sie definiert. Das heisst, man gibt den anzuzeigenden Namen und den Link ein, der aktiviert werden soll, wenn man den "custom"-Menüeintrag anklickt. Wenn man das nicht als custom definiert, wird alles unter "Weitere" angezeigt. Die Reihenfolge lässt sich per Dropdown Menü auch selber festlegen.

    In der start.php habe ich z.B.:

    <?php
    elgg_register_menu_item('site', array('name' => "elgg-menu-item-customized2", 'text' => elgg_echo('Members Map'), 'href' => "/map/members"));

    ?> 

    Und im Unterordner languages dann eine Datei namens en.php:

    <?php
    /**
    * English Language Custom Menu
    *
    */

    $english = array(
    /**
    * Custom Menu
    */
    'elgg:menu:item:custom1' => 'Outdoor Map',
    'elgg:menu:item:custom2' => 'Members Map',
    );

    add_translation("en",$english);
    ?>

  • start.php:

    <?php

    elgg_register_event_handler('init', 'system', 'my_menu_entries_init');

    function my_menu_entries_init() {

        elgg_register_menu_item('site', array('name' => "elgg-menu-item-customized2", 'text' => elgg_echo('elgg:menu:item:custom2'), 'href' => "/map/members"));

    }

    Der Parameter bei elgg_echo() ist der Array-Key (links von => in der Sprachdatei) und nicht der sprachabhängige Array-Value. Mit obiger start.php sollte zumindest die Übersetzung funktionieren.

    (mit elgg_register_event_handler() für das 'init', 'system'-Event wird der Code zur richtigen Zeit ausgeführt und ?> ist bei den Files in Plugins nicht mehr unbedingt notwendig).

    Custom-Einträge, die im Admin-Backend gemacht werden, zählen in der Tat separat. Leider ist es nicht trivial, Custom-Einträge auf anderem Wege als im Admin-Backend zu erzeugen. Auch die Anzahl der "Featured"-Slots ist hart im Core-Code gesetzt aber da sollte mit ein wenig Aufwand was möglich sein. Leider hab ich heute keine Zeit mehr, den möglichen Lösungsweg ausreichend detailiert zu beschreiben.

  • Ich bin schon schwer dankbar, dass Du mir das alles so detailliert beschreibst. Werde das gleich mal ausprobieren, habe im Urlaub frische Energie und neue Ideen getankt ;)

  • Ach so: Das funktioniert jetzt endlich, danke für den Code! Allerdings nach wie vor nur unter "Weiteres". Beizeiten muss ich da noch mal ran.

German Support Group

German Support Group

The German support group within the Elgg community.