Erfahren Sie, welche CSV-Übersetzungsdateien in der aktuellen HTML-Datei verwendet werden

8

Gibt es eine Methode, um festzustellen, welche CSV-Übersetzungsdateien in der aktuellen HTML-Vorlagendatei verwendet werden?

Bizboss
quelle

Antworten:

3

Ich nehme an, Sie meinen Übersetzungen, bei $this->__('...')denen kein expliziter Helfer verwendet wird. Dann kommt es auf den Modulumfang des Blocks an

Dies hängt von mehreren Faktoren ab:

  1. Die Blockklasse, die zum Rendern der Vorlage verwendet wird. Sie sollten es aus den Layout-XML-Dateien ermitteln können, aber einige Blöcke werden programmgesteuert erstellt. In diesem Fall müssen Sie im Code suchen. Wenn Sie Glück haben, wird die Blockklasse in der Vorlage selbst wie folgt dokumentiert:

    /** @var $this Mage_Catalog_Block_Product_List */

    oder so:

    /** @see Mage_Catalog_Block_Product_List */

    Der Bereich ist das Modul, zu dem diese Klasse gehört (wie Mage_Catalog). Aber seien Sie vorsichtig beim Umschreiben von Klassen. Wenn die Blockklasse durch eine Erweiterung neu geschrieben wurde, ändert sich der Bereich in diese Erweiterung.

  2. Wenn die Eigenschaft module_namefestgelegt wurde (z. B. über Layout-XML), hat dies Vorrang.
  3. Wenn der Block die getModuleName()Methode überschreibt , wird der von dieser Methode zurückgegebene Bereich verwendet.

Sind wir schon da?

Nachdem Sie den Umfang kennen, können Sie die entsprechende CSV-Datei nachschlagen, die in diesem Modul definiert ist config.xml. Es kann auch mehr als eine sein, aber die allgemein angewandte Konvention besteht darin, eine Datei pro Modul im Formular zu haben Module_Name.csv.

  1. Wenn diese Datei die zu übersetzende Zeichenfolge enthält, haben Sie sie gefunden, es sei denn, Sie haben eine translate.csvin Ihrem Thema, die die Übersetzung für diesen genauen Bereich überschreibt (wie :) "Module_Name::Foo","Foo".

  2. Wenn es nicht in beiden enthalten ist, suchen Sie nach der Übersetzung ohne Modulbereichspräfix in translate.csv(falls vorhanden).

  3. Wenn es nicht vorhanden ist, suchen Sie in allen anderen Modul-CSV-Dateien. Dasjenige aus dem Modul, das zuerst geladen wird, gewinnt (dh Kernmodule zuerst, dann alphabetisch unter Berücksichtigung von Abhängigkeiten). Beachten Sie, dass dieser Fallback nur verwendet wird, wenn Sie sich nicht im Entwicklermodus befinden.


Wenn Sie sicher sein möchten, aus welchen Dateien eine bestimmte Übersetzung auf der Seite stammt, kann ich Ihnen die kostenlose Erweiterung TranslationHints empfehlen ( HAFTUNGSAUSSCHLUSS: Ich habe sie geschrieben).

Erhalten Sie es hier: https://github.com/schmengler/TranslationHints

Bildschirmfoto: Übersetzungshinweise

Fabian Schmengler
quelle
2

Wenn Sie keine Unit-Tests durchführen, ist es Ihnen normalerweise egal, welche Übersetzungs-CSV verwendet wird, da alle zusammengeführt werden, bevor Magento mit der Übersetzung von irgendetwas beginnt.

Wenn Sie es dennoch herausfinden möchten, verwenden Sie zuerst die XML-Layoutdateien, um herauszufinden, welche Blockklasse verwendet wird. Wenn Sie die Blockklasse finden, wird die Datei config.xml dieses Moduls verwendet. Wenn in den Layouts keine Blockklasse angegeben ist, müssen Sie möglicherweise in den übergeordneten Blockklassen und Controllern nachsehen.

Das Wichtigste ist, dass die Vorlagen die __ -Übersetzungsfunktion der zugehörigen Blockklasse verwenden und die Blockklasse die __- Funktion des Moduls Data.php-Hilfsklasse verwendet.

Jay El-Kaake
quelle
1
"Normalerweise ist es dir egal, welche Übersetzung csv verwendet wird, da alle zusammengeführt werden, bevor Magento mit der Übersetzung von irgendetwas beginnt." - Es sei denn, Unit-Tests für ein vorhandenes Übersetzungspaket. Meine Module schlagen normalerweise fehl, wenn Englisch, Spanisch oder Französisch fehlen, bevor sie zum QA-Team gehören.
Luke A. Leber
1

Es hört sich so an, als ob Sie organisiert bleiben möchten, wenn Sie Ihre Übersetzungen hinzufügen. Warum sollten Sie bei so vielen zu übersetzenden CSV-Dateien eine zufällige Datei auswählen und sie nicht der richtigen CSV-Datei hinzufügen?

Hier ist ein Beispiel, an dem ich gearbeitet habe: Angenommen, Sie bearbeiten die Kundenkontoseite und haben das Adressbuch in Meine Adressen geändert . Jetzt gibt es keine französische Übersetzung für Meine Adressen .

Um die richtige CSV-Datei zu finden, müssen Sie im selben Teil der Site nach einer vorhandenen Übersetzung suchen. Das Element Meine Bestellungen / Mes- Befehle befindet sich im selben Teil der Site, sodass ich eine Suche ausführen kann:

$ cd magento/app/
$ find . -iname '*.csv' | xargs grep -in --color 'Mes Commandes'
./locale/fr_FR/Mage_Sales.csv:73:"Back to My Orders","Retour à mes commandes"
./locale/fr_FR/Mage_Sales.csv:308:"My Orders","Mes commandes"
./locale/fr_FR/Mage_Sales.csv:309:"My Orders - Details","Mes commandes - Détails"
./locale/fr_FR/Mage_Oscommerce.csv:7:"Back to My Orders","Retour à mes commande "
./locale/fr_FR/Mage_Oscommerce.csv:51:"My Previous Orders","Mes commandes précédentes"
./locale/fr_FR/Mage_Customer.csv:215:"My Orders","Mes commandes"

Wenn Sie dies mit ein wenig Vermutung betrachten, ist die beste zu ändernde Datei locale / fr_FR / Mage_Sales.csv. Vergessen Sie nach dem Vornehmen von Änderungen nicht, die Übersetzungen unter System> Cache-Verwaltung zu aktualisieren !

Nebenbei: Beachten Sie die Optionen, bei denen die Groß- und Kleinschreibung nicht berücksichtigt wird. -inamefür findund -ifür grep. Diese reduzieren den Aufwand für die Jagd. Die --colorOption wird hier nicht angezeigt, aber die Ausgabe ist im Vergleich zu dem, was Sie hier sehen, viel besser lesbar.

Anthony
quelle
0

Die in den Vorlagen verwendete Übersetzungsmethode __ () befindet sich in der Datei /app/code/core/Mage/Core/Block/Abstract.php und verwendet den Modulnamen, um die richtige Übersetzung zu finden. Es erstellt ein Array im folgenden Format, das für die Übersetzung verwendet werden soll:

array(1) {
    [0]=> object(Mage_Core_Model_Translate_Expr)#161 (2) {
        ["_text":protected]=> string(18) "Orders and Returns"
        ["_module":protected]=> string(10) "Mage_Sales"
    }
}

Wenn Sie sehen möchten, welchen Modulnamen Ihre Vorlage verwendet, können Sie eine Funktion aufrufen:

 $this->getModuleName();

Es sollte dann eine Übersetzungsdatei vorhanden sein, die dieser Zeichenfolge entspricht. Zum Beispiel gibt diese Funktion auf der Seite mit der Kategorieansicht * Mage_Catalog * zurück und daraus kann ich die Übersetzungsdatei Mage_Catalog.csv finden

David Manners
quelle
Welche Zeile in dieser großen Abstract.php-Datei?
Vicky Dev