Übersetzen von benutzerdefinierten Zeichenfolgen in Knockout-Vorlagen für Themen

8

Ich weiß, dass dieses Problem in diesem Forum mehrmals behandelt wurde

Magento2-Lokalisierung Javascript

Magento 2 - Übersetzungsproblem in JS-Vorlagen

Magento2 übersetzt Javascript (KO) -Vorlagentext

Ich habe das italienische Sprachpaket in meinem Magento 2.1.9-Projekt installiert und die meisten Zeichenfolgen sind korrekt übersetzt.

Ich habe meinem Thema ein neues Übersetzungswörterbuch hinzugefügt.

vendor/<Vendor>/<Theme>/i18n/it_IT.csv

Hier habe ich einige Übersetzungen geändert und die neuen Zeichenfolgen meines Themas zum Übersetzen hinzugefügt. Für Zeichenfolgen, die in HTML-Dateien enthalten sind, funktioniert alles einwandfrei.

Ich habe einige benutzerdefinierte Zeichenfolgen in Knokout-Vorlagen der Kasse hinzugefügt. Zum Beispiel in

<My-theme>/Magento_Checkout/web/template/authentication.html 

Ich fügte hinzu

<span data-bind="i18n: 'Do you already have an account?'"></span>

Dann in meinem Thema it_IT.csv:

"Do you already have an account?","Hai già un account?"

Natürlich habe ich den Cache, pub / static / , var / view_preprocessed / , var / generation usw. geleert und alle Befehle ausgeführt.

Die Saiten sind noch in Englisch.

Ich muss wirklich ein neues Sprachpaket erstellen, um ein paar Zeichenfolgen an der Kasse zu übersetzen. Was ist der Grund?

BEARBEITEN Online-Übersetzungen funktionieren für alle Zeichenfolgen. Es kann eine Möglichkeit sein, es vorübergehend zu beheben, aber nicht die endgültige Lösung.

Nuovecode
quelle
1
Ich würde auch hinzufügen, dass andere Übersetzungen mit dieser Methode funktionieren
springerin

Antworten:

2

Sie müssen ein Sprachpaket erweitern. Das Erstellen einer Übersetzungsdatei im Thema reicht nicht aus.

Dieses Erweiterungsmodul muss enthalten:

composer.json

{
  "name": "snowdog/project-language-translations",
  "description": "Some translations for some project",
  "type": "magento2-language",
  "require": {
    "magento/framework": "^100.0.0"
  },
  "autoload": {
    "files": [
      "registration.php"
    ]
  }
}

language.xml

<?xml version="1.0"?>
<language xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:App/Language/package.xsd">
    <code>en_US</code>
    <vendor>snowdog</vendor>
    <package>en_us_custom</package>
</language>

registration.php

<?php
\Magento\Framework\Component\ComponentRegistrar::register(
    \Magento\Framework\Component\ComponentRegistrar::LANGUAGE,
    'snowdog_en_us_custom',
    __DIR__
);

Und natürlich Datei mit Übersetzungen in die gewünschte Sprache.

Igloczek
quelle
0

Eine alternative Lösung (die wir schließlich übernommen haben) besteht darin, Übersetzungsdateien in ein Modul anstatt in das Thema aufzunehmen.

Seltsamerweise können die Module csv die js-Zeichenfolgen leicht übersetzen.

Erstellen Sie ein neues Modul mit:

<?php
use \Magento\Framework\Component\ComponentRegistrar;
ComponentRegistrar::register(ComponentRegistrar::MODULE,
    '<Vendor>_<Module>',
    __DIR__
);

composer.json

{
  "name": "vendor/module",
  "description": "Project custom translations",
  "require": {
    "php": "7.0.2|7.0.4|~7.0.6"
  },
  "type": "magento2-module",
  "autoload": {
    "files": [ "registration.php" ],
    "psr-4": {
      "<Vendor>\\<Module>\\": ""
    }
  }
}

etc / module.xml

<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Module/etc/module.xsd">
    <module name="<Vendor>_<Module>" setup_version="1.0.0" />
</config>

und hier werden wir alle unsere Sprachdateien hinzufügen:

i18n / it_IT

i18n / de_DE

..

Wir haben dieses System gewählt, weil das Projekt, an dem wir arbeiten, viele Sprachen hat und wir nicht zu viele Sprachpakete aufnehmen wollten.

Beachten Sie, dass dies nur für neue Zeichenfolgen funktioniert, da Magento den Sprachpaketübersetzungen Vorrang einräumt. Aber das ist eine andere Geschichte.

Nuovecode
quelle