Ga naar hoofdinhoud

Contacteer ons op +32 2 306 02 11 of mail ons op info@desk02.be

Meertalige Menu's in Drupal, Deel II

Enkele weken geleden bekeken we de situatie van meertalig menu's in Drupal 6. In die blog post werd er ook een nieuwe module gepresenteerd die het beheren van meertalige menu's in Drupal 6 makkelijker moet maken. Vandaag bekijken we de situatie in Drupal 7 en op welke manier de verleden keer ontwikkelde module hier ook kan helpen.

De standaard installatie van Drupal 7 biedt uit zijn eigen geen nieuwe mogelijkheden aan voor meertalige menu's. Ook hier hebben we terug de i18n module nodig om deze functionaliteit te implementeren. De bouwers van deze module zijn sinds de release van Drupal 7 druk in de weer geweest en zitten ondertussen aan een 4e beta versie. De module bevat ook nog steeds de "Menu translation" module.

Menu translation module

Als men na het activeren van de "Menu translation" module een module toevoegt krijgt men een reeks "Multilingual options" die niet beschikbaar waren in Drupal 6. De eerste is "None. No multilingual options." en is hetzelfde als het niet activeren van de module. De tweede; "Translate and Localize" komt grotendeels overeen met de standaard functionaliteit van de i18n menu van Drupal 6 met een kleine extra. Straks hierover meer. De derde optie; "Fixed Language" was helemaal niet beschikbaar in Drupal 6 maar komt overeen met de methode die we laatst documenteerden. Dus één menu per taal.

Translation options

Mensen met een beetje ervaring met de internationalisatie opties in Drupal 6 zullen misschien reeds opgemerkt hebben dat deze opties sterk overeenkomen met de opties die beschikbaar zijn als men een taxonomie wilt vertalen. En inderdaad, Jose Reyero heeft in Drupal 7 de aanpak voor het vertalen van taxonomieën doorgetrokken naar de menu's.

Menu items vertalen

Zoals eerder gezegd komt de tweede optie "Translate and Localize" grotendeels overeen met de functionaliteit in Drupal 6. Dit wilt zeggen dat titels en omschrijvingen van menu items vertaalbaar zijn via de ingebouwde "Interface vertalen" functionaliteit van Drupal. Een nieuwe feature is dat je ook translation sets kan creëren van menu items. Een translation set van menu items komt overeen met de translation set functionaliteit die we ook terugvonden bij de i18n taxonomy module. Bij het aanmaken van een menu item is deze functionaliteit zichtbaar als een extra tab bovenaan.

Menu item opties

Persoonlijk kan ik mij niet direct het nut van een vertaling relatie tussen menu items aanmaken voorstellen buiten misschien het beheer overzichtelijker te maken. Bij de taxonomieën is het belangrijk om te weten welke termen vertalingen zijn van elkaar als men van taal wilt wisselen maar bij menu items bestaat deze use case (voor zover ik weet) minder. Tenzij men bijvoorbeeld twee verschillende views als een vertaling van elkaar wilt zien.

Desondanks dat er voor methode van meertalige menu's te maken extra functionaliteit werd ontwikkeld voor Drupal 7 blijft deze methode dezelfde nadelen hebben als in Drupal 6.

Een taal per menu

De methode die we bij Desk02 standaard gebruiken voor meertalige menu's heeft in Drupal 7 een eigen plaatsje gekregen in de "Menu translation" module. Je kan nu rechtstreeks een taal instellen per menu.

Optie voor één taal per menu

Het nadeel dat de menu lijst wat onoverzichtelijk werd doordat er veel menu's opgelijst werden blijft echter bestaan. Onderaan deze blog post kan je een port van de Drupal 6 module vinden die werkt met Drupal 7. Deze feature zou nu ook geïntegreerd moeten worden met de officiële i18n module.

Een ander nadeel van deze aanpak was dat je de "language dependent variables" functionaliteit diende te gebruiken om bvb. primary links per menu te kunnen instellen. In Drupal 6 moest je hiervoor nog het settings.php bestand aanpassen of in een module bvb. hook_init() implementeren om aan te geven welke variables je language dependent wou maken. In Drupal 7 is er echter een nieuwe module, variable module, die het configureren van de variables vereenvoudigd.

Variable module instellingen

Na het activeren van deze module krijg je bij de "Multilingual settings" een extra tab "Variables" die je toelaat om aan te geven welke variables per taal dienen te zijn. Een heel stuk makkelijker dan vroeger!

Het derde nadeel van de de taal-per-menu aanpak was dat er bij het kiezen van een parent voor een menu item soms veel te veel opties besschikbaar waren. Ook hier is er in Drupal 7 een verbetering aanwezig. Bij configureren van content types kan je nu kiezen welke menu's beschikbaar zijn bij het aanmaken of bewerken van een instance van dat content type.

Node menu selectie

Dit heeft als voordeel dat niet meer alle menu's beschikbaar zullen zijn bij het werken met een specifiek content type. Spijtig genoeg worden wel nog alle menu opties getoond in alle talen. Ook als je gewoon een menu item gaat bewerken zal je nog steeds alle menu's beschikbaar hebben als parent. De module hieronder doet een eerste poging om ook in Drupal 7 de nodige menu's te filteren aan de hand van de taal.

Conclusie

Ook in Drupal 7 blijft de i18n module evolueren en extra features implementeren. De aanpak van één menu per taal wordt nu ook rechtstreeks door de i18n module ondersteund. Desondanks blijft het werken met meertalige menu's nog complex en is het dus de moeite om voor jezelf uit te maken welke aanpak je het beste ligt. Als je ideeën hebt voor nieuwe functionaliteiten of opmerkingen omtrent het (meertalig) menu systeem in Drupal aarzel niet om het in de comments mee te delen.

BijlageGrootte
i18nmenus.tar_.gz1.66 KB

Tags: Drupal 7, i18n

Reacties

Leuk artikeltje.

Een kleine opmerking: ik moest via de link tussen "gerelateerde artikels" om te vergelijken met de situatie in Drupal 6. Misschien best een linkje zetten in de eerste paragraaf? ;)

Nog een paar extra opmerkingen:
Als men na het activeren van de "Menu translation" module een module toevoegt krijgt men een reeks "Multilingual options" die niet beschikbaar waren in Drupal 6
moet de 2e module daar niet "menu" zijn?

Het nadeel dat de menu lijst wat onoverzichtelijk werd doordat er veel menu's opgelijst werden blijft echter bestaan. Onderaan deze blog post kan je een port van de Drupal 6 module vinden die werkt met Drupal 7.
welke module?

Een een preview van de comment die je wil posten kan ook handig zijn!

Hoe dan ook nogmaals leuk artikel ;)

Leuk artikel. Werken met Meertalige Menu's is en blijft een heikel punt in Drupal. Ofwel wordt je menustructuur immens onoverzichtelijk, ofwel heb je geen overzicht in je Menu's bij het Editen van een Node.

Onderstaande Module zou een oplossing bieden maar werkt niet bij Drupal versie 7.12. Krijg volgende error:
Notice: Undefined variable: default in i18nmenus_form_alter() (line 24 of /var/www/clients/client1/web9/web/sites/all/modules/i18nmenus/i18nmenus.module).

Bestaat er intussen een 7.x compatibele versie van deze module?

Er is niet meer aan die module gewerkt. Het makkelijkste is echter om ook van de menu keuzes bij een content type een meertalige variable te maken. Zo kan je per taal instellen welk menu er moet gebruikt worden.

Nieuwe reactie inzenden

De inhoud van dit veld is privé en zal niet openbaar worden gemaakt.
  • Adressen van webpagina's en e-mailadressen worden automatisch naar links omgezet.
  • Toegelaten HTML-tags: <a> <em> <strong> <cite> <code> <ul> <ol> <li> <dl> <dt> <dd>
  • Regels en paragrafen worden automatisch gesplitst.
  • U kan syntax highlighting toepassen door gebruik te maken van volgende tags: <code>, <blockcode>, <c>, <cpp>, <drupal5>, <drupal6>, <java>, <javascript>, <php>, <python>, <ruby> De ondersteunde tag formaten zijn: <foo>, [foo]
  • Feweb
  • Drupal
  • AnySurfer, Belgisch kwaliteitslabel voor toegankelijke websites