Magento2: Wie wird Override im Sprachpaket übersetzt?

9

Ich habe das Sprachpaket app/i18n/magento2translations/language_nl_nl/mit der Datei nl_NL.csv installiert. Es funktioniert perfekt.
Außerdem habe ich app/design/frontend/COMPANY/PROJECT/i18n/nl_NL.csvmit meinen benutzerdefinierten Übersetzungen eine benutzerdefinierte Themendatei hinzugefügt , die jedoch nicht funktioniert (Modus: Entwickler, statischer Inhalt und Caches wurden bereinigt).
Wenn ich benutzerdefinierte Übersetzungen in das Sprachpaket nl_NL.csv verschiebe , funktionieren benutzerdefinierte Übersetzungen einwandfrei .
Ich denke, das Sprachpaket hat mehr Priorität als ein benutzerdefiniertes Thema, das i18n übersetzt .
Wie wird Override im Sprachpaket richtig übersetzt?

goral
quelle
Bitte versuchen Sie, den Modus auf Standard oder Produktion umzuschalten und erneut zu überprüfen.
Selbstdiagnose
versuchen rm -rf pub/static/*, rm -rf var/cache/*aus m2 Stammordner.
belfort1
Ich schrieb in Frage (Modus: Entwickler, statische Inhalte und Caches wurden bereinigt) + lokaler Speicher hat in json übersetzt. Es wurde auch gereinigt. Kein Einfluss.
Goral

Antworten:

11


[UPDATE] Seit Magento 2.2 ist die Ladereihenfolge für die Übersetzung wie folgt:

  1. Laden der Modulübersetzungen.
  2. Laden Sie die Informationen zum Übersetzungspaket.
  3. Laden Sie die Theme-Übersetzungsdatei.
  4. Datenbankübersetzung laden. (Inline-Übersetzung)

Das bedeutet im Grunde, dass das Übersetzungspaket die Themenübersetzung außer Kraft setzt. Eine so schnelle und einfache Lösung würde mit der Inline-Übersetzung überwunden, die auch in M1 möglich war. Aber wir haben jetzt M2, das noch mehr Flexibilität an Bord hat, und es gibt eine Möglichkeit, vorhandene Übersetzungspakete durch benutzerdefinierte zu erweitern. Sie müssen lediglich ein weiteres Übersetzungspaket erstellen. Erstellen Sie also ein Modul

Projekt \ Gebietsschema

Erstellen Sie dafür eine register.php mit folgendem Inhalt:

\Magento\Framework\Component\ComponentRegistrar::register(
\Magento\Framework\Component\ComponentRegistrar::LANGUAGE,
'project_nl_nl',
__DIR__
);

So definieren wir, dass dieses Modul ein Übersetzungspaket ist. Im letzten Schritt erstellen Sie eine Metadatei language.xml mit folgendem Inhalt:

<language ...>
  <code>nl_NL</code>
  <vendor>project</vendor>
  <package>nl_nl</package>
  <sort_order>10</sort_order>
  <use vendor="language" package="nl_nl" />
</language>

Auf diese Weise geben Sie das übergeordnete Übersetzungspaket an, das Sie erweitern möchten. Geben Sie auch die Reihenfolge an, falls Sie bereits eine Vererbung des Übersetzungspakets im Projekt haben. Hier ist ein Link auf Beispiel von magento selbst .

Eine Sache noch. Stellen Sie sicher, dass Ihr <vendor> . '_' . <code>(aus language.xml ) mit dem Modulnamen von übereinstimmt registration.php. project_nl_nlin meinem Beispiel.

Sergey
quelle
Hört sich toll an - aber wo genau überschreibe ich dann die Übersetzung? Noch eine nl_NL.csvin diesem Modul?
Fritzmg
1
@fritzmg ja, tranlsation Dateiformat / Name ist genau das gleiche
Sergey
1
Danke, dachte ich mir. Ich kann es jedoch immer noch nicht zum Laufen
bringen
1
Nur für weitere Leser ist diese Antwort nicht mehr gültig. Magento hat dieses Verhalten vor langer Zeit geändert: github.com/magento/magento2/blob/2.3-develop/lib/internal/… Die aktuelle Reihenfolge lautet: 1) Modulübersetzung (app / code / [Vendor_Name] / i18n) 2) Sprachpaketübersetzung (App / i18n) 3) Themenübersetzung (App / Design / [Thema] / i18n) 4) Datenbankübersetzung (Inline)
Manuel García Solipa
@ ManuelGarcíaSolipa ja, du hast recht, sie haben es in 2.2 geändert. Aktualisiert den Beitrag
Sergey
4

Ich hatte das gleiche Problem und fand die Lösung. \ Magento \ Framework \ Translate lädt zuerst Themenübersetzungen und dann Packübersetzungen. Sie sollten ein Plugin für diese Klasse in der Methode loadData erstellen und die Ladereihenfolge korrigieren.

Daniel Sloof
quelle
Gute Idee. Wie haben Sie ein Plugin erstellt? Es gelang mir nur, eine Voreinstellung zu erstellen, da alle anderen benötigten Methoden geschützt waren. Ich würde mich für eine Plugin-ähnliche Lösung interessieren.
Simonthesorcerer
2

Ich weiß nicht, ob es daran liegt, dass jetzt 2019 ist oder ob Sergeys Antwort von Anfang an einen Fehler hatte, aber die tatsächliche Ladereihenfolge in Dateianbieter / magento / framework / Translate.php lautet wie folgt:

$this->_loadModuleTranslation();
$this->_loadPackTranslation();
$this->_loadThemeTranslation();
$this->_loadDbTranslation();

Was später geladen wird, überschreibt die vorherigen Übersetzungen.

Obwohl die Antwort von Daniel Sloof funktioniert, können Sie dem Thema einfach Ihre Übersetzung hinzufügen, die eine höhere Priorität als ein Sprachpaket hat.

TheKitMurkit
quelle
1

Wenn sauberer statischer Inhalt, zwischengespeichert und in das lokale Speicherthema übersetzt wird, funktioniert CSV, jedoch nicht für einige Wörter. Lang Pack wird also von benutzerdefinierten Themenübersetzungen überschrieben, jedoch nicht für alle Phrasen.

goral
quelle
0

Magento lädt Übersetzungsinformationen in der folgenden Reihenfolge

Laden der Modulübersetzungen. Themenübersetzungsdatei laden Übersetzungspaketinformationen laden. Laden Sie die Datenbankübersetzung. (Inline-Übersetzung)

Ich habe eine andere Übersetzung im Paket de_de in Modul, Thema und einem anderen Paket (Anbieter / {Name} / Sprache-de_de). Ich habe gesehen, dass die Übersetzung immer vom Thema kam. Löschen Sie Pub / Static und Cache (mit Cache in Chrome). Was sind die Prioritäten für die tatsächliche Lastübersetzung?

Extravagant
quelle