Problembeschreibung

Leider ist es in der Version bis zur 2.0.18 so, dass nicht alle Elemente von VirtueMart konsequent multilanguage-fähig sind. So z.B. die Custom-Fields (selbsterstelle Felder). Während für die Bezeichnung der Felder die Übersetzungen noch funktionieren, sind die Benennung der Selektions-Options nicht über das Joomla-Language-Overriding beschreibbar. Statt dessen wird hier ausschließlich mit den eingegebenen Values der Felder gearbeitet. Ganz sicher wird das in einer der nächsten Versione von VM erfolgen, doch derweil muss man sich im Notfall selbst behelfen.

Dieser Workaround soll beschreiben mit welchen Maßnahmen das zu erreichen ist. Es ist aber zu beachten, dass dieser Workaround Eingriffe in den Core von VM bedeuten. Man soll sich also zum einen mit php einwenig auskennen und sich bewusst sein, was Core-Eingriffe für Nachteile mit sich bringen können. Wer sich unsicher ist, Finger davon lassen, Profi machen lassen oder warten bis es mal Core-Bestandteil ist.



 

Einige technische Hintergründe und Wissenswertes zum Thema

  1. Alle Texte die sprachabhängig angezeigt werden sollen, werden in Joomla 2.5 / 3.0 / ... durch dieses Konstrukt JText::_('TEXT') erzeugt. Das funktioniert im neuen VM 2 ebenfalls, im Gegensatz zu früheren Versionen von VirtueMart, die hier noch eigenen Bilbliotheken verwendeten.
  2. Joomla bietet neben seinen eigenen Sprachdatei auch die Möglichkeit, dass der Projektmanager eigenen Sprachdateien aufbauen kann. Diese können zwei Zwecke erfüllen:
    1. entweder bestehende Sprachkonstrukte (im Joomla-Jargon Sprachschlüssel genannt) durch eigenen Varianten zu ersetzen (was einfach dadurch erfolgt, dass der Phrasenbezeichner absolut identisch verwendet wird und damit überschrieben wird
    2. oder man will eigenen Sprachphrasen hinzufügen, die es so noch nicht gab, so z.B. Menü-Einträge oder wie in unserem Fall Feldname und Inhalte von Selektionsfeldern in Custom-Produkten.
  3. Für diesen Zweck wird in Joomla eine Datei language\overrides\de-DE.override.ini erzeugt - entspr. mit ähnlichem Dateinamen für die weiteren Sprachen. Diese gleiche Datei steht dann auch in VM zur Verfügung. Deshalb bietet VM selbst auch kein eigenes Sprach-Overriding an, was jedoch meines Erachtens nicht schlecht wäre, weil man dann diese Sprachdatei nur componentenabhängig laden würde, was das Projekt evtl. etwas beschleunigen würde.
  4. Für die Pflege diese Sprachdatei hat Joomla einen eigenen Adminbereich eingerichtet zu finden unter Erweiterungen > Sprachen > Overrides. Hier sollte man dann rechts in der Dropdownliste die Zielsprach auswählen und durch Klicken auf den Button Neu kann man dann eigenen Schlüssel und Phrasen anlegen. Das wird für jede Zielsprache und jede weitere Phrase wiederholt. Alternativ kann man natürlich auch manuell per Editor die o.g. ~.override.ini-Datei für die jeweiligen Sprachversionen pflegen.

  5. Verantwortlich für die Ausgabe der Benutzerdefinierte Feldern in VM ist das Script admininstrator/components/com_virtuemart/models/customfields.php. Für die verschiedenen Benutzerfelder-Typen gibt es entspr. Methoden zu  deren Darstellung, so z.B. für die Custom-Price-Felder vom Type V in der Methode getProductCustomsFieldCart().

 

Modifikation von customfields.php zur sprachkonformen Ausgabe

Mit der Modifikation des Scriptes customfields.php und dort die Methode getProductCustomsFieldCart() wollen wir erreichen, dass die Selections-Options in den Dropdownlisten übersetzt werden.

Dazu modifizieren wir die Zeile zur Übergabe von $productCustom->custom_value an $productCustom->text durch ergänzen der Sprachmethode JText::_(); (ca. Zeile 873):

if ($group->field_type == 'V') {
	$default = current ($group->options);
	foreach ($group->options as $productCustom) {
		$price = self::_getCustomPrice($productCustom->custom_price, $currency, $calculator);
		$productCustom->text = JText::_ ($productCustom->custom_value) . ' ' . $price;

Immerhin, bei den Feldname (Titel) unterstützt VM bereits die Sprachumsetzung. Es muss hierfür also lediglich im Feld Titel für das selbsterstellte Feld der Sprachschlüssel eingetragen werden.