Details for a topic

Symfony 3 [Quiz 4] [Pile 2]

Traduction, Param Converters dans le FrameWork Symfony 3

All cards

Traduction

Comment éviter le message d'erreur:

"input is not proper UTF-8, indicate encoding"

lors de l'utilisation des fichiers de traduction?

Il faut s'assurer que les fichiers de traduction soient encodés en UTF8 sans BOM (Byte Order Mark)


Traduction

En ligne de commande, comment récupérer dans un fichier de traduction français au format YAML, toutes les chaines sources définies dans les vues d'un Bundle?

>php bin/console translation:update --force fr NomDuBundle


Traduction - Quelle est le différence entre ces deux lignes?
  1. >php bin/console translation:update --dump-messages fr NomDuBundle
  2. >php bin/console translation:update --force fr NomDuBundle
  • Ligne 1: Affiche dans la console tous les messages tels qu'ils seront dans un fichier de traduction en YAML, en tenant compte des messages déjà traduits en YAML et XLIFF.
  • Ligne 2: Effectue la mise à jour des fichiers de traduction et sauve les versions précédentes.

Traduction - Dans un fichier de traduction messages.fr.yml

Quand on lance la commande suivante, quels sont par défaut, les caractères qui précédent la chaine cible s'il n'y a pas de traduction?

>php bin/console translation:update --force fr NomDuBundle

Deux undercores __

Bonjour: __Bonjour


Traduction

Quand on lance la commande suivante, quel est par défault le nom du fichier de traduction, son format et son nom de domaine?

 

>php bin/console translation:update --force fr NomDuBundle

  • Nom du fichier: messages.fr.yml
  • Nom du domaine: messages
  • Format: Yaml

Traduction

 Que se passe-t-il si on lance la commande suivante et qu'un fichier messages.fr.xliff existe déjà?

 

>php bin/console translation:update --force fr NomDuBundle

  1. Un fichier messages.fr.yml sera créé.
  2. Tous le contenu du fichier messages.fr.xliff sera converti en yml et enregistré dans le fichier message.fr.yml
  3. Si on a ajouté des nouveaux messages à traduire dans nos templates ils seront ajoutés dans le fichier messages.fr.yml

Traduction - Que fait cette commande?

>php bin/console translation:update --prefix="..." --output-format="xliff" --force fr NomDuBundle

Dans le répertoire: NomDuBundle/Resources/translation
  • Création du fichier messages.fr.xliff
  • Les caractères qui précédent la chaine cible, s'il n'y a pas de traduction sont "..."

Bonjour: ...Bonjour


Traduction

Cette commande permetra-t-elle de supprimer les doublons situés dans les fichiers de traduction du catalogue?

>php bin/console translation:update --force fr NomDuBundle

Oui


Traduction

La traduction d'un site se fait-elle au début ou à la fin de sa conception?

A la fin


Traduction - Vrai ou Faux

Pour un site, il est conseillé de finaliser un fichier de traduction dans une langue avant de s'attaquer aux autres langues.

Vrai


Traduction - Commentez ces lignes de contrôleur

On récupère la variable locale située dans la requête du client.


Traduction - Commentez ces lignes

Toutes les routes définies dans le Bundle Core seront préfixées par la variable locale.


Quelles lignes ajouter pour n'accepter que le Français et l'Anglais

Traduction

Pour que nos fichiers de traduction soient plus lisibles et ordonnés est-il recommandé d'utiliser des mot-clés comme chaine source plutôt que du texte?

Oui

menu.top.title: Édition d'une annonce


Traduction - Ces deux parties sont-elles semblables

Oui


Traduction - Dans un template ces deux lignes sont-elles semblables
  • {% trans %}site.devise{% endtrans %}
  • {{ 'site.devise'|trans }}
Oui

Attention à la différence dans les guillemets


Dans nos fichiers de tradution cette organisation est-elle recommandée?

Oui


Traduction - Que permet de faire le sigle '>' dans ce fichier de traduction?

Le sigle '>' permet le retour à la ligne uniquement dans le fichier de traduction mais pas dans le code HTML.

Ainsi {{ 'mon Message'|trans|nl2br }} affichera dans la vue:

Bla1 Bla2 Bla3 Bla4 Bla5 Bla6


Traduction - Que permet de faire le sigle '|' dans ce fichier de traduction?

Le sigle '|' permet le retour à la ligne dans le fichier de traduction et ajoute aussi une nouvelle ligne dans le code HTML.

Anisi {{ 'mon Message'|trans|nl2br }} affichera dans la vue:

Bla1 Bla2 Bla3
Bla4 Bla5 Bla6


Traduction - Comment afficher cette liste dans un template?
  • {% for i in 0..1 %}
  • <p>{{ ('annuaire.adresses.' ~ i )|trans }}</p>
  • {% endfor %}

Traduction

Un tableau récupéré depuis le YAML commence par quel indice?

L'Indice zéro comme les tableaux PHP
  • {% for i in 0..1 %}
  • <p>{{ ('annuaire.adresses.' ~ i )|trans }}</p>
  • {% endfor %}

Traduction
  • Pour la traduction, à quoi correspond un domaine dans Symfony?
  • Quel est le domaine par défaut?
  • Un domaine correspond à un fichier de traduction.
  • Le domaine par défaut est messages

Traduction - Ces lignes font-elles la même chose?

Oui


Traduction

Citez 3 noms de domaine utilisés par Symfony.

  • messages
  • validators
  • date

 


Traduction
  • Peut-on avoir des fichiers de traduction d'un même domaine éparpillés dans différents Bundles?
  • Par exemple: un fichier messages.fr.yml dans le Bundle Toto et un fichier messages.fr.yml dans le Bundle Titi?
Oui
  • Au final Symfony additionne les chaines sources différentes pour former le catalogue de ce domaine.
  • Si deux chaines sources sont identiques, Symfony garde celle qui appartient au Bundle chargé en dernier.

Traduction - Commentez cette ligne située dans un template
Salut: Salut %nom% Tu vas bien?
  • Le domaine par défaut est 'messages'
  • La chaine source dans le fichier de traduction est 'Salut'
  • Le placeholder %nom% indique que la chaine cible contient une variable %nom%
  • La valeur de la variable %nom% sera la valeur de la variable NomDuClient passée au template par le contrôleur

 


Traduction

Quel est l'équivalent de cette ligne avec la balise {% trans %}


Traduction

Quel est l'équivalent de cette ligne dans un contrôleur?


Traduction - Ces lignes font-elles la même chose?

Oui


Traduction

Si l'on souhaite traduire les messages d'erreur de nos formulaires, quel domaine doit-on utiliser?

Le domaine validators

On place nos traductions dans les fichiers:

  • validators.fr.yml
  • validators.en.yml 
  • etc...

Traduction - Dans les fichiers de traduction du domaine validators

Quels sont les deux variables fournies par le service de validation des formulaires que l'on utilise à la place des placeholders?

{{ value }} et {{ limit }}

Ne pas oubliez les guillemets dans la chaine cible


Traduction - Commentez ces lignes
Gestion des pluriels
  • advert.nombre est le mot clé source
  • Si le placeholder %count% vaut 0 ou 1 alors la chaine cible au singulier est choisie
  • Si le placeholder %count% est >= à 2 alors la chaine cible au pluriel est choisie

Comment traduire 'advert.nombre' dans un template et un contrôleur?

L'Utilisation du placeholder %count% est-il obligatoire dans ce cas?

Oui


Traduction

Si l'on souhaite traduire les dates en lettres doit-on ajouter une extension au coeur de Twig?

Oui

>php composer.phar require twig/extensions


Traduction

Quelles sont les extensions disponibles aprés l'installation de Twig/extensions et les filtres supplémentaires qu'ils ajoutent?

  • Text: Fournit les filtres |truncate et |wordwrap pour manipuler le text
  • I18n: Ajoute un support d'internationalisation via la librairie gettext
  • Intl: Ajoute les filtres |localizeddate, |localizednumber, |localizedcurrency pour écrire en lettre l'objet DateTime, les nombres et la monaie d'un pays
  • Array: Fournit le filtre |shuffle pour mélanger un tableau
  • Date: Fournit le filtre |time_diff pour afficher le temps entre deux dates

Param Converter

Quelle est l'utilité des convertisseurs de paramètres?

Ils permettent d'agir sur les paramètres de requêtes avant qu'ils soient utilisés par le Contrôleur. Le résultat est récupéré comme argument dans la signature de l'action du contrôleur.

On peut par exemple:

  • Agir sur le format des paramètres
  • Transformer les paramètres en objets et donc en entités

Param Converter

Quels sont les deux convertisseurs de paramètres utilisables par défaut dans Symfony?

  • Le convertisseur: DoctrineParamConverter
  • Le convertisseur: DateTime

Param Converter

Peut-on créer nos propres param converters?

Oui


Param Converter

Lorsque l'on utilise DoctrineParamConverter, ce convertisseur peut-il lire la signature de la méthode du contrôleur pour déterminer le type de la variable que l'on souhaite et ainsi créer un attribut de requête du même type, que l'on récupèrera dans le contrôleur?

Oui


Si l'url /advert/{id} est liée au contrôleur suivant:

Comment le convertisseur de paramètres ''DoctrineParamConverter'' interprète la signature du contrôleur?

Le convertisseur de paramètres comprend qu'il doit sauver dans la variable $advert une instance de l'entité Advert dont l'id est défini dans l'url.


Param Converters

Quelles sont les deux méthodes dont dispose le convertisseur de paramètres, pour déterminer le type de variable que l'on souhaite?

  1. Le convertisseur analyse la signature de la méthode du contrôleur dans laquelle on a spécifier le type que l'on souhaite.
  2. Le convertisseur analyse l'annotation @ParamConverter de l'action de contrôleur, dans laquelle on a définit les informations dont il a besoin.

Param Converters

Un convertisseur de paramètres est un écouteur qui écoute un événement du kernel.

De quel événement s'agit-il?

L'événement kernel.controller


Si l'url /advert/{advert_id} est liée au contrôleur suivant:

Comment le convertisseur de paramètres ''DoctrineParamConverter'' interprète l'annotation et la signature du contrôleur?

Le convertisseur de paramètres comprend qu'il doit sauver dans la variable $toto une instance de l'entité Advert dont l'id est égale à la valeur contenu dans le paramètre de route advert_id.

id est l'attribut de l'entité Advert.


Si l'url /list/{date} est liée au contrôleur suivant:

Comment le convertisseur de paramètres ''Datetime'' interprète l'annotation et la signature du contrôleur?

Le convertisseur ''Datetime'' comprend qu'il doit remplacer le paramètre de route ''date'' par une instance de \DateTime qui est égale à la valeur entrée dans l'url sous le format 2017-05-14.


Si l'url /{adv_id}/{app_id} est liée au contrôleur suivant:

Comment le convertisseur de paramètres ''DoctrineParamConverter'' interprète l'annotation et la signature du contrôleur?

Le convertisseur de paramètres comprend qu'il doit:

  1. Sauver dans la variable $application une instance de l'entité Application dont l'id est égale à la valeur contenue dans le paramètre de route app_id
  2. Sauver dans la variable $advert une instance de l'entité Advert dont l'id est égale à la valeur contenue dans le paramètre de route adv_id

Si l'url /{adv_id}/{skill_id} est liée au contrôleur suivant:

Comment le convertisseur de paramètres ''DoctrineParamConverter'' interprète l'annotation et la signature du contrôleur?

Le convertisseur de paramètres comprend qu'il doit:

  1. Sauver dans la variable $advertSkill une instance de l'entité AdvertSkill qui est définie par deux attributs: advert et skill
  2. Créer un attribut advert qui contient une instance de l'entité Advert dont l'id correspond au paramètre de route adv_id
  3. Créer un attribut skill qui contient une instance de l'entité Skill dont l'id correspond au paramètre de route skill_id

Param Converters

Notre propre convertisseur de paramètres est-il un service sur lequel on applique le tag ''request.param_converter''?

Oui

Param Converters

Quelle interface doit implémenter notre classe si l'on veut en faire un convertisseur de paramètres?

L'Interface ParamConverterInterface

Param Converters

Quel est le rôle des deux méthodes ''supports'' et ''apply'' que notre classe doit implémenter?

  • La méthode support() retourne true ou false pour convertir ou non, le paramètre en fonction de notre logique.
  • La méthode apply() effectue la convertion sur le paramètre de requête