Vertaal Übercart-producten met Entity Translation

Hoewel Drupal Commerce erg in opkomst is als dé e-commercemodule voor Drupal, is in mijn ogen Übercart nog steeds de betere keuze als het gaat om gebruiksvriendelijkheid voor sitebeheerders. Voor wie een meertalige webshop wil, heeft Übercart op het eerste gezicht echter een groot nadeel: Übercart-producten zijn nodes, en de Internationalization-module (i18n) – de gebruikelijke en in veel gevallen meest flexibele manier om meertalige Drupal-sites te maken – maakt voor elke vertaling een aparte node aan. Dat is een probleem, want Übercart koppelt productinformatie als prijs, artikelnummer en voorraad aan de productnodes. Als er voor elke taal een aparte productnode wordt aangemaakt, verschilt die informatie per taal, wat in de meeste gevallen niet gewenst is.

We hebben dus een manier nodig om de productnodes te vertalen, zonder dat er aparte nodes worden aangemaakt voor elke taal. Dat kan met de Entity Translation-module. Waar de vertalingen van i18n zijn gebaseerd op nodes, richt Entity Translation zich op de vertaling van velden. Met andere woorden: Entity Translation koppelt verschillende vertalingen van inhoudsvelden aan één enkele node, waar i18n verschillende nodes aanmaakt en die vervolgens aan elkaar koppelt. Dat is goed nieuws voor onze Übercart-webshop: we kunnen zo een meertalige webshop bouwen, zonder dat het voorraadbeheer onbruikbaar wordt en de prijzen niet meer te overzien zijn. Er is echter wel slecht nieuws voor sitebouwers die nog Drupal 6 gebruiken: Entity Translation is alleen beschikbaar voor Drupal 7.

Vooraf

In deze blogpost beperk ik me tot het vertalen van producten en zal ik het vertalen van andere Übercart-onderdelen dus niet bespreken. Verder ga ik ervan uit dat je al een werkende Drupal-installatie met Übercart-shop hebt, kunt omgaan met Drupal en veelgebruikte modules als Views en bekend bent met het Drupal-jargon. Documentatie hierover kun je vinden op onder andere drupal.org.

Modules

Je hebt de volgende modules nodig:

Stap 1: nodetitels vervangen door een titelveld

De Title-module zet nodetitels om naar velden om het vertalen van titels mogelijk te maken. Om het titelveld van de productnodes op die manier vertaalbaar te maken, ga je naar Structuur > Inhoudstypen en klik je achter Product op velden beheren. Daarna klik je bij het titelveld op de link replace en schakel je de optie Replace title with a field instance in.

Stap 2: Entity Translation inschakelen voor productnodes

Vervolgens moeten veldgebaseerde vertalingen ingeschakeld worden voor productnodes. Controleer eerst de instellingen van Entity Translation op de pagina Instellingen > Regionale instellingen en taal > Entity translation. Onder Translatable entity types moet daar in ieder geval Node worden aangevinkt. Zorg er verder voor dat Enable language fallback is aangevinkt. Ga nu terug naar Structuur > Inhoudstypen en klik achter Product op bewerken. Klik onderaan de pagina op Publicatie-opties en selecteer onder Ondersteuning voor meertaligheid de optie Enabled, with field translation.

Stap 3: velden vertaalbaar maken

Nu kunnen de velden van de productnodes vertaalbaar worden gemaakt. Klik op de tab Velden beheren en klik achter Titel op bewerken. Scroll naar beneden en vink de optie Users may translate this field aan. Herhaal dit voor alle velden die je vertaalbaar wilt maken. Ga daarna weer terug naar Instellingen > Regionale instellingen en taal > Entity translation. Daar zijn nu extra opties verschenen. Kies bij Standaardtaal voor Standaardtaal en vink Exclude Language neutral from the available languages aan. De rest van de opties kun je naar eigen voorkeur instellen.

Stap 4: catalogusview aanpassen

Als je de submodule Catalog van Übercart gebruikt, moet tot slot ook de catalogusview nog worden aangepast. Ga naar Structuur > Views > uc_catalog. Kies bij Veldtaal (onder Geavanceerd > Andere) voor Taal van huidige gebruiker. Vervang vervolgens onder Velden de nodetitel door het titelveld van de Title-module, bij zowel de Table-display als de Grid-display. De twee velden hebben dezelfde naam, maar zijn van elkaar te onderscheiden door de omschrijving onder de veldnaam: de standaard nodetitel heeft de omschrijving 'De inhoudstitel' en het titelveld heeft de omschrijving 'Verschijnt in: node:product'.

Tot slot

Ik heb mij in deze blogpost alleen gericht op de vertaling van producten in Übercart. Bij het bouwen van een volledig meertalige Übercart-shop zul je nog meer hobbels tegenkomen (zoals het weergeven van vertaalde taxonomietermen in Views, wat nog steeds niet goed mogelijk is als je de standaard catalogusview gebruikt), maar het vertalen van producten is het meest wezenlijke probleem en tevens een van de slechtst gedocumenteerde problemen. Hopelijk scheelt deze oplossing je dus een slapeloze nacht.

Reactie toevoegen