Magento2 traduce il testo del modello Javascript (KO)


24

Sto cercando di aggiungere una traduzione per il testo <!-- ko i18n: 'Store credit available' --><!-- /ko -->presente in vendor/magento/module-customer-balance/view/frontend/web/template/payment/customer-balance.html, ma se provo a cambiare il testo nel mio i18n/en_US.csv, continua a non funzionare.

Ho svuotato la cache e utilizzato la distribuzione del contenuto statico.

Esiste un modo diverso di aggiungere traduzioni per i modelli KO?

Risposte:


39

Così sono stato finalmente in grado di capire il problema.

Sembra che la traduzione del modello JS venga letta da js-translation.jsoncui viene generata durante l' setup:static-content:deployesecuzione. Per popolare i dati in questo file è necessario creare un nuovo pacchetto di lingue per il progetto.

Quindi, invece di aggiungere il CSV a livello di tema come app/design/<area>/<vendor>/<theme-name>/i18n/xx_XX.csvse fosse necessario aggiungerlo nel pacchetto linguistico.

Per creare un nuovo pacchetto lingua prima dal project document rootavremo bisogno di creare le seguenti directory:

mkdir -p app/i18n/<project-name>/<xx_xx>

Importante : UTILIZZARE SOLO NOMI DI DIRECTORY minuscoli I nomi delle cartelle camcelati non funzioneranno

Quindi cambia la directory con le cartelle appena create:

cd app/i18n/<project-name>/<xx_xx>

Ora puoi creare un composer.jsonfile (facoltativo) con il seguente contenuto:

{                                                     
    "name": "<project-name>/<xx_xx>",                             
    "description": "<sample description>", //Ex:English (United States) language
    "version": "<version-number>", //100.0.1                             
    "license": [                                      
        "OSL-3.0",                                    
        "AFL-3.0"                                     
    ],                                                
    "require": {                                      
        "magento/framework": "100.0.*"                
    },                                                
    "type": "magento2-language",                      
    "autoload": {                                     
        "files": [                                    
            "registration.php"                        
        ]                                             
    }                                                 
}                                                     

Successivamente, abbiamo bisogno di un language.xmlfile con i seguenti contenuti:

<language xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:App/Language/package.xsd">
    <code>xx_XX</code> <!-- example: <code>en_US</code> -->
    <vendor><project-name></vendor>
    <package><xx_xx></package> <!-- example: <package>en_us</package> -->
</language>

Dopo che registration.phpcontenere il seguente contenuto è necessario:

\Magento\Framework\Component\ComponentRegistrar::register(
    \Magento\Framework\Component\ComponentRegistrar::LANGUAGE,
    '<project-name>_<xx_xx>',
    __DIR__
);

Ora possiamo creare un nostro CSV di traduzione. Se ne hai già uno all'interno della cartella del tema, qualcosa come app/design/<area>/<vendor>/<theme-name>/i18n/xx_XX.csvpuoi semplicemente spostarloapp/i18n/<project-name>/<xx_xx>/xx_XX.csv

Ora dal project document rootabbiamo bisogno di eseguire questi comandi:

find pub/static -name js-translation.json -exec rm -rf {} \;

Dobbiamo eliminare ciò js-translation.jsonche è già stato creato prima di eseguire ilsetup:static-content:deploy

Ora eseguiamo la distribuzione di contenuti statici:

php bin/magento setup:static-content:deploy <xx_XX>

Una volta fatto ciò cancelliamo la cache:

php bin/magento cache:clean
php bin/magento cache:flush

Possiamo verificare se i file di traduzione per il modello JS sono stati generati trovando tutto js-translation.jsonall'interno della cartella pub / static.

find pub/static -name js-translation.json

Ciò fornirà l'elenco di tutti i file di traduzione generati per i modelli JS.

Riferimento:

  1. Magento DevDocs
  2. Problema relativo a Github

Nel mio progetto i js-translation.jsonfile vengono creati correttamente da distribuire contenuti statici anche se sono inseriti file .csv app/design/frontend/vendor/theme-name/i18n/xx_XX.csv. L'unica cura è eliminare tutto js-translation.jsonprima di eseguire la distribuzione di contenuto statico.
LucScu,

In quale versione di magento sei su?
Atish Goswami,

Vender / Theme quindi da questo quale dovrebbe essere <project-name> secondo il codice sopra ??
Kaushal Suthar,

1
È davvero l'unico modo per farlo? Voglio dire, anche la documentazione ( devdocs.magento.com/guides/v2.1/frontend-dev-guide/translations/… ) afferma che dovremmo essere in grado di inserire i file di traduzione design/<vender>/<theme>/i18n/xx_XX.csv.
Giel Berkers,

1
Magento 2 ha molti bug correlati a questo, per noi il modo migliore è stato creare manualmente uno script che crea il js-translation.jsonfile e fare la configurazione del web server che lo consegna sui giusti tipi di richieste
cjohansson,

1

Come ho descritto nel numero di Github ( https://github.com/magento/magento2/issues/7525#issuecomment-316690100 ) esiste un'altra (più semplice) soluzione a questo problema.

Devi solo assicurarti di distribuire ogni lingua separatamente.

Quindi invece di usare:

php bin/magento setup:static-content:deploy en_US de_DE it_IT fr_FR es_ES

uso

php bin/magento setup:static-content:deploy en_US
php bin/magento setup:static-content:deploy de_DE
php bin/magento setup:static-content:deploy it_IT
php bin/magento setup:static-content:deploy fr_FR
php bin/magento setup:static-content:deploy es_ES

Ciò è probabilmente dovuto al fatto che l' static-content:deployunico compila i file una volta e li copia in seguito in altre lingue.

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.