J'ai fait la liste de contrôle suivante:
Bien que dans mon fichier de modèle twig,
{{ 'message'|trans }}
ne traduit jamais.
Où puis-je chercher ensuite pour que les traductions fonctionnent?
Y a-t-il une chance que Doctrine Translatable Extension que j'utilise génère une sorte de conflit?
Dans Symfony 3.0, j'ai dû vider le cache:
php bin/console cache:clear
Je vois que tu l'as déjà fait, peut-être que ça aide d'autres comme moi.
Avez-vous activé le service Translator dans votre fichier de configuration ??
framework:
translator: { fallback: en }
Le catalogue de langues est créé dans votre dossier de cache, que votre traducteur soit activé ou non.
Avez-vous essayé de traduire dans votre contrôleur ??
$translatedMessage = $this->get('translator')->trans('message');
Essayez de spécifier le domaine . Si vous ne spécifiez pas de domaine par défaut, il s'agit d'un message.
{{ 'message'|trans({}, 'some_domain') }}
Ensuite, les traductions peuvent être trouvées dans
Par exemple some_domain.fr.yml
. La dernière étape consiste à configurer vos paramètres régionaux. Vous pouvez obtenir les paramètres régionaux actuels à partir de la demande avec $request->getLocale()
P.S. essayez de rm -r app/cache
pour vous assurer que le cache est supprimé
Je pouvais utiliser l'une des traductions, mais pas l'autre et je ne savais pas pourquoi. Si vous avez également des problèmes avec les traductions, lisez ceci.
Tout d'abord, liste de contrôle standard:
php app/console cache:clear
.$this->getRequest()->setLocale('en');
dans le contrôleur, vous pouvez également essayer d'utiliser $this->get('translator')->trans('Some message');
directement dans votre contrôleur.Attention à BOM
dans le fichier traduit. Le traducteur qui traduit le fichier yml a utilisé UTF8, ce qui est correct, mais l'éditeur a utilisé la nomenclature à feuilles au début du fichier. Ceci est dangereux probablement à cause de bogue UTF8 BOM de PHP car il ajoute quelques caractères invisibles à la première section de votre fichier.
Btw, débogage de vos traductions peut également être très utile.
Selon la page de documentation de Symfony Translations , si vous n'utilisez pas Conteneur de service à des fins de traduction, voici les étapes simples à suivre:
Activer et configurer le service de traduction de Symfony.
YAML
framework:
translator: { fallbacks: [en] }
PHP
$container->loadFromExtension('framework', array(
'translator' => array('fallbacks' => array('en')),
));
Chaînes abstraites (c'est-à-dire "messages") en les enveloppant dans des appels au traducteur (" Traduction de base ").
public function indexAction()
{
$translated = $this->get('translator')->trans('Symfony is great');
return new Response($translated);
}
Créer des ressources/fichiers de traduction pour chaque paramètre régional pris en charge qui traduit chaque message dans l'application.
Symfony recherche les fichiers de messages (c'est-à-dire les traductions) dans les emplacements par défaut suivants:
app/Resources/translations
répertoire;app/Resources/<bundle name>/translations
répertoire;les Resources/translations/
répertoire à l'intérieur de n'importe quel bundle.
Nom du fichier de traduction
Le nom de fichier des fichiers de traduction est également important: chaque fichier de message doit être nommé selon le chemin suivant: domaine . locale . chargeur (par exemple nom de fichier: navigation.en.xlf
):
domaine: une façon facultative d'organiser les messages en groupes (par exemple admin
, navigation
ou la valeur par défaut messages
) - voir tilisation des domaines de message ;
paramètres régionaux: paramètres régionaux pour lesquels les traductions sont effectuées (par exemple en_GB, en, etc.); chargeur: comment Symfony doit charger et analyser le fichier (par exemple xlf, php, yml, etc.).
Le chargeur peut être le nom de tout chargeur enregistré. Par défaut, Symfony fournit de nombreux chargeurs, notamment:
xlf
: [~ # ~] xliff [~ # ~] fichier;php
: [~ # ~] php [~ # ~] fichier;yml
: [~ # ~] yaml [~ # ~] fichier.
Le choix du chargeur à utiliser dépend entièrement de vous et est une question de goût. L'option recommandée est d'utiliser xlf
pour les traductions .
Déterminez, définissez et gérez les paramètres régionaux de l'utilisateur pour la demande et facultativement sur toute la session de l'utilisateur .
Vider le cache:
php bin/console c:c
Le processus de traduction
Pour traduire réellement le message, Symfony utilise un processus simple:
Je peux déjà répondre à vos 2 questions:
1: vous pouvez regarder
https://github.com/symfony/symfony/blob/master/src/Symfony/Bridge/Twig/Extension/TranslationExtension.php#L97https://github.com/ symfony/symfony/blob/master/src/Symfony/Bundle/FrameworkBundle/Translation/Translator.phphttps://github.com/symfony/symfony/blob/master/src/Symfony/Component/ Translation/Translator.php # L174
2: Si vous parlez des extensions gedmo doctrine, ou Knplabs DoctrineBehaviors, non, il n'y a aucun moyen que cela entre en conflit avec le traducteur de symfonys. Ce sont 2 pièces indépendantes.
Je viens de faire face au même problème et je l'ai résolu par $this->get('translator')->setLocale('fr');
dans l'action du contrôleur. Je l'ai corrigé en ajoutant {_locale}
dans le chemin de l'itinéraire.
Cela m'a aidé à le faire fonctionner, car l'effacement du cache n'a pas aidé non plus.
Symfony 4.6.2:
Essayez cette commande pour mettre à jour les fichiers de traduction:
php bin/console translation:update --dump-messages --force de
(Source: https://symfony.com/doc/current/translation.html#configuration )