Comment traduire un message d'erreur ou un texte JS dans Magento 2?

13

J'ai deux vues Le message d'erreur de validation js par défaut anglais et arabe doit être traduit en arabe, alors comment faire? Et j'ai aussi quelques textes personnalisés sur la façon de le faire.

J'ai créé un i18n pour l'arabe fonctionne bien si je fais l'écho dans un fichier PHTML ou PHP, de la même façon comment le briller en js également dans Magento 2

quelqu'un m'aide

Pradeep Kumar
la source

Réponses:

29

Vous pouvez traduire le message d'erreur js comme ceci

require([
'jquery', // jquery Library
'jquery/ui', // Jquery UI Library
'mage/translate' // Magento text translate (Validation message translte as per language)
], function($){ 
    $(window).load(function() {
        alert($.mage.__('Enter Your message here'));
    });
});

Utilisation de Magento2 mage/translate.jspour la traduction

Keyur Shah
la source
créé ar_KW.csv dans mon dossier module i18n dans celui traduit "Entrez votre message ici" dans mon ji essayé cela ne fonctionnait pas mais en phtml si je fais écho à mon texte traduit que j'affiche
Pradeep Kumar
Avez-vous vidé votre cache et déployé votre contenu statique? @PradeepKumar
Keyur Shah
Juste la réponse que je cherchais! +1
thdoan
Sachez que cela ne fonctionnera pas si vous l'utilisez directement dans des fichiers phtml. Magento analysera et traduira uniquement à partir des fichiers js et html.
eInyzant
Cela fonctionnera mais n'est pas le propre d'un code; vous avez besoin de mage / traduire mais ne l'utilisez pas. .
oliver de Cramer
10

Remarque supplémentaire: si vous devez inclure une variable à traduire (en js), vous pouvez utiliser ceci :

$.mage.__('Hello %1').replace('%1', yourVariable);
Roman Snitko
la source
7

Cela a fonctionné pour moi:

define(
    [
        'mage/translate'
    ],
    function (
        $tr
    ) {

        $tr('<your text>'),
    }
);
Sarfaraz bheda
la source
Référence: /vendor/magento/module-checkout/view/frontend/web/js/view/payment.js
Sarfaraz bheda
1
Très bien, mais le nom de variable pour le mage/translatedoit être $t, pas le $tr magento.stackexchange.com/questions/293771/…
Siarhey Uchukhlebau
5

après avoir creusé profondément, je connais le concept de localisation dans magento2

ci-dessous est la chose que vous devez suivre, dans mon site Web, nous avons deux vues en et ar_kw arabe

  1. Créer un package de langue http://devdocs.magento.com/guides/v2.0/config-guide/cli/config-cli-subcommands-i18n.html#config-cli-subcommands-xlate-example2

  2. pour obtenir toutes les phrases dont vous avez besoin pour exécuter la commande ex

    php D:\xampp\htdocs\magento2\bin\magento i18n:collect-phrases -o "D:\xampp\htdocs\magento2\app\code\Sugarcode\Test\i18n\ar_KW.csv" D:\xampp\htdocs\magento2\app\code\Sugarcode\Test

    il a mal lu mon module de test et créé un Sugarcode csv \ Test \ i18n \ ar_KW.csv

il obtiendra tout __('Some Text') and $.mage.__('Some Text')en js et préparera un csv

  1. traduisez maintenant le fichier nouvellement généré en arabe que vous pouvez conserver au nom du code de paramètres régionaux ar_KW.csv (il peut être à l'intérieur de votre module ou à l'intérieur de votre module de langue)
  2. supprimer le dossier var et exécuter bin\magento setup:static-content:deploy en_US ar_KW

  3. il créera tous les js avec le fichier js-translation.json dans chaque thème / ex luma / ar_KW, js-translation.json aura toutes les données traduites du côté js au format json chaque fois que vous voyez le msg d'erreur qu'il ne montre pas à partir de ce fichier seulement

Pradeep Kumar
la source
Bonjour, j'ai fait toutes les étapes selon votre réponse, le code que j'ai ajouté pour ex: alert ($. Mage .__ ('js test')); arrive correctement dans le fichier de langue, mais quand je change la traduction, le message js est toujours le même. Suis-je en train de manquer quelque chose?
Sunil Verma
2

cela génère une erreur si vous utilisez __ alors suivez le code ci-dessous

  require([
    'jquery', // jquery Library
    'mage/translate'
   ], function($,$t){ 
        $(window).load(function() {
            alert($t('Enter Your message here'));
        });
    });
Pradeep Kumar
la source
0

J'ai eu le même problème avec les traductions js, j'ai donc créé un nouveau module linguistique dans le app/i18n/...dossier et actualisé le cache.

Voir la traduction du problème dans les modèles JS .

g5wx
la source
0

Ajoutez dans un modèle .phtml votre message d'erreur comme:
<?php echo __('This is a required field.'); ?>
- actif traduire en ligne
- traduire

terminé

Thibault LHOTELLIER
la source
Pourriez-vous ajouter quelques détails supplémentaires pour savoir comment et pourquoi cela fonctionne?
tjons