angle-uparrow-clockwisearrow-counterclockwisearrow-down-uparrow-leftatcalendarcard-listchatcheckenvelopefolderhouseinfo-circlepencilpeoplepersonperson-fillperson-plusphoneplusquestion-circlesearchtagtrashx

La solution de repli multilingue a été revue et un pied de page avec des liens multilingues a été ajouté.

Conservez le titre traduit et l'image traduite à un seul endroit et cochez-les pour qu'ils puissent être utilisés même si le reste de l'élément n'est pas valide.

14 septembre 2019
post main image
unsplash.com/@olidale

Avant de poursuivre votre lecture, vous voudrez peut-être lire mon article précédent sur le repli linguistique, voir le lien ci-dessous. Voici un exemple de la complexité du multilinguisme. Le lien doit être affiché dans la langue que vous utilisez en ce moment... une autre fois.

La vie est une longue et grande séquence de problèmes que nous résolvons tout le temps. Cela commence par l'obtention d'assez d'oxygène, résolu par la respiration, peut-être en second lieu les bogues et l'architecture incomplète en tant que développeur et programmeur. Quoi qu'il en soit, il était temps de mettre en place un pied de page multilingue, c'est la partie inférieure de la page avec des liens vers des pages comme About, Contact, Conditions d'utilisation, Politique de confidentialité. Pour un véritable site multilingue, ces liens doivent être dans la langue sélectionnée.

J'ai commencé avec deux tables et j'ai créé une nouvelle partie de l'administrateur pour les gérer :

FooterItem
FooterItemTranslation de FooterItem

En utilisant l'administrateur, je crée un élément de pied de page et j'y ajoute un ou plusieurs enregistrements de langue, pour chaque langue un enregistrement de traduction est ajouté. Ma première pensée a été de spécifier le nom et la taille d'une page ici, je veux dire, une page peut ne pas être disponible dans la langue sélectionnée et nous voulons revenir à la langue de repli. Le nom du lien traduit (titre de la page) et le slug doivent être stockés quelque part.

Cependant, lors de la construction de la requête pour sélectionner les pages, j'ai trouvé cela beaucoup trop complexe parce que maintenant je devais non seulement interroger les tables content_item et content_item mais aussi la table footer_item et footer_item_translation. Ce n'est pas exactement ce que j'avais en tête, je suis programmeur et je préfère KISS.

Ma solution pour réduire la complexité est d'abuser à nouveau de l'enregistrement content_item_translation, la dernière fois que j'ai ajouté le drapeau'do_not_fallback' et maintenant j'ajoute un autre drapeau:'can_use_slug'. La signification est la suivante :

  • Lorsque l'enregistrement content_item_translation n'existe pas, nous revenons à la langue de repli.
  • Lorsque l'enregistrement content_item_translation existe et est publié, nous l'utilisons.
  • Lorsque l'enregistrement content_item_translation existe mais n'est pas publié, nous avons deux conditions : - do_not_fallback
    , si True, l'élément n'est pas disponible.
    - can_use_slug, si do_not_fallback est False, et can_use_slug est True, nous pouvons utiliser le titre et le slug de l'enregistrement content_item_translation.

Ce qui est bien, c'est que nous pouvons maintenant construire un vrai pied de page multilingue, avec des liens multilingues même si la page n'est pas publiée, seulement en traduisant et en ajoutant le titre de la page et la limace à l'enregistrement content_item_translation et en mettant le drapeau can_use_slug. Le titre et l'image de la page ne se trouvent qu'à un seul endroit.

Un bonus est que nous pouvons aussi l'utiliser lorsque nous montrons la page pour afficher le titre de la page dans la langue sélectionnée pendant que les autres parties restent en anglais. Vous pouvez le vérifier en consultant la page Conditions d'utilisation de ce site Web en plusieurs langues. Cette page n'est disponible qu'en anglais mais nous avons encore des liens multilingues dans le pied de page et un titre multilingue.

L'implémentation est comme l'objet cache et l'objet paramètres décrits dans les messages précédents et bien sûr utilise la mise en cache, pas besoin de générer le pied de page à chaque requête. Aucun code dans ce post, il faut d'abord faire un peu de nettoyage...

Liens / crédits

Refining multilanguage: adding language fallback as an option
/en/blog/refining-multilanguage-adding-language-fallback-as-an-option

En savoir plus...

Multilanguage

Laissez un commentaire

Commentez anonymement ou connectez-vous pour commenter.

Commentaires

Laissez une réponse

Répondez de manière anonyme ou connectez-vous pour répondre.