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?

Atish Goswami
la source

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
Atish Goswami
la source
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.

FaHu
la source