Tradurre stringhe personalizzate in modelli knockout a tema


8

So che questo problema è stato affrontato più volte in questo forum

Localizzazione Magento2 Javascript

Magento 2 - problema di traduzione nei modelli JS

Magento2 traduce il testo del modello Javascript (KO)

Ho installato il pacchetto in lingua italiana sul mio progetto Magento 2.1.9 e la maggior parte delle stringhe sono tradotte correttamente.

Ho aggiunto un nuovo dizionario di traduzione nel mio tema.

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

Qui ho modificato alcune traduzioni e ho aggiunto le nuove stringhe del mio tema da tradurre. Per le stringhe incluse nei file phtml tutto funziona bene.

Ho aggiunto alcune stringhe personalizzate nei template di checkout. Ad esempio in

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

Ho aggiunto

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

Quindi nel mio tema it_IT.csv:

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

Ovviamente ho svuotato cache, pub / static / , var / view_preprocessed / , var / generation, ecc. E ho eseguito tutti i comandi.

Le stringhe sono ancora in inglese.

Devo davvero creare un nuovo pacchetto linguistico per tradurre alcune stringhe nel checkout? Per quale motivo?

EDIT Le traduzioni online funzionano per tutte le stringhe. Può essere un modo per risolverlo temporaneamente ma non la soluzione definitiva.


1
aggiungerei anche che altre traduzioni funzionano con questo metodo
Springerin,

Risposte:


2

È necessario estendere un pacchetto linguistico, la creazione di un file di traduzione nel tema non è sufficiente.

Questo modulo di estensione deve contenere:

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__
);

E ovviamente file con traduzioni nella lingua desiderata.


0

Una soluzione alternativa (quella che abbiamo finalmente adottato) è quella di includere i file di traduzione in un modulo anziché nel tema.

Stranamente i moduli CSV possono facilmente tradurre le stringhe js.

Crea un nuovo modulo con:

<?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>

e qui aggiungeremo tutto il nostro file di lingua:

i18n / it_IT

i18n / it_IT

..

Abbiamo scelto questo sistema perché il progetto su cui stiamo lavorando ha molte lingue e non volevamo includere troppi pacchetti di lingue.

Si noti che funzionerà solo per le nuove stringhe perché Magento dà la priorità alle traduzioni del language pack. Ma questa è un'altra storia.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.