[Frage] Extbase Extension Mehrsprachigkeit bleibt unberücksichtigt TYPO3-Version: -

  • 0 x
    11 Beiträge
    0 Hilfreiche Beiträge
    04. 11. 2013, 09:51

    Hallo zusammen,

    ich erstelle derzeit ein Extbase-Extension die auf einer mehrsprachigen Seite ausgegeben werden soll. Dementsprechend soll die Extension multilanguage-tauglich sein. Die komplette Seite steht und funktioniert auch in beiden Sprachen. Lediglich meine Extension-Datensätze (es handelt sich um eine einfache Ausgabe von Produkten und Produktkategorien) werden - egal in welcher Sprache ich die Seite ansehe - immer in Deutsch ausgegeben.

    Das Extension-Gerüst wurde mit dem Extension-Builder erstellt, die Datensätze sind im Backend natürlich übersetzt. Rufe ich einen Übersetzten Datensatz direkt über die UID auf werden mit die übersetzten Inhalte auch so ausgegeben, allerdings klappt der Language-Overlay im "normalen" betrieb eben nicht. Meine Detailansicht ist prinzipiell so einfach gestrickt dass ich sie komplett über den "Standard"-ShowAction-Controller zusammenbauen kann, ich muss mir meine SQL-Query dazu also nicht selbst bauen:

    1. public function showAction(\TW\Twprodukte\Domain\Model\Produkt $produkt) {
    2. $this->view->assign('produkt', $produkt);
    3. }

    Erstaunlicherweise reagiert mein Template auch nicht im geringsten auf den Translate-ViewHelper. Meine locallang.xml liegt richtig im Resources/Private/language - Folder, der Aufruf "<f:translate key="merkmale" />" lässt das entsprechende Feld leer.

    Da also so gut wie NICHTS in Sachen Multilanguage funktioniert habe ich die Befürchtung etwas grundlegendes vergessen zu haben.

    "Vergisst" der Extension Builder hier etwas was ich noch nachtragen muss, oder warum mag meine Extension keine Multilanguage-Datensätze?

    Ich arbeite mit Typo3 6.1.5 und extbase 6.1.0. Exension Builder in der Version 2.5.2


  • 1
  • jenses jenses
    Flash Gordon
    0 x
    3087 Beiträge
    106 Hilfreiche Beiträge
    04. 11. 2013, 11:41

    Scheinbar kommt in der showAction der Sprachparameter L überhaupt nicht an.
    Du mußt in deinem ListView dafür sorgen, daß weitere Parameter wie L an die showAction durchgeschleift werden, etwa so:

    1. <f:link.action action="show" arguments="{myobject : myobject}" addQueryString="1">

  • 0 x
    11 Beiträge
    0 Hilfreiche Beiträge
    04. 11. 2013, 13:07

    Das habe ich bereits berücksichtigt. Der Sprachparameter wird in der URL auch übernommen.
    Interessanterweise - das habe ich vergessen zu erwähnen - werden beispielsweise auf der List-View der Kategorien die Englischen Linktexte angezeigt. D.h. das System liest DIESE Inhalte schon richtig aus. Nicht aber z.B. die Detailtexte.

    Im Fall meiner Kategorie-Detailansicht in der auch Links auf die Produktdetails ausgegeben werden sieht der Controller also so aus:

    1. public function showAction(\TW\Twprodukte\Domain\Model\Produktkategorie $produktkategorie) {
    2. $this->view->assign('produktkategorie', $produktkategorie);
    3.  
    4. $produkts = $this->produktRepository->findBykategorie($this->request->getArgument('produktkategorie'));
    5. $this->view->assign('produkts', $produkts);
    6.  
    7. }

    Den Detailtext zur Produktkategorie gebe ich mittels "<f:format.html>{produktkategorie.langtext}</f:format.html>" direkt aus. Dieser wird mir NICHT übersetzt.

    Die Links wiederum gebe ich mittels for-schleife aus:

    1. <f:for each="{produkts}" as="produkt" iteration="itemIteration">
    2. <f:link.action controller="Produkt" action="show" pageUid="{detailpage}" arguments="{produkt : produkt}" title="{produkt.name}"> {produkt.name}</f:link.action>
    3. </f:for>

    Diese Links werden richtig übersetzt. Und ich weiß nicht, warum das eine richtig funktioniert, das andere aber nicht.

  • 0 x
    11 Beiträge
    0 Hilfreiche Beiträge
    05. 11. 2013, 09:06

    Nachtrag: Das hier

    Erstaunlicherweise reagiert mein Template auch nicht im geringsten auf den Translate-ViewHelper. Meine locallang.xml liegt richtig im Resources/Private/language - Folder, der Aufruf "<f:translate key="merkmale" />" lässt das entsprechende Feld leer.

    fällt weg. War mein Fehler, ich hab schlicht und einfach eine XML angelegt wärend XLF-Files mit vorhanden waren. Die Extension gibt also eigentlich alles Mehrprachig aus, außer den Detailtexten.

  • 0 x
    11 Beiträge
    0 Hilfreiche Beiträge
    06. 11. 2013, 10:42

    So, für alle die evtl. mal das gleiche Problem haben, mit dieser Lösung bin ich zum gewünschten Ergebnis gekommen:

    Offenbar interessiert - zumindest in der von mir verwendeten Version - Extbase bei seinen "Standard-Abfragen" der Language-Overlay relativ wenig, zumindest wenn es nicht um eine Listen- sondern Detaildarstellung geht. Denn, wie schon angemerkt hat die Listenausgabe meiner Produkte oder auch Kategorien gut geklappt. Warum, verstehe ich auch nicht.

    Deshalb habe ich auf die Built-In-Querys wie findAll() oder findByXXX() verzichtet und meine eigenen Querys gebastelt. Im Fall meiner Produkt-Detailansicht also im Repository folgendes zugefügt:

    1. public function findByUidAndLang($uid){
    2.  
    3. $query = $this ->createQuery();
    4. $query->getQuerySettings()->setRespectSysLanguage(TRUE);
    5. $query->matching(
    6. $query->logicalOR(
    7. $query->equals('uid', $uid),
    8. $query->equals('l10n_parent', $uid)
    9. )
    10. );
    11. return $query->execute()->toArray();
    12.  
    13. }

    Hier "setRespectSysLanguage" gesetzt und nach uid sowie l10n_parent gesucht.

    Leider muss ich den gefundenen Datensatz über diese Lösung im Template über eine for-Schleife ausgeben, aber in diesem Fall kann ich das verkraften.

    Ich weiß nicht ob das das normale Vorgehen bei Multilanguage-Datensätzen ist, ich habe es zumindest so nirgends gefunden. Ob z.B. die vom ExtensionBuilder standardmässig eingesetzte showAction EIGENTLICH die Sprachen berücksichtigen sollte weiß ich nicht, eigentlich hätte ich nie daran gedacht dass die Built-In-Funktionen das hergeben. Zumindest bei mir war es nicht so.

    Sollte es dennoch einen Workaround geben mit dem man ohne die eigenen Querys auskommt freu ich mich natürlich weiterhin über Tipps. ;)

  • jochla jochla
    Jedi-Ritter
    0 x
    128 Beiträge
    0 Hilfreiche Beiträge
    17. 11. 2013, 00:54

    Auch ich versuche mich gerade an einer mehrsprachigen Extension (meiner ersten!) und habe ein ähnliches Problem.

    Ich die Datei language.xlf (vom Extesnion Builder generiert) kopiert, in 'de.language.xlf' umbenannt und darin die Übersetzungen gemacht. Die Ausgabe im FE ist aber immer noch englisch (Seite und CE sind in der Standardsprache=Deutsch angelegt).

    Setup:

    1. config {
    2. linkVars = L
    3. uniqueLinkVars = 1
    4. sys_language_uid = 0
    5. language = de
    6. locale_all = de_DE.utf8
    7. htmlTag_langKey = de
    8. }
    9. [globalVar = GP:L = 1]
    10. config {
    11. sys_language_uid = 1
    12. language = default
    13. locale_all = en_GB
    14. htmlTag_langKey = en
    15. }
    16. [global]

    Fluid-Template (vom Extension Builder angelegt):

    1. <th><f:translate key="tx_extensionkey_domain_model_objekt.eigenschaft" /></th>

    Language File: "extension/Resources/Private/Language/de.language.xlf"
    entspricht auch http://www.derhansen.de/2012/07/extbase-ubersetzungen-per-xliff.html

    1. <?xml version="1.0" encoding="utf-8" standalone="yes" ?> <xliff version="1.0"> <file source-language="en" target-language="de" datatype="plaintext" original="messages" date="2012-07-40T13:35:40Z" product-name="loc_test">
    2. <header/>
    3. <body>
    4.  
    5. <trans-unit id="tx_loctest_domain_model_testtable">
    6. <source>Testtable</source>
    7. <target>Testtabelle</target>
    8. </trans-unit>
    9.  
    10. </body>
    11. </file>
    12. </xliff>

    Trotzdem bekomme ich immer noch nicht die Übersetzung im Frontend angezeigt!??? :-((
    Was mache ich falsch? Was fehlt noch?

    Johannes.

  • jochla jochla
    Jedi-Ritter
    0 x
    128 Beiträge
    0 Hilfreiche Beiträge
    17. 11. 2013, 01:20

    Gelöst!!! :-))
    Genau so, wie zuvor beschrieben funktioniert es!
    Man muss nur die Seite mit dem richtigen L-Parameter aufrufen ;-) Sorry, es war wohl schon zu spät...

    Johannes.

  • Freshmeat Freshmeat
    Sternenflotten-Admiral
    0 x
    194 Beiträge
    0 Hilfreiche Beiträge
    27. 11. 2013, 14:00

    Hallo Terrorhamster

    Ich habe genau das gleiche Problem jedoch kann ich nicht einfach das Repository mit meiner eigenen Abfrage abfragen, da ich nur Teile des Datensatzes übersetzen will (l10n_mode im TCA).

    Hast du noch was geändert nachträglich? Oder läuft es so wie du hier beschrieben hast?

  • 1