web-dev-qa-db-fra.com

Les liens du menu ne sont pas traduits

J'ai installé Drupal 7 et aussi les modules d'internationalisation. Je suis capable d'ajouter un site de base et de le traduire. Je peux même choisir d'ajouter des alias d'URL localisés qui fonctionnent bien lors du changement de langue. Celui la traduction du menu ne fonctionne pas. Lors de la traduction d'un article, je peux choisir un nom de menu différent pour chaque langue - mais seule la version anglaise est affichée dans le menu pour toutes les langues.

Quelqu'un sait pourquoi cela pourrait être?

7
dmeu

Voici ce que je comprends avec l'actuel Drupal 7.32. Le comportement de l'i18n dans Drupal dépend fortement des paramètres, donc je mentionne la façon dont je suis assez Si vos paramètres sont différents, le comportement peut être différent.

Première, i18n_menu doit être activé, ainsi que i18n_node (Je comprends que certaines personnes préfèrent la traduction d'entité, dont le comportement doit être différent, mais je ne le sais pas).

Deuxièmement, donnez à "URL" avec "préfixe de chemin" la priorité absolue à /admin/config/regional/language/configure. En outre, personnellement, je préfère de loin définir explicitement le préfixe du chemin pour la langue par défaut (généralement l'anglais, "en") à /admin/config/regional/language/edit/en. Par défaut, il s'agit de Null et je trouve cela assez déroutant en raison de sa nature intrinsèquement asymétrique. Cela dit, c'est à chaque développeur, évidemment!

Troisièmement, "Mode de traduction" dans /admin/structure/menu/manage/main-menu/edit C'est la clé. Par défaut, il s'agit de "Aucune option multilingue pour les éléments de menu". Évidemment, ce n'est pas bon pour les menus traduisibles. Choisissez l'une des deux options suivantes, c'est-à-dire (1) "Traduire et localiser". et (2) "Langue fixe".

Je pense que la deuxième option (2) convient à la plupart des sites, à moins que les structures de menu pour toutes les langues prises en charge sur le site Web ne soient identiques. Si vous choisissez (2), créez simplement un autre menu, par exemple, "Menu principal français", cochez la "Langue fixe" comme français, et placez-le dans la zone que vous aimez dans la configuration de bloc /admin/structure/block

Si vous choisissez le premier (1) "Traduire et localiser", vous verrez alors l'onglet "TRADUIRE" (près du haut) dans /admin/structure/menu/manage/main-menu/edit (pour le menu principal, par exemple) et peut désormais traduire chaque lien de la colonne "traduire" (à droite?) à /admin/structure/menu/manage/main-menu.

Maintenant, il y a plus d'une option, dépendant entièrement de ce que vous voulez réaliser dans le menu. Par exemple, supposons qu'il existe un nœud "Hello" et son nœud de traduction en français "Bonjour" (ce sont deux nœuds différents, disons, les nœuds 1 et 2, respectivement). Souhaitez-vous fournir les deux liens pour "Bonjour" et "Bonjour" dans le menu (lorsqu'ils sont affichés dans les deux langues)? Ou souhaitez-vous fournir le lien "Bonjour" pour le mode anglais/lecteurs, et celui pour "Bonjour" pour le mode français? (Telle est la complexité des sites multilingues ...)

Supposons que vous préfériez la deuxième option. Par exemple, préparez un lien de menu unique pour "Bonjour/Bonjour" dans le menu principal; c'est-à-dire que le plan est, "Bonjour" -menu lié à "Hello" -node (= 1) apparaît si affiché en anglais, et "Bonjour" -menu lié à "Bonjour" -node (= 2) apparaît s'il est affiché dans Français.

Vous créez d'abord le lien du menu "Bonjour", lié au nœud 1. Deuxièmement, via l'onglet "TRADUIRE" susmentionné dans /admin/structure/menu/manage/main-menu/edit, vous saisissez le titre traduit par "Bonjour" et n'oubliez pas de modifier le lien vers Node = 2 pour que le menu "Bonjour" pointe correctement vers l'article "Bonjour" en français.

Maintenant, si vous affichez un autre nœud français ("Au revoir" par exemple) en français (le préfixe du chemin doit être /fr/), vous verrez le menu de "Bonjour", qui est lié au nœud français "Bonjour". Si vous voyez sa traduction anglaise ("Good Bye") en mode anglais (le préfixe de chemin ne doit pas être /fr/), le menu ci-dessus est "Bonjour", qui est lié au nœud anglais "Bonjour". Le travail est terminé.

La chose est, je pense qu'il est plus simple de définir les alias de chemin pour chaque contenu (un alias de chemin unique pour un ensemble de nœuds pour toutes les traductions), et essentiellement d'abandonner en utilisant la forme de liens de type nœud comme /node/2 entièrement. Dans l'exemple mentionné ci-dessus, supposons que vous définissiez le chemin-alias de artilce/hello pour le nœud 1 (anglais; ne définissez pas d'alias de chemin différent pour le nœud 2, français, car cela ajouterait une confusion). Maintenant, en accédant à /fr/artilce/hello, vous pouvez voir le nœud de "Bonjour" avec le menu français. Cependant, si vous accédez à /fr/node/1, ce que vous verrez est le nœud anglais "Hello" (= 1), tandis que le menu ci-dessus est en français "Bonjour". C'est parce que le nœud = 1 est écrit en anglais, alors que vous visualisez le contenu dans l'environnement français, ce qui force le menu à être en français (si vous avez activé la localisation, d'autres parties comme le menu utilisateur deviennent également français, mais pas le contenu principal).

Pour certaines personnes, c'est peut-être ce qu'ils veulent. Par exemple, un site d'achat en français peut offrir une interface en anglais pour le panier, etc., alors qu'il ne peut pas être dérangé de traduire la description de chaque article à vendre. Je suppose que c'est pourquoi l'i18n dans Drupal est conçu comme ça.

Enfin, vous souhaiterez peut-être "vider tous les caches" fréquemment, pendant que vous modifiez les paramètres, pour vous assurer que toute modification que vous avez apportée se reflète dans ce que vous voyez.

6
Masa Sakano

Je suis sûr que vous devez activer le sous-module Traduction de menu i18n , qui fait partie du module Internationalisation .

Modifiez le menu et choisissez le mode de traduction souhaité. J'utilise Traduire et localiser.

Ensuite, lorsque vous modifiez un lien de menu, il devrait y avoir un nouvel onglet pour Traduire . De là, vous pouvez ajouter l'entrée de menu traduite. Après cela, vous verrez l'entrée de menu. Si vous ne pouvez pas traduire l'option, modifiez le nœud principal, puis enregistrez-le à nouveau. Cela forcera généralement l'élément de menu à avoir une langue attribuée.

Ensuite, vous pouvez organiser vos liens de menu selon vos besoins. J'utilise des alias d'URL parent/enfant basés sur la hiérarchie des menus, donc je crée une arborescence de menus miroir.

Lorsque vous ajoutez le menu à une page, seuls les liens pour la langue actuelle s'affichent.

En remarque, Drupal 7 sites multilingues vaut bien le coût pour travailler sur votre premier site multilingue (en supposant que vous connaissez déjà Drupal bien).

4
mpdonadio

Notez que sur la page Langues> Sélection et détection, vous devez définir la méthode de détection sur URL pour l'interface utilisateur et le contenu. Je suppose que le menu tombe sous les paramètres de l'interface utilisateur. Ça m'a pris des heures pour m'en rendre compte. J'ai supposé que l'interface utilisateur était les pages d'administration du backend.

0
Jeff