Magento2 traduisant le texte du modèle Javascript (KO)


24

J'essaye d'ajouter une traduction pour le texte <!-- ko i18n: 'Store credit available' --><!-- /ko -->présent dans vendor/magento/module-customer-balance/view/frontend/web/template/payment/customer-balance.html, mais si j'essaye de changer le texte dans mon i18n/en_US.csv, cela ne fonctionne toujours pas.

J'ai vidé le cache et utilisé le déploiement de contenu statique.

Existe-t-il une manière différente d'ajouter des traductions pour les modèles KO?

Réponses:


39

J'ai donc finalement pu comprendre le problème.

Semble que la traduction du modèle JS est lue à partir de js-translation.jsonlaquelle est générée pendant l' setup:static-content:deployexécution. Afin de remplir les données de ce fichier, un nouveau module linguistique doit être créé pour le projet.

Donc, au lieu d'ajouter le CSV au niveau du thème, comme app/design/<area>/<vendor>/<theme-name>/i18n/xx_XX.csvnous devons l'ajouter dans le package de langue.

Pour créer un nouveau module linguistique à partir de, project document rootnous devons créer les répertoires suivants:

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

Important : UTILISER UNIQUEMENT LES NOMS DE RÉPERTOIRE en minuscules ne fonctionnera pas

Ensuite, changez de répertoire pour les dossiers nouvellement créés:

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

Vous pouvez maintenant créer un composer.jsonfichier (facultatif) avec le contenu suivant:

{                                                     
    "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"                        
        ]                                             
    }                                                 
}                                                     

Ensuite, créez un language.xmlfichier avec le contenu suivant:

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

Après cela, registration.phple contenu suivant est nécessaire:

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

Nous pouvons maintenant créer un CSV de traduction. Si vous en avez déjà un dans le dossier du thème, quelque chose comme app/design/<area>/<vendor>/<theme-name>/i18n/xx_XX.csvvous pouvez simplement le déplacer versapp/i18n/<project-name>/<xx_xx>/xx_XX.csv

Maintenant, à partir du, project document rootnous devons exécuter ces commandes:

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

Nous devons supprimer celui js-translation.jsonqui a déjà été créé avant d'exécuter lesetup:static-content:deploy

Maintenant, nous exécutons le déploiement de contenu statique:

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

Une fois cela fait, nous effaçons le cache:

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

Nous pouvons vérifier si les fichiers de traduction pour le modèle JS ont été générés en trouvant tout l' js-translation.jsonintérieur du dossier pub / statique.

find pub/static -name js-translation.json

Cela fournira la liste de tous les fichiers de traduction générés pour les modèles JS.

Référence:

  1. Magento DevDocs
  2. Problème lié à Github

Dans mon projet, les js-translation.jsonfichiers sont créés correctement à partir du contenu statique déployé même si des fichiers .csv sont insérés dans app/design/frontend/vendor/theme-name/i18n/xx_XX.csv. Le seul soin est de tout supprimer js-translation.jsonavant d'exécuter le déploiement de contenu statique.
LucScu

Sur quelle version de magento êtes-vous?
Atish Goswami

Vender / Theme donc à partir de ce que devrait être <project-name> selon votre code ci-dessus ??
Kaushal Suthar

1
Est-ce vraiment la seule façon de procéder? Je veux dire, même la documentation ( devdocs.magento.com/guides/v2.1/frontend-dev-guide/translations/… ) indique que nous devrions être en mesure de mettre des fichiers de traduction dedansdesign/<vender>/<theme>/i18n/xx_XX.csv .
Giel Berkers

1
Magento 2 a beaucoup de bogues liés à cela, pour nous, le meilleur moyen a été de créer manuellement un script qui crée le js-translation.jsonfichier et de faire une configuration de serveur Web qui le délivre sur les bons types de demandes
cjohansson

1

Comme je l'ai décrit dans le problème Github ( https://github.com/magento/magento2/issues/7525#issuecomment-316690100 ), il existe une autre solution (plus facile) à ce problème.

Vous devez juste vous assurer de déployer chaque langue séparément.

Donc au lieu d'utiliser:

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

utilisation

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

Cela est probablement dû au fait que le static-content:deployseul compile les fichiers une fois et les copie ensuite dans d'autres langues.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.